From 365d51246cf71556ecbb49f1fc6592262d4d4d77 Mon Sep 17 00:00:00 2001 From: HyungKyu Song Date: Sat, 16 Feb 2013 01:03:32 +0900 Subject: Tizen 2.0 Release --- ABOUT-NLS | 1101 + CHANGES | 2927 + COPYING | 842 + CREDITS | 39 + ChangeLog | 90860 +++++++++++++++++++ GROUPS | 29 + INSTALL | 323 + Makefile.am | 312 + Makefile.in | 1792 + README | 20 + aclocal.m4 | 1344 + autodeps/aix.prov | 78 + autodeps/aix.req | 171 + autodeps/aix4.prov | 189 + autodeps/aix4.req | 99 + autodeps/amigaos.prov | 3 + autodeps/amigaos.req | 3 + autodeps/darwin.prov | 21 + autodeps/darwin.req | 26 + autodeps/freebsd.prov | 9 + autodeps/freebsd.req | 22 + autodeps/freebsdelf.prov | 9 + autodeps/freebsdelf.req | 46 + autodeps/hpux.prov | 175 + autodeps/hpux.req | 126 + autodeps/irix6.prov | 201 + autodeps/irix6.req | 164 + autodeps/linux.prov | 61 + autodeps/linux.req | 136 + autodeps/mint.prov | 5 + autodeps/mint.req | 5 + autodeps/none | 3 + autodeps/openbsd.prov | 9 + autodeps/openbsd.req | 22 + autodeps/osf.prov | 188 + autodeps/osf.req | 142 + autodeps/solaris.prov | 14 + autodeps/solaris.req | 16 + autogen.sh | 20 + build/Makefile.am | 25 + build/Makefile.in | 678 + build/build.c | 304 + build/expression.c | 692 + build/files.c | 2171 + build/misc.c | 103 + build/pack.c | 822 + build/parseBuildInstallClean.c | 64 + build/parseChangelog.c | 245 + build/parseDescription.c | 113 + build/parseFiles.c | 99 + build/parsePolicies.c | 89 + build/parsePreamble.c | 1090 + build/parsePrep.c | 546 + build/parseReqs.c | 189 + build/parseScript.c | 389 + build/parseSpec.c | 698 + build/policies.c | 316 + build/reqprov.c | 123 + build/rpmbuild.h | 112 + build/rpmbuild_internal.h | 401 + build/rpmbuild_misc.h | 94 + build/rpmfc.c | 1405 + build/rpmfc.h | 113 + build/rpmspec.h | 88 + build/spec.c | 428 + cliutils.c | 79 + cliutils.h | 20 + config.guess | 1501 + config.h.in | 353 + config.rpath | 614 + config.sub | 1705 + configure | 27357 ++++++ configure.ac | 882 + db3/configure | 34 + debug.h | 22 + depcomp | 630 + doc/Makefile.am | 55 + doc/Makefile.in | 720 + doc/fr/rpm.8 | 844 + doc/gendiff.1 | 45 + doc/hacking.doxy.in | 1282 + doc/hacking/Doxyheader | 70 + doc/ja/rpm.8 | 1193 + doc/ja/rpm2cpio.8 | 47 + doc/ja/rpmbuild.8 | 315 + doc/ja/rpmgraph.8 | 74 + doc/ko/rpm.8 | 355 + doc/ko/rpm2cpio.8 | 33 + doc/librpm.doxy.in | 1255 + doc/librpm/Doxyheader | 56 + doc/librpm/html/Doxyheader.html | 53 + doc/librpm/html/Doxyheader_source.html | 50 + doc/librpm/html/annotated.html | 75 + doc/librpm/html/argv_8h.html | 237 + doc/librpm/html/argv_8h__incl.map | 2 + doc/librpm/html/argv_8h__incl.md5 | 1 + doc/librpm/html/argv_8h__incl.png | Bin 0 -> 4688 bytes doc/librpm/html/argv_8h_source.html | 120 + doc/librpm/html/bc_s.png | Bin 0 -> 677 bytes doc/librpm/html/classes.html | 55 + doc/librpm/html/cliutils_8c.html | 256 + doc/librpm/html/cliutils_8c__incl.map | 6 + doc/librpm/html/cliutils_8c__incl.md5 | 1 + doc/librpm/html/cliutils_8c__incl.png | Bin 0 -> 32342 bytes doc/librpm/html/cliutils_8c_source.html | 128 + doc/librpm/html/cliutils_8h.html | 211 + doc/librpm/html/cliutils_8h__dep__incl.map | 9 + doc/librpm/html/cliutils_8h__dep__incl.md5 | 1 + doc/librpm/html/cliutils_8h__dep__incl.png | Bin 0 -> 12246 bytes doc/librpm/html/cliutils_8h__incl.map | 2 + doc/librpm/html/cliutils_8h__incl.md5 | 1 + doc/librpm/html/cliutils_8h__incl.png | Bin 0 -> 5242 bytes doc/librpm/html/cliutils_8h_source.html | 69 + doc/librpm/html/closed.png | Bin 0 -> 126 bytes doc/librpm/html/config_8h.html | 1290 + doc/librpm/html/config_8h_source.html | 403 + doc/librpm/html/debug_8h.html | 193 + doc/librpm/html/debug_8h__dep__incl.map | 10 + doc/librpm/html/debug_8h__dep__incl.md5 | 1 + doc/librpm/html/debug_8h__dep__incl.png | Bin 0 -> 15762 bytes doc/librpm/html/debug_8h__incl.map | 2 + doc/librpm/html/debug_8h__incl.md5 | 1 + doc/librpm/html/debug_8h__incl.png | Bin 0 -> 2251 bytes doc/librpm/html/debug_8h_source.html | 69 + doc/librpm/html/deprecated.html | 98 + doc/librpm/html/doxygen.css | 835 + doc/librpm/html/doxygen.png | Bin 0 -> 3942 bytes doc/librpm/html/files.html | 97 + doc/librpm/html/functions.html | 387 + doc/librpm/html/functions_vars.html | 387 + doc/librpm/html/globals.html | 154 + doc/librpm/html/globals_0x61.html | 176 + doc/librpm/html/globals_0x62.html | 115 + doc/librpm/html/globals_0x63.html | 121 + doc/librpm/html/globals_0x64.html | 103 + doc/librpm/html/globals_0x65.html | 105 + doc/librpm/html/globals_0x66.html | 227 + doc/librpm/html/globals_0x67.html | 91 + doc/librpm/html/globals_0x68.html | 496 + doc/librpm/html/globals_0x69.html | 140 + doc/librpm/html/globals_0x6b.html | 91 + doc/librpm/html/globals_0x6c.html | 97 + doc/librpm/html/globals_0x6d.html | 190 + doc/librpm/html/globals_0x6e.html | 97 + doc/librpm/html/globals_0x6f.html | 96 + doc/librpm/html/globals_0x70.html | 756 + doc/librpm/html/globals_0x71.html | 173 + doc/librpm/html/globals_0x72.html | 3099 + doc/librpm/html/globals_0x73.html | 142 + doc/librpm/html/globals_0x74.html | 100 + doc/librpm/html/globals_0x75.html | 139 + doc/librpm/html/globals_0x76.html | 169 + doc/librpm/html/globals_0x77.html | 97 + doc/librpm/html/globals_0x78.html | 106 + doc/librpm/html/globals_defs.html | 129 + doc/librpm/html/globals_defs_0x62.html | 84 + doc/librpm/html/globals_defs_0x64.html | 84 + doc/librpm/html/globals_defs_0x65.html | 87 + doc/librpm/html/globals_defs_0x66.html | 84 + doc/librpm/html/globals_defs_0x68.html | 273 + doc/librpm/html/globals_defs_0x69.html | 93 + doc/librpm/html/globals_defs_0x6c.html | 87 + doc/librpm/html/globals_defs_0x6d.html | 102 + doc/librpm/html/globals_defs_0x6e.html | 87 + doc/librpm/html/globals_defs_0x70.html | 180 + doc/librpm/html/globals_defs_0x72.html | 426 + doc/librpm/html/globals_defs_0x73.html | 102 + doc/librpm/html/globals_defs_0x75.html | 93 + doc/librpm/html/globals_defs_0x76.html | 90 + doc/librpm/html/globals_defs_0x77.html | 90 + doc/librpm/html/globals_defs_0x78.html | 96 + doc/librpm/html/globals_enum.html | 277 + doc/librpm/html/globals_eval.html | 86 + doc/librpm/html/globals_eval_0x62.html | 83 + doc/librpm/html/globals_eval_0x63.html | 107 + doc/librpm/html/globals_eval_0x66.html | 134 + doc/librpm/html/globals_eval_0x68.html | 119 + doc/librpm/html/globals_eval_0x69.html | 113 + doc/librpm/html/globals_eval_0x6c.html | 83 + doc/librpm/html/globals_eval_0x6d.html | 135 + doc/librpm/html/globals_eval_0x70.html | 470 + doc/librpm/html/globals_eval_0x71.html | 149 + doc/librpm/html/globals_eval_0x72.html | 1094 + doc/librpm/html/globals_eval_0x73.html | 83 + doc/librpm/html/globals_eval_0x74.html | 86 + doc/librpm/html/globals_eval_0x75.html | 101 + doc/librpm/html/globals_eval_0x76.html | 152 + doc/librpm/html/globals_eval_0x78.html | 83 + doc/librpm/html/globals_func.html | 140 + doc/librpm/html/globals_func_0x62.html | 88 + doc/librpm/html/globals_func_0x63.html | 85 + doc/librpm/html/globals_func_0x64.html | 85 + doc/librpm/html/globals_func_0x65.html | 82 + doc/librpm/html/globals_func_0x66.html | 140 + doc/librpm/html/globals_func_0x67.html | 82 + doc/librpm/html/globals_func_0x68.html | 229 + doc/librpm/html/globals_func_0x69.html | 86 + doc/librpm/html/globals_func_0x6d.html | 88 + doc/librpm/html/globals_func_0x70.html | 134 + doc/librpm/html/globals_func_0x72.html | 1243 + doc/librpm/html/globals_func_0x73.html | 91 + doc/librpm/html/globals_func_0x74.html | 82 + doc/librpm/html/globals_func_0x75.html | 91 + doc/librpm/html/globals_type.html | 573 + doc/librpm/html/globals_vars.html | 289 + doc/librpm/html/graph_legend.html | 107 + doc/librpm/html/graph_legend.md5 | 1 + doc/librpm/html/graph_legend.png | Bin 0 -> 18827 bytes doc/librpm/html/group__header.html | 2325 + doc/librpm/html/group__header.map | 6 + doc/librpm/html/group__header.md5 | 1 + doc/librpm/html/group__header.png | Bin 0 -> 11260 bytes doc/librpm/html/group__rpmargv.html | 740 + doc/librpm/html/group__rpmbuild.html | 512 + doc/librpm/html/group__rpmbuild.map | 4 + doc/librpm/html/group__rpmbuild.md5 | 1 + doc/librpm/html/group__rpmbuild.png | Bin 0 -> 6070 bytes doc/librpm/html/group__rpmcli.html | 1336 + doc/librpm/html/group__rpmcli.map | 7 + doc/librpm/html/group__rpmcli.md5 | 1 + doc/librpm/html/group__rpmcli.png | Bin 0 -> 13692 bytes doc/librpm/html/group__rpmdb.html | 852 + doc/librpm/html/group__rpmdb.map | 6 + doc/librpm/html/group__rpmdb.md5 | 1 + doc/librpm/html/group__rpmdb.png | Bin 0 -> 11591 bytes doc/librpm/html/group__rpmds.html | 1190 + doc/librpm/html/group__rpmfc.html | 417 + doc/librpm/html/group__rpmfc.map | 3 + doc/librpm/html/group__rpmfc.md5 | 1 + doc/librpm/html/group__rpmfc.png | Bin 0 -> 3361 bytes doc/librpm/html/group__rpmfi.html | 1556 + doc/librpm/html/group__rpmfileutil.html | 679 + doc/librpm/html/group__rpmfileutil.map | 3 + doc/librpm/html/group__rpmfileutil.md5 | 1 + doc/librpm/html/group__rpmfileutil.png | Bin 0 -> 3826 bytes doc/librpm/html/group__rpmgi.html | 45 + doc/librpm/html/group__rpmio.html | 748 + doc/librpm/html/group__rpmio.map | 3 + doc/librpm/html/group__rpmio.md5 | 1 + doc/librpm/html/group__rpmio.png | Bin 0 -> 3655 bytes doc/librpm/html/group__rpmkeyring.html | 383 + doc/librpm/html/group__rpmlog.html | 675 + doc/librpm/html/group__rpmmacro.html | 536 + doc/librpm/html/group__rpmpgp.html | 2646 + doc/librpm/html/group__rpmprob.html | 583 + doc/librpm/html/group__rpmps.html | 446 + doc/librpm/html/group__rpmrc.html | 380 + doc/librpm/html/group__rpmrc.map | 6 + doc/librpm/html/group__rpmrc.md5 | 1 + doc/librpm/html/group__rpmrc.png | Bin 0 -> 11139 bytes doc/librpm/html/group__rpmsq.html | 266 + doc/librpm/html/group__rpmstring.html | 525 + doc/librpm/html/group__rpmsw.html | 353 + doc/librpm/html/group__rpmtag.html | 530 + doc/librpm/html/group__rpmtd.html | 1154 + doc/librpm/html/group__rpmte.html | 1189 + doc/librpm/html/group__rpmte.map | 3 + doc/librpm/html/group__rpmte.md5 | 1 + doc/librpm/html/group__rpmte.png | Bin 0 -> 4158 bytes doc/librpm/html/group__rpmts.html | 2008 + doc/librpm/html/group__rpmts.map | 3 + doc/librpm/html/group__rpmts.md5 | 1 + doc/librpm/html/group__rpmts.png | Bin 0 -> 4053 bytes doc/librpm/html/group__rpmtypes.html | 667 + doc/librpm/html/group__rpmurl.html | 240 + doc/librpm/html/group__signature.html | 178 + doc/librpm/html/group__signature.map | 6 + doc/librpm/html/group__signature.md5 | 1 + doc/librpm/html/group__signature.png | Bin 0 -> 11473 bytes doc/librpm/html/header_8h.html | 342 + doc/librpm/html/header_8h__incl.map | 2 + doc/librpm/html/header_8h__incl.md5 | 1 + doc/librpm/html/header_8h__incl.png | Bin 0 -> 7716 bytes doc/librpm/html/header_8h_source.html | 212 + doc/librpm/html/index.html | 43 + doc/librpm/html/jquery.js | 54 + doc/librpm/html/modules.html | 72 + doc/librpm/html/nav_f.png | Bin 0 -> 159 bytes doc/librpm/html/nav_h.png | Bin 0 -> 97 bytes doc/librpm/html/open.png | Bin 0 -> 118 bytes doc/librpm/html/pages.html | 49 + doc/librpm/html/rpm2cpio_8c.html | 124 + doc/librpm/html/rpm2cpio_8c__incl.map | 5 + doc/librpm/html/rpm2cpio_8c__incl.md5 | 1 + doc/librpm/html/rpm2cpio_8c__incl.png | Bin 0 -> 21661 bytes doc/librpm/html/rpm2cpio_8c_source.html | 141 + doc/librpm/html/rpmbuild_8c.html | 1119 + doc/librpm/html/rpmbuild_8c__incl.map | 6 + doc/librpm/html/rpmbuild_8c__incl.md5 | 1 + doc/librpm/html/rpmbuild_8c__incl.png | Bin 0 -> 48570 bytes doc/librpm/html/rpmbuild_8c_source.html | 686 + doc/librpm/html/rpmbuild_8h.html | 153 + doc/librpm/html/rpmbuild_8h__incl.map | 2 + doc/librpm/html/rpmbuild_8h__incl.md5 | 1 + doc/librpm/html/rpmbuild_8h__incl.png | Bin 0 -> 5765 bytes doc/librpm/html/rpmbuild_8h_source.html | 112 + doc/librpm/html/rpmcallback_8h.html | 181 + doc/librpm/html/rpmcallback_8h__incl.map | 2 + doc/librpm/html/rpmcallback_8h__incl.md5 | 1 + doc/librpm/html/rpmcallback_8h__incl.png | Bin 0 -> 2868 bytes doc/librpm/html/rpmcallback_8h_source.html | 91 + doc/librpm/html/rpmcli_8h.html | 561 + doc/librpm/html/rpmcli_8h__incl.map | 2 + doc/librpm/html/rpmcli_8h__incl.md5 | 1 + doc/librpm/html/rpmcli_8h__incl.png | Bin 0 -> 18934 bytes doc/librpm/html/rpmcli_8h_source.html | 258 + doc/librpm/html/rpmdb_8c.html | 279 + doc/librpm/html/rpmdb_8c__incl.map | 6 + doc/librpm/html/rpmdb_8c__incl.md5 | 1 + doc/librpm/html/rpmdb_8c__incl.png | Bin 0 -> 21610 bytes doc/librpm/html/rpmdb_8c_source.html | 126 + doc/librpm/html/rpmdb_8h.html | 224 + doc/librpm/html/rpmdb_8h__incl.map | 2 + doc/librpm/html/rpmdb_8h__incl.md5 | 1 + doc/librpm/html/rpmdb_8h__incl.png | Bin 0 -> 4701 bytes doc/librpm/html/rpmdb_8h_source.html | 127 + doc/librpm/html/rpmds_8h.html | 425 + doc/librpm/html/rpmds_8h__incl.map | 2 + doc/librpm/html/rpmds_8h__incl.md5 | 1 + doc/librpm/html/rpmds_8h__incl.png | Bin 0 -> 5533 bytes doc/librpm/html/rpmds_8h_source.html | 189 + doc/librpm/html/rpmfc_8h.html | 139 + doc/librpm/html/rpmfc_8h__incl.map | 2 + doc/librpm/html/rpmfc_8h__incl.md5 | 1 + doc/librpm/html/rpmfc_8h__incl.png | Bin 0 -> 6168 bytes doc/librpm/html/rpmfc_8h_source.html | 104 + doc/librpm/html/rpmfi_8h.html | 576 + doc/librpm/html/rpmfi_8h__incl.map | 2 + doc/librpm/html/rpmfi_8h__incl.md5 | 1 + doc/librpm/html/rpmfi_8h__incl.png | Bin 0 -> 5841 bytes doc/librpm/html/rpmfi_8h_source.html | 254 + doc/librpm/html/rpmfileutil_8h.html | 118 + doc/librpm/html/rpmfileutil_8h__incl.map | 2 + doc/librpm/html/rpmfileutil_8h__incl.md5 | 1 + doc/librpm/html/rpmfileutil_8h__incl.png | Bin 0 -> 7767 bytes doc/librpm/html/rpmfileutil_8h_source.html | 105 + doc/librpm/html/rpmio_8h.html | 144 + doc/librpm/html/rpmio_8h__incl.map | 2 + doc/librpm/html/rpmio_8h__incl.md5 | 1 + doc/librpm/html/rpmio_8h__incl.png | Bin 0 -> 12340 bytes doc/librpm/html/rpmio_8h_source.html | 136 + doc/librpm/html/rpmkeyring_8h.html | 89 + doc/librpm/html/rpmkeyring_8h__incl.map | 2 + doc/librpm/html/rpmkeyring_8h__incl.md5 | 1 + doc/librpm/html/rpmkeyring_8h__incl.png | Bin 0 -> 5097 bytes doc/librpm/html/rpmkeyring_8h_source.html | 85 + doc/librpm/html/rpmkeys_8c.html | 280 + doc/librpm/html/rpmkeys_8c__incl.map | 6 + doc/librpm/html/rpmkeys_8c__incl.md5 | 1 + doc/librpm/html/rpmkeys_8c__incl.png | Bin 0 -> 21916 bytes doc/librpm/html/rpmkeys_8c_source.html | 133 + doc/librpm/html/rpmlegacy_8h.html | 60 + doc/librpm/html/rpmlegacy_8h__incl.map | 2 + doc/librpm/html/rpmlegacy_8h__incl.md5 | 1 + doc/librpm/html/rpmlegacy_8h__incl.png | Bin 0 -> 5119 bytes doc/librpm/html/rpmlegacy_8h_source.html | 158 + doc/librpm/html/rpmlib_8h.html | 353 + doc/librpm/html/rpmlib_8h__incl.map | 2 + doc/librpm/html/rpmlib_8h__incl.md5 | 1 + doc/librpm/html/rpmlib_8h__incl.png | Bin 0 -> 11296 bytes doc/librpm/html/rpmlib_8h_source.html | 130 + doc/librpm/html/rpmlog_8h.html | 590 + doc/librpm/html/rpmlog_8h__incl.map | 2 + doc/librpm/html/rpmlog_8h__incl.md5 | 1 + doc/librpm/html/rpmlog_8h__incl.png | Bin 0 -> 5766 bytes doc/librpm/html/rpmlog_8h_source.html | 235 + doc/librpm/html/rpmmacro_8h.html | 300 + doc/librpm/html/rpmmacro_8h__incl.map | 2 + doc/librpm/html/rpmmacro_8h__incl.md5 | 1 + doc/librpm/html/rpmmacro_8h__incl.png | Bin 0 -> 7600 bytes doc/librpm/html/rpmmacro_8h_source.html | 117 + doc/librpm/html/rpmpgp_8h.html | 628 + doc/librpm/html/rpmpgp_8h__incl.map | 2 + doc/librpm/html/rpmpgp_8h__incl.md5 | 1 + doc/librpm/html/rpmpgp_8h__incl.png | Bin 0 -> 9176 bytes doc/librpm/html/rpmpgp_8h_source.html | 561 + doc/librpm/html/rpmpol_8h.html | 137 + doc/librpm/html/rpmpol_8h__incl.map | 2 + doc/librpm/html/rpmpol_8h__incl.md5 | 1 + doc/librpm/html/rpmpol_8h__incl.png | Bin 0 -> 2523 bytes doc/librpm/html/rpmpol_8h_source.html | 72 + doc/librpm/html/rpmprob_8h.html | 167 + doc/librpm/html/rpmprob_8h__incl.map | 2 + doc/librpm/html/rpmprob_8h__incl.md5 | 1 + doc/librpm/html/rpmprob_8h__incl.png | Bin 0 -> 4686 bytes doc/librpm/html/rpmprob_8h_source.html | 120 + doc/librpm/html/rpmps_8h.html | 101 + doc/librpm/html/rpmps_8h__incl.map | 2 + doc/librpm/html/rpmps_8h__incl.md5 | 1 + doc/librpm/html/rpmps_8h__incl.png | Bin 0 -> 5823 bytes doc/librpm/html/rpmps_8h_source.html | 91 + doc/librpm/html/rpmqv_8c.html | 320 + doc/librpm/html/rpmqv_8c__incl.map | 6 + doc/librpm/html/rpmqv_8c__incl.md5 | 1 + doc/librpm/html/rpmqv_8c__incl.png | Bin 0 -> 29358 bytes doc/librpm/html/rpmqv_8c_source.html | 401 + doc/librpm/html/rpmsign_8c.html | 327 + doc/librpm/html/rpmsign_8c__incl.map | 6 + doc/librpm/html/rpmsign_8c__incl.md5 | 1 + doc/librpm/html/rpmsign_8c__incl.png | Bin 0 -> 28962 bytes doc/librpm/html/rpmsign_8c_source.html | 215 + doc/librpm/html/rpmsign_8h.html | 147 + doc/librpm/html/rpmsign_8h__incl.map | 2 + doc/librpm/html/rpmsign_8h__incl.md5 | 1 + doc/librpm/html/rpmsign_8h__incl.png | Bin 0 -> 4707 bytes doc/librpm/html/rpmsign_8h_source.html | 75 + doc/librpm/html/rpmspec_8c.html | 341 + doc/librpm/html/rpmspec_8c__incl.map | 6 + doc/librpm/html/rpmspec_8c__incl.md5 | 1 + doc/librpm/html/rpmspec_8c__incl.png | Bin 0 -> 26301 bytes doc/librpm/html/rpmspec_8c_source.html | 169 + doc/librpm/html/rpmspec_8h.html | 469 + doc/librpm/html/rpmspec_8h__incl.map | 2 + doc/librpm/html/rpmspec_8h__incl.md5 | 1 + doc/librpm/html/rpmspec_8h__incl.png | Bin 0 -> 4808 bytes doc/librpm/html/rpmspec_8h_source.html | 118 + doc/librpm/html/rpmsq_8h.html | 84 + doc/librpm/html/rpmsq_8h__incl.map | 2 + doc/librpm/html/rpmsq_8h__incl.md5 | 1 + doc/librpm/html/rpmsq_8h__incl.png | Bin 0 -> 4632 bytes doc/librpm/html/rpmsq_8h_source.html | 110 + doc/librpm/html/rpmstring_8h.html | 224 + doc/librpm/html/rpmstring_8h__incl.map | 2 + doc/librpm/html/rpmstring_8h__incl.md5 | 1 + doc/librpm/html/rpmstring_8h__incl.png | Bin 0 -> 5939 bytes doc/librpm/html/rpmstring_8h_source.html | 147 + doc/librpm/html/rpmsw_8h.html | 93 + doc/librpm/html/rpmsw_8h__incl.map | 2 + doc/librpm/html/rpmsw_8h__incl.md5 | 1 + doc/librpm/html/rpmsw_8h__incl.png | Bin 0 -> 4537 bytes doc/librpm/html/rpmsw_8h_source.html | 99 + doc/librpm/html/rpmtag_8h.html | 670 + doc/librpm/html/rpmtag_8h__incl.map | 2 + doc/librpm/html/rpmtag_8h__incl.md5 | 1 + doc/librpm/html/rpmtag_8h__incl.png | Bin 0 -> 2763 bytes doc/librpm/html/rpmtag_8h_source.html | 441 + doc/librpm/html/rpmtd_8h.html | 312 + doc/librpm/html/rpmtd_8h__incl.map | 2 + doc/librpm/html/rpmtd_8h__incl.md5 | 1 + doc/librpm/html/rpmtd_8h__incl.png | Bin 0 -> 4880 bytes doc/librpm/html/rpmtd_8h_source.html | 178 + doc/librpm/html/rpmte_8h.html | 164 + doc/librpm/html/rpmte_8h__incl.map | 2 + doc/librpm/html/rpmte_8h__incl.md5 | 1 + doc/librpm/html/rpmte_8h__incl.png | Bin 0 -> 4877 bytes doc/librpm/html/rpmte_8h_source.html | 136 + doc/librpm/html/rpmts_8h.html | 633 + doc/librpm/html/rpmts_8h__incl.map | 2 + doc/librpm/html/rpmts_8h__incl.md5 | 1 + doc/librpm/html/rpmts_8h__incl.png | Bin 0 -> 16786 bytes doc/librpm/html/rpmts_8h_source.html | 302 + doc/librpm/html/rpmtypes_8h.html | 242 + doc/librpm/html/rpmtypes_8h__incl.map | 2 + doc/librpm/html/rpmtypes_8h__incl.md5 | 1 + doc/librpm/html/rpmtypes_8h__incl.png | Bin 0 -> 4831 bytes doc/librpm/html/rpmtypes_8h_source.html | 128 + doc/librpm/html/rpmurl_8h.html | 86 + doc/librpm/html/rpmurl_8h_source.html | 77 + doc/librpm/html/rpmutil_8h.html | 632 + doc/librpm/html/rpmutil_8h__dep__incl.map | 11 + doc/librpm/html/rpmutil_8h__dep__incl.md5 | 1 + doc/librpm/html/rpmutil_8h__dep__incl.png | Bin 0 -> 17369 bytes doc/librpm/html/rpmutil_8h__incl.map | 2 + doc/librpm/html/rpmutil_8h__incl.md5 | 1 + doc/librpm/html/rpmutil_8h__incl.png | Bin 0 -> 1924 bytes doc/librpm/html/rpmutil_8h_source.html | 191 + doc/librpm/html/rpmvf_8h.html | 462 + doc/librpm/html/rpmvf_8h__incl.map | 2 + doc/librpm/html/rpmvf_8h__incl.md5 | 1 + doc/librpm/html/rpmvf_8h__incl.png | Bin 0 -> 2547 bytes doc/librpm/html/rpmvf_8h_source.html | 133 + doc/librpm/html/structARGI__s.html | 96 + doc/librpm/html/structpgpPktCdata__s.html | 96 + doc/librpm/html/structpgpPktEdata__s.html | 80 + doc/librpm/html/structpgpPktKeyV3__s.html | 162 + doc/librpm/html/structpgpPktKeyV4__s.html | 145 + doc/librpm/html/structpgpPktLdata__s.html | 112 + doc/librpm/html/structpgpPktOnepass__s.html | 182 + doc/librpm/html/structpgpPktPubkey__s.html | 137 + doc/librpm/html/structpgpPktSigV3__s.html | 228 + doc/librpm/html/structpgpPktSigV4__s.html | 167 + doc/librpm/html/structpgpPktSymkey__s.html | 127 + doc/librpm/html/structpgpPktTrust__s.html | 80 + doc/librpm/html/structpgpPktUid__s.html | 80 + doc/librpm/html/structrpmBuildArguments__s.html | 162 + doc/librpm/html/structrpmInstallArguments__s.html | 219 + .../structrpmInstallArguments__s__coll__graph.map | 3 + .../structrpmInstallArguments__s__coll__graph.md5 | 1 + .../structrpmInstallArguments__s__coll__graph.png | Bin 0 -> 3920 bytes doc/librpm/html/structrpmQVKArguments__s.html | 227 + .../html/structrpmQVKArguments__s__coll__graph.map | 2 + .../html/structrpmQVKArguments__s__coll__graph.md5 | 1 + .../html/structrpmQVKArguments__s__coll__graph.png | Bin 0 -> 5408 bytes doc/librpm/html/structrpmRelocation__s.html | 106 + doc/librpm/html/structrpmSignArgs.html | 96 + doc/librpm/html/structrpmop__s.html | 143 + doc/librpm/html/structrpmop__s__coll__graph.map | 3 + doc/librpm/html/structrpmop__s__coll__graph.md5 | 1 + doc/librpm/html/structrpmop__s__coll__graph.png | Bin 0 -> 2726 bytes doc/librpm/html/structrpmsw__s.html | 127 + doc/librpm/html/structrpmtd__s.html | 165 + doc/librpm/html/system_8h.html | 726 + doc/librpm/html/system_8h__dep__incl.map | 10 + doc/librpm/html/system_8h__dep__incl.md5 | 1 + doc/librpm/html/system_8h__dep__incl.png | Bin 0 -> 15612 bytes doc/librpm/html/system_8h__incl.map | 3 + doc/librpm/html/system_8h__incl.md5 | 1 + doc/librpm/html/system_8h__incl.png | Bin 0 -> 7476 bytes doc/librpm/html/system_8h_source.html | 200 + doc/librpm/html/tab_a.png | Bin 0 -> 140 bytes doc/librpm/html/tab_b.png | Bin 0 -> 178 bytes doc/librpm/html/tab_h.png | Bin 0 -> 192 bytes doc/librpm/html/tab_s.png | Bin 0 -> 189 bytes doc/librpm/html/tabs.css | 59 + doc/librpm/html/todo.html | 223 + doc/librpm/html/unionpgpPktKey__u.html | 138 + doc/librpm/html/unionpgpPktKey__u__coll__graph.map | 4 + doc/librpm/html/unionpgpPktKey__u__coll__graph.md5 | 1 + doc/librpm/html/unionpgpPktKey__u__coll__graph.png | Bin 0 -> 6025 bytes doc/librpm/html/unionpgpPktPre__u.html | 241 + doc/librpm/html/unionpgpPktPre__u__coll__graph.map | 16 + doc/librpm/html/unionpgpPktPre__u__coll__graph.md5 | 1 + doc/librpm/html/unionpgpPktPre__u__coll__graph.png | Bin 0 -> 46138 bytes doc/librpm/html/unionpgpPktSig__u.html | 112 + doc/librpm/html/unionpgpPktSig__u__coll__graph.map | 4 + doc/librpm/html/unionpgpPktSig__u__coll__graph.md5 | 1 + doc/librpm/html/unionpgpPktSig__u__coll__graph.png | Bin 0 -> 5601 bytes doc/manual/builddependencies | 178 + doc/manual/buildroot | 122 + doc/manual/conditionalbuilds | 106 + doc/manual/dependencies | 370 + doc/manual/format | 273 + doc/manual/hregions | 89 + doc/manual/macros | 258 + doc/manual/multiplebuilds | 47 + doc/manual/queryformat | 173 + doc/manual/relocatable | 57 + doc/manual/signatures | 83 + doc/manual/spec | 217 + doc/manual/triggers | 165 + doc/manual/tsort | 159 + doc/pl/gendiff.1 | 47 + doc/pl/rpm.8 | 892 + doc/pl/rpm2cpio.8 | 27 + doc/pl/rpmbuild.8 | 245 + doc/pl/rpmdeps.8 | 24 + doc/pl/rpmgraph.8 | 42 + doc/rpm.8 | 843 + doc/rpm2cpio.8 | 24 + doc/rpmbuild.8 | 256 + doc/rpmdb.8 | 48 + doc/rpmdeps.8 | 29 + doc/rpmgraph.8 | 45 + doc/rpmkeys.8 | 77 + doc/rpmsign.8 | 81 + doc/rpmspec.8 | 71 + doc/ru/rpm.8 | 943 + doc/ru/rpm2cpio.8 | 28 + doc/sk/rpm.8 | 624 + fileattrs/Makefile.am | 11 + fileattrs/Makefile.in | 526 + fileattrs/desktop.attr | 2 + fileattrs/elf.attr | 4 + fileattrs/font.attr | 3 + fileattrs/libtool.attr | 3 + fileattrs/mono.attr | 3 + fileattrs/ocaml.attr | 3 + fileattrs/perl.attr | 3 + fileattrs/perllib.attr | 3 + fileattrs/pkgconfig.attr | 3 + fileattrs/python.attr | 4 + fileattrs/script.attr | 3 + install-sh | 520 + installplatform | 155 + lib/Makefile.am | 173 + lib/Makefile.in | 1052 + lib/backend/db3.c | 617 + lib/backend/dbconfig.c | 268 + lib/backend/dbi.h | 270 + lib/cpio.c | 245 + lib/cpio.h | 133 + lib/depends.c | 596 + lib/formats.c | 705 + lib/fprint.c | 365 + lib/fprint.h | 170 + lib/fsm.c | 2332 + lib/fsm.h | 227 + lib/gentagtbl.sh | 80 + lib/header.c | 1761 + lib/header.h | 446 + lib/header_internal.h | 78 + lib/headerfmt.c | 868 + lib/headerutil.c | 245 + lib/legacy.c | 379 + lib/manifest.c | 175 + lib/manifest.h | 34 + lib/merge.c | 347 + lib/misc.c | 24 + lib/misc.h | 46 + lib/order.c | 655 + lib/package.c | 807 + lib/poptALL.c | 316 + lib/poptI.c | 252 + lib/poptQV.c | 246 + lib/psm.c | 1095 + lib/query.c | 575 + lib/rpmal.c | 406 + lib/rpmal.h | 75 + lib/rpmcallback.h | 47 + lib/rpmchecksig.c | 469 + lib/rpmchroot.c | 105 + lib/rpmchroot.h | 45 + lib/rpmcli.h | 401 + lib/rpmdb.c | 2956 + lib/rpmdb.h | 215 + lib/rpmdb_internal.h | 155 + lib/rpmds.c | 933 + lib/rpmds.h | 333 + lib/rpmfi.c | 1349 + lib/rpmfi.h | 459 + lib/rpmfi_internal.h | 172 + lib/rpmfs.c | 120 + lib/rpmfs.h | 63 + lib/rpmgi.c | 241 + lib/rpmgi.h | 65 + lib/rpmhash.C | 272 + lib/rpmhash.H | 145 + lib/rpminstall.c | 735 + lib/rpmlead.c | 141 + lib/rpmlead.h | 82 + lib/rpmlegacy.h | 241 + lib/rpmlib.h | 210 + lib/rpmliblua.c | 45 + lib/rpmliblua.h | 18 + lib/rpmlock.c | 125 + lib/rpmlock.h | 22 + lib/rpmplugins.c | 198 + lib/rpmplugins.h | 125 + lib/rpmpol.h | 28 + lib/rpmprob.c | 213 + lib/rpmprob.h | 148 + lib/rpmps.c | 172 + lib/rpmps.h | 110 + lib/rpmrc.c | 1710 + lib/rpmscript.c | 415 + lib/rpmscript.h | 42 + lib/rpmtag.h | 472 + lib/rpmtd.c | 443 + lib/rpmtd.h | 355 + lib/rpmte.c | 927 + lib/rpmte.h | 262 + lib/rpmte_internal.h | 154 + lib/rpmts.c | 1036 + lib/rpmts.h | 582 + lib/rpmts_internal.h | 108 + lib/rpmtypes.h | 112 + lib/rpmug.c | 202 + lib/rpmug.h | 18 + lib/rpmvercmp.c | 131 + lib/rpmvf.h | 103 + lib/signature.c | 534 + lib/signature.h | 79 + lib/tagexts.c | 705 + lib/tagname.c | 318 + lib/tagtbl.C | 186 + lib/transaction.c | 1471 + lib/verify.c | 516 + ltmain.sh | 9636 ++ luaext/Makefile.am | 19 + luaext/Makefile.in | 614 + luaext/linit.lua | 41 + luaext/lposix.c | 889 + luaext/lposix.h | 7 + luaext/lrexlib.c | 340 + luaext/lrexlib.h | 6 + luaext/modemuncher.c | 271 + luaext/userconfig.c | 57 + m4/gettext.m4 | 419 + m4/iconv.m4 | 101 + m4/lib-ld.m4 | 110 + m4/lib-link.m4 | 644 + m4/lib-prefix.m4 | 185 + m4/libtool.m4 | 7835 ++ m4/ltoptions.m4 | 369 + m4/ltsugar.m4 | 123 + m4/ltversion.m4 | 23 + m4/lt~obsolete.m4 | 98 + m4/nls.m4 | 31 + m4/po.m4 | 428 + m4/progtest.m4 | 92 + macros.in | 1074 + misc/Makefile.am | 14 + misc/Makefile.in | 597 + misc/fnmatch.c | 611 + misc/fnmatch.h | 85 + misc/fts.c | 1137 + misc/fts.h | 209 + misc/glob.c | 1160 + misc/glob.h | 196 + misc/stpcpy.c | 51 + misc/stpncpy.c | 101 + missing | 376 + mkinstalldirs | 161 + packaging/Makefile | 6 + packaging/autodeps.diff | 261 + packaging/beecrypt-4.1.2.diff | 46 + packaging/beecrypt-4.1.2.tar.bz2 | Bin 0 -> 563414 bytes packaging/build_pack_4.9.1_fix.patch | 39 + packaging/buildidprov.diff | 54 + packaging/db-4.8.30.tar.gz | Bin 0 -> 22887305 bytes packaging/db.diff | 82 + packaging/debugsource-package.diff | 73 + packaging/debugsubpkg.diff | 321 + packaging/device-sec-policy | 48 + packaging/disableperl.patch | 18 + packaging/eu-strip.patch | 69 + packaging/fileattrs.diff | 46 + packaging/find-docs.sh | 32 + packaging/finddebuginfo.diff | 119 + packaging/firmware.diff | 37 + packaging/fontprovides.diff | 50 + packaging/lib_rpmdb_4.9.1_fix.patch | 78 + packaging/libsymlink.attr | 4 + packaging/macros | 312 + packaging/mimetype.diff | 24 + packaging/no_rep_autop.diff | 12 + packaging/optflags.patch | 77 + packaging/pythondeps.diff | 44 + packaging/remove-translations.patch | 20 + packaging/rpm-4.5.90-gstreamer-provides.patch | 16 + packaging/rpm-4.5.90-pkgconfig-path.patch | 13 + packaging/rpm-4.7.90-devel-autodep.patch | 157 + packaging/rpm-4.8.0-tilde.patch | 61 + packaging/rpm-4.9.0-tizen-arm.patch | 88 + packaging/rpm-beecrypt.diff | 1725 + packaging/rpm-gst-provides.patch | 14 + packaging/rpm-macros.patch | 57 + packaging/rpm-python.manifest | 5 + packaging/rpm-python.spec | 78 + packaging/rpm-shorten-changelog.patch | 92 + packaging/rpm.changes | 117 + packaging/rpm.manifest | 5 + packaging/rpm.spec | 378 + packaging/rpmbuild_4.9.1_fix.patch | 24 + packaging/rpmbuild_rpmfc_4.9.1_fix.patch | 158 + packaging/rpmio_base64_4.9.1_fix.patch | 48 + packaging/rpmlib_format_value_4.9.1_fix.patch | 40 + packaging/security_4.9.1.patch | 5575 ++ platform.in | 145 + plugins/Makefile.am | 23 + plugins/Makefile.in | 658 + plugins/exec.c | 51 + plugins/plugin.h | 15 + plugins/sepolicy.c | 680 + po/ChangeLog | 6 + po/LINGUAS | 1 + po/Makefile.in.in | 403 + po/Makevars | 41 + po/POTFILES.in | 94 + po/Rules-quot | 47 + po/boldquot.sed | 10 + po/ca.gmo | Bin 0 -> 61642 bytes po/ca.po | 4497 + po/cs.gmo | Bin 0 -> 54654 bytes po/cs.po | 4184 + po/da.gmo | Bin 0 -> 32541 bytes po/da.po | 4269 + po/de.gmo | Bin 0 -> 61438 bytes po/de.po | 4443 + po/en@boldquot.header | 25 + po/en@quot.header | 22 + po/es.gmo | Bin 0 -> 69349 bytes po/es.po | 3905 + po/fi.gmo | Bin 0 -> 46851 bytes po/fi.po | 3767 + po/fr.gmo | Bin 0 -> 48936 bytes po/fr.po | 4373 + po/insert-header.sin | 23 + po/is.gmo | Bin 0 -> 7533 bytes po/is.po | 3720 + po/it.gmo | Bin 0 -> 68835 bytes po/it.po | 4289 + po/ja.gmo | Bin 0 -> 72437 bytes po/ja.po | 4428 + po/ko.gmo | Bin 0 -> 39896 bytes po/ko.po | 4286 + po/ms.gmo | Bin 0 -> 3820 bytes po/ms.po | 3703 + po/nb.gmo | Bin 0 -> 23316 bytes po/nb.po | 3891 + po/nl.gmo | Bin 0 -> 4708 bytes po/nl.po | 3476 + po/pl.gmo | Bin 0 -> 70480 bytes po/pl.po | 3532 + po/pt.gmo | Bin 0 -> 40620 bytes po/pt.po | 4290 + po/pt_BR.gmo | Bin 0 -> 64518 bytes po/pt_BR.po | 4688 + po/quot.sed | 6 + po/remove-potcdate.sin | 19 + po/rpm.pot | 3447 + po/ru.gmo | Bin 0 -> 45178 bytes po/ru.po | 4312 + po/sk.gmo | Bin 0 -> 11528 bytes po/sk.po | 4260 + po/sl.gmo | Bin 0 -> 14237 bytes po/sl.po | 4294 + po/sr.gmo | Bin 0 -> 72403 bytes po/sr.po | 3850 + po/sr@latin.gmo | Bin 0 -> 58066 bytes po/sr@latin.po | 3855 + po/stamp-po | 1 + po/sv.gmo | Bin 0 -> 55809 bytes po/sv.po | 3843 + po/tr.gmo | Bin 0 -> 36649 bytes po/tr.po | 4290 + po/zh_TW.gmo | Bin 0 -> 48586 bytes po/zh_TW.po | 4376 + preinstall.am | 132 + python/Makefile.am | 51 + python/Makefile.in | 742 + python/header-py.c | 855 + python/header-py.h | 26 + python/rpm/__init__.py | 84 + python/rpm/transaction.py | 156 + python/rpmbmodule.c | 97 + python/rpmds-py.c | 405 + python/rpmds-py.h | 16 + python/rpmfd-py.c | 354 + python/rpmfd-py.h | 17 + python/rpmfi-py.c | 378 + python/rpmfi-py.h | 16 + python/rpmii-py.c | 158 + python/rpmii-py.h | 12 + python/rpmkeyring-py.c | 202 + python/rpmkeyring-py.h | 16 + python/rpmmacro-py.c | 58 + python/rpmmacro-py.h | 8 + python/rpmmi-py.c | 220 + python/rpmmi-py.h | 12 + python/rpmmodule.c | 504 + python/rpmps-py.c | 141 + python/rpmps-py.h | 16 + python/rpmsmodule.c | 97 + python/rpmsystem-py.h | 45 + python/rpmtd-py.c | 214 + python/rpmtd-py.h | 14 + python/rpmte-py.c | 302 + python/rpmte-py.h | 14 + python/rpmts-py.c | 904 + python/rpmts-py.h | 18 + python/spec-py.c | 304 + python/spec-py.h | 18 + rpm.am | 7 + rpm.pc.in | 15 + rpm2cpio.c | 92 + rpmbuild.c | 638 + rpmdb.c | 77 + rpmio/Makefile.am | 40 + rpmio/Makefile.in | 689 + rpmio/argv.c | 225 + rpmio/argv.h | 179 + rpmio/base64.c | 255 + rpmio/base64.h | 37 + rpmio/digest.c | 246 + rpmio/digest.h | 49 + rpmio/macro.c | 1611 + rpmio/rpmfileutil.c | 777 + rpmio/rpmfileutil.h | 151 + rpmio/rpmhook.c | 262 + rpmio/rpmhook.h | 37 + rpmio/rpmio.c | 1900 + rpmio/rpmio.h | 169 + rpmio/rpmio_internal.h | 44 + rpmio/rpmkeyring.c | 231 + rpmio/rpmkeyring.h | 96 + rpmio/rpmlog.c | 230 + rpmio/rpmlog.h | 281 + rpmio/rpmlua.c | 844 + rpmio/rpmlua.h | 92 + rpmio/rpmmacro.h | 156 + rpmio/rpmmalloc.c | 85 + rpmio/rpmpgp.c | 1669 + rpmio/rpmpgp.h | 1201 + rpmio/rpmsq.c | 366 + rpmio/rpmsq.h | 106 + rpmio/rpmstring.c | 192 + rpmio/rpmstring.h | 179 + rpmio/rpmsw.c | 131 + rpmio/rpmsw.h | 104 + rpmio/rpmurl.h | 52 + rpmio/rpmutil.h | 159 + rpmio/url.c | 127 + rpmkeys.c | 84 + rpmpopt.in | 202 + rpmqv.c | 352 + rpmrc.in | 472 + rpmsign.c | 166 + rpmspec.c | 120 + scripts/Makefile.am | 42 + scripts/Makefile.in | 596 + scripts/brp-compress | 55 + scripts/brp-java-gcjcompile | 40 + scripts/brp-python-bytecompile | 75 + scripts/brp-python-hardlink | 19 + scripts/brp-strip | 20 + scripts/brp-strip-comment-note | 26 + scripts/brp-strip-shared | 25 + scripts/brp-strip-static-archive | 20 + scripts/check-buildroot | 37 + scripts/check-files | 29 + scripts/check-prereqs | 17 + scripts/check-rpaths | 28 + scripts/check-rpaths-worker | 156 + scripts/desktop-file.prov | 23 + scripts/find-debuginfo.sh | 348 + scripts/find-lang.sh | 192 + scripts/find-php-provides | 20 + scripts/find-php-requires | 30 + scripts/find-provides.php | 19 + scripts/find-requires.php | 46 + scripts/fontconfig.prov | 24 + scripts/gendiff | 24 + scripts/libtooldeps.sh | 42 + scripts/macros.perl | 12 + scripts/macros.php | 9 + scripts/macros.python | 18 + scripts/mono-find-provides | 42 + scripts/mono-find-requires | 86 + scripts/ocaml-find-provides.sh | 56 + scripts/ocaml-find-requires.sh | 68 + scripts/osgideps.pl | 388 + scripts/perl.prov | 202 + scripts/perl.req | 286 + scripts/perldeps.pl | 1116 + scripts/pkgconfigdeps.sh | 57 + scripts/pythondeps.sh | 32 + scripts/rpm.daily | 13 + scripts/rpm.log | 5 + scripts/rpm2cpio.sh | 36 + scripts/rpmdb_loadcvt | 69 + scripts/script.req | 9 + scripts/tcl.req | 101 + scripts/tgpg | 36 + scripts/vpkg-provides.sh | 398 + sign/Makefile.am | 19 + sign/Makefile.in | 654 + sign/rpmgensig.c | 635 + sign/rpmsign.h | 38 + system.h | 154 + tests/Makefile.am | 102 + tests/Makefile.in | 542 + tests/atlocal.in | 36 + tests/data/RPMS/foo-1.0-1.noarch.rpm | Bin 0 -> 1489 bytes tests/data/RPMS/hello-1.0-1.i386.rpm | Bin 0 -> 4410 bytes tests/data/RPMS/hello-1.0-1.ppc64.rpm | Bin 0 -> 4913 bytes tests/data/SOURCES/hello-1.0-modernize.patch | 13 + tests/data/SOURCES/hello-1.0.tar.gz | Bin 0 -> 890 bytes tests/data/SOURCES/hello-2.0.tar.gz | Bin 0 -> 863 bytes tests/data/SPECS/configtest.spec | 23 + tests/data/SPECS/conflicttest.spec | 23 + tests/data/SPECS/deptest.spec | 17 + tests/data/SPECS/flangtest.spec | 29 + tests/data/SPECS/foo.spec | 26 + tests/data/SPECS/hello.spec | 56 + tests/data/SPECS/symlinktest.spec | 34 + tests/data/SPECS/verifyscript.spec | 19 + tests/data/SPECS/versiontest.spec | 17 + tests/data/SRPMS/foo-1.0-1.src.rpm | Bin 0 -> 1651 bytes tests/data/SRPMS/hello-1.0-1.src.rpm | Bin 0 -> 3322 bytes tests/local.at | 30 + tests/package.m4 | 6 + tests/rpmbuild.at | 123 + tests/rpmconfig.at | 99 + tests/rpmconflict.at | 131 + tests/rpmdb.at | 220 + tests/rpmdepmatch.at | 241 + tests/rpmdeps.at | 182 + tests/rpmgeneral.at | 255 + tests/rpmi.at | 202 + tests/rpmmacro.at | 144 + tests/rpmpython.at | 42 + tests/rpmquery.at | 385 + tests/rpmtests | 7511 ++ tests/rpmtests.at | 13 + tests/rpmvercmp.at | 31 + tests/rpmverify.at | 122 + tools/debugedit.c | 1661 + tools/elfdeps.c | 299 + tools/hashtab.c | 523 + tools/hashtab.h | 143 + tools/javadeps.c | 1288 + tools/rpmdeps.c | 105 + tools/rpmgraph.c | 258 + 994 files changed, 458025 insertions(+) create mode 100644 ABOUT-NLS create mode 100644 CHANGES create mode 100644 COPYING create mode 100644 CREDITS create mode 100644 ChangeLog create mode 100644 GROUPS create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 README create mode 100644 aclocal.m4 create mode 100644 autodeps/aix.prov create mode 100755 autodeps/aix.req create mode 100644 autodeps/aix4.prov create mode 100644 autodeps/aix4.req create mode 100644 autodeps/amigaos.prov create mode 100644 autodeps/amigaos.req create mode 100644 autodeps/darwin.prov create mode 100644 autodeps/darwin.req create mode 100644 autodeps/freebsd.prov create mode 100644 autodeps/freebsd.req create mode 100644 autodeps/freebsdelf.prov create mode 100644 autodeps/freebsdelf.req create mode 100644 autodeps/hpux.prov create mode 100644 autodeps/hpux.req create mode 100644 autodeps/irix6.prov create mode 100644 autodeps/irix6.req create mode 100644 autodeps/linux.prov create mode 100644 autodeps/linux.req create mode 100644 autodeps/mint.prov create mode 100644 autodeps/mint.req create mode 100644 autodeps/none create mode 100644 autodeps/openbsd.prov create mode 100644 autodeps/openbsd.req create mode 100644 autodeps/osf.prov create mode 100644 autodeps/osf.req create mode 100644 autodeps/solaris.prov create mode 100644 autodeps/solaris.req create mode 100755 autogen.sh create mode 100644 build/Makefile.am create mode 100644 build/Makefile.in create mode 100644 build/build.c create mode 100644 build/expression.c create mode 100644 build/files.c create mode 100644 build/misc.c create mode 100644 build/pack.c create mode 100644 build/parseBuildInstallClean.c create mode 100644 build/parseChangelog.c create mode 100644 build/parseDescription.c create mode 100644 build/parseFiles.c create mode 100644 build/parsePolicies.c create mode 100644 build/parsePreamble.c create mode 100644 build/parsePrep.c create mode 100644 build/parseReqs.c create mode 100644 build/parseScript.c create mode 100644 build/parseSpec.c create mode 100644 build/policies.c create mode 100644 build/reqprov.c create mode 100644 build/rpmbuild.h create mode 100644 build/rpmbuild_internal.h create mode 100644 build/rpmbuild_misc.h create mode 100644 build/rpmfc.c create mode 100644 build/rpmfc.h create mode 100644 build/rpmspec.h create mode 100644 build/spec.c create mode 100644 cliutils.c create mode 100644 cliutils.h create mode 100755 config.guess create mode 100644 config.h.in create mode 100755 config.rpath create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100755 db3/configure create mode 100644 debug.h create mode 100755 depcomp create mode 100644 doc/Makefile.am create mode 100644 doc/Makefile.in create mode 100644 doc/fr/rpm.8 create mode 100644 doc/gendiff.1 create mode 100644 doc/hacking.doxy.in create mode 100644 doc/hacking/Doxyheader create mode 100644 doc/ja/rpm.8 create mode 100644 doc/ja/rpm2cpio.8 create mode 100644 doc/ja/rpmbuild.8 create mode 100644 doc/ja/rpmgraph.8 create mode 100644 doc/ko/rpm.8 create mode 100644 doc/ko/rpm2cpio.8 create mode 100644 doc/librpm.doxy.in create mode 100644 doc/librpm/Doxyheader create mode 100644 doc/librpm/html/Doxyheader.html create mode 100644 doc/librpm/html/Doxyheader_source.html create mode 100644 doc/librpm/html/annotated.html create mode 100644 doc/librpm/html/argv_8h.html create mode 100644 doc/librpm/html/argv_8h__incl.map create mode 100644 doc/librpm/html/argv_8h__incl.md5 create mode 100644 doc/librpm/html/argv_8h__incl.png create mode 100644 doc/librpm/html/argv_8h_source.html create mode 100644 doc/librpm/html/bc_s.png create mode 100644 doc/librpm/html/classes.html create mode 100644 doc/librpm/html/cliutils_8c.html create mode 100644 doc/librpm/html/cliutils_8c__incl.map create mode 100644 doc/librpm/html/cliutils_8c__incl.md5 create mode 100644 doc/librpm/html/cliutils_8c__incl.png create mode 100644 doc/librpm/html/cliutils_8c_source.html create mode 100644 doc/librpm/html/cliutils_8h.html create mode 100644 doc/librpm/html/cliutils_8h__dep__incl.map create mode 100644 doc/librpm/html/cliutils_8h__dep__incl.md5 create mode 100644 doc/librpm/html/cliutils_8h__dep__incl.png create mode 100644 doc/librpm/html/cliutils_8h__incl.map create mode 100644 doc/librpm/html/cliutils_8h__incl.md5 create mode 100644 doc/librpm/html/cliutils_8h__incl.png create mode 100644 doc/librpm/html/cliutils_8h_source.html create mode 100644 doc/librpm/html/closed.png create mode 100644 doc/librpm/html/config_8h.html create mode 100644 doc/librpm/html/config_8h_source.html create mode 100644 doc/librpm/html/debug_8h.html create mode 100644 doc/librpm/html/debug_8h__dep__incl.map create mode 100644 doc/librpm/html/debug_8h__dep__incl.md5 create mode 100644 doc/librpm/html/debug_8h__dep__incl.png create mode 100644 doc/librpm/html/debug_8h__incl.map create mode 100644 doc/librpm/html/debug_8h__incl.md5 create mode 100644 doc/librpm/html/debug_8h__incl.png create mode 100644 doc/librpm/html/debug_8h_source.html create mode 100644 doc/librpm/html/deprecated.html create mode 100644 doc/librpm/html/doxygen.css create mode 100644 doc/librpm/html/doxygen.png create mode 100644 doc/librpm/html/files.html create mode 100644 doc/librpm/html/functions.html create mode 100644 doc/librpm/html/functions_vars.html create mode 100644 doc/librpm/html/globals.html create mode 100644 doc/librpm/html/globals_0x61.html create mode 100644 doc/librpm/html/globals_0x62.html create mode 100644 doc/librpm/html/globals_0x63.html create mode 100644 doc/librpm/html/globals_0x64.html create mode 100644 doc/librpm/html/globals_0x65.html create mode 100644 doc/librpm/html/globals_0x66.html create mode 100644 doc/librpm/html/globals_0x67.html create mode 100644 doc/librpm/html/globals_0x68.html create mode 100644 doc/librpm/html/globals_0x69.html create mode 100644 doc/librpm/html/globals_0x6b.html create mode 100644 doc/librpm/html/globals_0x6c.html create mode 100644 doc/librpm/html/globals_0x6d.html create mode 100644 doc/librpm/html/globals_0x6e.html create mode 100644 doc/librpm/html/globals_0x6f.html create mode 100644 doc/librpm/html/globals_0x70.html create mode 100644 doc/librpm/html/globals_0x71.html create mode 100644 doc/librpm/html/globals_0x72.html create mode 100644 doc/librpm/html/globals_0x73.html create mode 100644 doc/librpm/html/globals_0x74.html create mode 100644 doc/librpm/html/globals_0x75.html create mode 100644 doc/librpm/html/globals_0x76.html create mode 100644 doc/librpm/html/globals_0x77.html create mode 100644 doc/librpm/html/globals_0x78.html create mode 100644 doc/librpm/html/globals_defs.html create mode 100644 doc/librpm/html/globals_defs_0x62.html create mode 100644 doc/librpm/html/globals_defs_0x64.html create mode 100644 doc/librpm/html/globals_defs_0x65.html create mode 100644 doc/librpm/html/globals_defs_0x66.html create mode 100644 doc/librpm/html/globals_defs_0x68.html create mode 100644 doc/librpm/html/globals_defs_0x69.html create mode 100644 doc/librpm/html/globals_defs_0x6c.html create mode 100644 doc/librpm/html/globals_defs_0x6d.html create mode 100644 doc/librpm/html/globals_defs_0x6e.html create mode 100644 doc/librpm/html/globals_defs_0x70.html create mode 100644 doc/librpm/html/globals_defs_0x72.html create mode 100644 doc/librpm/html/globals_defs_0x73.html create mode 100644 doc/librpm/html/globals_defs_0x75.html create mode 100644 doc/librpm/html/globals_defs_0x76.html create mode 100644 doc/librpm/html/globals_defs_0x77.html create mode 100644 doc/librpm/html/globals_defs_0x78.html create mode 100644 doc/librpm/html/globals_enum.html create mode 100644 doc/librpm/html/globals_eval.html create mode 100644 doc/librpm/html/globals_eval_0x62.html create mode 100644 doc/librpm/html/globals_eval_0x63.html create mode 100644 doc/librpm/html/globals_eval_0x66.html create mode 100644 doc/librpm/html/globals_eval_0x68.html create mode 100644 doc/librpm/html/globals_eval_0x69.html create mode 100644 doc/librpm/html/globals_eval_0x6c.html create mode 100644 doc/librpm/html/globals_eval_0x6d.html create mode 100644 doc/librpm/html/globals_eval_0x70.html create mode 100644 doc/librpm/html/globals_eval_0x71.html create mode 100644 doc/librpm/html/globals_eval_0x72.html create mode 100644 doc/librpm/html/globals_eval_0x73.html create mode 100644 doc/librpm/html/globals_eval_0x74.html create mode 100644 doc/librpm/html/globals_eval_0x75.html create mode 100644 doc/librpm/html/globals_eval_0x76.html create mode 100644 doc/librpm/html/globals_eval_0x78.html create mode 100644 doc/librpm/html/globals_func.html create mode 100644 doc/librpm/html/globals_func_0x62.html create mode 100644 doc/librpm/html/globals_func_0x63.html create mode 100644 doc/librpm/html/globals_func_0x64.html create mode 100644 doc/librpm/html/globals_func_0x65.html create mode 100644 doc/librpm/html/globals_func_0x66.html create mode 100644 doc/librpm/html/globals_func_0x67.html create mode 100644 doc/librpm/html/globals_func_0x68.html create mode 100644 doc/librpm/html/globals_func_0x69.html create mode 100644 doc/librpm/html/globals_func_0x6d.html create mode 100644 doc/librpm/html/globals_func_0x70.html create mode 100644 doc/librpm/html/globals_func_0x72.html create mode 100644 doc/librpm/html/globals_func_0x73.html create mode 100644 doc/librpm/html/globals_func_0x74.html create mode 100644 doc/librpm/html/globals_func_0x75.html create mode 100644 doc/librpm/html/globals_type.html create mode 100644 doc/librpm/html/globals_vars.html create mode 100644 doc/librpm/html/graph_legend.html create mode 100644 doc/librpm/html/graph_legend.md5 create mode 100644 doc/librpm/html/graph_legend.png create mode 100644 doc/librpm/html/group__header.html create mode 100644 doc/librpm/html/group__header.map create mode 100644 doc/librpm/html/group__header.md5 create mode 100644 doc/librpm/html/group__header.png create mode 100644 doc/librpm/html/group__rpmargv.html create mode 100644 doc/librpm/html/group__rpmbuild.html create mode 100644 doc/librpm/html/group__rpmbuild.map create mode 100644 doc/librpm/html/group__rpmbuild.md5 create mode 100644 doc/librpm/html/group__rpmbuild.png create mode 100644 doc/librpm/html/group__rpmcli.html create mode 100644 doc/librpm/html/group__rpmcli.map create mode 100644 doc/librpm/html/group__rpmcli.md5 create mode 100644 doc/librpm/html/group__rpmcli.png create mode 100644 doc/librpm/html/group__rpmdb.html create mode 100644 doc/librpm/html/group__rpmdb.map create mode 100644 doc/librpm/html/group__rpmdb.md5 create mode 100644 doc/librpm/html/group__rpmdb.png create mode 100644 doc/librpm/html/group__rpmds.html create mode 100644 doc/librpm/html/group__rpmfc.html create mode 100644 doc/librpm/html/group__rpmfc.map create mode 100644 doc/librpm/html/group__rpmfc.md5 create mode 100644 doc/librpm/html/group__rpmfc.png create mode 100644 doc/librpm/html/group__rpmfi.html create mode 100644 doc/librpm/html/group__rpmfileutil.html create mode 100644 doc/librpm/html/group__rpmfileutil.map create mode 100644 doc/librpm/html/group__rpmfileutil.md5 create mode 100644 doc/librpm/html/group__rpmfileutil.png create mode 100644 doc/librpm/html/group__rpmgi.html create mode 100644 doc/librpm/html/group__rpmio.html create mode 100644 doc/librpm/html/group__rpmio.map create mode 100644 doc/librpm/html/group__rpmio.md5 create mode 100644 doc/librpm/html/group__rpmio.png create mode 100644 doc/librpm/html/group__rpmkeyring.html create mode 100644 doc/librpm/html/group__rpmlog.html create mode 100644 doc/librpm/html/group__rpmmacro.html create mode 100644 doc/librpm/html/group__rpmpgp.html create mode 100644 doc/librpm/html/group__rpmprob.html create mode 100644 doc/librpm/html/group__rpmps.html create mode 100644 doc/librpm/html/group__rpmrc.html create mode 100644 doc/librpm/html/group__rpmrc.map create mode 100644 doc/librpm/html/group__rpmrc.md5 create mode 100644 doc/librpm/html/group__rpmrc.png create mode 100644 doc/librpm/html/group__rpmsq.html create mode 100644 doc/librpm/html/group__rpmstring.html create mode 100644 doc/librpm/html/group__rpmsw.html create mode 100644 doc/librpm/html/group__rpmtag.html create mode 100644 doc/librpm/html/group__rpmtd.html create mode 100644 doc/librpm/html/group__rpmte.html create mode 100644 doc/librpm/html/group__rpmte.map create mode 100644 doc/librpm/html/group__rpmte.md5 create mode 100644 doc/librpm/html/group__rpmte.png create mode 100644 doc/librpm/html/group__rpmts.html create mode 100644 doc/librpm/html/group__rpmts.map create mode 100644 doc/librpm/html/group__rpmts.md5 create mode 100644 doc/librpm/html/group__rpmts.png create mode 100644 doc/librpm/html/group__rpmtypes.html create mode 100644 doc/librpm/html/group__rpmurl.html create mode 100644 doc/librpm/html/group__signature.html create mode 100644 doc/librpm/html/group__signature.map create mode 100644 doc/librpm/html/group__signature.md5 create mode 100644 doc/librpm/html/group__signature.png create mode 100644 doc/librpm/html/header_8h.html create mode 100644 doc/librpm/html/header_8h__incl.map create mode 100644 doc/librpm/html/header_8h__incl.md5 create mode 100644 doc/librpm/html/header_8h__incl.png create mode 100644 doc/librpm/html/header_8h_source.html create mode 100644 doc/librpm/html/index.html create mode 100644 doc/librpm/html/jquery.js create mode 100644 doc/librpm/html/modules.html create mode 100644 doc/librpm/html/nav_f.png create mode 100644 doc/librpm/html/nav_h.png create mode 100644 doc/librpm/html/open.png create mode 100644 doc/librpm/html/pages.html create mode 100644 doc/librpm/html/rpm2cpio_8c.html create mode 100644 doc/librpm/html/rpm2cpio_8c__incl.map create mode 100644 doc/librpm/html/rpm2cpio_8c__incl.md5 create mode 100644 doc/librpm/html/rpm2cpio_8c__incl.png create mode 100644 doc/librpm/html/rpm2cpio_8c_source.html create mode 100644 doc/librpm/html/rpmbuild_8c.html create mode 100644 doc/librpm/html/rpmbuild_8c__incl.map create mode 100644 doc/librpm/html/rpmbuild_8c__incl.md5 create mode 100644 doc/librpm/html/rpmbuild_8c__incl.png create mode 100644 doc/librpm/html/rpmbuild_8c_source.html create mode 100644 doc/librpm/html/rpmbuild_8h.html create mode 100644 doc/librpm/html/rpmbuild_8h__incl.map create mode 100644 doc/librpm/html/rpmbuild_8h__incl.md5 create mode 100644 doc/librpm/html/rpmbuild_8h__incl.png create mode 100644 doc/librpm/html/rpmbuild_8h_source.html create mode 100644 doc/librpm/html/rpmcallback_8h.html create mode 100644 doc/librpm/html/rpmcallback_8h__incl.map create mode 100644 doc/librpm/html/rpmcallback_8h__incl.md5 create mode 100644 doc/librpm/html/rpmcallback_8h__incl.png create mode 100644 doc/librpm/html/rpmcallback_8h_source.html create mode 100644 doc/librpm/html/rpmcli_8h.html create mode 100644 doc/librpm/html/rpmcli_8h__incl.map create mode 100644 doc/librpm/html/rpmcli_8h__incl.md5 create mode 100644 doc/librpm/html/rpmcli_8h__incl.png create mode 100644 doc/librpm/html/rpmcli_8h_source.html create mode 100644 doc/librpm/html/rpmdb_8c.html create mode 100644 doc/librpm/html/rpmdb_8c__incl.map create mode 100644 doc/librpm/html/rpmdb_8c__incl.md5 create mode 100644 doc/librpm/html/rpmdb_8c__incl.png create mode 100644 doc/librpm/html/rpmdb_8c_source.html create mode 100644 doc/librpm/html/rpmdb_8h.html create mode 100644 doc/librpm/html/rpmdb_8h__incl.map create mode 100644 doc/librpm/html/rpmdb_8h__incl.md5 create mode 100644 doc/librpm/html/rpmdb_8h__incl.png create mode 100644 doc/librpm/html/rpmdb_8h_source.html create mode 100644 doc/librpm/html/rpmds_8h.html create mode 100644 doc/librpm/html/rpmds_8h__incl.map create mode 100644 doc/librpm/html/rpmds_8h__incl.md5 create mode 100644 doc/librpm/html/rpmds_8h__incl.png create mode 100644 doc/librpm/html/rpmds_8h_source.html create mode 100644 doc/librpm/html/rpmfc_8h.html create mode 100644 doc/librpm/html/rpmfc_8h__incl.map create mode 100644 doc/librpm/html/rpmfc_8h__incl.md5 create mode 100644 doc/librpm/html/rpmfc_8h__incl.png create mode 100644 doc/librpm/html/rpmfc_8h_source.html create mode 100644 doc/librpm/html/rpmfi_8h.html create mode 100644 doc/librpm/html/rpmfi_8h__incl.map create mode 100644 doc/librpm/html/rpmfi_8h__incl.md5 create mode 100644 doc/librpm/html/rpmfi_8h__incl.png create mode 100644 doc/librpm/html/rpmfi_8h_source.html create mode 100644 doc/librpm/html/rpmfileutil_8h.html create mode 100644 doc/librpm/html/rpmfileutil_8h__incl.map create mode 100644 doc/librpm/html/rpmfileutil_8h__incl.md5 create mode 100644 doc/librpm/html/rpmfileutil_8h__incl.png create mode 100644 doc/librpm/html/rpmfileutil_8h_source.html create mode 100644 doc/librpm/html/rpmio_8h.html create mode 100644 doc/librpm/html/rpmio_8h__incl.map create mode 100644 doc/librpm/html/rpmio_8h__incl.md5 create mode 100644 doc/librpm/html/rpmio_8h__incl.png create mode 100644 doc/librpm/html/rpmio_8h_source.html create mode 100644 doc/librpm/html/rpmkeyring_8h.html create mode 100644 doc/librpm/html/rpmkeyring_8h__incl.map create mode 100644 doc/librpm/html/rpmkeyring_8h__incl.md5 create mode 100644 doc/librpm/html/rpmkeyring_8h__incl.png create mode 100644 doc/librpm/html/rpmkeyring_8h_source.html create mode 100644 doc/librpm/html/rpmkeys_8c.html create mode 100644 doc/librpm/html/rpmkeys_8c__incl.map create mode 100644 doc/librpm/html/rpmkeys_8c__incl.md5 create mode 100644 doc/librpm/html/rpmkeys_8c__incl.png create mode 100644 doc/librpm/html/rpmkeys_8c_source.html create mode 100644 doc/librpm/html/rpmlegacy_8h.html create mode 100644 doc/librpm/html/rpmlegacy_8h__incl.map create mode 100644 doc/librpm/html/rpmlegacy_8h__incl.md5 create mode 100644 doc/librpm/html/rpmlegacy_8h__incl.png create mode 100644 doc/librpm/html/rpmlegacy_8h_source.html create mode 100644 doc/librpm/html/rpmlib_8h.html create mode 100644 doc/librpm/html/rpmlib_8h__incl.map create mode 100644 doc/librpm/html/rpmlib_8h__incl.md5 create mode 100644 doc/librpm/html/rpmlib_8h__incl.png create mode 100644 doc/librpm/html/rpmlib_8h_source.html create mode 100644 doc/librpm/html/rpmlog_8h.html create mode 100644 doc/librpm/html/rpmlog_8h__incl.map create mode 100644 doc/librpm/html/rpmlog_8h__incl.md5 create mode 100644 doc/librpm/html/rpmlog_8h__incl.png create mode 100644 doc/librpm/html/rpmlog_8h_source.html create mode 100644 doc/librpm/html/rpmmacro_8h.html create mode 100644 doc/librpm/html/rpmmacro_8h__incl.map create mode 100644 doc/librpm/html/rpmmacro_8h__incl.md5 create mode 100644 doc/librpm/html/rpmmacro_8h__incl.png create mode 100644 doc/librpm/html/rpmmacro_8h_source.html create mode 100644 doc/librpm/html/rpmpgp_8h.html create mode 100644 doc/librpm/html/rpmpgp_8h__incl.map create mode 100644 doc/librpm/html/rpmpgp_8h__incl.md5 create mode 100644 doc/librpm/html/rpmpgp_8h__incl.png create mode 100644 doc/librpm/html/rpmpgp_8h_source.html create mode 100644 doc/librpm/html/rpmpol_8h.html create mode 100644 doc/librpm/html/rpmpol_8h__incl.map create mode 100644 doc/librpm/html/rpmpol_8h__incl.md5 create mode 100644 doc/librpm/html/rpmpol_8h__incl.png create mode 100644 doc/librpm/html/rpmpol_8h_source.html create mode 100644 doc/librpm/html/rpmprob_8h.html create mode 100644 doc/librpm/html/rpmprob_8h__incl.map create mode 100644 doc/librpm/html/rpmprob_8h__incl.md5 create mode 100644 doc/librpm/html/rpmprob_8h__incl.png create mode 100644 doc/librpm/html/rpmprob_8h_source.html create mode 100644 doc/librpm/html/rpmps_8h.html create mode 100644 doc/librpm/html/rpmps_8h__incl.map create mode 100644 doc/librpm/html/rpmps_8h__incl.md5 create mode 100644 doc/librpm/html/rpmps_8h__incl.png create mode 100644 doc/librpm/html/rpmps_8h_source.html create mode 100644 doc/librpm/html/rpmqv_8c.html create mode 100644 doc/librpm/html/rpmqv_8c__incl.map create mode 100644 doc/librpm/html/rpmqv_8c__incl.md5 create mode 100644 doc/librpm/html/rpmqv_8c__incl.png create mode 100644 doc/librpm/html/rpmqv_8c_source.html create mode 100644 doc/librpm/html/rpmsign_8c.html create mode 100644 doc/librpm/html/rpmsign_8c__incl.map create mode 100644 doc/librpm/html/rpmsign_8c__incl.md5 create mode 100644 doc/librpm/html/rpmsign_8c__incl.png create mode 100644 doc/librpm/html/rpmsign_8c_source.html create mode 100644 doc/librpm/html/rpmsign_8h.html create mode 100644 doc/librpm/html/rpmsign_8h__incl.map create mode 100644 doc/librpm/html/rpmsign_8h__incl.md5 create mode 100644 doc/librpm/html/rpmsign_8h__incl.png create mode 100644 doc/librpm/html/rpmsign_8h_source.html create mode 100644 doc/librpm/html/rpmspec_8c.html create mode 100644 doc/librpm/html/rpmspec_8c__incl.map create mode 100644 doc/librpm/html/rpmspec_8c__incl.md5 create mode 100644 doc/librpm/html/rpmspec_8c__incl.png create mode 100644 doc/librpm/html/rpmspec_8c_source.html create mode 100644 doc/librpm/html/rpmspec_8h.html create mode 100644 doc/librpm/html/rpmspec_8h__incl.map create mode 100644 doc/librpm/html/rpmspec_8h__incl.md5 create mode 100644 doc/librpm/html/rpmspec_8h__incl.png create mode 100644 doc/librpm/html/rpmspec_8h_source.html create mode 100644 doc/librpm/html/rpmsq_8h.html create mode 100644 doc/librpm/html/rpmsq_8h__incl.map create mode 100644 doc/librpm/html/rpmsq_8h__incl.md5 create mode 100644 doc/librpm/html/rpmsq_8h__incl.png create mode 100644 doc/librpm/html/rpmsq_8h_source.html create mode 100644 doc/librpm/html/rpmstring_8h.html create mode 100644 doc/librpm/html/rpmstring_8h__incl.map create mode 100644 doc/librpm/html/rpmstring_8h__incl.md5 create mode 100644 doc/librpm/html/rpmstring_8h__incl.png create mode 100644 doc/librpm/html/rpmstring_8h_source.html create mode 100644 doc/librpm/html/rpmsw_8h.html create mode 100644 doc/librpm/html/rpmsw_8h__incl.map create mode 100644 doc/librpm/html/rpmsw_8h__incl.md5 create mode 100644 doc/librpm/html/rpmsw_8h__incl.png create mode 100644 doc/librpm/html/rpmsw_8h_source.html create mode 100644 doc/librpm/html/rpmtag_8h.html create mode 100644 doc/librpm/html/rpmtag_8h__incl.map create mode 100644 doc/librpm/html/rpmtag_8h__incl.md5 create mode 100644 doc/librpm/html/rpmtag_8h__incl.png create mode 100644 doc/librpm/html/rpmtag_8h_source.html create mode 100644 doc/librpm/html/rpmtd_8h.html create mode 100644 doc/librpm/html/rpmtd_8h__incl.map create mode 100644 doc/librpm/html/rpmtd_8h__incl.md5 create mode 100644 doc/librpm/html/rpmtd_8h__incl.png create mode 100644 doc/librpm/html/rpmtd_8h_source.html create mode 100644 doc/librpm/html/rpmte_8h.html create mode 100644 doc/librpm/html/rpmte_8h__incl.map create mode 100644 doc/librpm/html/rpmte_8h__incl.md5 create mode 100644 doc/librpm/html/rpmte_8h__incl.png create mode 100644 doc/librpm/html/rpmte_8h_source.html create mode 100644 doc/librpm/html/rpmts_8h.html create mode 100644 doc/librpm/html/rpmts_8h__incl.map create mode 100644 doc/librpm/html/rpmts_8h__incl.md5 create mode 100644 doc/librpm/html/rpmts_8h__incl.png create mode 100644 doc/librpm/html/rpmts_8h_source.html create mode 100644 doc/librpm/html/rpmtypes_8h.html create mode 100644 doc/librpm/html/rpmtypes_8h__incl.map create mode 100644 doc/librpm/html/rpmtypes_8h__incl.md5 create mode 100644 doc/librpm/html/rpmtypes_8h__incl.png create mode 100644 doc/librpm/html/rpmtypes_8h_source.html create mode 100644 doc/librpm/html/rpmurl_8h.html create mode 100644 doc/librpm/html/rpmurl_8h_source.html create mode 100644 doc/librpm/html/rpmutil_8h.html create mode 100644 doc/librpm/html/rpmutil_8h__dep__incl.map create mode 100644 doc/librpm/html/rpmutil_8h__dep__incl.md5 create mode 100644 doc/librpm/html/rpmutil_8h__dep__incl.png create mode 100644 doc/librpm/html/rpmutil_8h__incl.map create mode 100644 doc/librpm/html/rpmutil_8h__incl.md5 create mode 100644 doc/librpm/html/rpmutil_8h__incl.png create mode 100644 doc/librpm/html/rpmutil_8h_source.html create mode 100644 doc/librpm/html/rpmvf_8h.html create mode 100644 doc/librpm/html/rpmvf_8h__incl.map create mode 100644 doc/librpm/html/rpmvf_8h__incl.md5 create mode 100644 doc/librpm/html/rpmvf_8h__incl.png create mode 100644 doc/librpm/html/rpmvf_8h_source.html create mode 100644 doc/librpm/html/structARGI__s.html create mode 100644 doc/librpm/html/structpgpPktCdata__s.html create mode 100644 doc/librpm/html/structpgpPktEdata__s.html create mode 100644 doc/librpm/html/structpgpPktKeyV3__s.html create mode 100644 doc/librpm/html/structpgpPktKeyV4__s.html create mode 100644 doc/librpm/html/structpgpPktLdata__s.html create mode 100644 doc/librpm/html/structpgpPktOnepass__s.html create mode 100644 doc/librpm/html/structpgpPktPubkey__s.html create mode 100644 doc/librpm/html/structpgpPktSigV3__s.html create mode 100644 doc/librpm/html/structpgpPktSigV4__s.html create mode 100644 doc/librpm/html/structpgpPktSymkey__s.html create mode 100644 doc/librpm/html/structpgpPktTrust__s.html create mode 100644 doc/librpm/html/structpgpPktUid__s.html create mode 100644 doc/librpm/html/structrpmBuildArguments__s.html create mode 100644 doc/librpm/html/structrpmInstallArguments__s.html create mode 100644 doc/librpm/html/structrpmInstallArguments__s__coll__graph.map create mode 100644 doc/librpm/html/structrpmInstallArguments__s__coll__graph.md5 create mode 100644 doc/librpm/html/structrpmInstallArguments__s__coll__graph.png create mode 100644 doc/librpm/html/structrpmQVKArguments__s.html create mode 100644 doc/librpm/html/structrpmQVKArguments__s__coll__graph.map create mode 100644 doc/librpm/html/structrpmQVKArguments__s__coll__graph.md5 create mode 100644 doc/librpm/html/structrpmQVKArguments__s__coll__graph.png create mode 100644 doc/librpm/html/structrpmRelocation__s.html create mode 100644 doc/librpm/html/structrpmSignArgs.html create mode 100644 doc/librpm/html/structrpmop__s.html create mode 100644 doc/librpm/html/structrpmop__s__coll__graph.map create mode 100644 doc/librpm/html/structrpmop__s__coll__graph.md5 create mode 100644 doc/librpm/html/structrpmop__s__coll__graph.png create mode 100644 doc/librpm/html/structrpmsw__s.html create mode 100644 doc/librpm/html/structrpmtd__s.html create mode 100644 doc/librpm/html/system_8h.html create mode 100644 doc/librpm/html/system_8h__dep__incl.map create mode 100644 doc/librpm/html/system_8h__dep__incl.md5 create mode 100644 doc/librpm/html/system_8h__dep__incl.png create mode 100644 doc/librpm/html/system_8h__incl.map create mode 100644 doc/librpm/html/system_8h__incl.md5 create mode 100644 doc/librpm/html/system_8h__incl.png create mode 100644 doc/librpm/html/system_8h_source.html create mode 100644 doc/librpm/html/tab_a.png create mode 100644 doc/librpm/html/tab_b.png create mode 100644 doc/librpm/html/tab_h.png create mode 100644 doc/librpm/html/tab_s.png create mode 100644 doc/librpm/html/tabs.css create mode 100644 doc/librpm/html/todo.html create mode 100644 doc/librpm/html/unionpgpPktKey__u.html create mode 100644 doc/librpm/html/unionpgpPktKey__u__coll__graph.map create mode 100644 doc/librpm/html/unionpgpPktKey__u__coll__graph.md5 create mode 100644 doc/librpm/html/unionpgpPktKey__u__coll__graph.png create mode 100644 doc/librpm/html/unionpgpPktPre__u.html create mode 100644 doc/librpm/html/unionpgpPktPre__u__coll__graph.map create mode 100644 doc/librpm/html/unionpgpPktPre__u__coll__graph.md5 create mode 100644 doc/librpm/html/unionpgpPktPre__u__coll__graph.png create mode 100644 doc/librpm/html/unionpgpPktSig__u.html create mode 100644 doc/librpm/html/unionpgpPktSig__u__coll__graph.map create mode 100644 doc/librpm/html/unionpgpPktSig__u__coll__graph.md5 create mode 100644 doc/librpm/html/unionpgpPktSig__u__coll__graph.png create mode 100644 doc/manual/builddependencies create mode 100644 doc/manual/buildroot create mode 100644 doc/manual/conditionalbuilds create mode 100644 doc/manual/dependencies create mode 100644 doc/manual/format create mode 100644 doc/manual/hregions create mode 100644 doc/manual/macros create mode 100644 doc/manual/multiplebuilds create mode 100644 doc/manual/queryformat create mode 100644 doc/manual/relocatable create mode 100644 doc/manual/signatures create mode 100644 doc/manual/spec create mode 100644 doc/manual/triggers create mode 100644 doc/manual/tsort create mode 100644 doc/pl/gendiff.1 create mode 100644 doc/pl/rpm.8 create mode 100644 doc/pl/rpm2cpio.8 create mode 100644 doc/pl/rpmbuild.8 create mode 100644 doc/pl/rpmdeps.8 create mode 100644 doc/pl/rpmgraph.8 create mode 100644 doc/rpm.8 create mode 100644 doc/rpm2cpio.8 create mode 100644 doc/rpmbuild.8 create mode 100644 doc/rpmdb.8 create mode 100644 doc/rpmdeps.8 create mode 100644 doc/rpmgraph.8 create mode 100644 doc/rpmkeys.8 create mode 100644 doc/rpmsign.8 create mode 100644 doc/rpmspec.8 create mode 100644 doc/ru/rpm.8 create mode 100644 doc/ru/rpm2cpio.8 create mode 100644 doc/sk/rpm.8 create mode 100644 fileattrs/Makefile.am create mode 100644 fileattrs/Makefile.in create mode 100644 fileattrs/desktop.attr create mode 100644 fileattrs/elf.attr create mode 100644 fileattrs/font.attr create mode 100644 fileattrs/libtool.attr create mode 100644 fileattrs/mono.attr create mode 100644 fileattrs/ocaml.attr create mode 100644 fileattrs/perl.attr create mode 100644 fileattrs/perllib.attr create mode 100644 fileattrs/pkgconfig.attr create mode 100644 fileattrs/python.attr create mode 100644 fileattrs/script.attr create mode 100755 install-sh create mode 100755 installplatform create mode 100644 lib/Makefile.am create mode 100644 lib/Makefile.in create mode 100644 lib/backend/db3.c create mode 100644 lib/backend/dbconfig.c create mode 100644 lib/backend/dbi.h create mode 100644 lib/cpio.c create mode 100644 lib/cpio.h create mode 100644 lib/depends.c create mode 100644 lib/formats.c create mode 100644 lib/fprint.c create mode 100644 lib/fprint.h create mode 100644 lib/fsm.c create mode 100644 lib/fsm.h create mode 100755 lib/gentagtbl.sh create mode 100644 lib/header.c create mode 100644 lib/header.h create mode 100644 lib/header_internal.h create mode 100644 lib/headerfmt.c create mode 100644 lib/headerutil.c create mode 100644 lib/legacy.c create mode 100644 lib/manifest.c create mode 100644 lib/manifest.h create mode 100644 lib/merge.c create mode 100644 lib/misc.c create mode 100644 lib/misc.h create mode 100644 lib/order.c create mode 100644 lib/package.c create mode 100644 lib/poptALL.c create mode 100644 lib/poptI.c create mode 100644 lib/poptQV.c create mode 100644 lib/psm.c create mode 100644 lib/query.c create mode 100644 lib/rpmal.c create mode 100644 lib/rpmal.h create mode 100644 lib/rpmcallback.h create mode 100644 lib/rpmchecksig.c create mode 100644 lib/rpmchroot.c create mode 100644 lib/rpmchroot.h create mode 100644 lib/rpmcli.h create mode 100644 lib/rpmdb.c create mode 100644 lib/rpmdb.h create mode 100644 lib/rpmdb_internal.h create mode 100644 lib/rpmds.c create mode 100644 lib/rpmds.h create mode 100644 lib/rpmfi.c create mode 100644 lib/rpmfi.h create mode 100644 lib/rpmfi_internal.h create mode 100644 lib/rpmfs.c create mode 100644 lib/rpmfs.h create mode 100644 lib/rpmgi.c create mode 100644 lib/rpmgi.h create mode 100644 lib/rpmhash.C create mode 100644 lib/rpmhash.H create mode 100644 lib/rpminstall.c create mode 100644 lib/rpmlead.c create mode 100644 lib/rpmlead.h create mode 100644 lib/rpmlegacy.h create mode 100644 lib/rpmlib.h create mode 100644 lib/rpmliblua.c create mode 100644 lib/rpmliblua.h create mode 100644 lib/rpmlock.c create mode 100644 lib/rpmlock.h create mode 100644 lib/rpmplugins.c create mode 100644 lib/rpmplugins.h create mode 100644 lib/rpmpol.h create mode 100644 lib/rpmprob.c create mode 100644 lib/rpmprob.h create mode 100644 lib/rpmps.c create mode 100644 lib/rpmps.h create mode 100644 lib/rpmrc.c create mode 100644 lib/rpmscript.c create mode 100644 lib/rpmscript.h create mode 100644 lib/rpmtag.h create mode 100644 lib/rpmtd.c create mode 100644 lib/rpmtd.h create mode 100644 lib/rpmte.c create mode 100644 lib/rpmte.h create mode 100644 lib/rpmte_internal.h create mode 100644 lib/rpmts.c create mode 100644 lib/rpmts.h create mode 100644 lib/rpmts_internal.h create mode 100644 lib/rpmtypes.h create mode 100644 lib/rpmug.c create mode 100644 lib/rpmug.h create mode 100644 lib/rpmvercmp.c create mode 100644 lib/rpmvf.h create mode 100644 lib/signature.c create mode 100644 lib/signature.h create mode 100644 lib/tagexts.c create mode 100644 lib/tagname.c create mode 100644 lib/tagtbl.C create mode 100644 lib/transaction.c create mode 100644 lib/verify.c create mode 100755 ltmain.sh create mode 100644 luaext/Makefile.am create mode 100644 luaext/Makefile.in create mode 100644 luaext/linit.lua create mode 100644 luaext/lposix.c create mode 100644 luaext/lposix.h create mode 100644 luaext/lrexlib.c create mode 100644 luaext/lrexlib.h create mode 100644 luaext/modemuncher.c create mode 100644 luaext/userconfig.c create mode 100644 m4/gettext.m4 create mode 100644 m4/iconv.m4 create mode 100644 m4/lib-ld.m4 create mode 100644 m4/lib-link.m4 create mode 100644 m4/lib-prefix.m4 create mode 100644 m4/libtool.m4 create mode 100644 m4/ltoptions.m4 create mode 100644 m4/ltsugar.m4 create mode 100644 m4/ltversion.m4 create mode 100644 m4/lt~obsolete.m4 create mode 100644 m4/nls.m4 create mode 100644 m4/po.m4 create mode 100644 m4/progtest.m4 create mode 100644 macros.in create mode 100644 misc/Makefile.am create mode 100644 misc/Makefile.in create mode 100644 misc/fnmatch.c create mode 100644 misc/fnmatch.h create mode 100644 misc/fts.c create mode 100644 misc/fts.h create mode 100644 misc/glob.c create mode 100644 misc/glob.h create mode 100644 misc/stpcpy.c create mode 100644 misc/stpncpy.c create mode 100755 missing create mode 100755 mkinstalldirs create mode 100644 packaging/Makefile create mode 100644 packaging/autodeps.diff create mode 100644 packaging/beecrypt-4.1.2.diff create mode 100644 packaging/beecrypt-4.1.2.tar.bz2 create mode 100644 packaging/build_pack_4.9.1_fix.patch create mode 100644 packaging/buildidprov.diff create mode 100644 packaging/db-4.8.30.tar.gz create mode 100644 packaging/db.diff create mode 100644 packaging/debugsource-package.diff create mode 100644 packaging/debugsubpkg.diff create mode 100644 packaging/device-sec-policy create mode 100644 packaging/disableperl.patch create mode 100644 packaging/eu-strip.patch create mode 100644 packaging/fileattrs.diff create mode 100644 packaging/find-docs.sh create mode 100644 packaging/finddebuginfo.diff create mode 100644 packaging/firmware.diff create mode 100644 packaging/fontprovides.diff create mode 100644 packaging/lib_rpmdb_4.9.1_fix.patch create mode 100644 packaging/libsymlink.attr create mode 100644 packaging/macros create mode 100644 packaging/mimetype.diff create mode 100644 packaging/no_rep_autop.diff create mode 100644 packaging/optflags.patch create mode 100644 packaging/pythondeps.diff create mode 100644 packaging/remove-translations.patch create mode 100644 packaging/rpm-4.5.90-gstreamer-provides.patch create mode 100644 packaging/rpm-4.5.90-pkgconfig-path.patch create mode 100644 packaging/rpm-4.7.90-devel-autodep.patch create mode 100644 packaging/rpm-4.8.0-tilde.patch create mode 100644 packaging/rpm-4.9.0-tizen-arm.patch create mode 100644 packaging/rpm-beecrypt.diff create mode 100644 packaging/rpm-gst-provides.patch create mode 100644 packaging/rpm-macros.patch create mode 100644 packaging/rpm-python.manifest create mode 100644 packaging/rpm-python.spec create mode 100644 packaging/rpm-shorten-changelog.patch create mode 100644 packaging/rpm.changes create mode 100644 packaging/rpm.manifest create mode 100644 packaging/rpm.spec create mode 100644 packaging/rpmbuild_4.9.1_fix.patch create mode 100644 packaging/rpmbuild_rpmfc_4.9.1_fix.patch create mode 100644 packaging/rpmio_base64_4.9.1_fix.patch create mode 100644 packaging/rpmlib_format_value_4.9.1_fix.patch create mode 100644 packaging/security_4.9.1.patch create mode 100644 platform.in create mode 100644 plugins/Makefile.am create mode 100644 plugins/Makefile.in create mode 100644 plugins/exec.c create mode 100644 plugins/plugin.h create mode 100644 plugins/sepolicy.c create mode 100644 po/ChangeLog create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in.in create mode 100644 po/Makevars create mode 100644 po/POTFILES.in create mode 100644 po/Rules-quot create mode 100644 po/boldquot.sed create mode 100644 po/ca.gmo create mode 100644 po/ca.po create mode 100644 po/cs.gmo create mode 100644 po/cs.po create mode 100644 po/da.gmo create mode 100644 po/da.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/en@boldquot.header create mode 100644 po/en@quot.header create mode 100644 po/es.gmo create mode 100644 po/es.po create mode 100644 po/fi.gmo create mode 100644 po/fi.po create mode 100644 po/fr.gmo create mode 100644 po/fr.po create mode 100644 po/insert-header.sin create mode 100644 po/is.gmo create mode 100644 po/is.po create mode 100644 po/it.gmo create mode 100644 po/it.po create mode 100644 po/ja.gmo create mode 100644 po/ja.po create mode 100644 po/ko.gmo create mode 100644 po/ko.po create mode 100644 po/ms.gmo create mode 100644 po/ms.po create mode 100644 po/nb.gmo create mode 100644 po/nb.po create mode 100644 po/nl.gmo create mode 100644 po/nl.po create mode 100644 po/pl.gmo create mode 100644 po/pl.po create mode 100644 po/pt.gmo create mode 100644 po/pt.po create mode 100644 po/pt_BR.gmo create mode 100644 po/pt_BR.po create mode 100644 po/quot.sed create mode 100644 po/remove-potcdate.sin create mode 100644 po/rpm.pot create mode 100644 po/ru.gmo create mode 100644 po/ru.po create mode 100644 po/sk.gmo create mode 100644 po/sk.po create mode 100644 po/sl.gmo create mode 100644 po/sl.po create mode 100644 po/sr.gmo create mode 100644 po/sr.po create mode 100644 po/sr@latin.gmo create mode 100644 po/sr@latin.po create mode 100644 po/stamp-po create mode 100644 po/sv.gmo create mode 100644 po/sv.po create mode 100644 po/tr.gmo create mode 100644 po/tr.po create mode 100644 po/zh_TW.gmo create mode 100644 po/zh_TW.po create mode 100644 preinstall.am create mode 100644 python/Makefile.am create mode 100644 python/Makefile.in create mode 100644 python/header-py.c create mode 100644 python/header-py.h create mode 100644 python/rpm/__init__.py create mode 100644 python/rpm/transaction.py create mode 100644 python/rpmbmodule.c create mode 100644 python/rpmds-py.c create mode 100644 python/rpmds-py.h create mode 100644 python/rpmfd-py.c create mode 100644 python/rpmfd-py.h create mode 100644 python/rpmfi-py.c create mode 100644 python/rpmfi-py.h create mode 100644 python/rpmii-py.c create mode 100644 python/rpmii-py.h create mode 100644 python/rpmkeyring-py.c create mode 100644 python/rpmkeyring-py.h create mode 100644 python/rpmmacro-py.c create mode 100644 python/rpmmacro-py.h create mode 100644 python/rpmmi-py.c create mode 100644 python/rpmmi-py.h create mode 100644 python/rpmmodule.c create mode 100644 python/rpmps-py.c create mode 100644 python/rpmps-py.h create mode 100644 python/rpmsmodule.c create mode 100644 python/rpmsystem-py.h create mode 100644 python/rpmtd-py.c create mode 100644 python/rpmtd-py.h create mode 100644 python/rpmte-py.c create mode 100644 python/rpmte-py.h create mode 100644 python/rpmts-py.c create mode 100644 python/rpmts-py.h create mode 100644 python/spec-py.c create mode 100644 python/spec-py.h create mode 100644 rpm.am create mode 100644 rpm.pc.in create mode 100644 rpm2cpio.c create mode 100644 rpmbuild.c create mode 100644 rpmdb.c create mode 100644 rpmio/Makefile.am create mode 100644 rpmio/Makefile.in create mode 100644 rpmio/argv.c create mode 100644 rpmio/argv.h create mode 100644 rpmio/base64.c create mode 100644 rpmio/base64.h create mode 100644 rpmio/digest.c create mode 100644 rpmio/digest.h create mode 100644 rpmio/macro.c create mode 100644 rpmio/rpmfileutil.c create mode 100644 rpmio/rpmfileutil.h create mode 100644 rpmio/rpmhook.c create mode 100644 rpmio/rpmhook.h create mode 100644 rpmio/rpmio.c create mode 100644 rpmio/rpmio.h create mode 100644 rpmio/rpmio_internal.h create mode 100644 rpmio/rpmkeyring.c create mode 100644 rpmio/rpmkeyring.h create mode 100644 rpmio/rpmlog.c create mode 100644 rpmio/rpmlog.h create mode 100644 rpmio/rpmlua.c create mode 100644 rpmio/rpmlua.h create mode 100644 rpmio/rpmmacro.h create mode 100644 rpmio/rpmmalloc.c create mode 100644 rpmio/rpmpgp.c create mode 100644 rpmio/rpmpgp.h create mode 100644 rpmio/rpmsq.c create mode 100644 rpmio/rpmsq.h create mode 100644 rpmio/rpmstring.c create mode 100644 rpmio/rpmstring.h create mode 100644 rpmio/rpmsw.c create mode 100644 rpmio/rpmsw.h create mode 100644 rpmio/rpmurl.h create mode 100644 rpmio/rpmutil.h create mode 100644 rpmio/url.c create mode 100644 rpmkeys.c create mode 100644 rpmpopt.in create mode 100644 rpmqv.c create mode 100644 rpmrc.in create mode 100644 rpmsign.c create mode 100644 rpmspec.c create mode 100644 scripts/Makefile.am create mode 100644 scripts/Makefile.in create mode 100755 scripts/brp-compress create mode 100644 scripts/brp-java-gcjcompile create mode 100644 scripts/brp-python-bytecompile create mode 100755 scripts/brp-python-hardlink create mode 100755 scripts/brp-strip create mode 100755 scripts/brp-strip-comment-note create mode 100644 scripts/brp-strip-shared create mode 100755 scripts/brp-strip-static-archive create mode 100755 scripts/check-buildroot create mode 100755 scripts/check-files create mode 100755 scripts/check-prereqs create mode 100755 scripts/check-rpaths create mode 100755 scripts/check-rpaths-worker create mode 100755 scripts/desktop-file.prov create mode 100644 scripts/find-debuginfo.sh create mode 100755 scripts/find-lang.sh create mode 100644 scripts/find-php-provides create mode 100644 scripts/find-php-requires create mode 100755 scripts/find-provides.php create mode 100755 scripts/find-requires.php create mode 100755 scripts/fontconfig.prov create mode 100644 scripts/gendiff create mode 100644 scripts/libtooldeps.sh create mode 100644 scripts/macros.perl create mode 100644 scripts/macros.php create mode 100644 scripts/macros.python create mode 100644 scripts/mono-find-provides create mode 100644 scripts/mono-find-requires create mode 100644 scripts/ocaml-find-provides.sh create mode 100644 scripts/ocaml-find-requires.sh create mode 100644 scripts/osgideps.pl create mode 100755 scripts/perl.prov create mode 100755 scripts/perl.req create mode 100755 scripts/perldeps.pl create mode 100755 scripts/pkgconfigdeps.sh create mode 100755 scripts/pythondeps.sh create mode 100755 scripts/rpm.daily create mode 100644 scripts/rpm.log create mode 100755 scripts/rpm2cpio.sh create mode 100755 scripts/rpmdb_loadcvt create mode 100755 scripts/script.req create mode 100644 scripts/tcl.req create mode 100755 scripts/tgpg create mode 100755 scripts/vpkg-provides.sh create mode 100644 sign/Makefile.am create mode 100644 sign/Makefile.in create mode 100644 sign/rpmgensig.c create mode 100644 sign/rpmsign.h create mode 100644 system.h create mode 100644 tests/Makefile.am create mode 100644 tests/Makefile.in create mode 100644 tests/atlocal.in create mode 100644 tests/data/RPMS/foo-1.0-1.noarch.rpm create mode 100644 tests/data/RPMS/hello-1.0-1.i386.rpm create mode 100644 tests/data/RPMS/hello-1.0-1.ppc64.rpm create mode 100644 tests/data/SOURCES/hello-1.0-modernize.patch create mode 100644 tests/data/SOURCES/hello-1.0.tar.gz create mode 100644 tests/data/SOURCES/hello-2.0.tar.gz create mode 100644 tests/data/SPECS/configtest.spec create mode 100644 tests/data/SPECS/conflicttest.spec create mode 100644 tests/data/SPECS/deptest.spec create mode 100644 tests/data/SPECS/flangtest.spec create mode 100644 tests/data/SPECS/foo.spec create mode 100644 tests/data/SPECS/hello.spec create mode 100644 tests/data/SPECS/symlinktest.spec create mode 100644 tests/data/SPECS/verifyscript.spec create mode 100644 tests/data/SPECS/versiontest.spec create mode 100644 tests/data/SRPMS/foo-1.0-1.src.rpm create mode 100644 tests/data/SRPMS/hello-1.0-1.src.rpm create mode 100644 tests/local.at create mode 100644 tests/package.m4 create mode 100644 tests/rpmbuild.at create mode 100644 tests/rpmconfig.at create mode 100644 tests/rpmconflict.at create mode 100644 tests/rpmdb.at create mode 100644 tests/rpmdepmatch.at create mode 100644 tests/rpmdeps.at create mode 100644 tests/rpmgeneral.at create mode 100644 tests/rpmi.at create mode 100644 tests/rpmmacro.at create mode 100644 tests/rpmpython.at create mode 100644 tests/rpmquery.at create mode 100755 tests/rpmtests create mode 100644 tests/rpmtests.at create mode 100644 tests/rpmvercmp.at create mode 100644 tests/rpmverify.at create mode 100644 tools/debugedit.c create mode 100644 tools/elfdeps.c create mode 100644 tools/hashtab.c create mode 100644 tools/hashtab.h create mode 100644 tools/javadeps.c create mode 100644 tools/rpmdeps.c create mode 100644 tools/rpmgraph.c diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 0000000..ec20977 --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,1101 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +1.1 Quick configuration advice +============================== + +If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +1.2 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU `gettext'. Other packages have their own ways to +internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the included GNU +`gettext' library will be used. This library is wholly contained +within this package, usually in the `intl/' subdirectory, so prior +installation of the GNU `gettext' package is _not_ required. +Installers may use special options at configuration time for changing +the default behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will, respectively, bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might not be desirable. You should use +the more recent version of the GNU `gettext' library. I.e. if the file +`intl/VERSION' shows that the library which comes with this package is +more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages usually have many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.3 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your language by running the +command `locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from `no' to `nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under `nb' and some older ones under `no', it's recommended +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +older translations are used. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +1.4 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. + +1.5 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of October +2006. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB eo + +----------------------------------------------------+ + GNUnet | [] | + a2ps | [] [] [] [] [] | + aegis | () | + ant-phone | () | + anubis | [] | + ap-utils | | + aspell | [] [] [] [] [] | + bash | [] [] [] | + batchelor | [] | + bfd | | + bibshelf | [] | + binutils | [] | + bison | [] [] | + bison-runtime | | + bluez-pin | [] [] [] [] [] | + cflow | [] | + clisp | [] [] | + console-tools | [] [] | + coreutils | [] [] [] | + cpio | | + cpplib | [] [] [] | + cryptonit | [] | + darkstat | [] () [] | + dialog | [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + error | [] [] [] [] | + fetchmail | [] [] () [] | + fileutils | [] [] | + findutils | [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | | + gawk | [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] [] [] | + gip | [] | + gliv | [] | + glunarclock | [] | + gmult | [] [] | + gnubiff | () | + gnucash | () () [] | + gnucash-glossary | [] () | + gnuedu | | + gnulib | [] [] [] [] [] [] | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | | + gpe-clock | [] [] | + gpe-conf | [] [] | + gpe-contacts | | + gpe-edit | [] | + gpe-filemanager | | + gpe-go | [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] | + gpe-package | | + gpe-sketchbook | [] [] | + gpe-su | [] [] | + gpe-taskmanager | [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | | + gphoto2 | [] [] [] [] | + gprof | [] [] | + gpsdrive | () () | + gramadoir | [] [] | + grep | [] [] [] [] [] [] | + gretl | | + gsasl | | + gss | | + gst-plugins | [] [] [] [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | () | + gtkam | [] [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] | + id-utils | [] [] | + impost | | + indent | [] [] [] | + iso_3166 | [] [] | + iso_3166_2 | | + iso_4217 | [] | + iso_639 | [] [] | + jpilot | [] | + jtag | | + jwhois | | + kbd | [] [] [] [] | + keytouch | | + keytouch-editor | | + keytouch-keyboa... | | + latrine | () | + ld | [] | + leafpad | [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] | + libgpewidget | [] [] [] | + libgpg-error | [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | | + libiconv | [] [] | + libidn | [] [] | + lifelines | [] () | + lilypond | [] | + lingoteach | | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailutils | [] | + make | [] [] | + man-db | [] () [] [] | + minicom | [] [] [] | + mysecretdiary | [] [] | + nano | [] [] [] | + nano_1_0 | [] () [] [] | + opcodes | [] | + parted | | + pilot-qof | [] | + psmisc | [] | + pwdutils | | + python | | + qof | | + radius | [] | + recode | [] [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] [] | + sed | [] [] [] | + sh-utils | [] [] | + shared-mime-info | [] [] [] [] | + sharutils | [] [] [] [] [] [] | + shishi | | + silky | | + skencil | [] () | + sketch | [] () | + solfege | | + soundtracker | [] [] | + sp | [] | + stardict | [] | + system-tools-ba... | [] [] [] [] [] [] [] [] [] | + tar | [] | + texinfo | [] [] [] | + textutils | [] [] [] | + tin | () () | + tp-robot | [] | + tuxpaint | [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | () | + wdiff | [] [] [] [] | + wget | [] [] | + xchat | [] [] [] [] [] [] | + xkeyboard-config | | + xpad | [] [] | + +----------------------------------------------------+ + af am ar az be bg bs ca cs cy da de el en en_GB eo + 10 0 1 2 9 22 1 42 41 2 60 95 16 1 17 16 + + es et eu fa fi fr ga gl gu he hi hr hu id is it + +--------------------------------------------------+ + GNUnet | | + a2ps | [] [] [] () | + aegis | | + ant-phone | [] | + anubis | [] | + ap-utils | [] [] | + aspell | [] [] [] | + bash | [] [] [] | + batchelor | [] [] | + bfd | [] | + bibshelf | [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] [] [] | + bison-runtime | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] | + cflow | [] | + clisp | [] [] | + console-tools | | + coreutils | [] [] [] [] [] [] | + cpio | [] [] [] | + cpplib | [] [] | + cryptonit | [] | + darkstat | [] () [] [] [] | + dialog | [] [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] [] [] [] | + doodle | [] [] | + e2fsprogs | [] [] [] | + enscript | [] [] [] | + error | [] [] [] [] [] | + fetchmail | [] | + fileutils | [] [] [] [] [] [] | + findutils | [] [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | [] [] | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] [] | + gcc | [] | + gettext-examples | [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] | + gimp-print | [] [] | + gip | [] [] [] | + gliv | () | + glunarclock | [] [] [] | + gmult | [] [] [] | + gnubiff | () () | + gnucash | () () () | + gnucash-glossary | [] [] | + gnuedu | [] | + gnulib | [] [] [] [] [] [] [] [] | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | | + gpe-clock | [] [] [] [] | + gpe-conf | [] | + gpe-contacts | [] [] | + gpe-edit | [] [] [] [] | + gpe-filemanager | [] | + gpe-go | [] [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] [] [] [] | + gpe-package | [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] [] | + gpe-taskmanager | [] [] [] | + gpe-timesheet | [] [] [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] [] | + gpsdrive | () () [] () | + gramadoir | [] [] | + grep | [] [] [] [] [] [] [] [] [] [] [] [] | + gretl | [] [] [] | + gsasl | [] [] | + gss | [] | + gst-plugins | [] [] [] | + gst-plugins-base | [] [] | + gst-plugins-good | [] [] [] | + gstreamer | [] [] [] | + gtick | [] | + gtkam | [] [] [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] [] [] | + impost | [] [] | + indent | [] [] [] [] [] [] [] [] [] [] | + iso_3166 | [] [] [] | + iso_3166_2 | [] | + iso_4217 | [] [] [] [] | + iso_639 | [] [] [] [] [] | + jpilot | [] [] | + jtag | [] | + jwhois | [] [] [] [] [] | + kbd | [] [] | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + latrine | [] [] [] | + ld | [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] | + libgpewidget | [] [] [] [] [] | + libgpg-error | | + libgphoto2 | [] [] [] | + libgphoto2_port | [] [] | + libgsasl | [] [] | + libiconv | [] [] | + libidn | [] [] | + lifelines | () | + lilypond | [] | + lingoteach | [] [] [] | + lynx | [] [] [] | + m4 | [] [] [] [] | + mailutils | [] [] | + make | [] [] [] [] [] [] [] [] | + man-db | () | + minicom | [] [] [] [] | + mysecretdiary | [] [] [] | + nano | [] [] [] [] [] [] | + nano_1_0 | [] [] [] [] [] | + opcodes | [] [] [] [] | + parted | [] [] [] [] | + pilot-qof | | + psmisc | [] [] [] | + pwdutils | | + python | | + qof | [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] | + sed | [] [] [] [] [] | + sh-utils | [] [] [] [] [] [] [] | + shared-mime-info | [] [] [] [] [] [] | + sharutils | [] [] [] [] [] [] [] [] | + shishi | | + silky | [] | + skencil | [] [] | + sketch | [] [] | + solfege | [] | + soundtracker | [] [] [] | + sp | [] | + stardict | [] | + system-tools-ba... | [] [] [] [] [] [] [] [] | + tar | [] [] [] [] [] [] [] | + texinfo | [] [] | + textutils | [] [] [] [] [] | + tin | [] () | + tp-robot | [] [] [] [] | + tuxpaint | [] [] | + unicode-han-tra... | | + unicode-transla... | [] [] | + util-linux | [] [] [] [] [] [] [] | + vorbis-tools | [] [] | + wastesedge | () | + wdiff | [] [] [] [] [] [] [] [] | + wget | [] [] [] [] [] [] [] [] | + xchat | [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + xpad | [] [] [] | + +--------------------------------------------------+ + es et eu fa fi fr ga gl gu he hi hr hu id is it + 88 22 14 2 40 115 61 14 1 8 1 6 59 31 0 52 + + ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no + +-------------------------------------------------+ + GNUnet | | + a2ps | () [] [] () | + aegis | () | + ant-phone | [] | + anubis | [] [] [] | + ap-utils | [] | + aspell | [] [] | + bash | [] | + batchelor | [] [] | + bfd | | + bibshelf | [] | + binutils | | + bison | [] [] [] | + bison-runtime | [] [] [] | + bluez-pin | [] [] [] | + cflow | | + clisp | [] | + console-tools | | + coreutils | [] | + cpio | | + cpplib | [] | + cryptonit | [] | + darkstat | [] [] | + dialog | [] [] | + diffutils | [] [] [] | + doodle | | + e2fsprogs | [] | + enscript | [] | + error | [] | + fetchmail | [] [] | + fileutils | [] [] | + findutils | [] | + flex | [] [] | + fslint | [] [] | + gas | | + gawk | [] [] | + gbiff | [] | + gcal | | + gcc | | + gettext-examples | [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] | + gip | [] [] | + gliv | [] | + glunarclock | [] [] | + gmult | [] [] | + gnubiff | | + gnucash | () () | + gnucash-glossary | [] | + gnuedu | | + gnulib | [] [] [] [] | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] | + gpe-beam | [] | + gpe-calendar | [] | + gpe-clock | [] [] [] | + gpe-conf | [] [] | + gpe-contacts | [] | + gpe-edit | [] [] [] | + gpe-filemanager | [] [] | + gpe-go | [] [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] | + gpe-taskmanager | [] [] [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | [] | + gphoto2 | [] [] | + gprof | | + gpsdrive | () () () | + gramadoir | () | + grep | [] [] [] [] | + gretl | | + gsasl | [] | + gss | | + gst-plugins | [] | + gst-plugins-base | | + gst-plugins-good | [] | + gstreamer | [] | + gtick | | + gtkam | [] | + gtkorphan | [] | + gtkspell | [] [] | + gutenprint | | + hello | [] [] [] [] [] [] | + id-utils | [] | + impost | | + indent | [] [] | + iso_3166 | [] | + iso_3166_2 | [] | + iso_4217 | [] [] [] | + iso_639 | [] [] | + jpilot | () () () | + jtag | | + jwhois | [] | + kbd | [] | + keytouch | [] | + keytouch-editor | | + keytouch-keyboa... | | + latrine | [] | + ld | | + leafpad | [] [] | + libc | [] [] [] [] [] | + libexif | | + libextractor | | + libgpewidget | [] | + libgpg-error | | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | [] | + libiconv | | + libidn | [] [] | + lifelines | [] | + lilypond | | + lingoteach | [] | + lynx | [] [] | + m4 | [] [] | + mailutils | | + make | [] [] [] | + man-db | () | + minicom | [] | + mysecretdiary | [] | + nano | [] [] [] | + nano_1_0 | [] [] [] | + opcodes | [] | + parted | [] [] | + pilot-qof | | + psmisc | [] [] [] | + pwdutils | | + python | | + qof | | + radius | | + recode | [] | + rpm | [] [] | + screem | [] | + scrollkeeper | [] [] [] [] | + sed | [] [] | + sh-utils | [] [] | + shared-mime-info | [] [] [] [] [] | + sharutils | [] [] | + shishi | | + silky | [] | + skencil | | + sketch | | + solfege | | + soundtracker | | + sp | () | + stardict | [] [] | + system-tools-ba... | [] [] [] [] | + tar | [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] | + tin | | + tp-robot | [] | + tuxpaint | [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] | + vorbis-tools | [] | + wastesedge | [] | + wdiff | [] [] | + wget | [] [] | + xchat | [] [] [] [] | + xkeyboard-config | [] | + xpad | [] [] [] | + +-------------------------------------------------+ + ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no + 52 24 2 2 1 3 0 2 3 21 0 15 1 97 5 1 + + nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta + +------------------------------------------------------+ + GNUnet | | + a2ps | () [] [] [] [] [] [] | + aegis | () () | + ant-phone | [] [] | + anubis | [] [] [] | + ap-utils | () | + aspell | [] [] | + bash | [] [] [] | + batchelor | [] [] | + bfd | | + bibshelf | [] | + binutils | [] [] | + bison | [] [] [] [] [] | + bison-runtime | [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] [] | + cflow | [] | + clisp | [] | + console-tools | [] | + coreutils | [] [] [] [] | + cpio | [] [] [] | + cpplib | [] | + cryptonit | [] [] | + darkstat | [] [] [] [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] | + doodle | [] [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] [] | + error | [] [] [] [] | + fetchmail | [] [] [] | + fileutils | [] [] [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + fslint | [] [] [] [] | + gas | | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gimp-print | [] [] | + gip | [] [] [] [] | + gliv | [] [] [] [] | + glunarclock | [] [] [] [] [] [] | + gmult | [] [] [] [] | + gnubiff | () | + gnucash | () [] | + gnucash-glossary | [] [] [] | + gnuedu | | + gnulib | [] [] [] [] [] | + gnunet-gtk | [] | + gnutls | [] [] | + gpe-aerial | [] [] [] [] [] [] [] | + gpe-beam | [] [] [] [] [] [] [] | + gpe-calendar | [] | + gpe-clock | [] [] [] [] [] [] [] [] | + gpe-conf | [] [] [] [] [] [] [] | + gpe-contacts | [] [] [] [] [] | + gpe-edit | [] [] [] [] [] [] [] [] | + gpe-filemanager | [] [] | + gpe-go | [] [] [] [] [] [] | + gpe-login | [] [] [] [] [] [] [] [] | + gpe-ownerinfo | [] [] [] [] [] [] [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] [] [] [] [] [] [] | + gpe-su | [] [] [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] [] | + gpe-todo | [] [] [] [] | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] [] | + gramadoir | [] [] | + grep | [] [] [] [] [] [] [] [] | + gretl | [] | + gsasl | [] [] [] | + gss | [] [] [] | + gst-plugins | [] [] [] [] | + gst-plugins-base | [] | + gst-plugins-good | [] [] [] [] | + gstreamer | [] [] [] | + gtick | [] | + gtkam | [] [] [] [] | + gtkorphan | [] | + gtkspell | [] [] [] [] [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] [] [] [] | + id-utils | [] [] [] [] | + impost | [] | + indent | [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] [] [] [] | + iso_639 | [] [] [] [] | + jpilot | | + jtag | [] | + jwhois | [] [] [] [] | + kbd | [] [] [] | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + latrine | [] [] | + ld | [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] [] | + libgpewidget | [] [] [] [] [] [] [] | + libgpg-error | [] [] | + libgphoto2 | [] | + libgphoto2_port | [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] | + libidn | [] [] () | + lifelines | [] [] | + lilypond | | + lingoteach | [] | + lynx | [] [] [] | + m4 | [] [] [] [] [] | + mailutils | [] [] [] [] | + make | [] [] [] [] | + man-db | [] [] | + minicom | [] [] [] [] [] | + mysecretdiary | [] [] [] [] | + nano | [] [] [] | + nano_1_0 | [] [] [] [] | + opcodes | [] [] | + parted | [] | + pilot-qof | [] | + psmisc | [] [] | + pwdutils | [] [] | + python | | + qof | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + rpm | [] [] [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] | + shared-mime-info | [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] | + silky | [] | + skencil | [] [] [] | + sketch | [] [] [] | + solfege | [] | + soundtracker | [] [] | + sp | | + stardict | [] [] [] | + system-tools-ba... | [] [] [] [] [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] [] | + textutils | [] [] [] | + tin | () | + tp-robot | [] | + tuxpaint | [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + vorbis-tools | [] [] | + wastesedge | | + wdiff | [] [] [] [] [] [] | + wget | [] [] [] [] | + xchat | [] [] [] [] [] [] [] | + xkeyboard-config | [] [] | + xpad | [] [] [] | + +------------------------------------------------------+ + nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta + 0 2 3 58 30 54 5 73 72 4 40 46 11 50 128 2 + + tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu + +---------------------------------------------------+ + GNUnet | [] | 2 + a2ps | [] [] [] | 19 + aegis | | 0 + ant-phone | [] [] | 6 + anubis | [] [] [] | 11 + ap-utils | () [] | 4 + aspell | [] [] [] | 15 + bash | [] | 11 + batchelor | [] [] | 9 + bfd | | 1 + bibshelf | [] | 7 + binutils | [] [] [] | 9 + bison | [] [] [] | 19 + bison-runtime | [] [] [] | 15 + bluez-pin | [] [] [] [] [] [] | 28 + cflow | [] [] | 5 + clisp | | 6 + console-tools | [] [] | 5 + coreutils | [] [] | 16 + cpio | [] [] [] | 9 + cpplib | [] [] [] [] | 11 + cryptonit | | 5 + darkstat | [] () () | 15 + dialog | [] [] [] [] [] | 30 + diffutils | [] [] [] [] | 28 + doodle | [] | 6 + e2fsprogs | [] [] | 10 + enscript | [] [] [] | 16 + error | [] [] [] [] | 18 + fetchmail | [] [] | 12 + fileutils | [] [] [] | 18 + findutils | [] [] [] | 17 + flex | [] [] | 15 + fslint | [] | 9 + gas | [] | 3 + gawk | [] [] | 15 + gbiff | [] | 5 + gcal | [] | 5 + gcc | [] [] [] | 6 + gettext-examples | [] [] [] [] [] [] | 27 + gettext-runtime | [] [] [] [] [] [] | 28 + gettext-tools | [] [] [] [] [] | 19 + gimp-print | [] [] | 12 + gip | [] [] | 12 + gliv | [] [] | 8 + glunarclock | [] [] [] | 15 + gmult | [] [] [] [] | 15 + gnubiff | [] | 1 + gnucash | () | 2 + gnucash-glossary | [] [] | 9 + gnuedu | [] | 2 + gnulib | [] [] [] [] [] | 28 + gnunet-gtk | | 1 + gnutls | | 2 + gpe-aerial | [] [] | 14 + gpe-beam | [] [] | 14 + gpe-calendar | [] | 3 + gpe-clock | [] [] [] [] | 21 + gpe-conf | [] [] | 14 + gpe-contacts | [] [] | 10 + gpe-edit | [] [] [] [] | 20 + gpe-filemanager | [] | 6 + gpe-go | [] [] | 15 + gpe-login | [] [] [] [] [] | 21 + gpe-ownerinfo | [] [] [] [] | 21 + gpe-package | [] | 6 + gpe-sketchbook | [] [] | 16 + gpe-su | [] [] [] | 20 + gpe-taskmanager | [] [] [] | 20 + gpe-timesheet | [] [] [] [] | 18 + gpe-today | [] [] [] [] [] | 21 + gpe-todo | [] | 7 + gphoto2 | [] [] [] [] | 20 + gprof | [] [] | 11 + gpsdrive | | 4 + gramadoir | [] | 7 + grep | [] [] [] [] | 34 + gretl | | 4 + gsasl | [] [] | 8 + gss | [] | 5 + gst-plugins | [] [] [] | 15 + gst-plugins-base | [] [] [] | 9 + gst-plugins-good | [] [] [] [] [] | 20 + gstreamer | [] [] [] | 17 + gtick | [] | 3 + gtkam | [] | 13 + gtkorphan | [] | 7 + gtkspell | [] [] [] [] [] [] | 26 + gutenprint | | 3 + hello | [] [] [] [] [] | 37 + id-utils | [] [] | 14 + impost | [] | 4 + indent | [] [] [] [] | 25 + iso_3166 | [] [] [] [] | 16 + iso_3166_2 | | 2 + iso_4217 | [] [] | 14 + iso_639 | [] | 14 + jpilot | [] [] [] [] | 7 + jtag | [] | 3 + jwhois | [] [] [] | 13 + kbd | [] [] | 12 + keytouch | [] | 4 + keytouch-editor | | 2 + keytouch-keyboa... | [] | 3 + latrine | [] [] | 8 + ld | [] [] [] [] | 8 + leafpad | [] [] [] [] | 23 + libc | [] [] [] | 23 + libexif | [] | 4 + libextractor | [] | 5 + libgpewidget | [] [] [] | 19 + libgpg-error | [] | 4 + libgphoto2 | [] | 8 + libgphoto2_port | [] [] [] | 11 + libgsasl | [] | 8 + libiconv | [] | 7 + libidn | [] [] | 10 + lifelines | | 4 + lilypond | | 2 + lingoteach | [] | 6 + lynx | [] [] [] | 15 + m4 | [] [] [] | 18 + mailutils | [] | 8 + make | [] [] [] | 20 + man-db | [] | 6 + minicom | [] | 14 + mysecretdiary | [] [] | 12 + nano | [] [] | 17 + nano_1_0 | [] [] [] | 18 + opcodes | [] [] | 10 + parted | [] [] [] | 10 + pilot-qof | [] | 3 + psmisc | [] | 10 + pwdutils | [] | 3 + python | | 0 + qof | [] | 4 + radius | [] | 6 + recode | [] [] [] | 25 + rpm | [] [] [] [] | 14 + screem | [] | 2 + scrollkeeper | [] [] [] [] | 26 + sed | [] [] [] | 22 + sh-utils | [] | 15 + shared-mime-info | [] [] [] [] | 24 + sharutils | [] [] [] | 23 + shishi | | 1 + silky | [] | 4 + skencil | [] | 7 + sketch | | 6 + solfege | | 2 + soundtracker | [] [] | 9 + sp | [] | 3 + stardict | [] [] [] [] | 11 + system-tools-ba... | [] [] [] [] [] [] [] | 37 + tar | [] [] [] [] | 20 + texinfo | [] [] [] | 15 + textutils | [] [] [] | 17 + tin | | 1 + tp-robot | [] [] [] | 10 + tuxpaint | [] [] [] | 16 + unicode-han-tra... | | 0 + unicode-transla... | | 2 + util-linux | [] [] [] | 20 + vorbis-tools | [] [] | 11 + wastesedge | | 1 + wdiff | [] [] | 22 + wget | [] [] [] | 19 + xchat | [] [] [] [] | 29 + xkeyboard-config | [] [] [] [] | 11 + xpad | [] [] [] | 14 + +---------------------------------------------------+ + 77 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu + 170 domains 0 1 1 77 39 0 136 10 1 48 5 54 0 2028 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If October 2006 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +1.6 Using `gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/CHANGES b/CHANGES new file mode 100644 index 0000000..d6365c1 --- /dev/null +++ b/CHANGES @@ -0,0 +1,2927 @@ +4.4.2 -> 4.4.2.1: + - remove internal sqlite, zlib, gettext + - remove obsolete utilities + - remove vendor gpg keys + - fix spec parenthesis parsing + - allow building without neon + - disable hkp lookup by default + - re-enable file-conflicts detection (rhbz#151609) + - fix potential segfault in available file provides checking + - fix Requires(pre,postun) (rh#155700) + - fix db build wrt newer CFLAGS + - fix popt CHARSET for various languages (rhbz#172155) + - fix install size calculation with excludes in manifest (rhbz#89661) + - use full path in the rpm cronjob (rhbz#174211) + - filter out incorrect perl(main) provides (rhbz#177960) + - fix scriptlet deadlock (rhbz#146549) + - fix netshared path comparison (rhbz#52725) + - make fcntl lock sensitive to --root (rhbz#151255) + - fix rpmvercomp for strings with trailing null segments (rhbz#178798) + - fix doxygen generation (rhbz#187714) + - fix potential segfault if no rpmlock_path defined (rhbz#231146) + - fix for thinko in debugedit on ppc + - fix debugedit wrt OOo + - fix debugedit with ../../ in paths + - fix various other issues in debugedit (rhbz#205339) + - allow customisable diff and use -p by default (rhbz#146981) + - handle fork failure + - fix a typo causing compiler warning (susebz#178055) + - fix a %{buildsubdir} typo/thinko + - fix uncompress waitpid logic to shut up the compiler (susebz#160434) + - add support for %{_docdir} macro (rhbz#125514) + - fix segfault on rpmbuild with empty file list + - allow --ignoresize for erase operations + - don't attempt to execute empty transaction (susebz#43267) + - don't segfault if Fileno() is called with NULL + - abort build if cwd not determinable + - fix --noghost query option (rhbz#103207) + - fix off-by-one error in glob + - check rpmtsInitDB() return value + - build internal Lua without readline support + - make rpmdbSync obey the no_dbsync flag + - fix package verification for packages with header+payload RSA but + no header-only RSA + - drop any s-bits early when deleting files (susebz#50376, rhbz#125517) + - fix handling of old packages that use HEADERIMAGE + - catch disk-space errors when writing signed packages + - fix default verify flags for %doc (rhbz#235353) + - fix debugedit for relative paths (rhbz#232222) + - add configurable preferable elf colour policy (rhbz#235757) + - python: always treat changelog as list + - use older perl helper scripts by default + - add mono req/provides support + - remove SELinux context verification (rhbz#193488) + - fix building without Lua support + - fix --rebuilddb with --root option + - fix --setperms and --setugids with uninstalled packages + - don't run pre- and posttrans scripts in test mode + - dbmatch keys can be unicode objects also (rhbz#219008) + - gendiff: let diff arguments be specified in the environment + - gendiff: emit diff headers (rhbz#237561) + - improved error messages in verification of unreadable files + - python: raise exception if tsAdd fails + - check for supported package payload format (rhbz#140052) + - fail build if beecrypt headers not found + - build: check unpackaged files even if other errors are present + - restore SIGILL handler in machine detection code + - add --dupes popt alias for detecting duplicate packages in rpmdb + - fix typo in check-prereq (rhbz#203182) + - python: fix rpm.te Key() refcount (rhbz#182063) + - python: always treat fileverifyflags as list + - disable strict aliasing if compiler supports it (type-punning warns) + - add zh_TW translation + - add support for srcdefattr macro (susebz#48870, rhbz#125515) + - detect python 2.5 automatically in configure + - python: reference counting for match-iterators (rhbz#241751) + - updated fi translation + - fix format string errors in de translation + - allow characters > 127 that don't fit the current locale in spec + - treat null epoch equal to zero epoch in freshen (rhbz#143301) + - python: treat null epoch equal to zero labelCompare (rhbz#227860) + - permit installing multiple package versions with -i (rhbz#213399) + - fix . query output for non-installed package (rhbz#124016) + - updated pl translation + - don't read packages with non-verifiable signatures (rhbz#239557) + - don't try to open non-existent file twice in query + - flush query format buffer before listing files (rhbz#212833) + - check all header strings to resize buffer (rhbz#212833) + - don't segfault on a header without RPMTAG_NAME (rhbz#239557) + - fix file status for replaced files (rhbz#237478) + - make %_signature default to gpg instead of none + - don't skip directories in fingerprinting (rhbz#140055, 223639, ...) + - remove vendor, release specific dependency whitouts + - remove upstream spec files for rpm and popt + - don't open temporary databases in rpmdbOpenAll() + - open non-temporary db's before chroot (rhbz#103952, 173285) + - don't treat provides as implicit obsoletes (rhbz#111071, ...) + - fix CVE-2007-1536, CVE-2007-2799 in internal libmagic + - support specifying fuzz factor to %patch (rhbz#243720) + - enable ordering on erase mode + - transaction ordering fixes (rhbz#196590, 202540, 202542, ...) + - added IPv4/6 and EPSV support + - remove hardcoded /var/log/lastlog kludgery + - don't mmap large files (rhbz#139539, 177616) + - detect and provide a requirement for DT_GNU_HASH + - ARM architecture update + - update popt version for clean upgradability + - remove hardcoded libtermcap vs bash kludge + - updated Russian man pages (rhbz#185620) + - fix a sparse warning in popt.h (rhbz#202005) + - disable broken "make check" tests + - treat /usr/share/gtk-doc/html/ as a docdir + - plug some minor memory leaks + - use --wildcards with tar for compatibility with tar >= 1.15.91 + - fix segfault on errors if neon transport is used (rhbz#220392) + - new buildroot sanity checker scripts check-buildroot and check-rpaths + - new debugedit option for recomputing build ID + +4.4.1 -> 4.4.2: + - start 4.4.2 devel. + - sqlite3: revert cClose scoping, data is freed in cClose unlike db4. + - build against sqlite3-3.1.2. + - sqlite3: update encode/decode from sqlite-2.8.16. + - add --xml popt alias for query modes. + - remove _rpmdb now that python2.[34] are commonly available. + - remove remnant -I/opt/local hacks, --prefix=/usr is recommended. + - rework configure.ac et al to lose internal library baggage flexibly. + - updated sv.po . + - permit gpg to be used for RSA signatures. + - permit RSA key sizes larger than 1024 bits. + - permit RSA/{sha1,sha256,sha384,sha512} signature verification. + - updated de.po (#162756). + - added CVSId: tag and SVNId: alias (#162807). + - added brp-java-gcjcompile build helper. + - fix: java compiled with -O0 confuses debugedit (#161722). + - fix: % at end-of-line overflow (#161091). + - *_terminate_build macros set per-pkg, not per-invocation (#161081). + - use perldeps.pl, phase out perl.{req,prov} (#161921). + - fix: make sqlite3 rpmdb endian-neutral (#159425). + - fix: permit sqlite3 rpmdb with chroot (#159424). + - fix: find-debuginfo.sh not handling set[ug]id ELF files (#100963). + - fix: find-debuginfo.sh kernel voo-doo tweaks (#159346). + - fix: initialize variables used in debug msg (#160458). + - permit zlib in rpm to be built with make -j (#159404). + - avoid '?' for zero length file mmap failure doing md5 (#159405). + - permit scriptlet includes from builddir for spec files w/o %setup. + - upgrade to zlib-1.2.2.4 internal. + - macosx: avoid minigzip build failures. + - upgrade to file-4.14 internal. + - fix: magic_file() closes stdin when given directory path. + - use perldeps.pl, phase out perl.{req,prov} (again). + - document __vsflags (#147489). + - release rpm-4.4.2. + +4.4 -> 4.4.1: + - force *.py->*.pyo byte code compilation with brp-python-bytecompile. + - automagically detect and emit "python(abi) = 2.4" dependencies. + - popt 1.10.1 to preserve newer. + - use package color as Obsoletes: color. + - upgrade to db-4.3.27. + - revert MAGIC_COMPRESS, real fix is in libmagic (#143782). + - upgrade to file-4.12 internal. + - mac os x patches (#131943,#131944,#132924,#132926). + - mac os x patches (#133611, #133612, #134637). + - build against external/internal neon. + - add https://svn.uhulinux.hu/packages/dev/zlib/patches/02-rsync.patch + - changes to build on Mac OS X using darwinports neon/beecrypt. + - blueprint rpm-4_4 and HEAD to minimize diff spew. + - add missing #if defined(ENABLE_NLS) (#146184). + - python: force dbMatch() h# key to be 32 bit integer (#146477). + - add sqlite internal (build still expects external sqlite3-3.0.8). + - sqlite: revert to original narrow scoping of cOpen/cClose. + - fix: length of gpg V4 hash seed was incorrect (#146896). + - add support for V4 rfc-2440 signatures. + - sqlite3: run-time endian test rather than chasing (#146752). + - discover and use getmntinfo if present. + - perform callbacks as always (#147537). + - permit build scriptlet interpreters to be individually overridden. + - zlib: uniqify certain symbols to prevent name space pollution. + - macosx: include so that python sees the u_char typedef. + - macosx: change to --prefix=/usr rather than /opt/local. + - use waitpid rather than SIGCHLD reaper. + - rip out DB_PRIVATE revert if not NPTL, it's not the right thing to do. + - don't classify files in /dev (#146623). + - don't build with sqlite3 if is missing. + +4.3.3 -> 4.4: + - pentium3/pentium4 arch support (pluto@PLD). + - cpuid() cleanups for PIC/non-PIC and gcc 3.4 (pluto@PLD). + - rpmGlob() is now locale independent (wiget@PLD). + - conditional build support/unification (jajcus,malekith,qboosh,wiget@PLD). + - fix: readelf.c breakage on some non x86 arches (qboosh@PLD). + - find-lang.sh: implemented --with-kde (finds KDE help files); + - add --all-name option (finds every lang file); drop defattr() + from *.lang files (arekm,mkochano,pascalek,wiget@PLD). + - add type to tag array. + - add Disttag: syntax to spec file parser and header content. + - define Suggests:/Enhances: and Priority: tag values. + - prevent RPMSENSE_PREREQ from being set or tested. + - python: add rpm.ps() object to carry problem set info. + - python: permit rpm.ds() analogue to hdr.dsFromHeader() creator. + - python: permit rpm.fi() analogue to hdr.fiFromHeader() creator. + - silently add default %defattr(-,root,root) for all packages. + - fix: don't set handler if SIG_IGN is already set (#134474). + - disable expensive header+payload verifies in default config. + - adjust digest/signature stats to count #pkgs and bytes. + - obsolete Serial:, Copyright:, and RHNPlatform: syntax in spec files. + - permit Obsoletes: /path/to/file. + - permit Conflicts: /path/to/file. + - free rpmrc when looping on --target arches (#127730). + - fix: handle non-unique dirnames in rpmalAdd(). + - integrate rpmgi "generic iterator" with query/verify. + - bump popt version to 1.10. + - attempt dependency tree breadth, take 1. + - use external libneon for http/https transport. + - add --delsign to purge packages of digital signatures. + - neon used by default for http/https transport. + - upgrade to db-4.3.21 final internal. + - remove noNeon runtime switch, http through neon only. + - remove http put to be able to build against upstream neon. + - bump soname into libfoo-4.4.so everywhere. + - sparcv8: optflags changed to -mtune=ultrasparc (#140420). + - add BuildRequires: neon-devel. + - fix: chunked davRead returns 0 is EOF. + - python: bleeping keywords broke labelCompare. + - add support for automagic pubkey retrieval using HKP. + - detect and return errors from neon through Ferror. + - use package color as Obsoletes: color. + +4.3.2 -> 4.3.3: + - bump micro version. + - make peace with libtool-1.5.10 and automake-1.9.3. + - python: add python 2.4 support. + - selinux: use rpm_execcon, not execv, to run scriptlets (#136848). + - fix: segfault on --verifydb (#138589). + - sparcv8: optflags changed to -mtune=ultrasparc (#140420). + - port to internal file-4.10 libmagic rather than libfmagic. + - move global /var/lock/rpm/transaction to dbpath. + - permit fcntl path to be configured through rpmlock_path macro. + +4.3.1 -> 4.3.2: + - use /etc/selinux/targeted/contexts/files/file_contexts for now. + - disable file contexts into package metadata during build. + - fix: "/path/foo.../bar" was losing a dot (#123844). + - lua embedded in rpmio. + - use lua to identify desired selinux file context regexes. + - add 'requires' and 'conflicts' tag aliases. + - python: return ds, not tuple, for ds iteration. + - python: permit integer keys to ts.dbMatch(). + - xml: use markup for empty tags. + - xml: instead of 0 markup. + - fix: disable fingerprint generation on kernel paths. + - add ppc8[25]60 arches. + - fix: evaluate rather than default file_contexts path. (#127501). + - avoid "can't happen" recursion while retrieving pubkeys. + - add ppc32dy4 arch. + - make peace with automake 1.9.1. + - fix: defattr for rpm-libs (#130461). + - print dependency loops as warning iff --anaconda is specified. + - fix: mark uninstalled elf32 files in rpmdb to disable -Va checks. + - ia64: add autorelocate_dcolor to macros.in. + - disable static linking until libc*.a provides symbols. + - fix: revert Obsoletes: "fix" (#134497). + - fix: work around for dangling symlinks not globbed (#134362). + - display caught signals to diagnose #134474 (gonna be SIGPIPE). + - display N-V-R.A in dependency failure messages. + - selinux: set "rpm_script_t" always, not just for /bin/sh. + - honor inherited SIG_IGN when establishing rpmdb signal exit (#134474). + - don't add time stamp to compressed man pages (#132526). + - python: remove ".A" from creaky ts.check() tuple return (#135008). + - python: fix RPMPROB_BADRELOCATE segfault return in ts.check (#137116). + - revert selinux patch until fc3 release. + - reprise file conflicts yet again, flip/flop/flip/flop ... + - fix: buffer overrun displaying ko_KR (#135389). + +4.3 -> 4.3.1: + - fix: don't add leading space to %* argv expansion (#119059). + - scareMem = 0 everywhere, document deprecation phase out. + - fix: add u+w to FIXPERMS. + - add buildtime to rpmds, methods to retrieve. + - python: hide labelCompare() underneath ds.cmp(a,b). + - fix: segfault on --recontext if file_contexts unreadable (#117374). + - fix: /etc/security/selinux/file_contexts is default path. + - fix: no transaction lock if --test was specified (#119783). + - perl: skip new-fangled head[34] while generating deps (#118243). + - perl: use __perl for perl variable macros (#115156). + - make peace with libtool-1.5.6. + - fix: follow current is_selinux_enabled() return (#121004). + ? fix: exit fail when erasing multiple identical packages (#120519). + - add aurora/sparc patches (#124469). + - use poll(2) if available, avoid borked aurora/sparc select (#124574). + +4.2.3 -> 4.3: + - upgrade to zlib-1.2.beta7. + - fix: short option help missing string terminator. + - permit secondary tag match patterns with RPMQV_ALL. + - fix: cut-n-paste error setting nopromote for Conflicts: (#81965). + - don't use error string after gzclose (Dmitry V. Levin). + - only internal Berkeley db from now on. + - revive "make dist". + - fix: added index size wrong iff _transaction_color != 0/3 (#103865). + - fix: escape '+' in regex patterns through RPMMIRE_DEFAULT (#103851). + - RPMMIRE_DEFAULT is overkill, use RPMMIRE_STRCMP instead (#103851). + - don't use mktemp if mkstemp is available (#103850). + - python: return None for NEVRAO, [] for everything else. + - python: throw exception on bad arg to labelCompare (#113661). + - re-add --enable-posixmutexes to build. + - fix: set fcontext from pkg when file_contexts doesn't exist (#114040). + - fix: set fcontext for "mkdir -p" directories not in packages. + - fix: setfiles (aka rpmsx.c) dinna handle patterns correctly. + - establish rpm_script_t before scriptlet exec. + - python: add patch to rpm-4_3 to initialize RE contexts. + - fix: only first "mkdir -p" directory had context set. + - stable sort for policy specifications, patterns before paths. + - set "rpm_script_t" exec type for scriptlets iff /bin/sh, else default. + - force FD_CLOEXEC on 1st 100 inherited fdno's. + - serialize rpmtsRun() using fcntl on /var/lock/rpm/transaction. + - permit globs in macrofiles: directive (#117217). + - fix: segfault generating transaction serialization lock path. + - use /etc/security/selinux/file_contexts instead. + - selinux: ignore ENOTSUP return from lsetfilecon. + - add sparcv8 and enable elf32/elf64 Zon sparc64 (#117302). + - fix: --querybynumber looped. + - fix: ENOTSUP filter from lsetfilecon borkage. + - fix: increase file context regex parse buffer to BUFSIZ. + - fix: handle elf64 note sections correctly. + - fix: grrr, skip notes on non-i386 entirely. + - endian neutral rpmdb join keys (finally). + - fix: dev package build on s390x hack around. + +4.2.2 -> 4.2.3: + - bump rpm and popt versions to insure "newer". + - change default behavior to resolve file conflicts as LIFO. + - add --fileconflicts to recover rpm traditional behavior. + - prefer elf64 over elf32 files, everywhere and always (#126853). + - ia64: auto-relocate entire, not partial, directory contents (#126905). + - ia64: auto-relocate glibc.ix86 interpreter path (#100563). + - shared libraries in separate rpm-libs package. + - fix: defattr for rpm-libs (#130461). + - fix: static glibc/libgcc helpers always installed (#127522). + - ia64: make sure that autorelocated file dependencies are satisfied. + - ia64: relocate all scriptlet interpreters. + - ia64: don't bother trying to preload autorelocated modules. + - fix: filesystem package needs mail/lock w/o getgrnam. + - fix: do getpwnam/getgrnam to load correct modules before chroot. + +4.2.1 -> 4.2.2: + - unify signal handling in librpmio, use condvar to deliver signal. + - make peace with libtool-1.5, autoconf-2.59, automake-1.8. + - build with db-4.2.52 internal. + - refresh bsddb. + - detect (and remove) dbenv files while upgrading to db-4.2.52. + - ensure that librpmdb links against just built, not system, librpmio. + - fix: dangling pointer brain fart (#107835). + - fix: ds.Single() method needs malloc'd elements (#109919). + - convert ja and ko man pages to utf8 (#106050). + - man page corrections (#106415). + - perl.req typo (#106672). + - fix: wrong package count for trigger scriptlet 1st arg (#100509). + - fix: don't break header SHA1 if non-existent user/group (#97727). + - remove fuids/fgids from rpmfi, easier to lookup fuser/fgroup instead. + - merge sensible parts of openpkg rpm.patch.bugfix (#104780). + - mark _javadocdir as documentation (#102898). + - flush pipe before exit 1 in check-files (#103867). + - perl.req: avoid regex misfire on '^use' in "= <<" assign (#109934). + - find-debuginfo.sh: permit stripping unwritable by non-root (#112429). + - missing build dependency (#111104). + - spelling corrections (#112728). + - use -fPIC -DPIC on all platforms, not just mandatory (#112713). + - popt: pad to display length, not strlen, for i18n popt args (#106240). + - python: include Python.h before glibc features.h. + - python: return [], not None, accessing header tags (#112794). + - python: avoid invoking python to acquire ill-specified parameters. + - add ia32e arch. + - fix: sq->reaped needs sighold(SIGCHLD)/sigrelease(SIGCHLD) (#117620). + +4.2 -> 4.2.1: + - fix: nested %if handling, optind initialization posix vs. glibc. + - add version check for package with provides and obsoletes. + - hack out O_DIRECT support in db4 for now. + - build with external beecrypt-3.0.0. + - x86_64 -> athlon, ppc64[ip]series -> ppc64 arch compatibility. + - treat missing epoch's exactly the same as Epoch: 0. + - pass structure pointer, not args, through headerSprintf call chain. + - add ":xml" header format modifier. + - --queryformat '[%%{*:xml}\n]' to dump header content in XML. + - add ".arch" suffix to erase colored packages with identical NEVR. + - update ja man pages (#92261). + - backport rpmsw stopwatch, insturment rpmts operations. + ? toy method to enable --stats through bindings. + - fdCLose typo (#97257). + - brp-python-bytecompile to automagically bytecode compile python. + ? update for fr.po (#97829). + - don't attempt to remove dbenv on --rebuilddb. + - autorelocate ix86 package file paths on ia64. + - resurrect manifests, RPMRC_NOTFOUND returned by readLead(). + - python: missed tuple refcount in IDTXload/IDTXglob. + - fix: IDTXglob should return REMOVETID sorted headers (#89857). + - resolve elf32/elf64 file conflicts to prefer elf64. + - apply debugedit patch necessary to produce kernel -debuginfo files. + ? ia64: autorelocate only colored, not every, file when installing. + ? repair find-debuginfo.sh to avoid recursing in /usr/lib/debug. + ? fix: ia64: don't attempt autorelocate on .src.rpm's. + ? fix: debuginfo: -not -path /usr/lib/debug needed -prune too. + ? fix: packages w/o file colors segfault. + ? add amd64 as alias for x86_64 (#99553). + ? fix: add -n to brp-compress to avoid needless file conflicts. + ? fix: ia32 on ia64 segfaults because of automagic file relocations. + ? speed up convertdb1 (#103206). + ? revert i18n table change to preserve help array size. + ? add config directories for ppc64pseries/ppc64iseries. + ? filter GLIBC_PRIVATE dependencies. + - fix: check added provides against installed conflicts (#110317). + - changes for python 2.3 + - changes for libtool-1.5 + - changes for automake-1.7.8 + - changes for db-4.2.42. + - splint fiddles. + +4.1 -> 4.2: + - set cachesize without a dbenv, the default is far too small. + - db: don't return EACCES on db->close w/o environment. + - unify cachesize configuration, with (or without) a dbenv. + - comments regarding unsupported (yet) db-4.1.17 functionality. + - update to db-4.1.24 final. + - eliminate myftw, use Fts(3) instead. + - dump libelf, gulp elfutils, for now. + - python: permit headers to be hashed. + - use %%{_lib} for libraries. + - include file-3.39 (with homebrewed) libfmagic, for now. + - add debug sub-package patch. + - re-add elfutils/libdwarf (for dwarf.h), eliminate tools/dwarf2.h. + - resurrect genhdlist "greased lightning" pathway for now. + - elfutils: avoid gcc-3.2 ICE on x86_64 for now. + - add /usr/lib/rpm/rpmdeps. + - add /usr/lib/rpm/magic. + - fix: /dev/initctl has not MD5 segfault (#76718). + - rpm.8: gpg uses GNUPGHOME, not GPGPATH (#76691). + - add error message on glob failure (#76012). + - add _javadir/_javadocdir/_javaclasspath macros. + - fix: bash must have functional libtermcap.so.2. + - update to elfutils-0.56. + - have debug sub-subpackage use external, not internal, elfutils. + - apply patches 1-6 to db-4.1.24. + - resurrect availablePackages one more time. + - fix: option conflict error message (#77373). + - add AC_SYS_LARGFILE throughout. + - statically link rpmdeps against (internal) libfmagic. + - use rpmdeps rather than find-{requires,provides}. + - bundle libfmagic into librpmbuild for now. + - apply patches 7 and 8 to db-4.1.24. + - upgrade to elfutils-0.59. + - add -g to all platforms optflags. + - build with external elfutils (preferred), if available. + - upgrade to elfutils-0.63. + - link rpm libraries together, use shared helpers with external -lelf. + - move libfmagic to librpmio. + - use libtool-1.4.3, autoconf-2.56. + - add explicit -L/lib64 -L/usr/lib64 for libtool mode=relink on x86_64. + - use usrlib_LTLIBRARIES to install directly in /usr/lib64 instead. + - late rpmts reference causes premature free (#78862). + - internal automagic dependency generation (disabled for now). + - don't generate dependencies unless execute bit is set. + - enable internal automagic dependency generation as default. + - fix: add rpmlib(VersionedDependencies) if versioned Provides: found. + - fix: add %%ifnarch noarch to debug_package macro. + - debug_packages "works", but non-noarch w/o %setup has empty payload. + - make dependency generation "opt-in" in order to build in distro. + - fix: make sure each library has DT_NEEDED for all unresolved syms. + - generate Elf provides even if file is not executable. + - disable fcntl(2) lock on Packages until glibc+nptl is fixed. + - make cdb locks "private" for pthreads compatibility w/o NPTL. + - add --enable-posixmutexes to use NPTL. + - make dependency generation "opt-out" everywhere. + - rebuild against glibc with fcntl fixed in libpthread. + - re-enable CDB locking, removing "private" from %%__dbi_cdb macro. + - popt aliases for -U et al to achieve dynamic link with nptl. + - add --file{class,provide,require} popt aliases and header extensions. + - statically link against /usr/lib/nptl/libpthread.a, if present. + - remove popt aliases for -U et al. + - add -I/usr/include/nptl, Conflicts: kernel < 2.4.20. + - dynamically link /bin/rpm, link against good old -lpthread. + - test pthread_{mutex,cond}attr_setpshared(), add DB_ENV_PRIVATE if not. + - error on exclusive Packages fcntl lock if DB_ENV_PRIVATE is set. + - copy compressFilelist to convertdb1.c, remove internal legacy.h. + - add --enable-posixmutexes when configuring on linux. + - add rpmdb_{deadlock,dump,load,svc,stat,verify} utilities. + - include srpm pkgid in binary headers (#71460). + - add %check scriptlet to run after %install (#64137). + - simplify specfile query linkage loop. + - drill rpmts into parseSpec(), carrying Spec along. + - fix: remove rpmfi scareMem so that headers can be reloaded on ia64. + - fix: set DB_PRIVATE, not DB_ENV_PRIVATE, if unshared posix mutexes. + - remove useless kernel/glibc dependencies (#79872). + - add matching "config(N) = EVR" dependencies iff %%config is found. + - add %%pubkey attribute to read armored pubkey files into header. + - permit both relative/absolute paths, display 'P' when verifying. + - resurrect automagic perl(foo) dependency generation. + - add BETA-GPG-KEY (but not in headers using %%pubkey yet). + - disable perl module magic rule. + - ignore ENOENT return from db->close (#80514,#79314). + - fix builddir relative inclusion, add %%pubkeys to rpm header. + - fix: package relocations were broken (#75057). + - error if querying with iterator on different sized arrays. + - add rpmfi methods to access color, class, and dependencies. + - don't segfault with packages produced by rpm-2.93 (#80618). + - python: eliminate hash.[ch] and upgrade.[ch], methods too. + - fix :armor query extension, tgpg mktmp handling (#80684). + - use rpmfiFClass() underneath --fileclass. + - use rpmfiFDepends() underneath --fileprovide and --filerequire. + - python: add fi.FColor() and fi.FClass() methods. + - calculate dependency color and refernces. + - python: add ds.Color() and ds.Refs() methods. + - fix: typo in assertion. + - add rpmts/rpmte/rpmfi/rpmds element colors. + - ignore items not in our rainbow (i.e. colors are functional). + - fix: dependency helpers now rate limited at 10ms, not 1s. + - add per-arch canonical color, only x86_64 enabled for now. + - file: avoid ogg/vorbis file classification problems. + - portabilitly: solaris fixes. + - for DSO's, provide the file basename if DT_SONAME not found. + - add perldeps.pl, start to replace perl.{prov,req}. + - file: read elf64 notes correctly. + - python: put rpmmodule.so where python expects to find. + - add brp-strip-static-archive build root policy helper. + - add -lelf to rpm LDFLAGS, not LDADD, since there is no libelf.la now. + - fix: obscure corner case(s) with rpmvercmp (#50977). + - file: *really* read elf64 notes correctly. + - python: restore thread context on errorCB (#80744). + - teach rpmquery to return "owning" package(s) in spite of alternatives. + - duplicate package checks with arch/os checks if colored. + - file conflict checks with colors. + - fix: debugedit.c problem. + - permit anaconda to choose "presentation order". + - fix: more debugedit.c problems. + - fix: clean relocation path for --prefix=/. + - python: permit stdout/stderr to be remapped to install.log. + - pay attention to package color when upgrading identical packages. + - fix: trap SIGPIPE, close database(s). + - configurable default query output format. + - popt: diddle doxygen/splint annotations, corrected doco. + - file: fix ogg/vorbis file classification problems. + - skip fingerprints in /usr/share/doc and /usr/src/debug. + - add file(1) as /usr/lib/rpm/rpmfile. + - enable transaction coloring for s390x/ppc64. + - file: check size read from elf header (#85297). + - fix: memory leak (85522). + - build with internal elfutils if not installed. + +4.0.4 -> 4.1: + - loosely wire beecrypt library into rpm. + - drop rpmio/base64.[ch] in favor of beecrypt. + - drop lib/md5*.[ch] files in favor of beecrypt. + - legacy: drop brokenMD5 support (rpm-2.3.3 to rpm-2.3.8 on sparc). + - eliminate DYING code. + - bind beecrypt md5/sha1 underneath rpmio. + - create RFC-2440 OpenPGP API in rpmio. + - proof-of-concept GPG/DSA verification for legacy signatures. + - upgrade to beecrypt-2.2.0pre. + - proof-of-concept PGP/RSA verification for legacy signatures. + - ratchet up to lclint "strict" level. + - upgrade to db-4.0.7. + - use only header methods, routines are now static. + - beecrypt is at least as good as pgp/gpg on verify, pulling the plug. + - add :base64 and :armor format extensions, dump binary tags in hex. + - proof-of-concept pubkey retrieval from RPM-{PGP,GPG}-KEY. + - stupid macros to configure public key file paths. + - all symbols but hdrVec are now forward references in linkage. + - generate an rpm header on the fly for imported pubkeys. + - wire transactions through rpmcli signature modes. + - wire transactions through rpmcli query/verify modes. + - wire transactions through rpmcli install/erase modes. + - legacy signatures always checked (where possible) on package read. + - wire transactions through rpmcli build modes. + - lazy rpmdb open/close through transaction methods (mostly anyways). + - no-brainer refcounts for rpmdb object. + - check added header against transaction set, replace if newer. + - transaction sets created in cli main. + - no-brainer refcounts for ts object. + - memory indices for dependency check are typedef'd and abstract'd. + - no-brainer refcounts for fi object, debug the mess. + - dump the header early in transaction, recreate fi before installing. + - start hiding availablePackage data/methods in rpmal.c/rpmal.h. + - add some dinky availablePackage methods. + - transaction.c: cleanly uncouple availablePackage from TFI_t. + - add header refcount annotations throughout. + - depends.c: availablePackage is (almost) opaque. + - invent some toy transactionElement iterators. + - create rpmDepSet constructors/destructors. + - create toy rpmDepSet iterators. + - rpmRangesOverlap renamed to dsCompare, add dsNotify method as well. + - depends.c: rpmDepSet is (almost) opaque, move to rpmds.[ch]. + - rpmds: create dsProblem(), dsiGetDNEVR() retrieved DNEVR, not N. + - depends.h: hack around teIterator() et al from include for now. + - rpmds: move trigger dependencies into a rpmDepSet as well. + - rpmal: availablePackage is totally opaque, alKey with index replaces. + - linear search on added package provides is dumb. + - discarding entire signature header when using --addsign is dumb. + - rip out rpmDependencyConflict, replace with rpmProblem instead. + - no-brainer refcounts for rpmProblemSet object. + - header tag sets are per-transactionElement, not per-availablePackage. + - no-brainer refcounts for rpmDepSet and rpmFNSet objects. + - strip header tags for erased as well as installed transactionElements. + - common structure elements for unification of TFI_t and rpmFNSet. + - factor per-transactionElement data out of TFI_t through pointer ref. + - unify rpmFNSet into TFI_t. + - eliminate header reference in rpmtransAddPackage, use TFI_t data. + - commit to using rpmDepSet and TFI_t, not header. + - lclint rpmio fiddles. + - split file info tag sets into rpmfi.c. + - create toy TFI_t iterators. + - tweak overlapped file fingerprint retrieval for speed. + - transaction.c: use wrappers/iterators to access TFI_t. + - annotations to make a transactionElement opaque. + - use array of pointers rather than contiguous array for ts->order. + - methods to complete making transactionElement opaque. + - use TR_REMOVED relations as well as TR_ADDED for ordering. + - drop requirement that removed packages immediately follow added. + - hybrid chainsaw/presentation ordering algorithm. + - convert file md5sum's to binary on the fly, reducing memory footprint. + - header handling moved to librpmdb to avoid linkage loops. + - fix a couple dinky memory leaks. + - build with an internal zlib for now. + - protect brp-compress against /bin/ls output ambiguity (#56656,#56336). + - 3 madvise calls and a 16Mb mmapped buffer == ~5% install speedup. Wow. + - use db-4.0.14 final internally. + - 1st crack at making zlib rsync friendly. + - lclint-3.0.0.19 fiddles. + - simple automake wrapper for zlib. + - splint fiddles. + - make peace with gcc-3.1, remove compiler cruft. + - make peace with automake et al in 8.0, ugh. + - add payload uncompressed size to signature to avoid rewriting header. + - drill header sha1 into signature parallel to header+payload md5. + - mandatory "most effective" signature check on query/verify/install. + - don't bother adding empty filemd's to index. + - add Pubkey index, using signer id as binary key. + - display pubkeys in hex when debugging db access. + - retrieve pubkey(s) from rpmdb, not from detached signature file. + - add header DSA signature. + - add header RSA signature (untested, disabled for now). +` - don't bother with signing check if 16 bits of hash don't match. + - only V3 signatures for now. + - wire --nodigest/--nosignature options to checksig/query/verify modes. + - splint annotations, signature cleanup. + - drill ts/fi through verify mode, add methods to keep fi abstract. + - use mmap when calculating file digests on verify, ~20% faster. + - permit --dbpath and --root with signature (i.e. --import) modes. + - beecrypt: add types.h, eliminate need for config.gnu.h. + - rescusitate --rebuild. + - use rpmdb-redhat to suggest dependency resolution(s). + - merge conflicts into problems, handle as transaction set variable. + - use build time to choose one of multiple alternative suggestions. + - add --nosuggests to disable suggested resolutions. + - attempt to make peace with automake-1.6.1, autoconf-2.53. + - rip out two layers of dbN gook, internal Berkeley db is here to stay. + - eliminate db1 support. + - enable CDB by default. + - use DBT_DB_MALLOC to eliminate re-malloc'ing header blobs. + - rework most of rpmdb.c prepatory to implementing duplicates. + - fix: 2 memory leaks in headerSprintf. + - fix: db mire's access out-of-bounds memory. + - plug install mode leaks. + - opaque (well mostly) rpmTransactionSet using methods. + - Grand Renaming of rpm data types. + - fix: synthesize unpacking progress callbacks for packages w/o files. + - python: add rpmds/rpmfi/rpmts methods. + - python: re-enable rpm-python sub-package. + - fix: resurrect "()(64bit)" markings using objdump. + - python: add rpmal/rpmte/rpmfd methods. + - perl: drop cpanflute and cpanflute2, will be in Chip's CPAN package. + - python: eliminate legacy db methods, add ts.dbMatch method. + - fix: use getgrnam, not getpwnam, to convert gid -> group. + - fix: avoid sign extension, use only 16 bits, when verifying rdev. + - python: separate {add,del}Macro methods, prepare for macro dictionary. + - i18n: copy current production PO files to top-of-stack. + - python: include rpmdb module, renamed from bsddb3. + - use /etc/rpm/platform (if it exists), rather than uname(2), for arch. + - python: portability fiddles (#54350). + - check inodes (but not blocks) on FAT file systems (#64256). + - add /usr/lib/rpm/redhat/* per-vendor configuration. + - remove build mode compatibility aliases, documented and gone. + - document digital signature verification in rpm.8. + - fix: separate existence and number checks for problems found (#66552). + - beecrypt: merge changes from beecrypt-2.3.0. + - beecrypt: merge doxygen markup with rpmapi doco. + - beecrypt: revert cpu/arch compile option mixup (#66752). + - ix86: make sure that rpm can verify prelinked shared libraries. + - don't install /usr/lib/rpm/redhat per-vendor configuration anymore. + - add translated man pages from PLD. + - resurrect libelf with Elf64, prelink verify should work everywhere. + - fix: reading macro files can corrupt memory if BUFSIZ is teensy. + - fix: assertion failure iff incomplete package install (#66837). + - python: link internal libelf (if used) directly into rpmmodule.so. + - use rpmdb-redhat for suggestions if/when configured (#67430). + - disambiguate failures to import (with error messages, duh). + - fix: multiple relocations (#67596). + - add --build/--program-prefix, delete libtoolize, from %configure. + - find-lang.sh: make sure that mo pattern matches leading '/' (#67368). + - disambiguate added/installed dependency failures (#50388). + - rescusitate remote ftp globs (#67678). + - open rpmdb early RDONLY, reopen later RDWR, avoid signed srpm noise. + - turn off annoying gpg secmem warning. + - warn only once for each NOKEY/UNTRUSTED key id. + - factor common options into table, add rpmcliInit() and rpmcliFini(). + - add preliminary rpmgraph(8) and rpmcache(8) executables to rpm-devel. + - use rpmfi in showQueryPackage(), eliminating headerGetEntry(). + - fix: forgot lazy open of database on --freshen path (#67907). + - proof-of-concept rpmcache functionality. + - fix: do lazy open of database in rpmtsInitDB() (#67994). + - update rpmcache.8. + - fix: permit deletions of added packages (#67108). + - placeholders for manifest constants for SuSE patch packages. + - fix: repair 2ndary match criteria with rpmdb iterators. + - update for sv.po. + - display signature details using rpm -qi. + - skip signing packages already signed with same key (#62118). + - install rpmal.h and rpmhash.h, implicit rpmps.hinclude, for now. + - revert headerFree/headerLink/headerUnlink debugging. + - popt: mingw32 portability configure check (#67911). + - teach gendiff about unreadable files (#42666). + - python: sanity check fixes on rpmts/rpmte methods. + - have rpmdb-redhat autoconfigure rpm to use %%_solve_dbpath. + - popt: parse file into string of options (#56860). + - version added to *.la dependency libraries (#69063). + - expose digests in rpmio API, but hide internal beecrypt API (#68999). + - add methods to make signature handling opaque wrto rpmts. + - verify signatures/digests retrieved through rpmdbNextIterator(). + - imbue %ghost with missingok attribute with --verify (#68933). + - fix: segfault if given a text file as 2nd arg to -Uvh (#69508). + - python: add ts.hdrCheck(), ts.rebuildDB() methods. + - python: iterating on an ts object returns transaction elements now. + - add yellowdog as vendor. + - python: remove the old initdb/rebuilddb methods, use ts.fooDB(). + - python: 1st crack at backport to 1.5.2. + - popt: fix --usage (#62234). + - fix: --repackage repaired (#67217). + - fix: rpm2cpio disables signature checks (i.e. same behavior). + - popt: display sub-table options only once on --usage. + - wire --nosignatures et al as common options, rework CLI options. + - python: don't segfault in ts.GetKeys() on erased packages. + - update trpm. + - factor all mode-specific options into mode-specific tables. + - treat an unspecified epoch as Epoch: 0 everywhere. + - detect athlon/duron with CMOV (PLD). + - prevent stale locks in __db files by closing databases on signals. + - make --querytags a common option, fix errant regex (#70135). + - db3: increase mpool and cachesize, compile w/o --enable-debug. + - configurable (default off) build failure if missing %%doc files (PLD). + - configurable (default off) build failure iff unpackaged files (PLD). + - change from default off to default on. + - python: methods to disable all new features for benchmarking. + - preserve rpmdb file attributes across --rebuilddb (#70367). + - fix: identify athlon with 3DNOWEXT as "athlon", not "i786" (#70539). + - fix: repair --root with --verify (#70527). + - fix: signed pubkeys were imported incorrectly (#68291). + - include tgpg script to verify signatures using only gpg. + - check header blobs on export (i.e. rpmdbAdd()). + - enable iterator header blob checks for install/erase modes. + - python: _vsflags_up2date macro to configure verify signature flags. + - resurrect --rollback. + - renumber the callback types to be an orthogonal bit mask. + - provide repackage progress callbacks, compression is slow. + - fix: don't repackage %%ghost files. + - add --predefine to define macros before reading macro configuration. + - python: bare bones rollback bindings. + - python: enable threads on callbacks and longish rpmlib calls. + - python: expose RPMTAG_SOURCEPACKAGE to identify source headers. + - python: eliminate rpm.headerFromPackage() tuple return, deprecated. + - python: add ts.hdrFromFdno(fdno) method. + - fix: check for lead magic, better error message on failure (#69751). + - python: the death of rpmdb-py.[ch], use ts.fooDB() methods instead. + - python: the death of rpm.headerFromPackage(), use ts.hdrFromFdno(). + - python: permit direct ts.dbMatch() python iterations. + - python: the death of rpm.checksig(), use ts.hdrFromFdno() instead. + - add bitmask for precise control of signature/digest verification. + - python: bindings to import pubkeys and display openpgp packets. + - fix: src.rpm installs need fd pos at payload. + - python: add return codes for rollbacks and fooDB methods. + - avoid generating fingerprints for locale/zoneinfo sub-directories. + - python: add (optional) ts.check() callback. + - python: include instance in IDTXload, filename in IDTXglob, return + - python: argument to ts.addErase (if integer) deletes that instance. + - python: rpmmi methods to return this instance, and number of members. + - supply transitive closure for CLI packages from rpmdb-redhat database. + - fix: rebuilddb stat'ed target, not source, for rename sanity. + - create /var/lib/rpm if non-existent in, say, a chroot. + - erased packages are now repackaged into /var/spool/repackage. + - fix: rebuilddb stat'ed target, not source, for rename sanity, take 2. + - python: explicit method to set transFlags. + - python: stuff package name into a string for repackage callbacks. + - rollback: re-create empty transaction set for multiple rollbacks. + - fix: %%basename typo (Dmitry V. Levin). + - fix: queryformat segfaults (Dmitry V. Levin). + - add --with-efence to configure, check install/upgrade with efence. + - beecrypt: short hex string conversion overflows target buffer. + - mark "successors only" packages in transaction. + - reap scriptlets with SIGCHLD handler. + - rename PSM_t to rpmpsm, add methods and refcounts to manage. + - remove %%configure/%%makeinstall from arch-os/macros, default is OK. + - don't export MALLOC_CHECK_ to scriptlets. + - squeaky clean memory leak checking. + - always malloc rpmfi structure, refcounts are correct in rpmtsRun(). + - skip redundant /sbin/ldconfig scripts on upgrade (if possible). + - python: stupid typo broke ts.check(). + - fix: add epoch to "already installed" check. + - check for interrupt during iteration. + - python: add ts.setProbFilter() method, remove ts.run() argument. + - fix: region trailer offset sanity check wrong (#71996). + - fix: don't stop if db1 database is currently in /var/lib/rpm (#72224). + - add a macro to create a sub-package with debugging symbols. + - merge signature returns into rpmRC. + - python: exceptions on NOKEY/NOTTRUSTED. + - python: don't remap NOKEY/UNTRUSTED to OK. + - beecrypt: change local absolute symbols to defines for prelinking. + - update ru.po. + - fix: handle NOKEY/NOTTRUSTED returns as if OK, always return header. + - portability: carry libelf in src rpm, include signal.h. + - fix: segfault with --checksig, plug memory leak (#72455). + - rpm-4.1 release candidate. + - requirement on libelf >= 0.8.2 to work around incompatible soname (#72792). + - fix: common sanity check on headers, prevent segfault (#72590). + - limit number of NOKEY/UNTRUSTED keys that will be warned once. + - libadd -lelf to rpmdb (#73024). + - portability: non-linux is easier, more to do (#72893). + - fix: SIGCHLD reaper race (#73134). + - fix: don't exit with open cursor, there be a stale lock. + - fix: check for signal induced exit more often (#73193). + - reinterpret the _unsafe_rollbacks macro as earliest rollback. + - fix: always do rpmalMakeIndex. + - fix: resurrect --triggers (#73330). + - python: typo in NOKEY exception string. + - fix: parse pgp packets more carefully. + - fix: parse header data more carefully. + - fix: register SIGCHLD handler before forking (#73134). + - better diagnostics on failed header parsing. + - lclint clean. + - rpm-4.1 release. + - fix: make sure that psm->child pid is set before SIGCHLD is handled. + - fix: use size_t consistently, avoid segfault on ia64. + - use %%{_lib} for libraries. + - fix: permit build with --disable-nls (#76258). + +4.0.3 -> 4.0.4: + - solaris: translate i86pc to i386 (#57182). + - fix: %GNUconfigure breaks with single quotes (#57264). + - fix: typo in find-requires. + - tru64 compiler message cleanup. + - add buildarch lines for hppa (#57728). + - sparc: make dbenv per-rpmdb, not per-dbi. + - handle lazy db open's in chroot with absolute path, not prefix strip. + - Depends should use CDB if configured. + - autodetect python 1.5/2.2. + - make rpm-perl package self-hosting (#57748). + - permit gpg/pgp/pgp5 execs to be reconfigured. + - fix: signing multiple times dinna work, discard immutable region. + - remove poptmodule.so for separate packaging. + - permit subset installs for %lang colored hardlink file sets. + - missing key(s) on keyring when verifying a signature is now an error. + - remove dependency whiteout. + - calculate rpm-4.1 ordering/orientation metrics in rpmdepOrder(). + - sync popt and rpmio with rpm-4.1, rpmio has OpenPGP API. + - sync rpmdb and build with rpm-4.1, lots of splint annotations. + - add :armor and :base64 query format qualifiers for binary signatures. + - fix: query format qualifiers needed header.c merge. + - fix: query format qualifiers needed header.c merge. + - ppc64 arch added (#58634,#58636). + - turn on auto-generated perl requirements (#58519, #58536, #58537). + - fix: %exclude functional (again). + - trap SIGILL for ppc64 inline asm voodoo fix from cross-dressed ppc32. + - fix: fancy hash fiddles if not a tty. + - fix: handle /.../ correctly in rpmCleanPath(). + - transaction rollback code in rpmRollback(). + - Red Hat 6.2 portability cruft. + - legacy: configurable whiteout for known Red Hat dependency loops. + - perl.req: don't mis-generate dependencies like perl(::path/to/foo.pl). + - permit args to be hidden within %__find_{requires,provides}. + - a couple more perl.{prov,req} fiddles. + - macro for %files, always include %defattr(), redhat config only. + - fix: drop header region when writing repackaged legacy header. + - bail on %files macro. + - transaction rollbacks are functional. + - generate index for pkgid (aka Sigmd5) tag, query/verify by pkgid. + - generate index for hdrid (aka Sha1header) tag, query/verify by hdrid. + - generate index for fileid (aka Filemd5s) tag, query/verify by fileid. + - query/verify by install transaction id. + - rpm-4.0.4 release candidate. + - add cpanflute2, another perl.req fiddle. + - reapply Berkeley DB patch #4491. + - make --addsign and --resign behave exactly the same. + - *really* dump signature header immutable region. + - speedup large queries by ~50%. + - revert to presentation ordering Yet Again (#62158). + - non-glibc: on upgrade, mergesort is much faster than quicksort. + - fix: queries that evaluated to "" incorrectly returned NULL. + - fix: packages produced by rpm-4.0 dinna merge signature tags. + - fix: rpmdb iterator memory leak in python bindings. + - fix: include for 6.2 python modules. + - remove vestiges of mipseb arch (#62408). + +4.0.2 -> 4.0.3: + - update per-interpreter dependency scripts, add sql/tcl (#20295). + - fix: rpmvercmp("1.a", "1.") returned -1, not +1 (#21392). + - add cpuid asm voodoo to detect athlon processors. + - add %exclude support (i.e. "everything but") to %files. + (Michael (Micksa) Slade" ) + - add --with/--without popt glue for conditional builds(Tomasz Kloczko). + - python: strip header regions during unload. + - add -g to optflags in per-platform config. + - permit confgure/compile with db3-3.2.9. + - permit manifest files as args to query/verify/install modes. + - fix: parameterized macro segfault (Jakub Bogusz ) + - fix: i18n tags in rpm-2.5.x had wrong offset/length (#33478). + - fix: AIX has sizeof(uint_16) != sizeof(mode_t) verify cast needed. + - fix: zero length hard links unpacked incorrectly (#34211). + - fix: --relocate missing trailing slash (#28874,#25876). + - fix: --excludedoc shouldn't create empty doc dir (#14531). + - fix: %_netsharedpath needs to look at basenames (#26561). + - fix: --excludepath was broken (#24434). + - fix: s390 (and ppc?) could return CPIOERR_BAD_HEADER (#28645). + - fix: Fwrite's are optimized out by aggressive compiler(irix) (#34711). + - portability: vsnprintf/snprintf wrappers for those without (#34657). + - more info provided by rpmdepOrder() debugging messages. + - merge (compatible) changes from top-of-stack into rpmlib.h. + - cpio mappings carry dirname/basename, not absolute path. + - fix: check waitpid return code. + - remove support for v1 src rpm's. + - re-position callbacks with ts/fi in cpio payload layer. + - state machines for packages (psm.c) and payloads (fsm.c) + - add --repackage option to put erased bits back into a package. + - fix: (ppc) copy va_list in loop (#36845). + - cpanflute perl dependency needs explicit epoch (#37034). + - regenerate rpm.8 man page from docbook glop (in max-rpm). + - lib/depends.c: diddle debugging messages. + - fix: readlink return value clobbered by header write. + - fix: ineeded count wrong for overlapped, created files. + - globalize _free(3) wrapper in rpmlib.h, consistent usage throughout. + - internalize locale insensitive ctype(3) in rpmio.h. + - boring lclint annotations and fiddles. + - transaction iterator(s) need to run in reverse order on pure erasures. + - erasures not yet strict, warn & chug on unlink(2)/rmdir(2) failure. + - more boring lclint annotations and fiddles. + - yet more boring lclint annotations and fiddles. + - still more boring lclint annotations and fiddles. + - enough lclint annotations and fiddles already. + - fix: specfile queries with BuildArch: (#27589). + - fix: debugging message displays header keys (#38454). + - use internal db-3.2.9 sources to build by default. + - don't build db1 support by default. + - create rpmdb.la so that linkage against rpm's db-3.2.9 is possible. + - rpm database has rpm.rpm g+w permissions to share db3 mutexes. + - expose more db3 macro configuration tokens. + - move fprint.[ch] and hash.[ch] to rpmdb directory. + - detect and fiddle incompatible mixtures of db3 env/open flags. + - add DBI_WRITECURSOR to map to db3 flags with CDB database model. + - add rpmdbSetIteratorRewrite to warn of pending lazy (re-)writes. + - harden rpmdb iterators from damaged header instance segfaults. + - add cron/logrotate scripts to save installed package filenames. + - upgrade to db-3.3.4. + - fix: filter duplicate package removals (#35828). + - add armv3l arch. + - fix: i18n strings need 1 on sucess return code (#41313). + - fix: skip %ghost files when building packages (#38218). + - headerFree() returns NULL, _free is C++ safe. + - remove all header region assertion failures, return NULL instead. + - perform db->verify when closing db files. + - eliminate db-1.85 and db-2.x configuration. + - fix: popt arg sanity checks broken, optarg != optArg. + - fix: popt range checks on floats/doubles broken. + - popt: return POPT_ERROR_ERRNO on config open/read/close failure. + - fix: popt exec doesn't add '--', --target et al no longer need '='. + - fix: popt consume-next-arg "!#:+" w/o side effect (#41956). + - fix: for busted db1, attempt chain reconnection to following record. + - return multiple suggested packages + (Pawel Kolodziej ). + - fix: return suggested packages when using Depends cache. + - merge sparc64/ia64 fiddles back into linux.{req,prov}. + - automagically generate perl module dependencies always. + - fix: lclint fiddles broke uCache initialization (#43139). + - always use db cursors. + - permit duplicates for btree indices. + - document build modes in rpmbuild.8, rpmbuild is born. + - default to dbenv with mpool, --rebuilddb with nofsync is much faster. + - fix: QUERY_FOR_LIST file count clobbered. + - create top level rpmcli API, factor top level modes into popt tables. + - popt: add POPT_BIT_SET/POPT_BIT_CLR to API. + - autogen.sh checks for latest libtool-1.4 and automake-1.4-p2. + - rpm --verify reports failure(s) if corresponding tag is not in header. + - rpm --verify honors %config(missingok), add -v for legacy behavior. + - remove dead code frpm popt table reorg. + - more CLI typedefs/prototypes moved from rpmlib.h to rpmcli.h. + - rpm --verify skips files in non-installed states. + - rpm --verify skips content checks for %ghost files. + - rpm --verify displays config/doc/gnost/license/readme atrrs for files. + - rpm --verify checks immutable header region digest if available. + - rpmbuild adds header region digest (SHA1 as string). + - use rpmTag* typedefs in new hge/hae/hme/hre header vectors. + - remove rpmrc Provides: Yet Again, use virtual packages. + - dump cursor debugging wrappers. + - rpm --verify can disable rpmFileAttr checks. + - add rpmdbSetIteratorRE() for regex matching in database iterators. + - permit rpm -qa to take RE args applied to name tag. + - permit dbiFindMatches() to use version/release patterns. + - eliminate all uses of rpmdbSetIterator{Version,Release}. + - fix: db1 end-of-file not detected in legacy compatible way. + - fix: remove (harmless) chown error message from %post. + - add --target/--host to %configure, add example cross-build/config.site + scripts to /usr/lib/rpm (#44581). + - rpmdb iterator selectors permit default/strcmp/regex/glob matching. + - rpmdb iterator selectors permit negative matches. + - alpha: don't add "()(64bit)" dependency markers. + - ia64/sparc: .{req,prov} identical to linux.{req,prov}. + - add "rpmlib(ScriptletInterpreterArgs)" to track + %post -p "/sbin/ldconfig -n /usr/lib" + incompatibilities. + - popt: add POPT_ARGFLAG_SHOW_DEFAULT to display initial values(#32558). + - popt: add POPT_CONTEXT_ARG_OPTS for all opts to return 1 (#30912). + - fix: fsm reads/writes now return error on partial I/O. + - fix: Ferror returned spurious error for gzdio/bzdio. + - check for API/ABI creep, diddle up some compatibility. + - preliminary abstraction to support per-header methods. + - finalize per-header methods, accessing headerFoo through vector. + - make package ordering loop messages debug, not warning. + - remove {ia64,sparc}-linux.{prov,req}, changes merged into linux.*. + - fix: partial sets of hardlinked files permitted in payload. + - fix: mark rpmdb files with %config to prevent erasure on downgrade. + - work around a (possible) compiler problem on ia64. + - fix: rpm -qlv link count for directories dinna include '..'. + - fix: rpm -qlv size for directories should be zero. + - add --noghost to filter non-payload files from rpm -qlv output. + - add %{_gnu} macro to append "-gnu" to %{_target_platform} to + support --target/--host flavored %configure. Legacy behavior + available by undefining %{_gnu}. + - propagate %{_gnu} to per-platform configuration. + - fix: parameterized macros with massive mumber of options need + "optind = 1" "Dmitry V. Levin" . + - add athlon per-platform configuration. + - remove executable bit to disable autogenerated perl requires until + perl provides can be vetted. + - disable per-platform %%configure use of %%_gnu until libtool package + stabilizes. + - fix: permit partially enumerated hardlink file sets during build. + - fix: resurrect rpm signature modes. + - fix: sanity checks on #tags (<65K) and offset (<16Mb) in header. + - fix: add -r to useradd to prevent /etc/skel glop (#46215). + - fix: disambiguate typedef and struct name(s) for kpackage. + - update intl dirs to gettext-0.10.38. + - fix: sanity check for header size added in headerCopyLoad() (#46469). + - fix: redundant entries in file manifests handled correctly (#46914). + - map uid/gid from metadata into payload headers. + - add removetid to header during --repackage. + - expose rpmShowProgress() and rpmVerifyDigest() in rpmcli.h. + - portability: avoid st_mtime, gendiff uses basename, etc (#47497). + - glibc-2.0.x has not __va_copy(). + - popthelp.c: don't use stpcpy to avoid portability grief (#47500). + - permit alias/exec description/arg text to be set from popt config. + - python: rhnLoad/rhnUnload to check header digest. + - package version now configureable, default v3. + - rename rpm libraries to have version with libtool -release. + - fix: -i CLI context broken Yet Again. + - unlink all __db.nnn files before 1st db open. + - python bindings should not segfault when fed bad data. + - fix: adjust arg count for --POPTdesc/--POPTargs deletion. + - add linux per-platform macro %_smp_mflags . + - document more popt aliases for --help usage. + - remove --tarbuild from man page(s), use -t[abpcils] instead (#48666). + - fix: scope multi-mode options like --nodeps correctly (#48825). + - isolate cdb access configuration (experimental, use at your own risk). + - fix: hard fail on locked dbopen if CDB locking not in use. + - fix: dbconfig with mp_mmapsize=16Mb/mp_size=1Mb for + "everything ENOSPC" failure check. + - fix: don't total hard linked file size multiple times (#46286). + - add %dev(type,major,minor) directive to permit non-root dev build. + - fix: _smp_flags macro broken. + - python: bind rhnUnload differently. + - fix: rescusitate --querytags. + - fix: short aliases broken (#49213). + - python: "seal" immutable region for legacy headers in rhnUnload() . + - python: add poptmodule.so bindings. + - fix: %dev(...) needs to map rdev and mtime from metadata. + - resurrect --specedit for i18n. + - fix: 4 memory leaks eliminated. + - fix: yet another segfault from bad metadata prevented. + - add sha1 test vectors, verify on ix86/alpha/sparc. + - add (but disable for now) rpm-perl subpackage from Perl-RPM. + - python: parameterize with PYVER to handle 1.5 and/or 2.1 builds. + - add build dependency on zlib-devel (#49575). + - enable rpm-perl subpackage. + - add pmac/ppciseries/ppcpseries varieties to ppc arch family. + - include tdigest.c tkey.c and trpmio.c to "make dist". + - re-enable dependency resolution source from package NVR. + - rename pmac to ppcmac. + - ia64: revert -O0 compilation. + - upgrade to db-3.3.11 final. + - fix: don't segfault when presented with rpm-2.4.10 packaging (#49688). + - fix: --noscripts is another multimode option. + - add tmpdir to configure db3 tmpdir into chroot tree. + - permit lazy db opens within chroot. + - fix: diddle dbenv path to accomodate backing store reopen in chroot. + - add support for mips (#49283). + - add __as, _build_arch, and __cxx macros (#36662, #36663, #49280). + - detailed build package error messages. + - fix: i18n tags not terminated correctly with NUL (#50304). + - add explicit casts to work around a s390 compiler problem. + - fix: autoconf glob tests (#50845). + - portability: some compilers squawk at return ((void) foo()) (#50419). + - remove fdFileno() from librpmio, use inline version instead (#50420). + - fix: linux find-requires needs quotes around [:blank:]. + - remove /var/lib/rpm/__db* cache files if %__dbi_cdb is not configured. + - python: add hiesenbug patch. + - add legacy (compile only) wrappers for fdFileno et al. + - add -D_REENTRANT (note rpmlib is still not thread safe). + - fix: segfault on headerFree given malicious data. + - fix: don't verify hash page nelem. + - better error messages for verification failures. + - include directory /usr/lib/rpm in rpm package. + - always use dl size in regionSwab() return. + - ppc: revert ppcmac to ppc. + - ppc: autoconf test for va_copy. + - python: add exception to detect bad data in hdrUnload. + - change dir creation message from warning to debug for now. + - verify perms (but not mode) on %ghost files. + - headers without RPMTAG_NAME are skipped when retrieved. + - within a region, entries sort by address; added drips sort by tag. + - fix: error message on failed package installs resurrected. + - python: memory leaks in headerLoad/headerunload bindings. + - python: retrofit sha1 digest using RPMTAG_SHA1RHN. + - python: change rhnUnload bindings. + - python: teach rhnLoad about RPMTAG_SHA1RHN as well. + - fix: Provides: /path did not work with added packages (#52183). + - fix: progress bar scaling did not include source rpm count. + - fix: hash page nelem failure to verify. + - fix: initialize "verify" transaction stepName with -vv (#53582). + - fix: ftp remote globs broken (#46892). + - popt: clarify X consortium license in popt.3 man page. + - close/discard Depends index after rpmdepCheck() use. + - lclint-3.0.0.15 fiddles. + - fix: harmless typo in db3 chroot hack. + - fix: big-endian's with sizeof(time_t) != sizeof(int_32) mtime broken. + - fix: add Korean message catalogs (#54473). + - add RPHNPLATFORM and PLATFORM tags. + +4.0 -> 4.0.[12] + - fix: avoid calling getpass twice as side effect of xstrdup macro + (katzj@linuxpower.org) (#17672). + - order packages using tsort, clipping Requires:'s in dependency loops. + - handle possible db3 dependency on -lpthread more gracefully. + - bump popt version to 1.6.1. + - fix: more (possible) xstrdup side effects. + - fix: rpm2cpio error check wrong on non-libio platforms. + - fix: runTriggers was not adding countCorrection. + - add rpmGetRpmlibProvides() to retrieve rpmlib(...) provides + "Pawel A. Gajda" . + - syntax to specify source of Requires: (PreReq: now legacy). + - rip out rpm{get,put}text, use getpo.sh and specspo instead. + - fine-grained Requires, remove install PreReq's from Requires db. + - fix: duplicate headerFree() on instalBinaryPackage() error return. + - fix: work around for (mis-compilation?!) segfaults on signature paths. + - fix: segfault on exit of "rpm -qp --qf '%{#fsnames}' pkg" (#20595). + - hpux w/o -D_OPEN_SOURCE has not h_errno. + - verify MD5 sums of payload files when unpacking archive. + - hide libio lossage in prototype, not API. + - add support for SHA1 as well as MD5 message digests. + - don't verify src rpm MD5 sums (yet). + - md5 sums are little endian (no swap) so big endian needs the swap. + - add doxygen and lclint annotations most everywhere. + - consistent return for all signature verification. + - use enums for almost all rpmlib #define's. + - API: change rpmProblem typedef to pass by reference, not value. + - unify rpmError and rpmMessge interfaces through rpmlog. + - collect and display rpm build error messages at end of build. + - don't trim leading ./ in rpmCleanPath() (#14961). + - detect (still need to test) rdonly linux file systems. + - check available inodes as well as blocks on mounted file systems. + - pass rpmTransactionSet, not elements, to installBinaryPackage et al. + - add cscope/ctags (Rodrigo Barbosa). + - remove getMacroBody() from rpmio API. + - add support for unzip + - add brp-strip-shared script . + - better item/task progress bars . + - load headers as single contiguous region. + - add region marker as RPM_BIN_TYPE in packages and database. + - fix: don't headerCopy() relocatable packages if not relocating. + - merge signatures into header after reading from package. + - RPM_BIN_TYPE malloc'ed when retrieved through headerGetEntry(). + - add headerFreeData() to free any data malloc'ed during retrieval. + - preserve exact image of original header when installing/upgrading. + - add missing headerFree for legacy signature header. + - fix: removed packages leaked DIRINDEXES tag data. + - reload tags added during install when loading header from rpmdb. + - avoid brp-compress hang with both compressed/uncompressed man pages. + - improved find-{requires,provides} for aix4/hpux/irix6/osf. + Tim Mooney + - portability: remove use of GNU make subst in lib/Makefile (Joe Orton). + - python: bind package removal (#21274). + - autoconfigure building python bindings. + - autoconfigure generating rpm API doco. + - fix: don't fdFree in rpmVerifyScript, rpmtransFree does already. + - use package version 3 if --nodirtokens is specified. + - add package names to problem sets early, don't save removed header. + - make sure that replaced tags in region are counted in headerSizeof(). + - support for dmalloc debugging. + - filter region tags in headerNextIterator, exit throut headerReload. + - add rpmtransGetKeys() to retrieve transaction keys in tsort'ed order. + - python bindings for rpmtransGetKeys(). + - fix: include alignment in count when swabbing header region. + - handle added dirtoken tags (mostly) correctly with header regions. + - add FHS doc/man/info dirs, diddle autoconf goo. + - fix: headerUnload handles headers w/o regions correctly on rebuilddb. + - resurrect rpmrc Provides: as well as implicit dependency on packge + info. + - change dependency loop message to RPMMESS_WARNING to use stderr, not + stdout. + - fix: (transaction.c) assume file state normal if tag is missing. + - fix: failed signature read headerFree segfault. + - fix: revert ALPHA_LOSSAGE, breaks 6.2/i386. + - fix: synthesized callbacks for removed packages have not a pkgkey. + - identify install scriptlet failures with the name of the scriptlet. + - handle install chroot's identically throughout the install process. + - add rpmlib(HeaderLoadSortsTags) for tracking header regions + "just in case". + - create _tmppath on the fly if not present. + - remove /etc/rpm/macros.db1 configuration file if db3 rebuilt. + - remove overly verbose dbiOpen() error messages, no longer needed. + - whiteout mozilla loop for 7.1. + - immutable headers, once installed by rpm3, need to lose immutablity. + - fix: removed headers from db need a headerCopy(). + - send query/verify output through rpmlog(). + - resurrect rpmErrorSetCallback() and rpmErrorString(). + - use malloc'ed buffer for large queries. + - fix: avoid FAT and other brain-dead file systems that have not inodes. + - fix: hack around alpha mis-compilation signature problems. + - rpmmodule.c(handleDbResult): return empty list when nothing matches. + - (non-linux): move stubs.c to rpmio (#21132). + - (python): bind initdb (#20988). + - (popt): fix float/double handling (#19701). + - (popt): non-linux needs (#22732). + - (popt): add POPT_ARGFLAG_OPTIONAL for long options with optional arg. + - (popt): diddle auto-help to include type of arg expected. + - use popt autohelp for rpm helper binaries. + - fix: avoid locale issues with strcasecmp/strncasecmp (#23199). + - remove almost all explicit uses of stderr in rpmlib using rpmError(). + - fix: pass scriptlet args, as in %post -p "/sbin/ldconfig -n /lib". + (Rodrigo Barbosa). + - fix: 3 packages from Red Hat 5.2 had bogus %verifyscript tag. + - tsorted packages processed in successor count order. + - fix: resurrect --excludepath (#19666). + - fix: digests on input FD_t dinna work. + - fix: remove rebuilddb debugging leakage. + - successors from tsort are processed in presentation order. + - fix: find-requires.perl needed update (#23450). + - fix: don't hang on build error. + - fix: remove "error: " prefix from signature verification message. + - hack: permit installer to determine package ordering using 1000003 tag. + - fix: extra newline in many error messages (#23947). + - fix: rpm -Va with db1 needs per-iterator, not per-index, offset. + - add install/remove transaction id tags. + - tsort prefers presentation order. + - 1st crack at Mandrake specific per-platform macros. + - fix: insure that %lang scopes over hard links correctly. + - fix: rpmCleanPath was nibbling at .. in macrofiles incorrectly. + - fix: check waitpid return code. + - fix: make a copy of retrieved header before loading. + - fix: diddle exit code for attempted installs of non-packages (#26850). + - python binding diddles to reduce installer memory footprint by + delayed loading of file info. + - fix: remove fixed size buffer on output path (#26987,#26332). + - resurrect rpmErrorCode in the API for Perl-RPM. + - fix: permit packages to differ by 0 or 32 bytes (#26373). + - fix: permit HEADER_IMMUTABLE tag queries. + - split db configuration into separate file. + - portability changes from Joe Orton et al. + - (alpha): rip out ALPHA_LOSSAGE now that gcc-2.96-76 has fix (#28509). + - (popt): use sprintf rather than snprintf for portability. + - (sparc) disable MD5 sum checks during install. + - (db1) plug largish memory leak in simulated interface for falloc.c. + - remove mozilla dependency white out, no longer needed. + - fix: adjust for libio breakage in Red Hat 5.x with glibc-2.0.7-29.4. + - map i686-like (i.e. w/o CMOV) platforms to better alternatives. + +3.0.6 -> 4.0 + - use DIRNAMES/BASENAMES/DIRINDICES not FILENAMES in packages and db. + - API: change dbi to pass by reference, not value. + - cram all of db1, db_185, and db2 interfaces into rpmlib. + - convert db1 -> db2 on-disk format using --rebuilddb. + - add db3 to the pile, isolate all with incremental link and vectors. + - prefer db3 as default. + - permit db3 configuration using macros. + - create dbi from template rather than passed args. + - use hashed access for package headers. + - db3: save join keys in endian neutral binary format. + - treat legacy falloc.c as "special" db[01] index for package headers. + - API: pass *SearchIndex() length of key (0 will use strlen(key)). + - API: remove rpmdb{First,Next}RecNum routines. + - add explcit "Provides: name = [epoch:]version-release" to headers. + - fix: cpio.c: pre-, not post-, decrement the link count. + (from Fabrice Bellet ) + - make db indices as lightweight as possible, with per-dbi config. + - db1.c will never be needed, eliminate. + - API: merge rebuilddb.c into rpmdb.c. + - API: replace rpmdbUpdateRecord with rpmdbSetIteratorModified. + - API: replace rpmdbFindByLabel with RPMDBI_LABEL iteration. + - API: replace rpmdbGetRecord with iterators. + - API: replace findMatches with iterators. + - Filter DB_INCOMPLETE on db->sync, it's usually harmless. + - Add per-transaction cache of resolved dependencies (aka Depends). + - Do lazy dbi{Open,Close} throughout. + - Attempt fine grained dbi cursors throughout. + - fix: free iterator *after* loop, not during. + - fix: Depends needed keylen in dbiPut, rpmdbFreeIterator after use. + - Rename db0.c to db1.c, resurrect db2.c (from db3.c). + - simplify --last popt alias, date like -qi (bjerrick@easystreet.com). + - fix: alloca'd memory used outside of scope (alpha segfault). + - fix: define/eval options assumed sizeof(int) == sizeof(void *). + - fix: sparc64 per-platform directory shouldn't be sparc64linux. + - fix: (segfault) verify needs rpmdb while query does not. + - add calculated nlink field to -qlv output (like ls -al). + - detects and builds properly against the new fopencookie API in + glibc 2.2. + - change popt exec alias in oreder to exec rpm children. + - split rpm into 5 pieces along major mode fault lines with popt glue. + - turn on new, more complete version of %%configure. + - add %%makeinstall analogue of new %%configure for autoconf packages. + - mark packaging with version 4 to reflect filename/provide changes. + - change next version from 3.1 to 4.0 to reflect package format change. + - change %configure, add %makeinstall macros to handle FHS changes. + - add optflags for i486 and i586. + - fix: segfault with legacy packages missing RPMTAG_FILEINODES. + - require db3 in default configuration. + - create rpmio directory for librpmio. + - make librpmio standalone. + - fix: avoid clobbering db cursor in removeBinaryPackage. + - expose cursors in dbi interfaces, remove internal cursors. + - remove incremental link. + - portability: sparc-sun-solaris2.5.1. + - fix: don't count removed files if removed packages is empty set. + - fix: permit '\0' as special case key (e.g. "/" in Basenames). + - require --rebuilddb to convert db1 -> db3, better messages. + - fix: open all db indices before performing chroot. + - fix: typo in brp-compress caused i18n man pages not to compress. + - API: uncouple fadio from rest of rpmio. + - API: externalize legacy fdOpen interface for rpmfind et al. + - put version on rpmpopt filename to avoid legacy filename collision. + - change optflags for i386. + - multilib patch, take 1. + - add pre-transaction syscall's to handle /etc/init.d change. + - don't bother saving '/' as fingerprint subdir. + - prefix payload paths with "./", otherwise "/" can't be represented. + - fix: compressFilelist broke when fed '/'. + - fix: typo in --last popt alias (#12690). + - fix: clean file paths before performing -qf (#12493). + - remove build mode help from rpm.c, use rpmb instead. + - fix: set multilibno on sparc per-platform config. + - fix: legacy requires './' payload prefix to be omitted for rpm itself. + - fix: remove verbose database +++/--- messages to conform to doco. + - add S_ISLNK pre-transaction syscall test. + - fix: initialize pretransaction argv (segfault). + - fix: check rpmlib features w/o database (and check earlier as well). + - rip out pre-transaction syscalls, more design is needed. + - remove (dead) dependency checks on implicitly provided package names. + - remove (dead) rpmdb API code in python bindings. + - fix: make set of replaced file headers unique. + - fix: don't attempt dbiOpen with anything but requested dbN. + - create rpmbuild/rpmquery/rpmverify/rpmsign symlinks. + - fix: look for any/all dbapi when rebuilding. + - link rpm2cpio dynamically since cpio is linked dynamically. + - fix: uniqify dependency problems when printing (#14034). + - fix: segfault on erase if filestates is missing in header (#14679). + - fix: popt POST callbacks typo. + - fix: -Va broken, make db cursors per-iterator, not per-dbi. + - fix: segfault when globbing on "" (#15593). + - fix: rebuild db1 -> db3 ate 1st header (#16263). + - translate rpm.8 man page (Peter Ivanyi ). + +3.0.6 -> 3.0.7 + +3.0.5 -> 3.0.6 + - python bindings to query and verify signatures. + - add callbacks on package erasure. + - fix: preserve cpio errno when using Fclose with libio. + - fix: initialize sigs everywhere in python header object. + - popt: support for float/double args. + - fix: honor --test when doing --freshen. + - add alpha* architectures. + +3.0.4 -> 3.0.5 + - configure.in fiddles for BSD systems (Patrick Schoo). + - solaris2.6: avoid bsearch with empty dir list (Ric Klaren - klaren@cs.utwente.nl) + - include RPM-GPG-KEY in file manifest. + - Add ia64 and sparc64 changes. + - rpm.spec: add per-platform sub-directories. + - FreeBSD fixes (bero@redhat.com). + - handle version 4 packaging as input. + - builds against bzip2 1.0 + - fix: resurrect symlink unique'ifying property of finger prints. + - fix: broken glob test with empty build directory (Geoff Keating). + - fix: create per-platform directories correctly. + - update brp-* scripts from rpm-4.0, enable in per-platform config. + - alpha: add -mieee to default optflags. + - add RPMTAG_OPTFLAGS, configured optflags when package was built. + - add RPMTAG_DISTURL for rpmfind-like tools (content unknown yet). + - teach brp-compress about /usr/info and /usr/share/info as well. + - update macros.in from rpm-4.0 (w/o dbi configuration). + - fix: don't expand macros in false branch of %if (kasal@suse.cz). + - fix: macro expansion problem and clean up (#11484) (kasal@suse.cz). + - uname on i370 has s390 as arch (#11456). + - python: initdb binding (Dan Burcaw ). + - internalize --freshen (Gordon Messmer ). + - support for separate source/binary compression policy. + - support for bzip payloads. + - fix: payload compression tag not nul terminated. + - identify package when install scriptlet fails (#12448). + - remove (unused) RPMTAG_CAPABILITY. + - remove (legacy) use of RPMTAG_{OBSOLETES,PROVIDES} internally. + - remove (legacy) support for version 1 packaging. + - remove (legacy) support for converting gdbm databases. + - eliminate unused headerGz{Read,Write}. + - support for rpmlib(...) internal feature dependencies. + - display rpmlib provides when invoked with --showrc. + - fix: compare versions if doing --freshen. + - disable rpmlib(VersionedDependencies) by defining _noVersionedDependencies. + +3.0.3 -> 3.0.4 + - use compressed filenames on install side. + - start unifying FD types, CFD_t now gone. + - check for memory leaks (almost all leaks are plugged). + - fix: resurrect multiple target platform builds. + - freshen.sh: detect when all packages are up to date (Ian Macdonald). + - fix: typo in error message (#6858). + - add/update dependency scripts (Ken Estes). + - use directory tokens internally to reduce memory usage. + - permit --whatprovides to lookup file dependencies. + - fail to package if absolute symlink points within build root. + - initial version of check-prereqs. + - expose enough of legacy fdio interface to compile rpmfind/rpm2html. + - fix: Fopen should use 0666 as default (umask will be applied later). + - fix: default for rd_timeoutsecs is 1 sec (avoid ufdio assertion). + - fix: new FILENAMES tags require package index, not pointer in lookups. + - rename new FILENAMES tags to BASENAMES/DIRNAMES/DIRINDEXES. + - fix: don't look at password when searching urlCache. + - add contentLength sanity check on rpmdb headerWrite. + - fix: fprint abort on stat("/", ...) in empty chroots. + - perform glob on remote ftp query args. + - fix: ftpAbort must close the data channel to read abort status. + - perform glob on remote ftp install args. + - fix: reload macros from cmd line when re-reading config files. + - fix: compressFileList was over-generating dirNames. + - fix: alAddPackage sorted dirNames too soon, destroying dirMapping. + - expose enough of legacy fdio interface to compile gnorpm. + - fix: missing strdup when overriding buildroot from command line + argument (#1026,#5006). + - diddle some names to keep my C++ brethern happy (i.e. kpackage port). + - fix: add ufdSeek. + - build popt (with libpopt.so*) as a sub-package of rpm. + - split python bindings into a separate sub-package of rpm. + - add ja translation and man pages (Kanda Mitsuru kanda@nn.iij4u.or.jp). + - fix: fp.subDir was incorrectly set to NULL in sparse chroot's. + - fix: manageFile needs to and with O_WRONLY(=1), not O_RDONLY(=0). + - fix: resurrect failed glob error message during build. + - add several BuildRoot FTW policies. + - add manpage for gendiff (pbrown@redhat.com). + - updated sv.po (goeran@uddeborg.pp.se) (#8349). + - configurable PATH for install %pre/%post et al scriptlets. + - use only %_install_langs, not LINGUAS/LANG when deciding to install. + - configurable compression type/level for package payloads. + - default value for %_install_langs is all. + - fix: resurrect relative path's in fprint lookup queries. + - extract spec files from bzip'ped tarballs too on tar builds. + - add %_rebuilddbpath macro to permit rebuilding db in new location. + - updated perl scripts (Ken Estes). + - fix: on --rebuilddb, make sure new/old paths are not the same (#8752). + - fix: on --erase, segfault caused by "" prefix. + - explicitly expand file lists in writeRPM for rpmputtext. + - {Free,Open}BSD find-{provides,requires} (suzukis@file.phys.tohoku.ac.jp). + - new rpm-build package to isolate rpm dependencies on perl/bash2. + - always remove duplicate identical package entries on --rebuilddb. + - add scripts for autogenerating CPAN dependencies. + - add sl.po from Primoz Peterlin . + - updated sv.po from . + - macro expansion (and absolute path) in %files -f arg (#9508,#9091). + - permit cli setting of build root policies. + - fix: filter excluded paths before adding install prefixes (#8709). + - add i18n lookaside to PO catalogue(s) for i18n strings. + - try for /etc/rpm/macros.specspo so that specspo autoconfigures rpm. + - per-platform configuration factored into /usr/lib/rpm subdir. + - sparc-sun-solaris2.6 portability check. + - simpler hpux.prov script (Tim Mooney). + - portability: skip bzip2 if not available. + - portability: skip gzseek if not available (zlib-1.0.4). + - portability: skip personality if not available (linux). + - portability: always include arpa/inet.h (HP-UX). + - portability: don't use id -u (Brandon Allbery). + - portability: don't chown/chgrp -h w/o lchown. + - portability: splats in rpm.spec to find /usr/{share,lib}/locale/* . + - fix: better filter in linux.req to avoid ARM specific objdump output. + - fix: use glibc 2.1 glob/fnmatch everywhere. + - fix: noLibio = 0 on Red Hat 4.x and 5.x. + - fix: typo in autodeps/linux.req. + - configure noarch compatibility in rpmrc for ia64. + +3.0.2 -> 3.0.3 + - add --eval to find result of macro expansion. + - add configure scaffolding to support rpm-4.0 packages. + - include shared libs in rpm-devel (no versioning yet). + - add epoch (as [0-9]*:version-release) to install dependency parse. + - move install/erase major modes into rpmlib. + - move checksig/resign major modes into rpmlib. + - add python bindings to rpm-devel (linux only). + - make query (rpm -qvl) behave like (POSIX?) ls for older files (#4050). + - fix: %if parsing skipped 3 chars too many. + - permit multiline macro expansions with comments and %if. + - add pl translation and man pages (PLD team - from Tomasz Kloczko). + - fix: incomplete cleanup if --rebuilddb fails (#4115). + - add versions to provides. + - fix: sanity test on specfile fails when encountering i18n chars. + - print all dependencies for each package at end of build. + - the death of RPMSENSE_SERIAL, use [epoch:]version[-release] instead. + - add _mandir/_infodir macro expansions to docdirs (Tomasz Kloczko). + - add post install configurable dependency checking. + - fix: segfault on --rebuild (#4185). + - macro fixes (Benedict Lofstedt, #4220): + expand %# just like %{#} (and with same value as shell analogues). + macro defaults for *, 0, and # if no args specified. + getopt on non-linux requires optind to be saved/restored. + - fix: don't remove file until last occurence in transaction (#4291). + - resuscitate net shared paths (#4330). + - fix: macro table cannot contain NULL pointers (#4263). + - fix: last char in rpmrc w/o terminating newline lost (#4361). + - prepare for handling \r in macro exapnsions. + - fix: n>1 occurrences of %config(noreplace) should not FA_CREATE (#4355). + - fix: use pgp5 rather than pgp-2.6.3 if both are in %_pgpbin (#4564). + - match "de" when locale is specified as "de_DE.ISO-8859-1@Munich". + - add versions to obsoletes. + - add %_install_langs to configure languages to be installed. + - add LC_ALL/LC_MESSAGES to query locale search. + - fix: segfault with "--sign" w/o supplying files (#4651). + - add headerWrite return code and check for errors. + - update python bindings from anaconda. + - add versions to prereq. + - add syntax sensitive implict prereq on rpm-3.0.3. + - fix: don't successfully match with strncasecmp("sparc", "sparc64", 5) + - add sparcv9 architecture. + - add --freshen to usage message (#4823). + - suggested changes to docs from Ken Estes (#4451). + - link libbz2.a statically to avoid rpm->bzip2 dependence for now. + - Tru64: avoid find-requires variable size limit (Tim Mooney). + - Solaris: use getpassphrase rather than getpass if available. + - pgp and pgp5 have compatible RSA signature (#4780). + - fix: avoid db problems with self-obsoleting packages on install. + - glibc2: always enable dynamic mtrace if available. + - fix: versioned provides devolved to existence test with conflicts. + - fix: with unspecified epochs, skip dependency epoch compare. + - python: shared module linked correctly. + - do versioned provides/conflicts resolution correctly. + - rpmpopt: display versioned provides/obsoletes. + - revert to shared libbz2.so now that bzip2 is in base install. + - fix: command line install had header memory leak. + - check for NULL on all memory allocations. + - free rpmrc mallocs on exit. + - glibc2: permit run time leak detection. + - fix: removed files fingerprint memory leak. + - fix: resurrect allfiles flag from rpm-2.5.x. + - fix: version compares compatible with epoch-less requires/conflicts. + - fix: rpm-2.5.1 had file list w/o leading / fix. + - portatbility fiddles (solaris). + - create binary rpm directory (e.g. .../%{_target_cpu}) on the fly. + - updated pl/rpm.8 (PLD team). + - new find req/prov scripts for non-linux platforms (Tim Mooney). + - fix: non-GNU globs burp on repeated '/' in patterns. + - dumb cpp's want white space around lclint annotations (Tim Mooney). + - aix: aix.req broken by cut-and-paste (Tim Mooney). + +3.0.1 -> 3.0.2 + - eliminate armv4 entries from rpmrc (Andrew E. Mileski). + - permit multiple "Provides: " lines in rpmrc (#2999). + - add BuildConflicts: and BuildRequires: in spec file and src rpm. + - fix: bigendian's with longlong file sizes (e.g. IRIX) dinna work. + - move printDep* routines into rpmlib for gnorpm et al. + - updated ru translation (Sergey Kubushin). + - add vpkg-provides.sh (Tim Mooney). + - don't clobber LDFLAGS in top-level Makefile (Tim Mooney). + - fix: build root from cmd line did not set macro %buildroot (#1026). + - fix: resurrect "rpm -Va --nofiles" (verify dependencies only) (#3111). + - rpm-devel should require popt (#3125). + - don't spin while waiting for delayed requires/provides input (#3289). + - common parse for all dependency token syntax. + - eliminate find-requirements on libNoVersion (Red Hat linux only). + - add new-fangled requires on "libc.so.6(GLIBC_2.1)" (sparc-linux only). + - MiNT port (Guido Flohr ). + - fix: --rebuilddb with --root dinna remove directory (Michael Andres). + - fix: false fingerprint stat cache hit -- "the tetex problem" (#2727). + - fix: bsearch needs macro table sorted after undefine. (#3713). + - fix: --checksig segfault with odd pgp output (e.g. w/o ~/.pgp) (#3720) + - avoid numeric overflow in version comparison (Thayne Harbaugh). + - move url.c and ftp.c to rpmlib right next to query. + - 12 more dead strtoks. + - changelog stamp broken w/ big endian 64 bit time_t (Stephane Erania). + - tru64: use /bin/sh not /usr/bin/ksh in find-requires. + - 32Mb (~16x largest known) sanity check on header size. + +3.0 -> 3.0.1 + - fix: %verifyscript resurrected (Shing-Gene Yung). + - fix: % before non-alphabetic non-macro special now passed unscathed. + - fix: noarch header gets initialized differently. + - fix: $2 to triggerpostun scripts was wrong + - fix: --querybypkg in man page should be --filesbypkg + - fix: optflags not implicitly set to canonical arch value. + - fix: prefer pgp2.6.3 over pgp5 if both are installed. + - make sure that rpm-the-package auto-requires glibc. + - add rpmputtext/rpmgettext to rpm package. + - fix: non-apache servers need "GET ... HTTP/1.0" by the book. + - fix: %doc wrongly inherits lang from last entry in %files. + - resurrect toplevel tar target. + - spec file removal separate from source removal (Shing-Gene Yung). + - add rpm prefix to MD5 routines to avoid name conflict on solaris. + - fix: resurrect -Vp, -Vf and -Vg functionality. + - colesce query and verify modes. + - better cpio error message if package contains missing hard links. + - fix: shared file not skipped when removed. + - fix: conversion script left off leading underscores. + - another strtok bites the dust. + - fix: prevent return code wrap during packagage checking/resigning. + - permit multiple %lang(xx) markers on elements in %files. + - permit %lang(xx,yy,zz) constructs -- 2 more dead strtoks. + - fix: --prefix should work properly during package installs. + - add librpmbuild.a to the file list. + +2.94 -> 2.95 + - fix: last update transaction set segfault bug in installer. + - improved checks for statfs (Tim Mooney). + - remove inconsistent use of __P((...)) throughout. + - non-static inline functions caused IRIX cc pain. + - CPIOERR_CHECK_ERRNO masking caused AIX cc warnings. + - solaris 2.6+ needs statvfs. + - check build prerequisites before building from specfile. + - convert per-system configuration in /etc/rpmrc to macros. + +2.93 -> 2.94 + - fix: segfault while parsing target string. + - fix: os was not initialized with "--target i586". + - fix: --prefix resurrected. + - non-linux, non-gcc portability fixes (Tim Mooney). + - default to static libs only (remove implied support for shared libs). + +2.92 -> 2.93 + - eliminate old rpmrc configuration syntax. + - pgp5 support (Carlo Wood ) + - fix: segfault from double close on ftpGetFileDesc->ftpAbort path. + - fix: don't add header if signature generation failed (Carlo Wood). + - more DU 4.0D fiddles (Shing-Gene Yung). + - fix: segfault from unknown uid/gid -- use builder's uid/gid instead. + - autoReq/autoProv now per-package. + - fix: avoid segfault using --prefix until ewt fixes. + - add --define "%foo %bar" option. + - dump macros to same fd as --showrc uses. + - add %GNUconfigure for full-blown package regeneration. + - fix: RPM_ARCH/RPM_OS had wrong values. + - fix: create ppc directories correctly. + - (re-)enable fixowner/fixgroup macros. + - fix: specfile BuildRoot was masking rpmrc macro. + - expand twiddles in macrofiles list. + - add explicit macrofiles path to rpmrc. + - add per-target macrofiles to search path. + - take globalMacroContext out of macro api. + - fix: flush all macros between builds. + - add name/version/release macros during src.rpm install. + - attempt mkdir sourcedir/specdir during src.rpm install. + +2.91 -> 2.92 + - update with libtool-2.4f. + - DU 4.0D fiddles (Shing-Gene Yung) + - change support@redhat.com to rpm-list@redhat.com. + - fix: with --target=i686, pass macro %_arch=i386. + - fix: rpm --target=arch ... resurrected. + - fix: rpm -q --specfile --specedit now works even with BuildArch:. + - fix: nested strtok's is a no-no. + - added disk space checking + +2.90 -> 2.91 + - fix: memory leaks in rpmRunTransactions plugged. + - fix: build of packages w/o BuildRoot segfault. + - permit substitution of I18N strings from PO meta-catalogues. + - add callbacks for installer updates while doing URL xfers. + - resurrect http queries/verifies. + - create rpmbzio.c to avoid implicit dependence on libbz2 for installer. + - spec files can provide /filename now + - added rpmdbOpenForTraversal() + - proxy http (Alex deVries). + - add BuildPrereq: in spec file and src rpm. + - added rpmtransSetScriptFd() + - fixed config file problems during chroot upgrades + - fixed %attr brokenness for directories + - augment linux provides/requires for glibc 2.1 backward compatibility. + - fixed --noscript, --notriggers, --excludedocs, and a bunch + of other install/remove flags + - fixed noreplace handling + - complain about old packages being installed + +2.5.x -> 2.90 + - added --excludepath + - identify missing keys by type (Toshio Kuratomi). + - package install/removal much smarter about symlinks + - redid install/remove API to allow transaction semantics + - support for GPG (Toshio Kuratomi ) + - file lookup finally sane wrt symbolic links :-) + - fileindex format changed -- rebuilddb is necessary for rpm 2.90!! + - --rebuilddb doesn't open old index files + - permit http:// and file:// url's as well as ftp://. + - change --rcfile to permit colon separated file list. + - compile in defaults from rpmrc/macros. + - finish hiding rpmdb index record data ("matches"). + - implement abstract fd type almost everywhere. + - update and rename Czech (Pavel Makovec ) + - augment --showrc with -v, only display set variables without -v. + - add macrofiles variable, permit second entry to initMacros(). + - add config.h defines for paths to find-requires et. al. + - add readRPM to libbuild, headerGetLangs to librpm. + - permit rpm to be built in a sub-directory (--srcdir=DIR). + - configure using automake. + - arch/os (and platform) should be case insensitive everywhere forever. + - attempt to deal rationally with os as "Linux" or "linux". + - add generalized expression handler (Tom Dyas) + - use /usr/lib/rpm/mkinstalldirs if mkdir -p fails. + - more portable dirent handling (Hermann Lauer). + - add Slovak translation (Stanislav Meduna ) + - gettextify rpmMessage/rpmError/fprintf messages. + - update po files; add cz to catalogs. + - cpio_gzip: dup the fd before doing gzdopen (Thanks Erik!) + - add --noLang to skip non-default languages. + - writeRPM can now copy cpio archive from fd. + - preliminary macro environment as side effect of rpmrc parse. + - macro handling in rpmlib -- rework include: tag with macro expansion. + - first attempt at librpmbuild API. + - fixed lib/rpmrc.c to accept include: tags (AdV) + - fixed the CHANGES file to reflect that this is 2.9, not 3.0 (AdV) + - aggregate system includes into system.h. + - rearrange functions to minimize exported routines in librpmbuild API. + - generalize cpio I/O to eliminate pipe to exec'd gzip on install. + - add {init,add,expand}Macro args everywhere (new macro.c compatibility) + - add new fully recursive macro.c + - there must be a { between two % in a query format (unless %% is used) + +2.5.6 -> 2.5.7: + - permit 0x1b in specfile sanity check. + - increase timeout in tread from 5 to 30 secs for slow links. + - rename file before unlinking to avoid EBUSY failures. + - headerGetEntry now returns count=0 if tag not found (Chris Blizzard). + - resurrect osf1 as canonical os name (Time Mooney). + - sub-packages should inheirit Prefixes tag (Ian Mortimer). + - make '-' character illegal (again) in version/release. + - use portable #!/bin/sh (Tim Mooney). + - don't erase failing build script (Tim Mooney). + - use portable mkinstalldirs (Tim Mooney). + - irix6 autodeps were dup'd (Shing-Gene Yung ). + - getservbyname needed ntohs(). + - propagate "const char *" into rpmlib prototypes. + - use "original db-1.85" if available (Raw Hide glibc 2.1). + - make sure files to sign exist before asking for the pass phrase + +2.5.5 -> 2.5.6: + - ultrapenguin 1.1.9 sparc64 changes. + - attempt ftp ABOR on query/verify url's. + - cache open ftp control descriptor with password. + - verify needed same realpath semantics as query. + - plug fd leak in urlGetFile(). + - translate cpio errors using cpioStrerror. + - display "..?....." rather than "..5....." for unreadable files. + - run time (rather than compile time) host endian check. + - caldera patches (ray@Caldera.DE) + - added ARM patches. + - fix incorrect directory permissions using %attr/%defattr. + - permit "rpm -q --specfile ... file.spec" queries. + - strncasecmp on spec file separators (KDE has %Description). + - remove redundant md5 computation on uninstall. + - permit --rmsource --force even if sources/patches are missing. + - don't compute md5sum on non-file %config objects. (from Jos Vos) + - check arch only on RPMBUILD_{PREP,BUILD,INSTALL,PACKAGEBINARY}. + - configure.in: set default value for RPM. (Tim Mooney) + - add new Epoch: keyword just like Serial:. + - update Russian translation w man pages. + - solaris: don't attempt static link. (Tim Mooney) + - fix: timeCheck in rpm.c should be unsigned long. (Tim Mooney) + - osf: prov searches only shared libraries. (Tim Mooney) + - solaris: set PATH in prov/req scripts. (Tim Mooney) + - fix: ignore modes on symlinks. (Tim Mooney) + - sub-packages inherit RPMTAG_EPOCH (just like RPMTAG_VERSION/RELEASE). + - fix off-by-1 alloca that prevented relocating /. + - there must be a { between two % in a query format (unless %% is + used). + +2.5.4 -> 2.5.5: + - permit rpm to be built in a sub-directory (--srcdir=DIR). + - return CPIO_BAD_HEADER instead of exiting. (Scott M. Stone) + - untranslate "(none)" for auto relocating script wrappers. + - non-linux arch/os identification (Eugene Kanter). + - portable mode_t/pid_t typedefs. + - fix check for trailing / in Prefix: + - remove 2 character language name assumption. + - add /usr/lib/rpm/find-lang.sh (W. L. Estes ) + - miscellaneous portability cruft (Eugene Kanter). + - Makefile: don't use ln -sf. + - getOutputFrom(): fix race between last read on pipe and child death + (exacerbated in 2.5.4). + - rpm.spec: create /usr/src/redhat/* in %install. + +2.5.3 -> 2.5.4: + - expand args using popt on pre-rpmReadConfigFiles arg pass. + - skip arch checks if only packaging source rpm. + - add license field to rpmpopt -qi alias. + - provides/obsoletes requires tokens that begin with alnum or _. + - non-zero exit status for verify failures. + - hpux does setreuid differently (Hermann Lauer). + - check for setreuid portably (Eugene Kanter). + - add Serbian translation (Zoltan Csala ). + - arch/os tables were not being initialized for noarch builds. + - quote users/groups/filenames in --setugids. + - add Russian translation w man pages (Serguei Koubouchine ) + - fix virtual file attribute bug that skipped all files in binary rpm. + - eliminate infinite loop with missing tmpdir (Trent Jarvi). + - os_canon for CYGWIN32_NT/95. + - rationalize autoconf detection of gzip/bzip2. + - restore backward compatible rpmrc/rpmpopt symlinks. + - update pt_BR translations (Arnaldo Carvalho de Melo). + - permit --{buildroot,timecheck,test,sign} with -tX (Toshio Kuratomi). + - fix database rebuilds with triggers (Steve Sanberg). + - diagnostic message if unreadable/short source or patch file. + - eliminate redundant close in provide/require processing. + - solaris portability patch resurrection (Steve Sanberg). + - permit autogen.sh to work on non "prefix=/usr" hosts. + - add %license/%readme virtual file attributes. + - align "Build Host:" with other fields. + +2.5.2 -> 2.5.3: + - copy changelog tags to sub-packages just before packaging. + - added EPOCH handling to supplement serial numbers + - add RPMTAG_EPOCH and RPMTAG_CAPABILITY init to 0. + - fix infinite recursion on non-ERANGE return from getcwd() during + install (Matt Wilson). + - rm .depend for multiple builds in same tree (Will Partain) + - addFile: fix special case of "/" in %files. + - better query semantics with symlinks (Tim Mooney) + - build.c: fix incorrect check for successful open + - allow %define with leading whitespace + - use /usr/lib/rpm for rpmpopt, rpmrc, find-requires, find-provides + - added popt 'exec' functionality + - made --rebuilddb a bit more robust by checking data types + - added --freshen via popt exec stuff + - fixed spelling of expected + - updated de.po (Karl Eichwalder) + - do a better job of checking for a spec file in tarballs + (Pavel Roskin) + - fixed --triggers alias (Michael Andres) + - added :hex query format + - fixed --querytags to display virtual tags +????? - added --triggers and --triggered by to man page, help, and usage +????? - added support for epochs + +2.5.1 -> 2.5.2: + - added -bs to build just a source package + - included irix.req and irix.prov (Tim Mooney) + - copy CHANGELOG* and URL tags to all subpackages + - follow symlinks when packaging sources + - handle %files -f with no %setup (no build directory) + - fixed ugly i18n header bug + - deal with lang paths sanely when entries are missing languages + - fix bug packing /usr/doc when last file was %dir + - added --last alias + - fix :depflags query format + - Group: i18n (like Summary:) + - make --justdb install files in normal state + - %{fssizes} segv'd for packages with empty file lists + - updated HP-UX, OSF1, Irix 6.x dependency scripts (Tim Mooney) + - added arm and MachTen arch/os info + - added --filesbypkg query format + - updated README to have proper URLs + - updated rpm.spec for proper paths and cleanliness + - dependency resolution could hang when Provides: line is used in + rpmrc (Tim Mooney) + - updated mips rpmrc entries (Alex deVries) + - version/release conditional triggers weren't ignoring the trigger + package name at the front of the TRIGGERVERSION + - added --notriggers for -i and -e + - made --triggers a synonym for --triggerscripts + - ftp installs were trying to use /var/tmp/tmp + - allow whitespace in source/patch lines + +2.5 -> 2.5.1: + - fail if sources are not regular files + - wasn't catching readLine() errors + - fixed (hopefully) temp file creation problems + - make %doc obey --test + - unlink before writing .rpms + - librpm.c: added headerGzRead()/headerGzWrite() + - set bzip2path via lib-rpmrc/configure (Toshio Kuratomi) + - added finish translation (Raimo Koski) + - prefer db_185.h to db.h (Christopher Seawood) + - included updated hpux.req (Ralph Goers) + - added aix.req (Ralph Goers) + - updated hpux.prov, osf.req, osf.prov (Tim Mooney) + - set file states for --justdb packages to "not installed" + - handle missing file states properly in -e code + - install time wasn missing for --justdb packages + - missing parameter in an rpmError() caused segfault + +2.4.109 -> 2.5: + - fixed return code bug in build code + - do macro expansion before %if processing + - dep ordering returns w/ an error as soon as a prereq loop is found + - autoreqprov flag was being ignored during builds + - add autoreq: and autoprov: + - missed a few unlink() when scripts failed + - freePrefixes wasn't initialized in runScript() + - fix typo in %triggerpostun generation + - include icons in source packages + - headerGetEntry() should return count of 1 when returning + strings plucked from i18n strings + - do not remove comments in scripts + - save/restore existing arch when done with buildarch + - copy the I18N table to the source header so i18n stuff works + - fixed multiple memory leaks in install code + - fixed bug in part recognition + - shared files weren't being handled properly in net shared paths + +2.4.108 -> 2.4.109: + - remove icons with --rmsource + - do dependecy generation on -bl + - check files on all packages on -bl + - integrate Jeff Johnson's memleak patches + - added OSF1 autodep scripts + +2.4.107 -> 2.4.108: + - make --clean work with no %setup + - fixed FSSIZES problem introduced in 2.4.107 + - fixed search for find-requires.sh + - improved solaris autodeps scripts + - automated (somewhat) the -static flag + +2.4.106 -> 2.4.107: + - --nomd5 wasn't handled properly + - updated configure.in find-req and find-prov checks (Tim Mooney) + - make --rmsource actually work + - run postun triggers + +2.4.105 -> 2.4.106: + - build: only check for non-printables in first 128 chars + - added %triggerpostun + - linux.req generates deps for shared libs + - added a CC=@CC@ to popt/Makefile.in + - handle signed return types from poptGetNextOpt() properly + +2.4.104 -> 2.4.105: + - added langpatt: to rpmrc, and mark files with matches + - added some C++ cruft to rpmlib.h + - added find-requires and find-provides for hpux (Tim Mooney) + - respect LINGUAS when install package files + - added trigger support to build code + - got rid of annoying mwftw() type warning + - fixed many command line options which got broke by changes + for non-gcc compilers + - added trigger support in install code + - added doc/triggers + - strntoul() in lib/cpio.c was returning a pointer to freed + memory + - headerAppend() was doing a bad memcpy() + +2.4.103 -> 2.4.104: + - fixed popt/Makefile.in to use CPP from configure + - use tmppath from rpmrc to for ftp'd files (rather then /var/tmp) + - autoconf files and .depend files weren't created properly during + make archive + +2.4.102 -> 2.4.103: + - need to create popt/configure during make archive + - added comments about modifictation to base popt and rpmrc files + - allow spaces in group names + - fix bug in memory allocation of special doc stuff + - Jeff Johnson's mode/dev fixes + - clean up buildroot + - be more paranoid about making temp files + - added patches from Tim Mooney which let RPM build with non-gcc + compilers and non-GNU versions of make + +2.4.101 -> 2.4.102: + - fixed spelling of "instchangelog" in lib-rpmrc.in + - fixed memory leak in headerSprintf() extension cache + - fixed memory allocation for header formatting extension cache + - added support for INSTPREFIX virtual tag for backwards compatibility + - cpio error codes were poorly defined, causing bad error messages + - generates INSTPREFIXES tag properly, and sets RPM_INSTALL_PREFIX + and RPM_INSTALL_PREFIXn environment variables + - fixed memory leak in install code which occured when net shared paths + were used + - don't pass net shared path to rpmInstallPackage() -- it looks + directly in the rpmrc entries + - don't remove files in netsharedpath, even for files whose states + are not net shared + - changed --setugids to use separate chown and chgrp programs, for + better portability + - popt moved to autoconf + - Makefiles changed to allow building in a different directory then + the source code resides in + - finally fixed the Build Host spacing in rpmpopt + +2.4.100 -> 2.4.101: + - handle files with spaces (put double quotes around them) + - new rpmrc setting, buildshell, can be used to set shell + used for build scripts (default is /bin/sh) + - fix bug where macros were being improperly set for + Patch: and Source: lines + - may use "instchangelog" in rpmrc to limit the maxmium number of + changelog entries that are stored in the database for each package + (-1 means store all of them) + - default instchangelog is set to 5 + - headerRemoveEntry() didn't free the item's data -- this led to + a slight memory leak when installing packages + - implemented generic file relocations at install time + (use --relocate =, i.e. --relocate /usr=/foo) + - added --badreloc flag to force RPM to relocate files which packages + haven't advertised as relocatable + - fix return code on failed uncompresses in %prep + - preliminary handling of bzip2 compressed files + - differentiates between big and little endian mips + - added support for "prefixes:" tag + +2.4.99 -> 2.4.100: + - fixed handling of --rebuild and --recompile + - fixed rpmlibbuild.a typo in Makefile + - fixed handling of '\' in spec files (a specific case of a more + general bug) + - change use of "export" to work with non-bash shells + - compress the archives. oops. + - fixed bug when there is no %setup + - added -L$(topdir)/popt to Makefile.inc + +2.4.12 -> 2.4.99: + - added many more i18n strings + - merged in large rewrite of build code, which includes the following + changes: + - new option --rmsource + - all scripts can now take -p + - more strict about %package placement and use of main package + preamble + - %attr(mode, user, group [, dirmode]) + - %defattr() + - %defverify() + - Root: is depricated. Use BuildRoot: instead + - "nosrc" sources arn't deleted when sources are removed + - New tag DocDir: to set alternate doc dir (default is + /usr/doc) + - %doc should work as expected with buildroot, prefix, DocDir: + - all file processing is done before any packaging + - should work with modern patch programs (later than 2.1) + - %patch -z same as %patch -b + - %define only defines a macro if it starts a line + - script prog entries are now arrays (ie with arguments) + - standard macros: tag names, buildarch, buildos, buildarch_lc, + buildos_lc, PATCHn, SOURCEn, PATCHURLn, SOURCEURLn, sourcedir, + builddir, optflags + - deprecate require_distribution, require_icon, require_vendor + - add RPMTAG_FILEDEVICES and RPMTAG_FILEINODES to header + - export variables in scripts + - fixed tag:field bug + - %lang() in %files + - %description -l + - Summary(): + - fixed read_line() termination usage + - Makefile changes to shorten compiler lines + +2.4.11 -> 2.4.12: + - intialize reserved portion of lead when writing packages + - fixed error messages displayed when opening the database + fails during package installation and removal + - query format of the form '[A%{}]' would drop the static string + - fixed fix in 2.4.9 for empty packages which broke -qip on ftp URL's + - fixed arch/os numbers in lead + - added Turkish message catalog + - -e was running scripts even w/ --test was specified + +2.4.10 -> 2.4.11: + - HAVE_SYS_SOCKET_H was mistakingly MACHINE_SYS_SOCKET_H in + config.h.in + - \%description was trying to do %d expansion in query formats + - made %% work in query formats + - fixed bug in handling characters before array + - let mips build noarch packages + - --setperms would set wrong permissions in some cases (it was + following symlinks) + +2.4.9 -> 2.4.10: + - obsolete entries could cause segv's during upgrades + - sources now installed with uid/gid of process rather then + the ids used when the src rpm was created + - don't give an error if missingok files don't exist during remove + - touched ftp code to make it coexist w/ Red Hat install better + - use rand/srand rather then random/srandom + - don't build misc directory unless it's necessary + - empty package files should be treated the same as files + with bad magic, not as read errors + - fix bug where Prefix directory is included in file list + - sinix readdir() work-around + +2.4.8 -> 2.4.9: + - fix for verification on systems where a single group id + maps to mulitiple group names (Benedict Lofstedt) + - added 'make tar' rule for building a distribution tarball + (Horacio Rodriguez Montero) + - fixed serial number handling in dependencies and install + code + - make mips compatible with noarch + - fixed bug w/ printing string arrays in conditionals + - handle modern patch programs (> 2.1) + - handle packages w/ duplicate dependency names + - --noscripts didn't get handled properly for removed packages + - fixed handling of packages where %prereq creates users/groups + +2.4.7 -> 2.4.8: + - added noarch build compatibilities for ppc, m68k + - fixed some minor typos (Florian La Roche) + - added Obsoletes: tag, an upgrade removes packages which + have been obsoleted + - updated rpmdepUpgradePackage() to deal with obsoletes tag + - convertdb needed to read rpmrc + - fixed ugly bug in package ordering + - archivesize tag was incorrect for packages with hard links + - moved popt into a separate library + - directory created with %doc is now name-version (dropped + the release) + - added buildarch/buildos macros + - added %ghost file option + - updated linux.req to only find requirements for exectuable files + +2.4.6 -> 2.4.7: + - had some wrong month lengths in changelog date parsing + - updated fine-requires (Linux version) to add lines for shell + scripts (Donnie Barnes) + - didn't package / properly + - pre/post script processing had some erroneous free() calls + - fixed typos for HP archs in lib/rpmrc.c + - uname() results should go through *_canon tables before anything + else happens + - set -x in debug shells, not -xs + +2.4.5 -> 2.4.6: + - added os_canon entries for BSD/OS and NextStep + - replaced include of with includes of + - fixed md5sum of source packages w/ a buildroot is used + - fixed bugs installing version 1 packages + - remove hyphens from uname() result (specifically for HP-UX) + - hacks to recognize architecture under parisc + - RPM_INSTALL_PREFIX wasn't being set properly (this should be + fixed now) + - replaced temporary file creation to be race-condition safe + - prerequisites may not specify versions + +2.4.4 -> 2.4.5: + - call getpwnam()/endpwent() once before a chroot(), forcing name + service shared libs to be loaded from outside of the root path + - added vesrion stamp to lib/misc.o (and librpm.a by extension) + - fixed config.sub, config.guess to recognize i686 + - ARCHIVESIZE tag didn't get filled in properly, breaking progress + meters + +2.4.3 -> 2.4.4: + - restore working directory after installing a package w/ a chroot + - dump the package stack when a dependency loop is encountered + - when a user/group lookup fails, end*ent() and retry + - fixed broken --scripts argument (it was --s2) + - only display the packager and url in -qi output if they have defined + values + - print "(not installed)" as the install time for -p queries rather + then "not a number" + - almost completely rewrote rcfile parsing; I'm sure this will + break things eventually but it's much more flexible now + - added buildarch/buildos compatibility tables, listed values + in --showrc + - added cpio archive building code; GNU cpio is no longer used! + packages created w/ rpm 2.4.4 and later cannot be installed with + rpm 2.4 - rpm 2.4.3 however (version of RPM before 2.4 will + work fine, however). An "error -2 reading header" happens when + this is attempted + - removed cpiobin from rpmrc + - added rpmrc "provides" tag to allow easy fulfillment of + automatically generated dependencies + - look for random() in libm if it can't be found be default + - fixed problems in Solaris's autodeps stuff (Eric Mumpower) + - --setperms should work properly on directories now + - --justdb on install, upgrade, and erasure causes a database + update w/o the filesystem being touched + - fixed version comparison of a package w/ a serial tag against + a package w/o one + - added BuildArchitectures: tag to spec file to enable builds + for alternate/multiple architectures + - look for random() in -lucb + - changed the licensing terms for librpm to allow redistribution + under the LGPL + - applied man page changes from Alex deVries + - configure.in builds up LIBS by appending (Benedict Lofstedt) + - rpm2cpio reported wrong zlib error string + - removed \n from (none) generated by query format code + - queries of fssizes w/o fsnames didn't work (Till Bubeck) + - added --noorder option to skip package reordering (Elliot Lee) + +2.4.2 -> 2.4.3: + - implemented install time prerequisites + - repaired %{#TAG} query format + - implemented ternary operator as query expression + - fixed --scripts to only print information on scripts which + are present + - check symlink() return for < 0, not != 0 (Bob Tanner) + - uses chroot() for installs --root option + - archive expansion doesn't create new devices or symlinks when + the proper files already exist + - added -p to %post (etc) to specify the program which a script + is run through + - if -p is used w/ an empty script, the specified program is + executed directly + - the -p argument (or /bin/sh) is automaticall added as a prereq + +2.4.1 -> 2.4.2: + - completely rewrote queryformat code + - added fsnames, fssizes virtual query tags + - added rpmdbFindByHeader() and rpmdbFindByTag() public functions + - added rpmfilename tag to rpmrc to define the filename format to + use for binary packages (note the rpmdir is prepended to it) + - used pclose() instead of fclose() in -t code + - updated man pages + - changed "struct rpmdb" to "struct rpmdb_s" for C++ + - netsharedpath entries shouldn't match partial directory names + anymore (a nersharedpath of /usr/lib shouldn't affect /usr/libexec) + - don't backup config files on netsharedpaths (take 2) + - added "day" query format which is like date, but doesn't print + any time + - added --changelog alias to query a packages changelog entry + - added mntctl() support for AIX (I think, I can't test this) + - fflags query type displays 's' for specfiles, 'm' for missingok + files, and 'n' for noreplace files + - implemented %config(missingok) flag in install + - added --allfiles flag for -i and -U, which forces all files (even + missingok files) to be installed + - implemented %config(noreplace) for the install, but it hasn't + been tested in any way + - added i18n support to headers + - added ppc/rs6000 differntiation for AIX + - all IP* from uname() is changed to just IP + - IP is considered the same as mips (not sgi) + - added IRIX64 OS, it's compatible w/ IRIX + +2.4 -> 2.4.1: + - take advantage of lchown() if it's available + - fixed configure script to assume chown() doesn't follow symlinks + if lchown() isn't available and configure is not being run as root + - more header file changes for AIX + - added :shescape query format type for strings, which prints strings + which will survive a single level of shell expansion + - fixed --setperms and --setugids to handle empty packages and + packages with odd filenames + - include before + - include "miscfn.h" first in every file which needs it + - created noarch architecture which everything is compatible with + - fixed group verification (Benedict Lofstedt) + - don't backup config files on netsharedpaths + - added info on --build{arch|os} to --help and usage messages + +2.3.11 -> 2.4: + - changed RPMNLSDIR directories to and @datadir@ to better + conform with autoconf + - set RPM_INSTALL_PREFIX environment variable when running + verify scripts + - beginnings of SCO support (though I suspect it will take one + or two more iterations to get it right) + - switched to CVS and updated some Makefile rules + - look for gethostbyname() instead of gethostname() in -nsl + (this could break some things) + - added check for strcasecmp() in -lucb on systems which don't + have strcasecmp() in libc + - don't build -static on hpux10 + - don't try and NLS empty strings + - changed index() call to strchr() in macro code + - include in build/spec.c for various platforms + - added update-po rule to po/Makefile.in + - updated de.po (thanks to Karl Eichwalder) + - rpmFindByFile() removes trailing and duplicate /'s + - made many string in rpm program (though not yet in the various + libraries) translatable + - eight character user names could break -qlv + - requirements which begin with a leading / require files (in + the database!) instead of packages + - clean up conflictsindex during --rebuilddb + - get path to gzip from /usr/lib/rpmrc rather then just hoping it's + in the path + - use dbpath for error messages with include database path in + their text + - don't set owner/group if binaries installed by "make install" + - include on SCO + - don't use cpio when installing packages + - fixed bug which affected dependencies on the Alpha + - made '=' work for long arguments (the switch to popt broke this) + - handle solaris systems better + - complain if critical rpmrc variables (cpiobin, gzipbin, etc) aren't + set anywhere + - allow --dbpath for --rebuilddb + - added check for systems whose chown() follows symlinks. If configure + is run as root, this should get it right, otherwise it assumes + chown() does not follow symlinks. You can use --enable-broken-chown + to force configure to think chown does indeed follow symlinks. + - if chown() follows symlinks, we don't chown() symlinks during cpio + unpacking and we don't verify the owner or group of symlinks + - added packager and url to default -qi output + - look for and use it if it's there (for AIX) + +2.3.10 -> 2.3.11: + - fixed newlines in --scripts output + - fix handling of source files with bad owners/groups + +2.3.9 -> 2.3.10: + - --allmatches handling in -e broke some cases + - new predefined macros: %SOURCEn %PATCHn %SOURCEURLn %PATCHURLn + - fix anomoly with %files -f and %doc + - ignore config bit when it's set on directories (which allows + users to replace directories with symlinks) + - don't set config bit on directories + - strip trailing slashes from files (during build) + - %tags are now case sensitive (macros too) + +2.3.8 -> 2.3.9: + - reworked %setup to allow multiple -a and -b options, which + should noticeably ease the task of unapcking multiple tar files + - md5 sum's were calculated incorrectly on big endian machines + from 2.3.2 through 2.3.8 -- this was fixed and some hacks were + done to keep verification working + - updated README + - added --allmatches to allow erasing multiple versions/releases + of a package + - changed ftp URL's to use \r\n, not just \n (this should let RPM + work w/ some picky (but rfc compliant) ftp servers + - fix problem where parts at end of spec file were dropped + - added %config(noreplace missingok) (build-side) + - simple spec file macros + - should now process entire file list before failing + +2.3.7 -> 2.3.8: + - added -t? options to build packages from tarballs which contain + .spec files instead of from the .spec files directly + - fixed error in man page where ftp URLs are discussed + - don't strlen(NULL) in headerAddEntry() + - minor portability changes + - stopped building oldrpmdb.c as part of rpmlib + - added Makefile rule for building rpmconvert (which is almost + never needed) -- this isolated gdbm dependence to this target + - fixed checking of popt stack overflow + - --requires shouldn't imply -q + - fixed error message issued when a groupname does not exist + - fixed but in changelog processing which made it hang on '*' in a + changelog entry + - generate S_ISSOCK and S_ISLNK macros on systems w/o them + - "rpm --erase" wasn't returning proper error codes w/ package + removal failed + +2.3.6 -> 2.3.7: + - fixed nasty memory link in -Va + - configure checks for -lnsl explicitly rather then linking it + to -lsocket (for NCR SysVR4) + - configure checks for dirent.h + - modified glob.c to include config.h and use HAVE_DIRENT_H + - cleanup of LIBS/LIBPATH mess a bit more + +2.3.5 -> 2.3.6: + - -Vf uses realpath() now + - -Vp lets you use --ftpproxy, --ftpport + - changed popt format, breaking all popt alises :-( + - added ability to alias character arguments to popt + - moved --requires, --info to /usr/lib/rpmpopt + - RPM is more forgiving of blank user names (dumb) + - popt searches for aliases in the correct order now + - cleanup query code to handle missing uid lists better + - cleanup up configure.in a tad + +2.3.4 -> 2.3.5: + - %{#TAG} in query format prints the array length + - cleanup up protoypes in rpmlib.h + - let -Vp work on URLs + - don't set umask(0) anymore -- that confused programs which + link against rpmlib quite badly + - moved print out in "rpm -v -i" to occur after any warnings + to pretty up the output a bit + - added default optflags for powerpc + - run shell for post/pre scripts in debug mode with -sx for + some silly shells + - installing source packages with --root checked for the + sources/specs directory to exist outside of the root -- fixed + - modified toplevel Makefile to run dependency generation only + against referenced sources + - array size mismatches in --qf should send error to stderr + - tried to make the locale stuff a bit more portable (again) + - reworked the owner/group setting on installs to be more generic + (in preperation for getting rid of cpio) + - made verify verify owner and groups by name rather then by id -- if + the symbolic names aren't available use the uids + - cleaned up relocateFilelist() and related code thanks to + new header introduced in 2.3.3 -- this could break relocatable + packages but they seem okay + - fixed a bug which could cause relocatable packages to not get + relocated -- I think this bit some people during hard drive + installs of all things (Jason Salopek pestered me consistently + enough to keep this on the front burner for me) + - removed FILEUIDS and FILEGIDS from the header in the database -- + we never used it and it jsut wasted room + - convert uid/gid lists in v1 headers to symbolic names + +2.3.3 -> 2.3.4: + - %changelog processing + - fixed broken requires/conflicts parsing for spec file + - vastly improved --rebuilddb's robustness + - fixed misplaced free() (only affected inconsistent databases) + - added conflicts documentation to docs/dependencies + - using multiple query formats has them all concatenated + - removed stdin based query and verify selectors + - installs rpmpopt in libdir + - moved --provides and --scripts to rpmpopt + - added --setperms, --setugids + - incorporated newer de.po from Karsten Weiss + - --resign/--addsign was broken in 2.3.3 from popt conversion + +2.3.2 -> 2.3.3: + - Ripped out header internals and redid them. Any compatibility + problems this causes are *bugs* as it should be completley + transparent. If this works the devil better buy some Prestone (TM). + - Use "cp -pr" instead of "cp -ar" for %doc expansion + - use instead of (non standard) in some places + - look for non-POSIX (broken) chmod + - include local copies of glob/fnmatch + - removed getopt() check from configure.in + - fixed bug in ftp code which prevented proper logins to some sites + - switched to popt from getopt, which allows command line aliasing + - read initial aliases from /usr/lib/rpmpopt then /etc/popt and + $HOME/.popt + - cleanup up rdev verification (only verifies device files, checks + device related mode bits as well) + - fixed allocation of temporary paths (Eugene Kanter noticed this) + - made tools/dumpdb read the rpmrc so it can find the database + - added --nomd5 for -V and -K + - don't assume mkdir -p will succeed if the dir exists + - use RPMNLS* defines to avoid header file conflicts + - bunch of minor cleanups to avoid warnings on other OS's + +2.3.1 -> 2.3.2: + - fixed bug in new rpmVersionCompare() which made it worse then + useless (thanks to Norbert Kiesel) + - fixed silly message + +2.3 -> 2.3.1: + - changed --help routing to have intelligent line wrapping + to make i18n efforts easier + - NLSDIR should be used for nls catalogs, not a hardcoded path + - NLSDIR should be in share, not lib + - renamed sweedish catalog from se to sv + - added german catalog + - treat RPM_CHAR_TYPE as RPM_INT8_TYPE for queries + - made rpmEnsureOlder() internal to lib/install.c + - added rpmVersionCompare() to compare version/release/serial numbers + for packages -- returns like strcmp() + - stdout/stderr were getting closed after running a verify script + - relocting packages didn't work w/ the packages contained the + directory which was it's prefix + +2.2.11 -> 2.3: + - replaced putenv/setenv which calls which malloc() buffer -- these + are memory leaks, but the functions are only used between a fork() + and exec() so it doesn't matter + - created directroies are stamped with mtime from the file list + +2.2.10 -> 2.2.11: + - fixed some include file problems for FreeBSD + - fixed find-provides script for Linux (silly typo) + - -qvl didn't print out sticky bit + - linux.prov won't print provides info for symlinks which point + to libraries w/ proper sonames + +2.2.9 -> 2.2.10: + - changed how installArchive() handles running out of gzread() + bytes while the child is still alive + - changed tag for Alpha's to "alpha" from "axp" + - made ./configure look for --quiet support in cpio + - netsharedPath's were having mkdir()'s done on them and had + bad interactions with rooted directories + - made -qp accept '-' to query the package on stdin + - dependency checking was broken when no database was being used + - don't *ever* let cpio make directories -- we do a better job + (esp because we don't kill symlinks!) + - plugged memory leaks in upgrade (again thanks to mpr) -- install, + erase, upgrade, query, and verify all seem to be leakproof + - use select() rather than busy waiting in cpio_gzip() + - use half as much temp space during package assembly + - fail if spec file check fails + - changed canonical name for 68k to m68k (sorry) + - integrated FreeBSD changes from Jared Mauch + - integrated Irix changes from Hermann Lauer + - i18n support can be disabled w/ configure by --disable-nls + (thanks to Remy Card) + - integrated more AmigaOS patches, played with configure some + more to allow cross compiling (Kristof Depraetere) + - cleanups to rpm2cpio (closing the gz stream) (Elliot Lee) + - made find-provides return filename for libs w/ no soname + +2.2.8 -> 2.2.9: + - fixed typo in default rpmrc + - made getBooleanVar() a bit better + - added triggers to package builds + - tagged spec file in source package file list + - added %verifyscript (controlled by --noscript, -v flags) + - changed pkgReadHeader() mechanism to be more generic + - added find-provides for Solaris, made find-provides setup + more generic (w/ configure.in picking the right one) + - fix -Q + - The Great Renaming + - use external OS specific script to generate requires lines + (should work with ld.so 1.8.x) (find-requries) + +2.2.7 -> 2.2.8: + - added --ftpproxy, --ftpport (and wrote about them in rpm.8) + - added --nodeps to man page + - added --showrc to man page + - added conflict checking (use conflicts tag, which looks + just like the requires tag) + - fixed RPM's return code when package removal fails + - cleaned up lib/install.c a bit for readability + - plugged a bunch of memory leaks thanks to mpr -- install, + uninstall, verify, and query all seem clean now + - added support for trees shared over a network via netsharedpath + in rpmrc + - don't exit when there is an unknown option in an rpmrc, just + give an error and continue + - tried once again to get things working properly with 2.1's + write behavior + - added -E option for %patch + - added UltraSPARC support to lib-rpmrc + - moved default topdir and optflags settings to lib-rpmrc from + /etc/rpmrc + - removed /etc/rpmrc from standard distribution + - use separate chgrp/chown commands in %setup macro + - kill(2) arguments were backwards in lib/install.c + - fileFile logging needed stdio to handle NULL args to %s + - default docdir (for %doc macro) set in lib-rpmrc rather then + hardcoded + - removed some of the \n from args to error() [though many are + still left] + - uninstall should fail if the preuninstall script fails + - --root works with --initdb now + +2.2.6 -> 2.2.7: + - applied lots of portability patches + - builds on Solaris machines now! + - will build w/o i18n support if GNU gettext isn't installed + - added inet_aton, setenv functions for libmisc + - added Sun4c, Sun4m architectures + - use vfork() if fork() doesn't exist (for AmigaOS) + - look for GNU cpio, complain if it doesn't exist at build time + - put path for GNU cpio in /usr/lib/librpmrc + - install rpm.shared if rpm wasn't built (for Solaris) + - readHeader() in librpm.a should work on sockets (which may + return partial reads) + - package file query (-q -p) accepts ftp:// style URL's + - if gzread returns 0 bytes (at EOF), don't call write w/ 0 byte + argument as it's behviour isn't portable + - fixed -Vp behavior (doesn't seg fault w/ packages have dependencies) + +2.2.5 -> 2.2.6: + - added --rebuilddb to rebuild database, updated man page + - fix fd leak in md5sum + - fixed group cache bug + +2.2.4 -> 2.2.5: + - if rename() for moving .spec file from SOURCES to SPECS fails, + try copying it instead + - -h and -v work for source package >= V2 + - -h output is much smoother now + - new AutoReqProv: tag in spec file can disable automatic + require/provide generation + - fixed md5sum problem on big endian machines in a way that's + mostly backwards compatible; this hack will be removed someday + - added :fflags tag + - fixed a couple of minor memory leaks in lib/install.c + - --test for building + +2.2.3 -> 2.2.4: + - only remove docdir if %doc occurs + - allow -R to %patch + - moved to use GNU autoconf, though it probably isn't perfect yet + (thanks Kristof Depraetere) + - spec file sanity: no - chars in version or release, + must be a regular file :-) + - version specifications for requirements can use "-" + - default lib path, tmp path, topdir, and /usr/lib/rpmrc get set + by configure script relative to --prefix + +2.2.2 -> 2.2.3: + - fixed script file md5 checking when files are in a root + - implemented proper strdup/free logic for dependency conflict + lists + - strip leading directories from ldd output + - fix non-null-terminated readlink() result + - fixed sscanf() in ftp code to use proper types + +2.2.1 -> 2.2.2: + - added functionality to rpmlib to suggest resolutions for + dependency problems + - fix stupid allocation problem in exclude/exclusive stuff + - fix nasty bug where pointers in to the header were getting + stale after some realloc()s in addEntry() + - ignore OS tag for v2 packages -- it was wrong anyway + - match shared libs on ".so" rather than ".so." + - skip blanks from objdump for auto-provide + - if objdump gets us _end, provide the file name + - do not ldd non-regular files + - do not pass leading "/" to ldd + - fix ExcludeOs: and ExclusiveOs: + - -V verifies dependencies, can be controlled with --nodeps + and --nofiles + - added information on --nodeps to usage messages + - implement --timecheck and rpmrc timecheck: + - implement -bl + - catch duplicate files in file lists + - some random sanity checking on the file list + +2.2 -> 2.2.1: + - made rpmRemovePackage() print message in verbose mode + - added support for ftp://user:pass@machine.org/ URL's + during installation - the password will be prompted for + if only the user is given, and anonymous ftp will be used + it both user and password are omitted (as before) + - Remove Exclusive: Exclude: + Replace with: ExclusiveArch: ExclusiveOs: + ExcludeArch: ExcludeOs: + - fixed dependency cheking for packages that are installed + at the same time + - fixed version number dependency checking + - fixed problem installing v1 source packages (thanks to + Nikita Borisov) + - fixed minor spelling/spacing problems (Nikita Borisov) + - assume all v1 packages were made for Linux so OS check works + - began to implement proxyftp, though it doesn't work yet + - fixed spacing when reporting dependency conflicts + - fixed bug where a long name (uname()) was mapping to itself + +2.1.2 -> 2.2: + - don't fail, and do report, if -K can't find a PGP key + - handle file names with quotes and spaces when passed to ldd + (still can't have spaces in %files) + - do not allow Buildprefix: in sub packages + - removed require_group from rpmrc -- groups are always required + - removed arch_sensitive from rpmrc -- always on + - removed docdir from rpmrc -- always /usr/doc + - fixed nasty bug in installing packages with large filelists + - made -R work + - --provides and --requries don't print anything if no information + is present (rather then (none) ) + - -qi prints Summary now + - changed Buildprefix: -> Buildroot: (spec file, rpmrc) + --buildprefix -> --buildroot (command line) + RPM_BUILD_PREFIX -> RPM_BUILD_ROOT + (%prep, %build, %install, %clean) + sorry :-) + - allow Prefix: for sub-packages + - allow packager: in rpmrc + - --arch and --os are now --buildarch and --buildos + - magic arch/os handling through arch_canon and os_canon + see /usr/lib/rpmrc (in short: uname short_name num) + - removed build_arch: from rpmrc + Replacing it is buildarchtranslate: and buildostranslate: + to allow building with arch/os other than what uname() returns. + Can still be overriden with --buildarch and --buildos + - rpmrc keywords are now case-insensitive + - check os at install time + - check return code from gzread() during installs + - implemented os_compat + - added arch_compat and os_compat information to --showrc (the + changes needed to do this removed any lingering questions about + the efficiency of the compat lookups for large tables or tables + with loops -- it should all work fine) + - made -u (--uninstall) exit with an error and not do anything + - added --ignoreos + - fixed error message given when a file is missing + - fixed hashing when multiple packages are being modified + - changed man page for readability (thanks to Joseph L. Hartmann, Jr) + +2.1.1 -> 2.1.2: + - fixed error message for unrelocatable packages + - automatic shared lib provides now work with buildprefix + - fixed dependency checking during upgrades to work if the + package wasn't previously installed + - clean up temp file after signature check + - dependencies weren't looking through packages that were + being installed at the same time quite right + +2.1 -> 2.1.1: + - fixed -qi query format + +2.0.11 -> 2.1: + - added --requires, --whatrequires, --provides and + --whatprovides queries + - using a string array tag in a queryformat results in every + item in the string being printed out with spaces in between + (though this behaviour will probably go away shortly) + - all packages are ftp'd before any are installed (required to + do proper dependency checking) + - if only source packages are being installed, the database is + never opened + - automatic shared library require/provides tags generated + - added --nodeps flag for install and uninstall + - added dependency checking for installs and uninstalls + - misc fixes to compile with glibc + - use PGPPATH if set (and no pgp_path: in rpmrc) + - remove pgp_pubring, pgp_secring stuff + - new extensible signature + - signature section supports multiple signatures + - --addsign to add a signature to a package + - PGP key no longer limited to 1024 bits + - always do at least an MD5 "signature" + as a result, -K will always tell you something + - signatures now include a simple "header+archive size" check + just calling readSignature() checks this + - --nopgp (with -K) to skip PGP check, just do MD5 + - allow '#' comments in preamble and %files section + - fixed -qsv to print both the states and the file information + - added --dump option to query to print all file attributes + - installs with --root use the /etc/passwd and /etc/group from + the target directory + - added --initdb to aid in database initialization + - --queryformat can print items of type INT8 + - "sourceless" packages with nosource: and nopatch: + - [] now allows interation through query formats + - '-' flag for query tags removed + - :date and :perms supported as query format specifiers + - new rpmrc entries "arch" and "os" to override + - --arch and --os on the command line to override + - arch and os are now strings in the package header + - added arch_compat handling in /etc/rpmrc + - added build_arch to /etc/rpmrc + - support arch as string + - added --ignorearch option + - Prefix: in spec file to specify default installation prefix + - rpmrc and command line may be used to override the path + used for the rpm database + - relocatable packages get installed properly + - added support for --prefix and RPM_INSTALL_PREFIX environemtn + variable + - added dependency checking for version numbers + - added correct dependency checking for upgrades + - added :depflags query format flag + - changes --provides, --requires, and --scripts queries to use + queryFormats + +2.0.10 -> 2.0.11: + - fixed chmod(symlink) bug (since 2.0.9) + +2.0.9 -> 2.0.10: + - fixed the fix to rpm -q bug + to query by number you now need --querybynumber + - made arch_sensitive on by default + - handle # comments in preamble + - don't barf if we can't canonicalize the hostname during builds + - fixed --verify with --root + +2.0.8 -> 2.0.9: + - %files -f + - prelim Require/Provide handling + - prelim strict checking of spec file + - removed some bash-isms + - fixed globbing/root bug + - fixed rpm -q bug + - fixed ftw() related bug where symlinks were being + followed in %files rather than just being noted!! + - pass "upgrade" arg to pre/post scripts when upgrading + - use PATH to find cpio when installing + - fixed rpm.magic, added sun4, mips, 68k, sgi, sunos, solaris + - added %attr(mode owner group) feature to file list + - fixed dumb %verify() parse bug + +2.0.7 -> 2.0.8: + - explicitly turn off ASCII armor when running PGP + - fixed --noscripts logic, which was on by default and + off if you specified it! + - uses a temp file to pass filenames to cpio in case when + their are more then 500 filenames in a package + - added --rcfile + - fixed problem with $HOME/.rcfile not being read + - undocumented --search, --where, --keep-temps which + will probably won't be implemented in RPM 2.x anyway + +2.0.6 -> 2.0.7: + - builds now set umask 022 for all scripts + - queries relative paths correctly (thanks to Johnie Stafford) + - fixed error codes for failed installs + - don't add NULL entry to group index for packages that don't + have group information, add it to the "Unknown" group instead + - added --scripts query option + - added --noscripts for installing and uninstall without using + the pre/post scripts + - "rpm -qd" and "rpm -qc" work properly now (they didn't imply + -l before) + +2.0.5 -> 2.0.6: + - internal changes to error messages + +2.0.4 -> 2.0.5: + - added support for generic querying + - added --querytags option + - updated man page for above two + - short-circuit got added before 2.0.5, but I don't know when + - query and installs should now return 0 on success and nonzero + otherwise (rpm -i should return the number of packages that + failed actually) + - made rpm -qa fail if extra arguments are passed to it + +2.0.3 -> 2.0.4: + - added support for PowerPC, and OSF mklinux ports + - added --resign + - added --recompile + - added verbose error messages from Tyson Sawyer + - rpmconvert won't overwrite an existing database + - won't core dump querying old format source packages + - freed minor memory leak + - more descriptive error messages during build + - added support for not installing documentation + +2.0.2 -> 2.0.3: + - added support for 686, 786, 886, 986 + +2.0.1 -> 2.0.2: + - fixed ftp.c to return an error code when select timeouts + - added basic NLS support, along with a Sweedish message catalog + (thanks to Michael Nyquist) + +2.0 -> 2.0.1: + - hashing and percentages no longer SIGFPE on 0 byte packages + - when an ftp fails, install.c no longer tries to install the package + - uses /var/tmp rather then /usr/tmp during for ftp space + - added debugging messages to ftp.c + - fixed some mistakes in the PGP section of the man page + - added mdfile prototype to rpmlib.h - the Python module wants this + - fixed struct oldrpmlead to align properly on the alpha + +2.0 - everything done :-) + +2.0b -> 2.0c: + - an incredible number of changes - I won't bother trying to + list them + +2.0a -> 2.0b: + - moved build stuff to main rpm command, though --rebuild is still + not supported + - install should work, although replaced files are not marked as + replaced + - %doc macro fixed + - --percent, --hash work for installs + - converted databases and packages get the file list in the correct + order now + - none of this is well tested + - rpms are output to proper dirs (which are always arch sensitive) + - basic rpmrc functions are implemented, full parsing is present + - changed error messages for missing files to include full path + - fixed detection of Alpha's + +1.4.6 -> 2.0a: + - completely rewritten in C + - verification missing + - build functionality not in main rpm, in rpmbuild instead + (this will be corrected) + - an awful lot is still missing - this is an ALPHA release + +1.4.5 -> 1.4.6: + - fixed rpmq problem with packages w/o groups (old RPM's would do this) + - fixed uninstalling with --root + +1.4.4 -> 1.4.5: + - added support for mips processors + - added support for osf1 and irix os's + +1.4.3 -> 1.4.4: + - fixed bug in arch detection code which caused i386 failure + +1.4.2 -> 1.4.3: + - added tokens for SPARC, MIPS, PowerPC, and 680x0 architectures + - fixed sparc arch, added arch sanity check + +1.4.1 -> 1.4.2: + - added --root to man page, usage, and help messages + - added a " " to the "Creating directory" debug message in install.pl + - make --rebuild fail on binary packages + - don't output prep/build/install sections if there aren't any + +1.4 -> 1.4.1: + - fixed man page + - updated corruption messages to not mention --rebuild + - added RPM_PACKAGE_VERSION and RPM_PACKAGE_RELEASE variables + at build time + - no longer allows installing binary packages across architectures + - fixed handling of symlinks marked as config files + +1.3.2 -> 1.4: + - make -v the default when using -b and --rebuild + - added %postbuild as an alias for %clean + - added gendiff + - added groups file installed in /usr/lib/rhs/rpm + - made usage message different and more concise then the --help message + - added --version option + - updated man page + - changed C build tree for concurrent building on multiple architectures + +1.3.1 -> 1.3.2: + - add -b option to %patch + - fixed install/chroot temp file deleting + +1.3 -> 1.3.1: + - fixed bug when doing md5 of erased config file during rpm -u + - fixed spec file searching + +1.2 -> 1.3: + - added --search and --where options + - multiarchitecture support + - added --rebuild option + - started C rewrite - rpmq (query options only) + +1.1 -> 1.2: + - preuninstalls weren't getting handled properly + - Alpha architecture is now recognized and builds are allowed + - the database open is checked for success before continuing + - rpm -b? checks the SPEC files for package names given as args diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..02f5d4d --- /dev/null +++ b/COPYING @@ -0,0 +1,842 @@ +RPM and it's source code are covered under two separate licenses. + +The entire code base may be distributed under the terms of the GNU General +Public License (GPL), which appears immediately below. Alternatively, +all of the source code in the lib subdirectory of the RPM source code +distribution as well as any code derived from that code may instead be +distributed under the GNU Library General Public License (LGPL), at the +choice of the distributor. The complete text of the LGPL appears +at the bottom of this file. + +This alternatively is allowed to enable applications to be linked against +the RPM library (commonly called librpm) without forcing such applications +to be distributed under the GPL. + +Any questions regarding the licensing of RPM should be addressed to +marc@redhat.com and ewt@redhat.com. + +--------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +--------------------------------------------------------------------------- + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/CREDITS b/CREDITS new file mode 100644 index 0000000..97779b3 --- /dev/null +++ b/CREDITS @@ -0,0 +1,39 @@ +Work on RPM was done primarily by: + + Erik Troan + Marc Ewing + +Significant code, ideas, or porting help have been contributed by: + + Stuart Anderson + Ed Bailey + Donnie Barnes + Nikita Borisov + Till Bubeck + Kit Cosper + Kristof Depraetere + Alex deVries + Karl Eichwalder + Fred Fish + David Fox + Joseph L. Hartmann, Jr + Jeff Johnson + Michael K. Johnson + Eugene Kanter + Toshio Kuratomi + Hermann Lauer + Elliot Lee + Benedict Lofstedt + Jared Mauch + Nigel Metheringham + Horacio Rodriguez Montero + Tim Mooney + Eric Mumpower + Michael Nyquisk + Steve Sanbeg + Tyson Sawyer + Christopher Seawood + Johnie Stafford + Gary Thomas + Bob Tanner + Karsten Weiss diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..4a7e1f0 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,90860 @@ +commit 87d5da8b52337b4f63690a74a1963a46f116d570 +Author: Panu Matilainen +Date: Fri Jul 15 12:38:07 2011 +0300 + + Preparing for 4.9.1 + + - Bump library revisions and package version, update translations + +commit f85756df86ea0ef439a053d15c4530708cf71de3 +Author: Panu Matilainen +Date: Fri Jul 15 12:35:42 2011 +0300 + + Shut up unused-but-set warnings from gcc (if supported) + + - These are not going to get fixed in 4.9.x branch, remove the + useless compile noise + +commit ada2b31413dda98ef0489fe9f17fd1f6b3fb6c3e +Author: Panu Matilainen +Date: Thu Jul 14 14:05:32 2011 +0300 + + Sanity check signatures even if we dont have a key + + - Fixes a regression originating all the way back from commit + c7fc09d585ff3831924f72f61d990aa791f2c3f2 (ie rpm >= 4.8.0) + where a package with a bogus signature can slip through undetected + if we dont have a key for it. + - This additional sanity check on the signature prevents is enough + to prevent the fuzzed package in RhBug:721225 from crashing us + by stopping the bad package at the front door. That we don't have + proper tag data validation is another, much wider issue... + (cherry picked from commit c07efb9fec3d8d7216e15609e3acf7d107cbe2ae) + +commit f9e581ec2e7443a8bd3b4101a56f7c588aef58f5 +Author: Panu Matilainen +Date: Wed Jul 13 16:19:01 2011 +0300 + + Fix memleak on keys with more than one user id + + - This is not "correct", we should permit more than one user id. + Leaking memory is still worse than not leaking, corrent behavior + or not. + (cherry picked from commit 5d58afc88215b4b9cdc2086c8b5c11941e62f369) + +commit a8eea6df8d3ad6327016922a3c8a2b2ee7d5b50f +Author: Panu Matilainen +Date: Wed Jul 13 16:05:34 2011 +0300 + + Fix crash on PGP packets/armors with more than one key (RhBug:667582) + + - While OpenPGP permits arbitrary number of keys per packet/armor, + we can't handle more than one, error out early. The poor user + wont get much of a clue as to what went wrong, but thats still + better than crashing and burning. + - Return NULL from pgpPrtPubkeyParams() on errors and pass it onwards + from pgpPrtKey() which propagates it up to callers. Besides + the crash, this also fixes the error path from pgpNewPublicKey() + failures. + (cherry picked from commit 3cad28715bcdcf1bc92171bc560cb24ea87d9d74) + +commit fd10798215f2e0bb6dd5d66ebb0df76168c5bb39 +Author: Panu Matilainen +Date: Wed Jul 13 15:46:21 2011 +0300 + + Oops, rpmPubkeyDig() should return NULL if pgpPrtPkts() fails + (cherry picked from commit 612579c6f656f6f8268ed6a05dcdb151477ddaf0) + +commit 4e6dc92f90cd57af0d64f9bd49e6a8cb990a3895 +Author: Panu Matilainen +Date: Wed Jul 13 14:03:32 2011 +0300 + + Only increment number of query/verify sources when we encounter new types + + - This makes it legal to specify the same query/verify source more + than once. Not that it makes a whole lot of sense to do so, but + complaining "only one type of query/verify permitted at a time" seems + silly as well if you're just (accidentally) specifying the same + source twice. Besides, this makes the code a bit cleaner. + - Kinda related to RhBug:691930. + (cherry picked from commit f627135e9f55f4e65dc581145e98607cd044b381) + +commit 7775eadb597f9c7e57c69d22ff739a01886c8eb4 +Author: Panu Matilainen +Date: Wed Jul 13 13:56:15 2011 +0300 + + Fix the sanity check on number of query/verify sources (RhBug:691930) + + - Prior to commit 2e672f3fae9d8ff7ee64ae13cfa2fe65272c2ede, the + callback would get called twice for every option so the expected + number of query/verify sources was doubled. Now the numbers + match with reality, adjust the check. + (cherry picked from commit 306c23ee49c0e385a830d206389c5e36128b9916) + +commit 36a82f92d8f3446730267256ee51490206afc91a +Author: Panu Matilainen +Date: Fri Jul 8 10:31:34 2011 +0300 + + zlib is mandatory, fail at configure if missing + remove conditionals + + - Unlike bz2 and xz/lz, zlib compression is not tracked by any rpmlib + feature and is part of the original package format really, zlib + simply must be always present. + (cherry picked from commit 4b7e6cb79f5073fc42ae98e153668e574ebe0388) + +commit d740b2be6e0e725bfdfba41cb0d3d298c404e40a +Author: Panu Matilainen +Date: Wed Jul 6 11:05:42 2011 +0300 + + Fix the broken python header __getattr__() behavior, take 13 (or so) + + - Tags as header attributes seemed like a nice idea at the time... but + has been a PITA due to side-effects it causes, such as breaking + getattr() use for "capability testing", eg: + >>> h2 = copy.deepcopy(h) + Traceback (most recent call last): + File "", line 1, in + File "/usr/lib64/python2.7/copy.py", line 172, in deepcopy + copier = getattr(x, "__deepcopy__", None) + ValueError: unknown header tag + - Since we can't really go removing the brainded feature (somebody might + actually be using it) try harder to fix it: if its not an actual + attribute, save the exception we got from PyObject_GenericGetAttr() + and if its not a valid tag either, restore the original exception. + This allows cases like the above __deepcopy__ to work properly. + (cherry picked from commit 9d30318c0ad42e6a6c895d5a62bb209344d4f2da) + +commit 38d300c16443b4f173067ea75cbe303fdd21618f +Author: Panu Matilainen +Date: Fri Jul 1 11:19:02 2011 +0300 + + Fix the totally broken rpm.fd() read method + (cherry picked from commit cb84c0db42db105116072cb71d89152e885e2e2c) + +commit bcd673bcdea7bf9ab80621d3d767866e7a232e8d +Author: Panu Matilainen +Date: Tue Jun 28 13:01:59 2011 +0300 + + Fix explicit directory %attr() when %defattr() is active (RhBug:481875) + + - parseForAttr() doesn't know whether it's dealing with a directory or + a file, so it can't know which defaults it should use. + Move all the decision making on which of the explicit/default/implicit + attributes into addFile() where we do know what kind of entry we're + dealing with, and only parse in parseForAttr(). + - backported from commit 09efbe9656bed123dcfb240a7d94906b981a65d1 + +commit 24a78c130af62a2013fd4de0085e0e99fe386c47 +Author: Panu Matilainen +Date: Tue Jun 28 08:37:41 2011 +0300 + + Enable GLOB_ONLYDIR of the bundled glob() on platforms that support it + (cherry picked from commit 5cd1e56cd28ee18ab863951bc242e99e42d85a1a) + +commit 2170996974a77bfabfbb8e2fe356196615796d74 +Author: Panu Matilainen +Date: Mon Jun 27 14:52:22 2011 +0300 + + Pay attention to dir vs file when building (RhBug:505995) + + - Preserve trailing slash if it exists, and also add one on explicit + %dir entires. This lets rpmGlob() and friends to skip any matching + files that might be present, fixing both test-cases in RhBug:505995. + (cherry picked from commit 23167c3ea459405c98d8e759993efb6d9b1ea7f3) + +commit 91368408365a1e15cc7174ecc99c2834fef77d0a +Author: Panu Matilainen +Date: Mon Jun 27 14:09:17 2011 +0300 + + Honor trailing slash in rpmGlob() + + - Only return directories if a pattern contains a trailing slash. + Use GLOB_ONLYDIR hint if available but as this is unreliable, + we need to stat the paths to be sure. + - Hysterically enough, rpm bundles its own copy of glob() which does + have GLOB_ONLYDIR but ATM it doesn't get build because HAVE_D_TYPE + isn't defined outside glibc build environment which is where our glob + originally came from... + (cherry picked from commit 65e88045ba80b175418b865fe4c4a88d48c00189) + +commit 6cbfa8fb638574d317abeba55afd4d52ce443c8c +Author: Jakub Jelinek +Date: Fri Jun 17 16:40:20 2011 +0300 + + Add DWARF-4 support to debugedit (RhBug:707677) + + Signed-off-by: Panu Matilainen + (cherry picked from commit 9d440c488b27a112232ebf4d4ea2f3b4462a910c) + +commit a9ed6205e6e151d99e047b1f5379bd5a5cec8912 +Author: Panu Matilainen +Date: Fri Jun 17 14:25:44 2011 +0300 + + Avoid extra newlines in parsed spec output outside preamble + (cherry picked from commit 1e1bd6709a675ab77b539d2260a8ccc2ec34bc43) + +commit aa3f7023da099c581fa930116d532b762240a722 +Author: Panu Matilainen +Date: Fri Jun 17 13:53:43 2011 +0300 + + Add --parse option to rpmspec tool to dump parsed spec contents + + - This is somewhat like 'gcc -E', useful for analyzing/troubleshooting + what happens inside the preprocessing. + (cherry picked from commit c881ee9e81c35f5a4733c5797e50aaabb1c7d1d5) + +commit cdadcee074b20e91b4f95a0db419dd6dc0fcd3f2 +Author: Panu Matilainen +Date: Fri Jun 17 13:44:39 2011 +0300 + + Support retrieving the spec contents in parsed format + + - Collect the preprocessed (conditionals, macros etc evaluated) + lines to a separate stringbuf, make rpmSpecGetSection() return + that on RPMBUILD_NONE "section" (hack, but so is abusing RPMBUILD_FOO + for the section here so shrug) + (cherry picked from commit c38504c4ba539ccbfb37edccc0cc0ad3cdae58b3) + +commit e2c668827faf8dfa5b785fcdc9b6942ad82c6127 +Author: Panu Matilainen +Date: Thu Jun 16 19:21:54 2011 +0300 + + Error on unclosed macros & trailing line continuations in spec (RhBug:681567) + + - Track the starting line in case copyNextLineFromOFI() indicates + a multiline-construct. If we get an EOF from readLineFromOFI() + while inside multiline read, its an illegal construct of some kind + and we can even spit out a reasonably meaningful error pointing + out the starting line number of the bad construct. + (cherry picked from commit 7e067c3ed912b95109cdbe6b03648433edfc9e0b) + +commit e93cf42e377bce93410b100e11822b0e8d848daa +Author: Panu Matilainen +Date: Thu Jun 16 08:48:57 2011 +0300 + + Export rpmteFailed() to python bindings + + - Kinda related to RhBug:661962, yum relies on callbacks to catch + install/erase errors but this is not accurate: on erase the + element can be ambiguous as the callback only gives a name (sigh). + In addition, elements can be skipped entirely if "parent" element + fails, in which case no callbacks are issued so these cases would go + completely unnoticed when relying on callbacks alone. te.Failed() + gives users such as yum a chance to have a look at the real status + of elements (after the transaction). + (cherry picked from commit a324a53527e4ecacabc33a73cfcb4c572aaefa2d) + +commit c644bd5c175bccd772ce009231bccfe1e6425ce9 +Author: Panu Matilainen +Date: Mon Jun 13 11:52:54 2011 +0300 + + Don't remove buildroot docdir on %doc usage (ticket #836) + - Some software installs its own documentation and if you try to + combine it with %doc, rpmbuild will abort with mysterious + "cpio bad magic" or such errors because what was assumed to be + there was not, as %doc would 'rm -rf' the docdir upon first + invocation. I don't see any good reason to disallow sharing the + same directory for %doc and documentation installed by software + "make install" - the other alternative would be forcing %doc to + go to some other location, only making docs harder to find. + - Also at least Mageia (and prior to that Mandriva) has been doing + this for quite some time now. + (cherry picked from commit 2f6bfc99d01df941f6aaad8497150f82eeb75311) + +commit 24c2f150c3724dab5cbb645732118c672eabaf68 +Author: Panu Matilainen +Date: Fri Jun 10 12:08:45 2011 +0300 + + Adjust script detection rules to work with file >= 5.07 too (RhBug:712251) + - Somewhere between file 5.05 and 5.07 it started adding encoding + to script descriptions, eg " script text executable" became + " script, text executable" breaking what had + been working for 10+ years in the case of old find-requires. + - Permit either comma or space after "script", this works for both + old and new file. + (cherry picked from commit db4905f51eb80b55c408e3a659bab6b4ec5d9e3b) + +commit d0c8526513c0a3f516dfa22e285c174213293017 +Author: Panu Matilainen +Date: Thu Jun 9 14:25:37 2011 +0300 + + Eww, python ds.Instance() doesn't take any arguments + - ...means its been broken all along, sigh + (cherry picked from commit 9c5eab023a12f21a01fbe11e089c7eb8e9285a89) + +commit 1f2573d07a851c3491bc9892d9bc8e841817f602 +Author: Panu Matilainen +Date: Wed Jun 8 11:00:40 2011 +0300 + + Handle EINTR on the spot instead of restarting the entire loop + - The previous code was violating the "golden rules of select()" by + possibly skipping processing of fd's that were included in the + select() set. Also restarting the entire loop should not be + necessary in case of EINTR select(), our conditions do not change + in that situation. + (cherry picked from commit 5de50d2e74dff1622eb426a0982b213abf46c883) + +commit 4897a01066ae0dce4d8737abe4f0c7ed9c85d74b +Author: Panu Matilainen +Date: Wed Jun 8 10:01:14 2011 +0300 + + Abort depgen output reading on EOF, not child exiting + - There could, at least in theory, still be data to read after + we receive SIGCHLD. Stop the loop on EOF on read instead. + Thanks to Michael Schroeder for pointing this out. + (cherry picked from commit fb3412e80b52b19d51557b81b318b85f785acffd) + +commit 8210b0a4d7f859687022a2f66ff7280566dff329 +Author: Panu Matilainen +Date: Wed Jun 1 09:01:24 2011 +0300 + + Reset cli configured flag on rpmcliFini() (RhBug:709421) + (cherry picked from commit 24229947e8302c6243e6124808b418728094adb9) + +commit 30e5a3fab0bd16f617b9631090a88f94ef65dca7 +Author: Panu Matilainen +Date: Mon May 30 15:54:16 2011 +0300 + + Fix a logic error leading to unlink(NULL) call, oops. + - If writing the scriptlet to a file fails, its possible to + end up with non-NULL script but with NULL fn and kaboom in unlink() + (cherry picked from commit 2a60e63cf00ff736324f5e0fcd5a27a9dfb29e68) + +commit a352dcf1c57437894649a61efa05a9409290e9d3 +Author: Panu Matilainen +Date: Fri May 27 14:12:55 2011 +0300 + + Clean up + plug memleak in parseDescription() + - Eliminate dead NULL-assignments of local variables on exit + - Move stringbuf free to exit, previously error on readLine() leaked + memory here + (cherry picked from commit 36538f6228abc8cd76d76f3bc7bab9d224217e1e) + +commit b0f591c7ece55fa13aa9986d6182e556580befcb +Author: Panu Matilainen +Date: Fri May 27 13:59:05 2011 +0300 + + Clean up + fix memleaks in readIcon() + - Assume failure and use single point of exit where all allocations + are freed without dumb dead-assignments. Also fixes a + leak from icon allocation when Fread() fails. + (cherry picked from commit 9e014460598b10004ff7f9252411a804c32d6ccc) + +commit 0fea84fb37cdcdb28f9585b02d6151dc7b6a8587 +Author: Panu Matilainen +Date: Fri May 27 09:02:38 2011 +0300 + + Handle readlink() failure in genCpioListAndHeader() correctly + - It might be a rare condition but it /can/ happen, and previously + that would cause '\0' written out of bounds (at negative array offset). + Also leave room for the terminating '\0' at the end of buffer when + calling readlink(), previously a link exactly the size of buffer + would've been silently truncated. + (cherry picked from commit c499a0b912629eeeabc3554d3e3a95c088e96422) + +commit 0c4b5da8955b9cc364c4490cc43f5ff357bf2ee3 +Author: Panu Matilainen +Date: Thu May 26 14:16:14 2011 +0300 + + Colored conflict resolution part II + - Same as commit 7bbc9b073d9204f6ffb8a1091c189b80029d27a9 but + within the to-be-installed set + (cherry picked from commit 75a0d6dcf4a571ddea3857e9e24e3fecc136defd) + +commit 9d80b498e16603dbe3d1402f1945432a16dc7fd8 +Author: Panu Matilainen +Date: Thu May 26 11:40:55 2011 +0300 + + Both files must be colored for multilib conflict resolution (RhBug:705115) + - File conflicts should only be resolved to preferred color when + both files are colored. Prior to this we would happily overwrite + scripts with a clearly conflicting ELF binary. + (cherry picked from commit 7bbc9b073d9204f6ffb8a1091c189b80029d27a9) + +commit b5bc5c9e21f7c12e08002a8d50e97340ce09344a +Author: Mark Wielaard +Date: Wed May 25 15:44:42 2011 +0200 + + Add -r flag to find-debuginfo.sh to invoke eu-strip --reloc-debug-sections. + - This is a new option to eu-strip that strips out/resolves relocations + between .debug_* elf sections in ET_REL files. This can save a lot of + space for kernel module. + + Signed-off-by: Panu Matilainen + (cherry picked from commit 40a7e19fbe3a7d040e8b13e6d6e9ac567c56cf04) + +commit 9ff13f907060549b804843cff4d564287dbfea38 +Author: Panu Matilainen +Date: Wed May 25 14:52:39 2011 +0300 + + Disable all scriptlets and collections centrally on --test and --justdb + - These are already taken care of in other places but they're littered + a little bit of here and there, eg in case of collections these + modes are only skipped deep down in the plugin code. This should + make the intended behavior more obvious upfront. + (cherry picked from commit e040a126a01edb4950bc8ef6a93e5ca18070c194) + +commit 3eb427d495dabb7b2c74486553da892604b067f7 +Author: Panu Matilainen +Date: Wed May 25 14:26:51 2011 +0300 + + Permit %verifyscript from non-installed packages + - Verification from non-installed packages can be useful sometimes: + http://lists.rpm.org/pipermail/rpm-maint/2011-May/003015.html + - %verifyscript is unlike all other scriptlets so might as well + take some shortcuts and bypass rpmteProcess() & all, just + create a lone rpmte, force the header we got and call rpmpsmRun() + directly on it, bypassing rpmteProcess() which is only an + unnecessary complication here (based on patch by Michael Schroeder) + (cherry picked from commit 563f7c0dad5a748e1861f92087044d780787c766) + +commit 03bfd1fbe0161ada762367c05d6d9452b6037880 +Author: Panu Matilainen +Date: Wed May 25 14:03:57 2011 +0300 + + Don't run collections on script stages like %pre/posttrans, ugh. + (cherry picked from commit 099f09de45cb7c241980da4e8cde7de61f5c1936) + +commit 04ae8fbb46f8c3ed0a114f7e62616dfc6a5d8132 +Author: Panu Matilainen +Date: Wed May 25 10:20:45 2011 +0300 + + Issue an error on failure to replace original package on signing + - Previously any failure on replacing the original package with the + newly signed one would silently fail, causing rather confusing + behavior when eg attempting to (re)sign readable but not writable + packages. + (cherry picked from commit d885361c84525c5af468204f936993763cca0e6b) + +commit f4049f0be31fe0647ccbaa54cba1e57829b9f0f2 +Author: Panu Matilainen +Date: Tue May 24 20:28:16 2011 +0300 + + Add support for nested Lua macro expansion (RhBug:490740) + - Lift the printbuffer accounting out of rpmlua into a struct of + its own (Funny thing, this looks a whole lot like the macro + expansion buffer and Good Ole StringBuf Brothers ... Boys ... Mam. + Unify them one of these days maybe) + - Replace the simplistic on/off printbuffer with a stack of buffers, + fixup the lone caller to use the new internal push/pop API. + (cherry picked from commit ecfece7ec0d0eb0485745568d10dabc428e92824) + +commit 7e5140537f4d4b6a15f71ca4db5fc80c562c375a +Author: Panu Matilainen +Date: Tue May 24 19:59:36 2011 +0300 + + Plug a memory leak on Lua rpm.expand() + (cherry picked from commit 48b5879931ef2ef3039b22123d6aaad17657618e) + +commit c3ccaea0cb601801775ebbb8fc875b2a4d8e0f5b +Author: Panu Matilainen +Date: Tue May 24 17:23:37 2011 +0300 + + Bail out of debuginfo if stabs format encountered (RhBug:453506) + - The previous "silently ignore" policy produces bogus debuginfo + packages on some architectures and fails with other mysterious + errors on others, better just fail hard until (if ever) somebody adds + stabs support. + (cherry picked from commit fe2167ead95a394d97476baf1a35a4037d3ff202) + +commit 4cea63ce37edc225e01b1f671b6a2c8a90efaa49 +Author: Panu Matilainen +Date: Tue May 24 16:55:31 2011 +0300 + + Fix %prep parse error to abort build + - Previously in some cases parse error in %prep could emit an error msg + but still continue building due to error code bogosity. Clean up + the mess a bit: assume failure and actually return the res(ult) we + calculated instead of nextPart. + (cherry picked from commit fa053f4dd853a2f6e1451539c2d69e3e5c882553) + +commit 5be14b0b38b2fbd6cbc8eb1e3d4aaedf09cf50ac +Author: Panu Matilainen +Date: Tue May 24 14:07:12 2011 +0300 + + Handle HEADERFLAG_SORTED bit correctly in headerUnsort() + - Within rpm there's exactly one caller of headerUnsort() which has + kinda taken care of re-sorting the header on exit, but only if it + returns successfully, meaning the header sort status could've been + left in inconsistent state with implications on consequent + operations on that header. Also this is part of the public API + yet callers have no chance of adjusting the flag when they call it + (and why should they). + - Also dont bother sorting if the header is already in unsorted state. + (cherry picked from commit b5d54b35d4bc2745b73f4b75bdebed36abce7ed1) + +commit d272a9122279a12fda3996a35fa0417ac6ebf6df +Author: Michael Schroeder +Date: Tue May 24 08:51:56 2011 +0300 + + Do not die on empty changelog section + + Signed-off-by: Panu Matilainen + (cherry picked from commit 78a6cf6fbf047c5bf0066df21792e4c9925d04a0) + +commit 0405769a5c1f111bed710f580a487e2b381f403a +Author: Panu Matilainen +Date: Mon May 23 12:32:27 2011 +0300 + + Whoops, flags needs to be sorted for argvSearch() to work correctly + (cherry picked from commit 15dc6ebc307fddb47fea6760fa36384ae47fc3c4) + +commit c667c47eb58d621906dad32a9ffc39d86e9a7b06 +Author: Panu Matilainen +Date: Mon May 23 11:11:43 2011 +0300 + + Unify fileattr include- and exclude-rule handling + - Handling both rule-types identically not only makes things more + consistent but also adds exclude_flags support practically for free: + "exeonly" and "magic_and_path" are usable for excludes too now, ditto + for any other flags that might be added in the future. + (cherry picked from commit c6e81eeff96666a6f4942b2dd97f83beb584a026) + +commit a13580a5952ddd10fa18139f6cf09ab9031792fa +Author: Panu Matilainen +Date: Fri May 20 10:05:02 2011 +0300 + + -D is for --define, not --predefine (RhBug:706161) + (cherry picked from commit 3d657d5cc22652c71bc15a56b6b4462e228526d6) + +commit b61c5589ba1b7329f59f03180f5f05533d9d9e3b +Author: Michael Schroeder +Date: Thu May 19 14:55:55 2011 +0300 + + Support "magic_and_path" flag in fileattrs + - Allow "magic_and_path" flag to configure that files must + match both regexpes to be sent to the dependency generator. + + Signed-off-by: Panu Matilainen + (cherry picked from commit f17e10f870aa9f2bf6b9e2408088dfd6b2372644) + +commit 81a773d9bc47334bd07bebb5fec616521637acfb +Author: Tero Aho +Date: Wed May 18 11:10:09 2011 +0300 + + Plug a minor memleak on writeRPM() error paths + + Signed-off-by: Panu Matilainen + (cherry picked from commit fc56d98f5d640295ff031ea1dcb368e2e3eaeece) + +commit 43b2e6f5f8322f0e389ab09cc755081d73c0f79d +Author: Michael Schroeder +Date: Wed May 18 09:04:40 2011 +0300 + + Always copy macro source when expanding it + - A macro can undefine itself, and unless we grab a copy of it we'll + end up accessing already freed memory. Fixes a regression from + commit ebc4ceaaeb8bb59019f4635471b28eb5f3eaaaa6 which assumed + a copy is not always needed. + + Signed-off-by: Panu Matilainen + (cherry picked from commit f4c79584d01c6394544c86c122d2f32f77a1d02d) + +commit 4d547e1415d4bb109e098ee90ac25533e49e692a +Author: Panu Matilainen +Date: Wed May 18 08:28:07 2011 +0300 + + Empty transaction is not an error (RhBug:699929) + - Empty transaction just means we have nothing at all to do, + but it's not an actual error. + (cherry picked from commit 4f3aa7327083005ebc4fce90e517fc57cce5af3d) + +commit 0f77a1c9036f2fdd1991fbbbc99e3f8ad6eabda4 +Author: Michael Schroeder +Date: Tue May 17 15:46:54 2011 +0300 + + Do not abort if chown/chmod fails but the file is already correct + - This small patch makes rpm not abort the installation if + chown()/chmod() failed but the files already have the correct + ownership/mode. It also allows a failed mtime update on directories. + + Signed-off-by: Panu Matilainen + (cherry picked from commit 09d554da62ce84823849138a55a2ba0e72dd17f0) + +commit 6765b6e2ab6b8be1f3b85ea2d561219e43f42d15 +Author: Michael Schroeder +Date: Mon May 16 11:57:44 2011 +0300 + + Fix segfault on build with empty %prep section + + Signed-off-by: Panu Matilainen + (cherry picked from commit 39800e901e2258685d1fc34e1e9a7b8a058e11ce) + +commit 5278c944fbafefe8d3d230f1b5ab0b3d7db1a940 +Author: Michael Schroeder +Date: Fri May 13 15:33:55 2011 +0300 + + Fix "method not permitted before handle's open method" on --verifydb + - In verify mode, the db is not really opened, thus it's an error + to call dbiFlags() which calls db->get_open_flags(). + + Signed-off-by: Panu Matilainen + (cherry picked from commit 4357fa98c92f123320421dba80dcd10379e98475) + +commit 1dd187a900bb6d0ca92b9f96577461da8c891536 +Author: Ville Skyttä +Date: Sun Apr 24 15:57:23 2011 +0300 + + Add lrzip support. + + Signed-off-by: Panu Matilainen + (cherry picked from commit e254f9b9d4869ea9ee783d3c68a3d2e293e63345) + +commit c039ce21c1eca0b8c0b090e3344cc778002035bd +Author: Ville Skyttä +Date: Sun Apr 24 15:56:11 2011 +0300 + + Add lzip support. + + Signed-off-by: Panu Matilainen + (cherry picked from commit bcad08867d9c9550d80f9ca8ba42c4e27d3c493b) + +commit 2b88e2b550088ade2026690974a4dc5a454a6e48 +Author: Jindrich Novy +Date: Wed Apr 27 10:28:43 2011 +0200 + + Fix find-lang so that it finds *@*.qm QT i18n files (RhBug:699945) + (cherry picked from commit b19a896ecd1ae45835bf2a74ed376de935c6486d) + +commit 0c474b79685470411e219223f152b450d4ac91fb +Author: Jindrich Novy +Date: Tue Apr 26 06:33:19 2011 +0200 + + Understand 'PK00' zip archives (RhBug:699529) + - it is historically used by PKZIP when storing archive to removable + media (floppy), some java apps still use it + - thanks to Karel Klic + (cherry picked from commit 7b352a1de27ff11d4439ab9efdbb9d6074885353) + +commit bc2b886832a25b2d620190633d1d521bb9bcfff7 +Author: Panu Matilainen +Date: Thu Apr 21 11:09:28 2011 +0300 + + Handle errors from moving target file into place in rpmSign() + - Signing isn't successful unless we manage to replace the original + file with the signed one, take the stat() etc returns into count. + (cherry picked from commit eada0e3e47b80da2dec8c11fefb5ad16e4d6faaa) + +commit 259401cf879481bf69713d44db9a67e247bde846 +Author: Panu Matilainen +Date: Thu Apr 21 10:55:00 2011 +0300 + + headerPut() and headerDel() returns aren't interesting here + (cherry picked from commit e393393ff71e5d0a6dc1c4d316558e8396caf287) + +commit 47c4e4a0756635e62f2ce8f7fac5659c0961e5d0 +Author: Panu Matilainen +Date: Thu Apr 21 10:47:31 2011 +0300 + + Remove redundant indentation block from rpmSign() + - No code changes, just formatting sanity/prettiness + (cherry picked from commit c798aed743b4df9569475520ad0821d555b35c82) + +commit 061d48a11fe0bc78572d1a90f89bf34c0686c9ed +Author: Panu Matilainen +Date: Tue Apr 19 13:21:36 2011 +0300 + + Give at least some indication of error from fchdir() failures + - Failure to return to current dir is likely to be lethal, at least + log an error and return a different code for it. + (cherry picked from commit 7ea4fcd87f9f313099f983380e9ece93149a0271) + +commit 4fc59a2e163eb761fcc1abf423e403f3f83f74c9 +Author: Panu Matilainen +Date: Tue Apr 19 12:59:07 2011 +0300 + + Catch write errors when generating scriptlet temporary files + - If the write fails scripts are likely to fail anyway, but executing + partial scriptlets (unlikely as that might be) could have funny + side-effects besides just failing. + - Also cleans up runExtScript() a little bit by moving the + tmp file creation to a separate function. + (cherry picked from commit 6f75f9e7640e2ef08ae65c9038fcedad2c96ae72) + +commit 68a5b062a9342c47a294ac8e55be9263b6a801e2 +Author: Panu Matilainen +Date: Tue Apr 19 10:32:31 2011 +0300 + + Actually handle headerGet() / pgpPrtPkts() failure on signature verify + - Failure to decode the hash algo here would probably trip up something + later on in the verification but... + (cherry picked from commit 643626a32e045b44b8a9a863f889f714af408cd9) + +commit 453959e04a72c1fd4202a896257cc4bdc463406d +Author: Panu Matilainen +Date: Mon Apr 18 12:25:43 2011 +0300 + + Reflect file classifier errors in rpmdeps exit code + - rpmfcClassify() or rpmfcApply() failing is pretty fatal to rpmdeps, + exit with error code + - OTOH argvAdd() and argvSort() can't really fail, ignore their return + codes, shutting up another set-but-not-used whine + (cherry picked from commit f6579c0ac3af9d3f4ccdb087a671e06c85efd705) + +commit 1f13d74619cf8bcf095fbfa9a83926d045aeb2db +Author: Panu Matilainen +Date: Fri Apr 15 10:35:34 2011 +0300 + + Remember to free db index iterators too on forced termination + (cherry picked from commit ac524256f7d3f745a5c441e742ed93bc2c8047ef) + +commit b05a5c94537a3f4134b98699407236dc76ff7b4c +Author: Panu Matilainen +Date: Fri Apr 15 10:11:41 2011 +0300 + + Fix dangling databases from iterators (ticket #820) + - Call rpmdbClose() instead of rpmdbUnlink() on iterator free to + actually close the db when refcount goes to zero. This + fixes the situation where a caller closes a database handle + while iterators are active: the iterators stay usable and close + the db when the last one exits. + (cherry picked from commit 3544062a6ed8f165eb773766ed5540b96f1bcc03) + +commit e149d100d98bf2a73137f03bded382c81e084874 +Author: Ville Skyttä +Date: Tue Mar 1 17:23:17 2011 +0200 + + Honor $TMPDIR in various scripts. + + Signed-off-by: Panu Matilainen + (cherry picked from commit 6331fec6e4be0c96517d37cbfbf8f2b1b2a8ad24) + +commit c0279821391498f1d5bbf4ec290f64887f19be34 +Author: Panu Matilainen +Date: Tue Apr 5 17:33:12 2011 +0300 + + Dont reference transaction set from transaction elements + - Elements referencing ts prevents rpmtsFree() from freeing anything + unless the caller does rpmtsEmpty() first. Oops. Undo the braindamage + from commit 8f7c2d7063df6d1057425d014ce4168d46c5e7d9. + (cherry picked from commit 077d2c850cf0a719d7abacc3256168d60a4ec7bb) + +commit b1126d8398b30d531b7813e264ab17d30572a941 +Author: Panu Matilainen +Date: Fri Apr 1 08:17:21 2011 +0300 + + Add a more useful example to rpm2cpio manpage + - Based on suggestions from Masatake Yamato and others from rpm-list + (cherry picked from commit e11575180fb7af43211747aa0c855f131de255e9) + +commit c896bdd6cce458635ddaca14f97734628ac7bc61 +Author: Panu Matilainen +Date: Mon Mar 28 12:47:34 2011 +0300 + + Use pkg-config to find Lua + determine flags (ticket #88) + - Additionally clean up the logic a bit and dont bother building + any lua-related bits if disabled + (cherry picked from commit f825911b73db44d1b2455a0495d2450dd0865402) + +commit 409a5985526c638528cca1a925e8dab4a1a6499c +Author: Panu Matilainen +Date: Tue Mar 22 08:36:35 2011 +0200 + + Fix classification of ELF binaries with sticky bit (RhBug:689182) + (cherry picked from commit 6eba5dc468aa2d26ff80f9321e8d4d014279d506) + +commit dd89230b380cc8caa6f10cbd6fa277b3cc5bbf2a +Author: Panu Matilainen +Date: Thu Mar 17 15:49:57 2011 +0200 + + Fix a small memleak in rpmsign tool + (cherry picked from commit f974288ea14d71bfa38c415745b723190c2aee15) + +commit 0fa36cd7d31c974e267af147f41857ec1c72e0f9 +Author: Panu Matilainen +Date: Thu Mar 17 15:35:42 2011 +0200 + + Plug memory leaks on macro definition error cases + (cherry picked from commit 1817ac020ea58f03b038cf1bdca001d9683e2604) + +commit 1647404d70dee2244b3a8d0f5758ead8929da193 +Author: Panu Matilainen +Date: Thu Mar 17 13:24:47 2011 +0200 + + Missing va_end() call + (cherry picked from commit 5caa0a5191923602e4f4942a01daf6832ee0bb46) + +commit ccd7e9a0697601a5b181b6e94a1baf35ff2868ef +Author: Jindrich Novy +Date: Wed Mar 16 15:07:55 2011 +0100 + + Avoid freeing an unallocated variable (RhBug:688091) + (cherry picked from commit 88a3950fd8ccee544b23d0eb15d2f1a9faa1d2a3) + +commit 951b051b79efa371a761e11693e0ad57920d3ddf +Author: Panu Matilainen +Date: Fri Mar 11 14:24:38 2011 +0200 + + Update librpm doxygen module list + - rpmgi is gone, rpmprob is a "new" item + (cherry picked from commit 01fc1efc3ce2e806acf02814313d3535de7908b9) + +commit 8773e4ab354a95283f08fd5e53a1defe762ac969 +Author: Florian Festi +Date: Mon Mar 7 20:53:15 2011 +0100 + + Fix whitespace in Python doc string + (cherry picked from commit e6d66aab71b0f9345a6ad49e6b522ac788fd6f28) + +commit 7c45192127954edf39aef7ee1065aeb6b70eded1 +Author: Panu Matilainen +Date: Wed Mar 9 16:13:34 2011 +0200 + + Fix the PyBytes vs PyString compatibility defines + - Oops. Quite obviously nobody has even tried to build this with + python < 2.6. Whether it'd actually work is another question... + (cherry picked from commit ba38b2551f51538885df60b849906de005fb78ed) + +commit 8d355444ea2f8b56edab7eca8f1afddfeaa42545 +Author: Panu Matilainen +Date: Wed Mar 9 16:08:59 2011 +0200 + + Python 3 fixups + - PyString is gone, use PyBytes instead + - Add compatibility defines to paper over + PyInt/PyLong_JustHowLongFunctionNamesYouCanComeUpWith() + (cherry picked from commit cb61d8a89c70c1771947c10984eeab2141133bd4) + +commit 93718c2e2ca808ab340162d47905056d03d58752 +Author: Panu Matilainen +Date: Wed Mar 9 10:25:29 2011 +0200 + + Verify some properties of replaced and wrong-colored files (RhBug:528383) + - We can't verify any properties of replaced files, but we can and + should still see if it exists at all. + - Files skipped due to wrong color are supposed to share some of + the attributes with the file that got actually installed, such + as permissions and whether it exists at all. Verify what we can + instead of silently ignoring. + (cherry picked from commit ee0ae58b442c5f79967a0d0580144b5c84e0c888) + +commit bf6e61c15360b01168d4f986ab962b881dc1fbe6 +Author: Panu Matilainen +Date: Wed Mar 9 09:39:32 2011 +0200 + + Take file state into account for file dependencies + - Files which are not installed, have been replaced or are of wrong + color can not actually satisfy a dependency despite what the package's + file list says. + - This prevents breaking the system despite seemingly correct dependencies + in some situations, such as on multilib systems where a colored + files can appear to be shared between primary and secondary architecture + packages, but only the file from primary arch package is physically + present, and removing the primary arch package would remove the + file and silently break any dependencies on such files in practise. + Similarly replaced files become owned by the replacing package in + practise, so the original package whose files were replaced can no + longer satisfy dependency on those files. + (cherry picked from commit 566a15c9c08aa593d05e2f55f1c171a48bc1b1bc) + +commit c7bb169820839683acdee0444e33fbc012886675 +Author: Panu Matilainen +Date: Tue Mar 8 16:20:20 2011 +0200 + + Improve the dependency loop debug message a bit + - Fix one-off in the SCC numbering + - Fix wording to talk about number of external dependencies, not packages + - Show number of members in the SCC + (cherry picked from commit fa7b4dbb4eee39ca9cc06b22438efd41e243e72c) + +commit 14e53cac69f650b983913b4a249d00261b3a789f +Author: Panu Matilainen +Date: Tue Mar 8 13:28:32 2011 +0200 + + Preferred color pkgs should be erased last + - On install we need to queue preferred colored pkgs before others + to account for the way colored files get laid on disk. On erase, + we need to revert this for the same reason. Most of the time + dependencies take care of this, but the queue placement matters in + cases such as RhBug:680261 where the order is not dependency-driven. + (cherry picked from commit 4a16d55f1f689ab06e8dd45c50b86e478a732367) + +commit 9b734b6d11eed4972e35c2048dc50fd5895ed408 +Author: Panu Matilainen +Date: Fri Mar 4 18:34:01 2011 +0200 + + Make peace with autoconf-2.68 + (cherry picked from commit 584b9d4f5a5def7af56ba81899b23178cae0a913) + +commit 06c245bb1cd7fd8407447f49ae482226cec6d039 +Author: Panu Matilainen +Date: Fri Mar 4 14:33:35 2011 +0200 + + Throw an exception from Fseek() errors in python rpmfd.seek() + (cherry picked from commit d69ebf18f100193305c5a49c7ac5c26978db67d2) + +commit 3c00cb4b3a6f6926d5c36ea34215d98b81c5fb6a +Author: Panu Matilainen +Date: Wed Mar 2 08:47:11 2011 +0200 + + Preparing for 4.9.0 + +commit e139225bff795be45f991f3f37c39b8eed745bb1 +Author: Tero Aho +Date: Wed Mar 2 08:43:46 2011 +0200 + + Fix uninitialized variable in fsm + + Signed-off-by: Panu Matilainen + (cherry picked from commit 04422e4ca85e1748e97cd7d49cad5e9c03f9e05f) + +commit 55548ed0237d5666bd7b3a60cfda816f007f11a1 +Author: Panu Matilainen +Date: Wed Mar 2 08:28:35 2011 +0200 + + Silence error callback during from BDB during environment open + - EACCES from actually opening the environment is returned only + through dbenv->open() return code, but annoyingly the EACCESS + from trying to create a missing environment is "leaked" to the + errcall, causing pesky "permission denied" errors for regular users + if the environment doesn't (yet) exist. Enable errcall in time + for dbenv->failchk() though to get all the details if something + goes wrong there. + (cherry picked from commit cc85e646585be90d3b06c8de941d7e190e8fd538) + +commit fedae8906f27060acf1b6c51dbdd341dfd595c27 +Author: Ville Skyttä +Date: Fri Feb 18 22:12:43 2011 +0200 + + Mention %bcond_with* in conditional build doc. + (cherry picked from commit e967964811994f1386542d386de114ff7837c87a) + +commit f94550382b1dcd85749c480dee0aaa3d8b67875e +Author: Ville Skyttä +Date: Tue Feb 22 22:07:18 2011 +0200 + + Man page syntax fixes. + (cherry picked from commit f1c550f81dbad9312a51e2629dd5e14513d41dfb) + +commit 47737ce20e670720c202f2f6bf54133fa588426d +Author: Ville Skyttä +Date: Fri Feb 18 22:22:07 2011 +0200 + + Documentation spelling fixes. + (cherry picked from commit 39627fa167815997dea3ca418f8e2ac377456665) + +commit 7cf30c4e2b59e0179ecebdde247fb55a313ee10b +Author: Panu Matilainen +Date: Mon Feb 21 10:55:02 2011 +0200 + + Fix db cursor double-open, causing yum to hang on reinstall (RhBug:678644) + - A refactoring error in commit 475391dc581bf5ba72b6d59d16d875505b45bd51 + causes us to open a double cursor on the Package db. This doesn't + seem to affect much in rpm context, but Yum is being naughty and holding + two different handles to the same db simultaneously, which causes + to deadlock on trying to lock the same record twice from two different + handles .. or something to that effect. + (cherry picked from commit 4f7fe5e668e9cd8ba62e700f6f3fdaf2256306d8) + +commit e195a85ea4a6153d0851653e02fa70aff1bbb651 +Author: Panu Matilainen +Date: Mon Feb 21 08:47:52 2011 +0200 + + Fix braindamage in the depgen helper collector loop (RhBug:675002) + - Read any remaining data before exiting on SIGCHLD + - Only perform one read() per loop, otherwise it could block + - Handle EINTR while read()'ing + (cherry picked from commit 771993d1fc6db95ae92ebe0200f7003554ea32da) + +commit a89e10461a2503ca329225bbf6c71ae9e19313e3 +Author: Panu Matilainen +Date: Sun Feb 20 22:33:47 2011 +0200 + + Allow both string + unicode in python addInstall() / addErase() + (cherry picked from commit 7786995cd1e539ac410aec1cd32fb99becc92deb) + +commit 9ce91d2e08aff32f460846075fe356b302867260 +Author: Panu Matilainen +Date: Tue Feb 15 15:12:47 2011 +0200 + + Preparing for 4.9.0-rc1 + +commit f4573558e612f480f9e598f214cc41d2aaccde98 +Author: Panu Matilainen +Date: Tue Feb 15 15:07:02 2011 +0200 + + Allow installation of self-conflicting packages (ticket #806, RhBug:651951) + - Besides fixing the stupid situation where we happily create package(s) + that can under no circumstances be installed, this makes it possible + to create "singleton" packages which can be useful in some cases, eg + http://lists.rpm.org/pipermail/rpm-maint/2010-April/002719.html + (cherry picked from commit b9f5062c227f4a8feff83c0ee1cde2929da7cd3e) + +commit c7fcfff3343f47f2ca2695b66e3927bd566f9eee +Author: Michael Schroeder +Date: Tue Feb 15 14:55:55 2011 +0200 + + Fix corner-case behavior on dependency matching when release not present + - The idea behind the patch is that a missing release is handled + as "all/any release". Nothing changes for "foo < 1.2" or + "foo > 1.2", it still just compares the version. But "foo = 1.2" + means "everything with version 1.2". Thus, any match against + a package with version "1.2" a any non-empty release must + return true. + - Update test-suite expectations to the new behavior. + + Signed-off-by: Panu Matilainen + (cherry picked from commit 82347dc881c68107dd81e1789761e7514b429000) + +commit 96f40d26a9380d054b92d30d6b1f52670b3dd83d +Author: Michael Schroeder +Date: Tue Feb 15 14:39:29 2011 +0200 + + Allow uncompressed payload in packages + - An example of a package where uncompressed payload is useful is + out "installation-images" package. It's a meta package that is + not shipped to customers, but used for image creation purposes. + Compression just slows down the build process. + + Signed-off-by: Panu Matilainen + (cherry picked from commit 81acadbf1f55d128d733b5d9552276b4679ac682) + +commit 893d8f90fe64fae87b370b9fd646238524d154b9 +Author: Panu Matilainen +Date: Tue Feb 15 13:49:44 2011 +0200 + + Import the C-level ts python object as TransactionSetCore + - The previous _rpmts name suggests its some scary internal stuff + that shouldn't be used when that's not the case, it's just a + lower level interface to the same thing. + (cherry picked from commit 83f3b79ccaea675bd19d55eae711d5e1c8c4da7d) + +commit c464e1ede2a47d2f0156eb9171302404a7e660db +Author: Ville Skyttä +Date: Sat Feb 12 12:24:50 2011 +0200 + + Avoid emitting empty perl() module deps. + + Test case from DOM.pm (perl-CSS-DOM 0.13): + + use # to keep CPANTS happy :-) + strict; + use # same here + warnings; + + Signed-off-by: Panu Matilainen + (cherry picked from commit d3475ef4682e70e0d0e6fee1c42ac0e763fecd48) + +commit b2d28eba310b1033dff94f21e6d2715ffecb7849 +Author: Panu Matilainen +Date: Mon Feb 7 12:28:30 2011 +0200 + + Callback argument mismatch from previous commit, meh + (cherry picked from commit 8a6b6a86d9488fb53b9cbb40d75544add0093920) + +commit eece4d41cc2d8f80ec1a28d39aa823240edbd369 +Author: Panu Matilainen +Date: Mon Feb 7 10:43:03 2011 +0200 + + Add + use a db error callback function + - Commit 7309f7498134f7b62f27624a4cdb91e1c6b82578 caused loss of + some BDB error messages due misreading the docs: we used to explicitly + set errfile to stderr through some hoops, and errcall to what + always was NULL. But calling set_errcall() disables any output to + the db errfile, and since we're no longer calling errfile... + - Removing the set_errcall() would restore output on stderr, but + making it go through rpmlog() seems more consistent and lets + API users catch it through rpmlog callback (in theory at least) + (cherry picked from commit ece9fbf5be8d93d28dbb114832a531dde03cfed2) + +commit 0c5768aa45fa2d1f37288cba0f33ea7ee89043d5 +Author: Panu Matilainen +Date: Mon Feb 7 09:15:29 2011 +0200 + + Fix segfault when building more than one rpm (RhBug:675565) + - Remember to set the static string cache pointer to NULL on free, duh + (cherry picked from commit ec031020eb7ed9a0cc3d086bcd7ae7611eb308fc) + +commit a3c35647f7463c325f25ca81b27b1f1e3c3283e2 +Author: Panu Matilainen +Date: Sun Feb 6 09:57:03 2011 +0200 + + Adjust OCaml detection rule for libmagic 5.04 -> 5.05 string change + (cherry picked from commit 9fa3a6c99d93c0eb9659f38a10eb43a0265cce4f) + +commit 500b57d265b993385b4044f61bda603e6db6c681 +Author: Panu Matilainen +Date: Mon Jan 31 13:01:26 2011 +0200 + + Mark the identical signature warning as translatable + (cherry picked from commit 96e160d408d28db226ea57370e909484e1e2612f) + +commit e8c2f3e2a18919f8340882aff62b621892deba66 +Author: Panu Matilainen +Date: Mon Jan 31 10:14:57 2011 +0200 + + Argh, yet more mono dependency generation braindamage + - Unlike some other scripts, mono-find-foo do not have .sh suffix, meh + (cherry picked from commit e9cc4c0ba7be8d1c1551e221b593dd3767023405) + +commit 63a319574547cafa1fa4d9b43527967008fd5b0b +Author: Panu Matilainen +Date: Mon Jan 31 09:21:32 2011 +0200 + + Eww, mono rules both buggy AND missing from tarballs, doh. + (cherry picked from commit f0f5cb712773db06cedd34916519a4f097880bbd) + +commit ca9b20000712d99f78d7bd4908a4dd16021a76ba +Author: Ville Skyttä +Date: Sun Jan 23 22:35:24 2011 +0200 + + Comment spelling fix. + + Signed-off-by: Panu Matilainen + (cherry picked from commit 8125ca5b5dc89965a60740bf67448ad9ae3ad25c) + +commit 431afe5167675a89682eb7e07baa3a627ceb8770 +Author: Panu Matilainen +Date: Fri Jan 28 13:15:09 2011 +0200 + + Add an error message + comments on open(".") behavior (RhBug:672576) + - Bail out early and complain if current directory can't be open()'ed, + as we'll need it for reliable cwd restoration after running Lua + scripts. + - Technically we'd only need open(".") succeeding for chroot operations + and running Lua-scripts, but there's no easy way to determine whether + a transaction will run Lua-scripts. They could be in-db triggers + which will only be evaluated in the middle of transaction, better + to fail early for consistent behavior. + (cherry picked from commit fbdfe8e5bf1ef7044de7a14cff9205c4d845f90b) + +commit 7acaf8a2c1ab503cbf410ceabb81e1487b479a15 +Author: Panu Matilainen +Date: Tue Jan 25 15:27:28 2011 +0200 + + Teach rpm about post-transaction dependencies + - %posttrans dependencies have their own peculiar semantics, they're + install-only dependencies which have no implications on ordering. + (cherry picked from commit d7e2a04d68dea4d1c7dbaf457b5b4210dfa452f2) + +commit 0ee494ea672b9125171098184c702ccc3dd0163e +Author: Panu Matilainen +Date: Fri Jan 21 15:20:01 2011 +0200 + + Don't try to remove existing environment when using private environment + (cherry picked from commit 88e63b050cfd3ba28cb44e75b3ac31fdf5fe9909) + +commit 1575990ed20e3dc6d46adb8ca82d2a722a3424a0 +Author: Panu Matilainen +Date: Fri Jan 21 14:02:28 2011 +0200 + + Plug potential division by zero in the rpmdb size calculation (RhBug:671056) + - This smells like treating the symptom instead of the disease, add + a reminder comment to figure out what's going on here... + (cherry picked from commit bd96c179b79fce627403804ad6c236c783aca478) + +commit c4f98ab30a917266caf536a86b1a08f845e3c717 +Author: Panu Matilainen +Date: Fri Jan 21 13:52:17 2011 +0200 + + Fix rpmdb index match iteration termination with NULL keyp (#671149) + - When iterating secondary indexes with NULL keyp, the last entry + was being returned twice as dbiAppendSet() would get called + even when dbiGet() returned non-zero. + (cherry picked from commit a3ec6066af23e0c9e0de6160c14cb2a502e8fa89) + +commit aa5f93d7356f6c99a53a755b0be895b86e86bb1c +Author: Panu Matilainen +Date: Fri Jan 21 13:43:12 2011 +0200 + + Avoid automatic index generation on db rebuild + - The rebuild walks through it all anyway, calling buildIndexes() + while in middle of db rebuild ends up in first header added + twice to indexes + (cherry picked from commit 5ddb36d2739653ebe50dc39176a9ca43d0555676) + +commit 78326ec5c22fe6f05eb0e4533137556e796311c8 +Author: Panu Matilainen +Date: Fri Jan 21 13:41:02 2011 +0200 + + Fix python documentation wrt dbIndex() + (cherry picked from commit 87e1bad90467668142f6a1ed03e610c9288212fb) + +commit 92b2026a2d52f73dffa386bab3444d4912ed1f4a +Author: Panu Matilainen +Date: Fri Jan 21 09:57:36 2011 +0200 + + Restore default SIGPIPE handling for build scriptlets (RhBug:651463) + (cherry picked from commit 6977e095566761bb50651119a17ea41f7de7b6ad) + +commit f1f7b59dab0c09402790daa04441fac435f52e26 +Author: Panu Matilainen +Date: Fri Jan 21 09:32:58 2011 +0200 + + Permit queries from rpmdb on read-only media (RhBug:671200) + (cherry picked from commit a429c99e13fbe9926243f29b78df8d64222c4469) + +commit fb7cefb1aa248aa1aecbd5e9ef6b3fa7e0e5b167 +Author: Panu Matilainen +Date: Thu Jan 13 15:33:29 2011 +0200 + + Preparing for 4.9.0-beta1 + +commit d7aa92aff262d2ff90ff76c2657d20abfd4c125d +Author: Panu Matilainen +Date: Thu Jan 13 10:14:25 2011 +0200 + + Add switch to allow printing only soname dependencies to elfdeps helper + (cherry picked from commit fe68483d1b341416f28caa894d8392681d827868) + +commit 47631cf7ae87e91d5e9c7f423ce001130a45cb4d +Author: Panu Matilainen +Date: Mon Jan 10 14:09:57 2011 +0200 + + Fix rpmsign --key-id popt alias typo + (cherry picked from commit 9f3a0debb686485312d184d7a8c8aad49978629f) + +commit 72a1c812502bcb3d629f55ddbd16c7163ce7b743 +Author: Panu Matilainen +Date: Fri Jan 7 12:06:37 2011 +0200 + + Honor --root in rpmkeys too + (cherry picked from commit b4f4e2255f3bf5a9c738f6d9d67f477f208fe04b) + +commit ea9cce1778fc6c54f7d9601149c292689b39ea7e +Author: Panu Matilainen +Date: Wed Jan 5 15:22:00 2011 +0200 + + Hide --verifydb switch again + - It got exposed in the rpmdb tool splitup, but the functionality in + it's current form is still just as dubious as it always was, hide + it out of sight again. + (cherry picked from commit 599094e258fc69d76ef9291355850a10508acb3a) + +commit e21bd06e7581db2397cd5cac2b7dea017afff930 +Author: Panu Matilainen +Date: Wed Jan 5 13:26:11 2011 +0200 + + Tweak up BDB flags to avoid breakage from --verifydb + - db->verify() has semantics unlike anything else in BDB and does + strange things to a shared environment (causes persistent ENOMEM + failures in the environment after a couple of attemps). Use a private + environment and no CDB when verifying. + - The whole --verifydb is rather useless, perhaps the better option + would be deleting the lot... + (cherry picked from commit 5c4135654f9d35772bea8a51c98c8020a3d20396) + +commit 867d25f3dd8c034f955dce2fa7a7455f4084b228 +Author: Panu Matilainen +Date: Wed Jan 5 10:05:33 2011 +0200 + + A largish man-page update + - Remove rpmquery and rpmverify manuals for now, the functionality + didn't get split to separate binaries afterall and the manpages + were in a rather bad shape afterall. + - Add some missing options, remove no longer existing options + - Remove rpmdb, rpmkeys, rpmsign and rpmspec related switches from + man rpm manual, add them to the "see also"-section instead + - Adjust database file list on main rpm manual, remove it from rpmbuild man. + (cherry picked from commit c6d98322f1d30ca8028efb63bfde24b554abfda1) + +commit f65a10a2b49304fab8f4e0839ccd486cc627bfa0 +Author: Panu Matilainen +Date: Mon Jan 3 15:49:50 2011 +0200 + + Bump up default BDB cache- and allowed mmap size considerably + - The former defaults come from nearly a decade ago, things have + changed a bit since then... Even BDB's own default cache size is + much larger (8MB) now than what we've been setting. + - Using 64MB cache improves cache hit rate (and performance) massively. + Last-gasp default to roughly BDB's own current defaults, higher + settings in the default macro setup. + (cherry picked from commit 6b6310b152475793a1272d8829a9df89a6edaee6) + +commit fe3e41d45243fcc572b2cca0803433f0621a38d9 +Author: Panu Matilainen +Date: Thu Dec 23 09:24:25 2010 +0200 + + Require %files section for package generation again + - Turns out this change does more harm than good, people are actually + relying on this behavior to avoid zillion conditionals in the spec. + We'll want a saner way to conditionally disable/enable packages + but until we have that, revert to the former longstanding behavior. + - This effectively reverts commit d010ec1c9026b35f5b2521be965c03c826894ce8 + (cherry picked from commit b76fa1a7fdf738ccd45dd70a5489d5110a6d5534) + +commit 425b813fa93c893227a9a359a8104038a2cb62d3 +Author: Panu Matilainen +Date: Wed Dec 22 14:58:11 2010 +0200 + + Only sepolicy-plugin needs linking to libsemanage + (cherry picked from commit 454859f3cbe6f59cbf6d5905fe469d3bf64adf4a) + +commit bb09469424f80f7f40631f264c6aa88659da6a09 +Author: Panu Matilainen +Date: Wed Dec 22 13:11:40 2010 +0200 + + Make rpmplugins.h private for now + - We'll probably want to make some changes to the plugin type system + before considered "ready", the current plugin slots are limited + to 32 and Meego folks apparently want to use a largish number + of slots. So we might want something like separate plugin type + (collection, security... etc) and then have 32 slots per each type. + Making this private for now to avoid having to potentially break + the API shortly after introduction. + (cherry picked from commit d10b40301188f1b00cbdaf49b1c09786d546ede0) + +commit 092cf8049703aa20438d7aeb889ef11db79299dd +Author: Panu Matilainen +Date: Tue Dec 21 11:52:28 2010 +0200 + + Update translations to kick out removed messages etc + +commit 3442199629a843274c3803057fd303143bee3057 +Author: Panu Matilainen +Date: Tue Dec 21 11:01:22 2010 +0200 + + Move rpmtsSELabelFoo() functions to an internal-only header + - The sepolicy plugin needs them so the symbols can't be hidden, but + these are not something external API-users should be messing with. + - Ultimately we'll want to push the actual labeling from FSM to + the plugin, insulating rpm from all SELinux specifics, this is + just a band-aid temporary "solution" to keep this out of the API. + (cherry picked from commit 00463e2fe0d115d873f141995e7d8b3041de7d36) + +commit 888c43c63116f344e2b70d3c47e286f2317c9c3c +Author: Panu Matilainen +Date: Mon Dec 20 12:10:21 2010 +0200 + + Free up a bunch of bits from rpmtransFlags_e + - With all this unused junk gone from the bitfield, we suddenly + have plenty of bits to play with... + - Preserving the symbols, just defined to 0, to avoid unnecessarily + breaking compilation of stuff that refers to the old + unused/unimplemented flags + (cherry picked from commit 247c5431776299196cf32e0a3980a4b9516379ea) + +commit 5b2f1c82f58c9761335222f2d0f20c4f67628d20 +Author: Panu Matilainen +Date: Mon Dec 20 11:58:44 2010 +0200 + + Mark two more unused rpmts flags as such + (cherry picked from commit c1d8fc34f9d36b3f47e30489caab848dae1f151a) + +commit 017e91546bed00356d44d5ad997db01b3ffd2bdf +Author: Panu Matilainen +Date: Mon Dec 20 11:50:30 2010 +0200 + + Rip the remains of --aid and --nosuggest, except for the callback + - Only thing ever using RPMTRANS_FLAG_ADDINDEPS and _NOSUGGEST was + rpm itself, and we haven't had an in-rpm implementation for this + since the broken "rpmdb as repo format" was ripped out in 4.6.0. + We dont need these special flags to support the operation anyway, + IF somebody sets the solve callback, it will be used and the one + implementing the callback gets to deal with whether those bits + should be added to transaction or not. + (cherry picked from commit 3b07e36fc430ae15a34a6b4c3249460ddf120c01) + +commit 5a21926bc71ab42297979aedc2aedacd05891a46 +Author: Panu Matilainen +Date: Mon Dec 20 11:38:21 2010 +0200 + + Rip the stillborn, broken apply/commit transaction goo + - This was beginnings of something ten years ago, and that something + was long since abandoned. These never did anything useful + that --justdb/--noscripts wouldn't do. + (cherry picked from commit 89c2fd9f512df1e673a073229914b5371e619ea4) + +commit 01a2e5f206c04cc0a5e12046e4a4f78182e332f9 +Author: Panu Matilainen +Date: Fri Dec 17 11:00:41 2010 +0200 + + Yet another pile of depmatch tests + added commentary + (cherry picked from commit c91e00e81eabe287e6d0786bdc8b0a4f10f19d73) + +commit 771ef00d65c864c420d9fd4c14fc38e008b67877 +Author: Panu Matilainen +Date: Fri Dec 17 09:19:48 2010 +0200 + + Add pile of further dependency match testcases + - Test for provide ranges, versionless dependencies and different names + - Tabify the test-table for readability + editability + (cherry picked from commit 1f037a030a57f23e8305aa509987260644db74d1) + +commit eee3b256d31f48fe00f9891dacb6ff5850fccd2f +Author: Panu Matilainen +Date: Thu Dec 16 17:39:00 2010 +0200 + + Add a pile of dependency matching tests for "obvious" cases + (cherry picked from commit 2c4899c8d7346ae3a9dbd830939fda29efb7a6a6) + +commit 00e9cefcf212d47ef34325d755a7e37de2dc28b8 +Author: Panu Matilainen +Date: Thu Dec 16 17:18:21 2010 +0200 + + Move python test-suite macros to local.at, rename + - We'll want to use these in other test parts than just python. Make + available everywhere and use "namespace" to avoid potential future + clashes. + (cherry picked from commit 8acb7f7c1d8d7e93a04ca214f98660a40ee2b319) + +commit 98b69e4367ff93de7f9652bdc6072ebc6c911973 +Author: Panu Matilainen +Date: Thu Dec 16 14:11:25 2010 +0200 + + Permit comparison operator strings (<, >= etc) in python ds constructor + - Creating ('foo', '>=', '1.2') dependency is much nicer than + or'ing rpm.RPMSENSE_FOO for flags. Allow (but validate) the string + usage, ints get passed as is. + (cherry picked from commit bf37b06d19b769572c06a667b31164d6ed279155) + +commit 56f64bb012b87143d6b28d22198be65b84afbaa6 +Author: Panu Matilainen +Date: Thu Dec 16 09:35:08 2010 +0200 + + Unbreak file user/groupname handling in build + - Fixes regression from commit a2d002a34bc567e8ce88c9ed30270d55d7c904fd, + the librpmbuild "name cache" was used for unique string storage too + and not just user/group-info lookup cache, duh. + - At least for now, making this separation explicit in the code + by separating the "stash this string" operation from the actual + user/group lookups. + (cherry picked from commit 50ab0945c5ddffd354692f8c31616c3575ebbd11) + +commit 180510e4f5c4dddcbc5c041e3db455f04ce22d3e +Author: Panu Matilainen +Date: Thu Dec 16 09:31:20 2010 +0200 + + Add a "unique string cache" to rpmug + - Used for storing unique strings just once + (cherry picked from commit 353a7a81257e2a2a322b211b6ebf11b750ca6e68) + +commit ce2906b0e470b687fb9d951da18c2f1df6e5fc6f +Author: Panu Matilainen +Date: Thu Dec 16 09:28:34 2010 +0200 + + Support GetEntry() for hashes without datatype too + (cherry picked from commit 3296c651b90b1caed216a3c65f024ea741ea13f9) + +commit 9768d5b6b9201b734b235264640240c9ad4b1945 +Author: Panu Matilainen +Date: Wed Dec 15 11:34:50 2010 +0200 + + Eliminate ancient dependency loop whiteout mechanism + - Nobody has been relying on this for ages, and with the new ordering + code since rpm 4.8.x loops are handled much more gracefully than + before. RIP. + (cherry picked from commit 69187d6bb04d36934a7f9f276d90164e842ef54c) + +commit cce3e9fb1a41d8038d7dd5215c8dd6d0089444ed +Author: Panu Matilainen +Date: Wed Dec 15 09:42:03 2010 +0200 + + Remove the now unused user/group caching code + (cherry picked from commit bc457015f6c2c82f84a2ba7e805883944a64f679) + +commit 0b884bda7b6e1375f061e8c36deaad1288458516 +Author: Panu Matilainen +Date: Wed Dec 15 09:30:56 2010 +0200 + + Unify the user+group caching between librpm and librpmbuild + - The build version has getUidS() and getGidS() for which there is + no counterpart in the rpmug api but there's not much point to them: + they check whether the user/groupname exists but return our own + string back to us even if it doesn't. + - The build version also caches more than current rpmug, but has an ugly + hardwired limit causing (in theory) errors that can't be nicely + handled, and is the last piece relying on RPMLOG_CRIT actually + terminating the process. The librpm version doesn't fail, in the + worst case its just a bit slower. And that can be fixed anytime by + making it to use hash tables for caching. + (cherry picked from commit a2d002a34bc567e8ce88c9ed30270d55d7c904fd) + +commit 9c4575ab7a7229c3f2db3719d443732bb6292b26 +Author: Panu Matilainen +Date: Tue Dec 14 11:34:34 2010 +0200 + + Split user+group caching to separate source (again), rename + - We'll want to unify this and the similar caching done in librpmbuild, + so we need to expose these in the ABI at least, rename to get + them namespaced and use a separate source module (again) as + this is a pretty distinct functionality. + - This would really belong to librpmio but leaving here for now... + (cherry picked from commit 2a54555aa2144f56a2ba518c48830c60da78c4d4) + +commit 3a0962edc812d1ed752e3550cad19699adacb00e +Author: Panu Matilainen +Date: Tue Dec 14 12:51:12 2010 +0200 + + Remove hardcoded lock and mail group id's + - Rpm has no business making assumptions about arbitrary group id's, + if these are not available through getgrname() when needed, + that's a packaging problem. + (cherry picked from commit a26848218cfdefd0f8ee538a14a57c9fea4e7b2d) + +commit eb258b731aaa75725aafa30cfb45a9d02c347652 +Author: Panu Matilainen +Date: Mon Dec 13 14:53:35 2010 +0200 + + Cut down the initial db checked hash allocation somewhat + - The instance numbers are often much much bigger than the number + of actual packages, and the hash table grows automatically as needed + so there's no need to over-allocate at the start. Apply some + (fairly arbitrary) heuristics to limit the initial allocation size. + (cherry picked from commit e40a7c61c422e79838226c69cb84f7a624fa6127) + +commit ae9e8743ebc56b795c2497a2fd4ffebf1417f22d +Author: Panu Matilainen +Date: Mon Dec 13 14:23:02 2010 +0200 + + Replace verified header tracking bitfield with a hash table + - No functional changes, but allows getting rid of yet another custom + (re)allocation scheme + ugly bitfield manipulation macros. Also the + header instance numbers can be rather sparse, making hash a natural + fit for the purpose. + (cherry picked from commit 78097d55f446c32911f629d4ce3ef79fe3c5c898) + +commit 69caf6378fdf4a6469431c39cdc9d0a150cf8b6c +Author: Panu Matilainen +Date: Mon Dec 13 12:03:18 2010 +0200 + + Implement transaction ordering hinting + - Add support for new "OrderWithRequires: foo" spec syntax + which has "if and only if foo is present in transaction, order + the transaction as if this package required foo" semantics. + While it looks, and in some ways is, a soft dependency, this + is not the same as recommends/suggests etc: those have unknown + depsolver policy dependent semantics attached to them, whereas + ordering hints have a clear definition and is only relevant for rpm + itself, depsolvers should not even look at the data. + - This allows packages to express correct ordering for optional + functionality, such as + + %post + if [ -x %{_bindir}/register-component ]; then + %{_bindir}/register-component %{name} + fi + + If the package containing %{_bindir}/register-component is included + in the same transaction, it makes sense to have it installed before the + package(s) that use it. But as it is fully optional, Requires would + not be appropriate. Using OrderWithRequires allows this to be expressed + without dragging in extraneous dependencies for optional functionality. + (cherry picked from commit 5c43095e1d78b3befe93c746fd182746c3b96c92) + +commit ebf873317582043c3a83e66a7b58b78bd79d0088 +Author: Panu Matilainen +Date: Fri Dec 10 16:18:15 2010 +0200 + + Implement filtering of autogenerated dependencies + - This allows both excluding entire paths from dependency generation + and also excluding individual generated dependencies by regexes + settable from spec or other configuration. + - %__(provides|requires)_exclude regex controls is matched against + generated dependencies, %__(provides|requires)_exclude_from is + matched against the currently processed path, with buildroot + stripped out. + - We'll probably want some "higher level" macros to go with this, + but the mechanism is usable as-is already. + (cherry picked from commit 185de185262b2772fa692efc69633f41afc5832a) + +commit 3f464f671cf8841244979eeba332fb6348723ab9 +Author: Panu Matilainen +Date: Fri Dec 10 16:12:06 2010 +0200 + + Some further preliminaries for next bits + - Add a helper function for freeing regex pointers + - Move regMatch() to top of rpmfc.c, we'll need it shortly + (cherry picked from commit 27a17ec74a21eb5c8ca44972e15531244881cc07) + +commit bbc889541263669c3d94b7200dc051da9ca86317 +Author: Panu Matilainen +Date: Fri Dec 10 14:14:44 2010 +0200 + + Refactor the helper execution out of rpmfcHelper() + - Split the macro name generation and grabbing of argv-style output + into yet another helper to reduce the clutter in rpmfcHelper() + before adding more stuff in there. + (cherry picked from commit ca3089f8bc4de7e2426b129f998a3c59daeebfd0) + +commit 558c775ecfe5be633aaeb907b1f529dfb445e36f +Author: Panu Matilainen +Date: Fri Dec 10 12:33:46 2010 +0200 + + Rename pattern -> path for, duh, path patterns + - 4.9 alpha used "pattern" but better fix the stupid name now than + have to live with the non-obvious name forever + (cherry picked from commit a9bc1f51ae6bb6e1df0a5de71ac2a27b0932f144) + +commit 177deafe2f7a638759575bac6e22add177b08b3a +Author: Panu Matilainen +Date: Fri Dec 10 11:53:45 2010 +0200 + + Support excluding by path or magic in file classification + - %__foo_exclude_pattern and %__foo_exclude_magic regex'es now allow + excluding attributes that would otherwise match. + (cherry picked from commit f5a657112a8f9a107314dcd02767146e64953abe) + +commit a31c501ecdf86f4c33036bbd841dcacd9c837733 +Author: Panu Matilainen +Date: Fri Dec 10 10:36:45 2010 +0200 + + Remove broken versioned provides rpmlib() tracking + - Every single package since rpm >= 3.0.4 or so has a versioned provide + through the automatically added N = VR provide, which hasn't gotten + tracked in all these years. Drop the useless dependency. + (cherry picked from commit 17445a390a8686de6d1532b03cd4dc8314850dd3) + +commit c83affa7fb7aa75fd56a9199394990937324dd03 +Author: Panu Matilainen +Date: Thu Dec 9 16:32:56 2010 +0200 + + Add beginnings of python bindings test-suite + - Add some basic infrastructure: point PYTHONPATH to the testing + directory, helper macros to allow use of in-line python in test-suite + - Throw in a couple of simple tests for starters + (cherry picked from commit 2a37d9a4dcfd172db9a63584ec2267702153e00b) + +commit 1b66b93045e680cf2121faed4c520205dcb00b47 +Author: Panu Matilainen +Date: Fri Dec 3 15:55:02 2010 +0200 + + Kick out some long since invalid comments + (cherry picked from commit f63e19d2986609193b409fea7a52e5eb41478a48) + +commit 53c83494e555736c0af7bdd3fecc059aab69ffd2 +Author: Panu Matilainen +Date: Fri Dec 3 15:31:01 2010 +0200 + + A bit of sanity checking in rpmtsRebuildDB() + - Don't permit rebuilddb on populated transaction as rebuild can + and usually does change header instance numbering. + (cherry picked from commit 626e78429ff6dd77de77abb9073c3defacdd5726) + +commit ed950990c4fd1ea5c9fffdf8e8874bef2199d6cb +Author: Panu Matilainen +Date: Fri Dec 3 13:59:43 2010 +0200 + + Bump library sonames + - Lots and lots of API changes, including what amounts to + rewriting of librpmbuild external API... The only exception is + librpmsign which is new and starts with 0 + +commit a5c247c549cdce14f863580a8af132720e9e851e +Author: Panu Matilainen +Date: Fri Dec 3 13:38:59 2010 +0200 + + Internalize most direct rpmdb manipulation functions + - Since rpm 4.1 times, callers are supposed to use the rpmtsFooDB() + variants instead of the lower-level rpmdb functions, and mixing + them is not safe. Enforce the use of ts-level versions by making + rpmdbLink(), rpmdbOpen(), rpmdbInit(), rpmdbClose(), + rpmdbSync(), rpmdbVerify() and rpmdbRebuild() internal-only. + - Doing this now to eliminate a few needs for breaking API again + in 4.10 (one can wish, right?) + +commit 0cc5e818a9305e7443dd46252b9d4af6833b733e +Author: Panu Matilainen +Date: Fri Dec 3 12:44:49 2010 +0200 + + Require pkg-config 0.24 for creating pkgconfig() dependencies + - The support for --print-requires|provides was only upstreamed in + pkg-config 0.24, prior to that it relied on distros patching their + pkg-config. Rpm relying on non-upstream stuff is not good... + Now that it's upstream we can make a clean break and simply not + even try to generate the dependencies with anything older. + - The upstreamed version behaves slightly differently from what distros + were patching with, for rpm's purposes we also want + --print-requires-private now. + +commit ccab61193ea6d3e46997f49f0333f93a04b04750 +Author: Panu Matilainen +Date: Wed Dec 1 17:17:01 2010 +0200 + + Update translations to pick up recent changes + +commit 534f512002d0a0d1148cdb225e190da352f60ad7 +Author: Panu Matilainen +Date: Wed Dec 1 17:15:18 2010 +0200 + + Fix bogus error reporting from autogenerated dependencies (ticket #181) + - Automatically generated dependencies do not relate to spec lines, + use different error reporting for manually vs automatically added + dependencies. + +commit 449f6c4bea509c2ce86761974053ca7e5571f980 +Author: Panu Matilainen +Date: Wed Dec 1 11:55:46 2010 +0200 + + Oops, mono dependency extractors need a bunch of arguments + - Regression from the initial conversion to the new system in + commit 8c7e53ec80e84f48bfc67181f3d5dd81ecdb7523 + - The buildroot doesn't need passing as arg anymore but for now, + just keep it compatible + +commit c77f1c6522e4b1fafab9bc0340c7dea40445894d +Author: Panu Matilainen +Date: Wed Dec 1 11:22:32 2010 +0200 + + Make rpmdeps honor RPM_BUILD_ROOT if set + - rpmdeps calls the internal dependency generator as an external + dependency generator (yes its more than a bit wacky), and the + internal generator needs to know the buildroot as path patterns + expect non-buildroot paths for accuracy. + +commit 801a5790d15e46cc88855e23a78d830ea1f157ad +Author: Panu Matilainen +Date: Wed Dec 1 11:18:19 2010 +0200 + + Pass RPM_BUILD_ROOT to helper scripts through environment always + - Many of the scripts need to know the buildroot in order to figure + out correct resulting paths. This permits unifying the current + adhoc methods of passing the data to the scripts. + +commit a66ca57369d355c4555a3d486f0d61185f56b4dc +Author: Panu Matilainen +Date: Wed Dec 1 11:09:02 2010 +0200 + + Remember buildroot directory in rpmfc struct + - New constructor rpmfcCreate() which takes buildroot as an argument, + and "flags" argument for future use. Calculate brlen at initialization + now that we can. + - Preserve rpmfcNew() as a compatibility wrapper as it's something + somebody could, in theory, have used legitimately. + +commit ab68421992b1a9d03685a8288f6bef401335394d +Author: Panu Matilainen +Date: Wed Dec 1 09:31:07 2010 +0200 + + Eliminate unused dir argument to getOutputFrom() + +commit 73dec03ac143e7fc7eba82b2fbb8876f1b5aea2c +Author: Panu Matilainen +Date: Wed Dec 1 09:06:05 2010 +0200 + + Unbreak perl module dependency extraction + - Dumb attribute vs macro name thinko/typo preventing it from working + at all, duh. + - At least for now, revert back to magic based pattern: we dont really + know where all the perl modules might live. OTOH this relies on + the ugly "all .pm files are perl modules for now" hack inside rpmfc.c. + We could of course use a loose /.*\\.pm path rule too for the same + effect and eliminate the hack, but that'd leave strange stuff into + fileclass tags when libmagic fails to detect its actually perl. + Need to figure out something better here... maybe allow overriding + libmagic detected strings from foo.attr or such. + +commit 9173e0f85972849df37dd6b5f3bb38c98730d4dc +Author: Panu Matilainen +Date: Mon Nov 29 15:56:55 2010 +0200 + + Fix long-standing segfault on unknown tags on header iteration queries + - The simple and stupid tag cache was a bit too simple, failing + to deal with unknown tags larger than our own tag table correctly. + Use a hash table instead which is a far better suited for the + sparse tag numbers anyway. + +commit 8c925108fb90ebb0394874adbc1078d213cc40cf +Author: Panu Matilainen +Date: Mon Nov 29 12:28:47 2010 +0200 + + Eliminate dead RPMTAG_INSTALLPREFIX tag extension + - This hasn't been functional since rpm 4.6 at least: the tag is marked + internal so it's not recognized as a valid query tag, and there's + no point supporting this anyway, it was already deprecated backwards + compatibility hack in rpm 2.x in 1998 era. + +commit 4ddd89ce6924d7b6a0988d93d2b6a8cbe9a30a60 +Author: Panu Matilainen +Date: Tue Nov 23 17:52:06 2010 +0200 + + We're already considering mandatory header elsewhere + - ... so might as well do so here too + +commit 1a50e4a30be76c328eb9aee647d98818c53bb519 +Author: Panu Matilainen +Date: Tue Nov 23 17:49:16 2010 +0200 + + Axe the rpmsq debug code which was never getting built anyway + +commit 94ce07d12f9d8ef69c4dfe2a945d633b7266ce4c +Author: Panu Matilainen +Date: Tue Nov 23 17:43:45 2010 +0200 + + Lose all the stillborn code in rpmsq.[ch] + - rpmsqThread(), rpmsqJoin(), rpmsqThreadEqual() and rpmsqExecve() + have never been used... get rid of them while we're bumping sonames + anyway + +commit 7796da46f5a0f36a3d5601cd6c2e44a75869d53b +Author: Panu Matilainen +Date: Tue Nov 23 17:42:57 2010 +0200 + + Oops, missing include in previous commit + +commit 8093218e8ca543c3631a18032b4fff902a845c0d +Author: Panu Matilainen +Date: Tue Nov 23 12:30:38 2010 +0200 + + Permit unicode paths in rpm.fd() (RhBug:654145) + - Python 3 has fs-specific converter function, for Python 2 just + assume utf-8 and hope the best. + +commit 466cd4642ba71c9d836d5e60a606e8330fe81316 +Author: Panu Matilainen +Date: Mon Nov 22 11:40:44 2010 +0200 + + Add bunch of rpmvercmp() algorithm tests to the test-suite + +commit 95a52a37e8e9001b6bbb6950215da0aa7db12d40 +Author: Panu Matilainen +Date: Mon Nov 22 10:36:54 2010 +0200 + + Move the current "version compare" tests to rpm install tests + - These are more about rpm install/upgrade behavior than pure + version comparison, although obviously version comparison is involved + +commit 080007c90f285a57e6ba76c8c5fcd0d516d24ccc +Author: Yuri Chornoivan +Date: Sun Nov 21 14:43:11 2010 +0000 + + l10n: Updated Ukrainian (uk) translation to 100% + + New status: 746 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit e4f3fbfc9433c744e27dbf7727dd335d800ed628 +Author: Piotr DrÄ…g +Date: Fri Nov 19 08:13:59 2010 +0000 + + l10n: Updated Polish (pl) translation to 100% + + New status: 746 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit b6c3aec7ab7c0d3a5312540e03a921c1d7c8c3f1 +Author: Panu Matilainen +Date: Thu Nov 18 13:20:42 2010 +0200 + + Update translations to pick up recent changes + +commit b270b38a70518ecb3f9d5a6ccb691fd619f53196 +Author: Panu Matilainen +Date: Thu Nov 18 12:50:55 2010 +0200 + + Only force default umask during transaction (RhBug:494440) + - For rpm itself forging global umask on init is kinda convenient, but can + be troublesome for API users. This is especially bad in python bindings + where just importing the rpm module silently changes process umask with + no good reason. + - Instead of global setting on init, only change the umask to 022 default + for the duration of rpmtsRun() where it's necessary for consistent + transaction results on implicitly created directories and files created + by scriptlets. This way we dont affect callers and provide better + "protection" for ourselves too - we don't know if API users change + umask again behind our back if we just set it on initialization. + - To make matters more fun, Lua scripts can change our umask. Save + and restore umask when running Lua scriptlets. + +commit 4287e2e6dff59ee9850b974722db3f124d42b384 +Author: Panu Matilainen +Date: Wed Nov 17 16:27:10 2010 +0200 + + Always exit rpmtsRun() via rpmtsFinish() + - Fixes a memory leak from rpmtsSELabelInit() + - Ensures we get out of chroot() on the way out + +commit 3f5c10e9f6eb91bdfb8909c0e5e75a019315ccbf +Author: Panu Matilainen +Date: Wed Nov 17 15:54:38 2010 +0200 + + Plug a minor memory leak in librpmbuild doPatch() + +commit 319a04d74ace9bffc0042e13497b257cfd7a5d46 +Author: Panu Matilainen +Date: Wed Nov 17 15:33:30 2010 +0200 + + Revert rpmquery/rpmverify split, ain't gonna happen this time around + - Dealing with the inevitable fallout and popt-foo needs more time + to handle, revert to the rpm 4.6-4.8 setup where rpmquery and rpmverify + are just symlinks to /bin/rpm, allowing especially query aliases + to work. Releasing an intermediate version where 'rpmquery --requires' + and the like dont work would do nothing but hurt the future intention + of splitting these things up for real. + - This effectively reverts commit 26125015e4321765582dce0b76f83530e7604d4e + +commit c43440f16b83ef53c8f4adff44de70925c19d266 +Author: Panu Matilainen +Date: Wed Nov 17 08:52:18 2010 +0200 + + Yet another round of enum-as-function-argument elimination + - Pass the yes/no magic argument to headerRead(), headerWrite() and + headerSizeof() as int instead of enum. + +commit 1537f7d97efbb04ec1d2a8500bfaaa0c1991cdf4 +Author: Panu Matilainen +Date: Wed Nov 17 08:46:21 2010 +0200 + + Avoid enum as function argument for headerConvert() + - While this /nearly/ qualifies for enum, places like python + argument converting will not be able to produce "true enum" values. + So dont even try. + +commit dc2ee980bc2ace6803a39394e9bc5b7bb8c71a5c +Author: Panu Matilainen +Date: Mon Nov 15 11:06:44 2010 +0200 + + Remove RPMTAG_FILESTATUS tag extension + - This is a bad "API" for verification, it can't be controlled and + causes heavy IO where one would not expect it. Getting rid of it now + before anybody starts relying on it... + - Leaving :fstatus format extension alone however, it's at least harmless + and produces a more predictable output than :vflags extension so it + might be actually useful in scripts. + +commit 5bd382f3a32762cdc1b4ed08753aaba73197d5bc +Author: Panu Matilainen +Date: Mon Nov 15 10:48:33 2010 +0200 + + Remove no longer relevant references to build from arg sanity checks + +commit 90440e20365d95d98f630d0c1015f5426d4a71cd +Author: Panu Matilainen +Date: Mon Nov 15 10:21:23 2010 +0200 + + Remove absolute paths from our popt exec aliases now that we can + - poptExecPath() pointing to meaningful place allows removal of these. + - Make test-suite rely on the --initdb exec alias so we catch out + if anything here breaks + +commit 638fb7ba841441fd6624426997d4a644185f183d +Author: Panu Matilainen +Date: Mon Nov 15 10:18:49 2010 +0200 + + Make our popt exec path more useful, permit environment override + - In 4.4.x days, we used to have bunch of helper binaries in /usr/lib/rpm + executed through popt ping-pong, but there's nothing now that we'd + want to execute through aliases. Instead use bindir for the + default path, and additionally permit overriding through + RPM_POPTEXEC_PATH environment variable (mostly probably useful for + the testsuite) + +commit ac0c2cd71f7e0246eca2388adc79c5bfe2669f98 +Author: Panu Matilainen +Date: Mon Nov 15 10:05:18 2010 +0200 + + Eliminate pointless argument sanity check + - --root is valid for all the remaining modes, no point checking for it + - MODES_FOR_DBPATH is completely unused (and dbpath is a common option + to all anyway) + +commit 2a807909d9fe903f020e2a772126ee8d431c4215 +Author: Panu Matilainen +Date: Mon Nov 15 09:56:57 2010 +0200 + + Hide obsolete --nomd5 switches from help output + - We dont want new users to pick up using these old switches but + preserving functionality for backwards compatibility for now + +commit f8752d2ca3bdaa3162f681b5c6f7973c3e171171 +Author: Panu Matilainen +Date: Mon Nov 15 09:36:17 2010 +0200 + + Basic protection against Lua os.exit() and posix.exec() (ticket #167) + - Track posix.fork() and only allow exit() and exec() if the script + has forked. There are other questionable items in posix extensions + too but these are the worst offenders. + - Using Lua registry for tracking forked status might be more Lua-way + option but this'll do for now. + +commit 3ce48d03062843a68837917064d51ebdff834a4b +Author: Panu Matilainen +Date: Mon Nov 15 09:17:25 2010 +0200 + + Remove unnecessary includes + +commit 0600287d5d9cf1fd36ab5400d92be9c90b676e82 +Author: Panu Matilainen +Date: Mon Nov 15 09:07:10 2010 +0200 + + Rearrange new cli utilities' popt tables for nicer output + - Use a separate table for the tool-specific options, include that from + the "master" option table to get option group summary in --help. + +commit 949d16b6db0ac5498cb2d3715854ee3cee16fd3c +Author: Panu Matilainen +Date: Mon Nov 15 08:55:56 2010 +0200 + + Oops, rpmspec.c missing from POTFILES.in + +commit 60c0eb40f2a0949a7f7065a7f42a9f185b3ca0ac +Author: Panu Matilainen +Date: Fri Nov 12 11:59:17 2010 +0200 + + Get rid of 'rpminstall' binary & manual afterall, flip flop + - It's a bad name for something that can also erase packages, leave + the install/upgrade/erase modes for /bin/rpm instead. + +commit 9c095fa87846bc268142cbaed325098e12e027ea +Author: Panu Matilainen +Date: Thu Nov 11 14:33:01 2010 +0200 + + Remove superfluous dbiSync() call (refactoring thinko or such) + +commit 481caa8cf9c0d623e97b262916f2aae8fd1d7623 +Author: Florian Festi +Date: Wed Nov 10 13:59:53 2010 +0100 + + Switch fsync off while building indexes + +commit 11351f82e95a8ce708a550b9580d0f47d02ab433 +Author: Florian Festi +Date: Wed Nov 10 13:16:10 2010 +0100 + + Fix index auto creation + +commit 3ed0c5b1ede9d5ce5d078a327bfd05d36c3d9393 +Author: Florian Festi +Date: Tue Nov 9 11:59:34 2010 +0100 + + Rename rpm.ii.offsets() to .instances() to match name of mi.instance() + +commit 78e062526c4e161b2cd3048d26bb5698c8b34510 +Author: Guido Grazioli +Date: Wed Nov 10 15:21:02 2010 +0000 + + l10n: Updated Italian (it) translation to 100% + + New status: 741 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 1ba00100204711ed0454746dd294002f97931226 +Author: Panu Matilainen +Date: Wed Nov 10 13:44:02 2010 +0200 + + Don't restore db file atime/mtime after rebuild + - The files are regenerated from scratch, involving header record + numbers moving around, possibly removing broken headers and all. + Don't pretend nothing changed when some changes almost certainly, + occurred, various API users rely on rpmdb mtime for determining + whether the db has changed since they last accessed it. + +commit ad0687bd5726092d822886fdbf8aa55a63b4c4b2 +Author: Panu Matilainen +Date: Tue Nov 9 15:56:12 2010 +0200 + + Kill broken --rebuilddbpath popt alias + - It's been broken because of a typo for the last ten years and nobody + noticed, doesn't seem like a particularly useful switch... + +commit 8507bfc187fe9aa454b4f5e7752aad5ab18f783d +Author: Panu Matilainen +Date: Tue Nov 9 12:04:06 2010 +0200 + + Eliminate silly "I am about to create a directory now" debug logging + +commit 2694a929c4f75ad582915d8dde6e8a0f9e02643a +Author: Panu Matilainen +Date: Tue Nov 9 11:59:17 2010 +0200 + + Simplify the dbpath shuffle in db rebuilds a bit + - We already have the non-prefixed dbpath at hand, use that instead + of recalculating the path from the prefixed version + +commit b3769ec81795dda770c0e682e8981d5b59aebbc3 +Author: Panu Matilainen +Date: Tue Nov 9 11:45:31 2010 +0200 + + Dont bother NULL'ing local variables on exit + +commit dd39136893a7715742146a1378b0bbd1e3250d12 +Author: Panu Matilainen +Date: Tue Nov 9 09:54:31 2010 +0200 + + Eliminate pointless (and racy) test for rebuilddb directory existence + - mkdir() will error out with a reasonable error message of its + own, no point doing separate, buggy test with access() + +commit e6c874368d654e4b3c3a76845f24ff5fb25ce6d1 +Author: Florian Festi +Date: Tue Nov 9 09:52:33 2010 +0100 + + Remove unused local variable + +commit 9f89a023695f44373d2f9c82808bfdbe2e1e93f6 +Author: Panu Matilainen +Date: Tue Nov 9 09:30:47 2010 +0200 + + Hide --aid and --nosuggest switches for now + - These have been no-ops since rpm 4.6, but might resurface one day so + leaving them around but out of sight... + +commit ce7fbea620e4a55a18c737390b30844cf5125145 +Author: Panu Matilainen +Date: Tue Nov 9 09:27:55 2010 +0200 + + Lose useless --fileconflicts cli-switch + - We always detect file conflicts (duh!) unless forced, no need for this + +commit 7bc9cc79d19f61121b443b8e0e73364db47209c4 +Author: Panu Matilainen +Date: Tue Nov 9 09:18:10 2010 +0200 + + Move --dbpath into common rpm popt options table + - This ensures its available in all our executables without adding + umphteen copies into rpmpopt (after the cli splits, this was missing + in eg rpmdb executable...) + +commit 90eb3bac07173d9b248369653c0f24af78384f34 +Author: Panu Matilainen +Date: Tue Nov 9 09:02:21 2010 +0200 + + Eliminate stillborn code + +commit c019a81465848ba5897298b615e38f8ba2470488 +Author: Florian Festi +Date: Fri Nov 5 09:27:21 2010 +0100 + + Fix IndexIterator to not open an private dbi that never gets closed + +commit 53e3ca23ea34dbdf44fab2da46e3ac1b64d32190 +Author: Panu Matilainen +Date: Fri Nov 5 10:18:41 2010 +0200 + + Const-correctness: rpmdsRpmlib() doesn't (and must not) modify tblp + +commit f9a32ac3de9ad00d5a48e1b4178049052d77513f +Author: Panu Matilainen +Date: Thu Nov 4 15:55:19 2010 +0200 + + Lose the remaining dbapi references in code + configuration + - Changing db_api to db_ver to force breakage on anything using the + value, db_ver containing the BDB major version just to put something + in the error messages where the dbapi version used to be. + +commit 6a9bd4e97f07dd686ab20652011585c7cb97de17 +Author: Panu Matilainen +Date: Thu Nov 4 15:45:27 2010 +0200 + + Eliminate useless dbapi version to internal openDatabase() + +commit 2af1d74dbdfd396a573d2b23d9336153dc496b1d +Author: Panu Matilainen +Date: Thu Nov 4 15:38:25 2010 +0200 + + Eliminate useless dbapi argument to rpmdbRemoveDatabase() + +commit bb44cbc30c199ceeea055cb36f7645ed3bd6cbc8 +Author: Panu Matilainen +Date: Thu Nov 4 15:34:59 2010 +0200 + + Start eliminating dbapi leftovers + - We've only one dbapi and new ones are not around the corner. It + doesn't get tested and is likely broken at this point anyway, + better just kill it completely. We'll need a new mechanism + one day but lets worry about it when the day actually comes. + - Starting with eliminating dbapi arguments to the internal database + move helper + +commit 0f9cef69c0b7f8a7cc3b0bbbbe6595583f6ced33 +Author: Panu Matilainen +Date: Thu Nov 4 14:09:33 2010 +0200 + + Eliminate unused strlen() calls 'n stuff from skipInstallFiles() + - These were used by the netsharedpath calculations which used + to be inline here, but that's now in a function of their own. Also + move the temporary variables to the scope where they're actually used. + +commit bed4ada5c10f2fcdb2e90fd5168a2462d0136f1a +Author: Panu Matilainen +Date: Thu Nov 4 13:49:07 2010 +0200 + + Remove nicely misleading #ifndef NOTYET case from skipInstallFiles() + - No point "documenting" with reverse ifdef's what somebody was + considering to implement eight years ago, as it is directory and + file iterations can't be mixed as they both mess with fi->j. + - Also eliminate pointless "can't happen" check - this never gets + called with NULL fi in an element (which is already a cant happen) + +commit d45cfdfc50c6e3662bfe91e62d4d97d28de6bdf8 +Author: Yuri Chornoivan +Date: Wed Nov 3 20:41:24 2010 +0000 + + l10n: Updated Ukrainian (uk) translation to 100% + + New status: 741 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit caf595813c88d4457576109fa0194c165b6c70ac +Author: Florian Festi +Date: Wed Nov 3 10:58:41 2010 +0100 + + Merge rpmdbIndexIteratorKey and rpmdbIndexIteratorKeySize into rpmdbIndexIteratorNext + +commit 1be06ec0bda642d62329c9e14adc94b1a123a740 +Author: Florian Festi +Date: Wed Nov 3 10:35:42 2010 +0100 + + Make ints in IndexIterator API unsigned as the interal types are + +commit 7f949110693a44d798374ae6453a1120b3b66d2f +Author: Florian Festi +Date: Sun Oct 24 19:39:42 2010 +0200 + + Rename rpmdbKeyIterator to rpmdbIndexIterator + +commit 2946c185fa03c4847b32d230b10b641b4baa7466 +Author: Florian Festi +Date: Sun Oct 24 19:10:35 2010 +0200 + + Give access to the pkg offset and tag num of the index entry the key iterator is pointing to + +commit 968461689c6eecb85e5634ef72f503cef34572d3 +Author: Panu Matilainen +Date: Sat Oct 30 11:37:06 2010 +0300 + + Const-correctness: source is a pointer to fullSource and must not be freed + +commit f2039adf6fb486dc04c9cebdebcb1360e3509138 +Author: Panu Matilainen +Date: Fri Oct 29 20:30:07 2010 +0300 + + Const-correctness: rpmCharCheck() doesn't modify field, make it const + +commit 325a9b1ba5a8a964b4773538cf73d4504aba7c05 +Author: Panu Matilainen +Date: Fri Oct 29 15:14:01 2010 +0300 + + Add rough-cut man-pages for our new executables + - Chainsaw relevant information out of rpm.8 and tweak a little bit, + adding cross-references etc. These will need a lot more love though... + +commit 52724dd5ae4f1633aa49c7007f234887bfdee933 +Author: Panu Matilainen +Date: Fri Oct 29 13:55:22 2010 +0300 + + More ancient cruft removal from the repository + +commit e9e42004e9a39006274573323970f4cd4806bd55 +Author: Panu Matilainen +Date: Fri Oct 29 10:40:25 2010 +0300 + + Lose ancient lclint remnants from the repository + +commit a2a6060a6cc55b040d500e94290009d9f76a220f +Author: Panu Matilainen +Date: Fri Oct 29 10:21:45 2010 +0300 + + Eliminate unused truncStringBuf() function + - This has been unused at least as far back as rpm 4.4 actually... + +commit b4bc5e778e14027dd6057276a353c32baa64bd97 +Author: Panu Matilainen +Date: Fri Oct 29 10:12:53 2010 +0300 + + Eliminate unused spectag and speclines goo from spec + - These were used, back in the day, to implement a hidden --specedit + switch, which in all its glory did: print a copy of a spec file, + with group, summary and description looked up from specspo. + This huge pile of junk was left behind from kicking out the + useless "feature" in commits 7b95061d3b77d8e6b3c80e856b66f49b393511ba and + 0f991a14209054da7c45c46e96750738fc62874d. + +commit d874afb5cde620c6f409b0c1a0ee31ccf6f30ce8 +Author: Alexey Gladkov +Date: Thu Oct 28 01:11:38 2010 +0400 + + elfdeps: Fix version definitions processing + + The elfdeps doesn't parse the whole .gnu.version_d section. + For example: + + $ readelf -V /lib/libbz2.so.1 | grep -A3 .gnu.version_d + Version definition section '.gnu.version_d' contains 2 entries: + Addr: 0x0000000000000884 Offset: 0x000884 Link: 4 (.dynstr) + 000000: Rev: 1 Flags: BASE Index: 1 Cnt: 1 Name: libbz2.so.1 + 0x001c: Rev: 1 Flags: none Index: 2 Cnt: 1 Name: BZLIB_1.0 + + Before changes: + + $ echo /lib/libbz2.so.1.0.6 | /usr/lib/rpm/elfdeps -P + libbz2.so.1 + + After changes: + + $ echo /lib/libbz2.so.1.0.6 | /usr/lib/rpm/elfdeps -P + libbz2.so.1(BZLIB_1.0) + libbz2.so.1 + + Signed-off-by: Alexey Gladkov + +commit 94ea5ee25f0d341274d204907d35233117e0f671 +Author: Panu Matilainen +Date: Thu Oct 28 12:01:42 2010 +0300 + + Fix the remaining enum abuse over rpmParseState in librpmbuild + - rpmParseState uses might actually qualify for a true enum here + but changing it would require changing half of librpmbuild and + many of them mix the parse states, other error codes and whatnot + in their types... just not worth the trouble, so use an int. + +commit b3c6d5a39522815f86441dcb2512e2561ecdc711 +Author: Panu Matilainen +Date: Thu Oct 28 11:48:49 2010 +0300 + + Now, make getStringBuf() return const char * for correctness sake + +commit 3418a1078f6c43db393ce792969900331729bfad +Author: Panu Matilainen +Date: Thu Oct 28 11:47:29 2010 +0300 + + parseScript() const pedantry + - The string from getStringBuf() is not modified, so use a const + variable for it, and a separate variable for the temporary + line splitting for triggers + +commit 342189d479760ad886818aebc6b31b265b9335eb +Author: Panu Matilainen +Date: Thu Oct 28 11:39:28 2010 +0300 + + Use ARGV_t instead of stringbuf in changelog parsing + - addChangelog() is a bad boy and modifies the string it grabs + from getStringBuf(), be clean about it and grab a copy through + argvJoin() instead + - addChangelog() would be better off walking and parsing over the + argv directly instead of a joined string of it all, but leaving + that exercise for some other rainy day + +commit 4100680ec20bce51e50e0d87203d5386c736f31c +Author: Panu Matilainen +Date: Thu Oct 28 11:01:39 2010 +0300 + + Use ARGV_t for temporary line storage directly + - Similar to commit 1e3db59b568b1ff7f7e1f3285fc9b18567f2f2d6, + no point using temporary string buffer when only end up splitting + it into an argv for processing. Incidently this would've been + a much less intrusive fix to RhBug:573339 than introducing + a whole new argvSplitString() function... oh well. Take care not + to introduce extra newlines in the process as argvSplitString() was + eating them before - need to use appendStringBuf() for spec->prep now. + +commit 3b99c79ef92fbf63f6b9ede762b7cdff169086d6 +Author: Panu Matilainen +Date: Thu Oct 28 10:51:00 2010 +0300 + + Pass the script to doScript() as const char * + - doScript() doesn't do anything special with the script buffer, + this lets us use const for the argument. + +commit 3f152a1312d10a90249169f6b978d96b84e5991b +Author: Panu Matilainen +Date: Thu Oct 28 10:45:35 2010 +0300 + + Argument passing hysteria in doScript() + - Callers know perfectly well which part they're passing to doScript() + so they can just as well pass in the name and the scriptlet to run, + avoiding silly stuff in the switch-case + +commit 98aff6e658a15202ebacd49c8a970be7affb6e5c +Author: Panu Matilainen +Date: Thu Oct 28 10:38:40 2010 +0300 + + Handle NULL sb in getStringBuf() cleanly + +commit a32705e737988512113bf21c7d067de6f49b4470 +Author: Panu Matilainen +Date: Thu Oct 28 10:24:20 2010 +0300 + + Use ARGV_t for package fileFile, fileList and policyList + - Similar to commit 1e3db59b568b1ff7f7e1f3285fc9b18567f2f2d6, + all these end up being passed to argvSplit() to process them line + by line in the end, collect them in the argv to start with saving + a whole lotta huffing and puffing in the process + +commit 1e3db59b568b1ff7f7e1f3285fc9b18567f2f2d6 +Author: Panu Matilainen +Date: Thu Oct 28 09:54:53 2010 +0300 + + Eliminate splitString() leftover braindamage in processSourceFiles() + - Collect the filenames directly into the ARGV_t files instead of + putting them to a StringBuf first and then argvSplit()'ing the + result, doh. Leftover stupidity from eliminating splitString() + usage in commit 94ff22b129aeb31c38848231e40f87aa4a5613a1 + +commit 91171b8df0f0d590e330aebaa754d0ec386de7c9 +Author: Panu Matilainen +Date: Tue Oct 26 23:39:14 2010 +0300 + + Bury stripTrailingChar() inside the only remaining user + - There used to be some other callers too but seems they've passed + away, leaving just the relocation code in rpmte.c. Which means we + can get this ugly bit out of the API. + +commit 21e0e5cd482620bc73ff221b7ce26b41f97d7cee +Author: Panu Matilainen +Date: Tue Oct 26 23:36:46 2010 +0300 + + Bury StringBuf inside librpmbuild internals + +commit b2a688ee00922811b6e77852bd43b7d0f5b0e0c0 +Author: Panu Matilainen +Date: Tue Oct 26 23:28:39 2010 +0300 + + Make rpmfcExec() internal + - Nobody in their right mind is likely to be calling what's really + an internal helper function in the build code. Simply missed in + the first round of librpmbuild API butchery. + - This eliminates the last remaining exposure of StringBuf in the API + +commit 5e13a1234ef363733744cbed58d44a6b97b2201f +Author: Panu Matilainen +Date: Tue Oct 26 23:20:58 2010 +0300 + + Eliminate the sole StringBuf user in librpm side + - Using ARGV_t here might not be exactly optimal but then manifest + parsing isn't exactly performance critical either. + +commit 71c8f49ca4b86527bc43bbff64a44ef36f938687 +Author: Panu Matilainen +Date: Tue Oct 26 11:29:17 2010 +0300 + + Fix BDB version check in configure to work with >= 5 too + +commit a40598b228e3e67f4e7b4ec9ce9de6dddce33735 +Author: Panu Matilainen +Date: Tue Oct 26 09:54:55 2010 +0300 + + Separate match iterator allocation vs initialization + - There's exactly one spot within rpm which needs the former behavior + of rpmdbInitIterator() on a secondary index with keyp of NULL: + rpmFindBaseNamesInDB(): it wants an empty iterator on RPMDBI_BASENAMES, + which is then extended as it progresses. Starting with commit + c70e076e088589f65160c05ee7cc8db0b3db6d7e, rpmdbInitIterator() + however returns the actual index in that case, which is not + optimal for rpmFindBaseNamesInDB(). Handle the basenames in db + as the special case it is, and have it explicitly create an + empty iterator with the new call. + +commit 0d4b7b8f3a0a2f0de7a30fd51c86be6849e54329 +Author: Panu Matilainen +Date: Mon Oct 25 15:03:56 2010 +0300 + + Create less draconian loops for grouped collections + - Instead of creating a completely unresolvable tangle of pre-requisites + between all collection members and their requirements, just add + a single relation loop of all the packages in a (grouped) collection, + effectively turning it into a strongly connected component. The + loop-cutting algorithm has slightly better chances of surviving this + while still enforcing the collection members to be installed in one + lump. Also only process each collection just once. + +commit 6281e4a215313f74244a6e3b027061d64d65895e +Author: Panu Matilainen +Date: Mon Oct 25 12:44:34 2010 +0300 + + Only specific cases of collections need extra ordering + - Add a crude flags system to allow selectively enabling the extra + grouping during ordering: currently only sepolicy collection needs + this, and its very harmful when applied to more regular collections + as it creates truly gigantic dependency loops that rpm has no chance + of sorting out sanely. + +commit 0d36cc3359b873551accf143efd3f41799f3b544 +Author: Piotr DrÄ…g +Date: Sat Oct 23 10:07:31 2010 +0000 + + l10n: Updated Polish (pl) translation to 100% + + New status: 741 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit bf1b4dede614fba082ac8abdf6ff3bb9560060ac +Author: Panu Matilainen +Date: Fri Oct 22 18:28:08 2010 +0300 + + Eek.. librpmsign sources went missing in the move + - Re-adding the files that should've gotten moved (not removed) in + commit 9f2c1bd9096cbf382c864737a6565e5487767ce2 + - Mild wtf ... probably user (not git) error though. Too bad the + broken state got pushed already :-/ + +commit 1cb6b12fd2d0367861cb3d2d13fd74a1451831b4 +Author: Panu Matilainen +Date: Fri Oct 22 15:51:36 2010 +0300 + + Bah, couple of missed places for librpmsign moving + +commit 0f4e1b07e625dfd4b407f6978f87795755b70000 +Author: Panu Matilainen +Date: Fri Oct 22 15:45:58 2010 +0300 + + Teach python about the new RPMDBI_* tags + +commit f0a76d51db74133f91341297556a714b1bea6452 +Author: Panu Matilainen +Date: Fri Oct 22 15:02:14 2010 +0300 + + Update translations to pick recent changes + files moving about + +commit 9f2c1bd9096cbf382c864737a6565e5487767ce2 +Author: Panu Matilainen +Date: Fri Oct 22 15:00:49 2010 +0300 + + Move librpmsign to its own subdirectory in the sources + +commit 7c44f5797766f07a917f710bee71dfc88c9cbc6b +Author: Panu Matilainen +Date: Fri Oct 22 13:46:14 2010 +0300 + + Brute-force s/rpmTag/rpmTagVal/ in entire librpmbuild + - Many of these cases would be true enums from preambleList & similar, + except for the list terminating sentinel. Just switch all the + remaining rpmTag's to rpmTagVals to bring our enum-whacking to + a grande finale. + +commit 07e68a5a775598ac3c98fcc11dcf102b7b280cc4 +Author: Panu Matilainen +Date: Fri Oct 22 13:31:34 2010 +0300 + + Fix invalid uses of rpmTag/rpmSigTag in pack.c + +commit 65358a072f8642c83104410497404921e0b5667e +Author: Panu Matilainen +Date: Fri Oct 22 13:23:09 2010 +0300 + + Replace remaing rpmSigTag uses with rpmTagVal + - Some of these might actually be "correct" but about one case from + librpmbuild cascades down here ... just not worth the trouble to + keep the as rpmSigTags. + +commit ac2efca8142a5bcb6db64d4811def77f32e56bd0 +Author: Panu Matilainen +Date: Fri Oct 22 12:59:53 2010 +0300 + + Use header datatype for hash algo instead of pgpHashAlgo enum + - The digest algo can come from macro numeric expansion which is + not an enum. Just use uint32_t which is how it'll end up in the header + +commit ea951fca341a4ad7898e7bb468d4639d0f3cca64 +Author: Panu Matilainen +Date: Fri Oct 22 12:58:09 2010 +0300 + + Eliminate pgpHashAlgo uses in librpm side + - In all these cases the value comes from a non-enum source so + just use an int instead + +commit 3d8ce8142382f8cf99100f5532abeb2b87744d55 +Author: Panu Matilainen +Date: Fri Oct 22 12:39:04 2010 +0300 + + Fix (ie eliminate) rpmSigTag uses in rpmchecksig + - The sigtags originating from headers are not enums but integers + - 0 is not a valid rpmSigTag value while the other cases would be in + bestSig() and friends + +commit 41e311c91dbb20f7df3f7f04317c26c14ac05bbf +Author: Panu Matilainen +Date: Fri Oct 22 12:35:56 2010 +0300 + + Meh, one missed rpmTag -> rpmTagVal change in query + - While the initial assignment is to true rpmTag, rpmTagGetValue() + returns rpmTagVal, not rpmTag. + +commit fe8265751ed592cb53dc7c3a7ffd00bac8a19ef1 +Author: Panu Matilainen +Date: Fri Oct 22 12:31:08 2010 +0300 + + Couple of enum craziness fixes to package.c + - 0 is not a valid rpmSigTag, just use rpmTagVal instead + - use int instead of pgpHashAlgo for temporary variables, the + originating data is not "pure" enum + +commit e104b67237843a0ab7b12b17aa5647ddd64330fa +Author: Panu Matilainen +Date: Fri Oct 22 12:22:44 2010 +0300 + + Eliminate use of pgpHashAlgo in rpmio interface arguments + - While its use would seem kinda obvious here, in rpm context this + information often comes from header tags which are plain integers + and would require conversion/casting to the enum. What matters is + the integral value, not it being actual enum. + +commit 08b56c5304c89e37147254f4f15bafcbc5eef2ce +Author: Panu Matilainen +Date: Fri Oct 22 12:13:49 2010 +0300 + + Couple of previously missed type changes in rpmdb code + +commit 89f09dd3b005826682b70003fad3baf84f832d2a +Author: Panu Matilainen +Date: Fri Oct 22 12:07:57 2010 +0300 + + Switch lowelevel header internals to use rpm_tagtype_t for tag type data + +commit e8f777b69dd34f887b7e9c2398ccddd61e8af265 +Author: Panu Matilainen +Date: Fri Oct 22 11:57:38 2010 +0300 + + Switch python bindings to use rpm(Dbi)TagVal as appropriate + - None of these are true enum uses as the value typically originates + from python integers etc. + +commit 0715b04664ce348b73f6981dd07f0b464dddd049 +Author: Panu Matilainen +Date: Fri Oct 22 11:49:52 2010 +0300 + + Change all internal uses of rpmtsInitIterator() to use DBI tags + +commit 327b9a38180ff21b06331a65f3efc8986f0394a0 +Author: Panu Matilainen +Date: Fri Oct 22 11:43:10 2010 +0300 + + Switch lone rpmTag use in query to rpmTagVal + +commit 4171b24699075557d7d7ecf35f26fd454bc490f0 +Author: Panu Matilainen +Date: Fri Oct 22 11:39:53 2010 +0300 + + Switch psm and rpmscript to use rpmTagVal where appropriate + - There are a few true rpmTag uses though, leaving them as they are... + +commit 327ad093ef20d25de2ce65eaa0c79525f1b25219 +Author: Panu Matilainen +Date: Fri Oct 22 11:33:32 2010 +0300 + + Change rpmfiNew() tag argument to rpmTagVal + - The argument is actually unused, but that only makes it even more + stupid to require C++ callers to potentially having to cast. + +commit f955db901b1a84b39906281a7e35d3147ef3df69 +Author: Panu Matilainen +Date: Fri Oct 22 11:31:36 2010 +0300 + + Switch rpmte API and internals to use rpmTagVal instead of rpmTag + - Except for rpmteColorDS(), these can get called with intergral + value instead of the actual enumeration + +commit 73c079735a2af231ff63e7150fdee3b33bacbae6 +Author: Panu Matilainen +Date: Fri Oct 22 11:27:01 2010 +0300 + + Switch rpmds API and internals to use rpmTagVal instead of rpmTag + - None of these require passing "true enum", the value is what counts. + In general, enums as function argument types are just a royal PITA + from C++, avoid when not strictly necessary. + +commit a68f648cf1a1821924e08b8f99c14af9da216b10 +Author: Panu Matilainen +Date: Fri Oct 22 11:07:48 2010 +0300 + + Change rpmdb internals and iterator APIs to use the appropriate tag types + - The actual indexes are rpmDbiTags, and the tag passed to + rpmtsInitIterator() and rpmdbInitIterator() always refers to a + database index, not arbitrary header tag. The tag passed to + rpmdbSetIteratorRE() however /does/ refer to a header tag. This rather + important distinction can actually be expressed in the API. + - As the indexes are generated from header tags of the same value, + most of these need to use the TagVal types instead of actual enums + to avoid mismatches - the value is what counts, not it being an enum. + - Several places still have variables misleadingly named "rpmtag" when + they refer to dbi tags, but leaving them for now to avoid excessive + changes at once. + +commit 61a764010089211209f78cf535685bc777cd3c25 +Author: Panu Matilainen +Date: Fri Oct 22 10:17:55 2010 +0300 + + Document our supported rpmdb indexes in the API via an enum of their own + - Now that our indexes are actually hardwired in the code we can + properly separate rpmtag vs db index names. + - Defined similarly to rpmTags, with rpmDbiTag being the "true enum" + and rpmDbiTagVal the integral type they present. As many of the + indexes are defined via RPMTAG values (and need to remain that + way to avoid breaking every single API user) we need to have a + compatible type with rpmTags. + - These would logically belong to rpmdb.h but keeping in rpmtag.h + to have them available "everywhere", we can't go including rpmdb.h + from rpmtag.h so keeping them here avoids potential unnecessary breakage. + +commit a4bca08ae1541c2b45faa09c313ec2ae0bfe875b +Author: Panu Matilainen +Date: Fri Oct 22 09:55:49 2010 +0300 + + Change all the legacy interfaces to use the "concrete" integer tag types + - More compatible with the 4.4.x definitions (should've been this way + all this time) and none of these are "true" enum uses anyway + +commit 757d0b443b486b8745aabc61fb6809ae1ecf14be +Author: Panu Matilainen +Date: Fri Oct 22 09:48:24 2010 +0300 + + Switch header APIs to use rpmTagVal instead of rpmTag + - The header getters are used for both signature header and the "normal" + header, and even beyond that there's no requirement for a tag in + the header to be part of rpmTag enum. The headerPutFoo() variants + technically do require the tag to be found in the tag table (ie be + an rpmTag) but they still operate on the integer value, they dont + require it to be a "true" enum. + - Inside tagexts.c there are a few "true" enum uses in the + internal helper functions, leave them be. + - While this technically changes some the most commonly used API's, + this wont affect callers really: if the callers were using an enum + before, enum can always be cast naturally to an integer. The other + way around was the problematic part (ie the braindamage we're fixing + here now...) + +commit 935d0654a612c28494d104f168f00e18f411d247 +Author: Panu Matilainen +Date: Fri Oct 22 09:40:43 2010 +0300 + + rpmTagFoo() getters take arbitrary integers, not rpmTag enums + - Another step to clean up the enum braindamage... + - rpmTag values are the only values that will be found, but it doesn't + mean the values passed are rpmTag enum members - eg anything from + a header is not. rpmTagGetValue() does come close to returning true + enums, but there's RPMDBI_PACKAGES and then RPMTAG_NOT_FOUND, neither + of which are actually tags. + - Introducing a new rpmTagVal typedef. It's just an alias for the + "lowlevel" rpm_tag_t type but visually more in line with the other + rpmTagFoo bits - to be used with the "higher level" tags whereas + rpm_tag_t is the "physical" type. Not that it makes any difference... + +commit 4b1e48298324cab35e5cac030dac06e7f37bf66b +Author: Panu Matilainen +Date: Fri Oct 22 09:37:20 2010 +0300 + + Use concrete integer types for entryInfo and rpmtd members + - Start undoing self-introduced enum braindamage from 2007: the lowlevel + tag data in header structures are NOT rpmTag/rpmTagType enums, but a + 32bit integer of any arbitrary value. While these can be legally mixed in + C the same is not true of C++ and even in C using enum here is not "correct" + +commit 475244d14ad0ecefe602ce3ef0d1c2376b2460d8 +Author: Panu Matilainen +Date: Fri Oct 22 09:36:43 2010 +0300 + + Couple of doxygen argument mismatch fixes + +commit bcdb82d60e5e16993d1737ccbd41e64cf7dbc405 +Author: Panu Matilainen +Date: Fri Oct 22 09:36:29 2010 +0300 + + Eliminate silly cast + +commit 22eb568fdbc5c28bff00b1ea063493a508c079c0 +Author: Panu Matilainen +Date: Fri Oct 22 09:19:42 2010 +0300 + + Drop unused pubkeys index too + - This isn't expensive to create but unused is unused is useless junk. + Rpm < 4.6.0 did use this a lot, but nowadays we preload the keyring + and do key lookups from meory so this isn't needed for anything. + - 'freedata' argument of td2key() is now unused, but leaving it there + as we might need tag data -> index data transformations in the future. + +commit ddebf8b79ae512b93993fcc7d0e6b4447f8ffd41 +Author: Panu Matilainen +Date: Fri Oct 22 09:02:43 2010 +0300 + + Drop filedigests index + - Now that the sole "user" is gone, kill the stupid index. Speeds + things up considerably: eg on database rebuild, the file digests + index generation amounts to roughly one third (!) of the entire time. + +commit 534d0f77be4de6d7f423c519d7b7ec4f41c8f32a +Author: Panu Matilainen +Date: Fri Oct 22 08:58:06 2010 +0300 + + Eliminate useless --fileid query selector + - Finding out which package provides a file with a given digest + is just .. useless functionality. Being next to useless is one + thing, but we pay a high price for this particular uselessness: + the index needed for this is one of the biggest and most expensive + indexes we have. + +commit 5e007f2258b845cfbe0a66bc8bf09eb9bdc2c9bc +Author: Florian Festi +Date: Thu Oct 21 11:59:14 2010 +0200 + + Fix Python bindings and raise KeyError when there is no index for the given tag + +commit f1883045409930f186fd540f7df9688a4b5811b4 +Author: Florian Festi +Date: Thu Oct 21 10:41:49 2010 +0200 + + Fix typo / erroneously deleted line + +commit 5914d0ec2995d4f4d128c3e96b79f22ec8f48d64 +Author: Florian Festi +Date: Tue Dec 15 13:15:10 2009 +0100 + + rpmdbKeyIterator: loop over keys in the database indexes + +commit a916e399ab0734816f1e4567b34db0b55e9f5c7c +Author: Panu Matilainen +Date: Wed Oct 20 16:38:46 2010 +0300 + + Hardwire the fundamental BDB access method configuration inside rpm + - The different access methods have different capabilities and are not + interchangeable in all situations. Currently we can use either + hash and btree but this might not be always the case for all indexes. + - We'll eventually want to force-switch the index types to our liking, + but for now follow these simple rules: + 1) For existing databases, we accept both btree and hash + 2) For newly created databases, the main Packages database remains + a hash, all indexes are btrees. + - Rip out nearly all the rest of the remaining macro configuration. + +commit ca36c2a12bcde1340da0421a788863f83aaccd08 +Author: Panu Matilainen +Date: Wed Oct 20 15:23:54 2010 +0300 + + Eliminate now unnecessary db rebuild macro goo and other leftovers + - Rpm knows how to handle db rebuilds by itself, no need to expose + these bits to configuration. + - Also rip out a pile of other leftover "documentation" about BDB + internal switches. + +commit 2fa98b9e6ab00ee0e8200b405088130cbd626a32 +Author: Panu Matilainen +Date: Wed Oct 20 15:11:20 2010 +0300 + + Lift fsync enable/disable configuration handling to rpmdb layer + - Add a fsync disable/enable function in the backend, call from + rpmdb layer: on initial database creation (including database + rebuild), it's "safe enough" to disable fsync as there's no former + data to protect. Considerably speeds up initial install to eg chroots. + - Always re-enable fsync when closing a read-write database - at that + point there /is/ data to protect. + +commit 5da136fa1d4edf23b20d6d8d91bd14c7c15e62de +Author: Panu Matilainen +Date: Wed Oct 20 14:16:29 2010 +0300 + + Hardwire the fundamental BDB subsystem configuration inside rpm + - BDB subsystems are not something that can be just switched on and + off like that. If we want to support different configurations they + need to be rpm-specific settings such as transactional/concurrent + setting, not an arbitrary pile of flags that cause stuff to blow + up when abused. + - Eliminate dbi->dbi_eflags completely, the environment opening flags + can be fetched from BDB where needed. Subsystem configuration from + macros is no longer looked at or honored, but leaving the option + table there for debugging output at least for now. + +commit c155896b4b9ed548d1885d008e7ba5aea3fbef79 +Author: Panu Matilainen +Date: Wed Oct 20 12:46:37 2010 +0300 + + Lift missing index detection to rpmdb layer + - Avoids unnecessarily modifying the parent rpmdb from backend layer + and since its the rpmdb layer that needs to deal with creating + indexes anyway... + - Also avoids bumping the counter in case of errors (eg permission denied) + +commit 24c3da8da2cb34278caf6330a25f64c9ae11c635 +Author: Panu Matilainen +Date: Wed Oct 20 12:36:38 2010 +0300 + + Avoid umphteen unnecessary calls to rpmTagGetName() + - These aren't exactly hotpaths, but since the dbi always knows + its name already there's no point going through rpmTagGetName() + bsearch()'es and all for these. + +commit 00454b620862af9d5952f103b196aa916d133b6d +Author: Panu Matilainen +Date: Wed Oct 20 12:23:14 2010 +0300 + + Add a getter for dbi name + +commit bf8cfe884bf24f531f9b318bc8288951a07802c9 +Author: Panu Matilainen +Date: Wed Oct 20 12:13:33 2010 +0300 + + Clean up rpmdbOpenIndex() logic a bit, no functional changes + - dbi is guaranteed to be NULL on non-zero return from dbiOpen(), + dont bother triple-checking and freeing NULLs + - rearrange the success case a bit to pave way for other things that + we'll want to do here + +commit 5fe4da6e40452304539bb1ecb2bb050717812593 +Author: Panu Matilainen +Date: Wed Oct 20 11:12:08 2010 +0300 + + Lose leftover, unwired pagesize db option + - db->set_pagesize() got semi-accidentally nuked in commit + f2957887fb7f80c2dbf6f0b4973c72ca66b0d2e8 but we really dont want + folks to mess with this anyway - filesystem I/O block size is generally + the best performing and safest option here. + +commit 6173699a3a00ad0bbc0cf4051e8f737f543e681c +Author: Panu Matilainen +Date: Wed Oct 20 10:57:53 2010 +0300 + + Avoid directly accessing bdb-specific dbi members from rpmdb layer + +commit 3714d9e22382b4db528ea97abc3d948f905d43df +Author: Panu Matilainen +Date: Wed Oct 20 10:52:53 2010 +0300 + + Add a backend-independent flags + getter for dbis + - Keeping up pretense of being backend independent where its easy + to do... and rdonly+created status are rather obviously universally + mappable + +commit a43ea6c54dd059e1a7eef8365d0674799f574764 +Author: Panu Matilainen +Date: Tue Oct 19 17:27:31 2010 +0300 + + Pass rpmdb, not dbi to db_init() and db_fini() + - These are global operations and dont need the individual dbi for + anything but finding the parent rpmdb. Another step closer to + decoupling db environment from dbi's... + +commit 3312b01fdcc554da30babb525f7fe383d48f86f2 +Author: Panu Matilainen +Date: Tue Oct 19 17:04:20 2010 +0300 + + Add a no-dbi version of the db error reporting function + - cvtdberr() only needs the dbi for figuring out the rpmdb api level, + split this part out to separate function so we dont need to carry + dbi's around where they dont belong + +commit f5808135b70be9ea742a2dce4e2ec87d8932b9de +Author: Panu Matilainen +Date: Tue Oct 19 16:44:46 2010 +0300 + + Move db environment-level configuration out of per-dbi structs + - Carrying global configuration in all dbi's is just dumb. First + step towards fixing the stupidity. + +commit 738c6e0ca76665387ef817fe25ded4f9ead5060b +Author: Panu Matilainen +Date: Tue Oct 19 16:14:24 2010 +0300 + + Group the database options to per-dbi and per-environment groups + - No other changes + +commit 43942e79a1ea955b2b7ba3a635921f579455cb5f +Author: Panu Matilainen +Date: Tue Oct 19 15:40:22 2010 +0300 + + Python dbMatch() doesn't take (or need) len argument, fix the docs + +commit c24d1fb4efcc5f09d8f126824a3ed2fc771f5a1f +Author: Panu Matilainen +Date: Tue Oct 19 15:29:54 2010 +0300 + + A few more rpmdb variable/argument renames, missed in previous round + +commit 11f251dfa65afe1c52155713bcf61bd77e1410fe +Author: Panu Matilainen +Date: Tue Oct 19 14:37:40 2010 +0300 + + Decouple dbiVerify() from dbiClose() + - When RPMDB_FLAG_VERIFYONLY is set, dbiOpen() now only creates and + returns the db handle without actually opening it. With this we + can sanely implement dbiVerify() as its own separate functionality, + also avoiding the need to have duplicate code for creating and + tearing down the db environment (which in turn kills our ability + to use DB_REGISTER if/when the day comes) + +commit a58dc457275d506eb28197c4058337ff5ef8f76d +Author: Panu Matilainen +Date: Tue Oct 19 14:13:58 2010 +0300 + + Add flags argument to dbiOpen(), pass through from rpmdbIndexOpen() + +commit b0433ea8deaf995a383cfb5e1324dddb9ee610e9 +Author: Panu Matilainen +Date: Tue Oct 19 10:58:25 2010 +0300 + + Oops, dumb copy-paste error causing --verifydb to --rebuilddb instead + +commit 1eecd7b118d2b669f84885cd07cbb1f75c6d8dbb +Author: Panu Matilainen +Date: Tue Oct 19 10:41:07 2010 +0300 + + Rename rpmdb variables in the backend to rdb to distinguish from its type + +commit b810869a0aa7227b2faeb91b4a958b7215e94561 +Author: Panu Matilainen +Date: Mon Oct 18 15:03:35 2010 +0300 + + Generate missing database indexes automatically + - Now that we know whether backing files were created on open, we can + easily detect the need for index generation too. As index generation + requires expensive plowing through the entire Packages database, we + to create all missing indexes at once instead of risking several + loops over Packages. So if we spot a missing index, we open all + our indexes and generate all the missing bits in one go. + - Berkeley DB does support on-demand index generation for secondary + indexes created with db->associate(), but as rpm's indexes are in + a slightly different format (they store tag index besides the + header number), using it would require various other + changes too. Also the BDB indexing callback recieves the data + in serialized format, which in rpm's case would mean either + headerLoad() for every single indexed bit, or passing the in-memory + header through some other indirect means. + +commit e8aa50d1881b5ab2ceeb63046fc2f5ede377f1bc +Author: Panu Matilainen +Date: Mon Oct 18 14:35:57 2010 +0300 + + Create indexes too on rpmdbInit() (ticket #156) + - Seems strange to have an initializer function which doesn't + initialize + - This leaves RPMDB_FLAG_JUSTCHECK unused... + +commit 650c9e5e6b93f9d135bf46f33b69e68e822b2a1e +Author: Panu Matilainen +Date: Mon Oct 18 14:31:55 2010 +0300 + + Avoid returning NULL from prDbiOpenFlags() + - While glibc can turn NULL %s to "(nil)", this is not required in + any standards. Avoid embarrassing segfault from a silly debug message. + +commit c1620e511d0a8613b01bd3ba5b487c027572ce44 +Author: Panu Matilainen +Date: Mon Oct 18 13:18:19 2010 +0300 + + Remember if we created the db backing file on open + - Instead of trying to figure out suitable flags beforehand, try to + open the db a couple of times with different flags. This way we know + whether the backing file was created on open or not. Also simplifies + the flag shuffling somewhat. + - We also do this when O_CREAT db_mode, for the same reason: rpmdbInit() + can be called on existing database too, and we want to know which + of the files actually got created. + +commit 7a9da58298ad4b1c1e21b01de97f6d7aba2ca543 +Author: Panu Matilainen +Date: Mon Oct 18 12:09:28 2010 +0300 + + Lift dbi fcntl() locking out of dbiOpen() + - Just to make dbiOpen() shorter and easier to read, locking is + different from opening... + +commit 2139babf96daa90ad6834b6c04cf038152be8141 +Author: Panu Matilainen +Date: Sun Oct 17 12:20:48 2010 +0300 + + Lift secondary index updating out of rpmdbAdd() + +commit c70e076e088589f65160c05ee7cc8db0b3db6d7e +Author: Florian Festi +Date: Sat Oct 16 09:45:13 2010 +0200 + + Support looping over indexes when giving keyp=NULL to rpmdbInitIterator() + +commit d883d17410a6b87a6dcc0123d88d4e6edc006d72 +Author: Panu Matilainen +Date: Wed Oct 13 14:29:28 2010 +0300 + + Add python bindings for librpmsign + - Similarly to the build-bindings, permit import failures as librpmsign + might not be installed and we dont want to force the dependencies + into every single installation + +commit 309b421cf74a079189f328271ce977e9f036d5a9 +Author: Panu Matilainen +Date: Wed Oct 13 14:20:30 2010 +0300 + + Oops, fixup rpmsign exit codes on success + +commit 8186b59e684ba098da8005b10d7f427427f58f41 +Author: Panu Matilainen +Date: Wed Oct 13 13:37:42 2010 +0300 + + Make rpmPkgSign() actually honor the signing arguments + - For now just keyid string and hash algorithm supported. The + macro fiddling should perhaps go deeper into the signing process + but this'll do for now... + +commit 6685af178691b6f2e44a54cd7c20ec2e3b657712 +Author: Panu Matilainen +Date: Wed Oct 13 13:20:40 2010 +0300 + + Nuke rpmcliSign() out of the orbit + +commit f5e2b115db4db554cb05213535c5be4098f70bea +Author: Panu Matilainen +Date: Wed Oct 13 13:19:35 2010 +0300 + + Make rpmsign use the new signing interface (minimal conversion for now) + +commit e4816d8819343677f810816ca1ef3ff66d8086e9 +Author: Panu Matilainen +Date: Wed Oct 13 13:11:54 2010 +0300 + + Add beginnings of a real API to librpmsign + +commit ec6226dd17c674f174be8cfdecb07ac78e6019bb +Author: Panu Matilainen +Date: Tue Oct 12 16:58:09 2010 +0300 + + Move plugins out of rpm config directory + - Plugins are by their very nature arch specific, while /usr/lib/rpm + is a hodgepodge of all sorts of ... stuff, most of which is + arch-independent and all. Use %{_libdir}/rpm-plugins to cleanly + differentiate 32 vs 64bit plugin paths + +commit eea47aa9a7e7779cb35e8e6e690424427fe243c1 +Author: Colin Walters +Date: Tue Feb 23 11:02:46 2010 -0500 + + Add 'VCS' key + + Spec files have a lot of metadata about a project. However one of the + most key components is the upstream version control system which was + notably lacking. + + Resolve this by adding a "VCS" key. There is no specification + for contents of this key, given that the set of version control + systems (and features thereof) are not well-defined. However, + recommendations are: + + * git: This URL should be in a form that can be passed to "git clone", + with the additional feature that an optional fragment identifier "#foo" + denotes a branch or tag. + +commit 22053e0daecdb180f45a7c74cba04ab16825f262 +Author: Colin Walters +Date: Tue Feb 23 11:02:46 2010 -0500 + + Add 'VCS' key + + Spec files have a lot of metadata about a project. However one of the + most key components is the upstream version control system which was + notably lacking. + + Resolve this by adding a "VCS" key. There is no specification + for contents of this key, given that the set of version control + systems (and features thereof) are not well-defined. However, + recommendations are: + + * git: This URL should be in a form that can be passed to "git clone", + with the additional feature that an optional fragment identifier "#foo" + denotes a branch or tag. + +commit 73de3a22f06f5e7cd28b09318d7273b5e7b2e234 +Author: Panu Matilainen +Date: Tue Oct 12 15:39:52 2010 +0300 + + Add --requires etc popt aliases for rpmspec too + - In addition to the regular dependencies, add --buildrequires + and --buildconflicts which are just --srpm --requires and + --srpm --conflicts in reality + +commit b611e57e667455ede8706094ce1ff50f6b06a32f +Author: Panu Matilainen +Date: Tue Oct 12 15:10:26 2010 +0300 + + Rpm option descriptions begin with lowercase letters, follow suit in rpmspec + +commit 6f8125c9fdcf852fb60e21d2cec54dedc62307c9 +Author: Panu Matilainen +Date: Tue Oct 12 15:07:38 2010 +0300 + + Only queryformat is relevant for specfiles + - Instead of including the entire rpmQueryPoptTable in rpmspec and + showing several bogus options, support --qf/--queryformat "manually" + +commit 999431a4ab356c84c7488f6aff35b598b8a86586 +Author: Panu Matilainen +Date: Tue Oct 12 14:56:18 2010 +0300 + + Support overriding target for rpmspec queries too + +commit fb369ee0cc4a2990d3d5569302386b70dfa6f096 +Author: Panu Matilainen +Date: Tue Oct 12 14:44:56 2010 +0300 + + Support both binary/source queries in rpmspec tool (RhBug:540807, ticket #89) + +commit 190b58746c062994e8e533f299871910636a45ab +Author: Panu Matilainen +Date: Tue Oct 12 14:41:35 2010 +0300 + + Add support for querying source rpm from spec too + - Handle source rpm query as a new query source type RPMQV_SPECSRPM, + rename the binary query to RPMQV_SPECRPMS, with RPMQV_SPECFILE + as a backwards compatibility alias to RPMQV_SPECRPMS. + +commit 4c155d9ca8db9e5672e1f278ef76b68dd828f863 +Author: Eric W. Biederman +Date: Sun Oct 10 07:36:34 2010 -0700 + + Add a python accessor for the source header + + Make the source header visible to python code. + +commit 7293d4aaf590d63d48cc707578008e7d1021b435 +Author: Eric W. Biederman +Date: Sun Oct 10 07:35:31 2010 -0700 + + Add a getter for the source header. + + It appears the access to the source header has started to get buried + into usability so add an getter so the implementation can change a + little without breaking callers. + +commit 0d70636c6dde2a5b40edb0ed22afaf311addf27c +Author: Panu Matilainen +Date: Tue Oct 12 09:27:46 2010 +0300 + + Fix misc/ include path + - -I$(top_builddir)/include/rpm was never right, and now with fts + moved into misc/ this shows as rpm/rpmutil.h not getting found. + +commit 26125015e4321765582dce0b76f83530e7604d4e +Author: Panu Matilainen +Date: Fri Oct 8 11:59:51 2010 +0300 + + Further split the cli-tools to rpminstall, rpmquery and rpmverify + - Installing/erasing packages, querying and verifying require different + amount of privileges on the system. Having separate binaries for + these functionalities permits limiting the capabilities through + SELinux and other similar security mechanisms: for example quering + needs much less privileges than installing. + - For now, leaving /bin/rpm to be the Swiss Army knife it + always was: capable of install/erase, query and verify. Eventually + it should be turned into just a dumb wrapper which just execs + the per-functionality binaries, but leaving that for later stage, + as popt exec/aliasing doesn't quite seem to up to par with the task. + Having the separate binaries available at least makes it possible + for callers to specify the amount of privileges they need. + +commit 9138fec0f43610187df09ba87cd11cf6346ea3b6 +Author: Panu Matilainen +Date: Wed Oct 6 12:53:34 2010 +0300 + + Remove filesystem related leftover API definitions + - This should've been in all the way back in + commit 51c96db0464f86901b328899106dd8d4159dd878 + +commit 4846346c18067ab667d9c53113c7b3fe46be313f +Author: Aron Griffis +Date: Wed Oct 6 10:55:09 2010 +0300 + + Use the right variable for absolute path (ticket #137) + - Fix the problem where rpm attempts to use the tarball as the specfile + +commit 8a9e1e34daa2524b8fb59041abcce615ae045d0e +Author: Michal ÄŒihaÅ™ +Date: Wed Oct 6 10:26:23 2010 +0300 + + Fix generating platform config for arm + - We need to generate platform/arm-linux as well, not only all substitutes. + +commit 4e8d7c1a46a53bd3422f94c82f7c3a36759aedd6 +Author: Panu Matilainen +Date: Tue Oct 5 09:53:13 2010 +0300 + + Require file attribute config to have .attr suffix + - Allows for more precise globbing, avoiding potential issues from + leftover / accidentally placed files in the fileattrs directory. + +commit fb4bc9b7d758798ccca698a52f650cdeea7c7ff5 +Author: Panu Matilainen +Date: Tue Oct 5 09:35:45 2010 +0300 + + Replace __foo_exeonly attribute with a more generic mechanism + - Use a list of text keyword tokens to allow for more flags without + requiring adding special processing for every new flag we make + +commit 152d1f0bc4b3b99ca72d994f90fee0f91f627daf +Author: Panu Matilainen +Date: Tue Oct 5 09:11:13 2010 +0300 + + Tolerate NULL args in argvSplitString() + +commit 0048c394797a903a693753e543337387db20e295 +Author: Panu Matilainen +Date: Mon Oct 4 16:04:47 2010 +0300 + + Add cli switches to override signing key and digest algorithm + +commit 1325fea3109030a657340a907faf4c724155eb12 +Author: Panu Matilainen +Date: Mon Oct 4 14:35:08 2010 +0300 + + Adjust rpm.pc private libraries + - we no longer have sqlite3 lib ever, but we might have lzma/xz libs + +commit 59b275ddc7346fd8f2f9a0267949c457f4297eee +Author: Panu Matilainen +Date: Mon Oct 4 14:02:53 2010 +0300 + + Further streamline rpmcliArgIter() and friends + - Turn applyFilters() into match iterator initializer which optionally + applies filters if present + - Handle NULL iterator error codes centrally in rpmcliShowMatches() + +commit e8a1f5da3e86a6c07f87c577ddfd2a1c2cc0b2aa +Author: Panu Matilainen +Date: Mon Oct 4 13:33:18 2010 +0300 + + Lift specfile query out of main rpm(query) into separate binary + - Avoids having to link /bin/rpm with librpmbuild and everything it + might bring in (eg libmagic) which are not needed for core operation. + - Minimally preserve backwards compatibility with popt exec alias + +commit e188767e3ee75e9417e361e1d005195c3efa0b99 +Author: Panu Matilainen +Date: Mon Oct 4 12:51:32 2010 +0300 + + Simplify queryformat popt callback handling + - No need to separate single vs multiple queryformats, + rstrcat() works for both cases. Whether catenating multiply specified + queryformats make sense is another question though... + - This can't get called with NULL arg (or then popt screwed up its + argument checking), dont bother checking. + +commit 8bc1c54bc90dc587be5ffc9efbe4cbf3188cc8d2 +Author: Piotr DrÄ…g +Date: Mon Oct 4 09:32:46 2010 +0000 + + l10n: Updated Polish (pl) translation to 100% + + New status: 741 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit e72895693e6c1728b62f6b622909603bee12c6c3 +Author: Guido Grazioli +Date: Sun Oct 3 20:05:32 2010 +0000 + + l10n: Updated Italian (it) translation to 100% + + New status: 732 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 5f1235d3a86bb629af056cc7d10a603ccd0bfdbe +Author: Panu Matilainen +Date: Fri Oct 1 15:30:31 2010 +0300 + + And now python bindings are really free of librpmbuild internals + - Just one leftover offender in the form of forgotten type rename + from commit 675bfca5cc300105f7859f028cc00ea036e72966 + +commit 0334b82280de0f42dcca867397fb9e6bb72c3b30 +Author: Panu Matilainen +Date: Fri Oct 1 15:28:40 2010 +0300 + + Kill spec.buildRoot from python + - We /could/ of course add a getter for this but ... sorry folks, what + rpm happens to use as buildroot internally isn't anybody elses + business. + +commit d081f19945d2feb3f74e9460e59f74fcc6ada438 +Author: Panu Matilainen +Date: Fri Oct 1 15:23:27 2010 +0300 + + Use the new spec section getter in python bindings + - Whee, for a change more lines removed than added... + +commit c8ddd0ca7f85085f1c73596d0921a25bb8b43c30 +Author: Panu Matilainen +Date: Fri Oct 1 15:14:34 2010 +0300 + + Add getter for spec script sections too, bah... + - Pretty dumb and all, but to avoid breaking some python users + (some folks apparently have found /some/ use for these...) + +commit 7f16947a0a16c1e6e2d38f5d3f5b20fa2f4ee4ec +Author: Panu Matilainen +Date: Fri Oct 1 15:05:35 2010 +0300 + + Use the new spec src/pkg API in python instead of direct access to spec + +commit f94d1507e5a3e82293061c9c3dc4d34008cee390 +Author: Panu Matilainen +Date: Fri Oct 1 15:03:22 2010 +0300 + + Add minimal API for spec packages and sources + - Iterators for both (these could easily done as self-iteration over + ->next but to keep the api similar to other rpm iterators...) + - Minimal getters to satisfy python bindings needs + +commit 675bfca5cc300105f7859f028cc00ea036e72966 +Author: Panu Matilainen +Date: Fri Oct 1 13:32:28 2010 +0300 + + Use namespaced names for spec pkg and source opaque typedefs + - Leaving the painful and somewhat pointless exercise of changing + all the Package and Source references for another rainy day + +commit 1933cb5a9db89375fce7cfe5886b2873a4ffb438 +Author: Panu Matilainen +Date: Fri Oct 1 13:25:38 2010 +0300 + + Finish off our librpmbuild API mass-murder by turning everything opaque + - These huge structs have no business being visible to the public. + Just brute-force split all remaining spec internal structures into + another internal header, including where needed. + - The only thing accessing these structs outside of librpmbuild is + the python spec bindings. Temporarily permit direct access to + rpmspec_internal.h until we have the necessary API in place. + +commit a0444009a17635ffa04e6fc747f6e6cbfd4d409d +Author: Panu Matilainen +Date: Fri Oct 1 13:21:00 2010 +0300 + + rpmfcGenerateDepends() is internal, move away from public header + +commit 45a75f31f9bbcb6ddb627c9dcc2b61ced82f3380 +Author: Panu Matilainen +Date: Fri Oct 1 11:46:00 2010 +0300 + + A few missing internal markers on librpm side too + +commit a462500b631bd0719fcddac31440394f77e62d5b +Author: Panu Matilainen +Date: Fri Oct 1 11:32:31 2010 +0300 + + Whoops, missing RPM_GNUC_INTERNAL on stashSt() + +commit 84747fb22e9ba75cc7c6aa2ad980ed3897f86772 +Author: Panu Matilainen +Date: Fri Oct 1 11:22:13 2010 +0300 + + Stuff fts into a convenience library in misc/ + - This is not really native rpm code but a copy of (glibc?) FTS + implementation, with slight modification to avoid symbol name + collisions. Stick it where the sun don't shine, we'd eventually + like to get rid of such bundled external code. + +commit ecf7ce8b2b061a7b0b2cfa27183e7f64e8e3336b +Author: Panu Matilainen +Date: Fri Oct 1 11:17:24 2010 +0300 + + Lose rpmio-url leftovers from fts + - We never pass url's here, just plain old local paths + +commit bbeff03dc350a70d812ed634102c01e642db8882 +Author: Panu Matilainen +Date: Fri Oct 1 11:05:45 2010 +0300 + + Force shared build of python extension + - Other than seeing "does it compile", statically linked python + extensions make no sense as they're unusable to python. + +commit a4adf99b0f81c2ab72ade92850cfb9b5cf8ffbca +Author: Panu Matilainen +Date: Fri Oct 1 10:43:55 2010 +0300 + + Add configure switch to disable plugins build + - For now this is really just to allow building statically while + hacking, for "real world" use this has implications on collections + support etc which is not handled by this patch. + +commit 8b4ccff2e36876dcfbdba9f38f4ec9dcdef2166e +Author: Panu Matilainen +Date: Fri Oct 1 10:34:36 2010 +0300 + + Handle enable/disable python to configure.ac more sanely + - Conditionalize the python subdir on toplevel make instead of + python subdir makefile. + +commit 6059911eb827152e22a8f3bb061147734a0ab283 +Author: Panu Matilainen +Date: Wed Sep 29 16:44:19 2010 +0300 + + Remove configuration for no longer existing db indexes + +commit 7d290779219f34dd53e11a2f2fa3b31b905c040c +Author: Panu Matilainen +Date: Wed Sep 29 16:15:04 2010 +0300 + + And now sighdrPut() can be buried back into signature.c + +commit a6899e30d992ee8fbdf13bdd93688d95db210320 +Author: Panu Matilainen +Date: Wed Sep 29 16:05:07 2010 +0300 + + Eliminate some redundancy in signature sanity checking + - Combine validation + actual insertion to header: rename validatePGPSig() + to putSignature() and move the details of parsing gpg generated + packet, validating them and finally inserting to header in there. + - The signature generation code is mostly now in reasonably sized + chunks, although there's room for further sanity here - the call + chain is ridiculously long. + +commit 1e63ce20bd9677f4a8f964364f9845ebff7b0c24 +Author: Panu Matilainen +Date: Wed Sep 29 15:39:10 2010 +0300 + + Simplify the signature generation somewhat + - makeGPGSignature() callers only used the numerous return values + for passing them into headerPut() through sighdrPut(), might as + well have makeGPGSignature() do that part. It can also decide + the necessary tags by itself, it just needs to know whether its + a header-only signature or legacy header+payload signature. + +commit f386109bcef9acdcc2ba984148f1c9050108caa0 +Author: Panu Matilainen +Date: Wed Sep 29 15:07:21 2010 +0300 + + Split the setup + running of gpg helper to a separate function + - No functional changes (supposedly...), just refactoring + makeGPGSignature() to smaller bits + +commit 69dd394982167aee847e48ac36bcf69cf70fc665 +Author: Panu Matilainen +Date: Wed Sep 29 13:37:26 2010 +0300 + + Eliminate the pointless switch-case from makeHDRSignature() + - If we can't trust our own code to supply appropriate tag here... + +commit 64058fc03fc31838e9bc1974997dcd56f9e3ba74 +Author: Panu Matilainen +Date: Wed Sep 29 13:26:46 2010 +0300 + + Start ripping through the hysterical signature generation tangle + - rpmGenSignature() only ever gets called with RPMSIGTAG_GPG, eliminate + the pointless argument. + - Eliminate the useless switch-case in rpmGenSignature(), nothing + ever directly called it with RPMSIGTAG_DSA/RSA, those got generated + as a side-effect of the RPMSIGTAG_GPG/PGP. So we just need to generate + the, duh, signature. + +commit bf5da95131699a4d970f3f77888c36508b78e502 +Author: Panu Matilainen +Date: Wed Sep 29 12:47:06 2010 +0300 + + Clean up makeHDRDigest() a bit + - No need to separately free this stuff (at least anymore), it + gets done on exit anyway. + +commit 9f79fc6e1a59990b5bfb42b7e2d96dfc6b3525ad +Author: Panu Matilainen +Date: Wed Sep 29 12:38:16 2010 +0300 + + Make rpmGenSignature() static + - Having it in signature.h is just wrong as it lives in a different + library now, and nothing outside rpmgensig.c needs it anymore. + Should've really been in commit 23a9d64ea40cfb526d0a12ba7350918dc335a305. + +commit bbbd7a4255ad3f9b14b6705ecb4c79c93ebe4f08 +Author: Panu Matilainen +Date: Wed Sep 29 13:09:31 2010 +0300 + + Whoops, couple of includes gone missing in the shuffle + +commit 9fec43d62950d543e280635530ad0efed6be50e1 +Author: Panu Matilainen +Date: Wed Sep 29 12:26:38 2010 +0300 + + Update translations to pick up stuff moving about etc + +commit 6d04be21eb6384bb56472fc774d9d6c4ba00b438 +Author: Panu Matilainen +Date: Wed Sep 29 12:01:49 2010 +0300 + + And finally split the signing support into a separate library + - For a library with just one public function this might seem like + a huge overkill but it permits cleanly separating dependencies: + nothing but package signing requires GnuPG. This lets the signing + support be stuffed into a separate package, avoiding having to + drag gpg in on every installation (signing isn't something everybody + does) and without having potentially broken interfaces in the API, + essentially solving RhBug:624585. + + It also liberates signing to use libraries that might be off-limits + for the core rpm, such as perhaps in the future doing signing + by ourselves with the help of something like gpgme (which requires + far too many things to drag into core rpm). + +commit 23a9d64ea40cfb526d0a12ba7350918dc335a305 +Author: Panu Matilainen +Date: Wed Sep 29 11:27:26 2010 +0300 + + Lift the signature generation in all its g(l)ory to rpmgensig.c + - signature.c is now entirely free of all actual signing activities, + which requires stuff that like gpg that nothing else needs. + +commit 9c254cd2251e799958158406d36bbe463b869650 +Author: Panu Matilainen +Date: Wed Sep 29 11:21:07 2010 +0300 + + Move sighdrPut() to inline function in signature.h + - Avoids having to expose this in the ABI in the next steps + +commit 8422a94ca990ccc3c60459687b3c3f25e43502b8 +Author: Panu Matilainen +Date: Wed Sep 29 10:48:59 2010 +0300 + + Split signature and digest generation to separate functions + - Similar in spirit to commit 825691afb2a8e2c0b3c6a031950f3c7855dc4c6e, + these have fairly little in common really. + - Change the function names to force breakage on users (these are exported + in ABI but not in public headers so "users" are internal uses in + practise): the automatically generated bits in signature header are + not signatures, but digests (even size is a checksum of sorts) ... + and fix the couple of internal uses. + +commit 825691afb2a8e2c0b3c6a031950f3c7855dc4c6e +Author: Panu Matilainen +Date: Wed Sep 29 10:29:18 2010 +0300 + + Split internal header signature and digest generation to separate functions + - These have fairly little in common in reality: one is always + automatically created on package generation, the other is optional + extra step requiring passphrases and all sorts of other things. + - The switch-cases are now fairly hysterical but leaving them for + later spring-clean to keep changes minimal for this step. + - No functional changes (supposedly ;) + +commit 17b433ce8c8613199e40b3b27e9ca5398a2027e3 +Author: Panu Matilainen +Date: Wed Sep 29 09:36:08 2010 +0300 + + Signer id is not sufficient measure for signature sameness (RhBug:608608) + - We used to only check whether signer ID matches for determining whether + a package needs resigning or can it be skipped, but this is nowhere + near sufficient as the same ID can be used with different algorithms + and even packet version etc. Compare all/most (?) relevant parameters + for signature identicality. + +commit adbd484372cb38aca5aca3c6dba3b2ca9cae93d1 +Author: Panu Matilainen +Date: Tue Sep 28 23:06:29 2010 +0300 + + Make RPMFILE_STATE_MISSING part of the rpmfileState enum + - Shuts up couple of "not in enum" complaints from gcc, and actually + "no state" is a perfectly valid state for one case: non-installed + packages (so remove the "not valid" comment from formats.c) + - OTOH, this created a new complaint for not handled case in a switch. + Oh well, fix it up too... + +commit ac1e1ff57256022b2e4ab091aa5743b92f0a6131 +Author: Panu Matilainen +Date: Tue Sep 28 22:52:49 2010 +0300 + + Fix a rpmTag/rpmSigTag mismatch by using the more appropriate type + - This wouldn't make c++ any happier as the mismatch now occurs + with headerGet() and friends instead of the comparison, but will do for now. + +commit da2c5fd2cf3b357ba06e786e8aa96a2b67e52eb0 +Author: Panu Matilainen +Date: Tue Sep 28 22:47:44 2010 +0300 + + Eliminate silly leftover switch-case from _tagType() + - Anybody calling rpmTagGetType() with RPMDBI_PACKAGES deserves to + wait for the search to figure there's no such thing and return + RPM_NULL_TYPE like with the switch case. Eliminates another + enum comparison mismatch warning. + +commit 8274b41ee6cc63ed7e67e242a266c5f1d2e8d44c +Author: Panu Matilainen +Date: Tue Sep 28 22:35:10 2010 +0300 + + Remove leftover trap for RPMRC_FAIL errors where none should be seen + - Been 2.5 years now without seeing that trap trigger, should be safe + to remove now ... to silence a warning about comparing to non-existent + enumeration value. + +commit 1b46014fd4e14f6ff52e3efe1a430ab4b4c7c880 +Author: Panu Matilainen +Date: Tue Sep 28 22:16:33 2010 +0300 + + Wrong enum type used for psm goal, gcc 4.5 complains (which is nice) + +commit cc5959a57df96f2c51448b3970237918a6dd281c +Author: Panu Matilainen +Date: Tue Sep 28 22:13:25 2010 +0300 + + Whoops, wrong enum type used for pubkey algorithm + - dumb thinko/typo from commit 0e143cfe9f11abc42733d2265dc6d61cb716e5a4 + +commit e237b2d6ef271bbdbc234aa7b62a3b1f28b6bb24 +Author: Panu Matilainen +Date: Tue Sep 28 16:33:17 2010 +0300 + + Eliminate %_signature from man pages too + +commit 8f14d6455a99802ae43e14a6820ebbc1e38aa46a +Author: Panu Matilainen +Date: Tue Sep 28 16:28:21 2010 +0300 + + Rip the useless %_signature macro and everything around it + +commit c0aad81e9b17afcbea4008485d354673495eb148 +Author: Panu Matilainen +Date: Tue Sep 28 16:09:30 2010 +0300 + + Fix the broken existing signature checking on add/resign (RhBug:488953) + - The previously used %_signature macro for determining the generated + signature type is utterly useless as gpg can generate both DSA and RSA + signatures just fine. Generate the new signature and compare with the + previous one in the header (if any) for real results. This is ugly + hackery around limitations in the lower level signature functions but + to keep this remotely backportable for now... + +commit e29313061313a9e29d38a005f1b5f5bdc47ccd84 +Author: Panu Matilainen +Date: Tue Sep 28 14:55:29 2010 +0300 + + Decide header sigtag based on what was actually written + - makeGPGSignature() figures the signature type by parsing the + created signature, use that instead of the rather bogus tag + based on %_signature macro value passed from the cli level. + +commit 131d082aab5bac6ca07fe513df00314261248bae +Author: Panu Matilainen +Date: Mon Sep 27 17:15:15 2010 +0300 + + Handle non-terminated substrings centrally in expandMacro() + - expandMacro() is big and ugly already, but handling the non-terminated + substrings there once and for all avoids having to ping-pong recurse + through couple of helpers to get there. + +commit b1dbdf50af3172ad92ca33a4e6908b63158cba00 +Author: Panu Matilainen +Date: Mon Sep 27 16:32:15 2010 +0300 + + Dynamic expansion buffer reallocation for lua macros too + +commit 800a1daa2305c9df83bb1024c17dc674e8fd5d54 +Author: Panu Matilainen +Date: Mon Sep 27 16:22:38 2010 +0300 + + Whoops, fix typo/thinko from commit dc258bac41e32e754b15a413d844160f34b6a12e + +commit 46f32d25ce813ffd4df95605a3f745615ec90faa +Author: Panu Matilainen +Date: Mon Sep 27 16:03:56 2010 +0300 + + Eliminate the internal in-place-expansion buffer limitation + - Return the dynamically allocated expansion buffer to callers from + expandU(), except using a slightly less cryptic expandThis() name + for it now. Also deal with non-terminated strings centrally in + expandThis() instead of doing alloc + copy to terminate in every caller. + +commit d8777387db3128ea5f4f5b211d2aa54736f7f717 +Author: Panu Matilainen +Date: Mon Sep 27 14:22:56 2010 +0300 + + Simplify / sanitize expandU() a bit + - Instead of saving and restoring the bits we'll mess with, just + make a temporary expansion state struct with non-buffer state + copied from "parent". + +commit 49f99b86566bf71e1ebd8be4da29953aaf042b79 +Author: Panu Matilainen +Date: Mon Sep 27 14:05:37 2010 +0300 + + Dynamically reallocate macro expansion buffer (ticket #45) + - Eliminate the underlying limitation of macro expansion limit by + growing the buffer as needed when adding characters to it. This + doesn't fix the entire issue yet however: expandU() and expandMacros() + are still limited to caller-specified buffer size, and output + from lua-macros isn't dynamically resized. One step at a time... + +commit 61a3fc45234b532bf609be295c551b7bc3822e3f +Author: Panu Matilainen +Date: Mon Sep 27 13:05:37 2010 +0300 + + Let expandMacro() allocate its own buffer + - More pre-requisites for dynamic buffer resizing, callers have no + clue how much expandMacro() is going to need. + +commit dc258bac41e32e754b15a413d844160f34b6a12e +Author: Panu Matilainen +Date: Mon Sep 27 12:19:13 2010 +0300 + + Track current expansion point via distance to buffer start + - Supposedly no functional changes, just paving way for dynamic + buffer resizing which is impossible when accessing pointers directly. + +commit 568ba0d2421f89f7f98531b81ba9fe783dbdc749 +Author: Panu Matilainen +Date: Fri Sep 24 12:48:15 2010 +0300 + + Push the macro buffer size limit down by one level + - Turn expandMacros() into a wrapper around internal doExpandMacros() + which returns the expanded string in a newly allocated buffer, use + the internal version for rpmExpand() too. + +commit a931202422b38cbac52aeb507572a597ddee9106 +Author: Panu Matilainen +Date: Mon Sep 27 10:02:17 2010 +0300 + + Eliminate unused spec field from macro expansion state struct + +commit 8082eb48dbb9ab39826b5e1be9b764b0940a9a79 +Author: Panu Matilainen +Date: Mon Sep 27 09:33:35 2010 +0300 + + Avoid calloc() in macro findEntry() + - It's just the macro name we're grabbing here, that ought to fit + on stack comfortably enough. + +commit ebc4ceaaeb8bb59019f4635471b28eb5f3eaaaa6 +Author: Panu Matilainen +Date: Fri Sep 24 10:49:19 2010 +0300 + + Avoid unnecessary round-trip through expandT() where possible + - In the cases where expandT() was called with strlen(source) we can + now just bypass it and call expandMacro() directly, avoiding an + unnecessary string copy. + +commit ccba5236a05b5680b93e12f24c3d2e14c5385b7d +Author: Panu Matilainen +Date: Fri Sep 24 10:42:38 2010 +0300 + + Use function arguments to pass, duh, arguments into functions. Duh. + - No functional changes, just eliminating mindless save-and-restore + ping-pong through macro expansion state struct. + +commit 4c41013eeb43ccdcef1be37274d15721ec19799d +Author: Jindrich Novy +Date: Sun Sep 26 18:45:34 2010 +0200 + + Fix segfault in rpmdeps (RhBug:637357) + +commit f7e058a01ea288d1c6810562b1238c05bfaa30bc +Author: Panu Matilainen +Date: Wed Sep 22 16:37:12 2010 +0300 + + Eliminate separate fileIndexEntry from rpmal + - This is exactly the same structure as availableIndexEntry, no need + for a different struct for it. + +commit 447e80f96a26ee4e79cdca87daa38e93c655cc2f +Author: Panu Matilainen +Date: Wed Sep 22 14:28:32 2010 +0300 + + Use headerNextTag() for header format iteration + - Doesn't really win anything performance-wise but makes the code nicer + +commit b4111d5123606b5999e932e57578bace37b4924a +Author: Panu Matilainen +Date: Wed Sep 22 09:46:25 2010 +0300 + + Use HEADER_MAGIC_FOO enums instead of 0/1 in python header code + +commit 79301695cec6a2e98b42291c39904b721020a0e5 +Author: Panu Matilainen +Date: Wed Sep 22 09:19:07 2010 +0300 + + Remove double const in urlstring struct + +commit 5d5cb6dce7cced15f01bc67948f7875c4dac7016 +Author: Panu Matilainen +Date: Wed Sep 22 09:14:12 2010 +0300 + + Make rpmsqAction compatible to sa_sigaction + +commit 75a53aa616a3ec6d00a01186d266a4757e69f3c6 +Author: Hajime Taira +Date: Tue Sep 21 22:27:34 2010 +0000 + + l10n: Updated Japanese (ja) translation to 100% + + New status: 732 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 35a170629109568e6b4edcd5ab0b7a428a8be585 +Author: Panu Matilainen +Date: Tue Sep 21 16:57:08 2010 +0300 + + Remove double const on rpmrc tables + +commit 072ea21699e7747974ee73f6cbc10b3e8f927a53 +Author: Panu Matilainen +Date: Tue Sep 21 16:43:46 2010 +0300 + + Fix rpmRC/int return mismatch by counting errors from handleOneTrigger + +commit 2425a002dc46ed3d510ff16ba3fcaa07dc8f8931 +Author: Panu Matilainen +Date: Tue Sep 21 16:39:59 2010 +0300 + + Use rpmTag as psm scriptTag for type correctness + +commit 2508fedea0167f582ce1b91b307621f997c981ba +Author: Panu Matilainen +Date: Tue Sep 21 16:35:10 2010 +0300 + + Default to the common case wrt dir name/index tags, not relocation + - Avoids an unnecessary extra initialization in the common case, and + also avoids int/enum mismatch from initializing to 0. + +commit b11c895bdd77ec87618079ea5037610e68599e07 +Author: Panu Matilainen +Date: Tue Sep 21 16:28:34 2010 +0300 + + Move PTOK type enum out of the sprintfToken struct + - While legal in C++, the enum and its values are only visible within + the scope it was declared in, making it invisible to the rest of + the program. + +commit af57879ea050c7258c92a6aef840dd5da51ccbd3 +Author: Panu Matilainen +Date: Tue Sep 21 16:18:22 2010 +0300 + + Remove bunch of double consts in librpmbuild + +commit 312ceee39240c321a0cb8f1cc7aad939477b9699 +Author: Panu Matilainen +Date: Tue Sep 21 15:55:02 2010 +0300 + + Initialize nametag to RPMTAG_NOT_FOUND in parseRCPOT() + - Doesn't matter what the value is, the switch (somewhat hysterically) + makes it default to RPMTAG_REQUIRENAME in unknown cases anyway + +commit add59e49eab87e98cf3ef6bedb8ce0c251199376 +Author: Panu Matilainen +Date: Tue Sep 21 15:53:38 2010 +0300 + + Const pedantry: taropts only ever points to string constants + +commit 7723fef2646e0670fc782ee5248317bb6d8f9383 +Author: Panu Matilainen +Date: Tue Sep 21 15:38:41 2010 +0300 + + Move expression type enum out of the struct + - While legal in C++, the enum and its values are only visible within + the scope it was declared in, making it invisible to the rest of + the program. + +commit 4b06c4995d6acc8352224618361c4b773b3a70a7 +Author: Panu Matilainen +Date: Tue Sep 21 15:25:53 2010 +0300 + + Use actual enum values in tag table sentinel to avoid int/enum mismatch + - tagLoadIndex() looks for NULL in tag name, the other values aren't + looked at so it doesn't matter... + +commit 8b7ff12b4e7c3a6e824f6b4c5f5541eb572d9f39 +Author: Panu Matilainen +Date: Tue Sep 21 15:21:12 2010 +0300 + + Add "c++ protection" to (hopefully) all of our internal headers + +commit 662c09717ae35a6d41b0b2d7250e1d59670146de +Author: Panu Matilainen +Date: Tue Sep 21 15:17:46 2010 +0300 + + Missing c++ end marker in rpmdb_internal.h, oops + +commit 7d0790d2fe926854080d26ff9fc72a16bdd44303 +Author: Panu Matilainen +Date: Tue Sep 21 15:13:02 2010 +0300 + + Add "C++ protection" to the public rpmutil.h header, oops... + +commit df960a66cf67fc7ad98bac7859445b10d7a0f0d4 +Author: Panu Matilainen +Date: Tue Sep 21 15:11:04 2010 +0300 + + void stepping on toes of relatives, part 5 + - Eliminate remaining (hopefully) C++ reserved keywords in rpmbuild cli tool + +commit 0e4d3de13191647c1dfb8f6608233a3feef437cf +Author: Panu Matilainen +Date: Tue Sep 21 15:08:08 2010 +0300 + + Avoid stepping on toes of relatives, part 4 + - Eliminate remaining (hopefully) C++ reserved keywords in librpm + +commit c60bf8f766e7c2f836ce18547486f8a624f7789b +Author: Panu Matilainen +Date: Tue Sep 21 15:07:08 2010 +0300 + + Avoid stepping on toes of relatives, part 3 + - Eliminate remaining (hopefully) C++ reserved keywords in librpmbuild + +commit 7e53dc6ee11a2af50dc8d2c3cb132e7e69aaff18 +Author: Panu Matilainen +Date: Tue Sep 21 15:02:43 2010 +0300 + + Avoid stepping on toes of relatives, part 2 + - Eliminate uses of "class" which is a reserved keyword in C++ + +commit b9cd5a5e746d1bb0da5d6ccef8d83e7867569168 +Author: Panu Matilainen +Date: Tue Sep 21 14:55:03 2010 +0300 + + Avoid stepping on toes of relatives, part 1 + - Eliminate uses of "this" which is a reserved keyword in C++ + +commit 5d79b79c1b2d33196073c9e7b841b52816d46532 +Author: Panu Matilainen +Date: Tue Sep 21 14:50:40 2010 +0300 + + Queryformat string sanity in queryArgCallback() + - Use our string helper functions instead of manual length calculations + and allocations + +commit 6255825811f9a5ebdf4d7c835abaec12eef2555b +Author: Panu Matilainen +Date: Tue Sep 21 14:49:36 2010 +0300 + + Use rasprintf() instead of manual alloc + sprintf() + +commit 45159a70605581a6f929c37aeb7a1a5640133484 +Author: Panu Matilainen +Date: Tue Sep 21 14:47:46 2010 +0300 + + Rename tagtbl.c -> tagtbl.C + - This isn't a regular source file: its not compiled as such but only + included from tagname.c. Rename to disambiguate, and make it similar + to rpmhash.[CH] + +commit 6ae1fae20fdeb1f1b967c6b4fa4d7c34d4ff4064 +Author: Panu Matilainen +Date: Tue Sep 21 14:47:14 2010 +0300 + + Use the macro allocator variants within librpm* + +commit 67a3e424ed77d26fb511e4a8fc3770f270cb8f56 +Author: Panu Matilainen +Date: Tue Sep 21 14:33:57 2010 +0300 + + Use _free() instead of rfree() where "return value" is assigned + +commit e3e69b44e53c8631004a9624dc39748340316673 +Author: Panu Matilainen +Date: Tue Sep 21 14:26:29 2010 +0300 + + Return explicit NULL from various fooFree() functions everywhere + +commit a43c15eadfbf18dd4df8d21415f1ef1a7c11f432 +Author: Panu Matilainen +Date: Tue Sep 21 14:22:29 2010 +0300 + + Return typed pointers from rpmluaFree() and rpmluavFree() + +commit ee6c33c9c27406ae7fa90d7ea09b7bf1667c30db +Author: Panu Matilainen +Date: Tue Sep 21 14:19:11 2010 +0300 + + Return typed pointer from headerformat cacheFree() + +commit 96f0bd8c5076a4bbc3732c2874fd57fd6d4474bc +Author: Panu Matilainen +Date: Tue Sep 21 14:16:23 2010 +0300 + + Return typed pointer from freeHardLink() + +commit dec8d8de3096bd549c5d4ce34cb8032bc1461c29 +Author: Panu Matilainen +Date: Tue Sep 21 14:14:29 2010 +0300 + + Use typed instead of void pointer for fsm dnl iterator + - Passing a void pointer for an internal helper function which + casts to the destination is just ... pfff. + +commit 2be8dd317c56620165249655d7a33d8b08f3851d +Author: Panu Matilainen +Date: Tue Sep 21 14:12:55 2010 +0300 + + Use typed instead of void pointer for fsm map iterator + - Passing a void pointer for an internal helper function which + casts to the destination is just ... pfff. + +commit b50c537b5c7ce826fbbb8587c4031ed39bf10a29 +Author: Panu Matilainen +Date: Tue Sep 21 14:04:44 2010 +0300 + + Adjust pgpMpiSet() dest type to match actual use + +commit 0ebc7a4e394a2173bc9cdefe57a35e5de25a501e +Author: Panu Matilainen +Date: Tue Sep 21 14:03:43 2010 +0300 + + Error string is const char *, not void pointer + +commit 0ccbd8fe6e20eb399a7c22d9560eac6e07f66957 +Author: Panu Matilainen +Date: Tue Sep 21 13:43:48 2010 +0300 + + Adjust internal io read, write and digest update to take buf as void pointer + - This matches ffread() and read() much better, avoiding pile of casts. + - By some stroke of genious, glibc cookie interfaces disagree with the + other file stream protos by using char * for buf. Argh. Add explicit + cast for the schizophrenia. + +commit a82633c2a3dd15d00d4c076d6527581aa5dcf57d +Author: Panu Matilainen +Date: Tue Sep 21 13:41:25 2010 +0300 + + Avoid using void pointer when we have a real type for the memfail function + +commit 892bf4eb8637fae5e2da2012f5257d836d7a61d8 +Author: Panu Matilainen +Date: Tue Sep 21 13:39:25 2010 +0300 + + Move the RPMVERSION constant among its friends in depends.c + - Doesn't make any difference, just grouping similar goo in one spot. + +commit 2f54c245dd6a206e3e1e26a408c5cfc4e543358f +Author: Panu Matilainen +Date: Tue Sep 21 13:29:01 2010 +0300 + + strrchr() family considered harmful, part 666 + - strrchr() was silently casting away a const on a string coming + from rpmtdGetString(). Add an explicit cast and warning/fixme commentary + to the compressFilelist() hack which modifies (and then restores) the + const string. + +commit 42a523a49190abb0ba48d7b24caf1037103408d5 +Author: Panu Matilainen +Date: Tue Sep 21 13:14:20 2010 +0300 + + strstr() considered harmful, part 541 + - buf isn't const here, it's modified through pointer acquired through + strstr() which silently casts away the const. + +commit 5eda18510905ebeb09f1126195d6bb563bd2483a +Author: Panu Matilainen +Date: Tue Sep 21 13:11:56 2010 +0300 + + Use RPMTAG_NOT_FOUND instead of for "invalid tag" value + +commit cb13c4398609bb8e9d7a6750075d79d1662a26e1 +Author: Panu Matilainen +Date: Tue Sep 21 13:02:53 2010 +0300 + + Move RPMTAG_NOT_FOUND into rpmTag enumeration + - Permits presenting "invalid tag" cleanly via the rpmTag enum type + on function returns etc + +commit e639f57d436f9f858dfdff79c2d8c868d935db79 +Author: Panu Matilainen +Date: Tue Sep 21 12:49:46 2010 +0300 + + Move rpmHeaderTagFunc() a bit to avoid unnecessary forward declaration + +commit d4879f3e6e2ab65e1ad76869896cf407248bc993 +Author: Panu Matilainen +Date: Tue Sep 21 12:45:53 2010 +0300 + + Move format extension table a bit to avoid unnecessary forward declaration + +commit be488096e0f011a42d4dd46fa7c3769054158383 +Author: Panu Matilainen +Date: Tue Sep 21 12:40:33 2010 +0300 + + Use the new tag type/return type getters everywhere + - Instead of masking and bitfiddling all over the place, use the + new getters to get the exact (enum) type directly. rpmTagGetType() + is now unused within rpm but leaving around for backwards compatibility + +commit bf4a383892acc8a5bb6bbf45e87ac96674a3ecd1 +Author: Panu Matilainen +Date: Tue Sep 21 12:30:05 2010 +0300 + + Add yet more rpmTagTagTagFoo() functions + - Two stupid new getters: one for the real tag type, and another + for the return type. rpmTagGetType() returns both requiring bitmasking + all over the place + +commit 6c02709c1d1de915a8faa67f0b0156757b5bbb3d +Author: Panu Matilainen +Date: Tue Sep 21 12:27:27 2010 +0300 + + Split tag type and return type to separate fields in tag table + - rpmTagType is a pure enum really, avoid mixing it up unnecessarily + +commit 6402ce41b86eab1f2c1b2e09b24982e5d559b171 +Author: Panu Matilainen +Date: Tue Sep 21 12:26:23 2010 +0300 + + Use the enum name instead of value when generating the tagtable source + - This makes the table populated with actual enums instead of the + numbers they present + +commit b0d62148a9090fb442fc7bf993f5ef3253c4b0fe +Author: Panu Matilainen +Date: Tue Sep 21 12:23:18 2010 +0300 + + Use proper types for tag and format extension functions + - Stuff the tag prototypes into misc.h in lack of better place + - Actually use the headerTagFooFunction prototypes instead of void * + +commit 147f41bcc150d674ad86c714208c9a1f82218683 +Author: Panu Matilainen +Date: Tue Sep 21 12:15:44 2010 +0300 + + Differentiate between the possible te types and iterator selector values + - Transaction elements can only be of one type (hence the enum), + but the transaction set iteration permits selecting more than + one. Add a new typedef dummy for this purpose only. + +commit d712fcb5c1d56b5bdf26f378ce6b3273a9ada779 +Author: Panu Matilainen +Date: Tue Sep 21 12:07:27 2010 +0300 + + Change fdstat functions to take fdOpx enum to fix int/enum mismatches + +commit a9e039edb442eb4b0060df7ee533415735aa5069 +Author: Panu Matilainen +Date: Tue Sep 21 12:06:24 2010 +0300 + + Fix up silly int/enum and type vs variable name mixups in urlPath() + +commit 99b44e35e5ed48783f8b3e2533b240192848d86c +Author: Panu Matilainen +Date: Tue Sep 21 11:58:08 2010 +0300 + + Use actual rpmTags in place of the old HEADER_FOO defines everywhere + +commit 42bcdfd52788ee979bd0a0f7e137b6d85fc74fcc +Author: Panu Matilainen +Date: Tue Sep 21 11:40:49 2010 +0300 + + Rename specdFlags to remove unnecessary type vs variable name confusion + +commit 8f7874c1933fc1dff36685d13abfedda56ca9ab7 +Author: Panu Matilainen +Date: Tue Sep 21 11:37:21 2010 +0300 + + Fix up bunch of silly int vs rpmRC return code mismatches + +commit 2fb15a5443c6a1461a53309d3d4ace598996d8b2 +Author: Panu Matilainen +Date: Tue Sep 21 11:10:14 2010 +0300 + + Stop abusing enum typedefs for bitfield types + - Enums are fine for defining the bitfield flags, but the bitfield + itself is not an enumeration. Add a separate typedef on "rpmFlags" + type (presenting a bitfield of flags) for all of these. Compilers + hardly care, but the typedefs give a nice visual clue for + us humans using these flags far away from ho^H^H definitions. + +commit b9168b67355d2da8f62f880adfce37c0e38720d1 +Author: Panu Matilainen +Date: Fri Sep 17 09:03:34 2010 +0300 + + Expel Tarjan from his nest + - Nested functions are a gcc-extension and very non-portable. Refactor + to eliminate the nesting by passing the "global" variables via + a struct from detectSCCs(). + +commit 8abe568e0092bb6301baa5cb49a510a9fb4979ad +Author: Panu Matilainen +Date: Wed Sep 15 11:54:11 2010 +0300 + + Dont check source packages against installed obsoletes + - Regression originating from somewhere around commit + 781cfed0fd9c9651a2dd49175a85536f0b34b95b, obsoletes from installed + packages were matched against the package being built. + Building obsoleted packages needs to be possible, they could be for + an older distro for example. + +commit 3c6fed5347b2646743204c009603db98c333ea90 +Author: Panu Matilainen +Date: Tue Sep 14 09:44:06 2010 +0300 + + Plug memleak from rpmSpecCheckDeps() + - We need to call rpmtsEmpty(), not rpmtsClean() to purge the + transaction elements in the set... + +commit 8246557b1ea89c8d6237892c77b6b5cb637a1e2d +Author: Héctor Daniel Cabrera +Date: Mon Sep 13 15:33:00 2010 +0000 + + l10n: Updated Spanish (Castilian) (es) translation to 100% + + New status: 744 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 54887fca04c350332578b673334f9df8fab02e38 +Author: Taylon Silmer +Date: Mon Sep 13 13:30:27 2010 +0000 + + l10n: Updated Portuguese (Brazilian) (pt_BR) translation to 100% + + New status: 732 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 272674bebea2022c6a91c85612b4e4db51737e25 +Author: Panu Matilainen +Date: Mon Sep 13 15:03:18 2010 +0300 + + Replace dbi walking copy-slop with an internal helper function + +commit b0338657a85ae9e1c77d58b42363d23dde012550 +Author: Panu Matilainen +Date: Mon Sep 13 14:16:44 2010 +0300 + + Rearrange newRpmdb() a bit for clarity + - Avoid allocating the structure until we know its ok. + +commit b6d8d0e7ed7989ce5e2d4d8133d81adc4072440c +Author: Panu Matilainen +Date: Mon Sep 13 14:05:02 2010 +0300 + + Eliminate broken "can't happen" early return + - Opening RPMDBI_PACKAGES should indeed never fail, but if it does + this would return way too early, leaking memory and references + left and right. Also the dbi is rarely used for anything, only + the rewrite mode used by markReplacedFiles() needs it, dbi + is actually unused on dbiCclose() + +commit 5573faf301bec875a7b2c9c706ebb2b15cfbde0a +Author: Panu Matilainen +Date: Mon Sep 13 13:46:15 2010 +0300 + + Rearrange rpmdbInitIterator() a bit for clarity + - Avoid allocating the iterator until we know it's not an error. + Doing the chaining earlier doesn't help anything here as the + cursor used here wasn't linked to the mi at this point, and avoids + having to free up partially initialized structure in case of errors. + - Group the mi initialization to make the actual initialization + stand out from the (unnecessary) zeroing of the calloc()'ed struct. + +commit 92c12d1a8ef11106df69b07ca357c560e07e9efd +Author: Panu Matilainen +Date: Mon Sep 13 13:08:33 2010 +0300 + + Eliminate all fooUnlink() functions out of the API + - These are internal helpers only, all refcount users need to use + fooFree() or similar for correct operation. Add fwd declarations + where necessary to avoid moving code around unnecessarily. + - We could add these back later as aliases to fooFree() but for now, + just get them out of the way. + +commit e82ab8f81dcbfb94d94d4a5c8cb7813919d7f460 +Author: Panu Matilainen +Date: Mon Sep 13 13:06:31 2010 +0300 + + Unify header creation between headerNew() and headerLoad() + - Use internal helper instead of copy-slop code to allocate + init + the structure + +commit 511beb375763f84b04ca555c3c9df4c67738aee2 +Author: Panu Matilainen +Date: Mon Sep 13 13:05:55 2010 +0300 + + Fix some broken fooUnlink() usages + - unreferencing should always go through fooFree() which does + the real refcounting and frees when references go out + +commit 6ad4cbdfb52c4ea1b9f30f9580084dc3c94c5b60 +Author: Panu Matilainen +Date: Mon Sep 13 11:25:24 2010 +0300 + + Lift header verifying out of rpmdbNextIterator() + - No functional changes, just splicing up the ugly function + +commit 8e823cf7f35d6b5198c28099d36975c64bce9536 +Author: Panu Matilainen +Date: Mon Sep 13 10:44:14 2010 +0300 + + Minor optimizations on DBT initializations + - Move the DBT key+data to local scope where possible, only bother + zeroing them if they're actually going to be accessed. + +commit d4f3ed7c8287eea54d568c32c1c223f84fe2a989 +Author: Panu Matilainen +Date: Mon Sep 13 10:27:42 2010 +0300 + + ...and now eliminate the unnecessary pointer variables + - Also check for NULL keyp in rpmdbExtendIterator() early to + avoid unnecessary zeroing + potential segfault from strlen(NULL) + +commit 4b92856551c5cc0af6a285a5e7372e0de5311cd7 +Author: Panu Matilainen +Date: Mon Sep 13 10:16:50 2010 +0300 + + Eliminate mi_key and mi_data from match iterator structure + - These are not used to hold iterator state but just for temporary + storage. Temporary data belongs to temporary variables. + - Assimilate rpmdbGrowIterator() into rpmdbExtendIterator() which + was just (ab)using mi_key for passing arguments into rpmdbGrowIterator() + and pass as argument instead. + - Declare local structs + pointers to them for this step to keep changes + minimal and "obvious" + +commit 5a1d5ddc84fdfca1f2bbfa0bd52976d338882e42 +Author: Panu Matilainen +Date: Wed Sep 8 13:52:30 2010 +0300 + + Add test for manifest query in testsuite + +commit 18d1d9fc7adc98bd5429a9e11e53195eec9b52a9 +Author: Panu Matilainen +Date: Wed Sep 8 13:41:03 2010 +0300 + + Fix _USE_LIBIO test + - Commit 05b2d979e8097d648f91c773f2535a1f6013cb79 caused the + _USE_LIBIO test in rpmio.c to always fail as wasn't included + yet at the time of the check, causing silent fallback to not + using libio even if actually available. Which in turn revealed + funky other little bugs, addressed in commits + d960e8c18764f7206ad723963f407e960dfb8ad9 and + be3c34dd15814d70a410b6fd646a2be7de14a1b5. Ptooey. + +commit d960e8c18764f7206ad723963f407e960dfb8ad9 +Author: Panu Matilainen +Date: Wed Sep 8 13:31:25 2010 +0300 + + Differentiate between IO-errors and non-package "error" in rpmgi foo + - rpmgiLoadReadHeader() tested errno, but this isn't realiable: + rpmgiReadHeader() didn't differentiate between IO and other errors + properly so errno would be tested even when no errors (other than + not being a header) were present. This could be pretty much whatever + when no IO errors occurred in rpmgiReadHeader() but the file just + wasn't a header. With libio errno was typically EBADF, causing the + remaining code to execute, but without libio this happened to be + ENOENTRY, causing a silent failure on manifest query. + - This junk needs to die, really. + +commit be3c34dd15814d70a410b6fd646a2be7de14a1b5 +Author: Panu Matilainen +Date: Wed Sep 8 13:01:57 2010 +0300 + + Fix rpmReadPackageManifest() on non-fpio FD when libio isn't available + - With libio, fdGetFILE() works on any io-type, but that's not the + case when libio isn't available. Using fdopen() makes it work + on both. + +commit 1607bc390825d5b48f18aafceade7516a4106866 +Author: Panu Matilainen +Date: Tue Sep 7 23:15:08 2010 +0300 + + Turn rpmQueryVerify() into query iterator initializer + - Eliminates quite a bunch of redundant error code return hoop-jumping + and makes the iterator init + frees nicely paired all together + inside rpmcliArgIter(). + +commit 33d79b470e456debc130230bc966b07d9713ad93 +Author: Panu Matilainen +Date: Tue Sep 7 23:04:12 2010 +0300 + + Lift the remaining oddball case out of rpmQueryVerify() + - specfile queries are handled differently from everything else, + handle the special case in rpmcliArgIter() + +commit d2eb366a9040690e95b632b9318d7b95788e31d8 +Author: Panu Matilainen +Date: Tue Sep 7 22:52:26 2010 +0300 + + Eliminate qva_mi and qva_gi from rpmQVKArguments + - These are internal only stuff and have no business being exported + in the API. Pass the iterators around in, duh, arguments as needed. + +commit 50d70b056e5d97f17434d0456643d3c4ca34c4b6 +Author: Panu Matilainen +Date: Tue Sep 7 22:39:14 2010 +0300 + + Eliminate some dozen redundant rpmcliShowMatches() calls + - Simply call it once at the end, its common for all the cases + +commit 03bc9f0f323a1ef7e36d800c7756917203d26b93 +Author: Panu Matilainen +Date: Tue Sep 7 22:22:25 2010 +0300 + + Cut some extra twists from the query maze + - RPMQV_ALL and RPMQV_RPM do nothing but call rpmcli/giShowMatches() + in rpmQueryVerify(), call them directly from rpmcliArgIter() instead + - Make iterator allocation + deallocation symmetric: both + rpmcliArgIter() and rpmQueryVerify() now free what they alloced, + rpmfooShowMatches() is a weird place for freeing + +commit 029615e1f688854db7184ee690cae244f7cee8e6 +Author: Panu Matilainen +Date: Tue Sep 7 22:02:53 2010 +0300 + + Eliminate rpmQueryVerify() from librpm API + - This is an inconsistent oddball interface which only works for + limited query types, "cli" level API users are better off calling + rpmcliQuery() / rpmcliArgIter() instead + +commit b71818080b7481fbc4ca95bd95eb7d80c67a7cb4 +Author: Panu Matilainen +Date: Wed Sep 8 07:48:04 2010 +0300 + + Urk, mixed up in branches and wrong stuff getting pushed. Revert. + - This reverts commits 9ac127c35272772e0fc862608f4bde9748862b3d and + 7abc26e300afd4da71f220db496f813571a37f5a + +commit 7abc26e300afd4da71f220db496f813571a37f5a +Author: Panu Matilainen +Date: Tue Sep 7 21:32:17 2010 +0300 + + Beat a little bit of sense into rpmQueryVerify() + - Single point of exit, assume failure + - Replace about a dozen rpmcliShowMatches() calls with one at the + bottom. + +commit 9ac127c35272772e0fc862608f4bde9748862b3d +Author: Panu Matilainen +Date: Tue Sep 7 21:13:34 2010 +0300 + + Mark ts argument unused in bunch of query APIs + - The ts argument used to be necessary and used for rpmfiNew() and spec + query but not any more... + +commit 339f31face44d877c3a6e2fc780e740e7e236eae +Author: Panu Matilainen +Date: Tue Sep 7 20:44:59 2010 +0300 + + Eliminate rpmcliShowMatches() from librpm API + - This is really just an internal helper which only even works with + limited set of queries. + +commit 7562d2743baf27fda1b6dee22d0574cd265907b7 +Author: Panu Matilainen +Date: Tue Sep 7 11:14:56 2010 +0300 + + Add bunch of verification tests to the test suite + - Basic tests for dependency, file and verifyscript error + success + behavior. + - Using lua for verifyscript to avoid issues with empty test-root + +commit fbe701e7fe639da5a8b902cf4f358728db68cb3d +Author: Panu Matilainen +Date: Tue Sep 7 09:49:29 2010 +0300 + + Fix error code on verify scriptlet failure + - Verify scriptlet failures were only logged but didn't reflect error + codes as they were considered "warn only" along with most others + +commit 7defdceb1d320aad535654e8ba25b618d079451c +Author: Piotr DrÄ…g +Date: Sat Sep 4 06:49:44 2010 +0000 + + l10n: Updated Polish (pl) translation to 100% + + New status: 744 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 890a4339f95734b6ffa02bda515a02104fd7e267 +Author: Panu Matilainen +Date: Fri Sep 3 17:19:04 2010 +0300 + + And yet another translation update to pick up stuff moving around + +commit 9f68c7958f173a313d53abb4028164c37b6abf68 +Author: Panu Matilainen +Date: Fri Sep 3 16:57:50 2010 +0300 + + Rip IAM_RPMDB, ie --initdb, --rebuilddb etc modes out of rpmqv.c and librpm + - Add popt exec aliases to rpmdb for backwards compatibility + - Change test-suite to use 'rpmdb --initdb' instead of 'rpm --initdb' + as popt exec aliases with absolute paths dont play very well + with the test-suite, duh... + +commit ada4dd18d590dc8eff7eac1a3f0f57c7243da539 +Author: Panu Matilainen +Date: Fri Sep 3 16:48:21 2010 +0300 + + Add a brand new rpmdb utility for rpmdb maintenance (dejavu again) + - rpmdb maintenance only requires privileges on the rpmdb directory, + not elsewhere on the system. Splitting to separate tool allows + finer grained SELinux policies and makes adding new db-specific + switches saner. + +commit 3cbda9c03f1feb872397f4afe75988b20746f403 +Author: Panu Matilainen +Date: Fri Sep 3 16:31:13 2010 +0300 + + Rip IAM_RPMK, ie --import and --checksig modes out of rpmqv.c + librpm + - Add popt exec aliases to rpmkeys for backwards compatibility + +commit dfbaa77152ccf98524c4f27afe85d32e6f690522 +Author: Panu Matilainen +Date: Fri Sep 3 16:09:47 2010 +0300 + + Add a brand new rpmkeys utility for keyring operations + - Keyring operations (adding/viewing/removing keys and verifying + packages against a given keyring) are different from main rpm operations + in that they only need access to the rpm keyring, and no write access + anywhere else in the system. At the moment the rpm keyring happens + to be the rpmdb but that's just an implementation detail that is + likely to change sooner or later. Besides paving way to separating + the rpm keyring from the rpmdb, splitting this to a small, separate + utility allows limiting its required access from SELinux POV etc. + - For now, this only implements what's already in rpm: --import and + --checksig, remaining operations like listing and manipulating + keyring contents is left as an exercise for another day... + +commit b195048bbb27a1aae4aa3938c3b1f79e0a26ae88 +Author: Panu Matilainen +Date: Fri Sep 3 15:57:14 2010 +0300 + + Further simplify rpmcliVerifySignatures() + - Since this is a rpmcliFoo() function, we can assume rpmcliInit() + is used and the verify disabling bits are set through the common + rpmcliQueryFlags set, making qva argument unnecessary. + +commit 5b717266644f939aaa7ec2be7b2a6673df5556dc +Author: Panu Matilainen +Date: Fri Sep 3 15:18:17 2010 +0300 + + Update translations again again to pick up changes from recent churn + +commit 1b347d4261a20a72d34c8183c8f83330b7d8c174 +Author: Panu Matilainen +Date: Fri Sep 3 15:08:01 2010 +0300 + + Put the rpmLookupSignature() and rpmGetPassPhrase() out of their misery + +commit c382cd537364e8d82946709873c38a10252b8959 +Author: Panu Matilainen +Date: Fri Sep 3 15:01:47 2010 +0300 + + Rrrriiip the addsign/resign/delsign bits out of rpmqv.c + friends + - Add popt exec aliases to rpmsign for backwards compatibility (dejavu...) + +commit df0b760e7e54b6714d9a52abbd2e33a44cd42d41 +Author: Panu Matilainen +Date: Fri Sep 3 14:40:18 2010 +0300 + + Add a brand new rpmsign utility for package signing + - Signing (and deleting) are different from everything else in rpm + in that it needs very little of rpm's facilities. For example access + to the rpmdb is not needed at all. Splitting this to a separate, + small utility allows various possibilities, like severely limiting + its access from SELinux POV, control of signature generation with + cli arguments (the main rpm executable is already overcrowded with + options). It's also the first step to allow reasonably splitting + rpm signing to a separate package; not everybody needs to sign + packages, yet signing support needs to drag in GPG and whatnot. + - Reimplement / refactor various librpm signature generation helpers + into somewhat saner internal versions. + +commit 8f75ac30fb11e41a3ffab93e139139bd84c2cf24 +Author: Panu Matilainen +Date: Fri Sep 3 14:03:48 2010 +0300 + + Lookup signature type from cli utility already + - Avoid relying on the murky rpmLookupSignatureType() foobar on + low API level, pass the wanted tag explicitly from caller + - rpmLookupSignature(), rpmGetPassPhrase() + the bits they rely on + are now free of users within librpm itself + +commit 00c72fda899cf98c32ec806230695d03943d370e +Author: Panu Matilainen +Date: Fri Sep 3 12:02:17 2010 +0300 + + rpmcliSign() only creates or deletes signatures + - Lose the "this has got something to do with signatures and stuff" + dispatcher mode, rpmcliSign() now only does what it says. It also + doesn't need transaction set for anything. It doesn't need much + else than files to operate on, what to do and possibly a passphrase. + It probably will need more when rpmLookupSignatureType() + is put out of its misery, but this'll do for now. + - Lose the now unnecessary passPhrase member from QVA_t + +commit 1306fc5ee5dbb665609934ed081afbc573c16d05 +Author: Panu Matilainen +Date: Fri Sep 3 11:35:35 2010 +0300 + + Split argv loop out of the actual signing function, sanitize args + - The signing monster is big enough without extra loops. Also + signing as such doesn't need any of the QVA foo, just the package, + whether its adding or deleting and passhprase. Make it so. + - Remove some now unnecessary double cleanup of intermediate target + +commit 44acff0fee69f960613ab26326004db68e195dd9 +Author: Panu Matilainen +Date: Fri Sep 3 11:18:27 2010 +0300 + + Signing doesn't need transaction set, eliminate the unused argument + +commit ed3860b8efc0d8adaed9f8928140ac5e476925ce +Author: Panu Matilainen +Date: Fri Sep 3 11:11:55 2010 +0300 + + Split package signing out of rpmchecksig.c + - No functional changes, supposedly + +commit e95e558ad24fed90230470b55b54cc9e12e703de +Author: Panu Matilainen +Date: Fri Sep 3 10:54:09 2010 +0300 + + Use rpmcliVerifySignatures() directly from rpmqv.c main + +commit c814bb93281a7c77580a21cb56c407ce8f7f1a24 +Author: Panu Matilainen +Date: Fri Sep 3 10:38:38 2010 +0300 + + Export the cli-level signature checking as rpmcliVerifySignatures() + - Signature verification is completely different from package signing, + another step towards making rpmcliSign() do what it's named after + +commit fe57228ce11969b1652015ba0e66c0e559649d27 +Author: Panu Matilainen +Date: Fri Sep 3 10:08:49 2010 +0300 + + Use rpmcliImportPubkeys() for importing instead of rpmcliSign() + - Add some more IamYourDaddy modes to rpmqv.c for now. We'll need to + add junk to get rid of others, sigh... + +commit 3cd6e07b09733ed94d1e7216ea9f34970592e619 +Author: Panu Matilainen +Date: Fri Sep 3 09:39:14 2010 +0300 + + Export rpmcliImportPubkeys() (again) in the public API + - Key import is completely different from package signing, first + step in detaching key import from rpmcliSign() + +commit 9d2ad1e4f4d6fb57678046e77852d9376ea9d8dc +Author: Panu Matilainen +Date: Fri Sep 3 09:28:57 2010 +0300 + + Remove hysterically useless RPMSIGN_NONE + --sign popt leftovers + +commit 202d56156be0d72fe1c08c1d6c97e5c05c621639 +Author: Panu Matilainen +Date: Fri Sep 3 09:01:29 2010 +0300 + + Eliminate unused rootdir member from rpmInstallArguments + +commit 7a4b671b1b3483765fed9f76d35e74c6b017c64a +Author: Panu Matilainen +Date: Fri Sep 3 08:59:39 2010 +0300 + + Eliminate unused qva_prefix and qva_verbose from rpmQVKArguments + +commit a68bcb383e6b8601a7e4ab8ae67407e59eee0f95 +Author: Panu Matilainen +Date: Fri Sep 3 08:17:57 2010 +0300 + + Use the common rpmcliQueryFlags for signature verify options in rpm cli too + - Technically this changes the rpmcliQuery() and rpmcliVerify() API + in the sense that we no longer honor the qva->qva_flags for the + --nosignature and others, but we assume anybody using these (as if + anybody was using the "cli" API) uses rpmcliInit() which takes + care of these common bits... shrug. + - Ditch ancient and hidden --nopgp --nogpg switches along with the + dishwater which are simply alias to --nosignature. + - Eliminate now unused qva_flags from rpmInstallArguments (along with + a double vsflags goo from rpmgraph) + +commit 61432eb77184d9a2dc6da828a18f6d8f33f95812 +Author: Panu Matilainen +Date: Fri Sep 3 07:49:37 2010 +0300 + + Use the common rpmcliQueryFlags for signature verify options in rpmbuild + - The various --nosignature etc verification switches are common to + everything, and have been available through rpmcliQueryFlags via + the common popt table since 2002. Might as well finally use it + to limit the amount of duplicate popt goo. + +commit e452178719feb9da80a6b6c056d95d562af11823 +Author: Panu Matilainen +Date: Thu Sep 2 16:14:46 2010 +0300 + + Permit passing spec parse flags in python too + - The preferred flags default would be RPMSPEC_NONE, but it would break + compatibility with older rpm versions where rpm.spec() doesn't accept + flags. + +commit 8f642cba13bf1e1e935a29a663b8ecb13ae6e7ac +Author: Panu Matilainen +Date: Thu Sep 2 15:21:20 2010 +0300 + + Add an experimental low-level build method to python spec + - This is mostly just a toy for now, but serves as a kind of yardstick + for what is missing in librpmbuild to be generally useful for + building stuff. + +commit 4a374712c7d07143d30d1772657a476b3cfa5a75 +Author: Panu Matilainen +Date: Thu Sep 2 14:51:51 2010 +0300 + + Add the various spec + build flags to python + +commit 384362737f0939c14c7b6c08059caf9c1be31a99 +Author: Panu Matilainen +Date: Thu Sep 2 14:47:33 2010 +0300 + + Cosmetics: use an enum instead of #defines for source type bits + +commit 19368e8aa762b500280294f31180acbebe734e3d +Author: Panu Matilainen +Date: Thu Sep 2 14:44:02 2010 +0300 + + Clarify RPMBUILD_STRINGBUF comment + +commit 4505fb312dac0c1e186687a790a81a9c9285a7f4 +Author: Panu Matilainen +Date: Thu Sep 2 14:39:11 2010 +0300 + + Swap rpmSpecBuild() arguments for consistency with other APIs + - What we're building comes first, /how/ we're building comes second + - Update the sole caller, doesn't matter as this is a new interface... + +commit 6fcc1adf9ed140eec75aeba2a72e0bcc5419b43b +Author: Panu Matilainen +Date: Thu Sep 2 14:31:08 2010 +0300 + + Update translations again to pick up strings moving around etc + +commit c2496746ed92d1a18288a8f8cfd27ac6a44230cf +Author: Panu Matilainen +Date: Thu Sep 2 14:30:36 2010 +0300 + + Oops, forgot to update POTFILES.in on poptBT.c removal + +commit bbe310aaf8c97ef3534d827f2a996c7feec7ce47 +Author: Panu Matilainen +Date: Thu Sep 2 14:25:30 2010 +0300 + + Add a new public function for retrieving build dependencies from spec + - Not needed by rpmbuild itself currently, but permits retrieving the + build dependency information in a format that's better suited for + further processing than an rpm problem set. + +commit 56bb5c89ef61c17e78fdb28e100aee52d49b98d5 +Author: Panu Matilainen +Date: Thu Sep 2 14:13:28 2010 +0300 + + Move build dependency checking from cli tool to librpmbuild + - Add new public rpmSpecCheckDeps() function which can be used for + checking build dependencies of a spec against a transaction set. + - Change checkSpec() in rpmbuild cli to use the new interface + - rpmbuild.c is now free of direct spec structure accesses + +commit 9ee219093a4af23d491b6f2125baf78f16834bed +Author: Panu Matilainen +Date: Thu Sep 2 14:12:42 2010 +0300 + + Return NULL from rpmtsProblems() if no problems exist + - Avoids callers having to separately test for number of problems + and freeing when no problems exist + +commit 6b2de7c10acf1f1b3b29a4148d80a0d9f9750e67 +Author: Panu Matilainen +Date: Thu Sep 2 14:12:25 2010 +0300 + + Cosmetics: update comments + use a specific type for buildAmount + +commit 65aa56b443e6ce07e9748705860448beee0a15a4 +Author: Panu Matilainen +Date: Thu Sep 2 14:08:08 2010 +0300 + + Eliminate specFlags from rpmBuildArguments + - Spec parse flags are specific to parsing a spec, not building it. + This could be relevant again if a higher level build API is added + to the library but not ATM. + +commit b7dae177471f317618c51d24f97631e9713e015c +Author: Panu Matilainen +Date: Thu Sep 2 13:31:44 2010 +0300 + + Eliminate targets from rpmBuildArguments + - Targets are obviously relevant for building but not in the + context of rpmSpecBuild which expects the environment to be set up + already. If/when we add a higher level build interface to librpmbuild + this comes relevant again, until then bury inside the cli-tool. + - Simplify the target parsery by using argvSplit() and friends. + +commit 9eb54732721d28b828d62c6da43c8522629387ee +Author: Panu Matilainen +Date: Thu Sep 2 13:07:01 2010 +0300 + + Eliminate buildMode and buildChar from rpmBuildArguments + - The mode letters are only relevant for the rpmbuild cli tool. If/when + some of the related build logic is moved from the cli tool to the + library, we'll need a better way of expressing these combinations + than letters. + +commit 746012eb74d8a93ab78ee39884fad05b1eed5f9f +Author: Panu Matilainen +Date: Thu Sep 2 12:52:56 2010 +0300 + + Eliminate verify flags from rpmBuildArguments + - Transaction set verification bits are not relevant to building, + bury inside the rpmbuild cli utility. + - Also the type was wrong, its rpmVerifyFlags, not rpmQueryFlags, duh + +commit 6b0d371f4a73cadac129796b25f03a35a0533132 +Author: Panu Matilainen +Date: Thu Sep 2 12:46:21 2010 +0300 + + Eliminate noDeps and shortCircuit from rpmBuildArguments struct + - Both of these are only relevant to the rpmbuild cli utility, + eg checking for build-requires is up to caller, not librpmbuild. + +commit 05547d1f30b529b82dba26655c68a451bafc3624 +Author: Panu Matilainen +Date: Thu Sep 2 12:26:23 2010 +0300 + + Eliminate popt goo from librpmbuild + - Move the cli-switch manouvering into rpmbuild.c cli utility where + it belongs. + +commit 53385ee67656692c811edd8b02b9cd2454e5fa89 +Author: Panu Matilainen +Date: Thu Sep 2 12:12:46 2010 +0300 + + Eliminate _noDirTokens from librpmbuild API+ABI + - Add another flag set to control package generation, passing around + as necessary. Use this to implement --nodirtokens functionality + in a cleaner manner. + +commit fb81dee4c622298377e78270b839445df0144a73 +Author: Panu Matilainen +Date: Thu Sep 2 11:19:46 2010 +0300 + + Eliminate freeNames() from librpmbuild ABI + - Call freeNames() at end of buildSpec() instead of requiring API + users to clean up after us. This does mean losing some of the + supposed caching advantage when building on more than one spec, + but hardly matters, one spec at a time is the typical build usage + anyway. + +commit 3c7d4f89bb68d68b9d775fc6623c3f1c342ac0bd +Author: Panu Matilainen +Date: Thu Sep 2 11:01:15 2010 +0300 + + Detect short-circuited build based on executed build steps from buildSpec() + - Avoids having to access rpmBTArgs from deep packageBinaries(), + API changing is not an issue anymore... + +commit 36f0c779d6770f5b3c8bdc72a562a4f7880ed4b7 +Author: Panu Matilainen +Date: Thu Sep 2 10:23:57 2010 +0300 + + Handle --nobuild as another buildAmount flag + +commit ea9a016c0eac7efb75f5f7de8b3525549e7abab5 +Author: Piotr DrÄ…g +Date: Wed Sep 1 20:07:32 2010 +0000 + + l10n: Updated Polish (pl) translation to 100% + + New status: 754 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 8f65a6bd9aed82d821d7545d379ce049a9efb875 +Author: Panu Matilainen +Date: Wed Sep 1 18:18:10 2010 +0300 + + Handle spec flags parse option figuring in popt callback already + +commit f9ae396a43e8aea22ca762b30c336850ba33f840 +Author: Panu Matilainen +Date: Wed Sep 1 18:07:19 2010 +0300 + + Handle --nolang as another spec parse flag + +commit 1c00fe0b5fc38af379e0b300dda66f996eed6fc3 +Author: Panu Matilainen +Date: Wed Sep 1 18:03:05 2010 +0300 + + Combine spec parsing options into a common flag bitfield + +commit 2c4976a5286a9e0692106965156492eeacbe0799 +Author: Panu Matilainen +Date: Wed Sep 1 17:29:27 2010 +0300 + + Rename freeSpec() -> rpmSpecFree() for namespacing + - librpmbuild actually now has what remotely resembles an API, after + we broke every single thing there was ;) + +commit cf802b677e78f94718484da102cbf007982cb856 +Author: Panu Matilainen +Date: Wed Sep 1 17:20:22 2010 +0300 + + ...and finally eliminate the spec crapola from transaction set for good + +commit 305a47662416914461bfe0ad36f9ee99f90dafc7 +Author: Panu Matilainen +Date: Wed Sep 1 17:18:11 2010 +0300 + + Eliminate transaction set from spec parsing internals + +commit 5ead64bcd08f857fbb023779ca901229261015f5 +Author: Panu Matilainen +Date: Wed Sep 1 17:13:26 2010 +0300 + + Pass flags directly to the lower level parseSpec() helper + +commit f579dadf3a1ee0c80ddb14c99f69b0dc92ac0955 +Author: Panu Matilainen +Date: Wed Sep 1 17:09:34 2010 +0300 + + Eliminate parseSpec() from librpmbuild, trim unused arguments + - We can't keep compatibility while eliminating goo like transaction set + from the arguments so dont bother trying. + +commit cbd5d98a8416a1f6c875cde82f3f1c3b02c120d7 +Author: Panu Matilainen +Date: Wed Sep 1 16:59:22 2010 +0300 + + Update callers to use the new rpmSpecParse() interface + +commit c7ccdea6386b9f9cd8be5ff459be99955b56f2ef +Author: Panu Matilainen +Date: Wed Sep 1 16:49:43 2010 +0300 + + A new saner interface for parsing spec files + - For now just a wrapper around parseSpec() that returns *gasp* + a pointer to a parsed spec structure. + - Limit the amount of goo that needs passing - optimally we'd only need + the spec + parsing flags, but due to %{buildroot} macro abuse in specs + we'll need that for now too. + +commit c22fff5b931ef553f29a5cbc1b2bb6e868a74659 +Author: Panu Matilainen +Date: Wed Sep 1 16:47:43 2010 +0300 + + Eliminate silly and unused timecheck feature from (lib)rpmbuild + - This was broken for years without anybody complaining, should + be safe to conclude nobody will miss it later either. And if + somebody misses it, this is a job for rpmlint really. + +commit f9740318a81bbb72cdd046a80a38116e2f7be8e4 +Author: Panu Matilainen +Date: Wed Sep 1 14:31:49 2010 +0300 + + Spec rootDir is only relevant for building, eliminate from parseSpec() + - The whole rootDir seems dubious for build purposes, but in any case its + only relevant during the actual build process, not for spec parsing. + Set spec->rootDir from buildSpec() for the duration of the + build to avoid having to refactor doScript() and all right now. + +commit 4acb8866ef8b232b736b84a68b2701070439a6f4 +Author: Panu Matilainen +Date: Wed Sep 1 14:00:54 2010 +0300 + + Eliminate cookie from spec structure + - Cookies are not a property of spec but a given build, handle this + internally to buildSpec() except for --rebuild which passes the + srpm identifier cookie through buildArgs + +commit 628de71cdebf8ed8cb1574b39de6fe0150dd65fb +Author: Panu Matilainen +Date: Wed Sep 1 13:46:49 2010 +0300 + + Sanitize buildSpec() arguments a bit + +commit bd9e1b9d9bafe7246a43297d5d148838c873a21d +Author: Panu Matilainen +Date: Wed Sep 1 13:37:37 2010 +0300 + + Replace buildSpec() with a new interface in the API + - Accept the entire build arguments structure along with a spec, these + contain everything that we'll need + - Just a convenience wrapper for buildSpec() for now, more things + to follow... + - Update the sole existing caller accordingly + +commit 05dd62aba9c6bab44ba55ff1266ec9126b2f8874 +Author: Panu Matilainen +Date: Wed Sep 1 12:26:26 2010 +0300 + + Lift remaining build-related stuff out of librpm over to build-side + - none of this belongs to librpm headers and ABI + +commit 76600e53893b38e4441d98e3a24d3b55fefe2021 +Author: Panu Matilainen +Date: Tue Aug 31 08:53:33 2010 +0300 + + Eliminate useless hardwired build debug foo + +commit 6cd0bb2b311db73198cff41a759d0174906c85ae +Author: Panu Matilainen +Date: Tue Aug 31 14:37:51 2010 +0300 + + Passed-in values are const for every headerPutType() variant + - Silly oversight back then, oh well... this shouldn't affect any callers, + just avoids dumb warnings where none should be seen + +commit 04fce4963c3d6708346a20addf00a28060c6df86 +Author: Panu Matilainen +Date: Wed Sep 1 10:25:06 2010 +0300 + + Update translations to pick up new messages + +commit 0f79048c664a9e560893ae5f1d0aac00ffa3b46f +Author: Panu Matilainen +Date: Wed Sep 1 10:24:11 2010 +0300 + + Add newly added files to POTFILES.in too + +commit 7e7ca4b3667e538862900f335b41ce8dbce5cab3 +Author: Anssi Hannula +Date: Tue Aug 17 02:29:14 2010 +0300 + + debugedit: fix incorrect error messages regarding -b and -d + +commit d06449dbaf40077c90c3e315e7036d8e781cf397 +Author: Steve Lawrence +Date: Mon Aug 30 16:32:32 2010 -0400 + + Add files for testing SELinux collection/plugin + + This adds two basic tarballs, one containing two minimal executables + (foo & bar), and one contain a simple policy for the two executables. + This also adds a new spec file with a policy subpackage, the new + %sepolicy section, and the sepolicy collection. + +commit 46cdd1b5073a6b7cdf0e23723f54958ec2f8c97e +Author: Steve Lawrence +Date: Mon Aug 30 16:32:31 2010 -0400 + + Add SELinux policy plugin + + This adds a new plugin specifically for a collection to load SELinux + policy. This implements the post_add and pre_remove plugin hooks. The + only time anything happens during the pre_remove hook is if post_add was + not called (i.e. if the transaction only removes policies). + + This plugin extracts all the policy information from packages in the + sepolicy collection during the open te hook. It then determines which + policies should be installed/removed based on if the package is being + installed/removed and the type of the policy and the system policy. It + then executes semodule (or uses libsemanage if semodule cannot be + executed or installing in a chroot) to remove and install the necessary + policies. It then reloads the selinux state, reloads the file contexts, + and if necessary, relabels the file system. + +commit 34b5d67c2d3d68a48f0975dc6111a8c184d1c2dd +Author: Steve Lawrence +Date: Mon Aug 30 16:32:30 2010 -0400 + + Use selabel interfaces instead of matchpathcon + + This replaces the old matchpathcon interfaces with the new selabel + interfaces for relabeling files, storing an selabel handle in the + transaction set. + + With this change, also comes an added distinction between --nocontexts + being specified and a failure to read the load file contexts. + Previously, there was no distinction, and both cases used the + RPMTRANS_FLAG_NOCONTEXTS flag. + + However, with the new policy plugin, it is necessary to make such a + distinction. This is because matchpathcon_init (now selabel interfaces) + can fail at the beginning of the transaction, but succeed later after + new policy is installed. Because of this, we may need to enable/disable + RPMTRANS_FLAG_NOCONTEXTS multiple times. However, because this flag + could also mean --nocontexts, we cannot do that. By storing the selabel + handle in the rpmts, we can easily keep track if the handle has been + successfully created, rather than overloading RPMTRANS_FLAG_NOCONTEXTS + with two meanings. + +commit 383e27564853fd4c387ca1d4a69f223140a0daca +Author: Steve Lawrence +Date: Mon Aug 30 16:32:29 2010 -0400 + + Add new %sepolicy section to the spec file format + + The %sepolicy section is used to describe SELinux policy to be included + in a package. It's syntax is similar to other sections (%files, %pre, + %post, etc.) in that you can provide a string and -n after the + declaration to specify policy should be added to a subpackage. + + For example: + + %sepolicy + # policy in this section will be added to the main package + + %sepolicy foo + # policy in this section will be added to the '-foo' subpackage + + %sepolicy -n bar + # policy in this section will be added to the 'bar' subpackage + + The %sepolicy section contains zero or more %semodule directives, with the + following format: + + %semodule [OPTIONS] path/to/module.pp + + The available options are: + + -b, --base + The module is a base module + + -n, --name=NAME + The name of the module. If not given, assumes the name is the basename of + the module file with file extensions removed. + + -t, --types=TYPES + One or more comma-separated strings specifying which policy types the + module can work with. To explicitly state that a module can work with any + policy type, "default" can be specified as the value. If not specified, + assumes the module can work with any policy type, and assigns the types as + "default". + + Below is an example of this new format: + + %sepolicy + %semodule -n foo -t mls policy/foo.pp + %semodule -n bar -t strict,targeted,mls -b policy/bar.pp + + This also adds new header tags to store the new information: + RPMTAG_POLICYNAMES (string array) + RPMTAG_POLICYTYPES (string array) + RPMTAG_POLICYTYPESINDEXES (uint32 array) + RPMTAG_POLICYFLAGS (uint32 array) + + The index of NAMES and FLAGS maps directly to the index of RPMTAG_POLICIES. + However, because a single policy can have multiple types, the mapping for + TYPES is not direct. For this, the index maps to TYPESINDEXES, which + contains the index of the policy that the type maps to. This is similar to + how DIRINDEXES is used to map DIRNAMES and BASENAMES. As an example, the + previous %sepolicy section would have the following header tags: + + RPMTAG_POLICIES: + 0: + 1: + + RPMTAG_POLICYNAMES: + 0: foo + 1: bar + + RPMTAG_POLICYFLAGS: + 0: 0 + 1: 1 # assumes flag 1 == BASE + + RPMTAG_POILCYTYPES: RPMTAG_POLICYTYPESINDEXES: + 0: mls 0: 0 + 1: strict 1: 1 + 2: targeted 2: 1 + 3: mls 3: 1 + +commit 5779fb12e26ca1793df7ee50972de80dbf26992e +Author: Steve Lawrence +Date: Mon Aug 30 16:32:28 2010 -0400 + + Remove the existing %policy directive + + Remove the existing %policy directive, to be replaced with a new + %sepolicy section with more configurable options. + +commit 883f13c8b735bda07b46ee8262cdba7d774322a4 +Author: Steve Lawrence +Date: Mon Aug 30 16:32:27 2010 -0400 + + Update the plugin architecture to allow for remembering state + + This moves most of the plugin logic to a new rpmplugins file with a + struct and functions for managing plugins, allowing for plugins to carry + state. This also adds init and cleanup hooks for plugins to initialize + and cleanup their state, and a new 'open te' hook allowing plugins to + read and save information from transaction elements. + + This also generalizes the plugin architecture a bit so it isn't so + specific to collections. + +commit d010ec1c9026b35f5b2521be965c03c826894ce8 +Author: Panu Matilainen +Date: Thu Aug 26 12:21:33 2010 +0300 + + Permit packages with no files to omit %files entirely + - Fixes the long standing obscure behavior of missing %files + section causes build to complete without errors but without producing + any packages either. Packages without files in them are perfectly + valid (eg metapackages), requiring empty %files section for those + is just unnecessary spec noise. + - Remove %files section on one of the test-suite specs to create + a test-case for this as a side-effect. + - This of course introduces a slight incompatibility with older rpm's, + if compatibility is required then just add those empty %files in the + spec, they dont hurt anything but the readers eyes. + +commit e38efea49c23e55914dd306e27fc0320b174807c +Author: Panu Matilainen +Date: Thu Aug 26 11:58:24 2010 +0300 + + Clean up newPackage() a bit + - No much point explicitly NULL'ing calloc()'ed memory, only initialize + the values that are something else + other cosmetics. + +commit a0950b6013b24750762fafcb8ffc0e6440147a81 +Author: Panu Matilainen +Date: Thu Aug 26 11:41:31 2010 +0300 + + Split arch/os/platform adding out of parseSpec() + - Combining description /checking/ and arch/os/platform /adding/ + into same for-loop (to save cycles or lines, dunno) makes no sense + whatsoever. No functional changes. + +commit 3b15d08cfff170700b6ec6eb50625e2216ddd917 +Author: Panu Matilainen +Date: Wed Aug 25 15:51:45 2010 +0300 + + Stuff the remaining truly internal structure defs out of sight + - All these are internal implementation details that no callers + should mess with. Bury inside rpmbuild_internal.h. + - spec, package and source structures are tougher nuts as python + bindings expect to expose some of the information, we'll need + at least some api to cover walking over package headers etc before + shutting the door completely. + +commit 555f699f11774a2692518508fe14f3eed878b3d4 +Author: Panu Matilainen +Date: Wed Aug 25 15:41:09 2010 +0300 + + Mass eviction of remaining internal helpers in librpmbuild API + - Yank everything qualifying as "internal helper function" into + internal-only headers, loosely grouped as follows: + 1) Everything involving spec-manipulation goes into rpmbuild_internal.h + 2) All other miscellaneous helpers go into rpmbuild_misc.h + - This leaves us a rather minimal, and nearly useful API into librpmbuild: + Users need to be able to parse a spec, query or build (parts of) it + and free up the spec structure when done. This is what we have now, + various still exposed structures not counting. + +commit 94a58d3864d080da7d2cb2ad4a87aaa2917facd1 +Author: Panu Matilainen +Date: Wed Aug 25 15:06:47 2010 +0300 + + Eliminate unused spec argument from addReqProv() + - addReqProv() only operates on the header, not spec + +commit 2a6efbca7ed753b6fac717976a14e24cf969db45 +Author: Panu Matilainen +Date: Wed Aug 25 14:52:58 2010 +0300 + + Bury OpenFileInfo inside parseSpec.c + - Nothing outside spec parsing machinery needs this nor should mess + with it, enforce with opaque pointer. + +commit 8d448745f053103ce3fbcf16f014cc376be8ddcf +Author: Panu Matilainen +Date: Wed Aug 25 14:13:10 2010 +0300 + + Eliminate freePackage() from librpmbuild API + - The only thing that should ever call this is freePackages() which + was already made static. As newPackage() links the package structure + with the spec, its not safe for others to call it. + +commit e677ea1ea86cb3202256e7657066538d3b1b2705 +Author: Panu Matilainen +Date: Wed Aug 25 14:04:52 2010 +0300 + + Eliminate initSourceHeader() from librpmbuild API + - This is a funky little implementation detail which no caller should + have to bother with. Move it to parseSpec.c which is the only place + needing it now and make static. + +commit 68beb82e9f1c4e828c4af460e68513090a3cd171 +Author: Panu Matilainen +Date: Wed Aug 25 13:39:04 2010 +0300 + + Eliminate ancient leftover initSourceHeader() call + - processSourceFiles() is only ever called through buildSpec(), + and if you throw unparsed spec into that you're pretty much screwed + anyway. rpmbuild always called initSourceHeader() anyway, and now + its ensured for all successfully parsed specs. + +commit aafd1d217d46848f1e19c9527e9e9f98bb30bda8 +Author: Panu Matilainen +Date: Wed Aug 25 13:33:15 2010 +0300 + + Initialize source header from parseSpec() instead of caller(s) + - This is where it logically seems to belong to, after all parseSpec() + similarly populates all other metadata of the binaries etc too. + No point requiring callers to do this obscure extra call. + +commit b6eb24ebc12921abca74ebe007f4d31276c0cc38 +Author: Panu Matilainen +Date: Wed Aug 25 13:20:15 2010 +0300 + + Move source+patch tag insertion into initSourceHeader() + - processSourceFiles() is more about processing the physical files + ending up in the srpm payload, source + patch tags are mostly just + informational and can be added early + +commit 7209fb6179e1379d96e4605d92604efdaa8cac28 +Author: Panu Matilainen +Date: Wed Aug 25 12:25:55 2010 +0300 + + Eliminate an exit point from parseSpec() + +commit 9ed9daf93e50464aabe92a87ba1a0199865288c9 +Author: Panu Matilainen +Date: Wed Aug 25 11:04:51 2010 +0300 + + Eliminate doRmSource() from librpmbuild API again + - buildSpec() is sufficient interface for accomplishing the same, + avoid exposing internal helpers + +commit fd893bf69e67719f36195e0b96a8128ed83d3d2c +Author: Panu Matilainen +Date: Wed Aug 25 11:03:26 2010 +0300 + + Fix RhBug:452477 differently to avoid doRmSource() + +commit ddee17551f370ca502cff9ab707fad818beea31b +Author: Panu Matilainen +Date: Tue Aug 24 13:56:29 2010 +0300 + + Eliminate addChangelogEntry() from librpmbuild API + - This is just an internal helper for parseChangelog(), no point + exporting it + +commit 692945f29e2f99baac2378adb542bf131d2ce4f7 +Author: Panu Matilainen +Date: Tue Aug 24 13:54:04 2010 +0300 + + Eliminate buildHost() and getBuildTime() from librpmbuild API + - Neither is needed anywhere outside pack.c, bury there and make static + +commit 64a1351844d527f7c9a43afaefc373c2d07b7152 +Author: Panu Matilainen +Date: Tue Aug 24 13:39:42 2010 +0300 + + Eliminate checkPackages() from librpmbuild API + - No needs outside pack.c, make it static + +commit 398df91274be4e6a9fae0cbbc59f95f6e490ed0f +Author: Panu Matilainen +Date: Tue Aug 24 13:37:16 2010 +0300 + + Eliminate parseExpressionString() from librpmbuild + - This has been unused since its introduction in 1998... + +commit 0d50dde3d7ffaceb79407ecd3f0bf306fb258764 +Author: Panu Matilainen +Date: Tue Aug 24 13:30:12 2010 +0300 + + Eliminate freePackages() from librpmbuild API + - This is a spec-internal cleanup task, no need outside spec.c + +commit 3a765b98b6f63aeef2606322b0771679984446d7 +Author: Panu Matilainen +Date: Tue Aug 24 13:23:51 2010 +0300 + + Eliminate now unnecessary buildio.h + - readRPM() is not used or needed by anything, shred it + - make writeRPM() static inside the only place needing it: pack.c + - move struct cpioSourceArchive_s inside pack.c + +commit 1e1a56ee740e781ec85d3d14fddc357afff16536 +Author: Panu Matilainen +Date: Tue Aug 24 13:14:48 2010 +0300 + + Send the mostly broken rpminject and rpmsort "test programs" to shredder + +commit 1719b2f3419bf5ff1f77350a3725ac0412f06fe2 +Author: Panu Matilainen +Date: Tue Aug 24 12:38:50 2010 +0300 + + Eliminate newOpenFileInfo() from librpmbuild API + - Nothing outside parseSpec.c needs, bury it there and make static + +commit 5ed685425eb21ffb7609bd42dc87c8cdbcc0a725 +Author: Panu Matilainen +Date: Tue Aug 24 12:35:59 2010 +0300 + + Eliminate addSource() from librpmbuild API + - Nothing outside parsePreamble.c needs, bury it there and make static + +commit 38a8700db8797fbe2a02fb4727aeb9dccb42d06d +Author: Panu Matilainen +Date: Tue Aug 24 12:31:13 2010 +0300 + + Eliminate parseNoSource() from librpmbuild API + - Nothing outside parsePreamble.c needs, bury it there and make static + +commit 1d7f4dd6edf5983d32d312250568f8b5b9323e2c +Author: Panu Matilainen +Date: Mon Aug 23 13:08:23 2010 +0300 + + Remove ancient autohelp-handling related leftovers + +commit 3171179ea3ffb789825be0317a2c4cfbf078a074 +Author: Panu Matilainen +Date: Mon Aug 23 09:51:52 2010 +0300 + + Lose leftover variable, use const for s to clarify usage + +commit ecd340547f504b2a48ee1da35c87951dde54d5f0 +Author: Piotr DrÄ…g +Date: Sun Aug 22 20:29:46 2010 +0000 + + l10n: Updated Polish (pl) translation to 100% + + New status: 729 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 51a05e7a9fbd5d066a57fa763b78ada01e36ae30 +Author: Panu Matilainen +Date: Fri Aug 20 17:50:51 2010 +0300 + + Remove signing support from (lib)rpmbuild + - Signing is better done in an environment completely separated from + the process of actually building packages. This is how its generally + done anyway by distros, this change just forces the issue. + - While signing on build seems handy and saves some io-churn, this + is very insecure as your precious secret passphrase remains unencrypted + in memory for the entire duration of the build where it's accessible + to whatever happens to be building. This change doesn't + affect fix the issue of unencrypted passphrase residing in memory + and potentially getting swapped out, it only limits the exposure + to the actual signing process which isn't subject to unknown scripts + poking around. + - Minimally preserve rpmbuild's --sign functionality via popt --pipe hack + to call rpm --addsign when build completes + +commit d4d87cca0ee8d45e839099a216215414fabf35f0 +Author: Panu Matilainen +Date: Fri Aug 20 16:00:38 2010 +0300 + + Yet another unused copy of identifyDepend() hiding inline + +commit 36e935a07330063321455ee31b663b890e49d063 +Author: Panu Matilainen +Date: Fri Aug 20 15:33:59 2010 +0300 + + Hack to get popt working when running from build tree + - Dynamic linking with libtool causes binaries to appear as lt-foo, + which confuses the heck out of popt aliasing. Add a dumb hack to + rpmcliInit() to fixup the lt- out of popt context names. + +commit fbd92df7544462a88cd8c752ffe07263dc8bb858 +Author: Panu Matilainen +Date: Fri Aug 20 15:17:08 2010 +0300 + + Argh. Realize we already have equivalents of initCli() and finishCli() + - rpmcliInit() and rpmcliFini() do almost exactly the same as our + newborn cli-helpers, but they've been almost unused until now. + Use them and lose the new ones.. doh. + - The downside is that popt aliases are now broken when running commands + from the build tree due to lt-foo in argv[0], whereas initCli() took + and explicit popt context name argument. Oh well... + - rpmcliFini() was missing several necessary memory cleanup calls, + add them there while at it. + +commit e951c42146d89a5f4abdb02eaf9e44eead235e2f +Author: Panu Matilainen +Date: Fri Aug 20 14:48:44 2010 +0300 + + Remove unused code, hidden away from compiler warnings via inlining + +commit 3c5c19747b077597610dffc39118eb1316dfa3a5 +Author: Panu Matilainen +Date: Fri Aug 20 14:31:16 2010 +0300 + + Kludge to get rid of ugly lone --quiet on usage message + +commit 119fb009226ffb25c899594127c1f7c500c51f06 +Author: Panu Matilainen +Date: Fri Aug 20 14:27:35 2010 +0300 + + Update translations to pick up stuff moving around + +commit 2c2faa299e6c1f2a9b6f8220c75cf878d4e005b0 +Author: Panu Matilainen +Date: Fri Aug 20 13:47:05 2010 +0300 + + Move --pipe handling to cliutils helpers + +commit d391d5ec60c9fadb10236b8af236ac4b130cd2bd +Author: Panu Matilainen +Date: Fri Aug 20 13:42:00 2010 +0300 + + Oops, fallout from commit 5fe63cd8e0b552a9687666e8b5f9454cf274d69d + +commit 03a8511e3ba8b2c6cf3dc67fadaeca4aa9fb5221 +Author: Panu Matilainen +Date: Fri Aug 20 13:16:48 2010 +0300 + + Lump much of the common cli-init + finish tasks into cliutils helpers + +commit b217529967f972225dc9b7d2e37860885fde1ee1 +Author: Panu Matilainen +Date: Fri Aug 20 12:08:10 2010 +0300 + + Add a convenience library for stuff common cli-bits into + +commit 04b1816f008d465ea5d7fa686e092280c3f104c3 +Author: Panu Matilainen +Date: Fri Aug 20 11:35:44 2010 +0300 + + If MiNT can't cope, frankly my dear, I dont give a damn + +commit 910fc93842b766cbf211330191598f663be4f452 +Author: Panu Matilainen +Date: Fri Aug 20 11:26:28 2010 +0300 + + Merge build.[ch] into rpmbuild.c, doesn't make sense to separate anymore + +commit 5ddfae716aeac7349485ecef3289d20071071dd5 +Author: Panu Matilainen +Date: Fri Aug 20 11:16:17 2010 +0300 + + Clean up rpmbuild's --quiet handling + honor it on --rebuild too + +commit 7230aba539a61d07dd6398e981db4541ea4c8540 +Author: Panu Matilainen +Date: Fri Aug 20 11:06:24 2010 +0300 + + Cosmetics cleanup + +commit f976dbd2f503fb4323415a58d65066703097e34d +Author: Panu Matilainen +Date: Fri Aug 20 11:02:14 2010 +0300 + + Eliminate unnecessary sanity checks wrt --sign and fix indentation + +commit 8e9f4a9eeb024deac9106f49309c6dbb58561c6d +Author: Panu Matilainen +Date: Fri Aug 20 10:41:18 2010 +0300 + + Test argument count early, avoiding the need to re-check over and over + - Instead of bothering with different error messages for tar/spec/pkg + messages, just dump usage when no arguments present. + - Testing argument file existence for signing is meaningless on build + as we're not signing the specs or tarballs present there but the + build result. + +commit af1fbfaca817c8b81dc81f1786cbaeae4c506493 +Author: Panu Matilainen +Date: Fri Aug 20 10:24:53 2010 +0300 + + Eliminate a bunch of now unnecessary cli-switch sanity checks + +commit a3795d0dc22a3ee482d7a8aec74ea108225cb3b6 +Author: Panu Matilainen +Date: Fri Aug 20 10:19:26 2010 +0300 + + Simplify --root argument checking + - We haven't accepted url's in as root since ages, wipe out the goo + +commit 66ce5dc19c4662fb4e7870c5a55166435fbad083 +Author: Panu Matilainen +Date: Fri Aug 20 09:26:10 2010 +0300 + + Eliminate the IAM_RPMBT ifdef's from rpmbuild.c for real + +commit 5fe63cd8e0b552a9687666e8b5f9454cf274d69d +Author: Panu Matilainen +Date: Fri Aug 20 09:20:16 2010 +0300 + + Chainsaw the now unused #ifdef'ed parts out of rpmqv.c and rpmbuild.c + +commit f9cbeaca83f7586b1b05a19ad571fb68238c803e +Author: Panu Matilainen +Date: Fri Aug 20 09:00:26 2010 +0300 + + Begin splitting rpmbuild to separate sources + - Make a copy of the entire rpmqv.c source to rpmbuild.c and switch + make to use the new copy. No functional changes. Making a copy first + means we get much easier to follow patch-series on the changes + that will follow. + +commit 6193eee71c37ffabcae399bdc2bc38fa55aa9b78 +Author: Panu Matilainen +Date: Wed Aug 18 12:32:23 2010 +0300 + + Add a test-case for --specfile query + +commit ab8ab164b95df8dc977e8650c671312ae534ca16 +Author: Panu Matilainen +Date: Wed Aug 18 11:55:19 2010 +0300 + + Add %patch usage to hello.spec testcase + +commit d3bebf2656554d39ab1e8f086244d75b4e2cbccd +Author: Panu Matilainen +Date: Fri Aug 13 10:58:51 2010 +0300 + + Lose the now unnecessary rpmtsSELinuxEnabled() function + - it never was anything more than a cached value of is_selinux_enabled() + and caching this fairly expensive result is no longer needed as + scriptlet execution wrt selinux contexts is now conditionalized on + RPMTRANS_FLAG_NOCONTEXTS instead + +commit fb4644bdbd0181c1aeea88c692cb40eea5fbf178 +Author: Panu Matilainen +Date: Fri Aug 13 10:52:40 2010 +0300 + + Conditionalize rpm_execcon() usage on per-transaction flags + - If we aren't laying down file contexts, executing scriptlets in + contexts doesn't make much sense either as its just likely to fail. + - System-wide settings, such as is_selinux_enabled() value, are + very ambiguous when it comes to chroots, using per-transaction + controllable flags instead lets callers decide. + +commit c79542ee5abb17e5df0e15fced1a9e08a2ad1f29 +Author: Giulio Eulisse +Date: Tue Aug 10 11:50:48 2010 +0300 + + Add missing libgen.h include + +commit c72fc6adba1acb4fe49e31273c2437703b15afeb +Author: Roland McGrath +Date: Mon Aug 9 15:27:03 2010 +0300 + + Fix find-debuginfo.sh behavior on cross-directory hardlinks (RhBug:618426) + - The find-debuginfo.sh script makes hard links of .debug files to + correspond to hard links between install binaries. It can fail to + create one of these .debug hard links if it's in a directory that + didn't exist at that point in the script run. How this happens + depends on things like the order "find" lists files, so it can + be hard to reproduce off hand. + +commit 9570a7f6af152e2f1e63181ad8a20d12a10e3c5b +Author: Tom Tromey +Date: Mon Aug 9 15:22:51 2010 +0300 + + Create GDB index from find-debuginfo if possible (RhBug:617166) + - Details in https://fedoraproject.org/wiki/Features/GdbIndex + +commit 7f220202f20c69d6f3fd957325cdbe692bbabedd +Author: Jindrich Novy +Date: Tue Jul 13 13:35:22 2010 +0200 + + Redirect macro stack backtrace printing to debug log. + +commit 60be56e317b1a18f0d71a2dc71c6fb18f26e19b9 +Author: Jindrich Novy +Date: Tue Jul 13 13:34:05 2010 +0200 + + Fix cryptic macro evaluation error message (RhBug:613010) + +commit 01fc4cfa93cba5e101549e515632f8ee63d006cd +Author: Yuri Chornoivan +Date: Sat Jul 10 04:51:43 2010 +0000 + + l10n: Updated Ukrainian (uk) translation to 100% + + New status: 732 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 1d0089a34f568e5dfb9988613daaf932c5b6667a +Author: Panu Matilainen +Date: Fri Jul 9 12:32:24 2010 +0300 + + Skip any initial comments when looking for pubkey start marker + +commit 767c59b0527aeeb7e6bfc2c3048d5c2b73677438 +Author: Florian Festi +Date: Thu Jul 8 14:29:36 2010 +0200 + + Remove never used fsmRmdirs() function + which should have removed implicitly created directories + +commit 33f6c7f3beb8b538f9c20bbf280e53aeb2b655c0 +Author: Florian Festi +Date: Thu Jul 8 14:25:48 2010 +0200 + + Tidy up fsmMapPath a bit + +commit 01aa203ae620b904f20be8c9946ce0a75f1a512b +Author: Florian Festi +Date: Mon Jun 7 15:56:51 2010 +0200 + + Make FSM_VERIFY a function + +commit 0ef9b43f9bc9d37f88effec2627fbc31355b38ea +Author: Florian Festi +Date: Mon Jun 7 12:10:08 2010 +0200 + + Make FSM_CREATE a function + +commit 6992a045d153aaa540d80be41413cdafe0b60865 +Author: Florian Festi +Date: Fri Jun 4 17:03:59 2010 +0200 + + Make FSM_READLINK a function + +commit e3ed6eccee2c9afd4da4283702aca9e155cbfa81 +Author: Florian Festi +Date: Fri Jun 4 14:30:16 2010 +0200 + + Make FSM_LSTAT and FSM_STAT one function + +commit 1abb4ec04804802c14dcd5fc17366cae8201c4b6 +Author: Florian Festi +Date: Fri Dec 18 09:26:05 2009 +0100 + + Move FSM_HREAD in place + +commit 07f8fb1d99eeaa9f29199840f5be4771c521712a +Author: Florian Festi +Date: Fri Dec 18 09:24:25 2009 +0100 + + Move FSM_HWRITE in place + +commit 86f144d5558553a05ae0d805b9e8163579c4105e +Author: Florian Festi +Date: Fri Dec 18 09:22:27 2009 +0100 + + Move FSM_TRAILER in place + +commit ebc75ef2082ed9a6e17a671ab39f48dfac09ffe2 +Author: Florian Festi +Date: Thu Dec 17 15:12:32 2009 +0100 + + Move FSM_MKNOD in place + +commit 964e1add0d5f2971d6ee6adaed5bd536bac89a22 +Author: Florian Festi +Date: Thu Dec 17 15:07:25 2009 +0100 + + Move FSM_MKFIFO in place + +commit d655dc9ecb9e92a84df3e647d46f679f795121ae +Author: Florian Festi +Date: Thu Dec 17 15:04:18 2009 +0100 + + Move FSM_LINK in place + +commit c9b78751747ce5bf4d9ddcecbdefa07e4547eb14 +Author: Florian Festi +Date: Thu Dec 17 15:00:52 2009 +0100 + + Move FSM_SYMLINK in place + +commit b6ca2d5c3653bb4bfde1dcddbf616145b515b6f7 +Author: Florian Festi +Date: Thu Dec 17 14:14:56 2009 +0100 + + Make FSM_CHOWN, FSM_LCHOWN, FSM_CHMOD, FSM_UTIME and FSM_SETCAP functions + +commit 10b3a34363408e6d3a3f7216d6a81e65bb2d4d72 +Author: Florian Festi +Date: Thu Dec 17 13:40:55 2009 +0100 + + Make FSM_LSETFCON a function + +commit 37a4e8c200af87ee4643cbcf4af69435dd0bd112 +Author: Florian Festi +Date: Thu Dec 17 13:26:21 2009 +0100 + + Make FSM_RMDIR a function + +commit f0fa864de7ef1d23b35d94bf2d527300734734a3 +Author: Florian Festi +Date: Thu Dec 17 13:22:35 2009 +0100 + + Make FSM_RENAME a function + +commit f0b0ef96ef655653ec9c6d06499b131fd5a2d32c +Author: Florian Festi +Date: Thu Dec 17 13:17:33 2009 +0100 + + Make FSM_UNLINK a function + +commit a23df654c658373e883f4f7c67991d0e27d2f917 +Author: Florian Festi +Date: Thu Dec 17 13:06:59 2009 +0100 + + remove no longer needed FSM states + +commit 38967315c0a3e42e7e5cecfdd3b4f12cd699cd71 +Author: Florian Festi +Date: Thu Dec 17 13:05:16 2009 +0100 + + Make FSM_MKDIR a function + +commit 80673746c9d6dba00482e7873ff3d29e65bd1a93 +Author: Florian Festi +Date: Thu Dec 17 12:27:52 2009 +0100 + + Use fsmRmdirs and fsmMkdirs directly + +commit 16fc8739a895c861d69ea9c533ebd4f62a7cacd2 +Author: Florian Festi +Date: Thu Dec 17 12:20:38 2009 +0100 + + Use fsmMapPath directly instead of FSM_MAP + Move fsmMapPath to better position in the file + +commit a5ab0681ce1f7cbd2f51e367d0a05063f2826df5 +Author: Florian Festi +Date: Thu Dec 17 12:17:58 2009 +0100 + + Make FSM_INIT a function + +commit 74c84ef9921e7662fdd363fcad293048db17ea5f +Author: Panu Matilainen +Date: Sat Jul 3 07:16:22 2010 +0300 + + Oops, dont hang in getOutputFrom() if we have nothing to write + +commit d44d2ec6829a8eeca51f9fd2f4900d82f72770e9 +Author: Panu Matilainen +Date: Fri Jul 2 13:23:11 2010 +0300 + + Ugh, fix reversed condition on font-provide extractor + - braindamage in commit 53045d5dcdce3988e2586cb315b35e6a675a8152 + +commit 375a6b5630b8e37e1d3f0c7ecbe10fe460c4d420 +Author: Panu Matilainen +Date: Fri Jul 2 12:21:00 2010 +0300 + + Rewrite getOutputFrom() in a race-free way (supposedly ;) + - Use a self-pipe to handle signal race on select(). pselect() would work + too but this is more portable and avoids other signal hassles. + - Use non-blocking IO for communicating with the child to avoid spin-happy + timeouts, just check all fd's properly before trying to use them + - Avoid leaking memory from readBuff on errors + +commit 8fe6438fdec279dbf6ea1a8346511f125c92ff3b +Author: Héctor Daniel Cabrera +Date: Wed Jun 30 23:23:19 2010 +0000 + + l10n: Updated Spanish (Castilian) (es) translation to 100% + + New status: 732 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 5c2d5a19b9b621fc17de6338c848dc1e721b27ca +Author: Piotr DrÄ…g +Date: Wed Jun 30 09:38:22 2010 +0000 + + l10n: Updated Polish (pl) translation to 100% + + New status: 732 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 5711982e27c70bea4017632255a94630ea10d1ab +Author: Panu Matilainen +Date: Wed Jun 30 12:27:56 2010 +0300 + + Make the infamous getOutputFrom() error message more useful + - ...like actually saying what was the failing script, doh + - leaving the function name there for a googling hint + +commit 53045d5dcdce3988e2586cb315b35e6a675a8152 +Author: Panu Matilainen +Date: Wed Jun 30 11:57:17 2010 +0300 + + Fix potential getOutputFrom() error on font provide extraction (RhBug:609117) + - if fonts are detected in the package being built but fc-query isn't + present, the script exited without consuming stdin which can break + getOutputFrom() + +commit 7caf820c778351baa237f04cb652d55f24811349 +Author: Ville Skyttä +Date: Sun May 23 10:54:39 2010 +0300 + + Extract dependencies from "use base qw"..."" and "use base qw'...'". + +commit 6a37f166a81c302e18eb987ad6d42a7dd930ae9a +Author: Panu Matilainen +Date: Tue Jun 29 11:59:33 2010 +0300 + + Update translations to pick up some recently added strings + +commit 419bc7762dc2c9e35880b3ffc8058b8fbc33f62f +Author: Panu Matilainen +Date: Tue Jun 29 11:34:32 2010 +0300 + + Add --delsign to man page + +commit 0e143cfe9f11abc42733d2265dc6d61cb716e5a4 +Author: Panu Matilainen +Date: Tue Jun 29 10:47:18 2010 +0300 + + Add some sanity checks for generated signatures (related to RhBug:608599) + - GPG supports all sorts of algorithms NSS doesn't, do some basic tests + to verify the generated signature is something we can actually use. + +commit 20cfa7d2b4c927798ad38126821d194fafd93ffe +Author: Jiri Kastner +Date: Tue Jun 29 09:46:22 2010 +0300 + + Tell rpm about SHA-224 existence (RhBug:608599) + - Fixes "Unknown hash algorithm" message but this is cosmetic only as + NSS doesn't currently support SHA-224. + +commit 85437f43ab3f87989dc9f5b85fec97549b344123 +Author: Panu Matilainen +Date: Mon Jun 28 15:59:23 2010 +0300 + + Use rpmdsThis() instead of doing the same manually + +commit 122cf542d17d5041d44b15a7f02240ac7bffcdd1 +Author: Panu Matilainen +Date: Thu Jun 24 13:17:08 2010 +0300 + + Move collections tag to "known free" number, document reserved tags + - missed during review, oh well.. + +commit 520e9a17c5b72c78e08ebead278ba114a5340508 +Author: Panu Matilainen +Date: Thu Jun 24 11:33:52 2010 +0300 + + Err, remove /build/ from .gitignore + +commit a8aa65840911b1daf3b54ce6a90770cfd9c4d273 +Author: Panu Matilainen +Date: Wed Jun 23 16:11:10 2010 +0300 + + Permit plugins to use rpmChrootDone() too + +commit 26874707edfe73e153383284f9fe33cfd9879bb1 +Author: Michal Schmidt +Date: Tue Jun 22 15:51:41 2010 +0200 + + Revert "If there are no hardlinks, dont bother with s-bit and caps removal" + + Deciding whether it is necessary to remove the SUID bit based on + the current link count creates an opportunity for a race condition. + A hardlink could be created just between lstat() and chmod(). + + This reverts commit 89be57ad9239c9ada0cba94a5003876b456d46bf. + +commit 7583fcc3416e5e4accf1c52bc8903149b1314145 +Author: Michal Schmidt +Date: Wed Jun 23 14:37:56 2010 +0200 + + Allow '--short-circuit' for '-bb' + + This patch allows short-circuiting of building binary packages. To + prevent accidental use of short-circuited rpms, they are marked with + an unsatisfiable dependency "rpmlib(ShortCircuited)". A developer using + this feature for local development and testing will use "--nodeps". + Should such a rpm leak into the world, users will quickly notice + it does not install by default. + + (v3: avoids API change, suggested by Panu Matilainen. + v2: added poisoning with unsatisfiable dependency.) + + Michal + +commit b6adef396b6278945ca97a552c8a6020d4a7b628 +Author: Panu Matilainen +Date: Wed Jun 23 15:59:49 2010 +0300 + + Add configure.ac check for need to -ldl + - without this the build can barf on unresolved dl* symbols with a + linker defaulting to --no-add-needed + +commit a0e4220d3536e9a132daae3964f38a45422ada9e +Author: Panu Matilainen +Date: Wed Jun 23 15:54:48 2010 +0300 + + Use rpmlog() instead of fprintf() for collection error messages + +commit deb24a5698f7fc96c2b52b823ba8b107f378e865 +Author: Panu Matilainen +Date: Wed Jun 23 14:49:01 2010 +0300 + + Make rpmChrootIn/Out() accessible to plugins + - the exec plugin was using a private copy of rpmchroot.c to avoid + RPM_GNUC_INTERNAL on the API, better let the plugins use librpm + state instead + - the chroot API really belongs to librpmio but for now... + +commit 3aac9445db6672809324f31feac004dbe9b7f311 +Author: Panu Matilainen +Date: Tue Jun 22 14:51:31 2010 +0300 + + Fix python ts.check() dependency tuple munging + - braindamage from commit fab2debfe440d677dbd072c3cd73d2c99876e7a5, + causing list index out of range for any non-versioned dependency + and bogus garbage for the rest, doh... + +commit 6012c56c0bbf6af828d42cedc0b6e325f03efd7d +Author: Panu Matilainen +Date: Tue Jun 22 14:20:47 2010 +0300 + + Fix breakage from commit ccb545f0e9b6cb10e9e7c20b55f77aab754eb9cb + - file dependencies aren't necessarily on real files, they can be + virtual provides too eg when alternatives is used + - rc was being accessed unitialized + - oh well, at least I said "supposedly"... + +commit 4ee92967572da681aa2092d67dbb04e51d14c495 +Author: Panu Matilainen +Date: Tue Jun 22 12:22:04 2010 +0300 + + numAddedPackages is unused since rpm 4.8.0, eliminate + +commit f3bcf9a18c967e9979b7933d3204300618ad3821 +Author: Steve Lawrence +Date: Mon Jun 21 17:04:40 2010 -0400 + + Add a generic plugin for use by simple Collections + + This patch adds a generic plugin, exec.so, that should be sufficient for the + majority of Collection actions. After all packages in a Collection have been + installed/removed, this plugin executes the arguments by calling system(3), + allowing for a very generic and powerful method to perform many actions. + + This also adds two sample macros as examples of the format, using the exec.so + plugin. + +commit 85d89bafdca5ec04866f9a7ecabb735d292c5a25 +Author: Steve Lawrence +Date: Mon Jun 21 17:04:37 2010 -0400 + + Determine when to perform Collection actions + + There are three times during a transaction when Collection actions can be + performed: + + 1) After the last time a member of a collection is either installed or removed + 2) After the last time a member of a collection is installed only + 3) Before the first time a member of a collection is removed only + + This patch adds three lists to the rpmte structure to mark which transaction + elements fall into each of these groups, and the collections that caused that. + A new function is added to the TSM to scan through all the transaction elements + and update these lists. When a collection is added to one of these lists, it + signifies that when that transaction element is installed, the appropriate + action should be performed for that collection. + +commit 04bdec775ac56c7673f87257306b23536a954474 +Author: Steve Lawrence +Date: Mon Jun 21 17:04:39 2010 -0400 + + Add plugin calling support + + This patch adds a simple plugin system that makes simple problems easy to + solve, and difficult problems, such as SELinux, possible. + + When the transaction gets to the point where a collection action should occur, + it expands a macro of the form %__collection_ to get the path + to a plugin and any additional options. The plugin is dlopen'ed, and the + appropriate function is called in the plugin, with the additional arguments + passed in. + + This also adds a --nocollections option to disable performing Collection + actions. + +commit 2fd0913a6abd91389a3f1498ef9c4b2c6c72bff1 +Author: Steve Lawrence +Date: Mon Jun 21 17:04:38 2010 -0400 + + Add common Collection requirements + + This patch adds the install-time feature that if a package requires a package + in a collection, then it also requires all other packages in that collection. + This has the effect that collections will be roughly grouped together during a + transaction. + + Although this is not absolutely necessary for the majority of collections, it + is required for the SELinux collection. This is because all SELinux policies + must be installed before the applications they secure to ensure correct labels. + This means we must ensure packages in the selinux collection are ordered + earlier in the transaction than all applications they protect. Adding this + implicit runtime requirements achieves this in a general manner, without major + modifications to dependency ordering. + + To accomplish this, this patch splits the addRelation function into two parts: + one that determines which relations to add, and one that actually adds them. + After the usual relation is added between two packages, it then determines if + the required package contains any collections. If so, it finds all other + packages that are in the same collections and creates additional relations. + +commit 015870830503700b1aa7921407752792a8388792 +Author: Steve Lawrence +Date: Mon Jun 21 17:04:36 2010 -0400 + + Add new Collections preamble tag + + This adds a new Collections preamble tag, which contains a space separated list + of collection names that the package belongs to. + +commit d6795bee66be227895484a40b2d805cff1115734 +Author: Héctor Daniel Cabrera +Date: Mon Jun 14 15:45:49 2010 +0000 + + l10n: Updated Spanish (Castilian) (es) translation to 100% + + New status: 724 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 33197fd4b19eeed5e7623ec1af62595449fc710b +Author: Panu Matilainen +Date: Fri Jun 11 08:19:08 2010 +0300 + + Dont bother with selinux contexts in test transactions + - initializing contexts isn't exactly cheap, and test transactions + have no use for them + +commit 89be57ad9239c9ada0cba94a5003876b456d46bf +Author: Panu Matilainen +Date: Fri Jun 11 08:17:12 2010 +0300 + + If there are no hardlinks, dont bother with s-bit and caps removal + +commit 0d61354b481dfa8d6ade49602948ffb6edc86cdd +Author: Tadashi Jokagi +Date: Mon Jun 7 22:12:12 2010 +0000 + + l10n: Updated Japanese (ja) translation to 97% + + New status: 707 messages complete with 9 fuzzies and 8 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 7b9d87a044455b0ef50f84446a744e928e1ac4fc +Author: Tadashi Jokagi +Date: Mon Jun 7 22:10:29 2010 +0000 + + l10n: Updated Japanese (ja) translation to 97% + + New status: 705 messages complete with 10 fuzzies and 9 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 61f5bea69e4a992c18e5590239cd5b153516a919 +Author: Panu Matilainen +Date: Mon Jun 7 14:01:02 2010 +0300 + + Oops, bad format spec in Finnish translation + +commit 36e8e3d9fe7890249cfeab4ae72f85e19cc7b43a +Author: Panu Matilainen +Date: Mon Jun 7 13:14:52 2010 +0300 + + Eliminate fuzzies from Finnish translation + +commit cbb37abb4f69160c867b53c300fd67d74a1e6574 +Author: Panu Matilainen +Date: Mon Jun 7 12:51:09 2010 +0300 + + Update .gitignore a bit + +commit d8e99d20768358364029842c39c72ce1428348e9 +Author: Yuri Chornoivan +Date: Sun Jun 6 05:40:03 2010 +0000 + + l10n: Updated Ukrainian (uk) translation to 100% + + New status: 724 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit c19d8461765aa92d0abe62296495feaf99b8946c +Author: Piotr DrÄ…g +Date: Thu Jun 3 18:45:25 2010 +0000 + + l10n: Updated Polish (pl) translation to 100% + + New status: 724 messages complete with 0 fuzzies and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit 15c0c4e7a1291915a4ea4115e94d2b747d5091ac +Author: Panu Matilainen +Date: Thu Jun 3 16:22:09 2010 +0300 + + Fix "empty reply from server" curl-syndrome with url retrieval (RhBug:598988) + - We were adding a trailing newline to urlhelper command line passed + to execvp(), with the newline ending up in the URL passed to curl. + Many servers dont seem to mind the extra newline, but some do. Oh well... + +commit 4d172a194addc49851e558ea390d3045894e3230 +Author: Panu Matilainen +Date: Thu Jun 3 11:04:12 2010 +0300 + + Remove POSIX file capabilities from executables on erase/rename too + - Just like suid/sgid bits, hardlinks to executables with capabilities + set can "leak" permissions to old, potentially vulnerable versions + of binaries. Related to RhBug:598775. + +commit ca2d6b2b484f1501eafdde02e1688409340d2383 +Author: Panu Matilainen +Date: Wed Jun 2 09:15:48 2010 +0300 + + Strip s-bits on upgrade too (RhBug:598775) + - Previously only actual package removal would clear s-bits from + s[ug]id files. This needs to be done on upgrade too to prevent + leaving vulnerable hardlinks of s[ug]id binaries around. + +commit 49b4dea69d19794253f3dfb56fcd35cd9679fcc7 +Author: Tadashi Jokagi +Date: Wed Jun 2 00:01:13 2010 +0000 + + l10n: Updates to Japanese (ja) translation + + New status: 664 messages complete with 47 fuzzies and 13 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit ccb545f0e9b6cb10e9e7c20b55f77aab754eb9cb +Author: Panu Matilainen +Date: Tue Jun 1 15:49:16 2010 +0300 + + Refactor rpmdb lookups + caching to a helper function + cosmetics + - no functional changes (supposedly ;) just cleaning things up a bit + +commit 7a8b716187804cd6bbe113dab8c2ad5d9d5ef57c +Author: Panu Matilainen +Date: Tue Jun 1 13:55:15 2010 +0300 + + On colored transactions, require matching arch for freshen (RhBug:553108) + - What we'd really want to compare here is the color or ISA of the packages + but color isn't realiable as eg -devel packages often aren't correctly + colored, and ISA isn't currently available in the header as a standalone + entry. Comparing arch prevents otherwise reasoable i386 -> i686 type + arch changes on freshen but at least it avoids the most pathological + issues. + +commit cadab3afa55388f3082a3468d582896caabfd55c +Author: Panu Matilainen +Date: Tue Jun 1 11:58:42 2010 +0300 + + Permit DOS line-endings in PGP armors (RhBug:532992) + - RFC-4880 doesn't requires unix-style line-endings, we shouldn't either. + This is probably still oversly strict as RFC-4880 appears to permit + any whitespace to follow armor headers but ... shrug. + +commit 84621fa7e1f5162acaa53f60039f46d1d87ef552 +Author: Panu Matilainen +Date: Tue Jun 1 10:37:09 2010 +0300 + + Support many pubkeys in a single file in --import (RhBug:586827) + +commit ddec80b614567b9a6f0f784beb6ee45b145c6fd7 +Author: Panu Matilainen +Date: Tue Jun 1 10:15:10 2010 +0300 + + Don't return errors on trying to import duplicate keys + - On the principle of "no news is good news", if we already have the + keys to be imported, then everything is ok. The former behavior is + just confusing as witnessed in RhBug:462979 + +commit 099a45a5b9e7051e4e4db0d0d0037751ea07405c +Author: Panu Matilainen +Date: Mon May 31 18:00:33 2010 +0300 + + Nuke leftover variable from the chroot workout + +commit 8687f255a47dad4e42f9eab97eeded38cced7a91 +Author: Panu Matilainen +Date: Mon May 31 17:01:53 2010 +0300 + + Update translations to pick up chroot-related string changes + +commit f2bfa2edfc769a66c3ca789bbd681bd22483154b +Author: Panu Matilainen +Date: Mon May 31 14:07:46 2010 +0300 + + Use the new chroot API everywhere, eliminate old related goo + +commit 90a37c2f5c848eaf37c9afeac1e85dfe11e1301a +Author: Panu Matilainen +Date: Mon May 31 13:11:47 2010 +0300 + + Add a simple API for dealing with chroot state changes + - Chroot is a process global state so it needs to be tracked globally. + A process can (in theory) have several transaction sets, each with + different roots (although only one can be active at any time), so + associating the chroot state with transaction set (as currently done) + is not right. + - "Reference count" chroot entering and exiting so callers dont need + to track the state changes individually when they need to go + in and out of chroot if not already done. + - This should probably go to librpmio eventually but as there are no + needs outside librpm currently, keeping this internal so we're free + to fiddle with the api if necessary + +commit a795c69c2097586bd04b816f252f1aebba655b73 +Author: Panu Matilainen +Date: Mon May 31 13:28:58 2010 +0300 + + Eliminate unused no-op FSM_CHROOT stage + - the fsm thingie doesn't need to deal with chroot issues: except for + build where it doesn't matter, its only called from psm where the + chroot is already taken care of + +commit 1dd5b084bd86b0c18016eaa678ab83c447ec3c9d +Author: Panu Matilainen +Date: Fri May 28 12:57:59 2010 +0300 + + Add internal helper for formatting file attribute strings + - Eliminates some copy-paste slopping. Verify code traditionally only + shows the first attribute, take care to keep that format to avoid + breaking scripts unnecessarily + +commit 00f1a6e0b1805c2c0f9ff314aabce8f9ca209f4c +Author: Panu Matilainen +Date: Fri May 28 12:21:34 2010 +0300 + + Add header extension tag RPMTAG_FILESTATUS for file verification + - Permits basic file verification with just a headerGet(), with some + caveats: there's no way to control which attributes get verified, + and there's no filtering of mtime differences of shared files. Those + aside, rpm -q --qf "[%{filestates:vflags} %{filenames}\n] " now + performs the same as "rpm -V --nodeps --noscripts " + +commit ac0ab016a5ec31e65eb0c0910a5a6f1199aae3e7 +Author: Panu Matilainen +Date: Fri May 28 12:18:26 2010 +0300 + + Add internal helper for formatting verify flags + +commit a6c8e490236bc373fcb565d30652f69218db2b84 +Author: Panu Matilainen +Date: Fri May 28 10:49:58 2010 +0300 + + Move shared file timestamp filtering out of rpmVerifyFile() + - rpmVerifyFile() reports things as they are in reality - if timestamps + on disk differ to header then it reports it. Filtering on the result + belongs to the code interpreting the results. + +commit be1c4872c1fb3e196beddde2c415ed2a009dfe32 +Author: Panu Matilainen +Date: Fri May 28 10:27:01 2010 +0300 + + Dont crash on NULL ts to rpmtsInitIterator() + +commit 3f38850609abc97168fb2ba521d6e1923bf80900 +Author: Panu Matilainen +Date: Fri May 28 09:57:09 2010 +0300 + + Only pass the info we actually care about to verifyHeader() + +commit f4bbfed8003ae7c3317a2353fcf36c2768ad6dda +Author: Panu Matilainen +Date: Fri May 28 09:51:51 2010 +0300 + + Eliminate unused argument to verifyDependencies() + +commit 591c5c3fbb60b54094e7266976ff00aa936c7d3c +Author: Panu Matilainen +Date: Fri May 28 09:47:47 2010 +0300 + + Clean up verify script handling a bit + - test verifyscript existence in rpmVerifyScript() instead of caller, + making it safe+correct for calling on any header + - eliminate unused/unnecessary arguments, local variables and bogus leftover + comments + +commit 5c6795bf43acdcfcd6fea73f00eac50764530bc3 +Author: Panu Matilainen +Date: Wed May 26 13:25:39 2010 +0300 + + Handle test-transaction centrally on entry to psm + - psm in test-mode is a no-op anyway, so dont bother at all with it + - also removes the need to check for test mode on pre/posttrans scripts, + these are now fully covered by psm too + +commit 614c52090b1740b6f09863e56e4887c5b1af94ae +Author: Panu Matilainen +Date: Wed May 26 11:30:15 2010 +0300 + + Eliminate rpmts from the scriptlet machinery + - pass scriptFd and selinux enabled status as arguments from psm level + - selinux status could be queried directly with is_selinux_enabled() + but that's a fairly expensive call which does all sorts of funny + things and probably doesn't work at all in the average chroot + - Lua-scripts dont currently honor scriptFd and have no use for selinux + but pass the info there too as an early step towards supporting + scriptFd with Lua + - makes rpmScriptRun() even more of an argument monster, some of this + should probably go into rpmScript struct... + +commit c9f74ddd0aef5aac33867908d7cc247064f085f0 +Author: Panu Matilainen +Date: Wed May 26 10:15:06 2010 +0300 + + Simplify chroot handling wrt scriptlets + - switch root if necessary on entry and exit to psm already, nothing + inside the psm needs access to outside chroot + - eliminate chroot handling from scriptlet machinery, dealing with + chroot is a job for higher levels + - Lua scriptlets can change our cwd, always ensure we return to previous + cwd after executing by saving and restoring the cwd + +commit 2c54c6abbf4c6ee44d0693133a2f373621832ffb +Author: Panu Matilainen +Date: Tue May 25 15:38:15 2010 +0300 + + Move scriptlet statistics collection (back) inside psm + - removes one rpmts dependency from scriptlets + +commit a2b999df2e71dd7b595ad329e26efe80eabb9d1f +Author: Jindrich Novy +Date: Mon May 24 09:39:54 2010 +0200 + + Put the macro evaluation in spec comments back. + - '#' at the beginning doesn't need to always represent comment in spec + but can be part of the embedded bash script (RhBug:594672 - comment 6) + +commit 0e04c09d4896fe6ba1431c5383bde24983ed1f1f +Author: Panu Matilainen +Date: Fri May 21 15:36:03 2010 +0300 + + Move the lone hashFunctionString() into misc.[ch], eliminate rpmhash.[ch] + - Besides there not being much point in having a separate source + header + for a small single function, this fixes build on case-insensitive + systems such as Mac OS X. + +commit 8cb7b9085c58aff778ecda18d2073af2fa7082df +Author: Jindrich Novy +Date: Fri May 21 13:12:02 2010 +0200 + + Do not evaluate macros in spec comments (RhBug:594672) + +commit 2d468d2cd9d2a5e2f9adcdecdd9f017fe04eb77a +Author: Till Maas +Date: Thu May 20 11:35:16 2010 +0300 + + Search all locale dirs in find-lang.sh, not just those under share/ (#159) + +commit e63293b0ea1c6a3a4be6aca328ee9fae4c3bfcdb +Author: Panu Matilainen +Date: Wed May 19 15:33:52 2010 +0300 + + Use pgpValString() for :pgpsig header formatting (RhBug:587755) + - instead of copy-slopping (and forgetting to do so whenever something + changes) just use the values we know from pgpVals.. + +commit 2be413810cd78b0a503699ceca3f8e1505f1b425 +Author: Panu Matilainen +Date: Wed May 19 15:32:54 2010 +0300 + + Add public pgpValString() function + enum for the various types + - The equivalent used to be possible in 4.4.x era as the value tables + were all exported, but this way we need to export far less + and the implementation details stay internal. + +commit 072815887faa202a60b5ca310e6e5cbfbfbeac5d +Author: Panu Matilainen +Date: Wed May 19 14:59:02 2010 +0300 + + Bury struct pgpValTbl_s definition inside rpmpgp.c + - as all the value tables are static inside rpmpgp.c, exposing this + is pointless (should've been unexported long time ago) + +commit 0e0e332b466a9784620c483faa374067381e96ce +Author: Panu Matilainen +Date: Wed May 19 10:12:43 2010 +0300 + + Handle non-existent dependency sets in python (RhBug:593553) + - rpmdsNew() returns NULL if the requested dependency type doesn't + exist in the header. The C-side API can handle NULL to all rpmds + "methods" and this is how librpm deals with non-existent sets rather + than waste memory on for empty ds structures. However the python side + wasn't expecting NULL for legal requests (but not setting error either) + and thus blowing up with SystemError exception. + - Raise TypeError on illegal arguments to rpm.ds constructor, and present + non-existent dependency sets as empty rpm.ds objects to python. This + lets python callers use iteration over ds items regardless of whether + the dependency actually exists or not. The alternative of returning + None (or raising exceptions) would break existing code for no + particularly good reason. + +commit 2b7884ce2914c48514023dbe61dc7a126964f438 +Author: Panu Matilainen +Date: Tue May 18 10:39:22 2010 +0300 + + Fix return from chroot() on verify (RhBug:590588) + - a couple of important steps in chroot() in and out sequence missing, + causing "No such file or directory" whining on return from chroot() + unless cwd happened to be / + +commit e6a0b0e5661f15fbb39f45f937aef4b0464be39c +Author: Roland McGrath +Date: Mon May 10 20:05:48 2010 -0700 + + Make debugedit -i recompute build ID only when any DWARF was actually changed. + +commit c4b63623533d8b7fa7b89ea5fe33dd02663c99c5 +Author: Roland McGrath +Date: Mon May 10 17:53:07 2010 -0700 + + Whitespace fixups for tools/debugedit.c + +commit 1d7e1f66e1be40705b23e4a9a1c7be3d4ae611d9 +Author: Panu Matilainen +Date: Fri May 7 20:24:01 2010 +0300 + + Plug dumb memleak in rpmpsMerge() + +commit 6fc3cbefee92520a842caa29cf0ae1cc6f238c98 +Author: Panu Matilainen +Date: Fri May 7 20:18:58 2010 +0300 + + Fix breakage from removedPackages changing to hash + - tsmem->delta is still needed for tsmem->order reallocation, + zero delta causes funny effects on larger package sets (test suite + doesnt trigger this) + +commit 775cbf8bf28775f913ac40a79d95de714fff6d2d +Author: Panu Matilainen +Date: Fri May 7 15:25:38 2010 +0300 + + Revert back to rpmdbRemove() taking instance number instead of actual header + - On package reinstall (ie --replacepkgs) we only know the old header + by the instance number, and grabbing the header from the db in + psm as a special case for that is more trouble than just doing what + we always did. + - Reverts commit e16695e932e294ec600e673d38c41bde20931204 and unbreaks + the --replacepkgs test case + +commit f0518013733f4b2ac32ac15f1407c014ebc83e03 +Author: Panu Matilainen +Date: Fri May 7 14:31:25 2010 +0300 + + Convert rpmte internals to use the transaction pointer from element itself + +commit 8f7c2d7063df6d1057425d014ce4168d46c5e7d9 +Author: Panu Matilainen +Date: Fri May 7 14:07:39 2010 +0300 + + Store pointer to transaction set in transaction elements + - unused now but allows various new things and more element "independency" + - eliminate the unused dboffset argument while at it + +commit 0782ee6b71b2cdad2a6fb6ff2f90d506e3230eb2 +Author: Florian Festi +Date: Fri May 7 13:06:40 2010 +0200 + + Fix compiler warning in rpmhash Resize() + +commit fe6967d5a33dbeb53a31068cd82b7599617870f7 +Author: Florian Festi +Date: Thu May 6 16:31:53 2010 +0200 + + Remove no longer needed function intcmp() + +commit 70e9b035ff33d649adb32028258f9676fc12d126 +Author: Florian Festi +Date: Wed May 5 12:49:16 2010 +0200 + + Convert tsmem->removedPackages to a hash table and remove rpmdbPruneIterator from the API + +commit 9fad36f0eddb5d2d63cba6656978c68d7b5b715d +Author: Florian Festi +Date: Thu May 6 15:30:01 2010 +0200 + + rpmhash: new Empty() function to remove all entries + +commit aafd8500d3235b1c8e54c838924c3f5b490c9148 +Author: Florian Festi +Date: Wed May 5 12:48:41 2010 +0200 + + rpmhash: Accessor functions for the size and usage + +commit 030f7dde13118ae7a78c7008a745dc342ff9be4c +Author: Florian Festi +Date: Thu Mar 25 12:06:22 2010 +0100 + + rpmhash: Grow when hash table gets too full + + Add some statistics to be able to find out how full the hash is + +commit 869004e8fbc265d875d22713016fdb440950a556 +Author: Panu Matilainen +Date: Thu May 6 15:12:41 2010 +0300 + + Move header filecount retrieve from addTE() to rpmfsNew() + +commit 27869a523327475a4f809415753e1ec091093d4a +Author: Panu Matilainen +Date: Thu May 6 14:55:38 2010 +0300 + + Tolerate NULL in rpmfsFree() and rpmfsFC() + - both are "can't happen" situations but easy to handle cleanly here... + +commit 63dcd3d4973906eccd76129d194fabea34faece9 +Author: Panu Matilainen +Date: Thu May 6 14:51:48 2010 +0300 + + Minor cleanup to rpmfsNew() + - use xcalloc() to ensure clean state, no need to manually do it all + - group non-conditional and conditional operations together + +commit 118fba22950c35ef296c93b992746c9137a67f23 +Author: Panu Matilainen +Date: Thu May 6 14:14:16 2010 +0300 + + Move delTE() inline to rpmteFree() + - no point splitting this up, its just straightforward freeing of stuff + - dont bother with tonne of assigning everything to NULL, it gets + zeroed out by memset() anyway + +commit a9cb04fe1c6650bf88271b904b9b76db8c6e7b98 +Author: Panu Matilainen +Date: Thu May 6 13:20:26 2010 +0300 + + Unexport rpmteNew() and rpmteFree() + - the only meaningful way to create transaction elements is by adding things + to a transaction through rpmtsAddFooElement(), there's no need to + expose these and restrict our ability to change the API when needed + +commit d7c37d8a46b8374f1b0d96c0b2215f55a553d9c2 +Author: Panu Matilainen +Date: Thu May 6 12:32:08 2010 +0300 + + Minor cleanup to rpmReSign() + - headerNew() cannot fail, dont bother checking + - initialize variables on declaration + +commit 834c8383476fe54c65fe07b69c01cd3d35f5a488 +Author: Panu Matilainen +Date: Thu May 6 12:28:23 2010 +0300 + + Fix minor header iterator leak in rpmReSign() + - fix dumb double-initialization error introduced somewhere between + 4.4 and 4.6, also while-loop is more natural here than for-loop + +commit a592b14fe28e4bf096d1623de13bc7cc5c528ec3 +Author: Panu Matilainen +Date: Thu May 6 12:16:20 2010 +0300 + + Clean up rpmcliImportPubkeys() a bit, no functional changes + - remove questionable rpmtsClean() call remnants from rpm 4.4.x days + when it used to clean the signature/digest data in ts but also + clean a pile of completely unrelated items + - rearrange the error code handling so we can get by with single place + of freeing the temp allocations + - move local variables to the scope where needed and eliminate unnecessary + ones + - remove redundant NULL check on argv, this is already done by caller + - remove unused qva argument (static function so no API implications) + +commit 3b96dfb29ab75a4f7f37713a93ec39460c158ef0 +Author: Pavol Rusnak +Date: Wed Mar 17 16:02:46 2010 +0100 + + Don't process desktop files without Type=Application and Exec= line + +commit ed74161b7e5b90ba886926ced14ba3aca018a4f4 +Author: Panu Matilainen +Date: Tue May 4 09:05:23 2010 +0300 + + Rename python module version symbol to __version__, add __version_info__ + - This seems to be a de-facto standard in python land, as rpm.version + hasn't been in any released version we can still change this easily. + Suggestion from James Antill. + +commit f2c4eebae0c33c01274b2da1ecb19f62beecb21f +Author: Panu Matilainen +Date: Thu Apr 29 15:47:59 2010 +0300 + + Doh, dont shadow the rpmtsVerifyDB() return value + +commit d131c3393a2a43d87047bffdd73cf9ae3c8146c2 +Author: Giulio Eulisse +Date: Tue Apr 20 11:42:10 2010 +0200 + + Fixes missing __fxstat64 symbol on mac. + +commit 40b275b4a7ff68a53f09da28958c132050cc674a +Author: Panu Matilainen +Date: Wed Apr 28 12:31:14 2010 +0300 + + Fix a few uninitialized variable cases found by clang-analyzer + +commit 27086a30157d06c4d690d0f77e20eec17883aa00 +Author: Taylon Silmer +Date: Tue Apr 27 18:21:27 2010 +0000 + + l10n: Updates to Portuguese (Brazilian) (pt_BR) translation + + New status: 721 messages complete with 1 fuzzy and 0 untranslated. + + Transmitted-via: Transifex (www.transifex.net). + +commit efe0ebcbc14e43042083ce76043c69b8eb829280 +Author: Panu Matilainen +Date: Thu Apr 22 13:48:58 2010 +0300 + + Protect rpmtsVerifyDB() with transaction lock + - BDB docs state that db->verify() doesn't perform any locking even + when used within an environment, and should only be used on files + that are not being modified by another thread of control. Grabbing + the transaction lock while verifying mostly ensures nobodys writing + to the db behind our back. + +commit a5f17bac34fb3bf777126cf6f6d4e237a6db41a4 +Author: Panu Matilainen +Date: Thu Apr 22 12:49:03 2010 +0300 + + Ditch "fcntl_locking" bdb config option + - This is an undocumented BDB interface (only documented in the db.h header), + and its not something users should be messing around with + +commit e7b0d96900fb16a707776f95052f924fc4241c17 +Author: Panu Matilainen +Date: Thu Apr 22 12:23:24 2010 +0300 + + Make transaction lock path per-transaction + - Although it doesn't really happen in practise, rpm's API permits several + transactions with possibly differing roots within process lifetime. + Previously the lock path was calculated just once globally so we could + easily be locking in a completely wrong place (eg locking in a previously + accessed chroot when system rpmdb should be transaction-locked) + +commit 1f625e69e9609bedde9b071d87849ed518b43d22 +Author: Panu Matilainen +Date: Thu Apr 22 11:01:27 2010 +0300 + + Further generalize the rpmlock interface + - Move transaction lock path handling into rpmts.c, export new low + level rpmlockAcquire() function to actually grab a lock + - Rename rpmtsFreeLock() to rpmlockFree() and return NULL in the + general rpm style + +commit d2810bdc527a5dbe03c15291dd50a0cdfca79319 +Author: Panu Matilainen +Date: Thu Apr 22 10:44:38 2010 +0300 + + Generalize rpmlock_new() by moving transaction lock path calculation out + +commit 35c563af8ce0b4a78096f2e5232d608630a0178e +Author: Panu Matilainen +Date: Thu Apr 22 10:37:51 2010 +0300 + + Make rpmlock type visible inside rpm, use instead of void* + +commit fb772e2cad8ed79fb4d1b971bd10842381102ea7 +Author: Panu Matilainen +Date: Wed Apr 21 13:00:43 2010 +0300 + + Lose the useless header refcounting debug junk + - one more of these still left behind.. pff + +commit 8cc740c43f28b43cd34894d7c0d47b48ce5f4f91 +Author: Rakesh Pandit +Date: Wed Apr 14 16:44:52 2010 +0530 + + Eliminate unused "known problems" based filtering from rpmtsRun() + - This mechanism has never been used by anything at all, which suggests + its not a particularly useful feature + - Removing unused rpmpsTrim() from rpmps + - Marking okProbs parameter of rpmtsRun() function as unused to avoid + unnecessary breakage + +commit c0ab315e71c46e36de038dde4a32ebe6eba04c41 +Author: Alexey Tourbin +Date: Wed Apr 21 11:10:15 2010 +0400 + + rpmdb.c (dbiOpen): fix dbix condition + + In the loop, dbix is always initialized to 0, so checking (dbix < 0) + is uselss. Insetead, we sould check (dbix >= dbiTagsMax). + +commit da6e66a9b28f21f81a5e9ce1ce760e26e2a5bdd9 +Author: Panu Matilainen +Date: Thu Apr 15 10:24:03 2010 +0300 + + Only check the type of dependency requested in checkInstDeps() + - This gets called separately for requires, conflicts and obsoletes, + wth should it loop over conflicts when looking for requires? + +commit a0ed26b894e301d479c8092c9c7fa16f2d6c3c2c +Author: Panu Matilainen +Date: Wed Apr 14 12:24:37 2010 +0300 + + Add a basic reinstall test to test-suite + - this currently fails due to commit e16695e932e294ec600e673d38c41bde20931204, + on reinstall element header vs db header mismatch, adding this as + a reminder to fix it... + +commit 97a85443223777bc9b8c62b962b5b4b1344e7086 +Author: Panu Matilainen +Date: Wed Apr 14 09:22:07 2010 +0300 + + ...but make sure the pre-requisite isn't also an erasure-dependency + - fixes eg Requires(pre,postun) case which must not be filtered out here + +commit 2e03c07db7e10725be9ccdc13daded2e4bf5b017 +Author: Panu Matilainen +Date: Wed Apr 14 09:05:55 2010 +0300 + + Pre-requisites of installed packages dont need to be verified (RhBug:223642) + +commit dcaec34d3f07ff688ce16afa77734dd37889ce81 +Author: Panu Matilainen +Date: Tue Apr 13 08:50:08 2010 +0300 + + Update a few tag descriptions + visibility + - RPMTAG_CAPABILITY and RPMTAG_RHNPLATFORM are truly obsolete and + should've been taken out a long time ago + +commit a761daa2f8a0edb66733444f49f032f3a13035b1 +Author: Panu Matilainen +Date: Tue Apr 13 08:35:45 2010 +0300 + + Use correct tag for NOPATCH + - dumb copy-paste error from commit a317eaadc3f7b9b4ec373719e7d60fb8b98e2c21 + +commit 538ddff69cacbd0db346cac3c10171424ae9b229 +Author: Panu Matilainen +Date: Tue Apr 13 08:32:49 2010 +0300 + + RPMTAG_NOSOURCE and NOPATCH aren't internal, they end up in nosrc headers + +commit b2efc89d7db4f3a31dfd7f91028c5a9f9643334f +Author: Michael Schroeder +Date: Mon Apr 12 12:12:46 2010 +0200 + + Gnu tar sometimes prints a "tar: Record size = 16" message, breaking + rpmbuild -ta. + +commit dfa98e7a064d9ea28b416b52f2673202799bcb9f +Author: Michael Schroeder +Date: Mon Apr 12 12:11:56 2010 +0200 + + Adapt the Makefile as rpmdb_svc can no longer be built. + +commit 18c3e1a37c482811b7b3af1415ef67aac527b869 +Author: Michael Schroeder +Date: Mon Apr 12 12:11:05 2010 +0200 + + New gcc versions comlpain about undefined behaviour... + +commit daec6ebf58331776279f389738af4788b865033d +Author: Michael Schroeder +Date: Mon Apr 12 12:10:20 2010 +0200 + + readLineFromOFI may modify the fileStack, thus we have to re-set + ofi after calling it + +commit cad147070e5513312d851f44998012e8f0cdf1e3 +Author: Michael Schroeder +Date: Mon Apr 12 12:09:04 2010 +0200 + + Do not load keyring if signature checking is disabled. + +commit 64e7f2aeb4ce01fccacde021fb22c85083284efb +Author: Michael Schroeder +Date: Mon Apr 12 12:07:01 2010 +0200 + + Seems like a change was made to make %attr(-) go back to the + defattr setting. Unfortunatelly this broke %defattr(-). + +commit 1b78a6974da7731060a1e87f837c449e07f08941 +Author: Panu Matilainen +Date: Fri Apr 9 16:36:17 2010 +0300 + + Clean up dbiOpen() a bit + - eliminate now redundant rc-condition, move local variables to the + scope their used in + +commit 8591f205f02ca09f42c08f8c8ecac73e107485ea +Author: Panu Matilainen +Date: Fri Apr 9 15:52:29 2010 +0300 + + Move environment open "refcounting" to db_init() / db_fini() + +commit f2957887fb7f80c2dbf6f0b4973c72ca66b0d2e8 +Author: Panu Matilainen +Date: Fri Apr 9 15:06:59 2010 +0300 + + And now lose db_use_env from rpmdb struct + - Environment is always used, shared if possible private otherwise + +commit ba6b82d3faca3c5ee703ee16fe97b03892ee479a +Author: Panu Matilainen +Date: Fri Apr 9 14:53:31 2010 +0300 + + Simplify the dbenv->open() flags shuffle + - We always create an environment. If we dont have permissions to create + or join a shared environment, we use a private environment. Instead + of trying to figure out what to do beforehand, retry dbenv->open() + with different flags to see if it succeeds. This eliminates some + potential races when others might create/remove the environment + while we're pondering about appropriate flags. + - Lose the "create" bdb config option, this is something we always + want to decide internally. + - Remove "force" bdb config option, DB_FORCE is dbenv->remove() option + and its value clashes with DB_CREATE... + +commit 72a36aed42ed1facc0ffaccb4f91d4ae30d7a33d +Author: Panu Matilainen +Date: Fri Apr 9 11:16:37 2010 +0300 + + Move dbi_use_dbenv from dbi to rpmdb, this is a per-rpmdb setting + +commit 6a22fb6e3033468201ec405a482887581debea36 +Author: Panu Matilainen +Date: Fri Apr 9 10:50:32 2010 +0300 + + Move dbhome directory create/verify to openDatabase() + - all db opens must go through openDatabase(), no need to track this + with a separate variable on each index open + +commit 34b57de830dd5a600cefa1d2269626f744b642a0 +Author: Panu Matilainen +Date: Thu Apr 8 16:15:16 2010 +0300 + + Eliminate DB_JOINENV usage and config option + - DB_JOINENV is a no-op since BDB >= 4.4 + +commit 4e51e58c2376e4f649db5118b137a77a71a0d8a7 +Author: Panu Matilainen +Date: Thu Apr 8 16:07:58 2010 +0300 + + Eliminate "thread" BDB option + - this is not something that users should be tweaking + - its never been enabled, leave it that way for now + +commit 4f6281c2bb1292e646276bea5aafc08cae886ceb +Author: Panu Matilainen +Date: Thu Apr 8 16:04:37 2010 +0300 + + Lose redundant dbi_use_env check + - its always enabled when we get here, but might get turned off + in the initialization process (at least for now) + +commit 8f03db2c7682f2564aaa54cc4151b090379bc99f +Author: Panu Matilainen +Date: Thu Apr 8 16:01:20 2010 +0300 + + A little bit of sanity to dbiNew() + - lose the hysterical dbi_use_env condition and usedbenv option + this is always enabled + - ensure mpool is always initialized, lose the config option (this + is a mandatory BDB subsystem, not a bleeping configurable) + - let pagesize be what it is even when no configuration is present + - avoid overriding dbi_mmapsize and dbi_cachesize if set in the configuratio + - these are all per-environment, not per-dbi settings but for now... + +commit 30068b52802fe3dbab709b596972be34fdb08ba1 +Author: Panu Matilainen +Date: Thu Apr 8 14:39:07 2010 +0300 + + Eliminate exclusive and rdonly BDB configuration options + - we never want DB_CREATE to cause failure - let BDB create the + db if it needs to, otherwise DB_CREATE doesn't do anything + - rdonly is decided elsewhere, not in bleeping configuration + +commit eccf2b5f7e8256fff4bc8ac81c449c1ca89ed2c0 +Author: Panu Matilainen +Date: Thu Apr 8 14:37:51 2010 +0300 + + Mop up ancient BDB leftovers + +commit 4b9bedce3151e198b2a9c2af1298864225cd4deb +Author: Panu Matilainen +Date: Thu Apr 8 14:36:55 2010 +0300 + + Eliminate BDB transaction tuning knobs from configuration + - we dont support transactions yet, and this stuff doesn't + belong to "user configuration" anyhow, these are just useless + +commit 216ca35d62a73fda1d86bdd56cfe8b80c9d30d58 +Author: Panu Matilainen +Date: Thu Apr 8 13:59:05 2010 +0300 + + db_env_create() doesn't take any flags currently + +commit d9691e72570126316a161d63b2f6dc53d6c82d87 +Author: Panu Matilainen +Date: Thu Apr 8 13:46:13 2010 +0300 + + Remove per-dbi perms and configuration + - the file permissions are per-db global, no need to be able to + speficy different modes for indexes + +commit f70a4e6105cf0714daa69675a7086ed4f1067553 +Author: Panu Matilainen +Date: Thu Apr 8 13:39:08 2010 +0300 + + Remove per-dbi mode and configuration + - read/write/create mode is global to the entire db, either its + just readonly or its not + - this doesn't belong to configuration + +commit 72a472bdcd30aa3a76b7b2e4b46bdf0c748e0ffa +Author: Panu Matilainen +Date: Thu Apr 8 12:33:19 2010 +0300 + + Require BDB >= 4.5 for sanity's sake + - replace unused feature tests in configure.ac with a simple version check + +commit 946f17a9f8b21ffeda1af9b0925ba5c2752e052e +Author: Panu Matilainen +Date: Thu Apr 8 10:53:08 2010 +0300 + + Remove unused dbi_txnid member from dbiIndex + - transactions aren't currently used, we'll need txnid handles eventually + but the dbi is unlikely to be the right level to store this, add + where actually needed when the time comes + +commit 321925a18dd87b963bf16745a61751eeb8c2fa49 +Author: Panu Matilainen +Date: Thu Apr 8 10:31:00 2010 +0300 + + db_create() doesn't take any flags currently + +commit 02a13bf65e771d87e7600561f6a3f70587b64bdf +Author: Panu Matilainen +Date: Thu Apr 8 09:10:13 2010 +0300 + + Eliminate dbiIndexNewItem() + - this is just simple struct with no special allocation, and contents + are memcpy()'ed so theres no need to malloc it + +commit 2771913363f94e08c9afccff6c0c0ca32989cbca +Author: Panu Matilainen +Date: Wed Apr 7 13:23:03 2010 +0300 + + Change nextInstance() to permit retrieval too, use it for bitmap alloc + - The "was this verified already" bitmap uses header instance numbers + which are monotonically increasing and can be much much larger than + the number of actually installed headers. Grab the current instance + number for a better idea how much we'll at least need. + - Throw out the db stats based dbiNumKeys(), this doesn't have the + kind of performance penalty that stats have and suits our purposes + better anyway + +commit 81754356cd3b7118e32665b6306369ba2cdc1c35 +Author: Panu Matilainen +Date: Wed Apr 7 12:43:20 2010 +0300 + + Make rpmdbAdd() and rpmdbRemove() internal-only + - all additions and removals to the rpmdb need to go through the + transaction machinery, these are very low-level functions that + API users have no business messing with + +commit e9c767a8d75ee1f2c159867d16e13b74a43da23e +Author: Panu Matilainen +Date: Wed Apr 7 12:38:20 2010 +0300 + + Stash rpmdb struct definition out of sight into dbi.h + - not perhaps the ideal place for it but the backend level needs + access to the main db in several places anyway, and this leaves + rpmdb_internal.h clear for internal-only APIs + +commit e16695e932e294ec600e673d38c41bde20931204 +Author: Panu Matilainen +Date: Wed Apr 7 12:28:02 2010 +0300 + + Unify rpmdbAdd/Remove() interfaces + - rpmdbRemove() takes now a header as argument too - we need both + the header number and the header itself there anyway, so might as + well use the header we already have instead of flipping through backwards + hoops to get to it + +commit 037538f00f3801d1698a30d107cd6468d6009fde +Author: Panu Matilainen +Date: Wed Apr 7 12:12:51 2010 +0300 + + Eliminate the headerCheck() foo from rpmdbAdd/Remove() + - for rpmdbRemove() these have been completely unused, and for rpmdbAdd() + the higher levels have had more than one chance of verifying the + header if checking is enabled in the transaction set + +commit 475391dc581bf5ba72b6d59d16d875505b45bd51 +Author: Panu Matilainen +Date: Wed Apr 7 11:11:55 2010 +0300 + + Lift RPMDBI_PACKAGES handling from db add/remove to separate helper + - Remove vs add is rather similar, unify the copy-pasteish code + - Be a bit more careful about error returns from the primary db functions + +commit 0bb48a56b8ab0d95327e38a98f13246f388d2fd7 +Author: Panu Matilainen +Date: Wed Apr 7 09:18:44 2010 +0300 + + Lift header instance number figuring out of rpmdbAdd() to helper function + +commit a5039afa3f974384cbd69530ec59449df3e1d445 +Author: Panu Matilainen +Date: Wed Apr 7 08:58:23 2010 +0300 + + Verify header sanity as the first thing in rpmdbAdd() + - avoid allocating header instance for something that we'd fail to add + - avoid possibly adding data to indexes even if adding the header + itself fails, duh + +commit f40ea7e359df44f3db24391f966abfa9bad556be +Author: Panu Matilainen +Date: Wed Apr 7 08:35:14 2010 +0300 + + Move header INSTALLTID manipulation out of rpmdbAdd() + +commit e23a2bf0977fcd6380acc277c4edc9f0ee997600 +Author: Panu Matilainen +Date: Wed Apr 7 07:48:33 2010 +0300 + + Remove unused require- and provideversion indexes + - For completely unused indexes, these are fairly expensive too + +commit b3f5136cdfad37fb6ec89aa74e0c044894591e28 +Author: Panu Matilainen +Date: Wed Apr 7 06:55:15 2010 +0300 + + Eliminate redundant/bogus temporary variable shuffling + - This fetches the special key zero which is used for bookkeeping of + header "instance" numbers, the actual header to be stored is NOT + relevant here + - keyp, keylen, datap and datalen are just redundant fluff, manipulate + the key and data DBT directly + +commit 2a52cc81f9456f933db945b99f67147b5b21ad01 +Author: Panu Matilainen +Date: Tue Apr 6 13:13:14 2010 +0300 + + Remove unused _DBI defines + +commit 3437ad49b934cbf6503129dfbb6effd0c6012221 +Author: Panu Matilainen +Date: Tue Apr 6 13:09:34 2010 +0300 + + Lose unused fluff from openDatabase() + - As RPMDBI_PACKAGES is always the first index, the for-loop never + did anything else than open the Packages db and exit with success/fail. + For the same reason RPMDB_FLAG_MINIMAL didn't do anything at all here, + lose the unnecessary flag.. + +commit 7b4da15c666d1d744b794a43098691900bcf0797 +Author: Panu Matilainen +Date: Tue Apr 6 13:02:58 2010 +0300 + + Eliminate static _rebuildinprogress hack, use per-db flag instead + - replace unused RPMDB_FLAG_CHROOT with RPMDB_FLAG_REBUILD and pass + around as necessary + +commit cd12be9dbb7dbfc800412b8a1cf7a86a0a6d6462 +Author: Panu Matilainen +Date: Tue Apr 6 12:59:06 2010 +0300 + + Bury rpmdb flags inside rpmdb.c, not used by anything outside it + +commit 46de075bfad4665e6a1b05323eb766edc32cb497 +Author: Panu Matilainen +Date: Mon Apr 5 18:09:57 2010 +0300 + + Unbreak --rebuilddb + - managed to bust up the rebuilddb-path generation once again in commit + 890cea56c91ff6ff887a439c036d345715e6c5c2, doh + - make the intended logic more obviours + +commit fc46b4ecef7c5bfe18237156d9dcf22577a2f22f +Author: Yuri Chornoivan +Date: Mon Apr 5 07:22:31 2010 +0000 + + l10n: Updates to Ukrainian (uk) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit b663b6b2efdb69c6bfbef6a96e781340e08331e3 +Author: Misha Shnurapet +Date: Fri Apr 2 12:55:37 2010 +0000 + + l10n: Updates to Russian (ru) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit 8e9d2aff44af79260c0adec976773dd78c4dc1b8 +Author: Panu Matilainen +Date: Thu Apr 1 18:19:49 2010 +0300 + + Nuke bogus comments + related NULL-checks + - db->_dbi cannot be NULL if db is not NULL, it's allocated at + newRpmDB() and freed in rpmdbClose() and nothing else touches it + +commit ca2c8172d10d3257bb8b49bc008d65b7e874edcf +Author: Panu Matilainen +Date: Thu Apr 1 17:59:38 2010 +0300 + + Clean up rpmdb struct initialization + - lose the dumb template assignment and related defines + +commit 2ba47e8e5b0d35132f98e67827d3fd9de853a8f2 +Author: Panu Matilainen +Date: Thu Apr 1 17:49:07 2010 +0300 + + Lose unused static initialization foo + +commit 91953f1f9317891a6a283a779ba79d9429fd2973 +Author: Panu Matilainen +Date: Thu Apr 1 16:58:12 2010 +0300 + + Clean up formatting in rpmdbCountPackages() (just cosmetics) + +commit 76b36936eaa30cf74a5d02f024fef1e1643f68e0 +Author: Panu Matilainen +Date: Thu Apr 1 16:29:38 2010 +0300 + + Remove unused rpmdbCloseDBI() + - this was used by the Depends temporary db hack, forcing it + to be exposed in the API... not anymore + +commit fed962f059461f64b1017836599c9aa51285d026 +Author: Panu Matilainen +Date: Thu Apr 1 15:28:45 2010 +0300 + + Generate package database statistics on close & make use of it on open + - Turn dbiStat() into more useful: return the number of keys in the + index, hiding away the BDB internal access method stuff into the backend + - Force statistics gathering at Packages db close, take advantage of + that when its opened to get a fairly accurate count of packages for + initial "header verified" bitmap allocation. Previously DB_FAST_STAT + was used on open but it never returns anything when no stats have + been previously collected, hence the need for the expensive slow stat. + - The performance hit from stat generation is hardly worth it for + the bitmap allocation alone, but lets see if there are other uses... + - Also gets rid of dbi_stats member, this is not particularly useful + +commit 86348031c259919bac5085708985cf55084670a9 +Author: Panu Matilainen +Date: Thu Apr 1 13:54:39 2010 +0300 + + Lose "support" for truly ancient BDB versions + - BDB >= 4.3 is required now, and even thats several years old + +commit 3bd1951bbd03d30f0ff83d1bd468d2c383c7807f +Author: Panu Matilainen +Date: Thu Apr 1 12:48:17 2010 +0300 + + Rename dbiOpen() + dbiOpenDB() to make their layer obvious from the name + - dbiOpen() in rpmdb.c operates on "rpmdb layer" so calling it + rpmdbOpenIndex(), dbiOpenDB() on the other hand is the lowest level + backend thing, which is now called dbiOpen() to be in line with + the other operations like dbiClose() + +commit a7b08b448b73d95794f4f64111af8607ae239e13 +Author: Panu Matilainen +Date: Thu Apr 1 12:34:59 2010 +0300 + + Pass rpmdb to dbiFindByLabel() / rpmdbiFindMatch() directly + - avoids having to go backwards from the dbi to rpmdb when we very well + have the rpmdb handle at hand here... + +commit 298812d338d0175e997d4a7633f5899634239511 +Author: Panu Matilainen +Date: Thu Apr 1 12:25:04 2010 +0300 + + Eliminate dbi_rpmtag member from dbiIndex struct + - the backend doesn't care about the tag beyond initialization, + and the tag is only used for error messages from rpmdb layer which + already knows what the tag is + +commit c8cfbc941b625baebcdd8507ffe0d511f816f190 +Author: Panu Matilainen +Date: Thu Apr 1 12:01:28 2010 +0300 + + Define + use enum for primary/secondary index types + api to get it + - no functional changes, making the type more obvious than + "case 2*sizeof(int32_t):" + +commit 7b666ce208f9a5bccfb22e11645bc6e3af884776 +Author: Panu Matilainen +Date: Thu Apr 1 11:47:15 2010 +0300 + + Rename the dbi access method member dbi_type -> dbi_dbtype + - make it more obvious what it is + +commit f30e6d409a19a943224d6697a06dd1996bc61d72 +Author: Panu Matilainen +Date: Thu Apr 1 11:13:37 2010 +0300 + + Split dbiIndex out of rpmdb_internal.h into header of its own + - the dbi presents an internal api of its own, and deserves a separate + header (baby steps to making dbiIndex opaque outside the backend) + - move dbiVerify() to the backend where it belongs + - mark all the dbiFoo() functions as internal + +commit 12236b58b62c0c21048aff843624d7623d43fda7 +Author: Panu Matilainen +Date: Thu Apr 1 10:25:55 2010 +0300 + + Eliminate unnecessary argument to dbiCopen() + - txnid (which is unused...) is stored in dbi so dbiCopen() can already + get to it + +commit e1d100df3a8ecb877ebbaead6ca33c1b635b71c6 +Author: Panu Matilainen +Date: Thu Apr 1 10:18:05 2010 +0300 + + Move dbi_no_dbsync logic to inside dbiSync() + - avoids having to check for it in every single caller + +commit c397a09be3efd087afeb25a5b01715eb8c889cdb +Author: Panu Matilainen +Date: Thu Apr 1 10:03:21 2010 +0300 + + On header iteration format queries, dump the contents as-is + - This makes eg --xml query of packages give out the true contents + of the package, raw i18n strings and all, which is what you probably + want when examining the contents on this level. Regular queries still + run with all bells 'n whistless enabled. + +commit 3ac99bd8c21436d8c70d462b64bf63453415a689 +Author: Panu Matilainen +Date: Thu Apr 1 09:15:06 2010 +0300 + + Disable header i18n lookup in headerCopyTags() (RhBug:578299) + - without HEADERGET_RAW here, only one of the translations in header + (whatever happens to be "current" locale) gets copied + +commit ea6171dce2d184e20c1d84612576afdf4ddd1e7d +Author: Panu Matilainen +Date: Wed Mar 31 12:17:00 2010 +0300 + + Remove BDB recno + queue access methods from configuration + - these rather limited access methods have never been used for anything, + rpm always used hash access and later btree to varying degree + +commit 926a382ca6d5d501164d73fd3ed605369119413c +Author: Panu Matilainen +Date: Wed Mar 31 02:51:39 2010 +0300 + + Database metadata integer byte order is not user serviceable config + +commit 305d2045a9dc2615aa61eb12b6a74d7d5b7e538f +Author: Panu Matilainen +Date: Wed Mar 31 02:48:03 2010 +0300 + + Lose dbi file configuration option + - index names are rpm tag names, period + - also we dont need to strdup() the tag name, rpmTagGetName() returns + pointers to const strings these days + +commit 5e6079eabcd6a4ed4d4d545143e2d4c3f06cc78e +Author: Panu Matilainen +Date: Wed Mar 31 02:47:33 2010 +0300 + + Make dbiVerify() and dbiOpen() static, not needed outside rpmdb.c + +commit aa74bc4af0227c7b37f11bda371f2b7cb20e25ca +Author: Panu Matilainen +Date: Wed Mar 31 02:37:13 2010 +0300 + + Bury dbiIndexItem and dbiIndexSet structs inside rpmdb.c + +commit f4edb1b111efba6808eafc374af86af33ec96575 +Author: Panu Matilainen +Date: Wed Mar 31 02:34:21 2010 +0300 + + Make dbiIndexSet operations static inside rpmdb.c + +commit 2f83ab90e666ed66413a0ea83b627348928a7e51 +Author: Panu Matilainen +Date: Wed Mar 31 02:16:54 2010 +0300 + + Lose the BDB access method configuration options + - In the ~10 years of their existance none of them have been used, + and besides users have no business messing with fundamental database + behavior such as whether duplicates are allowed or not + +commit 19cae46ac447712e8ff7de733919aa5c32251a4a +Author: Panu Matilainen +Date: Wed Mar 31 02:04:21 2010 +0300 + + We really dont care about macro expanded per-db error prefix + +commit 9791cf2ab571ed0715795e5c0c82a3d87e87d1dc +Author: Panu Matilainen +Date: Wed Mar 31 01:59:27 2010 +0300 + + Lose shmkey + shared BDB config options + - we dont want anything to do with System V IPC, really... BDB uses + file backed mmap when it needs, this suits us just fine + +commit 08cdca32577a9521aa5e4f06bb6754d1840e9675 +Author: Panu Matilainen +Date: Wed Mar 31 01:55:06 2010 +0300 + + Remove "truncate" BDB config option + - Truncate is so dangerous that dbiOpenDB() discarded it even if + set in configuration. How useful is that? + +commit 025886592e2660803b35054ab6aec293834d65d8 +Author: Panu Matilainen +Date: Wed Mar 31 01:53:12 2010 +0300 + + We dont want to use DB_HOME environment, ever + - rpm has its own switches for overriding the db home when that's + necessary, DB_HOME it should use not + +commit 6a3464740a27488b3b03b0f0feb08c7937db3fef +Author: Panu Matilainen +Date: Wed Mar 31 01:45:26 2010 +0300 + + We dont have any temporary databases anymore, lose the config switches + - The last temporary db was Depends which is now replaced with an + in-memory hash, and the temporary dbs were troublesome with + chroot operations anyway, good riddance + +commit 7309f7498134f7b62f27624a4cdb91e1c6b82578 +Author: Panu Matilainen +Date: Wed Mar 31 01:41:04 2010 +0300 + + Lose pointless per-db and per-dbi errfile and errcall pointers + - BDB uses stderr for errfile when not set, which is what we set it + to through various hoops. Just leave it alone. + - db_errcall has always been (intentionally) NULL to disable that output, + the errors get logged though cvtdberr() with slight filtering + +commit 5aa612da3f00149cee9ba631dd1a7f2e65b718e1 +Author: Panu Matilainen +Date: Wed Mar 31 01:27:04 2010 +0300 + + Shred a pile of BDB config goo that's never been actually implemented + - with the exception subfile (used by now extinct sqlite backend) + none of this was ever even connected to the bdb configuration... + +commit fbc11b67656e93bccef495a09b1a59805c1dde3f +Author: Panu Matilainen +Date: Wed Mar 31 01:12:15 2010 +0300 + + Shed the pointless per-dbi memory allocators + - we want to use our own allocators for exit-on-enomem behavior but + having per-index allocator configuration makes no sense whatsoever + +commit c8591a822eb3c7499e5fcf3556c28aab591d2802 +Author: Panu Matilainen +Date: Wed Mar 31 01:09:51 2010 +0300 + + Eliminate now unnecessary db_ndbi field, number of indexes is constant + +commit fb2a6cb031781bc23a5249febf1cf693e92a2403 +Author: Panu Matilainen +Date: Wed Mar 31 01:05:03 2010 +0300 + + Make rpmdb index list hard-wired + - We dont grow new indexes every other day, and especially this + is not activity that users need to be able to do + - Gets rid of the hysterical initialization and million can't happen + NULL-checks + +commit 668a265e8c5b1d55e1e7a013e75fd3c115d431e2 +Author: Panu Matilainen +Date: Wed Mar 31 00:43:34 2010 +0300 + + Minor cleanup to rpmdbAdd() + - move dbiOpen() + check to more sensible place, curing the + busted indentation + - initialize at declaration save a few unnecessary lines + +commit 19c7dbcca8f635d9fedb15b52ef9131ef68c97d9 +Author: Panu Matilainen +Date: Wed Mar 31 00:40:23 2010 +0300 + + Add + use a helper function for retrieving single header at offset + +commit 55bcfaef71727c966de494d0dd4ba0527b4ac0a7 +Author: Panu Matilainen +Date: Tue Mar 30 23:23:53 2010 +0300 + + Minor cleanups to rpmdbAdd() and rpmdbRemove() + +commit 890cea56c91ff6ff887a439c036d345715e6c5c2 +Author: Panu Matilainen +Date: Tue Mar 30 23:11:21 2010 +0300 + + Minor cleanup to rpmdbRebuild(), use rstreq() instead of hand-comparing + +commit 2275a2ef895e211115fc001d95e8676ecc5c9f40 +Author: Panu Matilainen +Date: Mon Mar 29 18:36:21 2010 +0300 + + Hide rpmte open/close/error etc logic inside rpmteProcess() + - make a bunch of helper functions static now that they're not needed + elsewhere, rpmte is slowly becoming self-aware ;) + +commit 7289fadea367e43a4ecf505877cb0a39afa34d60 +Author: Panu Matilainen +Date: Mon Mar 29 17:14:55 2010 +0300 + + Move the little thats left of psm.h into rpmte_internal.h + - no functional changes, just shuffling declares around + +commit 2641de9d5ccbef1833c2939a4d7dd55afd5cba45 +Author: Piotr DrÄ…g +Date: Mon Mar 29 14:38:09 2010 +0000 + + l10n: Updates to Polish (pl) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit 001778e0741fb43be358801b8cea4989754b14a0 +Author: Panu Matilainen +Date: Mon Mar 29 16:14:50 2010 +0300 + + Oops, scriptlet related error messages had dropped out of potfiles + +commit 3521e8fbcf8ba779900a4e05f85bc2eb5e94a90b +Author: Panu Matilainen +Date: Mon Mar 29 16:11:08 2010 +0300 + + Update translatios again to shed non-existent messages from recent churn + +commit 2aac5c68ad895aa1085519b8de4d5077b8d94227 +Author: Panu Matilainen +Date: Mon Mar 29 16:05:32 2010 +0300 + + Lazy allocation of rpmds color array + - only requires and provides in transaction elements get colored, + dont allocate unused memory + +commit cb5b70be4e51c71f32443b89904ea78041586487 +Author: Panu Matilainen +Date: Mon Mar 29 15:33:03 2010 +0300 + + Lose long since unused fdReadable() and fdWritable() + - these have been unused since rpm 4.6.0, and can be implemented + without access to rpmio internals too if somebody cares... + +commit de5ec1af472d8af85b830c734170c3304b3df8a6 +Author: Panu Matilainen +Date: Mon Mar 29 15:27:43 2010 +0300 + + Lose long since unused url control structure and related functions + - these have been unused since rpm 4.6.0, and rpm is not in the + url business, rip. + +commit 593902eee642912245ed669e265c07dbd51ccb45 +Author: Panu Matilainen +Date: Mon Mar 29 15:03:14 2010 +0300 + + Remove unused dependency set file reference count + - this has never been used for anything at all, there are better things + to use our memory for than unused arrays + +commit e18d9e68260aacde0d1fe1f0fdddb008357262fe +Author: Panu Matilainen +Date: Mon Mar 29 14:53:10 2010 +0300 + + Remove unused and non-sensible depedency set build-time + - Buildtime was never part of rpm version comparison nor should it be, + on rpm level the only sensible differentiator between two identical + dependencies is the dependency color if any. Other than that, random() + just as "appropriate" as build time. + +commit 6ba22ca0d9f9de9ee358111f457bdbe323e263b9 +Author: Panu Matilainen +Date: Mon Mar 29 14:40:40 2010 +0300 + + headerNextTag() fits the checkForDuplicates() use-case better + - as we're only looking at tags, not their contents... avoid unnecessary + data shuffling and the code is a little simpler too + +commit 343d3a2cf7a3ad70ab0e056a156b03c4b1212c0b +Author: Panu Matilainen +Date: Mon Mar 29 10:59:58 2010 +0300 + + Unbreak cpio archive path generation + - fixes regression from commit 45e2d4e1d0260a9c07eb1daf0c68b82f602ad16f + - striplen was never set on build at all, and the psm part was unused + too - either unused since forever or possibly related to repackaging + +commit dbec3664232852425d9e966058cb02e6c5f6689c +Author: Panu Matilainen +Date: Mon Mar 29 09:35:25 2010 +0300 + + Oops, being a bit too strict on dependency qualifiers + - Forgot how nasty hack parseBits() was... its abusing multilang + support and the multilang support passes "C" if no lang is specified, + which certainly isn't a valid qualifier. Make multilang vs tag with + optional qualifiers different types in PreambleRec, which allows + handling this more sanely + - Additionally build-dependencies dont take any qualifiers now + +commit c0eb82dd1f2102f2b4899c1e7232086c41d2e805 +Author: Panu Matilainen +Date: Mon Mar 29 08:58:27 2010 +0300 + + Teach rpm about pre-transaction dependencies + - A pre-transaction dependency is generally anything that must be + available at the start of the transaction, and cannot be resolved + by packages *in* the transaction. This lets %pretrans scriptlet + dependencies be expressed correctly, and could be also used for + other kinds of pre-conditions. + - rpmlib() dependencies are a special case of pre-trans dependencies + but leaving them handled separately as they cannot be provided by + anything in rpmdb either, whereas pretrans dependencies can. + +commit bf2bc18ebb325f081ade65adc2fbb6858f0b8396 +Author: Panu Matilainen +Date: Mon Mar 29 08:30:18 2010 +0300 + + Always fail build on unknown dependency qualifiers + - previously unknown qualifiers would go unnoticed if they happened + be last (including being the only qualifier), eg Requires(pre,junk) + or Requires(junk) would be cheerfully accepted but Requires(junk,pre) not. + +commit 1ab0222b032d510f331cefa83fb0172673f89083 +Author: Panu Matilainen +Date: Mon Mar 29 08:27:35 2010 +0300 + + Always initialize tagflags to RPMSENSE_ANY + +commit 750b534942f0191f2d14d2974541ecaaa13820a5 +Author: Panu Matilainen +Date: Mon Mar 29 07:20:33 2010 +0300 + + Report all enabled dependency bits in deptype format extension + - dont make assumptions about which bits can be enabled simultaneously, + just dump 'em all + +commit 09363b8c794c0f85d164a94f9fc7ff4d22ea6d6f +Author: Panu Matilainen +Date: Mon Mar 29 06:48:23 2010 +0300 + + Dont bother translators with dependency lookup debug messages + +commit 566d9ca99316ccc279b37295b71c62be110cd8bb +Author: Panu Matilainen +Date: Mon Mar 29 06:37:27 2010 +0300 + + Lose unused RPMSENSE_PATCHES + - this was never used by upstream at least, and the "patch rpms" this + refers to was abandoned by Suse in favor of deltarpm a long time ago... + +commit 130fddf015bcb4daa0a0cad3d40bcb752bebe7c9 +Author: Panu Matilainen +Date: Mon Mar 29 06:29:19 2010 +0300 + + Remove redundant assignments + - everything but buildrequires goes to pkg->header, no point having + this separately set in each case + +commit 668f9582917a5b2ffeec7b91f785c6732891b320 +Author: Panu Matilainen +Date: Mon Mar 29 06:27:44 2010 +0300 + + Group the tag cases a bit more logically in parseRCPOT() + +commit d160f45ab3ef5e78836ffb668c8c7887ae1081c1 +Author: Panu Matilainen +Date: Mon Mar 29 06:17:30 2010 +0300 + + Drop "support" for per-scriptlet build-requires + - Rpm has never done anything useful with "BuildRequires(prep): foo" + style dependencies other than recorded them in src.rpms, nor is there much + point in properly supporting this in the future either + - Frees up four more bits from rpmsenseFlags for better uses + +commit 75cccc91f3e1e71bde95edf0047ca8c5e984a2fd +Author: Panu Matilainen +Date: Mon Mar 29 05:59:54 2010 +0300 + + Free up three bits from rpmsenseFlags + - pass the wanted dependency type to addReqProv() as tagN argument + (previously unused, eh...) instead of taking up three precious bits + for internal-only purposes from a constrained bitfield + +commit 8d3cad1d618e7cbc45ed71b6d633914688d292aa +Author: Panu Matilainen +Date: Fri Mar 26 17:07:00 2010 +0200 + + Add ds.Instance() method to python bindings + - the naming between header/rpmte/rpmds "instance" is wonderfully + inconsistent... oh well + +commit 01b047e7591dcff0897865350476d773406da068 +Author: Panu Matilainen +Date: Fri Mar 26 17:00:20 2010 +0200 + + Take advantage of rpmdsCurrent() in python bindings + +commit b88d5d3aaf4e5174a4683cef4d5d3ba0de28f3b1 +Author: Panu Matilainen +Date: Fri Mar 26 16:54:16 2010 +0200 + + Add public rpmdsCurrent() function for creating a single ds from iteration + - Permits extracting single dependencies from a set with instance + number inherited without exposing rpmdsSetInstance() kind of thing + - Also faster than calling rpmdsSingle(rpmdsTagN(ds), rpmdsN(ds)....) + where each call re-re-re-re-validates the indexes + +commit 971348fd46037ed7bf2cb20fc29fefe0d86143cc +Author: Panu Matilainen +Date: Fri Mar 26 16:45:46 2010 +0200 + + Split single ds generation into helper function, clean up a bit + - allows nicer handling of ds instance without special cases + +commit 98cfe652077e311d62c6f26fa3c5b6907f013ace +Author: Panu Matilainen +Date: Fri Mar 26 16:14:52 2010 +0200 + + Simplify rpmcliTransaction() a bit + - No need for separate the install and erase cases here for problem + filter flags: we only check disk space for added packages so this + is just a no-op anyway + - Also no need to fiddle with eflags for ordering, we always want + ordering unless --noorder specified + +commit 42fa7b7d4f0521da4e4c09b7fdcc8789412ff164 +Author: Héctor Daniel Cabrera +Date: Fri Mar 26 13:51:00 2010 +0000 + + l10n: Updates to Spanish (Castilian) (es) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit 94f94398dcbc3b95e049e9845d1d13ebe90baacd +Author: Panu Matilainen +Date: Fri Mar 26 15:28:25 2010 +0200 + + Oops, diskspace problem messed up from the argument shuffle + - fixes regression from commit 12392d93e2006ac63f918a154f29283a14fb98cf + +commit 0f93affa168962b4095349db4970b058f7d46da0 +Author: Panu Matilainen +Date: Fri Mar 26 15:22:13 2010 +0200 + + Record originating header instance to all problems where relevant + - currently unused but allows tracking things like file conflicts + back to the originating header directly from the problem set + +commit 8949e6a0fba0c29d2e44d91da63acaf5aa0eb68b +Author: Panu Matilainen +Date: Fri Mar 26 15:11:57 2010 +0200 + + Take advantage of rpmdsInstance() in dependency problem reporting + - Other than having less arguments to pass here and there, doesn't + give any immediate advantage, but with the origin of installed + dependency stored in problem sets, it'd be possible to track back + a dependency problem back to the originating header + +commit eaff094c5756a15c5e4c70fcfacf63251b9f7691 +Author: Panu Matilainen +Date: Fri Mar 26 14:56:14 2010 +0200 + + Record header instance in dependency sets + add API for retrieving + +commit 07e7c67fd0070255f8387e8e4e098cf1ba83a539 +Author: Panu Matilainen +Date: Fri Mar 26 14:18:45 2010 +0200 + + Merge checkPackageSet() into checkInstDeps() + - checkPackageSet() got refactored out of being useful standalone + while I wasn't looking :) + +commit e9aae5200d14ff33b635526c6353deea8231f527 +Author: Panu Matilainen +Date: Fri Mar 26 13:36:36 2010 +0200 + + Avoid unnecessary argument now that problem pkgNEVRA is always te NEVRA + +commit 39ded460e62b38efa26ec665d48e661f7d425a80 +Author: Panu Matilainen +Date: Fri Mar 26 13:20:17 2010 +0200 + + Change the problem data arrangement for dependency problems + - pkgNEVR in problems is now always the NEVR of the transaction element + triggering the problem, and altNEVR is the other affected package, + dependency string is stored in the problem string attribute + - no user visible changed, except for somebody crazy enough to try to + do something other than print the problem message strings + - we wouldn't really need to strdup() the pkgNEVR in problems now, + but leaving that alone for the moment... + +commit a6bf388ab32f388147084e0f9936ed6567ada776 +Author: Panu Matilainen +Date: Fri Mar 26 12:23:47 2010 +0200 + + Filter out duplicate problems when adding to element problem sets + - Problems associated with a transaction element are necessarily unique + to that element, so when filtered there we don't have to worry about + skipping dupes elsewhere like in merged sets. This can actually lead + to apparent duplicates in the current problem report output (eg in cases + where multiple packages provide the same dependency which would be + removed, like multilib packages), but this is only an artifact of + they way the problems are currently printed out. + - While this is still a dumb linear search, it can be several seconds + faster than the previous filtering in rpmpsPrint(), which is now + just a dumb convenience function. + +commit 0aba719592a1dd6532a1e70e9defbad5e62fc1ed +Author: Panu Matilainen +Date: Fri Mar 26 11:22:18 2010 +0200 + + Eliminate rpmpsAppend() from the API + - This was only a convenience function that shouldn't really have been + exported to begin with, and is not necessary at all - bury it + inside rpmte.c for now to hide lazy problem set allocation + - In the other news of the day... According to git, this happens to be + the 10000th commit to the master branch of this codebase. + Happy anniversary to rpm :P + +commit 1102e35b20ebebb897785266bd6ba6b8a7aab323 +Author: Panu Matilainen +Date: Fri Mar 26 10:41:10 2010 +0200 + + Push problem creation argument sanitation to the level below + - rpmpsAppend() and rpmProblemCreate() have no use for fn/dn either, + its just stored in one string internally + - this is kinda unnecessary API break but these aren't used outside + rpm so it doesn't make much difference + +commit 12392d93e2006ac63f918a154f29283a14fb98cf +Author: Panu Matilainen +Date: Fri Mar 26 10:27:39 2010 +0200 + + Sanitize rpmteAddProblem() arguments + - lump fn/dn into one, in no case both are needed + - move altNEVR earlier to lump the generic attribute foo last + +commit 0d68cbf48efe57c4adf57a409df4bd57acc1bebd +Author: Panu Matilainen +Date: Fri Mar 26 09:31:00 2010 +0200 + + Use the new problem set iterator where it makes more sense + +commit 997954f793359d16af2d34ce9ca41d82a7acb0a1 +Author: Panu Matilainen +Date: Fri Mar 26 09:21:06 2010 +0200 + + Use rpmpsMerge() for collecting element problems in rpmtsProblems() + +commit d9d59c89301de242a008a55d3ee93b0c710937eb +Author: Panu Matilainen +Date: Fri Mar 26 09:20:05 2010 +0200 + + Add a simple and dumb rpmpsMerge() function to merge two problem sets + +commit 96e07f34e48b33f0d1f4c9be9ed33fdddf0bd0cd +Author: Panu Matilainen +Date: Fri Mar 26 08:50:30 2010 +0200 + + Add a saner rpmps iteration interface + - simply return the actual problem objects from the iterator instead + of "index" which is not usable for anything outside rpmps.c + - implement rpmpsNexIterator() on top of the new rpmpsiNext() as + backwards compatibility for now + +commit 34ddaa716174e29c42f005e3546dbbeeb60c7057 +Author: Panu Matilainen +Date: Fri Mar 26 07:09:47 2010 +0200 + + Handle NULL and the same literal problem pointer in rpmProblemCompare() + - if the pointers to compare are the same, the problem is the same + (even if NULL for our purposes) + - if they're not the same and either is NULL then they're not the same + +commit 91cf9d8b7f75249d52a09bfbe80b84040431f0e5 +Author: Piotr DrÄ…g +Date: Fri Mar 26 01:01:37 2010 +0000 + + l10n: Updates to Polish (pl) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit 47edb58cb766580770652f0f6e4101d28e96ae79 +Author: Panu Matilainen +Date: Thu Mar 25 16:48:08 2010 +0200 + + Update translations for the rpmps -> rpmprob split + +commit 37ed237fbea3a8df3efab0e7c09331a63d733bce +Author: Panu Matilainen +Date: Thu Mar 25 16:46:39 2010 +0200 + + Split rpm problem type + its "methods" to separate source + header + - rpmps is just something that stores rpm problems, problems themselves + are individual and opaque "objects", deserving their own module + +commit ae15f440b63daabe2c280086da69890b9f22bc69 +Author: Panu Matilainen +Date: Thu Mar 25 16:22:53 2010 +0200 + + Add public function for testing problem equality + - turn around sameProblem() return, pay more attention to details + and make it public + - use it in rpmpsTrim() too + +commit 8360baf5d634deef842173abee2edb35ee9d5818 +Author: Panu Matilainen +Date: Thu Mar 25 16:06:07 2010 +0200 + + Lose unused ignoreProblem from rpmProblem struct + - this is an artifact from rpm 4.4.x-times, and even back then + nothing used it, the only api to set it was in python bindings and.. eww + - also killing this makes rpmpsTrim() do something semi-useful again + +commit 7dce058cb8da856a268e391e9beeaf3e097086a3 +Author: Panu Matilainen +Date: Thu Mar 25 12:45:37 2010 +0200 + + Minor cleanup to rpmpsGetProblem() + - avoid dumb pointer fiddles, ps->probs is just a bleeping array + +commit 0ad0e345502c4b261e0c3378fd0830f7eacab340 +Author: Panu Matilainen +Date: Thu Mar 25 12:39:13 2010 +0200 + + Minor cleanup to rpmpsAppendProblem() + - dont bother adding NULL problems + - avoid dumb pointer fiddles, ps->probs is just a bleeping array + +commit 48d603e6258219caddc73ba72203596d9ac6bc77 +Author: Panu Matilainen +Date: Thu Mar 25 12:35:05 2010 +0200 + + Minor cleanup to rpmpsFreeIterator() + +commit 833ea26c4660889a614e0808b7b1e725d255aa7e +Author: Panu Matilainen +Date: Thu Mar 25 12:34:06 2010 +0200 + + Dont bother allocating iterator if there's no data to iterate + +commit ab890ee23f17836daacda810378207fce84753b9 +Author: Panu Matilainen +Date: Thu Mar 25 11:34:24 2010 +0200 + + Clean up verifyDependencies() a bit, no functional changes + - only init problem iterator if there are problems + - use problems and nevra from the faked up transaction element + - the return code is the number of problems, no need to count separately + +commit b88d70fd211d92a8a42e1c9d0ad9bd6c7c720fcc +Author: Panu Matilainen +Date: Thu Mar 25 11:13:16 2010 +0200 + + Sanitize verifyscript handling a bit + - set the transaction scriptfd once in rpmcliVerify() instead of + dupping and closing and dupping and closing for every verified package + +commit 00754c65bb269e456f5c2ec79de458a749cbf0e1 +Author: Panu Matilainen +Date: Thu Mar 25 10:31:47 2010 +0200 + + Revert "Transaction element type is not a bitfield but a plain old enum" + - Element types are not a bitfield but they're declared this way to + permit easy filtering on iteration. + - This reverts commit 6ed64c001f667ad8fb8bdec01f5ca54f57c44270. + +commit 1610f79cefd4e34d89e1d1d857359231b2e28b54 +Author: Jindrich Novy +Date: Wed Mar 24 21:12:27 2010 +0100 + + Add Epoch, Architecture and BugURL to rpm -qi and fix alignment (RhBug:575499) + +commit 7ced1208fb1a5458e227232d9918be6160b5bb03 +Author: Piotr DrÄ…g +Date: Wed Mar 24 12:26:44 2010 +0000 + + l10n: Updates to Polish (pl) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit 02307471935b2b0fecc5bd210983dccc0daf93ed +Author: Panu Matilainen +Date: Wed Mar 24 11:04:31 2010 +0200 + + Remove rpmteColorDS() from the API/ABI + - this gets called on transaction element initialization anyway, + there's no reason why anybody should need to call it from outside + +commit e50e3d14e5149f5c7b30c8a0208e7e8bd80ee24a +Author: Ville Skyttä +Date: Fri Mar 19 20:09:15 2010 +0200 + + Document deprecation of mi.count() and ds.Count(). + +commit bacfca16c388c03c0bb4affbddcb712c408b7fa9 +Author: Ville Skyttä +Date: Wed Mar 3 20:49:42 2010 +0200 + + More here-doc skipping fixes for perl.req (#128). + +commit ee98a373cf79d3248122ae147d98ac461d59c9b7 +Author: Panu Matilainen +Date: Wed Mar 24 10:24:55 2010 +0200 + + Add RPMBUILD_ISFOO constants to python rpmb module (ticket #123) + +commit 40f788a7bf3741f9c613ff302d4e1b0ceec2658c +Author: Panu Matilainen +Date: Wed Mar 24 09:53:25 2010 +0200 + + Add __bool__() / __nonzero__() method to python rpmmi objects (ticket #153) + - Objects supporting __len__() use (len > 0) for boolean representation, + which normally makes sense but as the match iterator count is often + zero despite the iterator actually existing and returning something, + and breaks existing code (rpmlint at least) + - Adding a __bool__() (known as __nonzero__() in Python < 3) method + returning true for non-NULL iterator fixes this and gives more + meaningful answers than pre 4.8.0 which simply always returned True + +commit 8c7e53ec80e84f48bfc67181f3d5dd81ecdb7523 +Author: Panu Matilainen +Date: Tue Mar 23 16:21:27 2010 +0200 + + First take at pluggable file attribute + dependency extraction system + - move most of the hardwired classification logic from rpmfc C-code + to macro-based configuration, supporting drop-in addition of arbitrary + new attributes + dependency extractors based on regex matching of + libmagic file types and paths + - just the initial rough conversion of our built-in dependency types, + various open questions + todo-items remain, plus likely fair amount + of more-or-less subtle breakage + +commit 7628c31bb9688c04561bd46c840ec9437fab4f67 +Author: Panu Matilainen +Date: Tue Mar 23 16:29:59 2010 +0200 + + Fix fallout from rpmgi.h moving to internal path + +commit 0c08a5adc55a1e1fd952e572571cd11102af595f +Author: Héctor Daniel Cabrera +Date: Mon Mar 22 17:02:19 2010 +0000 + + l10n: Updates to Spanish (Castilian) (es) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit f46785b274c06981c553f32a627e8d59078a80e2 +Author: Panu Matilainen +Date: Mon Mar 22 15:48:26 2010 +0200 + + Lose leftover RPMDBI_ARGLIST rpmgi pseudo tag + - should've really been in commit a2156379641e48fbad88d1088eb06d7bfa78927c + +commit 714c22f24897375bf2dd32cde91ce4277265175b +Author: Panu Matilainen +Date: Mon Mar 22 15:43:05 2010 +0200 + + Mop up leftovers from past times + +commit 69bfa74c7f671014d0bcda9344d1eb9be7c240a5 +Author: Panu Matilainen +Date: Mon Mar 22 15:20:30 2010 +0200 + + Update translations to shed non-existent messages from recent churn + +commit 717a4266ac24e72d797852a4efc4cea35c55c04e +Author: Panu Matilainen +Date: Mon Mar 22 15:14:39 2010 +0200 + + Oops, remember to free transaction set in rpmgi + - dumb regression from commit a0c2c6ed83a166d35ad3d3e8b22a08aae5420731 + +commit 1e2d188faecbdcc671f99d2d0cbd7b039cdea217 +Author: Panu Matilainen +Date: Mon Mar 22 14:50:50 2010 +0200 + + Lose completely unused rpmte_debug junk + +commit 36e4ef1a0adab54a9a06e9b1d6beff80a049d892 +Author: Panu Matilainen +Date: Mon Mar 22 14:45:49 2010 +0200 + + Take a transaction set reference on verified db iteration + - forward linking hasn't been an issue since >= 4.6.0... + +commit c7f62698441b347920a3f9f7c9b53ed24bb89c25 +Author: Panu Matilainen +Date: Mon Mar 22 14:44:14 2010 +0200 + + Document rpmteHeader() returning a new header reference + +commit e1e323558c78a59d280b8cb741719bea909e93ca +Author: Panu Matilainen +Date: Mon Mar 22 14:23:05 2010 +0200 + + Further rpmio NULL sanity checks + - instead of blowing up with asserts, return error codes / NULLs + +commit c0d4420f002e7da15a745d5710fd14bc2d1f9c47 +Author: Panu Matilainen +Date: Mon Mar 22 14:09:58 2010 +0200 + + Lose FDSANE() macro, check in c2f() and callers instead + +commit 00fb04f708d724eb46b8d54131d85f2679b92240 +Author: Panu Matilainen +Date: Mon Mar 22 13:47:32 2010 +0200 + + Change most of the FDSANE() asserts into good old NULL-checks + - blowing up with an assert failure deep inside io "library" is not + a very friendly thing to do... + +commit d71964bda572f5fd141ddc35b506d4086e631264 +Author: Panu Matilainen +Date: Mon Mar 22 13:25:57 2010 +0200 + + Lose the useless rpmio refcounting debug junk + - the rpmio API always had this goo, should've gotten rid of it + back in commit dbdbe8010cd944f026a5a4e5d071eb31d29d81c4 but .. oh well + +commit b02d4f20a0bf2b1cf96ace4dbcbfddd4a54f0a08 +Author: Panu Matilainen +Date: Mon Mar 22 13:05:38 2010 +0200 + + Lose the useless rpmdb refcounting debug junk + switches + - get the debug messages out of API, this is what should've been in commit + dbdbe8010cd944f026a5a4e5d071eb31d29d81c4 + +commit 19498b426f102f589d2418f918533bc27254b267 +Author: Panu Matilainen +Date: Mon Mar 22 13:04:26 2010 +0200 + + Lose the useless rpmds refcounting debug junk + switches + - get the debug messages out of API, this is what should've been in commit + dbdbe8010cd944f026a5a4e5d071eb31d29d81c4 + +commit 9672e12a22a7942105804c974cbb62332c33814f +Author: Panu Matilainen +Date: Mon Mar 22 12:54:44 2010 +0200 + + Lose the useless rpmps refcounting debug junk + - get the debug messages out of API, this is what should've been in commit + dbdbe8010cd944f026a5a4e5d071eb31d29d81c4 + +commit c586c9955cb79a98345d44138904f3ee009d9314 +Author: Panu Matilainen +Date: Mon Mar 22 12:49:45 2010 +0200 + + Lose the useless rpmfi refcounting etc debug messages + debug switches + - get the debug messages out of API, this is what should've been in commit + dbdbe8010cd944f026a5a4e5d071eb31d29d81c4 + +commit e307f8df46870dc890bd65ef3ca0ad025f24375a +Author: Panu Matilainen +Date: Mon Mar 22 12:40:27 2010 +0200 + + Lose the useless rpmts refcounting debug messages + debug switches + - get the debug messages out of API, this is what should've been in commit + dbdbe8010cd944f026a5a4e5d071eb31d29d81c4 - just wtf have I been thinking? + - also tolerate NULL passed to rpmtsLink() and rpmtsUnlink() + +commit 7911e17982e1deb685163dc8294775466237db63 +Author: Panu Matilainen +Date: Mon Mar 22 11:05:17 2010 +0200 + + Handle obsoletions within the added package set automatically + - similarly to skipping/replacing different versions of a package + getting added to transaction, detect obsoletion too and + skip/replace to avoid installing packages obsoleted by something + else in the set + +commit 457e2912533375cf84c5ca5a4428fd61b9f77cff +Author: Panu Matilainen +Date: Mon Mar 22 10:37:32 2010 +0200 + + Use package NEVRA for replaced/skipped messages, simplify + - dependency strings look funny when we're talking about packages, + use the full NEVRA instead + - unify the logging calls + +commit 2f0a95bcc75fdbc7704680a36fbffa022227d422 +Author: Panu Matilainen +Date: Mon Mar 22 10:02:49 2010 +0200 + + Avoid redundant headerGet()'s on arch and os + +commit 5dc0aefca771899e4693faaf1f09523fd9098d22 +Author: Panu Matilainen +Date: Mon Mar 22 09:46:51 2010 +0200 + + Refactor duplicate checking out of rpmtsAddInstallElement() + +commit 0d536aa594204cfd929995deff4a6dacc95677ee +Author: Panu Matilainen +Date: Mon Mar 22 08:42:35 2010 +0200 + + Eliminate redundant if + +commit c7c7c067c9b65a3bbce8efbb54fe6fb739ee3e15 +Author: Panu Matilainen +Date: Fri Mar 19 19:58:31 2010 +0200 + + There's nothing to translate in fts.c, remove from POTFILES.in + - should've been in commit ad43e72d70604eac223fd20c97ca990fa4936ac6, oh well + +commit 7fd2e4c1a2827f793199d1ad20fece966c26c42b +Author: Panu Matilainen +Date: Fri Mar 19 19:55:54 2010 +0200 + + Dont bother hanging onto header in rpmgi + - rpmgi has no use for the header and we dont really need it for iteration + either, just return the header we opened and let caller free + +commit cab00e78d151cc84e8468993ec1838d7f4b58e81 +Author: Panu Matilainen +Date: Fri Mar 19 19:35:19 2010 +0200 + + Lose some unused leftover rpmgi goo + +commit 606ceca33302751af140d8d9ebca598a6a06a39b +Author: Panu Matilainen +Date: Fri Mar 19 19:25:23 2010 +0200 + + Return headers from rpmgiNext() directly + +commit af659c87ce93b3d1506d5fdf6bece4891758eea4 +Author: Panu Matilainen +Date: Fri Mar 19 19:15:44 2010 +0200 + + Eliminate rpmgi from public API & ABI + +commit a2156379641e48fbad88d1088eb06d7bfa78927c +Author: Panu Matilainen +Date: Fri Mar 19 19:04:07 2010 +0200 + + Pass args and flags to rpmgi constructor already, lose rpmgiSetArgs() + - tags and the like to constructor make no sense anymore, rpmgi + does nothing but walk manifests and files from argv + - simplifies things further... + +commit ad43e72d70604eac223fd20c97ca990fa4936ac6 +Author: Panu Matilainen +Date: Fri Mar 19 18:23:52 2010 +0200 + + Bury FTS inside librpmbuild and eliminate from public ABI + +commit a0c2c6ed83a166d35ad3d3e8b22a08aae5420731 +Author: Panu Matilainen +Date: Fri Mar 19 17:56:53 2010 +0200 + + Rip RPMDBI_PACKAGES iteration support out of rpmgi + - lift the tag-filtering part into query code, that's at least somewhat + useful + - rpmgi is now just a glorified path argument iterator + +commit 97b6c385898342958624c17c441c65d474cb7fcd +Author: Panu Matilainen +Date: Fri Mar 19 16:30:55 2010 +0200 + + One helluva complicated way to pass our own arg back to us + +commit 89b3b386123ae81b31a07400b02eae2e779985cf +Author: Panu Matilainen +Date: Fri Mar 19 16:55:27 2010 +0200 + + Lose unused temporary/pseudo rpmdbi tags + - we haven't had any temporary dbis since rpm 4.8.0 where Depends + got axed, the rest were just nonexistent fluff anyway + +commit 061d045d296ce6d02f5ee9b96a090ab1414826ae +Author: Panu Matilainen +Date: Fri Mar 19 16:55:01 2010 +0200 + + Eliminate RPMDBI_ADDED iterator mode from rpmgi + - there already exists a specialized iterator for this purpose for + programmatic purposes and no cli-switches or the like to use this + (as it would be meaningless really in rpm-cli context) so ... rip + +commit 367c0d7014b769a5c12f83b525dddb0a7c76beef +Author: Panu Matilainen +Date: Fri Mar 19 16:54:00 2010 +0200 + + Eliminate hysterical --hdlist query option and everything implementing it + - This hidden gem used "system hdlist", ie "/usr/share/comps/%{_arch}/hdlist + as the source for queries. Such "system hdlist" hasn't existed anywhere + since RHL 9/FC 1 times... + +commit d87d831cdfd3a8b389dfc71d5b671c5e7dcf74d9 +Author: Panu Matilainen +Date: Fri Mar 19 16:52:19 2010 +0200 + + Eliminate --wtfwalk .. err, --ftswalk and everything implementing it + - that's what find + xargs are for, this is just useless cruft + +commit f510c8704cbd08719e5f868976cfd4242b6fca13 +Author: Panu Matilainen +Date: Fri Mar 19 16:51:32 2010 +0200 + + Lose useless rpmgi reference counting + - these dont get passed around in a manner where refcounting would + make any difference + +commit 6b1ce53ae108d6581861237864d74747099d5cb1 +Author: Panu Matilainen +Date: Fri Mar 19 16:50:58 2010 +0200 + + Lose the hidden and useless transaction add/order through rpmgi hackery + +commit 047f4ea669d4565fc579075806cb194266b4d67b +Author: Panu Matilainen +Date: Fri Mar 19 16:48:42 2010 +0200 + + Lose unused rpmgiTs() + +commit e0a1fb3bad4026cab25663bb4c4e1af392c17502 +Author: Panu Matilainen +Date: Fri Mar 19 16:45:56 2010 +0200 + + Lose unused qva_char and qva_rc fields from rpmQVKArguments struct + - both are only ever assigned to with useless values and never read... + +commit 09423eb47039a6f830592cc326d40bcd71650530 +Author: Panu Matilainen +Date: Fri Mar 19 10:49:17 2010 +0200 + + Verify the various version comparison results in testsuite + +commit a63624198f51cec6d5ac00aef77f864e6906937c +Author: Panu Matilainen +Date: Fri Mar 19 10:03:38 2010 +0200 + + Split upgrade + obsolete erasure element addition to helper functions + - just slicing up the biiig rpmtsAddInstallElement(), no functional changes + +commit ffa0c402f7bc2443bc73be1e5db95f468b18e39e +Author: Panu Matilainen +Date: Fri Mar 19 09:49:45 2010 +0200 + + Lose unused/useless variable + +commit e43d419303403433ad5fadb9ad0d5844d8fa8d91 +Author: Panu Matilainen +Date: Fri Mar 19 09:48:10 2010 +0200 + + Use a macro for the common color skipping checks + +commit 4b3f4bad3ff0048d684bfa7a668228927f698a2e +Author: Panu Matilainen +Date: Fri Mar 19 09:32:17 2010 +0200 + + Dont bother taking ds reference on obsoletes, we dont do it elsewhere either + +commit fafd80901c129659d4d0c1945f5922858f410ef7 +Author: Panu Matilainen +Date: Fri Mar 19 09:18:25 2010 +0200 + + Dead code removal + - this code has last been active sometime < 2004, nobody's been missing it + - based on comments in https://bugzilla.redhat.com/show_bug.cgi?id=134497 + it was some highly specific kludge for somebody to begin with and + shouldn't have been in rpm upstream ever but history is lost here... + - move the removePackage() outside the debug goo so the actual action + stands out + +commit 359e2021e9a215467e79140d1b3e12047c5a266c +Author: Panu Matilainen +Date: Fri Mar 19 09:04:12 2010 +0200 + + Use the element color instead of header color + - this is just the same thing, element color has been already calculated + so no need to go through header extensions again + +commit 03c035ec0ddd61fdb2e2526a15628d11f838d922 +Author: Panu Matilainen +Date: Thu Mar 18 23:40:34 2010 +0200 + + Oops, more leftovers from rpmal debug goo + +commit 03576e6f9fd8614e630fc84bffe239b32eee7112 +Author: Panu Matilainen +Date: Thu Mar 18 23:21:01 2010 +0200 + + Lose leftovers from former rpmal implementation + +commit 47810e5efa60fe3fabb1527d68e77fe704ca99b5 +Author: Panu Matilainen +Date: Thu Mar 18 20:51:42 2010 +0200 + + Helper function for pruned iterators used in dependency checking + +commit acb603d01b9137769d966284808bc1a3b4dca1e7 +Author: Panu Matilainen +Date: Thu Mar 18 20:32:13 2010 +0200 + + Lose anaconda-specific check from 2000 + - the predates lazy rpmdb open through rpmtsInitIterator() from 2001, and + rpmtsCheck() explicitly opens the db anyway so this is completely moot + +commit e79cf036af10e3b4e85a130049e5936827c64104 +Author: Panu Matilainen +Date: Thu Mar 18 20:06:18 2010 +0200 + + rpmalAdd() prototype cosmetics + +commit c1a677e839a7d3efae41f95c5e0d10a974b9db7b +Author: Panu Matilainen +Date: Thu Mar 18 19:55:57 2010 +0200 + + Lazy rpmal hash creation on first lookup, make rpmalMakeIndex() static + - the "new" hash-based rpmal only uses rpmalMakeIndex() for initial + creation of the hash tables as late as possible for better estimate + of needed hash size, but doesn't require any index regeneration if something + is added + - first call to rpmalSatisfiedDepend() now initializes the hashes, if + significant amount of entries are added after the first call hash + table might get full ... so dont do that ;) (this was already true + with rpmalMakeIndex(), now its just hidden out of sight) + +commit ec1e62230739735e314def0f494506ed08dd028e +Author: Panu Matilainen +Date: Thu Mar 18 19:49:25 2010 +0200 + + Make rpmalAllFileSatisfiesDepend() and rpmalAllSatisfiesDepend() static + - rpmtsCheck() only wants yes/no answers from rpmal, and ordering + wants the best provider, rpmalSatisfiesDepend() works for both + - update comments + +commit 4dfaaaa42d29900ccedaec5bcac08d8d46778b79 +Author: Panu Matilainen +Date: Thu Mar 18 17:33:05 2010 +0200 + + Minor cleanups to rpmtsAddInstallElement() + - combine some checks where it makes sense + - initialize isSource at declaration + - remove unnecessary NULL check on obsoletes, rpmdsNext() handles it + +commit 81da222eae5036808ef52fa5d534838f19623901 +Author: Panu Matilainen +Date: Thu Mar 18 17:12:39 2010 +0200 + + Eww, we dont want obsoletion by file names + - obsoletion is only for package names, anything else has way too + funky side-effects + +commit 781cfed0fd9c9651a2dd49175a85536f0b34b95b +Author: Panu Matilainen +Date: Thu Mar 18 15:28:23 2010 +0200 + + Refuse to install obsoleted packages (RhBug:486565) + - Packages which are obsoleted by some installed package now behave + much like conflicts, ie install is refused unless --nodeps is used + - Unlike conflicts, obsoletes are only tested against installed package + names and not provides. Otherwise it would be impossible to create + compat-packages which provide something that is obsoleted. + - Only check against installed obsoletes, as any obsoletes in the + transaction could and should be handled automatically similarly to + foo-1.0 and foo-2.0 in the same transaction set resulting only in foo-2.0 + getting installed. + +commit f22e3c67e5fa56ab31a2ef21cbb80df02ef8615a +Author: Panu Matilainen +Date: Thu Mar 18 15:24:08 2010 +0200 + + Replace the checkPackageDeps() monster with per-ds problem check helper + - just refactoring to avoid copy-pasteism, no functional changes + +commit 76e4c869bc2700120c0e2b0df25225e3b27144c3 +Author: Panu Matilainen +Date: Thu Mar 18 13:30:41 2010 +0200 + + Lump the copy-paste checkDependentFoo() functions into one + - just pass the dependency type from caller instead + - clarify the comments a bit + - no functional changes + +commit fa4d3f9cc9412dee033a6f9925280ca8e078a92a +Author: Panu Matilainen +Date: Thu Mar 18 13:15:30 2010 +0200 + + Add a new problem type for obsoletes + +commit e4f77b40107fde36d6cbbbfd3b547c9e3b853789 +Author: Panu Matilainen +Date: Thu Mar 18 12:37:35 2010 +0200 + + Lose deprecated rpmtsFindPubkey() + - unused in rpm since 4.6.0, and even before that this wasn't really useful + outside rpm internals + +commit d2d7ca7d43be0491f2f43d4867d4adbefbf922de +Author: Panu Matilainen +Date: Thu Mar 18 12:34:44 2010 +0200 + + Add some basic dependency check tests to test-suite + +commit a609aa7dbcf4738f3b47a63d3062dcadf58ef2fa +Author: Panu Matilainen +Date: Thu Mar 18 12:23:38 2010 +0200 + + Differentiate between conflicts in db versus install set + - this appears to have been broken since its introduction in 2002, + commit d89ce5854d39a9e896759fb96e6e303c67573bb6... + +commit 9151212fe3911cc6ec55b3bbf21e9b4bc94681fa +Author: Panu Matilainen +Date: Wed Mar 17 08:04:55 2010 +0200 + + Use a switch-case when switch-case is called for + +commit 3c7af7c9ff5ef2a186f36c6e068da64b02b48d32 +Author: Panu Matilainen +Date: Mon Mar 15 12:37:16 2010 +0200 + + Lose ancient and bitrotten rpmdiff scripts (ticket #148) + - More modern tools for diffing rpms exist, ones that use librpm + instead of trying to parse the lowlevel header structures and tags + by themselves. Nobody appears to use these scripts as they've been + dysfunctional since eons ago, might as well drop them off. + +commit b5b6fae804b20a655f74d958544fbc8c884531b8 +Author: Panu Matilainen +Date: Mon Mar 15 12:30:02 2010 +0200 + + Lose useless xinetd service stub (ticket #149) + - this never did anything to begin with, and BDB >= 4.8 doesn't support + RPC at all so... + +commit 12802c36c9a3b7260d9f788afc826b1cc5ee05e2 +Author: Panu Matilainen +Date: Mon Mar 15 12:00:55 2010 +0200 + + Avoid eating empty lines in spec %prep section (RhBug:573339) + - In spec %prep context empty lines don't usually matter but they can + be significant in eg here-documents. + - Fixes regression from commit 94ff22b129aeb31c38848231e40f87aa4a5613a1 + +commit 35052b96232810cbf0d91a4f1d1d3ff25a142fd0 +Author: Panu Matilainen +Date: Mon Mar 15 11:54:55 2010 +0200 + + Add an enhanced argvSplitString() function for splitting strings to argv's + - Returns the newly created argv instead of useless "this always returns 0" + - By default make a "real" split, including empty strings + - Flags argument allows controlling behavior, for now only flag is to + preserve argvSplit() behavior but leaves room for future enhancements + such as quoted splitting etc + +commit 8c5332984e32d27d28f9a440947b070af0d14c45 +Author: Panu Matilainen +Date: Mon Mar 15 09:45:49 2010 +0200 + + Tell python about RPMTRANS_FLAG_NOCONTEXTS + +commit 69ac7f304af9d613ba72d84ccb6e8e69ed4a87dd +Author: Yuri Chornoivan +Date: Sun Mar 14 14:56:27 2010 +0000 + + l10n: Updates to Ukrainian (uk) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit 9722257b24c8b42c35a005ab98400b7732e8c17d +Author: Panu Matilainen +Date: Sun Mar 14 11:21:22 2010 +0200 + + Default to "not found" for rpmtsSolve() + comment behavior + - this fixes the behavior when (as normally is the case) there is no + depsolve callback set + +commit bfe41b2e5a30199ac57bf106c8a69339a87140df +Author: Panu Matilainen +Date: Sun Mar 14 11:17:29 2010 +0200 + + Revert "Unbreak conflicts from commit 1f46534b5444dda77e3a2c757f7c88c5ec93dba0" + - This is completely broken and wrong, duh... + - This reverts commit d91060373663d703457c6e1abf40b495ea372bf2. + +commit 92d51e87afdb0eade6b298dfbe80ed04ef1462e7 +Author: Yuri Chornoivan +Date: Sat Mar 13 18:26:27 2010 +0000 + + l10n: Updates to Ukrainian (uk) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit fe7c0baf03d3e6ae6b5a20dac73ffe5f193b239f +Author: Panu Matilainen +Date: Sat Mar 13 12:32:45 2010 +0200 + + Add Problems() method to python transaction element class + +commit c4b4944e8f4633d564613d46c9b8b6f143b4b8f5 +Author: Panu Matilainen +Date: Sat Mar 13 12:28:26 2010 +0200 + + Add a helper function for turning rpm problem set into python list + +commit d91060373663d703457c6e1abf40b495ea372bf2 +Author: Panu Matilainen +Date: Sat Mar 13 09:29:30 2010 +0200 + + Unbreak conflicts from commit 1f46534b5444dda77e3a2c757f7c88c5ec93dba0 + - only call solve callback on requires, conflicts have satisfied/unsatisfied + status backwards here + +commit 23ad4eee6af0dad922fc193309839c186d8056e5 +Author: Panu Matilainen +Date: Fri Mar 12 20:48:45 2010 +0200 + + Further minor cleanups to rpmtsCheck() + - if we dont care about rpmtsCloseDB() we dont need a variable for its status + - lose unnecessary rpmtsiFree(), there used to be exit jumps from middle + of the loops but not anymore + +commit d8cea8e9ffbf2d827ae323540670cffc2a931030 +Author: Panu Matilainen +Date: Fri Mar 12 20:46:00 2010 +0200 + + Lose unused iterator + its freeing + +commit 5db726b9680b609b9d81c221f549812f9f9e86a9 +Author: Panu Matilainen +Date: Fri Mar 12 20:43:02 2010 +0200 + + Remove unnecessary rpmdsSetNoPromote() calls in checkPackageSet() + - rpmdsNew() sets nopromote to the global default already + +commit 1f46534b5444dda77e3a2c757f7c88c5ec93dba0 +Author: Panu Matilainen +Date: Fri Mar 12 20:40:05 2010 +0200 + + Add internal API for depsolve callback + - rpmts struct is now fully opaque within depends.c + +commit e696b409fe836bf39cbf639bac4321d658d0952d +Author: Panu Matilainen +Date: Fri Mar 12 19:41:10 2010 +0200 + + Record problems into the transaction elements causing them + - Any problem found in transaction processing is caused, or at least + triggered by, some transaction element. Having the problems in + elements lets API users easily determine which package caused which + problem instead of having to parse problem strings in vain. + - No problem set stored in transaction set itself now, rpmtsProblems() API p + reserved by making it collect problems from our transaction elements + into a new set. The problem set fiddling in rpmtsRun() wrt %pretrans + and all is a bit crazy - always was, now its just more visible... + - Make rpmtsCheck() pass the associated transaction elements into + the lower level functions. rpmdsProblem() removed from API, it's + not particularly useful outside rpmtsCheck() internals. + - rpmts struct is now opaque within depends.c except for solve callback + - This breaks --badreloc, need to figure out something saner for the + problem filtering + +commit 1d98830819727c385731ef6fafcaa6f3ba5cf216 +Author: Panu Matilainen +Date: Fri Mar 12 16:18:16 2010 +0200 + + Add a few API bits for problem sets in transaction elements + - make rpmteProblems() public and refcount the returned sets + - add public rpmteCleanProblems() to destroy the per-element problem sets + - add internal rpmteAddDepProblem() for adding per-element dependency problems + +commit ee24a8465648aad4929bdd3cd2f4d77667f319ab +Author: Panu Matilainen +Date: Fri Mar 12 16:11:15 2010 +0200 + + Move rpmps typedef into rpmtypes.h, its common enuf + +commit dd836598ee8a6a8673e090c2c809c77bb529c733 +Author: Panu Matilainen +Date: Fri Mar 12 14:38:18 2010 +0200 + + Free iterators in the function which initialized them (symmetry is good) + +commit 63d891c3789bf42a1fb3a588c44129491918182b +Author: Panu Matilainen +Date: Fri Mar 12 14:36:37 2010 +0200 + + Eliminate a bunch of pointless "can't happen" checks + - if these things actually happen, we're probably better of segfaulting... + +commit d438ffbe6da48c86f8e7927377f7ea7ec2ee3deb +Author: Panu Matilainen +Date: Fri Mar 12 14:27:52 2010 +0200 + + Further cleanup the return code craziness in dependency checks + - any problems found are added to the problem set, none of these + return codes have been used since forever + +commit 1d69823f368538307a1c855f42e4e51f46f2b7be +Author: Panu Matilainen +Date: Fri Mar 12 13:53:01 2010 +0200 + + Clean up dependency checking code + - unsatisfiedDepend() only ever returns 0 or 1, lose the hysterical + can't happen switch-cases and other bogus error code checking + - also lose unnecessary and mis-indented NULL-tests, + rpmdsInit() and rpmdsNext() handle NULL cleanly by themselves + +commit 42d9a584f4710e1d62cc06996c1e296db307cacb +Author: Panu Matilainen +Date: Fri Mar 12 11:44:47 2010 +0200 + + Move rpmte-specific problem creation to a helper function + +commit ffd5d96817b2ade7da3d26173f7dd447358965a3 +Author: Panu Matilainen +Date: Fri Mar 12 10:20:25 2010 +0200 + + Split transaction member information out of rpmts to separate struct + - add internal rpmtsMembers() function to get the member structures + - the main rpmts struct is now opaque within order.c, and much closer + to being so for depends.c and transaction.c too + - no functional changes + +commit df9cdb1321ada8e3b120771f91a2eefab4ac2ad5 +Author: Panu Matilainen +Date: Fri Mar 12 09:01:25 2010 +0200 + + Turn PSM into a complete blackbox + - The psm structures aren't stored or passed around by any users, + so there's no need for them to separately allocate and free the + struct, bury this all inside rpmpsmRun() which takes care of + initialization, actual actions and freeing. + - There's also no need for refcounting now as allocations are completely + contained within the rpmpsmRun() blackbox. Lose psm-debug foo which + was only used for refcount debugging. + - No functional changes + +commit d221895352955d5ee0503855f71c4bc242019273 +Author: Panu Matilainen +Date: Fri Mar 12 08:32:15 2010 +0200 + + Split file state structures + routines out of rpmte to separate sources + - no functional changes + +commit 05aaf00538be2c561037a76b5a353d7ef8e8194b +Author: Yuri Chornoivan +Date: Thu Mar 11 17:56:24 2010 +0000 + + l10n: Updates to Ukrainian (uk) translation + + Transmitted-via: Transifex (www.transifex.net) + +commit b5118bad05ba72f3ec179d955bffafb0ae3a106d +Author: Panu Matilainen +Date: Thu Mar 11 13:38:52 2010 +0200 + + Not all scriptlets have bodies (eg -p /sbin/ldconfig), dont expand NULLs + +commit e34d752b92ebe648e3c926279867bd03b6f529cf +Author: Panu Matilainen +Date: Thu Mar 11 13:34:17 2010 +0200 + + More dumb thinko/typo/braindamage in scriptlet expansion patches + - qformat certainly shouldn't default to on, duh + +commit 45c0619de92059814856e57d1bdfcdff463f0c2d +Author: Panu Matilainen +Date: Thu Mar 11 13:21:20 2010 +0200 + + Dumb segfault on trigger scripts with no flags, doh + +commit d370816ba508a33cc39252cbb9ba85dcd99504d5 +Author: Panu Matilainen +Date: Thu Mar 11 12:06:49 2010 +0200 + + Support run-time macro and queryformat expansion on scriptlets + - Add per-scriptlet type flag tags to control special behavior. + - Add rpmlib dependency on scriptlet expansion - if a package relies + on scriptlet expansion it cannot be correctly installed with + a version of rpm that doesn't support it. + - Expansion is always an opt-in behavior, enabled with -q and/or -e argument + in spec. We can't just blindly expand even macros as there's no telling + %{} constructs might mean in whatever language is used for the script. + - Queryformat expansion requires great care with strange and ugly escapes + when writing scriptlets, but OTOH it permits access arbitrary header + data at runtime, which has previously been completely impossible. + - The handling of these expansions needs unifying for all scriptlet types, + the trigger scriptlet handling is uuugly. Macro expansion could be + transparently done from rpmScriptRun(), but because of their similar + syntax, macro expansion needs to happen before query format expansion, + and we dont have the header available in rpmScriptrun() + +commit d0a959a571d7b34ea2263619b8cfba623a425c44 +Author: Yuri Chornoivan +Date: Tue Mar 9 18:15:02 2010 +0000 + + l10n: Initial Ukrainian translation + + Transmitted-via: Transifex (www.transifex.net) + +commit 9720d7226d8d7a9e599b1bad974a641f43d60e9b +Author: Panu Matilainen +Date: Mon Mar 8 15:00:15 2010 +0200 + + Updated Spanish translation (Héctor Daniel Cabrera through Transifex) + +commit f078756f2175762eec6a74aeddb02a8edd86e508 +Author: Panu Matilainen +Date: Sun Mar 7 12:43:25 2010 +0200 + + Updated Polish translation from Piotr DrÄ…g + +commit e665e457b01d7fdf5814d44a143c2f8502946b0e +Author: Panu Matilainen +Date: Sat Mar 6 11:34:09 2010 +0200 + + Minor cleanup to PSM_INIT stage, no functional changes + - lose redundant RPMRC_OK assignment + cosmetics + +commit dbf60a838b022057232f836810a923e89c982067 +Author: Panu Matilainen +Date: Sat Mar 6 11:17:29 2010 +0200 + + Update translations to shed non-existent messages from recent changes + +commit 4878580634971b31befe1741ba83b5ffca0dcf15 +Author: Panu Matilainen +Date: Sat Mar 6 11:04:48 2010 +0200 + + Lose a couple of leftover variables from times before headerPutString() + +commit 1ab5fa94e30d0aa98c8482d9c19f11e759de2531 +Author: Panu Matilainen +Date: Sat Mar 6 11:03:11 2010 +0200 + + Dont bother translators with internal error debug foo + +commit b1afaf74717dcdc7e8dbb60b31b34519b40fa92a +Author: Panu Matilainen +Date: Sat Mar 6 11:01:08 2010 +0200 + + rpmdsN() and rpmdsEVR() returning NULL here is a serious can't happen + +commit 63fb29ea64846dfb6da35647325e2ca8ec92e222 +Author: Panu Matilainen +Date: Mon Mar 1 16:32:54 2010 +0200 + + Lose more ancient compatibility retrofit goo + - FILEUIDS, FILEGIDS and DEFAULTPREFIX are all rpm 1.x - 2.x era, + packages we can't even read anymore... + +commit 45e2d4e1d0260a9c07eb1daf0c68b82f602ad16f +Author: Panu Matilainen +Date: Mon Mar 1 16:13:52 2010 +0200 + + Rip out more rpm 2.x era relocation leftovers + - we can't even read packages from that timeframe, much less relocate them + +commit c3c5eae10bd10ef00af18b721056682948c2fa2c +Author: Panu Matilainen +Date: Mon Mar 1 15:55:57 2010 +0200 + + Remove now unused inFtw from file lists + +commit d46f752c399730e3c75ecc6786c2599b8922031b +Author: Panu Matilainen +Date: Mon Mar 1 15:52:46 2010 +0200 + + Lose ancient prefix remnants from build code + - since commit 840599e3d92e29e8e1c1cf7ecf4ad5c37d3bf021 in 1998, nothing + has set RPMTAG_DEFAULTPREFIX meaning fl.prefix is always NULL... + +commit da5b85fb2325db56c10fa1e57a7141ab0f08be45 +Author: Ville Skyttä +Date: Fri Feb 26 19:25:04 2010 +0200 + + Fix rpmfcAttrDeps() for perl modules (was broken in c03be327). + +commit b8f47a77f5dca3fcd4acbb822dd4824b582341bf +Author: Ville Skyttä +Date: Thu Feb 25 19:51:25 2010 +0200 + + Emit highest versions of perl module deps, not first versioned ones found. + + Requires the "version" module installed (perl >= 5.9 or separately), falls + back to the previous "output first versioned one found" behavior if it is + not available. + +commit c4b4a7e712e36d5074679e413e14150031eed407 +Author: Ville Skyttä +Date: Thu Feb 25 19:45:10 2010 +0200 + + Fix open POD section leak across different files in perl.req. + +commit 0ffc1e914359d9c22079c18b1f32ec7e310aa57b +Author: Ville Skyttä +Date: Thu Feb 25 19:37:55 2010 +0200 + + Make perl.{req,prov} warn about unreadable files. + +commit a1517d9c09798fac6e288140f1a892e4dde6456d +Author: Panu Matilainen +Date: Mon Mar 1 11:48:28 2010 +0200 + + Updated Spanish translation from Héctor Daniel Cabrera (ticket #141) + +commit 81ad49ceec533f337379b75c77a9213b581d3d8d +Author: Panu Matilainen +Date: Fri Feb 26 13:45:47 2010 +0200 + + Minor rpmtsCheckDSIProblems() cleanup + +commit e5a32d7701e6fde45a0ae4a5e7d3d286b839518a +Author: Panu Matilainen +Date: Fri Feb 26 09:36:42 2010 +0200 + + Lose some unnecessary includes + +commit 3a240cc1d6b77a41a7aa6d3ce9d704cfdac56f15 +Author: Panu Matilainen +Date: Fri Feb 26 09:17:03 2010 +0200 + + Hide install/erase statistics collection inside psm + +commit 22df735b5ae02395b21925da2eb040fe7f70a7de +Author: Panu Matilainen +Date: Thu Feb 25 21:50:20 2010 +0200 + + Lose fluff from ensureOlder() + - p and h can't possibly be NULL in the place this gets called + - the single caller doesn't care about return value + +commit 04d07f836bf564a8138ee12385722e03da606e50 +Author: Panu Matilainen +Date: Thu Feb 25 21:35:56 2010 +0200 + + Lose another pointless NULL-check on rpmfi iteration + an unused variable + +commit ab61705262ca24cd3e1ff83b4badc4d8f67ca2d3 +Author: Panu Matilainen +Date: Thu Feb 25 21:18:47 2010 +0200 + + Remove unnecessary fiddling with ts element header + - rpmteClose() takes care of freeing the header already + +commit 31de39c93429d36ac63d8a6d1869c025063aa834 +Author: Panu Matilainen +Date: Thu Feb 25 20:52:35 2010 +0200 + + Lose some completely pointless "can't happen" checks + - rpmfiFC() returns 0 if called with NULL, which is ok in these cases + - rpmfiInit() and rpmfiNext() behave correctly when passed NULL, no need + check separately + - "dn" is already referenced before checking for NULL... it really + cannot happen ;) + +commit 91b3bc198acd0abc603544e1a9456f8498a28fca +Author: Panu Matilainen +Date: Thu Feb 25 20:42:55 2010 +0200 + + Tidy up checkProblems() a bit, no functional changes + - avoid a million redundant calls to rpmtsFilterFlags() + - turn osOkay() and archOkay() into macros, they're suitably dumb for that + +commit 0ab18190d7789f3cd8329d5dcd28fb6c05e2beeb +Author: Panu Matilainen +Date: Thu Feb 25 20:26:28 2010 +0200 + + Lose some long since unnecessary includes + +commit 6316a014709ab691c9e5d8552aadf886e8328550 +Author: Panu Matilainen +Date: Thu Feb 25 20:18:48 2010 +0200 + + Duh, yet more leftover io flag stuff in psm + - should've been in commit 6193da9cad40dbbc1d7ce974ab9df96986a52183 + +commit 62a60d8716b7306cf29fa14298dd3c0263d81b07 +Author: Panu Matilainen +Date: Thu Feb 25 15:16:39 2010 +0200 + + Gah, stupid thinko in elfdeps + - for DSO's without a soname, we should be adding a *provide* of the + basename, not require + - dumb regression from commit 87c237bebfc792a8b439fa2c5a2b78328b139d50 + +commit cd3d8082e19f27dae2d6a786dbaa52afb809bc8b +Author: Panu Matilainen +Date: Thu Feb 25 14:22:34 2010 +0200 + + Implement pretrans, posttrans and verifyscript as psm goals + - Loose rpmpsmScriptStage() hack and bury the psm details inside + the psm implementation + - Map the script-only goal enums to the corresponding script tag + to avoid having to re-re-re-map stuff unnecessarily + - pretrans and posttrans should really be handled as a part of PKG_INSTALL + process, but as these stages are disconnected from the main install + part we can't remember the state in the psm - it would need to be + stashed into transaction elements in the meanwhile + +commit 384f7777053ae3da9b89a718b46a706f671bfb81 +Author: Panu Matilainen +Date: Thu Feb 25 13:54:51 2010 +0200 + + Separate PSM goals from individual stages + - no functional changes - supposedly + - nothing outside the PSM should need to know anything about its + internals, the general goals need to be sufficient (not the case yet) + - define goals to match rpmteType so there's no need to re-re-re-map + the operations + - loose the big unused individual stage string switch + +commit 6ed64c001f667ad8fb8bdec01f5ca54f57c44270 +Author: Panu Matilainen +Date: Thu Feb 25 13:34:51 2010 +0200 + + Transaction element type is not a bitfield but a plain old enum + +commit 1b78ed281b71915f259b9dc79bbcb7790764510f +Author: Panu Matilainen +Date: Thu Feb 25 12:36:09 2010 +0200 + + Improve failed transaction element behavior + logging + - handle failed element in rpmteOpen() already, avoiding need to check + everywhere else + - elements cancelled due to parent failure can further cancel their + dependent elements + - all failed, including skipped, elements are now logged + +commit 8e20523b9d7ad373ded0810cede0ce0e99a5cede +Author: Panu Matilainen +Date: Thu Feb 25 12:32:57 2010 +0200 + + Count the number of failures for transaction elements + - this lets us track whether the package itself failed or if it + was cancelled due to parent failure + +commit d496d9e60fde3a06528152f98719d32f68c7cf9c +Author: Panu Matilainen +Date: Thu Feb 25 11:25:15 2010 +0200 + + Yank out a bunch of unused defines + +commit 924234e8b68a16ea97793706a51901bd3a52523e +Author: Panu Matilainen +Date: Thu Feb 25 11:05:02 2010 +0200 + + Lose now unnecessary progTag from psm + - our scriptlet thingie knows which progtag to use for a given script tag + already, no need to baby-feed the psm + +commit 98fcb7566d16f248459d30f72f34b9c1e79f0b09 +Author: Panu Matilainen +Date: Thu Feb 25 10:58:51 2010 +0200 + + First rough-cut version of scriptlet abstraction + - Split the low-level scriptlet machinery out of psm + - New struct to hold the necessary information about scriptlets so + we can execute them without having a header at hand. + - Trigger handling is hackish and needs more love... + +commit fde84f901cd0b58e4313949bbfae4e6c35dacbbd +Author: Panu Matilainen +Date: Thu Feb 25 10:58:09 2010 +0200 + + Log all install/erase failures in rpmtsProcess() + +commit 010ec4c7fd94a80455f8df2c0dcbd807111497bb +Author: Panu Matilainen +Date: Thu Feb 25 10:36:15 2010 +0200 + + Move rpmteTypeString() back to rpmte, internal only though + +commit c7a21965e99f6b245111cf3fc12de2012f4ebc84 +Author: Panu Matilainen +Date: Thu Feb 25 08:28:34 2010 +0200 + + Kick out stillborn code + - psm aint the place to fiddle with db internals anyway + +commit e2239a06c03b5efdadc0fbb7df1b4d35e018f24d +Author: Panu Matilainen +Date: Wed Feb 24 16:53:52 2010 +0200 + + Clean up handleOneTrigger() a bit + - no functional changes (supposedly ;) - just shuffle things a bit + to condense and make it friendlier on the eyes + +commit 308632b85917e3706676a2a51dce72f2f8867890 +Author: Panu Matilainen +Date: Wed Feb 24 15:02:42 2010 +0200 + + Lose unused PSM_RPMIO_FLAGS state + - should've been in commit 6193da9cad40dbbc1d7ce974ab9df96986a52183 + +commit ad6a694bcc15205e0084cc538d0a33852eca89d6 +Author: Panu Matilainen +Date: Wed Feb 24 09:42:11 2010 +0200 + + Permit simple strings to be returned argv-style from headers too + +commit 8de071994d044158b73daf3f1f88fa970d90b28f +Author: Panu Matilainen +Date: Tue Feb 23 15:11:21 2010 +0200 + + The lower level script runners dont really need psm for anything now + +commit ef2c96de084ad40c653100d3e772932573c1a9b5 +Author: Panu Matilainen +Date: Wed Feb 24 16:35:45 2010 +0200 + + Bury the signal queue stuff inside runExtScript() + - lose psmWait() which is just a fancy wrapper for rpmsqWait(), instead + collect scriptlet runtime stats for all scripts (previously lua wasn't + counted) + +commit 0a96b99c37c815b54a4282035d49037c7f7bcf76 +Author: Panu Matilainen +Date: Tue Feb 23 14:59:25 2010 +0200 + + Lose psmWait(), instead collect scriptlet runtime stats for all scripts + - psmWait() which was not much more than a fancy wrapper over + rpmsqWait() predates lua scriptlets by far and no time got counted + for them at all. Useless but everybody loves stats... + +commit 01738194428bd67bdf454793fb93e5544b369a30 +Author: Panu Matilainen +Date: Wed Feb 24 16:33:21 2010 +0200 + + Push prefix calculation higher in the psm foodchain + - Header is no longer needed for the low-level scriptlet execution + - Lose support for ancient RPMTAG_INSTALLPREFIX relocation, it was + deprecated in 1998 already. Preserve $RPM_INSTALL_PREFIX behavior + for scriptlets though. + +commit f630758dccf462bfbdf8cc0672e4bf87859b50e9 +Author: Panu Matilainen +Date: Mon Feb 22 11:45:28 2010 +0200 + + Remove unused os and arch score from transaction elements + +commit 912975695fcc9acc924301dc58965daf43121fcd +Author: Panu Matilainen +Date: Mon Feb 22 11:13:05 2010 +0200 + + Handle NULL passed to rpmMachineScore() + +commit e7f73133cbb35ed0f21938996018654391b0a7d7 +Author: Panu Matilainen +Date: Thu Feb 18 15:23:02 2010 +0200 + + Extract #!/usr/bin/env interpreter dependencies, part 1 (ticket #136) + - With "#!/usr/bin/env " shebang directives, rpm previously + only added a dependency for /usr/bin/env, completely missing the + actual interpreter. If the interpreter happens to be an absolute path, we + can just add it as is. + - Patch originally from Ville Skyttä + +commit 0e36eb1370e4e856a337460a2d69de4288aed77b +Author: Panu Matilainen +Date: Thu Feb 18 13:23:18 2010 +0200 + + Perform dependency extraction solely based on collected attributes + - Yank out the now unnecessary apply table + related apply functions, simply + collect dependencies for whatever attributes we found for a given file + +commit f6534fa920521ac954cc4f23b4b7981dfc27d5f3 +Author: Panu Matilainen +Date: Thu Feb 18 12:44:05 2010 +0200 + + Classify .desktop files by just path + - Previously we required a file to be classified as text and have + .desktop suffix, for now replace that with just a regex. We'll eventually + want/need some extra qualifying logic to handle cases like these, + eg "only apply path attributes if condition X is also true" + +commit e9e3b5eb6e7ebb9549d60bff4badf92a2cf9b201 +Author: Panu Matilainen +Date: Thu Feb 18 12:31:34 2010 +0200 + + fontconfig -> font dependency extractor rename + - No functional changes, just clearing the naming conventions to avoid + having to extra mapping for attribute -> extractor name. The current + font provides are handled by fontconfig, but that's just an internal + implementation detail. + +commit 3d94b4f594eafcbb0d4394416ddd82e79de58551 +Author: Panu Matilainen +Date: Thu Feb 18 12:26:03 2010 +0200 + + Add debug output for file attributes + +commit 3b40816421eb8fd69496f14f9cf7f2a829943798 +Author: Panu Matilainen +Date: Thu Feb 18 12:25:04 2010 +0200 + + Add path coloring for versioned python interpreter itself + - pythondeps.sh knows how to figure python(abi) provide from + /usr/bin/pythonN.N version but as that's an ELF file, pythondeps.sh + never got a chance to run on that file + +commit 759c03dac258121be2d3d1099c4b613f4c3c77f5 +Author: Panu Matilainen +Date: Thu Feb 18 11:47:34 2010 +0200 + + Replace python-specific path-coloring hack with a generic mechanism + - Use a table of regex pattern - attribute list pairs to apply any + additional path based attributes. While the fundamental type of a file + certainly does not depend on its location on the filesystem, its + location *does* have attached semantics and it'd be just silly to + ignore that fact. + - The current implementation is dumb as it ends up recompiling the regexes + and splitting the attr strings a million times. OTOH compiling the + regexes into the static rpmfcPathTable would be wrong as the patterns + can contain macros and they can vary from package to package when building + several packages on one invocation. The attribute split + regex compilation + should be done once per rpmfc instanciation... + +commit 11ed0f75feb790287fbf7013c80a526e38dbbfe4 +Author: Panu Matilainen +Date: Thu Feb 18 10:35:21 2010 +0200 + + Script/interpreter terminology renaming + - No functional changes, just making more obvious mapping between + attributes and the dependency extractor names. This also leaves the + term "interpreter" free for use for the actual interpreters, such + as interpreter(python) provides if we go that way (ticket #136). + +commit d72cc38d3063343e5fb7306b473861e0f008032a +Author: Panu Matilainen +Date: Thu Feb 18 10:26:24 2010 +0200 + + Eliminate silly redundancy + - rpmfcSaveArg() and addAttr() were the very same thing, unify + - turn hasAttr() into a macro, its just dumb enough for that + +commit c315beb3193202ee2221d47c02955b786032f8ed +Author: Panu Matilainen +Date: Wed Feb 17 17:12:52 2010 +0200 + + Only run dependency extractors on files with attached attributes + - looking at file colors still works as every relevant type has + RPMFC_INCLUDE set but this includes various things we might not have + attributes for, just avoids unnecessary work and is more obvious this way + - should really have been in commit ad2c8485ea109d37a2fb8ee9ed5f688eef282bf8 + +commit 76c2fd5a939b234a00e4e2208dcd17030968e00d +Author: Panu Matilainen +Date: Wed Feb 17 17:03:19 2010 +0200 + + Simplify rpmfcAddFileDep() + - rpmfcHelper() already has the "deptype" character in the format + we want for file deps, pass it as argument avoiding bunch of silliness + +commit ad2c8485ea109d37a2fb8ee9ed5f688eef282bf8 +Author: Panu Matilainen +Date: Wed Feb 17 15:09:20 2010 +0200 + + Use text token attributes instead of bitfield for file classification + - 32 bits are nowhere near enough to meaningfully classify all the + types of data we might want to extract dependencies for, the bitfield + was already almost used up and twisty with embedded enumeration in the + middle etc. With text-based tokens, there are no limits to the total + number of known attributes or number of attributes that can be attached + to a given file. This also paves way to moving the classification table + out of librpmbuild into configuration file(s). + - Remove most of the now unused RPMFC_FOO definitions from the FCOLOR enum, + leaving just the more abstract INCLUDE, WHITE etc which control other + aspects of the operation. Also ELF is special as the value ends up + in headers, preserve it too. + +commit f3ca4fb48171b4bd0549fe67f302517135c465ff +Author: Panu Matilainen +Date: Wed Feb 17 12:58:40 2010 +0200 + + Plug a silly memleak in processPackageFiles() + +commit 22392d2245df78ef13acd9f1a2d413c85c271432 +Author: Panu Matilainen +Date: Mon Feb 15 08:52:54 2010 +0200 + + Skip over =for ... perlpod construct (RhBug:477516) + - patch from Ville Skyttä + +commit c2b1b54500bdbd1c252da210a05d989b877cb9c6 +Author: Ville Skyttä +Date: Sat Feb 13 12:02:20 2010 +0200 + + Don't trump versioned module dependencies with unversioned ones. + +commit a50c3e9d69868f6d8200044f26f01653b57ff5f5 +Author: Ville Skyttä +Date: Sat Feb 13 11:52:38 2010 +0200 + + Extract dependencies from some usual syntaxes of "use base qw(Foo)". + +commit 56e8074b47cdb8755aa66d65424af170ffdd35bb +Author: Ville Skyttä +Date: Sat Feb 13 11:04:17 2010 +0200 + + Trivial perl.req cleanups. + + Drop dead code, comment fixes, weed out duplicate dependencies to perl + (done by rpm itself anyway, but does not hurt to do it already on this + level for cleaner results when testing). + +commit 38de3b54f8af1bf91eda2dfd840a36e0808307f1 +Author: Ville Skyttä +Date: Wed Feb 10 21:58:43 2010 +0200 + + Emit dependencies only to interpreters with absolute paths. + +commit 06224459a52671e046e2d347ca887fa96a9228b4 +Author: Ville Skyttä +Date: Wed Feb 10 21:56:33 2010 +0200 + + Allow whitespace between #! and the interpreter. + +commit 398ae27985ff854c627353cbd578a21c1dff3dcd +Author: Ville Skyttä +Date: Wed Feb 3 23:15:31 2010 +0200 + + Avoid some unnecessary command invocations in scripts. + +commit 4302a06700656da0d82a91964581e74f04bec9e4 +Author: Ville Skyttä +Date: Wed Feb 3 23:14:27 2010 +0200 + + Avoid some stat() calls. + +commit 0f743d36d6151948f3b5c186216d72d5c21660d3 +Author: Ville Skyttä +Date: Wed Feb 3 23:13:07 2010 +0200 + + Fix reversed logic in getSystemBundles(). + +commit 33ea7cbd96432cbad5988da6ae87556d69faa798 +Author: Panu Matilainen +Date: Wed Feb 10 11:12:54 2010 +0200 + + Permit requires extraction too from fontconfig and desktop files + - presently unused but... + +commit 87c237bebfc792a8b439fa2c5a2b78328b139d50 +Author: Panu Matilainen +Date: Wed Feb 10 10:52:40 2010 +0200 + + Split elf dependency extraction out of librpmbuild to external helper + - Elf dependency extraction code code lifted from rpmfcELF() and refactored + to saner pieces. Having it in separate executable also frees librpmbuild + of libelf dependency, clean up the unnecessary linkage etc from + autofoo + - This lets internal dependency generator for elf files be + overridden without losing file coloring (which is required for + correct multilib handling). It also permits non-native elf files + (eg when cross-building) to be handled by providing a custom + elf dependency helper + - On the flip side, this inevitably slows down builds somewhat as + two fork-exec's are needed for every elf file, but unlike invoking + something like the python interpreter, this is a slim helper... + - All dependency extractors of the internal dependency generator are now + external helpers (how twisted is that, huh? :) and thus can be customized + and filtered through %__foo_provides|requires macros + +commit a79822f382c2e9e5002e7b411fa556c999fdc331 +Author: Panu Matilainen +Date: Wed Feb 10 11:19:49 2010 +0200 + + Separate helper for script interpreters, split out of librpmbuild + - permit overriding/customization of script interepreter dependencies + - unlike the C-version, the interpreter.req only looks at the first line + for shebang: libmagic only looks at the first line too, so anything + else will never get classified as scripts in the first place + +commit c03be327fe94d1436b00419e20946c6dc10a6743 +Author: Panu Matilainen +Date: Wed Feb 10 09:24:21 2010 +0200 + + Make rpmfcSCRIPT() a bit easier on the eyes... + +commit a6c5d372af25043395a620d9c16652d1938d17ab +Author: Panu Matilainen +Date: Tue Feb 9 11:35:47 2010 +0200 + + Move rpmVersionCompare() into a more logical place + - it has nothing to do with psm so no point having it there + +commit a1377fcc7544acba04e67f40f5a2307ab04694ff +Author: Panu Matilainen +Date: Tue Feb 9 11:21:29 2010 +0200 + + Unify scriptlet execution calling conventions and error handling + - Split external scriptlet execution to separate function, called + identically with internal (ie lua) scriptlet run + - runScript() is now just a dispatcher which calls the lower level script + runner and decides whether the scriptlet failure is fatal or not. + - Only %prein and %preun scriptlet failures are considered fatal + regardless of the type of failure, as they prevent the install/erase + from taking place at all. Other failures might or might not be fatal + in terms of package functionality but rpm has no way of knowing whether + that is the case, so we only report what we know for a fact: + either the package was installed/erased or not, and either it had + scriptlet failures (for which callbacks are issued) or it didn't. + +commit d4d68037e167e1c593bc0a7eee5562b3e3280486 +Author: Panu Matilainen +Date: Tue Feb 9 10:17:19 2010 +0200 + + Lose unused stillborn psm threading stuff (didn't I already do this?) + +commit a068a4dec140ff554fdfe73815e7f5efbccd0d0c +Author: Panu Matilainen +Date: Tue Feb 9 10:01:40 2010 +0200 + + Use a more reasonable type for rpmteHeaderSize() + - Headers must always fit into memory which is not true of rpm_loff_t, + and the real size is arbitrarily capped far below even that limit. + headerSizeof() uses unsigned int here, just use that... + - Doesn't affect the calculations, just type pedantry... + +commit 06bac8b9aac43e86cfe62fdd71dcdccdcc8b7874 +Author: Panu Matilainen +Date: Tue Feb 9 09:47:35 2010 +0200 + + Move tsortInfo typedef into internal-only header + - this is not exposed outside librpm internals + +commit 18f0d305f0a418984579c97731811bbe3ea974e9 +Author: Panu Matilainen +Date: Tue Feb 9 09:45:58 2010 +0200 + + Bah, missing include in commit 121f73bb4932d15e618e82d5c6d7b43280dc0f7d + +commit 3a3152981c7f54c801240b34663f0afb16877bfd +Author: Panu Matilainen +Date: Tue Feb 9 09:37:51 2010 +0200 + + Unbreak python(abi) requires generation (RhBug:562906) + - commit 426a7b6f44c6a0e1633693575c7bb6fcc76cf8a5 caused pythondeps.sh + to match too much, undo the damage + - patch from David Malcolm + +commit 121f73bb4932d15e618e82d5c6d7b43280dc0f7d +Author: Panu Matilainen +Date: Mon Feb 8 10:01:19 2010 +0200 + + Add macro expansion queryformat extension + - unused at the moment but doesn't hurt anything either... + +commit a5dbbd4065a34664c4701f246bd7d8d537346a33 +Author: Panu Matilainen +Date: Fri Feb 5 17:08:05 2010 +0200 + + Remove unused mntctl & mount related header checks + +commit 27b216694a9e19f932f24e6fceb6c114aeae5fb9 +Author: Florian Festi +Date: Fri Feb 5 12:43:21 2010 +0100 + + Remove no longer neede rpmts->filesystemCount and->filesystems + +commit cd3cff78bcdca7b976420faca8564931b0907ab2 +Author: Florian Festi +Date: Thu Feb 4 11:02:25 2010 +0100 + + Clean up comments + +commit b3ae65398e21a4fb4d07c3170b5909acb40d3be0 +Author: Florian Festi +Date: Tue Feb 2 11:25:59 2010 +0100 + + Consider rpmdb growing when doing space calculations + Fix ticket #26 + +commit c3d610926f96da71ed5fa40e5d50a83b5aa8f93b +Author: Florian Festi +Date: Tue Feb 2 11:12:07 2010 +0100 + + Add rpmteHeaderSize + +commit 16b94706e0a2ebed728389d0166a910eea5a2b7c +Author: Richard Hughes +Date: Thu Feb 4 10:25:28 2010 +0000 + + Fix compile when using a linker that defaults to --no-as-needed + +commit 21962ab6142cd1e54f1087a545244de506d9abf1 +Author: Panu Matilainen +Date: Thu Feb 4 17:37:21 2010 +0200 + + Make rpm version available to python + +commit 4e4aec28c544f2884cb76be37d508f376db5cb7c +Author: Panu Matilainen +Date: Thu Feb 4 15:55:16 2010 +0200 + + Handle erased packages wrt disk-space problem reporting (RhBug:561160) + - erased packages in the transaction cause space needs to shrink, which + commit 2222e81e1cf74bbf78acb9969592ab06e2289929 failed to take into + account, causing false disk space errors from unaffected packages + - adjust obneeded and oineeded when the requirements shrink + - new disk space problems can only occur when the requirements grow, + change the pmtsCheckDSIProblems() check to reflect that (although not + strictly necessary) + +commit 251deaeeb7c0c679a33b17527eaee27369a38cdb +Author: Panu Matilainen +Date: Wed Feb 3 17:37:58 2010 +0200 + + Update translations for a change to kill the mntctl() strings there + +commit 37daae03c16635dab108b68ca596aa36fdb063a6 +Author: Panu Matilainen +Date: Wed Feb 3 17:36:45 2010 +0200 + + Kill off couple of dangling lib/fs.c references + +commit 51c96db0464f86901b328899106dd8d4159dd878 +Author: Florian Festi +Date: Wed Feb 3 15:41:58 2010 +0100 + + Kill RPMTAG_FSNAMES and RPMTAG_FSSIZES and everything implementing them + +commit ee35635243f1e282d04066014af6349227cd6498 +Author: Florian Festi +Date: Wed Feb 3 15:42:52 2010 +0100 + + Fix stupid off by one error + +commit 647a809641a15cf0fcbc02ada85adcd493f2dc3b +Author: Florian Festi +Date: Wed Feb 3 11:45:21 2010 +0100 + + Avoid loading information for all filesystems + + This patch is heavily based on the "lazystatfs" patch by Michael Schroeder from + Novell/SUSE. Thanks! + +commit 7617dfec85012a75bf15dec963f2f9a65e8550d9 +Author: Panu Matilainen +Date: Wed Feb 3 12:26:23 2010 +0200 + + brp-python-bytecompile fixes + improvements (RhBug:558997) + - fix incorrect paths (eg /site-packages/filename.py instead of + /usr/lib/pythonX.Y/site-packages/filename.py) ending up in bytecode + - add a "strict" mode where byte-compilation errors will abort the build + - when in non-strict mode, byte-compile everything we can instead of + bailing out at first error + - patch originally from Toshio Kuratomi, slightly changed to preserve + the original order of arguments to avoid unnecessary incompatibilities + +commit 38291e191c9f6096c133c5904a7f2a9462ac52fe +Author: Panu Matilainen +Date: Mon Feb 1 13:22:36 2010 +0200 + + Clean up rpmfcClassify() a bit more + - push variables to the local blocks they're actually needed in, sanitize + +commit a6a9d6386207eda0b5e015d9d6867af67442a1d9 +Author: Panu Matilainen +Date: Mon Feb 1 13:22:26 2010 +0200 + + Single point of exit for rpmfcClassify() + - cleans up returns + avoids a possible memleak from fcav on failure + +commit 79b169bdce0d430db081829a8e05386c443e0521 +Author: Panu Matilainen +Date: Mon Feb 1 13:21:46 2010 +0200 + + Clean up rpmfcHelper() a bit + - push local variables to the scope where actually needed + - use ARGV_t routines for creating av, makes allocations more obvious + +commit fdf26eaba0528c7bc7e1a2d90e6fd31b39662c81 +Author: Panu Matilainen +Date: Mon Feb 1 13:20:26 2010 +0200 + + rpmfc script coloring tweaks + - loosen up the perl token to catch more things, such as + "/usr/bin/perl -w script text" + - remove unnecessary /usr/bin/python token, these get caught by "python " + already + - remove what now should be unnecessary coloring by interpreter name, + both perl and python scripts should get colored by the tokens already + +commit c18d9f962dc4e581a2d1b624ab9c16fa8fd6a2cd +Author: Panu Matilainen +Date: Mon Feb 1 13:19:54 2010 +0200 + + Remove misleading leftover comments from ocaml-dep extractors + - ocaml dependency extraction is fully automated, no need to override + anything (except perhaps options but that's different) + +commit 5864f68c10f5b45ca7c8cb7e1493a5429aa95b78 +Author: Panu Matilainen +Date: Fri Jan 29 16:45:53 2010 +0200 + + Eliminate unnecessary processing on scripts/macros.* + - these used to require processing for rpm config dir location + but not anymore since %{_rpmconfigdir} addition + +commit 95b177fcfb7e8939d2d056d29216273d20c6aed4 +Author: Panu Matilainen +Date: Thu Jan 28 15:15:12 2010 +0200 + + Revert spec tag-macro concatenation changes + - Concatenating to global, non-namespaced tag macros is fundamentally + broken for specs with sub-packages, RhBug:555926 is not fixable with + tag macros tweaks. + Revert back to the old behavior where tag macros are simply "the last line + seen wins." This might not be what one expects in many cases but it + is at least consistent, and changing the behavior in any + way (such as not adding the macros for multiline-items like requires) + breaks existing packages without a good reason. + - Correctly handling the expected %{obsoletes} etc behavior in RhBug:555926 + would require a new mechanism, such as permitting spec to access the + (sub-)package headers. Probably doable, unlikely to be worth the + effort as the issue can be easily avoided by writing the spec differently. + - This reverts commits 3be37d9c78fd13424880fa1fe48f341103a51194 and + e811ef56aa88588e16e0a80d48381a62631f8fc4 + +commit 426a7b6f44c6a0e1633693575c7bb6fcc76cf8a5 +Author: Panu Matilainen +Date: Sat Jan 30 12:12:02 2010 +0200 + + Support multiple parallel python versions in pythondeps.sh + - dont make assumptions about /usr/bin/python, extract the ABI version + from python libdir version + - patch from David Malcolm + +commit 53e3f65b8e2f3b8883a8410c7732062155b87957 +Author: Panu Matilainen +Date: Wed Jan 27 15:06:05 2010 +0200 + + Fix include path of luaext subdir + +commit bd663944e5eca74af7855bbf6488ff7e6082a950 +Author: Panu Matilainen +Date: Wed Jan 27 14:03:10 2010 +0200 + + Add brp-python-hardlink script + - hardlink identical .pyc and .pyo files to same some space + - not enabled by default + - originally from Ville Skyttä for redhat-rpm-config but the functionality + is not specific to Fedora or derivates in any way + +commit 79859ff04fc31a04fb8dfd61020bc5bca4408198 +Author: Panu Matilainen +Date: Wed Jan 27 09:40:15 2010 +0200 + + Pass %{__strip} and %{__objdump} to brp-strip* scripts + - permits easy overriding of the used tools globally + +commit 010b342d6229ae633c84282dbb6b9e5a9d2127b0 +Author: Panu Matilainen +Date: Wed Jan 27 09:26:36 2010 +0200 + + Make sure brp-compress doesn't go interactive in corner cases + - add --force to uncompressing so in corner cases it'll just overwrite + instead of stopping to ask interactively + +commit fa462d69571cfe7321b2a5d8dcafa4db0a4831ae +Author: Ville Skyttä +Date: Sun Jan 24 13:42:46 2010 +0200 + + perl.{req,prov} whitespace, backslash and paren cleanups. + +commit 7c8d054c1b596cd6fdfeec102516ead7b8fb3036 +Author: Ville Skyttä +Date: Sun Jan 24 13:28:44 2010 +0200 + + Do not emit perl(#) dependencies for multiline use/require with comments. + + For example: + + use # comment goes here + Foo::Bar; + +commit cbb703f202f056baa616e3266482f69f5466b96a +Author: Panu Matilainen +Date: Mon Jan 25 12:19:05 2010 +0200 + + Updated Polish translation from Piotr DrÄ…g + +commit d390e2544660e028bf42441c8cec57b4b92c018e +Author: Ville Skyttä +Date: Sat Jan 23 14:50:17 2010 +0200 + + Document --conflicts in rpm(8). + +commit 5f2d9d118744367e607e553181aa1f6300edd766 +Author: Panu Matilainen +Date: Fri Jan 22 14:51:43 2010 +0200 + + Use %{__make} macro instead of "make" + - allows easy overriding of the used make version for %make_install and + %makeinstall + +commit 04ad4b1155ec4b082fbac425a575a0ba05337ab1 +Author: Panu Matilainen +Date: Thu Jan 21 14:14:28 2010 +0200 + + Really fix verification error code to not depend on verbosity (RhBug:557101) + - earlier fix from commit 6649c23cac5823d0c7415df5cfd66e5aac5eebd2 was + broken as it could reset return code to zero after detecting errors + earlier + +commit ce1d2e87157f4a7ebc4f4d6f26024ac597400367 +Author: Panu Matilainen +Date: Thu Jan 21 13:45:34 2010 +0200 + + Fix double-free segfault on url retrieve to read-only media (RhBug:557118) + +commit 3be37d9c78fd13424880fa1fe48f341103a51194 +Author: Jindrich Novy +Date: Wed Jan 20 10:28:40 2010 +0100 + + Concatenate multiline tags in macros only in case of + Requires/Obsoletes/Conflicts and Provides. Preserve + older behaviour for other tags. + +commit e811ef56aa88588e16e0a80d48381a62631f8fc4 +Author: Jindrich Novy +Date: Sat Jan 16 12:43:16 2010 +0100 + + Correctly expand %{obsoletes}, %{requires}, etc. in spec (RhBug:555926) + - tags declared multiple times in spec were simply overwritten so + referencing it via %{} just showed contents of the last one + +commit a9483191a55f43aacb983f8a6d3df2190b1a51dd +Author: Panu Matilainen +Date: Fri Jan 8 12:23:54 2010 +0200 + + Bump version to appear newer than 4.8.0, update translations too + +commit c16cde7a4df73af0ea2a5eda07a65d838833274b +Author: Panu Matilainen +Date: Thu Jan 7 12:04:53 2010 +0200 + + Revert "Always free locally defined macros when they go out of scope" + - the "fix" breaks seemingly legitimate use in fedora font package + macros, possibly some funky interaction with %{lua: } macros or something + - this reverts commit f895acd285366cf58cc3c97b5f188fecbfd782a8. + +commit 458c913e4616d619469bd09e901832348557d5c4 +Author: Panu Matilainen +Date: Wed Jan 6 12:57:48 2010 +0200 + + Add %{__id_u} back, duh + - appears to be rather commonly used afterall + - dont bother with the former id|sed foo though + +commit 05b2d979e8097d648f91c773f2535a1f6013cb79 +Author: Panu Matilainen +Date: Tue Jan 5 16:06:02 2010 +0200 + + Move includes out of system.h to the places that need it + +commit 71b7fb380be6da75bcef1ad68ceea249717158aa +Author: Panu Matilainen +Date: Tue Jan 5 16:01:46 2010 +0200 + + Lose and includes from system.h + - these seem to be already included where needed through rpm's public + header needs + +commit 8fe27d49e175412623045bea8d629690be187d6f +Author: Panu Matilainen +Date: Tue Jan 5 15:33:47 2010 +0200 + + Move include out of system.h to the places that need it + +commit dd58384ede23bcf9b4c13c5031fa93937093b994 +Author: Panu Matilainen +Date: Tue Jan 5 15:25:31 2010 +0200 + + Move include out of system.h to the places that need it + +commit e3638c2c86fd10831136419db2601cb4daf3d3bb +Author: Panu Matilainen +Date: Tue Jan 5 15:17:34 2010 +0200 + + Remove include from system.h into the few places that still need + - most of the places get it through already + +commit dab8a648dbc91b56c4b375cf2218a769856b8e34 +Author: Panu Matilainen +Date: Tue Jan 5 15:09:08 2010 +0200 + + Loose string header compatibility goo + - is required by C standard, we dont support ancient + non-conformant compilers anyway + +commit 0c15e5feb333b88b5a5a525d588601d381df654c +Author: Panu Matilainen +Date: Tue Jan 5 15:04:20 2010 +0200 + + Include as necessary instead of system.h + - also loose the related ancient compatibility goo + +commit 729aac4d7afb44c7c058c32d0fbc4956e029beab +Author: Panu Matilainen +Date: Tue Jan 5 14:37:47 2010 +0200 + + Shove the mount entry include voodoo where sun doesn't ... fs.c + +commit 53ab5419843aab2ddda25bfa96e228af8beeead8 +Author: Panu Matilainen +Date: Tue Jan 5 14:28:47 2010 +0200 + + Remove unnecessary NLS definitions from system.h + - all uses of dgettext() and friends are already protected by + appropriate ifdef's, no need to provide dummy defines here + - setlocale() and are required by C89, C99 and POSIX .. assume + its there and if not, one can disable the whole thing with --disable-nls + +commit 78335417a01caa3c079afe24258efcf4875820ee +Author: Panu Matilainen +Date: Tue Jan 5 14:14:23 2010 +0200 + + Sanitize i18nTag() when NLS disabled + - if NLS is disabled, the whole thing becomes just a plain old headerGet() + +commit 6109d6388e44fc5070b98c9bf2f74df84c3ec700 +Author: Panu Matilainen +Date: Tue Jan 5 13:29:52 2010 +0200 + + Remove libcap stuff out of system.h + - just a few places need, avoid polluting everything with it + - make fsm->fcaps void * to avoid having to deal with fcap_t not defined + +commit 0ff81ace79432c9a3254722f734fa931bb8bff1e +Author: Panu Matilainen +Date: Tue Jan 5 13:09:38 2010 +0200 + + fts.h requires , include it there explicitly + - this has been masked by system.h including which apparently + brought in as a side-effect + - commit 5c084f842ae21d861818a33922b5c77cb17ad8e4 broke compilation + without capability support as also happens to bring + in + +commit c50b63ba025ff425a3406649ec50eba5c9836de9 +Author: Panu Matilainen +Date: Tue Jan 5 12:51:36 2010 +0200 + + Remove unused selinux dummy defines + +commit e10e807ce9b6f252450404e57093aeaa023150a5 +Author: Panu Matilainen +Date: Tue Jan 5 12:36:37 2010 +0200 + + Move include out of system.h to the couple of places that care + - only two real users inside rpm + - remove mcheck foo from rpminject and rpmsort, we're not interested... + +commit 2c6120755c44dc68605e33f6f84aa9896af55d28 +Author: Panu Matilainen +Date: Tue Jan 5 12:35:54 2010 +0200 + + Unconditionally include where needed + - no point conditionalizing what we cant live without + +commit 5085ae9923d5995e5f285dc54f45b38cf3d09698 +Author: Panu Matilainen +Date: Tue Jan 5 12:14:37 2010 +0200 + + Move sys/mman.h include out of system.h to the places that care + - just two places where needed, dont pollute system.h needlessly + - include depending on HAVE_MMAP instead of separately checking for + sys/mman.h, if sys/mman.h doesn't exist or is broken HAVE_MMAP wont be set + +commit f978dc78b4092f3dd05255a5cd3e33d786aba359 +Author: Panu Matilainen +Date: Tue Jan 5 11:52:56 2010 +0200 + + Move libacl.h include out of system.h to the only place that cares + +commit af3c8690d48a6d08eebb530a1d771169d380770d +Author: Panu Matilainen +Date: Tue Jan 5 11:45:28 2010 +0200 + + Eliminate SEEK_FOO and [RWXF]_OK definitions from system.h + - systems not defining these constants are broken beyond our caring + +commit cd174374ffd0ee1cf5bea77905db4dbbc962aeda +Author: Panu Matilainen +Date: Tue Jan 5 11:33:51 2010 +0200 + + Remove unnecessary and broken time.h related configure + system.h checks + - the AC_HEADER_TIME check is unnecessary for any remotely recent systems, + and the HAVE_SYS_TIME_H conditional in system.h is just broken as we + dont even check for header in configure + - dont include from system.h, the time.h and sys/time.h get already + included through our public headers where necessary + +commit 5c084f842ae21d861818a33922b5c77cb17ad8e4 +Author: Panu Matilainen +Date: Tue Jan 5 11:26:14 2010 +0200 + + Unconditionally include where needed instead of system.h + - there's no fallback for missing netdb.h so there's little point + conditionalizing it + - avoid yet more system.h pollution + +commit e9df6383be6b95621250c7258909587098d70999 +Author: Panu Matilainen +Date: Tue Jan 5 10:56:56 2010 +0200 + + Remove pointless & unused configure checks + - vprintf(), vsnprintf() and snprintf() are in C99, no point checking + especially as we dont have fallbacks for them + - no point testing for inline capability as we dont try to work around + +commit 0edc291e50f9b6023a3e8e560d590e1dd2149a7f +Author: Panu Matilainen +Date: Tue Jan 5 10:45:23 2010 +0200 + + Sanitize signature checking formatResult() a bit + - whole lotta unnecessary wankery here (what have I been thinking) + - avoid using the non-standard strndup(), we checked for it in configure + but didn't provide an alternative so checking was just bogus + +commit 423a86361bb2aa558da659a939472477266493ee +Author: Panu Matilainen +Date: Tue Jan 5 10:19:52 2010 +0200 + + Oops, ftok() is really optional + +commit 834551d2469d72d2192d519e00525114e7d7a457 +Author: Panu Matilainen +Date: Mon Jan 4 17:15:26 2010 +0200 + + Clean up poll() vs select() tests + - move the includes out of system.h, not commonly needed + - is conditional as we actually provide a fallback through select(), + but for missing there's no fallback so doesn't make + much sense to test for (and both poll.h and sys/select.h are posix anyway...) + +commit 554f3f0cfb10cc2494f4a232646dc8bdda7ea962 +Author: Panu Matilainen +Date: Mon Jan 4 16:59:39 2010 +0200 + + Remove unused header checks from configure + - maybe these have been used at some point but not anymore... + +commit 1da827724cfd6301c4e23ad1b7db52af3a359ff1 +Author: Panu Matilainen +Date: Mon Jan 4 16:31:10 2010 +0200 + + Eliminate unused id -u tests + - this was used by _fixowner and _fixgroup macros back in the day but they + no longer exist as they're unusable without building as root + +commit 8dfd8f2a829f3b4e47f8850060ce431bd3e84c1d +Author: Panu Matilainen +Date: Mon Jan 4 16:22:56 2010 +0200 + + Use MAP_FAILED instead of hardwired (void *)-1 + +commit 4cb02aa928d3e41f636d0e01356c7a3cb51018ee +Author: Panu Matilainen +Date: Mon Jan 4 16:20:11 2010 +0200 + + Re-enable mmap test in configure & fix the code build again + - this stuff has been disabled for years, lets see what breaks... + +commit 8dd92d661dd50b7af5563242c9ffe2ce418f0f15 +Author: Panu Matilainen +Date: Mon Jan 4 16:10:44 2010 +0200 + + Remove unnecessary stdint check from configure + - a leftover from pre-C99 requirement times + +commit 190d2b4783a1486370e3d7ebe12278dede7e16bf +Author: Panu Matilainen +Date: Mon Jan 4 16:07:11 2010 +0200 + + Remove S_IFSOCK and S_IFLNK kludgery for ancient unixes + - these are specified by POSIX 2001, it's not really rpm's job to + provide them if the system doesn't + +commit 5f0c9a3882d2b482105711c0b74b5f8c1e9b48d5 +Author: Panu Matilainen +Date: Mon Jan 4 15:58:55 2010 +0200 + + Require lchown() and remove ancient broken chown kludgery + - lchown() is POSIX 2001, we dont care about older / nonconformant stuff + +commit 8ca9ce53beaa1e85ad64c70fab8cd99137005ddb +Author: Panu Matilainen +Date: Mon Jan 4 14:58:51 2010 +0200 + + Check for our POSIX 2001 requirements and abort if not found + +commit 3125bac65f75e0e67258df6c5fc55d0752f245af +Author: Panu Matilainen +Date: Mon Jan 4 14:44:26 2010 +0200 + + Lose the hysterical fakefork hack + - we're not particularly interested in AmigaOS quirks from 1996 + +commit 33404070cd4d150874881d7bb3dbbe56d8153f90 +Author: Panu Matilainen +Date: Mon Jan 4 15:27:05 2010 +0200 + + Remove further replacement functions for POSIX 2001 required bits + - getwd(), getcwd(), basename() and realpath() are all POSIX 2001 + defined, we dont care about older stuff + +commit bb803d630c585f5be8ed446da76dadcf717af1d7 +Author: Panu Matilainen +Date: Mon Jan 4 14:21:42 2010 +0200 + + Remove unnecessary setenv() replacement function + - setenv() and unsetenv() are required by POSIX 2001, we dont care about + older systems + +commit 580f9625e166be7771ead94f500e54a5b34d3196 +Author: Panu Matilainen +Date: Mon Jan 4 14:15:20 2010 +0200 + + Remove largely unnecessary putenv() replacement + - only the lua posix extension "uses" this by providing putenv() + to Lua, make it conditional and return error if not supported by + the underlying operating system + +commit 60dc809db136e8bba12a9d45e189248218e304cb +Author: Panu Matilainen +Date: Mon Jan 4 13:46:43 2010 +0200 + + Eliminate myrealloc() replacement function + - realloc(NULL, size) is defined as equal to malloc(size) in C99 and + POSIX 2001, we dont care about anything older than that + +commit 216cf2acb664e8d7f8a47857a942adba43d0fec2 +Author: Panu Matilainen +Date: Mon Jan 4 13:34:39 2010 +0200 + + Remove unneeded strdup() replacement in misc/ + - rpmio's own version is always there and portable, this is not needed + +commit 05dcdf44d03d6a953d1e5aa15de3269a582ff9f2 +Author: Panu Matilainen +Date: Mon Jan 4 13:30:14 2010 +0200 + + Use rpm's own strdup() clone everywhere + +commit f895acd285366cf58cc3c97b5f188fecbfd782a8 +Author: Panu Matilainen +Date: Mon Jan 4 12:20:09 2010 +0200 + + Always free locally defined macros when they go out of scope + - Prior to this, local defines in constructs like %{!?foo: %define foo bar} + would remain defined until a parametrized macro gets called, causing + obscure and confusing errors in specs such as RhBug:551971 and countless + others. Use of %global is now always required for such constructs. + +commit 2c5ea0b1889a86b8ec64e60c36ba42e909ebbdf7 +Author: Panu Matilainen +Date: Mon Jan 4 10:52:22 2010 +0200 + + Remove -98 vintage ifdef'ed dead code + +commit 5b12a3b519b3a4a462ec72a7530f1ee6f117471c +Author: Panu Matilainen +Date: Mon Jan 4 09:12:19 2010 +0200 + + error.c was getting translated too, duh + - should've been in commit 5741334a857a783b033c647223f206a7ca43cef3 + +commit 8209448f2457c880c6fb3a5e97c8080ce41c4323 +Author: Panu Matilainen +Date: Wed Dec 23 15:02:00 2009 +0200 + + Oops, update stubs.c too for the removed replacements + +commit 7c62eb237f38846890a94622b7c7556340d8ae5a +Author: Panu Matilainen +Date: Wed Dec 23 14:52:49 2009 +0200 + + Remove replacements for C99 mandated functions + - rpm requires C99 compiler anyway, no point in carrying these around + +commit 5741334a857a783b033c647223f206a7ca43cef3 +Author: Panu Matilainen +Date: Wed Dec 23 14:36:36 2009 +0200 + + Remove unneeded replacement error/warn functions + +commit eaeadb40acc2592c33aeba912839db3caeb670d2 +Author: Panu Matilainen +Date: Wed Dec 23 14:19:54 2009 +0200 + + Include where needed instead of system.h + - include unconditionally as we dont try to deal with utime() missing + +commit 3786b6640e11482b4573dc0cf1ffabdf5f50cbbc +Author: Panu Matilainen +Date: Wed Dec 23 14:14:35 2009 +0200 + + Move major, minor + makedev portability stuff out of system.h, simplify + - only cpio.c needs, move it there + - if none of the standard headers define these, its not our headache anymore + +commit 2553ca2fe32f848c5a328ff996e627cc73249f18 +Author: Panu Matilainen +Date: Wed Dec 23 14:02:19 2009 +0200 + + Move getopt() portability fiddles out of system.h + - only macro.c needs, no point polluting includes everywhere + +commit 2753a5e93441320a89b936a91a88a2576ae0db9a +Author: Panu Matilainen +Date: Wed Dec 23 13:40:10 2009 +0200 + + Dont include from system.h, dont bother checking for it either + - no much point conditionalizing something we can't live without + - just three places need, no point polluting include space everywhere + +commit 68a5dd58034920ac776b8925cd3825f6981798c8 +Author: Panu Matilainen +Date: Wed Dec 23 13:36:29 2009 +0200 + + Dont bother including , we dont use anything from there + +commit df3e1ce0cdc426d12c17798ce1490f06a6809b74 +Author: Panu Matilainen +Date: Wed Dec 23 13:32:53 2009 +0200 + + Dont bother including , we dont use anything from there + +commit f70b1c76d51dd2e32ff48ab75b1fa4b06d582f4f +Author: Panu Matilainen +Date: Wed Dec 23 13:31:57 2009 +0200 + + Only rpmrc.c cares about utsname.h, move out of system.h + +commit a39dc445fc0ccf03e22189699e4d6256658536f0 +Author: Panu Matilainen +Date: Wed Dec 23 13:15:59 2009 +0200 + + Dont include grp.h from system.h, dont bother checking in configure either + - no much point conditionalizing something we can't live without + - just two places need, no point polluting include space everywhere + +commit 0fbf88d34c6d2ba03ebf011d05ada5244636ca02 +Author: Panu Matilainen +Date: Wed Dec 23 12:58:17 2009 +0200 + + Dont bother checking and including a header we dont use or need + +commit 162fc36e144707cd21e0063bcbbbb3f202bdc870 +Author: Panu Matilainen +Date: Wed Dec 23 12:55:45 2009 +0200 + + Move malloc portability tweaks out of system.h + - only rpmmalloc.c needs, no need to pollute system.h + +commit 4a1e75d1393b9aee7fc8b69a9debdf45aab3053a +Author: Panu Matilainen +Date: Wed Dec 23 12:47:59 2009 +0200 + + We dont use memchr() anywhere + +commit 9f43fee26bc982945926d74d27844e5dbc829d70 +Author: Panu Matilainen +Date: Wed Dec 23 12:41:38 2009 +0200 + + Move getpass() portability tweaks out of system.h + - only signature.c needs, no need to pollute system.h + +commit c47b96630c18143be25cc0a4c42c7f8005d18a5d +Author: Panu Matilainen +Date: Wed Dec 23 12:37:37 2009 +0200 + + Dont bother checking for a header we dont use + +commit 5c31864598a169bbf0609635f162bc089ea3ccda +Author: Panu Matilainen +Date: Wed Dec 23 12:25:32 2009 +0200 + + Dont bother checking for functions we dont use + - some of this stuff was used in 4.4.x but not anymore + - additionally we dont even use getdomainnname(), check for gethostname() + instead + +commit 0de16638aadfc7fc093e69106e7f3a6b54a2ff28 +Author: Panu Matilainen +Date: Wed Dec 23 11:40:55 2009 +0200 + + Use AC_PROG_MKDIR_P for testing mkdir -p capability + - for rpmbuild's purposes MKDIR_P doesn't cut it though, we need to + point it to something that exists on an installed system + +commit 4d328c0b6982a5782bdd9dc4722ccc5119279b57 +Author: Panu Matilainen +Date: Tue Dec 22 15:32:17 2009 +0200 + + Use %{__mkdir_p} macro in build instead of hardwired RPM_MKDIR_P + +commit 67601222815391e7739fa8592d0d0de57f5fb316 +Author: Panu Matilainen +Date: Tue Dec 22 14:55:54 2009 +0200 + + Remove unused h_errno test from configure.ac + +commit 33685ef74eaebabb2b6c609cc0313a540b9ba3ff +Author: Panu Matilainen +Date: Tue Dec 22 14:36:35 2009 +0200 + + Kill off last remaining uses of _constfree() + - practially all the data in rpmfi needs to be treated as const, these + are just a funky special case which point to header memory for the + couple of cases where KEEPHEADER is still used + +commit cef9afbf2ab652e3a8d9f1aa96d517036408d81b +Author: Panu Matilainen +Date: Tue Dec 22 13:25:48 2009 +0200 + + Make header struct really opaque outside header.c + - the low-level stuff in signature.c and package.c need entryInfo_s + and indexEntry_s but not the header itself + - also move the other defines which have no use outside header.c there + +commit a14d06482a667441b47bdf4a6e76e751b99389ee +Author: Panu Matilainen +Date: Tue Dec 22 13:11:00 2009 +0200 + + Remove redundant NULL-check + +commit fe8bbc317752a8ad8f050e93e60bb044078f4c77 +Author: Panu Matilainen +Date: Tue Dec 22 13:01:36 2009 +0200 + + Eliminate unnecessary url parsing from rpmtsRootDir() + - url's in transaction root hasn't been permitted since rpm 4.6.0 days + +commit 7e684c563014d71583b791bb0159e37592ca21b1 +Author: Panu Matilainen +Date: Tue Dec 22 12:34:19 2009 +0200 + + Lose the now empty header_internal.c source + +commit 9c00937f119f67c44103eaf0edddebaf0c709e22 +Author: Panu Matilainen +Date: Tue Dec 22 12:33:16 2009 +0200 + + Move htonll() into header.c and make static, not needed elsewhere + +commit 854f7486149f2c0713b45dd29a650fb3e10a44e8 +Author: Panu Matilainen +Date: Tue Dec 22 12:30:45 2009 +0200 + + Move the legacy compatibility goo into legacy.c + - no functional changes + - headerGetRawEntry() hasn't had a public prototype since rpm 4.0 days + but there are some 3rd party users still (sigh), leave it alone as + exposing the proto now would only cause *more* trouble to the external + users + +commit 220adf02ded4c6b499d10a8d589df73424fc4931 +Author: Panu Matilainen +Date: Tue Dec 22 12:11:42 2009 +0200 + + Move the higher level convenience functions out of header.c + - header.c is big enough as it is, and none of these things needs + header struct internals for anything + - no functional changes, just moving stuff around + +commit bb9878ed3094e14bf2751291e0288f78cb9b113e +Author: Panu Matilainen +Date: Tue Dec 22 12:07:12 2009 +0200 + + Rename hdrNVR.c to more obvious and generic headerutil.c + - no functional changes + - remove it from translation list, there's nothing here to translate... + +commit 1daee9ebd03073696acc9d6f5968f8fa56cb16c5 +Author: Panu Matilainen +Date: Mon Dec 21 15:01:27 2009 +0200 + + Work on tsortinfo instead of ts elements when ordering everywhere + - ...except addRelation() which still needs rpmteTSI() for grabbing + tsort info from elements in rpmal + +commit 0cc336b7a3a3ef6d9ca05490412bbac48e0186d9 +Author: Panu Matilainen +Date: Mon Dec 21 14:13:35 2009 +0200 + + Work on tsortInfo nodes directly when detecting SCC's + - pass the local order info struct to detectSCC() and work on that + instead of ping-ponging to the TSI's through transaction elements + +commit e5ccace4fb25b9bb6537df5f56f542a1676d0760 +Author: Panu Matilainen +Date: Mon Dec 21 12:59:38 2009 +0200 + + Record relations to tsortInfos instead of transaction elements + +commit 78a3f3065e93f742179233e139090b3e2c1114ae +Author: Panu Matilainen +Date: Mon Dec 21 12:30:04 2009 +0200 + + Save pointer to ts element in the tsort info struct + +commit 134c19d9fab97a7c03149893c356e6fa794c0318 +Author: Panu Matilainen +Date: Mon Dec 21 12:18:22 2009 +0200 + + Avoid a bunch of redundant rpmteTSI() calls + +commit 9b12bc126763b4723be4c7c1e44406b2f00f5759 +Author: Panu Matilainen +Date: Mon Dec 21 12:12:29 2009 +0200 + + Eliminate unnecessary depth member from tsortinfo + - its only used for debug log formatting and we can calculate it from + the number of parents in the debug case + +commit 60500572d89f47970d45061c533c4d05ccef3a99 +Author: Panu Matilainen +Date: Mon Dec 21 10:41:03 2009 +0200 + + Eliminate unnecessary npreds member from tsort info + - this is the same as tsi_count + +commit 2268c738f10f40aeb2b7fcf61ae3978785eeca78 +Author: Panu Matilainen +Date: Mon Dec 21 10:37:48 2009 +0200 + + Eliminate unused tree index and degree from ordering calculations + +commit 42127383e2353920ee439cc65c716c84a36274dd +Author: Panu Matilainen +Date: Mon Dec 21 08:17:05 2009 +0200 + + Avoid a few unnecessary rpmteTSI() calls in addRelation() + +commit 88d56552d12c487bff85262bd0d430270619c9e2 +Author: Panu Matilainen +Date: Fri Dec 18 15:28:36 2009 +0200 + + Remove unused ordering related members from rpmts struct + +commit 92884ca771905b4de2c2abc1fc5b144fecff8e55 +Author: Panu Matilainen +Date: Mon Dec 21 09:20:09 2009 +0200 + + Bury ordering structures and their alloc+free inside order.c + - nothing outside order.c needs this stuff, TSI alloc+free routines + have no business being exported + - for now we need to store a pointer to tsortInfo in the elements, + its just an opaque pointer for ping-ponging the data through ts elements + - all allocation + freeing is local to ordering code + +commit ecf45122398c8f081f51b7574ec6cafb6ca2051d +Author: Panu Matilainen +Date: Fri Dec 18 12:20:05 2009 +0200 + + Eliminate the rpmte tsort info manipulation public API + - its not useful outside the ordering internals and API users have no + business messing with it + +commit 6e28e8fdba7260b3a9dd2824ac2b44d1b658c876 +Author: Panu Matilainen +Date: Fri Dec 18 12:16:25 2009 +0200 + + Convert rpmtsOrder() to manipulate the tsort data from tsortInfo directly + +commit a6b21c7bec3e6b44198ff779b13224155c8d0f20 +Author: Panu Matilainen +Date: Fri Dec 18 12:12:44 2009 +0200 + + Convert addRelation() to manipulate the tsort data from tsortInfo directly + +commit 95c14c7a8aa742ffcca47ab47f99e7b4878eb306 +Author: Panu Matilainen +Date: Fri Dec 18 12:10:01 2009 +0200 + + Convert collectTE() to manipulate the tsort data from tsortInfo directly + +commit 72e95c14f41d0a6cbfb7fc340b6cde774c1396bf +Author: Panu Matilainen +Date: Fri Dec 18 12:05:30 2009 +0200 + + Avoid some unnecessary rpmteTSI() calls in collectTE() + - we have q's TSI in local variable already, use it + - also rename tsi -> q_tsi so it's obvious which one we're manipulating + +commit 16726722c3c41e9a9f209b2b0a7ac3a0132d25ee +Author: Panu Matilainen +Date: Fri Dec 18 11:56:04 2009 +0200 + + Move tsort data out of rpmte into, duh, tsortInfo + +commit 4e20d4c49f1d623458a7fdc28214e6729c4e32d4 +Author: Panu Matilainen +Date: Fri Dec 18 09:04:57 2009 +0200 + + Move transaction element iterator into rpmts.c where it logically belongs + - make rpmtsi_s really opaque, move rpmtsi typedef to rpmtypes.h + along with all the other commonly used types + +commit ccc69322626ed649d72248e23a2834a9860099fb +Author: Panu Matilainen +Date: Thu Dec 17 17:33:05 2009 +0200 + + Eliminate unused and unnecessary rpmteBreadth() and rpmteSetBreadth() + +commit 80853dbe99a772cdceb57c4b5f39e270c0319795 +Author: Panu Matilainen +Date: Thu Dec 17 17:28:37 2009 +0200 + + Eliminate unnecessary rpmtsiOc() + - it used to be called from ordering code but now there's precisely + one caller which used it as a fancy way to do increment an integer... rip + +commit 24780b810eb94ee7e444da670eee3557d02ca3d4 +Author: Panu Matilainen +Date: Thu Dec 17 16:47:12 2009 +0200 + + Eliminate unused + unnecessary transaction element iterator mode + +commit 640db40ac593a2d30f556e277164e980508ee9ef +Author: Panu Matilainen +Date: Thu Dec 17 16:17:45 2009 +0200 + + Eliminate unnecessary ts ping-pong inside rpmte + - rpmteNew() and the stuff it calls doesn't need the transaction set + for anything since a long time + - document ts argument to be unused + +commit c2e1c048b3341824f9f0e50f2c9e2d8598891f9e +Author: Panu Matilainen +Date: Thu Dec 17 16:10:37 2009 +0200 + + Fix ts element package file size on large packages + - RPMTAG_SIGSIZE is limited to 4GB, grab RPMTAG_LONGSIGSIZE through + headerGetNumber() grabs the correct tag automatically and simplifies + the code a bit + +commit e5f7b3264cb03d03ceb6e2100c117c7f37e01e9f +Author: Panu Matilainen +Date: Thu Dec 17 15:51:58 2009 +0200 + + Eliminate now unnecessary rpmteFd() + - ...which should've never been exported in the first place + +commit 6193da9cad40dbbc1d7ce974ab9df96986a52183 +Author: Panu Matilainen +Date: Thu Dec 17 15:50:09 2009 +0200 + + Move payload open into rpmte (internal) method + - the transaction element has all the necessary info to do this, + having it in psm just requires exposing otherwise unnecessary methods + +commit 0bac1d421ccdcc719e2e60bcfb4859d0f602510c +Author: Panu Matilainen +Date: Thu Dec 17 11:35:11 2009 +0200 + + Hardwire lead major version to 3 (RhBug:546663) + - besides the logic being backwards wrt intended --nodirtokens linkage, + LSB wants this to be 3 and .. it just makes no difference whatsover + anyway + +commit 79b0ebedc13185f2d85e688d8cd4e007ddea70e1 +Author: Ville Skyttä +Date: Wed Dec 16 23:14:04 2009 +0200 + + Use grep -E and grep -F instead of egrep and fgrep. + + egrep and fgrep are deprecated in GNU grep and "historical" in POSIX. + +commit edac0476a8ea3fbd1d86df2667a1b62d831b2653 +Author: Panu Matilainen +Date: Thu Dec 17 10:38:08 2009 +0200 + + Move python ts element key refcounting back to C-side of things + - it's really the C-side that needs this, doing it in C avoids nasty + surprises when subclassing rpm.ts + - partial revert of commit 92d18d1d7139b37065ea742cfe0e8cee5e9c3500 + +commit 507f21f6bb4bf7029a0bca255cfe4aae3361f358 +Author: Panu Matilainen +Date: Thu Dec 17 08:43:31 2009 +0200 + + Permit unexpanded macros to slip through spec tag sanity checks (RhBug:547997) + - For now, let %{} characters through our valid character set checks + on specs. This isn't right really, but unexpanded, unrelated macros + in spec can now cause failure to parse out buildrequires which would + allow those macros to be expanded. This needs a better fix. + +commit 72f210f56abee3f704ba1a1b32c06e294473f9b9 +Author: Panu Matilainen +Date: Wed Dec 16 10:30:17 2009 +0200 + + Avoid mucking with fsm->rdbuf in fsmRmdirs() and fsmMkdirs() + - we already calculate the string length, just use a variable local array + +commit ee8d3dfa923536bbd559fefb3d3c137a16dcf764 +Author: Panu Matilainen +Date: Wed Dec 16 10:09:26 2009 +0200 + + Remove now unnecessary const-avoidance construct + +commit b22c266003bdd4dd4067ea6ec77bec5cee24d12b +Author: Panu Matilainen +Date: Wed Dec 16 09:52:59 2009 +0200 + + Const-correctness on fsmRmdirs() and fsmMkdirs() + - both functions need to copy the data anyway as they modify, just use + a helper variable to cleanly avoid the const strings from iterator + +commit 0d4a9d13cb8e600f193e9731744d0bdbff8a1956 +Author: Panu Matilainen +Date: Wed Dec 16 09:43:55 2009 +0200 + + Remove bogus const from fsm [o]path members and use of _constfree() + - in reality the paths point to allocated memory at all times + +commit 94d7b17c9e04c2e5ff887af916d66b7ee5194864 +Author: Panu Matilainen +Date: Wed Dec 16 09:25:55 2009 +0200 + + Simplify fsmFsPath() + +commit fe1de3869e2a13bbefa020939e5ceffbb67e616f +Author: Panu Matilainen +Date: Tue Dec 15 14:43:40 2009 +0200 + + Kill of ancient unused kludgery over buggy packages + +commit 86cfa3de9cb00e9559da3ceea638d690bcccaf75 +Author: Panu Matilainen +Date: Tue Dec 15 14:42:12 2009 +0200 + + Kill off stillborn fsm threading stuff + +commit 058aec9bdc3145d25faed62b89ae532aa0cd87d5 +Author: Panu Matilainen +Date: Tue Dec 15 14:39:57 2009 +0200 + + Kill off stillborn "not yet" code from 2001 + +commit 91eb212654b80d00202432da36e9746567d4f30b +Author: Panu Matilainen +Date: Mon Dec 14 15:23:28 2009 +0200 + + Eliminate transaction disk space checking functions from the API + - The DSI stuff runs from deep inside rpmtsRun() with no chance for + API users to do anything with it. Bury into transaction.c and + make static to let us change the way it works without API constraints... + +commit 17eb18d0b1b259dbeb269148e6571ae49df9259f +Author: Panu Matilainen +Date: Wed Dec 9 15:11:39 2009 +0200 + + Fix memleak in python ts.hdrFromFdno() + - the python object holds reference to header here, decref the header + so it gets freed eventually + +commit 60b66dc7d9c728d6b779d3d772ac36b9134a2f56 +Author: Panu Matilainen +Date: Wed Dec 9 14:42:03 2009 +0200 + + Fix a few list-related memleaks in python bindings + - PyList_Append() bumps the object reference count, callers need to + explicitly decref them... oops :) + +commit a250601a8e7b31cba2565cfaf82dbfc3f6be7338 +Author: Panu Matilainen +Date: Wed Dec 9 11:17:04 2009 +0200 + + Kick out one remaining sqlite reference (in the translations) + +commit 1ee991f2a5b83a0d84b80c0d7e7d38877df904e6 +Author: Florian Festi +Date: Wed Dec 9 09:50:58 2009 +0100 + + Remove sqlite hacks from rpmdb.c + +commit 50d1b52edb202fbf9329cea0ecec285c0a73414f +Author: Panu Matilainen +Date: Tue Dec 8 16:22:42 2009 +0200 + + Avoid exposing libmagic dependency in public headers + +commit d6bda5a1665d8d04526aea299781570ee7486b2e +Author: Panu Matilainen +Date: Tue Dec 8 15:58:51 2009 +0200 + + Avoid noise from python bytecompile on non-python pkgs (RhBug:539635) + - If a pattern doesn't match, we'd prefer an empty list instead of + unexpanded garbage thank you... nullglob shell option is just what the + doctor ordered but unfortunately its a bash-specific thing. Otoh there + are number of other bash-specific scripts in rpm so probably not + much of an issue... + +commit f671b529d1c45b1d1b39003ad4e2a2b646c9fa98 +Author: Florian Festi +Date: Thu Dec 3 13:56:00 2009 +0100 + + Removed obsolete "db3" entry in dbi_config_default + +commit e2c217b4b76118e6dab9f8dfb3284bb4ddbe2b3e +Author: Florian Festi +Date: Thu Dec 3 13:50:37 2009 +0100 + + Remove support for sqlite based rpm database + Also remove abstraction layer between rpmdb.h and the back end + in lib/backend/ + +commit 139c031d2c54fe9e692765dae05da89d7ecfa8cc +Author: Panu Matilainen +Date: Mon Dec 7 13:51:48 2009 +0200 + + Preparing for 4.8.0-beta1 + +commit 7a2395941e3eb81740f6b7b5d417991ef9b42fa4 +Author: Panu Matilainen +Date: Mon Dec 7 13:35:53 2009 +0200 + + Bump soname for all our libraries + - while the "really public" API of librpmio has only been enhanced, + librpm and librpmbuild use some supposedly internal bits which *have* + changed considerably, so just to prevent anybody thinking they can + combine librpmio from rpm 4.7 and librpm from this... + - librpmbuild hasn't seen much real change but some (unfortunately) + exposed struct members have changed so... + - librpm is mostly compatible but as rpmal has become internal API, + we need to bump (annoyingly, as nothing actually uses rpmal ... sigh) + +commit 75c171f20891e58f1f14f37bba8e3e13b47bb783 +Author: Panu Matilainen +Date: Mon Dec 7 12:38:39 2009 +0200 + + ts.check() is supposed to return empty list when no problems + +commit 9b94ae3dbc6d98f5c1929829735ff918aab5ef4d +Author: Panu Matilainen +Date: Mon Dec 7 11:32:51 2009 +0200 + + Disable the entire rpm.td type for now + - need to figure out saner semantics & stuff... + +commit f859d8aa7742eae7b5d48409a26086c6f5d80343 +Author: Panu Matilainen +Date: Mon Dec 7 11:21:14 2009 +0200 + + Make python header iterator return keys, not values + - this is how python built-in dictionary works, be consistent with that + - also avoids having to decide what to do with rpm.td type right now... + +commit 1567738feddc9202308bc6e0be9c60d3adf5d56f +Author: Panu Matilainen +Date: Mon Dec 7 09:12:44 2009 +0200 + + Always return malloced data from i18n extensions for consistency + +commit 105518cf5766bba6647e26b96e31b5a2d8ba18c4 +Author: Panu Matilainen +Date: Sat Dec 5 11:05:39 2009 +0200 + + Bump up the python version requirement to match reality + - Python >= 2.6 is known to work, 2.5 might be possible with __future__ + imports but until somebody tests it... + +commit 46d1ba04483af09590ed070186a1be10b57c5977 +Author: Panu Matilainen +Date: Wed Dec 2 15:30:27 2009 +0200 + + Fix the posix chown test for selinux enabled systems (RhBug:543035) + - on selinux enabled systems, 'ls -l' mode string is longer than + expected here, just trim the ls output to our expected length + +commit 1adb46a9f864a327c93496ee0f8a149bd1def175 +Author: Panu Matilainen +Date: Wed Dec 2 13:22:11 2009 +0200 + + Back out overly strict file type check on %ghost files + - we currently only support creating regular files for %ghosts which + dont exist in the buildroot, but for files that do exist in the buildroot + there's no reason to place such limits (eg its perfectly ok to have + symlinks marked as %ghosts) + +commit 480095ab2a319d29965ced868ecc8253b1ba7420 +Author: Panu Matilainen +Date: Fri Nov 27 15:57:44 2009 +0200 + + Use AS_HELP_STRING() for configure option output + +commit f0f94cc9df146a016f1d3c3b2d508b3e7336efea +Author: Panu Matilainen +Date: Fri Nov 27 15:12:52 2009 +0200 + + Remove pointless message translation from check-buildroot + - these scripts aren't processed for translation and unlikely to ever be... + - fixes the remaining complaint from ticket #62 + +commit 45e4cca1ea3ed5073a54431dbf505e1e252fd678 +Author: Panu Matilainen +Date: Fri Nov 27 15:10:57 2009 +0200 + + Remove ancient broken scripts from the repository + - also eliminates one more "bashism" complaint of ticket #62 + +commit 443d4f4d725a29d405b8c52e3a6ffbc1f514bd27 +Author: Panu Matilainen +Date: Fri Nov 27 14:55:12 2009 +0200 + + Fiddling with ulimit settings does not belong to dep extractor scripts + - fixes one of the bashisms in ticket #62 + +commit 8440195af4f1d578fa3c631df8ff186c6168e368 +Author: Panu Matilainen +Date: Fri Nov 27 09:28:11 2009 +0200 + + Correctly pass optional tag argument from hdr.dsFromHeader() (ticket #108) + +commit 8ba98b21789e6e3525cf2fd47a3a473aa17a0f9d +Author: Panu Matilainen +Date: Fri Nov 27 09:15:56 2009 +0200 + + Dont try to pass anything to rpm.fi() from hdr.fiFromHeader() + - hdr.fiFromHeader() is just a deprecated backwards compatibility dummy + and doesn't need to pass anything as there were no meaningful + parameters in older versions + +commit cfcd1f9bd98d5d0fc46a84931984efec3b9d47e2 +Author: Panu Matilainen +Date: Thu Nov 26 10:22:41 2009 +0200 + + Dont fail build on unrecognized non-executable files (ticket #105) + - Generally only executable files are critical for dependency extraction, + whereas oddball application data files can cause unnecessary build + failure due to libmagic misdetections etc, so just let non-executables + pass with a warning and mark them as unknown data + +commit ae74744e65e4e3e83f51cfae5418e8d7e12b9857 +Author: Panu Matilainen +Date: Thu Nov 26 09:46:48 2009 +0200 + + Just use autoreconf in autogen.sh (ticket #109) + - instead of doing stuff by "hand" and getting it wrong, let autoreconf + worry about getting it right (if nothing else, we can then blame + autoreconf instead of ourselves ;) + +commit 2b41860984f0c4ebba5ebce93a18c9c0ca5e1065 +Author: Panu Matilainen +Date: Wed Nov 25 16:42:43 2009 +0200 + + Fix signature password checking result on abnormal conditions (RhBug:496754) + - Execve() failure wasn't returning an error code, causing rpm to + think the password was ok when we couldn't even try verifying + - Stricter return code checking from the password checking child: + the password can only be ok if the child exits with WIFEXITED() *and* + WIFEXITCODE() of 0. Also WIFEXITCODE() should only be called if + WIFEXITED() returns true. + +commit 98213fc4192c7af07037a0f3e9cce9e3b8509c02 +Author: Panu Matilainen +Date: Wed Nov 25 15:07:17 2009 +0200 + + We can't handle OpenPGP subkeys or secret keys, so dont even try + - parsing subkeys ends up overwriting data in the main key, causing + bogus signature checking failures + - this is the final missing piece of RhBug:436812, short of adding + proper support for subkeys (maybe someday...) + +commit ded0c513836cee2f237edc2e28ee8aec261fd675 +Author: Panu Matilainen +Date: Tue Nov 24 16:57:46 2009 +0200 + + Dont blow up on headers without requireflags in rpmdsNew() + +commit 649fc271d59eacbeeaacd3c24625ee95c884f0b0 +Author: Panu Matilainen +Date: Tue Nov 24 14:36:03 2009 +0200 + + Nuke leftover debug junk + +commit 39e15e7a678dfcfc0c03449b2ebc327569933f31 +Author: Panu Matilainen +Date: Tue Nov 24 14:27:49 2009 +0200 + + Support constructing header data from python + - no proper i18n string support yet, just the basic types + - basic data type validation only, no overflow checking for integer types + - for lists, validate all items before trying to insert anything + - duplicate tag creation not permitted + - appending not permitted, only assignment (and deletion already) + - there are probably bugs... + - watch out for librpm bugs when passed incomplete headers, ugh + +commit 897f06b9100437e6074ec5a816a83779662ddb4b +Author: Panu Matilainen +Date: Tue Nov 24 14:02:52 2009 +0200 + + Disable rpm.td type for now + - its not that clear that exporting the td type is really useful + (certainly not in its current form), avoid exporting an interface we + might not want to support + +commit 15c806b8ae53753481d09c0e980d668b44817b95 +Author: Panu Matilainen +Date: Mon Nov 23 16:45:09 2009 +0200 + + Fix hdrContains() return value on error + +commit c225bb88cbe33d97ab9d7de20c4d6597b5394cc8 +Author: Panu Matilainen +Date: Mon Nov 23 15:12:04 2009 +0200 + + Remove bogus rpmpopt.pot file (ticket #77) + - this is supposed to automatically generated on update-po time from + toplevel rpmpopt file and merged into rpm.pot but has been broken for + a long long time and also the $ translation marking has been deprecated + for security reasons + +commit 1e2f382ff7912f743d4c18d85386506048d0d29d +Author: Panu Matilainen +Date: Sat Nov 21 11:31:50 2009 +0200 + + Remove hdr.has_key() method, support 'key in h' style instead + - Python 3 removed has_key() from dictionaries, as the 'in' way is the + way of the future support that from the start (has_key() is not in + any released rpm version so its safe to remove) + +commit 6711bcc6b948f8f60373af42e232e160c8cb89ed +Author: Panu Matilainen +Date: Sat Nov 21 11:07:29 2009 +0200 + + Remove unnecessary hdr.instance() method + - this is available through tag extension now, no point having a + separate method for it + +commit 6834d35460466992cfe43ce908443fb61f49b94c +Author: Panu Matilainen +Date: Sat Nov 21 10:55:24 2009 +0200 + + Typos in exception messages + +commit 5e26a8be7193a90612d800eadba46b417c1d4944 +Author: Panu Matilainen +Date: Fri Nov 20 16:00:06 2009 +0200 + + Error out early trying to install on readonly fs (ticket #99, RhBug:464750) + - simply make readonly filesystems appear as full, preventing install + early instead of failing with cpio errors in middle of transaction + +commit 58bece68422ba6cf20a1fe4ac4816ecd811e384d +Author: Panu Matilainen +Date: Fri Nov 20 11:49:05 2009 +0200 + + Convert French man page to Unix line-endings + +commit 50773c56482f3cd7d48cbcad477d1a48a0395c66 +Author: Panu Matilainen +Date: Fri Nov 20 11:12:39 2009 +0200 + + Fix build with binutils-gold (ticket #107) + - patch from Michal ÄŒihaÅ™ + +commit d0eaa7c0485f670371fc6a99bf27021fdaa467e4 +Author: Panu Matilainen +Date: Fri Nov 20 10:32:47 2009 +0200 + + Add RPMTAG_EPOCHNUM tag extension + - return RPMTAG_EPOCH but convert non-existent epoch to 0, as rpm internals + treat it + +commit 71eeeb8d5e18ac6f6b349b09fd22fe2c650f8beb +Author: Panu Matilainen +Date: Thu Nov 19 10:51:23 2009 +0200 + + Add spec package type with access to headers to python rpmb module + - permits python to access parsed headers from spec files + - ticket #14, RhBug:462726 + +commit 4beda5ab2676d6b007034b6f9906724c813fce68 +Author: Panu Matilainen +Date: Thu Nov 19 10:16:15 2009 +0200 + + Permit header object generation from PyCObjects + - needed for generating header objects from other extension modules & + might be handy in some other cases too + - patently type-unsafe but as long as python doesn't provide a better + way, not really our headache + +commit 2ba9153bfa8abd642c4529b454f65ed807f0afb6 +Author: Panu Matilainen +Date: Wed Nov 18 17:41:39 2009 +0200 + + Lose the silly specFromSpec() + - its our own private data structure we're accessing here, no need + for extra wrappers and nothing outside spec-py.c needs this + +commit 0e77aba7fb9f3e5cd875acc124ea4de2dea3c247 +Author: Panu Matilainen +Date: Wed Nov 18 17:28:13 2009 +0200 + + Turn current python spec methods into read-only attributes via getseters + - incompatible, but nobody is really using the spec bindings for + anything as there's been very little you've been able do with them + - having the stuff accessible as getseters means we dont need 50 different + fooSet() methods if/when we permit modifying these from python + +commit ecb0f7df9a273f89706a6a8b3129dfcae29536d5 +Author: Panu Matilainen +Date: Wed Nov 18 17:16:45 2009 +0200 + + Sanitize python spec.sources() + - spec without sources is perfectly valid, just return an empty list + instead of invalid NULL return without exception set and simplify + +commit 8f056c7849944abdf2e5ee86e8668bc6c61834ca +Author: Panu Matilainen +Date: Wed Nov 18 17:03:32 2009 +0200 + + Put a bit of sanity into python spec methods + - prep, build etc missing from spec are not errors + - instead of returning NULLs (with no exception set!), just return None + for anything that doesn't exist + - dont bother with NULL checks, if s->spec is NULL then something else + has screwed up big time + +commit 698c141fe3bfbc520a825e993a01a082cf80f69b +Author: Panu Matilainen +Date: Wed Nov 18 12:21:41 2009 +0200 + + Oops, tp_dealloc doesn't return anything + +commit c6a2f7f3f293c0947ea015cea40618c78fc93de9 +Author: Panu Matilainen +Date: Wed Nov 18 11:33:57 2009 +0200 + + Fix rpmProblem reference counting in python bindings + +commit 67961448c192a932868efb6ee652bd228597d4dc +Author: Panu Matilainen +Date: Wed Nov 18 11:22:55 2009 +0200 + + Declare a few python functions only taking one argument as such + +commit f6b5a7f622c0b34fc261cc0c27b596730d9597dd +Author: Panu Matilainen +Date: Wed Nov 18 11:17:51 2009 +0200 + + Rip python checkSignals() wtf'ery + - since the function takes no arguments, declare it as such... + +commit 841e0ad4ee360bf43acb1adb2b86977d7b74abe1 +Author: Panu Matilainen +Date: Wed Nov 18 10:54:58 2009 +0200 + + Python archscore() only ever takes one argument, simplify + +commit 66dd52d94c34b51eba9f0ef48bbe4df0e1b174ad +Author: Panu Matilainen +Date: Wed Nov 18 10:41:26 2009 +0200 + + Make python ts.problems() return a python list, not rpm.ps object + - rpm.ps object only supports iteration and subscript (with wonderfully + wacko semantics), returning a regular list serves us better + - rip the now useless rpm.ps object type + +commit a237f1eee0b495691c2a9565ad2b0f5140c00298 +Author: Panu Matilainen +Date: Wed Nov 18 09:40:30 2009 +0200 + + Remove unused psFromPs() + +commit a2a4599fc6947d30c5ecf42420528a91d1975093 +Author: Panu Matilainen +Date: Wed Nov 18 09:35:41 2009 +0200 + + Eliminate broken rpmps append() method from python bindings (RhBug:538218) + - The code to insert new problems has been using invalid conversion code + causing crashes since 2004 and nobody noticed, safe to say this is an + unused interface. Additionally the method argument flags were wrong, it + was declared as METH_VARARGS but actually expected METH_O semantics. RIP. + +commit 2e76d0e6c83ca7bd08651c47fd1aee40f89333c4 +Author: Panu Matilainen +Date: Fri Oct 30 13:31:01 2009 +0200 + + Add in-memory hash for caching rpmdb dependency lookups + - worst case behavior for uncached dependency lookups can be disastrous, + eg > 35s vs < 1s on my laptop for trying to remove /bin/sh provider + - we only bother caching rpmdb lookups, the other cases plenty fast already + - using in-memory cache avoids nasty in vs out of chroot issues with + temporary db files, which otherwise were about as fast + +commit 77c25db03a55113a77d6a56c422615f9cd4ec435 +Author: Panu Matilainen +Date: Fri Oct 30 09:37:36 2009 +0200 + + Document our new format extensions + +commit 0dcf65119a0f7f96e460eaf7ef6aa970e9ee2f14 +Author: Panu Matilainen +Date: Fri Oct 30 09:33:26 2009 +0200 + + Add file verifyflags format extension + +commit 491cf5e3442af05b79b33e346f60e565f343513f +Author: Panu Matilainen +Date: Fri Oct 30 09:15:36 2009 +0200 + + Add file state format extension + +commit 18cc1d23120c5eadad251f0edde1697ed418a3e1 +Author: Panu Matilainen +Date: Fri Oct 30 09:13:08 2009 +0200 + + Update rpmtd formats comments to match reality + - we dont require exact int32 etc types, any numeric type works + +commit 7ae58177d051f5989974b58930980371388b9d6d +Author: David Malcolm +Date: Thu Oct 15 15:14:58 2009 -0400 + + Convert relative imports within rpm package to absolute imports + +commit 91a83f5e76790e5248780fa604ad2ac0aa3a68a1 +Author: Panu Matilainen +Date: Thu Oct 29 13:54:47 2009 +0200 + + Permit any file-like object in rpm.setLogFile() + - using PyObject_AsFileDescriptor() does away with another Python 3 + incompatibility and makes it more flexible.. but also more murky + as rpmlogSetFile() only accepts FILE * streams... + +commit 121b69b39529c2b5b9557eba96fd551e5295ccbd +Author: Panu Matilainen +Date: Thu Oct 29 12:56:18 2009 +0200 + + Update module initialization to work with both Python 2.x and 3.x + - split common initialization tasks to separate functions, so that only the + details of initializing a python module object differ + - patch from David Malcolm + +commit 16f9d7f4dcce8edc6458cd94ee0c7afda2c5dece +Author: Panu Matilainen +Date: Wed Oct 28 16:35:32 2009 +0200 + + Remove unnecessary (cmpfunc) casts from our type objects + - cmpfunc is no more in Python 3 and casting NULL to anything makes + little sense anyhow + +commit 70bebfdd7eab41d7e0aecf569692aac113958a3a +Author: Panu Matilainen +Date: Wed Oct 28 16:27:15 2009 +0200 + + Eliminate ambiguous tp_compare and tp_richcompare from rpm.ds + - both comparison types are highly ambiguous, eg what on earth does + "foo provides bar = 1" < "bar requires foo > 2" mean? + - if straight ds1.evr vs ds2.evr comparison is needed, we'll be better + off supporting that through rpm.versionCompare() which has clear semantics + - avoids another Python 3 incompatibility too + +commit 46b2df7c577b3f22a167bc46e655c9c008133a66 +Author: Panu Matilainen +Date: Wed Oct 28 16:25:46 2009 +0200 + + Add ds.Compare() as a thin wrapper over rpmdsCompare() + +commit 1ce136261da3bd39ee10e31ed02d11a37da19126 +Author: Panu Matilainen +Date: Wed Oct 28 16:24:16 2009 +0200 + + Type-check rpm.ds() comparison/search arguments everywhere + - also make them only accept one argument, simplifying arg parsing + +commit 615c45ec34dc5c5c00aa50854524cd428e70de50 +Author: Panu Matilainen +Date: Wed Oct 28 16:17:21 2009 +0200 + + Rip out stillborn code + +commit 3df9dc71118b498694437f083bb174d774cc6337 +Author: Panu Matilainen +Date: Wed Oct 28 15:22:39 2009 +0200 + + Eliminate the ambigious tp_compare from rpm.hdr + - Avoids another Python 3 incompatibility as it doesn't have tp_compare + anymore + - We could add a compatible tp_richcompare, but comparisons like + 'if h1 < h2: do foo' are highly ambiguous, callers are better of + using explicit rpm.versinCompare(h1, h2) instead + +commit a5e123bc3e07fa6cc3fad13bc7f8a471ecb17d9b +Author: Panu Matilainen +Date: Wed Oct 28 15:55:35 2009 +0200 + + Use PyObject_AsFileDescriptor() instead of object type comparison + - this permits any file-like object implementing .fileno() method + (including rpm.fd) to be dup'ed, not just PyFile subtypes + - this also avoids yet another incompatibility with Python 3 which doesn't + have PyFile_Check() and PyFile_AsFile() at all + +commit 590914c32c1d514d1a4e5c2244e1e38548a2e87d +Author: Panu Matilainen +Date: Wed Oct 28 10:05:39 2009 +0200 + + Dont bother calculating hardlink counts when the value is not used + - speeds up non-verbose --list queries by some ~50% + +commit 5463570061a7ca9ed947885b516c2551778b636f +Author: Panu Matilainen +Date: Tue Oct 27 16:07:43 2009 +0200 + + Support multiple python versions in brp-python-bytecompile (RhBug:53117) + - For *.py files in python library path, use matching python interpreter + version for compiling, this is especially needed for Python 3 which + is very different from Python 2 code. And even if the code compiled + with a wrong version, it would be recompiled at run-time when invoked + with the intended python version, causing verification errors etc. + - For *.py files outside the library path, use "system python" which + might not be always correct but we dont really know any better. + - Patch from David Malcolm + +commit 714ebe92a1052e67967221e73ac8b788140e684c +Author: Panu Matilainen +Date: Tue Oct 27 15:15:20 2009 +0200 + + Argh, typo in previous commit + +commit 376b1bd8b79392a3d8a019c0409c05c13b55f2b2 +Author: Panu Matilainen +Date: Tue Oct 27 14:52:08 2009 +0200 + + Remove explicit Py_TPFLAGS_HAVE_RICHCOMPARE from ds type flags + - HAVE_RICHCOMPARE is included in Py_TPFLAGS_DEFAULT since at least + Python 2.3 which is as far back as we care, no need to explicitly + set it. Eliminating the unnecessary flag removes another Python 3 + compatibility issue as the flag is gone there. + +commit 2222e81e1cf74bbf78acb9969592ab06e2289929 +Author: Panu Matilainen +Date: Tue Oct 27 10:57:35 2009 +0200 + + Make disk space problem reporting slightly saner (RhBug:517418) + - Only report disk space/inode issues for packages that are affected + instead of piling up all the problems in all filesystems on all remaining + packages + - The messages are still ambiguous at best, need to figure out something + better one of these days... + +commit dcba14d575eb6396075e3976b898c98ddd17874f +Author: Panu Matilainen +Date: Tue Oct 27 10:44:04 2009 +0200 + + Let Python decide the "native" string type for tag names + - Py_BuildValue("s", ...) returns unicode objects in Python 3, string + objects in Python 2, this is what we want here + +commit 490d79b976c2b52d838f72f553a20af0dcf81c1d +Author: Panu Matilainen +Date: Fri Oct 23 22:10:44 2009 +0300 + + Permit unicode as ts.dbMatch() key argument + +commit d728e466d2055432b874b4777b3ca07ef3260518 +Author: Panu Matilainen +Date: Fri Oct 23 21:25:08 2009 +0300 + + Allow unicode objects as tag name everywhere + +commit e13a476fc94509cb6f3d159e6135b48fdafcdf78 +Author: Panu Matilainen +Date: Fri Oct 23 21:07:10 2009 +0300 + + Add conversion function for handling python unicode -> string issues + - In Python 3 everything is unicode, forcing each and every caller to + convert manually is a bit much. + +commit b457e2200bd41b0c7420e32d5c9ed5a10b082922 +Author: Panu Matilainen +Date: Thu Oct 22 10:37:49 2009 +0300 + + Make --httpproxy and friends work again (RhBug:529214) + - macro fiddling to pass the macros set by --httpproxy etc popt aliases + to the url helper + - ftp proxy and http proxy control the same thing (http proxy) now to + keep things simple + - while at it, add %__urlhelper_localopts for local customization needs + without having to override the entire __urlhelperopts macro + +commit 4047397da1875b1e5b561e039ad6cd7d99206aa1 +Author: Panu Matilainen +Date: Wed Oct 21 13:21:01 2009 +0300 + + On Python 3, use macros to alias all usage of PyInt_ to PyLong_ equivalents + - Python 3 unified PyInt with PyLong, the former no longer exists + - Based on a patch by David Malcolm + +commit 1866fc41c8fdf5a82705cee7f1043d5fb634c3be +Author: Panu Matilainen +Date: Wed Oct 21 13:15:44 2009 +0300 + + Replace PyString usage with PyBytes everywhere + - In Python 2.6 PyBytes is just an alias for PyString, Python 3.0 + removed PyString entirely + - Add compatibility defines for Python < 2.6 + - Based on David Malcolm's Python 3.x efforts + +commit 33c569ce6fd827ba039e36ffe0a77b0643d0ac70 +Author: Panu Matilainen +Date: Wed Oct 21 12:47:35 2009 +0300 + + Ensure RPMSENSE_RPMLIB bit is always set on rpmlib() requires in rpmds flags + - some packages in the wild have rpmlib() requires without the flag set + due to older rpm not always setting it (for one, rpmdeps as external + dependency generator could cause such deps), causing bogus dependency + failures on install + - only fix up dependencies coming from a header, rpmdsSingle() correctness + is up to the caller + +commit 9fbaedd1ac655d978883d68a1f7d34df0d703363 +Author: Panu Matilainen +Date: Wed Oct 21 12:23:50 2009 +0300 + + Ensure rpmlib() dependency sanity on build + - only requires on rpmlib(foo) are allowed + - make sure any rpmlib() foo dependencies have RPMSENSE_RPMLIB bit set, + rpmdeps as external dependency generator can create rpmlib() dependencies + without the bit set, and also any manual rpmlib() deps wont have it + +commit b6cfb4399ca4c5f2335c9351a7599ccfdf28add6 +Author: Panu Matilainen +Date: Wed Oct 21 12:22:33 2009 +0300 + + Fix memory leaks on error exit from parseRCPOT() + +commit cab7c23976fa83a57fcb63694748e0e40ca9fda4 +Author: Panu Matilainen +Date: Mon Oct 19 17:21:31 2009 +0300 + + Remove leftovers from python header files + - rpmSingleHeaderFromFD() and hdrLoad() are now implemented in python, + declarations accidentally left here + - make rpmMergeHeaders() static, nothing outside header-py.c needs + +commit 72165c7717e26050c6785f8b103f69baaa06dd40 +Author: David Malcolm +Date: Thu Oct 15 15:14:59 2009 -0400 + + Convert all usage of two-expression exception raising to modern syntax + + Replace all usage of the two-expression + raise foo, 'bar' + syntax with the long-equivalent + raise foo('bar') + as the old syntax was removed in Python 3 (PEP 3109), and the new syntax + is supported in Python 2 + +commit a2999caaf4fb6a1d121b71d009d15a7a651d2bf0 +Author: Panu Matilainen +Date: Mon Oct 19 11:06:07 2009 +0300 + + PyVarObject_HEAD_INIT() compatibility macro for Python < 2.6 + +commit 4b8e0ebde64321a8dbcbdce9f44557185fde1719 +Author: David Malcolm +Date: Thu Oct 15 15:14:57 2009 -0400 + + Generalize type object initialization to work with both Python 2.* and Python 3.* + + The layout of PyVarObject changed between python 2 and python 3, and this leads + to the existing code for all of the various PyTypeObject initializers failing to + compile with python 3 + + Change the way we initialize these structs to use PyVarObject_HEAD_INIT directly, + rather than merely PyObject_HEAD_INIT, so that it compiles cleanly with both major + versions of Python + +commit 2f5a5c44cf5cd5406b153ba9ba37a7a5a4f4c6db +Author: Panu Matilainen +Date: Mon Oct 19 10:57:13 2009 +0300 + + Py_TYPE() compatibility macro for Python < 2.6 + +commit 7b51c4a1eb8f14207f9a8d3e0be514a41c0e2197 +Author: David Malcolm +Date: Thu Oct 15 15:14:56 2009 -0400 + + Generalize access to ob_type so that they work with both Python 2.* and Python 3.* + + Python 2's various object structs use macros to implement common fields at the top of each + struct. + + Python 3's objects instead embed a PyObject struct as the first member within the more refined + object structs. + + Use the Py_TYPE() macro when accessing ob_type in order to encapsulate this difference. + +commit 63175d4d31469816c575ddb4de9698fb5c053536 +Author: Panu Matilainen +Date: Mon Oct 19 10:30:48 2009 +0300 + + Avoid using python's print for Python 3.x compatibility + - print chanced from statement to a function in python 3, for our + purposes sys.stdout.write() is sufficient and avoids dealing with + the incompatibilities between Python 2.x and 3.x + - suggested by David Malcolm / Ville Skyttä + +commit 9707b5478bbad7251810247b2383f91b5bbabc16 +Author: Panu Matilainen +Date: Sat Oct 17 12:15:29 2009 +0300 + + Unbreak lzdio/xzdio + - revert part of b0d1038190be5cb4b45e2c2c7c84ee7022164ba2 which broke + the split-personality lzdio/xzdio + +commit 98cd707af0f284eeb4cf5864fbb14445d529bf31 +Author: Panu Matilainen +Date: Sat Oct 17 11:25:53 2009 +0300 + + Skip posttrans scripts of failed transaction elements + +commit f677a821adf7d18f5e9a9b053d805052a1bf5a39 +Author: Panu Matilainen +Date: Fri Oct 16 13:36:39 2009 +0300 + + Since we really want a FILE* then get one in the first place + - this is visible in the librpmbuild exported goo, rename the member + to force build-breakage on the poor souls trying to use librpmbuild API + +commit b0d1038190be5cb4b45e2c2c7c84ee7022164ba2 +Author: Panu Matilainen +Date: Thu Oct 15 14:51:28 2009 +0300 + + Use a helper function for finding fileno of specific io type + - also differentiate between lzdio and xzdio here + +commit 852398f8c6dcb4ad5ed0310e49e7d342a262be91 +Author: Panu Matilainen +Date: Thu Oct 15 14:33:45 2009 +0300 + + Lose unnecessary url type checking from fdSize() + - we're only dealing with local files once fd is opened + +commit ec68fc79551b27821bb400eb0136f8416b9ccb2a +Author: Panu Matilainen +Date: Thu Oct 15 14:23:20 2009 +0300 + + Lose unused leftover definitions + +commit 2dc82d4e3e9c2959f4f731895993645761905073 +Author: Panu Matilainen +Date: Fri Oct 16 12:49:08 2009 +0300 + + Eliminate ufdio-specific read, write, seek and close + - we dont do network IO anymore so ufdio only differs from fdio by + downloading the file on open if necessary, after that it's just fdio + +commit 7324a69d62f56faa9a621b0554723be85b6cac13 +Author: Panu Matilainen +Date: Thu Oct 15 11:36:46 2009 +0300 + + Use fd.tell() instead of going around through os.lseek() with fdno + +commit ed40ff253a88ab399c28cf22005193e7389d5e23 +Author: Panu Matilainen +Date: Thu Oct 15 11:34:26 2009 +0300 + + Add tell() method to rpm.fd class + +commit ed6ed5c1ce0854f1b8956a66e8a429c9d5ff3948 +Author: Panu Matilainen +Date: Thu Oct 15 11:33:18 2009 +0300 + + Add ftell() clone to FD_t + +commit aa2ae3803cc38db786a662d70826a0131293b674 +Author: Panu Matilainen +Date: Thu Oct 15 11:01:00 2009 +0300 + + Avoid unnecessary dup'ing of file descriptors on header list operations + - convert to rpm.fd on python side already add use internal helper + which only accepts rpm.fd type to avoid having to dup around on + every item + +commit 410bf68fd41a6b8c98e48ca77e093f2f6c6bda75 +Author: Panu Matilainen +Date: Thu Oct 15 10:11:37 2009 +0300 + + Accept rpm.fd() types file objects everywhere in python bindings + - turn rpmfdFromPyObject() into a python-level object converter, add + a separate C-level getter for the fd pointer itself + - take advantage of python refcounting to handle differences between + native vs converted rpm.fd in callers so we can simply decref the + rpmfdFromPyObject() result without having to worry whether it was + converted or not (ie should we close it or not) + +commit 50ad087c1030be242ab658c818ba2990dd33855e +Author: Panu Matilainen +Date: Wed Oct 14 17:22:25 2009 +0300 + + Make fdUpdateDigests() static now that its possible + +commit efd874ae6a0ac17e269b1c5daed4f09939c94815 +Author: Panu Matilainen +Date: Wed Oct 14 17:19:09 2009 +0300 + + Make FD_t struct opaque, finally + +commit e5be860abb675dff7f5488073f8f836cb5c908c5 +Author: Panu Matilainen +Date: Wed Oct 14 17:14:38 2009 +0300 + + Eliminate last remaining FD_t struct privacy violation + - add getter for fd digest bundle, uninline the setter + +commit bdfb54bd238ab2d09175d2b921435b7a059ac25c +Author: Panu Matilainen +Date: Wed Oct 14 17:03:14 2009 +0300 + + Remove cpio stuff from FD_t + - only the FSM cares about cpio position, move it there - there's only + ever one fd active inside FSM, no need to track it per-fd + +commit 1ff10e3d68417ebdeac329c79299187710afb697 +Author: Panu Matilainen +Date: Wed Oct 14 16:15:05 2009 +0300 + + Move debug goo defs to rpmio.c + +commit 63432905a413d33085061674e00d6c23c60056e4 +Author: Panu Matilainen +Date: Wed Oct 14 16:10:08 2009 +0300 + + Move pile of helpers from rpmio_internal.h to rpmio.c, remove unused stuff + - nothing outside rpmio.c needs these, make 'em static there + - uninlining reveals quite a few completely unused helpers... + +commit f2e55c2ff8f6fba0cba61251027fe899ac2fdd1a +Author: Panu Matilainen +Date: Wed Oct 14 16:02:00 2009 +0300 + + Move fd statistics foo inside rpmio.c now that it can + +commit fa0337c9b64d69b3a4e50d810ec63c7798cad6c6 +Author: Panu Matilainen +Date: Wed Oct 14 15:59:39 2009 +0300 + + Move fdDigest*() to rpmio.c where they better belong + +commit c716382ee899759b522b1b63e8a2acde9ca33f65 +Author: Panu Matilainen +Date: Wed Oct 14 15:12:43 2009 +0300 + + Remove pointless inlining of stuff in rpmio + +commit 7ebe3cffc5666ffc2e04ae4722e8eaa64c0d6769 +Author: Panu Matilainen +Date: Wed Oct 14 14:45:54 2009 +0300 + + Use common "not implemented" implementation of Fseek() + +commit aac3cb417cfd802748437b7e6e8b4b2182bc41a5 +Author: Panu Matilainen +Date: Wed Oct 14 14:14:51 2009 +0300 + + Add first rough-cut python bindings for rpmio fd + - attempt to mimic python file object where possible, but nowhere near + all methods are supported, either just not yet done or due to + underlying limitations + +commit 181a3ac6a5b2d2017482da6327e0fc7a84e41c5e +Author: Panu Matilainen +Date: Mon Oct 12 15:15:39 2009 +0300 + + Raise exception in the converter, not caller + +commit 597973befe1587decf9e1a069653b87e05be1a01 +Author: Panu Matilainen +Date: Mon Oct 12 15:05:50 2009 +0300 + + Permit changing rpm.td tag from python + +commit c6649c55a89a9a6803c1640961de6c2412e9eeb0 +Author: Panu Matilainen +Date: Mon Oct 12 14:43:44 2009 +0300 + + Add limited support for modifying headers to python + - for now we only support tag deletion and assigning rpmtd objects, limiting + this to copying data from other headers + +commit bc716457e042e12f4e90efdabafe2cd69d3bff52 +Author: Panu Matilainen +Date: Mon Oct 12 13:49:50 2009 +0300 + + Fix format extension memleak on empty strings + +commit 3ec070c5d8c16a593ab2573f0f63d58a748ba2c1 +Author: Panu Matilainen +Date: Mon Oct 12 11:03:14 2009 +0300 + + Output dependency type on --requires etc queries if verbose (RhBug:528342) + +commit df61816c7588bd00f5d6bfdb99f7539eec8bd62b +Author: Panu Matilainen +Date: Mon Oct 12 11:02:56 2009 +0300 + + Add RPMTAG_VERBOSE extension + - hack to permit different query formatting based on rpm's verbosity level + +commit bb47ec2695c4c2bf16b8995c53d5f92bc51cf3e3 +Author: Panu Matilainen +Date: Mon Oct 12 10:48:59 2009 +0300 + + Permit conditional query formats on not yet cached data too + +commit 856df71e8dc24219ec01619d2089a06e9ae36dfc +Author: Panu Matilainen +Date: Sat Oct 10 12:36:38 2009 +0300 + + Oops, configuring wrong ts in rpm.ts() initialization + +commit ac3d091577096a75814419e057b5c7823d0d6eab +Author: Panu Matilainen +Date: Fri Oct 9 15:44:06 2009 +0300 + + Move further initialization from python ts tp_new to tp_init + - lose the unnecessary rpmts_Wrap(), it's not needed and just gets + in the way of things + +commit dc6946e72eb69e67d1e00f741f5ba595fa740a18 +Author: Panu Matilainen +Date: Fri Oct 9 11:57:46 2009 +0300 + + Revert explicit PyErr_NoMemory() returns to just returning NULL + - tp_alloc failing is likely to be OOM but we dont know that for a fact, + and the failing method is responsible for setting the exception + +commit 4e5132e443a9f062bfad83f531b43a9d5d6df1da +Author: Panu Matilainen +Date: Fri Oct 9 11:44:41 2009 +0300 + + Handle NULL in ts get/setKeyring as python None + +commit cbad134dd453a24d3e0e55ad81dff0e0baa2f7e9 +Author: Panu Matilainen +Date: Fri Oct 9 09:35:42 2009 +0300 + + Kill off _rpmb.error exception type + - import of _rpmb messes up rpm.error to point to _rpmb.error which we + do not want + - use ValueError for unparsable spec for now, need to figure something + saner there still + +commit 121ea41e33d19e415302c66e842a228212d80c22 +Author: Panu Matilainen +Date: Fri Oct 9 09:30:37 2009 +0300 + + Permit setting and getting ts keyring from python + +commit 62888020f4ce618c447115e4b52015e4f7402f30 +Author: Panu Matilainen +Date: Fri Oct 9 09:02:19 2009 +0300 + + Add bindings for rpm keyring and pubkey types + +commit 4c8afeef14708b3c25ebd8606d90991faff0c2c5 +Author: Panu Matilainen +Date: Fri Oct 9 08:48:13 2009 +0300 + + Add an interface to parse armored OpenPGP from memory + - refactor the decoding part out of pgpReadPkts() to separate helper, + and add pgpParsePkts() around that + +commit 0a2f3e12d25f0f71496cd2888b91b3399e23ca64 +Author: Panu Matilainen +Date: Wed Oct 7 12:09:00 2009 +0300 + + Support passing extra options to dep generator scripts + +commit 468d5ab6cc1bd83bdef08d34e34d0cafc0c1d33b +Author: Panu Matilainen +Date: Tue Oct 6 15:05:06 2009 +0300 + + Lose unused python/perl/java stringbuffers from rpmfc + +commit 733032dd1a682789ade39cfc0ef630d5bc83f09b +Author: Panu Matilainen +Date: Tue Oct 6 13:22:22 2009 +0300 + + Bah, get the new ocaml-scripts into tarballs too + - should've been in commit 82e7dd702013d3679fda438333de30afdec17a4f + +commit 35b20e13aec01252c952b3fd79665b916f5d0430 +Author: Panu Matilainen +Date: Tue Oct 6 13:13:23 2009 +0300 + + Python namespace import fiddling + - import rpm instead of _rpm for exception name compatibility + - import the lowlevel transaction class as _rpmts, makes it slightly + easier to see which is which + +commit 15fb8ccb41ce4cc02c78508b936fb74f7165683c +Author: Panu Matilainen +Date: Tue Oct 6 12:34:44 2009 +0300 + + Teach the internal dep generator about OCaml + - OCaml seems to have fairly well detectable magic in its files, nice + - Dont call the regular find-requires from the scripts now that internal + is working + +commit 82e7dd702013d3679fda438333de30afdec17a4f +Author: Panu Matilainen +Date: Tue Oct 6 12:29:37 2009 +0300 + + Add OCaml dependency generator scripts (Richard W.M. Jones) + +commit 1c83af6e10302346a765e484d38cdac3ff619436 +Author: Ville Skyttä +Date: Tue Aug 4 00:48:32 2009 +0300 + + Deprecate %__lzma, use %__xz in it. + +commit 1892984f0216340f08e928d2bb74202cd8e87cbd +Author: Ville Skyttä +Date: Mon Aug 3 21:08:55 2009 +0300 + + Decompress lzma files with xz. + +commit dab575b24498e2362845e7da6dc76015fa88b4a9 +Author: Ville Skyttä +Date: Tue Sep 22 21:11:20 2009 +0300 + + Improve perl.req here-doc skipping. + + This version is stricter in finding the end identifier by using equality test + instead of a regex (as a side effect, fixes rhbz#524929) as well as parsing + quoted identifiers, and adds support for identifiers in backticks. + +commit 562382ab180e2a4483485d165807f9de20fa5a1c +Author: Panu Matilainen +Date: Mon Oct 5 18:23:55 2009 +0300 + + Delete ancient and defunc python test programs + +commit 55e6a4b905c1cf680a1235085e268b04e1b5405a +Author: Panu Matilainen +Date: Mon Oct 5 17:23:34 2009 +0300 + + Dont leak memory from rpm.fi() methods + - Py_BuildValue() always copies the data mallocing here is just wrong + +commit 3d1169fe698910fc62dd1893c861963dedea2945 +Author: Panu Matilainen +Date: Mon Oct 5 16:42:52 2009 +0300 + + Handle all rpmds variants in its constructor + - either it takes a header + tag, or (name, flags, version) tuple + tag + to generate a single dep + - push rpm.dsSingle() compatibility out to python side + - hdr.dsFromHeader() and hdr.dsOfHeader() no longer need to be in rpmds-py.c + +commit 0cddef5a4a2b279d0da39c765312cc2deaa7de07 +Author: Panu Matilainen +Date: Mon Oct 5 15:38:45 2009 +0300 + + rpmdb open failing is certainly an rpm error, not TypeError + +commit e3a1720f4e1f5ae972a8f56275113adca179c80e +Author: Panu Matilainen +Date: Mon Oct 5 15:36:54 2009 +0300 + + Dead code removal + +commit a9958395c7000c73fe9275046f50f6b276642d48 +Author: Panu Matilainen +Date: Mon Oct 5 15:25:59 2009 +0300 + + Permit threads during rpmReadPackageFile() + +commit af00066294bb180b609d6f612237c14ad48f0dec +Author: Panu Matilainen +Date: Mon Oct 5 15:22:12 2009 +0300 + + Type mismatch is TypeError, not rpm.error + +commit 564f1cb02b841f0b0b1c2b7fcafbb9a080233a46 +Author: Panu Matilainen +Date: Mon Oct 5 15:19:01 2009 +0300 + + Push hdrFromFdno() error code handling over to python side + - return (rpmrc, header) tuple from C to let python do whatever it + wishes with the information + - let python side worry about generating backwards compatible returns + +commit 60ec5008bd6bc5f9cec43f64dd8129045080fa41 +Author: Panu Matilainen +Date: Mon Oct 5 14:55:37 2009 +0300 + + Push hdrCheck() error code handling over to python side + - return (rpmrc, message) tuple from C to let python do whatever it + wishes with the information + - let python side worry about generating backwards compatible returns + +commit 0503d7f92e94a7986715756da5226fc18a1fba10 +Author: Panu Matilainen +Date: Mon Oct 5 14:30:27 2009 +0300 + + Teach python about the lowlevel RPMRC codes + +commit fab2debfe440d677dbd072c3cd73d2c99876e7a5 +Author: Panu Matilainen +Date: Mon Oct 5 14:25:43 2009 +0300 + + Push ts.check() return tuple-o-doom generation over to python side + +commit 776f5b56ca51c7c5495f84d5823e5e646206e5d4 +Author: Panu Matilainen +Date: Mon Oct 5 14:08:48 2009 +0300 + + Teach python about RPMSENSE_ANY + +commit 4e647fd7805e85374626dd8f439f3b059ea22409 +Author: Panu Matilainen +Date: Mon Oct 5 13:12:05 2009 +0300 + + Enable retrieving problem key from python too + +commit 66589df18f7a54f724df5e859334418d9496e5ce +Author: Panu Matilainen +Date: Mon Oct 5 12:16:26 2009 +0300 + + Push transaction problem filter to python side + - make C-level ts.run() require ignoreSet just like the real one does + and keep the value on python side of things + +commit 44ee4e164e340c0d4e4725cc57811ce637deaef3 +Author: Panu Matilainen +Date: Mon Oct 5 12:09:26 2009 +0300 + + Push the interpretation of ts.run() result code to python side + - at least this lets sub-typers override the hysterical return values + +commit a15bfa40adc826dfa91f9bdc24b3e680cd8aecb6 +Author: Panu Matilainen +Date: Mon Oct 5 11:09:05 2009 +0300 + + Add minimal python wrapping for rpmProblem objects + - for now, only expose the basic attributes and return problem string + representation on %s + - return problem objects on rpmps iteration + +commit 5b289d4491738eaa4f106eb69c70680406d63aa0 +Author: Panu Matilainen +Date: Mon Oct 5 09:26:43 2009 +0300 + + Ugh, forgot to add the new _rpmb module to git + - should've been in commit 8169bbde6934637ed7be58e18103330c1d5e4546 + +commit 9b20c706a4f93266450fae2f94007343b2e8fd9e +Author: Panu Matilainen +Date: Fri Oct 2 22:48:03 2009 +0300 + + Push most work of ts.addErase() over to python + - minimize the stuff done in C: rpmtsAddEraseElement() only cares about + header, so that's what we accept on C-level bindings + - on python side, handle db recno's and labels like we've always done, + additionally accept match iterators and plain headers too + +commit ab04cfb08c5fbdf4e9803b2d63352fee0527937e +Author: Panu Matilainen +Date: Fri Oct 2 22:15:51 2009 +0300 + + Return error code from rpmtsAddEraseElement() failure + - trying to remove non-installed header counts as an error + +commit a9b77304c3ad187e8982fd67d1a6406c93ab9e40 +Author: Panu Matilainen +Date: Fri Oct 2 21:41:41 2009 +0300 + + Permit file objects and file names to ts.addInstall() + - largely removes the need for the klunky ts.hdrFromFdno() + +commit 92d18d1d7139b37065ea742cfe0e8cee5e9c3500 +Author: Panu Matilainen +Date: Fri Oct 2 21:18:27 2009 +0300 + + Push most work of ts.addInstall() over to python + - minimize the stuff done in C: require all arguments in final format + and report status back with a boolean, handle everything else including + keylist refcounting hack over to python side + +commit c7d62396bf3420a87ce0cd7c319d2566f9446ed3 +Author: Panu Matilainen +Date: Fri Oct 2 21:14:19 2009 +0300 + + Oops, missing self in bunch of calls... been too long since writing Python ;) + +commit 5ce5e8d75b1683fc4679037db833b55884ee1842 +Author: Panu Matilainen +Date: Fri Oct 2 20:35:20 2009 +0300 + + Push the rpmtsGetKeys() stuff over to python completely + - trivially implemented in python by iterating over transaction element + keys, we dont need no stinking extra librpm APIs for this + +commit 07ad9dcf0a8eb98928178b774512bcad2bc6f169 +Author: Panu Matilainen +Date: Fri Oct 2 19:19:31 2009 +0300 + + Add rpmlog() wrapper to python bindings + +commit bc39e17527920d47640ea35e42c961926e4e5125 +Author: Panu Matilainen +Date: Fri Oct 2 18:55:16 2009 +0300 + + Teach python about RPMDBI_LABEL + +commit 8169bbde6934637ed7be58e18103330c1d5e4546 +Author: Panu Matilainen +Date: Fri Oct 2 18:31:32 2009 +0300 + + Split rpmbuild dependencies to separate _rpmb module + - installers and the like dont need the pile of poo called librpmbuild for + anything, avoid dragging it in needlessly + - import _rpmb into rpm namespace if available but dont complain if + its not there + - arrange ts.parseSpec() compatibility on python side by dynamically + importing _rpmb if possible + +commit bc9b86ae5c14e093078506b533cede3c5f1f5ab9 +Author: Panu Matilainen +Date: Fri Oct 2 16:36:53 2009 +0300 + + Move ts flag & color setting to python side + +commit 305d634d27d8c480bc01250585d2a901e343851f +Author: Panu Matilainen +Date: Fri Oct 2 16:18:59 2009 +0300 + + Add a dummy python-level transaction set class, use it always + - move the rpm.ts() vs rpm.TransactionSet() compatibility to python + - this will enable doing only the lowest level stuff in C and rest + in python + +commit 1dffab5393fc8ed5cd81173be543db6b5c34785a +Author: Panu Matilainen +Date: Thu Oct 1 15:25:01 2009 +0300 + + Add python method for retrieving header "instance" (db recno) number + +commit 9c88ea2c87b5d22026400fb19f064b7967aa4743 +Author: Panu Matilainen +Date: Thu Oct 1 15:12:06 2009 +0300 + + Deprecation tweaks + - use PyErr_WarnEx() for better control and leave the tracking up to python + - use PendingDeprecationWarning for now + - document the replacing functionality in the deprecation messages + - make hdr.sprintf() just an alias to hdr.format() without deprecating, + at least for now it'd be only a gratuitous incompatible change on python side + +commit 8b704a6bf8ae2c5a922b54ff35c65525e93f0f1f +Author: Panu Matilainen +Date: Thu Oct 1 14:55:55 2009 +0300 + + Oops, these are mappings, not dicts... + +commit 29eb2f35047363353c851e3f8920123ce0a42217 +Author: Panu Matilainen +Date: Thu Oct 1 14:27:42 2009 +0300 + + Generalize python ts flags and colors set/get foo + - make flags, vsflags, color, prefcolor (previously not available) + and probFilter appear as internal attributes of ts objects, each + with their own setter/getter methods + - make the old custom set/get methods access the internal attributes instead + - keeping them "internal only" leaves room for adding further sanity + checking and nicer interface on python side while giving direct access + bits for those who want it + - not deprecating the old get/set methods at least yet... + +commit f819760dc37047d464afff8a91c746114c183a2a +Author: Panu Matilainen +Date: Thu Oct 1 14:06:41 2009 +0300 + + Fix couple of recently introduced compiler warnings + +commit b0d374528a367779e158a68a7b6a58ad929b85aa +Author: Panu Matilainen +Date: Thu Oct 1 13:21:44 2009 +0300 + + Include structmembers.h centrally from rpmsystem-py.h + - pretty much everything might need this... + +commit 66c469759c497b72f24ebb6a69ca9a6333d1d600 +Author: Panu Matilainen +Date: Thu Oct 1 11:37:45 2009 +0300 + + Add API for setting preferred transaction file color + - not strictly needed as it gets its default from a macro but .. shrug + +commit 16e35ece9c28cfd0257102b1e1ca69746e2b4b6e +Author: Panu Matilainen +Date: Thu Oct 1 11:21:58 2009 +0300 + + Make python ts rootDir appear as a read-only attribute + - there's no need to change the rootdir after object creation, better + not permit at all + +commit 24135b8443d01af4ff0c23ec11794787b0feb673 +Author: Panu Matilainen +Date: Thu Oct 1 11:17:38 2009 +0300 + + Add python getter for transaction id + +commit eb419a86ac70aef55b8af3b964b62ada82944582 +Author: Panu Matilainen +Date: Thu Oct 1 10:59:53 2009 +0300 + + Eliminate python ts scriptFd kludgery + - make the scriptFd appear as regular attribute by providing a setter + method for it, permit any file object to be used and allow disabling too + - readonly for now as we dont have rpmfd wrapped yet + - remove now unnecessary custom get/setattr functions + +commit 909982b1b5d2bccbf28ecfb38064ab86e09d4523 +Author: Panu Matilainen +Date: Wed Sep 30 16:45:46 2009 +0300 + + Deprecate custom foo.count() methods, support len() instead + +commit 8cb920eb32f36297e2154b7ebcc25851d9a7b39d +Author: Panu Matilainen +Date: Wed Sep 30 16:10:24 2009 +0300 + + Eliminate unused python ts iterator filter stuff + - iterators dont take arguments so there's no convenient way to filter + while iterating, let python users filter themselves (like they've + always been doing) + +commit b8d3b273cbcc7a4130d6786ff157a87a4f383c30 +Author: Panu Matilainen +Date: Wed Sep 30 15:04:39 2009 +0300 + + Take advantage of headerNextTag() in python hdr.keys() + - avoids whole lotta unnecessary copying of data, we're only interested + in tag numbers here + - dont filter out stuff - python consumers can look at i18n data too + +commit 32b0bba8a2fb5e534bddc9c02ff170726457bdcc +Author: Panu Matilainen +Date: Wed Sep 30 14:51:33 2009 +0300 + + Add iterator support to python header objects + +commit 3d5455d42d48740ff23899f00a903f49b73eff00 +Author: Panu Matilainen +Date: Wed Sep 30 14:48:19 2009 +0300 + + Add alternative header iterator method + - we dont always want the actual contents of the tag to be copied + on iteration, so add an interface that returns the next tag in the + header + - this lets callers to decide what to do with the tag and how to + retrieve it + +commit d59e715c1b8e28206bfed45b6f4cf3c00322f95c +Author: Panu Matilainen +Date: Wed Sep 30 13:05:24 2009 +0300 + + Add some flags to rpmtd creation + - permit disabling extension retrieval and "raw" (untranslated i18n) tags + - always use HEADERGET_ALLOC for data availability sanity + +commit 1ddee37628b8aac48a8f1fc51af4575b5570589b +Author: Panu Matilainen +Date: Wed Sep 30 12:45:07 2009 +0300 + + Add beginnings of rpmtd wrappings to python + - unlike other types, store the C-level td structure directly in the + python object, this lets us selectively expose some members directly, + avoids having to deal with rpmtd allocation separately and as leaves + the reference counting to python as rpmtd's aren't refcounted on C-level + +commit b53f5995969554211dde0b235c648f8d2e1cb0a6 +Author: Panu Matilainen +Date: Wed Sep 30 12:11:43 2009 +0300 + + Turn hdrGetHeader() into argument parsing converter interface + +commit 945bbf49f52c50b53f0d407e91ec46febd56d948 +Author: Panu Matilainen +Date: Wed Sep 30 10:33:52 2009 +0300 + + Sanitize getattr behavior of header objects + - when generic getattr fails, only try retrieving header tag as attribute + if it's a valid tag + - clear any python errors if generic getattr failed + - split generating a python object from header + tag to an internal helper + +commit 600ccbe9d43e5857eb9b9925975f63d0e40286d8 +Author: Panu Matilainen +Date: Mon Sep 28 18:22:14 2009 +0300 + + Require expected type in PyArg_ParseTupleAndKeywords() already + +commit ac3f9f729b9a3b938d3344278c7e0564934f3871 +Author: Panu Matilainen +Date: Mon Sep 28 17:23:28 2009 +0300 + + Support numeric expansion in rpm.expandMacro() + +commit f74def684253964fa03edb55f155dfbb5122b1bf +Author: Panu Matilainen +Date: Mon Sep 28 16:37:14 2009 +0300 + + Push rpm.signalsCaught() to python level + - only implement the bare minimum in C by adding a thin wrapper for + rpmsqIsCaught(), the rest can easily be done in python + +commit dca55d3781401eb0ddce2759770054db7629083a +Author: Panu Matilainen +Date: Mon Sep 28 16:19:22 2009 +0300 + + Implement rpm.readHeaderFromFD() in python instead of C + +commit 07710f3033b277ccb46decd84f994e88d5e6869a +Author: Panu Matilainen +Date: Mon Sep 28 16:07:09 2009 +0300 + + Implement rpm.readHeaderListFromFD() in python instead of C + +commit f0e9245660100d3ce41692889899844f42feb7a4 +Author: Panu Matilainen +Date: Mon Sep 28 14:50:33 2009 +0300 + + Implement rpmreadHeaderListFromFile() in python instead of C + +commit 90042df3428414bf5f68cb6db7aed208d6455b96 +Author: Panu Matilainen +Date: Mon Sep 28 13:48:19 2009 +0300 + + A few cases of Py_RETURN_NONE missed on the first round + +commit 65a6afbbdaf1fc81304c66ffb1b024d63c4bbb5a +Author: Panu Matilainen +Date: Mon Sep 28 13:30:28 2009 +0300 + + Arrange rpm.headerLoad() compatibility on python level + +commit a22fda5b5add3b96ac68a39ab8a6c88b72285098 +Author: Panu Matilainen +Date: Mon Sep 28 11:09:32 2009 +0300 + + OSGi dependency generator fixes from Alphonse Van Assche (ticket #101) + - This patch fix some minor bug, remove unused code and increase drastically + the perf by threading execution of tasks and using zip command instead of + jar to get meta-data + +commit 2507ab6797926e9482ad5311697699f0a55f50e2 +Author: Panu Matilainen +Date: Thu Sep 24 13:57:55 2009 +0300 + + Enable subtyping on the rest of our type-objects + - not very useful atm as various places return hard-wired built-in types + +commit df40d9b27b1dc8bd82f8f1c8a17d357df3fae330 +Author: Panu Matilainen +Date: Thu Sep 24 13:40:44 2009 +0300 + + Eliminate all custom tp_free() type methods + - tp_free()'s purpose is only to free up the memory used by the python + object structure, cleaning up our own allocations belongs to tp_dealloc() + +commit d5f5156bd09338eceba7eeb6c5122ecc58afb0a1 +Author: Panu Matilainen +Date: Thu Sep 24 13:19:20 2009 +0300 + + Enable subtyping on rpm.ts class + +commit 374358d219b5fc35b43f929cb285c3d3d473ac89 +Author: Panu Matilainen +Date: Thu Sep 24 13:05:36 2009 +0300 + + Call generic python setattr if not scriptFd + - yet more preliminaries for subtyping + +commit 27bb9c9402f38dd802d61a5945f6b019c8b8ed78 +Author: Panu Matilainen +Date: Thu Sep 24 13:04:34 2009 +0300 + + tp_setattro() is supposed to return -1 on errors + +commit 74c1040dbc4b4977045745f924ea0774c2e3ee53 +Author: Panu Matilainen +Date: Thu Sep 24 12:52:32 2009 +0300 + + Call (sub)type tp_free from destructors + - more preliminaries for subtyping + - remove pointless NULL checks + +commit 36ada6c116e123f5b5b739e12f256201e5cc6fa1 +Author: Panu Matilainen +Date: Thu Sep 24 11:42:17 2009 +0300 + + Make object allocation type agnostic + - pass (sub)type down to wrappers + - call subtype tp_alloc() instead of PyObject_New() + - preliminaries for allowing subtyping + +commit ab66c9ff47664fcfae6eea2146be65ccbff43195 +Author: Panu Matilainen +Date: Wed Sep 23 17:44:07 2009 +0300 + + Remove unnecessary header type checking + - the type is already validated by PyArg_ParseTupleAndKeywords(), + no need to doublecheck + +commit 693838658d0a1c94bc9efa31de700e2a9898c88c +Author: Panu Matilainen +Date: Wed Sep 23 14:41:30 2009 +0300 + + Remove the broken tp_print method from spec + +commit d55c5f6c3005858903eca1a5e98915f0c27cfb8b +Author: Panu Matilainen +Date: Wed Sep 23 14:21:13 2009 +0300 + + Decouple python spec objects from transaction objects + - ts structure is only necessary for hysterically passing back the + parse result from parseSpec(), hide this in the bindings + - deprecate ts.parseSpec() for later ripping + +commit 86527f0d45c033347880907cf7680230ecb9ecb9 +Author: Panu Matilainen +Date: Wed Sep 23 13:12:43 2009 +0300 + + Oops, binary data can and should be presented as python strings + +commit 76d8d16de0c96f2b3e66eafe9f03127e96ad5804 +Author: Panu Matilainen +Date: Wed Sep 23 12:49:15 2009 +0300 + + Add rpmtd to python object converter, change header code to use that + - vastly simpler than the former goo in hdr_subscribe + +commit 282efb6d4c23848b2443ffd767fd4bccda209425 +Author: Panu Matilainen +Date: Wed Sep 23 12:28:47 2009 +0300 + + Turn tagNumFromPyObject() into an object converter interface + - permits direct validation and conversion from arg parsing + +commit ac219c129d04952fbd205c536533723d582d1ad2 +Author: Panu Matilainen +Date: Wed Sep 23 12:05:02 2009 +0300 + + Turn rpmFdFromPyObject() into an object converter interface + - permits direct validation and conversion from arg parsing + +commit e72a51d081b192cbc35af47f8281e939370f8b55 +Author: Panu Matilainen +Date: Wed Sep 23 11:51:55 2009 +0300 + + Permit any file object in rpm.readHeaderListFromFD() + +commit 0913ff321b5a2034596e00c463a4888f96c19aca +Author: Panu Matilainen +Date: Wed Sep 23 11:42:59 2009 +0300 + + Permit file objects in python header constructor + +commit 1d2d0456890be9341f031d854a7feb69c87b2419 +Author: Panu Matilainen +Date: Wed Sep 23 11:41:20 2009 +0300 + + Add write() method to python headers + +commit b997746271d764bebc86f207871e5e0e57e7b720 +Author: Panu Matilainen +Date: Wed Sep 23 11:10:38 2009 +0300 + + Accept any file object in ts.hdrFromFdno() + +commit 79e87e5ea16ed7118536b12e267d93db74e15265 +Author: Panu Matilainen +Date: Wed Sep 23 11:09:19 2009 +0300 + + Add helper to convert python file objects to rpmio FD_t type + +commit 6b9adb71f9715de3648673ae6ca4475a9e98d141 +Author: Panu Matilainen +Date: Wed Sep 23 10:49:47 2009 +0300 + + Add te.NEVRA() method, adjust docs + +commit c29492242c97ebed80bdf561c4a15acf9d7939ca +Author: Panu Matilainen +Date: Wed Sep 23 10:44:41 2009 +0300 + + Remove tp_print methods from all rpm-python objects + - these violate the intended use of tp_print, python docs state + "A type should never implement tp_print in a way that produces + different output than tp_repr or tp_str would." + +commit 6bbc19fb228465215b59cd2c902564d7665ce554 +Author: Panu Matilainen +Date: Wed Sep 23 10:39:40 2009 +0300 + + Lose the debug junk from python bindings + +commit 2ede83b6598a3026c1f016a109220929f62b0829 +Author: Panu Matilainen +Date: Wed Sep 23 10:31:46 2009 +0300 + + Add hdr.format(), deprecate hdr.sprintf() + - sprintf() is a C'ism and format() is closer to current librpm anyway + +commit f0c3985a773706d8dc268d143120142acfbfa822 +Author: Panu Matilainen +Date: Wed Sep 23 10:19:46 2009 +0300 + + Make fiFromHeader() static inside header-py, deprecate + +commit c21a1ea23db40bd136a859eb171a49ae51e25c64 +Author: Panu Matilainen +Date: Wed Sep 23 10:11:45 2009 +0300 + + Deprecate rpm.headerLoad() + - this is not needed now, just call rpm.hdr( +Date: Wed Sep 23 09:56:08 2009 +0300 + + Deprecate header filelist munging methods + - hdr.convert() is the generic way, the old stuff is not needed anymore + - macro to issue warnings just once + +commit 66c0d4ee6b96190426d310e6b0be4c7ce3d7fe42 +Author: Panu Matilainen +Date: Wed Sep 23 09:27:47 2009 +0300 + + Eliminate unnecessary function + +commit e16815fc7bc40198b60f677ff7d80a84cb5356a6 +Author: Panu Matilainen +Date: Wed Sep 23 09:24:23 2009 +0300 + + Permit headerConvert() from python + +commit 42810ceae18d920f40f5193cf900f1c96bca7186 +Author: Panu Matilainen +Date: Wed Sep 23 09:03:25 2009 +0300 + + Add has_key() method to header object + +commit cfc341170cdd5b324a3b90eb1b13620fd39298b4 +Author: Panu Matilainen +Date: Wed Sep 23 08:51:12 2009 +0300 + + Add support for creating new header objects + - without arguments, rpm.hdr() creates an empty header + - with another header as argument, make a copy + - string argument is considered an unloaded header blob and copy-loaded + +commit 848de2dfec3f545801574a6219df8f081d66c5e0 +Author: Panu Matilainen +Date: Wed Sep 23 08:41:03 2009 +0300 + + Rpm's allocators dont return on OOM, remove unnecessary check + +commit 2a8da8606fc169aa9929e9a1550c8e29c466880b +Author: Panu Matilainen +Date: Wed Sep 23 00:06:13 2009 +0300 + + Add type checking macros for all rpm python type objects + +commit 39d79f91420ba7d9527e04d00b4b0dc2d6cad9ff +Author: Panu Matilainen +Date: Tue Sep 22 23:02:47 2009 +0300 + + Rename python system.h for disambiguation + +commit 14d5aaedcb355a724ba8869a29c8e4a35efdcac1 +Author: Panu Matilainen +Date: Tue Sep 22 22:42:06 2009 +0300 + + Lose the empty doxygen markers + - nothing wrong with comments but empty comment placeholders + are not exactly useful + +commit 864220c441704e3d61fa521c682a23874b41e4ba +Author: Panu Matilainen +Date: Tue Sep 22 21:53:21 2009 +0300 + + Put some consistency to python object creation + - all type object creation goes through foo_Wrap() which handle OOM + and all type specific initialization + +commit ed557bbcf065905beebb42d50048cecf04c3e441 +Author: Panu Matilainen +Date: Tue Sep 22 21:24:55 2009 +0300 + + Make all python object creation wrappers return PyObject pointers + - this way the only place where casts are needed are in the wrapper itself + +commit 4d6f8e46e03ccb81a0f50848e974884b7874912d +Author: Panu Matilainen +Date: Tue Sep 22 21:01:01 2009 +0300 + + Dont leak memory on rpm.ds iteration + +commit 0cb5de3fc090cae426b812ad3e38e2be8b7e63ac +Author: Panu Matilainen +Date: Tue Sep 22 20:50:41 2009 +0300 + + Lose unnecessary next() methods + - python adds next() methods for objects supporting iterators + +commit 0793b2cf23667f515c1675e9dbe37e634c4cd730 +Author: Panu Matilainen +Date: Tue Sep 22 20:20:07 2009 +0300 + + All rpm-python iterators are self-iterators, just use PyObject_SelfIter + +commit d7134660ca4300058e579bed990ab7cf7e14a40f +Author: Panu Matilainen +Date: Tue Sep 22 19:55:34 2009 +0300 + + Dont leak memory from rpm.dsSingle() + +commit 07adc4e0d1aa23a4d3e3a21e8f01f615233793ee +Author: Panu Matilainen +Date: Tue Sep 22 19:44:59 2009 +0300 + + Simplify fiFromHeader() + - just call the fi object, no need to manually redo all this stuff + +commit 708d4d8f1bd215d1dffce3f8d5680d2c967145b8 +Author: Panu Matilainen +Date: Tue Sep 22 19:42:53 2009 +0300 + + Simplify dsFromHeader() + - just call the ds object, no need to manually redo all this stuff + +commit da74188fa654246ec74e0375440f326e5dc714f2 +Author: Panu Matilainen +Date: Tue Sep 22 19:19:02 2009 +0300 + + Sanitize python object -> tag number exception handling + - raise exception in tagNumFromPyObject(), not in 12 different callers + - check against RPMTAG_NOT_FOUND consistently instead of -1 and whatnot + - unknown tags are value, not key or type errors + +commit 00d683ce88748080ce78d1e2d802a401b2d30261 +Author: Panu Matilainen +Date: Tue Sep 22 18:55:09 2009 +0300 + + Move allocations out of rpmps object init method + - tp_init can be called several times, allocating from there leaks memory + - tp_init gets called automatically on object creation, dont call manually + - nothing to initialize for rpmps... + +commit 4c85c7e605ee0312e51c8614d98c4740041ec4e1 +Author: Panu Matilainen +Date: Tue Sep 22 18:53:15 2009 +0300 + + Move allocations out of rpmds object init method + - tp_init can be called several times, allocating from there leaks memory + - tp_init gets called automatically on object creation, dont call manually + +commit fdc62b3decfe6a798284fc8c76372092b3ee1f00 +Author: Panu Matilainen +Date: Tue Sep 22 18:50:32 2009 +0300 + + Move allocations out of rpmfi object init method + - tp_init can be called several times, allocating from there leaks memory + - tp_init gets called automatically on object creation, dont call manually + +commit 337cb1bfea878931bf4bc410edeaec58a857b013 +Author: Panu Matilainen +Date: Tue Sep 22 18:22:50 2009 +0300 + + Remove useless rpmts python initialization + +commit e2ba570ad793dcbfdf8a80b520a54995aa56195d +Author: Panu Matilainen +Date: Tue Sep 22 18:17:49 2009 +0300 + + Realize the remaining bits of direct rpmdb interface are dead too + - the code hasn't been enabled in a long long time despite being built... + +commit 96a1b0a6816f3df9b4ff5290520b72b904182f36 +Author: Panu Matilainen +Date: Tue Sep 22 17:49:53 2009 +0300 + + Use Py_RETURN_NONE macro for returning None everywhere + +commit 43f585fced06e10d4fad8208697cc323857ef535 +Author: Panu Matilainen +Date: Tue Sep 22 17:33:07 2009 +0300 + + Eliminate unnecessary custom object allocation functions + - these are just calling python defaults, no point at all... + +commit ca6591e86c201e54ae8ee876f12d5c0f0c835236 +Author: Panu Matilainen +Date: Tue Sep 22 17:27:44 2009 +0300 + + Use generic python get/set attribute functions directly where appropriate + - no point in wrapping all this stuff in our own functions + +commit 711ab9bab1596dc61825ec8c71d6bcd1f9a1917f +Author: Panu Matilainen +Date: Tue Sep 22 17:12:22 2009 +0300 + + Python initialization spring clean + - split rpmtag enum additions to seprate function + - PyModule_AddIntConstant() does exactly what we need for the rest + +commit ae1fd3fa479bfafcc65b9ea532cafb401ed9a031 +Author: Panu Matilainen +Date: Tue Sep 22 16:47:07 2009 +0300 + + Make the python object structures opaque + +commit 2b06ca079c90960242dfe173e0e8c2fbc39d7689 +Author: Panu Matilainen +Date: Tue Sep 22 16:39:39 2009 +0300 + + Lose the utterly broken rpmio FD_t wrappers + +commit ae6ea9789ff395e2343d7c7a9eae551a64a74db5 +Author: Panu Matilainen +Date: Tue Sep 22 16:36:48 2009 +0300 + + Lose the useless python debug stuff + +commit ae1e7d83898e3c14138260ac9a8b53737da83c84 +Author: Panu Matilainen +Date: Tue Sep 22 16:28:58 2009 +0300 + + We dont support ancient python versions... + +commit dd5cfeec61eeddedc842aa11d7ba2376c0e9411e +Author: Panu Matilainen +Date: Tue Sep 22 16:24:32 2009 +0300 + + Kick out mummified rpmdb python interface remnants + +commit 5db17ad1ba05d03d7d543b064ee8ebf21fe9118c +Author: Panu Matilainen +Date: Tue Sep 22 16:02:39 2009 +0300 + + Missing include + +commit 6f7120694bc7f3a1c56d4639ad345aaa024ba598 +Author: Panu Matilainen +Date: Tue Sep 22 15:36:11 2009 +0300 + + Clean up + fix bad recno erasure in python ts.addErase() + - now that we can loop over RPMDBI_PACKAGES matches, the code can + be simplified quite a bit + - walk through the iterator always to get a reliable installed status, + previously ts.addErase() with bad record number wouldn't raise exception + +commit e95921e29bdaa15094499d9191cd6fbfd0b7e63a +Author: Panu Matilainen +Date: Tue Sep 22 14:53:56 2009 +0300 + + Remove no longer necessary RPMDBI_PACKAGES special casing + +commit 21d527f6c7111c067fc88a6ef76d201c7a653936 +Author: Panu Matilainen +Date: Tue Sep 22 14:52:57 2009 +0300 + + Fix endless loop on RPMDBI_PACKAGES iteration when offset specified + +commit eae127b7d835a2cdccd0abad75141efd8cb3a2bf +Author: Panu Matilainen +Date: Tue Sep 22 12:32:02 2009 +0300 + + Unbreak --tid and --querybynumber + - broken ages ago somewhere between 4.4.x and 4.6.x by typing changes + presumably + - C99 strtoul() can figure the base on its own, remove unnecessary work + +commit a90f65f38b17b7ba993d9d4b7d1677ce0fd4417a +Author: Panu Matilainen +Date: Tue Sep 22 10:21:47 2009 +0300 + + DB_INCOMPLETE was removed in BDB 4.1 and we dont support older versions + +commit dff73774ca68b1ab79534547fc744c510da8f0e5 +Author: Panu Matilainen +Date: Tue Sep 22 09:26:39 2009 +0300 + + Remove ancient, unused code to filter duplicates on rpmdb rebuild + - enabling this as-is would be murderous to multilib systems + - getting duplicates in the db would be a bug elsewhere + +commit 6bc5d87007bfe2ecfe6738f0575b3646a71361fd +Author: Panu Matilainen +Date: Mon Sep 21 14:36:59 2009 +0300 + + Rip out dependency caching + - it doesn't speed up things that much, is broken in some chroot + scenarios and is ugly ugly hardwired BDB hackery where it doesn't belong + +commit 880f4cd41f8182c1c39f6678f79266932cccf082 +Author: Panu Matilainen +Date: Mon Sep 21 14:04:34 2009 +0300 + + Move rpmdb home creation from backends to one level higher + - this is a common operation for any backends, avoid duplication + - only try to create it once instead of every index open, and if it + doesn't exist and cant be created, error out instead of trying to continue + in vain + +commit d3c75ad8eef518f413fb27184f9d81799a823e9b +Author: Panu Matilainen +Date: Mon Sep 21 14:00:46 2009 +0300 + + Add an internal API for getting rpmdb home wrt chroot state, use it + +commit af136766a85ca003fbe8332e6ec9c63eeb4d8cd7 +Author: Panu Matilainen +Date: Mon Sep 21 11:59:25 2009 +0300 + + Remove pointless per-index api version + +commit bdea28b94511af2dee0e30635062024690e23f0e +Author: Panu Matilainen +Date: Mon Sep 21 11:36:16 2009 +0300 + + DB config stuff not needed outside dbconfig.c, make them static + - additionally make the popt struct const since it can... + +commit 81714312e70835c2136372d40813bd4c8423d3e3 +Author: Panu Matilainen +Date: Mon Sep 21 11:32:43 2009 +0300 + + BDB is not optional at least currently, remove useless ifdefs + +commit a232a259845adc620a187c54fb49ec91a3493e97 +Author: Panu Matilainen +Date: Mon Sep 21 11:29:27 2009 +0300 + + Remove useless no-op "teardown" and "usecursors" config bits + +commit baa1cf0e1bdb7260be1cb41dc5e6c3bad180a34e +Author: Panu Matilainen +Date: Mon Sep 21 11:00:50 2009 +0300 + + Remove BDB RPC "support" + - it's insecure, used by nobody (its been rather broken for a long + time) and all, but BDB 4.8.x removed RPC support from upstream so we + cant very well support in the future even if we wanted to + +commit 510c6763ef745b308abd1cc6cec2a62119e87c9c +Author: Panu Matilainen +Date: Mon Sep 21 10:29:38 2009 +0300 + + Remove XA "support" from the backend + - it's removed from BDB 4.8.x and this has hardly ever done anything anyway + +commit a819de43ce019bc3dd305799d12c1169294c93a7 +Author: Panu Matilainen +Date: Fri Sep 18 13:53:46 2009 +0300 + + Remove unused db/dbenv methods "documentary" from the source + +commit 4c12b61b34ad8da1927c25805277e8e2f90c1b80 +Author: Panu Matilainen +Date: Fri Sep 18 13:05:49 2009 +0300 + + Use db3Free() for on sqlite backend close too + +commit 37390dffe42360f5f34ef86bd7296d029c16adb7 +Author: Panu Matilainen +Date: Fri Sep 18 13:13:59 2009 +0300 + + Always populate dbi->dbi_file on db3New() + - Only the actual db->open() wants NULL for temporary databases, everywhere + else we want the tag name. Handle the temporary case where it counts + instead of complicating things everywhere for the one special case. + +commit b3ed4ec1b1943ffc74a5877cc6f8cb85c37da885 +Author: Panu Matilainen +Date: Fri Sep 18 11:56:05 2009 +0300 + + Mop up leftover root/home foobar + +commit 26e36775157a53ee68eff33b4863bb0e8f60f5c8 +Author: Panu Matilainen +Date: Fri Sep 18 11:51:21 2009 +0300 + + Per-dbi root and home dont make sense, always use rpmdb paths + +commit f3cab403d4b3a4351037e6eab3832e92b02ae8fb +Author: Panu Matilainen +Date: Fri Sep 18 09:49:28 2009 +0300 + + Sigh.. when not using environment, absolute paths are required + +commit c01766b3f60802f9d4b1aa56151f633323377915 +Author: Panu Matilainen +Date: Thu Sep 17 16:28:09 2009 +0300 + + Always open database files relative to database home + - This allows the db to move freely wherever (such as across chroots, + RhBug:507309 and pile of related issues) .. and is even recommended + by BDB documentation. Well duh. + +commit b3dcc48824c6ddefdfe784148f3a5da0bd60ed90 +Author: Panu Matilainen +Date: Thu Sep 17 12:51:28 2009 +0300 + + EXIT_FAILURE being defined is already handled in system.h + +commit b805731ce3d3cb9d79c224d936c41a10861baed5 +Author: Panu Matilainen +Date: Thu Sep 17 12:40:29 2009 +0300 + + Compare pointers against NULL, not 0 + +commit 28919a1677f6f0e2741d9554c4bd30eb98825fb5 +Author: Panu Matilainen +Date: Thu Sep 17 12:25:31 2009 +0300 + + Have BDB use our allocation routines now that we can + - rfree() prototype doesn't match free() but it doesn't matter in this + case as it's just a convencience wrapper with no extra functionality + and setting NULL is ok according to BDB docs + - db->set_alloc() can't be used if environment is used, fix the condition + +commit 5722f2d65cc4f1a1204f71edef311ce30cadda5c +Author: Panu Matilainen +Date: Thu Sep 17 11:36:10 2009 +0300 + + Add runtime settable custom memory allocation failure callback routine + - lets API users perform theirn own cleanup / exit through their own + routines in case of allocation failure, or even try to free up + some memory and retry allocation + +commit 14925811396c7f006b9b305cdce297366c648295 +Author: Panu Matilainen +Date: Wed Sep 16 17:28:22 2009 +0300 + + Always use build + use our own allocator functions + - Consistent across platforms and will allow some things macros dont and + memory checkers these days are smart enough to get decent output anyway + - Minimal namespacing with r-prefix, add compatibility macros to system.h + for now so we dont have to change the entire codebase for this + - Also make rpmutil.h where the declarations and gcc __attribute__ macros + are available everywhere + +commit 3ef73d4d9df6666e5fa3ad772cb4c177f0fd3440 +Author: Panu Matilainen +Date: Wed Sep 16 16:18:06 2009 +0300 + + Eliminate unnecessary variable + +commit 23dd010c57a3e25938a60984186fc3b2d1fc15ea +Author: Florian Festi +Date: Wed Sep 16 14:59:48 2009 +0200 + + Remove unused local variable + +commit f3d2c4a9f92ffc399cf8ed5bebdac1531081ffd9 +Author: Panu Matilainen +Date: Wed Sep 16 15:36:44 2009 +0300 + + Remove db environment on close on chrooted operations + - As we open the db from outside the chroot, the environment ends up + containing paths that are not valid once we enter the chroot causing + dumb issues like RhBug:513699 and RhBug:507309. + - We'd be better off removing the environment always after access but + limiting to chroots for now as the rpmdb open/close path is full of races + when environment is not present. Chroots are somewhat special environemnts + anyway and typically not concurrently accessed so it's less of an issue + there. + - While this still has all sorts of issues, it at least leaves the rpmdb + in chroot in a functional state after initial install. + +commit c339c3614484642b178716b0ccca88bb6ad3c20c +Author: Panu Matilainen +Date: Wed Sep 16 15:12:28 2009 +0300 + + Move the default transaction lock out of BDB environment namespace + - We dont want the transaction lock to get mixed with the BDB environment, + nor do we want it wiped out with it as the ts lock protects things + *around* the environment. Unlike the environment, any fcntl locks on + the file get released when process dies, so if there is a lock, + there's a process alive holding it and you'd better not remove it. + - Use the same lock path in macro configuration and built-in fallback + - Make it a hidden file to avoid people confusing lock file existence + with it actually being locked + +commit 8b9d37302588d07e1a66f66c9b5dc84625aae061 +Author: Panu Matilainen +Date: Wed Sep 16 14:08:28 2009 +0300 + + There's a function to test string equivalence... + +commit 6b11f58c764d2ec5edd13987bbb61d2a0c96c7ed +Author: Panu Matilainen +Date: Wed Sep 16 14:00:54 2009 +0300 + + Throw out useless db statistics structs + - besides being completely unused, these structs are defined by BDB + public headers, no need to mirror them in rpm + +commit ed8a4e20e55659593b2488df00143ff50c5829ea +Author: Panu Matilainen +Date: Wed Sep 16 13:57:01 2009 +0300 + + Throw out pile of unused "stuff" from 2002 + +commit 4cfcdd661d398691163f27c0ad9744b33d2dfae9 +Author: Panu Matilainen +Date: Wed Sep 16 12:41:44 2009 +0300 + + Minor cleanup to newRpmdb() + - no need to free what hasn't been allocated yet + +commit 90a0f752808d166e7d1640d60cd3a7d4cd26154e +Author: Panu Matilainen +Date: Wed Sep 16 12:27:12 2009 +0300 + + One complicated way to write xstrdup() .. pff + - sqlite backend uses dbi subfile for table name, leave it alone although + it is the same as the file name... + - allocate + free both file and table name separately + +commit 961ced7a611000b8a3d522ddc92c6230b4367e1f +Author: Panu Matilainen +Date: Wed Sep 16 12:08:58 2009 +0300 + + Eliminate long since unused db subfile from bdb code + +commit 2bfa9ca1470d6616a4fe282a18ae0be7be097854 +Author: Panu Matilainen +Date: Wed Sep 16 11:56:12 2009 +0300 + + Remove unnecessary arguments to db init and fini + - bdb environments are per db_home, not per file so dbfile etc dont make + sense here + +commit cc1a7acef9aef29218f1671760be0ac06499268b +Author: Florian Festi +Date: Mon Sep 14 16:19:33 2009 +0200 + + Also skip to be erased files in "netsharedpath" + fixes rhbz#494640 + +commit 63d37be6b4a854b9cbbd47306c5c383a2ad356c2 +Author: Panu Matilainen +Date: Tue Sep 15 12:57:51 2009 +0300 + + Initialize rpm earlier in rpm2cpio (RhBug:523260) + - url retrieval requires macros to be loaded + +commit eeceb428951fd33b9bedbd4adba9f08e46a47dcc +Author: Panu Matilainen +Date: Tue Sep 15 11:05:27 2009 +0300 + + Take non-gi errors into account too (SuseBug:527191) + - patch from OpenSUSE / Michael Schroeder + +commit 4018bbd08e84fd0cc227dcb8d2dc20693ce2296a +Author: Panu Matilainen +Date: Tue Sep 15 10:56:58 2009 +0300 + + Allow absolute paths in file lists again (SuseBug:535594, RhBug:521760) + - patch from OpenSUSE / Michael Schroeder + - build-time generated file lists should be placed in the build directory, + but at least one valid use case for this is things like %files -f %{SOURCE10} + +commit b69c5cf90d74738214fa46c94f223ac9800487de +Author: Roland McGrath +Date: Wed Sep 9 11:07:10 2009 -0700 + + find-debuginfo.sh: use permissions 444 for all .debug files + + Signed-off-by: Roland McGrath + +commit d846e6b0f829791e6ffce4fd496c9378bff19c43 +Author: Panu Matilainen +Date: Tue Sep 15 08:45:14 2009 +0300 + + Don't add dependency type into file requires and provides (RhBug:523282) + - unintended change in commit 3d8656f040d2c780c88d0cd63594898f0605a6fa + +commit 7cd005ce7f5357e4905c920f0ddb576f055dae82 +Author: Panu Matilainen +Date: Mon Sep 14 13:23:34 2009 +0300 + + Clean up rpmalAllFileSatisfiesDepend() a bit + - avoid multiple strrchr() calls + - avoid _constfree(), the string size is known from strrchr() so we dont + need to allocate on heap at all + +commit cb2bd766ded51790353ae667aedbfeee0e9494f9 +Author: Panu Matilainen +Date: Mon Sep 14 09:48:49 2009 +0300 + + Single point of exit for doSetupMacro() to clean up freeing allocations + +commit 154462928eb6c391e2505ce7bc7354b1eb215f3c +Author: Panu Matilainen +Date: Thu Sep 10 17:16:12 2009 +0300 + + Oops, accessing the wrong header in processBinaryFiles() + - dumb mistakes from commit 4177fdffd6e7414123062e8716afb22596608531 + +commit cdb2cd545b7ba35fb641f165f2d1269d40fad690 +Author: Panu Matilainen +Date: Thu Sep 10 15:03:13 2009 +0300 + + Rip the broken asynchronous psm machinery + - it was only "used" for the ldconfig optimization and actually been + completely broken since the ordering rewrite + +commit 0b2858d13e0af704c7ace8b95751cc2dd60acd7c +Author: Panu Matilainen +Date: Thu Sep 10 15:02:36 2009 +0300 + + Rip the broken ldconfig optimization hack (RhBug:513224) + - it doesn't optimize much and what's worse, it sometimes optimizes out + calls that would've been necessary + +commit 5327ac46e53205bf5f5adc83d2487e77d6e44851 +Author: Panu Matilainen +Date: Thu Sep 10 14:14:49 2009 +0300 + + Rip unnecessary headerDump() and the last ancient artifacts using it + - xml format dump gives an output that can actually be further processed + +commit ec8f057f64cc119ed57a1aad9dc72f56da313a07 +Author: Panu Matilainen +Date: Thu Sep 10 14:05:08 2009 +0300 + + Rip unused and useless headerGetLangs() + - nothing in the world uses it and the info is available through + regular headerGet() anyway + +commit c1fb691ef7c5a9550c38ec43da69df1cc94729b5 +Author: Panu Matilainen +Date: Thu Sep 10 14:04:18 2009 +0300 + + Rip unused and useless headerUsageCount() + +commit 451bbb43a86cef57c7eb5a357ab817e9a44e6f74 +Author: Panu Matilainen +Date: Wed Sep 9 14:19:20 2009 +0300 + + Eliminate unused goo from findEntry() + +commit fc976d13b8ba5ee3cd44c5d32804c5a1c492494b +Author: Panu Matilainen +Date: Wed Sep 9 12:17:10 2009 +0300 + + Handle NULL header in doHeaderUnload() + - avoids having to separately check elsewhere and avoids segfaulting + on headerUnload() and headerReload() on NULL headers + +commit cec00141387db0435a9d60912b7bd3482596eb7a +Author: Panu Matilainen +Date: Wed Sep 9 11:52:47 2009 +0300 + + Eliminate pointless increment + +commit 1bc60ab06ed761182c8c530c0e44bc46cf403f61 +Author: Panu Matilainen +Date: Wed Sep 9 11:47:59 2009 +0300 + + Eliminate yet more unused calculations from header code... + +commit 43dfc9e8d01ad840a0420bcbf037244dfd300caa +Author: Panu Matilainen +Date: Wed Sep 9 11:42:18 2009 +0300 + + Eliminate unused pad calculations from header code + +commit 8dd2babb562aff4db947becdeeba3fd2fa1cca12 +Author: Panu Matilainen +Date: Wed Sep 9 11:38:28 2009 +0300 + + Eliminate yet another unused variable in header code + +commit 37f739c251055c87fbafead10b05fcba33145d7c +Author: Panu Matilainen +Date: Wed Sep 9 11:10:41 2009 +0300 + + Eliminate last remaining leftovers from "8/98 bug" workaround + - the ieprev calculations aren't used for anything, should've been in + commit 4d0d54492c7d539cc806ca9e7fa59e919c28e45d really + +commit 7e7c235b3438e0d147229eb14bce6f305f46bff1 +Author: Panu Matilainen +Date: Wed Sep 9 11:06:45 2009 +0300 + + Eliminate unnecessary variable & related goo from regionSwab() + +commit a2ba2b6ce0b1f924546619eb99ab60f758c07837 +Author: Panu Matilainen +Date: Tue Sep 8 14:11:59 2009 +0300 + + Initialize diff on declaration where it fits comfortably on one line + +commit 5a13d2ed21da68b4d9f16c1266ab1250f646c9e0 +Author: Panu Matilainen +Date: Tue Sep 8 14:10:34 2009 +0300 + + Move variable to block local scope, not needed elsewhere + +commit f3389c8794f99685eb9bd113b48dd844a93c57cc +Author: Panu Matilainen +Date: Tue Sep 8 14:07:52 2009 +0300 + + Remove unnecessary assignment, diff is block local scope here + +commit 1b617fd68b6250130bf8fb357df87a09c6691e59 +Author: Panu Matilainen +Date: Tue Sep 8 14:05:16 2009 +0300 + + Reduce the number of exit points in parseFormat() to error and ok cases + - avoid a dozen redundant freeFormat() calls and dont bother NULLing + local variable at the end + +commit 9f9ab48f719e9873f45e9c08d9f13030e98d057f +Author: Panu Matilainen +Date: Mon Sep 7 18:41:32 2009 +0300 + + Add -Wempty-body to default options if gcc supports it + - ...to help protect against screwups like + 2ee45ef12aaa958b78c56b6d83bb18aa6a477d15 + +commit f634253b323933e0383ca9097a77fc0731ad766e +Author: Panu Matilainen +Date: Mon Sep 7 17:50:43 2009 +0300 + + Eliminate unused variable + +commit c50851aa990aab57f9906d29555fb6443571a318 +Author: Panu Matilainen +Date: Mon Sep 7 17:39:39 2009 +0300 + + Eliminate unused variable + +commit 0232226ab1a5be31a0fdb5e0cdeb65e2430404df +Author: Panu Matilainen +Date: Mon Sep 7 17:10:12 2009 +0300 + + Minor rpmfcGenerateDependsHelper() cleanups + - initialize at declaration time, remove unnecessary variables etc + +commit ec65f5e5f0a56b398878f5087685b71942db362a +Author: Panu Matilainen +Date: Mon Sep 7 17:00:49 2009 +0300 + + Move rl to the scope where its needed, dont bother assigning NULL + +commit caa6dc91acd958928eeaf440ade7f01311bcf330 +Author: Panu Matilainen +Date: Mon Sep 7 16:59:01 2009 +0300 + + Single point of exit for doPatch() to clean up freeing + +commit 23307f3823bc0457cabb19c4bf9bfac0cdde84e8 +Author: Panu Matilainen +Date: Mon Sep 7 16:39:40 2009 +0300 + + Eliminate bogus variable initialization + - i isn't used outside the loop at the end, move it there... + +commit ef0adf1da10146fe5ba166feeba11961478af819 +Author: Panu Matilainen +Date: Mon Sep 7 16:34:20 2009 +0300 + + Add noreturn annotations to javadeps + +commit 6fb96f3847bed4c2aba52497eb26b0d2d52207f9 +Author: Panu Matilainen +Date: Mon Sep 7 16:23:32 2009 +0300 + + Help compilers/analyzers a bit with luaL_error() + - luaL_error() never returns but as other tools dont know this it + raises false alarms + +commit 475ba2111f5c3e0eb755a954785e09d3a35dfabf +Author: Panu Matilainen +Date: Mon Sep 7 15:52:36 2009 +0300 + + Add noreturn annotations to argerror() helper functions + +commit 59f791f591059ba44dcbbfe50fa20390e8565781 +Author: Panu Matilainen +Date: Mon Sep 7 15:07:12 2009 +0300 + + Add noreturn annotation to die() .. which itself should die + +commit 2bdd1a5f5c4b23612a7d87992597b1cd39db86c5 +Author: Panu Matilainen +Date: Mon Sep 7 15:04:01 2009 +0300 + + Avoid theoretical NULL pointer dereference + - if sbp ends up not set it's an "internal error" really, dont bother + with error message + +commit d510dfa538ed04b27bd3dc2fa75596f15bd4bee7 +Author: Panu Matilainen +Date: Mon Sep 7 14:54:45 2009 +0300 + + Avoid couple of (theoretical) NULL pointer dereferences + +commit 2b6b06eac19409c5835e8498121edbe38f66a7e0 +Author: Panu Matilainen +Date: Mon Sep 7 14:42:04 2009 +0300 + + Remove bogus non-null check + - rpmdsInit() only returns NULL if passed NULL, which can't happen + as ods is already verified to be non-NULL + +commit e3d00e0b26c0d04f7b00be58effc36300485a88b +Author: Panu Matilainen +Date: Mon Sep 7 14:15:56 2009 +0300 + + Ugh, erroneously introduced ; busting the conditional + - broken long time ago in commit 2ee45ef12aaa958b78c56b6d83bb18aa6a477d15 + +commit 429132522cbf52d4a062227eecc388854e253b94 +Author: Panu Matilainen +Date: Mon Sep 7 14:03:47 2009 +0300 + + Avoid potentially calling a NULL function pointer + +commit 712ee07e6155d12736989876eb8078355065b522 +Author: Panu Matilainen +Date: Mon Sep 7 13:19:23 2009 +0300 + + Eliminate unused calculations + +commit e16325d503cc7ba50f11fdebd77f9bae3bff0c8d +Author: Panu Matilainen +Date: Mon Sep 7 13:17:47 2009 +0300 + + Eliminate unused variable + +commit bd1507497a2601b9a054da567d7c4c82cf39008c +Author: Panu Matilainen +Date: Mon Sep 7 12:23:21 2009 +0300 + + Eliminate bunch of unused variables + +commit 95d9c3c21e4d84cbd98a195f5ab7579e32e58d74 +Author: Panu Matilainen +Date: Mon Sep 7 12:17:07 2009 +0300 + + Eliminate unused variable and pointless null-check + +commit 54df179b10d4277a182f016f2c3faa8572209362 +Author: Panu Matilainen +Date: Mon Sep 7 12:05:10 2009 +0300 + + Fix dumb some dumb leaks in python spec code + +commit 25d5968063683cb4f1059b23a83561e8dd399f9b +Author: Panu Matilainen +Date: Mon Sep 7 11:49:25 2009 +0300 + + Eliminate unused counter variable + +commit ba3a270fb5f830b75031652018cc7b4ffe26ed38 +Author: Panu Matilainen +Date: Mon Sep 7 11:44:44 2009 +0300 + + Remove unused initialization + +commit 90c60cc5bbf928824ab3a26b172e9432b8c93ef9 +Author: Panu Matilainen +Date: Mon Sep 7 11:42:28 2009 +0300 + + Remove redundant reinitialization, cleanup + +commit c51a167cb758aa378e27a9065b1641f758b11cac +Author: Panu Matilainen +Date: Mon Sep 7 11:16:16 2009 +0300 + + Add RPM_GNUC_NONNULL macro for portable use of gcc nonnull attribute + - gcc itself can only warn on literal NULL's passed where nonnull is + expected but static analyzers can make better use of the info + +commit d8cffcff15cb74d4b2db124711a16afdfc079500 +Author: Panu Matilainen +Date: Fri Sep 4 13:38:58 2009 +0300 + + Fix memleak in headerGetDumber() .. err .. Number() + +commit eabfd39c3b2fa3813d30bd9f1ba716c1fc88854f +Author: Jindrich Novy +Date: Thu Sep 3 07:57:34 2009 +0200 + + Handle .desktop files with spaces in filename (rhbz#520920) + - thanks to Edward Sheldrake + +commit 936e2570195d076ba36aa2bb93f04f395033945d +Author: Panu Matilainen +Date: Wed Sep 2 15:34:35 2009 +0300 + + Use %{nvra} as default query format, much simpler... + +commit a912ca599ce959dd15dc33378b1686dfc7c3aca8 +Author: Panu Matilainen +Date: Wed Sep 2 14:43:00 2009 +0300 + + Fix dumb thinko from commit 4177fdffd6e7414123062e8716afb22596608531 + +commit 8c04f809e5763475ae3f778fe2a195a4417013dc +Author: Panu Matilainen +Date: Wed Sep 2 14:08:57 2009 +0300 + + Take advantage of headerGetNumber() to get buildtime.. + +commit 80d61d995f26fc17a901526ba56a465d0b69b588 +Author: Panu Matilainen +Date: Wed Sep 2 13:53:27 2009 +0300 + + Further simplify rpmVersionCompare() + - headerGetNumber() side-effect of returning zero on errors fits this + job perfectly, simplifying things somewhat + +commit 9c7e4c70b9aaced9119150f7d60a1be17e4320ea +Author: Panu Matilainen +Date: Wed Sep 2 13:47:02 2009 +0300 + + Deprecate headerGetColor(), implement using headerGetNumber() + +commit e6b01b8f70b6bda85e83a5d50321e4745bad2b36 +Author: Panu Matilainen +Date: Wed Sep 2 13:46:23 2009 +0300 + + Eliminate headerGetColor() uses everywhere + +commit 3661e1d525f71c78b4a866380a934759ad215237 +Author: Panu Matilainen +Date: Wed Sep 2 13:57:54 2009 +0300 + + Add header color tag extension, ie headerGetColor() + - use common numeric tag generation helper for header color + and dbinstance tags + +commit 1bf0d80281f93bf84155cd9a1c741f5e3e6f8b37 +Author: Panu Matilainen +Date: Wed Sep 2 13:27:18 2009 +0300 + + Add convenience function for retrieving numeric header data + +commit b949efaec09a40d71ef889c09e96e4ff31209174 +Author: Panu Matilainen +Date: Wed Sep 2 13:24:59 2009 +0300 + + Oops, dont leak memory on invalid types to headerGet[As]String() + +commit 4149dfa7fedf79b28293a2b62400094de646d95d +Author: Panu Matilainen +Date: Wed Sep 2 13:06:25 2009 +0300 + + Take advantage of new header string getters + +commit e725cbe155f09c01ad2bc1dda64911ed81db6538 +Author: Panu Matilainen +Date: Wed Sep 2 13:00:59 2009 +0300 + + Clean up rpmtsAddInstallElement() a bit + - only bother retrieving os, arch and colors if actually needed + - obsoletes are never colored, remove the related cruft + +commit edc5d15db4037b981021f5fac92774b291b800a6 +Author: Panu Matilainen +Date: Wed Sep 2 12:43:24 2009 +0300 + + Take advantage of new header string getters + +commit 1d1b852ac9d9c327c6705cea7a7eead937d02e92 +Author: Panu Matilainen +Date: Wed Sep 2 12:39:06 2009 +0300 + + Take advantage of new header string getters + +commit 5deb850f37fa4092bee51a48719a237d36842b95 +Author: Panu Matilainen +Date: Wed Sep 2 12:38:20 2009 +0300 + + Take advantage of new header string getters + +commit 02a4806b4783ea5665a3010aca0ae05b9cf48024 +Author: Panu Matilainen +Date: Wed Sep 2 12:34:21 2009 +0300 + + Simplify rpmpsmStage() and srpm install a bit with the new getters + +commit e5c02700ae97315da52b08f50c1ba5f51a7d82c6 +Author: Panu Matilainen +Date: Wed Sep 2 12:24:01 2009 +0300 + + Simplify rpmVersionCompare() a bit + +commit 726c6be41ae0118c25f1606fe3daecab68fe34ef +Author: Panu Matilainen +Date: Wed Sep 2 12:19:15 2009 +0300 + + Simplify headerCheckPayloadFormat() a bit + +commit e0a4949bd41819431022fcd364817edd02cb0bef +Author: Panu Matilainen +Date: Wed Sep 2 12:08:33 2009 +0300 + + Deprecate headerNVR() and friends + - reimplement using the new generic getters to simplify + - mark as deprecated, no uses inside rpm remain + +commit b5bc388ee38de77691b63aa7f48b4928fe60c4e5 +Author: Panu Matilainen +Date: Wed Sep 2 12:06:34 2009 +0300 + + Eliminate uses of headerNVR() and friends in librpm (and python) code + +commit 4177fdffd6e7414123062e8716afb22596608531 +Author: Panu Matilainen +Date: Wed Sep 2 11:55:42 2009 +0300 + + Eliminate uses of headerNVR() and friends in librpmbuild code + +commit a5a9208b696860982faad4881eeec8aa0eb19648 +Author: Panu Matilainen +Date: Wed Sep 2 10:24:20 2009 +0300 + + Add tag extensions for common name-[epoch:]version-release[.arch] combos + - RPMTAG_NVRA same as rpm5.org, others are new tags + +commit e2239d295e6163d4d067bc3a9391997fa0e27367 +Author: Panu Matilainen +Date: Tue Sep 1 17:10:18 2009 +0300 + + Add two new convenience functions for header string data + - headerGetString() for retrieving const strings directly from header memory + - headerGetAsString() for converting any non-array tag to string + +commit 0fd95da2e7105f014475843f25f7e7270f4012d6 +Author: Panu Matilainen +Date: Tue Sep 1 15:08:58 2009 +0300 + + Add dbinstance tag extension (port from rpm5.org) + +commit 7c15b12f02c0fb71f5058bdcc585a766fbf5945f +Author: Panu Matilainen +Date: Tue Sep 1 13:31:20 2009 +0300 + + Group tag inheritance doesn't need special treatment, just copy with others + +commit a070010b7c27275dfec0e178c79a34b0ef109fa4 +Author: Panu Matilainen +Date: Tue Sep 1 11:38:06 2009 +0300 + + Triggerprein has been implemented since January 2008, update comment + +commit 75c0d816a8185177f7d69b68523a4e45b70e46f1 +Author: Panu Matilainen +Date: Tue Sep 1 10:52:12 2009 +0300 + + Add provide-extractors for fonts and desktop files + - extract mime handler capabilities from application .desktop files + - extract font family names and supported languages from font files + - both are used by PackageKit for on-demand installing of fonts and + applications, but are useful for other things too + +commit 457606983f6053eb3c053ea564937f184d2b9154 +Author: Panu Matilainen +Date: Tue Sep 1 10:40:50 2009 +0300 + + Further file-classifier tweaks + - disable "known tokens" lookups in ascii files, this is way too unreliable + to do anything but cause pain + - consider text files as RPMFC_TEXT consistently + - font metrics files are not fonts + +commit c3770c9404ffa2fcfbe0869dd7fbdb73466a637a +Author: Panu Matilainen +Date: Tue Sep 1 10:31:44 2009 +0300 + + Make internal file classifier look into compressed files + - prerequisite for various things like font provide extraction + - at least libmagic from file-5.00 leaked fd's with MAGIC_COMPRESS, + this has been fixed as of file-5.03 + +commit 1eb9ae13f66435060f7f1a6d27fea6e6965782d2 +Author: Panu Matilainen +Date: Mon Aug 31 13:00:18 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in python code + +commit 555af4eadb5ecb16e101b35cb6e931d3ff502d22 +Author: Panu Matilainen +Date: Mon Aug 31 12:55:33 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in binaries + +commit 0e8dd93796a8fdafcd0328f131c8f78f1b95a3cf +Author: Panu Matilainen +Date: Mon Aug 31 13:03:53 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in main ts code + +commit 9ff1cf55f4214f582808a2ad91d68332e0c7a87c +Author: Panu Matilainen +Date: Mon Aug 31 12:46:59 2009 +0300 + + Use rpmFileHasSuffix() instead of doing the same manually + +commit 746070ebe15022b482d6b3a5d54499ba09c5aa00 +Author: Panu Matilainen +Date: Mon Aug 31 12:43:02 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in header code + +commit 4ef65c9a4218f9b354b00708ee2126fb1b7bec74 +Author: Panu Matilainen +Date: Mon Aug 31 12:29:56 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in misc helpers + +commit 1cd1eba2ab619afd17228e326dda0a1b1b4c9a2f +Author: Panu Matilainen +Date: Mon Aug 31 12:22:53 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in fsm & psm + +commit 6585c6485ab318c836d16edc069bc1be01e0e425 +Author: Panu Matilainen +Date: Mon Aug 31 12:15:16 2009 +0300 + + sameProblem() return value is illogical, reverse it + +commit feece1341e32efeafa1fbdeb893e33629147603e +Author: Panu Matilainen +Date: Mon Aug 31 11:30:53 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in rpmrc code + +commit ecfe9a04f83999c75fcbc8b6d2d9c38e266765cc +Author: Panu Matilainen +Date: Mon Aug 31 11:22:47 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in backend code + +commit 36f8bc0f8ebc6029e8edb9ab537dc75e4e0091d1 +Author: Panu Matilainen +Date: Mon Aug 31 11:20:40 2009 +0300 + + Ugh, fix brokenness from previous commit + +commit f4b39519d32287b9f0ed8dc9ad93787ca6a63fcd +Author: Panu Matilainen +Date: Mon Aug 31 11:15:16 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in io code + +commit 0c4e48de7908823e19945887d5e7b6ee7fa6bedd +Author: Panu Matilainen +Date: Mon Aug 31 11:08:05 2009 +0300 + + Replace equal/not equal uses of str[n]cmp() with rstreq[n] in build code + +commit 7e841570fc4950724fb1be93512632b3fee73abd +Author: Panu Matilainen +Date: Mon Aug 31 10:44:35 2009 +0300 + + Hum, rename rstrneq() to rstreqn() to avoid confusing neq with "not equal" + +commit 8e9662bd4cedd1fc9e31ae18bc420bc2b24c7be1 +Author: Panu Matilainen +Date: Mon Aug 31 10:19:45 2009 +0300 + + Eliminate now unnecessary compressor -> ioflags conversions + +commit 5ca7197e33b0e02c42abc13ad953e5fa958f01f8 +Author: Panu Matilainen +Date: Mon Aug 31 09:44:52 2009 +0300 + + Accept direct compressor names as Fopen() modes too + +commit f9de5ed43058c207e70c86cdd8fa34cbfeb545cd +Author: Panu Matilainen +Date: Mon Aug 31 09:39:16 2009 +0300 + + Switch rpmio mode checking to use rstreq() + +commit a5de0df0cd48f2ad3d55657d1c79c9e88dafa965 +Author: Panu Matilainen +Date: Mon Aug 31 09:33:52 2009 +0300 + + Add two helper functions for comparing string equality + +commit 8f10f2362ec5820037591d01349e502868f89eb3 +Author: Panu Matilainen +Date: Fri Aug 28 15:43:07 2009 +0300 + + Eliminate unused result code from psm struct + +commit 41eb3ac5817ca0a6672a528bdc083b632c11d0bd +Author: Panu Matilainen +Date: Fri Aug 28 15:36:07 2009 +0300 + + Eliminate payload file handle from psm struct + - it's only needed locally inside PSM_PROCESS on PSM_INSTALL + +commit 96987afd73a68fd76b7135ea6b3a42733ecd2aae +Author: Panu Matilainen +Date: Fri Aug 28 10:52:49 2009 +0300 + + Don't try to incref NULL ds + +commit a40e3556765b4d30642601c89319db4b03780323 +Author: Panu Matilainen +Date: Thu Aug 20 14:10:41 2009 +0300 + + Remove extra trailing } copy-paste error from python_foo macros, duh + +commit 3ae20cd53dfdffbdc98cedc7a2d6fa5ccadb9ccd +Author: Panu Matilainen +Date: Thu Aug 20 13:04:21 2009 +0300 + + We always add EVR and Flags to dependencies, remove bogus condition + +commit 10772ac7dfad60cb5a20681d22cf851468d0a8f9 +Author: Panu Matilainen +Date: Thu Aug 20 13:02:05 2009 +0300 + + Fix duplicate dependency checking on build + - Broken by commit af8b41c64af39ce07d85fcd92fa78d566747d815 which + simplified too much. + - There's no guarantee that rpmdsNew() returns a sorted dependency set + so rpmdsFind() doesn't work correctly here. Walk the ds manually instead. + - With multiple triggers of same type, identical trigger conditions on + different trigger script were seen as duplicates (RhBug:490378) + - Split the duplicate checking to separate helper function for clarity + +commit 634a67d055444593a47a21e9e9ea00df65e63d63 +Author: Panu Matilainen +Date: Tue Aug 18 11:46:12 2009 +0300 + + Copy BUGURL to source rpm's too + - should've been in commit 86032bfbb61f1bdee9ac42989a14ea40bed0deec, duh + +commit 3e5097c97541fa0b8f289ef3b6011bdc3b4dc002 +Author: Panu Matilainen +Date: Tue Aug 18 09:20:45 2009 +0300 + + Add some commonly used python macros (ticket #83) + - macros to determine python version and library paths + +commit 4ced96c5f2469786f5d8f9b14583f191b15a302f +Author: Panu Matilainen +Date: Mon Aug 17 15:06:39 2009 +0300 + + Eliminate unused code (leftover from ordering rewrite) + +commit 80a8a5b518c218287f2f2fd3d7d3b071efbb8ca1 +Author: Panu Matilainen +Date: Mon Aug 17 14:40:39 2009 +0300 + + Don't bother relocating packages no files + - fixes a small memleak + +commit d8cde273e5523364df4f4f9ae7ad3374cf02e549 +Author: Panu Matilainen +Date: Mon Aug 17 12:07:48 2009 +0300 + + Avoid adding Lua sources and patches twice when recursing (ticket #82) + - parseSpec() operates on newly created empty spec structures even when + "recursing" but the lua variables are global and need recursion + protection to avoid adding multiple times + +commit 3fc58248d23d6f720942e5cbf4f92db246a802f0 +Author: Panu Matilainen +Date: Mon Aug 17 11:22:16 2009 +0300 + + Add default %clean section unless overridden in spec (ticket #81) + - avoids silly clutter in every specfile in the regular case but permits + overriding if needed for whatever reason + - it's a spec behavior change but mostly backwards compatible: + existing specs will do whatever the %clean does, and if you need to avoid + calling %clean for whatever reason just keep an empty %clean in the spec + +commit 859dd6d4d248a8277aad1bc72d1ab6b6fefa8e0d +Author: Ville Skyttä +Date: Tue Jun 16 22:25:02 2009 +0300 + + Add -d option to %patch. + +commit 511d41abc5089884329a681935976c459b141af9 +Author: Panu Matilainen +Date: Fri Aug 14 11:30:07 2009 +0300 + + Add isSource() method to python header object (ticket #32) + +commit 883253ea6af71f8063d7a045841c35bad22147e2 +Author: Panu Matilainen +Date: Fri Aug 14 11:27:57 2009 +0300 + + Add %make_install macro that does the "right thing" wrt modern autotools + - old %makeinstall for broken/ancient autotools left untouched for + backwards compatibility + +commit 7f7188a3962b676dfa8b8996c15ff8f48ff5694c +Author: Jindrich Novy +Date: Fri Aug 14 09:36:26 2009 +0200 + + Add bug URL macro so that it could be set distro-wide (rhbz#512774) + +commit 3f29577dd441c4e7383c8fadad1d5b12a5c13729 +Author: Panu Matilainen +Date: Thu Aug 13 17:22:53 2009 +0300 + + Update querytags test to match current output + - should've been in commit 86032bfbb61f1bdee9ac42989a14ea40bed0deec, duh + +commit 1d61f3e34b677c0b1f6d9f5de8f6996730a0261f +Author: Panu Matilainen +Date: Thu Aug 13 17:11:47 2009 +0300 + + Build script environment tweaks to improve reproducability + - unset CDPATH (RhBug:426955) and DISPLAY environment variables + - always run in C locale + +commit de218d7069294c615dd45cf274dd109ebbdce335 +Author: Panu Matilainen +Date: Thu Aug 13 16:46:18 2009 +0300 + + Don't set --target in %configure (RhBug:458648) + - --target is only ever useful for handful of compiler toolchain packages + and cross-compiler packages are better off setting it themselves if + necessary, rpm messing here only gets in the way + +commit 91af91ef8e6b4b7314791948abd3ff4247739a44 +Author: Panu Matilainen +Date: Thu Aug 13 16:44:59 2009 +0300 + + Nuke long since dead version of %configure macro + update commentary + +commit 86032bfbb61f1bdee9ac42989a14ea40bed0deec +Author: Panu Matilainen +Date: Thu Aug 13 15:45:56 2009 +0300 + + Add an option bug reporting URL tag to packages (RhBug:512774) + +commit 0466fd7f89d17c0a8190bd9d3d52bc4540c9f47d +Author: Panu Matilainen +Date: Thu Aug 13 11:46:56 2009 +0300 + + Add missing include in rpmsq.h (ticket #87) + - patch from Michal ÄŒihaÅ™ + +commit db5ac1e44a7c6744abde6b92d2e1c17bd238739a +Author: Panu Matilainen +Date: Thu Aug 13 10:35:01 2009 +0300 + + Bump version to appear newer than 4.7.x branch + +commit 241581a93ed0591bfae162089d9e61a606201fb4 +Author: Jindrich Novy +Date: Wed Aug 12 16:06:08 2009 +0200 + + rpmbuild won't segfault when %including spec with zero size + +commit 3b7d3b0c19e2ea4f402bba8f014920eabe0415e0 +Author: Ville Skyttä +Date: Tue Aug 4 00:34:31 2009 +0300 + + Add *.xz and *.lzma recompress support to brp-compress. + +commit f6982a403b284012abc846d9f4e5155ad84fac35 +Author: Jindrich Novy +Date: Thu Aug 6 14:16:02 2009 +0200 + + Correctly inherit default %attr(-,-,-) attributes from %defattr (rhbz#515685) + +commit 69702c1de3e24bb44f741fbad6e961213f8db9e4 +Author: Panu Matilainen +Date: Thu Jul 23 12:24:10 2009 +0300 + + Kill off lclint remnants everywhere + - remove ancient and likely irrelevant LCL comments and bogus NULL checks + +commit 52e4b9bcaca60499e8bb7f23eb590ce01c89c574 +Author: Lubomir Rintel +Date: Tue Jun 23 00:49:17 2009 +0200 + + Fix memory allocation for token array + + This fixes a memory corruption due to write access out of + bounds of token array, whose size was computed incorrectly. + It was assumed that only '%' characters separate tokens, + which could lead to crashes on useless uses of '[' tokens, + such as "rpm -qa --qf '[]lalala'". + +commit d8071161f98ff703846281466cccf880e9dcb5c5 +Author: Panu Matilainen +Date: Tue Jul 14 14:25:58 2009 +0300 + + Log an error on short lead (RhBug:511101) + - if lead read returns short without it being an IO error, treat it + as a case of "not an rpm package" + +commit 7baf3235d2263d456fd11b6fa3ad605d0d1d1136 +Author: Panu Matilainen +Date: Tue Jul 14 13:56:27 2009 +0300 + + Honor --nofiledigest on install too (RhBug:508021) + - query and install options clash, use popt callback to enable processing + +commit 16be29746ce4ecdedb2034c8d97b6455ba5ae620 +Author: Panu Matilainen +Date: Tue Jul 14 11:54:43 2009 +0300 + + Document --nodeps in rpmbuild manual (RhBug:482921) + +commit b8102d8f6150b0438ba91cd53ff86a5391e8bdcf +Author: Panu Matilainen +Date: Tue Jul 14 11:24:02 2009 +0300 + + Dont accept '-' in manifests (RhBug:461353) + +commit 0114bb51dd85dc4a875d5b9f8f9775a05ecd4187 +Author: Panu Matilainen +Date: Tue Jul 14 11:15:30 2009 +0300 + + Dont treat filenames starting with - as stdin + +commit 666e26bd7a229063e6cab068c94b56e1b35e7ddb +Author: Panu Matilainen +Date: Thu Jul 9 15:07:38 2009 +0300 + + Oops, missing include for dirname() + +commit 17f9073278206a979829fa41ac496476dde1a3ef +Author: Panu Matilainen +Date: Thu Jul 9 14:40:17 2009 +0300 + + Create the directory used for transaction lock if necessary + - otherwise at least rpm --initdb can fail due to transaction locking failing + +commit bcb71f69d2524ee51535c50b51ae6b4aa133abc8 +Author: Panu Matilainen +Date: Thu Jul 9 14:01:13 2009 +0300 + + Fix package relocatability checking, broken since forever + - at the time relocation problems are added, ts problem set is NULL + and rpmtsCheck() wipes it out anyway so the problems from relocation + are never seen anywhere + - The header isn't available at transaction prepare stage where most + problems are checked for, so we can't validate the prefixes at that + point. Add a per-element problem set to carry the problem data and + merge it to ts problem set when checking for other problem types. + +commit 7c512db91281a53f1dc783732e310f311382ae8c +Author: Panu Matilainen +Date: Thu Jul 9 13:43:10 2009 +0300 + + Make rpmpsUnlink() behave the other fooUnlink() functions + - pretty much everything else in rpm returns NULL from unreference functions, + make be more consistent here... + - also tolerate NULL in both reference and unreference + +commit 6ffeec9d7f57ebb520d15581d55555244c0f3058 +Author: Panu Matilainen +Date: Thu Jul 9 13:39:55 2009 +0300 + + Add reference counting to rpmProblems + +commit cb8241dda783f7e8c143b08fecf57fe89a39c3a6 +Author: Panu Matilainen +Date: Thu Jul 9 11:03:54 2009 +0300 + + Unbreak --excludepath (RhBug:409637) + - excluded paths aren't counted as actual relocations, dont bother + checkig addPrefixes() return + +commit 2db564a85a57db624cc73dd0bb7b2875cff44f3d +Author: Panu Matilainen +Date: Thu Jul 9 09:28:45 2009 +0300 + + Fix compiler warning on const free + - we dont need popt to set the file variable as we manually process + +commit 6649c23cac5823d0c7415df5cfd66e5aac5eebd2 +Author: Panu Matilainen +Date: Wed Jul 8 16:20:06 2009 +0300 + + Make verify result not depend on verbosity level, uff... (RhBug:510213) + +commit 33d829d362ef7d529268b99e2f943d2ecda07d59 +Author: Panu Matilainen +Date: Fri Jul 3 15:12:07 2009 +0300 + + Add an index for obsoletes (RhBug:507702) + +commit 683d30858610c548ae3a3999b458b438d7275546 +Author: Panu Matilainen +Date: Fri Jul 3 14:46:06 2009 +0300 + + Unify extension + header data getter calling conventions + - simplifies headerGet() & friends a bit and reduces redundancy + - also just return an error instead of dying with assert on NULL td argument + +commit e18aedbf97d0948b9010877270d9559d8a64c861 +Author: Panu Matilainen +Date: Fri Jul 3 14:21:01 2009 +0300 + + Pass headerGet flags to extensions too (unused for now) + +commit 4d0d54492c7d539cc806ca9e7fa59e919c28e45d +Author: Panu Matilainen +Date: Fri Jul 3 13:11:35 2009 +0300 + + Eliminate unused calculations originating from the "8/98 bug" + - the tl calculation has been unused since commit + 5994a308bc062fff53ff0184b8dea15d19fcfb63 in 2001 and we dont even + read rpm 2.x packages anyway... + +commit 5dfb57ba3c65b4b3a383361950eec31865ebf75c +Author: Panu Matilainen +Date: Fri Jul 3 12:13:54 2009 +0300 + + Re-enable rdlen vs dl header check + - we dont even read packages from the "8/98 bug" era anymore, hardly relevant + +commit c685667475d70daabac9ae224979abbd1f86987a +Author: Panu Matilainen +Date: Wed Jul 1 13:59:53 2009 +0300 + + Band-aid to dependency caching misbehaving with chrooted verify (RhBug:508074) + - disable dependency caching on chrooted verify to avoid ugly spew + from paths containing outside paths while we're actually inside the + root during verification + - correct fix would be to fix the temporary db path calculation + +commit d3956140c2757a5929d4517cf54e5d9c06e11355 +Author: Panu Matilainen +Date: Fri Jun 26 16:24:55 2009 +0300 + + Handle hook unregistering itself + +commit d1b399761ffe554f3f3c4ced187c3b8ec58233fb +Author: Panu Matilainen +Date: Fri Jun 26 16:07:50 2009 +0300 + + Fix rpm.unregister() Lua extension + - hook data is userdata, not light userdata + +commit 02f9f3fbdd5e0cc858ab46da9a11e04110f92462 +Author: Panu Matilainen +Date: Fri Jun 26 15:39:20 2009 +0300 + + Add base64 encode and decode extensions to the lua interface + +commit edbc9ead961fcbeb1733b47405041b653b521bcb +Author: Panu Matilainen +Date: Fri Jun 26 12:31:57 2009 +0300 + + Base64-encode %policy files to ensure it can be presented as strings + - RPMTAG_POLICIES is a string array but there's no guarantee that + something marked %policy is a plaintext file that can be represented + as \0-terminated string, base64-encoding them fixes that. Baby steps + towards making %policy remotely usable, related to RhBug:505066. + - Also remove unnecessary failure code setting, processMetadataFile() + assumes failure already, and dont try to insert NULL strings in case + b64encode() or pgpArmorWrap() fails + +commit 8c5437b37914bd098a9f13366e53aba5a1c9cf15 +Author: Panu Matilainen +Date: Thu Jun 25 17:17:16 2009 +0300 + + Kick out silly constfree() use + +commit 271069f90046994b005a469c80c2e150a41af9f3 +Author: Panu Matilainen +Date: Wed Jun 24 15:16:25 2009 +0300 + + Simplify logging a bit + - precalculate the message length, relying on C99 vsnprintf() semantics + - generate the log message and rest of the record in rpmlog() already, + and just pass the record to lower level to do actual logging + - also something was wrong in the old version as valgrind complained + about illegal reads, that is also cured here + +commit 51520de1d3dffedc0c047b6da3fa68e98c92acc0 +Author: Panu Matilainen +Date: Tue Jun 23 17:50:08 2009 +0300 + + Set HEADERFLAGS_ALLOCATED centrally from headerLoad() + - requiring every caller to handle this separately, violating header type + opaqueness in the process, doesn't seem that bright an idea + - also fix a memleak on signature header read in case of failure + +commit b02893092594b868296c5b3f58ab631e368bae1a +Author: Jindrich Novy +Date: Tue Jun 23 11:05:06 2009 +0200 + + Teach %files to accept multiple filelists (ticket #70, rhbz#475359) + +commit 27263f94bd18ea0d86b1b85511ef10a7f573aa92 +Author: Jindrich Novy +Date: Tue Jun 23 10:56:53 2009 +0200 + + Allow ':' character in EVR, it's needed for Epoch separation + +commit 194b6a5c2ab37753a143cd4d710bd09ccc0502e2 +Author: Jindrich Novy +Date: Tue Jun 23 10:55:54 2009 +0200 + + Check arg in argvJoin() before dereferencing + +commit 215607caa52112bd8989ee1e6c58205c1881b6a3 +Author: Panu Matilainen +Date: Tue Jun 23 10:03:58 2009 +0300 + + Updated Polish translation (ticket #74) + +commit 0975d1e2c04718e290f868c77613640c044ce4f7 +Author: Panu Matilainen +Date: Tue Jun 23 09:56:04 2009 +0300 + + Fix some typos in javadeps usage message (ticket #72) + +commit 6b6e82f8e9c11aeecbd47038a0c637ff5c8f8a1f +Author: Panu Matilainen +Date: Thu Jun 18 14:52:45 2009 +0300 + + Add -h/--help to rpm2cpio (ticket #63) + - patch originally from Debian, with slight adjustments to indentation + +commit 4abfb4c186e1c3ad72c0899048d306a35a43fe8c +Author: Panu Matilainen +Date: Thu Jun 18 14:19:59 2009 +0300 + + Updated German translation from Micha Pietsch (RhBug:506607) + +commit 31301b579faed5eb58ba648d74b0ad7c5fea66f5 +Author: Panu Matilainen +Date: Thu Jun 18 14:16:46 2009 +0300 + + Updated German translation from Micha Pietsch (RhBug:506607) + +commit 7417cd283a3641ee62b282ae36c5d2d7df349d04 +Author: Panu Matilainen +Date: Thu Jun 18 13:06:42 2009 +0300 + + Pile of OSGi dependency generator fixes from Alphonse Van Assche (ticket #39) + - use Temp perl module to provide temp dir + - re-enable deps solving in Require-Bundle, Import-Package, Export-Package + OSGI properties + - remove uses bundle of Export-Package OSGI property + - use RPM '>=' as version operator to match OSGI '=' + - remove all .0 at the end of the version string + - typo fixes + +commit d5f6d1854094b659c4f02f86100c426e2279e642 +Author: Panu Matilainen +Date: Wed Jun 17 15:06:06 2009 +0300 + + Delay fingerprint cache init + lookup until we know there are some matches + - no point going to fs if there are no matching files in the rpmdb + - use allMatches count as size hint to fingerprint cache instead of + arbitrary 20 + +commit 71475e314a6c7af0a3dc2cae7e846663f8f7f620 +Author: Panu Matilainen +Date: Wed Jun 17 15:04:41 2009 +0300 + + Permit NULL in fpCacheFree() + +commit 0055fecfde5404c5106ac0fc58052e9264da8592 +Author: Panu Matilainen +Date: Wed Jun 17 13:09:25 2009 +0300 + + Fix invalid memory access from freeing dirName too early + - if it doesn't crash, it can cause rpmdb provided file not seen in chroot, + the other half of RhBug:506323 + - streamline exit points to enable freeing allocated resources sanely + +commit 1b9e6d7f48a68fd677c70d04c9a6bb4274cf7b9f +Author: Florian Festi +Date: Tue Jun 16 17:37:40 2009 +0200 + + Fix Segfault for to be installed symlinks pointing to existing locations + fixes rhbz#505777 + +commit 5f57e212516cc6ea5b9dd8276977d85a07eeec56 +Author: Panu Matilainen +Date: Tue Jun 16 18:19:40 2009 +0300 + + Eliminate now unnecessary artifacts of rpmdsNext() side-effects + +commit 7fd95d099f232a54d772379fc9769eb3c2453fed +Author: Panu Matilainen +Date: Tue Jun 16 18:15:31 2009 +0300 + + Generate DNEVR string lazily on rpmdsDNEVR() calls + - avoids useless string churning on rpmdsNext() when most paths dont + actually use the DNEVR string for anything + - make sure DNEVR is freed whenever iterator index changes + +commit 61acdba023167c73cf0db124f0ae8c09c8f387d6 +Author: Panu Matilainen +Date: Tue Jun 16 17:49:44 2009 +0300 + + Eliminate epoch promotion debug cruft + - might've been useful back in the day but... + +commit 90b70ebd3460ca39427e37da2115f48df00879d3 +Author: Panu Matilainen +Date: Tue Jun 16 17:36:21 2009 +0300 + + Determine rpmlib deps from flags instead of comparing strings + +commit a4ac4e48ec5897e33f35c0242c4f0c79c2f9ce2c +Author: Panu Matilainen +Date: Tue Jun 16 17:23:17 2009 +0300 + + Validate rpmlib dependencies on src.rpm install (RhBug:490613) + - other src.rpm dependencies are only relevant for building, but rpmlib + features can affect src.rpm "install" too, such as unsupported file + digests, payload compressors etc + +commit 8f44f9159cb1f522f20b88821bab38e4ee0ef565 +Author: Jindrich Novy +Date: Tue Jun 16 13:53:42 2009 +0200 + + Don't check Provides/Requires for bad characters, they could be UTF-8 + - don't check Name but EVR in parseRCPOT() + - use rpm namespacing for charCheck() + - remove unused variable + +commit 71a7dd8b7a2df677214c18473eac661ea38fb649 +Author: Panu Matilainen +Date: Tue Jun 16 13:52:43 2009 +0300 + + Add debugedit support for DWARF-3 (RhBug:505774) + - patch from Jakub Jelinek + +commit 83513ded75c50be90d9b8c4c6c879f67fa1a47bb +Author: Panu Matilainen +Date: Mon Jun 15 15:21:27 2009 +0300 + + Rip hardcoded libgcc + glibc static helper kludges + - shouldn't be needed anyway anymore as package of preferred color should get + always installed first, and the issue is solvable in packaging anyway + +commit ad53979f9ae024083b7f29fe7a914531e487be07 +Author: Jindrich Novy +Date: Mon Jun 15 08:47:55 2009 +0200 + + Check for valid chars in Requires/Provides as well + +commit 8d79668a137e93b5b15613b6f8769d72df831fea +Author: Panu Matilainen +Date: Fri Jun 12 08:52:38 2009 +0300 + + Fix out of source directory build (ticket #65) + +commit a86291ff774ff10277da4452fc47fc9870ccc991 +Author: Panu Matilainen +Date: Fri Jun 12 08:33:29 2009 +0300 + + Add parentheses (as kindly suggested by new gcc...) + +commit 17d66c47b181d9300dfc3813e8dd86d31c7b99a6 +Author: Panu Matilainen +Date: Fri Jun 12 08:29:02 2009 +0300 + + Make peace with newer git + +commit af0ea37a918690626c9385af5d22f7d007a285dd +Author: Panu Matilainen +Date: Thu Jun 11 17:22:59 2009 +0300 + + Make rpmalSatisfiesDepend() smarter + - Instead of blindly picking the first match, try to pick the best provider + for the dependency: for colored dependencies, try to find a provider of + matching color. For non-colored dependencies, prefer providers of + transaction preferred color. + - This avoids creating bogus and loopy relations between 32- and 64-bit packages + where they dont exist, and makes behavior with things like /sbin/ldconfig + consistent by returning the preferred colored element. + +commit 31f0d94df1c50a7a2802c76f491620be22b9a8fa +Author: Panu Matilainen +Date: Thu Jun 11 17:16:03 2009 +0300 + + Add preferred color to rpmal + +commit 85f9df3c0d511cb1e84484c8d616b98e5e4a2123 +Author: Panu Matilainen +Date: Wed Jun 10 17:22:03 2009 +0300 + + Update translations for a change (due to depends.c -> order.c split) + +commit 57884ba0d33482978a2f5f71a9cbad062354850d +Author: Panu Matilainen +Date: Wed Jun 10 17:19:27 2009 +0300 + + Split ordering code to separate source file + +commit 4e331d1dbb526c0b80d9816ca4e47b21a91f17b7 +Author: Jindrich Novy +Date: Wed Jun 10 11:52:53 2009 +0200 + + Add new function to check valid characters in NVR (ticket #59) + +commit 53e48bc469eb0dbea0629efa9abadad0d9b4bdea +Author: Jindrich Novy +Date: Wed Jun 10 09:16:45 2009 +0200 + + Nuke useless compatibility stuff and put V/R checking where it belongs + +commit 7653f770130626dd42e57395d232696d47e66ca3 +Author: Jindrich Novy +Date: Tue Jun 9 10:29:01 2009 +0200 + + Make whitelist of characters allowed in NVR (ticket #59, rhbz#493157) + +commit dee5d0e2308092b45af17bbc2a4aff4089b8a56f +Author: Panu Matilainen +Date: Mon Jun 8 14:48:36 2009 +0300 + + rpmdsInit() and rpmdsNext() can handle NULL ds, no need to separately test + +commit 9fe316637dfef728b5f1e337d2b84955db8376f2 +Author: Panu Matilainen +Date: Mon Jun 8 14:43:45 2009 +0300 + + Minor rpmtsOrder() cleanup + - initialize on declaration + - remove unused code + +commit 05f44fd2647def8e08e199a7f5e492389ca66065 +Author: Panu Matilainen +Date: Mon Jun 8 14:24:14 2009 +0300 + + Clean up relation recording a bit + - rpmdsInit() and rpmdsNext() can handle NULL ds correctly, dont bother + separately checking here + - te type doesn't change inside rpmdsNext() iteration + - added vs installed difference is handled inside addRelation(), otherwise + the cases here are identical except for the al + +commit 7c14d1953b8d23d4cd809f896b761b607a77e483 +Author: Panu Matilainen +Date: Mon Jun 8 14:13:58 2009 +0300 + + Dont bother adding dependencies to self, ever + +commit ace4cbf45e68d5418f4dd377c050b5b470e3b5eb +Author: Panu Matilainen +Date: Mon Jun 8 14:10:44 2009 +0300 + + Determine rpmlib and config deps from flags instead of comparing strings + +commit 085f75f68d19913cf3ef9650ce2a73b115409489 +Author: Panu Matilainen +Date: Fri Jun 5 15:00:33 2009 +0300 + + Map legacy PreReq into pre and preun scriptlet dependencies in ordering + - this gives close enough semantics for packages that rely on old + PreReq behavior (eg RHEL 4-5 package set ordering is completely broken + without such mapping) + +commit b22fa73fea6873dfc3816433e130820a5d9f33da +Author: Panu Matilainen +Date: Fri Jun 5 14:56:49 2009 +0300 + + Unbreak isLegacyPreReq() + - long long time ago the PREREQ bit was also turned on for scriptlet + dependencies etc, this is no longer the case so the old mask doesn't work + - build part is not affected by the mask change as we never set + PREREQ bit by ourselves + +commit c33d80aae907726f49d9197e557cb8213bd85c13 +Author: Panu Matilainen +Date: Fri Jun 5 14:50:01 2009 +0300 + + Use specific types for sense flags + te type instead of generic int + +commit 50fe90eeb59d7b3dc0495bc719c5a84cddd8cbb3 +Author: Florian Festi +Date: Tue Apr 14 10:54:58 2009 +0200 + + Rewrite ordering + - Detect strongly connected components (SCCs) using Tarjan's SCC algorithm + - Use Dijkstra's algorithm to find the best relations to zap + - Add forward relations for the Dijkstra's algorithm + - Separate the per package ordering data and the relations + +commit aefe94178709cd4c42fc87e2421106421d7f9bd4 +Author: Rakesh Pandit +Date: Thu May 28 12:21:08 2009 +0530 + + Removing extra useless 'break' statement lines and unhandled FTS_FOO cases. + +commit 0a48a2e2425fc15f124d3333daf3f5a5a5ece232 +Author: Rakesh Pandit +Date: Thu May 28 12:13:40 2009 +0530 + + Removed 'xx' variable in rpminstall.c + - in setNotifyFlag, rpmShowProgress and rpmInstall functions. + +commit cff4eddfd2a619ae75383630442a6f3ac54245f3 +Author: Rakesh Pandit +Date: Thu May 28 12:11:03 2009 +0530 + + Removed rpmEIU memeber 'fd' -and its usage in tryReadFoo functions. + +commit 2d2aaebce79d0fd48b9fe82f61356f9e8190e915 +Author: Rakesh Pandit +Date: Tue Jun 2 10:43:59 2009 +0530 + + Updated mailing list information. + +commit 400bc0224d308b84ab0fde6157536ff67ea093da +Author: Panu Matilainen +Date: Tue Jun 2 09:42:04 2009 +0300 + + Remove toplevel TODO too, nobody updates it and we have Trac now + +commit 27d1f56f2945c59b39668685090977c6c2635431 +Author: Panu Matilainen +Date: Mon Jun 1 15:32:26 2009 +0300 + + depMsg doesn't need _notpre() anymore + +commit 4cf62df1081355c5d73078c128f8dbab57d12c64 +Author: Panu Matilainen +Date: Mon Jun 1 14:54:59 2009 +0300 + + Remove leftover build/TODO file from 1998 / rpm 2.5 era... + +commit 4913f48d08516aa9f369cec50376f2ec52afc1e2 +Author: Panu Matilainen +Date: Mon Jun 1 14:48:58 2009 +0300 + + Generate spec part string lengths at build time and make it const + +commit 317533ce3134d05fc9f30fb29238d3fb2ed4bc6b +Author: Panu Matilainen +Date: Mon Jun 1 14:45:44 2009 +0300 + + Generate preamble tag lengths at build time and make it const + +commit 7c98cfb220e8265fc4f3530da2cd1cb95859fddc +Author: Panu Matilainen +Date: Mon Jun 1 13:39:00 2009 +0300 + + Issue deprecation warnings for PreReq and BuildPreReq + +commit c0ed5b0a35d4819782a5f069a70893f19d3ded9f +Author: Panu Matilainen +Date: Mon Jun 1 13:37:20 2009 +0300 + + Turn unused spec syntax obsoletion mechanism into deprecation warning + +commit 95c9e817ef6ed2cda5629f0c5edb6f7b19c209cf +Author: Panu Matilainen +Date: Mon Jun 1 13:28:50 2009 +0300 + + Map PreReq into Requires(pre,preun) at build + - this gives a more reasonable mapping to former behavior of PreReq + when cutting loops + +commit 9c7bcba82ac3bbf792d6b86bcb45c60405b0db00 +Author: Panu Matilainen +Date: Mon Jun 1 12:53:08 2009 +0300 + + Deal with multiple scriptlet dependency bits in deptype format extension + - rpmbuild permits Requires(post,postun) style notation which gets lumped + into single dependency, report them all + +commit 67bd81fb25a2a57adc97172cf426c475aea41612 +Author: Panu Matilainen +Date: Mon Jun 1 12:42:07 2009 +0300 + + Bring back former value of RPMSENSE_PREREQ + - packages using the legacy PreReq still widely exist distros having + patched PREREQ back in, we'll want to be able to deal with the legacy + packages best we can, and to do that we need to be able to test for + the prereq bit + - this also fixes ordering brokenness introduced by commit + 502f88e0e67bb1df91e09a32a370b04bda36259e all the way from 2004: + with RPMSENSE_PREREQ equalling RPMSENSE_ANY, all co-requisites are seen + as pre-requisites due to isLegacyPrefix() returning bogons (RhBug:502269) + - previously RPMSENSE_SCRIPT_PRE etc were also marked RPMSENSE_PREREQ to + permit legacy rpm versions to deal the fine grained scriptlet dependencies + somehow, this we dont want anymore + +commit f243eb7d004394176c64ff24b5a461deb54d866b +Author: Panu Matilainen +Date: Mon Jun 1 10:39:07 2009 +0300 + + Avoid filtering out erase pre-requisites on install + - Requires(pre,preun) etc are recorded as a single dependency entry, + so filter out dependencies that are only install pre-requisites + +commit 03e456de4a0ea7d574a7aeb3aa41937e1b7d18ee +Author: Panu Matilainen +Date: Fri May 29 11:03:33 2009 +0300 + + Build prereq is exactly the same as buildrequires + +commit cdfd0934841d4eccc26d7da7c35b23e6e9f76a9c +Author: Panu Matilainen +Date: Fri May 29 09:02:44 2009 +0300 + + Fix calculation of hardlinked files (RhBug:503020) + - regression from commit 899dfb58927ec6e91014773430824462f4d0002e, + size of hardlinked file set is the size of one file of the set + - add isHardLink() internal helper to avoid a copy-paste code + +commit 04ec8e9fca9c309367d497feef08e15e03bde120 +Author: Panu Matilainen +Date: Fri May 22 13:54:08 2009 +0300 + + Couple of documentation typos + +commit 7ac37e98579ea0a870ddab0675d9bac59e107857 +Author: Panu Matilainen +Date: Fri May 22 10:04:20 2009 +0300 + + Clean platform files on uninstall + +commit 03e36789b62010026f099e885546be005a62461a +Author: Panu Matilainen +Date: Fri May 22 09:56:43 2009 +0300 + + Include from src, not build dir + +commit 1195233d39d327c88645eee0f7e279fd5b648ce8 +Author: Panu Matilainen +Date: Wed May 20 17:53:50 2009 +0300 + + Remove unnecessary includes + other minor include corrections + +commit 44cd276bc2bec0bbb3a177b845b3a02d00732506 +Author: Panu Matilainen +Date: Wed May 20 17:22:51 2009 +0300 + + Eliminate useless pgpDig nbytes counter + - nothing at all uses this, dont bother + - if plaintext size of digests is needed, the correct place to calculate + it is in the digest routines, not manual beancounting all over the place + +commit 9acfa19a0da514f64f17cb4e76603ed48ec8db1d +Author: Panu Matilainen +Date: Wed May 20 17:20:43 2009 +0300 + + Remove size "signature" verification + - rpm itself hasn't used this for anything in ages, its broken too for + quite some time and nobody noticed -> nobody's going to miss this + +commit 438d943e11f54a6c8b16a742ee27f48a925cd005 +Author: Panu Matilainen +Date: Wed May 20 17:19:46 2009 +0300 + + Refactor ts out of main read package function + - Add a lower level rpmpkgRead() which just takes keyring and verify + flags, rpmReadPackageFile() is just a wrapper around it now + - Avoids several levels of unnecessary keyring references through + rpmtsGetKeyring() + - Pretty much loses package reading statistics but shrug... + +commit ddb263adfccb42cedf762a65b800f2f938506fe8 +Author: Panu Matilainen +Date: Wed May 20 17:19:06 2009 +0300 + + Refactor ts out of main header read function + - Add a lower level rpmpkgReadHeader() which just takes keyring and + verify flags, rpmReadHeader() is just a wrapper around it now + +commit 072f6fd8805cf1083eabd435689b2e6668511b9e +Author: Panu Matilainen +Date: Wed May 20 17:00:12 2009 +0300 + + Refactor ts out of main header verification routine + - signature checking a header only needs a keyring + verify flags, + add a lower level headerVerify() function (static only for now) + for this and turn headerCheck() into a wrapper around it + - some accuracy in statistics lost but shrug... + +commit 9322f737819a3d81088699b1d7fa667259245411 +Author: Panu Matilainen +Date: Tue May 19 10:26:50 2009 +0300 + + Don't mess up problem altNEVR in python ts.check() (rhbz#501068) + - the use of strrchr() silently casts away the const from the problem + set altNEVR string, which we then happily modify.. + - similar to commit 62cc76e25cdfad78ac30bb28f626b474efdecddc + +commit 2c495bd8c4cb3a28d7f359810d8e0ccacffdc153 +Author: Panu Matilainen +Date: Tue May 12 10:30:10 2009 +0300 + + Updated Spanish translation (Domingo Becker) + +commit 409641c058546b9327afa0fa8417ddb88bdd4f5a +Author: Panu Matilainen +Date: Tue May 12 10:28:00 2009 +0300 + + Updated Portugese Brazilian translation (Igor Pires Soares) + +commit d295d14cd0fbce33ec778ef3b07a95269a4f8bfe +Author: Panu Matilainen +Date: Fri May 8 15:22:25 2009 +0300 + + Minor fix to Japanese translation (Masaki Furuta) + +commit 5023d0a4e84e2877e3c715b57bd362f95f12ef06 +Author: Panu Matilainen +Date: Fri May 8 15:01:15 2009 +0300 + + Fix parsing of pubkey signature packets. Ick. + - busted all the way from commit bcb226480d0b60a8667eade77d81c29de4c3d6c9 + +commit acd93ee570990ba3f549947dfe67a7d362f7c70d +Author: Panu Matilainen +Date: Thu May 7 14:31:57 2009 +0300 + + Dont bother generation rpmds debug messages unless in debug mode + - rpmdsNotify() which does nothing but generate RPMLOG_DEBUG messages + gets called often enough that avoiding the unnecessary + rpmlog() and strcmp() calls is easily visible in wallclock times + +commit 5b91b31cc98de7750a9b688c38a9e7bae0e1f58e +Author: Panu Matilainen +Date: Wed May 6 14:54:10 2009 +0300 + + rpmdsThis() is really just a special case of rpmdsSingle() + +commit 2ce7b56e621b097b76a2e5059def7d0e5a64d53b +Author: Panu Matilainen +Date: Thu Apr 23 15:54:09 2009 +0300 + + Hide NSS peculiarities from API + - PKCS#11 standard requires modules to be re-initialized after fork(), + arrange this to occur automatically. + - Most of the time child processes will exec() something else so dont + bother shutting down NSS for every child, only lazily re-initialize + as needed. + - This lets us initialize NSS early to force preloading of its dlopen()'ed + libraries to avoid issues on chroot(), without causing problems to API + users which fork() after initializing rpm (such as func, urpmi etc). + +commit 4b523ac1b85b9d4f71cd024306f01c3fb2418c8f +Author: Rakesh Pandit +Date: Sat Mar 14 18:38:53 2009 +0530 + + - Removed unnecessary rpmdbFreeIterator call and moved them to enditer label. + - Rearranged bit to keep the logic sane. + +commit 5bb4b0928393a4534d9f76644f7b3d3c74ceb3f2 +Author: Rakesh Pandit +Date: Sat Mar 14 17:59:03 2009 +0530 + + Cleanup: Move similar patterns in rpmcliArgIter to rpmcliArgIterHelper. + +commit e77498808e58a8041d3a16450fab400116aca28d +Author: Rakesh Pandit +Date: Sat Mar 14 17:32:59 2009 +0530 + + - Moved code to check possibility of freshen operation to checkFreshenStatus. + +commit 7cd942db0b5c09f71caeb9b732f69acb7703f4ef +Author: Rakesh Pandit +Date: Sat Mar 14 16:38:10 2009 +0530 + + - Move header reading part from rpminstall to tryReadHeader function. + +commit 0766138ee96fd9c0db193907a0013aba5c3d18bf +Author: Panu Matilainen +Date: Wed Apr 22 17:12:37 2009 +0300 + + Minor cleanups to installplatform script + - eliminate unused target and target_platform variables + - eliminate unnecessary temporary rpmrc (used to make a difference when + macro path was in there, not anymore) + +commit 4231321f0ccabd3f2b8b9d51f0dc8d39b34dee44 +Author: Panu Matilainen +Date: Wed Apr 22 16:22:54 2009 +0300 + + Eliminate unnecessary rpmts_internal.h include + +commit 8f755140c31fec7106b86a3aaeb550baf2535fae +Author: Panu Matilainen +Date: Wed Apr 22 14:58:10 2009 +0300 + + Refactor ts out of the main signature checking worker + - Add lower level rpmpkgVerifySigs() function which does the real work, + ts and full qva isn't needed there, just keyring and flags what to verify. + Static only for now, but this is the kind of interface we'll want to + export eventually. + - rpmVerifySignatures() is now just a API-compatibility wrapper. + - Use rpmpkgVerifySigs() instead of rpmVerifySignatures() in rpmcliSign() + verify loop so we only retrieve keyring once. + +commit 7f1f837877173552227a682e3ff63e9cce7b4166 +Author: Panu Matilainen +Date: Wed Apr 22 14:01:40 2009 +0300 + + Dont try to refcount NULL keyring + +commit acfe923bf21a4402a48b6e357a53a398b107f0b3 +Author: Ville Skyttä +Date: Sun Apr 12 21:39:50 2009 +0300 + + Fix --with-kde with KDE3 (rhbz#466009). + +commit c7523b4c52a4199b4aef31c8456285586bea313d +Author: Jindrich Novy +Date: Mon Apr 20 13:23:30 2009 +0200 + + Require file attributes in spec if %ghost files are missing from build root + +commit 8a3e9a74e363f530ed2b7fee0672477f69c3c661 +Author: Panu Matilainen +Date: Sat Apr 18 14:31:48 2009 +0300 + + Fix a few file permissions from "make install" + - macros.perl, logrotate examples etc aren't scripts and shouldn't be + executable. Ditto for python __init__.py + +commit e7ce53c3aea8d11d083e220bfb2e4c6b4ced9a5a +Author: Jindrich Novy +Date: Thu Apr 16 14:13:34 2009 +0200 + + Introduce changelog trimming in binary packages feature (ticket #47) + +commit 3b9f0b817e635b4cf03e500d83bc3e9ba60ff9f9 +Author: Jindrich Novy +Date: Thu Apr 16 14:12:20 2009 +0200 + + Introduce _changelog_trimtime and obsolete _instchangelog + +commit 4c39a9df93c962c69e23ff48789cb950a105a44b +Author: Panu Matilainen +Date: Thu Apr 16 11:03:29 2009 +0300 + + Pad RSA signatures up to modulus size if necessary (rhbz#494049) + - unfortunately can't be detected at initial allocation so extra + copy is needed at verification time + +commit fb19a98fa0ca1c152e1bd22322f5fd1350a48eb6 +Author: Panu Matilainen +Date: Tue Apr 14 10:42:20 2009 +0300 + + Check for termination signals during signing / signature checking loop + +commit 1880778844ae92f56f7a329402efd29a24b819df +Author: Florian Festi +Date: Tue Apr 14 10:57:46 2009 +0200 + + Revert erase relations before checking whether we already added it + +commit 0f967d157d3a02696898f848f4cd584e646b264f +Author: Panu Matilainen +Date: Mon Apr 13 13:58:39 2009 +0300 + + Error out at build on unsupported payload compressors (rhbz#495429) + - only permit bzip2/lzma/xz payload compression if rpm built with the + necessary libraries + +commit 07524b67b6cfe501bdae3df45c212b7c1c129da4 +Author: Jindrich Novy +Date: Fri Apr 10 11:27:49 2009 +0200 + + Don't require %ghost file presence in build root (rhbz#495040) + +commit 2566a70b0ac8f18fbcb2c1c060465714d16982a4 +Author: Jindrich Novy +Date: Thu Apr 9 14:48:02 2009 +0200 + + Remove file flags that have never been enabled + +commit 0f29cc7f2781cdcedab9c8a03786d45f14fc316b +Author: Ville Skyttä +Date: Mon Apr 6 23:08:15 2009 +0300 + + Make it clearer that PACKAGE_FILE logic applies to all -F, -U, and -i. + +commit 48580a70bc7372d1227f07f3377f9c253e492385 +Author: Ville Skyttä +Date: Mon Apr 6 23:00:56 2009 +0300 + + Remove obsolete info about --buildarch and --buildos. + +commit 88e63e6460afc431133f8718acd95afd29033d8a +Author: Panu Matilainen +Date: Thu Apr 9 14:06:14 2009 +0300 + + Updated Spanish translation (Oscar Bacho) + +commit a45e6f03194c1a404bd1924d883981bb4bcf6a7d +Author: Panu Matilainen +Date: Thu Apr 9 14:04:46 2009 +0300 + + Updated Serbian translations (Milos Komarcevic) + +commit 01d5f668316066daaceb439eebebf8eb569c78b3 +Author: Panu Matilainen +Date: Thu Apr 9 13:54:09 2009 +0300 + + Updated Catalan translation (Xavier Conde) + +commit 7a8aecbc8651cab2bd945db8ffd749f9a165bdf1 +Author: Panu Matilainen +Date: Thu Apr 9 13:05:00 2009 +0300 + + Fix PGP v4 fingerprint calculation (rhbz#493777) + - patch from openSUSE / Michael Schroeder + +commit 37a35d07211b612429fef6614888f5fa099dd27b +Author: Jindrich Novy +Date: Mon Apr 6 10:20:47 2009 +0200 + + Don't allow '~', '/' characters and ".." sequence in NVR (rhbz#493157) + +commit 26ac9b3d9417fec67b49c4434c205f3232a36c1b +Author: Panu Matilainen +Date: Fri Apr 3 13:07:42 2009 +0300 + + Make rpmal header & all internal + - rpmal is hardly useful outside rpm itself, avoid exporting stuff + unnecessarily + +commit c40f6d5dcabfe0b68b830d96b01eaedac0b2d18d +Author: Panu Matilainen +Date: Fri Apr 3 10:28:59 2009 +0300 + + Make sure installed files have state (rhbz#492947) + - rpmfsSetState() doesn't get called for skipped files like %ghost and + %config(noreplace), causing incorrect file state ("no state") getting + recorded in rpmdb, leading to inapproriate removal/rename on erase, ick + - For TR_ADDED, always default file states to RPMFILE_STATE_NORMAL, fsm + changes it as necessary for skipped colors and such. Lazy alloc on + rpmfsSetState() is not correct as rpmfsSetState() might not get called + at all. + - originally broken by commit 8d6c4b8c95b59f5a71d90c582c2e98f5c7ed7b9d + +commit 4c23ebdb81d8e8a00ccf7e92d7e3788081b2f57d +Author: Jindrich Novy +Date: Thu Apr 2 20:49:48 2009 +0200 + + Use -mtune instead of -mcpu (rhbz#493696) + +commit 0b8ce16f257f82d30cadce5af96350a9d54cdc48 +Author: Panu Matilainen +Date: Wed Apr 1 12:17:45 2009 +0300 + + Polish translation update (Piotr DrÄ…g) + +commit 7919fdb4804a6dced9cf16ccc408de8286d9987f +Author: Panu Matilainen +Date: Tue Mar 31 13:14:53 2009 +0300 + + Update translations for a change... + +commit e38cbe5b4e7bfa9c7b10e3926093b6887d97d6a1 +Author: Panu Matilainen +Date: Tue Mar 31 13:14:08 2009 +0300 + + Prefer more specific types over generic "text" in classification (rhbz#491349) + +commit 193e1c21e1db2fc5b1c3390a8ea16abfcf357e99 +Author: Panu Matilainen +Date: Tue Mar 31 13:00:59 2009 +0300 + + Allocate ts->addedPackages lazily from rpmtsAddInstallElement() + - at least verification calls rpmtsClean() which wipes out ts->addedPackages, + make sure it's always alloced when needed + +commit 312b4fcd30684793dac474abf2fa07991fa8be16 +Author: Florian Festi +Date: Mon Mar 30 21:56:09 2009 +0200 + + Erase relations are reversed, use requires of target + +commit 569adfa17c2839280ee43f05c0c5928e50e5ae10 +Author: Panu Matilainen +Date: Fri Mar 27 16:15:00 2009 +0200 + + Tidy up rpmfi struct definition a bit + +commit 74a4f639e2c62109ad8e44fb608382241bdb1faa +Author: Panu Matilainen +Date: Fri Mar 27 16:12:25 2009 +0200 + + Lose unused/useless Type and tagN fields from rpmfi struct + +commit 3d63df622037796279514a4da3ddc6807a102c1d +Author: Panu Matilainen +Date: Fri Mar 27 14:11:43 2009 +0200 + + Handle XZ in %uncompress macro + - should've been in commit 8078d0ba24662308b10d9eb0f0da978584b7e757 + +commit a3922760832ec4329f1426a54012b28cf387b5f5 +Author: Panu Matilainen +Date: Fri Mar 27 14:08:56 2009 +0200 + + Rip the macro default settings in rpmrc setDefaults() + - these get nuked and not reloaded on package builds + - rpm(build) needs a properly set up macros file in any case + +commit 2d2bda29c159f16689c05fd4dda20a3f70597e1d +Author: Panu Matilainen +Date: Fri Mar 27 14:01:47 2009 +0200 + + Add built-in %getconfdir macro for getting rpmConfigDir() value + - define %_rpmconfigdir via %getconfdir in the main macro config, this + avoids it getting lost on macro reloads as happens when building + several packages at once + +commit a5eeff6d42d6452a85942f89a6b3a1196ccc47bc +Author: Panu Matilainen +Date: Fri Mar 27 13:45:08 2009 +0200 + + Plug minor memleak from default rc and macro file paths + - build code can call these several times, only init once + +commit b2e85dae836e9695e4ef3e83c819b3523ae81634 +Author: Panu Matilainen +Date: Fri Mar 27 13:44:46 2009 +0200 + + Plug minor memleak from rpmGetCwd() on build + +commit a17b3b68f2c2320cd81e285e02c05ab881ad07fd +Author: Panu Matilainen +Date: Thu Mar 26 15:31:10 2009 +0200 + + Eliminate pointless xstrdup()'s, the strings are never modified + +commit 144830cf816c9189906b0ae826418dc079ec4348 +Author: Florian Festi +Date: Thu Mar 26 13:53:26 2009 +0100 + + Fix: use the file's color to decide whether to add it to the rpmal not the color of the rpmfi + +commit 1ce328aa29a7f32dde2e831856bf46efb9e50df1 +Author: Florian Festi +Date: Thu Mar 26 11:48:09 2009 +0100 + + Remove rpmal from the Python API + as it changed and never was usable anyway + +commit 3a6f3133a1f7acccb787992008927704c9eb1254 +Author: Florian Festi +Date: Fri Mar 20 08:22:41 2009 +0100 + + Reimplement rpmal by using hashes and cleaning up the color handling + +commit 3e37044eb970fc0f30942e744fb7558f4f23f528 +Author: Florian Festi +Date: Mon Mar 16 17:02:16 2009 +0100 + + Make rpmal store rpmtes and kill rpmte->pkgKey + +commit 85a84fdae728138c2c526b010417ffc72c382e06 +Author: Florian Festi +Date: Wed Mar 11 14:15:56 2009 +0100 + + Also order erases. + + - partially using code from rpm5.org + +commit a1910f89e40ffe4c85c73bfb17deaac7419c4dc1 +Author: Florian Festi +Date: Wed Mar 25 16:29:09 2009 +0100 + + Implement rpmteSetDependsOn and rpmteDependsOn using a rpmte + +commit 64280efc1e5ba39ce05cb304e0fd1cf15843f94b +Author: Panu Matilainen +Date: Thu Mar 26 09:59:01 2009 +0200 + + Put the PGP foobar signature generation out of its misery + - the last freeware PGP version (6.5.8) is from year 2000 and doesn't + come close to compiling on modern distros, commercial versions we're + not interested in + - "PGP" signatures in rpm mean RSA, gpg can handle that just fine since + forever + - the code's been unused for years, unlikely to be functional anyway... + +commit 4d31b0433f3f804f81955c32e63c93f31506e8ad +Author: Jindrich Novy +Date: Wed Mar 25 17:28:24 2009 +0100 + + process the "./" in file paths correctly (rhbz#491388) + +commit 5f445d7e8f14df6976b9fa19e9caf4a0dfbcbebb +Author: Panu Matilainen +Date: Wed Mar 25 17:00:41 2009 +0200 + + Make sure fd bundle is always NULLed on rpmVerifySignatures() exit + - readFile() failure could crash on double-free otherwise + +commit 678dceb2455537895e6562886d7887614d546e61 +Author: Panu Matilainen +Date: Wed Mar 25 16:48:24 2009 +0200 + + Unify DSA/RSA/GPG/blaa signature verification, simplify + - verifyRSA/DSA were just the same already, differences are in key/sig + parameters which dont matter on this level + - these dont need sigtd for anything, the data has been parsed into pgpDig + before we get here + - add extra flag for header-only vs header+payload signatures, + we know which is it in rpmVerifySignature() + +commit 0ce87a7494eadb6f355b561d4e47d2226931a3de +Author: Panu Matilainen +Date: Wed Mar 25 16:35:41 2009 +0200 + + Rename internal signature verification functions + - size, md5 and sha1 aren't really signatures + +commit 87b8402eaa9561fa4143c7ddb035c48a6b8d27bf +Author: Panu Matilainen +Date: Wed Mar 25 16:33:29 2009 +0200 + + Reorder internal signature verification arguments + - move retval msg last everywhere + +commit bdd73e4180f6ec2abccfcacda14a0cc629918168 +Author: Panu Matilainen +Date: Wed Mar 25 16:30:20 2009 +0200 + + Push signature identification to librpmio / pgp handling + - retrieve names from pgp tables instead of manually duplicated strings + +commit b711341a616a801137d1126067b0c0c877b0b942 +Author: Panu Matilainen +Date: Wed Mar 25 15:42:30 2009 +0200 + + Remove redundant RSA/DSA parameter checks + - if this stuff doesn't match, pgpVerifySig() will fail anyway, dont + bother checking for same things over and over + +commit d65c1787857b270ca258382581644f5cc50c3bad +Author: Panu Matilainen +Date: Wed Mar 25 15:16:59 2009 +0200 + + Push signature verification down to librpmio + - new pgpVerifySig() call to perform the lowlevel verify, use for + verifying DSA/RSA signatures + - librpm is now free of NSS specifics (apart from what still leaks through + including rpmio/digest.h), remove linkage + +commit 19e142ee4e54ad7967f3a6dab9552450b0357e88 +Author: Panu Matilainen +Date: Wed Mar 25 14:39:29 2009 +0200 + + These cases are identical now... + +commit 127eddaa70c5679a7a2683f4574e1198f8e3dbeb +Author: Panu Matilainen +Date: Wed Mar 25 14:37:43 2009 +0200 + + Rename arguments, RSA keys are certainly not limited to md5 hashes + +commit eb48cfaf6bf4cc8a5ae21aed2796ff7a6e2ef758 +Author: Panu Matilainen +Date: Wed Mar 25 14:17:34 2009 +0200 + + Use makeGPGSignature() for both DSA and RSA + - in reality makePGPSignature() never gets called here due to other fun... + +commit e3892e2c8de0640f3e527daf215bc9e03df1e32e +Author: Panu Matilainen +Date: Wed Mar 25 14:09:42 2009 +0200 + + Remove unnecessary {} block inflating indentation, streamline + +commit a7051403f84887791a05eaa8e20d6782eb0147e5 +Author: Panu Matilainen +Date: Wed Mar 25 13:51:47 2009 +0200 + + Eliminate copy-paste digest calculation in rpmReadPackageFile() + - for DSA and RSA we want to grab the hash algo from signature, other + than that it's just the same for all header-only DSA/RSA/SHA1 sigs + +commit 96e9d490a6ffc364ba9b2834bb778ec4c1411bbd +Author: Panu Matilainen +Date: Wed Mar 25 13:48:37 2009 +0200 + + Eliminate copy-paste digest calculation in headerCheck() + - for DSA and RSA we want to grab the hash algo from signature, other + than that it's just the same for all DSA/RSA/SHA1 sigs + +commit 14468255716a211064f7653e9f582f94f4c25f9a +Author: Panu Matilainen +Date: Wed Mar 25 13:23:19 2009 +0200 + + Eliminate header/payload digests from pgpDig_s, they dont belong + - allocate+free digests locally where needed, pass around in separate argument + - use digest bundles to handle rpmVerifySignatures() needs + - kill-kill-kill fdStealDigest(), dup the contexts from bundles as needed + +commit 3f6b2f8c7b7b79a59664e16d6d350acb54802171 +Author: Panu Matilainen +Date: Wed Mar 25 13:10:23 2009 +0200 + + Implement fdUpdateDigests() and friends using digest bundle + +commit c9146aa580ab87b93ba5d68cde5b606652c93cd8 +Author: Panu Matilainen +Date: Wed Mar 25 13:08:09 2009 +0200 + + Add a type + basic api for bundle of digests (on same data) + - in various places we need to calculate different digests of the same + data, having them stored in a single container makes managing easier + - can hold as many digest types as we support + - remembers how much input data it has handled + +commit 2e672f3fae9d8ff7ee64ae13cfa2fe65272c2ede +Author: Panu Matilainen +Date: Thu Mar 19 16:07:18 2009 +0200 + + Show query/verify selection options just once in --help + +commit 46f1247a276a66561b49f97364558bf8f89d2354 +Author: Panu Matilainen +Date: Thu Mar 19 14:56:45 2009 +0200 + + Python doesn't need libelf, nss or popt directly + +commit 1df4d34fb97cd25134a89c06386b55dc98aa92f6 +Author: Panu Matilainen +Date: Thu Mar 19 14:41:43 2009 +0200 + + librpmio doesn't need libmagic for anything + +commit fd2658ec8434768f75a6b6d007f7df5415f44004 +Author: Panu Matilainen +Date: Tue Mar 17 16:33:12 2009 +0200 + + Move leftover signature stuff from rpmlib.h to signature.h + - these aren't really usable or useful outside rpm, and even less so + as all the rest of the signature stuff is in a private header too + +commit 298c919c00ffbc6ea988545092b02af5384bd7a4 +Author: Panu Matilainen +Date: Thu Mar 19 10:15:49 2009 +0200 + + Revert couple of checksum -> digest renames + - physical cpio header and elf header have checksums, not digests + (from commit 7acdfded4a82e86a673418c3953aa6bf8106d313) + - doesn't affect functionality though + +commit 54b027535f95fea9088f2cd12ed765fddb20c5c1 +Author: Panu Matilainen +Date: Wed Mar 18 14:53:34 2009 +0200 + + Don't try to parse %patch on spec query (rhbz#487855) + +commit b187977fee788888007409465c7efa644d20ddef +Author: Panu Matilainen +Date: Wed Mar 18 11:57:16 2009 +0200 + + Doxygen parameter name mismatch + +commit fa0898552d3c52249bc41e8104eda02c1bbd3359 +Author: Panu Matilainen +Date: Wed Mar 18 11:24:52 2009 +0200 + + Add support for "lzma alone" compression format (lzdio) + - "lzma alone" is superseeded by XZ but it's used by Suse and Mandriva + distros so it's nice to have as it doesn't need much, only open differs + from XZ + - rpmlib() dependency versions are an uuuuuuuugly mess here: Suse used + "PayloadIsLzma = 4.4.2-1" so that's what we provide to be most compatible + (hopefully). Built packages require "PayloadIsLzma <= 4.4.6-1" however + to be compatible with Mandriva 2008.0. Did I already say it's ugly? + - Based on similar patch in Mandriva by Per Øyvind Karlsen, but avoiding + unnecessary renames in rpmio + +commit 8078d0ba24662308b10d9eb0f0da978584b7e757 +Author: Panu Matilainen +Date: Wed Mar 18 09:42:23 2009 +0200 + + LZMA -> XZ renaming + - what we support now in payloads is XZ, not the former LZMA format, rename + user- and header-visible parts to match this + - rpmlib(PayloadIsXz) dependency versioned 5.2-1 to avoid unnecessary + incompatibility with what rpm5 has and what Mandriva is already using + - only provide the rpmlib dependency if actually built with xz support + - rpmFileIsCompressed() attempts to guess the magicless old lzma format + by file suffix, so it can handle both right now + +commit ff920a9766ea1f3ef9670c8031ff473adb0b0adf +Author: Panu Matilainen +Date: Mon Mar 16 14:19:30 2009 +0200 + + Handle rpmDigestDup() failure in signature checking + +commit 847c991b2bde08dce508152278f515ae5ff97fd8 +Author: Panu Matilainen +Date: Mon Mar 16 14:13:00 2009 +0200 + + Proper error handling in rpmDigestDup() + - tolerate calling with NULL + - avoid allocations in case of failure + - return NULL instead of calling exit(), ick + +commit ed342d7df6523ae2f7f06e5bb02f766a37614bb6 +Author: Panu Matilainen +Date: Mon Mar 16 12:25:03 2009 +0200 + + Eliminate unnecessary pgpNewPublicKey() wrappers + +commit f79353ea74c3ab255f2f9ee4b117a1fd93bb517a +Author: Panu Matilainen +Date: Mon Mar 16 12:18:01 2009 +0200 + + Eliminate unnecessary field from pgpDig_s + - key/signature can't be both DSA and RSA at the same time + +commit c769eb0244294c0a9ac002bd7ecd06bddc4cd3ae +Author: Florian Festi +Date: Sat Mar 14 19:12:43 2009 +0100 + + Free all keys not only those on the first buckets + - Thanks to Alexey Tourbin for pointing that out! + +commit 5f82119a306cc1e647e45df52b93989120e52b5a +Author: Rakesh Pandit +Date: Fri Mar 13 12:50:35 2009 +0530 + + - Cleanup: removing unnecessary repeated code. + +commit c6c8fab76ab014cf311cae6ce1529788cd0da1d0 +Author: Panu Matilainen +Date: Fri Mar 13 09:26:04 2009 +0200 + + rpm-python only accepts string objects, not unicode + - Reverts broken commit 832fe4f01865cd17ab9393fc48b960206da223b0. + Anything trying to pass in unicode objects is already broken as + PyString_AsString() uses default encoding for unicode conversions, which + by default is ascii (at least in python >= 2.5) so any non-ascii string + will cause it to fail anyway. + - Only accepting strings keeps encoding madness out of rpm, thank you Toshio. + +commit 9317ebc83f611075874713a1099b1f5aa14c969c +Author: Panu Matilainen +Date: Fri Mar 13 08:55:53 2009 +0200 + + Catch exceptions from python conversions in dbMatch() + - Prior to this, string conversion (eg on unicode object) could fall + through to rpmtsInitIterator() with key of NULL, matching everything + and only much later spitting out an obscure traceback. PyInt_FromLong() + can fail too, causing us to look for bogons. + +commit ffe2f39adaea9f113a73aea4537a930ba99e49ff +Author: Panu Matilainen +Date: Thu Mar 12 11:42:42 2009 +0200 + + MD5 and SHA1 digests are handled just the same here... + +commit 8eb80293d7edb3c4276730519b42ae567a7198ff +Author: Panu Matilainen +Date: Thu Mar 12 11:39:29 2009 +0200 + + Rip all handling of broken md5 sums from 1997, rpm 2.x era + - we dont even recognize rpm 2.x packages as rpms... + +commit 12f516842161899cdd9aa7fb5f215f19c7b7dab4 +Author: Panu Matilainen +Date: Thu Mar 12 11:17:27 2009 +0200 + + Eliminate can't happen code + - sigtd.tag can't very well be something else than it's matching case + in a switch, eh + +commit c1180e3c4334b850d50f618f59de09a9ea06a025 +Author: Panu Matilainen +Date: Thu Mar 12 09:54:31 2009 +0200 + + Silence compiler whining on rpmsort and rpminject + +commit 23d202e928d4af945765e501ee8fc7bd0614510e +Author: Panu Matilainen +Date: Wed Mar 11 21:43:44 2009 +0200 + + Plug a memleak in genCpioListAndHeader() + +commit 4cf26d30f8a066f855117d1661b23521e6eed647 +Author: Panu Matilainen +Date: Wed Mar 11 21:41:57 2009 +0200 + + NSS supports MD2, we might as well handle it too + - also getHashType() is a "pure" function, mark it as such + +commit 15042bc9095964f9fc5f5ed046f9299fad7663c1 +Author: Panu Matilainen +Date: Wed Mar 11 18:10:19 2009 +0200 + + Eliminate now unnecessary FDDIGEST_t + - contexts know their hash algorithm, this is not needed anymore + +commit 7fc5e62eaaccd75c1ef27b1c3d21e7cefacf2772 +Author: Panu Matilainen +Date: Wed Mar 11 18:07:22 2009 +0200 + + Remember hash algorithm in digest context + - alternatively we could reverse map NSS hash types (HASHContext + knows its type) but shrug... + +commit d05e4438a9efa5ad2cf0ecfef1b4537c37e132d4 +Author: Panu Matilainen +Date: Wed Mar 11 17:14:25 2009 +0200 + + Streamline rpmDigestInit() a bit + - single point of exit, rearrange to avoid having to free if stuff fails + +commit 31288616ce442203df626ef0a49ebc3893258fc9 +Author: Panu Matilainen +Date: Wed Mar 11 15:28:30 2009 +0200 + + Move headerIsEntry() check of sigtag into _chk() macro + - ...and reformat the if-elses now that they fit into single lines nicely + +commit c7aad74879349dcb0a7b3fbdae9ba4fdc54adea4 +Author: Panu Matilainen +Date: Wed Mar 11 15:16:26 2009 +0200 + + Size signature failures are always RPMRC_FAIL + - these failures cannot be "fixed" by importing a key, RPMRC_NOKEY is wrong + - streamline a bit by assuming failure + +commit b8b970a94c310346666069c781dc185d6a54aff0 +Author: Panu Matilainen +Date: Wed Mar 11 15:07:06 2009 +0200 + + Eliminate asserts() from rpmVerifySignature() paths + - handle rpmVerifySignature() getting called with NULL result cleanly, + the lower level code doesn't need to double-check + +commit 827101840f7327c117467a5afe063b21cd105920 +Author: Panu Matilainen +Date: Wed Mar 11 14:51:46 2009 +0200 + + Minor cleanup + simplification of DSA and RSA sig checks + - eliminate unnecessary local variables + - initialize on declaration where reasonable + +commit cf2637fbb96eb84d7c5a70df8179abc439359472 +Author: Panu Matilainen +Date: Wed Mar 11 14:30:16 2009 +0200 + + For RSA sigs, RPMRC_NOKEY is only sane for keyring lookup failure + - non-keyring lookups fail with RPMRC_FAIL, streamline the code a bit + by assuming failure + +commit fc023a2885bb30ae65c5b56d687bfacaf6c62b77 +Author: Panu Matilainen +Date: Wed Mar 11 14:04:16 2009 +0200 + + For DSA sigs, RPMRC_NOKEY is only sane for keyring lookup failure + - assume failure and non-keyring lookups fail with RPMRC_FAIL + +commit 73e0ee5df95ac22cbed73b18575d33c284f62975 +Author: Panu Matilainen +Date: Wed Mar 11 14:01:11 2009 +0200 + + We already assume failure, this is unnecessary + +commit 32174fa9bf9fcb1f2655b46f04f6fbfc91704f06 +Author: Panu Matilainen +Date: Wed Mar 11 13:58:51 2009 +0200 + + SHA1 and MD5 failures are always RPMRC_FAIL + - these failures cannot be "fixed" by importing a key, RPMRC_NOKEY is wrong + - streamline a bit by assuming failure + +commit 8b771f6906d98563b9e1811482004c97d837d6e7 +Author: Panu Matilainen +Date: Wed Mar 11 13:56:08 2009 +0200 + + Use tag to distinguish header-only vs header+payload signatures + +commit eab03f0e3b1d10e82ee20110bee8bc1d00ee991f +Author: Panu Matilainen +Date: Tue Mar 10 14:27:08 2009 +0200 + + Lift best signature detection out of rpmVerifySignatures() + +commit 65f7f7c3ce1a9b5245bcd9deba0c6346cce9acd0 +Author: Panu Matilainen +Date: Tue Mar 10 13:52:41 2009 +0200 + + Lift pgp parsing into separate function + - similar to dc5fa254588be57a066ef4679c75e2bb3bda5fef + +commit 33a6ed91e4a26201d2dec0bf04ab025642528b13 +Author: Panu Matilainen +Date: Tue Mar 10 13:45:12 2009 +0200 + + Avoid rasprintf() on potentially NULL string + +commit de00e073c83644976127ae271c476fba46e66596 +Author: Panu Matilainen +Date: Tue Mar 10 13:38:26 2009 +0200 + + Eliminate Yet Another temporary result variable + +commit a526d10e4f84178a7a6fa6b8cbb384aa88c9b16f +Author: Panu Matilainen +Date: Tue Mar 10 13:33:57 2009 +0200 + + Further rpmVerifySignatures() cleanup + - initialize variables at declaration time + - split the formatting of the result spew into separate function + - if multiple missing/bad keys, report them all + +commit 24c14d0a2ee847b75cb3fe7a666b792ea303ef14 +Author: Panu Matilainen +Date: Tue Mar 10 12:10:49 2009 +0200 + + Assume failure in rpmVerifySignatures() + - simplifies the code a bit + +commit 4ffdc83282e44d14115684d4349fc55506d3cbbe +Author: Panu Matilainen +Date: Tue Mar 10 11:09:35 2009 +0200 + + Use rstrcat() instead of rasprintf(), less fuss involved + +commit 05e16d415492f4925782e3fcf6ef155cbdf124c3 +Author: Panu Matilainen +Date: Tue Mar 10 11:03:08 2009 +0200 + + Fix memleak on signature checking failure + - early exit from header iteration loop could previously leak from unfreed + buf and header iterator + +commit 493913ed415acf8be26b13a785a9615ba5cb6981 +Author: Panu Matilainen +Date: Tue Mar 10 11:01:32 2009 +0200 + + Eliminate pointless {} block inflating indentation level + - no functional changes + +commit 65f3e55d3592da8fb482b5344a28013029199115 +Author: Panu Matilainen +Date: Tue Mar 10 10:17:13 2009 +0200 + + Don't return data from headerGet() on regionSwab() failure + - callers dont expect to free data if headerGet() returns failure, + leaking memory + +commit 74c9a96c3c68de6376ee543d494a97c0f133bfaf +Author: Jindrich Novy +Date: Mon Mar 9 20:19:37 2009 +0100 + + Port XZ payload compression to xz-4.999.8 API + - use SHA256 digests for archive error detection + - use 100MiB peak memory usage for decoding + - use better XZ detection in configure.ac + +commit f70830356fd239d66e1aece81973ebc077acbe6e +Author: Panu Matilainen +Date: Mon Mar 9 16:44:47 2009 +0200 + + Add test for _install_lang and status + +commit cdcbd324fe41cd729434576200593c0fbda44a19 +Author: Panu Matilainen +Date: Mon Mar 9 14:57:46 2009 +0200 + + Unbreak %_install_langs handling (rhbz#489235) + - using rpmfiFLangs() in skipFiles() broke the %_install_langs logic, + causing all files to be skipped if install langs, eek + +commit 2b4507d852ac8469608bef2ce8e219d76b0c543e +Author: Panu Matilainen +Date: Mon Mar 9 14:48:47 2009 +0200 + + Fix RPMTAG_FILESTATES in rpmdb + - sizeof(rpmfileState) != sizeof(char), and char is what goes to headers + resulting in some pretty weird states despite being correct on disk + - add rpm_fstate_t type for the header presentation of states and + use where appropriate + +commit 1c1faec7a30099f62c12ccef2f15e37a202e6518 +Author: Panu Matilainen +Date: Sun Mar 8 17:38:49 2009 +0200 + + Initialize on declaration, cosmetics only... + +commit 37f85b81bbbd902f5c66a2cc539b97713d6e59ff +Author: Panu Matilainen +Date: Sun Mar 8 17:36:39 2009 +0200 + + Dont bother retrieving colors unless actually needed + +commit a526ff75f490b4f9a83909c856de2f21066a0f3d +Author: Panu Matilainen +Date: Sun Mar 8 17:28:17 2009 +0200 + + Dont bother retrieving ts problem set unless actually needed + +commit 90582c6103071cf73f79e7dcc2a260298aadf554 +Author: Panu Matilainen +Date: Sun Mar 8 17:25:45 2009 +0200 + + Dont bother retrieving altNEVR unless actually needed + +commit ac7c3412278a03da6633758bca999827d4b59038 +Author: Panu Matilainen +Date: Sun Mar 8 11:33:22 2009 +0200 + + Load macros before creating directories (rhbz#489104) + - %_sourcedir and friends can have things like %{name}, load macros + before trying to create any directories when installing src.rpms + +commit e9cc481202429ed06b2b0b14cb1b1065df6c8ba7 +Author: Panu Matilainen +Date: Fri Mar 6 13:43:17 2009 +0200 + + Document libcap, libacl in INSTALL + +commit 095e1ba71d28300a31bf411f1e9045bbb539a130 +Author: Panu Matilainen +Date: Wed Mar 4 15:12:02 2009 +0200 + + Condense "shut up gcc" switch-cases to just default no action case + +commit dc5fa254588be57a066ef4679c75e2bb3bda5fef +Author: Panu Matilainen +Date: Mon Mar 2 13:23:35 2009 +0200 + + Add internal helper to verify signature parse results + - eliminates bunch of copy-paste variants of the same thing + - additionally verify pgpPrtPkts() return code + +commit c7fc09d585ff3831924f72f61d990aa791f2c3f2 +Author: Panu Matilainen +Date: Wed Mar 4 14:40:21 2009 +0200 + + Move the common part of DSA+RSA verification into helper function + +commit 5cb107b843797307e2a0d21018707bd893222fe5 +Author: Panu Matilainen +Date: Wed Mar 4 13:41:27 2009 +0200 + + Dont leak memory from hdrmd5ctx + +commit d50db40ceed7083467f7b548da7b2fbe96aaec61 +Author: Panu Matilainen +Date: Wed Mar 4 13:08:30 2009 +0200 + + Handle V4 signature trailer for RSA too (ticket #34) + +commit 682b3d8aa9a0f0a777a3858887f09c1c098db649 +Author: Panu Matilainen +Date: Wed Mar 4 12:20:44 2009 +0200 + + verifySHA1Signature() doesn't need pgpDig at all + +commit a54ab2c1b94416e4dbf36ecd26fe7885bcd19295 +Author: Panu Matilainen +Date: Wed Mar 4 12:19:02 2009 +0200 + + verifyMD5Signature() doesn't need pgpDig at all + +commit baac9bd4f8e5f216729a5000429a4bda74aec01a +Author: Panu Matilainen +Date: Wed Mar 4 12:17:21 2009 +0200 + + verifySizeSignature() only needs size, not all of pgpDig + +commit 30f60665bbbe2547551531a3da299ca8818e74bc +Author: Panu Matilainen +Date: Wed Mar 4 11:49:29 2009 +0200 + + Eliminate unnecessary fields from pgpDig_s + - sha1(len) and md5(len) are only needed and used locally in + verify[DR]SASignature(), no point carrying them around in pgpDig + - use wrapper function to hide type differences between rpm and NSS + +commit d39a6c7de51c0d01ce69ee1f464b94ca70309751 +Author: Panu Matilainen +Date: Tue Mar 3 08:48:12 2009 +0200 + + Add ISA bits for alpha (Oliver Falk) + +commit c45cfb9c047b05ca29acb8d42186e97e17204e27 +Author: Jindrich Novy +Date: Mon Mar 2 10:29:05 2009 +0100 + + Fix documentation and help for the md5 -> filedigest move + - add aliases for obsolete {RPM}VERIFY_MD5 flags to + not to break API + +commit 7acdfded4a82e86a673418c3953aa6bf8106d313 +Author: Jindrich Novy +Date: Fri Feb 27 14:34:39 2009 +0100 + + Add md5->filedigest aliases (rhbz#487597) + - add %verify(nofiledigest) as %verify(nomd5) file attribute alias + - reference digests as digests not checksums + - make old md5 related symbols obsolete and use newer reference + - update man page accordingly + +commit 299a7af7a8acc0fa4979d71dfaebe87658ee0c1d +Author: Panu Matilainen +Date: Thu Feb 26 21:48:06 2009 +0200 + + Missing test material to tarballs, oops + +commit fca96226f99c67b70854a66bf6eb8648497d9e23 +Author: Panu Matilainen +Date: Thu Feb 26 17:07:39 2009 +0200 + + Permit python bytecompile to fail for now + - various things like python templates in packages, jython code etc + blow up on the syntax checking, only warn instead of failing the build + until parametrized with a spec override possibility + +commit 0e6c5e890460224f455c0ef9e516ea675b00208d +Author: Panu Matilainen +Date: Thu Feb 26 16:38:10 2009 +0200 + + Honor --nomanifest on install too + - bit of a kludge but works.. and fixes test case 39 + +commit caf759f8ca53fc45f49f4bc07dbf1724ec9d5b93 +Author: Panu Matilainen +Date: Thu Feb 26 16:09:51 2009 +0200 + + Switch to libtool versioning, starting at 0:0:0 + +commit 3448b552964a526641d2e85b4ed27ebe3465f100 +Author: Panu Matilainen +Date: Thu Feb 26 10:49:38 2009 +0200 + + Handle empty argv passed to rpmdsDupArgv() + - same as 94552b96256c3620b4be407c501d0d926c081963, apt-rpm expects to + pass empty version as NULL to rpmdsSingle() + +commit f6985705749403735207dee509b1a3e88a6df1ce +Author: Panu Matilainen +Date: Tue Feb 24 14:24:40 2009 +0200 + + Clean up runTransScripts() a bit + - move progtag figuring out of the loop, and return with error code + instead of asserting on invalid tag + +commit 493275977c5c3bf152d783a850eb5a45b2ade040 +Author: Panu Matilainen +Date: Tue Feb 24 13:55:27 2009 +0200 + + Single point of exit from rpmtsRun() + +commit 8fd5ed25b4ae44b726894389927ca7cbfb691f55 +Author: Panu Matilainen +Date: Tue Feb 24 13:41:18 2009 +0200 + + Split initialization of flags etc out of rpmtsRun() + +commit 8dff47155ab8fa90fd2d219e68d0a8371902a4d4 +Author: Panu Matilainen +Date: Tue Feb 24 12:35:21 2009 +0200 + + Formatting cosmetics only + +commit 690a297ec0974c28312ba73bf0cee2624527b8b7 +Author: Panu Matilainen +Date: Tue Feb 24 12:31:22 2009 +0200 + + Calculate need to chroot just once + +commit 750a8e656252413b3290497444f2d403890ad8a2 +Author: Panu Matilainen +Date: Tue Feb 24 12:22:21 2009 +0200 + + Eliminate unnecessary variable + - per-fi filecount only used once per loop for stats + +commit 720a8ebe3183ec067aed1c55bf77ded8f57569f5 +Author: Panu Matilainen +Date: Tue Feb 24 12:13:26 2009 +0200 + + Push fingerprinting chroot in+out into rpmtsPrepare() too + - rpmtsPrepare() can now fail (for chroot), handle exit + +commit a309664ba3fd87b5fa7ce8ccd6b60a7a53754ae7 +Author: Panu Matilainen +Date: Tue Feb 24 11:50:23 2009 +0200 + + Push the rest of the prepare-calculations down to rpmtsPrepare() + - total file count only needed during prepare, pass around as necessary + - all fingerprinting related activity (skipping files, memory allocations + etc) are now handled locally from rpmtsPrepare() + - throw out some ancient no longer relevant comments + +commit 924a5d82f60a964b4fab7f173a3c86d94c831921 +Author: Panu Matilainen +Date: Tue Feb 24 11:23:25 2009 +0200 + + Eliminate fingerprint hash from ts struct + - only prepare stage needs, alloc+free locally and pass around to + helpers as necessary + +commit 9e9060269386c76701358a9840a743008e0e37e0 +Author: Panu Matilainen +Date: Tue Feb 24 11:15:53 2009 +0200 + + Split fingerprinting stuff out of rpmtsRun() + - only prepare stage needs fingerprint associated caches and hashes, + push the allocations where needed + - do fingerprint additions in separate function + +commit 15f17c4b48ff75673acda7bb074ae5eea9a1787b +Author: Panu Matilainen +Date: Tue Feb 24 10:40:43 2009 +0200 + + Split prepare phase out of rpmtsRun() + +commit ddf1df4abf7b6d810064de7e4a1c500ccda805c0 +Author: Panu Matilainen +Date: Tue Feb 24 10:28:27 2009 +0200 + + File skipping only done for added packages, simplify + +commit 3bf701761e2ec16317d51835ac4c3e7f3f60e8b7 +Author: Panu Matilainen +Date: Tue Feb 24 10:24:10 2009 +0200 + + Eliminate unused variables + - numAdded and numRemoved not used for anything at all + +commit 68995d52386e7bd1512b9d8e9250ee8de833f21d +Author: Panu Matilainen +Date: Tue Feb 24 10:13:43 2009 +0200 + + Split sanity checking out of rpmtsRun() to helper function + - with file counting done elsewhere, this becomes a clean and obvious split + - ensureOlder() doesn't need ts, just needs the problem set, simplifies + the problem set refcounting a bit + +commit 1cce1b2444bd3f8c56dca01701b062f054f2832c +Author: Panu Matilainen +Date: Tue Feb 24 10:10:38 2009 +0200 + + Fix memory leak from unused problem set + - checkInstalledFiles() doesn't need ps for anything, this just caused + a memleak due to refcount + +commit 62d27e0bd56b765bd32c22f4062e5b864fcf29c0 +Author: Panu Matilainen +Date: Tue Feb 24 09:21:20 2009 +0200 + + Calculate files in transaction just once + - move file counting from rpmtsRun() and rpmFindBaseNamesInDB() to single + helper, store result in rpmts struct + +commit 7770aaea226b9a5fbb5296654eed8572f16e8e0d +Author: Panu Matilainen +Date: Mon Feb 23 14:39:48 2009 +0200 + + Fix busted up Korean tranlations of manuals (rhbz#466597) + - previous conversion to utf-8 (from 2003!) was busted, wrong encoding + or something + +commit 58e92b976aebe43ebddbe2d2ec41bff0dd46b6fc +Author: Panu Matilainen +Date: Sat Feb 21 12:11:54 2009 +0200 + + Loosen up restrictions on dependency token names (rhbz#455119) + - Package names aren't restricted to ascii, no point restricting + dependency names either. + - This lets UTF-8 to go through but also all sorts of other junk but + as we haven't got a clue about the specs encoding, no can do. So we + only check for bad characters from plain ascii. + +commit b86d6a76d71c037727b20172299d418c6bc4ae11 +Author: Panu Matilainen +Date: Fri Feb 20 22:02:49 2009 +0200 + + Only run script dependency extraction once per file, duh... + +commit 89a7b15c22df2c36d4fe85a5e08240a6044ef505 +Author: Panu Matilainen +Date: Fri Feb 20 21:44:13 2009 +0200 + + Check for errors from python bytecompile (Tim Waugh) + - since we're byte-compiling all python pieces, might as well use the + opportunity to catch syntax errors while at it + +commit 519f8fce17fa9fbfabc5673bee1f5b3c23147306 +Author: Jindrich Novy +Date: Wed Feb 18 08:11:18 2009 +0100 + + Revert fix for rhbz#442105, it has unwanted side effects + - mainly RPMTAG_BUILDARCHS missing from SRPM in case of BuildArch: noarch + +commit 73d7e90f5e074f8cf03dafa8a4493ca7cbd66848 +Author: Rakesh Pandit +Date: Thu Feb 12 17:57:35 2009 +0530 + + -Moved maifest checking from rpmInstall to rpmCheckManifest. + +commit 1fbdab96551c55e55fd6d9ebcf7b6a824e594816 +Author: Rakesh Pandit +Date: Thu Feb 12 17:30:21 2009 +0530 + + -Move notify flag settings from rpmInstall and rpmErase to setNotifyFlag. + +commit 182e2fdfd456257ce369e51c078dda914da42a57 +Author: Rakesh Pandit +Date: Thu Feb 12 17:25:09 2009 +0530 + + -Move vsflags calculation from rpmInstall and rpmErase to setvsFlags. + +commit 359e16d75f31a046d73e7e931743f94a43b502c9 +Author: Rakesh Pandit +Date: Thu Feb 12 17:13:20 2009 +0530 + + -Remove stopinstall variable and moved rpmcliPackagesTotal to correct place. -Changes in rpmInstallSource for getting reused in install mode and removed. + +commit 430b8cc3770413bc5b29688ce0823d15bb7de12b +Author: Rakesh Pandit +Date: Thu Feb 12 15:54:31 2009 +0530 + + -Use installInterfaceFlags in place of eraseInterfaceFlags. -Moved transaction part from rpmInstall and rpmErase to rpmcliTransaction. + +commit 61a5043d7d04e2ba330a0441cbc1de5f9ea801cc +Author: Rakesh Pandit +Date: Thu Feb 12 15:49:28 2009 +0530 + + -Merge rpmInstallInterfaceFlags_e and rpmEraseInterfaceFlags_e to rpmInstallFlags_e. + +commit 51157419623f025149d154c8eb6a0874f1bc23f7 +Author: Panu Matilainen +Date: Thu Feb 12 14:11:22 2009 +0200 + + Only initialize file capability cache if actually needed + - very few packages are going to have RPMTAG_FILECAPS at all + +commit b9b8af5c4b9518fc36d6ab30b1e6124deb78dc8f +Author: Jindrich Novy +Date: Wed Feb 11 13:19:22 2009 +0100 + + Fix output of pkgconfigdeps.sh so that rpmfc parses it correctly + +commit d0595eaa8ad8a9155a0fa4b0b6f4b3d5ed08b2e8 +Author: Panu Matilainen +Date: Tue Feb 10 14:11:28 2009 +0200 + + Be more careful about errors in lua rpm vercmp() + +commit 67d6e7549720551f4750ac303c50e6c7e6ca00f5 +Author: Jindrich Novy +Date: Wed Feb 11 10:03:16 2009 +0100 + + Handle broken pkgconfig files better, rhbz#484970 (Lubomir Rintel) + +commit 750802fd5f1accd5eacf54e3676f656019a24d1f +Author: Panu Matilainen +Date: Fri Feb 6 09:10:23 2009 +0200 + + Bump FileDigests rpmlib dependency version + - should've really been in commit 1f6ad324dbf4bebec905ddbb76d274345673a5b3, + the tag adjustment is an incompatible change from what was in + rpm 4.6.0-rc's, ugh + +commit 3d314301ca11b10d2fed8f7a48acb735847d78b2 +Author: Panu Matilainen +Date: Thu Feb 5 22:37:27 2009 +0200 + + Use per-rpmfi string cache for file capability strings + - most packages wont have file capabilities attached at all, and even + where present, the files with capabilities are likely to be few and + far in between, avoid wasting memory + +commit b04c67136f6e980f7eeabd5708e37ac078b0275c +Author: Panu Matilainen +Date: Thu Feb 5 17:22:00 2009 +0200 + + rpmfi is only needed by verifyHeader(), push it there + - no functional changes, just slight reorganization + +commit 990bdf1683c6aec9caeadeeb959029dc411935f8 +Author: Panu Matilainen +Date: Thu Feb 5 12:34:07 2009 +0200 + + Fix typo in python bindings documentation (Masatake YAMATO) + +commit 1c3bd7c7ca56acfc4611fb8535acd453c159dc20 +Author: Panu Matilainen +Date: Thu Feb 5 12:20:20 2009 +0200 + + Exclude bin and sbin directories from python bytecompile (rhbz#182498) + +commit f456b6feb12e84379e9b3f4c44c71b1260947de2 +Author: Panu Matilainen +Date: Thu Feb 5 11:36:58 2009 +0200 + + Updated Brazilian Portugese translation (Igor Pires Soares) + +commit 62091898aeae70f71d13923f18855174a7a65251 +Author: Panu Matilainen +Date: Thu Feb 5 11:32:18 2009 +0200 + + --requires lists required capabilities, not packages (rhbz#483253) + - also fix a minor typo in --whatrequires description + +commit 5e71c9bd7635aff9630f74f1b19fabb81ff798de +Author: Panu Matilainen +Date: Mon Feb 2 14:24:33 2009 +0200 + + OSGi dep extractor update (rhbz#466111): + - From Alphonse Van Assche: "This patch fix some parsing bugs and add some + new functionality (disable for now)" + +commit 6ce7def270994a675836e2b945a7f70eb2b03c2b +Author: Panu Matilainen +Date: Mon Feb 2 14:17:27 2009 +0200 + + Prepend PKG_CONFIG_PATH on pkgconfig requires extraction too (rhbz#473814) + - similar to ab02fb183a441b6a30c863aebf49be992cd431fe but for requires + +commit 1f6ad324dbf4bebec905ddbb76d274345673a5b3 +Author: Panu Matilainen +Date: Fri Jan 30 13:53:18 2009 +0200 + + Undo tag clash on RPMTAG_FILEDIGESTALGO[S] with rpm5.org + - no rpm.org distro uses non-md5 digests yet for anything real, revert this + unnecessary clash while we still can + +commit 64335052e35836168f18e190da464b8c2abe0373 +Author: Panu Matilainen +Date: Fri Jan 30 08:28:57 2009 +0200 + + Try to play nice with OpenPKG (rpm5.org) packages (rhbz#478907) + - rpm5.org writes populates lead with partially bogus data, but + does have explicit RPMTAG_SOURCEPACKAGE for srpms, dont think of them + as binaries + - switches around the lead check in 50a4ed783c300a92948f7933a3c726d4bd2d643d + to look at source type explicitly and retrofit RPMTAG_SOURCEPACKAGE + for srpms early, this lets binaries without RPMTAG_SOURCERPM + (which is documented as "information only") and with explicit + RPMTAG_SOURCEPACKAGE be identified correctly + +commit 81afe5e6a210171f58c989bc43bab1881821ddad +Author: Panu Matilainen +Date: Fri Jan 30 08:18:58 2009 +0200 + + Updated Swedish translation (Göran Uddeborg) + +commit fe720f6c3c0657d0ed4fc3855ac85a727dac47ce +Author: Ville Skyttä +Date: Thu Jan 29 20:42:43 2009 +0200 + + Improve Qt translation support, particularly --all-name. + +commit dbc1f4ccf66451568a0a6b6ffd4252475a30b341 +Author: Panu Matilainen +Date: Wed Jan 28 16:34:06 2009 +0200 + + Don't throw away modified config files on cross-hash upgrades (rhbz#479869) + - different digest types can't be compared, take a backup to avoid + data loss + - Patch from Miloslav Trmac + +commit 381605a9bb32cf88209a2dbb72f58c31167779e9 +Author: Panu Matilainen +Date: Wed Jan 28 13:21:39 2009 +0200 + + Honor rpmtd type, not tag type, in rpmtdClass() (ticket #25) + +commit 216eb1c7e02b4bfb9a1d301538b41533db489b55 +Author: Panu Matilainen +Date: Wed Jan 28 13:17:17 2009 +0200 + + Add API for getting the class of tag type directly + - no point requiring going through rpmTagGetType() if we already have + the type at hand, and in some nutty cases (wrt extensions) these dont + even always match + - rpmTagGetClass() is now just a convenience wrapper around + rpmTagTypeGetClass() + +commit fe846402a45dc1ceadf3a7538071b40b0fd70a60 +Author: Panu Matilainen +Date: Tue Jan 27 14:21:40 2009 +0200 + + Add RPMTAG_SOURCERPM to gpg-pubkeys in rpmdb + - ptooey, but otherwise gpg-pubkey "packages" are considered source packages, + thanks to Ville Skyttä for pointing this out + +commit d55660aaf0dbf86a73e58479a47055c9e6e8bbab +Author: Alexandr D. Kanevskiy +Date: Sat Jan 24 00:18:34 2009 +0200 + + Added ARMv7 architecture support + +commit 0611b59a4a408579db66f0742a7df5ca6c001fec +Author: Panu Matilainen +Date: Fri Jan 23 14:34:08 2009 +0200 + + Check for binaries in noarch packages at build-time + - this will only catch elf files for now, but better than nothing + - default to terminating build (as binaries in noarch package is pretty + nasty thing to do), permit macro override just in case though + - only works for internal dep generator + +commit abe5f4abac7a282a15de5325954c3a09893769c9 +Author: Panu Matilainen +Date: Fri Jan 23 10:08:53 2009 +0200 + + Update dbi tag names for Filemd5s -> Filedigests change, oops.. + +commit 111efde99a42c8841fa50d682fd340c73c00268b +Author: Panu Matilainen +Date: Thu Jan 22 12:09:45 2009 +0200 + + Return NULL instead of blowing up on invalid rpmpsGetProblem() + - thanks to Pixel for spotting + +commit f128fea076b510bbe934579d9821eff5f9dff802 +Author: Panu Matilainen +Date: Tue Jan 20 14:48:05 2009 +0200 + + Add a bit of documentation for headerGet() flags + +commit 9f755c72c7390304e8799edae3afbf872ad4cff9 +Author: Panu Matilainen +Date: Tue Jan 20 14:16:58 2009 +0200 + + Grab dependency name & version strings as argv-style arrays + - Related to ticket #22, this fixes rpmdsMerge() on data grabbed from + header. Prior to this, the following would blow up with memory corruption + as headerGet() string array wasn't NULL-terminated + rpmds d1 = rpmdsNew(h, RPMTAG_REQUIRENAME, 0); + rpmds d2 = rpmdsSingle(RPMTAG_REQUIRENAME, "foo", "1", 0); + rpmdsMerge(&d1, d2); + +commit 05f5c353242d0dfa70ef49918c73c92dec923920 +Author: Panu Matilainen +Date: Tue Jan 20 14:15:24 2009 +0200 + + Add headerGet() flag to request argv-style NULL-terminated string arrays + - easy to do and some places would like the data this way so why not... + - also add corresponding rpmtd flag so caller can verify he got what + was requested + +commit a46dd884ec348b3ce23b9f53302e6626a90ae631 +Author: Panu Matilainen +Date: Tue Jan 20 12:55:35 2009 +0200 + + rpmdsMerge() expects ds->N and ds->EVR as argv-style arrays (ticket #22) + - use rpmdsDupArgv() instead of cloning headerGet() behavior to fix this for + rpmdsSingle() and rpmdsThis() generated dependency sets + - this is a regression from rpm 4.4.x, but for rpmdsNew() created sets + rpmdsMerge() has never worked as headerGet() doesn't return NULL + terminated arrays + +commit 6bd713ab319514d655d0466330a246703a7c16ae +Author: Panu Matilainen +Date: Mon Jan 19 14:50:18 2009 +0200 + + Update / clarify documentation on building API/hacking docs + +commit 479a4a9d75a1973247f1a937228ec96479f88c31 +Author: Panu Matilainen +Date: Mon Jan 19 14:37:09 2009 +0200 + + Don't segfault on "" rcfiles argument (spotted by Pixel) + +commit 2084762882240f9a5b5bc27c4623291e745611a5 +Author: Panu Matilainen +Date: Mon Jan 19 14:29:48 2009 +0200 + + Missing space in Russian translation (patch from Mandriva) + +commit b4bb89603844699754695e9f1484779e758060f3 +Author: Panu Matilainen +Date: Mon Jan 19 14:27:39 2009 +0200 + + Use temporary table for Depends DB in sqlite too (Olivier Thauvin) + +commit 2a20195616ad366f060bea772342a99b96735205 +Author: Panu Matilainen +Date: Mon Jan 19 14:25:55 2009 +0200 + + Fix segfault if ts rootdir is NULL (Pixel) + +commit ffcd6a60fc38dfe0d10f22c6023df3e932996310 +Author: Panu Matilainen +Date: Mon Jan 19 14:21:45 2009 +0200 + + Fix memleak from i18n strings if retrieved with HEADERGET_ALLOC + +commit 0b2d7775c5e828652e45829f551352b93890bbc8 +Author: Panu Matilainen +Date: Sat Jan 17 14:15:50 2009 +0200 + + Make it possible to disable %pre- and %posttrans scriptlets (rhbz#475582) + - rpmtransFlags_e is overcrowded, map to "regular" %pre and %post + scriptlet behavior for now + - split up the transaction flags at some point to permit more precise + control + +commit 947ad7acb3e237446f0e20c0009e9ae07e0f26dc +Author: Panu Matilainen +Date: Fri Jan 16 09:09:40 2009 +0200 + + Add getenv macro, use instead of $(echo $HOME) for defauls + - inspired by http://lists.rpm.org/pipermail/rpm-maint/2009-January/002332.html + +commit 91e0004f0bb772e7e6f9f84b8a476b5e5783d97e +Author: Jindrich Novy +Date: Thu Jan 15 13:25:08 2009 +0100 + + Update Brazilian Portuguese translation (rhbz#480040) + +commit af9801a162ef41ca85ca62a30b17f745d2ac855a +Author: Panu Matilainen +Date: Thu Jan 15 10:28:13 2009 +0200 + + Add extra parameter to rpmteClose() to control fi behavior + - pre/posttrans scripts should leave te->fi alone, now it was getting + nuked, oops.. + +commit 6d26397a616586999f93fc4de30203db267a28f4 +Author: Panu Matilainen +Date: Thu Jan 15 09:22:58 2009 +0200 + + Make sure global state gets NULLed on free + - otherwise repeated read config -> free config like rpmbuild does + will crash and burn + - somewhat kludgy, figure a better way to do this + +commit 267e77f1c1ef007138610a8812a7ca1e3b632eca +Author: Panu Matilainen +Date: Wed Jan 14 15:18:25 2009 +0200 + + Add central Lua shutdown function and use it + - makes sure lua garbage collect runs + - memory used by lua gets freed + +commit 6be1bdf1252c42a1b7329185b0c6e589b47ca948 +Author: Panu Matilainen +Date: Wed Jan 14 15:09:25 2009 +0200 + + Add librpm level lua extension stub + - inspired by rpm5.org, details differ + - just rpm.vercmp() for now + - push all Lua initialization to rpmLuaInit() + +commit 2e0d5ef2d0b90fc43ac015396e78cd15225bb86e +Author: Panu Matilainen +Date: Wed Jan 14 14:39:55 2009 +0200 + + Add rpmluaGetGlobalState() to internal lua api + - retrieve global state, init if needed + - inspired by rpm5.org, details differ + - use it for initialisation in rpmrc instead of abusing rpmluaGetPrintBuffer + +commit 11c6c2b00454c68dba6cd17600bb7f8e1acada99 +Author: Panu Matilainen +Date: Wed Jan 14 10:52:41 2009 +0200 + + Actually check for dbenv->failchk() exit code + - failchk() can't resolve all cases, we shouldn't try to continue if it fails + +commit 2f239d1dfa47da51ebc002f1229eecf3c71b3271 +Author: Jindrich Novy +Date: Tue Jan 13 19:28:47 2009 +0100 + + Remove redundant anyarch check + +commit f4c997cac8a9205067a584f03ed7039cd0877b4e +Author: Jindrich Novy +Date: Tue Jan 13 19:26:35 2009 +0100 + + Simplify group tag inheritance for a bit + +commit cc38c36a3163f17110d8005bf5069465b27cdc6c +Author: Jindrich Novy +Date: Tue Jan 13 09:20:00 2009 +0100 + + Inherit group tag from the main package if unspecified (rhbz#470714) + +commit 744846875b198558c904fa9fca3c55bfcfb647cb +Author: Jindrich Novy +Date: Mon Jan 12 16:15:27 2009 +0100 + + Ignore BuildArch tags for anyarch actions (rhbz#442105) + +commit 0ba387b45b71096a75eb66bb38805af99d0c70b8 +Author: Florian Festi +Date: Fri Jan 9 17:27:35 2009 +0100 + + Make the data array part of the hash bucket to save one pointer per bucket + +commit a7716784f26c11efe00cc737246f63e29a1aac71 +Author: Panu Matilainen +Date: Mon Jan 12 12:57:03 2009 +0200 + + Updated German translation (Fabian Affolter) + +commit e58db2eda1609a8b48d8248390a2d87ff99fdd6d +Author: Jindrich Novy +Date: Sun Jan 11 16:54:07 2009 +0100 + + Don't check package BuildRequires when doing --rmsource (rhbz#452477) + - export doRmSource() and make it more consistent with the API + +commit 1909784075c064ec8102b785415e6e7b832df3c3 +Author: Jindrich Novy +Date: Sun Jan 11 15:23:59 2009 +0100 + + Don't fail because of missing sources when only spec + removal is requested (rhbz #472427) + +commit 83e5726aadf1ca9111f3cf61130b2be9e3ea4c29 +Author: Panu Matilainen +Date: Fri Jan 9 17:13:19 2009 +0200 + + javadeps format string fix from Pixel + +commit e1474f4b1d71a0021ca359dbdd60a17984eb0ff2 +Author: Panu Matilainen +Date: Fri Jan 9 17:05:40 2009 +0200 + + Don't bother calculating string sizes manually + - ...and one less strcpy() to grep for + +commit 00d48deffecb109c1dcfff2ee9c9a27ca412a16f +Author: Panu Matilainen +Date: Fri Jan 9 16:59:43 2009 +0200 + + Fix buffer overflow on oversized filelist entries (susebz#397006) + - original fix by Dirk Mueller + +commit fcbe5a6e01661e0ffc75a95252789f6309373edf +Author: Florian Festi +Date: Fri Jan 9 15:36:36 2009 +0100 + + Implement dbiGet and dbiPut as normal function + +commit a3d682200bd0a74f2c05f9f618700ebcbc00e0c7 +Author: Florian Festi +Date: Fri Jan 9 15:25:56 2009 +0100 + + Remove unused database intex functions: dbiCdup, dbiAssociate, dbiPget, dbiJoin + and their implementations in the backends + +commit 6e816c44dc70197477845de924b9d58f35d01e6c +Author: Panu Matilainen +Date: Fri Jan 9 15:05:40 2009 +0200 + + Don't try to create "" directories + +commit b7ba50c3a5ab54a142d6616f1f4029c475f23cf5 +Author: Panu Matilainen +Date: Thu Jan 8 15:04:58 2009 +0200 + + Update docs wrt gpg path macro (rhbz#476201) + +commit 685361038e87d321bd0f0d1451471df923ce667b +Author: Panu Matilainen +Date: Thu Jan 8 13:57:59 2009 +0200 + + Don't bother translators with messages from unused utilities (rhbz#466834) + - these things dont even get built normally, translations hardly needed + +commit 5ff05aec30ddceb0fc8f2ecd7797aa7bdc9bc96d +Author: Panu Matilainen +Date: Thu Jan 8 13:17:22 2009 +0200 + + Delay NSS initialization until actually used + - since NSS is allergic (ie becomes non-functional) after forking, delay + it's initialization until really needed, ie lazy init in rpmDigestInit() + - however as NSS init can fail if attempted in completely empty chroot, + we force crypto init to happen at transaction set create time, forking + past that is pretty much doomed anyway + - this is the other half of the fix for rhbz#476737, and similar case + noticed by Pixel in Mandriva (due to urpm forking) + +commit c895fb1541f5edbdc53eb6d70eb6157566e6e528 +Author: Panu Matilainen +Date: Thu Jan 8 13:03:55 2009 +0200 + + Only touch _crypto_initialized if we actually change it + +commit fa299eec0cca00e87a826e2c487705cb6c80c217 +Author: Panu Matilainen +Date: Thu Jan 8 12:24:50 2009 +0200 + + Cast to intptr_t instead of int to kick out the final warning + +commit bb45458b6eb11149011a88d12b38f05569571c6a +Author: Panu Matilainen +Date: Thu Jan 8 12:07:54 2009 +0200 + + Include isaname support for arm (Kedar Sovani) + +commit 4516645506211e32f64b1cffc20d1a93d7e47f4c +Author: Panu Matilainen +Date: Thu Jan 8 11:47:31 2009 +0200 + + Make rpm_tid_t unsigned type to shut up remaining compiler warnings + +commit 882e8df3d0b0d1f88db7550fcc83b821dc0ba93a +Author: Panu Matilainen +Date: Thu Jan 8 10:38:29 2009 +0200 + + Don't segfault in pgpPubkeyFingerprint() if rpmDigest* fails + - this can happen if NSS is not properly initialized, such as after + forking + - partial fix to rhbz#476737 (as in "doesn't crash"), deeper issue is + that NSS init needs to be done later than we do now + +commit 4bf615989c2c7519abab043f4a152f594d8b7a69 +Author: Panu Matilainen +Date: Wed Jan 7 15:54:06 2009 +0200 + + rpmRelocateFileList() doesn't need rpmte for anything, just file states + +commit 54cabb77124e633e7c60b6293869bf72665abb32 +Author: Panu Matilainen +Date: Mon Jan 5 17:43:37 2009 +0200 + + Validate + sort relocations in rpmte at create time + - instead of storing "raw" relocations in rpmte to be passed down to + rpmRelocateFileList() for copying over and sorting etc, do the work + just once at rpmteNew() time + - much of the real work to relocate header contents still needs to be done + twice as the header gets thrown and needs to be reconstructed in + rpmtsProcess() + +commit c115ea730ff7ac078f4269328b4b558f08911d25 +Author: Panu Matilainen +Date: Sat Dec 20 09:41:04 2008 +0200 + + Split saving relocations to header out of relocateFileList() + - also realizing we can just headerMod() the td's we originally got, + they contain the modified data now... duh :) + +commit 0d472e2574009a895ff2bb7f7f36bf99847e2778 +Author: Panu Matilainen +Date: Sat Dec 20 00:43:51 2008 +0200 + + Split sorting out of relocateFileList() + +commit 0b8f01c19a4ad1ca8957e9c3c78e79f7ee442905 +Author: Panu Matilainen +Date: Fri Dec 19 20:05:55 2008 +0200 + + Split RPMTAG_INSTPREFIXES addition out of relocateFileList() + - just splicing up the monster function... + +commit 36541e3b99afefa86ee6cd285aa2927be26e7d0d +Author: Panu Matilainen +Date: Mon Jan 5 15:02:34 2009 +0200 + + Relocation needs to be called even if no relocs specified + - relocatable packages expect RPM_INSTALL_PREFIX in scriptlets even + default prefix is used, relocation adds RPMTAG_INSTPREFIXES + +commit 0ab10fbf3f9e3432f180f1033b4900e2d0521657 +Author: Panu Matilainen +Date: Mon Jan 5 11:25:03 2009 +0200 + + Lose deprecated DETAILS_AT_TOP doxygen setting + +commit 122e2d204e0bdcf081bf1bd05f410a6040a110bf +Author: Panu Matilainen +Date: Mon Jan 5 11:18:46 2009 +0200 + + Eliminate header magic duplication all over the place, export it + - avoid several copies of the same thing... + - there are valid reasons for wanting to know header magic outside librpm, + export it as rpm_header_magic + +commit b0a4ff421bec790eaa3c16684e7ffcc49ac92314 +Author: Panu Matilainen +Date: Mon Jan 5 10:42:54 2009 +0200 + + Use enumeration for header flags + +commit 3de166775cac39a3fc34f225ef4859517040b328 +Author: Panu Matilainen +Date: Mon Jan 5 10:39:15 2009 +0200 + + Remove unnecessary HEADER_FOOTAG definitions + - header.c can include rpmtag.h these days + +commit abaa8d12b777d03fb9800953ad6a3c9997fdcc40 +Author: Panu Matilainen +Date: Fri Jan 2 12:27:32 2009 +0200 + + rpmte struct is now fully opaque throughout rpm + +commit 54e77ab1e3f0773527ab06294792af23b3b6d780 +Author: Panu Matilainen +Date: Fri Jan 2 12:25:02 2009 +0200 + + Use rpmteSetFd() instead of direct access to rpmte structure + +commit 7d80218f391cf2d6902eb6c031d117956f05e8e7 +Author: Panu Matilainen +Date: Fri Jan 2 12:21:52 2009 +0200 + + Add rpmteSetFd() (internal) function + - this is dumb as only rpmInstallSourcePackage() needs, figure out something + better eventually + +commit c9e46a798598e30e152338c95225a25072264022 +Author: Jindrich Novy +Date: Tue Dec 23 09:48:16 2008 +0100 + + Increase XZ decompression memlimit + +commit 64c16c1fa88b35f95726203d23a26de0002f1b85 +Author: Panu Matilainen +Date: Mon Dec 22 15:30:23 2008 +0200 + + Eliminate silly and now unnecessary rpmts(Set)RelocateElement() stuff + +commit 16987711822e1443792ab5dd09666a7acff93095 +Author: Panu Matilainen +Date: Mon Dec 22 15:29:52 2008 +0200 + + Perform relocations from rpmte instead of rpmfi + - rpmte has all the necessary bits at hand, rpmfi does not + - avoids silly ping-pong through transaction set to get to the ts element + - avoids recalculating number of relocations + - avoids accessing rpmte struct outside rpmte.c + +commit dd91ff060c2053a482fd540afa8e30c1f874f3ab +Author: Panu Matilainen +Date: Fri Dec 19 18:59:38 2008 +0200 + + Perform relocations *before* filling out rpmfi structure + - no need to fuss about recreating bits and pieces of rpmfi after the fact + +commit 107d941650eb34197d52404859da9ddf4bf02bc9 +Author: Panu Matilainen +Date: Fri Dec 19 18:49:09 2008 +0200 + + Avoid a whole lotta shuffling wrt file info header + - We're not making copies of header or anything here, all this linking + and unlinking is unnecessary. Just have relocateFileList() modify the + header we pass to it, as that's what it's doing *anyway* + +commit 41b1fe84cc1bb66a9ea4f8e704b3c671a71e2607 +Author: Panu Matilainen +Date: Fri Dec 19 17:46:16 2008 +0200 + + Ignore rpmfi flags for basenames + dirnames + - we make a copy if we modify, doesn't make a difference + +commit 31a2eac384b7527471d25f1f93be017882c98aea +Author: Panu Matilainen +Date: Fri Dec 19 17:44:33 2008 +0200 + + Sanitize file modes handling in relocation + - we dont modify fi->fmodes so fi->scareFlags is irrelevant, just use minmem + always + - use rpmtd accessors instead of direct access + +commit 1c20dc3aa1de5c2f73a49ed0a2d40b1ef5c005af +Author: Panu Matilainen +Date: Fri Dec 19 17:34:40 2008 +0200 + + Remove unused file/dir color calculations + +commit 881a0034f7a93dd19de5fd90c5ad46edc2936c10 +Author: Panu Matilainen +Date: Fri Dec 19 17:27:28 2008 +0200 + + Save some trouble by grabbing malloced copy of dir indexes + +commit 8becdbfd73d49ca353254d4e40687a9399e240ae +Author: Panu Matilainen +Date: Fri Dec 19 16:19:32 2008 +0200 + + Remove couple of leftover, unused local variables + - one more fi-> access still lurking... + +commit 8db2c32a74cb667051b2b824e434b1e13da6511d +Author: Panu Matilainen +Date: Fri Dec 19 15:05:54 2008 +0200 + + Eliminate last remaining fi-internals use from transaction.c + +commit 897bbbd7086ef90840a89d7d0bf39721dd698b24 +Author: Panu Matilainen +Date: Fri Dec 19 15:04:51 2008 +0200 + + Add internal rpmfi apis to deal with fingerprints, use them + +commit fe5e906ab2cfe9ed82ba7fa63277d5ce41451b87 +Author: Panu Matilainen +Date: Fri Dec 19 14:57:37 2008 +0200 + + Eliminate file info set argument to rpmpsmNew() + - ts element carries the info already, no need for separate argument + +commit cbcff3bd99f11ad2e8ff8e37ebd32993f25d9a2f +Author: Panu Matilainen +Date: Fri Dec 19 14:34:45 2008 +0200 + + Optionally reload ts element file info in rpmteOpen(), free in close + - avoids having to muck with te internals here and there... + +commit 87cf7db1edb922587dd26bb19abada7c4fba51c7 +Author: Panu Matilainen +Date: Fri Dec 19 14:13:48 2008 +0200 + + Use rpmteSetFI() to clear memory instead of direct access + - also fixes memleak in case rpmfi has no files + +commit de383d126a9e2789afbda412bb8e8d6d02462fee +Author: Panu Matilainen +Date: Fri Dec 19 14:04:18 2008 +0200 + + Add rpmteSetFI() ts element method + +commit 4d1826f63fc022456f083076c27313e52a57d24b +Author: Panu Matilainen +Date: Fri Dec 19 13:18:31 2008 +0200 + + Free rpmfi fingerprints in rpmfiFree() + +commit 83f02cbb74d150cc1c05d73286a4be803f1d5316 +Author: Florian Festi +Date: Thu Dec 18 11:57:02 2008 +0100 + + Reduce the hash size of the fingerPrintCache by factor 4 + +commit feaad9829a264e2dff3549c165278a8629b32c59 +Author: Florian Festi +Date: Thu Dec 18 11:54:45 2008 +0100 + + Do only add symlinks the the first rpmFpHash as these are the only one we really need in there. + Also reduce the hash size. + +commit e6f1c592fb7db65d3fd5756d202ec9c4a75ec34b +Author: Florian Festi +Date: Thu Dec 18 09:41:12 2008 +0100 + + Reduce the size of the FpHashes by factor 4. + It turns out that large hashes leave a lot of buckets + empty without really reducing the maximum of collisions + a lot. Tests show that the collision lists are only 2.3 + items on average and the maximum is only about 1.5 worse + than with a big hash table (~12 for large hashes). + +commit b2496694fac38f07d1be61abceaacc46db12ab1d +Author: Panu Matilainen +Date: Thu Dec 18 11:48:09 2008 +0200 + + Oops, rpmfiFInode() gone missing... + - forgotten from commit 9c15574bae8b11a7381c01a1af39e0d59558bad5 + +commit 465841e8501762b36899b6f31b47968efbe74538 +Author: Panu Matilainen +Date: Thu Dec 18 10:01:01 2008 +0200 + + Check chroot() result in psm too (Pixel) + - bail out early if it fails instead of blindly continuing and potentially + messing in real root (chroot can fail for priviledged user too) + +commit e0f57801c0cb035814509bdae13c3e859d471d59 +Author: Panu Matilainen +Date: Thu Dec 18 09:51:37 2008 +0200 + + Permit --noscripts on verify (to disable %verifyscript execution) + - this used to work but got broken by the rpmi/rpmq/... unification + +commit 766821b8a30bc962c8c3b1e5542882110c197d68 +Author: Panu Matilainen +Date: Mon Dec 15 10:26:45 2008 +0200 + + Check for termination signals during query loops + +commit 7d371fdaa3a796fd23d18ffc80785637262c7434 +Author: Panu Matilainen +Date: Thu Dec 11 10:17:48 2008 +0200 + + Add public rpmfi function for retrieving digest algorithm of the set + - the information is already available through rpmfiFDigest() but that + requires valid iteration index to be active, whereas the digest algo + is per info set, not per file + +commit 5e23e148aab02a37e0f64c1987aaaf0c80963845 +Author: Panu Matilainen +Date: Thu Dec 11 10:11:59 2008 +0200 + + Avoid direct access to rpmfi directory indexes + +commit 3c22ec586f58e210331988b56873a109f74ca182 +Author: Panu Matilainen +Date: Thu Dec 11 10:07:41 2008 +0200 + + Add (internal) rpmfi accessor for dir indexes + - except for dnli->active setting in dnlInitIterator(), "give me + directory matching this basename index" would be sufficient + +commit f19c89778520b8c9e61db8744cb45abf489c6132 +Author: Panu Matilainen +Date: Thu Dec 11 10:01:10 2008 +0200 + + More rpmfi direct access avoidance in fsm + - the remaining bits need further accessors / refactoring + +commit f32e6c9d05db10122166d15694ad91a68268a9d5 +Author: Panu Matilainen +Date: Thu Dec 11 09:54:29 2008 +0200 + + Avoid most of direct rpmfi accesses in dnlInitIterator() + - need to add an accessor function for fi->dil info + +commit 284de053fdbc7cd9de2614dc4af042d29abfd190 +Author: Panu Matilainen +Date: Thu Dec 11 09:52:31 2008 +0200 + + Avoid bunch of now unnecessary direct accesses to rpmfi struct in fsm + +commit f7275ffa1321e6d123ff434e00e4c39b302f83f0 +Author: Panu Matilainen +Date: Thu Dec 11 09:23:40 2008 +0200 + + Use indexed accessors instead of direct rpmfi struct access in fsmMapFCaps() + - also rpmts is unused here, remove + +commit b24b9ab7ffffda9841a031d75ce444a223d3cb07 +Author: Panu Matilainen +Date: Thu Nov 27 11:19:24 2008 +0200 + + Avoid bunch of unnecessary direct fi-> accesses for file and dir count + +commit 42df29f4e45ed5cc1e990637ca555b954b980673 +Author: Panu Matilainen +Date: Thu Dec 11 09:15:27 2008 +0200 + + Use indexed rpmfi accessors instead of fiddling with iterator index + - saving and restoring rpmfi iterator index has unwanted side-effects + - reverts brokenness from 6fd987b7291fb1306297c193f4ab01bf6cd02618 + +commit 9c15574bae8b11a7381c01a1af39e0d59558bad5 +Author: Panu Matilainen +Date: Thu Dec 11 08:57:16 2008 +0200 + + Add indexed accessors for rpmfi data, internal only for now + - fsm in particular wants random access to rpmfi data and there's little + reason to deny it, file info data is not going to move to linked lists + or anything like that anytime soon, permitting indexed access allows + eliminating direct accesses to rpmfi struct + +commit ac9c8dc48a8f3efb662b7d615c6a0c94fbe42018 +Author: Florian Festi +Date: Mon Dec 8 17:46:36 2008 +0100 + + use RPMFI_KEEPHEADER instead of numerical constant + +commit 6e7b664e81b37be79d3dfdda4c7a72c4b7fdc760 +Author: Florian Festi +Date: Wed Dec 3 10:59:05 2008 +0100 + + Kill rpmfiUpdateState and free all the rpmfis as soon as file conflict check is done + +commit 395b5cffd5a64cdd2a4c2ade06a1a0b8b38d59eb +Author: Florian Festi +Date: Wed Dec 3 10:39:48 2008 +0100 + + Move ->actions from rpmfi to rpmfs + and adjust all code using it + also "revert" a4e345455d817ce6c56940600d652ee3ae0aa5d5 + "Move file action calculations to rpmfiNew() where possible" + +commit 9c9410dc7afb3bfa9b47d2d4691fabd8f067c86b +Author: Florian Festi +Date: Tue Dec 2 10:11:44 2008 +0100 + + Move the run time part of fstates from rpmfi to rpmfs. Keep fstates in rpmfi as long as it is a real tag read from the rpmdb. + +commit 8fa80b0f35574683beb19930264fa3b572c5ed24 +Author: Florian Festi +Date: Mon Dec 1 21:34:59 2008 +0100 + + Create a new datastructure rpmfs aka File States that contains the information what to do with the files of an transaction element. + This patch moves rpmfi->replaced over to rpmfs. Move struct members to follow. + +commit 196cc2ad71a6af90961ab62f9f32fc14f7c61878 +Author: Jindrich Novy +Date: Tue Dec 9 16:24:16 2008 +0100 + + Nuke the useless bits of rpmsort.c declared in global scope + +commit 95b8a910893bba3ad66507975cd96f1c082004e3 +Author: Panu Matilainen +Date: Tue Dec 9 14:58:43 2008 +0200 + + Update testsuite expectations as per array format change, add another test + +commit b838d10e0cf3d747ac0ce5b756688e6677dbc513 +Author: Panu Matilainen +Date: Tue Dec 9 14:52:12 2008 +0200 + + Return nothing at all on empty array queryformats + - (none) might make some sense on non-existent tags elsewhere but + it's plain annoying on arrays + +commit babf17a17dbad3593fe23a407932ba703b5d6d76 +Author: Panu Matilainen +Date: Tue Dec 9 14:15:45 2008 +0200 + + Throw out ancient python/ChangeLog + +commit 2ba56c673bf1c168cccb827938c09f5ff2a3beda +Author: Jindrich Novy +Date: Tue Dec 9 12:47:50 2008 +0100 + + Move declarations of local variables for parsing functions + from global scope. Compilers aren't that stupid these days + +commit 0643dd44e6e243870868b0fb8196adad1632dfbb +Author: Panu Matilainen +Date: Tue Dec 9 13:23:00 2008 +0200 + + Test for fakechroot in configure + - only needed by the testsuite + - optimally testsuite should skip parts needing fakechroot if it's not + there but at least this'll leave a trace into rpmtests.log... + +commit 7115b8257edc2374b4833e7c4d23ae94a24f52ea +Author: Panu Matilainen +Date: Tue Dec 9 10:06:39 2008 +0200 + + Add "deptype" format extension + +commit bafed0d85c12a2e709dd1a50c817361659bfbd11 +Author: Panu Matilainen +Date: Tue Dec 9 09:51:17 2008 +0200 + + Oops, missing wrappers for C++ in headers (ticket #12) + +commit 50a4ed783c300a92948f7933a3c726d4bd2d643d +Author: Panu Matilainen +Date: Mon Dec 8 19:51:10 2008 +0200 + + Work around broken packages which dont have RPMTAG_SOURCERPM + - check the lead type and headerIsSource() agree on the type and if not, + fix it up based on the information in lead + +commit 826969f2c7307e7292f192fd10625d863d656723 +Author: Panu Matilainen +Date: Mon Dec 8 19:50:07 2008 +0200 + + Add function to retrieve type from rpmlead + - for some messed up packages there's no other reliable way to determine + source vs binary than looking at the lead :-/ + +commit 0eb0e79a80e20723d0ebe58996bc3f30a3feabe7 +Author: Panu Matilainen +Date: Mon Dec 8 18:46:02 2008 +0200 + + Fix segfault on packages without separate scriptlet program tags (rhbz#475214) + +commit ab02fb183a441b6a30c863aebf49be992cd431fe +Author: Panu Matilainen +Date: Fri Dec 5 21:44:43 2008 +0200 + + Fix pkg-config provide generation on interdependent .pc's (rhbz#473814) + - based on Arjan van de Ven's and Dan Nicholson's suggestions + +commit 9799e69263d94ba1aca61795645c750bcd497ee5 +Author: Panu Matilainen +Date: Fri Dec 5 21:17:16 2008 +0200 + + Avoid "template" which is a reserved word in C++ + +commit cc74d50a6dadfa30914844e6c4c0513287bf7f68 +Author: Panu Matilainen +Date: Fri Dec 5 13:38:30 2008 +0200 + + Tighten up setting and checking of buildroot (ticket #10) + - expand, set and verify buildroot just once for after main package preamble + is parsed to avoid sub-packages from overriding it + - spec can still mess with %buildroot by defining it to something else + after preamble but that's another issue... + +commit 23c55fa997b66f39a50c34512fb07c78343f1062 +Author: Panu Matilainen +Date: Thu Dec 4 22:30:35 2008 +0200 + + Adjust test result to meet current expectation + +commit e232344a496798e4ca143630a127d8ead086eb7c +Author: Panu Matilainen +Date: Thu Dec 4 21:55:52 2008 +0200 + + Pay more attention to tag extension return codes + - behave like headerGet() does and return failure if there's no data + to return + - some cases where we used to return nothing previously now return (none) + in query, but the former behavior was inconsistent between tags + - not sure if (none) is really wanted for a return of no value always, + but at least it's consistent now + +commit 1f61d628fdd07a11aa7a84dc15a74150865e575f +Author: Panu Matilainen +Date: Thu Dec 4 19:10:41 2008 +0200 + + Fix triggerconds return when no data is there (rhbz#474550) + +commit 144463a82d493981281dda24cdbb4b785f7bbab1 +Author: Panu Matilainen +Date: Thu Dec 4 19:04:14 2008 +0200 + + Avoid rpmtd abuse to report "(none)" when no data is found + - simplifies things quite a bit and avoids having to deal with + numeric data suddenly appearing as string elsewhere + +commit d9082ba95ccb911a452803078eece0140097e78c +Author: Panu Matilainen +Date: Thu Dec 4 21:25:12 2008 +0200 + + Comment out rpmbuild --root tests + - no point testing what's not really ever been implemented + +commit c0e6b4579fa0e392dd2de1d4aa0245983c58ae06 +Author: Panu Matilainen +Date: Thu Dec 4 21:23:06 2008 +0200 + + Add a pile of queryformat tests + - a few fail, and for a reason (rhbz#474550 and breakage from + tag class changes) + +commit ba87a938b77c7ab9ffa4cca1255a877600ba2305 +Author: Panu Matilainen +Date: Thu Dec 4 10:23:40 2008 +0200 + + Fix python header retrieval return type for non-existent tags (rhbz#473239) + - array / not array return needs to be honored even when tag doesn't exist, + wtf have I been thinking, duh! + +commit 5e5aa256d70987dca7af5e6cbeb9269ead0e3011 +Author: Panu Matilainen +Date: Wed Dec 3 14:56:52 2008 +0200 + + Add tests to verify on-disk status after install+erase + +commit 34159ad112684156aac6e91364c7c7bce1f1df14 +Author: Panu Matilainen +Date: Wed Dec 3 14:17:25 2008 +0200 + + Add test to verify status of installed files + +commit d54e0e899f02b3e492e7f8e73c10f9c3a8f53034 +Author: Panu Matilainen +Date: Wed Dec 3 11:29:19 2008 +0200 + + Remove unnecessary fiddling with rpmte internals + - rpmtsClean() will free the transaction element we added and rpmteFree() + will in turn close the file descriptor, free headers etc + +commit 0b80d38f32b438d81d47fc61074b1f163518d68f +Author: Jindrich Novy +Date: Mon Dec 1 12:16:56 2008 +0100 + + Include rpmfileutil.h from rpmmacro.h so that + prototype for rpmGenPath() is included (rhbz#473420) + - unbreaks net-snmp + +commit 7ea78b4927bdf86bc09f2dee025cb43c44609099 +Author: Panu Matilainen +Date: Mon Dec 1 13:03:05 2008 +0200 + + Retrieve header from rpmdb on rpmteOpen() if possible, even for TR_ADDED + - as rpmte now knows if it was already installed and the exact rpmdb + record, we can avoid having to re-re-re-open the package in %posttrans, + this means yum & the like can throw away package immediately after + it was processed (rhbz#457126) + - rearrange rpmteOpen() code a bit, split the actual header retrievals + from fd/rpmdb to separate static helper functions + +commit c99197616491693fa0fec5ff39ac4c2cd336f65b +Author: Panu Matilainen +Date: Sun Nov 30 17:36:46 2008 +0200 + + Set/clear rpmte db instance on RPMDB_ADD / REMOVE from psm + - transaction elements now know their real status all the time now + +commit 31f0e1db5897d127cc772e775d522ff551b36cc3 +Author: Panu Matilainen +Date: Sun Nov 30 17:28:11 2008 +0200 + + Record header instance on rpmdbAdd() on success + +commit 5d1791e32aa8d4b7baef2639a097af7a6efb665e +Author: Panu Matilainen +Date: Sun Nov 30 17:22:24 2008 +0200 + + Add and use (internal) method for setting header instance + - avoid mucking with header internals directly... + +commit dc818e63544f8cdd53bb6e1f2a6fba70f6aea437 +Author: Panu Matilainen +Date: Sun Nov 30 14:07:03 2008 +0200 + + Move install langs to per-transaction level + - install langs is clearly a per-transaction thing, avoid checking + and splitting etc over and over for every package + - also if any of the %{_install_lang} is "all", disable all language + processing as we'll be installing every language anyway + +commit 5dfc982dda733dbf06128358816bf6d91cd18c2a +Author: Panu Matilainen +Date: Sun Nov 30 13:51:32 2008 +0200 + + Move netsharedpaths to per-transaction level + - netsharedpaths is clearly a per-transaction thing, avoid checking + and splitting etc over and over for every package + +commit 26da2e12d7b11d967656a19300ed871f21bfed63 +Author: Panu Matilainen +Date: Sun Nov 30 13:02:34 2008 +0200 + + Eliminate unused filename field in rpmts_s + +commit 0372f7d8b4ea14f8248fa287fe43eaf04e93a638 +Author: Panu Matilainen +Date: Sat Nov 29 14:34:01 2008 +0200 + + Read default popt aliases again (rhbz#473167) + - makes testsuite depend on local aliases but using default popt config + is widely documented and needs to work, testsuite needs a better method + of disabling it if necessary + +commit 604a54277ed21f1fd983c205ad7d36feb3950ce1 +Author: Panu Matilainen +Date: Sat Nov 29 13:52:32 2008 +0200 + + Unify dbiIndexSet allocations, allocate in power-of-two sizes + - allocating in even sized chunks helps avoiding crazy memory fragmentation + when resizing a lot (rhbz#472507) + - HEAD doesn't really need, rpm 4.6.x does, but doesn't hurt either... + +commit 881f14d277eefc70d65bf48b1837f0219572f397 +Author: Panu Matilainen +Date: Sat Nov 29 12:04:46 2008 +0200 + + Use proper type (unsigned) for index set offset/count + +commit 2d918b5aa0a4afec407937bb6e1d4b7ae6ba4be3 +Author: Florian Festi +Date: Fri Nov 28 12:16:00 2008 +0100 + + Delete _dbiIndexItem.fpNum as it is no longer used and also does not really fit in there + +commit 17f2cbe6e617dff5516498dd3b4cf15da6d0e747 +Author: Florian Festi +Date: Fri Nov 28 11:14:41 2008 +0100 + + Delete rpmdbFindFpList and skipDir + as those are replaced by rpmFindBaseNamesInDB + and parts of checkInstalledFiles + +commit b12afb1a40d0acdfa9fee058c9c0ef2c5891690d +Author: Panu Matilainen +Date: Thu Nov 27 11:35:56 2008 +0200 + + Oops, it wasn't unnecessary include afterall.. + +commit 0b5e0fb58c0577af6824d313c2a06045e94da70f +Author: Panu Matilainen +Date: Thu Nov 27 10:59:14 2008 +0200 + + Remove unnecessary rpmfi_internal.h include + +commit b76b945b2dc3aee2db429f5bc422780c71b802f2 +Author: Panu Matilainen +Date: Thu Nov 27 10:48:22 2008 +0200 + + Add + use internal rpmteHaveTransScript() function + - struct rpmte_s is now fully opaque within transaction.c + +commit 8b7cb846d4e466461e9faa34d354cef986ed4472 +Author: Panu Matilainen +Date: Thu Nov 27 10:28:10 2008 +0200 + + Eliminate the now unused ts element field of file info sets + +commit 2654bc49ab3ac604a3ecd0a39c5815927bbe112d +Author: Panu Matilainen +Date: Thu Nov 27 10:25:47 2008 +0200 + + Eliminate rpmtsiFi(), use rpmteFI() instead + - rpmtsiFi() is only used within iteration, so we already have the + element, no point in recalculating it + - also eliminates the sneaky side-effect of setting fi->te which otherwise + wouldn't exit + +commit 9a155dd3505aa4e708c0ad9e0da747626a93c6f5 +Author: Panu Matilainen +Date: Thu Nov 27 10:22:45 2008 +0200 + + Avoid unnecessary use of file info sets transaction element + - ts element is available, no need to go backwards + +commit 48cefd2d785d3ba70eb5636789d63dd14c229e7f +Author: Panu Matilainen +Date: Thu Nov 27 10:02:00 2008 +0200 + + Drop the useless "tag" argument from rpmteFI() + - only RPMTAG_BASENAMES was ever allowed as the tag, makes no sense + - API change but AFAIK nothing outside rpm itself uses it anyway + +commit 01739ef5d6a56cea818f88a693a21359e3badca3 +Author: Panu Matilainen +Date: Thu Nov 27 09:39:40 2008 +0200 + + Eliminate silly rpmfiTypeString() + - Transaction elements are install/erase type, not file info sets, + rename to rpmteTypeString(). It's only "useful" for fsm internal + debugging messages, hide it there. + +commit c2bde085f546efe016419ee286b2448f63c3a0e0 +Author: Panu Matilainen +Date: Wed Nov 26 16:14:29 2008 +0200 + + Eliminate fi->te use in fsm + +commit 610347de6e07e7cd4ff13cfa9467280ed5e8c175 +Author: Panu Matilainen +Date: Wed Nov 26 16:08:04 2008 +0200 + + Pass rpmte to fsmSetup() + - fsm needs the transaction element for progress notification and + element type anyway + +commit 54b683d2f395998178b760257f1145c246f9e09f +Author: Panu Matilainen +Date: Wed Nov 26 16:01:40 2008 +0200 + + Remove bogus consts from fsmSetup() args + - rpmfi is messed with (at least file actions) + - const on typedef'ed type doesn't mean a thing anyhow + +commit 5bfe30320102e54a0428eb500fe19ec8f7adb5e1 +Author: Panu Matilainen +Date: Wed Nov 26 19:04:02 2008 +0200 + + Use rpmteNEVRA() for scriptlet messages now that it's possible + +commit e56768c279b7214300bade2e82ab90e4d1afe7ff +Author: Jindrich Novy +Date: Wed Nov 26 16:43:49 2008 +0100 + + Increase memory limit for LZMA compression + so that everything up to level 9 gets safely + expanded + +commit d6f6d2b565f8ccb005b3230fa987a9d961c64533 +Author: Jindrich Novy +Date: Wed Nov 26 16:35:07 2008 +0100 + + Initialize the LZMA encoder/decoder on demand, not both + +commit 2494b26f01ae7447365fd3b62d028e4402f9cff5 +Author: Panu Matilainen +Date: Wed Nov 26 17:41:22 2008 +0200 + + Fix up couple of missed pieces rpmffi_s fi->te switchover + +commit 7ef6ab6bcf220ca411f764d18ee2b7efef9b81d9 +Author: Panu Matilainen +Date: Tue Nov 25 17:05:26 2008 +0200 + + runTransScripts() don't need no steenking rpmfi's now + +commit 2fb2614c38cd6b7be7ce5698aef03876074eb790 +Author: Panu Matilainen +Date: Tue Nov 25 16:35:21 2008 +0200 + + Lose unnecessary and silly rpmpsmGetTs() internal func + +commit 26faceebed701d23e775f68d3b10b3ec93cac3ac +Author: Panu Matilainen +Date: Tue Nov 25 16:32:36 2008 +0200 + + Resurrect rpmVerifyScript() + - fake up a transction element set that we can use to convince psm to + execute the script + - a bit hacky but by no means worse than the former fi->h abuse with + scaremem and all + +commit 30d15deedf6b4fc7cfb7d3c252f9d838445979af +Author: Panu Matilainen +Date: Tue Nov 25 14:01:38 2008 +0200 + + Rip the remains of fi->h in psm + - erasure doesn't need the special casing anymore + - remove useless comments + +commit e939e16364fa4a42880e2b15727c8aa68b83b257 +Author: Panu Matilainen +Date: Tue Nov 25 13:44:51 2008 +0200 + + Use ts element, not fi header for PSM_PKGINSTALL (PSM_POST + PSM_INIT) + +commit af4d4ed806347acd3cb58d9885191b6a9444233a +Author: Panu Matilainen +Date: Tue Nov 25 12:53:46 2008 +0200 + + Use ts element, not fi header in PSM_RPMIO_FLAGS and PSM_RPMDB_ADD + +commit 25a02d47bc766386e526c38c9db03a1fbbc4f5f0 +Author: Panu Matilainen +Date: Tue Nov 25 12:39:37 2008 +0200 + + Make psm scriptlet operations use ts element header instead of fi + - this breaks %verifyscript operation (temporarily) + +commit 440e843f87d190bc197c398510b89d8225a38bce +Author: Panu Matilainen +Date: Tue Nov 25 12:22:10 2008 +0200 + + Lose now unnecessary PSM_RPMDB_LOAD stage and rpmpsmSetFI() + +commit 801a36d69beffc383b5cf4fbb63534ead9dfe84a +Author: Panu Matilainen +Date: Tue Nov 25 12:17:47 2008 +0200 + + Rework rpmtsProcess() to use rpmteOpen+Close for both install and erase + - both cases behave fairly symmetrically now + - helps streamlining the process, we get the transaction element and + file info for it before creating the package state machine so we dont' + need to fuss around with updated file info etc + +commit 8690479c3c4a1434624341db8b5a1f3914b26911 +Author: Panu Matilainen +Date: Tue Nov 25 11:51:30 2008 +0200 + + Teach rpmteOpen() and rpmteClose() about TR_REMOVED type + - for open, fetch the header from rpmdb, closing is nearly a no-op + - allows install and erase behave more symmetrically, and also paving way + for better erase callback notifications and other things + - watch out for them refcounts... + +commit 1cbb50c7b99803613b3dea967bc51b3e2687ffe5 +Author: Panu Matilainen +Date: Tue Nov 25 11:46:20 2008 +0200 + + Record failure of install/erase into transaction elements + - add rpmteMarkFailed() (internal) and rpmteFailed() methods to rpmte + - skip any elements marked as failed in rpmtsProcess() + - this is fairly close to the previous "now mostly broken" hack, except + we remember more than one failure so it's slightly better and it's + possible to do much better by making rpmteMarkFailed() smarter + +commit 504b2cf8a74962910502d9389d8e175cedd8fc93 +Author: Florian Festi +Date: Wed Nov 26 16:29:55 2008 +0100 + + Change rpmffi_s to contain a rpmte instead of rpmfi to be able to get rid of fi->te + +commit a3c316bbcb77849258474242ee862426f521a3f4 +Author: Panu Matilainen +Date: Wed Nov 26 08:58:35 2008 +0200 + + Don't bother zeroing rpmte twice on free + - delTE() already zeroes it out + +commit 4e4a7a2d8cd9aa99d6767e90a45c9c8940e07bff +Author: Panu Matilainen +Date: Tue Nov 25 18:06:31 2008 +0200 + + Add rpmhash.[CH] to EXTRA_DIST so they get included in tarballs + +commit ca8c7dcaef9ed791563d38bfa24c65fcc0edcbd6 +Author: Florian Festi +Date: Tue Nov 25 16:05:00 2008 +0100 + + Switch rpmfiUpdateState to the new ->replaced API + and free the additional allocated but unused memory + +commit 028030350a623e4c00c8ecb3c39e09fbb73d1ce1 +Author: Florian Festi +Date: Tue Nov 25 14:33:11 2008 +0100 + + Kill handleRmvdInstalledFile by moving remaining code to checkInstalledFiles + Switch to strict use of rpmtd accessor functions + +commit 93ca811b4ff30659c67aa2c54957abe6cafe5acb +Author: Jindrich Novy +Date: Tue Nov 25 14:12:50 2008 +0100 + + Port LZMA (XZ) support to the new API + - get rid of the obsolete "alone" LZMA file format + and hacks around it + +commit 5dfa17a77c4335dadc652d6c93df2a8bb30c3393 +Author: Jindrich Novy +Date: Tue Nov 25 14:11:08 2008 +0100 + + Use the new LZMA (XZ) magic + +commit c8d0ea1c7203070fb4553a243418be9608912f25 +Author: Panu Matilainen +Date: Mon Nov 24 16:45:22 2008 +0200 + + Move transscripts stuff from rpmfi to rpmte + - transaction scripts have zero to do with files... + +commit dc8f991671b7e0171b6052bc11021e48b16bedf3 +Author: Panu Matilainen +Date: Mon Nov 24 15:39:17 2008 +0200 + + Unify statistics timer calls for install+erase + +commit bc5c667d4f95a6d277860f22889e0be98404f8d6 +Author: Panu Matilainen +Date: Mon Nov 24 15:33:23 2008 +0200 + + Unify install+remove logging, unnecessary code duplication.. + +commit 5e4d353d7924dd63d36e5bc20ec37a2303966216 +Author: Panu Matilainen +Date: Mon Nov 24 15:31:31 2008 +0200 + + Lift the main install+remove loop out of rpmtsRun() + - no functional changes + +commit 9c66a6daa71bf34dbdf3e8b5f4e7a4fc63d0b322 +Author: Florian Festi +Date: Mon Nov 24 14:34:59 2008 +0100 + + Fix timings and no longer pass the file count more than once. + +commit 024e370ae700640bfdd9a0d77cb927ed14a1cd01 +Author: Florian Festi +Date: Mon Nov 24 14:10:11 2008 +0100 + + Remove check that is commented out since ages + +commit c849fac52da4aec3ed133ca65885d8fd2e29416b +Author: Florian Festi +Date: Fri Nov 21 15:00:36 2008 +0100 + + Remove no longer needed sharedCmp + +commit 490a0e4affd79908f54f21a5c4c4f5d94521b9d3 +Author: Florian Festi +Date: Mon Nov 24 13:36:28 2008 +0100 + + fix statistics for looking up symlinks + +commit 95de4c8fef3ad2a5db1d818e4149568e0b9d476b +Author: Florian Festi +Date: Fri Nov 7 10:58:25 2008 +0100 + + Reimplement the check of the files in the transaction against the files in the rpmdb. + Use a global list of packages/files from the rpmdb that may conflict with files in the transaction to avoid loading packages from the rpmdb over and over again. + +commit 35f0d2d3bc1d95993f25b8318d8fb9e33d02360f +Author: Florian Festi +Date: Wed Nov 19 17:11:59 2008 +0100 + + switch to new rpmfiReplaced API + +commit 2f58ae809f18aa9fa5ce76900f298ad17ea24283 +Author: Florian Festi +Date: Wed Nov 19 17:09:57 2008 +0100 + + API for accessing and creating fi->replaced + - new API is not compatible with accessing fi->replaced directly! + +commit d0651021fd0f8edc31332f9f440ce8b51d9b1b2e +Author: Florian Festi +Date: Sun Nov 9 18:02:20 2008 +0100 + + Expose rpmdbSortIterator in rpmdb_internal.h + +commit 69b4090f81c06f12bfd4a9003020f540aebb6442 +Author: Florian Festi +Date: Sun Nov 9 17:54:47 2008 +0100 + + Add rpmdbExtendIterator to do repeated searches + +commit 88db14fc6e116c67c42c9b56122e2163399994d2 +Author: Florian Festi +Date: Wed Nov 5 15:11:55 2008 +0100 + + Support leaving HTDATATYPE undefined to use hash as key only hash (set) + +commit 4662e50781d6cef4761bd34bbee7312b3012dd10 +Author: Panu Matilainen +Date: Mon Nov 24 13:33:41 2008 +0200 + + Add couple of tests for symlink <-> directory behavior + +commit f0d61e42cf69164dca0d20e48caf1643616db2f2 +Author: Panu Matilainen +Date: Sat Nov 22 18:00:10 2008 +0200 + + Remove RPMCONFIGDIR sedding from Makefiles where no longer necessary + +commit a15a475a409e4f929736d28af10bb55b5dfee17c +Author: Panu Matilainen +Date: Sat Nov 22 17:51:42 2008 +0200 + + Don't bother setting rpmrc specifically in tests + - RPM_CONFIGDIR environment is used + +commit a0d1153085ed74f758b5f104eef3be1e73506973 +Author: Panu Matilainen +Date: Sat Nov 22 17:47:44 2008 +0200 + + Remove -DRPMCONFIG from CPPFLAGS where unnecessary + +commit 68230da9cea19ea989c94f4872289e9b5cb2d736 +Author: Panu Matilainen +Date: Sat Nov 22 17:36:05 2008 +0200 + + Use %{_rpmconfigdir} throughout configuration macros and such + +commit eac0666a1f53ac1192f6962c94274c7c845fd236 +Author: Panu Matilainen +Date: Sat Nov 22 17:21:33 2008 +0200 + + Set _rpmconfigdir macro on initialization + +commit 59d5892627638ed9f04fab74cb13592cd4b34e1c +Author: Panu Matilainen +Date: Sat Nov 22 17:12:54 2008 +0200 + + Use rpmConfigDir() instead of hardwired path for rpmrc + macro locations + +commit a8abeef91f0669e726e0b9ab398d56cc38efa3c6 +Author: Panu Matilainen +Date: Sat Nov 22 16:44:33 2008 +0200 + + Use rpmConfigDir() instead of hardwired value in Lua initialization + - userconfig is actually unused + +commit 43b08986a8aa0464566716f6fe0d510e96cd77bf +Author: Panu Matilainen +Date: Sat Nov 22 18:08:40 2008 +0200 + + Use rpmConfigDir() for finding our popt alias file + - this allows popt aliases to be reliably available in tests + - why do we have the popt initialization done twice? + +commit da83a562e1fd81402a39b7c3edfdc413fa860d8c +Author: Panu Matilainen +Date: Sat Nov 22 18:06:31 2008 +0200 + + Add function to retrieve rpm config base directory + - one-shot to determine configuration base directory path from + RPM_CONFIGDIR environement or build-time default + - rpmfileutil is a bit strange place, this would really belong to librpm + but Lua initialization needs the path so... + +commit 86645ffd4f45a799bc904df56ca9b2f48641d245 +Author: Panu Matilainen +Date: Sat Nov 22 15:37:00 2008 +0200 + + Nuke leftover reference to brp-sparc64-linux + - missed from commit cbbb03e3a34d492a7163f5a02f77b7e806702b41 + +commit 53b14ecfea90116ce4fc1182cc645f77c4f49527 +Author: Panu Matilainen +Date: Sat Nov 22 14:07:34 2008 +0200 + + Add keywords to all tests + - just initial groupings to have something there.. + +commit d3d3454a47da54991262b8a93711de56ed2fdffc +Author: Panu Matilainen +Date: Sat Nov 22 13:45:17 2008 +0200 + + Add basic tests for Lua's rpm and posix extensions + +commit 4ba4e709efd8f88a7bb5a0db8121f57c937615d9 +Author: Panu Matilainen +Date: Sat Nov 22 13:26:43 2008 +0200 + + Add banners for nicer test output + +commit 19a41acb84dcb3c5e6381199f8385bfa4e48e803 +Author: Panu Matilainen +Date: Sat Nov 22 13:20:33 2008 +0200 + + A few more basic macro functionality tests + +commit d6ea0224cc7a3e0c7dec7edfa8ba210ada9e6167 +Author: Panu Matilainen +Date: Sat Nov 22 11:45:55 2008 +0200 + + Add couple of tar build tests + another version of hello tarball + +commit 1c57e1d337c00b475253c522461f689e911bc426 +Author: Panu Matilainen +Date: Sat Nov 22 11:22:01 2008 +0200 + + Add some (trivial) macro evaluation tests + +commit a5ff12cc192f7a2a4bf0506006b50f7452be4cab +Author: Panu Matilainen +Date: Sat Nov 22 10:28:59 2008 +0200 + + Add a couple of tests for installing non-existent files and such + +commit 0bcdd93151c21b78ff64d05c05711b0bf79966c5 +Author: Panu Matilainen +Date: Sat Nov 22 01:15:20 2008 +0200 + + Add some basic tests for config file behavior + +commit 9844bfc9b776b00c56dd389bfe5fb4807b189d59 +Author: Panu Matilainen +Date: Fri Nov 21 23:59:25 2008 +0200 + + Add some basic tests for file conflict behavior + +commit ab3e32ad97e1c2143560ceb1aafb7c7bb85cfdcc +Author: Panu Matilainen +Date: Fri Nov 21 23:29:54 2008 +0200 + + Add basic version comparison testing for install/upgrade + +commit 357a7170fa04b5e28c75f4669689cd727b1cfd20 +Author: Panu Matilainen +Date: Fri Nov 21 23:28:21 2008 +0200 + + Simplify the run functions, fix --define behavior + +commit 08c81de2ee753778763810add5221e9162d925cb +Author: Panu Matilainen +Date: Fri Nov 21 17:48:27 2008 +0200 + + Hackery to get rpm install tests to "work" with fakechroot + - fakechroot throws it's own curveballs into the already mixed up thing, + copy things to the test dir and set chroot base to that to avoid + confusion with cwd and such + - klunky and ugly but at least the tests pass now when running non-root + +commit db6c332c49885163de3b83e200e0b40dcac05dc3 +Author: Panu Matilainen +Date: Fri Nov 21 17:39:39 2008 +0200 + + Add + use wrapper function for calling rpm commands in tests + - avoids having to define --rcfile etc over and over again + +commit ddf59da4183f578cf1b7238892776bd64340282f +Author: Panu Matilainen +Date: Fri Nov 21 16:13:03 2008 +0200 + + Kill the last remaining varprefix + - we're just mangling varprefix to localstatedir anyway, might as well + just avoid that little extra trouble... + +commit 3a03a2fc4617efd8fb9f90d5279a10f0d4df1ef3 +Author: Panu Matilainen +Date: Fri Nov 21 13:28:35 2008 +0200 + + Define TOPDIR once in atlocal.in + +commit 50e59e92dccdb246e07860bf20e38c5a586b67ee +Author: Panu Matilainen +Date: Fri Nov 21 12:02:17 2008 +0200 + + These tests are expected to succeed + +commit 31475056f8f03ff983ad4f640330865d7d9ef701 +Author: Panu Matilainen +Date: Fri Nov 21 17:59:03 2008 +0200 + + Rpm is supposed to create build tree by itself, don't help it + +commit 217e5700c0cd76cfce32a50a11d7cb8b719dd446 +Author: Panu Matilainen +Date: Fri Nov 21 10:04:41 2008 +0200 + + Fix build tree creation with relative paths for %_topdir and friends + - rpmtsRootDir() gives "/" even if root not actually set which makes sense + for most operations but not when we're creating build directories + +commit 5e58eeb2d7d0fa301785e5299b3f92da9aa64dc2 +Author: Panu Matilainen +Date: Fri Nov 21 09:50:53 2008 +0200 + + Permit relative paths in rpmioMkpath() and rpmMkdirs() + +commit 19c5eb1ed89a103f9b16e04bf9adbf2f747d6146 +Author: Panu Matilainen +Date: Fri Nov 21 08:57:12 2008 +0200 + + Update --querytags test vrt FILECAPS + +commit f9ed52c0c7a29aa64bc44f94f7b102775ce4be44 +Author: Panu Matilainen +Date: Thu Nov 20 11:47:52 2008 +0200 + + fpCacheCreate() already doubles the size-hint, dont do it twice + +commit 2a1e88d27e8c1cecfe4fadff15f04c87c31c689a +Author: Panu Matilainen +Date: Thu Nov 20 10:26:22 2008 +0200 + + Use per-rpmfi string cache for symlink targets + - few files are actually symlinks so this is very sparse data + - per-rpmfi instead of global as link target names are not that likely + to be shared across packages + - another few megs saved... + +commit 5487213d18c356512655e93b7ee246d2895198c0 +Author: Panu Matilainen +Date: Thu Nov 20 10:15:08 2008 +0200 + + Add functions to create and free string cache(s) + +commit 325198377df0be04a801d4f4c10dc698ce9d6c38 +Author: Panu Matilainen +Date: Thu Nov 20 09:53:27 2008 +0200 + + Use global cache for file languages too + - there's only a very limited number of language names ever present, + and most files don't have languages attached at all + - another few megs saved on memory + +commit e5d97430b62ed01bc3311de83eccdf48bb20a8cf +Author: Panu Matilainen +Date: Thu Nov 20 09:40:46 2008 +0200 + + Use rpmfiFLangs() instead of direct access to structure in skipFiles() + +commit 0c4aa20a0a2ed4e8316a7f468da4e249a19aed41 +Author: Panu Matilainen +Date: Thu Nov 20 09:36:47 2008 +0200 + + Add rpmfiFLang() method for retrieving file language(s) + - hardly anything needs outside install internals but it's harmless too... + +commit 3bdac8f451062b5bd7a68205feae0dd0c71a336d +Author: Panu Matilainen +Date: Thu Nov 20 09:26:12 2008 +0200 + + Generalize the user+group string cache + helpers + +commit f90f2f10155ebb010b3ff3119be31fd8600c1cb8 +Author: Panu Matilainen +Date: Wed Nov 19 18:17:56 2008 +0200 + + Be more intelligent about storing file user and group names + - User and group names contain an enormous amount of redundancy: typically + most files and directories are owned by root:root. Store the each unique + name just once into global cache and store indexes to the cache into + rpmfi user + group arrays. This saves several megabytes of memory on + a transaction of non-trivial size... + - The cache implementation is dumb, but it's not noticeably slower than + uncached version, copying megs of strings around is not cheap either. + Easy enough to replace with a hash-table or such if performace becomes + and issue... + +commit 6fd987b7291fb1306297c193f4ab01bf6cd02618 +Author: Panu Matilainen +Date: Wed Nov 19 16:07:15 2008 +0200 + + Make fsmMapAttrs() use rpmfi methods instead of directly accessing + - Save rpmfi iteration index on entry, restore on exit to avoid clashing + with other users of the given file info set. For now... + - Remove unnecessary re-initialization of uid and gid in case not found + +commit 3b8ebf377bcab9a796304056a24cd3155fa23938 +Author: Panu Matilainen +Date: Wed Nov 19 15:52:03 2008 +0200 + + Oops, file modes are needed on erase too to avoid suffixes on directories + +commit 36d4908efe80c72a48bdce31132c4b6331c9c094 +Author: Panu Matilainen +Date: Wed Nov 19 15:46:02 2008 +0200 + + Use matching type for fsm->digest to avoid unnecessary cast + +commit 3eed102f115bac5dbf37b4866b3d2deaf5760ec8 +Author: Panu Matilainen +Date: Wed Nov 19 14:06:37 2008 +0200 + + Erm erm, really use the rpmfi creation flags in rpmteNew() + - this part was missing from 763cbf05b57da940d2972e0b448548481be400c6 + +commit 2a50bb83889aab7a2c65402fb7eabb548594cd0b +Author: Panu Matilainen +Date: Wed Nov 19 13:04:07 2008 +0200 + + Erm, really do lazy allocation of fi->replacedSizes + - this part was missing from 9bde09b59969088c06eb6f5b8a2597b2e04bd306 + +commit 9bde09b59969088c06eb6f5b8a2597b2e04bd306 +Author: Panu Matilainen +Date: Tue Nov 18 12:00:10 2008 +0200 + + Add + use internal helper function for getting+setting rpmfi replaced sizes + - lazy allocation on set, otherwise there's no replaced size - the getter + deals with this transparently + - saves a fair bit of memory, by no means everything has replaced files... + +commit d0b088328549c6693b127decbc1b0b8c0513a539 +Author: Panu Matilainen +Date: Wed Nov 19 11:59:53 2008 +0200 + + Eliminate unnecessary fi->record field + - transaction elements carry the db instance already and is available + where needed + +commit e3370d3b470cb19773d69c1fac5cf2a5766a0857 +Author: Panu Matilainen +Date: Wed Nov 19 10:02:16 2008 +0200 + + Avoid unnecessary mucking with rpmfi internals + +commit 30fb610125d57bfdeab38a1811bf563bf264180e +Author: Panu Matilainen +Date: Wed Nov 19 09:45:05 2008 +0200 + + Refer to psm->te instead of fi->te in rpmpsmStage() + - transaction element is passed to psm, might as well use it + +commit 140f0c8c8339524968e9ca595fabe9a28b38f49f +Author: Panu Matilainen +Date: Wed Nov 19 08:16:03 2008 +0200 + + Restore SIGPIPE to default action for scriptlets (rhbz#471591) + +commit 2ca4430dd7d9c295b97cd2362a91dfe3f8819ab3 +Author: Panu Matilainen +Date: Wed Nov 19 08:10:21 2008 +0200 + + Updated Brazilian Portugese translation from Igor Pires Soares + +commit 763cbf05b57da940d2972e0b448548481be400c6 +Author: Panu Matilainen +Date: Tue Nov 18 18:54:26 2008 +0200 + + Use finer grained rpmfi creation flags for in rpmteNew() + - also call the erase flags erase, not remove... + +commit 78e8e7c02cefc2643159f333c3067fa77108ccf9 +Author: Panu Matilainen +Date: Tue Nov 18 18:36:45 2008 +0200 + + Limit the data rpmfi loads in query + - makes queries a little bit faster, hardly makes a difference on + modern hardware but loading unused data seems silly anyhow... + +commit 0e65e6e92cd3c0e6e796b6595bbf1ff709d54375 +Author: Panu Matilainen +Date: Tue Nov 18 18:32:58 2008 +0200 + + Add preliminary rpmfi flag groupings for base operations + - just a start and probably not 100% accurate.. + +commit 219ba347365e226f87d2d489e105a52a798c0284 +Author: Panu Matilainen +Date: Tue Nov 18 17:38:53 2008 +0200 + + Add control bits for all (relevant) parts of rpmfi data + - permit fine grained control over what's loaded into fi for what operations, + non-trivial memory savings are possible + - future possibilities - these reflect closely to rpm verify control + bits, all we need is RPMFI_DISK or similar operation to pull the + information from disk instead of header and then verify can simply + compare two rpmfi's + +commit 9444f2d7f5bf0ffcd81fac0e04f0e831ac276306 +Author: Panu Matilainen +Date: Tue Nov 18 17:12:55 2008 +0200 + + Remove useless default flags and action fields from rpmfi + - fi->actions is always allocated so fi->action is never used for anything + - fi->flags is just as unused and unnecessary + +commit f41bd90c2ac156e459e7af368481471b701ed887 +Author: Panu Matilainen +Date: Tue Nov 18 16:33:07 2008 +0200 + + Nuke useless rpmfiFContext() + - it only ever returns NULLs because there are no security contexts in + headers (and having them in headers make no sense as the context varies + based on whatever selinux policy happens to be active on the target + system) + +commit 937d814328caba4383b8c3c71265268bb9797840 +Author: Florian Festi +Date: Mon Nov 17 13:44:06 2008 +0100 + + Fix indentiation + +commit 73c17671de0bf017c9600504f11a1cdf79d0ce26 +Author: Jindrich Novy +Date: Tue Nov 18 11:23:26 2008 +0100 + + Add AC_CONFIG_MACRO_DIR for the new libtool + +commit dbad382930c65934dcd204212c373e7ac20ebd09 +Author: Panu Matilainen +Date: Tue Nov 18 11:30:43 2008 +0200 + + Don't bother loading FILELANGS for installed packages + - only useful for anything when installing packages + +commit 03d0f43f0bf4d2883a822277c7a9ae2936b3a699 +Author: Panu Matilainen +Date: Tue Nov 18 06:58:13 2008 +0200 + + Lazy allocation of FSM for file info sets + - new more or less internal rpmfiFSM() to create FSM on demand, move + mapflags calculation there + +commit 61794cf2c0575de8d557b06df7e94865d7afe592 +Author: Panu Matilainen +Date: Tue Nov 18 06:28:23 2008 +0200 + + Remove now unnecessary fi->keep_header + +commit 341aaa65150049ba88308ff692eafcd9834997f0 +Author: Panu Matilainen +Date: Tue Nov 18 06:26:02 2008 +0200 + + Remember rpmfi creation flags + +commit ff9733b6fd8cb7dc8afccf38833d26d0363aeef7 +Author: Panu Matilainen +Date: Tue Nov 18 11:22:26 2008 +0200 + + Generate and insert SOURCERPM tag earlier + - needed to make checking for source/binary package in rpmfiNew() reliable + at build time + +commit 8d6c4b8c95b59f5a71d90c582c2e98f5c7ed7b9d +Author: Panu Matilainen +Date: Mon Nov 17 17:29:31 2008 +0200 + + Add + use internal helper function for setting rpmfi file states + - instead of directly accessing the array from fsm, use a helper function + which lazily allocates the state array as needed and sets state + - also fixes the silly case of non-installed packages showing their files + as "normal", ie installed (now it shows "no state" as it's not relevant) + +commit 4927190cf1d0a2ac902bdf5d7fe5742539c4bb37 +Author: Panu Matilainen +Date: Mon Nov 17 16:12:04 2008 +0200 + + Simplify rpmInstallLoadMacros() + - fi argument unused, remove + - no relevant return value, make it void + - handle any proper data type for per-header macros + +commit 936fc19176c7baec9871bf8fd5aa6a1d56e02d00 +Author: Panu Matilainen +Date: Mon Nov 17 16:04:48 2008 +0200 + + Avoid reconstructing half of rpmfi manually in rpmInstallSourcePackage() + - similarly to commit 53ee682a491ceee4392815075cabbe58d0cc0c22, arrange + the header to contain necessary paths before calling rpmfiNew() + - avoid unnecessary accesses to rpmfi internals otherwise too + +commit a919e1d631f50b29c5d917d9bfb65f7413a59782 +Author: Panu Matilainen +Date: Mon Nov 17 14:21:38 2008 +0200 + + Unnecessary local variable, result only needed once + +commit 4181d7adadecf64102e620a23a697c756e3602c9 +Author: Panu Matilainen +Date: Sat Nov 15 18:44:00 2008 +0200 + + Assume failure in rpmInstallSourcePackage() + - avoids bunch of redundant assignments + +commit 899dfb58927ec6e91014773430824462f4d0002e +Author: Panu Matilainen +Date: Mon Nov 17 13:39:22 2008 +0200 + + Calculate total file size correctly in build (mdvbz#45820, rhbz#247374) + - delay total size calculation until the real file list is known, ie + in genCpioListAndHeaders() where duplicates and excludes have been + weeded out + +commit 74ed5372f681a31987ba931d72ed5d8ae96f52d0 +Author: Panu Matilainen +Date: Mon Nov 17 12:44:57 2008 +0200 + + Make depflagsFormat() accept any numeric type + +commit 05a3d00162fe343002e378e42f6458139093ba52 +Author: Panu Matilainen +Date: Mon Nov 17 12:42:53 2008 +0200 + + Simplify xmlFormat() by taking advantage of rpmtdClass() + +commit 8ef09ba46c4698ac5a00b496c9ab4a9596bfa31e +Author: Panu Matilainen +Date: Mon Nov 17 12:41:24 2008 +0200 + + Make fflagsFormat() accept any numeric type + +commit 53dcad2f9d5e13e246775c3b052c025406100a0d +Author: Panu Matilainen +Date: Mon Nov 17 12:39:13 2008 +0200 + + Make permsFormat() work with any numeric type + +commit 5580fe23d50b82971c3f0fb12bc613ac64fcdfb0 +Author: Panu Matilainen +Date: Mon Nov 17 12:37:42 2008 +0200 + + Make triggertypeFormat() work for any numeric type + +commit f31b790c31d017b9fbe75d1af822c8b438c0cd84 +Author: Panu Matilainen +Date: Mon Nov 17 12:34:22 2008 +0200 + + Make shescapeFormat() to accept any numeric type + +commit 2b3380aa3455cd6aa3a86491c33c15648360f6fd +Author: Panu Matilainen +Date: Mon Nov 17 12:29:01 2008 +0200 + + Take advantage of rpmtdGetNumber() for date format specifiers + - dateFormat() and dayFormat() now work for any numeric type + +commit ee6c147a239feb6a5587758b19192f274bd0a529 +Author: Panu Matilainen +Date: Mon Nov 17 12:23:19 2008 +0200 + + Take advantage of rpmtdGetNumber() for numeric format specifiers + - octalFormat() and hexFormat() now work for any number, not just int32, + fixing rhbz#471820 + - use a common helper-function for both formats, they only differ by o/x + +commit d97e357560ad9111b95da9bf2126a7bde3b4bac1 +Author: Panu Matilainen +Date: Mon Nov 17 12:16:51 2008 +0200 + + Simplify stringFormat() by using rpmtdGetNumber() + +commit 2db2c376b322bd2940b15600357e9f22d8a55e0c +Author: Panu Matilainen +Date: Mon Nov 17 12:04:08 2008 +0200 + + Add rpmtdGetNumber() for getting numeric values from tag container + - returns the value (as opposed to pointer to, like the rpmtdGetUint32() + and the like do) of any numeric type as uint64_t (largest supported + integer type so everything can be converted to it) + - handy when you don't really care what the internal presentation is + - there's no rpmtdGetNextNumber() as there's no meaningful way to return + end-of-iteration here + +commit ed5306b0be4b8b0df205b066d2646b4e1dd93545 +Author: Panu Matilainen +Date: Mon Nov 17 11:31:00 2008 +0200 + + Introduce rpm tag "classes" + - rpm tag data can be either numeric, strings or binary data, each with + their own "subclasses" (different sized integers etc), add new + enumeration for these + - add rpmTagGetClass(), rpmtdClass() public functions for retrieving the + base class of tag and container + - useful for getting a basic idea how to handle tag/container data + +commit 4fa662abd1d1f5b5f155a734d0e87aa7e7894ae3 +Author: Panu Matilainen +Date: Sat Nov 15 17:55:47 2008 +0200 + + Use rpmpsmNew() + rpmpsmFree() instead of manually doing the same + +commit 170f5bf7d6ce45142cb750d732a625c168c3f524 +Author: Panu Matilainen +Date: Sat Nov 15 17:20:13 2008 +0200 + + Eliminate bogus const from fi->apath + +commit 32b347aa1f909618d739d611b6bb52cde12c3b30 +Author: Panu Matilainen +Date: Sat Nov 15 16:00:36 2008 +0200 + + Eliminate match iterator from psm struct + - it's only needed in local scope anywhere, no point having it psm global + +commit 53ee682a491ceee4392815075cabbe58d0cc0c22 +Author: Panu Matilainen +Date: Sat Nov 15 14:22:47 2008 +0200 + + Avoid having to reconstruct half of rpmfi manually in genCpioListAndHeader() + - We need the on-disk paths for the cpio list in here, so instead of + creating an rpmfi with wrong paths (for build purposes) and then + painfully reconstructing half the fileinfo structures by hand, pass + the on-disk path into rpmfiNew() to begin with and then switch the + intended cpio path back into header. + - Duplicates and excludes are already filtered out from the header filelist + so walk that instead of spec filelist to avoid having to filter out + duplicates and excludes, again. + +commit 2d5b4e3bace86d9eea9024ca55de941fec2acc6f +Author: Panu Matilainen +Date: Sat Nov 15 13:22:19 2008 +0200 + + Lose useless fsm/rpmfi astriplen field + - only "used" for debugging output, duh... + +commit 21c34a30eb1d8de4a66a9b4d0ec5e1b38cac4568 +Author: Panu Matilainen +Date: Sat Nov 15 12:07:44 2008 +0200 + + Don't bother creating a dummy transaction element for rpmfi in build + - nothing in the build path requires fi->te to be present, so don't + muck with rpmte internals needlessly + +commit 3632ad454b4415a0f73abdad920cfe2ed79d023c +Author: Panu Matilainen +Date: Sat Nov 15 11:50:09 2008 +0200 + + Minor genCpioListAndHeader() cleanups + - rpmfiNew() only cares about ts for install-time relocations, nothing + to "fix" wrt that + - we know fip is never NULL (this is a static function with whopping two + callers), don't try to cover up for potential programmer errors + +commit 2eb2569d4662a3f0f391da9f0b50641495d9f6db +Author: Panu Matilainen +Date: Fri Nov 14 22:45:42 2008 +0200 + + Don't have to free what's not allocated to begin with... + +commit 79225b74872717613c39ca23fbe48f521e4323a3 +Author: Panu Matilainen +Date: Fri Nov 14 22:44:07 2008 +0200 + + Add more flags to control rpmfi creation + - RPMFI_NOFILELANGS to avoid loading lang data (only useful on install) + - RPMFI_NOFILEOWNER to avoid loading of user+group data + +commit 2835e091ae72ba53b3fac478a1e7d080affa4cfe +Author: Panu Matilainen +Date: Fri Nov 14 17:16:42 2008 +0200 + + Yank rpmfi state update out of rpmtsRun() + - stuff it into internal rpmfiUpdateState() function to get it out of + sight for now, the mechanism needs some... + +commit ee59836299c5e1c293b64a826552cbfba5dcec12 +Author: Panu Matilainen +Date: Fri Nov 14 13:05:41 2008 +0200 + + Move open + close of files during install to separate functions + - internal rpmteOpen() and rpmteClose() functions replacing copy-paste + slop between rpmtsRun() and runTransScripts() + - eliminates bunch of rpmte privacy violations + - rpmtsRun() doesn't need the file descriptor for anything, might as well + keep it hidden + +commit 0b0fe33d3c086e9bc3d7caa351a8304a64f724f1 +Author: Jindrich Novy +Date: Fri Nov 14 15:16:08 2008 +0100 + + Allow setting custom parameters to patch (rhbz#471006) + - added new _default_patch_flags macro with the rpm default + "-s" parameter + +commit e0e0a5e0352fcc8aebe5a4752d672399151aee3f +Author: Panu Matilainen +Date: Fri Nov 14 09:47:43 2008 +0200 + + Fix capability verification + - the previous implementation was pretty busted up, cap_size() is the + size of external representation, not sizeof(*cap_t) as pointed out by + Andrew Morgan + - check for cap_compare() in configure and use it if available (it's + a Linux-specific extension to the posix draft and only very recent + libcap has it) + - if cap_compare() isn't available, use internal variant that does it + the hard way by converting the capabilities to external presentation + and comparing those + +commit 9646a117c916022067fd07e4f6a7e25c5c9814de +Author: Panu Matilainen +Date: Thu Nov 13 13:22:03 2008 +0200 + + Filter out mtime difference of shared files on verify (rhbz#426672, #444661) + - Since we permit shared files to differ by mtime on installation, it makes + no sense to consider them as verification failure either. This has been + especially bad on multilib where timestamp differences make verify warning + lights look like Las Vegas at night. If file mtime on disk and header + differs, check if it's owned by more than one package and if so, ignore + the timestamp difference. + +commit ed8b3fb2c54aab97b616e83a24a3f65a36f9c0f2 +Author: Panu Matilainen +Date: Thu Nov 13 09:56:52 2008 +0200 + + Move ts and preferred color fetching out of the loop + - neither ts or preferred color changes per-file + +commit ed9836dfba18ac021d8c083679db8d2a9e7c38a3 +Author: Panu Matilainen +Date: Wed Nov 12 21:58:56 2008 +0200 + + Remove unused fsm subbuf field + +commit 526c052dd28e8c8ff68c15c752f7349e721b9f01 +Author: Panu Matilainen +Date: Wed Nov 12 19:36:58 2008 +0200 + + Don't bother retrieving db offset for erase elements + - not needed anymore, use -1 to mean "unused" and document dboffset + to rpmtsAddEraseElement() as unused + +commit c11c97b67cda698486cee26f0621231731c6ebcf +Author: Panu Matilainen +Date: Wed Nov 12 19:33:12 2008 +0200 + + Take advantage of headerGetInstance() in removePackage() + - avoids an extra argument, making dboffset argument to + rpmtsAddEraseElement() unused + +commit 3cfac308be04a96a192afa8be8f6a7c08bfbdfba +Author: Panu Matilainen +Date: Wed Nov 12 19:24:58 2008 +0200 + + Take advantage of headerGetInstance() in rpmte + - rpmte db_instance and dboffset are exactly the same thing, unify + - pull rpmte->db_instance from header directly, ignore dboffset argument + to rpmteNew() (removing the arg would just break api needlessly, otoh + it's unlikely that anything outside rpm actually uses rpmteNew()) + - eliminate the now unnecessary added/removed union from te struct + - rpmteDBOffset() is now just an alias for rpmteDBInstance(), deprecate? + +commit 0c707fe3707aae08ce6b00393ff625cf80547074 +Author: Panu Matilainen +Date: Wed Nov 12 18:29:51 2008 +0200 + + Grab rpmfi record from header on rpmfiNew() + - avoids having to muck with it from rpmtsRun() + +commit b9010a3510033bfd83f07b47eda1cfa269b38429 +Author: Panu Matilainen +Date: Wed Nov 12 17:58:37 2008 +0200 + + Add rpmdb record number to headers retrieved from rpmdb + - set "instance" number on retrieval from rpmdb + - add public headerGetInstance() function for retrieving the value + - ported from rpm5.org, useful for number of things + +commit 90cb50ff7abab62d99cfcda1f64f451aa2fe41cb +Author: Panu Matilainen +Date: Tue Nov 11 22:37:12 2008 +0200 + + Convert obvious bits of rpmtsRun() to use rpmfiFAction() + - remaining access to fi->actions is the nasty part of copying things + around to transfer state + +commit 2f6e1bbb809c7e15b30b909db1a810087c7f94a0 +Author: Panu Matilainen +Date: Tue Nov 11 22:35:45 2008 +0200 + + Convert skipFiles() to rpmfi(Set)FAction() + +commit 2ee45ef12aaa958b78c56b6d83bb18aa6a477d15 +Author: Panu Matilainen +Date: Tue Nov 11 22:32:23 2008 +0200 + + Convert handleOverlappedFiles() to rpmfi(Set)Faction() + +commit 715917ba3754833031b605ec5b8d1c220774dc76 +Author: Panu Matilainen +Date: Tue Nov 11 22:19:29 2008 +0200 + + Convert handleRmvdInstalledFiles() to rpmfiSetFAction() + +commit ac2eb4f66d954fd9ae7f5b49e3dbc28b348d3657 +Author: Panu Matilainen +Date: Tue Nov 11 22:17:10 2008 +0200 + + Convert handleInstInstalledFiles() to rpmfi(Set)Faction() + +commit 78df12924875d332a0f0f647ebc075929287c940 +Author: Panu Matilainen +Date: Tue Nov 11 22:09:48 2008 +0200 + + Add rpmfi get + set methods for file actions + +commit 23ce4966bbfab43974e874d20adb260bfb634ec9 +Author: Panu Matilainen +Date: Tue Nov 11 21:06:32 2008 +0200 + + Remove unnecessary initialization + - rpmfiNew() zeroes out everything, including striplen + astriplen + +commit a4e345455d817ce6c56940600d652ee3ae0aa5d5 +Author: Panu Matilainen +Date: Tue Nov 11 21:01:02 2008 +0200 + + Move file action calculations to rpmfiNew() where possible + - for build operations and src.rpm install this is known + +commit fbc06059cbf7e3f7c6330e46b38bf68850ff1e26 +Author: Panu Matilainen +Date: Tue Nov 11 20:48:35 2008 +0200 + + Cpio flags are only relevant for fsm, get them out of rpmfi + +commit 0d168d173a4c361cc1f548304743cb63bdc5946d +Author: Panu Matilainen +Date: Tue Nov 11 14:50:53 2008 +0200 + + Figure out cpio mapflags in rpmfiNew() + - all the necessary info is there, no need to litter the logic all over + the place + +commit 8e3b5bfc894c5e5b0e3dd41d49fc62db3eaef7aa +Author: Panu Matilainen +Date: Tue Nov 11 13:53:31 2008 +0200 + + Push archivePos from rpmfi to fsm + - archive position is only meaningful in fsm context anyway + +commit f553d2f0cd99678528ac73d1258cacb9c8dc3bf5 +Author: Panu Matilainen +Date: Tue Nov 11 17:35:42 2008 +0200 + + Adjust rpmfi directory count while messing with it in build + - otherwise we can miss some entries in rpmfiFN() max calculation and + blow up in entertaining ways + +commit d535818f425ae7ef0fd53203a18751cb19367e1c +Author: Jindrich Novy +Date: Mon Nov 10 15:52:29 2008 +0100 + + Add the post-build package checker feature in rpmbuild (upstream ticket #2) + - allow to run helper programs to check: + - generated SRPM + - each generated RPM after it is successfully written + - whole successfully written binary package set + - it is possible to use it for sanity checks + +commit 34cda292e3523d3ca2d5fee7c71cce813f886357 +Author: Jindrich Novy +Date: Mon Nov 10 15:46:43 2008 +0100 + + Add macros for the post-build package checkers feature (upstream ticket #2) + - _build_pkgcheck: helper that is ran for every binary RPM successfully + written + - _build_pkgcheck_set: helper ran for the whole binary package set + - _build_pkgcheck_srpm: helper ran for SRPM + - _nonzero_exit_pkgcheck_terminate_build: indicates whether the build + should fail if helper returns non-zero exit status + +commit 6404a00063bb3865f2332990fc88b90107d41306 +Author: Panu Matilainen +Date: Fri Nov 7 12:03:54 2008 +0200 + + Reset return values to zero + NULL's on not found in hash GetEntry() + - avoids having to separately check for return value in some cases and + accidents from not resetting the values in caller + - in line with headerGet() behavior + +commit 844cec311f3690b51033dd25d10d9ade22e2e7f2 +Author: Florian Festi +Date: Wed Nov 5 15:23:19 2008 +0100 + + Rename doLookup to fpLookup to get rid of one function just calling the other + +commit 5f01f7e02bb99be176add41488a6943dc17d6df4 +Author: Florian Festi +Date: Fri Nov 7 10:53:55 2008 +0100 + + cleanup fpLookupSubdir + * rename end -> endsubdir + * fix assignment mess + * fix memory leak (no longer free current_fp.subDir which may be NULL) + * set endsubdir to NULL while not valid + +commit e542ec8682f2929f31efb85d04ac4667d6a85ff0 +Author: Panu Matilainen +Date: Fri Nov 7 11:52:24 2008 +0200 + + Reverse hash GetEntry() return code vs found/not found + - be in line with hash HasEntry() and other similar functions + - internal-only function with just one place actually checking the return + +commit e30ad6d1af8d425fd8390d67965a136e50f3ff8b +Author: Panu Matilainen +Date: Thu Nov 6 10:03:10 2008 +0200 + + rpmsqAction() proto needs SA_SIGINFO conditionals too (ticket #4) + +commit f2a7667482475bbb9bf3acbcf57b755fee987a83 +Author: Panu Matilainen +Date: Wed Nov 5 20:37:48 2008 +0200 + + Nuke the ugly hardwired "known arch" list from label parsing + - we have list of known archs in rpmrc, might as well use it + - avoids having to patch & recompile rpm just to have rpmtsInitIterator() + recognize new archs when it's runtime configurable otherwise + - checking against compatible arch would be saner except then people could + get into even more trouble using --ignorearch... + +commit a9169c46abddfe620c6ae83f3064b50c8bb35852 +Author: Panu Matilainen +Date: Wed Nov 5 15:44:35 2008 +0200 + + Calculate filename buffer len lazily in rpmfiFN() as needed + - avoids having to separately calculate in genCpioListAndHeader() + - avoids unnecessary fnlen field in rpmfi struct + - avoids having to calculate it at all if rpmfiFN() is never called + +commit 6bd6677f86ba130cd4bc952c37fa848450f1920a +Author: Panu Matilainen +Date: Wed Nov 5 15:24:08 2008 +0200 + + Remove yet more unused fields from rpmfi struct + +commit b43998c374abae3b689a3698a2006fdafac1146a +Author: Panu Matilainen +Date: Wed Nov 5 15:18:43 2008 +0200 + + Remove fperms and dperms from rpmfi struct + - only fsm internals need and just use straightforward defaults, move + the defaults there... + +commit 52d53b8bf91c8a9ed28257ec9ed1b65fd5b98fbc +Author: Panu Matilainen +Date: Wed Nov 5 14:30:01 2008 +0200 + + Use cpioMapFlags type consistently for map flags + +commit c0a6f7b14169adb0f3961f6ccda8ca49eb87fead +Author: Panu Matilainen +Date: Wed Nov 5 14:10:16 2008 +0200 + + Stop messing with fi->fstates allocations in psm + - it's alloced and freed by rpmfiNew()/Free() always anyway + +commit ed412a0e2f8538ab952908b06f24d769f1fd1fb6 +Author: Panu Matilainen +Date: Wed Nov 5 13:17:50 2008 +0200 + + Kill off per-file cpio map flags + - nothing uses/needs them, one less murky fi->foo allocation less + - apparently a leftover from initial multilib attempts long long ago + +commit cbbae4cdb102ac9de4023e6e35ddc668eae09ca9 +Author: Panu Matilainen +Date: Wed Nov 5 12:45:03 2008 +0200 + + Remove unused variable + +commit 455a4cd65269272a8e11a50d1242b36b2163e2de +Author: Panu Matilainen +Date: Wed Nov 5 12:38:16 2008 +0200 + + Remove useless rpmfi->gid and uid "defaults" + - they were only ever set on src.rpm installation yet overridden by + package contents unless src.rpm didn't contain RPMTAG_FILEUSERNAME + (and GROUP). Which would mean rpm 1.0 packages or thereabouts, or a + malformed package. In that case we just fall back to root uid, + it hardly matters + +commit 1f5d9dff73cd8ea0ee0c6ff1e843c99c78f9c38d +Author: Panu Matilainen +Date: Wed Nov 5 11:49:33 2008 +0200 + + fi->actions is already initialized earlier in rpmfiNew() + +commit 4d786000b3d92548eb1822221271d7e02ca93a1b +Author: Panu Matilainen +Date: Wed Nov 5 11:47:29 2008 +0200 + + fi->actions cannot be non-NULL in rpmfiNew() + +commit 2102efa0b1136c5c19da75f670c9c0436a187754 +Author: Panu Matilainen +Date: Wed Nov 5 09:36:20 2008 +0200 + + Dead code removal + +commit 4f7f014537d0b4e20a63785de68dd74bdbcd2446 +Author: Panu Matilainen +Date: Tue Nov 4 14:53:11 2008 +0200 + + Stop messing around with rpmfi user+group names from psm + - these are loaded and freed by rpmfiNew/Free() as necessary + +commit e07d37aebc1ab6213507375b8916f5259cf4dc0f +Author: Panu Matilainen +Date: Tue Nov 4 13:33:27 2008 +0200 + + Fix segfault on relocation (rhbz#468319) + - a bogus free() / thinko + +commit 9a509e9f1acc27fdce547a47513e9d083a17b6d4 +Author: Panu Matilainen +Date: Tue Nov 4 11:36:01 2008 +0200 + + Avoid leaking C99 options into stock %{__cc} macro + +commit faaa0305f5593bd3165e444d4ec4516490b4610e +Author: Jindrich Novy +Date: Tue Nov 4 10:09:31 2008 +0100 + + Return proper exit code when exec*() functions fail + - the correct exit code should be 127 accoring to bash(1), + we want to keep the same exit code behaviour as bash for rpm + +commit 73f61ecf05ff1679219e49bfd029a69da66bf35e +Author: Panu Matilainen +Date: Tue Nov 4 10:28:20 2008 +0200 + + Fix building on systems where SA_SIGINFO isn't available (ticket #4) + - patch from Adam Tkac + +commit dc06dca3b99f809f826f25565ace384b54f3b488 +Author: Panu Matilainen +Date: Tue Nov 4 09:52:19 2008 +0200 + + Use more portable file access mode tests (ticket #5) + - don't make assumptions about how O_RDWR and friends are defined, use the + portable way of masking flags with O_ACCMODE and explicit comparison + against the mode we're interested in + +commit 759b73a4293e56209e922bf58d7028234e854338 +Author: Panu Matilainen +Date: Mon Nov 3 14:13:45 2008 +0200 + + Ensure PATH_MAX is defined (ticket #3) Adam Tkac + - POSIX doesn't require PATH_MAX to be defined as constant, and Hurd + doesn't define it... + - deal with it just once in system.h for now, the proper fix is to get + rid of needing it at all (ie add a mallocing realpath() clone to librpmio) + - patch from Adam Tkac + +commit b7678c0a40898debdf7396c84967411efbfaf345 +Author: Panu Matilainen +Date: Fri Oct 31 17:45:43 2008 +0200 + + Drop unnecessary trailing slash in pkgconfig includedir + +commit 81660b26bc8e2c03f55cf928955f7ed84e00785a +Author: Panu Matilainen +Date: Fri Oct 31 10:17:07 2008 +0200 + + Adjust for file output change (rhbz#468129) + - file util used reported file details along with mime type, newer ones don't + +commit 05c547a30d966d03b9bda37343c7dcc3638b6be0 +Author: Panu Matilainen +Date: Thu Oct 30 14:12:18 2008 +0200 + + Kill of scareMem / keep header flag from rpmds + - unnecessary complication which doesn't benefit anything (anymore) + +commit ce33decefa68cdde3ed332c629dc661defc963d1 +Author: Panu Matilainen +Date: Thu Oct 30 14:07:29 2008 +0200 + + Change all in-tree rpmdsNew() uses to non-scaremem + - shouldn't affect anything at all + +commit 6c91bf043776319bc0b78852ecf65a56501c60e1 +Author: Panu Matilainen +Date: Thu Oct 30 14:03:34 2008 +0200 + + Remove unnecessary scaremem flags, hardwired to no scaremem anyway + - no functional changes + +commit a19cc0d1fe7a5113d550d07ba70501658034f161 +Author: Panu Matilainen +Date: Thu Oct 30 13:46:26 2008 +0200 + + Save bunch of memory by not loading file classes in ts elements + - install/remove doesn't need or use file class information at all, + don't bother loading it, saves a few megs of memory on large transactions + +commit 0cf0a7bb68d6f455a2e1bc4918a7a2509eb0055a +Author: Panu Matilainen +Date: Thu Oct 30 13:43:44 2008 +0200 + + Add couple of new rpmfi flags for file classes and file depends + +commit aabdfb8866a1e3a86fa91efffe2c170d6e808570 +Author: Panu Matilainen +Date: Wed Oct 29 15:23:49 2008 +0200 + + Move rpmfi color union calculation out of rpmfiNew() + - nothing at all uses the calculated value or rpmfiColor() call, take + the unnecessary calculation out of common path into rpmfiColor() + +commit eef41b6dff424992785ff67a22244d62454d796f +Author: Panu Matilainen +Date: Wed Oct 29 15:06:37 2008 +0200 + + Remove unused package color calculations from 2003 + +commit cff6230a8c55b6cf925b7e33fb04f26a7d284d82 +Author: Panu Matilainen +Date: Wed Oct 29 14:34:36 2008 +0200 + + Don't bother fetching and storing pre- and posttrans scripts in rpmfi + - the psm script machinery requires the full header to do anything at + all, so the script + scriptprog were only used to check if the package + *has* such scripts, a single integer will do just fine there thank you + +commit f01ed5459deb3b3cf5c1bd4077f89b02533071f0 +Author: Panu Matilainen +Date: Wed Oct 29 14:09:27 2008 +0200 + + Convert in-tree users of rpmfiNew() to use flag names + - easier to grep for than scareMem, preparing for further flags + +commit 8f41e940abe6950c807f530468adeb24049271ca +Author: Panu Matilainen +Date: Wed Oct 29 14:08:12 2008 +0200 + + Turn rpmfiNew() scareMem argument into bitfield of flags + - preserve behavior with 0/1 + - more room for controlling what gets loaded into file info set, not + everything is needed at all times + +commit b24dc850a50585efa5c6c4cef245f95cb568dd8d +Author: Jindrich Novy +Date: Wed Oct 29 13:38:16 2008 +0100 + + Set timezone to UTC every time to avoid local timezone confusion + +commit e7c604daddacf5f5ba3a25f7639eca9d7b0f5eb6 +Author: Panu Matilainen +Date: Wed Oct 29 12:09:27 2008 +0200 + + Add --filecaps popt alias for looking at file capabilities + - doesn't need much as the capabilities are stored in human readable format + +commit db1f9af5e2a4443e64ce10112a9553204bab7f4e +Author: Panu Matilainen +Date: Wed Oct 29 11:53:31 2008 +0200 + + Add proper file capability verification support + - at least for now, no capabilities is treated like empty capability set + which are not exactly the same thing but probably sufficient for our + purposes + +commit 97ab15cc9eadc1aab563b87a0c92d559cd9e9a41 +Author: Panu Matilainen +Date: Wed Oct 29 11:49:38 2008 +0200 + + Add fsm and rpmfi machinery for file capabilities + - new rpmfiFCaps() API to retrieve the info from rpmfi set + - fsm internals quite similar to selinux handling + - plenty of #ifdef's, another possibility would be adding cap_foo dummies to + system.h like for selinux + +commit a792c55ffae23f483121401fe4ca6724abc57bb5 +Author: Panu Matilainen +Date: Wed Oct 29 10:49:25 2008 +0200 + + Start adding POSIX 1.e draft file capability support for real + - Parse %caps() from spec filelists, making best-guess verification of + capability string sanity by passing to cap_from_text() + - The posix draft specifies capability export presentation through + cap_copy_ext() which would be fine, except that we don't have support for + arrays of binary data. So we simply store the textual representation + of the capabilities in a string array which we do have. + - Only add capability tag on packages which actually have capabilities to + avoid unnecessary header bloat. + - Add a new rpmlib() dependency for file capabilities, packages relying + on file capabilities wont work correctly unless the capabilities are set. + To be fully correct, support for on-filesystem file capabilities should + be checked at runtime, as this depends on kernel versions and such... + +commit daf28d3bf452a1d8daa8f5a70b860ce91b76fffd +Author: Panu Matilainen +Date: Wed Oct 29 10:39:00 2008 +0200 + + Don't try to verify capabilities of directories and non-regular files + +commit 5d7cd0ab2d814e5d2a0803bede9c2d0bb09f2709 +Author: Florian Festi +Date: Mon Oct 27 13:08:39 2008 +0100 + + fix compiler warning + by removing unnesseccary return address for the hash key + +commit f4b5bd55db623f83d75d0d60432f48cf0a7d2ef5 +Author: Panu Matilainen +Date: Sun Oct 26 14:18:17 2008 +0200 + + Beginnings of acl (POSIX.1e draft 17) verification support + - if built with --with-acl, check that files and directories don't have + any extra acl's set + - for now, any acl beyond the regular unix permission set is reported as + file mode difference as the acl's cannot have been set by rpm itself + - patch from Andreas Gruenbacher, modified to use libacl instead of raw + xattrs for portability, BUT atm this uses non-portable acl_equiv_mode() + Linux libacl extension, the posix draft doesn't seem to have much in + the way of comparing entries :-/ + +commit 770a0f34c90b59460372da181895b3a2802113f1 +Author: Panu Matilainen +Date: Sun Oct 26 14:17:16 2008 +0200 + + Beginnings of file capability (POSIX.1e draft 15) verification support + - add minimal bits and pieces to check for capabilities in files on verify + - for now, any capability set is a verification failure as the capability + cannot have been set by rpm itself + - patch from Andreas Gruenbacher, modified to use libcap instead of raw + xattrs for portability + +commit ca40fafedb504ff0195e347886e96a0268b3f5db +Author: Jindrich Novy +Date: Fri Oct 24 12:32:31 2008 +0200 + + Remove timezone autoconf checks and system.h reference + - timezone is no more used so it's no more needed + +commit aeb672ca42cf0cce6d9f3d302f4d04513fc673c3 +Author: Jindrich Novy +Date: Fri Oct 24 12:31:02 2008 +0200 + + Fix "timewarp" bug while listing changelog via "rpm -q --changelog" + - date is no more one day in advance than written in changelog + +commit ccbb618bfc2bb2a74674b9e49c5637abb34515d9 +Author: Florian Festi +Date: Thu Oct 16 12:13:13 2008 +0200 + + Use better cache sizes + +commit 48554042f434fd75452e752f1156a652ffe71c8b +Author: Florian Festi +Date: Thu Oct 16 12:07:44 2008 +0200 + + Improve finger print hash function to avoid degeneration of hash tables + +commit ecc8ff93740f1cc733350016b9b4304c4f14e9d6 +Author: Florian Festi +Date: Thu Oct 16 09:59:54 2008 +0200 + + Switch to a better hash functions for strings: Jenkins One-at-a-time hash + +commit af80c3de47278c0631f1add3da56758343fafe44 +Author: Florian Festi +Date: Thu Aug 28 16:06:36 2008 +0200 + + Use only one, global fingerPrintCache to save a lot of stat calls + +commit af3464a053ecb0b56cc5af494ea22955fb350757 +Author: Florian Festi +Date: Wed Oct 22 15:17:49 2008 +0200 + + symlinks + +commit c6ccc90d7fef0f1b65e4bf5b77d5b800d4b53ffd +Author: Florian Festi +Date: Wed Oct 22 14:08:49 2008 +0200 + + Detect to be installed symlinks for file fingerprinting (file conflicts) + +commit 9766e4492cb7d90f0c60804f3bbbbc7f8ef01a7e +Author: Florian Festi +Date: Wed Oct 22 14:03:52 2008 +0200 + + Fix path problem in doLookup + +commit eecfbcbeb0b102c4518c5576e88d48c039ac635f +Author: Florian Festi +Date: Tue Aug 12 21:19:11 2008 +0200 + + Delete findFps foobar + including fpsCompare and the fpsdebug opt + +commit c65019affca0988705ea4b8b9b38adbeca6ac98f +Author: Florian Festi +Date: Tue Oct 21 15:45:09 2008 +0200 + + Change both hashes to a typed version + +commit 832909b4a7f093f6ab223850dad892223a71ff80 +Author: Florian Festi +Date: Fri Oct 17 16:18:45 2008 +0200 + + Make rpmhash a generic datatype using macros and includes + +commit 6a8c221ce6a890d6b23daed92669eb90e80ec2af +Author: Panu Matilainen +Date: Fri Oct 24 08:05:00 2008 +0300 + + Updated Serbian translations from MiloÅ¡ KomarÄević + +commit a4825e488d44e01803c377ebc4fc054adcf42b3a +Author: Panu Matilainen +Date: Thu Oct 23 07:47:25 2008 +0300 + + Make noarch subpackages actually work + - noarch subpackages get their arch tag from parsePreamble() already, + don't stomp over it later in parseSpec() + +commit be651d98769ec95c0fcc2dee015a40c68b83271a +Author: Jindrich Novy +Date: Wed Oct 22 09:28:38 2008 +0200 + + Increase IEEE-compliance of floating point code for SH platform + - thanks to CHIKAMA Masaki + +commit 02274eecfc98a83b53b091d2fd889cf7f9393b29 +Author: Jindrich Novy +Date: Wed Oct 22 09:22:05 2008 +0200 + + Apply patch for sh arch from CHIKAMA Masaki + +commit bb74348bfb7ddfd333d94f855eabcc8658f0e9e6 +Author: Panu Matilainen +Date: Wed Oct 22 09:58:10 2008 +0300 + + Skip adding identical NEVR to transaction on install too (rhbz#467822) + - Installing several different versions of the same package in single + transactions is permitted for "pure" installs, whereas on upgrade only + one version is allowed. Identical NEVR got correctly checked and filtered + out on upgrade but on install identical NEVR was not catched. Check + for equal and newer separately... + +commit cf89739282feadb36ef50d0b8d8c4e293cd0c24c +Author: Panu Matilainen +Date: Wed Oct 22 09:25:30 2008 +0300 + + Fix memleak in rpmtsAddInstallElement() + - previously any of the "skipping/replacing already added" checks matching + would leak memory due to early jump to exit + +commit a8ba86f05bfdff3eda650d49a4aaab7bf0b4abf5 +Author: Panu Matilainen +Date: Mon Oct 20 11:46:42 2008 +0300 + + setenv() + unsetenv() are always available in rpm + +commit f7707ad3ff279fe09e8885b3a2ea2b01f629950b +Author: Panu Matilainen +Date: Mon Oct 20 11:32:43 2008 +0300 + + Add posix.mkstemp() to Lua posix lib + - lifted from apt-rpm + +commit d34646ab10a992092c9d2662cbbe573945c22332 +Author: Panu Matilainen +Date: Sun Oct 19 20:08:35 2008 +0300 + + Trash more unused junk from installplatform + +commit b4d6e18a9837144864fb608356acab38930a675a +Author: Panu Matilainen +Date: Sun Oct 19 19:59:57 2008 +0300 + + Trash unused MULTILIBNO hackery in installplatform + +commit 49c515179ac0d34c2bb43bf242b8eb27ff6c11b2 +Author: Panu Matilainen +Date: Sun Oct 19 01:53:03 2008 +0300 + + Permit tab as whitespace between macro arguments (rhbz#467567) + - another dumb regression from macro handling cleanups + +commit df080a1f6f313f83e41a94ff4deba1216f196a01 +Author: Panu Matilainen +Date: Sat Oct 18 19:23:56 2008 +0300 + + Clean up hg leftovers + +commit cbbb03e3a34d492a7163f5a02f77b7e806702b41 +Author: Panu Matilainen +Date: Fri Oct 17 15:00:01 2008 +0300 + + Trash the horrible brp-sparc64-linux hack from the ancient past + - kludgery like this might've been necessary back in 2000 to get started + with multilib setup but it certainly isn't needed now + +commit 927f384a9bc058eb6f954e93cc515cc1293fd2a3 +Author: Panu Matilainen +Date: Fri Oct 17 08:11:10 2008 +0300 + + Kick out the dumb defaultdocdir logic from installplatform + - defaultdocdir is simply %{_datadir}/doc + +commit df8b431be808b73b92cab5fd62637be6dcd72991 +Author: Panu Matilainen +Date: Thu Oct 16 17:09:28 2008 +0300 + + Bump version + +commit c3c8dc476e68e385c9ac599f8651959a4fdb41d0 +Author: Panu Matilainen +Date: Thu Oct 16 16:11:15 2008 +0300 + + Updated German translation from Fabian Affolter + +commit c00bd2d29c223c832bfca68411b8fdbafee15371 +Author: Panu Matilainen +Date: Thu Oct 16 16:08:18 2008 +0300 + + Updated Polish translation from Piotr DrÄ…g + +commit 0b31ec61cc9b53eaf56d3f51058805be8b0b214a +Author: Panu Matilainen +Date: Tue Oct 14 16:32:58 2008 +0300 + + Add configure detection for SuSE too + - distro detection in configure is pretty futile but while we still have it... + +commit 085dcab72fc44cab5b1a7d810071bb8c0ea0afc2 +Author: Panu Matilainen +Date: Tue Oct 14 15:49:57 2008 +0300 + + Move luaext include fiddling out of toplevel configure + +commit bedeef1edaa4f2af99fbaecc6adfab75de1cd03a +Author: Panu Matilainen +Date: Tue Oct 14 15:44:22 2008 +0300 + + Add lua to pkgconfig private libs + +commit fc9723a64c10e2212b1b296c2c94a0ff83e3cf05 +Author: Panu Matilainen +Date: Tue Oct 14 15:41:56 2008 +0300 + + Reuse toplevel WITH_LUA_LIB setting instead of manual setting + +commit a1b05720b0e8219b26a81b8e2429226f094075cc +Author: Panu Matilainen +Date: Tue Oct 14 15:36:23 2008 +0300 + + Sanitize libluaext linkage + +commit b6a0fca64d1d3b5331dffd78b7e75b4d5d86dfe4 +Author: Panu Matilainen +Date: Tue Oct 14 15:31:24 2008 +0300 + + Fix build without Lua + +commit b03953e551e4e3597b22cca71bfb583162187e9d +Author: Panu Matilainen +Date: Tue Oct 14 14:46:33 2008 +0300 + + Tweak autogen a bit more + - lose hardcoded paths based on platform + - add --rpmconfigure that can be used if rpm is already present + +commit 9fe51e6e2844a5b1d7d4d4116f15449d0f327b35 +Author: Panu Matilainen +Date: Tue Oct 14 14:24:30 2008 +0300 + + Rip silly "usage" message from autogen + +commit 9397bb61baeebcafda97c61c81dfbc1c4af96c17 +Author: Panu Matilainen +Date: Tue Oct 14 14:17:14 2008 +0300 + + Kick out ancient and unused LDFLAGS_STATIC configure.ac-hackery + +commit 3cc7a1ef99d5832b35239afca0c3a978d1984ae5 +Author: Panu Matilainen +Date: Tue Oct 14 13:34:14 2008 +0300 + + Yank out ancient convertdb1 + +commit c8ce024aa88a150ded321de8844049341d6ed04c +Author: Panu Matilainen +Date: Tue Oct 14 12:46:55 2008 +0300 + + Fix up some fuzz in finnish translation + +commit 195f50d3cdf611f24d40c6a63b5f928d791570dc +Author: Panu Matilainen +Date: Tue Oct 14 12:39:25 2008 +0300 + + Adjust translations wrt the rpmps format changes + +commit e2749795c3ae35f99092634fd859cba93f23156d +Author: Panu Matilainen +Date: Tue Oct 14 12:25:01 2008 +0300 + + Use PRIu64 for 64bit value formatting instead of casting + +commit 19027cb53f3e559cca3d0ddc4e193fab37840d96 +Author: Panu Matilainen +Date: Tue Oct 14 12:17:01 2008 +0300 + + Avoid overflow on memcpy() + +commit ef9744ff76f1ceed7645731bb6c102845eb48b79 +Author: Panu Matilainen +Date: Tue Oct 14 11:56:15 2008 +0300 + + Need to mask the return type from rpmTagGetType() return value + +commit 055893bb4c638be34c3f6d98f6a6086718465a61 +Author: Panu Matilainen +Date: Tue Oct 14 11:55:05 2008 +0300 + + Error out on unknown data types in sqlite backend too + +commit dcfe216da88af522ba5af55c4855dc8473c640cd +Author: Panu Matilainen +Date: Tue Oct 14 09:44:58 2008 +0300 + + Update translations for a change... + +commit b7492daf836d1d61dd65ea586e3b1615da4c9c8d +Author: Panu Matilainen +Date: Tue Oct 14 09:44:32 2008 +0300 + + Add a few missing files to POTFILES.in (rhbz#466834) + +commit 43a8cc7e102c97afd61a55e252ecce5a59f643da +Author: Panu Matilainen +Date: Mon Oct 13 14:45:45 2008 +0300 + + Make sure dbiTags are loaded on db rebuild & remove + - rpmdbMoveDatabase() and rpmdbRemoveDatabase() don't operate on an open + database so there's no guarantee that dbiTags are loaded when they are + called unless explicitly requested + +commit d28c8fdfb82e45e63a82df7a0e6bc74af4a3cd87 +Author: Panu Matilainen +Date: Mon Oct 13 13:25:17 2008 +0300 + + Honor default nopromote setting everywhere in rpmds (rhbz#466503) + - Of four different ways to create a dependency set, only rpmdsNew() + explicitly set ds->nopromote to the expected value from global + _rpmds_nopromote defaulting to on. All others fell back to legacy + "epoch promotion" behavior inherited from xcalloc()... + +commit 504e8231cbb379a0b3f41d7bcfb0bd4e3ff16f50 +Author: Panu Matilainen +Date: Fri Oct 10 15:59:38 2008 +0300 + + Yank out legacy.h, make the conversion functions static + +commit 54f8c5891f92573ebd0ec5f478c6be25b6c4349d +Author: Panu Matilainen +Date: Fri Oct 10 15:54:53 2008 +0300 + + Convert in-tree users to headerConvert() + +commit 56f3545c68796b1d1fb95ae4609395bc269e242a +Author: Panu Matilainen +Date: Fri Oct 10 15:53:12 2008 +0300 + + Add headerConvert() "proxy" for performing various conversions on header data + +commit 83c4098e4f8affdb7f52aa5ed14ac15d7785f5b9 +Author: Panu Matilainen +Date: Fri Oct 10 14:43:39 2008 +0300 + + And out goes rpmMkdirPath() + +commit aa509e3c5e68ed905a80743bd3e8f3e26aa67590 +Author: Panu Matilainen +Date: Fri Oct 10 14:42:34 2008 +0300 + + Use rpmMkdirs() to create the entire build tree in buildForTarget() + - also move the build tree generation earlier to have it automatically + created for tarbuilds too + +commit c17dffb6fbf8c123516ed1ca06a35beca1c7d8c7 +Author: Panu Matilainen +Date: Fri Oct 10 14:37:57 2008 +0300 + + Use rpmMkdirs() instead of rpmMkdirPath() in rpmInstallSourcePackage() + +commit a7ece3bc4ac90b7bc68522aa748e138b78ce4179 +Author: Panu Matilainen +Date: Fri Oct 10 14:28:41 2008 +0300 + + Add rpmMkdirs() to librpmio + - allows creating bunch of directories including parents at once + +commit 1566caf0674b372a7b9ea481a90df0f2e8e7aec9 +Author: Panu Matilainen +Date: Thu Oct 9 19:53:05 2008 +0300 + + Get db vectors out of exported ABI + +commit bd70d0e36c620a086af56d78cefdf7577a3457ba +Author: Panu Matilainen +Date: Thu Oct 9 16:17:53 2008 +0300 + + rstrcasecmp() and rstrncasecmp() are "pure" functions + +commit eb9649dfa9676fcf8117f799db8578b72c805673 +Author: Panu Matilainen +Date: Thu Oct 9 16:14:23 2008 +0300 + + Mark risalpha() and friends as "const functions" + - they only process integers that are fed to them and no outside data + +commit 505aea7fb178a174217181e02d765f41d3dc377a +Author: Panu Matilainen +Date: Thu Oct 9 15:59:26 2008 +0300 + + Remove silly double definition of headerGetLangs() + +commit 5a76671724e989f9b841211c038272288825ce2f +Author: Panu Matilainen +Date: Thu Oct 9 15:57:30 2008 +0300 + + Mark htonll() as internal + +commit 65c85b38e882e25aaca542f353e75334f8580280 +Author: Panu Matilainen +Date: Thu Oct 9 15:52:34 2008 +0300 + + Mark cpio functions internal + - cpioStrerror() is used by build code so that remains visible, ugh + +commit 0d48ac0aaa7cfda5b9e6cb1915a8588e410f2175 +Author: Panu Matilainen +Date: Thu Oct 9 15:48:46 2008 +0300 + + Mark fingerprinting stuff internal + +commit 5589c3a81f56bbe27e0bff5eb27206e4a3aa1eee +Author: Panu Matilainen +Date: Thu Oct 9 15:47:09 2008 +0300 + + Mark hash table functions as internal + - we're not a hash-library afterall.. + +commit 2ec41237f8c809c9780474f28e59fbacb70d27e2 +Author: Panu Matilainen +Date: Thu Oct 9 15:43:00 2008 +0300 + + Mark rpmdb internals as internals, including the "mergesort" gem + +commit 550e156c62ff3dc397bfc167908fcbd1e523d922 +Author: Panu Matilainen +Date: Thu Oct 9 15:37:59 2008 +0300 + + Mark psm functions as internal + +commit 7681f80e2512d60cd0b057a136fe38a3fb6575e6 +Author: Panu Matilainen +Date: Thu Oct 9 15:35:36 2008 +0300 + + Mark various fsm* bits internal + - build code uses fsmSetup() and fsmTearDown(), those need to remain + visible for now + +commit fb992745595893789a02a465833299493313c0a7 +Author: Panu Matilainen +Date: Thu Oct 9 15:32:04 2008 +0300 + + Mark uidToUname() and friends as internal + +commit be50cb5bf796719f23a446c807d2a79dbc8588a0 +Author: Panu Matilainen +Date: Thu Oct 9 15:21:15 2008 +0300 + + Add RPM_GNUC_INTERNAL macro + - allows portable use of __attribute__((visibility("hidden"))) + +commit c7bee0c3e6576fc78d7ab3ff64eeef3dda91bf02 +Author: Panu Matilainen +Date: Wed Oct 8 18:26:58 2008 +0300 + + Unknown tag is an error + +commit 9e89ea52f5b3ac84bd7e63a20dba004a7ddd8acc +Author: Jindrich Novy +Date: Tue Oct 7 22:06:28 2008 +0200 + + make %find_lang --with-kde work (rhbz#466009) + - patch from Rex Dieter + +commit 30a975b9839b3cb15a8cd9c1ead454464523028a +Author: Panu Matilainen +Date: Mon Oct 6 18:50:30 2008 +0300 + + Malformed query query items (pkid's and such) are errors + +commit bcda17901e38adacad42226164057f4b357ce9a6 +Author: Panu Matilainen +Date: Mon Oct 6 18:49:33 2008 +0300 + + Make "not an rpm or manifest" message an error, not just notice + +commit 9c51c44577ddee0c4d822d12b79b29f5a9bcdb21 +Author: Panu Matilainen +Date: Mon Oct 6 18:41:09 2008 +0300 + + Consistent log level for "unverifiable signature" message + - all the other ones in package are RPMLOG_ERR + +commit 377239b7dfa3e228748ef33c0bcec4213ac16f7b +Author: Panu Matilainen +Date: Sat Oct 4 15:16:38 2008 +0300 + + Failure to rebuild database is worth at least a warning + +commit bc1ac82d8d59f29561fe25e50292d8f0f8950817 +Author: Panu Matilainen +Date: Sat Oct 4 11:19:26 2008 +0300 + + Restore permissions of a signed rpm to that of the original (rhbz#465586) + +commit ffb886048c55b3a668d873bde7054571763c1058 +Author: Panu Matilainen +Date: Fri Oct 3 13:00:33 2008 +0300 + + Similar semantics for scriptlets + - missing support is always an error + - otherwise permit non-pre scriptlets to fail + +commit 3e687d09717ee8408a781d221f0ce4506b3cef1b +Author: Panu Matilainen +Date: Fri Oct 3 12:49:29 2008 +0300 + + Always perform callback notify of lua scriptlet errors too + +commit 17df5ad61397fb12bb2cc9a94798de97266afd9e +Author: Panu Matilainen +Date: Fri Oct 3 12:13:21 2008 +0300 + + Remove unnecessary {} block + indentation, no functional changes + +commit 9cfb380cc4529ea6b9314cc67819069c8e9c1a23 +Author: Panu Matilainen +Date: Fri Oct 3 12:04:19 2008 +0300 + + Filter out error exit codes from non-pre scriptlets (rhbz#216221, #rhbz465409) + - typos and thinkos in scriptlets often cause duplicates to be left around + for no good reason + - treat non-zero exit codes from scriptlets as just warnings instead of + errors + - ... except that %pre and %preun are sometimes used for preventing + install/uninstall of a package, preserve the traditional behavior for them + - abuse rpmtsNotify() "total" value for signaling warning/error to callback + +commit 6f3f5a36a3938fd13b44246f8484c35ba1cc5ac3 +Author: Panu Matilainen +Date: Fri Oct 3 11:41:41 2008 +0300 + + Emit RPMCALLBACK_SCRIPT_ERROR notification on all scriptlet failures + - previously the fork() failures and such would not be notified at all + - discard the not-so-useful differing exit codes (signal, exit status and + whatnot) from commit 179ebc1745b51eb9821dd783c9df475ac539532d + +commit e241f3d3ed5a12ca870ad69f7ae3240acfaa13a5 +Author: Panu Matilainen +Date: Fri Oct 3 11:38:08 2008 +0300 + + Assume failure in psm runScript() + +commit e2b89abff7f6592bb2c2f2bda996d89df1960282 +Author: Panu Matilainen +Date: Fri Oct 3 11:34:41 2008 +0300 + + Log message on all scriptlet failures. + +commit b520b61387757e0ceb907d41cb0d0a5f6478bdbd +Author: Panu Matilainen +Date: Thu Oct 2 12:43:02 2008 +0300 + + Updated German translation (Fabian Affolter) + +commit fca9b72432f8151427d83a2de01066e138fb2e14 +Author: Panu Matilainen +Date: Wed Oct 1 17:05:35 2008 +0300 + + Kick out yet another ancient artifact + - --usecatalog hasn't done anything in 10 years if ever afaict... + +commit e358af91668bb24ae93dbab99cc3acbc429e8aa1 +Author: Panu Matilainen +Date: Wed Oct 1 16:28:47 2008 +0300 + + We have easier ways to catenate strings... + +commit 65e06b20130da895fda8e3698a7ebe18e14d13ca +Author: Panu Matilainen +Date: Wed Oct 1 10:06:27 2008 +0300 + + Tweaks to how ISA-macros are generated (rhbz#464754) + - for ppc and sparc, move the check for 64bit version first and use a + wildcards to cover more field automatically + +commit aadc1a314640e5eaf31c7f76f9062b1e4e7d1772 +Author: Jindrich Novy +Date: Thu Sep 25 19:44:29 2008 +0200 + + Use safer xrealloc() instead of realloc() + +commit 1dd1d68afe6dc55c37f1292250f1c26a5196ea0a +Author: Jindrich Novy +Date: Thu Sep 25 19:32:27 2008 +0200 + + Avoid segfault in rpmLeadNew() if calloc() fails + +commit 50ef054902618edec7a29f5b3b5cb4ae2e12a20f +Author: Jindrich Novy +Date: Thu Sep 25 19:30:47 2008 +0200 + + Use safer xstrdup() instead of strdup() wherever possible + +commit 008280006d5f6bf3696adffb431e968faabc594e +Author: Panu Matilainen +Date: Thu Sep 25 19:16:14 2008 +0300 + + Fix up fuzz in Finnish translation + +commit 6c4e6f4fa883628c9a31a6536d8f76dbacf5639c +Author: Panu Matilainen +Date: Thu Sep 25 19:10:02 2008 +0300 + + Extra ')' in error message + +commit 09d43dcbdff4a450a72178d695db553c2f33ef27 +Author: Panu Matilainen +Date: Thu Sep 25 14:58:05 2008 +0300 + + Don't go onto wild zombie rampage if python callback tracebacks (rhbz#463447) + - If a callback tracebacks, the python program that called us in the first + place is as good as dead already. Clean up what we can, throw an error + message and just die, no good is going to come out of blindly continuing. + +commit fe51be67e4955fd9dbc71d9fdc16231cc32b045d +Author: Jindrich Novy +Date: Wed Sep 24 19:49:09 2008 +0200 + + Update Brasilian Portuguese translation (rhbz#463748) + +commit c4fa73c573f63d2e2b53e75d25feafbf65ebf671 +Author: Jindrich Novy +Date: Wed Sep 24 18:39:43 2008 +0200 + + Don't treat %patch numberless if -P parameter is present + +commit ea9ef92189517164cd68d80c2dd46d8c945ef6fc +Author: Panu Matilainen +Date: Mon Sep 22 14:30:37 2008 +0300 + + Kick out useless and ancient junk genCpioListAndHeader() + - scareMem is not used for anything here + - xmalloc() + xcalloc() cannot return NULL, don't bother checking + +commit ef539ed4dcf5afaf55a45d339ad29c0a930a832a +Author: Jindrich Novy +Date: Mon Sep 22 12:10:36 2008 +0200 + + Fix error messages in processScriptFiles() + +commit 9d436590568c657a475e7871d4e13021984633cc +Author: Jindrich Novy +Date: Thu Sep 18 15:18:53 2008 +0200 + + Drop rpmfcFileDep() to simplify things + +commit 5225a86631eaf463eb3b822dc9632820960a7bd3 +Author: Jindrich Novy +Date: Thu Sep 18 14:57:52 2008 +0200 + + Move type regression test back to asserts + - no need to bother with message translations in this case + +commit 74677caa5a6ad36c1836412cd5af378d71dd863f +Author: Jindrich Novy +Date: Thu Sep 18 14:56:15 2008 +0200 + + Use proper codes for logging via rpmlog(). + +commit 10908577285571966f79c61df1acbd3913f24760 +Author: Panu Matilainen +Date: Thu Sep 18 14:31:47 2008 +0300 + + Force error return if headerLoad() fails + +commit acb135c28bd9c637e4db722495a5c890d5593a46 +Author: Panu Matilainen +Date: Thu Sep 18 13:24:25 2008 +0300 + + Document manifest behavior for install options too (rhbz#461354) + +commit 06fb56e64f9198f50c3f91a9ce1f2c82ea9ea790 +Author: Panu Matilainen +Date: Thu Sep 18 13:05:19 2008 +0300 + + Kick out references to "Red Hat Linux" out of the manpages, duh :) + - RHL hasn't existed in years and rpm isn't specific to RH anyway... + +commit 0ba35c7e5c7430bbc72200eda80395c8ede7c5b8 +Author: Panu Matilainen +Date: Thu Sep 18 12:38:04 2008 +0300 + + Update man-page wrt supported query formatter types + +commit 9a9f3c3abbab8981cd1397ddee5a16b4ce65e353 +Author: Panu Matilainen +Date: Thu Sep 18 12:36:31 2008 +0300 + + Don't segfault on unknown format specifiers + +commit 9da6dce0e68cfe1290e4001def4e5adebb8bf37b +Author: Panu Matilainen +Date: Thu Sep 18 12:15:43 2008 +0300 + + Add error message on query of unsupported files (rhbz#461362) + +commit a486bcc79329dd48db0c0c50391a940abbb9e75f +Author: Panu Matilainen +Date: Thu Sep 18 11:39:42 2008 +0300 + + Remove pointless non-NULL check + - rpmfiNew() cannot return NULL, and even if it did, we'd be out of here + by the way of rpmfiFC(fi) returning zero before this... + +commit e69e4ebb7ad146eaf716cf0a127da89840fc9bc9 +Author: Panu Matilainen +Date: Thu Sep 18 11:29:58 2008 +0300 + + Save some screen estate by initializing on declaration.. + +commit 04386244b9dfc4d9d16217ce4795236284f56d37 +Author: Panu Matilainen +Date: Thu Sep 18 10:26:39 2008 +0300 + + More informative output on ambiguous erase (rhbz#164743) + +commit bb4d56a96d33b849dcfaf4851f6f79c5cd65f060 +Author: Panu Matilainen +Date: Thu Sep 18 10:04:51 2008 +0300 + + Fix rpmErase() exit code when arch is specified (rhbz#462631) + - essentially the same bug as rhbz#124016 but for erase code + - rpmdbIteratorCount() isn't realiable on RPMDBI_LABEL, we need to walk + the iterator to know if there were actual matches + +commit 137acc7355ae94959b241674e26006df07a2d84c +Author: Panu Matilainen +Date: Tue Sep 16 12:08:18 2008 +0300 + + Kick out double definitions of --(no)dirtokens options + - mistakenly added in commit 2f7c913723baa8135201fa930678d9e3d4138f2c + +commit 0eb396d2ffa5bf89fcf76a50a2080be1c85e7ded +Author: Panu Matilainen +Date: Tue Sep 16 12:03:26 2008 +0300 + + Resurrect --nodirtokens build option + - this gets somewhat hysterical: we create the filelist as uncompressed, + then compress it for rpmfi which only understands compressed filelist, + and if nodirtokens is used, expand the list again after initializing + rpmfi for cpio/fsm... + +commit 55fa1442f85628e75bcb21226949d8940a38b708 +Author: Jindrich Novy +Date: Mon Sep 15 16:42:01 2008 +0200 + + Avoid asserts and output error instead (rhbz#448939, rhbz#456100) + +commit 320c11f6537d6c898226f7e072497c4af253c5b1 +Author: Jindrich Novy +Date: Mon Sep 15 16:37:32 2008 +0200 + + Use proper return codes in rpmfc.c + +commit b08d25d841024a45e16c9e7a6797f995da2501f0 +Author: Jindrich Novy +Date: Mon Sep 15 16:35:30 2008 +0200 + + Use proper return codes in files.c + - don't go on if processPackageFiles() or rpmfcGenerateDepends() fails + +commit 5e7ca9eac40f7fce940acd8b1c23e2af847478d1 +Author: Panu Matilainen +Date: Fri Sep 12 15:22:02 2008 +0300 + + headerAddEntry() is deprecated, use headerPutString() instead + +commit c094de4d1017af3ffbe89fdbb1db5bb821467c73 +Author: Panu Matilainen +Date: Fri Sep 12 14:56:41 2008 +0300 + + Make sure RPMTAG_GROUP is always present in packages + - Many things (including LSB and various 3rd party applications) expect + group tag to be present even if they don't actually use it for anything. + rpmbuild doesn't consider it mandatory in specs anymore though, so stick + "Unspecified" in there to avoid breaking things in case spec didn't set it. + +commit 1327278138c7f24b11b8ea231331991eb20385ee +Author: Panu Matilainen +Date: Fri Sep 12 11:38:07 2008 +0300 + + Fix indentation + +commit 9f857078253981e02575bd8f097e50d925476d3b +Author: Panu Matilainen +Date: Thu Sep 11 16:56:50 2008 +0300 + + Macro argument handling regression regression (rhbz#461180) + - commit f366011c42e4cf13d3acdd1af45127f0a1baec3a is too simplistic and + broke other stuff in turn... + +commit 5c71ced2da7d99b870a07a83dd8f7e8d1f1b7e4b +Author: Jindrich Novy +Date: Wed Sep 10 15:04:57 2008 +0200 + + Don't generate broken cpio in case of hardlink pointing on softlink + - thanks to Pixel + +commit ce1db5af7036df54a21abab9a5d70b06a821fff4 +Author: Jindrich Novy +Date: Sat Sep 6 15:30:40 2008 +0200 + + Fail hard if patch isn't found (rhbz#461347) + +commit f15b7e099682605994b4e7d23cb03018e72abb5e +Author: Jindrich Novy +Date: Thu Sep 4 06:34:47 2008 +0200 + + Add Dutch translation to LINGUAS + +commit 18aab133cdb0f1c67c624d51ce8e72855eb42046 +Author: Jindrich Novy +Date: Thu Sep 4 06:34:11 2008 +0200 + + Add initial Dutch translation (rhbz#461060) + +commit a424702c226d6b5cf9bc7e08d97819902286d9ac +Author: Panu Matilainen +Date: Tue Sep 2 15:25:17 2008 +0300 + + Updated German translation from Fabian Affolter + +commit 4ff3b1166463d1173e4fff89d910b01d01357230 +Author: Panu Matilainen +Date: Tue Sep 2 14:33:55 2008 +0300 + + --repackage is gone, remove references from French manual too + +commit 991600462bb7ccbda4d6b85031e44aff01a217d3 +Author: Panu Matilainen +Date: Tue Sep 2 14:28:35 2008 +0300 + + Updated French translation from man-pages-fr + +commit 073b1ac2a88451cc248c4b01825edd01162ffe36 +Author: Panu Matilainen +Date: Tue Sep 2 10:18:41 2008 +0300 + + Fix --dump usage description in Japanese manpage translation. + Patch from Masahiro Matsuya. + +commit b53ecfb11de5ab10a40c787028d793d536d64da7 +Author: Panu Matilainen +Date: Wed Aug 20 12:01:38 2008 +0300 + + Avoid dumb casts + - switch-case on rpmTag enum makes gcc go crazy without a default case + +commit ff7bfd9a32d672f8582ea334ee351af8c32229ad +Author: Jindrich Novy +Date: Mon Sep 1 14:35:34 2008 +0200 + + Create directory structure for rpmbuild prior to build if it doesn't exist + - creates all needed directories that rpmbuild uses for input and output + +commit b16df5b3089e36cf0bd697177983dcae11b849ec +Author: Jindrich Novy +Date: Mon Sep 1 14:31:33 2008 +0200 + + Create _topdir if it doesn't exist when installing SRPM + - otherwise creating _sourcedir and _specdir fails + +commit 436aab02e7f9870835d7c992734fcb2922e273c3 +Author: Jindrich Novy +Date: Tue Aug 26 19:03:25 2008 +0200 + + Fix type in format string to avoid segfault (rhbz#460146) + +commit 1d6ab4edccf75d1d663ab24938d34e9cc9af3d71 +Author: Jindrich Novy +Date: Tue Aug 26 13:25:21 2008 +0200 + + Allow noarch subpackages + - inspired by patch from Altlinux + +commit 743415bb78a773e99e76205b3b435b77bd9ff3e4 +Author: Panu Matilainen +Date: Tue Aug 19 13:45:20 2008 +0300 + + Improve INSTALL documentation wrt NSRP/NSS requirements + +commit 79fe0e0e3bd375c02a6f182508a6feea85379e3c +Author: Panu Matilainen +Date: Tue Aug 19 13:33:21 2008 +0300 + + Use standard auto*foo checks for NSS + - upstream NSPR/NSS doesn't ship pkg-config files (unfortunately) + - hardcoded guesses are always wrong for somebody, expect builder to + pass in appropriate CPPFLAGS etc + +commit 77ecf321bfb1a2024cb5f6bc231a6b97c56373c6 +Author: Panu Matilainen +Date: Thu Aug 14 15:02:52 2008 +0300 + + Fix segfault on zero-length %policy file + +commit 44263ec047b82f0989b6d9cb89393ee0ebe07f99 +Author: Panu Matilainen +Date: Thu Aug 14 14:28:12 2008 +0300 + + Fix segfault on zero-length rpmrc + +commit 3b9636cd69b81b6e23331bb797c0fdde79e97316 +Author: Jindrich Novy +Date: Thu Aug 14 13:08:09 2008 +0200 + + Accept numerical characters in macro expansion (related to rhbz#456103) + +commit be02cdfa87f593bee96554d0fc5ae4ab1eb04f05 +Author: Panu Matilainen +Date: Thu Aug 14 09:57:03 2008 +0300 + + Don't fail build on too large but excluded files + +commit 9068da47a912a6983a12d1024a118c16bcb2a057 +Author: Panu Matilainen +Date: Wed Aug 13 09:43:41 2008 +0300 + + Unbreak payload size tag generation on ppc (rhbz#458817) + +commit fefae4d68e25b69301e9cee12bc54b52fbd11403 +Author: Panu Matilainen +Date: Mon Aug 11 15:39:47 2008 +0300 + + Macroize configure command/path in %configure (rhbz#458644) + - add + use %{_configure} macro defaulting to ./configure, can be overridden + for VPATH builds etc + +commit be56a4a888f60e461154f88843d3a57eeb991d9c +Author: Panu Matilainen +Date: Fri Aug 8 13:53:57 2008 +0300 + + Add parenthesis to make gcc happy + +commit 17b4187204af7147869d8bcf05f9f9c3c0e0a3d6 +Author: Panu Matilainen +Date: Fri Aug 8 13:53:39 2008 +0300 + + Missing include + +commit 645184ac397a9e62ed3076648505b76b4551e794 +Author: Panu Matilainen +Date: Fri Aug 8 13:06:28 2008 +0300 + + Remember to free up resources from matchpathcon_init() + +commit dccb80ea38b99e94de84139cb854488e160be38c +Author: Panu Matilainen +Date: Fri Aug 8 13:04:10 2008 +0300 + + Fix check for nocontext flag + +commit 4537bc35fdc268b31d208e31a7db5729f09345fd +Author: Panu Matilainen +Date: Fri Aug 8 12:49:41 2008 +0300 + + Plug memleak from %pretrans + - te->fi needs to be freed if we replace it... + +commit 99eb5361591f9e1a29cc73ccbd696382a4b16d2f +Author: Panu Matilainen +Date: Fri Aug 8 09:57:41 2008 +0300 + + Add key to transaction keyring on rpmtsImportPubkey() (rhbz#457360) + - still not 100% identical to pre-keyring behavior but enough for the + common case + - only add keys we don't already have (rhbz#68290) + +commit ff1a549fedfe9d564791545b433887283f595ce3 +Author: Panu Matilainen +Date: Fri Aug 8 09:32:05 2008 +0300 + + Use rpmPubkey + methods for pubkey header generation + - moves some of the lowlevel pubkey fiddling into rpmio where it belongs + +commit 3897bdc37d7667ffb5414dcea91802de3342b9e9 +Author: Panu Matilainen +Date: Fri Aug 8 09:26:30 2008 +0300 + + Add couple of new rpmPubkey() methods + - rpmPubkeyDig() to retrieve parsed OpenPGP parameters of key + - rpmPubkeyBase64() to return base64 encoding of the key + +commit 60e5ff80f7d5e19a5ca32cb95e2d2ea535733d6c +Author: Panu Matilainen +Date: Fri Aug 8 09:14:53 2008 +0300 + + Split gpg-pubkey header generation out of rpmtsImportPubkey() + +commit 4b61c45dbb9965c90ddc1da6c3b8d77959bf682a +Author: Panu Matilainen +Date: Thu Aug 7 18:44:03 2008 +0300 + + Permit i18nstring in headerPutString() + +commit a366612ec3fde6b2506072fa2288454118fda29d +Author: Jindrich Novy +Date: Thu Aug 7 14:50:49 2008 +0200 + + Don't allow multiple definition of PatchX or SourceX (rhbz#458261, rhbz#458260) + +commit 95925ab512c441d568e76219f006f8de3dc741b3 +Author: Panu Matilainen +Date: Wed Aug 6 12:27:25 2008 +0300 + + Clarify %buildroot in macros + - it's no longer really optional.. + +commit 6c0651926aedc302816a0b61e1f1a8ef568be539 +Author: Panu Matilainen +Date: Wed Aug 6 12:24:34 2008 +0300 + + Simplify spec buildroot hysteria + - BuildRoot: in spec is now really ignored + - parseSpec() uses default %{buildroot} unless overridden + - BuildRoot is forced for all builds + +commit edf4e046ec5a1c7e07ad390f806fdca2a758f0d5 +Author: Panu Matilainen +Date: Wed Aug 6 08:38:57 2008 +0300 + + Add %sparc macro for supported Sparc architectures (rhbz#455972) + +commit 5a89833b93b3ceb5063c984578f355416eb409e3 +Author: Panu Matilainen +Date: Tue Aug 5 15:32:49 2008 +0300 + + Increment exit code on file not found errors too (#446202) + +commit 58986581b1a4fd256bfdcbfd60bf98cb1786491f +Author: Panu Matilainen +Date: Mon Aug 4 15:46:18 2008 +0300 + + Bunch of keyring / pubkey refcounting fixes + +commit b5b9329bfa4cd357ce3cac53568aaed7d70383c5 +Author: Panu Matilainen +Date: Sat Jul 26 11:14:45 2008 +0300 + + Updated Italian translation from Francesco Tombolini (rhbz#453364) + +commit 35a08d1df2cb607db8d638d6d43c6125d5688860 +Author: Panu Matilainen +Date: Sat Jul 26 10:56:02 2008 +0300 + + Revert "plug memory leak in spec parsing code" + + This reverts commit ac3bd07ef2a11cbe9e7f7031786eebc8851c863b. + - It's not a leak, valueMakeString() doesn't make a copy of the argument + string and the free() causes invalid memory access + +commit 7c4798116adb2b050016b8751b4b236efc4098a1 +Author: Panu Matilainen +Date: Sat Jul 26 09:57:09 2008 +0300 + + Fix typo in buildroot dir definition (rhbz#456708) + - it's _buildrootdir, not buildrootdir... this caused user overridden _topdir + not getting honored by buildroot + +commit ac3bd07ef2a11cbe9e7f7031786eebc8851c863b +Author: Florian Festi +Date: Fri Jul 25 12:28:46 2008 +0200 + + plug memory leak in spec parsing code + +commit 1d666839ba37da9280df8b463eed86b630a55a76 +Author: Florian Festi +Date: Thu Jul 24 17:38:11 2008 +0200 + + fix parsing of empty doublequoted strings in spec file (rhbz#456103) + off-by-one error + +commit 2a44df64cf4c4d04394d1b0894b21e35736a3f49 +Author: Panu Matilainen +Date: Thu Jul 24 11:17:50 2008 +0300 + + Dumb thinko breaking tar builds from relative paths (rhbz#456321) + +commit 6df78d16a68ff508a965ba2166f3b376e850b138 +Author: Panu Matilainen +Date: Sat Jul 19 15:27:42 2008 +0300 + + Fix regression in %patch handling (rhbz#455872) + - popt doesn't think of "008" as an integer, let popt think it's a string + as we do our own conversion to number anyway + +commit ba644ed5aa949f6583ad5e011369527241b62a3c +Author: Panu Matilainen +Date: Thu Jul 17 15:50:35 2008 +0300 + + Add (and use) refcounting for rpmKeyring and rpmPubkey + +commit d422e661c1790db2d6a1e6fe36eff5eb4506ad5b +Author: Florian Festi +Date: Thu Jul 17 10:37:03 2008 +0200 + + Added .gitignore file to get sane git status reports + +commit 78ccd971f2cb0dde427ba697282711e3245d0d7d +Author: Panu Matilainen +Date: Wed Jul 16 12:07:03 2008 +0300 + + Make sure there's room for \0 (packages with no files) + +commit 1d9b4d00d7f1a0ca396624411b53d4fb714ccdf8 +Author: Panu Matilainen +Date: Wed Jul 16 10:52:33 2008 +0300 + + Make rpmExpand() smarter wrt memory allocations + - precalculate unexpanded size and allocate enough for that plus MACROBUFSIZ + for expansion + - typical allocation is way smaller than what gets allocated "just in case", + calculate expanded size and realloc to actual size to avoid wasting + memory + +commit 889f9f5b41d3819c52aad568e75bd0ec5568c0f6 +Author: Panu Matilainen +Date: Wed Jul 16 10:33:57 2008 +0300 + + Eliminate another unnecessary temp variable + - do all the copying inside a loop + +commit 1b19676027fd19369f49629945debcefeeae48df +Author: Panu Matilainen +Date: Wed Jul 16 10:24:05 2008 +0300 + + Eliminate unnecessary variable + - leftover from static buffer times.. + +commit f366011c42e4cf13d3acdd1af45127f0a1baec3a +Author: Panu Matilainen +Date: Wed Jul 16 09:40:10 2008 +0300 + + Macro argument handling regression (rhbz#455333) + - expandMacro() wants the next \0 character to be returned, which might + or might not be the same as lastc passed to grabArgs() + - use memcpy() instead of memmove() for the copy, the areas can't overlap + +commit e9cae5eecfab5694be7dddc3fde75f1669e6c240 +Author: Panu Matilainen +Date: Mon Jul 14 16:23:02 2008 +0300 + + Adjust querytags expected results for autotests + +commit 649ed675167835796bdf97c48880d56d76bf8629 +Author: Panu Matilainen +Date: Mon Jul 14 16:21:15 2008 +0300 + + Don't put unimplemented tags into tagtable + - no point in exposing unimplemnted (ours or somebody elses) tags to users + +commit 90c8e0ea0858ec12ddabf3f9732ab9532cd5d334 +Author: Panu Matilainen +Date: Mon Jul 14 16:16:41 2008 +0300 + + Mark unimplemented tags as such in tag table + +commit b3bd21e9f07272a37c2259070f95b167e6301c79 +Author: Panu Matilainen +Date: Mon Jul 14 11:53:10 2008 +0300 + + Fix mono dependency extraction + - use "Mono/.Net assembly" instead of "PE executable" for detection, + later file reports bitness (eg "PE32 executable"), we just care if its + mono or not. This is compatible with older libmagic too. + +commit b256dc9e25dc7e9f9886edab0f3c8ceef8a4b27c +Author: Panu Matilainen +Date: Sat Jul 12 17:57:51 2008 +0300 + + NSS uses unsigned int, not size_t for hash lengths + - broke ppc64 in entertaining ways... + +commit 6cf51345a40d6c0eb84d5d3c590d72fa48090ced +Author: Panu Matilainen +Date: Fri Jul 11 13:37:38 2008 +0300 + + Updated Polish translation (Piotr DrÄ…g) + +commit 6b3a81c5ddcd5a3f55af984cd33b7280f31e3c1f +Author: Ville Skyttä +Date: Tue Jul 1 20:22:02 2008 +0300 + + Decompressor clarifications. + + Signed-off-by: Ville Skyttä + +commit 78d829a3011c07f03e1e4db4b3ba128f88591c9b +Author: Panu Matilainen +Date: Wed Jul 9 11:56:22 2008 +0300 + + Include rpmlib.h from rpmcli.h, legacy stuff expects it there.. + +commit 5e7ea3212a93eb1dcc1d4dbebcddd9daa4c0522b +Author: Panu Matilainen +Date: Wed Jul 9 11:55:57 2008 +0300 + + Check for _RPM_4_4_COMPAT in rpmlib.h too + - limits the chances of compat includes not working due to include order + a bit + +commit c56ca35a5315054c044f7aee03618f93af58978f +Author: Panu Matilainen +Date: Tue Jul 8 18:35:56 2008 +0300 + + Include legacy compat from rpmlib.h to cover maximum ground + - rpmlib.h is the first thing any old rpm api user includes so this should + cover most cases (only if enabled) + +commit f1b25fc2576e30fd7604e2b4a6f30aa0738b224c +Author: Panu Matilainen +Date: Tue Jul 8 18:35:07 2008 +0300 + + Add compat definitions for renamed string functions too + +commit 7a6ef7ceeccb4994f57a87333806d31934a926d9 +Author: Panu Matilainen +Date: Tue Jul 8 18:13:42 2008 +0300 + + Missing cplusplus-wrappers in rpmtd + +commit 1d0cbf396215a0167b112a80796d51a50718eab2 +Author: Panu Matilainen +Date: Tue Jul 8 18:11:28 2008 +0300 + + Bunch of dumb macros to make up for renamed functions + - should arrange deprecation warnings on them too... + +commit d8bdf1ef85dbde77fd5f7d5bd5db6c09650580ab +Author: Panu Matilainen +Date: Tue Jul 8 16:49:54 2008 +0300 + + Add deprecation markers for hge etc vector prototypes + +commit 425d43a8a056685432c9f80b12b1ec8920950408 +Author: Panu Matilainen +Date: Tue Jul 8 16:45:44 2008 +0300 + + Add deprecation warnings to all legacy types + +commit 1cab53124a70691519c751def7c75740a24484bc +Author: Panu Matilainen +Date: Tue Jul 8 16:43:46 2008 +0300 + + Compat typedef for Spec -> rpmSpec rename + +commit 65077f4d5b5ea218082c757c79ae28d07717b0b3 +Author: Panu Matilainen +Date: Tue Jul 8 16:42:32 2008 +0300 + + Add mappings from hTAG_t and friends to legacy interfaces + +commit 9e586c62b18905691817587353e434eb03b4e7d2 +Author: Panu Matilainen +Date: Tue Jul 8 16:41:24 2008 +0300 + + Limit the exposure of rpmlegacy.h stuff to bare minimum + +commit 6ea17f9ca4f1434510be658fc048de21ec3b2109 +Author: Panu Matilainen +Date: Tue Jul 8 16:37:23 2008 +0300 + + Shove header legacy interfaces into rpmlegacy.h + - get them out of sight from main header.h + - turn headerSprintf() into macro around headerFormat(), that way + rpmTagTable and rpmHeaderFormats lossage can be hidden away as far + as headerSprintf() use is concerned + +commit 27a6edd36d39e296e6b13e24974989ad5954abb9 +Author: Panu Matilainen +Date: Tue Jul 8 16:23:22 2008 +0300 + + Add a new legacy compatibility header, kill rpmints.h + - build-time generated rpmints.h causes issues with distcheck and is + not really worth the trouble + - we have all sorts of legacy junk to deal with, sticking them all into + rpmints.h would be just wrong... + +commit 6778dc94ce0a9234ed74cf094d98e219a295070f +Author: Jindrich Novy +Date: Tue Jul 8 17:46:54 2008 +0200 + + Initialize optCon + - one could easily segfault the doPatchMacro() code without + the optCon initialization (particularly with jump to "exit" label) + +commit 096d1af159718bc8d6cea7355fa9f59bc4bd9f10 +Author: Jindrich Novy +Date: Tue Jul 8 17:45:12 2008 +0200 + + Make the default fuzz for %patch is now configurable via macro + - the macro is _default_patch_fuzz + +commit 831c5c5460b3ae2ee25d3033db6f18f33e1fc873 +Author: Panu Matilainen +Date: Tue Jul 8 13:00:20 2008 +0300 + + Update translations + +commit 97fe9f138ee4602cb642137b70e9b5a47da32d23 +Author: Panu Matilainen +Date: Tue Jul 8 12:59:51 2008 +0300 + + Add ISA-stuff for ia64 + +commit e5d4fc50c2286f34d0154d915c1b73927e5f7b89 +Author: Panu Matilainen +Date: Mon Jul 7 18:11:59 2008 +0300 + + Missing const in parseUnsignedNum() + +commit b215f1145e59356c48f1dcefdfcd7bd4fd843ab5 +Author: Panu Matilainen +Date: Mon Jul 7 18:09:49 2008 +0300 + + Teach Fflush() about lzdio + +commit 1a173c486dd1d83f22f8123317303fc1fb880f54 +Author: Jindrich Novy +Date: Mon Jul 7 14:49:33 2008 +0200 + + Make Source0: equal to Source: again + +commit ff23d0a2cf9d9b9fac3e2818fd1f067e79ab70a1 +Author: Jindrich Novy +Date: Mon Jul 7 12:59:03 2008 +0200 + + Use proper type in format + +commit c69f826ade69a753da062872fe1110574277413f +Author: Jindrich Novy +Date: Mon Jul 7 10:21:30 2008 +0200 + + Remove useless argument to format, d'oh + +commit e8cef9b4f0242b593b8541ba5a22ed6d249a0260 +Author: Panu Matilainen +Date: Mon Jul 7 13:28:04 2008 +0300 + + Eliminate couple of timedRead() uses where we control how fd is opened + +commit 32d69b7adc78f1707f6f11268b68841c0b235dc9 +Author: Panu Matilainen +Date: Mon Jul 7 10:52:33 2008 +0300 + + Make verifyAttrs and virtualFileAttributes static + - nothing outside files.c needs + +commit 811436ec92fa874585552204fc9e4136e0b406c0 +Author: Panu Matilainen +Date: Mon Jul 7 10:48:06 2008 +0300 + + Kick out ftpStrerror() and related error code defines + - our url-retrieval error codes depend on the helper used which is + configurable via macros so hardcoding eg curl codes wont work either + - need to figure out something better, pass helper error messages through + FD_t or something... + +commit 7b95061d3b77d8e6b3c80e856b66f49b393511ba +Author: Panu Matilainen +Date: Mon Jul 7 10:42:55 2008 +0300 + + Kick out now unused printNewSpecfile() + +commit 0f991a14209054da7c45c46e96750738fc62874d +Author: Panu Matilainen +Date: Mon Jul 7 10:17:21 2008 +0300 + + Kick out ancient, useless and hidden --specedit option + +commit 5129c291bde8b7785fa70fb42b2844e962369ace +Author: Panu Matilainen +Date: Fri Jul 4 18:18:55 2008 +0300 + + Remember to remove ugid.c from POTFILES + +commit 9e7cfa4d5ba64baf63c604426805a71671c58544 +Author: Panu Matilainen +Date: Fri Jul 4 16:09:42 2008 +0300 + + Stuff rpmio/ugid.[ch] contents to lib/misc.[ch] + - no uses outside librpm itself, and there they can be hidden away from + exported ABI whereas in librpmio they cant + +commit 104bc6a883cb59ce5f7de966fc6d8d11dc4ed247 +Author: Panu Matilainen +Date: Fri Jul 4 15:02:30 2008 +0300 + + Make ufdClose() static, nothing outside rpmio.c needs directly + +commit ebdfd2887fcb6ebccd153f78b5b775495903e6b9 +Author: Panu Matilainen +Date: Fri Jul 4 15:00:48 2008 +0300 + + Remove unused ufdGetFile() from librpmio + +commit bd078a5811fb6405f9aa94177f8f0cc47eafee39 +Author: Panu Matilainen +Date: Fri Jul 4 14:53:02 2008 +0300 + + Remove unused _url_debug + +commit 7985d6afb5c1f290c4c60b4b1c74e55c0353cacd +Author: Panu Matilainen +Date: Fri Jul 4 14:52:47 2008 +0300 + + Bump version to resemble library versioning + +commit 3b57a00f063640a46f291f88acbbad966000e249 +Author: Jindrich Novy +Date: Fri Jul 4 15:00:09 2008 +0200 + + Really make fuzz=0 default for patches + - and finish the Patch and Source fixup + +commit 724b07bba5e802998b1b79b408c2401d2a238a3b +Author: Jindrich Novy +Date: Fri Jul 4 14:58:38 2008 +0200 + + Don't treat Patch and Source as Patch0 and Source0 + +commit 6c1103fc80bd0f063338c7147e2e9fac10b3a32c +Author: Panu Matilainen +Date: Fri Jul 4 14:33:23 2008 +0300 + + Remove rpmcache from repository + - next to nobody even knew about it, much less used it... + - hardly useful now that solvedb is gone + +commit d902040e1484f1352dafc96c77678da0ebf44035 +Author: Panu Matilainen +Date: Fri Jul 4 14:22:06 2008 +0300 + + Remove solvedb API and other related stuff + - nobody has used the solvedb for anything in years + - the mechanism + rpmcache are horribly broken on multilib + - solvedb is way too heavyweight to be really usable as a general mechanism + - solver callback hook left in place as that could in theory be usable still + - we need something better to replace this all, getting rid of it now + so we're not stuck with the API forever + +commit d0fbf7b246d4232a3a833753d488646e0636de2a +Author: Panu Matilainen +Date: Fri Jul 4 14:11:47 2008 +0300 + + Kill of rpmtsAvailable() + - long since deprecated and nothing uses it, might as well go + +commit 47c85270631de173d873b98bc79727e2db203007 +Author: Panu Matilainen +Date: Fri Jul 4 13:01:39 2008 +0300 + + Enforce conflicts on colorless files always + - silently swallowing conflicting files when they happen to be in the + same (suitable colored) transaction but conflicting when installed + separately is nothing but inconsistent + - partial fix for rhbz#190209 + +commit 46592cde0dc41cf6ab26af0579fec8044502a98b +Author: Panu Matilainen +Date: Fri Jul 4 09:17:33 2008 +0300 + + rpmfiFNlink() returns unsigned int + +commit ee2b26644174e1ae93ac979050e7acccc369ae88 +Author: Panu Matilainen +Date: Fri Jul 4 09:11:20 2008 +0300 + + Couple of type corrections + - use rpmTag, rpmsenseFlags instead of int32_t + +commit 6c8b729ac4df24f407f6d36fade22a7c44ab71d6 +Author: Panu Matilainen +Date: Fri Jul 4 09:07:19 2008 +0300 + + Use unsigned integer for epoch, remove unnecessary static + +commit 5a4807c81c0a06646ae2a9b52c310ac605590db9 +Author: Panu Matilainen +Date: Thu Jul 3 17:44:43 2008 +0300 + + Parameter name + doc mismatch on rpmVerifySignature() + +commit 78040394a29b3960cd6adaf8bd626936093008a3 +Author: Panu Matilainen +Date: Thu Jul 3 17:44:13 2008 +0300 + + Change headerPutString() arg name to match the others + - doxygen whines a bit less.. + +commit 2093f7ccebc1fd66c9ecec7d1f61eb5642070654 +Author: Panu Matilainen +Date: Thu Jul 3 17:14:45 2008 +0300 + + Plug leaks in selinux context handling in fsm + +commit 03b2c395b2abaf726b6c63e06f2c6c795a2d83d7 +Author: Panu Matilainen +Date: Thu Jul 3 17:01:52 2008 +0300 + + Plug a memleak on erasure + - on erasure the order of things in ts->order is reverse from that of + rpmtsi-iteration, causing rpmtsiNext() to abort earlier than it should + when things are removed underneath it + - just walk the ts->order table without iteration, it doesn't make any + difference here + +commit 1de6c1eb12e0c2d05a342649f73befc00d6de0cb +Author: Panu Matilainen +Date: Thu Jul 3 15:30:04 2008 +0300 + + Make all transaction callback notifications go through rpmtsNotify() + - single point to control how callbacks are made + +commit 9d200565744d3023053d64f627c82cf2451fa701 +Author: Panu Matilainen +Date: Thu Jul 3 09:11:55 2008 +0300 + + Only try to pubkeys from rpmdb if we non-db keys didn't exist + - try to avoid opening the db unnecessarily, if the keys have been migrated + out of the db, the db probably only has duplicates (right? :) + +commit 0e1e131e1adf15dbce5a1fcdc197b029f3e283fc +Author: Panu Matilainen +Date: Wed Jul 2 19:07:06 2008 +0300 + + Don't leak memory on duplicate pubkeys + +commit ef17f6bcfc564c6cb132e5e4013b971819ebe66c +Author: Panu Matilainen +Date: Wed Jul 2 19:00:56 2008 +0300 + + Don't leak memory on python expandMacro() + +commit 20ee2a2df04f4667609b1d98bd798692bd14ecf5 +Author: Panu Matilainen +Date: Wed Jul 2 18:49:05 2008 +0300 + + Plug a dumb memleak that has crept into rpmReadPackageFile() + - jumps to exit from very early on, make sure sigtd is reset early so + calling rpmtdFreeData() is safe + +commit 83e894db7841dd4e751d785a88e49e4ae5894624 +Author: Panu Matilainen +Date: Wed Jul 2 15:08:51 2008 +0300 + + Change rpmts keyring get/set interface to more transparent handling + - add extra parameter to rpmtsGetKeyring() to automatically load up default + keyring if not already set + - rpmtsSetKeyring() with NULL keyring just frees up current keyring + - adjust callers wrt the change + - allows more transparent action for various "legacy" code-paths + +commit 43a05ea36331a3463efd33e3a6cbbc3d723f36e5 +Author: Panu Matilainen +Date: Wed Jul 2 14:24:20 2008 +0300 + + Add documentation for keyring + +commit 710750ebff4ded200a71107b6dba8f5daf573101 +Author: Panu Matilainen +Date: Wed Jul 2 14:23:30 2008 +0300 + + Make rpmkeyring.h public header + +commit 152a6e84aa0fa801ad2ac063570119df698d8b93 +Author: Panu Matilainen +Date: Wed Jul 2 13:55:50 2008 +0300 + + Add docs for the new rpmts methods, deprecate rpmtsFindPubkey() + +commit fe09759eefbe34833a39f696517e558fa429a075 +Author: Panu Matilainen +Date: Wed Jul 2 13:48:00 2008 +0300 + + Load pubkeys from both files and rpmdb for now + - easy enough and doesn't cost really anything + - at some point, start warning about legacy gpg-keys in rpmdb, suggest + conversion method / do it automatically & such... + +commit cea83865c944d378d3aa8632c81a68c3d669b4db +Author: Panu Matilainen +Date: Wed Jul 2 13:31:12 2008 +0300 + + Some keyring improvements + - keep keyring sorted by keyid, use bsearch for key lookups + - check for key in keyring before adding it to avoid dupes + - actually check that pubkey parameters match the signature on keyring + lookup like was done in rpmtsFindPubkey() + +commit 396ca4694710ca5a1e4ac799f1c68bb0c788b7d8 +Author: Panu Matilainen +Date: Tue Jul 1 17:35:21 2008 +0300 + + Eliminate remaining signature checking bits from rpmts + - rpmdb-specific rpmtsFindPubkey() no longer needed for anything, and + neither are the cached packets and stuff + +commit e0e4d1c17c873e02e0482207250369d1b27b2782 +Author: Panu Matilainen +Date: Tue Jul 1 17:32:11 2008 +0300 + + Use keyring even when using pubkeys from rpmdb + - build-time switchable, could easily be run-time too + +commit b10bc97b30e459b865a81fcbe4dab8eef84a0485 +Author: Panu Matilainen +Date: Tue Jul 1 17:00:04 2008 +0300 + + Pass keyring, not the full ts to lowlevel signature routines + - lazy loading of default keyring on ts iteration works nicely for + everything but package signature verification which doesn't access the + db now that the keys are not in the db anymore + - make rpmtsSetKeyring(NULL) load the default keyring, a bit ugly but + it'll have to do for now + +commit ca52a32bbc30ea5dbcf206e6c8023f71e02f6540 +Author: Panu Matilainen +Date: Tue Jul 1 15:50:05 2008 +0300 + + Eliminate digest calculation statistics from signature code + - if we want them back, they just need to be detached from the ts... + +commit 3c3fe4388fd42e177171582d03f59aea6babb324 +Author: Panu Matilainen +Date: Tue Jul 1 15:46:18 2008 +0300 + + Add methods for getting and setting the keyring used by a transaction + - semantics of exactly when and how this is permitted needs more thought... + +commit caf362cff8d1967bd3d9360c117beacc93470343 +Author: Panu Matilainen +Date: Tue Jul 1 15:38:32 2008 +0300 + + Move keyring related typedefs to rpmtypes.h + +commit 0b385002cc04254ce9f994efe1c2400edd9d1516 +Author: Panu Matilainen +Date: Tue Jul 1 15:25:06 2008 +0300 + + Proof of concept rpmtsFindPubkey() implementation with the new keyring + - ifdeffed out for now, needs a bit more flesh and a working + import routine + +commit 685877f2a0ec949186bbcad1f18ee7895e0da15b +Author: Panu Matilainen +Date: Tue Jul 1 15:24:04 2008 +0300 + + Beginnings of an abstract keyring + - in librpmio to avoid dependencies on higher level stuff + - for now it's just an in-memory structure that needs to be populated + by someone simply by feeding in GPG public keys + +commit e435dde712e390f1bdc729b8c792da9bd0633e16 +Author: Panu Matilainen +Date: Tue Jul 1 14:35:44 2008 +0300 + + Create ascii armor that rpm itself accepts + +commit 0e9f7e2d62c1dec40742c25593aed7eaa436e092 +Author: Jindrich Novy +Date: Tue Jul 1 12:52:16 2008 +0200 + + Update parseNoSource() and addSource() to accept only unsigned SourceXX numbers + +commit ad60332e0494e4da632fb3ed5345bb94d607d3da +Author: Jindrich Novy +Date: Tue Jul 1 12:51:08 2008 +0200 + + findSource() eats only unsigned SourceXX numbers + +commit 301ef0b5e66a129f952fdb410fe889940106ca69 +Author: Jindrich Novy +Date: Tue Jul 1 12:49:19 2008 +0200 + + doPatchMacro() now uses parseUnsignedNum() + +commit 7f9befa4c34dc6edace37d9961086c67d2c256ec +Author: Jindrich Novy +Date: Tue Jul 1 12:48:50 2008 +0200 + + doSetupMacro() now uses parseUnsignedNum() + +commit e9e77e64636f4a8e7f066776e3556a8e2de2e51c +Author: Jindrich Novy +Date: Tue Jul 1 12:47:36 2008 +0200 + + doUntar() accepts only unsigned SourceXX numbers + +commit afc392537ffb84396dedfe2cb4270e7dfa6ccd3f +Author: Jindrich Novy +Date: Tue Jul 1 12:46:16 2008 +0200 + + Convert doPatch() to use parseUnsignedNum() + +commit e831de1040243bd33163a930137f1318ece4d61c +Author: Jindrich Novy +Date: Tue Jul 1 12:43:47 2008 +0200 + + Use the same number types for SourceXX tags as returned by parseUnsignedNum() + +commit 206fd12122b7c2e0cf07768f639d78b5f1e4bd5e +Author: Jindrich Novy +Date: Tue Jul 1 12:42:12 2008 +0200 + + Convert Epoch parsing to use parseUnsignedNum() + +commit 0f8102c1edc8ba7bb1b42fed1a9b59a797648ca9 +Author: Jindrich Novy +Date: Tue Jul 1 12:41:35 2008 +0200 + + Avoid reading negative constants from SourceXX, PatchXX tags + - convert parseNum() to parseUnsignedNum() + - don't misleadingly declare it to return int, when the result is + always unsigned due to strtoul() call + +commit bcb226480d0b60a8667eade77d81c29de4c3d6c9 +Author: Panu Matilainen +Date: Tue Jul 1 11:22:40 2008 +0300 + + Eliminate the nasty global _dig and _digp variables from rpmpgp + - pass the digest + parameters around as arguments instead + +commit 9594f656d49e1a43e2ffea94c21ffc8f3c4373f8 +Author: Panu Matilainen +Date: Mon Jun 16 17:49:02 2008 +0300 + + Unexport all the umphteen pgp related tables + - nothing outside rpmpgp.c needs + +commit c2efff14861624a7c8d4d32ef6b681f642804e13 +Author: Panu Matilainen +Date: Mon Jun 16 17:01:29 2008 +0300 + + Make every pgp function not needed by other parts of rpm static + +commit 1f425eb2908a293f19cdad92f81ce5b74ab520c9 +Author: Panu Matilainen +Date: Mon Jun 16 11:12:15 2008 +0300 + + We don't need ts to stash the keyid locally now + +commit 8e5b817e3cc4f1a272d3ad20807212d27174a208 +Author: Panu Matilainen +Date: Mon Jun 16 10:59:23 2008 +0300 + + headerCheck() does not recurse + - it can be re-entered by the way of rpmtsFindPubkey() but that doesn't + matter now as dig etc are local variables + +commit 38b401a98986b8f627a9b0b9c3ca94b403e962b0 +Author: Panu Matilainen +Date: Wed Jun 25 11:17:17 2008 +0300 + + Detach pgp digest from transaction set + - pass the pgp container around as argument as needed + - eliminate the related API from rpmts + +commit 884714d326af946a06c1e690afe55e95fb351fff +Author: Panu Matilainen +Date: Sat Jun 14 14:48:53 2008 +0300 + + Pass pgpDig around from rpmVerifySignature() + - get the digest once in rpmVerifySignature() and pass to verification + functions, signature is part of the digest so no need for separate call.. + +commit 5c08f55432f9fdc5df7b7bc6ca52b02c68e69dc7 +Author: Panu Matilainen +Date: Sat Jun 14 17:09:50 2008 +0300 + + Detach signature tag data from transaction set + - pass signature tag data around as argument to rpmVerifySignature() as + needed + - eliminate the related API from rpmts + +commit d51023569e2595cfcc76204b4e2a2cb6ba56b4f6 +Author: Panu Matilainen +Date: Sat Jun 14 14:03:11 2008 +0300 + + Actually use the sigtd passed to verifier functions + +commit fcc1dc3369d5821b9780ece8cfeb1fe2bca6a15b +Author: Panu Matilainen +Date: Sat Jun 14 13:49:37 2008 +0300 + + Start getting signature tag out of transaction set + - collect various signature items into rpmtd and pass around to + verifyFooSignature() checkers + +commit a89c861a3de113ebce481eb2e337e71dfb9e2c21 +Author: Panu Matilainen +Date: Mon Jun 30 15:13:54 2008 +0300 + + (char)NULL doesn't make much sense, use \0 instead + - shuts up another gcc warning + +commit 19d3b1c8203208954e8d1511bdd5d5cf064548dd +Author: Jindrich Novy +Date: Mon Jun 30 12:23:42 2008 +0200 + + Fix missspelling in macro name (_initddir -> _initrddir), thanks to + - Ville Skyttä + - old macro with typo is kept for compatiblity + +commit 669a169adea04a2b2019b498fc045fce8349a3dd +Author: Panu Matilainen +Date: Mon Jun 30 11:28:32 2008 +0300 + + size_t for "left" is wrong, use rpm_loff_t instead + +commit 4cdc43c6c2b68883d603c3363472014c7163a34d +Author: Panu Matilainen +Date: Mon Jun 30 11:24:34 2008 +0300 + + strntoul() is supposed to return unsigned long, not int + - the type mismatch busts up handling on largish files... + +commit c1a5eb371270c2dee3e335ab3589e90fdc0195c7 +Author: Panu Matilainen +Date: Fri Jun 27 15:15:46 2008 +0300 + + debugedit: Include empty CU current directories (rhbz#444310) + - patch from Jan Kratochvil + +commit b55b066e9c30ec4962434fa73d701083fb4d5364 +Author: Panu Matilainen +Date: Fri Jun 27 14:39:39 2008 +0300 + + Use correct formatters for debug-printing in rpmtsInitDSI() + +commit 5f42506680ce69837d4708d38b27a7cfe346b024 +Author: Panu Matilainen +Date: Fri Jun 27 13:49:48 2008 +0300 + + Use correct formatters for debug-printing sizes in printSize() + - on x86_64 size_t happens to be 64bit, not so on x86... + +commit 8b6f82feecf0b5206eff998b07e8958962190513 +Author: Panu Matilainen +Date: Fri Jun 27 13:02:23 2008 +0300 + + Adjust python callback for amount+total type change + +commit 636311912b9426b5bc1da2d256ec4b97b92f1686 +Author: Panu Matilainen +Date: Thu Jun 26 17:52:31 2008 +0300 + + Argh, the tag is LONGSIZE, not LARGESIZE + +commit a9d58acedc555d38228486863f72510293f3c626 +Author: Jindrich Novy +Date: Thu Jun 26 15:58:40 2008 +0200 + + Take new directory into account in rpmbuild test + +commit 65110dfa7dba070cf0ec2467d1f4ddae458640c9 +Author: Jindrich Novy +Date: Thu Jun 26 15:56:55 2008 +0200 + + Add new BUILDROOT directory to default rpm build dirs. + +commit d562af843e60c4c7dc27e3086130c6bcd560e74c +Author: Jindrich Novy +Date: Thu Jun 26 15:56:11 2008 +0200 + + Add new macros for enabling default build root + +commit 5c46ebb7a95f3076ef4ba38a30d4998057c03258 +Author: Panu Matilainen +Date: Thu Jun 26 16:37:06 2008 +0300 + + Make --info work on large packages too + +commit 219917989ab737b145324cea1ee760bc0203426f +Author: Panu Matilainen +Date: Thu Jun 26 16:34:32 2008 +0300 + + Teach build about 64bit payload etc size tags + - only use 64bit variants for packages that actually need it to avoid + breaking compatibility when not needed + - old rpm will bail out "cleanly" (with an obscure error message) if + the 32bit size tags are missing but at least it doesn't crash... + +commit 5831f37b215be053096ee38b090bddba2e7cdad6 +Author: Panu Matilainen +Date: Thu Jun 26 16:28:17 2008 +0300 + + Teach rpmAddSignature() and rpmReadSignature() about 64bit tags + - use 64bit size if it exists, otherwise quietly fall back to 32bit one + - can't use tag extensions to convert there as legacy sigtags conflict + with things like RPMTAG_NAME + +commit 09ca0902dfacd6de00237235717af3d9162a76e2 +Author: Panu Matilainen +Date: Thu Jun 26 16:23:56 2008 +0300 + + RPMTAG_LONGSIGSIZE and RPMTAG_LONGARCHIVESIZE are signature tags + - move them from regular tag space to sigtag space, fortunately these + don't require special conversion + +commit e84165833f26c2cbfd32abb50439a3ab34be8767 +Author: Panu Matilainen +Date: Thu Jun 26 16:10:49 2008 +0300 + + Only insert 64bit filesizes on build if required + - older rpm's get pretty upset on encounter with 64bit integers, avoid + unnecessary breakage as very few packages actually need large file sizes + - Add per-filelist flag for large files, enabled from addFile() as we + check sizes. It's basically a no-op for now as we error out if any + single file exceeds cpio per file limit. + +commit a930e73ef733210df9be7e142ec81d206fbd9f70 +Author: Panu Matilainen +Date: Thu Jun 26 13:59:06 2008 +0300 + + Unbreak compressFilelist() + - well and truly broken by yours truly by a Monday morning commit + efe1665024e374a8f8704d229b1d306af232c396, blush... + - can't use headerIsSource() here, as build calls compressFilelist() + before RPMTAG_SOURCERPM is added to the header, revert to earlier hack + and check filename beginning with / or not + - dncmp() expects address of a string, not the string itself, this was + masked by the above bug + +commit ef34894567a3ecd82035fc3b82ca06a3773d9ac3 +Author: Panu Matilainen +Date: Thu Jun 26 11:38:28 2008 +0300 + + Add a bit of protection against oversized files + - max size of individual files in cpio new ascii format is well known, + check we don't try to stuff in larger than what fits and abort cleanly + - this should do as long as we only support new ascii format cpio payloads + +commit 6985cd23724b8cde7f7a73507d8130be18c270af +Author: Panu Matilainen +Date: Thu Jun 26 10:50:01 2008 +0300 + + Type corrections + - Fread() and Fwrite() return ssize_t, not int32_t + - sigtag is rpmSigTag, not int32_t + +commit ae177457c8d23584f45b5f36866ce4ed20509e1a +Author: Panu Matilainen +Date: Wed Jun 25 10:59:20 2008 +0300 + + Fix handling of "%posttrans -p /xxx" with no body (Pascal Rigaux) + +commit 1ba0513f7f68690339147a56de29883f24591952 +Author: Panu Matilainen +Date: Wed Jun 25 09:56:12 2008 +0300 + + Adjust autotest querytag expectations to match current tags + +commit c26161d0ab973e99f065fd3ee578461175ee1211 +Author: Panu Matilainen +Date: Wed Jun 25 09:53:21 2008 +0300 + + Adjust autotests for rpmi etc removal + +commit 997f5a24c5420676e8a3e29845902dca7f98a44e +Author: Panu Matilainen +Date: Wed Jun 25 09:33:50 2008 +0300 + + Force "rpm" popt context for everything but build + - we want the same set of aliases to be seen no matter what name we're + invoked with, except for build which has it's own set of aliases + - this has a nice little side-effect of permitting popt aliases to work + from source tree on non-static builds despite libtool calling executables + lt-something instead of their real names + +commit 7a02b41365399f665f0ff097f05583ae537ac6ee +Author: Panu Matilainen +Date: Wed Jun 25 09:20:27 2008 +0300 + + --buildpolicy is rpmbuild, not rpm, alias + +commit 52bea969c7404f646050844f8a5576d60032aaeb +Author: Panu Matilainen +Date: Wed Jun 25 09:19:13 2008 +0300 + + Kill the million duplicate aliases in rpmpopt + +commit cb17fb722c9576502378cd79e21517819db2cdc4 +Author: Panu Matilainen +Date: Wed Jun 25 09:18:51 2008 +0300 + + Eliminate rpmd, rpmi, rpmk, rpmq "helper binaries" + - it's all rolled into "rpm" itself, these are just clutter and complicate + things needlessly + - leave symlinks to rpmquery, rpmverify, rpmsign and rpmdb -> rpm to + preserve some compatibility (at least rpmquery is known to be used + in scripts) + +commit 600c98615426cf2e5a606e51b447250cd3be9c71 +Author: Panu Matilainen +Date: Tue Jun 24 16:07:05 2008 +0300 + + Update rpm manpage wrt build modes + - the build modes have been removed ages ago, just point to rpmbuild manual + +commit 30be238164bebe44b00202a7a2ee37bbd5b6bf75 +Author: Panu Matilainen +Date: Tue Jun 24 15:23:30 2008 +0300 + + Eliminate build-related aliases on "rpm" + - "rpm" for building packages hasn't worked in ~six years, time to clean + up the junk from rpmpopt + +commit 94df5d41dee6dc5fc73d2e9c02e7bf9153eb6a87 +Author: Panu Matilainen +Date: Tue Jun 24 11:11:38 2008 +0300 + + Eliminate already commented out build mode aliases for rpm + - these haven't been enabled in six years and not coming back... + +commit 70282af4b3b5d5911ffe1dabd04ee79c64045150 +Author: Panu Matilainen +Date: Tue Jun 24 11:09:00 2008 +0300 + + Eliminate rpmb aliases from rpmpopt + +commit 6f06fff34884e334cd5eab3b371481b4e1039876 +Author: Panu Matilainen +Date: Tue Jun 24 11:08:05 2008 +0300 + + Eliminate the pointless rpmb + rpmt symlinkery + - just build "rpmbuild" executable and install to bindir instead of + mucking with several different names + +commit aa9a791d808f504781d0b75255df3387383a1809 +Author: Panu Matilainen +Date: Tue Jun 24 10:08:37 2008 +0300 + + Force FD_CLOEXEC on all potentially open descriptors + - instead of just "100 should be large enough", use sysconf() to grab + number of max open files and do them all. If sysconf() fails, + use 1024 as "should be enough for everybody" + +commit f39d2432f74bdc328ceafa8abc6cac517e02c73b +Author: Panu Matilainen +Date: Mon Jun 23 16:57:51 2008 +0300 + + Remove artificial limit in dependency loop elimination attempts + - continue processing as long as progress can be made instead of artificial + hardcoded magic "try ten times" + +commit 9fb0258e04d70608982f3f65a881b053a4e19645 +Author: Panu Matilainen +Date: Mon Jun 23 15:02:10 2008 +0300 + + Avoid silly deprecation warning on headerFreeData() + +commit 6c7f2262f3b8a1399c6ed130ff0e388236507d2c +Author: Panu Matilainen +Date: Mon Jun 23 14:37:54 2008 +0300 + + Simplify requires and provides addition in rpmfcGenerateDepends() + - just feed (name, evr and flags) one by one into header instead of + constructing arrays of them + +commit f23f0a8d62aeeab6f41667c53f7bb12f1817cc83 +Author: Panu Matilainen +Date: Mon Jun 23 14:31:54 2008 +0300 + + Oops, provideflags were being inserted as requireflags + +commit 2ed85a4ff9cc25800f607cd0450b02fde97cf3b6 +Author: Panu Matilainen +Date: Mon Jun 23 08:46:51 2008 +0300 + + Add Malay translation from Sharuzzaman Ahmat Raslan + +commit 880a28f2ff45da7d7003db9c270d1ed173cb90f0 +Author: Panu Matilainen +Date: Thu Jun 19 16:08:00 2008 +0300 + + Dumb, dumb thinko/leftover from earlier prototype... + +commit 1c445fcd974eedd0e533487a40214b328b1eaadf +Author: Panu Matilainen +Date: Thu Jun 19 15:52:54 2008 +0300 + + Use type-specific headerPuts() for rpmcache + - ...to finish of undoing yesterdays damage, sigh ;) + +commit 0199599a0d2bd049b54b7977b27f182bd8a23663 +Author: Panu Matilainen +Date: Thu Jun 19 15:52:19 2008 +0300 + + Use type-specific headerPut() for the case where it makes sense in relocs + +commit 3782d652156dd3067c09f0441bc087d2b4b790ff +Author: Panu Matilainen +Date: Thu Jun 19 15:51:07 2008 +0300 + + Use type-specific headerPut() in rpmpsmStage() + +commit c7d0e4ada36a40e6dd77a80f7db570a22f603862 +Author: Panu Matilainen +Date: Thu Jun 19 15:50:32 2008 +0300 + + Use type-specific headerPut() for installtid stuff in rpmdbAdd() + +commit 17cbd0f9725c3e08524b7a29c89b4574c9862710 +Author: Panu Matilainen +Date: Thu Jun 19 15:49:09 2008 +0300 + + Use type-specific headerPut()'s for rpmtsImportPubkey() + +commit 6d7b5c0a7aa80ba2adf9892c941536acaaf78b85 +Author: Panu Matilainen +Date: Thu Jun 19 15:48:31 2008 +0300 + + Use type-specific headerPut()'s for legacy retrofitting stuff + +commit f754ad8aa640b7a72936a19dabca64bacdbb5e63 +Author: Panu Matilainen +Date: Thu Jun 19 15:47:04 2008 +0300 + + Use type-specific headerPut() where makes sense in build/parseScript + +commit e940b206b95f78063902518e7dd1151bd278b46f +Author: Panu Matilainen +Date: Thu Jun 19 15:46:34 2008 +0300 + + Use type-specific headerPut() where makes sense in build/rpmfc.c + +commit 6844c194ccd7ccebd48719600b5e32f14a620f0f +Author: Panu Matilainen +Date: Thu Jun 19 15:45:57 2008 +0300 + + use type-specific headerPut() on all of build/reqprov.c + +commit cd4c3c0cd26a2977fa4b62363b72fa3930457625 +Author: Panu Matilainen +Date: Thu Jun 19 15:45:37 2008 +0300 + + Use type-specific headerPut() on all of build/parseSpec.c + +commit e79b9743b12438de490879fe6d5cc674b3ba6118 +Author: Panu Matilainen +Date: Thu Jun 19 15:45:06 2008 +0300 + + Use type-specific headerPut() for all of build/parsePreamble.c + +commit e663f0bef2c6af9f773e8dccb7e3e1af43afc5c6 +Author: Panu Matilainen +Date: Thu Jun 19 15:44:29 2008 +0300 + + Use type-specific headerPut() for all of build/parseChangelog.c + +commit 683b2e5b72d36e38b9a09f9153427fe5b2d0616b +Author: Panu Matilainen +Date: Thu Jun 19 15:43:45 2008 +0300 + + Use type specific headerPut() for all of build/pack.c + +commit a317eaadc3f7b9b4ec373719e7d60fb8b98e2c21 +Author: Panu Matilainen +Date: Thu Jun 19 15:43:14 2008 +0300 + + Use type specific headerPut() for all of build/files.c + +commit 62d7b0c98d30c70613319e6af742827a67d9c732 +Author: Panu Matilainen +Date: Thu Jun 19 15:41:58 2008 +0300 + + Add type-safe headerPutFoo() methods for supported tag data types + - requiring all access through rpmtdFromFoo() just adds unnecessary + indirection and pain for little gain, the header is fairly intelligent + when it comes to inserting data + - this gives us various benefits over the old headerAddEntry() interface too: + + basic type checking done by compiler + + extra sanity checking (ie you can't add string data to integer tags, + don't permit adding more than one entry to non-array data etc) + + "do the right thing" approach - add / append as needed and supported + by various types + + headerPutString() can now be used on both single strings and string + arrays making the interface much nicer for the rather common case of + appending strings one by one to string array tags + +commit a10f770ccaed6e722a0065a59887d6fc133cc86a +Author: Panu Matilainen +Date: Wed Jun 18 16:14:36 2008 +0300 + + Dumb thinko breaking scriptlet interpreter + +commit 0d1cdd4a965cee9fac416341d3566c3d06a8b305 +Author: Panu Matilainen +Date: Wed Jun 18 15:39:59 2008 +0300 + + Group legacy interfaces at the end of header.h + - out of sight, out of mind ;) + - add deprecation warnings where missing + - move to header_legacy doxygen group to avoid littering main documentation + +commit 96470400712b6f8d68c906751f2d8df934c34bba +Author: Panu Matilainen +Date: Wed Jun 18 15:22:46 2008 +0300 + + Convert headerAddI18NString() to use headerPut() + +commit efe4e4c9461ef3a1b253a5bcb628882bc0b21ee3 +Author: Panu Matilainen +Date: Wed Jun 18 15:16:05 2008 +0300 + + Switch around headerAdd*Entry() family vs headerPut() + - make internal header add + append take rpmtd as argument, legacy + interfaces are just wrappers around them + - add deprecation markers + +commit b6577f0e6de7f7888823eeaa396c6d2bae369f20 +Author: Panu Matilainen +Date: Wed Jun 18 14:59:13 2008 +0300 + + Switch around headerMod() and headerModifyEntry() + - headerModifyEntry() is the legacy interface going away, make it + use headerMod() and deprecate it + +commit a8f23a461958479a773c482260899522b76efa81 +Author: Panu Matilainen +Date: Wed Jun 18 14:54:41 2008 +0300 + + Stuff legacy compat wrappers out of sight into header_internal.c + - probably need to carry the compat stuff around for a while but get + them out of the way... + - headerFreeTag() and headerFreeData() are just the same thing, with + headerFreeTag() supposedly being the "new" interface which never was + used, duh :) + +commit 9bbfae241a67ecb15889f7e100f6c5111486255b +Author: Panu Matilainen +Date: Wed Jun 18 14:35:56 2008 +0300 + + Start shredding legacy cruft out of header code + - headerGetRaw() can now be done with just a flag to headerGet() + +commit 335363733e79c80f3ce211bad7290f1b897e7dc5 +Author: Panu Matilainen +Date: Wed Jun 18 13:15:46 2008 +0300 + + Convert signature code to use headerPut() + - tags in signature header overlap with those in "regular" header, + can't use rpmtdFromFoo() as that would give totally bogus types and errors + - just add a wrapper around headerPut() that behaves like headerAddEntry() + +commit 9432e7a9bc2478edca78ba1ac3f855e2f2dda7db +Author: Panu Matilainen +Date: Wed Jun 18 13:13:22 2008 +0300 + + Convert parseScript() to headerPut() + - AFAIR the only place in rpm where the type of a tag varies like this, ugh + - any modern rpm can handle the type being either string or string array, + but preserving legacy behavior for now... + +commit 005c5663e3f9eac1c6af835dcec7d8074783be31 +Author: Panu Matilainen +Date: Wed Jun 18 12:57:36 2008 +0300 + + Convert rpmpsmStage() to use headerPut() + +commit ddd39615fd1bb0603be5626f1441dafc99c7055d +Author: Panu Matilainen +Date: Wed Jun 18 12:55:02 2008 +0300 + + Convert rpmdbAdd() to use headerPut() + +commit d6735b669ef412d6be9b5d129436f98a3a0f0c10 +Author: Panu Matilainen +Date: Wed Jun 18 12:52:28 2008 +0300 + + Convert rpmtsImportPubkey() to use headerPut() + +commit d68f236bba1c72fd667a7c128ad1cba98180b177 +Author: Panu Matilainen +Date: Wed Jun 18 12:37:42 2008 +0300 + + Convert RPM_BIN_TYPE uses in build to headerPut() + +commit 9b162540e17fbe09f8de7d9bed09295e8c2219e6 +Author: Panu Matilainen +Date: Wed Jun 18 12:36:20 2008 +0300 + + Add rpmtdFromUint8() + - handles CHAR, INT8 and BIN types + +commit 7e8142f3cf7b3818b2d9a3a86ae0cd62eb25f772 +Author: Panu Matilainen +Date: Wed Jun 18 11:32:59 2008 +0300 + + Convert legacy retrofits & friends to headerPut() + +commit feb037946435a82c80d9332bfbd2b3b530cd39e2 +Author: Panu Matilainen +Date: Wed Jun 18 11:16:04 2008 +0300 + + Lose the remaining hae and hme vectors from rpmfi + +commit 53edb2a11c9f96654218cbe9c395dcf1f866f478 +Author: Panu Matilainen +Date: Wed Jun 18 11:13:58 2008 +0300 + + Convert file relocation to use headerPut/Mod + +commit 312ab62fe10b05874b107084c26e9110dd13e84f +Author: Panu Matilainen +Date: Wed Jun 18 10:59:45 2008 +0300 + + Add headerMod() to headerPut() etc family + - just a dumb wrapper around old headerModifyEntry() for now + +commit 19415eaf046cb8f1a96f0d8bee5ae2433dc1b707 +Author: Panu Matilainen +Date: Wed Jun 18 10:15:37 2008 +0300 + + Convert rpmcache to headerGet+Put + +commit 513e86a7b552d1db9cea3772829d723228175008 +Author: Panu Matilainen +Date: Tue Jun 17 16:11:49 2008 +0300 + + Number of sources can't very well be negative... + - also happens to avoid compiler whining about differing signedness + +commit 61aa9083544315f76d049f36794cc0bf6e5eb9fa +Author: Panu Matilainen +Date: Tue Jun 17 16:07:55 2008 +0300 + + Shut up incompatible pointer warnings from rpmtdFromStringArray() + - it'd be far nicer to be able to append single strings to string arrays + through rpmtdFromString() but it'll require some interesting hackery + in header.c + - use temporary const char* pointer where necessary to convert to + const char ** compatible type before passing to rpmtdFromStringArray() + +commit 2f55856c85d02a81318065dbb1dd06ff92c9004c +Author: Panu Matilainen +Date: Tue Jun 17 16:04:12 2008 +0300 + + Make rpmtdFromStringArray() data argument const afterall + - produces somewhat less warnings as is, a bit surprisingly + +commit 05540d121b2555a79877fe013689ce0a6ecea258 +Author: Panu Matilainen +Date: Tue Jun 17 15:36:33 2008 +0300 + + Oops, RPMTAG_FILEMODES is INT16, not 32 type + +commit d6aded3128ae82bbea3c8701f3be4326c71767db +Author: Panu Matilainen +Date: Tue Jun 17 14:54:44 2008 +0300 + + Convert rest of writeRPM() to headerPut() + - can't use rpmtdFromFoo() on signature header tags so need to construct + them manually + +commit 15cc52e514deedb403cbe1d516b8ffa09c8edba0 +Author: Panu Matilainen +Date: Tue Jun 17 14:45:14 2008 +0300 + + Convert the final pieces of rpmfc to headerPut() + - more const-impedance here.. need to do something about it + +commit 36a187ec3308276b52ccf4a5858c0f5273bcef1e +Author: Panu Matilainen +Date: Tue Jun 17 14:37:55 2008 +0300 + + Convert the rest of genCpioListAndHeader() to headerPut() + - explicitly cast all platform dependent data like time_t, mode_t etc + to the type used in headers always instead of having everything doubled + +commit f4cdf53a7616f541d6f8e3523bb18b50d2063d5a +Author: Panu Matilainen +Date: Tue Jun 17 14:24:16 2008 +0300 + + Add rpmtdFrom() methods for 16 and 64 bit types + +commit 457a3110708e9d6c3e06441a5900b722c4c874a5 +Author: Panu Matilainen +Date: Tue Jun 17 13:30:08 2008 +0300 + + Convert the straightforward bits of build/files.c to headerPut() + +commit a48e97b5f00ca2ae366d3fa5af3656aed4a19b1f +Author: Panu Matilainen +Date: Tue Jun 17 12:57:59 2008 +0300 + + Convert most of parsePreamble to headerPut() + +commit f6a8d969de0a05f78bc32a4f27f5017c348a67ee +Author: Panu Matilainen +Date: Tue Jun 17 12:56:53 2008 +0300 + + Convert build reqprov to headerPut() + - also changes index type to uint32_t instead of signed + +commit 85f0bbe8abedbc8c2f316f5680055cf700ca4f25 +Author: Panu Matilainen +Date: Tue Jun 17 12:55:33 2008 +0300 + + Convert parseSpec to headerPut() + +commit a61a1785a66a908af1c4d91b428af9c7ddfced08 +Author: Panu Matilainen +Date: Tue Jun 17 12:55:01 2008 +0300 + + Convert parseChangelog to headerPut() + +commit 2b6f72a7ee51e6a38b845ade303897e4f9194a2b +Author: Panu Matilainen +Date: Tue Jun 17 12:10:01 2008 +0300 + + Convert most of build/pack.c to use rpmtdFromFoo() and headerPut() + - heavy on asserts() for now to catch out any problems + - sigtags can't use rpmtdFromFoo() as the tag numbers collide with the + regular tag table and would cause failures if we tried + +commit 61f096c11ee62c423c72957373a9b7d38557d5fe +Author: Panu Matilainen +Date: Tue Jun 17 12:07:19 2008 +0300 + + Add some new rpmtd creation methods + - rpmtdFromString(), rpmtdFromStringArray() and rpmtdFromUint32() permit + populating tag containers of compatible datatypes that can be used for + headerPut() with some extra type-safety and sanity checks on the types + +commit 8687797c1ce3d43181d1991e6413098b3dd95a17 +Author: Panu Matilainen +Date: Tue Jun 17 09:07:37 2008 +0300 + + Replace headerRemoveEntry() with headerDel() everywhere + - this is a no-brainer s/headerRemoveEntry/headerDel/g operation as the + interface didn't actually change at all + +commit b6c2fd31d8f6b28ace55d1656d19eed3cd6f70f0 +Author: Panu Matilainen +Date: Tue Jun 17 09:02:41 2008 +0300 + + Rename headerRemoveEntry() to headerDel(), add compat wrapper + - no differences here except headerDel is a nice short name (lifted from + rpm5.org) to go with the new headerGet() etc family + - deprecate headerRemoveEntry() + +commit fd3d65cd5bdccf20f98762d84fe65bbb1c72b8b8 +Author: Panu Matilainen +Date: Tue Jun 17 08:49:19 2008 +0300 + + Eliminate last headerFreeData() in rpmfi + +commit bb81679aa5296b18856f1672ae85b6c7ab627e97 +Author: Panu Matilainen +Date: Sat Jun 14 14:43:15 2008 +0300 + + Preserve headerNext() allocation behavior + - commit bca23d19af0a6d7371d18f6fd763e37e03f6e21a accidentally changed + it to MINMEM which breaks signature checking, lovely... + +commit 541cc0447af97f8193eb5d8e9f1c6a4c71b61ffc +Author: Panu Matilainen +Date: Sat Jun 14 11:31:15 2008 +0300 + + Lose the useless tag data type fields from rpmds + - we know names and evrs are string arrays, if they're not we're screwed + anyway, and flags need to be freed if header is not around + - there goes hfd() too... + +commit 92f6c2d3bd87d9dd67678ea61bca9a8158ed4ade +Author: Panu Matilainen +Date: Mon Jun 16 09:24:46 2008 +0300 + + Use PRIu64 for file size formatter in queries + +commit 3b75f9d589bd732dfac142266cbdd785a4bbefb4 +Author: Panu Matilainen +Date: Mon Jun 16 09:06:15 2008 +0300 + + Doxygen parameter name mismatch + +commit d8b28213ae4f9927e4f82e131aaad1dbcd5e7dd5 +Author: Panu Matilainen +Date: Fri Jun 13 16:55:12 2008 +0300 + + Deprecate headerGetEntry() and headerGetEntryMinMemory() + +commit fb618299bb0709941b2a1ee0ac23f8e50b492c7b +Author: Panu Matilainen +Date: Fri Jun 13 16:52:39 2008 +0300 + + Convert rpmtsSolve() to new headerGet() + +commit 7b8fc75dea12884d51e41e9298d575910b0d072c +Author: Panu Matilainen +Date: Fri Jun 13 16:44:35 2008 +0300 + + Kill off hge() and hfd() vectors in rpmfi_s + - hfd() with FORCEFREE or STRING_ARRAY is just regular free() + - hge() no longer needed... + +commit 30ebb0ba57056bd2a45aa36929c8c250afc35ed1 +Author: Panu Matilainen +Date: Fri Jun 13 16:38:10 2008 +0300 + + Lose the remaining hge() uses in rpmfi relocation + - ugly hackery for now, otoh it wasn't pretty to start with... + - always make a "sparse" dupe of directory names so we know how to free + it even if just some of the directories were relocated (this was broken + from the previous round of relocation alloca removal hackery) + - take advantage of RPMTD_PTR_ALLOCED to correctly free in all cases + +commit 2f00f421ee3f1b945d228f7ca5175597ebc2ee43 +Author: Panu Matilainen +Date: Fri Jun 13 14:17:08 2008 +0300 + + RPMTAG_FILEFLAGS is not used for anything in relocations + +commit 1091951365d28cabb8c7188738602975a6fdc7db +Author: Panu Matilainen +Date: Fri Jun 13 13:59:04 2008 +0300 + + Convert validRelocation parts of relocateFileList() to new headerGet() + - one piece at a time, this baby breaks easily ;) + - take advantage of iterating over td as possible.. + +commit 911b3151ae1819d18a19b8d032e81aac25249036 +Author: Panu Matilainen +Date: Fri Jun 13 13:52:32 2008 +0300 + + Unbreak relocations broken by 621e7518418a0e031d302e8681fe0bf81d0c4b72 + - stick scareFlags into rpmfi_s for now so they're available everywhere + - subtle games with how fi->dil is alloced on scareMem behavior, don't + blow up and don't leak memory either + - stuff scareFlags into rpmfi struct for now + +commit f32ad12ea8391fd892d696987157ba59a0028b8a +Author: Jindrich Novy +Date: Fri Jun 13 12:51:01 2008 +0200 + + Use 64bit sizes by default in rpmcache + +commit d6026decfb6b85ff04521c37dfcd7e9b1482cf0e +Author: Jindrich Novy +Date: Fri Jun 13 12:31:26 2008 +0200 + + Allow spaces in Source/Patch URLs and filenames + +commit c071f46c85c2a0ad93e6d7c272f593b1303efc2e +Author: Panu Matilainen +Date: Fri Jun 13 12:23:46 2008 +0300 + + Simplify providePackageNVR() + - convert providePackageNVR() to new headerGet() + - use rpmds to figure if we already have the provide instead of manually + doing it + +commit 973cff0efcd62856505ad123ac63bd693a1fd261 +Author: Panu Matilainen +Date: Fri Jun 13 11:42:46 2008 +0300 + + hfd with FORCEFREE is just _free() + +commit d23f3a67c73ff7789c4b6dea6f05f8b394abe3c6 +Author: Panu Matilainen +Date: Fri Jun 13 11:42:06 2008 +0300 + + Convert rpmpsmStage() to new headerGet() + - grabbing fi->fuser and fi->fgroup there seem completely unnecessary, + they're always populated from rpmfiNew() afaict... + - hfd() with FORCEFREE is just the same as _free()... + +commit fe87b4a5cf101919ad8d3aa16fb1561fe0b5e4d8 +Author: Panu Matilainen +Date: Fri Jun 13 11:27:13 2008 +0300 + + Convert runImmedTriggers() to use new headerGet() + +commit 1910af96d9695f3ad654d393ca03c2d2f237f268 +Author: Panu Matilainen +Date: Fri Jun 13 11:17:00 2008 +0300 + + Minimally convert handleOneTrigger() to use new headerGet() + +commit 615fff42f78201f673c064096d83691c663dff2f +Author: Panu Matilainen +Date: Fri Jun 13 10:27:46 2008 +0300 + + Convert legacyRetrofit() to new headerGet() + +commit 669af8b842a075878f5d654e89e98c338de8d212 +Author: Panu Matilainen +Date: Fri Jun 13 10:21:40 2008 +0300 + + Minimally convert handleInstInstalledFiles() to new headerGet() + - fi->hge style doesn't matter as otherStates is just local temp variable, + use MINMEM always to avoid unnecessary copy (DEFAULT wouldn't copy either + atm but..) + +commit a82694308c93e40461b10a8a9572349232c0a067 +Author: Panu Matilainen +Date: Fri Jun 13 10:16:24 2008 +0300 + + Minimally convert rpmdbFindFpList() to use new headerGet() + +commit 39b71970952e5190b76f1ba5f4e5967a38318b19 +Author: Panu Matilainen +Date: Fri Jun 13 10:09:20 2008 +0300 + + Minimally convert rpmdsNew() to use new headerGet() + - take advantage of HEADERGET_ALLOC to avoid manually duplicating Flags + - otherwise just dumb minimal conversion for now, rpmds could make use + of rpmtd iteration etc but leaving that for later... + +commit 7f8485a61cc7863d0047f0828f66a0579aa2b768 +Author: Panu Matilainen +Date: Thu Jun 12 17:37:33 2008 +0300 + + Convert a few hge()'s in relocation code to new headerGet() & friends + +commit 9879f8440d8bebd8890cac95602dc06c158e516d +Author: Panu Matilainen +Date: Thu Jun 12 17:09:35 2008 +0300 + + Make fssizes tag extension 64bit + - type changing doesn't matter much as this is just runtime generated data, + not from headers + - also gets rid of the remaining old hge() use in tagexts + +commit 7ddf1722a8a66c5197f68655e8859f88585ece86 +Author: Panu Matilainen +Date: Thu Jun 12 17:03:04 2008 +0300 + + Change rpmGetFilesystemUsage() size args to rpm_loff_t + +commit 7dc709b51751c065ff9df8098a13f04a7c6fea52 +Author: Panu Matilainen +Date: Thu Jun 12 16:41:31 2008 +0300 + + Make rpmfiFSize() return rpm_loff_t type, fixup callers + - Internally file sizes are still stored as 32bit, going to 64bit wouldn't + make much sense (would only waste memory for nothing) as long as we're + bound by cpio's 32bit per-file limit. Being "64bit ready" for filesizes + doesn't hurt anything though... + +commit ec378955f15325db5cfa826746ca9ff60c011bfb +Author: Panu Matilainen +Date: Thu Jun 12 15:31:27 2008 +0300 + + rpmfiNew() doesn't use old hge() anymore + +commit 4a680922c08653b0a9d56146404fb8b6f8fececb +Author: Panu Matilainen +Date: Thu Jun 12 15:29:40 2008 +0300 + + Use long archive size always in rpmfi + +commit 4c6f6d88b86839557066672ae9ab33f2a53f6ecc +Author: Panu Matilainen +Date: Thu Jun 12 15:05:43 2008 +0300 + + Add more 64bit size tags + tag extensions for converting from old values + +commit 3c5a8a7046cb6437f7a94742f5531a64165db684 +Author: Panu Matilainen +Date: Thu Jun 12 15:01:58 2008 +0300 + + Move 32 to 64 bit tag conversion to helper function + +commit 5f361fe6a184b4d3772e234043a4f7dd647e41c9 +Author: Panu Matilainen +Date: Thu Jun 12 14:16:28 2008 +0300 + + Use HEADERGET_ALLOC instead of manual copy in longfilesizesTag() + +commit 621e7518418a0e031d302e8681fe0bf81d0c4b72 +Author: Panu Matilainen +Date: Thu Jun 12 13:35:09 2008 +0300 + + Use HEADERGET_ALLOC instead of manually copying the data in rpmfiNew() + - headerGet() knows better how to create a copy of the data, let it... + +commit ebcdb5c57a1e1d570c53927901e45d5c8f8c178d +Author: Panu Matilainen +Date: Thu Jun 12 11:04:33 2008 +0300 + + Dumb thinko in header data allocation + +commit 7705737c4731f9b7164c91b150e2a94053bd07ff +Author: Jindrich Novy +Date: Wed Jun 11 16:13:18 2008 +0200 + + Use rpm_loff_t in printFileInfo() + - and use snprintf + +commit bca23d19af0a6d7371d18f6fd763e37e03f6e21a +Author: Panu Matilainen +Date: Wed Jun 11 12:26:52 2008 +0300 + + Add headerGet() flag to force allocation of returned data + - earlier there was no way for caller to know if returned data or parts + of it pointed to header memory (other than "know" how rpm behaves on + given types), this allows consistent behavior for callers (ie you + always "own" the returned data, not depending on header) when needed + - if HEADERGET_ALLOC flag is set, all returned data is malloced, instead + of possibly pointing to header memory depending on type + - HEADERGET_ALLOC overrides HEADERGET_MINMEM if both specified + - adjust various header internal callers to accept flags instead of just + minmem argument + - TODO: make sure tag extensions honor this too (all but fsnamesTag + currently allocate anyway) + +commit 1ae76f69df0eacf8f7fc7aab6b920010a5dde25f +Author: Panu Matilainen +Date: Wed Jun 11 10:31:14 2008 +0300 + + Make rpmps generic number field 64bit, rename getter method + - rename the parameters + internal use to more generic "number" + - rename ugly and dumb rpmProblemGetLong() to rpmProblemGetDiskNeed() + and return rpm_loff_t + - the number field is used for some other purposes too (whether dep problem + is for installed package), work around this for now by just defining + rpmProblemGetDiskNeed() result value as undefined on non-disk related + problems ;) + +commit 55d3bbd4b87ea7eec48cfa573bdac9001a8cc4da +Author: Panu Matilainen +Date: Wed Jun 11 09:25:02 2008 +0300 + + Enable rpmDoDigest() to pass large file sizes + - should probably be off_t instead of rpm_loff_t as this is lowlevel io + business and only verification code cares about the size reported by + it, otoh forcing 64bit always avoids having to deal with variable + off_t type on printing.. shrug + +commit 6c4772537d39f413cf62b1eefdcc151ae3a4b056 +Author: Panu Matilainen +Date: Tue Jun 10 18:11:32 2008 +0300 + + Add new tag extension to retrieve filesizes as 64bit types + - convert old 32bit sizes to 64bit if large sizes aren't present in header + - if large sizes are present, we malloc + copy the result to have consistent + behavior for rpmfi + +commit 9130995df6d2c6461042f3470499b933c10e0211 +Author: Panu Matilainen +Date: Tue Jun 10 16:00:33 2008 +0300 + + Minimally convert rpmfiBuildFNames() to new headerGet() + +commit b0885bd0f20362bd2a30f59659ce1b61735b074d +Author: Panu Matilainen +Date: Tue Jun 10 15:05:31 2008 +0300 + + Callers are now well known, require non-NULL arguments + +commit 8f12edb8f8ac6b3e30c9680562ebf9b4ed8a00d9 +Author: Jindrich Novy +Date: Tue Jun 10 15:33:24 2008 +0200 + + Add 64bit filesizes to header on build + +commit ac7f7121eba87fa2717e82d5b27ef335e3486517 +Author: Jindrich Novy +Date: Tue Jun 10 14:42:50 2008 +0200 + + rpmtsUpdateDSI now uses rpm_loff_t for fileSize + +commit 96d9edabb3c97d14438cb7c705caf0b04c72eac7 +Author: Jindrich Novy +Date: Tue Jun 10 14:41:10 2008 +0200 + + Use 64bit data types in diskspaceInfo_s + +commit cb4bce5e24e736c2b7e3dc28d2e475077d286ef3 +Author: Jindrich Novy +Date: Tue Jun 10 14:37:52 2008 +0200 + + Create RPMTAG_LONGFILESIZES to hold 64bit filesizes + +commit 6b3e0cc97bad88009ea84d7951cede53b7f20dc8 +Author: Panu Matilainen +Date: Tue Jun 10 14:36:12 2008 +0300 + + Eliminate rpmfiBuildFNames() from the API + - headerGet() with extensions enabled provides a nicer interface to + the data, no need to expose it + +commit dd46457ab5bedcaad7f83782dc6057d97372ec50 +Author: Panu Matilainen +Date: Tue Jun 10 14:31:43 2008 +0300 + + Eliminate rpmfiBuildFNames() use in psm + +commit a2df078607de4cb7fe34164f0f1806a84120eddf +Author: Panu Matilainen +Date: Tue Jun 10 14:29:30 2008 +0300 + + Add RPMTAG_ORIGFILENAMES tag extension + +commit d6641e87c5f28b3fbfa7566a583f6bc9f3523865 +Author: Panu Matilainen +Date: Tue Jun 10 14:24:57 2008 +0300 + + Eliminate rpmfiBuildFNames() use in python + +commit 00a9e06618a09d057fdf08d2608536da75e741db +Author: Panu Matilainen +Date: Tue Jun 10 13:40:51 2008 +0300 + + Use rpmFileHasSuffix() instead of doing it manually + +commit 54f40c0faf2fc203447dc1533a2e3a3456551567 +Author: Panu Matilainen +Date: Tue Jun 10 13:35:20 2008 +0300 + + Convert psm rpmInstallSourcePackage() to new headerGet() + +commit 779c05972673122d5a34f76e42932af3ab9f2a84 +Author: Panu Matilainen +Date: Tue Jun 10 13:08:11 2008 +0300 + + Convert psm markReplacedFiles() to new headerGet() interface + +commit b4b6e53183ffe928932a11bf30de0c186510e7b4 +Author: Panu Matilainen +Date: Tue Jun 10 10:04:52 2008 +0300 + + fwrite() returns size_t, use correct type + +commit af9518dce2d483efe3d9f7191f583662dae276e2 +Author: Panu Matilainen +Date: Tue Jun 10 10:02:52 2008 +0300 + + Use correct type for strlen() + +commit 4ffee98a652dbc4fcfeb04076111bedf043a7956 +Author: Panu Matilainen +Date: Tue Jun 10 09:59:09 2008 +0300 + + Silly signedness mismatch in pgpMpiSet() + +commit ae2cd002e679c9fffb7ac8d21380e91408532339 +Author: Panu Matilainen +Date: Tue Jun 10 09:54:51 2008 +0300 + + Use nlink_t for hardlink count types + - avoids some signed vs unsigned comparisons + +commit 46d4daee4560da3499b4be5ce71ad6994fb279ab +Author: Panu Matilainen +Date: Mon Jun 9 19:00:37 2008 +0300 + + Change tag extension returns codes to match headerGet() + +commit e08c4251a5e0fac04f86c0b03de5766d5c0cbf42 +Author: Panu Matilainen +Date: Mon Jun 9 15:42:24 2008 +0300 + + FD_t contentLength field is useless for us too... + +commit f2bdbe3d7df24e874bb9713354a5bad4a7b7c349 +Author: Panu Matilainen +Date: Mon Jun 9 15:38:28 2008 +0300 + + Lose bunch of unused fields from FD_t + - leftovers from times of internal http/dav etc transports.. + +commit 45ac934fdcf0efc14147051d37bab789b00b41da +Author: Panu Matilainen +Date: Mon Jun 9 15:33:27 2008 +0300 + + Use 64bit type for fdSet/GetCpioPos() in rpmio + +commit 243218b9cdfe43a878677d1abd530df0ee9986da +Author: Panu Matilainen +Date: Mon Jun 9 12:58:43 2008 +0300 + + Use 64bit type internally for printing size when reading sig header + +commit 522c6d074ef9f8ddb54feeaf40f28a846f2ec840 +Author: Panu Matilainen +Date: Mon Jun 9 12:48:34 2008 +0300 + + Use 64bit type for rpmte package size reporting + - RPMTAG_SIGSIZE limits to 32bit in practise currently + +commit c5119e79005fb6097c7bc420f045ba2fc1ba5bea +Author: Panu Matilainen +Date: Mon Jun 9 12:36:19 2008 +0300 + + Use 64bit type internally for total file size counting in build + - ensure we don't overflow RPMTAG_SIZE which is 32bit for now + +commit 161395648f72bd27d18fcf96bdea38d24c74b437 +Author: Panu Matilainen +Date: Mon Jun 9 12:29:07 2008 +0300 + + Use 64bit type internally for package archive size & offset + - cpio "new" ascii format limits individual files to UINT32_MAX, no such + limit on the entire archive though + - RPMSIGTAG_PAYLOADSIZE is 32bit type atm, assert that the archive size + fits to UINT32_MAX despite internal presentation being larger + - FD_t limits the real archive to rpm_off_t still + +commit a45f4a18038cd8f4f3f7f7a7a2ea54e7ad5fde93 +Author: Panu Matilainen +Date: Mon Jun 9 12:00:12 2008 +0300 + + Use rpm_loff_t for transaction callback amount+total arguments + - ought to be safe as data is only ever automatically converted to larger + type on notify calls + +commit 94552b96256c3620b4be407c501d0d926c081963 +Author: Panu Matilainen +Date: Mon Jun 9 09:31:00 2008 +0300 + + Handle NULL in str2hge() + - at least apt-rpm expects to pass empty version as NULL to rpmdsSingle(), + don't blow up... + +commit d4c04512a15733ebfababd42b67d957744e613b9 +Author: Panu Matilainen +Date: Sat Jun 7 13:17:52 2008 +0300 + + rpmtdCount() knows how to handle BIN types, use it.. + +commit 5e40a2eb7723e0f812f25dc2d8bcdab845ade391 +Author: Panu Matilainen +Date: Sat Jun 7 11:43:54 2008 +0300 + + Couple of more 64bit format types + +commit db964ebf78a0f6a5434631ff2715517934e243ca +Author: Panu Matilainen +Date: Sat Jun 7 11:32:02 2008 +0300 + + Remove unused variable + +commit 5c9c0c5353ba125a075441964738ac9fcabfdc84 +Author: Panu Matilainen +Date: Sat Jun 7 11:31:32 2008 +0300 + + Handle 64bit type in headerMergeLegacySigs() + - not that any legacy tags have 64bit type but shuts up gcc.. + +commit be712bc960fe8a75fc55e724b1e7d4980281eeb1 +Author: Panu Matilainen +Date: Sat Jun 7 11:29:16 2008 +0300 + + Use inttypes.h formats in stringFormat() + - add 64bit type while at it + +commit 3d8e8c5e53ca60817395164b1e08593da82cd2da +Author: Panu Matilainen +Date: Sat Jun 7 10:51:53 2008 +0300 + + Teach rpmdb about 64bit types + +commit 05db695ee6cec89b98db87e7b00ecbffb65eb634 +Author: Panu Matilainen +Date: Fri Jun 6 23:47:37 2008 +0300 + + Add access methods for 64bit integer types to rpmtd + +commit d1c9e039a4a245edf470d78dd465f55388cd916c +Author: Panu Matilainen +Date: Fri Jun 6 18:53:44 2008 +0300 + + Fix typo in sqlite backend preventing it from building + +commit 90c18fbeced891129828c15e67bb22c3b25b7726 +Author: Jindrich Novy +Date: Fri Jun 6 15:15:01 2008 +0200 + + Introduce 64bit rpm_loff_t + +commit 18def173765c3b820e99fd502e4d42853746823e +Author: Jindrich Novy +Date: Fri Jun 6 15:10:57 2008 +0200 + + Teach sqlite backend 64bit handling + +commit e2427595aac7f3d121324d67c474b27d4c549edd +Author: Jindrich Novy +Date: Fri Jun 6 15:04:25 2008 +0200 + + Handle RPM_INT64_TYPE in header functions + +commit 49dfc587d5b356551d646e40d575378a737c331f +Author: Jindrich Novy +Date: Fri Jun 6 15:03:19 2008 +0200 + + Introduce htonll() + +commit 56a8f9d90811cf6afc5a2cbbfff561d572f44307 +Author: Jindrich Novy +Date: Fri Jun 6 14:57:05 2008 +0200 + + Introduce RPM_INT64_TYPE + +commit 09d8cbafff94cde37accd9c43fcd8087457925cd +Author: Panu Matilainen +Date: Tue Jun 3 14:26:34 2008 +0300 + + Unexport file state machine internals + - fsmGetTs(), fsmGetFi(), fileStageString(), fileActionString(), + fsmMapPath(), fsmMapAttrs() and fsmStage() aren't needed outside fsm, + make 'em static to avoid leaking to symbol space + +commit 50f34a622edc4d737d671622401f7dad44a10d62 +Author: Panu Matilainen +Date: Tue Jun 3 13:51:57 2008 +0300 + + Rip doputenv() for good + +commit ed859877a5bcaff3ff3ac40ed39a48d1149471a9 +Author: Panu Matilainen +Date: Tue Jun 3 13:48:57 2008 +0300 + + Use setenv() for preparing scriptlet environ + - setenv() allocates memory as needed, no need to leak it + - setenv() is nicer interface for the purpose anyway + +commit a7a9595d9b1885fb57a27b76f15bb9ce09203949 +Author: Panu Matilainen +Date: Tue Jun 3 13:39:07 2008 +0300 + + Rip dosetenv() + - just use regular setenv() instead + - we already carry setenv() in misc/ for platforms that don't have it + +commit 6f010ec18d7f48b123b96bce77be43f84c8328e0 +Author: Panu Matilainen +Date: Tue Jun 3 12:11:05 2008 +0300 + + Unexport rpmsqCaught now that nothing needs it + +commit 0863a4420ba0569da1edb0dd8018ce7f62c25a28 +Author: Panu Matilainen +Date: Tue Jun 3 12:10:02 2008 +0300 + + Use rpmsqIsCaught() instead of directly accessing rpmsqCaught sigset + +commit cd040ba59b00ce709fa97016df9eaf733adc1ccf +Author: Panu Matilainen +Date: Tue Jun 3 12:04:57 2008 +0300 + + Add rpmsqIsCaught() for testing if a signal has been caught + +commit df206dbaaf59af1c4879ecd3739f2cf9a46e48af +Author: Panu Matilainen +Date: Tue Jun 3 11:44:20 2008 +0300 + + Unexpose signal queue and direct manipulation functions + - nothing outside rpmsq needs to fiddle with the queue directly + +commit fe5ff47868f2b6349bc14fa5bb5484d54110e6a3 +Author: Panu Matilainen +Date: Tue Jun 3 09:09:00 2008 +0300 + + Don't leak memory on python fi.Digest() calls + +commit d6380f029cfa6b39eb036fe1818737296737f6fd +Author: Panu Matilainen +Date: Mon Jun 2 16:10:19 2008 +0300 + + Change rpmTagGetNames() interface to more like that of headerGet() + - instead of returning a newly allocated rpmtd, take container to use + as argument + - return number of tags found, 0 on error (pretty arbitrary, just to + return something...) + +commit 6962b29bd9e8e67134aa43a163dab29bb7650426 +Author: Panu Matilainen +Date: Mon Jun 2 13:05:46 2008 +0300 + + Remove bogus comment on rpmDoDigest() ignoring algorithm + +commit 4dee28ba4c01f105ec3c55ea5a4d3540357b0b42 +Author: Panu Matilainen +Date: Mon Jun 2 13:02:54 2008 +0300 + + Permit non-md5 digests on --fileid queries + - the used algorithm is not known at this point so we can only do some + "seems to be in the ballbark" checks on the digest + - dynamically allocate memory for binary conversion as needed + +commit 26dbd57da584e422649184f751ebbf850f01e64b +Author: Panu Matilainen +Date: Mon Jun 2 12:20:22 2008 +0300 + + Check that digest type is actually supported before enabling it + - we don't necessarily support all types listed in pgpHashAlgo_e, it + depends on what NSS happens to support + +commit a8d8d5a4f4b77316292b8a2276bb74886945b6c1 +Author: Panu Matilainen +Date: Mon Jun 2 12:18:23 2008 +0300 + + Enable build-time configuration of non-MD5 file checksum digest algorithms + - if not specified (or 0), quietly assume MD5 + - otherwise check for supported digest type, complain and fall back to + md5 on invalid + - if non-md5 algorithm is used, add rpmlib() feature dependency to package + +commit 2cbe2c3f5a31262fe4ccfb43234392ff95712e59 +Author: Panu Matilainen +Date: Mon Jun 2 11:48:22 2008 +0300 + + Document rpmDigestLength() error behavior + +commit acab1c3999a4205ed43344c89c11818d9ba5093e +Author: Panu Matilainen +Date: Mon Jun 2 10:53:38 2008 +0300 + + Eliminate ugly static conversion buffer on rpmdbAdd/Remove + - dynamically allocate on heap when hex to binary conversion is done, + add new parameter to td2key() to communicate this back to caller + - adjust rpmdbAdd+Remove to free key data if signalled by td2key() + +commit b8dea7798888cf79ef2a5f5558f974482e5f740d +Author: Panu Matilainen +Date: Fri May 30 14:45:13 2008 +0300 + + Make rpmfiNew() use header specified file digest algo if present + - if not present or unknown algorithm specified, fall back to md5 + +commit a98970a41be2be86bf4265450072daa03ce48eef +Author: Panu Matilainen +Date: Fri May 30 14:14:17 2008 +0300 + + Use RPMTAG_FILEDIGESTS instead of MD5S internally + - no functional changes + +commit f788ab42eb141a7dc3cb289fad0e6dcfa2c95434 +Author: Panu Matilainen +Date: Fri May 30 13:57:47 2008 +0300 + + Bring back RPMTAG_FILEDIGESTS now that we're a bit more ready for it + - this reverts commit 6db2a8ec03c057850a0349537c705556068b9d32. + +commit 05be2a2fdb44558d2b6bc1b785128c1decae2aae +Author: Panu Matilainen +Date: Fri May 30 13:16:23 2008 +0300 + + We don't want per-file digest algorithms, just per package... + - rename RPMTAG_FILEDIGESTALGOS to RPMTAG_FILEDIGESTALGO + - change type from integer array to single integer value + +commit b9c69d1bab3c5b932664a7d071aaf11ef1d48483 +Author: Panu Matilainen +Date: Fri May 30 12:28:29 2008 +0300 + + rpmfiFDigestHex() instead of manual hex conversion + - showQueryPackage() and python rpmfi_Digest() at least.. + +commit 29bdb49f16361548d53de75b827a2c926d4d292a +Author: Panu Matilainen +Date: Fri May 30 12:21:48 2008 +0300 + + Add rpmfiFDigestHex() for converting the binary digest to hex + - conversion (back to) hex presentation is done manually in several places, + might as well have a function to do it... + +commit db573c81ed17f6852221fab05799382d4fa6cb89 +Author: Panu Matilainen +Date: Fri May 30 12:11:16 2008 +0300 + + Mark rpmfiMD5() deprecated + +commit e1724c3d4ac040cd3bb6124df94e764338557475 +Author: Panu Matilainen +Date: Fri May 30 12:06:40 2008 +0300 + + On a second thought, rename rpmfiDigest() to rpmfiFDigest() for consistency + - it operates on current file of the set, not on the entire set so while + changing API, name it similarly to other things that operate on current file + +commit fad3c10b90cc547f4149dd5db70874a2ea1ea992 +Author: Panu Matilainen +Date: Fri May 30 12:02:21 2008 +0300 + + Add fi.Digest() method to python bindings + - use same code for creating the digest object on iteration and method call + - fi.MD5() left around as alias for fi.Digest(), dunno if that's the best + thing to do but it's just a python string so returned size isn't that + critical.. + +commit 55d5c497363d3b8892979c16259ca6d54a6bde01 +Author: Panu Matilainen +Date: Fri May 30 09:22:21 2008 +0300 + + Convert showQueryPackage() to use rpmfiDigest() + +commit 7b696eb1a92769d807aa68c6fbe56535b427d595 +Author: Panu Matilainen +Date: Thu May 29 20:41:21 2008 +0300 + + Make rpmVerifyFile() honor rpmfi digest algorithm + +commit a1e49ce26be58043c913d69547afa3632386e7a0 +Author: Panu Matilainen +Date: Thu May 29 16:39:11 2008 +0300 + + Use new style headerGet() + rpmtd iteration for rpmfi digest population + +commit ae5667cf06d882e2760b924585a8900dcdfcfe19 +Author: Panu Matilainen +Date: Thu May 29 16:26:21 2008 +0300 + + Lose unused fdigests array from rpmfi struct + - only used in rpmfiNew() where it's converted to binary from the header + hex presentation and free'd immediately, a local variable will do just as + well + - some useless references in fsm and psm, kill'em too + +commit ea134adf81d22b26807d2c71895b0c23a7804d33 +Author: Panu Matilainen +Date: Thu May 29 15:48:40 2008 +0300 + + Make handleOverlappedFiles() honor rpmfi digest algorithm + +commit 4aa7ab642237180fb5ab7cf0547425ae1c311d3a +Author: Panu Matilainen +Date: Thu May 29 15:33:44 2008 +0300 + + Teach fsm internals to honor rpmfi digest type + +commit b851f93fc630ea5f16fada8e0ffce9ae8f1515df +Author: Panu Matilainen +Date: Thu May 29 15:26:12 2008 +0300 + + Make rpmfiDecideFate() honor rpmfi digest algorithms + - this gets into trouble if digest algorithm differs between packages, + can't be helped (same is true of rpmfiCompare() too) + +commit 5046e63f279b4be78279abcc327606b894dcb8c9 +Author: Panu Matilainen +Date: Thu May 29 15:20:05 2008 +0300 + + Make rpmfiConfigConflict() honor fi digest algorithm + +commit db4d3ea25558a26f560615d1df3d12d5286e036d +Author: Panu Matilainen +Date: Thu May 29 15:16:45 2008 +0300 + + Make rpmfiCompare() use rpmfiDigest() instead of rpmfiMD5() + +commit 4c4c6d0423c182189fe65177554ad9179c786200 +Author: Panu Matilainen +Date: Thu May 29 15:09:58 2008 +0300 + + Make rpmfi initialization honor used digest length + +commit 95e65d98ead5c354a0d257b9112a5cb14c88ebb4 +Author: Panu Matilainen +Date: Thu May 29 15:04:46 2008 +0300 + + More preliminaries for non-md5 file checksums + - add rpmfiDigest() method (similar to one in rpm5.org) for retrieving + file digest, algorithm and digest size + - make rpmfiMD5() just a special case of rpmfiDigest() + +commit 479b74bebe1caf2c785d4e9ac5a5974904c05f3a +Author: Panu Matilainen +Date: Thu May 29 12:29:23 2008 +0300 + + Rename rpmfi internals to talk about digest rather than md5 + - no functional changes + +commit f771b641d33f9388c952d3fc7ad4daba9d789543 +Author: Panu Matilainen +Date: Thu May 29 11:48:00 2008 +0300 + + Rename rpmfi and fsm checksum md5-sum fields to refer to digest + - no functional changes + - groundwork for supporting other than md5 checksums + +commit beb573c2a02c20d593577c7b358d722ed1c021c4 +Author: Panu Matilainen +Date: Mon Jun 2 09:48:41 2008 +0300 + + Unbreak handling of packages without epoch + - rpmtdToString() returned NULL on empty data, rpmtdFormat() returns + (unknown type) which isn't exactly appropriate value for epoch... + +commit 27855634e99f66eef2fbe4ca8837a00b46964cc2 +Author: Panu Matilainen +Date: Sat May 31 13:28:05 2008 +0300 + + More generic iterators replaced with safer string iterators + - additionally ensure rasprintf() will never get passed NULL where string + is expected in doScriptExec() + +commit c275732c75e23501fb66fa30ee025c2a1a50a736 +Author: Panu Matilainen +Date: Sat May 31 13:20:21 2008 +0300 + + Use safer per-datatype iterator instead of generic one + +commit 4bf224c0c99ba20440444660f9767190c62176d7 +Author: Panu Matilainen +Date: Sat May 31 13:18:19 2008 +0300 + + Replace couple of generic td iterators with safer string iteration + +commit 784fe494b772bcb54b23fdc6d017f301c606d0fd +Author: Jindrich Novy +Date: Thu May 29 09:48:16 2008 +0200 + + Make Group: tag not mandatory in spec + +commit 903c5d9fec67bc15695807fb507912206e039d40 +Author: Panu Matilainen +Date: Wed May 28 09:53:30 2008 +0300 + + Move key size fixups from rpmdbAdd & Remove to td2key() + +commit c96d78d9727b1f5c8c473ab83d0d7d8d3a162027 +Author: Panu Matilainen +Date: Wed May 28 09:42:31 2008 +0300 + + Don't bother with rpmtdInit(), headerGet() resets index anyway + +commit 827a800687140df56e446b4752ac9c7bd5613d0e +Author: Panu Matilainen +Date: Wed May 28 09:41:34 2008 +0300 + + Eliminate ill-indented block obfuscating the code + +commit 63f24f2307426106a0bccde91c1b8cfa8bc5da36 +Author: Panu Matilainen +Date: Wed May 28 09:35:13 2008 +0300 + + Unify rpmdbAdd() and rpmdbRemove() debug logging + - move the debugging out of the loop, we only print once for a given tag + anyway + - dumb helper function for prepping the actual output + +commit 2a1c813d495c5b05576f2feff6679aed20e587d5 +Author: Panu Matilainen +Date: Wed May 28 09:04:31 2008 +0300 + + Unify rpmdbAdd() and rpmdbRemove() tag data to key "conversion" + - the tag container contains everything needed for converting + - ugly static buffer for holding data from binary conversions needed, + figure a better way... + +commit 0f123cbfd951b6bca0bf5da104ae45e9a3746f83 +Author: Panu Matilainen +Date: Wed May 28 08:20:19 2008 +0300 + + dbi->dbi_rpmtag had better be the same as rpmtag here... + +commit 1f32f4aa7773e247f55cb05e9b86f4d3e5009d02 +Author: Panu Matilainen +Date: Wed May 28 07:52:19 2008 +0300 + + Convert rpmdbAdd() to new headerGet() + friends + +commit e4f021461d22880794c69e2974173ad03f640d5e +Author: Panu Matilainen +Date: Tue May 27 21:49:02 2008 +0300 + + Remove RPMTAG_BASENAMES special casing from rpmdbAdd() + - no longer needed as we don't support uncompressed filelists in the db + anyway (commit 30bb2ba4c8e481dd1c18e6ce8cd6c563fb42e23b) + +commit 27557a00d57974a17b8af933ce8c6f1ebfeb76b5 +Author: Panu Matilainen +Date: Tue May 27 21:33:28 2008 +0300 + + Eliminate ill-indented block obfuscating the code + +commit f55661ff4d89ab46c1bfb332a3c8f29b548a0688 +Author: Panu Matilainen +Date: Tue May 27 21:27:20 2008 +0300 + + Convert rpmdbRemoev() to take advantage of new interfaces + - use headerGet() and rpmtd iterator on the result + - eliminates breaking out of loop kludgery + - allows all filemd5s fiddling to be done in one spot + +commit b10e0cc5ee430c77738f07509b1372c1c146cd2f +Author: Panu Matilainen +Date: Tue May 27 20:16:17 2008 +0300 + + Turn silly one-case switches into if's + +commit 432eba406defa8cc0ecec85750450a9d891d4555 +Author: Panu Matilainen +Date: Tue May 27 14:26:54 2008 +0300 + + Minimally convert rpmdbFindbyFile() to new headerGet() + +commit 0520845553cf949a384cfa05c84a8bd0c9c47da6 +Author: Jindrich Novy +Date: Mon May 26 16:14:25 2008 +0200 + + Remove unused pointer + +commit cbf71aaf9d8abee453dacd28a325d73d2acae7f1 +Author: Jindrich Novy +Date: Mon May 26 16:09:46 2008 +0200 + + Remove legacy RPMSENSE_SERIAL. + +commit f3703cbaf0e58c0c6eb567465284efbf1df6fe9a +Author: Panu Matilainen +Date: Mon May 26 17:23:36 2008 +0300 + + Similar payload compressor headerGet() conversion for rpmpsmStage() + +commit d7b6c49df211eb775265c79922d608fb285c088f +Author: Panu Matilainen +Date: Mon May 26 17:19:07 2008 +0300 + + Convert rpm2cpio to new headerGet() + +commit a9d7285cb0c984e42e0358a3e0d305ecb7d22333 +Author: Panu Matilainen +Date: Mon May 26 17:07:00 2008 +0300 + + Oops, don't free data we're supposed to pass around... + +commit af8b41c64af39ce07d85fcd92fa78d566747d815 +Author: Panu Matilainen +Date: Mon May 26 16:24:07 2008 +0300 + + Use rpmds methods to check for duplicates in addReqProv() + - simplifies things quite a bit... + +commit 5267010b65524d697a93042b21cff33416c35417 +Author: Panu Matilainen +Date: Mon May 26 15:28:03 2008 +0300 + + Convert addPackageProvides() to new headerGet() + +commit c4082255fd1db46fb720dbe48f57413784718e56 +Author: Panu Matilainen +Date: Mon May 26 15:27:33 2008 +0300 + + Leftover debug junk removal + +commit 1814782eef6bc94300cb351111e08872442f1b49 +Author: Panu Matilainen +Date: Mon May 26 15:25:11 2008 +0300 + + Convert writeRPM() to use new headerGet() + +commit 1315d9f498a38916a128ef95d3bbd7557fc1ebc3 +Author: Panu Matilainen +Date: Mon May 26 15:16:39 2008 +0300 + + Convert processPackageFiles() to new headerGet() interface + +commit 0537efeb77531d2db84deee1c0c872617f00caab +Author: Panu Matilainen +Date: Mon May 26 14:45:00 2008 +0300 + + Convert addFileToTag() to new headerGet() + +commit 5c2acdcdfb756192feeb0f98cc3772484af7ddfa +Author: Panu Matilainen +Date: Mon May 26 14:31:54 2008 +0300 + + Convert timeCheck() to new headerGet() & resurrect functionality + - it's been broken since forever as it used RPMTAG_OLDFILENAMES but by the + time it got called, the filenames had already been compressed so it didn't + find anything to check + - largely useless but easy to fix, shrug.. + +commit 059de6fa03f8c2113ce60d6857a5bf0746c43e0c +Author: Panu Matilainen +Date: Mon May 26 13:17:07 2008 +0300 + + Convert rpmInstall() to new headerGet() + +commit 3a32216d0299c6aa771ae849749c3f590db82a0d +Author: Panu Matilainen +Date: Mon May 26 13:14:53 2008 +0300 + + Convert rpmVersionComprare() to new headerGet() + +commit 77c25969a97cc3fc31e7c8bdbc27a99481ae828a +Author: Panu Matilainen +Date: Mon May 26 12:40:43 2008 +0300 + + Convert triggertypeTag() to new headerGet() + +commit efe1665024e374a8f8704d229b1d306af232c396 +Author: Panu Matilainen +Date: Mon May 26 11:42:57 2008 +0300 + + Convert compressFilelist() to new headerGet() + +commit b5efc4ce63f3c166d551a8710ac1c6696f5adf49 +Author: Panu Matilainen +Date: Mon May 26 11:13:30 2008 +0300 + + Convert expandFilelist() to new interfaces + - use headerGet() with extensions enabled instead of directly calling + rpmfiBuildFNames() and flip the tag to OLDFILENAMES + +commit c9f4cb186e2bfd66154e358fbff2abccb6e654dc +Author: Panu Matilainen +Date: Mon May 26 11:01:25 2008 +0300 + + Convert headerGetNEVRA() and headerNEVRA() to new headerGet() + +commit 965f806bcee5ce615033d41a35ea8a29f3b7be71 +Author: Panu Matilainen +Date: Mon May 26 11:00:06 2008 +0300 + + Treat epoch as unsigned integer + +commit 94d3103d7bd299f2dee31e3002cfb7c0ca030389 +Author: Panu Matilainen +Date: Mon May 26 10:29:30 2008 +0300 + + Kick out fpLookupHeader(), it's been unused since 1999... + +commit ec3ab45ad2b867d27af5e5fc5e13a955933675e8 +Author: Panu Matilainen +Date: Mon May 26 09:32:57 2008 +0300 + + Deprecate headerNextIterator() + +commit bc84f12def0fba3ba4e7d3963a1de16a32c3b6da +Author: Panu Matilainen +Date: Mon May 26 09:27:02 2008 +0300 + + Convert hsaNext() to new header iterator interface + +commit 775f4217560ac2d136b5c53b6c691771af058244 +Author: Panu Matilainen +Date: Mon May 26 09:22:17 2008 +0300 + + Convert python rpmMergeHeaders to new interfaces + +commit 276994ca46697f5660ff92a3b4329b2bc3c83eb6 +Author: Panu Matilainen +Date: Mon May 26 09:15:54 2008 +0300 + + Convert python hdrKeyList() to new header iterator interface + +commit 1071f0150253b38d1406b8a85a4f06d77de4ec5b +Author: Panu Matilainen +Date: Mon May 26 09:04:28 2008 +0300 + + Minimally convert rpmVerifySignatures() to new interfaces + +commit 5f061ca214578f41dc93aa6c75a78cb4006f7e33 +Author: Panu Matilainen +Date: Fri May 23 16:59:04 2008 +0300 + + Unbreak DSA signature trailer handling + - RFC 4880 states the following: + V4 signatures also hash in a final trailer of six octets: the + version of the Signature packet, i.e., 0x04; 0xFF; and a four-octet, + big-endian number that is the length of the hashed data from the + Signature packet (note that this number does not include these final + six octets). + ... but we were using size_t, whose size is platform dependent, oops :) + +commit 071692bb84ca70667f1b3d756145087baac7245c +Author: Panu Matilainen +Date: Fri May 23 13:47:54 2008 +0300 + + Convert rpmResign() to new header iterator/get interfaces + +commit 7c0cea411a1f8889c58b1a0ed59b3a9984c1fbfe +Author: Panu Matilainen +Date: Fri May 23 13:46:21 2008 +0300 + + Don't crash on package without RPMTAG_OS + - damn pubkey "packages" + +commit f00a37f33877c9cf59f1b0a90f3851eb4ffdd1e7 +Author: Panu Matilainen +Date: Fri May 23 13:11:13 2008 +0300 + + Convert readFile() to new headerGet()... + +commit 1e4e1a4bee41dee73b72ff93c2b7e9a5513bd030 +Author: Panu Matilainen +Date: Fri May 23 13:01:47 2008 +0300 + + Convert getSignid() to new headerGet() + +commit e31d9e9e9449a31d96e98a8eb39304710e7c649e +Author: Panu Matilainen +Date: Fri May 23 12:49:04 2008 +0300 + + Convert the rest of rpmReadPackageFile() to new headerGet() + +commit 2110a17195a51fdb95212d603a8fc47d63c47041 +Author: Panu Matilainen +Date: Fri May 23 12:37:00 2008 +0300 + + Start converting rpmReadPackageFile() to new headerGet() + +commit a4ea9a0e83ce62f00e61015f312c219fee36ca7a +Author: Panu Matilainen +Date: Fri May 23 12:25:51 2008 +0300 + + Convert headerCheckPayloadFormat() to new headerGet() interface + - otoh the function is just dumb and should die but... + +commit 16c23df21b4879665d1733ed13a9a4e9344369c4 +Author: Panu Matilainen +Date: Fri May 23 12:19:16 2008 +0300 + + Convert rpmReadSignature() to new headerGet() interface + +commit 3eee3e56eca3058abe88e2e213d37a889af38db5 +Author: Panu Matilainen +Date: Fri May 23 12:10:14 2008 +0300 + + Convert makeHDRSignature() to new headerGet() interface + +commit 3a9ff8fc41dcf3fc5b4ca3eff42d389ec35c1089 +Author: Panu Matilainen +Date: Fri May 23 11:54:08 2008 +0300 + + Convert rpmtsFindPubkey() to new headerGet() interface + +commit 9c209c8a2de5adb741f90c37a59c99d3578f4bdf +Author: Panu Matilainen +Date: Fri May 23 11:49:56 2008 +0300 + + Add rpmtdGetIndex() + rpmtdSetIndex() methods + +commit 9979407567cb42df9873f83a4dca779073759296 +Author: Panu Matilainen +Date: Fri May 23 10:31:45 2008 +0300 + + Add rpmtdSetTag() method for setting (or changing) container tag + type + - permit change on non-empty container to compatible type to allow things like + headerGet(h, RPMTAG_FILENAMES, td, HEADERGET_EXT); + rpmtdSetTag(td, RPMTAG_OLDFILENAMES); + headerPut(h, td, HEADERPUT_DEFAULT); + - empty container can be set to any valid type + +commit 3249b289e8d9f6bcebf38e451e25b4540da3c63e +Author: Jindrich Novy +Date: Fri May 23 07:49:43 2008 +0200 + + fix handling of omf dirs (rhbz#448033), thanks to Matthias Clasen + +commit c227b9ebf9c942aea232d209dbb4d276227c7341 +Author: Panu Matilainen +Date: Thu May 22 11:25:15 2008 +0300 + + Remove some leftover doxygen @todo markers + +commit c08dd6b7c0be0062a262d575c0643cab7dafcf5b +Author: Panu Matilainen +Date: Thu May 22 10:14:40 2008 +0300 + + Fix printing of patch numbers, doh :) + +commit 973ffa42db3cc68ec1a5cd4d8e64b8f0e95e68cc +Author: Panu Matilainen +Date: Thu May 22 10:03:04 2008 +0300 + + Include tagexts in potfiles + - nothing to translate there at the moment but.. + +commit f81f3f0fc5a95d8fcd6e7b1ca2a05f81a2ae4065 +Author: Panu Matilainen +Date: Thu May 22 10:01:23 2008 +0300 + + Add tag data container api to librpm + hacking docs + +commit c4614940c04c6ce88dd4d5a3959ec1175a91fe0e +Author: Panu Matilainen +Date: Thu May 22 09:18:48 2008 +0300 + + Oops, rpmTagGetValue() expects tagname without RPMTAG_ prefix + +commit d1ad87a7f868eec726c8fb2214090e783e171380 +Author: Panu Matilainen +Date: Wed May 21 17:59:05 2008 +0300 + + Eliminate rpmTagTable internals from API/ABI completely + - everything is now accessible through other methods, no need to expose + our internals + - tagtbl.c is now included from tagname.c instead and not separately built + +commit 058e94ec41130fa675aabd97088d9f286148286d +Author: Panu Matilainen +Date: Wed May 21 17:26:52 2008 +0300 + + Ditch the tagtable argument of (internal) headerDump() function + - might as well ditch the function too I guess... + +commit c06d688a3929742691eae2eb49643b2bd1d013c1 +Author: Panu Matilainen +Date: Wed May 21 17:13:51 2008 +0300 + + Don't muck with rpmTagTable internals in python initialization + +commit 2525d192304246d366e08974ccfabb6bfdfc5ff4 +Author: Panu Matilainen +Date: Wed May 21 17:03:15 2008 +0300 + + Dom't muck with rpmTagTable internals in rpmDisplayQueryTags() + +commit 82a7df65b5f173693a9be140704e75cc94a77b25 +Author: Panu Matilainen +Date: Wed May 21 16:34:27 2008 +0300 + + Remove double doxygen documentation + +commit c62b69b4fa71416510aad06314eb29cf811abf02 +Author: Panu Matilainen +Date: Wed May 21 16:32:37 2008 +0300 + + Add rpmTagGetNames() public function for retrieving known tag names + - use rpmtd as container to avoid inventing yet more datastructures and + iterators + +commit b6d8ac89b8018e8942fb63a8e6c73f9e3f817ef0 +Author: Panu Matilainen +Date: Wed May 21 16:05:29 2008 +0300 + + Include stdlib.h for free() + +commit a63c97eb123b54786c7b964906f7b034985ef100 +Author: Panu Matilainen +Date: Wed May 21 16:02:10 2008 +0300 + + Slight tweak to rpmvercmp() docs as suggested by Pixel + +commit d2ef49038a12adb33329c5784b76d6b20e2e3ce0 +Author: Panu Matilainen +Date: Wed May 21 15:59:39 2008 +0300 + + Include rpmtypes.h first instead of rpmtag.h everywhere + +commit 3b59f236b333c171b8497363309daffea165878c +Author: Panu Matilainen +Date: Wed May 21 14:51:25 2008 +0300 + + Convert headerGetColor() to use per-datatype iterator + +commit 35c0252857822faac53b7df9c9632d21bed926d5 +Author: Panu Matilainen +Date: Wed May 21 14:49:12 2008 +0300 + + Add per-datatype iterators to rpmtd + - just uint32 and string iterators for now, those are the most common ones + - allows somewhat more convenient code constructs when type is known, + eg no need to separately check for non-null inside loops + +commit 3d8656f040d2c780c88d0cd63594898f0605a6fa +Author: Panu Matilainen +Date: Wed May 21 13:37:32 2008 +0300 + + Convert rpmfiBuildFDeps() into fooTag() style interface + - fileprovideTag() and filerequireTag() are just thin wrappers around + filedepTag() + - simplify things a good bit by not bothering to create a single allocation + blob for the return + +commit 0021f8a18fe941aaca56aeb0efa01f387ab9a42d +Author: Panu Matilainen +Date: Wed May 21 12:45:34 2008 +0300 + + Lose rpmfiBuildFClasses() completely + - only fileclassTag() needs it, move it inline there + - simplify a lot: as we now can deallocate regular string arrays too, + don't bother creating a single allocation blob for the classes + +commit 1c80801ab60e4f67b7b201dd983ed33d4297db38 +Author: Panu Matilainen +Date: Wed May 21 12:41:31 2008 +0300 + + Misplaced assert + - we only care about non-NULL data if we're supposed to free the contents + +commit 82b89c3b0c78b0df871879d6c9bfe4af1b5e3b9a +Author: Panu Matilainen +Date: Wed May 21 11:50:27 2008 +0300 + + Eliminate rpmfiBuildFClasses() and rpmfiBuildFDepts() from the API+ABI + - both are only needed by tag extensions, move them there + - headerGet() with extensions enabled provides a nicer API for accessing + the data anyway + +commit 7d38c6e2d80492ba32814e4ad1175247fab3d931 +Author: Panu Matilainen +Date: Wed May 21 11:45:46 2008 +0300 + + Split tag extensions out of formats.c + - they have practically nothing in common now.. + +commit a668b84c95d04dc0c6cd70b93a58938e8e798b7d +Author: Panu Matilainen +Date: Wed May 21 11:04:59 2008 +0300 + + Minor fixes to triggercondsTag() + - lose unused variable + - remember to reset versions iterator too + +commit bda56cc4376c34a87ac96df06be72d64e04d03ee +Author: Panu Matilainen +Date: Wed May 21 10:40:50 2008 +0300 + + Resurrect triggercondsTag() + - convert to use new interfaces and simplify + +commit ce70ac871764ec835d5c83b3115d3a7236196838 +Author: Panu Matilainen +Date: Wed May 21 09:22:38 2008 +0300 + + Add rpmtdDup() method for deep copying of tag containers + +commit 34151a9e35122d90bdc1863dc5dc5e1fec786afe +Author: Panu Matilainen +Date: Wed May 21 09:02:10 2008 +0300 + + Turn rpmtd freeData into flag bitfield, allowing more precise control + - headerGet() returns even array data in a single allocation block, but + regular (string) arrays need to have the pointers in array freed too + - set immutable flag on header data + +commit 3a12552a3a9d1389bab08d3ee1161b5d1c654565 +Author: Panu Matilainen +Date: Tue May 20 16:21:34 2008 +0300 + + Convert mireSkip() to use new interfaces + - let rpmtdFormat() figure conversion to string, simplifies things a lot + +commit 7c3d5dc15d66367fc5fbf89815f514d381e3d16f +Author: Panu Matilainen +Date: Tue May 20 12:38:40 2008 +0300 + + Add arraysize format + - it's a bit silly but avoids ugly special casing in formatting + +commit a9920b929913ccd627b817476dddd45aea1fd6b7 +Author: Panu Matilainen +Date: Tue May 20 12:18:14 2008 +0300 + + Fix up for RPM_BIN_TYPE td->count abuse just once, in rpmtdCount() + +commit 5d10e43f8f8a1cb8041326bae8251f8e0ba311f0 +Author: Panu Matilainen +Date: Tue May 20 12:09:14 2008 +0300 + + Drop unused variables from formatValues() + +commit fc38b84c010fa8c4f2617b1351ceaccec9f5da60 +Author: Panu Matilainen +Date: Tue May 20 12:07:38 2008 +0300 + + Lose the useless rpmtdToString() + - either use rpmtdFormat() or xstrdup() on rpmtdGetString() as appropriate + +commit fae1edeb939e761a7fd070081d378a2a67a485f9 +Author: Panu Matilainen +Date: Tue May 20 11:57:30 2008 +0300 + + Lose padding argument from formatters + - formatPrefix already contains the padding, just use rasprintf() on that + to get properly allocated buffer without messing with it manually + - xml format doesn't honor padding anyway so don't bother with it + +commit 845eb8fc70493da08e9cf31749796dbb976aa657 +Author: Panu Matilainen +Date: Tue May 20 11:56:47 2008 +0300 + + Avoid leaking memory on legacy header interface emulation + +commit 86bd819cee03899bb35b5edc99ccc0831755f388 +Author: Panu Matilainen +Date: Tue May 20 10:16:52 2008 +0300 + + Treat all integer types as unsigned in formatting + +commit efa130cee8c209ecd6bdf8ad51c3ad26579cf37e +Author: Panu Matilainen +Date: Tue May 20 10:10:18 2008 +0300 + + Simplify xmlFormat() + - use rpmtdFormat() to convert all data, xmlFormat() only adds the + xml markup now + +commit 9b32e58e173799b750a12c1bac51a7d49aadd4d6 +Author: Panu Matilainen +Date: Tue May 20 09:40:24 2008 +0300 + + Add rpmtdFormat() method and enumeration of supported formats + - permits formatting any rpmtd data to our supported formats over + iteration + +commit d5381c16a794e03c0e4f202daa3c882dc1876f41 +Author: Panu Matilainen +Date: Tue May 20 08:53:05 2008 +0300 + + Handle RPM_CHAR_TYPE too in stringFormat() + - used by filestates and nothing else apparently, duh.. + +commit 2bfc0fad3876bcee0143664cae9f0f0107a86a33 +Author: Panu Matilainen +Date: Mon May 19 17:51:42 2008 +0300 + + Add stringFormat() for barebones string representation + - use for everything not specifically overridden + - pushes practically all formatting out of formatValue() into formats.c + +commit f12983793ec4683e5083917f97169d23292c7ef7 +Author: Panu Matilainen +Date: Mon May 19 16:54:29 2008 +0300 + + Make formatter functions operate on rpmtd current item + - avoids extra abuse of the element field and simplifies things a bit + (eventually, not really yet) + +commit a40e3266836131ba5213d3b97d0f7ae93dedb755 +Author: Panu Matilainen +Date: Mon May 19 15:56:34 2008 +0300 + + Push rpmtd a bit deeper into formatting + - use rpmtd methods for pulling current integer/string values + - allows collapsing string and string array handling into one case + - CHAR/INT8 type aren't handled atm, but then nothing at all uses them... + +commit 91c13fbf4f5a3dcdd19be82698157d08f522a11a +Author: Panu Matilainen +Date: Mon May 19 15:24:24 2008 +0300 + + Minimally convert formatting to pass around rpmtd + +commit 246c2e2be254bc2f1014e55ccab91066b90aabea +Author: Panu Matilainen +Date: Mon May 19 08:38:53 2008 +0300 + + Remove unused datafree handling from formatValue() + - the data is always cached and cleared elsewhere.. + +commit 1a11aa66407ac40325d50e6a138c7f36672cc2ae +Author: Jindrich Novy +Date: Tue May 20 14:07:10 2008 +0200 + + Ignore quotes in expression + +commit 75f62d7c5fddf9d7e0cb588ac59d899aa426b60c +Author: Panu Matilainen +Date: Mon May 19 08:27:10 2008 +0300 + + Teach rpmtd about the raw i18n string (array) type + +commit 405bbc571ff5273c5bebdec088631c4ac2c1b32b +Author: Panu Matilainen +Date: Sat May 17 20:15:53 2008 +0300 + + Move all i18n string munging into separate function + +commit 7fedc2057030e46e1421fa5d14278c2d7bc49a87 +Author: Panu Matilainen +Date: Sat May 17 09:50:39 2008 +0300 + + Add HEADERGET_RAW flag to disable i18n lookups + +commit 89b8f53621f0dcb9954bd167aa83fd60a95836a8 +Author: Panu Matilainen +Date: Sat May 17 09:37:32 2008 +0300 + + Push header getter flags down to internal helpers + +commit ea0cdcc0dd4ffa17e7f0675b9a4eaf542e2de46c +Author: Panu Matilainen +Date: Sat May 17 09:28:32 2008 +0300 + + Oops, thinko/typo in headerGetFlags + +commit 0c75369d4681150d986df24e3414b86ccf1f4fb1 +Author: Panu Matilainen +Date: Sat May 17 09:25:04 2008 +0300 + + Add typedefs for header get/put flags, use instead of int + +commit 7be1b1bafcf1dd6a8464240d5fefa00cfd78c084 +Author: Panu Matilainen +Date: Fri May 16 18:17:53 2008 +0300 + + Remove unused hRET_s and HE_s definitions for good + +commit 72e4b1ae7e5dfb67aec9c4dafb0e5bc9413d7c84 +Author: Panu Matilainen +Date: Fri May 16 18:15:08 2008 +0300 + + Use rpmTag enumeration for finding tag format func instead of names + - comparing strings when we only care about the tag number is waste of time + +commit 019ee37f6279cc6e114359224ace85cb2260f6e0 +Author: Panu Matilainen +Date: Fri May 16 17:46:49 2008 +0300 + + Eliminate rpmHeaderFormats and rpmHeaderTagExtensions from the API + +commit cbf1a479ee62a5538065b92dcd8d9eb8e842bdda +Author: Panu Matilainen +Date: Fri May 16 16:56:32 2008 +0300 + + Push finding of formatter and tag extension functions down to formats.c + +commit eef5417deabb40304cc225ded2ebc7bf48dc2c46 +Author: Panu Matilainen +Date: Fri May 16 16:26:19 2008 +0300 + + Make extension formatter functions opaque + - tag extensions are only needed by headerGet(), formats only by headerFormat() + +commit 696184533aa34b7ae29c5567e1255f00505d884f +Author: Panu Matilainen +Date: Fri May 16 16:07:41 2008 +0300 + + Eliminate the now unnecessary extension type fields + +commit 44bdb776b7d557941d377d0adfdedd2940546164 +Author: Panu Matilainen +Date: Fri May 16 15:55:44 2008 +0300 + + Split format and tag extensions to separate tables + +commit a81863d443f3916d9562009fb5374e20b7fbc70e +Author: Jindrich Novy +Date: Fri May 16 06:05:25 2008 +0200 + + Update Portugese/Brasilian RPM translation (rhbz#446795) + - thanks to Igor Pires Soares + +commit 62f53dbc66fd4accb0fd1be1245f197ccfe52c2c +Author: Panu Matilainen +Date: Thu May 15 18:52:18 2008 +0300 + + Dumb segfault in %posttrans + +commit 504ff9ce0677143a586c4e2baef5cff7d8bf81f1 +Author: Panu Matilainen +Date: Thu May 15 18:28:50 2008 +0300 + + Unbreak conditional formatting + +commit 7df706ac167907559bb3acf7ac8223534a2e3f05 +Author: Panu Matilainen +Date: Thu May 15 17:17:45 2008 +0300 + + Let rpmtdFreeData() do it's job... + +commit aaa93e9008d56e14eae78b882c1396a117184995 +Author: Panu Matilainen +Date: Thu May 15 15:24:16 2008 +0300 + + Don't look into extensions when adding tags to python + - tagtable knows all our extensions too, there's no need to + +commit a06b172d8d76c16011ba74ec9b60640ff07439da +Author: Panu Matilainen +Date: Thu May 15 15:13:03 2008 +0300 + + Change headerTagTagFunction() to take tag container as arg + - minimal, crude conversion of all formatTag() functions for now + +commit 25edcbcf4b5a420ef101c9622d0c4bcb6bcfd464 +Author: Panu Matilainen +Date: Thu May 15 14:55:59 2008 +0300 + + Minimal conversion of in-rpm python bindings to new headerGet() + - hopefully preserving legacy quirks and all... + +commit 5198c91280ba07959b3efe5605a1e1a697c17d40 +Author: Panu Matilainen +Date: Thu May 15 13:42:12 2008 +0300 + + Eliminate unnecessary extension fields + - push default extensions yet deeper into format parsing + - single bounds-checked function to retrieve from cache + +commit 6f18834d4ebbea4af8c2b3be12f25d28fe4f4450 +Author: Panu Matilainen +Date: Thu May 15 12:27:20 2008 +0300 + + Permit tags down to HEADER_IMAGE in queries to match previous behavior + +commit 445671ee82d95b7465663152a633c38bd3300d5e +Author: Panu Matilainen +Date: Thu May 15 12:04:17 2008 +0300 + + Unify header and extension tag handling of headerFormat() + - retrieve both header and extension tag data through headerGet, + - cache the return data for both types for an enormous speedup especially + for array types + +commit 91540f53598a1d53448c56b7153634d9c961f630 +Author: Panu Matilainen +Date: Thu May 15 08:01:45 2008 +0300 + + Convert rpmtsAddInstallElement() to new headerGet() + +commit bbb566a261ae5fbafe770beabf9a0bcc5487e5ab +Author: Panu Matilainen +Date: Wed May 14 15:08:40 2008 +0300 + + Commentary fixes + - "return" is not our registered trademark :) + - document the intent to make rpmtd opaque + +commit 65100c8e1d8c4eea4c0b410a9427d1bb76cba8fe +Author: Panu Matilainen +Date: Wed May 14 14:36:36 2008 +0300 + + Teach headerGet() to retrieve extension tags if enabled with flags + - bit of a kludgery until fooTag() formatters have been converted + to take rpmtd struct as argument + - idea lifted from rpm5.org, implemented independently (and probably quite + differently) + +commit b94a187adcdb7c32983f5c6a5718fb4fa2f87bc5 +Author: Panu Matilainen +Date: Wed May 14 13:26:58 2008 +0300 + + Simplify rpmDisplayQueryTags() + - all relevant tags are now visible in tagtable, don't bother looking up + extensions separately + +commit 7bb210e0af1570d05eaa267b3b96344df45a4871 +Author: Panu Matilainen +Date: Wed May 14 13:20:46 2008 +0300 + + Teach rpm tag table about extensions + - add rpmTag_e enumerations for all extension tags + - add extension field to headerTagTableEntry_s for things that are "pure" + extensions (instead of just extension overrides) so we have a chance to + catch out anybody trying to insert such tags to headers + +commit c0bdbb0946203ec2f53c6eff3f64558a2876e6a0 +Author: Panu Matilainen +Date: Wed May 14 10:29:07 2008 +0300 + + Convert headerRegenSigHeader() to new header iterator interface + +commit df23089b1f0e15e4e0adc4a97c143b7cf9680127 +Author: Panu Matilainen +Date: Wed May 14 10:20:56 2008 +0300 + + Convert headerMergeLegacySigs() to new header iterator interface + +commit c66f0b5008ab0088e83a4ca69ddbe7d3ef9def55 +Author: Panu Matilainen +Date: Wed May 14 09:46:04 2008 +0300 + + Convert file color calculation in rpmfcGenerateDepends() to new interface + +commit b31eef9e9b22a3842b8937f17aa2aae6a6e50dad +Author: Panu Matilainen +Date: Wed May 14 09:31:24 2008 +0300 + + Convert headerGetColor() to use new headerGet() interface + +commit 7e0f6408bac7ae3eac004c8224c97fd83cb021a7 +Author: Panu Matilainen +Date: Wed May 14 09:20:51 2008 +0300 + + Convert addTE() to new headerGet() interface + - streamline things a bit while at it... + +commit 49a892fae1df0f7abdcffa387aa347c9e8b4a299 +Author: Panu Matilainen +Date: Wed May 14 09:12:40 2008 +0300 + + Convert rpmteNew() to use new headerGet() interface + +commit abbf9a2c8d9504d917da2c7d53da5758cd55e4e9 +Author: Panu Matilainen +Date: Tue May 13 18:12:13 2008 +0300 + + Simplify rpmInstallLoadMacros() a bit + - use new style headerGet() and let rpmtd work out the string presentation + +commit 30c4e29d33b9f7c4ef2011a1d84bbf7b3b156ea6 +Author: Panu Matilainen +Date: Tue May 13 18:09:35 2008 +0300 + + Add some more rpmtd access methods + - rpmtdGetUint() for 16 and 32 bit integer types, similar to + rpmtdGetString() (equally usable with scalar types and arrays) + - rpmtdToString() which converts "any" header data into string presentation + +commit e7ec2339b42b9be6bad373d7ced4d351ce0db08a +Author: Panu Matilainen +Date: Tue May 13 17:35:32 2008 +0300 + + Convert runInstScript() to use new style headerGet() + - simplifies things quite a bit when we can just iterate over the + prog arg container, no matter if it's string or string array + +commit 2d0a4329bddd8a644e87d8b00399096423cef2f5 +Author: Panu Matilainen +Date: Tue May 13 17:10:42 2008 +0300 + + Simplify prefix shuffling in psm runScript() + - use new style headerGet() and pass the entire tag container down to + doScriptExec(), removing need for big bunch of local variables + - use rpmtd (iterator) methods for processing the prefixes in doScriptExec(), + it does the right thing for legacy non-array RPMTAG_INSTALLPREFIX too + +commit 56878483b7814ef4ef544783dbea2d833af6758c +Author: Panu Matilainen +Date: Tue May 13 16:12:56 2008 +0300 + + Convert a few cases in rpmfc to use the new rpmtdFromArg() methods + - safety asserts for the expected type for now... + +commit 11980a42f28feddf33c0b2c74b6424b217404263 +Author: Panu Matilainen +Date: Tue May 13 16:11:28 2008 +0300 + + Add methods to construct tag containers from argv and argi arrays + - basic type checking done based on tag (return) type + +commit ae218d25aee90d967b3b928b332cb759f27cc22e +Author: Panu Matilainen +Date: Tue May 13 15:05:22 2008 +0300 + + Convert couple of headerGetEntry() uses to new interface in parsePreamble + +commit bf84c980ed948f16a55ecd9469d8c579667ff3a0 +Author: Panu Matilainen +Date: Tue May 13 14:42:32 2008 +0300 + + Use tag container iterator for ismemberInEntry() + +commit 9de4354a1258abf81963f450a654275cfbc08c33 +Author: Panu Matilainen +Date: Tue May 13 14:40:55 2008 +0300 + + Add support for iterating over tag data container + - rpmtd iterator init + next methods + - string accessor method for RPM_STRING_TYPE and RPM_STRING_ARRAY_TYPE + +commit 7c4cae7030d13ec43d1d31d16e598cd994410516 +Author: Panu Matilainen +Date: Tue May 13 14:03:08 2008 +0300 + + Convert checkForDuplicates() to use new interfaces + - doesn't gain anything but ... + +commit 223da12f24cc0e1e0a878ab7dc420df468d9578b +Author: Panu Matilainen +Date: Tue May 13 14:02:40 2008 +0300 + + Add rpmtdTag() method + +commit 362f46a05a5a4a285d764f64dce05bd93eb6f537 +Author: Panu Matilainen +Date: Tue May 13 13:44:04 2008 +0300 + + Simplify initSourceHeader() + - use headerCopyTags() instead of manually doing it for the main tags + - use the new rpmtd interfaces for build restriction copying + +commit ed23d35805cb42099ab22b6525bc6ad08e9a5967 +Author: Panu Matilainen +Date: Tue May 13 13:29:07 2008 +0300 + + Convert headerCopyTags() to use rpmtd internally + +commit e2ea6a35bacad840c5455bd7c3e91f45dcbf2cde +Author: Panu Matilainen +Date: Tue May 13 13:25:14 2008 +0300 + + Convert headerCopy() to use the new interfaces internally + +commit 0ee2364ae2a06b6c176414f13f1297e9eec32cb6 +Author: Panu Matilainen +Date: Tue May 13 12:32:25 2008 +0300 + + Add headerPut() for adding data to headers through tag container + - tag container isn't that big a win on add/append operations as it is on + retrieval, just use the existing headerAddEntry() family to do the + actual work + - headerPut() is a nice and short name, lifted from rpm5.org, API might + differ + - flags to control operation, just whether append is permitted or not for now + +commit 29087b08a6cd4d6591ee238e0b650f6d41f6eddc +Author: Panu Matilainen +Date: Tue May 13 11:59:19 2008 +0300 + + Use a macro for copying td entries in compat wrappers + - just to avoid tedious umphteen copies of if (c) *c = ... + +commit 09807fed0353fe67cb7df4db4b21e544ebc118cb +Author: Panu Matilainen +Date: Tue May 13 11:46:33 2008 +0300 + + Convert header tag iterator to use rpmtd + - new API function headerNext() for the new interface + - headerNextIterator() is just a compat wrapper + +commit 8cd92950bda4658c8d376c5c381237301013edfb +Author: Panu Matilainen +Date: Tue May 13 11:38:38 2008 +0300 + + Convert headerGetEntry() internals to use rpmtd for data + - new public API function headerGet() that returns data in rpmtd, with + flags to control operation (just minmem or no for now) + - headerGet() is nice and short name, lifted from rpm5.org but our API + differs as this takes a separate arg for the tag to get instead of + (ab)using the container to pass data back and forth + - internal compatibility wrapper to keep headerGetEntry() and -MinMem + version working + +commit 752343c2b7798b1fa225abc9ade94529a6175ad7 +Author: Panu Matilainen +Date: Tue May 13 11:14:50 2008 +0300 + + Start converting header internals to use the rpmtd struct + - turn copyEntry() into a wrapper around copyTdEntry() to avoid having + to convert everything at once + - copyTdEntry() takes rpmtd and populates with data and whether memory + was allocated or not + +commit a83cfce188a4545756a8fa5791f3b9cbe20190ed +Author: Panu Matilainen +Date: Tue May 13 11:02:45 2008 +0300 + + New "tag data" container struct + some basic methods to deal with it + - to be used for passing around header and extension data + - inspired by similar changes in rpm5.org, details and implementation differ + +commit 6fd646f238b402d2e47c8af8520d3ffa48ebd91e +Author: Panu Matilainen +Date: Mon May 12 18:32:11 2008 +0300 + + Remove tags from headerSprintfArguments + - its always rpmTagTable so no point carrying it around + +commit a670a393cadca5df927afda6e1543030a1990fc7 +Author: Panu Matilainen +Date: Mon May 12 18:27:36 2008 +0300 + + Update translations again for headerfmt.c split + +commit e89d20336111c4ae2089d0af4eb5a651bed3aca8 +Author: Panu Matilainen +Date: Mon May 12 18:26:11 2008 +0300 + + headerfmt.c has translatable strings, add to POTFILES + +commit e02523286c03fdad3b5f8df4639cfd0317e496a4 +Author: Panu Matilainen +Date: Mon May 12 18:03:47 2008 +0300 + + Use rpmTagGetFoo() instead of local myTagFoo() versions + - hsa tags will always be our default rpmTagTable so we can use the + somewhat optimized rpmTagGet() versions instead of dumb linear searchs + +commit 95386fe3318cc8cbd0dc240570dfae226afd6501 +Author: Panu Matilainen +Date: Mon May 12 17:25:54 2008 +0300 + + Push extension defaults one level deeper into headerFormat() + +commit fe3ba9991019dcf5de7f92577cfd04872fe7584d +Author: Panu Matilainen +Date: Mon May 12 17:08:12 2008 +0300 + + Simplify header extension handling + - remove the now unnecessary chaining to different extension tables + +commit ecd8c6c44149b880e672accc416d593c551de72e +Author: Panu Matilainen +Date: Mon May 12 16:53:26 2008 +0300 + + Move headerVerifyInfo() to header.[ch] where it logically belongs + - removes the need for copy-paste typeAlign array in package.c + +commit f081d3da6658f7ea4ea7c3ba4355d2dcd34721fc +Author: Panu Matilainen +Date: Mon May 12 16:31:27 2008 +0300 + + Eliminate copy-paste versions of hdrchkFoo() macros + - just stick 'em into header_internal.h, both header.c and package.c + need it anyway + +commit ea9b00dab87a5d44730e6b51f72a9ed3a5432164 +Author: Panu Matilainen +Date: Mon May 12 16:20:13 2008 +0300 + + Convert internal uses of headerSprintf() to headerFormat() + +commit 67b4f3a13de4012eaf0caf4b62c93cf001d9cdc1 +Author: Panu Matilainen +Date: Mon May 12 16:16:37 2008 +0300 + + Add simpler headerFormat() function, deprecate headerSprintf() + - headerSprintf() is just a dumb wrapper around headerFormat() now, + tbltags and extensions are not used at all + - baby steps towards eliminating the the tag and extension tables from + the API/ABI... + +commit 05b70ba53c12ee70975586e1ed0368cd3442d05c +Author: Panu Matilainen +Date: Mon May 12 15:48:31 2008 +0300 + + Split header sprintf formatting to separate source + - header.c is now just low level header handling, headerfmt.c is the + formatting engine and formats.c has the actual formats + - also move bunch of formatting-related stuff from header_internal.h to + headerfmt.c, nothing else needs it + +commit 0ea9805e2dd21a1b05343f8aa81ab91232ceda48 +Author: Jindrich Novy +Date: Mon May 12 12:46:37 2008 +0200 + + fully translate to CZ after latest po files regeneration + +commit 5dcb97da2bfcee68108824a37c7a788193e3004d +Author: Panu Matilainen +Date: Mon May 12 12:54:36 2008 +0300 + + Move header "default" formats to formats.c along with the rest of 'em + +commit 32bf84651419d071ec1d940dac1dfd3f9c807422 +Author: Panu Matilainen +Date: Mon May 12 12:31:54 2008 +0300 + + Update translations after the big shuffle + +commit c57c62b94aaf8032b144a3766f311d3893d7bc8d +Author: Panu Matilainen +Date: Mon May 12 12:30:00 2008 +0300 + + Adjust pkg-config now that librpmdb is gone + +commit 90e10708f824ff8e86b0f030d12e14329b1cf2c0 +Author: Panu Matilainen +Date: Mon May 12 12:28:12 2008 +0300 + + Fixup paths and Makefiles for rpmdb/ elimination + +commit a68a5a049e98bc8406c0e7015ad5dadbed39972d +Author: Panu Matilainen +Date: Mon May 12 12:17:01 2008 +0300 + + Start (re-)joining librpmdb and librpm + - the split is largely arbitrary and mostly just causes, well, arbitrary + issues and limitations + - just move content from rpmdb/ to lib/ for now + +commit 962c7b49d2c290678afad9a9893f76450e655108 +Author: Panu Matilainen +Date: Mon May 12 10:45:33 2008 +0300 + + Rip old, bit-rotten librpm test programs + +commit 84b29174e6a8da103e8afbffa48dc10958cc2e62 +Author: Panu Matilainen +Date: Mon May 12 10:44:07 2008 +0300 + + Rip old, bit-rotten librpmio test programs + +commit 2f890bda8b8685167433bf04c515d488555b1436 +Author: Panu Matilainen +Date: Mon May 12 10:40:14 2008 +0300 + + Rip old, bit-rotten librpmdb test programs + +commit e13edf837af856a76aa6e7ea7171a2c86546e39f +Author: Panu Matilainen +Date: Mon May 12 09:14:09 2008 +0300 + + Remove internal copy of Lua for good + - we can do just fine with externally linked lua, no need to carry + this around + +commit 88e2895bec3be69772ca79c30bd417cd59cbe668 +Author: Jindrich Novy +Date: Sat May 10 08:55:04 2008 +0200 + + Fully transale RPM to Czech + - convert the po file to UTF-8 + - translate all strings + +commit 06a0d228d2c190a8bc59fe897ca980e5f98ef8bd +Author: Panu Matilainen +Date: Thu May 8 19:03:12 2008 +0300 + + Caught pants down with strlcpy() vs strncpy() semantics + - rstrlcpy() calculates source string size regardless of length limit, + but cpio fields are fixed length character arrays, not strings -> kaboom + - wondering if zero-terminating strncpy() variant might be more fit to our + purposes than strlcpy()-clone + +commit 6a8ddd9bc22cd8bf7d5100da9915cdae91549a3b +Author: Panu Matilainen +Date: Thu May 8 17:10:10 2008 +0300 + + Eliminate static print buffer from prDbiOpenFlags() + - unlikely to actually overflow but it'd be all the more embarrasing + as it's just diagnostics/debug code... + +commit aa3ab021a8b7c633ddacca71adc1b86038bff3ff +Author: Panu Matilainen +Date: Thu May 8 15:24:46 2008 +0300 + + Avoid entirely unnecessary static temp string buffer + +commit 4ad7f40395be970b7d84cb9782ce6c7717db9d37 +Author: Panu Matilainen +Date: Thu May 8 14:37:29 2008 +0300 + + Rip useless ROOT_GROUP checking from configure + - it was only used for an ancient RH-specific %_fixgroup anyway which + in turn only ever did anything when building as root - bad bad... + +commit c9b6fc7e2d3d7395346acf3e3092d22474d82d55 +Author: Panu Matilainen +Date: Thu May 8 14:36:08 2008 +0300 + + Don't run fixowner and fixgroup at end of %prep + - they'd only work for root, and we don't want to encourage people to build + as root... + +commit c5696f60193c31d98f1e313145b3611de3d34906 +Author: Panu Matilainen +Date: Thu May 8 13:40:26 2008 +0300 + + Oops, matchpathcon() wants st_mode, not the entire struct stat + +commit 8ecf69ed6236c308f183125301fa571c4e21491f +Author: Panu Matilainen +Date: Thu May 8 13:35:27 2008 +0300 + + Block signals while moving the rpmdb to final location after rebuild + - interrupt there would be pretty disastrous.. + +commit 0af31c915e01b08f6efb044ac24a799c6b375410 +Author: Panu Matilainen +Date: Thu May 8 13:30:16 2008 +0300 + + Lose the silly db argument from block/unblockSignals() + - unused, and unusable anyway as signals are global, not per db thing... + +commit 485ee9bbb4ff3e9c3b4cb65052055d4e8d47e78f +Author: Panu Matilainen +Date: Thu May 8 13:06:34 2008 +0300 + + Restore rpmdb selinux contexts to default after rebuild (rhbz#442149) + +commit 461fd000d22d76d97ad0ac76263477d364691d32 +Author: Panu Matilainen +Date: Thu May 8 12:40:37 2008 +0300 + + is_selinux_enabled() returns 0 if not enabled, not -1 + +commit 6ca5373aa1f58ccc60e844bd8fd006a738670883 +Author: Panu Matilainen +Date: Thu May 8 11:53:42 2008 +0300 + + Check for transaction root sanity in rpmtsSetRootDir() + - only regular paths starting with / permitted + - change prototype to permit return codes + +commit 6006265faf97316d9685b0dc958770f50b954a3e +Author: Panu Matilainen +Date: Thu May 8 11:38:52 2008 +0300 + + Set ts rootdir to /, not empty if rootDir arg is NULL + - lets see what break... ;) + +commit 42d0c3bd685ddbc093c3e9c8449c4cb015923f25 +Author: Panu Matilainen +Date: Thu May 8 11:27:58 2008 +0300 + + Only append trailing slash to ts rootdir if rootdir != "/" + +commit 8a024c20e79c76bcf02f6af3f6348cc25e62b646 +Author: Panu Matilainen +Date: Thu May 8 10:20:39 2008 +0300 + + Fix up some fuzz in Finnish translation + +commit b5a6e815863a10d953ad3e857dc495d51334cc47 +Author: Panu Matilainen +Date: Thu May 8 10:07:31 2008 +0300 + + Fix up / remove some fuzzy German translations + +commit 2c15e8409325f9179a68f7cc0da3668eee093198 +Author: Panu Matilainen +Date: Thu May 8 10:00:04 2008 +0300 + + Updated Serbian translations from Igor Miletic (rhbz#441101) + +commit 93208f1552bea2a5802ec4b3b03c4014ab680da4 +Author: Panu Matilainen +Date: Thu May 8 09:56:54 2008 +0300 + + Updated Polish translation from Piotr DrÄ…g + +commit 41a7b93e6b764e9b2966ee61cb9802b6fd7064af +Author: Panu Matilainen +Date: Thu May 8 09:53:36 2008 +0300 + + Updated German translation from Fabian Affolter (rhbz#438178) + +commit cb36d48351ea944d445db29635750042f445ec3d +Author: Panu Matilainen +Date: Thu May 8 07:48:51 2008 +0300 + + Check rpmAddSignature() return codes (rhbz#442761) + - headerGetEntry() on RPMTAG_HEADERIMMUTABLE already caught the corrupted + package, we just didn't paying attention + - make the hge failed error message a bit more meaningful + +commit 79dd50f94d94158e03fd57a72a896f8fc20f61ec +Author: Panu Matilainen +Date: Wed May 7 12:15:22 2008 +0300 + + Oops, don't access variable after freeing + +commit 31724be2f63b286d8684d72d62a7a19d1233143b +Author: Panu Matilainen +Date: Wed May 7 11:33:33 2008 +0300 + + Oops, plug leak introduced by previous commit + +commit 15e9e1ff64aaf986ab0dd97b9b12c3d4fb22a484 +Author: Panu Matilainen +Date: Wed May 7 11:12:17 2008 +0300 + + Simplify doPatch() + - use %{uncompress} macro to pass files to patch always + - gains support for lzma patches for free + +commit fc36f322e123a7421b798f12358cc701e28afbe0 +Author: Panu Matilainen +Date: Wed May 7 09:48:39 2008 +0300 + + Plug another memleak from genCpioListAndHeader() + - free fuser + fgroup info instead of NULLing, add comment on side-effects + +commit 16d0a2fa29df88689fc56ef271a2538a5ca1cba6 +Author: Panu Matilainen +Date: Wed May 7 08:32:36 2008 +0300 + + rpmfi actions is already alloced by rpmfiNew(), don't leak memory + +commit e907b912f9e237bc840d714e4e03f4d26deafe0c +Author: Panu Matilainen +Date: Tue May 6 12:48:09 2008 +0300 + + Eliminate nasty hackery with "special" doc + docdir format + - figure out docdir early on in spec parsing, store in package struct + instead of abusing parse buffer + - fixes memleaks from docdir_fmt and headerSprintf too + +commit 41147e5b18ad09b04697c3aa729539689547281c +Author: Panu Matilainen +Date: Tue May 6 10:00:07 2008 +0300 + + Eliminate static buffer in lua findkey() + +commit e5df40e683552c4f5b36f029ff5bced39058452b +Author: Jindrich Novy +Date: Tue May 6 08:47:18 2008 +0200 + + Nuke EXPRBUFSIZ, it is now useless + +commit 90eec724a834c26131be11145a62084efe3bafb8 +Author: Jindrich Novy +Date: Tue May 6 08:46:50 2008 +0200 + + Don't use static buffer for parsing an expression + +commit 697f27bbbab27a2f353803bf765f334b8668b59d +Author: Panu Matilainen +Date: Mon May 5 13:52:19 2008 +0300 + + Indentation fixes + +commit 3e991bc40c4f7818d720649901993cec95056540 +Author: Panu Matilainen +Date: Mon May 5 11:53:48 2008 +0300 + + Eliminate static sized string buffer in parseScript() + +commit 39168e47aba5c953ecd3bde7134c577b31871bf9 +Author: Panu Matilainen +Date: Mon May 5 11:37:08 2008 +0300 + + Trap RPMRC_FAIL returns from spec parse with abort() for now + +commit d0ea38a4cae75a6c69536e3949e230f3999ae7d1 +Author: Panu Matilainen +Date: Mon May 5 11:31:09 2008 +0300 + + Make readLine() return PART_ERROR on errors + +commit 557c2673f7e7ff222f8abcc35ecd601007374b6f +Author: Panu Matilainen +Date: Mon May 5 11:27:49 2008 +0300 + + Fix (hopefully ;) signaling for line continuations on spec parsing + +commit 3c5f581df6be0776b1d49e94d518c58e93a886c2 +Author: Panu Matilainen +Date: Mon May 5 11:20:13 2008 +0300 + + Indentation fixes + +commit 7b80971078c7c278d80243bfde3afaa7ce540eb8 +Author: Panu Matilainen +Date: Mon May 5 11:15:12 2008 +0300 + + Make parseSpec() return PART_ERROR on all errors + - also fix memleak from buildroot errors + +commit 2ecee0c334d95fafb9ad423e998482cd1209d0e4 +Author: Panu Matilainen +Date: Mon May 5 11:00:45 2008 +0300 + + Make parseFiles() return PART_ERROR on failure + - streamline exits by assuming failure + +commit d1e30d48756f3cbbc8cd4d6470880b3c089eab00 +Author: Panu Matilainen +Date: Mon May 5 10:56:55 2008 +0300 + + Make parseScript() return PART_ERROR on errors + - streamline exists by assuming failure + +commit 64527b4dafec9064f2964dbef949a5af3854636d +Author: Panu Matilainen +Date: Mon May 5 10:46:43 2008 +0300 + + Make parseDescription() return PART_ERROR on errors + +commit 6e0450da248157ae0c88fbd6ffba842cd461c9f2 +Author: Panu Matilainen +Date: Mon May 5 10:42:41 2008 +0300 + + Make parseChangeLog() return PART_ERROR on errors + - streamline exits, fixing memleak from stringbuf on various paths + +commit 4e1e3b4aa9e2a3c29d67d889461284994feceffa +Author: Panu Matilainen +Date: Mon May 5 10:34:33 2008 +0300 + + Make parseBuildInstallClean() return PART_ERROR on errors, streamline exits + +commit 6e1e700a251cd91b1177b56ae74fc52ea18b0432 +Author: Panu Matilainen +Date: Mon May 5 10:24:22 2008 +0300 + + Make parsePrep() return PART_ERROR on errors + +commit e0787e828b0a73b96d8928586d5a15d30a3c61cb +Author: Panu Matilainen +Date: Mon May 5 10:08:33 2008 +0300 + + Streamline parsePreamble() exists + - assume failure, single point of exit + - fixes memleak from NVR + - use PART_ERROR for error exits + +commit dc61ca3b65f74e850184ead6e6985842ae7b767b +Author: Panu Matilainen +Date: Mon May 5 09:51:14 2008 +0300 + + Start cleaning up the rpmerr removal mess of build/ return codes + - define PART_ERROR for error returns from various parse bits, + teach parseSpec() about it + - streamline parseSpec() exists + +commit fc728e489f707ad1823e55b311944f1dff8ec65e +Author: Jindrich Novy +Date: Mon May 5 08:12:04 2008 +0200 + + Remove obsolete parseForRegexLang() + - no use for it since _langpatt is now gone + +commit 25de12b124120748c832e5167f6d2551a26937e3 +Author: Jindrich Novy +Date: Mon May 5 08:05:50 2008 +0200 + + macros.in cleanup + - really deprecate _langpatt + - obsolete _package_version + - use paths more conforming to FHS + - fix typos + +commit 8e1cb253db82d4f26eb0455f985771924eb5ecca +Author: Panu Matilainen +Date: Mon May 5 08:38:57 2008 +0300 + + Use fprintf() for writing PGP passphrase (like we do for GPG) + - avoids having two separate write()'s to check + - ...if we actually checked the result, gcc doesn't whine about + unchecked fprintf() return... + +commit f78fa317377e889ac59635abc556a92828b5c794 +Author: Panu Matilainen +Date: Mon May 5 08:27:07 2008 +0300 + + Check for pipe() returns on GPG and PGP signature creation + +commit 12bb7024fd900ef5fc4468293a41b5cf163b8cdf +Author: Panu Matilainen +Date: Mon May 5 08:23:24 2008 +0300 + + Check for pipe() returns in rpmfc helper output reading + +commit b15e3e3ca1f09163fcb392a15fefb36581b101e2 +Author: Panu Matilainen +Date: Mon May 5 08:15:17 2008 +0300 + + Silence bogus warning on memset() + - gcc doesn't realize shrank == 0 would terminate the process via error() + before reaching memset(), work around... + +commit 961b6c4b2f9c2cd4663f85fdb38906765e3640aa +Author: Panu Matilainen +Date: Mon May 5 07:37:50 2008 +0300 + + Check for pipe() return code on --pipe + +commit 25136233dbd286c23b21689b9300001a3137f378 +Author: Panu Matilainen +Date: Sat May 3 12:44:16 2008 +0300 + + Add missing include + +commit 015d99725f98e0bcce86faf20309a167689ac0e4 +Author: Panu Matilainen +Date: Sat May 3 12:43:37 2008 +0300 + + Initialize nb before use + +commit 8c1038edc355f63e89588424bf23b9cee8a26a4f +Author: Panu Matilainen +Date: Sat May 3 12:38:02 2008 +0300 + + Create signature target rpm in same directory as original + - rename() doesn't work across devices, oops... + +commit 0ee67fede81600dad90da5139f6109399d6926e7 +Author: Panu Matilainen +Date: Sat May 3 12:34:19 2008 +0300 + + Temp file handling tweaks + - rename rpmMkTemp() (back) to rpmMkTempFile() + - rpmMkTemp() is now a lower level thin wrapper around mkstemp() + +commit 87ea239ffc5763b1d85ce1b0d35759d9bafe1cb5 +Author: Panu Matilainen +Date: Sat May 3 10:36:00 2008 +0300 + + rpmReSign() doesn't return rpmRC codes, make it more obvious + - cleanup "rc = RPMRC_FAIL" copy-paste leftovers + +commit 5f607d565d583b26347d3560e15ab3258596220a +Author: Panu Matilainen +Date: Sat May 3 10:27:16 2008 +0300 + + Eliminate static sized string buffer frpm rpmReSign() + - use rpmMkTemp() for creating the temp file instead of insecure + close(mkstemp()) + +commit e5972a715ad84a71b372e167fe0dadb74e6d9ab6 +Author: Panu Matilainen +Date: Fri May 2 11:48:27 2008 +0300 + + Check for arch compatibility on multilib too + +commit 3e6009a7440ea5fc3edc21bfe299288018e4e3ea +Author: Panu Matilainen +Date: Fri May 2 11:40:29 2008 +0300 + + Ensure default SIGPIPE handler for --pipe (rhbz#444389) + +commit a306a04a895a1632ad80753c61e57864f0019441 +Author: Panu Matilainen +Date: Wed Apr 30 14:38:09 2008 +0300 + + RIP alloca() + +commit c089a45bf6100b9df9cf0452759c7c46ea3bbc5b +Author: Jindrich Novy +Date: Wed Apr 30 13:24:51 2008 +0200 + + Rewrite xmlFormat() and remove useless xmlstrlen() and xmlstrcpy() + +commit 995ebf4b588e092ed008c2757ed84713d9e1e61a +Author: Panu Matilainen +Date: Wed Apr 30 13:34:28 2008 +0300 + + Kill of alloca() from tufdio tests + - yes it leaks, who cares + +commit d6964535c9647ee74972e053b9d0607f9b4b0693 +Author: Panu Matilainen +Date: Wed Apr 30 13:30:54 2008 +0300 + + Lazily copy basenames in relocation if needed + - couple of tiny array helper funcs to push stuff out of relocateFileList() + instead of adding yet more gunk + - use the helpers for dirnames too + +commit b7aab95d58110fcab8dc9fe34d36be0f86b8398f +Author: Panu Matilainen +Date: Wed Apr 30 12:45:16 2008 +0300 + + Simplify relocation directory name manipulation + +commit e454180a3f6bc16431ba710f5a16aca83f1c5396 +Author: Jindrich Novy +Date: Wed Apr 30 11:39:49 2008 +0200 + + Don't use alloca in rpmal.c + +commit 355c673016632c1218860b5df82c689ec535cf9d +Author: Panu Matilainen +Date: Wed Apr 30 12:29:40 2008 +0300 + + Allocate relocation dirnames on heap, not stack + +commit b28bea588b533d310b877f641e0fd9ae6ca143d4 +Author: Jindrich Novy +Date: Wed Apr 30 10:32:33 2008 +0200 + + Don't use alloca() in fpsCompare() + +commit d4d4a29f8dd2497607fd375f4966abb48a1c522c +Author: Panu Matilainen +Date: Wed Apr 30 10:32:57 2008 +0300 + + Begin untangling relocation alloca()'s + - allocate rpmRelocation paths on heap, not stack + +commit 657dc38ec051d3333dad5cb15c6cb7a884c151e4 +Author: Panu Matilainen +Date: Wed Apr 30 10:05:48 2008 +0300 + + Kill the remaining alloca in fp doLookup() + +commit 782c4335c350d96695b1193a9fa1bb394c155037 +Author: Panu Matilainen +Date: Wed Apr 30 09:47:25 2008 +0300 + + One alloca() down in fp doLookup() + - single point of exit from the point where buf gets allocated + +commit 2bd9d3401efca50e1ff99f694c6beaa57504b71b +Author: Panu Matilainen +Date: Tue Apr 29 17:38:21 2008 +0300 + + Plug a memleak in lzclose() + +commit aaa7fa0f943817d344fab0a95340744f6acebf9d +Author: Panu Matilainen +Date: Tue Apr 29 17:09:07 2008 +0300 + + Plug memleak in parseSimplePart() + +commit 485d19548834a68db3c57082b6bdc57fa58cf5f8 +Author: Panu Matilainen +Date: Tue Apr 29 17:04:08 2008 +0300 + + Plug memleak in macro doFoo() + +commit 586268cc94edf8dd8af5668f3c9000d02facf57b +Author: Jindrich Novy +Date: Tue Apr 29 16:08:19 2008 +0200 + + Don't use alloca in rpmGenPath() + +commit f05198ca5ec06fe48805b55ec51ef600612804cf +Author: Jindrich Novy +Date: Tue Apr 29 15:40:20 2008 +0200 + + Calm down compiler warnings due to fsm->patch being const + +commit 67f9ca7e1404fc85ad367d5eb9b90f8c5501ebad +Author: Jindrich Novy +Date: Tue Apr 29 15:01:05 2008 +0200 + + Avoid general ETXBSY and allow it for HP-UX exclusively + - for more info: http://www.uwsg.iu.edu/hypermail/linux/kernel/9808.3/0883.html + - remove the rest of alloca()s + +commit 498677dad2abb860ca6acd5aaa7aa0ef6d288267 +Author: Jindrich Novy +Date: Tue Apr 29 14:59:18 2008 +0200 + + Remove useless alloca_strdup() + - and yet more alloca usage in writeFile() + +commit 4bb802d6aedef83a0d356d522e107697fed1c369 +Author: Panu Matilainen +Date: Tue Apr 29 15:50:43 2008 +0300 + + Remove unused alloca_strdup() define + +commit 010706ecbd4bdabc954fd9f4499a99772b92fea7 +Author: Panu Matilainen +Date: Tue Apr 29 15:08:47 2008 +0300 + + Allocate directory names on heap in compressFilelist() + +commit ba763344d4116912e616337f7a8c305a29c48c36 +Author: Panu Matilainen +Date: Tue Apr 29 14:44:28 2008 +0300 + + Use rpmGetPath() to construct full dbpath in db3open() + - another alloca() bites the dust... + +commit bd9e4ed8d7dec6ab7a247298fa8ce5be67e98f58 +Author: Panu Matilainen +Date: Tue Apr 29 14:17:09 2008 +0300 + + Oops, one more alloca() in rpmtsOrder() + +commit 4fc15424d815bc9dc22644d16ea00db06136b8b9 +Author: Panu Matilainen +Date: Tue Apr 29 14:13:59 2008 +0300 + + Remove alloca() from rpmtsOrder() + +commit 08314921ea4ba4c333838da8682f01c846ff744b +Author: Panu Matilainen +Date: Tue Apr 29 14:02:06 2008 +0300 + + Dead code elimination + +commit 2cef5b46458f2d19825cdc40b21bb591b69f87f0 +Author: Panu Matilainen +Date: Tue Apr 29 13:49:53 2008 +0300 + + Remove alloca() from rpmvercmp() + - use variable array instead, versions had better be short enough to fit + on stack safely + +commit b5568386c2a16a56a5b290a4e6f498229d7e695f +Author: Panu Matilainen +Date: Tue Apr 29 13:33:09 2008 +0300 + + Avoid alloca() in headerLoad() + - REGION_TAG_COUNT is a constant so local array would do even without + C99.. + +commit 3be356cb0f583c68069150421a7bdd5a8f65d555 +Author: Panu Matilainen +Date: Tue Apr 29 13:17:33 2008 +0300 + + Avoid alloca() in findTag() + - instead of putting RPMTAG_ into strings where it's not present, + do it the other way around + - avoids a string copy and redundant string comparisons on the RPMTAG_ part + +commit 69e3540ed0c875221147d9af5ab90089d55e5fa5 +Author: Panu Matilainen +Date: Tue Apr 29 12:59:20 2008 +0300 + + Avoid alloca() in shescapeFormat() + +commit 226c4d16279702593ff814b1573e79e33e17fd72 +Author: Panu Matilainen +Date: Tue Apr 29 12:45:51 2008 +0300 + + Avoid alloca() in headerAddI18NString() + +commit cde5bfe5180906783ca26257e05349d82f8d9272 +Author: Panu Matilainen +Date: Tue Apr 29 12:40:03 2008 +0300 + + This code has been commented out since -99, time to let go... + +commit b2e875be7822947a5a9db063a234e67fd5f2261c +Author: Panu Matilainen +Date: Tue Apr 29 11:54:44 2008 +0300 + + Eliminate remaining alloca() in rpmAddSignature() + +commit 5e775226b6d11fc81022971c06d14ffda3b2e6cb +Author: Panu Matilainen +Date: Tue Apr 29 11:53:13 2008 +0300 + + Plug memleaks in signature generation + +commit 059719a8fe75ade2d4c12f880cc5d9fb3a1cd140 +Author: Panu Matilainen +Date: Tue Apr 29 11:35:30 2008 +0300 + + Avoid alloca() in rpmtsSetRootDir() + +commit 4114a51af8e2bbdbe0a243639be1bd496c469885 +Author: Panu Matilainen +Date: Tue Apr 29 11:26:00 2008 +0300 + + Avoid alloca() in rpmDetectPGPVersion() + - the whole detection is hysterical and could/should probably be killed + but what the heck... + +commit e80494b132dfd3c48bff1e03ad5b2f0f8900274c +Author: Panu Matilainen +Date: Tue Apr 29 11:24:25 2008 +0300 + + Avoid alloca() in makeGPGSignature() + +commit f438a06cb286fe36ce7cd5887fe49271134b10cf +Author: Panu Matilainen +Date: Tue Apr 29 11:16:46 2008 +0300 + + Avoid unchecked stpcpy() to static sized buf from alloca() + +commit cdcda7408ab9f56bfc0d39cf553f92a92390a83a +Author: Panu Matilainen +Date: Tue Apr 29 11:12:15 2008 +0300 + + Avoid alloca() in rpmtsInitIterator() + +commit dee823bf5022bde263da195458f7670581aefef5 +Author: Panu Matilainen +Date: Tue Apr 29 11:02:41 2008 +0300 + + Read "canonvendor" macros by default again + - the whole vendor etc stuff needs rethinking etc, but for now this "works" + +commit ad9d933514a6ab5015bccf7a7022f0d2319deab7 +Author: Panu Matilainen +Date: Tue Apr 29 10:40:56 2008 +0300 + + Avoid alloca() in legacyRetrofit() + +commit 2c12725620193da7078693cb893c3dab152a0dfa +Author: Panu Matilainen +Date: Tue Apr 29 10:34:54 2008 +0300 + + Use rpmioSlurp() for reading in rpmrc's + - have doReadRC() do the opening of files instead of caller + - always expand rc filename on entry, simplifies includes too + - streamline exit paths + +commit 10b2d1300b25e47a525666fb2fc4564fa4cfe13e +Author: Panu Matilainen +Date: Tue Apr 29 09:59:56 2008 +0300 + + Use rpmGlob() for expanding rcfiles globs + - avoids static filename buffer and simplifies things quite a bit + +commit eff99d08ac16fd37d53bb1baf808aadaa1e99743 +Author: Jindrich Novy +Date: Mon Apr 28 17:30:25 2008 +0200 + + Rewrite rpmioMkpath() + +commit b1c39e29cf1a1ad464a349aeb93b2e5d6ca2b89f +Author: Panu Matilainen +Date: Mon Apr 28 22:25:47 2008 +0300 + + genCpioListAndHeader() indentation fixes, no other changes + +commit 4201d351b44deea108bffa74ca61d4aa4c0a611e +Author: Panu Matilainen +Date: Mon Apr 28 21:58:26 2008 +0300 + + Allocate buffer for %doc filenames dynamically + +commit a0797f0237e42556400f7107108f1687bcf097e2 +Author: Panu Matilainen +Date: Mon Apr 28 21:37:47 2008 +0300 + + Remove unnecessary block which just messes up indentation + +commit e3a2ab3269706336b4a5692ccd4563a4bc32a730 +Author: Panu Matilainen +Date: Mon Apr 28 21:35:26 2008 +0300 + + Set processingFailed just once + +commit bae8f0ba0558436ea3bcc7a4f646204333e619ca +Author: Panu Matilainen +Date: Mon Apr 28 21:18:00 2008 +0300 + + Don't leak memory on failure in checkForValidArchitectures() + +commit 04d0b1857ce2f15490938bb8608ecc0d6b6472f5 +Author: Panu Matilainen +Date: Mon Apr 28 20:05:07 2008 +0300 + + Remove unused alloca_strdup() macro + +commit b22712816cff6ee572056cb55c5d256a33ae1778 +Author: Panu Matilainen +Date: Mon Apr 28 19:10:25 2008 +0300 + + Remove alloca() from strntoul() helper in cpio + - only small (< 10 chars) buffers from struct cpioCrcPhysicalHeader are + ever passed in, tmp buffer on stack is safe + +commit bbc89fbd350a27e296171f6eb973143662c88214 +Author: Jindrich Novy +Date: Mon Apr 28 15:59:46 2008 +0200 + + Get rid of string hackery in rpmdb-py.c + +commit e22ee464765a40549e35fa754f1c4b018b5901b2 +Author: Jindrich Novy +Date: Mon Apr 28 15:42:04 2008 +0200 + + Remove alloca() from argv.c + +commit 476d19ca290d04c05a454873d67f45a8f498e98b +Author: Panu Matilainen +Date: Mon Apr 28 16:22:33 2008 +0300 + + Oops... + +commit e1a99d0e12003705376d065d1e471b5221d231de +Author: Panu Matilainen +Date: Mon Apr 28 16:03:44 2008 +0300 + + ..and for parseForLang() + - return rpmRC like the others + - avoid alloca() + - streamline exit paths + +commit c310e2b6a6cdd57b2ce83b197f2d93a5562e147b +Author: Panu Matilainen +Date: Mon Apr 28 16:00:16 2008 +0300 + + ..and the same for parseForConfig() + - streamline exists, avoid alloca() + +commit 1b61e468ad75e86bf75d34e78d7f59ca1b5e26a6 +Author: Panu Matilainen +Date: Mon Apr 28 15:57:32 2008 +0300 + + parseForAttr() tweaks + - streamline exit paths a bit + - replace alloca() with xmalloc() + - avoid messing q value while checking for white space + - return rpmRC like the others + +commit ea60f8ccb7de9302b84f2e8578ece00570756553 +Author: Panu Matilainen +Date: Mon Apr 28 15:50:15 2008 +0300 + + Avoid alloca() in parseForVerify(), streamline exit paths a bit + +commit 27ad1cfe07206b4bd7fed3631571ed7ef6d8fdd2 +Author: Panu Matilainen +Date: Mon Apr 28 15:41:55 2008 +0300 + + Avoid alloca() in parseForDev() + +commit 18bf8b8b8e246f2612ec16f56defbdbe21a45404 +Author: Jindrich Novy +Date: Mon Apr 28 14:08:35 2008 +0200 + + Oops, simplified it a little bit much, fixing + +commit 98259f8edbe3997f4153cecb4ce681bb64ef71d7 +Author: Panu Matilainen +Date: Mon Apr 28 14:47:12 2008 +0300 + + Avoid alloca() in rpmGetFilesystemUsage() + +commit 61f144522e830ac714679f2ed860d91ea387c3ee +Author: Panu Matilainen +Date: Mon Apr 28 14:42:10 2008 +0300 + + Avoid alloca() in getFilesystemList() + +commit 75a21293916e7b93b5059045a254ab8bb3ecc96f +Author: Jindrich Novy +Date: Mon Apr 28 13:41:45 2008 +0200 + + Remove remaining alloca() from rpmdb.c + +commit c729f98edf54306501096b7f45c55ca1f96373f0 +Author: Jindrich Novy +Date: Mon Apr 28 13:40:56 2008 +0200 + + Simplify dirName handling in rpmdbFindByFile() + +commit 811e7be604bc5f557ed5f3b7c711cc2322438761 +Author: Panu Matilainen +Date: Mon Apr 28 13:56:31 2008 +0300 + + Drop va_copy check, it's already done by C99 checks + +commit 48f19e86b56be0ae220ff1114711684dd04480bd +Author: Panu Matilainen +Date: Mon Apr 28 13:53:35 2008 +0300 + + Require C99 capable compiler in configure + - also enable C99 mode if not on by default + +commit cf767c71c57491e3fb159762da9ae86ebb828ef0 +Author: Jindrich Novy +Date: Mon Apr 28 12:50:24 2008 +0200 + + Remove alloca() ussage from rpmcache.c + +commit 39dcd57e7fbcc56baed1ac40f518f510b3ca7c32 +Author: Jindrich Novy +Date: Mon Apr 28 12:50:01 2008 +0200 + + Remove unused alloca'd variable + +commit 324eb182d71af8195df6a2dc52f39f4e1b62db55 +Author: Jindrich Novy +Date: Mon Apr 28 12:38:32 2008 +0200 + + Remove alloca() from build() + +commit dbaa9393a20cbbba39f7fa6ee47d375f4ef8862f +Author: Panu Matilainen +Date: Mon Apr 28 12:31:51 2008 +0300 + + Eliminate pointless alloca() of hsa struct + +commit 4b737f54118a0cae4cea75b667c568a8d24c2c33 +Author: Panu Matilainen +Date: Mon Apr 28 12:25:25 2008 +0300 + + Remove bogus/misleading return value of hsaInit() and hsaFini() + - they don't (de)allocate anything, just modify contents of hsa arg + +commit 2e833ba2c1eeb2113264c056435ae906a8c05a3b +Author: Panu Matilainen +Date: Mon Apr 28 12:22:33 2008 +0300 + + Remove useless hsa != NULL checks + - hsa has been already dereferenced before it's even checked for NULL in + both hsaInit() and hsaNext() + - they're just internal interfaces with limited number of callers, we know + hsa can't be NULL + +commit 4727c2a0aa9b489d187ce9ad3e035bf460071b59 +Author: Panu Matilainen +Date: Mon Apr 28 10:59:42 2008 +0300 + + Remove unused variable + +commit 80cb43fbec02340ec6a56e5a6a2c2a273aea9898 +Author: Panu Matilainen +Date: Sat Apr 26 14:41:58 2008 +0300 + + Eliminate pointless alloca() of entryInfo and indexEntry structs + +commit 4d0345558534bbeda0b6e3ed960192e0b9bd11e1 +Author: Panu Matilainen +Date: Sat Apr 26 15:05:50 2008 +0300 + + Eliminate pointless alloca() of local DBT structs + +commit 64b573d16682e61b134e287d74a18b22a669419b +Author: Panu Matilainen +Date: Sat Apr 26 15:02:33 2008 +0300 + + Eliminate pointless alloca() of struct fileIndexEntry struct + +commit 46409035b658d22baa01456a227ee9839d06a1da +Author: Panu Matilainen +Date: Sat Apr 26 14:59:09 2008 +0300 + + Eliminate pointless alloca() of availableIndexEntry struct. + +commit 88c06ccbf7ea2544ea38675646626532e6547f17 +Author: Panu Matilainen +Date: Sat Apr 26 14:51:20 2008 +0300 + + Eliminate pointless alloca()'s of local dirInfo struct + +commit 2a51abedaf8cc83fee37dccdf28888cc9baae1fb +Author: Panu Matilainen +Date: Sat Apr 26 14:27:30 2008 +0300 + + Eliminate pointless alloca() of entryInfo and indexEntry structs + +commit 7ee6ca9761b417e87f97cc8b4c20a3b4de1a5ef7 +Author: Panu Matilainen +Date: Sat Apr 26 14:21:22 2008 +0300 + + Eliminate pointless alloca() of local DBT structs. + +commit e96d841a591356dd8fc76c75b87684a1c2e69d18 +Author: Panu Matilainen +Date: Fri Apr 25 20:29:14 2008 +0300 + + Revert bunch of alloca() -> xcalloc() changes in rpmdb routines + - reverts the following commits: + 0b0dcd114028e1e2a00870917cf07a27858a30b1 + 71018d6d2d67b0e17c737e7a90cc6bb704e224ba + f6134083c29c6cbb3be255fadae47a03d35b09f1 + +commit f3ead2bb94d4d1451d35f52c4dede180f9895019 +Author: Panu Matilainen +Date: Fri Apr 25 15:39:04 2008 +0300 + + Replace alloca() + memset() with xcalloc() in runImmedTriggers() + +commit 8e4a5f88cecb6c9f577cff91317851bc94abd8e9 +Author: Panu Matilainen +Date: Fri Apr 25 15:37:09 2008 +0300 + + Avoid alloca() in markReplacedFiles() + +commit 8660bd61f6bbfa20635ef74827b36864d9ec0e7b +Author: Panu Matilainen +Date: Fri Apr 25 14:52:03 2008 +0300 + + Reduce alloca() use in relocateFileList() + - dirindexes and filelists can be *huge* + - filenames and such still allocated on stack, fix later... + +commit d49aaeb3b94a7e2e53137e09a517534b080ac444 +Author: Panu Matilainen +Date: Fri Apr 25 14:34:36 2008 +0300 + + Replace alloca() + memset() with xcalloc() in skipFiles() + +commit ccb9647d4b5c6255ff1b734d565b4873c67e0445 +Author: Panu Matilainen +Date: Fri Apr 25 14:07:31 2008 +0300 + + Avoid alloca() on links in printFileInfo() + - also avoid unnecessary nulling of perms, no point .. + +commit b046a85409cecc5d7efdb75185fe155e0e3e4293 +Author: Panu Matilainen +Date: Fri Apr 25 13:54:59 2008 +0300 + + Avoid alloca() in rpmInstall() + +commit 12ad8a5194168cf5213dc359283a8997c5501999 +Author: Panu Matilainen +Date: Fri Apr 25 13:39:44 2008 +0300 + + Simplify setPathDefault() + - use rpmGetPath() to get sanitized path, avoid alloca() + +commit a2addde0f041531a47dbb20ba8d8cc5a5de1488f +Author: Panu Matilainen +Date: Fri Apr 25 13:28:51 2008 +0300 + + Avoid alloca() in rpmteColorDS() + +commit eabf5f3583f10bd0f52c15ecedefec88efd2c670 +Author: Panu Matilainen +Date: Fri Apr 25 11:55:14 2008 +0300 + + Single point of exit for dateToTimet(), avoid alloca() + +commit f9a95483bb09672c9efdeba82c015c12dd6c7291 +Author: Panu Matilainen +Date: Fri Apr 25 11:45:35 2008 +0300 + + Simplify lookupPackage(), avoid alloca() + +commit c636733f3628ebf2e10cbf10dfbe7a52cc5e3fea +Author: Panu Matilainen +Date: Thu Apr 24 17:36:31 2008 +0300 + + Remove outdated comment, add a todo reminder + - callbacks for pkgs without files have been faked for some time now.. + +commit c55f6b0a939cb63a07cc9bf227b5b25372dee59e +Author: Panu Matilainen +Date: Thu Apr 24 16:48:32 2008 +0300 + + Might as well compare against tag shortname now that we have it + +commit d97ba0bcdc77c304726b96e9faa86b7c319e8346 +Author: Panu Matilainen +Date: Thu Apr 24 15:40:36 2008 +0300 + + Update translations for a change + +commit 14f39232e6c995b51e5d1b1e946306cbb3e63a5b +Author: Panu Matilainen +Date: Thu Apr 24 15:38:45 2008 +0300 + + Remove bogus const from rpmfi pre- and posttrans members + - they're always duped, scaremem or not + +commit 16a5cd02fd99cd2f6c82c550fae3afec769c217d +Author: Panu Matilainen +Date: Thu Apr 24 15:23:35 2008 +0300 + + Eliminate rpmtsi refcount debug junk from the API + +commit 3a74895f03e9fb0c217813aaec8e3b4c1e04a0b4 +Author: Panu Matilainen +Date: Thu Apr 24 15:16:03 2008 +0300 + + Update doxygen docs for rpmteNEVR() and friends + +commit 365ffe20a4f7a3bc3a25f313075f70233f854b6b +Author: Panu Matilainen +Date: Thu Apr 24 15:08:09 2008 +0300 + + Remove meaningless extern on function declarations in headers + +commit f4d12868e2a45b20fe9b3f763ce35a30623f3633 +Author: Panu Matilainen +Date: Thu Apr 24 14:56:27 2008 +0300 + + Add rpmteEVR() function + - seems like a useful thing to have + - use in ensureOlder() + +commit 4d35eeca1a1f203b404e5878d6ae6a4bec35966f +Author: Panu Matilainen +Date: Thu Apr 24 14:51:58 2008 +0300 + + I'm out of words for this one. + +commit 90ca5e5989ec289a51d2e1c7c8caa59063a6fb70 +Author: Panu Matilainen +Date: Thu Apr 24 13:23:22 2008 +0300 + + Check for chroot() result in rpmtsRun() + - bail out early if it fails instead of blindly continuing and potentially + messing in real root (chroot can fail for priviledged user too) + +commit 0ec3352e8b1b1f622e1577c67d0a3303422d4b77 +Author: Panu Matilainen +Date: Thu Apr 24 12:49:58 2008 +0300 + + Make verification with --root reliable (rhbz#434150) + - use chroot() instead of vain path manipulation games, otherwise we'll get + bogus results from users and groups not matching etc + - non-priviledged verification is unreliable anyway but running rpm under + fakechroot (unpriviledged) gives much better results than just prepending + root to paths + +commit 39b75d24cfe50e65ca940cc5466beb03c801d033 +Author: Panu Matilainen +Date: Thu Apr 24 12:03:45 2008 +0300 + + Force preloading of name service libraries early in initialization + - this used to be done in psm chroot operation, but we can end up chrooting + before that and without psm being involved + - don't bother with getpwnam() etc, a single gethostbyname() loads all + that we need + +commit ae929240b7643927bc8a317e7992272f69a00fe0 +Author: Panu Matilainen +Date: Tue Apr 22 16:08:43 2008 +0300 + + Relax spec permissions in tar build mode (rhbz#253648) + - mkstemp() can create the spec in overly protective mode (rpmlint whines), + relax up to what users umask permits + +commit 6e090dc5c5bdfad6f8a38d2a1efb47b361d98c7e +Author: Panu Matilainen +Date: Tue Apr 22 15:23:38 2008 +0300 + + Simplify rebuild path generation + +commit 338c9be61eef414ea361ac849bc1f926429957f6 +Author: Panu Matilainen +Date: Tue Apr 22 13:55:41 2008 +0300 + + More path manipulation craziness eliminated in rpmdbRemoveDatabase() + +commit 542cfb834305208beeb26e817de62ce26de9103a +Author: Panu Matilainen +Date: Tue Apr 22 13:44:10 2008 +0300 + + Eliminate wtf dbpath shuffling in rpmdbMoveDatabase() + - Just use rpmGetPath() to construct a clean, sanitized path from the + components. + - Previously it went to great lengths to ensure trailing / on dbpath, + catenate the paths with %s/%s/%s and then rpmCleanPath() to get rid + of the extra slashes just created. Eh. + +commit dfa18246308ca5c84fd642a8a3f4a6a0cf252cce +Author: Panu Matilainen +Date: Tue Apr 22 13:32:52 2008 +0300 + + Don't use alloca for struct stat, there's no need to. + +commit 045cef3286f164e47bcb38e6518861b07222ee9d +Author: Panu Matilainen +Date: Tue Apr 22 13:30:52 2008 +0300 + + Add rpmdb internal helper for cleaning up db4 environment, use it + +commit edc5c0ef84a93d19acecaaf9a07f4ea3e9d8fe39 +Author: Jindrich Novy +Date: Tue Apr 22 12:41:08 2008 +0200 + + Recognize lzma payload from its magic + - old lzma formats without magic aren't supported + +commit fa5c3f2e1025d1d1d34f3f09879a6dec75d2325e +Author: Jindrich Novy +Date: Tue Apr 22 12:39:55 2008 +0200 + + Prefer lzma's default -7 compression + +commit 94958a3bfb89393179b7af19ea62d4b1d25d32d2 +Author: Jindrich Novy +Date: Tue Apr 22 12:38:51 2008 +0200 + + Main lzma rpmio part based on SuSE patches, thanks for them! + +commit 3626f25462e1e63c226134dec254a19799dfced7 +Author: Jindrich Novy +Date: Tue Apr 22 12:37:18 2008 +0200 + + Handle lzma payload + +commit 3d8e0ef13a389c263e3867c20ce32ae088332c7b +Author: Jindrich Novy +Date: Tue Apr 22 12:36:27 2008 +0200 + + Check for lzma library in configure.ac and reference it in Makefile.am + +commit 341266ae26e6685d1d870b28533469c653355bb7 +Author: Jindrich Novy +Date: Tue Apr 22 12:32:59 2008 +0200 + + Allow lzma payload in writeRPM() + +commit 91123cd04354afadcf62ecf2b6aa069c8bee86d2 +Author: Panu Matilainen +Date: Mon Apr 21 12:39:18 2008 +0300 + + Rip i386-specific RDTSC support from rpmsw, use gettimeofday() everywhere + - we don't need accuracy beyond what gettimeofday() offers for bleeping + debugging benchmarks + - we especially don't need hw-specific magic asm voodoo to get unreliable + timing results (RDTSC isn't reliable with multi-core/hyperthreaded CPU's + etc etc) + +commit 4fc06030b80f3b7c2f6d5dd80d65091c19b70b22 +Author: Panu Matilainen +Date: Mon Apr 21 11:13:13 2008 +0300 + + Avoid %patch0 getting applied twice + +commit b80340761ff064469fa099a541e2f2128ca482c6 +Author: Panu Matilainen +Date: Mon Apr 21 10:59:31 2008 +0300 + + Retrofit RPMTAG_SOURCEPACKAGE to source rpms. + +commit d2406a7e1754e7a7dc8136d9132929df36e5f230 +Author: Panu Matilainen +Date: Mon Apr 21 10:33:02 2008 +0300 + + Use argvAppend() instead of manual reallocs, plug a leak from rpmGlob() + +commit fe42db7ab8647b534cd9d080e72944ba7e1fb938 +Author: Panu Matilainen +Date: Mon Apr 21 10:18:14 2008 +0300 + + Use argvNew() instead of manual xcalloc() + +commit 29faf5715517090a36e6597c4a4c3a12f0d2df9f +Author: Jindrich Novy +Date: Mon Apr 21 08:19:23 2008 +0200 + + Allow setting fuzz factor to 0 + - use --fuzz=num instead of -Fnum or -F num to be sure + /usr/bin/patch won't complain + +commit 3dad7b6f0f463d23518f01543da9b958c6fc12f0 +Author: Jindrich Novy +Date: Sun Apr 20 12:17:37 2008 +0200 + + Don't use static buffers + +commit cee73cdc0b165a4044795accde68bf37a7684125 +Author: Jindrich Novy +Date: Fri Apr 18 20:46:56 2008 +0200 + + Fail if it is impossible to chdir to directory to run helper script in + +commit 12d3a07710543a72cdc1d46a287051dda53f38a3 +Author: Jindrich Novy +Date: Fri Apr 18 19:45:10 2008 +0200 + + Fix find-requires (rhbz#443015), thanks to Bill Nottingham + +commit 3d7db31479c1cf72fdec31bffe207b2a82068210 +Author: Panu Matilainen +Date: Sun Apr 20 22:07:53 2008 +0300 + + Sanitize + simplify %patch "macro" parsing + - Use popt for parsing %patch options, give accurate error messages for + invalid options instead of bogosity like "bad %patch arg: %build" + - Store all the variants we can get patch numbers into argv to avoid + special cases when passing to doPatch(), this has the added bonus + of removing the 1024 patches per line-limit (as if somebody cared) + +commit d35cec6ab24b1d52bfaf953e3174b53f3d1170de +Author: Panu Matilainen +Date: Sun Apr 20 16:38:29 2008 +0300 + + Single exit point for doPatchMacro() + - assuming failure avoids several redundant free() + return RPMRC_FAILS + +commit 36cfff298b22ea852f379766dd7cf92ede486e3b +Author: Panu Matilainen +Date: Sat Apr 19 18:56:38 2008 +0300 + + Remove ugly hardcoded docDirs list, use a macro instead + - %__docdir_path contains a colon-delimited list of documentation dirs, + macros expanded before use + - dynamically allocate docDirs as needed using an argv array, removes + the hardcoded MAXDOCDIRS limit on docdirs (not that it matters much) + +commit 099d00de3b59052800b4e78665ccafc896d7cbc4 +Author: Panu Matilainen +Date: Sat Apr 19 17:09:43 2008 +0300 + + Avoid entirely silly rpmio FD_t use in processPackageFiles() + - since we just convert it to FILE anyway, no much point in using + Fopen() then + - additionally remember to close the file if expandMacros() fails + +commit 1b972af8a6698b62a0c0d0818c6798aaad386b70 +Author: Panu Matilainen +Date: Sat Apr 19 16:58:55 2008 +0300 + + Change rpmGlob() argvPtr type to ARGV_t to make it obvious what it is + - also fix incorrect doxygen commentary, it wasn't a contiguous blob + before either + +commit 2072bd1334846e4d005c2e07949439f391ea6173 +Author: Panu Matilainen +Date: Sat Apr 19 16:53:29 2008 +0300 + + Use argvFree() instead of manual free in loop + +commit 9ae911eefedf9618202b6a76d670914119784464 +Author: Panu Matilainen +Date: Sat Apr 19 16:42:56 2008 +0300 + + Further simplify rpmInitMacros() + - Use argvSplit() for splitting the macro path to components instead of + manual pointer-parsery. + - If URL's are to be supported or accepted at all (previous code attempted + to skip them), ':' is a very poor delimiter character. + +commit e336146a9ed6b28016e0dff68ea6979c3c9e5866 +Author: Panu Matilainen +Date: Sat Apr 19 16:04:11 2008 +0300 + + Use argvFree() to free, well, an argv, instead of manual freeing + +commit 5ad7fbda008cba771e09fe305a9b9db3dc5c6f06 +Author: Panu Matilainen +Date: Sat Apr 19 15:58:47 2008 +0300 + + Simplify rpmGlob() a bit + - use argv*() routines instead of manual argv manipulation + +commit cebd0812bc5b1a6d13a6e0937081f728750d016c +Author: Panu Matilainen +Date: Sat Apr 19 13:42:04 2008 +0300 + + Dynamically allocate buffers in rpmGetPath() + - avoid unbounded copying to static sized buffer + - use rpmExpand() instead of expandMacros() which requires preallocated + buffer when we've no idea of expanded size + +commit 601b4d0e6aff2630fa17269d063106d8d921d4b0 +Author: Panu Matilainen +Date: Fri Apr 18 16:14:15 2008 +0300 + + Avoid entirely silly rpmio FD_t use + - rdcl() converts to FILE internally anyway, might as well use fopen() + to begin with... + +commit 38a975b157b504f1234b37c17bc072dd1eb291f6 +Author: Panu Matilainen +Date: Fri Apr 18 15:39:07 2008 +0300 + + Remove unnecessary xstrdup() of dynamically allocated buffer + - leftover from when target buffer was static... + +commit 94e64fec18f874383f9cbc8eda568664899d658f +Author: Panu Matilainen +Date: Fri Apr 18 15:15:05 2008 +0300 + + Cosmetics: group operations more logically... + +commit 2d8a27ed1677da5c6a633a4fb757fc43bef4aeb9 +Author: Panu Matilainen +Date: Fri Apr 18 14:54:58 2008 +0300 + + Simplify macro option + argument processing + - eliminate ninja-voodoo pointer-hackery parsing, replace argvSplit() + + argvJoin() and friends + - eliminate static sized buffers from the processing + +commit 2c0f7b54ad8e820ec357c2cad08b8d31fa601ead +Author: Panu Matilainen +Date: Fri Apr 18 12:36:02 2008 +0300 + + Add argvJoin() for combining an argv array into a string + +commit 8058de50b24f548df74df0943cb3a29c77fbde61 +Author: Jindrich Novy +Date: Fri Apr 18 08:53:43 2008 +0200 + + Put '\0' to the end of xmalloc'd string to avoid surprises + +commit 94ff22b129aeb31c38848231e40f87aa4a5613a1 +Author: Panu Matilainen +Date: Thu Apr 17 21:56:54 2008 +0300 + + Eliminate splitString() and freeSplitString() + - use ARGV_t instead, it does the same and more... + +commit 7800911bb0281ab568af767c74a664b9c1215464 +Author: Panu Matilainen +Date: Thu Apr 17 19:21:00 2008 +0300 + + Accidental typo introduced to rpmrc.c + - seems to be one of those days, sigh + +commit 9cf9ad7bc919451f65881c2dd8bc772ba722d7fa +Author: Panu Matilainen +Date: Thu Apr 17 19:19:07 2008 +0300 + + Fix dumb off-by-one errors introduced by rstrlcpy() changes + +commit d4247aadff9dba401dd00f0e4e06969323b9b6f0 +Author: Panu Matilainen +Date: Thu Apr 17 18:41:53 2008 +0300 + + Bunch of strncpy/strcpy -> rstrlcpy() converts in rpmrc + +commit 834d2d2691fa3b645902bbcd1db9310c14778a69 +Author: Panu Matilainen +Date: Thu Apr 17 18:15:34 2008 +0300 + + Add missing include + +commit 85c6b8e5f9007e1cdf77e043079c774792d8aa52 +Author: Panu Matilainen +Date: Thu Apr 17 18:13:52 2008 +0300 + + Use rstrlcpy() for various parseForFoo() functions in build + - just avoids manual termination, no new fixes here.. + +commit 567c0abc7eb558318077feed34a1edde9fafcaf0 +Author: Panu Matilainen +Date: Thu Apr 17 18:04:28 2008 +0300 + + Use rstrlcpy() for parseRCPOT() version + release + - just avoids manual zero-termination + +commit ba85f103e59db924f4dfba7de56bcba8ae311e3c +Author: Panu Matilainen +Date: Thu Apr 17 17:39:08 2008 +0300 + + Use rstrlcpy() for printFileInfo() username + group fields + - just avoids having to manually ensure zero-termination + +commit 805e294fd638bd3585400e317be81207e4a04388 +Author: Panu Matilainen +Date: Thu Apr 17 17:35:57 2008 +0300 + + Make sure lead->name is zero-terminated + +commit 119b912773e3c41a95f31656ccbd59bbc307c915 +Author: Panu Matilainen +Date: Thu Apr 17 17:33:57 2008 +0300 + + Add rstrlcpy() string helper function + - adopted from strlcpy() function of OpenBSD originally developed by + Todd C. Miller + +commit 02939c15fa5441aff46c5f2cbf28086fe67d4d24 +Author: Panu Matilainen +Date: Thu Apr 17 17:33:30 2008 +0300 + + More accurate filtering of .rpmnew etc when reading macros + - strstr() can give false positives, use rpmFileHasSuffix() instead + +commit 64e0af29bd38a1f8ca6573ec9734ae475ed8909b +Author: Panu Matilainen +Date: Thu Apr 17 11:09:03 2008 +0300 + + Have gcc check for NULL terminated arglist in rstrscat + +commit 9a6be3e53feb1a32e446419c6fef910eeca74f01 +Author: Jindrich Novy +Date: Thu Apr 17 09:20:20 2008 +0200 + + Use sizeof() instead of direct element count in rpmluaGetVar() + +commit bf3a8e6cd9253d2321a5d8c3665fa591eca3aae8 +Author: Jindrich Novy +Date: Thu Apr 17 09:01:28 2008 +0200 + + Don't copy unknown number of args to buffer of fixed size in initGlobs() + +commit ea8029e4e95e4106ccb6f9b6407c3856a281f312 +Author: Jindrich Novy +Date: Thu Apr 17 08:57:43 2008 +0200 + + Introduce rstrscat() + - concatenates NULL terminated strings to newly (re)allocated memory + - purpose is to prevent overflows caused by writing unknown-sized stuff + to static arrays + +commit f829c42f075bfac82b08859a476579446d594518 +Author: Panu Matilainen +Date: Wed Apr 16 15:54:40 2008 +0300 + + Fixup leftovers from lua/local -> luaext/ move + +commit 2eb20ad3596131420a1f90695f4bedf73067816b +Author: Panu Matilainen +Date: Wed Apr 16 15:52:06 2008 +0300 + + Document external Lua requirement + +commit 2ecd8fc22d897cffe433820205036b493fd012f2 +Author: Panu Matilainen +Date: Wed Apr 16 15:35:09 2008 +0300 + + Convert to Lua 5.1 library loading style + - luaL_openlibs() to pull in all standard libs + - local extensions need to be registered by calling through Lua + +commit 1c979525dc1341c7fb812bf84d167467094de1ec +Author: Panu Matilainen +Date: Wed Apr 16 15:25:26 2008 +0300 + + Add modemuncher + lua init stuff to extra dist + - modemuncher.c gets included from lposix.c, urks + +commit d48e6c8380ebd1f8d4d4f2c80237dc1488da4721 +Author: Panu Matilainen +Date: Wed Apr 16 15:13:25 2008 +0300 + + Start phasing out internal copy of Lua + - don't build internal copy of Lua + - move 3rd party extensions (posix and rexlib) to toplevel luaext/ + directory, built by default (unless --without-lua specified) + - auto*foo checks for external Lua + - minimal tweaks to lposix.c and rpmlua.c to get them build with Lua 5.1 + +commit 23f6917b10b6579f39199e4cf831bb13fc596824 +Author: Jindrich Novy +Date: Wed Apr 16 13:40:05 2008 +0200 + + Don't use mktemp(), we are sure mkstemp() is available now + +commit 58fdb16e75b2200ba509f726f938493eb43d54ea +Author: Jindrich Novy +Date: Wed Apr 16 13:01:06 2008 +0200 + + Require mkstemp() + - mktemp() and tempnam() are dangerous + +commit 0662b2f5127df7c07e379c117085236f90f49b42 +Author: Jindrich Novy +Date: Wed Apr 16 11:16:31 2008 +0200 + + Kill queryHeader(), it is not used and buggy + +commit 004c0e50b42ba10141f20eb3bf2756fd70282f2c +Author: Jindrich Novy +Date: Wed Apr 16 10:24:02 2008 +0200 + + Kill useless initialization to "(unkown error)" + +commit 9e7d602e85440dd79054dfc440aa14bba841a830 +Author: Panu Matilainen +Date: Wed Apr 16 11:20:03 2008 +0300 + + Plug a memleak from pgpHexStr() in showQueryPackage() + - fmd5 is only needed in a single place, move alloc+free there to avoid + having to deal with the umphteen continue cases + +commit 36cbcd454eed7a4158f49cfa55e2f817d5e22bd9 +Author: Jindrich Novy +Date: Wed Apr 16 10:11:37 2008 +0200 + + Don't try to print buf if it's empty + +commit ce12b9a112ea067d8fb2e3960d95a4468555e33b +Author: Jindrich Novy +Date: Wed Apr 16 09:37:55 2008 +0200 + + Remove insecure hacks in query.c + - remove useless flushBuffer() function + - update printFileInfo() to not to write to unknown sized buffer, + but to print stuff which is its sole purpose + +commit e50ff40c22e5cc4e7cdfecbb9808ad5ce3d6b77c +Author: Jindrich Novy +Date: Wed Apr 16 08:28:11 2008 +0200 + + Remove useless statements from showQueryPackage() + +commit 9a2b4cba0501235345ea42e068bff86bd17d15d3 +Author: Panu Matilainen +Date: Wed Apr 16 10:17:19 2008 +0300 + + Make headerNVR() just a special case of headerNEVRA() + +commit 72b200fe591bf13ecd238c1b3bae785a2907a0fc +Author: Panu Matilainen +Date: Wed Apr 16 10:10:25 2008 +0300 + + Oops, only free if allocated ;) + +commit 9ebe81639ab6f5449ad88818fdd111c68245a101 +Author: Panu Matilainen +Date: Wed Apr 16 10:06:56 2008 +0300 + + Plug a memory leak in armorFormat() + +commit 3ffbbeba1977caec65a826e408a433dddb7d2fbd +Author: Panu Matilainen +Date: Tue Apr 15 18:52:42 2008 +0300 + + Doxygen parameter name mismatch + +commit ecaa34a9dc564848f4f1bf3cd413b27da2b9c9ff +Author: Jindrich Novy +Date: Tue Apr 15 17:35:13 2008 +0200 + + Get rid of string hackery and overflows while rpm -V + +commit 0097e6fe952a6f39b99e4761ab613f99d34c142c +Author: Panu Matilainen +Date: Tue Apr 15 17:26:15 2008 +0300 + + Plug a memleak in pgpArmorWrap() + +commit d43ee53dff96926d3ac61c9a3cdc9251326e2790 +Author: Jindrich Novy +Date: Tue Apr 15 16:30:58 2008 +0200 + + Introduce rstrcat() + +commit f68f58975b27b724f363c86e11699af9fc05bee7 +Author: Panu Matilainen +Date: Tue Apr 15 13:27:43 2008 +0300 + + Make find-lang.sh --with-man brp-compress friendly (rhbz#440994) + + Patch from Ville Skyttä + +commit 21b6c0af17bf95cd00b63b2a935eb3bdf848ff7f +Author: Panu Matilainen +Date: Tue Apr 15 13:13:40 2008 +0300 + + Don't exempt *.jar.so.debug from buildroot checks (rhbz#442264) + - jar-kludge no longer necessary... + + Patch from Ville Skyttä + +commit 627384f9e1e5342d09e1b06b9ac1822f76972d80 +Author: Jindrich Novy +Date: Tue Apr 15 09:47:38 2008 +0200 + + Remove rhnplatform, cvsid/svnid, serial and copyright tag from rpmbuild + +commit 55ebf2c079aa992f891ecc87d3f7aba0a844650d +Author: Panu Matilainen +Date: Tue Apr 15 09:16:05 2008 +0300 + + Abort build on unknown payload compressor + - explicitly check for supported rpmio names, bail if not supported + +commit a2bb439b3ca2789f21b1e6efcbe0ffbaad8aca48 +Author: Panu Matilainen +Date: Mon Apr 14 19:32:51 2008 +0300 + + Avoid unnecessary rpmio_flags alloc+free in psm + +commit 180a34737203f0cc1e0d843915387ce9ffeb894c +Author: Panu Matilainen +Date: Mon Apr 14 18:15:39 2008 +0300 + + Fix indentation, no functional changes + +commit 9309a4bd097971fe68b6bfa50d73614baa4844fe +Author: Panu Matilainen +Date: Mon Apr 14 18:13:06 2008 +0300 + + Remove glibc upgrade-helper kludge, only necessary for some ancient RHEL + +commit a4bbf08f4d365f2d5ff746917cb8cfa66c1d3c51 +Author: Panu Matilainen +Date: Mon Apr 14 18:12:18 2008 +0300 + + Lose useless variable + +commit 7401ab6a7b0de775e16b371a1c98989cd3eb2cd5 +Author: Panu Matilainen +Date: Mon Apr 14 17:45:09 2008 +0300 + + Split scriptlet execv() preparations to separate function + - runScript() is way too big and still is, but this helps a bit... + +commit d6de2803fc0a2be2da06e1f6f0c2b197510a8a1a +Author: Panu Matilainen +Date: Mon Apr 14 16:22:28 2008 +0300 + + Use argvAddNum() for passing package count numbers for scriptlets + +commit 900cbb7d79a18fdf48964c395e038eabc38db43e +Author: Panu Matilainen +Date: Mon Apr 14 16:21:40 2008 +0300 + + Add argvAddNum() for adding integers to ARGV_t arrays + +commit d858e4ffa5937aed5bbccf0d4667e1eebd55c218 +Author: Panu Matilainen +Date: Mon Apr 14 16:01:06 2008 +0300 + + Use ARGV_t for passing around scriptlet args psm internally + - simplifies allocation and freeing while getting rid of alloca()'s + - runScript() needs to add arguments anyway, might as well pass in something + that *can* be modified without having play games with partial const, + partial alloca() contents in the argv + - removes the need for passing argc around + - (unrelated) move fi->h NULL check in runScript() to beginning *before* + we trie to access it, duh... + +commit 08375fa2bce124043954feb8c9cc8023004586bf +Author: Panu Matilainen +Date: Mon Apr 14 15:58:10 2008 +0300 + + Add argvNew() to create an empty argv array + - yes it's silly ;) + +commit 4e34fcc2bda4b6d18287981c1a053e9e4380caba +Author: Panu Matilainen +Date: Mon Apr 14 14:35:34 2008 +0300 + + Avoid redundant script name formatting + - remove two points of return to simplify allocations.. + +commit 8444c6f997dd0eb2a26b6870768b5bd049247db9 +Author: Panu Matilainen +Date: Mon Apr 14 14:33:23 2008 +0300 + + Reduce #ifdef clutter + +commit 647ff16b50dab2172d25b62dedb7db15a38811ea +Author: Panu Matilainen +Date: Mon Apr 14 14:31:51 2008 +0300 + + Streamline lua scriptlet name formatting - just do it once + +commit 1eb29bc44d01192dc050fa9bc4a4b0a6a25726d1 +Author: Panu Matilainen +Date: Mon Apr 14 14:29:07 2008 +0300 + + Move legacy prefix compat thing out of the loop + - additionally fix indentation, move block local variable def there... + +commit 25f15fca9e1c25bbceee362be7016108a26eeaeb +Author: Panu Matilainen +Date: Mon Apr 14 14:27:29 2008 +0300 + + Don't bother calculating max prefix lengths + - no longer needed, prefixBuf is dynamically allocated as needed + +commit 2c2d98a08dc3a9e21014b3173102f73064fc39ae +Author: Jindrich Novy +Date: Mon Apr 14 13:07:58 2008 +0200 + + Prevent buffer overflow in readKeys() + +commit 641046e4da826b5845703cdee23227dc344b0c7a +Author: Jindrich Novy +Date: Fri Apr 11 15:52:56 2008 +0200 + + Use dynamic allocation in rpmlibNeedsFeature() + +commit 3928bbc25bfe554767590abe009bc40b4776d49d +Author: Jindrich Novy +Date: Fri Apr 11 15:44:04 2008 +0200 + + Don't warn about BuildRoot being "/" while it is actually empty + +commit 674194a9e7f7e0430f73f438f42472b6983afe83 +Author: Panu Matilainen +Date: Fri Apr 11 11:45:35 2008 +0300 + + Simplify url retrieval in rpmInstall() + - use rpmMkTemp() instead of manual kludgery to static buffer + +commit 769bc86d6d9372c1b3e804309227a0e8554d72d1 +Author: Panu Matilainen +Date: Fri Apr 11 11:18:25 2008 +0300 + + Simplify url io a lot + - move urlhelper call to urlGetFile() + - have urlOpen() call urlGetFile() instead of going the other way around + and causing local copies and all sorts of craziness in the process + +commit 78f38f9be08270170bf58e066db263bdde54f5da +Author: Panu Matilainen +Date: Fri Apr 11 09:38:44 2008 +0300 + + Remove #ifdef NOTYET junk + +commit fde961e25b09806e501dd214059ced1b07c1b49c +Author: Panu Matilainen +Date: Fri Apr 11 09:05:05 2008 +0300 + + Rewrite rpmMkTempFile() for sanity + - Actually use mkstemp() for creating the temp file and return a FD_t + dupped from the file descriptor returned by mkstemp(). + - Simplify the interface while at it. + - Change callers for the new interface. + - Yes we now require mkstemp() to work, mkstemp() is in POSIX.1-2001 and + this is year 2008... + +commit 48ff62a5291458ed1181cd6c31dcadb193ad2f8e +Author: Panu Matilainen +Date: Thu Apr 10 19:36:03 2008 +0300 + + First crack at adding ISA provides to packages (rhbz#235755) + + - Horrible kludgery to get the isa names and bits into platform specific + macros from installplatform script. That beast needs to die. I mean really + + - In build, add provides: name(isa) = evr automatically when it makes + sense (similarly to name = evr provides). ISA consists of ISA name and + bitness (or wordsize). This can be used to correctly + express multilib dependencies without resorting to (expensive!) file + dependency kludges, eg for dlopen()'ed libraries where automatic + dep extraction doesn't force dependency on 32bit vs 64bit version, you + can now use: + Requires: foo-plugin%{?_isa} + This expands to foo-plugin(x86-32) for i?86 packages, foo-plugin(x86-64) + to x86_64 etc, and permits spec to be shared with older distros which + don't have ISA provides. + + - The same could be expressed with "canon arch" just as well, but + using the ISA to differentiate from %_arch and the like: + eg i386 could be used instead of x86-32 but it's overloaded with meanings + (the actual i386 processor vs i386 compatible cpu family etc) + +commit af4eea99e311171e3dd771c9b2ff59faa964d208 +Author: Panu Matilainen +Date: Thu Apr 10 16:07:47 2008 +0300 + + Avoid exporting providePackageNVR() in the library + +commit d39cc1dfda9a18a3f3254e8d9ce240ace48c6856 +Author: Panu Matilainen +Date: Thu Apr 10 16:04:12 2008 +0300 + + Just call legacyRetrofit() instead of combined compress + provide retrofits + +commit c01ef8228d373f9232b47ac0915bb5786e5266cf +Author: Panu Matilainen +Date: Thu Apr 10 15:52:36 2008 +0300 + + Add a static, far simpler addPackageProvides() to build + - use instead of providePackageNVR() which needs to deal with all sorts + of hysteric "rpm 3.0.2 did this but 3.0.5 didn't" issues + +commit 61dff28fa4d9169fd71ccd7a9f83c1186037c3db +Author: Jindrich Novy +Date: Thu Apr 10 14:42:50 2008 +0200 + + Call rpmReadConfigFiles() in rpm2cpio so that rpm2cpio won't complain like: + warning: Unknown system: (null) + warning: Please contact rpm-maint@lists.rpm.org + +commit f350b07096e872eb135df68f2906eae2aa306726 +Author: Panu Matilainen +Date: Thu Apr 10 11:25:59 2008 +0300 + + Remove unnecessary providePackageNVR() from writeRPM() + - packageBinaries() already calls providePackageNVR(), no need to do it twice + +commit de8250d2dfe74cdd0637dda3000b0ff6d7e730be +Author: Panu Matilainen +Date: Thu Apr 10 11:19:40 2008 +0300 + + Unbreak srpm generation broken by 6c4b0cbd93709a0fa18af1ef07af44da585bb5f6 + - cpio path in source packages is the basename of the file, make this + obvious by using basename() instead of pointer games + +commit 61b008b5662652ac8ea05ea76611b73efe9cf656 +Author: Jindrich Novy +Date: Wed Apr 9 13:05:45 2008 +0200 + + Don't use stack allocations in rpm2cpio when not needed + +commit 0b0dcd114028e1e2a00870917cf07a27858a30b1 +Author: Panu Matilainen +Date: Wed Apr 9 13:54:39 2008 +0300 + + Replace alloca+memset with xcalloc() in rpmdbRemove() + - return value is suspect: should return "ret" instead of 0 at exit + depending on what happened in removal but preserving previous behavior + for now... + +commit 71018d6d2d67b0e17c737e7a90cc6bb704e224ba +Author: Panu Matilainen +Date: Wed Apr 9 13:48:00 2008 +0300 + + Replace alloca+memset with xcalloc() in rpmdbAdd() + +commit f6134083c29c6cbb3be255fadae47a03d35b09f1 +Author: Panu Matilainen +Date: Wed Apr 9 13:47:29 2008 +0300 + + Replace alloca+memset with xcalloc() in rpmdbCountPackages() + +commit 2dad3ee0a9ff1ad4a247d863e82c12cd66df3d89 +Author: Panu Matilainen +Date: Wed Apr 9 13:33:23 2008 +0300 + + Tonne of indentation + other formatting corrections to rpmdb.c + - no functional changes + +commit b54d8bc2432d2fb85fe5c768df4f2cdcbe22b73e +Author: Panu Matilainen +Date: Wed Apr 9 13:19:26 2008 +0300 + + Remove dead code + +commit 3a5a6ef0fa1577ca9147a846982cd9f48eb52a82 +Author: Panu Matilainen +Date: Wed Apr 9 13:17:01 2008 +0300 + + Report full nevra in rpmdb remove debug message + +commit 2191e9fe72d18202a8a9e28c818b25f10ed635ab +Author: Panu Matilainen +Date: Wed Apr 9 12:47:03 2008 +0300 + + Plug memleak from signature verification now returning malloced msg + +commit 03c6b4e934600fbe488c12d9271b72f676a4803a +Author: Panu Matilainen +Date: Wed Apr 9 12:36:38 2008 +0300 + + Simplify addTE() + - eliminate wtf parsing of NEVR string which doesn't actually handle epoch + - use NEVR and NEVRA formatting from headerGetN*() instead of doubling the + work here + +commit aa04d0cef3854ddc3d2f6eb316c1b7780dc1b53a +Author: Panu Matilainen +Date: Wed Apr 9 12:17:36 2008 +0300 + + Make headerGetNEVRA() return "src" as the arch of source packages + +commit e7ed105c6723d7820ffd9fa917de1fdac47590a0 +Author: Panu Matilainen +Date: Wed Apr 9 11:17:43 2008 +0300 + + Initialize pointers, lowercase local variable + +commit 994ccffd9dee5d25da4fe4be1fa4d4b9baeea990 +Author: Panu Matilainen +Date: Wed Apr 9 11:16:24 2008 +0300 + + Rewrite headerGetN*() for simplicity + - eliminate stpcpy() games + - reuse evr formatting from headerGetEVR() instead of doing it over and + over again everywhere + +commit 7a64fb564a7c79e47a3ad86d17b5c671a64e44c4 +Author: Jindrich Novy +Date: Wed Apr 9 10:10:17 2008 +0200 + + Fix buffer overflow in verifyDSASignature() + - caused by assumption that sizeof(size_t) is always 4 (credited to jbj) + +commit 3d717d5c45ac17dcd3e0ae82f8f7d9846b1a5d97 +Author: Panu Matilainen +Date: Wed Apr 9 10:37:34 2008 +0300 + + Replace bunch of wtf evr formatters with headerGetNVR() + +commit f380230a0316c02fd6864b6bba688e2e340b1d7d +Author: Panu Matilainen +Date: Wed Apr 9 10:36:29 2008 +0300 + + Add headerGetEVR() convenience function + - return formatted evr string + optionally pointer to name + +commit 99322592d79cda46ad4e8f62d9613e2e588dc523 +Author: Panu Matilainen +Date: Wed Apr 9 10:32:44 2008 +0300 + + Make headerNEVRA() actually return epoch too + - ...but epoch is an integer type in headers, change proto to match that + +commit 2cfe2d3a3b73889584a0b165b07e8088a312e5c0 +Author: Panu Matilainen +Date: Wed Apr 9 09:00:44 2008 +0300 + + And one more url->path rename for local variable... + +commit 6c4b0cbd93709a0fa18af1ef07af44da585bb5f6 +Author: Panu Matilainen +Date: Wed Apr 9 08:58:46 2008 +0300 + + Rip the last remaining disk/file URL stuff in processSourceFiles() + +commit 7c0b42146764c9ece60039de9cc1be36adb0f71c +Author: Panu Matilainen +Date: Wed Apr 9 08:56:27 2008 +0300 + + And more url ripping in build internals... (addFile) + +commit e92d22e279fe01d84e339a45755eb9e8d989388d +Author: Panu Matilainen +Date: Wed Apr 9 08:37:15 2008 +0300 + + URL -> path renames continued... (build internal) + +commit e89e7ba72fa9e710cef780ed5931ed2c2d0603a8 +Author: Panu Matilainen +Date: Wed Apr 9 08:25:46 2008 +0300 + + Rename FileListRec_s disk + cpio path variables + - on-disk is diskPath, rename previous fileURL to cpioPath to make it + more obvious it's the path in the package cpio + - neither is an URL + +commit 29674e476a9477cdf8c7c38743b6441eacb5f011 +Author: Panu Matilainen +Date: Fri Apr 4 20:37:48 2008 +0300 + + Yet more url ripping - buildroot is never an url + - this is a bit nasty as it changes public interfaces but rename to make + it explicit they're just plain paths, not urls + +commit ddf46496b38cd30df54950816f6379239259d2b9 +Author: Panu Matilainen +Date: Wed Apr 9 08:17:48 2008 +0300 + + Remove remote host stuff from build doScript() + +commit 0e74fc55c7202eb975a8de878c4731b587d7a994 +Author: Panu Matilainen +Date: Fri Apr 4 19:53:40 2008 +0300 + + More url-path ripping in build/ + - processBinaryFile() and processMetadataFile() don't need steenking urls + +commit d121a41db20392f24f85126a99f7736f614a660b +Author: Panu Matilainen +Date: Tue Apr 8 17:15:32 2008 +0300 + + Whoops.. gpg-pubkey "release" on import got busted accidentally + +commit b2cfc89de58d856c4c1c26a3a24b91610b38b243 +Author: Panu Matilainen +Date: Tue Apr 8 15:36:46 2008 +0300 + + Simplify rpmtsImportPubkey() a bit + +commit 1721614d96499d0cf7bc1a31a133fa1c777aa841 +Author: Jindrich Novy +Date: Tue Apr 8 13:48:39 2008 +0200 + + Rewrite pgpArmorWrap(), the former one was insecure/hackish + +commit 090782c3c73f1b95fa6a033f73ce3cb4de38b539 +Author: Panu Matilainen +Date: Tue Apr 8 14:11:47 2008 +0300 + + Collapse unknown / unsupport RSA sigtypes into one fallthrough + +commit 45f5e135aee276185eda68642406ec6917315006 +Author: Panu Matilainen +Date: Tue Apr 8 14:06:07 2008 +0300 + + verifyRSASignature() buffer & other fixes + - avoid stpcpy() into static sized buffer + - avoid potential sigp NULL-dereferences + +commit 08b4a09eef6da8f11f992f2461e67fdc8f256fc9 +Author: Panu Matilainen +Date: Tue Apr 8 13:27:59 2008 +0300 + + verifyDSASignature() buffer & other fixes + - avoid stpcpy() into static sized buffer + - avoid potential sigp NULL-dereference + +commit 7fe19f0a2a1a8bc6e2940d042b0478282b4887ce +Author: Panu Matilainen +Date: Tue Apr 8 13:23:01 2008 +0300 + + verifyDSASignature() buffer & other fixes + - avoid stpcpy() into static sized buffer + - avoid potential sigp NULL-dereference + +commit 2bb4618fa107dc6b02a4eb64e42d0021eca2a9e9 +Author: Panu Matilainen +Date: Tue Apr 8 12:35:36 2008 +0300 + + Eliminate four copy-paste versions of nibble(), stick to rpmstring.h + - the one in signature.c wasn't even used... + +commit 6f619206fd13c6f0d90f143ec829312da4f81c48 +Author: Panu Matilainen +Date: Mon Apr 7 16:13:29 2008 +0300 + + Eep, fix bunch of segfaults and other fun from previous commits + - leftover stpcpy()'s to non-malloced addresses and other "minor" + issues in verify*Signature() stpcpy() elimination ;) + +commit 69c71c2f61a487f3350afb7190dad5df01280eda +Author: Panu Matilainen +Date: Mon Apr 7 15:07:08 2008 +0300 + + Avoid stpcpy() to static sized buffer in verifySizeSignature() + +commit 4441084171df6a70e27321e9b371cd8f662a67ad +Author: Panu Matilainen +Date: Mon Apr 7 15:01:49 2008 +0300 + + Avoid stpcpy() to static sized buffer in verifyMD5Signature() + +commit 5a0880a5de5f9c00447d200846cf887d32755df5 +Author: Panu Matilainen +Date: Mon Apr 7 14:55:36 2008 +0300 + + Avoid stpcpy() to static sized buffer in verifySHA1Signature() + +commit 5ef8b53108f41220602febbd2e10f3b76ab32b82 +Author: Panu Matilainen +Date: Mon Apr 7 14:04:00 2008 +0300 + + Eliminate several copy-paste hex converters, use pgpHexStr() instead + +commit a41079c692aa75e5e995aaf1e5c355edad5552d9 +Author: Panu Matilainen +Date: Mon Apr 7 13:51:20 2008 +0300 + + Uh, return allocated pointer, not the end of string... + +commit 9bb88f4088de792c2844357ad447470e76a7281a +Author: Panu Matilainen +Date: Mon Apr 7 13:37:56 2008 +0300 + + Remove static print buffer from pgpMpiStr(), return malloc'd data instead + - convert callers + - only rpmpgp.c internal needs, move it there and make static? + +commit 41a32765bde2cc346bba93da364e7bdeb985fcf9 +Author: Panu Matilainen +Date: Mon Apr 7 13:29:48 2008 +0300 + + Merge pgpHexCvt() into pgpHexPrt(), removing it from public headers + +commit 8909c054344834eb45f2b09c0abfcfa1be214ec4 +Author: Panu Matilainen +Date: Mon Apr 7 13:26:46 2008 +0300 + + Minimally convert all pgpHexCvt() users to use pgpHexStr() instead + +commit a3a1a45c5131fd1dd885cd73bb9f6a7ac1ddbfba +Author: Panu Matilainen +Date: Mon Apr 7 13:02:18 2008 +0300 + + Remove static print buffer from pgpHexStr, return malloc'ed memory instead + - inlined to get xmalloc() from system.h for consistent malloc fail behavior + - convert callers for new behavior, apart from some debug fprintf()'s + +commit a70823b99814cbef36ccb1a056f9ef1e97bd7ae2 +Author: Panu Matilainen +Date: Mon Apr 7 12:35:37 2008 +0300 + + argvPrint() doesn't modify argv, make it const + +commit 4e0ab74d8d7a1ee976b7010bd80135cf4a1c7d7a +Author: Panu Matilainen +Date: Mon Apr 7 12:34:07 2008 +0300 + + Add ARGI_const_t, use where appropriate + +commit c29adcee80825d79e7b522ee651360d1b9542539 +Author: Panu Matilainen +Date: Mon Apr 7 12:11:16 2008 +0300 + + ARGV_t const pendantry + - const on typedef'ed ARGV_t doesn't mean a thing, add a new, + (exec* compatible) ARGV_const_t and use where appropriate consistently in + argv.h, rpmcli.h etc + - popt's argv const is the wrong way around for exec() family, add explicit + ARGV_t casts on popGetArgs() uses where needed + - compiler silence, aaahh... + +commit d728ec28dcb51a139859e4fed48da894a8363a51 +Author: Panu Matilainen +Date: Mon Apr 7 09:31:21 2008 +0300 + + Remove ARGstr_t typedef, it serves no purpose + - argv strings are just regular strings, the structure is what's special + +commit a5533d9604770d16942e44d8c68cd28228bc3d2b +Author: Panu Matilainen +Date: Mon Apr 7 09:29:06 2008 +0300 + + Remove bogus const from ARGV_t + +commit 4a466050480fb3a83712270e2f2a46ea912fc440 +Author: Panu Matilainen +Date: Mon Apr 7 08:25:17 2008 +0300 + + Missing rpmstring.h include + +commit b05c0ebdf8ccd647df14538f6d8980c797344daf +Author: Panu Matilainen +Date: Sun Apr 6 19:34:59 2008 +0300 + + Eliminate the uuuuugly and unsafe static tagname buffer + - generate the "human friendly" strings at build time, store into the tag + table structure + - also avoids copying of strings and lowercasing strings at runtime + +commit a413ad7de22601e59e7a89f19e4986eaf70c8fbb +Author: Panu Matilainen +Date: Sun Apr 6 19:18:44 2008 +0300 + + Move the tagtbl.c generator monster awk out of Makefile.am + - stick it into a separate script, reformat so it's possible to actually + read it... + +commit 14dcc3034d3d252d20f80daa9b708f88cc45dbaa +Author: Panu Matilainen +Date: Fri Apr 4 17:00:38 2008 +0300 + + Oops, no newline at end of filename please... + +commit 52788e096d89c340efc359c3b9dc52e1ff05fb95 +Author: Panu Matilainen +Date: Fri Apr 4 16:26:55 2008 +0300 + + %{_builddir} is not an url, ever + +commit 0787a058f11fade66fad8d78186ae2b533e20f45 +Author: Panu Matilainen +Date: Fri Apr 4 16:23:56 2008 +0300 + + We only ever deal with local, regular files in doUntar() + +commit c9bc7c32e0f260312f74b448c859c3acb9aab0b7 +Author: Panu Matilainen +Date: Fri Apr 4 16:21:58 2008 +0300 + + We only ever deal with local, regular files in doPatch() + +commit ed3eb18dc26f87d8bffdd1a05d26dd962b7f6f2d +Author: Panu Matilainen +Date: Fri Apr 4 16:08:37 2008 +0300 + + Rip the url-craziness in rpmMkdirPath() + +commit bde22653bc7ef058933af9e814d9644fcf28abb2 +Author: Panu Matilainen +Date: Fri Apr 4 16:03:59 2008 +0300 + + Get rid of the horrid zcmd hackery in build + - rpmExpand() with %uncompress macro etc simplifies things a lot + +commit 3c1126b2a550e2d9f51f46e0948ab5925fe07089 +Author: Panu Matilainen +Date: Fri Apr 4 15:52:52 2008 +0300 + + Missing decompression arguments for bzip in uncompress macro + +commit d3f73d3ba08da6fa2906764f9a7504385801816b +Author: Panu Matilainen +Date: Fri Apr 4 15:19:28 2008 +0300 + + getcwd(NULL,0) has undefined behavior, use rpmGetCwd() instead + +commit febc6c0db9b39b7ec5e588f2ff9ebf7d48529c61 +Author: Panu Matilainen +Date: Fri Apr 4 14:59:55 2008 +0300 + + Stop pretending spec can be an URL or stdin, neither works + - simplifies buildForTarget() somewhat + - while at it, eliminate remaining unsafe string operations + +commit 384a31b4a355719d88d0472c0fd451874be1a4e9 +Author: Jindrich Novy +Date: Fri Apr 4 13:48:02 2008 +0200 + + Escape '%' in format + +commit 6a766c00bfd488bb2c703910efc386bf95e6af05 +Author: Panu Matilainen +Date: Fri Apr 4 14:33:45 2008 +0300 + + Wait for popen() to finish before passing to isSpecFile() + +commit 61c0a71059d5e5a5782018505c70d88299ac3ede +Author: Panu Matilainen +Date: Fri Apr 4 13:52:59 2008 +0300 + + Move spec extraction from tarball out of buildForTarget(), simplify + - use basename() and dirname() instead of manual pointer manipulation games + - static buffer only used for reading tar output, sizes checked + +commit a375e78dc61ccf171188db58f2acfb6224d553dd +Author: Panu Matilainen +Date: Fri Apr 4 12:12:29 2008 +0300 + + Oops, add --wildcards back to spec extraction + - shouldn't really have to hardcode such stuff but... + +commit f548819c94d9049a7dd850546286f8583e5a47e0 +Author: Jindrich Novy +Date: Fri Apr 4 13:17:53 2008 +0200 + + Simplify formatting + +commit f6b0cf178a74f193677bbf9b2b345fea6ab0fff9 +Author: Jindrich Novy +Date: Fri Apr 4 13:01:50 2008 +0200 + + Simplify package comparison and format creation. + - also avoid static buffer usage + +commit baf9e88fc341d6b7bac32fb8e22768791bd596af +Author: Panu Matilainen +Date: Fri Apr 4 12:06:06 2008 +0300 + + Assume failure in buildForTarget() to remove redundancy + +commit 50a020acca37f48a074f5e2a5e09f6dcb16ec387 +Author: Panu Matilainen +Date: Fri Apr 4 11:54:21 2008 +0300 + + Refactor spec extraction on tar build to address several issues + - simplify the code + - use %{__tar} instead of tar as the extraction command + - avoid sprintf to "big enough" buffer + - basic spec sanity check while extracting, fixes rhbz#281391 + +commit 8aa121da832c1f66b1900f9568955ce4e32e49f2 +Author: Panu Matilainen +Date: Fri Apr 4 11:53:07 2008 +0300 + + Spec of size zero cannot be a valid spec file + +commit 02de5d75af66f9d27edd8e12cc6004b15b22ce55 +Author: Panu Matilainen +Date: Fri Apr 4 09:55:30 2008 +0300 + + Remove copy-paste currentDirectory() from sqlite, use rpmGetCwd() + +commit a5a3cfc3ed67083eaca0af0ffa48565a3e99bf57 +Author: Panu Matilainen +Date: Fri Apr 4 09:53:17 2008 +0300 + + Rename currentDirectory() to rpmGetCwd() and move to librpmio + +commit 0bd84c940930b3752eedf967f8c842c270cb33f9 +Author: Panu Matilainen +Date: Thu Apr 3 20:48:17 2008 +0300 + + We don't support url's in db paths, rip. + - file:// vs / is silly and anything else wont work, so pretending + url support just plain bogus + +commit 110d354c726ca5e4a66ccbf185334514d452abf2 +Author: Panu Matilainen +Date: Thu Apr 3 19:44:49 2008 +0300 + + Replace silly static rpmioFileExists() in rpmdb.c with plain old access() + - accepting url's there is not only useless but just plain bogus + +commit c7b5cb2dc4a884aa080a23e1ba0772047ca566e4 +Author: Panu Matilainen +Date: Thu Apr 3 19:28:37 2008 +0300 + + Remove ancient db1->db3 conversion cruft + +commit 1a269ccd3cc3be1bb5763f23621c63b5ac199c92 +Author: Jindrich Novy +Date: Thu Apr 3 13:47:05 2008 +0200 + + Don't use static buffers in parseForRegexLang() + - use dynamic allocation instead to avoid overflows + - also update addFile(), which is actually the only function + that calls parseForRegexLang() + +commit 58b9fb501d09ade85eae216d26cf51e31bb71e9d +Author: Panu Matilainen +Date: Thu Apr 3 13:17:57 2008 +0300 + + Lose the remaining static buffer from rpmVerifySignatures() + - Simple and stupid: catenate previous buffer + latest message + with rasprintf() over and over again. Not the most efficient way but hardly + matters here... + +commit 2dc456a10c0dab0d0a00afb0a1d15bf96b74a0d1 +Author: Panu Matilainen +Date: Thu Apr 3 12:53:11 2008 +0300 + + Typo... + +commit ef8669e5bed26597fb2200af54ef93abb6fe138b +Author: Panu Matilainen +Date: Thu Apr 3 12:46:33 2008 +0300 + + Refactor signature check results formatting + - Document what it's supposed to do, should be more obvious from the + code too now. + - Remove one level of stpcpy's to static buffer. + - Simplify the theoretical case where many missing/untrusted keys are + found (this shouldn't happen in practise ever) by only showing last of them + +commit babade159482170bbcb710970277a90e994695fe +Author: Panu Matilainen +Date: Thu Apr 3 09:59:46 2008 +0300 + + Enable stack protector by default if gcc supports it + +commit 85571b25e97eed423a9931377aa40bb3fc42fb76 +Author: Panu Matilainen +Date: Thu Apr 3 08:37:20 2008 +0300 + + Remove unnecessary check for "keyid:" in result + - nothing in signature.c emits such string + +commit 40686de0a9de6751443f608d77260cbf071c5ff2 +Author: Panu Matilainen +Date: Thu Apr 3 08:07:00 2008 +0300 + + Start eliminating static buffers from header/signature checks + - Push msg buffer allocations down to the lowlevel rpmVerifySignature() and + internal verify*Signature functions, nothing above them knows how much + memory they need for messages. Use rasprintf() where obvious, + stupid malloc(bigenuf) for now otherwise. + - Changes public API but can't be helped, printing to an unchecked buffer(s) + of unknown size from one of the more security sensitive pieces is just + .. not ok + - Minimally convert callers to the new allocation scheme + +commit a0f0da6858782f6a4980437ec05ca37e244ee578 +Author: Jindrich Novy +Date: Wed Apr 2 18:14:47 2008 +0200 + + Simplify message key creation in i18nTag() + +commit 999248ab03133f3a2b92b64885e691d133a38b36 +Author: Panu Matilainen +Date: Thu Apr 3 08:04:22 2008 +0300 + + Shut up a few silly compiler warnings that have crept in + - missing cast in python header subscript + - (false) warning about uninitialized variable, unused variable in rpmfc + - missing include in rpmio + +commit 62b46347770c31c6702983777b47d986c1db756b +Author: Panu Matilainen +Date: Wed Apr 2 16:52:44 2008 +0300 + + Further streamline / simplify rpmVerifySignatures() + - Use more meaningful variable names than res2 and res3 + - In verbose mode we just dump whatever rpmVerifySignature() returns, + error or not. Otherwise the output depends on the result. Make this + obvious in the code. + +commit 8229aa671d972a465440c16647d04664b5265707 +Author: Panu Matilainen +Date: Wed Apr 2 16:30:21 2008 +0300 + + Make signature verification result not depend on rpm verbosity level, ick + +commit aa3c11428c71a5737dc6ac0cd67d6238cee74645 +Author: Panu Matilainen +Date: Wed Apr 2 15:42:21 2008 +0300 + + Further redundancy / copy-paste coding elimination + +commit 30d094653ea1834a90f6a74d9b43863b0364c475 +Author: Panu Matilainen +Date: Wed Apr 2 15:36:00 2008 +0300 + + Collapse the huge sigtag switch in rpmVerifySignatures() a bit + - move the tag names from a helper functions + - collapse similar cases to just one + +commit e04c47822773b36d30487c7075880e0dfa7794b3 +Author: Panu Matilainen +Date: Wed Apr 2 15:02:31 2008 +0300 + + Simplify missing/untrusted keys logging + +commit d3c3d4b902cee9cbdcf59aa96848063cc571a2f6 +Author: Panu Matilainen +Date: Wed Apr 2 14:25:51 2008 +0300 + + Revert "Disable signature and digest checks on query modes (rhbz#438625)" + + This reverts commit 5a684f5527bc7f32fca9ba7878802519bb515e93. + + All the sigchecking on database queries is mostly waste of time, but + this disables signature checks on queries of non-installed, untrusted + packages too. Separate vsflags for db / non-db operations or such needed + before this can change. + +commit 38b81493b044565271a277aa2c7a56408d3c8565 +Author: Jindrich Novy +Date: Tue Apr 1 16:37:42 2008 +0200 + + Fix off-by one in urlOpen() + - the former implementation didn't take the ending '\0' into account + +commit aabf8d59854c43f6bf1a11fee2b5100a0917b90c +Author: Panu Matilainen +Date: Tue Apr 1 15:40:07 2008 +0300 + + Updated German translation from Fabian Affolter + +commit eca89ea370d2c52442d2817a13bc50023f3294f6 +Author: Panu Matilainen +Date: Tue Apr 1 13:35:16 2008 +0300 + + Enhance error message on failed ts lock acquire (rhbz#427064) + - adds strerror() output to the failure log message, this should give + sufficient hint as to what's wrong (eg "permission denied") + +commit d1839289023dd4b7cd66f43f8d83b39bb5243ee3 +Author: Panu Matilainen +Date: Tue Apr 1 13:32:57 2008 +0300 + + Convert rpmlock.c to general rpm indentation style + +commit b8c440deade99bee36ba7f2475b85703d896925c +Author: Panu Matilainen +Date: Mon Mar 31 17:06:47 2008 +0300 + + Avoid entirely unnecessary static buffer + string copy. + +commit 3e4b229e7188a5ee42770089bb9a78dc158b5302 +Author: Jindrich Novy +Date: Mon Mar 31 14:13:59 2008 +0200 + + Make ExcludeArch/ExclusiveArch/ExcludeOS/ExclusiveOS actually work + +commit e36758060cbdbf463ded17b9b0143b719575244a +Author: Panu Matilainen +Date: Mon Mar 31 13:31:03 2008 +0300 + + Avoid static sprintf buffer in rpmReadHeader() + +commit 560ee3c8db839495dcbae124f7d08ba77badcc47 +Author: Panu Matilainen +Date: Mon Mar 31 13:12:29 2008 +0300 + + Avoid static buffer for error messages in rpmReadSignature() + +commit dccc08ab66c044beaba806006302c88c42ad458e +Author: Panu Matilainen +Date: Mon Mar 31 12:07:37 2008 +0300 + + Make rpmLeadCheck() return error msg instead of direct logging + - allows silent checking of lead and differentiating between + non-rpm files and incompatible rpms, avoiding bogus "not an rpm package" + message on manifests + +commit 7ddab3ab8d55a6d763c823d4b3c090ccf53eb5a4 +Author: Panu Matilainen +Date: Mon Mar 31 10:44:23 2008 +0300 + + Dead code removal (macro stuff) + +commit 802900a230322b8b0c7c9af320dc83a9f6355c6e +Author: Panu Matilainen +Date: Mon Mar 31 10:41:07 2008 +0300 + + Dead code removal (popt switches) + +commit 33b3da3ec1fb05588a9e7fc54c06c49196867244 +Author: Panu Matilainen +Date: Mon Mar 31 09:56:24 2008 +0300 + + Simplify rpmdsThis() code + - use rasprintf() to construct [e:]v-r string instead of stpcpy games + - use str2hge() for N + EVR + +commit 58afc25abb0ebb7826c00b688fb1825d5b0087c0 +Author: Panu Matilainen +Date: Mon Mar 31 09:25:18 2008 +0300 + + Copy N + EVR into ds in rpmdsSingle() instead of just referring + - previously a ds created by rpmdsSingle() would turn invalid as soon as + the N and EVR strings were freed by caller (or went out of scope), ick + - convert the N + EVR strings passed to rpmdsSingle() to similar construct + as is returned by headerGetEntry so headerFreeData will free both the + pointers + contents. + +commit ed07bf20d3bffaa4d99b4b6db2460b1046d7ead3 +Author: Panu Matilainen +Date: Mon Mar 31 08:42:33 2008 +0300 + + Bunch of formatting & indentation fixes to rpmds + +commit de4c3a999fcfa2bcf6772b4165b7e0ff1c8edb54 +Author: Panu Matilainen +Date: Sat Mar 29 15:22:45 2008 +0200 + + Fixup for rpmfcSaveArg() no longer freeing key + +commit 6cdf14e01d74fd0a65cd3c37ebc805bf43c3740a +Author: Jindrich Novy +Date: Sat Mar 29 11:18:30 2008 +0100 + + Don't use static buffer ptr as return value in doUntar() + +commit 6dfb63cd599145e9c720708041d617187ab18091 +Author: Jindrich Novy +Date: Fri Mar 28 17:49:56 2008 +0100 + + Don't use static buffer in rpmfcELF(), make code more comprehensive + +commit 7ff4c18275ab6f5d9e2c88825e13d437fc6f4b91 +Author: Jindrich Novy +Date: Fri Mar 28 17:21:47 2008 +0100 + + Remove unneeded buffer operations + +commit 813ab8ca8eb4e39d3fa457755256d42f84edcc59 +Author: Jindrich Novy +Date: Fri Mar 28 16:15:48 2008 +0100 + + Add rpmfcAddFileDep() to handle file dependencies securely + +commit 21fee2eb610c0daec72cfdcf12c9bcdcce428431 +Author: Panu Matilainen +Date: Wed Mar 26 16:32:30 2008 +0200 + + Simplify changelog entry additions + +commit 9c05a57f236ed445fa2dcb5af2b722d8ea45bfec +Author: Jindrich Novy +Date: Wed Mar 26 11:52:07 2008 +0100 + + Remove unneeded free() + +commit e27f6c2bfc05dc80168c5426dac87b297dce2167 +Author: Jindrich Novy +Date: Wed Mar 26 09:21:30 2008 +0100 + + Use rasprintf() in rpmfcHelper() and rpmfcGenerateDepends() + +commit 6a7ef512e26c28f28673930649084e7144c4c2a0 +Author: Jindrich Novy +Date: Tue Mar 25 15:21:47 2008 +0100 + + Don't use static buffers to communicate between funcs, avoid buffer overflows. + +commit 087c90bfe6b12bebeb17ba2e15a39d5fcc58417a +Author: Jindrich Novy +Date: Tue Mar 25 14:57:37 2008 +0100 + + Use rasprintf() for NVR construction to remove BUFSIZ limit. + +commit 721933384e3e82dc409bbc27d3534543bb10da12 +Author: Jindrich Novy +Date: Tue Mar 25 13:54:36 2008 +0100 + + Avoid artificial limits on tag name. + +commit 5a684f5527bc7f32fca9ba7878802519bb515e93 +Author: Panu Matilainen +Date: Tue Mar 25 07:49:47 2008 +0200 + + Disable signature and digest checks on query modes (rhbz#438625) + +commit 3e76c5767afb48fd81a743bd0bc102eba0b2b611 +Author: Panu Matilainen +Date: Mon Mar 24 23:58:43 2008 +0200 + + Avoid couple of static buffers in psm script functions + +commit 2a909bdd028ddc2c46c00ddaa3b06003b0329ce9 +Author: Panu Matilainen +Date: Mon Mar 24 23:47:41 2008 +0200 + + Avoid static buffer for sql commands + +commit e501ac2e77ab4f145c75558aa456b7f5f481d254 +Author: Panu Matilainen +Date: Mon Mar 24 22:42:34 2008 +0200 + + Remove bogus const from rpmRelocation struct + +commit 3e57c865c5d3b65fea8bcddb376e0bc859b598e3 +Author: Panu Matilainen +Date: Mon Mar 24 22:25:26 2008 +0200 + + Remove bogus consts from rpmte_s + +commit a600230b7d614ba8a012bc35a9502949c1722944 +Author: Panu Matilainen +Date: Mon Mar 24 22:23:01 2008 +0200 + + Revert rpmhash changes from previous commit + - rpmhash key + data actually sometimes point to const data.. pff + +commit b43b6d6df1027cccdb39d23d2742c66eaafb65c5 +Author: Panu Matilainen +Date: Mon Mar 24 22:13:45 2008 +0200 + + Remove bogus consts from rpmdb and dbi structs + +commit 9a4a5c9ef8f03aca05f7eeed3e7afb297ac72a6b +Author: Panu Matilainen +Date: Mon Mar 24 21:05:05 2008 +0200 + + Remove bogus consts from pgpDigParams_s structure + +commit e1e66978a1c5871614091d15dfb84439ba90a09e +Author: Panu Matilainen +Date: Mon Mar 24 20:44:48 2008 +0200 + + Remove bogus consts from urlinfo_s structure + +commit c4659498e3d5833de32c494d83567c9c15e13700 +Author: Panu Matilainen +Date: Mon Mar 24 19:03:20 2008 +0200 + + Eliminate bogus const's from spec structure + +commit 2cf64e95f2dc2ecac05be776e1e5e3a232d56948 +Author: Panu Matilainen +Date: Mon Mar 24 19:03:00 2008 +0200 + + Eliminate bogus const's from OFI_t and spectags structs + +commit 4110664044beec1278b512e73f377d4b06f05b90 +Author: Panu Matilainen +Date: Mon Mar 24 19:02:44 2008 +0200 + + Eliminate bogus const from expression value + +commit fa7e15c2abeaa5a0832a21c75084d2f406fd93ea +Author: Panu Matilainen +Date: Mon Mar 24 19:01:29 2008 +0200 + + Use regular stream functions instead of rpmio in spec sanity check + +commit f35277c8a7443d96ae2708abbf1ad74110b5cf8a +Author: Panu Matilainen +Date: Mon Mar 24 19:01:12 2008 +0200 + + Eliminate wtf pointer games with rpmGetPath result. + +commit 7ae38cdd44f599cd64890580d65d25bffcb543d5 +Author: Panu Matilainen +Date: Mon Mar 24 19:00:48 2008 +0200 + + Avoid entirely silly rpmio use in addFileToTagAux() + +commit 3531bc5d8c356c56cc40b2a82b7a323981537995 +Author: Jindrich Novy +Date: Sun Mar 23 13:51:53 2008 +0100 + + Fix buffer overflow while creating patch script, avoid fixed sized buffers. + +commit a3ceec504b4af47b96f90d18dce9df861e0cb93c +Author: Jindrich Novy +Date: Sun Mar 23 13:50:07 2008 +0100 + + Use rasprintf() to prevent overflows and remove BUFSIZ buffer limit. + +commit ca6f318f7a692a8d9f7f404fd6b138e040e1a2b2 +Author: Jindrich Novy +Date: Sun Mar 23 13:48:49 2008 +0100 + + Fix writeRPM, use dynamic allocation, remove bogus const. + +commit f779b62276205a116814bde15613fa7383063967 +Author: Panu Matilainen +Date: Thu Mar 20 10:59:17 2008 +0200 + + Adjust maintainer makefile for hg -> git switchover + +commit 53bc909971af88b463ce39f4b30244ceb36e0c3e +Author: Panu Matilainen +Date: Wed Mar 19 09:30:33 2008 +0200 + + Remove bunch of double consts. What have I've been thinking? + +commit 5c7cccd3b6631009060fae1511b5de2ae987daa0 +Author: Panu Matilainen +Date: Tue Mar 18 13:22:15 2008 +0200 + + Erm, off-by-one in rasprintf() + - should probably change the comment to "simple, stupid and buggy" ;) + +commit d07bcfece15f9e8352ea077e1a7fe8a082bc2eab +Author: Panu Matilainen +Date: Tue Mar 18 10:28:57 2008 +0200 + + Bump up sonames, we're not exactly ABI compatible with 4.4 anymore.. + +commit 5c48f597c82c92a02f573056e26bd21fe17aeda3 +Author: Panu Matilainen +Date: Tue Mar 18 10:18:08 2008 +0200 + + Use rasprintf() in rpmps to properly fix mdvbz#31680 + +commit 053cf9a25e341dec8e1beb4811ecb1e9b11715fe +Author: Panu Matilainen +Date: Tue Mar 18 10:17:03 2008 +0200 + + Add custom asprintf() clone to rpmstring + +commit c908277be21c27a0894404821605134958521fd6 +Author: Panu Matilainen +Date: Tue Mar 18 09:10:13 2008 +0200 + + Minimal namespacing for locale-insensitive x*() string functions + +commit 9df54a8622b6640e54288835e62c6c0d0b23c748 +Author: Panu Matilainen +Date: Tue Mar 18 08:55:05 2008 +0200 + + More xstr[n]casecmp to rpmstring along the other string-stuff... + +commit 5cde7cac9619c90a83d2f63f9d3760d0a352226e +Author: Panu Matilainen +Date: Mon Mar 17 16:03:51 2008 +0200 + + Refactor running of pre/post scriptlets out of rpmtsRun() + +commit 5dca5fac8fa29d50d92a5939fe60cbdcc34c0cf4 +Author: Panu Matilainen +Date: Mon Mar 17 15:48:25 2008 +0200 + + Add missing popt include + +commit d9c780d19edeaf81427411205a9620c9516902c1 +Author: Panu Matilainen +Date: Mon Mar 17 14:36:43 2008 +0200 + + Remove rollback and repackage from documentation + +commit db37b74a2bfebf067f421b891d3837baaca7fc6f +Author: Panu Matilainen +Date: Mon Mar 17 14:27:03 2008 +0200 + + Nuke leftover rollback test program, update translations + +commit d89482a7c7777d379ab415ebba747b6af19babdb +Author: Panu Matilainen +Date: Mon Mar 17 14:10:11 2008 +0200 + + Remove repackage support to finish off with rollback + + The two main classes of rollback/repackage need are + 1) Gimme back the previous version, this broke XYZ on my system. + This is better handled by downgrading to the previous version of original + package instead of repackaged garbage. We should maintain real package + (version) history somewhere. + + 2) Upgrade messed up my configuration. + Instead of repackaging everything we could be far more intelligent + wrt config files, stick them into real version control or at least have + hooks to do so. + + RPMCALLBACK_REPACKAGE_* and RPMTRANS_FLAG_REPACKAGE definitions left around + to avoid needlessly breaking everybodys callbacks (for now) + +commit 37543ee0405c38a9d54a12bf0d54698773a3933c +Author: Panu Matilainen +Date: Mon Mar 17 11:53:27 2008 +0200 + + Remove rollback support + - not possible to do reliably within rpm + - effort is better wasted on investigating fs-level snapshots, which + is way beyond rpm scope except for hooks to interact with the snapshot + mechanism to communicate beginning/end of transaction and such + +commit ed78cef2c3e14df29d95b476f00d51203fbe098e +Author: Panu Matilainen +Date: Mon Mar 17 12:04:39 2008 +0200 + + Remove support for automatic rollback on failure + - doing this reliably from rpm is simply not possible as there's no way + to undo script actions, might as well not pretend we can + - for a feature that's not generally usable it complicates mainline code + way too much + +commit 874f6849d9f5f71b3815e358c6c5a049f6a4fa66 +Author: Panu Matilainen +Date: Fri Mar 14 14:55:44 2008 +0200 + + Make arch conditional in default queryformat + - gpg-pubkey's dont have arch, argh... + +commit 6db2a8ec03c057850a0349537c705556068b9d32 +Author: Panu Matilainen +Date: Fri Mar 14 14:27:01 2008 +0200 + + Revert RPMTAG_FILEDIGESTS -> FILEMD5's for now + +commit edec73e2128976c344d31953a3d2de698ff7de33 +Author: Panu Matilainen +Date: Fri Mar 14 14:18:43 2008 +0200 + + Type missing for RPMTAG_HEADERI18NTABLE + +commit 8e64df0e83029d08dfbd9a09ef76bed817d1ccf3 +Author: Panu Matilainen +Date: Thu Mar 13 09:20:24 2008 +0200 + + Don't process objdump sections after "Version References" + + autodeps/linux.req expects the 'Version References' section to be + the very last section in objdump -p output and nothing else to follow + it, but at least on Linux/ARM, you can get output a la: + + Version References: + required from ld-linux.so.3: + 0x0d696914 0x00 06 GLIBC_2.4 + required from libacl.so.1: + 0x05822450 0x00 05 ACL_1.0 + required from libgcc_s.so.1: + 0x0b792655 0x00 04 GCC_3.5 + required from librt.so.1: + 0x0d696914 0x00 03 GLIBC_2.4 + required from libc.so.6: + 0x0d696914 0x00 02 GLIBC_2.4 + private flags = 4000002: [Version4 EABI] [has entry point] + + This causes the built package (if the external dep generator is + used) to end up with bogus dependencies. + + Issue found by Rabeeh Khoury + + Signed-off-by: Lennert Buytenhek + +commit f1f6510ceecc99fb4d3fc0c840e5b87232566174 +Author: Panu Matilainen +Date: Wed Mar 12 15:34:49 2008 +0200 + + Remove rpmio internal copy of poptParseArgvString() & friends + - the old included version segfaults with funky input and whatnot... + - link rpmio to real popt instead + +commit ef84de8868a6547ecb8e668d035d4f47bc8cd4af +Author: Panu Matilainen +Date: Wed Mar 12 13:20:47 2008 +0200 + + Refcount dbiTags on db open+close, automatically free + - avoids rpmdb_internal include in rpmqv.c and memleak in API clients + - avoids having to export dbiTags(Max) at all + +commit dd2f0eb3c8a94485098cfd4412a1a14f28335d02 +Author: Panu Matilainen +Date: Tue Mar 11 11:33:04 2008 +0200 + + Update translations + +commit e9d194444eee9e533c722a6e67ccb100ad99e868 +Author: Panu Matilainen +Date: Tue Mar 11 11:32:37 2008 +0200 + + Dust off Finnish translation + +commit bbeb5148f2d8d6b9a401ef7c375638a69b60f59e +Author: Panu Matilainen +Date: Tue Mar 11 08:42:34 2008 +0200 + + Updated Polish translation (Piotr DrÄ…g) + +commit 35c7ef6d6bc776977248958dee052812841c4a5b +Author: Panu Matilainen +Date: Fri Mar 7 15:07:06 2008 +0200 + + Remove support for automatically importing pubkeys from keyservers + - causes hideous load on keyservers and autoimporting without user approval + isn't a very good idea, especially as long as imported == trusted + - nothing wrong with supporting hkp lookups on manual --import though... + - curl doesn't know about hkp:// but http on appropriate port works just + fine, lets re-enable it + +commit 2414d522bcfbd0ba9e6115eb7e2a3ba056ac2795 +Author: Panu Matilainen +Date: Fri Mar 7 14:05:28 2008 +0200 + + Remove BDB copy from the repository, it doesn't belong there + +commit 501197e5ef5ce8687aaf8bd4352f296bb7a5c0e8 +Author: Panu Matilainen +Date: Fri Mar 7 13:34:20 2008 +0200 + + Stop insecurely covering up for lack of snprintf and vsnprintf + - we require C99 anyway + - snprintf is used unconditionally all around the tree + - if absolutely needed for portability, having insecure wrappers littered + over the source is not the best way + +commit de4085814e7bf93042f2fba06ca24a4e63a4b27a +Author: Panu Matilainen +Date: Fri Mar 7 13:04:46 2008 +0200 + + Drop librpmbuild from rpm.pc + - next to nothing actually uses librpmbuild, avoid dragging it in needlessly + - if needed, add a separate .pc for rpmbuild later + +commit 0c0d812b0da674f237ad5932383a44befcf7f3a6 +Author: Panu Matilainen +Date: Fri Mar 7 12:36:22 2008 +0200 + + Remove unused RPMUSER, GROUP etc from configure.ac + +commit a08ececd832de2fb4de426d8894abccd45a7c3df +Author: Panu Matilainen +Date: Fri Mar 7 09:47:51 2008 +0200 + + Log message adjustments + - dont waste translator time by having them translate obscure debug messages + - adjust some suspect looking logging levels + - mark some non-debug messages for translation where missing.. + +commit e97e5619e9ddaf8b0e78568ca8848e2c2840dd00 +Author: Panu Matilainen +Date: Fri Mar 7 08:29:03 2008 +0200 + + Further constants made readonly... + +commit f686d184df613c74df678cbf3a878c25ccd4fec8 +Author: Panu Matilainen +Date: Fri Mar 7 08:21:55 2008 +0200 + + Make _cacheDependsRC static, not needed outside depends.c + +commit 3be0a4b2f863e213af45b0495254108c13415a1f +Author: Panu Matilainen +Date: Fri Mar 7 08:20:03 2008 +0200 + + Another pile of read-only constants marked as such.. + +commit 2e3972aebf3db7a6fce83619ea106b80145ed923 +Author: Panu Matilainen +Date: Fri Mar 7 08:15:03 2008 +0200 + + Mark another pile of header_magic duplicates as read-only + +commit 8e7bc88eda21acdee7552980738cbded4831f950 +Author: Panu Matilainen +Date: Thu Mar 6 20:47:17 2008 +0200 + + Make yet more build tables readonly + - preambleList and partList are modified runtime for silly reasons, + reminders to fix later.. + +commit ba16c1bf2fdd1d70b5c8fed1ba88d967f941aa50 +Author: Panu Matilainen +Date: Thu Mar 6 20:25:43 2008 +0200 + + Make headerCopyTags() tag list const, the list isn't modified.. + +commit 82a6fac62cf4dbc9f131d80271fab01cc55fd700 +Author: Panu Matilainen +Date: Thu Mar 6 20:17:20 2008 +0200 + + Mark bunch of static build-related tables as read-only + +commit 16686e9663d9538abb720db955e559f2b35da7b1 +Author: Panu Matilainen +Date: Thu Mar 6 19:57:01 2008 +0200 + + Make rpmfc token and apply tables readonly + +commit 403dae827c313760cb1968556c1aeaf395236e98 +Author: Panu Matilainen +Date: Thu Mar 6 19:51:06 2008 +0200 + + Mark rpm tag tables read-only as far as we can.. + +commit 146f12c05beff77c5e1a19989448ca3d12446a06 +Author: Panu Matilainen +Date: Thu Mar 6 19:50:41 2008 +0200 + + Mark various header tables and definitions as read-only + +commit 27f5763cfeb155450b6edf9a3e5dafce07024b99 +Author: Panu Matilainen +Date: Thu Mar 6 19:49:08 2008 +0200 + + Make the rpmdb vectors readonly + +commit 8fde231cac3a597a9199fd36c5c597555895644c +Author: Panu Matilainen +Date: Thu Mar 6 19:27:19 2008 +0200 + + Mark bunch of misc. tables & such read-only in librpmio + +commit 17fc6663ef4bd647934876638f3aa2edf34d3ce4 +Author: Panu Matilainen +Date: Thu Mar 6 19:25:46 2008 +0200 + + Make rpmio vectors read-only + +commit 5b32005575079da789d49869870066e8784e6924 +Author: Panu Matilainen +Date: Thu Mar 6 19:24:56 2008 +0200 + + Further read-only tables in rpmpgp.. + +commit 84ff15177d91f8d06615edccb851ff40f0eddb12 +Author: Panu Matilainen +Date: Thu Mar 6 18:56:38 2008 +0200 + + Mark various pgp value tables read-only as they should be + +commit 2f833b0a05b5823edeb935196bbcc3faf5d68228 +Author: Panu Matilainen +Date: Tue Mar 4 09:26:27 2008 +0200 + + PreReq -> Requires in ordering debug output (Pascal Rigaux) + +commit 61189cb868c508c143a0a6c4f1a73de2bf0aeb30 +Author: Panu Matilainen +Date: Tue Mar 4 08:16:02 2008 +0200 + + Add super-H arch support (rhbz#432496) + + Patch from Masaki Chikama + +commit 28cba016c813a50b913a6ec484d4a428026c96a7 +Author: Panu Matilainen +Date: Thu Feb 28 12:46:45 2008 +0200 + + Add missing leading underscores to names passed to rpmMkdirPath() + - mostly cosmetical, leading to slightly misleading error messages + +commit 18d01d8f905178c79aae028e92ee5d8433ac857c +Author: Panu Matilainen +Date: Tue Feb 26 22:42:46 2008 +0200 + + Another unnecessarily exported internal variable.. + +commit 05129f83dc4d07c4bc507f66496ac3fc068deeb2 +Author: Panu Matilainen +Date: Tue Feb 26 22:24:28 2008 +0200 + + Make bunch of macro internal variables static + +commit b010266b0ea24ddbdb087d37db9d7ee7d2a34e83 +Author: Panu Matilainen +Date: Tue Feb 26 22:04:17 2008 +0200 + + Remove hidden --nolibio cli switch, avoid exporting noLibio + +commit 2579e086c2be79d2d3f7e0e8ee3c25c25edd9a7b +Author: Panu Matilainen +Date: Tue Feb 26 21:46:38 2008 +0200 + + Un-inline fd*Digest() + - avoid leaking nss + digest internals all over the place + +commit 47a1e0515012d4aaf4f95fd71c4bc6de526e8d86 +Author: Panu Matilainen +Date: Tue Feb 26 21:02:21 2008 +0200 + + Make the rest of rpmio vectors static inside rpmio + - no external needs, gets them out of exported library symbols + +commit edc6b13d19d832ec56b63007ccc84a0f43cf2629 +Author: Panu Matilainen +Date: Tue Feb 26 20:53:38 2008 +0200 + + Remove the last remains of unused and unnecesary rpmio rpc vectors + +commit 41ebd1cd50c780c247877bf9174aacdd55ca4923 +Author: Panu Matilainen +Date: Mon Feb 25 20:16:43 2008 +0200 + + Eliminate rpmdb refcount debug junk from the API + +commit 89f59abcd306aa7cff9b48936469d7e46bb655e1 +Author: Panu Matilainen +Date: Mon Feb 25 12:33:19 2008 +0200 + + Remove some ancient dead code + +commit 98c5039009406609f661f98623776d6c18a04c2c +Author: Panu Matilainen +Date: Mon Feb 25 12:24:22 2008 +0200 + + Add %{sources} and %{patches} macros to build + - push full patch + source paths to global lua tables + - %{sources} and %{patches} are just easy-access wrappers to accessing + the lua tables + - "git-am -p1 %{patches}" and enjoy... + +commit 2b39ddc25d9773c793c4ceaef01de0b9df0c06ad +Author: Panu Matilainen +Date: Mon Feb 25 11:03:38 2008 +0200 + + Enable variadic checks for rpmExpand(), rpmlog() and rpmGetPath() + Suggested by Michal Marek + +commit c46876daa4358849de73a059d944f753a7584013 +Author: Panu Matilainen +Date: Mon Feb 25 11:02:07 2008 +0200 + + Add new header for collecting utility macros + - atm consists of portability wrappers to various gcc extensions like + __attribute__() to provide additional warnings and checks + - copied from glib to avoid an extra build dependency just for the silly + macros, renamed to avoid namespace clashing + +commit fe35727d3f55f830d21b71b183ea24974a02696f +Author: Panu Matilainen +Date: Fri Feb 22 15:39:24 2008 +0200 + + Remove ancient commentary from header.h + - history is interesting but public headers aren't the place for it + - "implemented soon after" from 2001 comments are hardly useful :) + +commit e59b3817bbbd530b4d6a003bc02a7ee8166eaa72 +Author: Panu Matilainen +Date: Fri Feb 22 15:37:16 2008 +0200 + + Remove useless ifdeffed typedefs + - rpmdb & iterator are typedeffed in rpmtypes.h already.. + +commit 03dcaf61eb48b12bc65322b40b30dc06e8a2ccc0 +Author: Panu Matilainen +Date: Fri Feb 22 15:30:51 2008 +0200 + + Rip ancient, unused setperms + unsetgit make targets + +commit d0feb99eac9404648a9bde49f09042ade7fcdfbb +Author: Panu Matilainen +Date: Fri Feb 22 15:29:04 2008 +0200 + + Use %__tar instead of hardcoded tar in build prep + +commit 4dcc991ecc30e33f6f468885d8e92479d6dd3143 +Author: Panu Matilainen +Date: Fri Feb 22 15:08:41 2008 +0200 + + Don't use legacy gzipbin etc macros in build + +commit 3b7c968326190d2997ff3866f592b7003e889b3a +Author: Panu Matilainen +Date: Fri Feb 22 15:05:16 2008 +0200 + + Make %patch use %__patch instead of hardcoded patch.. patchy huh? + +commit 82f39bc8888a765dd4efb1b3539cc2bbac684ed9 +Author: Panu Matilainen +Date: Fri Feb 15 15:21:22 2008 +0200 + + Shut up another case of FUSE mount stat whining (rhbz#432907) + +commit e93d76665d1ca0f7388ce22f1da1c38ce0900dac +Author: Panu Matilainen +Date: Thu Feb 14 15:02:18 2008 +0200 + + Improve header i18n locale matching + - Get best lang from rpm HEADERI18NTABLE, instead of getting first fuzzy match + (eg: zh_TW matches zh_CN whereas zh_TW entry is available) + + Patch from Pascal Rigaux + +commit 9f8aa63490ac5091e77b9f2b7427f58a299a0eb4 +Author: Panu Matilainen +Date: Thu Feb 14 13:10:51 2008 +0200 + + Fix a bunch of string format mismatches found by gcc's variadic checks + + Patch from Michal Marek + +commit 7585967f4707f4540517fca498b9c8683cf683cc +Author: Panu Matilainen +Date: Mon Feb 11 20:45:15 2008 +0200 + + Play nice with xargs + - xargs considers exit status 255 special, avoid it. The exit status is + unrealiable anyway so 254 vs 255 shouldn't matter + + Patch from Michal Marek + +commit 9dc19803d5495b598db0edb4b650d672c2a1f024 +Author: Panu Matilainen +Date: Mon Feb 11 20:12:32 2008 +0200 + + Updated sr translation + new sr@latin version from MiloÅ¡ KomarÄević + +commit 36e6679eb09bd93782098f653771e75939313c72 +Author: Peter Jones +Date: Fri Feb 8 14:58:26 2008 -0500 + + Don't add syntax errors while I add sorting... + +commit ee6b38a9d11b8737f692aa5f954ac198bf4c46f1 +Author: Peter Jones +Date: Fri Feb 8 14:54:29 2008 -0500 + + make gendiff sort the file list, so comparing the results is easier. + +commit 82b547aa26aac6e0580dfaedbbc84b99c558f586 +Author: Panu Matilainen +Date: Fri Feb 8 13:45:56 2008 +0200 + + Oops, package type in lead was reversed... + +commit d718b12f5bf5b94c418b8235e45625cbccca6220 +Author: Panu Matilainen +Date: Tue Feb 5 17:42:19 2008 +0200 + + Mass convert (back) to rpmTag as it's usable everywhere now + - cast away a few cases where the enum usage causes ridiculous amount + of compiler warnings from unhandled switch-cases + +commit 53ca9c775f5f3954f140f462d22bb28cde02c6cd +Author: Panu Matilainen +Date: Tue Feb 5 16:35:44 2008 +0200 + + Use rpmSigTag enum for signature tags everywhere, more or less.. + +commit 130118d594ef2dfb02e5a2938fe4e1da1b3e6955 +Author: Panu Matilainen +Date: Tue Feb 5 16:14:34 2008 +0200 + + Use rpmTagType always now that it's available everywhere + - RPM_MASK_TYPE is not a datatype, move it out of the enum + - add missing cases python header handling to shut up gcc + +commit bbcf8f5ff09a11ba9dcf688c923afcfd62dd9d4d +Author: Panu Matilainen +Date: Tue Feb 5 15:32:33 2008 +0200 + + Couple of missed type abstractions + +commit 36e9f885e161395e2dfb033dcd7db1667764f273 +Author: Panu Matilainen +Date: Tue Feb 5 15:29:37 2008 +0200 + + Yet another typedef for transaction ID, use where spotted + - most remaining [u]int16|32 uses are indexes and such, ie actual numbers + +commit ceb96638f6ceba45f353c132b104543404515fed +Author: Panu Matilainen +Date: Tue Feb 5 15:15:41 2008 +0200 + + Use rpm_flag_t for header generic bitfields (file flags etc) + - additionally use rpmfileAtts / rpmVerifyFlags consistently where + appropriate + +commit bb72efaaaa6dad878877eeb12cbad67383a0cf35 +Author: Panu Matilainen +Date: Tue Feb 5 14:50:42 2008 +0200 + + rpm5.org: free 5 bits for rpmfc coloring expansion + - also fixes an overlap between RPMFC_LIBTOOL and RPMFC_MONO which we + had and were out of bits already + +commit 455c428c066801431e98d70d5f57bf3ca3f37174 +Author: Panu Matilainen +Date: Tue Feb 5 14:28:06 2008 +0200 + + Couple of int -> rpmVSFlags type corrections + +commit 4391fce5e16459ce7bf52eb601c2518f3d456d41 +Author: Panu Matilainen +Date: Tue Feb 5 14:25:16 2008 +0200 + + Doxygen bits for rpmtypes, much to do still + +commit 5d38313e7c26bf628389382b78ef8f0db138e787 +Author: Panu Matilainen +Date: Tue Feb 5 13:53:19 2008 +0200 + + Adjust potfiles from rpmlibprov removal, update... + +commit 9849c79d8d9c26f52831fd361bc3569926605a92 +Author: Panu Matilainen +Date: Tue Feb 5 13:52:30 2008 +0200 + + A missed color type in rpmds header + +commit 50e2d4c26f3534baa6ec9be354e710a6e0ad6d88 +Author: Panu Matilainen +Date: Tue Feb 5 13:49:13 2008 +0200 + + Split non-cli verify bits from rpmcli to separate header + +commit 9b0967588abde9599751a6ede176fa429202dd72 +Author: Panu Matilainen +Date: Tue Feb 5 13:09:13 2008 +0200 + + More rpm-headerdata types: rpm_dev_t and rpm_ino_t, use where spotted + - both hardwired to 32bit internally + +commit e5116e43d753114f9966ff42f507310a61f620eb +Author: Panu Matilainen +Date: Tue Feb 5 12:58:05 2008 +0200 + + Add rpm_rdev_t type for rdev entries + - rdev is 16bit whereas dev is 32bit, eww... + +commit e7ac5fb183c4c0e5762d7f18c1c19c03fcdc2b3c +Author: Panu Matilainen +Date: Tue Feb 5 12:31:32 2008 +0200 + + Add rpm_mode_t type, use where spotted + - bring the types under some sort of control, previously mixture of + int16_t, uint16_t and unsigned short was used.. + +commit 630a5a4c1a34f12ae264cba870005de0858353e6 +Author: Panu Matilainen +Date: Tue Feb 5 12:12:31 2008 +0200 + + Add rpm_color_t type for rpm color bits, use where spotted + +commit b12cb085232a586ebca8673ee766d9d6e826c8dd +Author: Panu Matilainen +Date: Tue Feb 5 11:43:38 2008 +0200 + + Port some rpmds improvements from rpm5.org + - rpmlib provides as rpmds, lose the special case hackery + - new functions rpmdsRpmlib() and rpmdsSearch() + python bindings for them + +commit e1ca3be052b4f0bbc417489c3f97a00323630469 +Author: Panu Matilainen +Date: Tue Feb 5 10:08:44 2008 +0200 + + Rip the horrible (ia64) autorelocate kludgery. RIP. + - we don't support relocated x86 on ppc in qemu either... + +commit 5786cf78db37d9b129470cefdce5c0faf2c5c183 +Author: Panu Matilainen +Date: Tue Feb 5 09:41:11 2008 +0200 + + Use helper function to eliminate some copy-paste code + +commit 21ff694d9ccacd86c1e570fdc3af030e98d6da10 +Author: Panu Matilainen +Date: Mon Feb 4 12:33:02 2008 +0200 + + Remove double documention for exported header functions + +commit df1467c357aa18b4bc6a43df4832460d302054a4 +Author: Panu Matilainen +Date: Mon Feb 4 12:28:02 2008 +0200 + + Rip the useless header method vectors + +commit 1df890dd0230ffceba86832b320d377b4d505cfb +Author: Panu Matilainen +Date: Mon Feb 4 12:00:30 2008 +0200 + + Make check-programs build again, assorted type-fiddlings.. + +commit aca6d4a2c4cb5ce76031884933661115c80ca6c1 +Author: Panu Matilainen +Date: Mon Feb 4 11:50:39 2008 +0200 + + Add rpm_time_t type for time types (in headers), use where spotted + - easy to spot, easy to change... + - time_t size can vary, header data needs fixed size + +commit e886043a1027fabf975f5e6542437e412a137e67 +Author: Panu Matilainen +Date: Mon Feb 4 11:27:00 2008 +0200 + + Add rpm_off_t type for file size types, use where spotted + - preliminaries for bumping up the max size, use rpm-specific type + as off_t size varies, header data needs fixed size + +commit f53c32337238b84bb2c555ca12cdc07f6a963361 +Author: Panu Matilainen +Date: Sun Feb 3 16:24:07 2008 +0200 + + Make rpmtag.h standalone, include from rpmtypes.h + - permits header.h to use the tag types + - revert other includes back to header.h, more crazy #include churn... + - rpmTagTable etc in header.h for now, don't really belong there but... + +commit abce05919d417b026bedd81d3a08f91625392530 +Author: Panu Matilainen +Date: Sun Feb 3 16:09:20 2008 +0200 + + Use rpmTag etc enums for rpmTagGet*() functions + +commit cf34aa5a37eedb79af6ab0f0cbf86a15c56dcb86 +Author: Panu Matilainen +Date: Sun Feb 3 15:41:52 2008 +0200 + + Stuff signature tags to rpmtag.h along with other tags, add enum typedef + +commit db3f67ed5b53452a749427a16254a2d231522063 +Author: Panu Matilainen +Date: Fri Feb 1 20:28:31 2008 +0200 + + Fix platform dir creation, doh + +commit 7ffa128552d62cab163b534d1c7a8408b2baf6c2 +Author: Panu Matilainen +Date: Fri Feb 1 20:23:25 2008 +0200 + + Update translations for a change.. + +commit 7a77e1fd9fcd657fec32704628b77f6104cf5103 +Author: Panu Matilainen +Date: Fri Feb 1 20:18:23 2008 +0200 + + Move platform specific macros under RPMCONFIGDIR/platform/ + - reduce the clutter in RPMCONFIGDIR, nicer for packaging too.. + +commit 15f33b33e62a703105671dff675689265da88b16 +Author: Panu Matilainen +Date: Fri Feb 1 19:53:04 2008 +0200 + + Ditch the "system" %_topdir, default to ~/rpmbuild instead + - building as root should be discouraged and /usr/src for building stuff + is horribly wrong anyway + +commit cc9880edc2ddf4d390f59b8b111222d42f73a816 +Author: Panu Matilainen +Date: Fri Feb 1 17:27:22 2008 +0200 + + Don't close GPG/PGP stdin to avoid harmless warning (rhbz#197602) + - patch from rpm5.org + +commit a23502798fb1091b5ede3f1886c2dc8ed3e9e8cf +Author: Panu Matilainen +Date: Fri Feb 1 13:25:18 2008 +0200 + + Avoid silly fixed size buffer in urlhelper + +commit cc69dd20b8d0afdc09957c84eae0957ab1552618 +Author: Panu Matilainen +Date: Fri Feb 1 13:00:40 2008 +0200 + + Allocate macro buffers dynamically + - avoids some entirely needless overflow cases + - somewhat similarly to rpm5.org but use heap instead of stack + +commit 56405587f4b3890b34243904629cfa55cb345ce6 +Author: Panu Matilainen +Date: Fri Feb 1 12:11:03 2008 +0200 + + Allocate various macro buffers from heap not stack + +commit 54ab76019e8656950c9f9bf144edd549805dee0b +Author: Panu Matilainen +Date: Fri Feb 1 11:36:13 2008 +0200 + + Define + use MACROBUFSIZ for macro expansion buffer size + - double the buffer size while at it... + +commit d3d60512bd1df6ed5027a9dedf1d1ab97f969ad6 +Author: Panu Matilainen +Date: Fri Feb 1 11:09:13 2008 +0200 + + Macro shell expansion fixes (rhbz#431009) + +commit fbc9b689fb7c30cabe51ec7b18bd692451249df1 +Author: Panu Matilainen +Date: Wed Jan 30 17:20:09 2008 +0200 + + Add rpmtypes to doxygen, with todo reminders.. + +commit eb5dc35c196c2b18e934a046627ee59d54e175d6 +Author: Panu Matilainen +Date: Wed Jan 30 17:05:29 2008 +0200 + + Include spring-cleaning + - put some consistency into include ordering + - everything (apart from bits missed ;) is now ordered like this + 1. "system.h" + 2. other system includes + 3. rpm public headers + 4. rpm private headers + 5. "debug.h" + +commit d2efb5d77c0a3a2f5919d40efe5e163254422b6f +Author: Panu Matilainen +Date: Wed Jan 30 16:04:40 2008 +0200 + + Use rpmsenseFlags type for dependency flags everywhere (hopefully) + +commit 87e01f336262f3738211c0426304590ed16284f8 +Author: Panu Matilainen +Date: Wed Jan 30 14:27:41 2008 +0200 + + Use headerIsSource() instead of doing it manually + +commit 99faa2735b4b52104a724c6a2f8a7a806bc9c7e5 +Author: Panu Matilainen +Date: Wed Jan 30 13:53:51 2008 +0200 + + rpmlib.h mass eviction + - explicitly include what's really needed instead + - document remaining uses + +commit 7751f84bf03076eb6ad90ad0d10144846726bdfb +Author: Panu Matilainen +Date: Wed Jan 30 13:03:54 2008 +0200 + + Move HGE and related prototypes to header.h + +commit ecabf137102a980528f166b9690efb8adbcef95f +Author: Panu Matilainen +Date: Wed Jan 30 13:00:26 2008 +0200 + + Move rpmTagType stuff to rpmtag.h now that they can move + +commit 6af8116e7268eb20d5127796d61e55d96360171a +Author: Panu Matilainen +Date: Wed Jan 30 12:59:38 2008 +0200 + + Stick rpmCallbackType to rpmtypes too.. + +commit 118db841210eb3809b6640a95b03214b0f3bc648 +Author: Panu Matilainen +Date: Wed Jan 30 12:51:09 2008 +0200 + + Add missing system includes + +commit c482427fbfd604d665e7fd28d77cd58a22b089ae +Author: Panu Matilainen +Date: Wed Jan 30 12:42:07 2008 +0200 + + Uninline headerFreeData() + +commit 78f1f6378e3d18c1b46dc22125c6d3e0808f26af +Author: Panu Matilainen +Date: Wed Jan 30 12:21:59 2008 +0200 + + Stick relocation struct to rpmfi, typedef to rpmtypes... + +commit 90fbda71036fe0614558750fb4fa862c3b8f1413 +Author: Panu Matilainen +Date: Wed Jan 30 12:20:59 2008 +0200 + + Move FD_t to rpmtypes.h, used all over .. + +commit e97aefc89bdd10616a8bd0fce642a93148ab357a +Author: Panu Matilainen +Date: Wed Jan 30 11:55:06 2008 +0200 + + Move rpmRC definition to rpmtypes + - lot of places drag in rpmlib.h just for that... + +commit 73ebfe9ad49e56230393ff2ffa818436b40fdedd +Author: Panu Matilainen +Date: Wed Jan 30 11:51:28 2008 +0200 + + rpmgi.h doesn't need rpmte and rpmts headers, implementation does + +commit 458bf3b208e3efdd880db42c62f3b12b4eed4da0 +Author: Panu Matilainen +Date: Wed Jan 30 11:49:25 2008 +0200 + + Remove bunch of unnecessary rpmlib.h includes + - replace with rpmtypes.h where needed + +commit e4d43147ee34310a7753383ffde0e24737fddc1c +Author: Panu Matilainen +Date: Wed Jan 30 11:02:39 2008 +0200 + + Move header and -iterator to rpmtypes + +commit 8f4000b00b9e1a4c7db2eeca71fec1b47e3e0b63 +Author: Panu Matilainen +Date: Wed Jan 30 10:57:15 2008 +0200 + + Move rpmalKey and rpmal to rpmtypes + +commit ebbcd155e71ef8ccfe4d3a4f6b6f00f67f089cda +Author: Panu Matilainen +Date: Wed Jan 30 10:54:04 2008 +0200 + + Move fnpyKey typedef to rpmtypes, its widely used... + +commit 3952ef87858c56094d8287d542f3aedd4cef6987 +Author: Panu Matilainen +Date: Wed Jan 30 10:33:32 2008 +0200 + + Move rpmts and other major data typedefs to rpmtypes from rpmlib + +commit 3564b3a5ed2f2a6fe42fcab5af96f3cbc244fe96 +Author: Panu Matilainen +Date: Wed Jan 30 10:23:47 2008 +0200 + + Add missing c++ ifdefs to rpmtag and rpmtypes headers + +commit 66345bfc5a141f30625746d087ce9d721746c8b8 +Author: Panu Matilainen +Date: Wed Jan 30 10:16:14 2008 +0200 + + Move header tagdata types from header.h to rpmtypes.h + +commit 0760e7389fc6c574cbaabb5788e29a69d3fa9dfb +Author: Panu Matilainen +Date: Wed Jan 30 10:13:09 2008 +0200 + + Add stub rpmtypes.h header stub + - place to stick in common typedefs to untangle header cross-include jungle + +commit 2adf19b3d3910b9ed579f89144dba0263e277c60 +Author: Panu Matilainen +Date: Wed Jan 30 09:36:02 2008 +0200 + + Remove fts flag API symbols from help messages + - a --help message isn't an API reference... + +commit 265b1f017fa7bbe7c6e2f92c910465c38eba8aa6 +Author: Panu Matilainen +Date: Wed Jan 30 09:24:43 2008 +0200 + + Updated Polish translation (Piotr DrÄ…g) + +commit 87458bd399a8696cd0b6e981bb60a2f4de1c48d8 +Author: Panu Matilainen +Date: Mon Jan 28 15:10:14 2008 +0200 + + Make rpmbuild -bs and -ts imply --nodeps (rhbz#235507) + - better fix might be creating srpm header early but until then... + +commit e39b131750525e0f5a172ebee55154db6b71be7b +Author: Panu Matilainen +Date: Mon Jan 28 13:43:32 2008 +0200 + + More missing system includes for size_t & friends + +commit 80ca9f368f5ed417c57f524e88fa75f2b2ccc991 +Author: Panu Matilainen +Date: Mon Jan 28 11:45:38 2008 +0200 + + Add missing system includes to rpmmacro.h + +commit 339f85db55c08d6cc28ec0076d4e8680813f15fc +Author: Panu Matilainen +Date: Mon Jan 28 09:20:33 2008 +0200 + + Fix printing of filenames with whitespace in check-files (rhbz#430428) + +commit f2c6bef540faf4ba9b7a15b284a5d64f9c8b00fa +Author: Panu Matilainen +Date: Fri Jan 25 17:33:35 2008 +0200 + + Urgh, add geode to x86_64 secondary arch subst-crack... + +commit 43636bc513cc6f2a5ebf92015e1d74be981a2225 +Author: Panu Matilainen +Date: Sun Jan 27 17:28:32 2008 +0200 + + Document libmagic requirement + +commit 95b03441ccd5483503d9f5455655c256d0932007 +Author: Panu Matilainen +Date: Sun Jan 27 16:39:40 2008 +0200 + + Rename isCompressed() -> rpmFileIsCompressed() for namespacing + +commit 8e2965886f6347850b6e769cb27f4fb3ada7677d +Author: Panu Matilainen +Date: Sun Jan 27 16:13:47 2008 +0200 + + Couple of missing doxygen groupings + +commit a0a972702a940175b3c3ca2491c6e4d0a9461e63 +Author: Panu Matilainen +Date: Sun Jan 27 16:11:46 2008 +0200 + + Detect lzma magic if it exists, otherwise dumb check for .lzma filename + - Newer lzma-utils make a magic header in archives, current stable versions + don't. Guessing based on common compression flags used by current lzma + versions is feeble and futile... + +commit c693169deeabf8f9a65a824699cc0c98cedd491f +Author: Panu Matilainen +Date: Sun Jan 27 16:00:40 2008 +0200 + + Use the suffix checker in rpmfc instead of inline defined version + +commit f0f392cce6c07fd4a41a392bc912a76238ee14eb +Author: Panu Matilainen +Date: Sun Jan 27 16:00:06 2008 +0200 + + Helper function for checking given suffix on path + +commit c63f859b78b7465aed64a85635a3d1d5e0f7b9d7 +Author: Panu Matilainen +Date: Fri Jan 25 13:54:39 2008 +0200 + + Quote find-debuginfo builddir to avoid whitespace issues + +commit 70e793db8944a9db0e6f49ce012c28dbda973369 +Author: Panu Matilainen +Date: Fri Jan 25 12:24:55 2008 +0200 + + Don't reset target when reading included rpmrc's. + Doesn't seem to break anything and fixes rhbz#232429 AFAICT... + +commit acf2fef3084c23e13751c39f3eb48dca12af947a +Author: Panu Matilainen +Date: Fri Jan 25 12:20:56 2008 +0200 + + Hackery to get secondary arch macros included on x86_64 (rhbz#194123) + +commit 0d7bf59ad10cffb3d99fb309fd23083721ade106 +Author: Panu Matilainen +Date: Fri Jan 25 12:14:23 2008 +0200 + + Bandaid patch for truncated error message in russian (mdvbz#31680) + + Just up the stupid static reservation "high enuff" for now. + asprintf() would be nice here but it's not at all portable, revisit later. + +commit ee655d91a2dfd5e8863dca582077d1bd65cb240b +Author: Panu Matilainen +Date: Fri Jan 25 12:01:16 2008 +0200 + + Permit conflicting ghost files + Patch from Pascal Rigaux + +commit 86c2aa8cd638be53d35a22b4fc1302be434b8851 +Author: Panu Matilainen +Date: Fri Jan 25 08:30:32 2008 +0200 + + Print regular provides on build too (mdvbz#36672) + + Patch ported from rpm5.org by Pascal Rigaux + +commit f62311615186365733b37681a8c010f12bea79f6 +Author: Panu Matilainen +Date: Thu Jan 24 09:34:33 2008 +0200 + + Missing space in russian translation (mdvbz#36974) + Patch originally from Andrey Borzenkov + +commit eec03952be8cea647d1e4a2147f49e41a3051983 +Author: Panu Matilainen +Date: Wed Jan 23 07:56:51 2008 +0200 + + Make uncompress macros match reality (_ vs __ prefix) + +commit 240b2d3441ce0711b0eacdc5345b3a4d9b77a716 +Author: Panu Matilainen +Date: Sat Jan 19 11:40:59 2008 +0200 + + Add support for Geode CPU (rhbz#428979) + + Patch from Dennis Gilmore + +commit 735c83ad5291858cc981f739c3db5165d50598d5 +Author: Panu Matilainen +Date: Thu Jan 10 13:39:00 2008 +0200 + + Define and use UGIDMAX instead of hardcoded 1024 all over + +commit 76d8c768363731b89da2c5db7625d2369adc5175 +Author: Panu Matilainen +Date: Thu Jan 10 13:35:03 2008 +0200 + + pgpHexStr() returns pointer to static buffer, return const char * + +commit 6243ccd1e67f23e3ff07438c34ce18d5893b51df +Author: Panu Matilainen +Date: Thu Jan 10 11:48:31 2008 +0200 + + And *really* skip the leading % in --define, double duh :) + +commit 9672ca6925f51d4c6dc623ad1d6eda83a20d5461 +Author: Panu Matilainen +Date: Thu Jan 10 08:44:21 2008 +0200 + + Fix thinko in macroname underscore conversion, duh + +commit 927865ad4a370f316b58c6322e7e9bfc8a64553d +Author: Panu Matilainen +Date: Wed Jan 9 18:56:34 2008 +0200 + + Document internal vs external BDB usage in INSTALL + +commit 924007789d9ae450610cb839eb3f244580105d36 +Author: Panu Matilainen +Date: Wed Jan 9 19:07:20 2008 +0200 + + Drop internal db from dist tarballs + - tarball down to almost 1/4 of earlier size + - check if internal db is present in configure, point to INSTALL if not + - distcheck needs --with-external-db now to have any chance at working + - leaving to hg for now for easy reversal if getting second thoughts ;) + +commit d4ec2ad87f544e18be164964ab8b04cb5ed3ad0f +Author: Panu Matilainen +Date: Wed Jan 9 17:50:25 2008 +0200 + + Dirty hack to determine BDB .la name automatically + +commit b28ad6b47bda0c0ac49fdd10bf5f4f0c5e09964f +Author: Panu Matilainen +Date: Wed Jan 9 11:11:49 2008 +0200 + + Implementation of triggerprein scriptlets. + Ported from rpm5.org work of Jeff Johnson to 4.4.x by Pascal Rigaux, + further adopted to fit HEAD... + +commit 478ec787f36ddac045dceb5727a699b7359bbbe7 +Author: Panu Matilainen +Date: Wed Jan 9 10:39:55 2008 +0200 + + Permit files with glob characters in *.rpm packages (#147383) + Patch from Alexander Suvorov + +commit 88c020f771f477aa70b7251dde762cd8fb6fbf0d +Author: Panu Matilainen +Date: Wed Jan 9 10:34:08 2008 +0200 + + Avoid access(2) quirks querying symlinks, lstat(2) instead (#60288) + Ported from rpm5.org work of Jeff Johnson + +commit a97100ba1dae7849571f30075d7564fb0124dc91 +Author: Panu Matilainen +Date: Wed Jan 9 10:21:01 2008 +0200 + + Handle spaces in file path arguments correctly (#217258) + Ported from rpm5.org work of Jeff Johnson with some differences: + - place into rpmfileutil instead of rpmgi as it's more generic than just rpmgi + - rename rpmgiEscapeSpaces -> rpmEscapeSpaces + - return char *, not const char * as the return string must be freed by caller + +commit 4906b9c55e97a9db8f5db4691a09253ddfadd976 +Author: Panu Matilainen +Date: Wed Jan 9 09:28:09 2008 +0200 + + Convert '-' to '_' within --define macro names (#124995) + Patch derived from rpm5.org of Jeff Johnson + +commit ce9ba5a7da2a53795f7fa71a593c645debf8f74a +Author: Panu Matilainen +Date: Wed Jan 9 09:22:31 2008 +0200 + + Last 8 bytes of RSA modulus is keyid for V3 pubkeys (#205080) + - ported from rpm5.org work of Jeff Johnson + - minimal fix suitable for 4.4.2.x too, full rpm5.org changes require + api changes which would be ok for HEAD but that's a bigger task... + +commit 02824f0e9d9c818c46682c13502a7eab5a4ebb0b +Author: Panu Matilainen +Date: Mon Jan 7 16:09:20 2008 +0200 + + Set a default 0022 umask value always (#83006) + Patch derived from rpm5.org work of Jeff Johnson + +commit c80bd01564129d531107f9f8458fc7c07e64bba5 +Author: Panu Matilainen +Date: Mon Jan 7 15:37:43 2008 +0200 + + Print --usage to stderr instead of stdout (rhbz#164021) + Patch derived from rpm5.org work of Jeff Johnson + +commit fcf6b50378eaeac4c1f7ca215b33586b4d41072f +Author: Panu Matilainen +Date: Mon Jan 7 14:48:57 2008 +0200 + + Don't unlink non-temporary file in FSM_UNDO (rhbz#223931) + Ported from rpm5.org work of Jeff Johnson. + +commit 3f9cde75df2c4bf7c1de3dd309d3d43fe22d0df4 +Author: Panu Matilainen +Date: Mon Jan 7 14:25:24 2008 +0200 + + Fix field-width specifiers when no space between (rhbz#323221) + Ported from rpm5.org work of Jeff Johnson. + +commit 37bff306ae3ca6e7402939748fc9b3ea062851fb +Author: Panu Matilainen +Date: Mon Jan 7 13:57:10 2008 +0200 + + Handle "use vX.X.X" in perl dependency extraction (rhbz#140597) + Patch by Steven Prichard + +commit a93afe303547408a6a477c08e7e7b8e53b3f91d1 +Author: Panu Matilainen +Date: Fri Jan 4 12:04:49 2008 +0200 + + Saner RPM_FORCEFREE_TYPE definition + +commit 243e97302da9e9029f417fa3c698a2973a4e65b7 +Author: Panu Matilainen +Date: Fri Jan 4 12:00:51 2008 +0200 + + Remove now useless nested function in debugedit + +commit d50839b8b3c4793a5c98c36f6e487aa12b9be3ba +Author: Panu Matilainen +Date: Thu Jan 3 12:37:03 2008 +0200 + + Lose unused pgpMpiHex() + +commit 083fde4d7847e6d2fab3ef0978dc4458482c3633 +Author: Panu Matilainen +Date: Wed Jan 2 17:47:30 2008 +0200 + + Revert rpmfi bits from 01cd03ea8f8a + - nasty breakage from new signedness mismatches.. + +commit 68e1d60be3e53c51d142dfca7b7a1501e867b681 +Author: Panu Matilainen +Date: Wed Jan 2 17:02:06 2008 +0200 + + Signedness consistency in rpmfi interface vs internal structures + +commit bb70bbb7734a2a069bf97b08a354e04fb3debfdf +Author: Panu Matilainen +Date: Wed Jan 2 16:18:55 2008 +0200 + + Avoid compressFilelist() stack overflow in pathological cases + - allocate dirNames etc arrays on heap, not stack + - the arrays can be rather large and alloca isn't very friendly when it + fails... + +commit 505e8c352cdcd389b014e2276df30fb06e5984cd +Author: Panu Matilainen +Date: Wed Jan 2 15:02:18 2008 +0200 + + Teach (unused) headerFreeTag about RPM_FORCEFREE_TYPE + +commit a9490bf57a52818fd67437d8389804641d8f875a +Author: Panu Matilainen +Date: Wed Jan 2 14:44:58 2008 +0200 + + Gah, nss doesn't use size_t for lengths... + +commit 84386510030999daa5416eb17816bec9f2aa384b +Author: Panu Matilainen +Date: Wed Jan 2 14:37:16 2008 +0200 + + Assorted int -> size_t string size fixes in build code + +commit 2a27a8fcdb33c69ead5df3701239c8d97c8c6e70 +Author: Panu Matilainen +Date: Wed Jan 2 14:10:25 2008 +0200 + + More assorted int -> size_t uses + +commit 519eaaf236866602e1f05cf138ebb263b465f2b7 +Author: Panu Matilainen +Date: Wed Jan 2 13:55:16 2008 +0200 + + Assorted int -> size_t corrections for string lengths + +commit d772111b9131a9fc7ad4da1008ba6fb202344a2f +Author: Panu Matilainen +Date: Wed Jan 2 13:22:26 2008 +0200 + + Use size_t, not int for header format padding args + +commit addac6a86be1a6c7a668f97c9d7a0d85277f6779 +Author: Panu Matilainen +Date: Wed Dec 19 12:05:56 2007 +0200 + + Add rpm_data_t (and _constdata_t) for header data, use everywhere + - consistent, easy to grep for and change... + - bogus consts removed where spotted + +commit 44c90ce3f0c5f4686338b4b746b9bece8510d757 +Author: Panu Matilainen +Date: Wed Dec 19 14:13:34 2007 +0200 + + Const-pedantry here and there... + +commit 5bd20cf9db51053ff8d72a306e6296c8c744856f +Author: Panu Matilainen +Date: Wed Dec 19 13:19:55 2007 +0200 + + Const pedantry + +commit 8e00018c88f1467eb1c1e2760a4de96bcdbae68a +Author: Panu Matilainen +Date: Wed Dec 19 12:49:52 2007 +0200 + + Fix some const issues in macros + +commit 123beef21660b446c124acb7a9ed769c95844eed +Author: Panu Matilainen +Date: Mon Dec 31 11:56:06 2007 +0200 + + tgi doesnt need fts private include + +commit 85b0dd95318af5d252f4e1064df2eacdddd627fe +Author: Panu Matilainen +Date: Sat Dec 22 14:26:56 2007 +0200 + + Fix multi-line macro expansion in last line of spec (mdvbz#27417) + + Patch from Pascal Rigaux: + + 1. creating functions restoreFirstChar(), copyNextLineFromOFI() and + copyNextLineFinish() out of copyNextLine() + 2. creating function readLineFromOFI() out of readLine() + 3. inline copyNextLine + 4. if we can restoreFirstChar, then use it, otherwise read from file + (ie don't read from file when we have a remaining multiline macro in + spec->nextline) + +commit d4676384db65b0480af9dbbd488d43bd37b2080c +Author: Panu Matilainen +Date: Wed Dec 19 18:53:14 2007 +0200 + + Hum, NSS needs to be shut down too + - some ~80 bytes are still leaked apparently from somewhere within nss/nspr + +commit 19f943cc3673830a5b41daa8e295a94e5570af20 +Author: Panu Matilainen +Date: Wed Dec 19 09:38:32 2007 +0200 + + Add dumb maintainer snapshot generator make rule + +commit 4d2151d160c34e7bfca0bae0f44c5eab21e6d401 +Author: Panu Matilainen +Date: Wed Dec 19 09:12:59 2007 +0200 + + Ordering fix (don't use RPMSENSE_PREREQ) from Pascal Rigaux + +commit 20bfd34975b7c4af9cce95167a227e9f9fe58316 +Author: Panu Matilainen +Date: Wed Dec 19 09:01:39 2007 +0200 + + Drop duplicate locale.h check + +commit 23b25e10c65216b6cb271e9ba43ad7bf8d53192e +Author: Panu Matilainen +Date: Tue Dec 18 21:33:40 2007 +0200 + + Avoid exiting too early due to nested rpmdbCheckSignals() + +commit 38bb0b6c9b355915a69db476974bea1503fce147 +Author: Panu Matilainen +Date: Tue Dec 18 13:42:42 2007 +0200 + + Update translations + +commit fd53dcf94d1836e5ba30b390f5289c6e29e7ff8c +Author: Panu Matilainen +Date: Tue Dec 18 13:41:29 2007 +0200 + + Todo-update... + +commit 4f9b7814fa510b5197d5e423b48ad8aa304ce133 +Author: Panu Matilainen +Date: Tue Dec 18 12:53:57 2007 +0200 + + Drop bogus const from rpmReadPackageManifest argvptr + - it's malloced and needs freeing by the caller.. + +commit 22d169c102c531aa2eca7d232818bfe38ca73f45 +Author: Panu Matilainen +Date: Tue Dec 18 12:53:16 2007 +0200 + + Cast to silence gcc.. + +commit 6965fbd5c8c3d6228989fa89cc8e2c107965aba9 +Author: Panu Matilainen +Date: Tue Dec 18 12:29:46 2007 +0200 + + One leftover reloc constfree.. + +commit 640b2e3e797f8b13c9fe3360b5c78300214e88b4 +Author: Panu Matilainen +Date: Tue Dec 18 12:08:13 2007 +0200 + + Remove bunch of bogus cli-related consts... + +commit a631616ce168756f10e58863b053d630dd06a9b4 +Author: Panu Matilainen +Date: Tue Dec 18 12:07:48 2007 +0200 + + Use constfree on relocations for now + - they're totally exposed all they way to rpmqv.c.. eww + +commit bb61fa21e8d93f74a568aec7426e086330d276b9 +Author: Panu Matilainen +Date: Tue Dec 18 11:56:54 2007 +0200 + + Remove bogus const from rpmInstallSource*() parameters + - spec and cookie are malloced and need to be freed by caller + - unconst various other rpmQVK arguments & friends, no api exists to + free them so caller needs to handle anyway + +commit bed447552a88665c566a4b2760f89db03812c12d +Author: Panu Matilainen +Date: Tue Dec 18 10:48:10 2007 +0200 + + Use constfree for rpmts suggestions + - goes down to rpmal returning fnpykey which is declared as const.. + check this later + +commit f88fe168dde009f542f20fc151a595885801364f +Author: Panu Matilainen +Date: Tue Dec 18 10:46:39 2007 +0200 + + Stick constfree to extension cache cleanup + - deal with the header mess later on + +commit 083a82f7f159f8763b9904b32f08bfc58d0c7e40 +Author: Panu Matilainen +Date: Tue Dec 18 10:45:36 2007 +0200 + + Drop bogus const from headerFreeTag() data pointer + - no effect as it's hft is unused + - mark headerFreeData(), the real problem case, with _constfree() for + easy finding (inlined in header.h so can't use _constfree()) + +commit 75df2ea9ad1a44cc836e1c4f43a54ca679b03879 +Author: Panu Matilainen +Date: Tue Dec 18 10:30:35 2007 +0200 + + Drop bogus const from temp variable + +commit 78ad426f040a85965ad33ab64f040012f1b2af39 +Author: Panu Matilainen +Date: Tue Dec 18 10:17:18 2007 +0200 + + Remove bogus const from rpmGlob argv return type + - it's malloced and must be freed by caller + +commit 8bdd462b50b7930c94cd7c59ac068934f60cffcf +Author: Panu Matilainen +Date: Tue Dec 18 10:10:03 2007 +0200 + + Make fsm failedFile non-const like it really is + - callers need to free it so const is wrong + - cast away the hardlink-hackery in fsm instead + +commit 28723cae06d49e4ba2401199da47763b1fc28ef8 +Author: Panu Matilainen +Date: Tue Dec 18 09:54:46 2007 +0200 + + Drop bogus const from temp variable + +commit 2b61b2199fa14b8e48eecda9731ab7ae30f7ee37 +Author: Panu Matilainen +Date: Tue Dec 18 09:49:03 2007 +0200 + + Drop bogus const from zapRelation return + - the retval is malloced from rpmdsNewDNEVR() and must be freed by the caller + +commit addf724f1afa39d7ab0a781d012812cf02890e3d +Author: Panu Matilainen +Date: Tue Dec 18 09:40:33 2007 +0200 + + Drop bogus const from rpmts rootDir + curDir + +commit a56a86a79247f18e79f1ecab90879c05e6df5f45 +Author: Panu Matilainen +Date: Tue Dec 18 09:30:40 2007 +0200 + + Remove bogus const from rpmdb match iterator contents + +commit fbd12ed8018a146ca339f684348302d1f85c277d +Author: Panu Matilainen +Date: Tue Dec 18 09:27:42 2007 +0200 + + Use constfree for rpmdb_s contents for now + - rpmdb_internal is included from several places over the tree + +commit e4c1bb5ac21983de746f5446b3ed564a210d55d4 +Author: Panu Matilainen +Date: Tue Dec 18 09:19:22 2007 +0200 + + Use constfree for rpmhash key + data for now + - sometimes they point to real const data, sometimes not, eww + +commit bf723ddc66d4eeef1e3d3d6d62381ef597df7d78 +Author: Panu Matilainen +Date: Tue Dec 18 09:08:04 2007 +0200 + + Use constfree for fsm path, opath for now + - neither should really be const but they sometimes point to real + const variables, sometimes not.. needs careful review + +commit d0a289256745887dd77c39411aaa9fd8d0b896e0 +Author: Panu Matilainen +Date: Tue Dec 18 07:51:45 2007 +0200 + + Drop const from fs mountpoint, contained within fs + +commit 5c9ab2a393e1cb2e253015a46433c536fa11fad0 +Author: Panu Matilainen +Date: Mon Dec 17 21:45:56 2007 +0200 + + Drop const from temporary variable + +commit 132017fb8dc2f120885f16c84639527466e211ee +Author: Panu Matilainen +Date: Mon Dec 17 19:15:14 2007 +0200 + + Use constfree for rpmte internals for now + - the internals are exposed all over the tree... + +commit cddbd0db316bfc0886609ac1a1e10fe6c10d11e9 +Author: Panu Matilainen +Date: Mon Dec 17 19:11:33 2007 +0200 + + Use constfree for rpmfi internals for now + - the internals are exposed all over the tree... + +commit aee47fd11270a5d5b3db4925e84864a728ae9475 +Author: Panu Matilainen +Date: Mon Dec 17 19:05:19 2007 +0200 + + Remove const from rpmal dirInfo dirname + - add comments wrt needle dirName - those are actual const pointers to + within rpmfi, must not free + +commit 04978c4eaec7c86be705177b53fadd80a459ba00 +Author: Panu Matilainen +Date: Mon Dec 17 16:10:32 2007 +0200 + + Use constfree for psm failedFile for now + - failedFile is malloced by fsm, but removing the const from fsm + gets a bit hairy as failed it's not always malloced + (see changeset 4062:02b0c237b675) so we'd have const-disabling casts instead + of freeing consts... + +commit 3ea6e70658c4554f7c1ed2bb2ccf5cdaef67b12a +Author: Panu Matilainen +Date: Mon Dec 17 15:32:25 2007 +0200 + + Include toplevel Makefile from Makefile.maint + - allow "make dist" in one step with .maint.. + +commit 7460a8db5d22c736e99ff95d123d9518432637d2 +Author: Panu Matilainen +Date: Mon Dec 17 15:30:01 2007 +0200 + + Drop db3 from dist subdirs + - db3/configure is covered by EXTRA_DIST already + +commit cd760eaa96af8854a89fb61a7a859a45ee7654ea +Author: Panu Matilainen +Date: Mon Dec 17 15:07:41 2007 +0200 + + Unconst psm pkgURL and rpmio_flags members + - fully contained within psm + +commit f1df7a59b86b7e40568885d0d51a9bd72453c964 +Author: Panu Matilainen +Date: Mon Dec 17 14:58:02 2007 +0200 + + Make psm opaque, add minimal methods to cover internal needs + +commit bad888114da54dd7b7eaf36faa34f0dfd4139432 +Author: Panu Matilainen +Date: Mon Dec 17 14:03:31 2007 +0200 + + Drop bogus const from dnlFreeIterator() param + +commit b9f2b0788a19f76e89d782a76bc3d784fe4307d9 +Author: Panu Matilainen +Date: Mon Dec 17 14:01:23 2007 +0200 + + Drop bogus const from fsmFsPath() return type + - path is malloced and caller needs to free + - additionally use size_t, not int for string size + +commit 898d2cc867aef7a8637a2afcded0d24baf6d110e +Author: Panu Matilainen +Date: Mon Dec 17 13:50:11 2007 +0200 + + transaction.c doesn't need fsm.h, rpmfi_internal does + +commit 6966c5d8ace09789a22d294e4204e918d91c43d9 +Author: Panu Matilainen +Date: Mon Dec 17 13:39:14 2007 +0200 + + Stick cpioMapFlags to fsm.h, they're only used by fsm.c + - allows FSM* typedefs to move to where they belong + +commit 8268570f48aab6bb2126af2754d1007c959f3da3 +Author: Panu Matilainen +Date: Mon Dec 17 13:20:05 2007 +0200 + + Hide fsmIterator_s struct details, not needed outside fsm.c + +commit c3353c2af418398fe92c0f4febca555ee035474e +Author: Panu Matilainen +Date: Mon Dec 17 13:15:53 2007 +0200 + + Stuff hardLink_s inside fsm.c, add pointer typedef to fsm.h + - nothing outside fsm.c needs except for the declaration in fsm_s + +commit 05a16276ba5c4337f7bd1e1d64957c3ce364c106 +Author: Panu Matilainen +Date: Mon Dec 17 13:01:50 2007 +0200 + + badDeps is encapsulated within depends, doesn't need const + - remove ancient reference code + +commit 834a79e6158d9950f37cf66922875f2a10af4d21 +Author: Panu Matilainen +Date: Mon Dec 17 12:37:01 2007 +0200 + + Use constfree for cleaning up pgp digest contents + - the contents are exposed within rpm (although not public interfaces) + but pgpCleanDig() should be used to free the struct + - pgpDig and pgpDigParams need encapsulation + api... + +commit bef37587d3a0eb9a59661bd02c5e8b46a6c24e7a +Author: Panu Matilainen +Date: Mon Dec 17 11:38:12 2007 +0200 + + Don't bother configuring db3 directory if using external db + +commit 2b50ad6fa4d936ef555235cb032cf7ed9e14ac67 +Author: Panu Matilainen +Date: Mon Dec 17 11:19:55 2007 +0200 + + Make ChangeLog creation depend on .hg directory + - .hg dir timestamp changes on commits, otherwise updating ChangeLog + requires removing it + +commit 68d4b87e8a71335f11ebab703effd972c36631a6 +Author: Panu Matilainen +Date: Mon Dec 17 10:32:16 2007 +0200 + + Unbreak internal dep generator + - more signed -> unsigned count type breakage + +commit 4671a35bbcac3097259657a1425ece1d3fe22ba1 +Author: Panu Matilainen +Date: Mon Dec 17 10:05:37 2007 +0200 + + Unbreak array query formats + - signed -> unsigned count type change broke it.. + +commit acdbac335e7a8e287afa68a1127501029a5a3bec +Author: Panu Matilainen +Date: Sun Dec 16 23:05:21 2007 +0200 + + pgpReadPkts returns malloced memory, unconstify + +commit 7be0a763d282475763c11d7b05d1479d7f0a617e +Author: Panu Matilainen +Date: Sun Dec 16 22:50:30 2007 +0200 + + Lone module-private const .. remove + +commit c41f61369ea55d0c998dfb733b2e74921bca63bf +Author: Panu Matilainen +Date: Sun Dec 16 21:28:37 2007 +0200 + + Unconstify macro contents, fully contained within macro module + +commit 506a8f5365c9cc044754b4365e75481cf26b1b5e +Author: Panu Matilainen +Date: Sun Dec 16 21:24:44 2007 +0200 + + Bogus const in temporary variables + +commit 4a72c2a3f6b3fd712e8e1733be6761c89ec4e25c +Author: Panu Matilainen +Date: Sun Dec 16 21:21:31 2007 +0200 + + More const removals + - both username cache and log records are fully contained within their + modules... + +commit 1f443958a9b0ce3b29db5faa77532a437c77e663 +Author: Panu Matilainen +Date: Sun Dec 16 21:20:05 2007 +0200 + + More constfree for spec exposed stuff for now + - openfileinfo seems easily made opaque, revisit later + +commit 598d6efc865d3c1ca03d52cc1987966d581de288 +Author: Panu Matilainen +Date: Sun Dec 16 20:58:44 2007 +0200 + + Much of spec internals is exposed, let them be const for now + +commit baa659b24dc7098009a7351a4ee1ab921b4b05ee +Author: Panu Matilainen +Date: Sun Dec 16 20:46:56 2007 +0200 + + Remove couple of bogus const uses in temp variables + +commit 35d4663a0dae9abfc6a533bb00d1ee100f477beb +Author: Panu Matilainen +Date: Sun Dec 16 20:39:46 2007 +0200 + + Unconstify FileListRec and AttrRec contents + - not exposed outside files.c + +commit 4ab5affca9c78a8e7f3bfc4af738722db1b93bfa +Author: Panu Matilainen +Date: Sun Dec 16 20:04:30 2007 +0200 + + Unconstify rpmrc internal tables + - not exposed outside rpmrc, "protection" buys nothing + +commit 98fdd1c0617be4182bc23d655ac7778c6f26a24e +Author: Panu Matilainen +Date: Sun Dec 16 19:00:07 2007 +0200 + + Fix default queryformat setting when _query_all_fmt not set + - \n in the rpmExpand() causes the result to always be non-null... + - also avoid unnecessary const free + +commit 14284725e6ddca4a8cd8ce5b0a4ba1e1ee7cef73 +Author: Panu Matilainen +Date: Sun Dec 16 16:25:09 2007 +0200 + + Remove const from rpmMkTempFile file name parameter + - the temp name is malloced and needs to be freed by caller + +commit 3ec48632b894c299c4c4455d4e12bbce0bd37f32 +Author: Panu Matilainen +Date: Sun Dec 16 15:58:40 2007 +0200 + + Refactor rpmReSign() and associated file "management" a bit + - remove unused + useless "rc" parameter from manageFile() + - remove tempfile handling from manageFile(), create + open a tempfile + explicitly in rpmReSign() + - both copyFile() and manageFile() now require file names to be passed always + - split file closing into separate closeFile() function + +commit 3184b09c1bc87f495e45ea25664589ef805c433f +Author: Panu Matilainen +Date: Sun Dec 16 15:51:09 2007 +0200 + + Stupid reversed-logic thinko.. + +commit ca3ac216585253ddccaadcbcc65119cc4babed46 +Author: Panu Matilainen +Date: Sun Dec 16 13:02:27 2007 +0200 + + Remove const from bunch of error message return types + - headerCheck(), rpmReadHeader() and rpmReadSignature() return malloced + error messages the caller needs to free, shouldn't be const + - adjust rpmdb hdrchk callbacks accordingly + +commit 3c002a4c8b0fe71a4ae4685e0fa7f9ddad17fda5 +Author: Panu Matilainen +Date: Sun Dec 16 12:20:45 2007 +0200 + + IDT* structures are exposed, let them use constfree for now.. + +commit fcf5efe3482a79281d4d4f2ea5f4146c8715f0e8 +Author: Panu Matilainen +Date: Sat Dec 15 21:17:59 2007 +0200 + + And yet more bogus const removals... + +commit f013449361e92ea2a6ffaa1bf3e9d1939f18d8b4 +Author: Panu Matilainen +Date: Sat Dec 15 21:14:44 2007 +0200 + + Couple of bogus const removals from rpmgi and rpmds structs + - in both cases the data is already directly inaccessible from outside, + no further protection necessary + +commit aa61b715e6639d6900ca66facb62d5f099dd11d4 +Author: Panu Matilainen +Date: Sat Dec 15 18:33:28 2007 +0200 + + Make bunch of build internal code take const parameters + +commit e8ffcb26b5cb60d4ad6130b0010c40ffd8d83b81 +Author: Panu Matilainen +Date: Sat Dec 15 17:15:39 2007 +0200 + + Further bogus const removals... + +commit 3b6a6c903092409256b81e840b9b0dd67be0f6f3 +Author: Panu Matilainen +Date: Sat Dec 15 17:08:18 2007 +0200 + + Fix incorrect rpmCleanPath() retval comment + +commit dc9c504ae6de92c84e272f4a6e4f68c350236e23 +Author: Panu Matilainen +Date: Sat Dec 15 16:03:18 2007 +0200 + + Another bunch of bogus const removals + +commit bc93e6bc874a8a07e33f7e77a8f09bde5588eeaf +Author: Panu Matilainen +Date: Sat Dec 15 15:59:07 2007 +0200 + + Avoid mixing local malloc with const parameter pointer + +commit 23777730c25e440a20b6a7b0ad7d3e348992e976 +Author: Panu Matilainen +Date: Sat Dec 15 13:43:40 2007 +0200 + + Use _constfree() for freeing urlinfo contents + +commit 20f6d481aabb9dcd4f38e486c80677f5a0d23f67 +Author: Panu Matilainen +Date: Sat Dec 15 13:41:58 2007 +0200 + + Expose compiler warnings from freeing data declared as const + - _free() is just a wrapper to free() which additionally returns NULL + - add _constfree() for use in the cases where const is used to protect + malloced "read-only" data in long-lived otherwise exposed structures etc + +commit b4588a1202783dd9bbee594aa5aea022ccdd3fc9 +Author: Panu Matilainen +Date: Sat Dec 15 11:47:47 2007 +0200 + + Remove bogus const from rpmProblemString() return type + - its malloced so it needs to be freed + - fix all users to actually free + +commit 1a0a12cf159a05471be62016a318d0653ae30ff5 +Author: Panu Matilainen +Date: Sat Dec 15 11:03:46 2007 +0200 + + Remove bogus const from rpmGenPath() temporary targets + +commit b6a663ec0a421d822578d831153bc0fbc2d6f410 +Author: Panu Matilainen +Date: Sat Dec 15 10:39:15 2007 +0200 + + Remove bogus const from rpmGetPath() temporary targets + +commit dce66192f2f01817b3027c8c61c770abbfffd131 +Author: Panu Matilainen +Date: Sat Dec 15 09:39:32 2007 +0200 + + Remove bogus const from rpmGenPath and rpmGetPath return type + - both return malloced strings you're supposed to free + +commit 55cb2ff12836f124d5f8114a3c0d4246ec8fa7a0 +Author: Panu Matilainen +Date: Fri Dec 14 19:52:11 2007 +0200 + + Bogus const removal continued... + +commit 61e35657a6e3ce33a44067e82bb382b8b3133c4a +Author: Panu Matilainen +Date: Fri Dec 14 17:55:31 2007 +0200 + + Another bunch of bogus const removals + +commit f5a712db5be29cf130a545af0645432713f6fa26 +Author: Panu Matilainen +Date: Fri Dec 14 15:50:17 2007 +0200 + + Remove bogus consts.. + +commit 8d66d5fe4a9d7b7b015153edb8f204ac3b89c461 +Author: Panu Matilainen +Date: Fri Dec 14 15:17:59 2007 +0200 + + Bunch of const char* corrections + - functions returning string constants as char * etc... + +commit 7d817f06b14c221bf0fbf74610e4d85093e77fcc +Author: Panu Matilainen +Date: Fri Dec 14 13:39:52 2007 +0200 + + Bunch of silly ssize_t casts + - cuts down the amount of spurious warnings from inlined code... + +commit faa7e730f1ff0e2345d0413fa3bdf6d0fec2d8af +Author: Panu Matilainen +Date: Fri Dec 14 13:38:58 2007 +0200 + + Oops, major + minor are not dev_t... + +commit 0c8401abff5eef9d94ae9f124a7ccf639b12acbd +Author: Panu Matilainen +Date: Fri Dec 14 12:54:35 2007 +0200 + + Yet more type-pedantry... + - use rpm_tag_t for signature tag types too + - size_t, not rpm_count_t in signature generation + - add couple of explicit casts to rpmpgp.h to avoid spurious noise from + inlined functions + +commit 8946859700432de2f8462b672a7d3d3790b09a76 +Author: Panu Matilainen +Date: Fri Dec 14 11:38:20 2007 +0200 + + More size_t type pedantry + +commit 00eea2ffa02db546dac707f4f32595f915062a1d +Author: Panu Matilainen +Date: Fri Dec 14 11:36:48 2007 +0200 + + Oops, rpmpsi index needs to be signed type + +commit 4c91a3b6ad0eca18c732117ca4adf09914b6a64c +Author: Panu Matilainen +Date: Fri Dec 14 10:30:46 2007 +0200 + + More misc size_t issues + +commit 421da7c94a9a81a00de847de2ff7249c9909594a +Author: Panu Matilainen +Date: Fri Dec 14 10:30:01 2007 +0200 + + Use dev_t instead of ints.. + +commit 4714ced24c99460f3af63c140b73b2125eaafd31 +Author: Panu Matilainen +Date: Fri Dec 14 09:35:06 2007 +0200 + + Couple of more size_t uses + related format string fixes + +commit c76674a257dbdc5d4bae11f443d319f6f5ad042c +Author: Panu Matilainen +Date: Thu Dec 13 21:18:37 2007 +0200 + + Big bunch of int -> size_t corrections for various signature items + +commit 1e96ead46670088e6b867cc989eadbef092d5864 +Author: Panu Matilainen +Date: Thu Dec 13 20:35:33 2007 +0200 + + Use rpm_tagtype_t everywhere for rpm (header) tagtype type + - typedef'ed as uint32_t, doesn't matter much but negative types dont exist + - easy to grep, easy to change... + - define RPM_FORCEFREE_TYPE instead of -1 "magic" for forcing + headerFreeData (ugh), easier to grep for and change than "-1" + +commit 7e56c6355bea552d89e8d5d0a317763a8cee4a4f +Author: Panu Matilainen +Date: Thu Dec 13 19:32:37 2007 +0200 + + Use rpm_tag_t everywhere for rpm (header) tag type + - typedef'ed as int32_t for now, negative values used in some places for + error cases + - easy to grep, easy to change... + - add RPMTAG_NOT_FOUND define, used in place of -1 "magic", + +commit cbd7a684a4cd88bfa3383658790be3c37230707a +Author: Panu Matilainen +Date: Thu Dec 13 18:16:39 2007 +0200 + + Use rpm_count_t everywhere for header data count + - typedef'ed as uint32_t as that's the key size limit imposed by BDB, + relevant for RPM_BIN_TYPE + - easy to change to whatever later on as it's now consistent everywhere + - explicit casts where needed to avoid new warnings from signedness + +commit c8f2927227471758abbdb36781d885b01798f0f8 +Author: Panu Matilainen +Date: Thu Dec 13 09:25:10 2007 +0200 + + Use rpm_count_t everywhere for header data count + - typedef'ed as uint32_t as that's the key size limit imposed by BDB, + relevant for RPM_BIN_TYPE + - easy to change to whatever later on as it's now consistent everywhere + +commit 50f608b42f55e1d2c89dc22a01c58b7621b620a5 +Author: Panu Matilainen +Date: Wed Dec 12 14:33:56 2007 +0200 + + Install the new fancy perldep extractor + +commit 4fbc35614992a1e4a62a926aff1f72d8af10729d +Author: Panu Matilainen +Date: Tue Dec 11 14:18:50 2007 +0200 + + Register the new SCRIPT_ERROR callback value to python + +commit 6d1cb6a9da1bf92bac9b630a12df7b9aaafaa2cc +Author: Panu Matilainen +Date: Tue Dec 11 13:50:20 2007 +0200 + + Silly thinko/typo causing source rpms to provide their nvr.. + +commit f407b391c0df60186c301a255448eae89404d05e +Author: Ralf Corsépius +Date: Tue Dec 11 09:12:12 2007 +0100 + + test == is a bashism. + +commit c68860f056ce6bb122b8fac469d07414e8caefdf +Author: Panu Matilainen +Date: Tue Dec 11 08:51:54 2007 +0200 + + OS X Leopard fixes from Giulio Eulisse + +commit 6a779c394b9ed70f7d7b45716b207ebae170f732 +Author: Panu Matilainen +Date: Mon Dec 10 16:06:22 2007 +0200 + + Add python method for for retrieving (without setting) ts vsflags + +commit 0c4fe4a0b092e2fb32d517f45513c1a44fb6ca55 +Author: Panu Matilainen +Date: Sat Dec 8 16:12:10 2007 +0200 + + Drop non-existing librpmmisc from rpm.pc + +commit 9ce13e09ef42ea4efca3c624054b0b719f06a43b +Author: Panu Matilainen +Date: Sat Dec 8 14:02:32 2007 +0200 + + Switch to style for public headers + - adjust include paths accordingly + +commit 179ebc1745b51eb9821dd783c9df475ac539532d +Author: Panu Matilainen +Date: Fri Dec 7 16:19:21 2007 +0200 + + Add RPMCALLBACK_SCRIPT_ERROR callback type + - TS callback has a better chance at doing something semi-intelligent + on scriptlet failure than rpmlog callback + - Hijack "amount" for script tag that failed, "total" for exit code + which might be pretty much anything: waitpid child, actual exit status or + lua error... not probably very useful in the callback but... + - Notify before logging so users can catch the actual error message + on next rpmlog callback.. or something + +commit b67d678e2af33ef9b2b43b7692322fd2898df1aa +Author: Panu Matilainen +Date: Fri Dec 7 15:32:11 2007 +0200 + + Scriptlet (name) handling tweaks + - look up scriptlet names just once inside runScript() + - map trigger types to their real names too + +commit 80f76a471c1b91feb453dead5053bfcc60591ca1 +Author: Panu Matilainen +Date: Fri Dec 7 14:00:34 2007 +0200 + + Add getter methods for rpmlogRec items (message + level) + +commit 037ceff668aca5985870e4c6cf5250adbddc4dae +Author: Panu Matilainen +Date: Fri Dec 7 13:31:31 2007 +0200 + + Rename RPMLOG_CONT to RPMLOG_DEFAULT to make purpose clearer (hopefully ;) + +commit a5f65886f897223fbb476c6ddb8c9f4b7d81d6a3 +Author: Panu Matilainen +Date: Fri Dec 7 13:16:45 2007 +0200 + + Logging enhancements + - add parameters to rpmlogCallback: current log record pointer + + optional user data + - callback return flags to enable/disable default logging behavior and + to perform exit() after cleaning up + - add method for retrieving prefix string for a given message priority + - move default logging behavior out of rpmlog() proper + +commit ca9ff17a4d21ec6ba78a56a0f1ddae7e8e16682e +Author: Panu Matilainen +Date: Fri Dec 7 11:43:06 2007 +0200 + + Make rpmLogRec opaque + +commit e98903dbb10d860f9eb2b5b315aab4b1fa9b4152 +Author: Panu Matilainen +Date: Fri Dec 7 11:34:33 2007 +0200 + + Fix misleading indentation + +commit 8769e540f1d3c25ba05c5d24b69a8b71cfd8dc6b +Author: Panu Matilainen +Date: Fri Dec 7 11:33:18 2007 +0200 + + Don't do tilde expansion if HOME not set + - If you dont have a home, glob() will go out of its way to give you one, + even a wrong one. This isn't good when daemons etc have purposefully + unset HOME... + +commit 2cce0653a15f6a0bdcb4de8b7a5133e810744d32 +Author: Panu Matilainen +Date: Fri Dec 7 10:57:39 2007 +0200 + + More rpmerr.h removal fallout + - use rpmRC types where appropriate + +commit d4622b51354ac454f67d30baf9d3b7276672d3b1 +Author: Panu Matilainen +Date: Fri Dec 7 10:43:53 2007 +0200 + + Yet more rpmbuild fixups from rpmerr.h removal (partly from rpm5.org) + - additionally use rpmRC return types instead of numbers where appropriate + +commit 23bba68b56c590f2fdbb955c60e5dff0ceae5bb8 +Author: Panu Matilainen +Date: Fri Dec 7 09:53:53 2007 +0200 + + rpm5.org: fixup spec parsing from rpmerr.h removal + - renumber rpmParseState enums to leave room for error codes + +commit 2a9c146f31f9695da5af489ff9d14540b10fcd13 +Author: Panu Matilainen +Date: Fri Dec 7 09:28:39 2007 +0200 + + rpm5.org: fixup various places in rpmbuild from rpmerr.h elimination + +commit 79fed162acf572d7c88fd6b08fae3ea088cf5fd3 +Author: Panu Matilainen +Date: Fri Dec 7 09:01:25 2007 +0200 + + rpm5.org: use pid_t, not int in build doScript + +commit 9f34c3244316ee239739229bd3d1c89053d08179 +Author: Panu Matilainen +Date: Wed Dec 5 15:56:18 2007 +0200 + + Fix query return codes (rhbz#244236) + - count + skip over errors in rpmgiNext() instead of stopping iteration + - add rpmgiNumErrors() for retrieving errors, use it in query + +commit c54001150fa2c1408759c81998f8a00e2a96c5c4 +Author: Panu Matilainen +Date: Wed Dec 5 12:57:07 2007 +0200 + + Only platform.in is to be included in dist, dont use wildcard + +commit d4cc1de207c0cefa0331734aa412f0d65fdaf204 +Author: Panu Matilainen +Date: Wed Dec 5 11:56:33 2007 +0200 + + Rename apidocs to hackingdocs, only build on request + +commit 882f3905859e85086dc8e95f36600fe1f0bab541 +Author: Panu Matilainen +Date: Wed Dec 5 11:27:50 2007 +0200 + + base64.h missing from librpmio sources + +commit 8ddd81d0d4815cffa70a4cb0ba284bfec977fc7d +Author: Panu Matilainen +Date: Wed Dec 5 10:37:38 2007 +0200 + + Update potfiles wrt recent changes, regenerate translations + +commit 131cadaec4c78be4e462003fb49681c22f1dc392 +Author: Panu Matilainen +Date: Tue Dec 4 11:28:16 2007 +0200 + + Match filestage strings with the fact that we dont use "rpc" anymore + +commit dbdbe8010cd944f026a5a4e5d071eb31d29d81c4 +Author: Panu Matilainen +Date: Tue Dec 4 11:25:46 2007 +0200 + + Eliminate debug junk from the API + - add some helper macros to accomplish the same, easy to enable / disable + as needed + +commit 422fa0dbeab879d3510c879554c33e359e0ab7ab +Author: Panu Matilainen +Date: Mon Dec 3 18:47:40 2007 +0200 + + Document rpmtsScoreGetEntry() parameter to please doxygen + +commit 2db7896a3489f270a58adc06ae6854c1210f7338 +Author: Panu Matilainen +Date: Mon Dec 3 18:44:48 2007 +0200 + + Remove double documentation from header methods to make doxygen shut up + +commit 6d37b9782dde11b25d22d5922b698b4ec8841eb0 +Author: Panu Matilainen +Date: Mon Dec 3 18:39:56 2007 +0200 + + Fix couple of doxygen file paths, remove obsolete comment + +commit ee9cd5176f308313fc0eae3c59119c454d58c9fa +Author: Panu Matilainen +Date: Mon Dec 3 16:58:16 2007 +0200 + + Rename _rpmdbMatchIterator -> rpmdbMatchIterator_s + - consistency with other similar constructs + +commit a96f817d50953f0fd48bd2a7bb983c82256bbc78 +Author: Panu Matilainen +Date: Mon Dec 3 10:47:25 2007 +0200 + + Split RPMTAG_* and related functions out of rpmlib.h to rpmtag.h + +commit 6bdbbefbecf06b75581b8dfbd4ea626c59ebe312 +Author: Panu Matilainen +Date: Mon Dec 3 10:15:46 2007 +0200 + + Split rpmte internals to separate header + - avoid unnecessary include-order issues + - stop define-games for internals access + +commit 1929c68ea3e61007fb6388fd923e01a0e2dd8378 +Author: Panu Matilainen +Date: Mon Dec 3 10:09:37 2007 +0200 + + Duh, remember to add rpmfi_internal.h to sources.. + +commit 7b98c02efb519c6634ab27f0a774b01e99a7b40d +Author: Panu Matilainen +Date: Sun Dec 2 23:02:33 2007 +0200 + + Move rpmprobFilterFlag enums to rpmps where they logically belong + +commit 249113b17a378e55532a1bd4b01c6954d56e59e1 +Author: Panu Matilainen +Date: Sun Dec 2 22:59:38 2007 +0200 + + Move rpmsenseFlag enums to rpmds where they logically belong + +commit b2a11e03510dde4e805c388b24dcb41e5d1278ab +Author: Panu Matilainen +Date: Sun Dec 2 22:54:14 2007 +0200 + + Move rpmtransFlags enums to rpmts.h where it logically belongs + +commit 361a8e697b934789a8d5560ba42266c9a22a3a0f +Author: Panu Matilainen +Date: Sun Dec 2 22:50:55 2007 +0200 + + Move file action enums to rpmfi where they logically belong + +commit bb7e7862e5256874189a008a00cd3d420d8119c9 +Author: Panu Matilainen +Date: Sun Dec 2 22:00:18 2007 +0200 + + Move RPMFILE_* file attributes to rpmfi.h + +commit 2c3ce0c8b04938b7b35483d27a4e87eda9afa3e7 +Author: Panu Matilainen +Date: Mon Dec 3 09:46:51 2007 +0200 + + Split rpmfi internals to separate header + +commit 9ae6424a40cc8982bf9e46a0bb50dee6b49df782 +Author: Panu Matilainen +Date: Sun Dec 2 12:19:24 2007 +0200 + + Move file state defs to rpmfi where they logically belong + +commit 432467a793333c88321fa1b1429673c29a92a25c +Author: Panu Matilainen +Date: Sun Dec 2 12:11:46 2007 +0200 + + Move file type enums to rpmfi where it logically belongs + +commit c36bef96bbe016a68007ef715f521a1bfb8f9de0 +Author: Panu Matilainen +Date: Mon Dec 3 16:35:33 2007 +0200 + + Drop RPC from apidocs.. + +commit 9cbf0349b84fb19c6dddbe4f7a3246d4c949ad09 +Author: Panu Matilainen +Date: Mon Dec 3 16:33:18 2007 +0200 + + Use regular POSIX functions instead of "RPC" clones + - we only care about local files + +commit fb90b8b4eb46c4008326e07b4866f4bf0875df83 +Author: Panu Matilainen +Date: Sat Dec 1 21:06:00 2007 +0200 + + More rpmlead exorcizing + - remove unnecessary type parameter to writeRPM(), header knows what it is + - remove unnecessary lead argument to readRPM(), it's unused anyway + - drop lead from cpioSourceArchive struct + +commit c4f116eec34eb283d37dca84b6a38c9fb38537e5 +Author: Panu Matilainen +Date: Sat Dec 1 21:01:51 2007 +0200 + + Erm, stuff headerIsSource() implementation to hdrNVR with other cruft + - avoid dragging rpmlib for RPMTAG_* into header.h + +commit 5219448fa1c27988e40450063db5fd49139faace +Author: Panu Matilainen +Date: Sat Dec 1 19:29:57 2007 +0200 + + Use headerIsSource() everywhere for determining package type + +commit 935df9b81e698d60181f7ca97730e22ac6b8b34e +Author: Panu Matilainen +Date: Sat Dec 1 19:25:10 2007 +0200 + + Silly helper method for determining if a header is source or binary + +commit 3ec04bd5add043955a94d735330bf374fbe8a269 +Author: Panu Matilainen +Date: Sat Dec 1 18:41:14 2007 +0200 + + Lose leftover davRead() related hack + +commit 92698df7236d0fc6c1d9c683210ddc12984764b3 +Author: Panu Matilainen +Date: Sat Dec 1 18:31:09 2007 +0200 + + Make rpmlead opaque, add methods to deal with it + - rename methods to rpmLead*() for easy grepping + - populate lead from header where necessary + - add rpmLeadCheck() method for minimal compatibility checking to get + rid of duplicate code in several places + - conditionalize lead version on dirtokens + +commit 89ecfb96d0ea48419ceecd0cd1527fd6a4d465d9 +Author: Panu Matilainen +Date: Sat Dec 1 12:47:30 2007 +0200 + + Include sanity + - don't pull in rpmio into rpmpgp.h + - make rpmpgp.h standalone (needs rpmints and stdio) + - rpmfileutil needs rpmio (makes sense, huh...) + +commit 656732848a942fd41cdb75b52820676cb15a6077 +Author: Panu Matilainen +Date: Sat Dec 1 12:32:30 2007 +0200 + + Make rpmDoDigest() honor algorithm parameter + +commit 50b21a8a07934344178018c080d0e27f739538d3 +Author: Panu Matilainen +Date: Sat Dec 1 10:42:22 2007 +0200 + + Don't include idtx.h in rpmcli.h + - nothing needs it there, include directly where needed instead + +commit d7e484237a3dfeaa49b5366a9210a68492f43598 +Author: Panu Matilainen +Date: Sat Dec 1 10:31:20 2007 +0200 + + Move headerN(E)VR(A) declarations from rpmlib.h to header.h + +commit 82a9632d4f71987cf106cbc04b2005015ba69988 +Author: Panu Matilainen +Date: Sat Dec 1 10:29:44 2007 +0200 + + Move hGet*() funcs from rpmts, rename to headerGet*() + +commit 9169947ebd5d22bfb25e6dfa8cb0abea8390ea64 +Author: Panu Matilainen +Date: Sat Dec 1 10:16:20 2007 +0200 + + Add bunch of missing rpmts doxygen groupings + +commit 2f7c913723baa8135201fa930678d9e3d4138f2c +Author: Panu Matilainen +Date: Sat Dec 1 10:09:54 2007 +0200 + + (no)dirtokens is just a build-time option now + +commit fc53d307ad1a9c01ea622d53d93befdea472240b +Author: Panu Matilainen +Date: Sat Dec 1 10:08:13 2007 +0200 + + Add separate public header for callback declarations + - rpmmessages is empty, lose it + - adjust includes + +commit 7fc7ac2161afd379ca8dda58de7eca98299e9ecf +Author: Panu Matilainen +Date: Sat Dec 1 09:38:33 2007 +0200 + + Lose url callback mechanism + - not used and cant support it with external helper anyhow + +commit 89527785bbf5e6410cbb5303238fc4f45c8ab02e +Author: Panu Matilainen +Date: Fri Nov 30 23:08:38 2007 +0200 + + Move logging related macros rpmlog, adjust includes + +commit 95953fe6101829efc8895193205b991c5faf7eb9 +Author: Panu Matilainen +Date: Fri Nov 30 22:13:15 2007 +0200 + + rpmurl and argv doxygen groupings + +commit e01888a40376f47ac76a3c7060716a16d601ac62 +Author: Panu Matilainen +Date: Fri Nov 30 21:58:18 2007 +0200 + + rpmpgp doxygen tagging + +commit 976f0f891c69268e8ddf7c04de6efdca307ecf30 +Author: Panu Matilainen +Date: Fri Nov 30 21:47:27 2007 +0200 + + rpmrpc doxygen groupings.. + +commit fe086189b7bb836807dbc89ef707da678575f1f1 +Author: Panu Matilainen +Date: Thu Nov 29 10:38:58 2007 +0200 + + Export FTS_* options through rpmgi.h as RPMGI_* + - permit full rpmgi use without exporting all of fts + +commit bcbc8126093dc200fbdcbc37451ac5b59d559de9 +Author: Panu Matilainen +Date: Thu Nov 29 10:26:53 2007 +0200 + + Lose python fts + - nothing uses it + - hardly "rpm" functionality + +commit 47b6892500671b87aa3cb189b4fe4162771cce74 +Author: Panu Matilainen +Date: Thu Nov 29 10:09:43 2007 +0200 + + Avoid building rpmdebug-py + +commit 41fc048c9a1938dffae9660db1cc874125c878af +Author: Panu Matilainen +Date: Thu Nov 29 10:06:57 2007 +0200 + + Lose the useless rpmrc python stuff, group macro handling to rpmmacro-py + +commit 44e1c051fcecc8db6033ed8a4d21c0d5cd1c8702 +Author: Panu Matilainen +Date: Wed Nov 28 17:51:39 2007 +0200 + + Lose rpmgi_internal.h, no longer needed + +commit 6d2214791328708254279b872f53db5aca1d7095 +Author: Panu Matilainen +Date: Wed Nov 28 17:47:58 2007 +0200 + + Add rpmgiGetFlags() method to avoid rpmgi_internal.h in query + +commit 9e098f531234cfe776aa63b86e8afafb11865c30 +Author: Panu Matilainen +Date: Thu Nov 29 09:42:56 2007 +0200 + + Bunch of compiler warnings silenced + - bunch of silly debug message casts to shut up whining + - cpuid() arg signedness + +commit 0728a2d5df68d2f11e44c2d7b05c49a036fdefda +Author: Panu Matilainen +Date: Wed Nov 28 10:21:26 2007 +0200 + + Remove code duplication + +commit 1eb8b83dcaafdf81514ead25a605e8a4a7cd4350 +Author: Panu Matilainen +Date: Tue Nov 27 22:47:19 2007 +0200 + + Revert the buggy dbiFindByLabel() epoch handling for now + - ':' is a valid character in version (ick), need to account for that too + +commit f82d0d88a956b15cdac424c87b86bcfd36de2b6e +Author: Panu Matilainen +Date: Tue Nov 27 22:44:54 2007 +0200 + + Back out the epoch-in-queryformat changes, too much breaks + +commit ca4497b51bb0e91f31218dc3b76bb03451cc887f +Author: Panu Matilainen +Date: Tue Nov 27 13:38:18 2007 +0200 + + Make epoch present in generated filenames too + +commit 9699454ebc6c69251cc30cc8667ed3756e162bda +Author: Panu Matilainen +Date: Tue Nov 27 13:27:15 2007 +0200 + + Comment out hRET_s and HE_s for now... + +commit d3fc506c2bc2b38b306162c9beefcc45c3a7063b +Author: Panu Matilainen +Date: Tue Nov 27 13:00:47 2007 +0200 + + Make default queryformat show epoch if present + +commit 6cfe6e2f10d5c68a2ac037d5ae63be81abb9d09e +Author: Panu Matilainen +Date: Tue Nov 27 12:42:12 2007 +0200 + + Remove unneeded includes + +commit 5c6f56af8f41a1ddeaf066d45a9559d143ac04d9 +Author: Panu Matilainen +Date: Tue Nov 27 11:58:17 2007 +0200 + + One missed legacy include + +commit b97705e0182aee1e05b2b546530f0d3daf0f1586 +Author: Panu Matilainen +Date: Tue Nov 27 11:56:05 2007 +0200 + + Drop extra include paths from python too + +commit 5fa08529cb805bb36a8b9a1d7300cade13d05e4b +Author: Panu Matilainen +Date: Tue Nov 27 11:52:55 2007 +0200 + + Move rpmfiBuildFNames() to rpmfi now that it's possible + +commit fbf0cb4441816b70a6a8e5ecef37d54b152b9db0 +Author: Panu Matilainen +Date: Tue Nov 27 11:34:23 2007 +0200 + + Move legacy%#¤%#¤ to librpm now that it can move.. + +commit 30bb2ba4c8e481dd1c18e6ce8cd6c563fb42e23b +Author: Panu Matilainen +Date: Tue Nov 27 11:24:45 2007 +0200 + + Drop support for old style file tags in rpmdb + +commit eacfabfe70595aa54e23b3c0b0803b4ccc97c805 +Author: Panu Matilainen +Date: Tue Nov 27 10:13:16 2007 +0200 + + Remove long since dead fields from python header objects + +commit 2380dc146e7b8e08fd92f1f870a62536d62307bd +Author: Panu Matilainen +Date: Tue Nov 27 09:55:40 2007 +0200 + + Remove debug junk + +commit 2a228d767cb903889c96507aadd919ef610b33ec +Author: Panu Matilainen +Date: Tue Nov 27 09:52:44 2007 +0200 + + Teach dbiFindByLabel() to grok epochs + +commit 333f10c56ecc693c272b5ba74b190549d76b8c12 +Author: Ralf Corsépius +Date: Mon Nov 26 15:41:24 2007 +0100 + + Adjust comment. + +commit 8f82c7309eb62e42a2e53d56af591374668afa49 +Author: Ralf Corsépius +Date: Mon Nov 26 15:38:20 2007 +0100 + + s/build_os/host_os/ + +commit 0169e936799d0ccd6061ae949359faed5dd75673 +Author: Ralf Corsépius +Date: Mon Nov 26 15:37:30 2007 +0100 + + Remove #include "lib/signature.h" (unused) + +commit f33505085a9893847a2eb299024db35556d9f44d +Author: Ralf Corsépius +Date: Mon Nov 26 15:18:02 2007 +0100 + + Regenerate. + +commit 3f4a332f955ffd5193b4a7f4507125a201b19e5f +Author: Ralf Corsépius +Date: Mon Nov 26 15:17:52 2007 +0100 + + Fix quoting bug in preinstall.am generation. + +commit 7ab750975b08680f1c003f9c66031464f72eded0 +Author: Panu Matilainen +Date: Mon Nov 26 14:48:29 2007 +0200 + + One more pgpKeyID_t use + +commit a798f725eb7f54bccde6fce47ad2b41eaeb65041 +Author: Panu Matilainen +Date: Mon Nov 26 14:42:14 2007 +0200 + + Define and use pgpTime_t for pgp creation time(s) + +commit 399dca5c05440350c39008b9e682b95945bc35ff +Author: Panu Matilainen +Date: Mon Nov 26 14:19:38 2007 +0200 + + Define and use pgpKeyID_t for pgp key id's + +commit 7ac39db1f4117442b49e4717c79f04295886d9be +Author: Panu Matilainen +Date: Mon Nov 26 13:51:44 2007 +0200 + + Fix "byte" usage in test programs too + +commit 95c55a1af9fa4be56737eefa0e709ce5abe47deb +Author: Ralf Corsépius +Date: Mon Nov 26 10:53:47 2007 +0100 + + Type pedantery. + +commit 96e7f513cde29bbcec1d21f62d23b74cd1b26ed7 +Author: Ralf Corsépius +Date: Mon Nov 26 10:42:39 2007 +0100 + + Eliminate type "byte" + +commit ffd534e4b8893c13b4368b7c80bea873ffdadc67 +Author: Ralf Corsépius +Date: Sun Nov 25 05:43:52 2007 +0100 + + Remove unnecessary deps on NSS. + +commit 0fc2acbe28328d1a999993ff1da2c7694df70f50 +Author: Panu Matilainen +Date: Fri Nov 23 15:58:17 2007 +0200 + + Add a bunch of missing groupings to rpmlib.h items + +commit 266cea562f99d7ec1b96eae1f829111088b3a163 +Author: Panu Matilainen +Date: Fri Nov 23 15:57:51 2007 +0200 + + Add a few missing rpmcli doxygen groupings + +commit ba1915ecb9a68033e68d9e78666049d9c8ed05e8 +Author: Panu Matilainen +Date: Fri Nov 23 15:47:34 2007 +0200 + + Doxygen cosmetics.. + +commit 3053a2d8d013070d3ff6a2c0c44591ba84bbe8fc +Author: Panu Matilainen +Date: Fri Nov 23 15:44:32 2007 +0200 + + Add rpmtag + tag api doxygen group to librpm + hacking docs + +commit 59ac81ac386601cee4f3b68e97d05f4c5b0befa5 +Author: Panu Matilainen +Date: Fri Nov 23 15:26:58 2007 +0200 + + Remove non-public stuff from librpm doxygen groups + +commit e6b0dfd1555cf423c649ddd295f22357bbfbebaa +Author: Panu Matilainen +Date: Fri Nov 23 15:20:46 2007 +0200 + + Add doxygen group for rpmstring, include in librpm + hacking docs + +commit 31ad46a64b50caae0f023393c6182b8ded1fba25 +Author: Panu Matilainen +Date: Fri Nov 23 15:11:21 2007 +0200 + + Add doxygen group for rpmfileutil, include in librpm + hacking docs + +commit 1a0968f31f18c627982b857fe717b54d691f0c78 +Author: Panu Matilainen +Date: Fri Nov 23 14:57:18 2007 +0200 + + Add doxygen group for rpmfc, include in librpm + hacking docs + +commit 43d1baef0f8e95e9340802faebc7ffffe3421b2d +Author: Panu Matilainen +Date: Fri Nov 23 14:51:30 2007 +0200 + + doxygen groupings for rpmsw, add to librpm + hacking dox + +commit bdce039f8567890296ef80cc80574dd9947ab571 +Author: Panu Matilainen +Date: Fri Nov 23 14:48:13 2007 +0200 + + Bunch of rpmio doxygen groupings + +commit bd01557f273fec707a5b626838defc848be856e5 +Author: Panu Matilainen +Date: Fri Nov 23 14:45:16 2007 +0200 + + Add doxygen group for rpmsq, include in librpm + hacking docs + +commit 7bba4e7cb11244e75b95526f3c0619836ed55584 +Author: Panu Matilainen +Date: Fri Nov 23 14:43:01 2007 +0200 + + Add doxygen group for rpmlog, include in librpm + hacking docs + +commit a1cab56e703bb1dcab70384631dd081070194db4 +Author: Panu Matilainen +Date: Fri Nov 23 14:39:51 2007 +0200 + + Add doxygen group for macros, include in librpm + hacking docs + +commit 975aa86c3709c61dd452b3c2930500b839f55f17 +Author: Panu Matilainen +Date: Fri Nov 23 14:33:34 2007 +0200 + + Add rpmps to doxygen modules page + +commit 2d396ce001ff48c1f644bcd8e2bb6d5a3cc4d297 +Author: Panu Matilainen +Date: Fri Nov 23 14:32:45 2007 +0200 + + Add doxygen grouping to rpmps methods + +commit 31cbde7d3cf9156aefb65bc642eb2fa195606f09 +Author: Panu Matilainen +Date: Fri Nov 23 14:19:15 2007 +0200 + + Add doxygen grouping to rpmgi methods + +commit b2a9283a18519397bee5ce7ac51680169ef46da0 +Author: Panu Matilainen +Date: Fri Nov 23 14:17:33 2007 +0200 + + Add doxygen grouping to rpmfi methods + +commit 9938bb48f5f4b1202d25bee842e402d4c257717d +Author: Panu Matilainen +Date: Fri Nov 23 14:15:20 2007 +0200 + + Add doxygen grouping to rpmds methods + +commit 73bcaf56359cf5d106288f2a4e066730858adde8 +Author: Panu Matilainen +Date: Fri Nov 23 14:12:43 2007 +0200 + + Add doxygen grouping to rpmte methods + +commit c78e4767c217c20ac2b9895cad4aa918160179cf +Author: Ralf Corsépius +Date: Fri Nov 23 11:48:18 2007 +0100 + + Expand private include file names to be relative to $(top_srcdir) + +commit 38560be92b1a8b5782d5637cede4a74ddec35dc6 +Author: Ralf Corsépius +Date: Fri Nov 23 11:47:48 2007 +0100 + + Expand private include file names to be relative to $(top_srcdir) + +commit 71aabbde880f6c0895e4a45c2650839bd4973a71 +Author: Ralf Corsépius +Date: Fri Nov 23 11:44:04 2007 +0100 + + Reflect changes to include files. + +commit f103adbb269ff7b69b2bedca0e7ec6476ab42d82 +Author: Ralf Corsépius +Date: Fri Nov 23 11:43:51 2007 +0100 + + Expand private include file names to be relative to $(top_srcdir) + +commit b1c0f900aa6879b6f337bd26b2fe425741f3548c +Author: Ralf Corsépius +Date: Fri Nov 23 11:41:38 2007 +0100 + + Reflect changes to include files. + +commit 8ef0ca213fa5e668508f6cbb601b2c2a73e89997 +Author: Ralf Corsépius +Date: Fri Nov 23 11:41:29 2007 +0100 + + Expand private include file names to be relative to $(top_srcdir) + +commit 79599bafb42c673cc7b9be9a5d3589b5891df0d5 +Author: Ralf Corsépius +Date: Fri Nov 23 11:39:40 2007 +0100 + + Reflect changes to include files. + +commit 60939d6985e007d55a81b12f98173b5bbe4d31e8 +Author: Ralf Corsépius +Date: Fri Nov 23 11:39:29 2007 +0100 + + Expand private include file names to be relative to $(top_srcdir) + +commit e8aa138e987e5989d6b22696ebd7d37e2d76c63a +Author: Ralf Corsépius +Date: Fri Nov 23 11:38:17 2007 +0100 + + Reflect changes to include files. + +commit 4d49dfcf414c1d886f5dac9b746cdc80bd41c192 +Author: Ralf Corsépius +Date: Fri Nov 23 11:37:54 2007 +0100 + + Expand private include file names to be relative to $(top_srcdir) + +commit dae44a0f38913fc34f55bb345c84d7cc3f6be722 +Author: Panu Matilainen +Date: Fri Nov 23 12:00:22 2007 +0200 + + Export FD statistics enums + fdOp() method + +commit c10e5da8a0a724cb3cc9ed23124d83f44d384ac8 +Author: Panu Matilainen +Date: Fri Nov 23 10:32:10 2007 +0200 + + librpmio needs elf include+lib now, librpmdb doesn't + +commit 7b2a9b3c24ccb445a332ba57f42d526a32567644 +Author: Panu Matilainen +Date: Fri Nov 23 10:27:29 2007 +0200 + + Move rpmGlob() from macros to rpmfileutil.h + - macros is all just macros now + - internal copy of popt stuff needs to go... + +commit 2c6905dd9f10589e80eb9292992510a1e070cfe4 +Author: Panu Matilainen +Date: Fri Nov 23 10:20:19 2007 +0200 + + Move rpmGetPath and rpmGenPath to rpmfileutil.h + +commit 178e32a0baf9759035e6f4b633b0396623eba80b +Author: Panu Matilainen +Date: Fri Nov 23 10:10:19 2007 +0200 + + Move rpmCleanPath from macros to rpmfileutil.h + +commit ff77bfa2a1951473edab1db8e3bd29be5d69443b +Author: Panu Matilainen +Date: Fri Nov 23 10:05:49 2007 +0200 + + Move file compression stuff from rpmmacro.h to rpmfileutil.h + +commit c1bcd633010cce22919dbc5c347fa401971d39a8 +Author: Panu Matilainen +Date: Fri Nov 23 09:58:02 2007 +0200 + + Move rpmioMkpath from rpmio.h to rpmfileutil.h + +commit 2068f4611220bbe90c98b65c58dd1b6c62858152 +Author: Panu Matilainen +Date: Fri Nov 23 09:13:18 2007 +0200 + + Remove unnecessary paths from python includepath + - no private includes from lib and build are needed + - document rpmdb and rpmio private needs + +commit eb72616113a82daf76fecc8ed1da6a0d16f65cb5 +Author: Panu Matilainen +Date: Fri Nov 23 09:06:45 2007 +0200 + + Regenerate preinstall.am + +commit d10acc7c2a280bd8e0aea3610d9a8767521a5f40 +Author: Panu Matilainen +Date: Thu Nov 22 16:28:30 2007 +0200 + + Move makeTempFile() from misc.h to rpmfileutil.h + - probably not very useful outside rpm but used all over the tree, + - rename to rpmMkTempFile() for namespacing since we're exporting it now + +commit d8cd2b6b1139a81b819e66817e22d814fe25a9e7 +Author: Panu Matilainen +Date: Fri Nov 23 08:45:59 2007 +0200 + + librpmdb doesn't need rpmio private headers anymore + +commit e063854e118b92af3072e888e0887b2943187895 +Author: Panu Matilainen +Date: Thu Nov 22 16:06:11 2007 +0200 + + Calculating file checksums aint legacy activity + - move the checksumming into librpmio + - rename domd5() to rpmDoDigest() with future expansion for specifying + digest algorithm type (ignored for now) + - rearrange parameters to leave return types last + - one less rpmio_internal outside rpmio/, whee... + - used all over the rpm tree, and it knows about handling prelinked files + so potentially useful for outside users, might as well export it + - new public header rpmfilutil.h for collecting this sort of stuff + +commit b32cca34808e46bb5ce6972c99d95b3e53f555ab +Author: Panu Matilainen +Date: Thu Nov 22 14:48:07 2007 +0200 + + Move pgpDig typedefs to a more obvious place.. + +commit 4ad615daf5a650359d4be4d7b317d0678040cd37 +Author: Panu Matilainen +Date: Fri Nov 23 08:32:08 2007 +0200 + + Move the xstr*() string variants from rpmio.h to rpmstring.h + +commit 115d698252464f907a4932b4bfeb63d72a3098a2 +Author: Panu Matilainen +Date: Fri Nov 23 08:21:23 2007 +0200 + + Move string helpers from lib/misc.h to rpmio/rpmstring.h + - splitString, freeSplitString, stripTrailingChar + +commit d6990c3ab1095e0637a5113fe062b9eb6e1a2238 +Author: Panu Matilainen +Date: Fri Nov 23 08:11:42 2007 +0200 + + Move stringbuf into librpmio, rename header + - rename header to more generic rpmstring.h for collecting misc string + helper functions + +commit abeea80a38682069fe97e69c0c8ca71475497ba0 +Author: Ralf Corsépius +Date: Fri Nov 23 06:46:19 2007 +0100 + + Use #include syntax to include public headers. + +commit 7fb2899b84ec829cb72a059e7ae32b23a7c80669 +Author: Ralf Corsépius +Date: Fri Nov 23 06:28:09 2007 +0100 + + Fix typo in preinstall.am generation. + +commit fb370262070657ea317309885b84defe73b520da +Author: Ralf Corsépius +Date: Thu Nov 22 18:13:53 2007 +0100 + + Remove AM_CPPFLAGS += -I$(top_srcdir)/build. + Remove AM_CPPFLAGS += -I$(top_srcdir)/lib. + Let librpmdb only depend on librpmio. + +commit 32f29c4cbf44fb16e8a915ecff30289fb4065e21 +Author: Ralf Corsépius +Date: Thu Nov 22 17:22:22 2007 +0100 + + Regenerate. + +commit 575a851fb79d693a96d36e6091051ab34a4f781a +Author: Ralf Corsépius +Date: Thu Nov 22 17:19:38 2007 +0100 + + Fix preinstall.am handling for VPATH builds. + +commit d9c9a980699dfe792f6f4de947ccdc600ce52886 +Author: Ralf Corsépius +Date: Thu Nov 22 16:45:25 2007 +0100 + + Add -I$(top_builddir)/include/rpm to AM_CPPFLAGS. + +commit 94d2343931fba7efbffdbd598625fe48b525de58 +Author: Ralf Corsépius +Date: Thu Nov 22 16:17:20 2007 +0100 + + Add -I$(top_builddir)/include/rpm to AM_CPPFLAGS. + +commit 583140460100ea99553d883174065ca22a3099b2 +Author: Ralf Corsépius +Date: Thu Nov 22 15:54:42 2007 +0100 + + Add header preinstallation. + +commit 3553b86aff3e77ac57a3103d9e84f21ac43f5c14 +Author: Ralf Corsépius +Date: Thu Nov 22 13:41:06 2007 +0100 + + Include system.h + +commit 5787b3f7c12fd7d3a67663a8b1c85789a968ccf3 +Author: Ralf Corsépius +Date: Thu Nov 22 09:43:40 2007 +0100 + + Eliminate egrep (Abandoned by POSIX many years ago). + +commit d58b2666e3f80aac47130e4157ab0be16dc847dc +Author: Ralf Corsépius +Date: Wed Nov 21 16:51:57 2007 +0100 + + Add AC_USE_SYSTEM_EXTENSIONS. + Remove AC_AIX, AC_MINIX. + Do not add -D_GNU_SOURCE to CFLAGS. + +commit 4990a44984437320a0e39ce19e4f045235756b6b +Author: Ralf Corsépius +Date: Wed Nov 21 11:34:30 2007 +0100 + + s/build_cpu/host_cpu/ + +commit 17ef8a3082a7c9e2c2defd9f516923afca67e027 +Author: Panu Matilainen +Date: Mon Nov 19 16:32:15 2007 +0200 + + Lose rpmerr.h for good + +commit 43c5de66fb90cbc59dc23eb0774d66c66d34b37d +Author: Panu Matilainen +Date: Mon Nov 19 16:25:24 2007 +0200 + + Replace all RPMERR_* etc uses with corresponding RPMLOG_* levels + +commit db4e34966ed9d52a920ab1b135309e6e21f12473 +Author: Panu Matilainen +Date: Fri Nov 16 17:37:54 2007 +0200 + + Split digest-stuff out of rpmio_internal to separate header + +commit 3587db8c4e5f72cf00d2722d06f9d7face2d072a +Author: Panu Matilainen +Date: Fri Nov 16 17:18:55 2007 +0200 + + Eliminate copy-paste fd digest stealing, stuff into rpmio_internal + +commit 157759299d796bad84a58b5a50586883e086b1ec +Author: Panu Matilainen +Date: Fri Nov 16 14:16:56 2007 +0200 + + Eliminate need for rpmio_internal.h in rpmdb.c + - adds new pgpExtractPubkeyFingerprint() API function + + Ported from rpm5.org work of Jeff Johnson + +commit f38eeadf415acff83a04e723db0f0b3575f8369e +Author: Panu Matilainen +Date: Thu Nov 15 15:16:10 2007 +0200 + + Debugedit needs crypto initialization too.. + +commit 3a168d6927ec8c647b06b3f437c1503305141eb3 +Author: Panu Matilainen +Date: Thu Nov 15 14:03:19 2007 +0200 + + Remember to initialize crypto in various test programs.. + +commit 589b54af909b5ee8e98818291b955b0951b1c26c +Author: Panu Matilainen +Date: Thu Nov 15 11:08:53 2007 +0200 + + Initialize NSS early (rhbz#382091) + - add new rpmInitCrypto() API for directly initializing any crypto + - call it from rpmReadConfig() to ensure it's always initialized early on + +commit 905ea76db4153b3e82eaac3c0291b4c7e4c597c5 +Author: Panu Matilainen +Date: Wed Nov 14 21:52:42 2007 +0200 + + Fix base64 decoder related crash (rhbz#380911) + + The base64 decoder code incorrectly assumed that char is a signed type. + Patch from Tomas Mraz + +commit 9ee49db5a4a63f3ba400ca431083159ea4c275ac +Author: Panu Matilainen +Date: Tue Nov 13 13:11:54 2007 +0200 + + Fix rpm -K segfaulting on corrupted header + (http://qa.mandriva.com/show_bug.cgi?id=#33735) + + Patch from Pascal Rigaux + +commit b6a1ee9bb75b3f11bbab035137f37ccfd0db1cc3 +Author: Panu Matilainen +Date: Tue Nov 13 13:09:01 2007 +0200 + + Make "rpmbuild -bb --quiet" quiet as should be + (without this patch, the option is simply ignored in rpmcliAllPoptTable) + + Also rhbz#124300 + + Patch from Pascal Rigaux + +commit b3591654458361becb2db7c36594469b89a3bf6a +Author: Panu Matilainen +Date: Tue Nov 13 13:03:38 2007 +0200 + + Fix build without O2 + + HAVE_LOCALE_H is used by system.h, ensure it is defined properly + (the issue only occurs when compiling without __OPTIMIZE__ (ie -O2) + otherwise libintl.h do include locale.h) + + Patch from Pascal Rigaux + +commit ec8761f231c345d7a6f07ad8bafeff2cc8c69e83 +Author: Panu Matilainen +Date: Tue Nov 13 13:00:52 2007 +0200 + + Align rpm -V output + Patch from Pascal Rigaux + +commit 142b5e5301940ebb3be8e31da5cf11fe64ef1f7b +Author: Panu Matilainen +Date: Tue Nov 13 12:57:49 2007 +0200 + + Use dgettext() instead of just gettext() + Patch from Pascal Rigaux + +commit 827399cda09b7271b735a6c502e9a58597117bd7 +Author: Panu Matilainen +Date: Tue Nov 13 12:47:22 2007 +0200 + + Fix free on invalid pointer after displaying "Unable to open temp file" + Patch from Pascal Rigaux + +commit 7d032c35059210b81ac8054a81ea1270837fadc3 +Author: Panu Matilainen +Date: Thu Nov 8 15:59:45 2007 +0200 + + Minimal protection for rpmsqElem internals + +commit 262f2d63b1789cd832db37037e7988306db524a6 +Author: Panu Matilainen +Date: Thu Nov 8 15:56:11 2007 +0200 + + Remove unnecessary psm.h include + +commit 751bba091b495f081a8966992b64c86023a82c30 +Author: Panu Matilainen +Date: Thu Nov 8 14:17:17 2007 +0200 + + Dead code removal + +commit 49cd2645747b393cfacaa5ca2308e676f6e0879e +Author: Panu Matilainen +Date: Thu Nov 8 14:09:31 2007 +0200 + + Use _target_* macros for build restriction checking + - avoid using deprecated rpmrc rpmGet*Info() + - plug a small memory leak (remember to free the values too) + - potential linux vs Linux as the os name implications but as isMemberInEntry() + ignores case anyway, shouldn't matter + +commit df84cabff6804650532763563f996127fef6bac3 +Author: Panu Matilainen +Date: Thu Nov 8 12:57:02 2007 +0200 + + Disable -Wstrict-prototypes for now due to noise from NSPR headers + +commit af0fe8255c46f3826f4a69b0006b02d62f640b88 +Author: Panu Matilainen +Date: Thu Nov 8 12:54:05 2007 +0200 + + Kludge around mktemp() uses to shut up build warnings + +commit 5320dcba034996397a7e9aa5efe04671109ce8fc +Author: Panu Matilainen +Date: Thu Nov 8 12:34:53 2007 +0200 + + Remove dead & unused RPMTAG_ARCHIVESIZE addition code + - rpm >= 4.1 uses RPMTAG_PAYLOADSIZE and translates RPMTAG_ARCHIVESIZE to + it automatically + +commit 77d3ce054980b0bc88207c4468dc11ca8620fc72 +Author: Panu Matilainen +Date: Thu Nov 8 12:26:46 2007 +0200 + + Kill off deprecated and unused rpmGetMachine() entirely + +commit de7a247133fd618aa9438b70646cc30d1577d0f1 +Author: Panu Matilainen +Date: Thu Nov 8 12:22:14 2007 +0200 + + Remove rpmSetMachine() from API + +commit f81c916aeff8015221de568998649d1555d890c2 +Author: Panu Matilainen +Date: Thu Nov 8 12:16:48 2007 +0200 + + Remove dead rpmrc-related code from spec parsing + +commit e6f7c3c84846e1aa4f772694f7bbf29ce6a2c5ed +Author: Panu Matilainen +Date: Thu Nov 8 10:33:47 2007 +0200 + + Remove useless "var" parameter from setup helpers + Additionally rename setVarDefault to addMacroDefault which it really is + +commit cc465dd6233990630a064b6a1634be61c9f845a7 +Author: Panu Matilainen +Date: Thu Nov 8 10:32:10 2007 +0200 + + Kill off unused rpmSetVar() and freeRpmVar() + +commit f7604b1a0eb6ec1bc436a2c137ae4fbc4cb1e165 +Author: Panu Matilainen +Date: Thu Nov 8 10:24:58 2007 +0200 + + Remove rpmGetVar, rpmSetVar from API + +commit 2967cb5ffa616566e7daf0487b80c335e03b2250 +Author: Panu Matilainen +Date: Wed Nov 7 13:47:42 2007 +0200 + + Eliminate dead code + +commit 1688cc62bf51ccb611e4c3403c24d93e72fb270f +Author: Panu Matilainen +Date: Wed Nov 7 13:21:06 2007 +0200 + + Eliminate rpmlead use from legacy retrofitting. + +commit b497a4f05fe04e86a120851830f578211fd5ddc1 +Author: Panu Matilainen +Date: Wed Nov 7 13:12:20 2007 +0200 + + Only do legacy retrofitting on packages that need it. + + Packages not having RPMTAG_DIRNAMES (ie compressed filenames) is + used for checking, packages not having it are either built with rpm <= 3.x + or with --nodirtokens, retrofitting in the latter case doesn't really + hurt that much for the obscure case... + +commit 8f97ae9d265bcdc542055320b1a2bd346eb63475 +Author: Panu Matilainen +Date: Wed Nov 7 11:57:12 2007 +0200 + + Document rpmio_internal.h uses outside rpmio/ + +commit 4471d9c371400141896fc9d838408b086af232ca +Author: Panu Matilainen +Date: Wed Nov 7 11:41:06 2007 +0200 + + Move tufdio under rpmio/ where it belongs.. + +commit c5588096d37f6747ab6da075a2cd8e5e8d909430 +Author: Panu Matilainen +Date: Wed Nov 7 11:02:41 2007 +0200 + + Silence bogus gcc warning + +commit 85a1226e8ca7324e070977fd2c32f897c1418931 +Author: Panu Matilainen +Date: Wed Nov 7 11:01:40 2007 +0200 + + Remove unused variable + +commit d8741ebc13c4981b0df788c7a481396b79213a01 +Author: Panu Matilainen +Date: Wed Nov 7 11:00:51 2007 +0200 + + Silence bunch of compiler warnings from test programs + +commit 8239d0b74b6363fa38576d40a3ab4531a047f028 +Author: Panu Matilainen +Date: Wed Nov 7 10:17:10 2007 +0200 + + Remove bunch of unnecessary misc.h includes, document others + +commit d8babb5a863011d4a384c8f77ca4aefa07805bbb +Author: Panu Matilainen +Date: Wed Nov 7 09:01:38 2007 +0200 + + Remove .splintrc's in the tree + +commit 51f5b6caa8c432d04cb1d33d525495f2d6820b6e +Author: Peter Jones +Date: Fri Nov 2 09:23:05 2007 -0400 + + - Fix segfault in %{lua:...}'s rpm_print + - Don't automatically print a newline in rpm_print + +commit 43b1952dc66f264cadb02cc09abce5d7b0b8a8ba +Author: Panu Matilainen +Date: Fri Nov 2 12:11:33 2007 +0200 + + Eliminate rpmfcToken struct internals from the API + +commit 0781adb1cb4fbe63b83303527ce1aa4dc35bb319 +Author: Panu Matilainen +Date: Fri Nov 2 10:40:45 2007 +0200 + + Eliminate macro struct internals from the API + +commit cefa324b3af8512b9d993ae45f8fbf56eceaf45b +Author: Panu Matilainen +Date: Fri Nov 2 10:24:42 2007 +0200 + + Meh, actually add the base64 files.. + +commit 1a32f9959ea4daf8e3b2ae1e099a73f871900ff9 +Author: Panu Matilainen +Date: Fri Nov 2 10:18:23 2007 +0200 + + Remove tinv + +commit 1a2a82d38972e7f24f014ea9533c162d7de98ebc +Author: Panu Matilainen +Date: Fri Nov 2 10:16:16 2007 +0200 + + Document NSS requirement, revise obsolete comment in macros.in + +commit 524262f6f83cc98407597b35924aff7eba3a754c +Author: Panu Matilainen +Date: Fri Nov 2 10:11:54 2007 +0200 + + Resurrect tax from NSS switchover + +commit 8afe81c21445f96e4f5430b05304242c958a9ad0 +Author: Panu Matilainen +Date: Fri Nov 2 10:02:40 2007 +0200 + + Use NSS instead of beecrypt for encryption (Tomas Mraz) + +commit e7fd0807d3b0a024634bc62a3bf2571a1bd6098d +Author: Panu Matilainen +Date: Thu Nov 1 12:26:05 2007 +0200 + + Include "legacy.h" not + +commit 02fb3b030d61c187a9563cd3003c5609559e2310 +Author: Panu Matilainen +Date: Thu Nov 1 12:25:41 2007 +0200 + + Remove two unnecessary legacy.h includes + +commit e1cc5871a0cd351276035d501a0e8b617b0716b7 +Author: Panu Matilainen +Date: Wed Oct 31 12:48:43 2007 +0200 + + Document RPMFI_INTERNAL uses + +commit bb976c2f57310cb293df642ab4b8c36e2c022c44 +Author: Panu Matilainen +Date: Wed Oct 31 12:39:23 2007 +0200 + + Document _RPMTE_INTERNAL needs + +commit 05fcdb49f1d366b65a72b1a22f299fa5be41f4e3 +Author: Panu Matilainen +Date: Wed Oct 31 12:08:01 2007 +0200 + + Split out rpmts_internal.h from rpmts.h + +commit a3bbfc98eefa6cf272ed8f391c8efc6af995bd53 +Author: Panu Matilainen +Date: Wed Oct 31 11:57:04 2007 +0200 + + Disable python available package mechanism for now at least. + - need saner available mechanism to resurrect, OTOH nothing appears to + use it anymore + - last remaining RPMTS_INTERNAL offender... + +commit c13ab3401614249d8321b9e920a479602dc8291d +Author: Panu Matilainen +Date: Wed Oct 31 10:37:18 2007 +0200 + + Add rpmtsPrintSuggests() method for now, use instead of ts internals mucking + - temporary measure to get rid of silly RPMTS_INTERNAL uses, the whole + solve/suggestion thingie needs love or ripping... + - clean up the suggestions in rpmtsClean() instead of while printing + +commit 68dcdd5dad79481bd5561ba6b0556bdb84b66c15 +Author: Panu Matilainen +Date: Wed Oct 31 10:15:05 2007 +0200 + + Kill ts->goal, instead set NOSUGGEST flag on erase + - it aint quite the same thing but will suffice for now... + +commit a100133e561488ac02c0286aa34c36fcae5ac5af +Author: Ralf Corsépius +Date: Tue Oct 30 15:51:53 2007 +0100 + + Replace AC_CHECK_FUNCS by AC_REPLACE_FUNCS for basename, getcwd, getwd, putenv, realpath, setenv, stpcpy, stpncpy, strcspn, strdup, strtol, strtoul, strspn, strstr. + +commit 3f5d1e332e56b7011c47df48c1c5a333b2f35912 +Author: Panu Matilainen +Date: Tue Oct 30 16:48:38 2007 +0200 + + Add rpmtsCleanProblems() method for rpmgi needs + +commit e898dde44d34ce7e937acbefb530287e718d36bf +Author: Ralf Corsépius +Date: Tue Oct 30 15:24:10 2007 +0100 + + Remove memcmp.c. + +commit bb19662ebdd821047b7c3c61356198c0040e6175 +Author: Panu Matilainen +Date: Tue Oct 30 15:53:44 2007 +0200 + + Erm... rpmdsFlags are int32_t type, not char* + +commit 41cd82aa7c6a0b9115d776a387b3177664075d44 +Author: Panu Matilainen +Date: Tue Oct 30 15:50:35 2007 +0200 + + Split transaction score stuff to separate private header + +commit 6abf077d7096e2f48bf1316e37ee6651c78b536e +Author: Panu Matilainen +Date: Tue Oct 30 15:15:19 2007 +0200 + + No callback, no repackaging info - tough... + +commit 51c91957ae7378547604f1e008fabab28145d7b8 +Author: Panu Matilainen +Date: Tue Oct 30 14:31:42 2007 +0200 + + Use rpmtsRootDir() instead of ts->rootDir + url guess-games in psm + +commit 41d0a9fd3e8615efbb333746dfd2ea1ad9e285e3 +Author: Ralf Corsépius +Date: Tue Oct 30 12:16:21 2007 +0100 + + Don't build stubs.c. + Link against ../misc/libmisc.la. + +commit d57d7105502758114110f0c2f7877c129274a776 +Author: Ralf Corsépius +Date: Tue Oct 30 12:15:34 2007 +0100 + + Build libmisc.la. + Use @LTLIBOBJS@. + +commit fa1b02934ae53f2924398da78b69ab3b8e603f8f +Author: Ralf Corsépius +Date: Tue Oct 30 12:14:23 2007 +0100 + + Add -I$(top_builddir)/rpmdb to AM_CPPFLAGS. + +commit 591cd9852badfcbed43737deeb60ea8f4ae9c10e +Author: Panu Matilainen +Date: Tue Oct 30 13:11:13 2007 +0200 + + rpmds is now fully opaque, eliminate _RPMDS_INTERNAL games + +commit 798323c39f3a6e67e145a95f46b13ec40b2f330b +Author: Panu Matilainen +Date: Tue Oct 30 13:07:59 2007 +0200 + + Whole lotta trouble to avoid rpmds internals access in rpmfc + +commit 80ab4ab3f6f6853736f47ee7214a9fbd24f9510b +Author: Panu Matilainen +Date: Tue Oct 30 12:25:15 2007 +0200 + + Avoid rpmte internals access in rpmtsNotify() + +commit 9482ab214144679f2736598e784f9fc59e3dbf4b +Author: Panu Matilainen +Date: Tue Oct 30 12:12:54 2007 +0200 + + Use rpmteKey() instead of te internals + +commit be83036b2a9231b6ee496f7fea78124f1b53fea5 +Author: Panu Matilainen +Date: Tue Oct 30 11:54:22 2007 +0200 + + Remove unnecessary rpmShowProgress duplicate prototype + +commit ae0e274e3511f6fe821adbf3f9769a311c5b3c89 +Author: Ralf Corsépius +Date: Tue Oct 30 04:06:24 2007 +0100 + + Remove rpmdb/tsql.c. + +commit 002b3ca2f933fe33ca41e76e29c264345c77db09 +Author: Ralf Corsépius +Date: Tue Oct 30 03:27:07 2007 +0100 + + Include . + +commit 88b0c2bbb5b82efcbe557176077c5edbd7b1c5be +Author: Ralf Corsépius +Date: Tue Oct 30 02:57:14 2007 +0100 + + Remove URLMAGIC, URLSANE. + Remove include . + +commit d2384456f71b47793d8f7fd67211f74a4b5b4269 +Author: Ralf Corsépius +Date: Tue Oct 30 02:56:34 2007 +0100 + + Add URLMAGIC, URLSANE. + Remove URLDBG (unused). + Include . + +commit 7208dc82beb8e9668bd980d5104eb0a7aa11fdbc +Author: Ralf Corsépius +Date: Mon Oct 29 13:37:50 2007 +0100 + + Fix typo. + +commit 69f402c32073126b16a994d7536a76cb537801c7 +Author: Ralf Corsépius +Date: Mon Oct 29 13:34:53 2007 +0100 + + Split out rpmgi_internal.h from rpmgi.h + +commit 9a628446ce33c31895c5f58cdfb5c288139be253 +Author: Ralf Corsépius +Date: Mon Oct 29 12:24:15 2007 +0100 + + Add SKIPSPACE, SKIPNONSPACE. + +commit f7a062a74c8d507acec1bfbdbcb2bcf1f4939c66 +Author: Ralf Corsépius +Date: Mon Oct 29 12:24:00 2007 +0100 + + Add SKIPSPACE. + +commit 7d75c393a5a1d5328d6a5376fec685a1b08f72e2 +Author: Ralf Corsépius +Date: Mon Oct 29 12:22:59 2007 +0100 + + Remove SKIPSPACE, SKIPNONSPACE. + +commit bdd3cd3ed6806466b4891db49098970fe335fb84 +Author: Panu Matilainen +Date: Mon Oct 29 12:55:43 2007 +0200 + + Macros don't need rpmio_internal + +commit 6713c1e8078facbdc97a3e0073fa39a79dafa841 +Author: Ralf Corsépius +Date: Mon Oct 29 11:45:20 2007 +0100 + + Don't include . + Include "rpmio.h". + +commit 3d74c511ff497ce11ec22d0b1a5296eac5733f58 +Author: Ralf Corsépius +Date: Mon Oct 29 11:43:51 2007 +0100 + + Move typedef into extern "C". + +commit b8b986dd20a4ebbd8f2d297f3b02b424734abf71 +Author: Panu Matilainen +Date: Mon Oct 29 11:40:51 2007 +0200 + + Remove unnecessary includes + +commit bf106534a4b56f4a54d4e5bdb9e3e8212a5fd266 +Author: Panu Matilainen +Date: Mon Oct 29 11:39:40 2007 +0200 + + Remove unused variable + +commit 00c6f2540654037067d52cbc0932b64b121ce965 +Author: Panu Matilainen +Date: Mon Oct 29 11:38:52 2007 +0200 + + Hum, files.c needs rpmio_internal afterall for rpmioSlurp + +commit ebd3578be8c68673c66bcc039d74815762fba06a +Author: Panu Matilainen +Date: Mon Oct 29 11:32:51 2007 +0200 + + Include rpmlib.h instead of lib/rpmlib.h + +commit a82d639d7288cd088f539371b5e710311451c3cc +Author: Ralf Corsépius +Date: Mon Oct 29 10:21:32 2007 +0100 + + Use size_t for sizes. + +commit 546867c2b5d2ccade4ade4f399eab8a2c180cdec +Author: Ralf Corsépius +Date: Mon Oct 29 10:20:41 2007 +0100 + + Move typedef into extern "C" {. + +commit acb80574504f39011875012c5253edda1169c7ea +Author: Ralf Corsépius +Date: Mon Oct 29 09:58:15 2007 +0100 + + Don't include . + +commit b818f44da21cbe7660dafbd9938ca9e34834bf32 +Author: Ralf Corsépius +Date: Mon Oct 29 09:55:53 2007 +0100 + + Don't include . + +commit 3b9fd01a9aa03dc8d6dc1b9b6cbed6c2b4104628 +Author: Panu Matilainen +Date: Mon Oct 29 10:32:38 2007 +0200 + + Remove couple of useless rpmio_internal includes + +commit 35bcc3dc3061bf0c15a9ce16ff84b35e7f7076f6 +Author: Panu Matilainen +Date: Mon Oct 29 10:32:20 2007 +0200 + + Include rpmpgp.h instead of rpmio_internal.h + +commit cebb292fd362475929fe35b74933140389c7eefb +Author: Panu Matilainen +Date: Mon Oct 29 10:10:17 2007 +0200 + + Avoid need for header_internal.h + - headerCopyLoad() achieves the same thing.. + +commit 1fe38d71cc4049175b1a0ba7c493e20665880692 +Author: Panu Matilainen +Date: Mon Oct 29 09:42:21 2007 +0200 + + Use fdGetFILE() instead of rpmio internal fdGetFp() everywhere + +commit 46e669f06e9a66f1833d19481c8f2d1adc041645 +Author: Panu Matilainen +Date: Mon Oct 29 09:30:45 2007 +0200 + + Remove bunch of long-dead macro debug stuff + +commit 57a5a2b3db28faf7c7d54e955593caf88beaba74 +Author: Ralf Corsépius +Date: Mon Oct 29 08:22:15 2007 +0100 + + Remove local def of uint32_t, uint16_t. + Include . + Use size_t for sizes. + +commit 3357b1fc76b4fbf118017fbb6f6e69207612690a +Author: Panu Matilainen +Date: Mon Oct 29 09:20:59 2007 +0200 + + Export rpmio fdGetFILE() + +commit da6a613eb321917045d61cf9b59deada4bd67d6b +Author: Panu Matilainen +Date: Mon Oct 29 09:11:37 2007 +0200 + + Remove leftover comment + +commit d255841988e7ef4bd02f83a9079d3a1c31d9f3a0 +Author: Ralf Corsépius +Date: Mon Oct 29 07:28:15 2007 +0100 + + Remove AM_C_PROTOTYPES. + +commit 7134487e2887a31cb0cdcb3711050e8bbbf17657 +Author: Ralf Corsépius +Date: Sun Oct 28 09:53:01 2007 +0100 + + Eliminate BSD-types. + +commit 6a10fc88147ad7f55dab51565abe216852f8bd5c +Author: Ralf Corsépius +Date: Sun Oct 28 07:30:58 2007 +0100 + + Eliminate u_short, USHRT_MAX. + +commit a02ad3f220decc6a8e54fbf8e436f64ee0c07243 +Author: Ralf Corsépius +Date: Sun Oct 28 07:20:59 2007 +0100 + + Remove unnecessary includes. + +commit bb3c8db9a5428f1cab562ea205e6b1305822fe5d +Author: Ralf Corsépius +Date: Sun Oct 28 06:57:08 2007 +0100 + + Include "config.h" instead of . + +commit a241ba959f4b47a9631995cb3991e61ee70fb6a4 +Author: Ralf Corsépius +Date: Sun Oct 28 06:49:57 2007 +0100 + + Include "rpmfc.h" instead of . + +commit 14d434925b894dff35f5a53e25ba651218a86634 +Author: Ralf Corsépius +Date: Sun Oct 28 06:49:54 2007 +0100 + + Include "rpmbuild.h" instead of . + +commit 64b30f9a12a18e30ca52512e41e977e009e8e14e +Author: Ralf Corsépius +Date: Sun Oct 28 06:47:46 2007 +0100 + + Include "rpmts.h" instead of . + +commit a59c95205cc4ae3406f4f994fa615b11a1efb0e8 +Author: Ralf Corsépius +Date: Sun Oct 28 06:47:42 2007 +0100 + + Include "rpmte.h" instead of . + +commit f25c04c1e45c3c579fa182b5345409bde87a3da1 +Author: Ralf Corsépius +Date: Sun Oct 28 06:47:31 2007 +0100 + + Include "rpmlib.h" instead of . + +commit 226e626dae6e2f55351b4616620ac616eaaea698 +Author: Ralf Corsépius +Date: Sun Oct 28 06:47:23 2007 +0100 + + Include "rpmgi.h" instead of . + +commit 8f3334f5f73c80ee6ea9dd9d272ac757abeebd6d +Author: Ralf Corsépius +Date: Sun Oct 28 06:47:20 2007 +0100 + + Include "rpmfi.h" instead of . + +commit f15b940aa03ec7c1b4054991e1764bbf7ea1177c +Author: Ralf Corsépius +Date: Sun Oct 28 06:47:17 2007 +0100 + + Include "rpmds.h" instead of . + +commit cff3ba0882e30dc6accaeba2b811c18afa78c203 +Author: Ralf Corsépius +Date: Sun Oct 28 06:47:14 2007 +0100 + + Include "rpmcli.h" instead of . + +commit 9735f83012e8b5652284c62cf0c376e1e46a32fe +Author: Ralf Corsépius +Date: Sun Oct 28 06:43:19 2007 +0100 + + Include "rpmio_internal.h" instead of . + +commit 227633a3e0e54212568b6809a833f9e8c71461ba +Author: Ralf Corsépius +Date: Sun Oct 28 06:43:16 2007 +0100 + + Include "rpmio.h" instead of . + +commit 2e1f554c2a2fc8910e8c17a43098c3e8b6ef4669 +Author: Ralf Corsépius +Date: Sun Oct 28 06:43:13 2007 +0100 + + Include "rpmhook.h" instead of . + +commit d7c7203182670ed977ed7dd0b4644ae3d74e89b0 +Author: Ralf Corsépius +Date: Sun Oct 28 06:43:10 2007 +0100 + + Include "rpmerr.h" instead of . + +commit 12ef6e8d3a139de1509a41c79c443815e5a8d35b +Author: Ralf Corsépius +Date: Sun Oct 28 06:43:07 2007 +0100 + + Include "fts.h" instead of . + +commit f507baed1fb7d0129c21000b396a56e9bb776857 +Author: Ralf Corsépius +Date: Sun Oct 28 06:43:04 2007 +0100 + + Include "argv.h" instead of . + +commit 3e194cf5fe7aa53b6cec5d911e6eabfa6bc8b643 +Author: Ralf Corsépius +Date: Sun Oct 28 06:42:58 2007 +0100 + + Include "rpmdb_internal.h" instead of . + +commit 759e91bf4a2ce1770b17d9e176869f8998f45a3c +Author: Ralf Corsépius +Date: Sun Oct 28 06:42:55 2007 +0100 + + Include "rpmdb.h" instead of . + +commit 979907ae8bd2f9fd5878ed057d16837bd6f064dc +Author: Ralf Corsépius +Date: Sun Oct 28 06:42:46 2007 +0100 + + Include "header_internal.h" instead of . + +commit 2c4e4c0ccbeac09dbfb6cbaa3ae1ef2c6e4a149d +Author: Ralf Corsépius +Date: Sun Oct 28 06:42:44 2007 +0100 + + Include "header.h" instead of . + +commit b1f8da9252c68b57389cf4ae990385060e8f23ac +Author: Ralf Corsépius +Date: Sun Oct 28 06:36:11 2007 +0100 + + Include "rpmlua.h" instead of . + +commit e36a2ac8da29f324bb93e2e99898ef0f0b9e1e16 +Author: Ralf Corsépius +Date: Sun Oct 28 06:32:05 2007 +0100 + + Include "rpmmacro.h" instead of . + +commit 942da0293731a75e3f8c40467f079b863d36ea30 +Author: Ralf Corsépius +Date: Sun Oct 28 06:17:49 2007 +0100 + + Include "rpmmessages.h" instead of . + +commit 454f5ddff8cc114c0ff0b0dc13d6570276ce715d +Author: Ralf Corsépius +Date: Sun Oct 28 06:14:27 2007 +0100 + + Include "rpmpgp.h" instead of . + +commit 7075f640502b781b4428e412556231029550c087 +Author: Ralf Corsépius +Date: Sun Oct 28 06:11:57 2007 +0100 + + Include "rpmsq.h" instead of . + +commit 562c47ce8b65a1eb1c56c1d246beac5fc24f5fa8 +Author: Ralf Corsépius +Date: Sun Oct 28 06:08:20 2007 +0100 + + Include "rpmsw.h" instead of . + +commit 26a9e836085475ac57f22828864f846c5e03e1bd +Author: Ralf Corsépius +Date: Sun Oct 28 06:05:12 2007 +0100 + + Include "rpmurl.h" instead of . + +commit 2259b9e2d2685401cd19b27e6918ae60312f5faa +Author: Ralf Corsépius +Date: Sun Oct 28 05:02:00 2007 +0100 + + Add @cond NODOXYGEN to hide away __RPM_USES_STDINT_H__ from docs. + +commit b85e0d00ca79dfa50677b05964708d2f2b5cd32d +Author: Ralf Corsépius +Date: Sat Oct 27 06:38:35 2007 +0200 + + Abandon addlib(). + Stop messing around with /usr/ucblib. + +commit bfb5e17e77d329b629281a6a909206131489b1a8 +Author: Ralf Corsépius +Date: Sat Oct 27 06:28:06 2007 +0200 + + Eliminate AC_TRY_COMPILE (Obsolete). + +commit 519977112e83b1265bd277a5f3835671ab26921a +Author: Ralf Corsépius +Date: Sat Oct 27 06:19:26 2007 +0200 + + Stop messing around with triple-arg'ed main. + +commit 6765e53464a432a2931cbdd4bf72cff0e610223d +Author: Ralf Corsépius +Date: Sat Oct 27 06:13:03 2007 +0200 + + Remove AC_PROG_GCC_TRADITIONAL (Obsolete). + +commit d4988efe1b41bef82810dbfb1c7aa52ec68678a3 +Author: Ralf Corsépius +Date: Sat Oct 27 06:10:13 2007 +0200 + + Remove AC_ISC_POSIX (Obsolete). + +commit 2d78c0a51a2b8f069b6e68ba1fc14e5bc76f9348 +Author: Ralf Corsépius +Date: Sat Oct 27 05:50:32 2007 +0200 + + Add deprecation notices. + Depend upon C99-fixed-size types. + +commit a468d3004d15e7b14268b64b5b168e04130f97d8 +Author: Ralf Corsépius +Date: Sat Oct 27 05:48:53 2007 +0200 + + Use AC_CONFIG_HEADERS instead of AM_CONFIG_HEADER. + +commit 4275322229d82f8137627c26c5080fdc40aaa372 +Author: Ralf Corsépius +Date: Sat Oct 27 04:13:07 2007 +0200 + + Remove HAVE_VA_LIST_AS_ARRAY. + +commit 6d13cf177dbf989d9201ff58315682535e071982 +Author: Ralf Corsépius +Date: Sat Oct 27 04:12:19 2007 +0200 + + Check for stdarg.h. + Check for va_copy. + +commit bebeb89735f4927d33233d2c49e91919187f1c91 +Author: Ralf Corsépius +Date: Fri Oct 26 13:24:14 2007 +0200 + + Eliminate [u|]int_[8|16|32]. Use c99 stdint.h types instead. + +commit bbce1581029dddbdcdd76a0b969fd8a8fe5614bf +Author: Panu Matilainen +Date: Fri Oct 26 12:08:34 2007 +0300 + + Fix invalid ifdef-outed code breaking syntax highlighting :) + +commit 7964312e1a52de4dfb10bea47cd6ff2a295f6b02 +Author: Panu Matilainen +Date: Fri Oct 26 11:21:31 2007 +0300 + + Remove dead rpmal code + +commit eabf92f842039af35d1da0e0271e84483959a7e8 +Author: Panu Matilainen +Date: Fri Oct 26 10:21:12 2007 +0300 + + Rename rpmcliImportPubkey() -> rpmtsImportPubkey() + - it's not a cli function in any way + - move to rpmts group + +commit 4b185fc48d9e1206624002618ff661bc1770356c +Author: Ralf Corsépius +Date: Wed Oct 24 18:38:18 2007 +0200 + + Add rpmdb/rpmints.h.in. + +commit 7445f99b38d134ac5965ffab52ff55e611b2c28e +Author: Ralf Corsépius +Date: Wed Oct 24 18:36:19 2007 +0200 + + Pass HEADERS to doxygen instead of pkginclude_HEADERS. + +commit d46dd7352f673643396c060d49af055af7592a0a +Author: Ralf Corsépius +Date: Wed Oct 24 18:26:07 2007 +0200 + + Minor fixes to generation of hacking + +commit 462b0dbca01836d9a6f7112a014f0e16c54e7ad0 +Author: Panu Matilainen +Date: Wed Oct 24 15:59:28 2007 +0300 + + Regenerate translations + +commit 44b1137f099406028999c34064e1a82679c24b85 +Author: Panu Matilainen +Date: Wed Oct 24 15:58:19 2007 +0300 + + Fix a format specification error in the Catalan translation + +commit c00f5828e552d87c73f3c780e3ee8c8bcc93418a +Author: Panu Matilainen +Date: Wed Oct 24 15:56:48 2007 +0300 + + Add Catalan translation (rhbz#350401) + From Xavier Conde & others + +commit b2e90be34639db2fd39b00305ae6e60aac8b6329 +Author: Panu Matilainen +Date: Wed Oct 24 10:31:42 2007 +0300 + + Use NEVRA, not NEVR everywhere for rpmProblems + +commit 19330086994ef02b8dcc18e71087b5c34110801d +Author: Panu Matilainen +Date: Wed Oct 24 09:48:02 2007 +0300 + + Remove dead code + +commit 62cc76e25cdfad78ac30bb28f626b474efdecddc +Author: Panu Matilainen +Date: Wed Oct 24 09:47:22 2007 +0300 + + Don't mess up problem pkgNEVR in python ts.check() (rhbz#349091) + +commit dd8bbe42a3e357cccf6c0d3e7d63cfd76ae4bfa6 +Author: Ralf Corsépius +Date: Wed Oct 24 03:11:19 2007 +0200 + + Remove AC_CHECK_FUNC(fchmod). + +commit b990c6737a92af63d537b4b071f44721401802a3 +Author: Ralf Corsépius +Date: Wed Oct 24 03:10:57 2007 +0200 + + Remove dead and unused, ifdef'ed HAVE_FCHMOD block of code. + +commit 0034893b789590e49aebc09127ae90c6170cc148 +Author: Ralf Corsépius +Date: Wed Oct 24 03:04:01 2007 +0200 + + doScript: Change 'what' to rpmBuildFlags. + +commit f5a2728aa1d31185949cf31cb5baa4de4da68804 +Author: Ralf Corsépius +Date: Tue Oct 23 13:21:52 2007 +0200 + + Pass -1 to setVarDefault for optflags. + +commit 4c647570dcc4d56a84b8adf12bd0ad61dc4c974c +Author: Ralf Corsépius +Date: Tue Oct 23 13:20:19 2007 +0200 + + Eliminate dead code in setPathDefault, setVarDefault. + +commit 2f40e205403bf39549b3406836b0bde981096904 +Author: Panu Matilainen +Date: Tue Oct 23 11:04:31 2007 +0300 + + Remove unused python header stubs + +commit 9832bc53308ed84b7cbcc4100ed13c345b0846ff +Author: Panu Matilainen +Date: Tue Oct 23 11:03:52 2007 +0300 + + One more useless rpmio_internal include removal + +commit fda6c48f004dace80d8a36c514f5d4bc04b9a74d +Author: Panu Matilainen +Date: Tue Oct 23 09:50:23 2007 +0300 + + Remove bunch of unnecessary rpmio_internal & related includes from python + +commit 3b7a6a5a95e010ff1c9699342ce63520f35b4cb3 +Author: Panu Matilainen +Date: Mon Oct 22 16:51:41 2007 +0300 + + Remove bunch of unnecessary rpmio_internal includes + +commit c0e198bd624d3ae899194b18fec43cf065a484e9 +Author: Panu Matilainen +Date: Mon Oct 22 16:32:58 2007 +0300 + + Remove ancient test-stuff + +commit 2c499d40dc0598fc726923215697db9aefac35f8 +Author: Panu Matilainen +Date: Mon Oct 22 15:51:04 2007 +0300 + + Fix rpmts.h internal includes instead of working around in rpminstall.c + +commit 549fb4393ed4e95fa8fba16dfc1f00c8df64fbcf +Author: Panu Matilainen +Date: Mon Oct 22 13:37:02 2007 +0300 + + Use rpmtsGet/SetDBMode() to eliminate needs for _RPMTS_INTERNAL + +commit 8d70f186814c8dce2362a803d15bf5fc3149888c +Author: Panu Matilainen +Date: Mon Oct 22 13:33:53 2007 +0300 + + Add set + get methods from ts dbmode + +commit b96a582dd46c6fe3e24998ad7e4af1384397dc6c +Author: Ralf Corsépius +Date: Fri Oct 19 17:22:08 2007 +0200 + + Reflect changes to doxygen docs. + +commit 25ffe1cef94c9753297567407174402f98a6ddef +Author: Ralf Corsépius +Date: Fri Oct 19 17:21:36 2007 +0200 + + Add Doxyheader. + +commit ef6ea9b508a4309d069f25fe0871660cedae532e +Author: Ralf Corsépius +Date: Fri Oct 19 17:21:08 2007 +0200 + + New (copied from Doxyheader). + +commit 4a465aff3b1273f086b1b22639cb5d9a085ceb72 +Author: Ralf Corsépius +Date: Fri Oct 19 17:20:09 2007 +0200 + + New (renamed from Doxyfile.in). + +commit 7c517216e789c9c9e7b6d319eb3746eb290a1c20 +Author: Ralf Corsépius +Date: Fri Oct 19 17:19:20 2007 +0200 + + Remove. + +commit afaba3f831dfe1e6e082a105d8f69011688648a3 +Author: Ralf Corsépius +Date: Fri Oct 19 17:19:05 2007 +0200 + + Remove. + +commit 8e59724a585d8049c6a4569197e836ccaf4d717f +Author: Panu Matilainen +Date: Fri Oct 19 13:25:08 2007 +0300 + + Rename rpmpsProblem() -> rpmpsGetProblem() to make purpose clearer + +commit 92919c2f73518a14e45c7586b5d2ef5f278255d4 +Author: Panu Matilainen +Date: Fri Oct 19 13:01:58 2007 +0300 + + Make rpmProblem standalone "object" + - problem set contains array of pointers to problems, not problems themselves + - add functions for creating and destroying problems + - use iterators for freeing the problems in rpmpsFree() + - new rpmpsAppendProblem() API for appending existing problem item to + problem set + - implement rpmpsAppend using the new methods + +commit 63f94fb4a8c3ac52941b60cdde1332fb3db67716 +Author: Panu Matilainen +Date: Fri Oct 19 12:30:26 2007 +0300 + + Eliminate rpmps and rpmProblem structure details from the API + +commit 1e74fccef78dd4f5ad80d853646af678d7f6390b +Author: Panu Matilainen +Date: Fri Oct 19 12:28:30 2007 +0300 + + Use rpmProblem access methods instead of direct access to the struct + +commit 494c56e94ae9bbdcec46b746dc6837de42c890b7 +Author: Panu Matilainen +Date: Fri Oct 19 12:27:41 2007 +0300 + + Add methods for accessing rpmProblem data + +commit dffede23507ece9740de2523171f021b6772fa4f +Author: Panu Matilainen +Date: Fri Oct 19 12:15:35 2007 +0300 + + Only permit appending to a problem set from python + - remove subscript assignment (which mucks about rpmps internals way + too deeply) + - add append() method instead + +commit 7f9678705457cb5c884fd1bc901ead9558a3a6eb +Author: Panu Matilainen +Date: Thu Oct 18 16:09:05 2007 +0300 + + Use iterators for rpmpsPrint() + +commit b882a428bde280957844faebfc7bb90b0a847753 +Author: Panu Matilainen +Date: Fri Oct 19 12:36:11 2007 +0300 + + Implement python rpmps iteration with rpmlib level iterator + +commit 36f1ac2c7b3a9030e3dfd59510fe285eac3dce88 +Author: Panu Matilainen +Date: Fri Oct 19 12:35:20 2007 +0300 + + Convert rpmts-py to use rpmps iterator + +commit b1c64e37fd170d08896d4cb9209f5241be138b09 +Author: Panu Matilainen +Date: Thu Oct 18 13:46:59 2007 +0300 + + Make verifyDependencies() use rpmps iterator interface + - use stock problem string for problem descriptions instead of handcrafted + messages, changes output format quite a bit but OTOH reports conflicts + and requires separately and more clearly + - should perhaps filter out duplicates, otoh the old code didn't either... + - return number of problems encountered instead of 0 vs 1 + +commit 96ad2a1fee7528e182f3923440f7b3038e996c8d +Author: Panu Matilainen +Date: Thu Oct 18 13:45:25 2007 +0300 + + Add API for iterating over rpmps problems + +commit 2240b4f8d67ab98de0f090ad146103f7a1984cfb +Author: Ralf Corsépius +Date: Fri Oct 19 07:04:15 2007 +0200 + + Ship Doxyfile.in, doc/librpm.doxy.in. + +commit 8059dfcdf000f234d93097cebb24ab0c8fa11e72 +Author: Ralf Corsépius +Date: Fri Oct 19 07:03:23 2007 +0200 + + Regenerate. + +commit 39454472fc4ca6f776b44edc742f0a307a28ab53 +Author: Ralf Corsépius +Date: Thu Oct 18 18:13:02 2007 +0200 + + Reflect changes to apidocs generation. + +commit 6f74ccbb75005643ee54216e449c8e2f7509270b +Author: Ralf Corsépius +Date: Thu Oct 18 18:12:29 2007 +0200 + + Eliminate @WITH_APIDOCS_TARGET@. + Add EXCLUDE. + +commit b9d56b6dc93f301babdd3af113c8374636af25e9 +Author: Ralf Corsépius +Date: Thu Oct 18 16:04:00 2007 +0200 + + Remove WITH_APIDOCS, WITH_APIDOCS_TARGET. + Add AM_CONDITIONALS DOXYGEN and APIDOCS. Don't generate Doxyfile. + +commit 5c923b9b772a1c10021613f9a9cc80764edd9a79 +Author: Ralf Corsépius +Date: Thu Oct 18 16:02:14 2007 +0200 + + Add stub doxygen @param to silence doxygen. + +commit 4d02494caa4e02a7f0c7f6b4160c9dc076969b5b +Author: Ralf Corsépius +Date: Thu Oct 18 09:51:32 2007 +0200 + + Remove doc/librpm during maintainer-clean. + +commit 6e3017d0406a5490a802f7ebac7abfb3f1afa019 +Author: Ralf Corsépius +Date: Thu Oct 18 09:04:17 2007 +0200 + + Use DOXYGEN instead of __DOXYGEN. + Rework processing pkginclude_HEADERS for doc/librpm.doxy. + +commit f110fe4b50376bfc530d47b33fe64479e4a56726 +Author: Ralf Corsépius +Date: Thu Oct 18 08:41:31 2007 +0200 + + Use DOXYGEN instead of __DOXYGEN. + +commit 0174c534875868fe95c06dd58704a532157aace7 +Author: Ralf Corsépius +Date: Thu Oct 18 08:36:00 2007 +0200 + + Use DOXYGEN instead of __DOXYGEN. + Rework processing pkginclude_HEADERS for doc/librpm.doxy. + +commit 8bcd871811ccea8b704264ce273843e7b1c508d1 +Author: Panu Matilainen +Date: Thu Oct 18 09:34:54 2007 +0300 + + debugedit mishandles empty DW_AT_comp_dir (Roland McGrath) + - fpc seems to produce DW_AT_comp_dir with value "" (empty string). + This is dubious, but debugedit makes it even worse by getting confused by it. + +commit 0a7a4877245d5de1d74aec09245cb94b8181a642 +Author: Ralf Corsépius +Date: Thu Oct 18 08:34:37 2007 +0200 + + Use DOXYGEN instead of __DOXYGEN. + +commit abdc47d51cbd910f47d8415cadc93a5b94fcecf6 +Author: Panu Matilainen +Date: Thu Oct 18 09:33:56 2007 +0300 + + debugedit mishandles DW_FORM_ref_addr (Roland McGrath) + +commit a6c8f8086e263352afc16a76800966d9c3696f59 +Author: Ralf Corsépius +Date: Wed Oct 17 16:42:21 2007 +0200 + + Add automake option nostdinc. + +commit ea2968b6b3b2a79e40f986f148c77a1d15be3365 +Author: Ralf Corsépius +Date: Wed Oct 17 16:41:59 2007 +0200 + + Cleanup CPPFLAGS. + +commit cc113a1aad048c06d71a64516f83741902c65a45 +Author: Ralf Corsépius +Date: Wed Oct 17 15:38:33 2007 +0200 + + Add find-provides, find-requires, db.h to DISTCLEANFILES. + +commit 6e2f4d1351ce1f46c35acb5754f5c072744c59ff +Author: Ralf Corsépius +Date: Wed Oct 17 15:23:15 2007 +0200 + + Move db.h handling to toplevel Makefile.am + +commit 8a4f77043520785a93a08f3df077ded30ea7cc25 +Author: Ralf Corsépius +Date: Wed Oct 17 15:08:01 2007 +0200 + + Expand AM_CPPFLAGS. + +commit ca1f17b9ff26b46ffbcbcdc66a90b2f3083fe315 +Author: Ralf Corsépius +Date: Wed Oct 17 15:07:13 2007 +0200 + + More reversions. + +commit 83b24d5f005b9cbb8403ef1b016454cf81ccc63d +Author: Ralf Corsépius +Date: Wed Oct 17 14:36:47 2007 +0200 + + Add preliminary support for doc/librpm. + +commit 9e826374baad5b040d9bd70932be3908a8402f91 +Author: Ralf Corsépius +Date: Wed Oct 17 14:35:54 2007 +0200 + + #include + +commit 0f681e6625b13a75f5ea69bfa787f8e98f1c21d8 +Author: Ralf Corsépius +Date: Wed Oct 17 14:31:06 2007 +0200 + + Add tput. + +commit 38fe2fd9731522bf4485c9734fcf645b8bf82329 +Author: Panu Matilainen +Date: Wed Oct 17 14:55:41 2007 +0300 + + Use HAVE_DB_H for both internal and external BDB + - rpmdb only cares whether we have BDB or no, internal vs external + doesn't matter + - makes external BDB actually work + +commit 44768215d390b5e4f792c2a0c2e69c4476d26f9c +Author: Ralf Corsépius +Date: Wed Oct 17 12:13:14 2007 +0200 + + Revert yesterday's patch (we're not ready for it). + +commit 0e43d3b5705d8cb33cb74817d2808aa9996c0241 +Author: Ralf Corsépius +Date: Wed Oct 17 11:33:52 2007 +0200 + + Set GENERATE_MAN=NO. + +commit 0c1a781c29a83f977e93724c698fb1a5fb97210d +Author: Ralf Corsépius +Date: Wed Oct 17 11:30:59 2007 +0200 + + New. + +commit 2d0f3b069d3b22c7593379ec8c1b01eed79fe767 +Author: Ralf Corsépius +Date: Wed Oct 17 08:41:53 2007 +0200 + + Remove refs to emacs. + +commit 2200b96fe318d92398c57c5ccced7c16e30397e3 +Author: Ralf Corsépius +Date: Tue Oct 16 18:32:24 2007 +0200 + + Move tdbi, tjfn, tsql to toplevel Makefile.am. + +commit ba6a27ce9bd86f34d5fc1199943d89f484da4764 +Author: Ralf Corsépius +Date: Tue Oct 16 18:22:23 2007 +0200 + + Move ACLOCAL_AMFLAGS to the top. + +commit 8ea05eb1dff52e93ea33433cc1efd274518ce167 +Author: Ralf Corsépius +Date: Tue Oct 16 18:21:27 2007 +0200 + + Use \$(SED) instead of hard-coded sed. + +commit 1a2234fe5429388b60e217b1608a6d5028a7d208 +Author: Ralf Corsépius +Date: Tue Oct 16 14:25:04 2007 +0200 + + Fix broken doxygen comment. + +commit a75b7cc5e912f1af4d63a90b483770059d60d61a +Author: Panu Matilainen +Date: Tue Oct 16 13:40:45 2007 +0300 + + Remove unimplemented, unused RPMPROB_BADPRETRANS + - leftover from pretrans syscall hack before %pretrans script days + +commit e4aeb6fac52b02068c15f3175a8818b11caf60d9 +Author: Ralf Corsépius +Date: Tue Oct 16 12:28:09 2007 +0200 + + s/dbiflags/flags/ in doxygen comment. + +commit d1e24fa5867df035020eba8ce4ab59014b98a11a +Author: Ralf Corsépius +Date: Tue Oct 16 12:26:42 2007 +0200 + + Don't include stdio.h. + +commit 6f0dabbcdda98b95a30cc7073d2446b99ebd5840 +Author: Panu Matilainen +Date: Tue Oct 16 11:51:57 2007 +0300 + + Rename norwegian translation no -> nb (rhbz#332271) + +commit b97951097805632470725ef162e6eb8dde250de2 +Author: Ralf Corsépius +Date: Mon Oct 15 10:40:52 2007 +0200 + + Add usrsrcdir. + Reflect using $(usrsrcdir)/packages instead of $(usrsrcdir)/$(RPMCANONICALVENDOR). + +commit 77c2edcb76cea4aecb7cdc3b2dbed6a8ad470b22 +Author: Ralf Corsépius +Date: Mon Oct 15 10:03:16 2007 +0200 + + Regenerate. + +commit e044dc0d5a1adf366650878e66dad2e0d9f0d491 +Author: Panu Matilainen +Date: Sun Oct 14 12:49:18 2007 +0300 + + match *.omf, not *omf in find-lang (Ville Skyttä) + +commit c7b8053f463a6a6fdcc039908ff399f4c1f591d1 +Author: Panu Matilainen +Date: Sun Oct 14 12:48:32 2007 +0300 + + find-lang Qt translation support (Ville Skyttä) + +commit 5656af9cf31c053ad97815692a0c0736c7e4bc42 +Author: Panu Matilainen +Date: Sun Oct 14 12:42:47 2007 +0300 + + find-lang localized man page support (Ville Skyttä) + +commit 52de2160183593ae515f08eeed9d62d0b05a37d2 +Author: Panu Matilainen +Date: Sun Oct 14 12:31:24 2007 +0300 + + find-lang POSIX-compliant find(1) usage (Ville Skyttä) + +commit aeeee26cbc5fad78d0b7bb902eb01c75d0c353b2 +Author: Panu Matilainen +Date: Sun Oct 14 12:30:31 2007 +0300 + + find-lang spelling fixes (Ville Skyttä) + +commit ce13d1b3180ca338ae6d48bfb54c9c716089d329 +Author: Panu Matilainen +Date: Thu Oct 11 14:14:00 2007 +0300 + + Clarify rpm manpage wrt rpmbuild binary vs package (rhbz#233232) + +commit 9d614eba54a83adc07113a8e9c75ab3ce55af2f1 +Author: Panu Matilainen +Date: Thu Oct 11 13:50:05 2007 +0300 + + Clarify rpmtsCheck() documentation (rhbz#159638) + +commit 37fd4820e587194375fbab9e8fd1ed642dc236db +Author: Panu Matilainen +Date: Thu Oct 11 11:17:48 2007 +0300 + + Make default _topdir vendor agnostic + - follow Suse behavior by using /usr/src/packages instead of /usr/src/redhat + - the default should probably be %(echo $HOME)/rpmbuild instead for + sane non-root behavior, revisit this later... + +commit 9a555bf696eed5601bbead738a8ef366114c1670 +Author: Panu Matilainen +Date: Wed Oct 10 14:37:18 2007 +0300 + + header_method.h is now private + +commit fc0463782edce3f3ed416b57435eb996fb8bb174 +Author: Panu Matilainen +Date: Wed Oct 10 14:36:13 2007 +0300 + + Remove now unneeded hdrinline + +commit 9204c957881d960c179c6e96a21a8ea56f6cf0a2 +Author: Panu Matilainen +Date: Wed Oct 10 14:35:14 2007 +0300 + + Un-inline common header access functions + - implementations in new header_common.c + - definitions in main header.h + +commit 8f9eea953f6e0d13cf622ce5ef5d958a55977282 +Author: Panu Matilainen +Date: Wed Oct 10 14:25:29 2007 +0300 + + Move per-header method typedefs etc out of main header.h + - new header_method.h include + +commit 67b68cbeb97831844dd06bc6e231a3d78f348bde +Author: Panu Matilainen +Date: Wed Oct 10 11:30:37 2007 +0300 + + pkgconfig dependency script fixes + - don't make assumptions about package names, requires pkg-config executable + path instead + - always create pkg-config dependency if *.pc files are included, not just + in case the *.pc file requires other pkg-config modules + +commit 5dd1a5baa571b994559579fb6ee6289f51257ee7 +Author: Ralf Corsépius +Date: Wed Oct 10 10:08:26 2007 +0200 + + Move pkginc_HEADERS to toplevel Makefile.am + +commit ad40930a801e8b3e42bcdbbb33f759eb6f19e6f7 +Author: Ralf Corsépius +Date: Wed Oct 10 09:54:39 2007 +0200 + + Recursively pick up files. + +commit 272d591973ce001d50c745f1796873e8ad1e8d77 +Author: Ralf Corsépius +Date: Wed Oct 10 08:39:01 2007 +0200 + + Add support for lzma compressed "Sources". + +commit 9f7a8dab5928a60ab641e480f921251a93ffa0be +Author: Ralf Corsépius +Date: Wed Oct 10 08:37:35 2007 +0200 + + Kick out polish comment. + +commit fca4ed8d97cd98d1cb4a1d0e26339f3ff4171d3e +Author: Ralf Corsépius +Date: Wed Oct 10 07:14:47 2007 +0200 + + Install libtooldeps.sh and pkgconfigdeps.sh (Used by lib/rpm/macros). + +commit 1567d8baf485e7501c79d96f8231084dd0a8ecb7 +Author: Panu Matilainen +Date: Tue Oct 9 15:47:15 2007 +0300 + + Permit src.rpm installation to be interrupted + +commit 01d5c13a4299e6fb7357d14fee7c5a368ec3bbbd +Author: Panu Matilainen +Date: Tue Oct 9 15:33:49 2007 +0300 + + Make rpmerr.h private, include directly where needed. + +commit 9fba2d43d162bc12e84a4e5120429609ff17fc72 +Author: Panu Matilainen +Date: Tue Oct 9 15:07:08 2007 +0300 + + Let tufdio use rpmio_internal.. its for internal testing only anyway + +commit 8b4b6eeb47c00d072b159e9dc84cd2a2a8f72868 +Author: Panu Matilainen +Date: Tue Oct 9 15:06:39 2007 +0300 + + Oops, one missed rpmError() user.. + +commit 275835643bf84cace7a8e506f6d3f76fd618c73c +Author: Panu Matilainen +Date: Tue Oct 9 15:02:57 2007 +0300 + + Remove rpmError() and rpmMessage() retrofitting + +commit 6bdd2384c47637b0a054b98b2ce8aeec6d7930a7 +Author: Panu Matilainen +Date: Tue Oct 9 15:01:52 2007 +0300 + + More RPMMESS -> RPMLOG verbosity fixes + +commit 81c4b4ba27784047e78c83398f9ff925b26a632b +Author: Panu Matilainen +Date: Tue Oct 9 14:58:13 2007 +0300 + + Use RPMLOG_ levels instead of RPMMESS for verbosity setting + +commit b21bf6018e915de2348e10d52c3576d1e4b5eae9 +Author: Panu Matilainen +Date: Tue Oct 9 14:54:28 2007 +0300 + + Replace all uses of RPMMESS_FATALERROR with RPMLOG_CRIT + +commit 832580670ac00f1de425960cf15261b784388077 +Author: Panu Matilainen +Date: Tue Oct 9 14:53:09 2007 +0300 + + Replace all uses of RPMMESS_VERBOSE with RPMLOG_INFO + +commit 0eb7deabf2364e0c2671090a1f774c06a9217c1e +Author: Panu Matilainen +Date: Tue Oct 9 14:52:01 2007 +0300 + + Replace all uses of RPMMESS_WARNING with RPMLOG_WARNING + +commit 56366e3890a913c43642132340e2b7c6292e1227 +Author: Panu Matilainen +Date: Tue Oct 9 14:50:42 2007 +0300 + + Replace all uses of RPMMESS_NORMAL with RPMLOG_NOTICE + +commit c52905d33460c020f8f1b33da47c06a8a2cb513f +Author: Panu Matilainen +Date: Tue Oct 9 14:49:02 2007 +0300 + + Replace all uses of RPMMESS_ERROR with RPMLOG_ERR + +commit 9d9aa852ca724e4c7671cec249189f7dfef5ed8e +Author: Panu Matilainen +Date: Tue Oct 9 14:48:04 2007 +0300 + + Replace all uses of RPMMESS_DEBUG with RPMLOG_DEBUG + +commit 4ce9fc1a1725b883190de2c415842a342ed3dbe3 +Author: Panu Matilainen +Date: Tue Oct 9 14:14:30 2007 +0300 + + Replace all rpmMessage() uses with rpmlog() + +commit d709195c3a51522629443cddea042513f47c5ad3 +Author: Panu Matilainen +Date: Tue Oct 9 14:06:06 2007 +0300 + + Replace all rpmError() uses with rpmlog() + +commit 46921b2334ddde2cad8f3546c6f9b6124adbb3a2 +Author: Panu Matilainen +Date: Tue Oct 9 13:41:59 2007 +0300 + + Fix tufdio build after rpmio cleanups + +commit 210e1ac82638d4ad9b802819ac615cbfed471813 +Author: Panu Matilainen +Date: Tue Oct 9 13:33:39 2007 +0300 + + Hide rpmio vectors from API, only internal needs + +commit adb4ca9ecdca6b5e9542ea611fc3834b1dd530c6 +Author: Panu Matilainen +Date: Tue Oct 9 13:27:47 2007 +0300 + + Remove timedRead() define + +commit 72d2b41cb6aaca54b1d641fc1d890248ac7ba184 +Author: Panu Matilainen +Date: Tue Oct 9 12:52:09 2007 +0300 + + Remember to remove fdFgets() definition too.. + +commit 2ad02a60b9ea9ba95bd5c2d5c9b947a7c30b4034 +Author: Panu Matilainen +Date: Tue Oct 9 12:48:04 2007 +0300 + + Rename __fd*() to fd*() for consistency now that the names are free + +commit 0e8db956e39a0d95da7be7c9286d77dd1d9eed82 +Author: Panu Matilainen +Date: Tue Oct 9 12:42:27 2007 +0300 + + Remove unused legacy rpmio fd*() interfaces + - fdFileno(), fdOpen(), fdRead(), fdWrite(), fdClose() gone... + +commit 351c1f35f79da9f8c0cccf7c569a5b6ba2f896f5 +Author: Panu Matilainen +Date: Tue Oct 9 12:28:59 2007 +0300 + + Remove unused rpmio fdFdopen() function + +commit c961e7a5f8f388a2e8608fecac575e2adecbd762 +Author: Panu Matilainen +Date: Tue Oct 9 12:28:08 2007 +0300 + + Remove unused rpmio fdFgets() function + +commit cabd0b9ffd35e0a1f288f03f65a9b9360a6944cd +Author: Panu Matilainen +Date: Tue Oct 9 11:55:00 2007 +0300 + + Remove bunch of deprecated and unused rpmlog functions + +commit 6ea5c0023f6995cfd7104f8657c4fa35e77367c4 +Author: Ralf Corsépius +Date: Tue Oct 9 10:02:49 2007 +0200 + + Use enums instead of ints for processing isCompressed ret-val. + +commit 0f22ea8830574d936e38e84a3806af97c33e0530 +Author: Ralf Corsépius +Date: Mon Oct 8 17:12:10 2007 +0200 + + Add __LZMA. + +commit 58daebe1075f21e12fecdc1cf6ea878006cb8d6c +Author: Ralf Corsépius +Date: Mon Oct 8 16:53:52 2007 +0200 + + Make hdrinline.h a private header. + +commit 1788472d6223618ec3a16dc8ad2ef61115eb745d +Author: Panu Matilainen +Date: Mon Oct 8 15:40:31 2007 +0300 + + Fix up the download path in README + +commit 722e03c1a85bd9ae5df0ef9fb4b94650b90f6917 +Author: Panu Matilainen +Date: Mon Oct 8 15:37:38 2007 +0300 + + Dust off INSTALL docs a bit + +commit 36217918fc131c4f63f18793c6eb471f46e97945 +Author: Ralf Corsépius +Date: Mon Oct 8 13:14:10 2007 +0200 + + Make headers self-contained. + +commit 847e431706d1d1a5e7cfde12b2a027b77870aadd +Author: Ralf Corsépius +Date: Mon Oct 8 12:40:55 2007 +0200 + + Make headers self-contained. + +commit 619aa0e650a380f227a520549d367dd05dcc3df4 +Author: Ralf Corsépius +Date: Mon Oct 8 12:32:41 2007 +0200 + + Make headers self-contained. + +commit 069a92e2cd2c2bb213e204e4a5c120c8d827876a +Author: Ralf Corsépius +Date: Mon Oct 8 12:29:02 2007 +0200 + + Make headers self-contained. + +commit 9e1a6a395f4785007e9e1e8935dfaae20f3afa8f +Author: Ralf Corsépius +Date: Mon Oct 8 11:03:57 2007 +0200 + + Make headers self-contained. + +commit 98dc9ce7bb6c9371bd5713b64d838dd2a1b10083 +Author: Ralf Corsépius +Date: Mon Oct 8 10:35:28 2007 +0200 + + Make header files self-contained. + +commit d6ffa9891fcd1e5e2b66d3dc543165fb475716c0 +Author: Ralf Corsépius +Date: Mon Oct 8 10:05:06 2007 +0200 + + 'Adjust extern C {} blocks.' + +commit c29845f5848cfdbab3e06dbcb27dccfc7b5a3ae0 +Author: Ralf Corsépius +Date: Mon Oct 8 09:55:55 2007 +0200 + + 'Include instead of magic.h' + +commit b97dbc7fd3a499c6d9d83439a0bd33edfab4f43a +Author: Ralf Corsépius +Date: Mon Oct 8 07:38:19 2007 +0200 + + Use 'file' instead of '' to work around include path issues. + +commit 5b654b0086db80c884db4658a80621a21f5e7102 +Author: Ralf Corsépius +Date: Mon Oct 8 06:33:04 2007 +0200 + + Do not include "system.h". + +commit c68b8bcd8fc9f317f811e5e528d359b427874e21 +Author: Ralf Corsépius +Date: Mon Oct 8 06:32:24 2007 +0200 + + Include "system.h" + +commit b27dcbe5460c931ad174c6112d3266a425633a4f +Author: Ralf Corsépius +Date: Sun Oct 7 18:15:20 2007 +0200 + + Remove generation of ChangeLog to Makefile.maint. + +commit 49382a79ca7e0bb2912c7653f423a3069e654863 +Author: Ralf Corsépius +Date: Sat Oct 6 08:54:44 2007 +0200 + + const-ify second arg of strtokWithQuotes. + +commit 144038e68277b58980453f1e2a5fe44a1b7e508d +Author: Ralf Corsépius +Date: Sat Oct 6 08:53:11 2007 +0200 + + s,\\subsection,\\section, + +commit 3df8f54ef5b95ca7b133404e8e003d65e900f81e +Author: Ralf Corsépius +Date: Sat Oct 6 05:56:57 2007 +0200 + + Add description stub to strtokWithQuotes to silence doxygen. + +commit fae3f7eb92436b838b720c0888df8927a49bf16b +Author: Ralf Corsépius +Date: Sat Oct 6 05:52:15 2007 +0200 + + Rename static headerXXX functions into _headerXXX to avoid clashes with static headerXXX fintions in hdrinline.h. + +commit acedc1b611ebb7fa287a0ea2eecb50273996e124 +Author: Ralf Corsépius +Date: Sat Oct 6 04:45:37 2007 +0200 + + Add quotes in doxygen blocks. + +commit 4770cb41c2f49fe86cef24dbabe27772f253fac5 +Author: Ralf Corsépius +Date: Sat Oct 6 04:43:37 2007 +0200 + + Add quotes to \# in doxygen blocks. + +commit 391ed7bbad93f0500debb0019dbb45bdd3d311ab +Author: Ralf Corsépius +Date: Sat Oct 6 04:42:47 2007 +0200 + + Remove POPT. + +commit 72e97bd3da9c926106cdf96e9a85dff96805cab1 +Author: Ralf Corsépius +Date: Sat Oct 6 04:42:32 2007 +0200 + + Add description-stubs to doxygen blocks to silence doxygen warnings. + +commit 0d595e407a7588870f0e79da18eecb6600e7fc2a +Author: Ralf Corsépius +Date: Sat Oct 6 04:41:49 2007 +0200 + + Add description-stubs to doxygen blocks to silence doxygen warnings. + +commit 1cbede4fd20b87e5b97ee41b4750b52c4cf7b342 +Author: Ralf Corsépius +Date: Sat Oct 6 04:41:21 2007 +0200 + + Add description-stubs to doxygen blocks to silence doxygen warnings. + +commit be342ad3c5966a851d98cc8d40b6436f8c8cab36 +Author: Ralf Corsépius +Date: Sat Oct 6 04:39:58 2007 +0200 + + Add quotes to \# in doxygen blocks. + +commit f109c7b830edcf44b87553840a7e5b7cce83715a +Author: Ralf Corsépius +Date: Fri Oct 5 17:45:33 2007 +0200 + + Remove stray splint comment. + +commit d9a6863e11932fff42e02d79df899e45ab4f70f7 +Author: Ralf Corsépius +Date: Fri Oct 5 10:40:58 2007 +0200 + + Support DOT. + +commit cac07870f502a21ff539e9a9d255b92e75687bd0 +Author: Ralf Corsépius +Date: Fri Oct 5 10:40:07 2007 +0200 + + Use size_t for sizes. + +commit 5a909969fd24315832487a5386e074e88031afcb +Author: Ralf Corsépius +Date: Fri Oct 5 10:38:36 2007 +0200 + + Fix doxygen comments. + +commit 4f7db64d7c1a2c0bfbe07a40925e9b76b3e9851c +Author: Ralf Corsépius +Date: Fri Oct 5 10:37:55 2007 +0200 + + Add HAVE_DOT. + +commit d14cb3bd16755d9e2545290aa87440c51c4cd7b4 +Author: Ralf Corsépius +Date: Fri Oct 5 09:36:12 2007 +0200 + + Fix doxygen commands. + +commit cc4754e7641578c9bd970615695f9d15200aa1cb +Author: Ralf Corsépius +Date: Fri Oct 5 08:13:33 2007 +0200 + + Adjust broken \file. + +commit a3cf72167f9a59a09b0b5e6ee9ba81b1173017ba +Author: Ralf Corsépius +Date: Fri Oct 5 08:03:37 2007 +0200 + + Remove refs to tools/rpmxp.c, tools/rpmxml.c, tools/rpmtool.c. + +commit 55ba0d5b84cf8c22df69e4d7b24addf1d423af4c +Author: Ralf Corsépius +Date: Fri Oct 5 08:02:53 2007 +0200 + + Remove refs to lib/rpmsx.* + +commit f7c95206fd6a051dd210af7a3a359df2e897f1f5 +Author: Ralf Corsépius +Date: Fri Oct 5 07:48:56 2007 +0200 + + Remove refs to "popt/". + +commit 7d3b29301165ed57a85ce5a6e74d301328222f49 +Author: Ralf Corsépius +Date: Fri Oct 5 07:48:20 2007 +0200 + + Remove refs to "file/src". + +commit 5d45e150766c4f6103451392d0fed5e9d0e31e21 +Author: Ralf Corsépius +Date: Fri Oct 5 07:46:51 2007 +0200 + + doxygen -u. + +commit 32c98f766e3c4d98245679c94473a1cafed01f89 +Author: Ralf Corsépius +Date: Fri Oct 5 07:21:20 2007 +0200 + + Fix minor typo. + +commit 4d5be35b6a907c2c2523075165fb7e3eb96b53cd +Author: Ralf Corsépius +Date: Fri Oct 5 07:11:33 2007 +0200 + + Add __fdFileno, fdFileno. + +commit dfc6fae6be0ed51c49d694887e1acda8662307be +Author: Ralf Corsépius +Date: Fri Oct 5 07:11:02 2007 +0200 + + Remove fdFileno. + +commit d4bea657c402a67a3ab2104c9ed1ae93314f3441 +Author: Ralf Corsépius +Date: Fri Oct 5 07:10:36 2007 +0200 + + Make fdFileno an external function. + +commit 4fa0c255494a535780b98d7877657aa187080fde +Author: Ralf Corsépius +Date: Thu Oct 4 09:23:50 2007 +0200 + + Change strntoul to using size_t for sizes. + +commit 6d77a00e54d32d3543f71df7d46408cd553cb4f5 +Author: Ralf Corsépius +Date: Thu Oct 4 09:18:16 2007 +0200 + + Include rpmts.h instead of depends.c. + +commit 9cf8f9c31ad81d45cd206bad5df98fc8b75a5333 +Author: Ralf Corsépius +Date: Thu Oct 4 08:55:07 2007 +0200 + + Stop checking for machine/types.h (Private header of some OSes not supposed to be used). + +commit 70ed33417d1d122bfc434d106824a9035dea9463 +Author: Panu Matilainen +Date: Wed Oct 3 08:57:54 2007 +0300 + + Small cronjob fixes (rhbz#315271) + - create cronjob temp file in target directory to ensure corrent + selinux context (rhbz#315271) + - dont leave empty files around in case of failure + +commit 249dad1475e08ba86f911f722a0421771ceb30ce +Author: Ralf Corsépius +Date: Wed Oct 3 05:07:12 2007 +0200 + + Remove $dirs (unused). + +commit 67e8f946fef1be13dbfdf6040a9604baa6e8dd4f +Author: Ralf Corsépius +Date: Mon Oct 1 18:44:29 2007 +0200 + + Fix minor typo. + +commit 8c7b929a14cc7118b7eb046bc2b5bc184b7c2f06 +Author: Panu Matilainen +Date: Mon Oct 1 14:29:10 2007 +0300 + + Never glob non-local paths in rpmGlob() + +commit 343effc65f1b388abe4f3a68af10a27f34b4feb5 +Author: Ralf Corsépius +Date: Mon Oct 1 13:17:15 2007 +0200 + + Remove (unused). + +commit 6e4e9c751635cac3f79f1bf873cd922d1f10d82a +Author: Ralf Corsépius +Date: Mon Oct 1 12:58:32 2007 +0200 + + Remove AC_CHECK_HEADERS(thread.h). + Remove duplicate check for pthread.h. + +commit ea2a8068cd8f974b10e8db56bdfd93b36dd199c7 +Author: Panu Matilainen +Date: Thu Sep 27 14:11:00 2007 +0300 + + Add %alpha arch macro for supported alpha cpus (rhbz#295941) + +commit 4bef9fd8b3826551f06911c99abb0dfe5061806b +Author: Panu Matilainen +Date: Thu Sep 27 12:28:30 2007 +0300 + + Own omf directories found by find-lang (rhbz#296731) + +commit c8e421400c007442646af2979a8d622319c5d30d +Author: Panu Matilainen +Date: Thu Sep 27 10:37:19 2007 +0300 + + Fix disk space checking when zero blocks / inodes are available (rhbz#308171) + + When installing a rpm that requires space on a filesystem with 0 blocks free, + rpm will not detect that there is insufficient space on the filesystem. + + Patch from Patrick Bergamin + +commit 7c1a960aaea9fcdf5346844069eee9daae66d58b +Author: Panu Matilainen +Date: Wed Sep 26 11:29:53 2007 +0300 + + Remove the deprecated rpmlead definitions from public headers + +commit 39072f5ee4e2f8d1314fc7d9e81b01c88a263bf6 +Author: Panu Matilainen +Date: Wed Sep 26 10:40:02 2007 +0300 + + Avoid unnecessary rpmps internals access + +commit 610306fb528b48ce2077b85f0fe90512ef79cc55 +Author: Panu Matilainen +Date: Wed Sep 26 09:57:26 2007 +0300 + + Rename whatis() to rpmfiWhatis() for namespacing + +commit 0ddf824afb647b620400dba8172fa4ca7ee1690b +Author: Panu Matilainen +Date: Wed Sep 26 09:52:55 2007 +0300 + + Eliminate some unnecessary rpmte-internal accesses in psm + +commit d16bdb1550c3c3c13a40ad9cb6869564a6abbc38 +Author: Panu Matilainen +Date: Tue Sep 25 22:46:02 2007 +0300 + + Hide rpmfc structure internals from the API + +commit b813710a4ca26743291cbdbbb3831d5a3e103356 +Author: Ralf Corsépius +Date: Sat Sep 22 07:58:56 2007 +0200 + + Take out __FILE__, __LINE__ from DBGREFS. + +commit cb076959008f3b50abac3747b1b1bad2be2c8e6b +Author: Ralf Corsépius +Date: Sat Sep 22 04:14:07 2007 +0200 + + Add missing extern "C". + +commit 07e383ce0d9a8beeec36e9aed66a2017e95dfcb6 +Author: Ralf Corsépius +Date: Fri Sep 21 17:02:45 2007 +0200 + + Add fdLink, fdFree, fdNew functions. + +commit 0e3ce6c9a8f5d658ae5ef57e9aca1f3c0fc55b9f +Author: Ralf Corsépius +Date: Fri Sep 21 17:02:33 2007 +0200 + + Remove fdLink, fdFree, fdNew defines. + +commit 273ddaf0a95f01f68dd2d0df61ec1f466884d3d3 +Author: Ralf Corsépius +Date: Fri Sep 21 16:51:15 2007 +0200 + + Remove fdClose, fdOpen, fdRead, fdWrite defines. + +commit 868ff87bc0ac8adbff6629e91111e79c49553c91 +Author: Ralf Corsépius +Date: Fri Sep 21 16:50:59 2007 +0200 + + Add fdClose, fdOpen, fdRead, fdWrite functions. + +commit e152864a768c7cd81479b43e15f4f2cb340e0910 +Author: Ralf Corsépius +Date: Fri Sep 21 16:22:23 2007 +0200 + + Eliminate fdClose/__fdClose preprocessor games. + +commit 14a28ee82db5ce0293519ed3a13627c560812aad +Author: Ralf Corsépius +Date: Fri Sep 21 16:20:52 2007 +0200 + + Eliminate fdWrite/__fdWrite preprocessor games. + +commit 9b929ba2941d1f4849f9ec92f8acb877adf788ea +Author: Ralf Corsépius +Date: Fri Sep 21 16:10:32 2007 +0200 + + Eliminate fdRead/__fdRead preprocessor games. + +commit 9ed70bbbc0315bb103c2c2fed6fa88a1d40dce3b +Author: Ralf Corsépius +Date: Fri Sep 21 16:08:39 2007 +0200 + + Eliminate fdOpen/__fdOpen preprocessor games. + +commit 9456c927a4fb4dca29fcbea84cb6727bf7b0bbb9 +Author: Panu Matilainen +Date: Fri Sep 21 16:11:48 2007 +0300 + + Hide rpmtag index details from the api + - move rpmTagGet*() out of line from rpmlib.h to tagnames.c + - move headerTagIndices_s from header.h into tagnames.c + +commit 3a26a31576ea482c6c6e06b6cc685c2e57d47177 +Author: Panu Matilainen +Date: Fri Sep 21 15:58:50 2007 +0300 + + Fixup after Spec -> rpmSpec + +commit 2c2538d7260baf0eae36d5ee07ddbfffc20044d9 +Author: Panu Matilainen +Date: Fri Sep 21 15:23:02 2007 +0300 + + Rename Spec -> rpmSpec for namespacing + +commit 0a16dadffc398617de3f4d0b6d45e4f017e19b9f +Author: Panu Matilainen +Date: Fri Sep 21 15:19:47 2007 +0300 + + Oops, remove, not ifdef out.. + +commit 7e5099e52fe90a054a6b1bdf45265e7185233a1e +Author: Panu Matilainen +Date: Fri Sep 21 15:17:08 2007 +0300 + + Rename alKey & alNum to rpmal* for namespacing + Also move it out of rpmlib.h, nothing needs it there... + +commit cd5956633eeaf6b27f026726991a9a20d28ad7ee +Author: Panu Matilainen +Date: Fri Sep 21 13:09:18 2007 +0300 + + Silence compiler whining from bad popt argv definition + +commit 1517b852b4ea8baca9d64f3d956f0fee5d0d93dc +Author: Panu Matilainen +Date: Fri Sep 21 13:02:55 2007 +0300 + + Unexport FSM(I) typedefs, only usable within rpm + +commit bb5d450d229146026ebd7789d67d6ac8448201e9 +Author: Panu Matilainen +Date: Fri Sep 21 12:47:45 2007 +0300 + + Unexport rpmpms typedef, nothing outside rpm can use it anyway + +commit 91a2f856c8c428993d80e1fe24ae9656dc5596a1 +Author: Panu Matilainen +Date: Fri Sep 21 09:58:46 2007 +0300 + + Remove unused proof-of-concept arch-filtering of dependencies + +commit 97f6e790bbea6154fda27fcd733f1e2c8812f0c5 +Author: Ralf Corsépius +Date: Fri Sep 21 05:59:26 2007 +0200 + + Add another HAVE_ZLIB_H conditional. + +commit 81745883980a8089655e0b3f8503e82c94847d23 +Author: Panu Matilainen +Date: Thu Sep 20 17:37:39 2007 +0300 + + Rip out unused anaconda-related hacks + +commit c0149602a60e21d82b2564daee06a6b43b1f671a +Author: Panu Matilainen +Date: Thu Sep 20 16:19:25 2007 +0300 + + Rename public fileAction* type to rpmFileAction for namespacing + +commit a5aa5ffce8ab5a5eb27f2f021b5affd60a2e518b +Author: Panu Matilainen +Date: Thu Sep 20 16:12:46 2007 +0300 + + TODO reminder about compat headers + +commit e1b4af366ac5f71d1696615502013d028604755e +Author: Ralf Corsépius +Date: Thu Sep 20 14:57:04 2007 +0200 + + Remove checks for synch.h, semaphore.h, aio.h (unused). + +commit 83f09475869d7f86568b897719521be3a3b47365 +Author: Panu Matilainen +Date: Thu Sep 20 15:52:03 2007 +0300 + + Rename MacroContext and -Entry to rpmMacro* for namespacing + +commit 48f4ff6583f09a12d539072e1337c40c92161ee3 +Author: Ralf Corsépius +Date: Thu Sep 20 14:45:40 2007 +0200 + + Make zlib conditional. + +commit 154a7f7603dca24ee56d66f3ca6b2b2757f29cd9 +Author: Panu Matilainen +Date: Thu Sep 20 15:37:48 2007 +0300 + + Move _free() into system.h for now + - get rid of dozen _free() definitions + - get _free() out of public headers + +commit e53ceb6706125bead8630ba52f232c792ca1fdae +Author: Panu Matilainen +Date: Thu Sep 20 15:27:07 2007 +0300 + + Rename fileTypes(_e) to rpmFileTypes for namespacing + +commit a6e75c7595b64736d2a449c6d0191439c13abc85 +Author: Panu Matilainen +Date: Thu Sep 20 15:22:59 2007 +0300 + + Rename freeFilesystems() to rpmFreeFilesystems() for namespacing + +commit 3b8da4ed118c6da6dab1cb7c0ecd0933c6d14f14 +Author: Panu Matilainen +Date: Thu Sep 20 15:09:52 2007 +0300 + + Rename tagName/Value/Type() to rpmTagGet*() + - namespacing + - avoid collisions with tagtype definitions + +commit bbf7574d7f368e8d11600b54dfd24a0dafd555fb +Author: Panu Matilainen +Date: Thu Sep 20 14:39:24 2007 +0300 + + Match hardcoded _query_all_fmt default with current macro default + +commit 55b7c431c44ee968b502d80c20af0f9a602b8225 +Author: Panu Matilainen +Date: Thu Sep 20 14:33:35 2007 +0300 + + Move rpmInstall/EraseInterfaceFlags to rpmcli.h + +commit f65d670f023616f472f4451c08f5e3ee298a9ddc +Author: Panu Matilainen +Date: Thu Sep 20 13:23:58 2007 +0300 + + Remove the "dressed" rpmHeaderGetEntry() from API + - only used by the python bindings, move it there... + +commit 4df06c5df7dadab2baa85d80522044da9dbe5733 +Author: Panu Matilainen +Date: Thu Sep 20 12:19:34 2007 +0300 + + Conditionalize rpmlib(PayloadIsBzip2) provide on HAVE_BZLIB_H + +commit ae40a9001426e6f8fd17a0e00d1d63550dc7fca9 +Author: Panu Matilainen +Date: Thu Sep 20 12:18:22 2007 +0300 + + Remove unnecessary include + +commit 7cd1cf99412e76e10d072eae82bd608cc1e76c24 +Author: Ralf Corsépius +Date: Thu Sep 20 10:37:48 2007 +0200 + + Conditionalize zlib conditional pieces of code on HAVE_ZLIB_H. + +commit 8fa3c5becf6f417c1a01fe878f5548d7d3bf2292 +Author: Ralf Corsépius +Date: Thu Sep 20 07:36:41 2007 +0200 + + Remove splint remnants. + +commit 7871bb4547564297c26bd44a7a14759843d881c4 +Author: Ralf Corsépius +Date: Thu Sep 20 06:53:59 2007 +0200 + + Add dependency on libbz2. + +commit 2d157c07f032b2ec97b26c919f1b182bd3123ec7 +Author: Ralf Corsépius +Date: Thu Sep 20 06:53:19 2007 +0200 + + Tighten check for libbz2. + +commit f04137f591d7dae368c9a1280613aa941a66fbcf +Author: Panu Matilainen +Date: Wed Sep 19 17:38:33 2007 +0300 + + Dead code removal + All packages have provide their own name = ver-rel, checking deps against + provides is sufficient, name doesn't need separate handling. + +commit d76bef815fce0d29024b9356ec3b615d2caae2f5 +Author: Panu Matilainen +Date: Wed Sep 19 17:32:29 2007 +0300 + + Remove long since dead rpmrc provides code + +commit 472167d7a89d32b576f434914e91ed6712708bae +Author: Panu Matilainen +Date: Wed Sep 19 16:51:32 2007 +0300 + + Remove ancient RH-comment + +commit a9d59cc2adb5acc9b70b103f9a228a1a94560c9d +Author: Panu Matilainen +Date: Wed Sep 19 16:49:41 2007 +0300 + + Remove --redhatprovides / --redhatrequires popt aliases + - highly vendor specific + - not even RH uses them anymore.. + +commit 19f8c80d56e2fc3c999e4437294faba7a3cefd38 +Author: Ralf Corsépius +Date: Wed Sep 19 15:03:39 2007 +0200 + + Adjust pktlen to pgpReadPkt's expectations. + +commit 88b0e2c09334f32f869d86c5f8698668064f518a +Author: Ralf Corsépius +Date: Wed Sep 19 15:02:40 2007 +0200 + + Cosmetics. + +commit 4f222fef8fe09aacf8e87aaa36e50eb2becd94c8 +Author: Panu Matilainen +Date: Wed Sep 19 13:59:05 2007 +0300 + + Remove db-internals from rpmts + - api for getting db ops out of rpmdb + - api for setting chrootdone of rpmdb + - replace db internal accesses with api uses + +commit fa1f65cef6f20ebe544306e8663dcb4a886168c9 +Author: Ralf Corsépius +Date: Wed Sep 19 05:32:03 2007 +0200 + + Rename --with-internal-db into --with-external-db. + Add AC_ARG_WITH(external_db). + +commit 211a30a615f4b3a85a70e30be401d0e60f61b94e +Author: Ralf Corsépius +Date: Wed Sep 19 05:15:57 2007 +0200 + + Remove NPTL games. + +commit 18e62fe8eb332b6febdca2296f7cff806b157e6e +Author: Ralf Corsépius +Date: Wed Sep 19 05:13:13 2007 +0200 + + Move EXTRA_DIST out of PYTHON block. + Move system.h into *_SOURCES. + +commit 6503abadc9a50522a220d5ce340e3d523d356131 +Author: Ralf Corsépius +Date: Tue Sep 18 19:18:09 2007 +0200 + + Add check for db_threadid_t in db.h. + +commit 618333608f427980507db0e3eeb534e89754a964 +Author: Ralf Corsépius +Date: Tue Sep 18 19:04:34 2007 +0200 + + Build db3isalive only if it is being used. + +commit 5e1b759552716f6afb7819c7fd011d697f42f650 +Author: Ralf Corsépius +Date: Tue Sep 18 14:59:22 2007 +0200 + + Rename BZIP2BIN->__BZIP2. + Rename GZIPBIN->__GZIP. + Rename UNZIPBIN->__UNZIP. + +commit eacf1841db81c1e64577f66e3619daf0c4baadf7 +Author: Ralf Corsépius +Date: Tue Sep 18 14:55:58 2007 +0200 + + Rename BZIP2BIN->__BZIP2. + Rename GZIPBIN->__GZIP. + Rename UNZIPBIN->__UNZIP. + +commit 4f250b5c36233fc3e598fa1e419f983a08d58de2 +Author: Ralf Corsépius +Date: Tue Sep 18 12:44:29 2007 +0200 + + Remove WITH_POPT (Unused). + +commit c89c1481eb6f2fd045f98e09010635698225abcc +Author: Ralf Corsépius +Date: Tue Sep 18 12:41:47 2007 +0200 + + s/libary/library/ + +commit a0558abcf2b07c0b46a9ab52bef047dd30209b69 +Author: Ralf Corsépius +Date: Tue Sep 18 10:49:20 2007 +0200 + + Fix ancient typo. + +commit b46e405e40d0dc110d670ba76aac63238fc656e0 +Author: Panu Matilainen +Date: Tue Sep 18 11:36:17 2007 +0300 + + Use rpmquery instead of rpm for --querytags check to avoid popt aliasing issues + +commit 2607d282e7cc90c2f0b1932cb3f940921ab13b5f +Author: Ralf Corsépius +Date: Tue Sep 18 08:09:43 2007 +0200 + + Invert logic to setup WITH_INTERNAL_DB. + +commit af4ba121d8457ac5282508ddec195ff3297fbeae +Author: Ralf Corsépius +Date: Tue Sep 18 07:38:50 2007 +0200 + + Fix typo in previous patch. + +commit 1cf3cb513951105c5a4259c788f54644327c66da +Author: Ralf Corsépius +Date: Tue Sep 18 06:40:16 2007 +0200 + + Append @WITH_DB_LIB@ to Libs.private. + +commit 01899614bdc055903e8c2a8cb07e2fdb94f9c9a0 +Author: Ralf Corsépius +Date: Tue Sep 18 06:39:31 2007 +0200 + + Reorganize *_DATA creation. + +commit b9bd1303f6a5b3e3f6f6c8d2e5c0cf94b9625c2e +Author: Ralf Corsépius +Date: Tue Sep 18 06:19:57 2007 +0200 + + Include fts.h. + +commit 79abda764e23685c3e9b47643d3eafd3dc561aa3 +Author: Ralf Corsépius +Date: Tue Sep 18 06:04:07 2007 +0200 + + Remove. + +commit 71f0cce9f9ffe70a849d9c0739c9632f8a90cd19 +Author: Ralf Corsépius +Date: Tue Sep 18 06:03:33 2007 +0200 + + Remove. + +commit 90688278db31b05a56ca1e7c29cc71d38ce28ff3 +Author: Ralf Corsépius +Date: Tue Sep 18 05:53:37 2007 +0200 + + Change main() to using char *argv[]. + +commit f2a250702a4d4f2735cacffef033ad8b6e3062d1 +Author: Ralf Corsépius +Date: Tue Sep 18 05:01:45 2007 +0200 + + Add preliminary --with/without-internal-db processing. + +commit de4fc157baf037c091e7ff5a35ccd3339013c870 +Author: Ralf Corsépius +Date: Tue Sep 18 04:23:21 2007 +0200 + + Conditionally build db3. + Add DIST_SUBDIRS. + +commit b5e01099e723f75f937605ccc928f1957301ba0d +Author: Ralf Corsépius +Date: Tue Sep 18 03:22:16 2007 +0200 + + Regenerate. + +commit 7bf56f58295b6ee19f3896b726f6a7e3435af446 +Author: Ralf Corsépius +Date: Mon Sep 17 17:58:29 2007 +0200 + + Eliminate WITH_DB_SUBDIR. + +commit 6394b2a2e9314af0909e49323fe0012b549be29d +Author: Ralf Corsépius +Date: Mon Sep 17 17:53:47 2007 +0200 + + Add db.h to nodist_librpmdb_la_SOURCES. + Eliminate WITH_DB_SUBDIR. + +commit 5bb02c33a92956f695d8f4e5bd8271e825d2a531 +Author: Panu Matilainen +Date: Mon Sep 17 17:54:51 2007 +0300 + + Include rpmts.h, not depends.c (!) + +commit 006f6c710bf084ad1080cbaac94c217d307d1a20 +Author: Ralf Corsépius +Date: Mon Sep 17 16:52:34 2007 +0200 + + Don't install db.h. + Move db.h to librpmdb_la_SOURCES. + +commit a002ceebac6cd2642de6daf9d986efc179cb7f5a +Author: Panu Matilainen +Date: Mon Sep 17 17:20:11 2007 +0300 + + Make fts.h a private header + +commit ed55d4e033f62157275daafb1ec1a7b6a39d5dfe +Author: Ralf Corsépius +Date: Mon Sep 17 15:02:07 2007 +0200 + + Remove db_emu.h. + > Remove stray EXTRA_DIST. + +commit 8e4f309c310aef69f128349a2d01749dc83c1f4d +Author: Ralf Corsépius +Date: Mon Sep 17 15:01:27 2007 +0200 + + Remove (Unused). + +commit 37e6caf2dc1023abcdfc781c2c72c4683e1512f3 +Author: Ralf Corsépius +Date: Mon Sep 17 14:27:43 2007 +0200 + + Add support for extern BDB. + +commit 47257ec9e84106fb7132945aef614f6b4f54e1a6 +Author: Panu Matilainen +Date: Mon Sep 17 15:15:03 2007 +0300 + + misc.h is a private header + - include it from build/*.c where needed + - dont install + +commit 8a055b3cb36f7aa682fe7c80f7b32c530dcf03ef +Author: Ralf Corsépius +Date: Mon Sep 17 14:14:05 2007 +0200 + + Reorganize. + +commit adbab387377cdfba261229650cb6189fa5a257c6 +Author: Panu Matilainen +Date: Mon Sep 17 14:50:25 2007 +0300 + + ugid.h is private header really + +commit d7838b77735fefb17a626f5b7f46c000122992a3 +Author: Panu Matilainen +Date: Mon Sep 17 14:43:32 2007 +0300 + + More typos, doh... + +commit 08a47f7472df4492f72b6a5a9d7b85b5e2beb868 +Author: Panu Matilainen +Date: Mon Sep 17 14:42:18 2007 +0300 + + Typo.. + +commit f35edd40321c2072ae5e4bcf81e6c63f1338e151 +Author: Panu Matilainen +Date: Mon Sep 17 14:41:22 2007 +0300 + + Use rpmtsGetRdb() instead of poking ts internals + +commit f4296e723b14c6ed1831efddbf93204160dd80e7 +Author: Panu Matilainen +Date: Mon Sep 17 13:45:39 2007 +0300 + + rpmhash is an internal header really + +commit 174c83b4881ee5cea8862a549df5588b87abdea9 +Author: Panu Matilainen +Date: Mon Sep 17 13:31:11 2007 +0300 + + Mergesort is internal details.. + +commit b390d800193f87c246475cfe5c427a142ac10532 +Author: Panu Matilainen +Date: Mon Sep 17 13:26:22 2007 +0300 + + Make sqlite backend build again. + +commit 66dcee4a67caea7c1d144ffab1717efe90613c73 +Author: Panu Matilainen +Date: Mon Sep 17 13:17:07 2007 +0300 + + Hide db index handling and rpmdb details from the API to internal header + +commit ae3127c0f2cc74f5b662ec8414c231662f0df592 +Author: Ralf Corsépius +Date: Mon Sep 17 11:33:18 2007 +0200 + + Add with_internal_db. + +commit 2975d9b63b650103f8994a5bd2e5ae00b6980314 +Author: Ralf Corsépius +Date: Mon Sep 17 11:29:52 2007 +0200 + + Apply poptReadDefaultConfig iff RPM_USES_POPTREADDEFAULTCONFIG is set. + +commit 7484efff8e9a338e6b662c4867a5093969c75892 +Author: Ralf Corsépius +Date: Mon Sep 17 11:28:27 2007 +0200 + + Apply poptReadDefaultConfig iff RPM_USES_POPTREADDEFAULTCONFIG is set. + +commit 53d8adadd34f94ff94121531ab8d720aac7aaa17 +Author: Panu Matilainen +Date: Mon Sep 17 11:59:45 2007 +0300 + + Oops, unbreak file opens.. + +commit b2517d99673d574ea75264b910571e9f7e6ce7c1 +Author: Panu Matilainen +Date: Mon Sep 17 10:45:42 2007 +0300 + + Remove unneeded socket/inet includes + +commit cc68353128ea704bae581811583fe98969e1a0f8 +Author: Panu Matilainen +Date: Mon Sep 17 10:31:18 2007 +0300 + + Remove url caching, don't need it... + +commit c07bda47cff8e854ca220d1d49d9ae28f83006a0 +Author: Panu Matilainen +Date: Mon Sep 17 09:48:08 2007 +0300 + + Remove url/transport items from rpmio file handle structs and uses + +commit 94e953382dc4b470dbdfe8a3e847924a10d6b5ac +Author: Panu Matilainen +Date: Mon Sep 17 09:32:25 2007 +0300 + + Remove transport-related items from urlinfo and uses + +commit be53bc654c0bec15da8f253ad3664285753807a4 +Author: Ralf Corsépius +Date: Mon Sep 17 05:52:29 2007 +0200 + + Remove (Dead, unused). + +commit 68c30501ea89bdd7d015db85b9532c59e3818e8f +Author: Ralf Corsépius +Date: Mon Sep 17 05:51:34 2007 +0200 + + Remove (Dead, unused). + +commit 826e49f5d9a5095a53fc5216048983483b4be1e7 +Author: Ralf Corsépius +Date: Mon Sep 17 04:32:23 2007 +0200 + + Rename options into optionsTable for source-code consistency. + +commit c72ad4dca58421486e1462b3b079dd55293dab6a +Author: Ralf Corsépius +Date: Mon Sep 17 04:31:28 2007 +0200 + + Reformat call to poptGetContext for better source-code readability. + +commit 0cde26ecde1e384d3c8c8c3ae3c7f764b52747e0 +Author: Ralf Corsépius +Date: Mon Sep 17 04:11:59 2007 +0200 + + Add if defined(ENABLE_NLS) guards around i18n-initialization. + +commit 05088ee6db16aba98ca305eb034bb90be7348fca +Author: Ralf Corsépius +Date: Mon Sep 17 04:11:39 2007 +0200 + + Add if defined(ENABLE_NLS) guards around i18n-initialization. + +commit fcbe2c86ef008ca58dbc0149f880b1e4a2eb7213 +Author: Ralf Corsépius +Date: Sat Sep 15 08:07:15 2007 +0200 + + Remove unused var "selected" + +commit af121321501f917e1f2ae8c57fd95a9628859be8 +Author: Ralf Corsépius +Date: Fri Sep 14 13:14:43 2007 +0200 + + Kick unused defines. + +commit ff599b55162d39c78cabac070f0f4cb6aaaad3c5 +Author: Ralf Corsépius +Date: Fri Sep 14 13:14:09 2007 +0200 + + Fix typo in doxy-comment. + +commit 91a33fbdc56bca5330fc232a9bbda485f244746e +Author: Ralf Corsépius +Date: Fri Sep 14 05:21:39 2007 +0200 + + Move generating rpmpopt-@VERSION@ from configure into Makefile. + +commit ede9e902729b0ef56e853c63efa0c63c8c2f3458 +Author: Ralf Corsépius +Date: Fri Sep 14 05:09:17 2007 +0200 + + Move generating rpm.pc from configure into Makefile. + +commit 48fbe1b4c148bac646841de164a0d1c51f44dd0a +Author: Ralf Corsépius +Date: Fri Sep 14 04:55:19 2007 +0200 + + Remove @WITH_NEON_LIB@. + +commit df1b72d3af290d3d15d0501f2a116f685aee3c0c +Author: Ralf Corsépius +Date: Thu Sep 13 14:51:46 2007 +0200 + + Process platform in Makefile instead of configure. + +commit a019b8bf9670eb1d5b374defa646a32b47a0e097 +Author: Ralf Corsépius +Date: Thu Sep 13 14:49:35 2007 +0200 + + Move handing scripts/gendiff from scripts/Makefile.am to Makefile.am + +commit 0138937d1d06dba083ed47382d8ca1223a9d825b +Author: Panu Matilainen +Date: Thu Sep 13 15:09:47 2007 +0300 + + Remove support for BDB < 4.1 + +commit 305632b9574a6a4a56906cca4b588cc6d82cd5cb +Author: Panu Matilainen +Date: Thu Sep 13 14:50:45 2007 +0300 + + Remove dead code + +commit 6e14a001938d7245b1f288d183f51cefe18fdf9f +Author: Panu Matilainen +Date: Thu Sep 13 14:48:50 2007 +0300 + + Stale lock removal on BDB >= 4.5.x + +commit 26aa538d2600085680012538025ca6387964fde0 +Author: Panu Matilainen +Date: Thu Sep 13 12:47:43 2007 +0300 + + Remove db3 "annotate me" comments + +commit 36ec63896eba02fbed5e6882b7f3f592456b800b +Author: Ralf Corsépius +Date: Wed Sep 12 14:54:48 2007 +0200 + + For the moment, allow the testsuite to fail. + +commit c98e35c9767d32685484def02ae21c9d5fbdf0c9 +Author: Ralf Corsépius +Date: Wed Sep 12 14:54:04 2007 +0200 + + Rebuild with updated spec. + +commit 8a81b4a9af27747cf8687dd5d336f0446fc33f53 +Author: Ralf Corsépius +Date: Wed Sep 12 14:52:40 2007 +0200 + + Adjust BuildRoot. + +commit d974ed0136e52ef4c4f7e1ed7fc312f8a2a2345d +Author: Ralf Corsépius +Date: Wed Sep 12 12:42:59 2007 +0200 + + Add __CURL. + +commit 0eb731f01b5e9dd9e5be42bac9d9c32ab255f1e2 +Author: Ralf Corsépius +Date: Wed Sep 12 12:12:59 2007 +0200 + + Update. + +commit e1c33ad52fe25dc6b4a560ad84da1fd4accb9965 +Author: Ralf Corsépius +Date: Wed Sep 12 12:06:38 2007 +0200 + + Remove rpmio/rpmdav.c + +commit 07c9cac938a6b5e8c41bf8afa92180c9ffd5b90c +Author: Ralf Corsépius +Date: Wed Sep 12 11:31:17 2007 +0200 + + Fix indentation of --enable-python. + +commit f2541835c5343582ca7b5e163c367e529a5ae944 +Author: Ralf Corsépius +Date: Wed Sep 12 11:30:39 2007 +0200 + + Adjust several *_LDADDs + +commit 9f325855d74db499159773427a0965c93c822b72 +Author: Panu Matilainen +Date: Wed Sep 12 12:23:55 2007 +0300 + + Rip out internal http and ftp transports. + +commit fb7433b3648a82a4ef8229f6254dac3d5b95cce0 +Author: Ralf Corsépius +Date: Wed Sep 12 10:56:37 2007 +0200 + + Merge tools/Makefile.am into Makefile.am + +commit 65012c42534f9dca99655f56c26c5ba34e0f32a6 +Author: Panu Matilainen +Date: Wed Sep 12 11:51:52 2007 +0300 + + Use configurable helper application to deal with urls. + - hijack ufdOpen() operation to call an external helper (if configured) + to fetch any remote url's, return fd to local temporary file + +commit d36716c25cde44c3aa9d96e75424b1ae46e6608d +Author: Panu Matilainen +Date: Wed Sep 12 10:55:55 2007 +0300 + + Remove NEON and related hacks + +commit d2d4dae1add3e5e48810baf2524f8bd01cb6e02c +Author: Ralf Corsépius +Date: Wed Sep 12 09:34:31 2007 +0200 + + Formating cleanup. + +commit 56fc5ee3406b110bdf9e041b8df37afc7716562d +Author: Panu Matilainen +Date: Wed Sep 12 10:11:06 2007 +0300 + + Remove now unused DAV RPC code. + +commit 142cbc590662d3a90ab3ffc2a20cbc8f1e16dcf3 +Author: Ralf Corsépius +Date: Wed Sep 12 09:10:06 2007 +0200 + + Cleanup. Regenerate. + +commit d70d21b878fc31a59c80ba2a3be4ed3fadda2ad9 +Author: Ralf Corsépius +Date: Wed Sep 12 09:05:35 2007 +0200 + + Remove splint annotation from getdate.c. + +commit d7c9ba442581f3ee703928b018180c4b078b77a9 +Author: Panu Matilainen +Date: Wed Sep 12 09:45:11 2007 +0300 + + Remove now unused FTP RPC code. + +commit cf9d90aedbdb1325aaa030f9fa62180f5d5f64a9 +Author: Panu Matilainen +Date: Wed Sep 12 09:38:04 2007 +0300 + + Only deal with local files in "rpc" + +commit cfe8875a0f9f15b8402eeaf71c54152d2766a075 +Author: Ralf Corsépius +Date: Wed Sep 12 08:23:51 2007 +0200 + + Reduce minimum python version to 2.3. + +commit 2ff6e07f502f44f46e506616145d9d975e3d2075 +Author: Ralf Corsépius +Date: Wed Sep 12 01:21:13 2007 +0200 + + Reduce minimum python version to 2.4. + +commit 37b193419c54124db9fb07d5b6efa5aa7938e914 +Author: Ralf Corsépius +Date: Wed Sep 12 01:18:29 2007 +0200 + + locally define Py_ssize_t and lenfunc for python < 2.5 + +commit 65cbae7709bad0021182e2ba2b35c6c356e15ab5 +Author: Ralf Corsépius +Date: Tue Sep 11 23:26:22 2007 +0200 + + Remove splint tags. + +commit 9f914c252453628999e72018354e95310f10f4a9 +Author: Ralf Corsépius +Date: Tue Sep 11 23:22:45 2007 +0200 + + Remove (Unused). + +commit a1eb1f41d91572fc0ad4f8805d946c8bdbdb8d2a +Author: Ralf Corsépius +Date: Tue Sep 11 23:20:16 2007 +0200 + + Remove splint tags. + +commit 32419bbba54b1e3847d5890d990edf7012a7dada +Author: Ralf Corsépius +Date: Tue Sep 11 23:03:27 2007 +0200 + + Remove splint tags. + +commit e9f3a5c89df5b5509ac520d03d516b9f33b270fd +Author: Ralf Corsépius +Date: Tue Sep 11 19:23:32 2007 +0200 + + Remove splint tags. + +commit ebef4f211c1f3b4392530eb1a5889aa13345893e +Author: Ralf Corsépius +Date: Tue Sep 11 19:07:39 2007 +0200 + + Remove splint tags. + +commit a5a65af57e0c21837c6c71b0979473c51c3a2202 +Author: Ralf Corsépius +Date: Tue Sep 11 19:04:11 2007 +0200 + + Remove splint tags. + +commit 1b00a42ee2b37a4a6fdbf038f2e40129d1ef0546 +Author: Ralf Corsépius +Date: Tue Sep 11 18:39:35 2007 +0200 + + Remove splint tags in tagtbl.c generation magic. + +commit 60ac36429557d14e0962e926efdc06b29dd9818a +Author: Ralf Corsépius +Date: Tue Sep 11 18:37:03 2007 +0200 + + Remove splint tags. + +commit bbf4703c5e7e3e98e92a2eb0960fc39a66c3b382 +Author: Ralf Corsépius +Date: Tue Sep 11 16:56:09 2007 +0200 + + Remove splint tag magic. + +commit f982bbaa79b0038bc1b4f9f9d419361a63c2b284 +Author: Ralf Corsépius +Date: Tue Sep 11 16:48:54 2007 +0200 + + Remove splint tags. + +commit 1a01bdd6c6785e3e3d99894bf4219a60b1fc8c9a +Author: Ralf Corsépius +Date: Tue Sep 11 16:17:16 2007 +0200 + + Remove splint tags. + +commit 3aad15624eeefcca56051a2d595f9924a15f80b2 +Author: Ralf Corsépius +Date: Tue Sep 11 15:28:26 2007 +0200 + + Remove split tags. + +commit e08619c323915f7e22b8d3bb9c57606ce824d778 +Author: Ralf Corsépius +Date: Tue Sep 11 11:32:24 2007 +0200 + + Remove rpmtool, rpmxml etc. + +commit 22bafd7430674df63019663ef62762565efd7811 +Author: Ralf Corsépius +Date: Tue Sep 11 11:32:05 2007 +0200 + + Remove libxml. + +commit f1b020f8c43904040eab5a5a6d148b09e2b760d3 +Author: Ralf Corsépius +Date: Tue Sep 11 11:29:10 2007 +0200 + + Remove (Abandoned). + +commit f69f0b7a8f9c3d47ce3787d2d28c9994107e7795 +Author: Ralf Corsépius +Date: Tue Sep 11 10:38:46 2007 +0200 + + Add subdir-objects. + +commit 8b96f09bb85ebef939fa0e67a438a3ca87ce3af3 +Author: Ralf Corsépius +Date: Tue Sep 11 09:49:54 2007 +0200 + + Move debugedit from tools/Makefile.am to Makefile.am. + +commit 2ef2ca1f29b5e6a27b545142d8881f822efe02d9 +Author: Ralf Corsépius +Date: Tue Sep 11 09:46:48 2007 +0200 + + Move rpmgraph from tools/Makefile.am to Makefile.am. + +commit 9eedec6036f6bd8219bc90aa71305a0127649c4c +Author: Panu Matilainen +Date: Tue Sep 11 09:13:19 2007 +0300 + + rpmtsAddInstallElement() consistency (rhbz#180996, rhbz#281611) + Don't error out if the same (or older) package is attempted to add to the + transaction, only warn (because we can handle it) + +commit e1e43cefedad0f1aea0bc1476a891d72c4b2295c +Author: Panu Matilainen +Date: Tue Sep 11 09:01:19 2007 +0300 + + Fake callbacks on erasure for packages without files (rhbz#259961) + +commit 39e601dac901f82c6ba5c2474bec7bbd3b69b3e4 +Author: Ralf Corsépius +Date: Tue Sep 11 02:46:51 2007 +0200 + + Use _LDADD instead of _LDFLAGS. + Remove commented out _LDFLAGS. + +commit b2578d6c8120114e0f2732317e06e9da5f3611fc +Author: Ralf Corsépius +Date: Tue Sep 11 02:33:56 2007 +0200 + + Use _LDADD instead of _LDFLAGS. + Remove commented out _LDFLAGS. + +commit eb33fb5100c6370c3ec4a5f86277c2422b84968c +Author: Ralf Corsépius +Date: Tue Sep 11 01:00:04 2007 +0200 + + Use _LDADD instead of _LDFLAGS. + Remove unused *_LDFLAGS. + +commit 798d7c681dce5b53aacea5380b8608e9720c0bc6 +Author: Ralf Corsépius +Date: Tue Sep 11 00:55:05 2007 +0200 + + Move scripts/find-debuginfo.sh to Makefile.am. + +commit cf865f132791b97cd564828b23da8355bd4e6d66 +Author: Ralf Corsépius +Date: Mon Sep 10 22:24:25 2007 +0200 + + Require python >= 2.5. + +commit f7771b68e2bb206f7e3224b452cc5e3fd5f11978 +Author: Ralf Corsépius +Date: Mon Sep 10 16:05:48 2007 +0200 + + Move db.h to nodist_pkginc_HEADERS. + +commit d80d4dedf14c56c6a3c482ddedada2878b99922f +Author: Ralf Corsépius +Date: Mon Sep 10 12:51:09 2007 +0200 + + Eliminate pyincdir, pylibdir, pyrpmdir. + Install into pkgpyexecdir. + +commit c5ffd9805e598d2e069adf196d4e9bb0ae5484a9 +Author: Ralf Corsépius +Date: Mon Sep 10 12:49:51 2007 +0200 + + Split host-python (__PYTHON), from build-python. + Abandon --with-python. + Add --enable-python. + Rework python check to use AM_PATH_PYTHON. + +commit 68ad53a8ff357ec5e62aa77be25b3d44d66a9bba +Author: Ralf Corsépius +Date: Mon Sep 10 10:55:17 2007 +0200 + + Include misc.h. + +commit a5ce6c43c8922a53086313bf24834d06c73c117e +Author: Ralf Corsépius +Date: Mon Sep 10 10:45:44 2007 +0200 + + Eliminate noinst_HEADERS. Cleanup + +commit ea253c1e514c959fda1d04ed2229026bd1bc0634 +Author: Ralf Corsépius +Date: Mon Sep 10 10:31:37 2007 +0200 + + Eliminate noinst_HEADERS. + +commit b3f95ce02abdd489669006b4fbea87ed5d4eff03 +Author: Ralf Corsépius +Date: Mon Sep 10 10:29:55 2007 +0200 + + Eliminate noinst_HEADERS. + +commit 944a88df8103e259d586e8e269f687aa5c82351d +Author: Ralf Corsépius +Date: Mon Sep 10 10:28:38 2007 +0200 + + Eliminate noinst_HEADERS. + +commit 4d0051012437330f3a9807516cf2e71fe912b701 +Author: Ralf Corsépius +Date: Mon Sep 10 07:11:54 2007 +0200 + + Add AC_DISABLE_STATIC. + +commit c5b898889650df5fc82446396829d6a10350d95b +Author: Ralf Corsépius +Date: Mon Sep 10 05:43:57 2007 +0200 + + Add missing backslash. + +commit 6ea6e02bdfebe63be388b195a6e1fb1259ad0aae +Author: Panu Matilainen +Date: Fri Sep 7 12:09:11 2007 +0300 + + Fix installplatform now that rpmrc no longer contains macrofiles + +commit dc068759d67a5bfffc38ec81523916b06e03ef8b +Author: Ralf Corsépius +Date: Fri Sep 7 09:17:34 2007 +0200 + + Uninstall the symlinks. + +commit 3d64e6c805325217c751e46c4d562bc054549936 +Author: Panu Matilainen +Date: Fri Sep 7 10:07:17 2007 +0300 + + Erm, doh... + + Backed out changeset be79b0491693 + +commit 47122e9634fb09ff19efe319f6a3fbf64c8be630 +Author: Panu Matilainen +Date: Fri Sep 7 10:01:55 2007 +0300 + + Handle no spec in tarball cleanly (rhbz#281391) + +commit d26d1cf01b328ee6ec9c66554ef5b0bd65edabfa +Author: Ralf Corsépius +Date: Fri Sep 7 02:20:37 2007 +0200 + + Let $(pkgsrcdir)/{RPMS,SRPMS,SPECS,SOURCES,BUILD} be installed by automake rules. + +commit 864638ed84e8f9e2932d73edb55744ffdf580be5 +Author: Ralf Corsépius +Date: Thu Sep 6 19:18:09 2007 +0200 + + Make ChangeLog a non-PHONY target. + Don't remove ChangeLog in distclean. + Remove ChangeLog in maintainer-clean. + +commit 0f8bcbdf60594614c2709bd37a2016ce829a7e1a +Author: Ralf Corsépius +Date: Thu Sep 6 19:12:15 2007 +0200 + + Regenerate. Cleanup. + +commit b1c645c2c125e7f3c19da1203000aaeb8b33c304 +Author: Ralf Corsépius +Date: Thu Sep 6 19:06:26 2007 +0200 + + Remove lib/rpmsx.c. + +commit a892b302382b936f49dd780410906a87537ac735 +Author: Ralf Corsépius +Date: Thu Sep 6 18:50:00 2007 +0200 + + Add missing backslash. + +commit a22290f7460436b6f4dc3ff8d6408923a060a601 +Author: Ralf Corsépius +Date: Thu Sep 6 09:39:01 2007 +0200 + + Split install-exec-hook out of install-data-local:-block. + +commit 1fc165f79f36cffe28afbb47c435ee7a4526ef7f +Author: Ralf Corsépius +Date: Thu Sep 6 09:27:06 2007 +0200 + + Fix typo in yesterday's patch. + +commit 1bf45c5285c403d05f12c82d2aedc69ed3897f76 +Author: Ralf Corsépius +Date: Thu Sep 6 09:03:54 2007 +0200 + + Remove superfluous ";" breaking directory creation. + +commit 2e9586ad93e717001e01ca9ad9477bf026bf3870 +Author: Panu Matilainen +Date: Thu Sep 6 08:19:03 2007 +0300 + + Add OSGi dependency extractor script from Kyu Lee + +commit 3448bd7328ad310f781f72c031dc1a92d0d8f31e +Author: Panu Matilainen +Date: Wed Sep 5 17:21:11 2007 +0300 + + Typo fix in file classification + +commit 3ba25ca3991d480d845b0f36911e0ba4c6361edb +Author: Panu Matilainen +Date: Wed Sep 5 16:11:04 2007 +0300 + + Add Sparc Niagara support (rhbz#263521) + Patch from Dennis Gilmore. + +commit dc6d8119880e10631a5dba29019d036a146bfdcb +Author: Panu Matilainen +Date: Wed Sep 5 15:21:43 2007 +0300 + + Fix a bunch of whitespace-in-files issues in find-debuginfo + +commit 06dad24cbada19fe5d6897d44ca3825ac894469a +Author: Panu Matilainen +Date: Wed Sep 5 15:00:59 2007 +0300 + + New find-debuginfo script from Roland McGrath + - new options for using -g on DSO's + - support for multiple output files (multiple debuginfo subpackages) + - build ID support + - symlink and hardlink support + - new macro to optionally terminate build on missing build id's + +commit 466df80338fdae61367369b45bea2b0d508261d3 +Author: Panu Matilainen +Date: Wed Sep 5 13:43:57 2007 +0300 + + Handle mire matching against binary blobs (rhbz#277161) + - convert blob to hex string, miregexec() against that + - use tagType() to determine if header data needs freeing + +commit c30b41cfe9475860db231c2a03fe2becaf90c4b2 +Author: Panu Matilainen +Date: Wed Sep 5 13:43:09 2007 +0300 + + Make formatValue() use the bin2hex helper. + +commit 1a2426fec6419856211d745ba167cea53befacfd +Author: Panu Matilainen +Date: Wed Sep 5 13:42:25 2007 +0300 + + Internal helper function for converting binary blobs to hex strings. + +commit 58481133903041e14755434ad60260ed69bd0ad5 +Author: Panu Matilainen +Date: Wed Sep 5 13:41:13 2007 +0300 + + Fix false mire matches on nonexistent headers. + +commit 9987a145637d797da1e2f50ba0472212630e4fa3 +Author: Panu Matilainen +Date: Wed Sep 5 13:40:49 2007 +0300 + + Nuke RHL 5.2 specific hack. + +commit 86f55ae4099744cbebb920586901af1351b9446b +Author: Ralf Corsépius +Date: Wed Sep 5 12:11:09 2007 +0200 + + Fix indentation. + +commit 38ec147d0ba7a8b80826214edb80b65ab7843944 +Author: Ralf Corsépius +Date: Wed Sep 5 12:09:45 2007 +0200 + + Generate scripts/macros.perl, scripts/macros.php, scripts/macros.python from inside of scripts/Makefile.am. + +commit f544c1b12bb5428300cd72b152f2ad5108a687bd +Author: Ralf Corsépius +Date: Wed Sep 5 11:47:40 2007 +0200 + + Cleanup. + +commit 9b2f6a58a6e23412ff6dfd1114bb36f2770abd74 +Author: Ralf Corsépius +Date: Wed Sep 5 11:45:21 2007 +0200 + + Remove CVS-Id. + +commit 946cd131a8db7072a65558b802dfa7bb51911ad9 +Author: Ralf Corsépius +Date: Wed Sep 5 11:43:38 2007 +0200 + + Include rpm.am. + Reflect having introduced rpmconfigdir/rpmlibexecdir. + +commit df00864451b32f8d13217b55b529d4ef2ca37dca +Author: Ralf Corsépius +Date: Wed Sep 5 10:45:46 2007 +0200 + + Install into rpmlibexecdir and rpmconfigdir. + +commit 1d06ce6a844f38e03d040320263b4fd379a9ddef +Author: Ralf Corsépius +Date: Wed Sep 5 10:41:55 2007 +0200 + + Include rpm.am. + +commit c544a9579a48d242ca937dff670e10fa467817e3 +Author: Ralf Corsépius +Date: Wed Sep 5 10:39:57 2007 +0200 + + New. + +commit db5db696658cddce8c6d6025c91cc96198eb3083 +Author: Ralf Corsépius +Date: Wed Sep 5 09:57:12 2007 +0200 + + Don't AC_DEFINE(RPMCONFIGDIR). + +commit 15996b48e45fc91db8df21a6a80ecd0082b32092 +Author: Ralf Corsépius +Date: Wed Sep 5 09:45:31 2007 +0200 + + Add convertdb1 to check_PROGRAMS. + +commit 1ea9ec21b53e84330cd31f32e37aafd3c48e718a +Author: Ralf Corsépius +Date: Wed Sep 5 09:41:15 2007 +0200 + + Remove compressFilelist, use version in librpmdb instead. + Remove unused dncmp. + +commit a6bfea129d499d857c033e6f013eeade4c3fede1 +Author: Ralf Corsépius +Date: Wed Sep 5 09:30:32 2007 +0200 + + Add RPMCONFIGDIR to lua_lua_CPPFLAGS. + +commit 1a8008bcd936ceb9934f50a66b33e2ab72b0e45f +Author: Ralf Corsépius +Date: Wed Sep 5 07:52:26 2007 +0200 + + Add datarootdir. + +commit ca572a634c19e2436b943d0d3b83c9b836096f8d +Author: Ralf Corsépius +Date: Wed Sep 5 07:32:23 2007 +0200 + + Install find-debuginfo.sh iff debugedit is being built. + +commit f1d3c6e24b8d5e83796f78475bd50a71d4533088 +Author: Ralf Corsépius +Date: Wed Sep 5 07:19:03 2007 +0200 + + Cleanup call to installplatform. + +commit 277cf2f42044be3c3b81bd6d60cc18963e63b1a0 +Author: Ralf Corsépius +Date: Wed Sep 5 07:08:11 2007 +0200 + + Remove little useful comments. + +commit ef22a17b783f82cfba4cf1ef1a767675a1070026 +Author: Ralf Corsépius +Date: Tue Sep 4 16:33:47 2007 +0200 + + Minor warning fixes. + +commit 513b1bb590b310ed427e9cfca7f8e179a9c4a756 +Author: Ralf Corsépius +Date: Tue Sep 4 15:19:48 2007 +0200 + + Eliminate VENDORRPMRC_FILENAME. + +commit 2671d4cc05a699432b0c5bfd9ffd1eae557f8f68 +Author: Ralf Corsépius +Date: Tue Sep 4 15:19:29 2007 +0200 + + AC_DEFINE(RPMCANONVENDOR). + Remove VENDORRPMRC_FILENAME. + +commit a079d14651bfb4e3adbe73f641af94c612cb6e18 +Author: Ralf Corsépius +Date: Tue Sep 4 14:30:01 2007 +0200 + + #include instead of "popt.h". + +commit 05f96178f1d824db383495c8a334440a2322919f +Author: Ralf Corsépius +Date: Tue Sep 4 14:19:18 2007 +0200 + + Remove selinux autodetection. + Rely on --with/--without-selinux. + +commit 2dfdf33eef0efb35dfa773063d9863eb5e6cddf9 +Author: Panu Matilainen +Date: Tue Sep 4 13:58:11 2007 +0300 + + Fix build and a few compiler warnings with --with-neon + +commit 7d9e2c4f30b0247b1f18f6be8196612600f3bc49 +Author: Ralf Corsépius +Date: Tue Sep 4 12:03:18 2007 +0200 + + Add httpTimeoutSecs for WITH_NEON. + +commit a55cbae783e4413f10df04495668272126a1e6cc +Author: Ralf Corsépius +Date: Tue Sep 4 12:02:35 2007 +0200 + + Add db.h to BUILT_SOURCES. + +commit 00165b6ee8ce6064e55e15f0b08d7b465f3c5537 +Author: Ralf Corsépius +Date: Tue Sep 4 12:01:54 2007 +0200 + + Make --with-neon more strict. + +commit f07d1abc27666cc7299044745a151342d521e026 +Author: Panu Matilainen +Date: Tue Sep 4 11:25:26 2007 +0300 + + Backed out changeset 842b0b8f3f8d + +commit b095e74fe48cfa06153f1cd3749b641856633a60 +Author: Panu Matilainen +Date: Tue Sep 4 10:23:54 2007 +0300 + + Fix error reporting on rpm --checksig (rhbz#155079) + +commit c2f919af38143607cafd25aed248227bb23bc144 +Author: Ralf Corsépius +Date: Tue Sep 4 09:09:39 2007 +0200 + + Add --with-neon. + +commit 33009e0b701cacf2a319f168a90d19a0a78f917d +Author: Panu Matilainen +Date: Tue Sep 4 08:45:41 2007 +0300 + + Updated Polish translation from Piotr Drag (rhbz#243569) + +commit 283d4372ec4d3d651134a1dd6ec59d689ea27cd8 +Author: Panu Matilainen +Date: Tue Sep 4 08:19:03 2007 +0300 + + Debugedit fixes. + + This makes debugedit's -l file get files that already match the -d rewrite + directory, not just those that match the -b build directory and get rewritten. + + Patch from Roland McGrath + +commit ffea910c37f668de2e073bb57e656fe81a313586 +Author: Panu Matilainen +Date: Mon Sep 3 22:39:26 2007 +0300 + + Read vendor macros again. + - replace VENDORRPMRC_FILENAME with VENDORCONFIGDIR + - use it to locate both vendor rpmrc and macros + +commit 1535dc8bb7b6228539942d7ea3f4b5179f4f6ed0 +Author: Panu Matilainen +Date: Mon Sep 3 21:55:26 2007 +0300 + + Remove a couple remaing LCLINT ifdefs + +commit cea607a62c578de65f8a0c232228748c592c0c00 +Author: Panu Matilainen +Date: Mon Sep 3 21:34:33 2007 +0300 + + Update --querytag test to expect success.. + +commit 1a1b50378ce0dc3774cab34225c05810a7149afc +Author: Panu Matilainen +Date: Mon Sep 3 21:30:44 2007 +0300 + + Fix trailing whitespace in --querytags non-verbose mode + +commit cec13226210a83fecdefbd21d0e81c640c23990c +Author: Ralf Corsépius +Date: Mon Sep 3 15:12:38 2007 +0200 + + Remove FILE_RCSID. + +commit 5287c034d837a5fada416ec0773c8d77585cefc7 +Author: Panu Matilainen +Date: Mon Sep 3 15:35:17 2007 +0300 + + Remove LCLINT hackery from system.h + +commit 3acfe8f031654164c238cc70c5d9977932bf99a2 +Author: Panu Matilainen +Date: Mon Sep 3 15:23:08 2007 +0300 + + Remove setfiles, it's not used nor useful within rpm + +commit 0df97d170a34f9bb3b2904e23def83557dd75dc9 +Author: Panu Matilainen +Date: Mon Sep 3 15:20:31 2007 +0300 + + RIP rpmsx and all its uses + +commit c0bd72b026c871e672ff111d5b9827edc28aa106 +Author: Panu Matilainen +Date: Mon Sep 3 15:15:50 2007 +0300 + + Rip out unnecessary selinux babbage. + - rpm doesn't manage selinux contexts so it doesn't need to know about them + other than when creating files + - implement --fscontext as popt alias since it's easy to do so... + +commit 97cea31a8aa73995358d671ded2ace7878748382 +Author: Panu Matilainen +Date: Mon Sep 3 14:42:42 2007 +0300 + + Use direct selinux calls for context initialization and matching. + +commit 5b786f94bcd9c89aae3b19e11782f5f4d811c359 +Author: Ralf Corsépius +Date: Mon Sep 3 13:31:28 2007 +0200 + + Remove __LCLINT__-ifdef'ed blocks. + +commit f16b18234948782039b17f82f9dda9a52c267eec +Author: Ralf Corsépius +Date: Mon Sep 3 13:30:35 2007 +0200 + + Remove __LCLINT__-ifdef'ed blocks. + +commit 1f8c7ab9d8a433b34a507186be0e5e10432db831 +Author: Ralf Corsépius +Date: Mon Sep 3 13:29:48 2007 +0200 + + Remove __LCLINT__-ifdef'ed blocks. + +commit bc5bbd543fe1e3e0cb3f8171541d1da392de3834 +Author: Ralf Corsépius +Date: Mon Sep 3 13:29:05 2007 +0200 + + Remove __LCLINT__-ifdef'ed blocks. + +commit 9110874f1c558436c809d3c725244f56a5fa211f +Author: Ralf Corsépius +Date: Mon Sep 3 13:28:10 2007 +0200 + + Remove __LCLINT__-ifdef'ed blocks. + +commit 0c0f71955c0ed1ab51e84a476a17686ce275a8fb +Author: Ralf Corsépius +Date: Mon Sep 3 13:26:54 2007 +0200 + + Remove __LCLINT__-ifdef'ed blocks. + +commit 4157ef70fbb828aca1b2cc92010213f02069d74d +Author: Ralf Corsépius +Date: Mon Sep 3 13:25:23 2007 +0200 + + Remove __LCLINT__-ifdef'ed blocks. + +commit 2cadb6a1c5ec48a9a9ca3c57b9c04a729ba2c4c7 +Author: Panu Matilainen +Date: Mon Sep 3 13:59:42 2007 +0300 + + Add dummy macros for our needs when building without SELinux. + +commit ba645b29c4cd86fa72308793aee02b101f9ad561 +Author: Ralf Corsépius +Date: Mon Sep 3 12:59:15 2007 +0200 + + Remove CTAGS, CSCOPE. + +commit 90ad59fb99672b0e645c3318feb7c024d886fd85 +Author: Panu Matilainen +Date: Mon Sep 3 13:28:20 2007 +0300 + + Kill remaining uses of selinux filecontexts in headers.. + +commit 7a50a54390a976104deaf29d32b426db719bc5b7 +Author: Panu Matilainen +Date: Mon Sep 3 12:23:42 2007 +0300 + + Sanitize SELinux file context initialization. + - do it in a single spot inside tsRun() + - automatically set RPMTRANS_FLAG_NOCONTEXTS if selinux is disabled + +commit b977d7aa31f2104f17b8f4f52d824d6153471e0e +Author: Ralf Corsépius +Date: Mon Sep 3 10:17:40 2007 +0200 + + Remove lint-support. + +commit 408d3df3f1cb5ddc7b111da7147e679dd0278635 +Author: Panu Matilainen +Date: Mon Sep 3 10:20:10 2007 +0300 + + Rip out selinux file contexts from headers. + The SELinux file contexts can and do change, and local policies might be + in place, the contexts on the build system at build time have zero relevance + to anything and are just header bloat. + Remove --filecontexts alias while at it, not useful for anything anyway. + +commit e27bbb931aae7457d1f02adddc6f4330db890845 +Author: Panu Matilainen +Date: Mon Sep 3 08:49:38 2007 +0300 + + Don't show merges in dist tarball changelog. + They're not interesting to somebody viewing what has changed... + +commit 58f48ef1c6a32b47afd4d66133faec07e9ba777f +Author: Ralf Corsépius +Date: Mon Sep 3 05:11:40 2007 +0200 + + Eliminate mylibs. + +commit 97f85a723e4ecc0d87e4fa7f9dc0f7bd92eeafdc +Author: Ralf Corsépius +Date: Sun Sep 2 08:17:43 2007 +0200 + + Add missing link libs. + +commit d079327f0fb5c08da1707810184adfe7f439d96a +Author: Ralf Corsépius +Date: Sun Sep 2 08:17:16 2007 +0200 + + Add missing link libs. + +commit e3805cd17de32f3b9f0896530f53f37fe6fd1c13 +Author: Ralf Corsépius +Date: Sun Sep 2 08:16:30 2007 +0200 + + Add missing link libs. + +commit 3292d061a21507a74c5b33af89636e29de14f74d +Author: Ralf Corsépius +Date: Sun Sep 2 05:37:31 2007 +0200 + + Include rpmio_internal.h. + Remove _rpmio_debug. + Use "byte" instead of "char" in call to rpmioSlurp. + +commit 15d8d05affb121d54c082680366016a1fa35c559 +Author: Ralf Corsépius +Date: Fri Aug 31 19:07:58 2007 +0200 + + Remove ctags. + +commit 0a8dbbb9c0bc7e654a49cac82c50adbe613bce29 +Author: Ralf Corsépius +Date: Fri Aug 31 18:54:57 2007 +0200 + + Add LIBRPMALIAS_FILENAME to CPPFLAGS. + +commit b2db269632792c8340655cfea1d82c4491972f8c +Author: Ralf Corsépius +Date: Fri Aug 31 18:54:13 2007 +0200 + + Remove LIBRPMALIAS_FILENAME. + +commit 9e3809e36efc326fd29b86f44e4f0704354fa5aa +Author: Ralf Corsépius +Date: Fri Aug 31 16:27:10 2007 +0200 + + Eliminate clean-local: + +commit 8b28fa70cc0cef4b411523f47edb7b9b4c11f88d +Author: Ralf Corsépius +Date: Fri Aug 31 14:38:41 2007 +0200 + + Add RPMCONFIGDIR to CPPFLAGS. + +commit 7d4840fd163c5b0a8c26d8f80d1622121ec1850b +Author: Ralf Corsépius +Date: Fri Aug 31 14:36:46 2007 +0200 + + Set configdir=@RPMCONFIGDIR@ + +commit c84ed00486b64697573ae69c5afce65b63a4734a +Author: Panu Matilainen +Date: Fri Aug 31 14:18:45 2007 +0300 + + Remove dead code (hack from times before pre- and posttrans scripts) + +commit 46a5c3466ad9ae73cafc1a1de2ec0cd1ad406439 +Author: Panu Matilainen +Date: Fri Aug 31 13:52:40 2007 +0300 + + Vastly updated/rewritten perldeps.pl (rhbz#204800) from Michael Jennings + +commit b3255558f64e0e66578c12e20b6ce8c7513ed5a6 +Author: Panu Matilainen +Date: Fri Aug 31 13:41:14 2007 +0300 + + Remove unused ancient trpm + +commit 4e52d18de873a861447a589f52c85de2326cd863 +Author: Panu Matilainen +Date: Fri Aug 31 11:35:51 2007 +0300 + + More junk removal... + - remove ancient orphan cross-build script + - dont install vpkg* scripts + +commit 37f33a0b8b1266fea9413d378637e2856922e7d7 +Author: Panu Matilainen +Date: Fri Aug 31 11:34:07 2007 +0300 + + Remember to update makefiles wrt latest script removals + +commit faeabb1ce47939f2aee1dba80261db6919982d0f +Author: Panu Matilainen +Date: Fri Aug 31 11:28:52 2007 +0300 + + Remove magic.prov|req that were only used by the unused find-bla.pl + +commit d6ac1a522259642fd1919aac77531824b226e60f +Author: Panu Matilainen +Date: Fri Aug 31 11:27:25 2007 +0300 + + Remove unused, ancient getpo.sh + +commit 1846726e62d8f54ccaefbb79878e117205c33c10 +Author: Panu Matilainen +Date: Fri Aug 31 11:16:16 2007 +0300 + + Remove print_deps, was only used by unused find-prov/req.pl + +commit b780f5a8d636073d67dbcdfa3f8795f878b55218 +Author: Panu Matilainen +Date: Fri Aug 31 11:15:16 2007 +0300 + + Nuke more unused scripts... + - http.req doesn't have anything to do with rpm really + - find-prov, -req.pl and get_magic.pl are not used anyway + +commit 0b450467e2dac481deee139b7bc831e19efb11a4 +Author: Panu Matilainen +Date: Fri Aug 31 11:06:39 2007 +0300 + + Remove unused ancient sql.prov|req + +commit 693ba3084b95813bcc4eaefcfd29d32e6b44bca5 +Author: Panu Matilainen +Date: Fri Aug 31 11:05:44 2007 +0300 + + Remove ancient and unused find-{provides|requires}.perl scripts + +commit 4fed9927446082a78ad5ea9669219f2ca40677d6 +Author: Panu Matilainen +Date: Fri Aug 31 10:44:08 2007 +0300 + + Remove ancient rpmrc -> macros converter, no longer useful + +commit d977b13341ea1b0c0ad43da1f7d4d33ffcd44317 +Author: Panu Matilainen +Date: Fri Aug 31 10:42:08 2007 +0300 + + Remove dead cpan->spec scripts. + These are better served by having a separate upstream from rpm itself... + +commit fe1f22a75bed0c1e1b4f629ecd6bbdaf930bfadf +Author: Panu Matilainen +Date: Fri Aug 31 10:32:50 2007 +0300 + + Lose unused and obsolete libtool- and pkgconfig .prov, .req scripts + libtooldeps and pkgconfigdeps are used instead. + +commit 5dd1c2e3f13a90077a76d8b030684ff4629cb9d4 +Author: Panu Matilainen +Date: Fri Aug 31 10:30:06 2007 +0300 + + Lose unnecessary freshen script. + Only necessary with implicit obsoletes on provides which we dont (anymore) have. + +commit 045b67d1f35fd883ba460ef72fbde3524cb8d5a5 +Author: Panu Matilainen +Date: Fri Aug 31 10:26:21 2007 +0300 + + Lose ancient and unused perllocate* scripts + +commit 31a693a7ebec6b833f75ad03222fda0221a83f30 +Author: Panu Matilainen +Date: Fri Aug 31 10:25:11 2007 +0300 + + Lose ancient and unused brp-redhat + +commit 1d4fbefcb89dc8c427beb13afbf17a5c74eaec2f +Author: Ralf Corsépius +Date: Fri Aug 31 08:59:17 2007 +0200 + + Remove installprefix, all: + +commit eac9291fdefab65d9e2b99959c8c787359ebf9ce +Author: Ralf Corsépius +Date: Fri Aug 31 08:56:56 2007 +0200 + + Eliminate tmpdir, varprefix. + +commit e4e987be9fe77a11bd0f8d5d45041c72e2fa02b4 +Author: Ralf Corsépius +Date: Fri Aug 31 08:56:21 2007 +0200 + + Add LOCALSTATEDIR to AM_CPPFLAGS. + +commit c4095e623388d170df6da5673683a5215588924a +Author: Ralf Corsépius +Date: Fri Aug 31 08:55:24 2007 +0200 + + Use LOCALSTATEDIR instead of hard-coded /var. + +commit 7b40f37483f8e3f2defa5f44aa819150f94597fb +Author: Ralf Corsépius +Date: Fri Aug 31 08:55:06 2007 +0200 + + Use LOCALSTATEDIR instead of hard-coded /var. + +commit c153627e370b21c5d2dc143b6dbc610bb7a01087 +Author: Ralf Corsépius +Date: Fri Aug 31 08:54:41 2007 +0200 + + Use LOCALSTATEDIR instead of hard-coded /var. + +commit 7e2924132655a0efbca983853b20418bc3c22240 +Author: Ralf Corsépius +Date: Fri Aug 31 08:53:03 2007 +0200 + + Attempt to improve libdb_la handling. + +commit 33ad0689f91b48e706b06648f1be774848526ec7 +Author: Ralf Corsépius +Date: Fri Aug 31 05:58:43 2007 +0200 + + Generate macros from Makefile.am. + Replace varprefix with rpmvardir. + +commit 0f5d8ca08f6cbdf3f39ee27f6c6861bf05e8fa2d +Author: Ralf Corsépius +Date: Fri Aug 31 05:58:04 2007 +0200 + + Don't AC_SUBST varprefix. + Generate macros from Makefile.am + +commit be1752f08bb7da2a0f58f67d35189cf559021a66 +Author: Ralf Corsépius +Date: Fri Aug 31 05:23:25 2007 +0200 + + Regenerate. + +commit 794c4ca4e9a44c0cc57e5cb24c5f702b17188008 +Author: Ralf Corsépius +Date: Fri Aug 31 05:05:45 2007 +0200 + + Remove CVSTAG. + +commit dd296918e8b14fa1297de785a8955ba16c7c7b8e +Author: Ralf Corsépius +Date: Fri Aug 31 04:35:24 2007 +0200 + + Remove make-target "noconfig" + +commit 7c0bbcbc5e34d5c97fd2719f55c7a186a2ec2483 +Author: Ralf Corsépius +Date: Fri Aug 31 04:34:33 2007 +0200 + + Remove make-target "tar" + +commit 0e95c12b295c88778460ca9dcaad959352a66310 +Author: Ralf Corsépius +Date: Fri Aug 31 04:25:22 2007 +0200 + + Remove AC_SUBST(RPM) (Unused). + +commit 90c4d4e2d6f8d8e49eceb74b17e1097bdd99122f +Author: Panu Matilainen +Date: Thu Aug 30 21:32:25 2007 +0300 + + Drop macrosfiles from rpmrc.in, we don't read it anymore + +commit 1fe306aa6711a916b963ec8ff56b3d868323345c +Author: Ralf Corsépius +Date: Thu Aug 30 18:35:14 2007 +0200 + + Add check: + +commit 431a6bc687af4daa00dec976659c68e0b2a7722c +Author: Panu Matilainen +Date: Thu Aug 30 17:06:14 2007 +0300 + + Get rpmcli.h includes out of python bindings + +commit 278c26d5122ca1c9f43485de48fe6f9939344417 +Author: Ralf Corsépius +Date: Thu Aug 30 16:04:06 2007 +0200 + + Attempt to make tests/Makefile.am more stabile. + +commit 333fc3b70efdabd2d6928375ec0ce67ef29797fa +Author: Ralf Corsépius +Date: Thu Aug 30 15:33:15 2007 +0200 + + Massive hacking on tests. + +commit 1e27f6ec10605daf5fae46a159959706a3827ec4 +Author: Ralf Corsépius +Date: Thu Aug 30 15:32:16 2007 +0200 + + Add RPM_XFAIL. + Try to set HOME to avoid ~/.popt interfering. + +commit bc4e7adce61fd288ca38e0174825843cc77e0ab6 +Author: Ralf Corsépius +Date: Thu Aug 30 14:54:15 2007 +0200 + + Add package.m4 to EXTRA_DIST. + +commit 0cdbf1e69be9a613db3b11d5ef79a04b28beec9f +Author: Ralf Corsépius +Date: Thu Aug 30 14:53:17 2007 +0200 + + Add data/*/foo* + +commit 5b11931a8f0cb615f3d3c3095ecb1f38b49e17ba +Author: Ralf Corsépius +Date: Thu Aug 30 14:50:20 2007 +0200 + + New. + +commit 0ad1873796883c0f66b2ad8526766d68ed28dd0b +Author: Panu Matilainen +Date: Thu Aug 30 15:49:31 2007 +0300 + + Move rollback IDTX out of cli-stuff, its needed by core ts handling too. + +commit 8d0ad625b9cdab9f551712bd6fd44d8dff49a16a +Author: Panu Matilainen +Date: Thu Aug 30 13:02:12 2007 +0300 + + Don't read *.rpmnew etc macro files + +commit db6eb7df2a6c94ddf70440ffb190041410587f04 +Author: Panu Matilainen +Date: Thu Aug 30 12:22:01 2007 +0300 + + Don't read macrosfiles: from rpmrc, use default paths instead. + Also fixes --macros= option. + +commit 09bcd97b3a17609f97d82aed9f93b5c5c78bac1a +Author: Panu Matilainen +Date: Thu Aug 30 09:09:08 2007 +0300 + + Remove unnecessary include + +commit 4c735bc33fb94fa49c177670d867b50c2ede7d6d +Author: Panu Matilainen +Date: Thu Aug 30 09:07:11 2007 +0300 + + Remove unused include. + +commit 30e83839a6fb6ad531ded31f0647e7ccd34ac951 +Author: Panu Matilainen +Date: Thu Aug 30 08:59:12 2007 +0300 + + Remove unused lib/fileutil.c + rpmSyscall() was a hack from times before pretrans and posttrans, code + is dead since long ago.. + +commit 0916396cd3b6f0195db3dcfb29e2893f897665e2 +Author: Ralf Corsépius +Date: Thu Aug 30 07:40:28 2007 +0200 + + Use ${abs_builddir} instead of pwd. + Use ${abs_builddir} in RPMRC. + +commit 93b5033ee111cac7865e81caf4c397d810156a67 +Author: Ralf Corsépius +Date: Wed Aug 29 17:45:33 2007 +0200 + + Remove (Merged into doc/Makefile.am). + +commit 15fb33022747b9015a6238be86137106f1aee424 +Author: Ralf Corsépius +Date: Wed Aug 29 17:43:20 2007 +0200 + + Remove doc/fr/Makefile doc/ja/Makefile doc/ko/Makefile doc/pl/Makefile doc/ru/Makefile doc/sk/Makefile. + +commit 6e1f2575b1de2f5944483ed024eda1a75d7eefe9 +Author: Ralf Corsépius +Date: Wed Aug 29 17:42:32 2007 +0200 + + Merge-in fr/Makefile.am ja/Makefile.am pl/Makefile.am ru/Makefile.am sk/Makefile.am + +commit a8e246e8f6bdd4679e10c3029a0faa9c25c4b7f1 +Author: Ralf Corsépius +Date: Wed Aug 29 17:41:33 2007 +0200 + + Remove (Merged into doc/Makefile.am). + +commit 412f9fcb17f7d8080eb379e19f208bd1c863ce77 +Author: Panu Matilainen +Date: Wed Aug 29 15:39:55 2007 +0300 + + Fix various cases of build failing due to whitespace in dir/filenames. + +commit 29d53ac70f14750fbff1329c37c832e48f68254a +Author: Ralf Corsépius +Date: Wed Aug 29 13:06:05 2007 +0200 + + Reflect having removed doc/manual/Makefile.am + +commit 04f1d7c8f271360c43a80751af277893793d0d69 +Author: Ralf Corsépius +Date: Wed Aug 29 13:05:42 2007 +0200 + + Merge-in manual/Makefile.am + +commit a75eb83015ad9de122b631dbb29ebbd7daba9384 +Author: Ralf Corsépius +Date: Wed Aug 29 13:04:00 2007 +0200 + + Remove (merged-in into doc/Makefile.am). + +commit e6b6d15410089d222a8d1c3a275a5740a62db2eb +Author: Ralf Corsépius +Date: Wed Aug 29 13:01:29 2007 +0200 + + Remove @SET_MAKE@ (anachronism). + +commit 29b0557f578d700a12d1079cb90f08eea7adbe87 +Author: Ralf Corsépius +Date: Wed Aug 29 08:07:14 2007 +0200 + + Remove broken translations. + +commit 5b8a3cf39b723d792fcdc00999746a45e342325a +Author: Ralf Corsépius +Date: Tue Aug 28 18:22:11 2007 +0200 + + Eliminate LIBRPMRC_FILENAME. + +commit 1f89418506193f7a17e8f2ee56c64d9d6a344947 +Author: Ralf Corsépius +Date: Tue Aug 28 17:20:35 2007 +0200 + + Use SYSCONFDIR "/rpm/platform" instead of hard-coded /etc/rpm/platform. + +commit c3ea98f4c4819ca9731eb99e786c5ed0948518d7 +Author: Ralf Corsépius +Date: Tue Aug 28 17:01:04 2007 +0200 + + Use SYSCONFDIR "/rpmrc" instead of hard-coded /etc/rpmrc. + +commit 604116eff7da7f84f6e294b0dd6e80c3f8155736 +Author: Ralf Corsépius +Date: Tue Aug 28 13:21:05 2007 +0200 + + Rework rpmrc generation. + +commit 5553568c626b5ddb78be1c39f7aa499b3cf1fd98 +Author: Ralf Corsépius +Date: Tue Aug 28 13:20:03 2007 +0200 + + Remove SYSCONFIGDIR. + +commit 092122ca8458f020fb20cf217efa67b1807ec8bb +Author: Ralf Corsépius +Date: Tue Aug 28 13:19:37 2007 +0200 + + Create rpmrc from inside of Makefile. + +commit 061ab8dddc2a80555528662fd73c294112e7b346 +Author: Ralf Corsépius +Date: Tue Aug 28 11:34:25 2007 +0200 + + Sync macrofiles with macrofiles: in rpmrc. + +commit 1d1e80120f15b02480ddf0dd4e86f5d20e51cad2 +Author: Ralf Corsépius +Date: Tue Aug 28 11:33:39 2007 +0200 + + Propagate SYSCONFDIR. + +commit d846415f66da4ae6441ea7d9cd29f8e97aba0bb0 +Author: Ralf Corsépius +Date: Tue Aug 28 11:33:07 2007 +0200 + + Eliminate MACROFILES. + +commit f13ab2f70138ac6ccf5574e44407152323e2c155 +Author: Panu Matilainen +Date: Tue Aug 28 12:07:50 2007 +0300 + + Support accessing header info in python by object attributes as well. + +commit 5b4a0061a664ce40d5ab9cfbab906d3ce160c21c +Author: Panu Matilainen +Date: Tue Aug 28 12:03:34 2007 +0300 + + Add expandMacro() to python bindings. + Patch by Jeremy Katz. + +commit 7e87026e5c7098b6f019075ba11d39b62765cff2 +Author: Ralf Corsépius +Date: Tue Aug 28 10:58:48 2007 +0200 + + Check for locale.h. + +commit f3b816c3095b3b0dbc10c89155d13b8927ddad6d +Author: Panu Matilainen +Date: Tue Aug 28 11:00:42 2007 +0300 + + Install packages with preferred color first (rhbz#214737) + + Patch by Jeff Johnson. + +commit 477205014975bfc953430c6c261ee635686cd176 +Author: Panu Matilainen +Date: Tue Aug 28 10:11:06 2007 +0300 + + Show pre- and posttrans scripts in rpm -q --scripts query (susebz#253620) + Patch from Michal Marek. + +commit 0d71bb125f1954a30f82bb5ec400e45b905cbd44 +Author: Panu Matilainen +Date: Tue Aug 28 09:10:11 2007 +0300 + + Create x86_64 compat macros for ia32e and amd64 (rhbz#211119, 223355) + +commit e64bf5b93ab689e6031fce4489e4ae38ebaebef1 +Author: Panu Matilainen +Date: Tue Aug 28 09:04:09 2007 +0300 + + Avoid .rpmnew when the file hasn't changed in package (rhbz#194246) + + The current behavior of %config(noreplace) creates a .rpmnewfile iff the type + of the current file has been changed wrto what was originally installed. + + The patch changes this behavior so when old and new (in db and in package) is + identical -> not changed, the function returns FA_SKIP -> it won't clobber + anything, it simply skips installation of the file from the package. + This patch handles also the opposite case when old and new packages contain + %config symlink and we have regular file on disk. + + Patch from Tomas Mraz. + +commit 10d01f417760b655fec562234e09aee2f85c64f2 +Author: Panu Matilainen +Date: Tue Aug 28 08:52:06 2007 +0300 + + Fix perl version provide for packages defined in multiple blocks (#rhbz214496) + + Successive definitions of the same package shouldn't stomp on previously + found $VERSION, this is how perl itself behaves. + Patch from James Ralston. + +commit 4d0283bb4dd4eecb424c7efe6e7d5a6f294b2113 +Author: Ralf Corsépius +Date: Tue Aug 28 06:46:20 2007 +0200 + + Add -DLOCALEDIR="\"$(localedir)\"" + +commit 59441dc4d334091c72ef87ff7e9ec5e3f9ab7bf9 +Author: Ralf Corsépius +Date: Tue Aug 28 06:45:25 2007 +0200 + + Remove LOCALEDIR. + +commit 43ae6e6f57d959cad3e44473ffa280e3a4cd0d87 +Author: Ralf Corsépius +Date: Tue Aug 28 06:37:49 2007 +0200 + + Remove stamp-h. + +commit 310f1e524c720fec55339cb962a101e77045494d +Author: Ralf Corsépius +Date: Mon Aug 27 23:40:58 2007 +0200 + + Make tjfn, tdbi check_PROGRAMS. + +commit 7e4155a8d286c81cc2df678ac19a09bdf0bd7c93 +Author: Ralf Corsépius +Date: Mon Aug 27 23:38:23 2007 +0200 + + Comment out tjfn_LDFLAGS. + +commit 8d9081927b62d023b976081d8749d0ef4982cef2 +Author: Ralf Corsépius +Date: Mon Aug 27 23:38:00 2007 +0200 + + Remove sqlite.c from EXTRA_DIST. + +commit 32b5a12b9b6f949fca414f83d0e37ab515ce86c5 +Author: Ralf Corsépius +Date: Mon Aug 27 17:23:54 2007 +0200 + + Convert EXTRA_PROGRAMS and noinst_PROGRAMS to check_PROGRAMS. + +commit c32c9c010a2cd8fdffec266ef838aec1b9ebb80c +Author: Ralf Corsépius +Date: Mon Aug 27 17:18:04 2007 +0200 + + Add tufdio. + Convert EXTRA_PROGRAMS to check_PROGRAMS. + +commit d702278169af2c69dabd783a5d6f18ecb18648ce +Author: Ralf Corsépius +Date: Mon Aug 27 16:16:12 2007 +0200 + + Use $GCC instead of undocumented autoconf internal $ac_cv_c_compiler_gnu + +commit 903caf14d0f93f52a0635bbcb031131ea1cbe113 +Author: Ralf Corsépius +Date: Mon Aug 27 16:15:29 2007 +0200 + + Remove config.site. + +commit 323eb945cb287f4f5cb3a94f39e97085f7d45fd4 +Author: Ralf Corsépius +Date: Mon Aug 27 16:11:11 2007 +0200 + + Remove config.site (Not useful). + +commit d805779faf581115b5a2dda701aece982b4305f5 +Author: Ralf Corsépius +Date: Mon Aug 27 16:09:37 2007 +0200 + + Remove (Not useful). + +commit 3a35a549e541e253d38c82f63120dbc68f3ab6ed +Author: Ralf Corsépius +Date: Mon Aug 27 16:06:05 2007 +0200 + + Use check_PROGRAMS instead of EXTRA_PROGRAMS for t*programs. + +commit 6749666f6106c0777f0075f544ccb7043cf7d736 +Author: Ralf Corsépius +Date: Mon Aug 27 16:03:46 2007 +0200 + + Comment out Glob_error. + +commit 2cb8ee9accb7fdb81190e715f56071a1e252994a +Author: Ralf Corsépius +Date: Mon Aug 27 15:59:39 2007 +0200 + + Adjust paths to beecrypt headers. + +commit 767742d6349915019b793cd1a04940c3a6ab4488 +Author: Ralf Corsépius +Date: Mon Aug 27 15:55:48 2007 +0200 + + Adjust paths to beecrypt headers. + +commit 0d81a291c164c18c1293582dc659d779986d847c +Author: Ralf Corsépius +Date: Mon Aug 27 15:08:43 2007 +0200 + + Comment out setfiles_LDFLAGS. + +commit 1cfcb427ff1eaa12b9f88c16ccd60a5487023a55 +Author: Ralf Corsépius +Date: Mon Aug 27 12:26:21 2007 +0200 + + Eliminate noinst_HEADERS. + +commit 646d09ef9b949d5cb03f9e844d9572823541e179 +Author: Panu Matilainen +Date: Mon Aug 27 11:17:03 2007 +0300 + + Use system magic file for file classification. + - use whatever magic_load() uses by default + - remove unused rpm.magic file + +commit de9061b214a3b32aeb7ed5bd6374db0674fba578 +Author: Panu Matilainen +Date: Mon Aug 27 11:01:39 2007 +0300 + + Fix monday morning thinkos wrt macro buffer changes. + The expanded size is of course not known beforehand.. check for size + before copying instead. + +commit 8347d40b040b163c3ed92de7accafddb53e10d27 +Author: Panu Matilainen +Date: Mon Aug 27 10:19:43 2007 +0300 + + Don't check for termination signals in middle of transaction (!) + +commit 40d25ee3ea29768f828d71a99f845792c46a2be0 +Author: Panu Matilainen +Date: Mon Aug 27 09:55:42 2007 +0300 + + Fix potential buffer overflow in macro primitive execution + Use dynamic buffer, we know the needed size here... + +commit ad7c8e98c9285fd100d0386e37ede8f2ba71f441 +Author: Panu Matilainen +Date: Mon Aug 27 09:51:52 2007 +0300 + + Fix potential buffer overflow in macro findEntry() + Avoid static buffer, we know the size... + +commit 0e74bc98bed27e78b73d6ca1123c63aee4c6335a +Author: Panu Matilainen +Date: Mon Aug 27 09:48:00 2007 +0300 + + Fix potential buffer overflow by using dynamic buffer size. + +commit ca7b28eb352105797d33b011e0bb8d58ff010ed9 +Author: Panu Matilainen +Date: Mon Aug 27 09:45:53 2007 +0300 + + Fix buffer overflow in macro shell escaping (#253971) + We know the required buffer size here, no point in using static buffer. + +commit e68817bd47f96dea5265748b45901f1acd94a816 +Author: Ralf Corsépius +Date: Mon Aug 27 08:17:43 2007 +0200 + + Remove tdigest. + +commit 02fe593950a5c1cfb470c943087c8f3c14228318 +Author: Ralf Corsépius +Date: Mon Aug 27 08:17:10 2007 +0200 + + Remove (Unused junk). + +commit d238b57898e78abc143c56485dfe97954c42f666 +Author: Ralf Corsépius +Date: Mon Aug 27 07:28:17 2007 +0200 + + Remove (Unused, rotten junk). + +commit b42cb997e3d4252670762b78928bf645f22eb967 +Author: Ralf Corsépius +Date: Mon Aug 27 05:58:57 2007 +0200 + + Remove dependency on librpmbuild. + +commit f77387df9ab84aae6d3fedb7ebfe0ed6ca1c0380 +Author: Ralf Corsépius +Date: Fri Aug 24 07:36:24 2007 +0200 + + Add [rpm -q --scripts -p *.i386.rpm]. + +commit 749313a946f54fdcd9700b8da97758565355221e +Author: Ralf Corsépius +Date: Fri Aug 24 06:40:22 2007 +0200 + + Remove FINDREQUIRES, FINDPROVIDES (Unused). + +commit 9528926756f671b0c450fb9c25fab3db4b2fc23c +Author: Ralf Corsépius +Date: Fri Aug 24 06:24:52 2007 +0200 + + s/-lselinux/@WITH_SELINUX_LIB@/ + +commit 752fea0aeef661ce5a9799fa0359f927d56b9441 +Author: Ralf Corsépius +Date: Fri Aug 24 06:05:45 2007 +0200 + + Use with_dmalloc instead of withval. + +commit b6abbcf059df2ec8adfb84aa9a742498e5f0dce1 +Author: Ralf Corsépius +Date: Fri Aug 24 06:04:43 2007 +0200 + + Use with_python instead of withval. + +commit f45f78510bf07d2fd5aa5f728bd9b1eedefc5260 +Author: Ralf Corsépius +Date: Fri Aug 24 06:02:24 2007 +0200 + + Don't reset LIBS=. + +commit 5696bd01a95fd1f14a2a0eb79da9076c1ac4c7f6 +Author: Ralf Corsépius +Date: Fri Aug 24 05:43:59 2007 +0200 + + Eliminate localdone. + +commit ca4dd3714a4168d668eefc62657ba95b3da57221 +Author: Ralf Corsépius +Date: Fri Aug 24 05:43:34 2007 +0200 + + Eliminate INCPATH. + +commit 435aa0c959c1598584e86815056c5935fb55187f +Author: Ralf Corsépius +Date: Thu Aug 23 16:41:44 2007 +0200 + + Remove SYSCONFIGDIR, ~./rpmmacros from macros.in processing. + +commit 87de0b28f58b2e8adcd1ca468c809c35dfc54e6e +Author: Ralf Corsépius +Date: Thu Aug 23 16:38:12 2007 +0200 + + Create a customized rpmpopt-$(VERSION). + +commit e0f6bee0852c8433aa0fe39a1c760e94a98f6177 +Author: Ralf Corsépius +Date: Thu Aug 23 15:56:08 2007 +0200 + + Eliminate rpmpopt. + Let rpmpopt-${VERSION} be generated by configure.ac directly. + +commit a8997f47160741d2c8be553748791bc83a7b5db1 +Author: Ralf Corsépius +Date: Thu Aug 23 10:09:13 2007 +0200 + + Use (xxx->open)() to work-around glibc's open() behaving having changed. + +commit 2a98ab385d543741a41642ebea5a7d3f763c23d1 +Author: Ralf Corsépius +Date: Wed Aug 22 16:52:25 2007 +0200 + + Remove AC_SUBST(INCPATH). + +commit 3292a7bbb329a7cd56f582faa03839fffa3a29c1 +Author: Ralf Corsépius +Date: Wed Aug 22 15:19:58 2007 +0200 + + Remove INCPATH. + +commit 0ce3b2b0e153b4b6cd268df076c0844ee44c3caa +Author: Ralf Corsépius +Date: Wed Aug 22 15:17:23 2007 +0200 + + Use (xxx->open)() to work-around glibc's open() behaving having changed. + +commit cb2c49bbc5038799bb084914a7ba7cbe8356b165 +Author: Ralf Corsépius +Date: Wed Aug 22 15:14:30 2007 +0200 + + Remove INCPATH. + +commit 75ae38e37c82aec827d884897ceabbcfb112f071 +Author: Ralf Corsépius +Date: Wed Aug 22 11:54:31 2007 +0200 + + Remove INCPATH. + +commit 9a56f09925152e9ca6afc9db82fb15698a6d2428 +Author: Panu Matilainen +Date: Wed Aug 22 11:24:43 2007 +0300 + + Use RPMCONFIGDIR for determining rpmrc path, usrlibdir is wrong on multilib. + +commit 33b067521227a463fa95a60eb72cadc783fc9afc +Author: Ralf Corsépius +Date: Tue Aug 21 16:29:51 2007 +0200 + + Add bzip'ed tarball. + Remove tests/atlocal + +commit 76cfd8f0cf6842bb4f5e977c8e47201d13a5937f +Author: Ralf Corsépius +Date: Tue Aug 21 16:28:55 2007 +0200 + + Remove defs/defs.in. + Cosmetics. + +commit c76560f2bb2cb812dfcdc14f60b520c2c8cde163 +Author: Ralf Corsépius +Date: Tue Aug 21 16:28:27 2007 +0200 + + Merge-in former defs.in. + +commit a9959090216dd93a4b524f1b211657e7c49287e6 +Author: Ralf Corsépius +Date: Tue Aug 21 16:27:58 2007 +0200 + + Remove (merged into atlocal.in). + +commit 145a53556a11345dcf3842e7eb65513620348dba +Author: Ralf Corsépius +Date: Tue Aug 21 14:55:38 2007 +0200 + + Regenerate. + +commit 876ac792ec3f653556b77aa69377396418c7b1da +Author: Ralf Corsépius +Date: Tue Aug 21 14:53:57 2007 +0200 + + Update. + +commit 7693860542ad623e9cce3711e459cb2bcbd7b6a8 +Author: Ralf Corsépius +Date: Tue Aug 21 14:52:13 2007 +0200 + + Add local.at + +commit ceabc3ff98313614a22022f2358f7d61c129319f +Author: Ralf Corsépius +Date: Tue Aug 21 14:52:00 2007 +0200 + + Cosmetics. + +commit 8cfc7829cb478dab8d805fb3dfcb7e2019d4fe16 +Author: Ralf Corsépius +Date: Tue Aug 21 14:51:46 2007 +0200 + + New. + +commit 4c4a98921c8e2963d587fa21a6de3fd198efd75e +Author: Ralf Corsépius +Date: Tue Aug 21 11:26:03 2007 +0200 + + Remove. + +commit 5dcc2f5e0eb937f841bfaf0f74f77a81b8ae905a +Author: Ralf Corsépius +Date: Tue Aug 21 11:23:42 2007 +0200 + + Remove. + +commit 45e7dca5874e42b6ef2679631a56b3f97ce98cc8 +Author: Ralf Corsépius +Date: Tue Aug 21 11:09:45 2007 +0200 + + More checks. + +commit 6922fc8882f8934320b625b52387de96d16d5320 +Author: Ralf Corsépius +Date: Tue Aug 21 11:09:35 2007 +0200 + + More checks. + +commit 67fdb8918bbcfe4c03c505a442a566bac51b1eb8 +Author: Ralf Corsépius +Date: Tue Aug 21 11:08:43 2007 +0200 + + New. + +commit e290647874294d40e0e539a9b3d589f13f41165a +Author: Ralf Corsépius +Date: Tue Aug 21 10:37:27 2007 +0200 + + Extensively extend. + +commit ed488d4181cf9db03c99dfd94524f3c8faa45391 +Author: Ralf Corsépius +Date: Tue Aug 21 08:51:16 2007 +0200 + + Add check for rpmquery -ql -p *.src.rpm. + Add check for rpmquery -ql -p *.i386.rpm + +commit a7fec3af93d19592dc6d99ddd335aff7ad40213a +Author: Ralf Corsépius +Date: Tue Aug 21 08:44:33 2007 +0200 + + Remove (unused). + +commit d10da3c6ae7a99c6cb73413f66458472b9bb6ea2 +Author: Ralf Corsépius +Date: Tue Aug 21 08:43:59 2007 +0200 + + Remove (unused). + +commit 48ae0a34f95ffab6856d63fa295e145caabb2c13 +Author: Ralf Corsépius +Date: Tue Aug 21 08:40:49 2007 +0200 + + Remove (unused). + +commit 79e369146605112f4864e80f995bf3328cedc5ab +Author: Ralf Corsépius +Date: Tue Aug 21 00:51:10 2007 +0200 + + Add rpmi.at. + +commit ab80d35b20657eb3ccfad47cf5f34fec57d555fd +Author: Ralf Corsépius +Date: Tue Aug 21 00:50:58 2007 +0200 + + Add rpmi.at. + +commit ca188224ec03b376f2d5f4ae5e20b47e431adba6 +Author: Ralf Corsépius +Date: Tue Aug 21 00:50:40 2007 +0200 + + New. + +commit 5023b9fdaf4fce35b5dce3aa2daf2ac8e4e7e383 +Author: Ralf Corsépius +Date: Tue Aug 21 00:44:56 2007 +0200 + + Extend rpm --querytags check. + +commit bbd8d14bf2b8e8fec19c5d896e6b8615593e9be8 +Author: Ralf Corsépius +Date: Tue Aug 21 00:40:55 2007 +0200 + + Add check for rpmi --version. + +commit fb5508b460bc7bb7ce0221aed95f4bd91b86c38a +Author: Ralf Corsépius +Date: Tue Aug 21 00:40:08 2007 +0200 + + Fix typo in rpmquery --version check. + +commit c3f7c061e125a404663f620a5646be9d03425bc6 +Author: Ralf Corsépius +Date: Mon Aug 20 17:07:30 2007 +0200 + + Fix typos. + +commit 88fc7a04bc27fd14c08f2f95e15c3a6c50e4cd7b +Author: Ralf Corsépius +Date: Mon Aug 20 16:56:34 2007 +0200 + + Add rpmbuild.at. + +commit 89c7d93e608353a2b7f4925948e2b8ba4b2721cb +Author: Ralf Corsépius +Date: Mon Aug 20 16:07:52 2007 +0200 + + Cosmetics. + +commit 930fdff7afb6723046414830b95eeedf79d4202e +Author: Ralf Corsépius +Date: Mon Aug 20 16:07:02 2007 +0200 + + Add rpmdb.at + +commit 34827b33c0fa25a97cfb15d41f79664b715069ae +Author: Ralf Corsépius +Date: Mon Aug 20 15:40:31 2007 +0200 + + Generate customized macros.in. + +commit 2413427ea1d03dc86f8b49f21b62291129964116 +Author: Ralf Corsépius +Date: Mon Aug 20 15:29:18 2007 +0200 + + Cosmetics. + +commit 9e161ad4250a609ad0e61ffe5a1388e821814262 +Author: Ralf Corsépius +Date: Mon Aug 20 15:28:20 2007 +0200 + + Add rpmquery.at + +commit 34565d2f8f3108e4c3edd82b63bcf5844c5756d0 +Author: Ralf Corsépius +Date: Mon Aug 20 15:16:15 2007 +0200 + + Activate the testsuite + +commit d5d91e95f87ac67c172cc3612f25da502148272c +Author: Ralf Corsépius +Date: Mon Aug 20 15:15:35 2007 +0200 + + export LD_LIBRARY_PATH and PATH + +commit a6a590b83751007928ddc08acff639981e3a9e48 +Author: Ralf Corsépius +Date: Mon Aug 20 14:49:55 2007 +0200 + + Create testing directory. Cosmetics. + +commit c03ee493b704cdeae673d10ddcd3347a233cf125 +Author: Ralf Corsépius +Date: Mon Aug 20 14:48:56 2007 +0200 + + Remove. + +commit 14aa70f6955b343221fa8bd0fd47414d041c5e34 +Author: Ralf Corsépius +Date: Mon Aug 20 14:48:34 2007 +0200 + + Remove. + +commit 05cd65af4dab8966b3ae226bab1e7eb1bbe1e95e +Author: Ralf Corsépius +Date: Mon Aug 20 14:26:13 2007 +0200 + + Add AUTOTEST + +commit 9bb878ac30f1b49cc321ab552f2b5217b909df00 +Author: Ralf Corsépius +Date: Mon Aug 20 14:23:48 2007 +0200 + + Add atconfig + +commit 1efc58e2d68322d169fec19bd963c48a3808a749 +Author: Ralf Corsépius +Date: Mon Aug 20 14:22:33 2007 +0200 + + Add rpmrc and rpmrc.in + +commit 52ca662c90972e64ac008d014ab961d1f1a97266 +Author: Ralf Corsépius +Date: Mon Aug 20 14:21:09 2007 +0200 + + Add defs and defs.in + +commit bb0c33b377f49ceb4768b28bd342c6b3f95cb70e +Author: Ralf Corsépius +Date: Mon Aug 20 14:20:20 2007 +0200 + + Add package.m4 + +commit 27394829726d858ed1695e54054739cae69168e1 +Author: Ralf Corsépius +Date: Mon Aug 20 14:16:02 2007 +0200 + + More autotest stuff. + +commit a664f97fd1b7077baad120af95eca2aacba61439 +Author: Ralf Corsépius +Date: Mon Aug 20 12:51:48 2007 +0200 + + Add data directory. + +commit 58893c954e9ba237a20a80e10c1047535ea21982 +Author: Ralf Corsépius +Date: Mon Aug 20 12:45:50 2007 +0200 + + Rebuilt on FC7. + +commit efad0b8ebebf95cd2f48e74e770ec3102ead8862 +Author: Ralf Corsépius +Date: Mon Aug 20 12:45:43 2007 +0200 + + Rebuilt on FC7. + +commit 837abbd5cb9e56b9283aed5e356800bac1e0197c +Author: Ralf Corsépius +Date: Mon Aug 20 12:45:11 2007 +0200 + + Extracted from hello-test. + +commit c729338b66f4dd5cfbc5e5a6a1cf6c0906c57d95 +Author: Ralf Corsépius +Date: Mon Aug 20 12:43:52 2007 +0200 + + Extracted from hello-test. + +commit 505ae3d686e5e738eebe63070785329d484c018d +Author: Ralf Corsépius +Date: Mon Aug 20 12:37:21 2007 +0200 + + autotest support files. + +commit 02e42cbde4cc72d00e66ac3058b3c1124e7ffe39 +Author: Ralf Corsépius +Date: Mon Aug 20 12:34:49 2007 +0200 + + autotest support files. + +commit 8443c0e2bbce2f9443d884609fd5dd5629bd8454 +Author: Ralf Corsépius +Date: Mon Aug 20 12:33:19 2007 +0200 + + autotest support files. + +commit d09e67798b11b54941768323402aded821c6ae6d +Author: Ralf Corsépius +Date: Mon Aug 20 12:31:28 2007 +0200 + + Preliminary preps for autotest. + +commit a7817434a78e761b27931aed6a016396745782e3 +Author: Ralf Corsépius +Date: Mon Aug 20 08:52:56 2007 +0200 + + Remove (Unused). + +commit 05ceaa5bdb8afd76e4d1e681043896327291205d +Author: Ralf Corsépius +Date: Mon Aug 20 05:15:13 2007 +0200 + + Create $(varprefix)/lib/rpm by automake *dir rules. + +commit 18ca3770038330726446045b53f97ce3135d8a82 +Author: Ralf Corsépius +Date: Mon Aug 20 05:07:55 2007 +0200 + + Remove LDFLAGS from librpmio_la_LDFLAGS. + +commit 5702f435edfc2be39bf3921f7285ef5ff3628e3d +Author: Ralf Corsépius +Date: Mon Aug 20 04:54:28 2007 +0200 + + Convert from ISO-8859-2 to utf-8. + +commit a44aa8e1696435edaa925381d3255fe317a91708 +Author: Ralf Corsépius +Date: Mon Aug 20 04:54:01 2007 +0200 + + Convert from ISO-8859-2 to utf-8. + +commit 21716999039af77489eccf53e2d150331ab324d0 +Author: Ralf Corsépius +Date: Mon Aug 20 04:53:39 2007 +0200 + + Convert from ISO-8859-2 to utf-8. + +commit d2f9cf718b5474d20c2ddaf97c86a08c043656ee +Author: Ralf Corsépius +Date: Mon Aug 20 04:53:12 2007 +0200 + + Convert from ISO-8859-2 to utf-8. + +commit f94e4ef7794e783592d752c7f3b510fd57fb0e20 +Author: Ralf Corsépius +Date: Mon Aug 20 04:52:50 2007 +0200 + + Convert from ISO-8859-2 to utf-8. + +commit 639d5cdbbb472baa2e56685be67d6cfb389540a6 +Author: Ralf Corsépius +Date: Mon Aug 20 04:52:23 2007 +0200 + + Convert from ISO-8859-2 to utf-8. + +commit 414998339f7da27628c3f72e662ce3bef215e5d4 +Author: Ralf Corsépius +Date: Mon Aug 20 04:51:46 2007 +0200 + + Convert from ISO-8859-2 to utf-8. + +commit 124f980d61edcbb459513b6384aadb8a415698a1 +Author: Ralf Corsépius +Date: Mon Aug 20 04:49:58 2007 +0200 + + Link against build/librpmbuild.la instead of build/.libs/librpmbuild.a. + +commit 3dbd4dd329f2122441d4106d6b6587a8fbdd6ef6 +Author: Ralf Corsépius +Date: Mon Aug 20 04:36:27 2007 +0200 + + Revert previous change. + +commit 3050b7d0b7466229687d5e51699790021e87e5f2 +Author: Ralf Corsépius +Date: Mon Aug 20 04:32:30 2007 +0200 + + Convert from ISO-8859-2 to utf-8. + +commit eeef2e92d9fd2d69b36971bc744ffbfeb5a06b10 +Author: Ralf Corsépius +Date: Mon Aug 20 04:32:08 2007 +0200 + + Convert from ISO-8859-1 to utf-8. + +commit 52a387c19e4c140b317e708fbd5e17f0caac0481 +Author: Ralf Corsépius +Date: Mon Aug 20 04:31:21 2007 +0200 + + Remove LDFLAGS from librpmbuild_la_LDFLAGS. + +commit 7d20478284778c3176fbf47f4df4d104a02a81e7 +Author: Ralf Corsépius +Date: Sun Aug 19 18:45:47 2007 +0200 + + Remove LDFLAGS from librpmbuild_la_LDFLAGS. + +commit c28a0694cc65babccffe06d0803d96f0db51ac5a +Author: Ralf Corsépius +Date: Sun Aug 19 18:41:15 2007 +0200 + + Remove tests/hello-test/Makefile. + +commit 95178ed25fbcd6e438a265f307b8e4054e8a49ae +Author: Ralf Corsépius +Date: Sun Aug 19 18:40:52 2007 +0200 + + Remove RPM_BUILD_ROOT. + +commit 8d226bf0498870f1f6749d18de3cc26026d832f3 +Author: Ralf Corsépius +Date: Sun Aug 19 18:40:39 2007 +0200 + + Remove RPM_BUILD_ROOT. + +commit b9f223228f2679fed22f6fb69ddeeca91afd3bbb +Author: Ralf Corsépius +Date: Sun Aug 19 18:40:18 2007 +0200 + + Remove RPM_BUILD_ROOT. + +commit 1c356f8acb71b21fa98d50ca3ff36fbed3f56ff5 +Author: Ralf Corsépius +Date: Sun Aug 19 18:40:08 2007 +0200 + + Remove RPM_BUILD_ROOT. + +commit f427292f68500a96170673a5c48137b0dd34c590 +Author: Ralf Corsépius +Date: Thu Aug 16 18:54:36 2007 +0200 + + Eliminate mylibpaths, mylibs. + +commit bc5b9abcce9bc1d9deec5651dffd95b4bc2c63a7 +Author: Ralf Corsépius +Date: Thu Aug 16 08:03:55 2007 +0200 + + Eliminate myLDFLAGS. + +commit dc9ce14e37e04307071720ffffcfa325c8d9a104 +Author: Ralf Corsépius +Date: Thu Aug 16 07:57:57 2007 +0200 + + Untranslate Copyright messages. + +commit 00e06a335da3854fe89b6fcfe97514b50e8e385d +Author: Ralf Corsépius +Date: Thu Aug 16 06:44:52 2007 +0200 + + Remove LIBMISC (Unused). + +commit db59225e3910790b88cf49edfb687eb6a2651010 +Author: Ralf Corsépius +Date: Thu Aug 16 06:23:50 2007 +0200 + + (rpm2cpio_LDADD) Remove duplicate LIBMISC. + +commit 1ea579c7e53884f4d3af4319da156bd954abcaef +Author: Ralf Corsépius +Date: Thu Aug 16 06:16:58 2007 +0200 + + Add tests to SUBDIRS. + +commit 36a017415e68fcfac22c9395f46f51d5e5445031 +Author: Ralf Corsépius +Date: Thu Aug 16 05:58:28 2007 +0200 + + Eliminate myLDADD. + +commit a1cd8954a0e2d3580f892e4dfadfde1f9a2ed883 +Author: Ralf Corsépius +Date: Thu Aug 16 05:31:03 2007 +0200 + + Add tests/Makefile tests/hello-test/Makefile. + +commit 81b1baab5a842a7b9a753defdc6c796f662de3c5 +Author: Ralf Corsépius +Date: Wed Aug 15 13:49:01 2007 +0200 + + Replace MKDIR_P and MKDIR with RPM_MKDIR_P and RPM_MKDIR to avoid conflicts with automake's build-in MKDIR_P/MKDIR + +commit 81aa8461627668493e6392782fc4e9ee37fea5b7 +Author: Ralf Corsépius +Date: Wed Aug 15 13:42:05 2007 +0200 + + Build setfiles only if SELINUX is present. + +commit cc71f47f188f71327c1c980448fc38bf791ea620 +Author: Ralf Corsépius +Date: Wed Aug 15 13:40:10 2007 +0200 + + Add AM_CONDITIONAL(SELINUX). + +commit fdaa6e3794e36e1614250548c3dd3d101c2e6d3b +Author: Panu Matilainen +Date: Wed Aug 15 12:07:31 2007 +0300 + + Make find-lang.sh --with-gnome pick up omf files (rhbz#251400) + Patch from Matthias Clasen. + +commit 848f955d1d4c0c7ce517a106ac7e206731e07cec +Author: Ralf Corsépius +Date: Wed Aug 15 09:12:25 2007 +0200 + + Use libxml2*. + +commit bc1d56ab7b0c3492f494d016c444157dd42d2dbd +Author: Ralf Corsépius +Date: Wed Aug 15 09:11:25 2007 +0200 + + Rename XML2 into libxml2. + +commit 13625ddb7f9e190e30fce0bdb490ee55689783fa +Author: Ralf Corsépius +Date: Wed Aug 15 09:03:35 2007 +0200 + + Add check for libxml2. + +commit 4c73047556803838f3ca3c5fbd3496f0c26d146f +Author: Ralf Corsépius +Date: Wed Aug 15 09:02:34 2007 +0200 + + Fix comment on bzip2 library. + +commit c23d7b1cbe1bab3299d98bfda1b0f512da7c559c +Author: Ralf Corsépius +Date: Wed Aug 15 07:36:31 2007 +0200 + + Fix broken error message. + +commit 64b98ad378f47b5bb71bf07214cbb7697077e8d1 +Author: Ralf Corsépius +Date: Wed Aug 15 07:34:50 2007 +0200 + + Add Libs.private: @WITH_NEON_LIB@. + +commit b9774ace0005b6ba4b3420bfa3bfc6f95354ab75 +Author: Ralf Corsépius +Date: Tue Aug 14 18:29:54 2007 +0200 + + Add --enable-sqlite3. + Rework WITH_SQLITE3* handling. + +commit 5b9920f9003f6ca060aff8c2b228f468b17c8951 +Author: Ralf Corsépius +Date: Tue Aug 14 18:29:10 2007 +0200 + + ADD @WITH_SQLITE3_LIB@ to Libs.private. + +commit fc0a01b5a7755bef63f0b50f473b678d565b4f1d +Author: Ralf Corsépius +Date: Tue Aug 14 16:18:10 2007 +0200 + + Eliminate DBLIBOBJS, DBLIBSRCS. Add AM_CONDITIONAL SQLITE3. + +commit 218e5804fbc4ed926eb46ff9447d7a8e30fef748 +Author: Ralf Corsépius +Date: Tue Aug 14 16:16:14 2007 +0200 + + Use AS_IF instead of []-if. + +commit b023a940b4e4f5352d0e335f31609c8cc27c3d65 +Author: Panu Matilainen +Date: Tue Aug 14 09:00:54 2007 +0300 + + Avoid python 2.5 requirement by using int instead of Py_ssize_t + +commit 81b3cdd0ad2f30aab5ea925326aee6ee8316bd2d +Author: Ralf Corsépius +Date: Mon Aug 13 17:56:48 2007 +0200 + + Remove --with-efence (Users should use LIBS=-lefence instead. + +commit cb818ada209a21c117bd12ec1f166673a59bb412 +Author: Ralf Corsépius +Date: Mon Aug 13 15:38:27 2007 +0200 + + Remove WITH_ZLIB_SUBDIR. + +commit 7178c4a7ed8c590288cb64066c9b842f40199393 +Author: Ralf Corsépius +Date: Mon Aug 13 15:38:11 2007 +0200 + + Remove WITH_ZLIB_SUBDIR, WITH_PYTHON_SUBDIR. + +commit 4d3e0d23086d72c89cf12f1c68d2929cd8182646 +Author: Ralf Corsépius +Date: Mon Aug 13 15:15:14 2007 +0200 + + s/-lselinux/@WITH_SELINUX_LIB@/ + +commit f3c879105ace5c19b765ae113867444e9feb3fda +Author: Panu Matilainen +Date: Mon Aug 13 15:48:39 2007 +0300 + + Fail build on find-provide / -require errors (#rhbz#226751) + Patch from Jeff Johnson + +commit 28bd93900b025ba7afddd351c2b5d70f8dc30778 +Author: Panu Matilainen +Date: Mon Aug 13 14:41:01 2007 +0300 + + Attempt to resurrect rpminject.. + +commit aa5826ea67494f25e81d9c3c4e78f5ebb4884ba6 +Author: Ralf Corsépius +Date: Mon Aug 13 12:34:24 2007 +0200 + + Use size_t for pktlen to reflect pgpReadPkts() parameters. + +commit bff16e3474f6eb4ca0bef1d9290ea0d9a7b80684 +Author: Ralf Corsépius +Date: Mon Aug 13 12:30:58 2007 +0200 + + Reformat. + Comment out static ldflags. + Replace refs to $(top_builddir)/popt/libpopt.la with @WITH_POPT_LIB@. + +commit 8aeb0c33dd7c0964731e2bd9ce969a65c246ec70 +Author: Ralf Corsépius +Date: Mon Aug 13 09:48:56 2007 +0200 + + Fix bugs in previous commit. + +commit 94f8f21a9436087f19a64f14cf4c855c1e43c337 +Author: Ralf Corsépius +Date: Mon Aug 13 09:35:48 2007 +0200 + + Rework check for selinux. + +commit 9eded681b83850bc36ff3a11917ffee0178d76e0 +Author: Ralf Corsépius +Date: Mon Aug 13 07:44:54 2007 +0200 + + Use *_CPPFLAGS instead of *_CFLAGS. + +commit ce32a7839acfed0a66a6bf78da6d4287673dec5e +Author: Ralf Corsépius +Date: Mon Aug 13 07:31:10 2007 +0200 + + Remove -lncurses (unused). + +commit 25cc40bfa55f876f8ebb0ddbcaf802648bdf8ae5 +Author: Ralf Corsépius +Date: Mon Aug 13 07:30:28 2007 +0200 + + Clean up --with-lua. + +commit e0088ef0755aa9782c11adb3c9f73579a7920e5f +Author: Ralf Corsépius +Date: Mon Aug 13 06:42:49 2007 +0200 + + Rework --with-apidocs handling. + +commit 97b4430a4535ba6b661740dd2d982e001cda5546 +Author: Panu Matilainen +Date: Sun Aug 12 15:27:46 2007 +0300 + + Fix debugedit buildid thinko. + Patch from Roland McGrath + +commit 6f411b45506d6fc5b523b32a963a28b28f8a898f +Author: Ralf Corsépius +Date: Sun Aug 12 08:07:11 2007 +0200 + + Remove WITH_LUA_SUBDIR. + +commit 19c75c9f4abb7959b596f88fc8854131bfd67d4e +Author: Ralf Corsépius +Date: Sun Aug 12 06:38:15 2007 +0200 + + Remove -I$(includedir) from AM_CPPFLAGS (bogus). + +commit f93d15859cb01ce00612443e3d757dd2ec6cebda +Author: Ralf Corsépius +Date: Sun Aug 12 06:12:21 2007 +0200 + + Add tds to EXTRA_PROGRAMS. + +commit 3df1e54331555bb6bc0bd95e2f6afe2e0cbdd713 +Author: Ralf Corsépius +Date: Sat Aug 11 08:02:50 2007 +0200 + + Remove support for in-source-tree sqlite3. + +commit 3ea0304adaba951818d7f8442a51412f7f891c4d +Author: Ralf Corsépius +Date: Fri Aug 10 17:07:17 2007 +0200 + + Rework check for libmagic. + +commit 2eb2f975dac96dd6cbcfa9b9ac612d6e6cd62c0b +Author: Ralf Corsépius +Date: Fri Aug 10 16:09:25 2007 +0200 + + Remove WITH_MAGIC_SUBDIR. + +commit 0f99662fe3d03a552b4ba75040657f6babc694c4 +Author: Ralf Corsépius +Date: Fri Aug 10 16:03:23 2007 +0200 + + Remove WITH_RPMFILE (Unused). + +commit 7031755b8237013cda533cca35955c5912744e41 +Author: Ralf Corsépius +Date: Fri Aug 10 15:48:19 2007 +0200 + + Remove support of in-source-tree libneon. + +commit e577c3923495d599c9cbb9523c3ca4f1fc32e12a +Author: Ralf Corsépius +Date: Fri Aug 10 15:29:53 2007 +0200 + + Build debugedit only if LIBELF and LIBDWARF are present. + +commit d1e0b73576ba80a8d1956365386d41539a60048a +Author: Ralf Corsépius +Date: Fri Aug 10 15:22:25 2007 +0200 + + Use AC_CHECK_HEADERS(gelf.h). + Add AM_CONDITIONAL(LIBELF). + +commit 473ee0caa88defb6090bdfe7f8e2d5260ecf0f81 +Author: Ralf Corsépius +Date: Fri Aug 10 14:40:02 2007 +0200 + + Use AC_CHECK_HEADERS to check for beecrypt headers. + +commit be9839035b0f2129e59a104bf1bf26bea3ff88d3 +Author: Ralf Corsépius +Date: Fri Aug 10 14:10:52 2007 +0200 + + Merge noinst_HEADERS into librpm_la_SOURCES. + Eliminate noinst_HEADERS. + +commit 8288528eadb63761c5a8456d4c233468a94bf244 +Author: Ralf Corsépius +Date: Fri Aug 10 14:01:36 2007 +0200 + + Remove WITH_LIBDWARF_INCLUDE, WITH_LIBDWARF_DEBUGEDIT. + Add AM_CONDITIONAL(LIBDWARF). + +commit fa6c15d39ad4de0bbe4dfdb1aa0c824e37b5255c +Author: Ralf Corsépius +Date: Fri Aug 10 13:48:51 2007 +0200 + + Drop supporting insource-tree libelf/libdwarf. + +commit 7b282c989883b0d5ccbc82fda4071c0b574598df +Author: Panu Matilainen +Date: Fri Aug 10 14:32:25 2007 +0300 + + Update default per-arch compiler flags for modern gcc (rhbz#212583) + +commit 8fc069ce476e737c6d43d897d3c08ab5a19f3ad2 +Author: Panu Matilainen +Date: Fri Aug 10 12:09:36 2007 +0300 + + Add comment about checking --help to manuals (rhbz#164281) + As users + admins can tweak popt aliases to their liking, it's impossible + to guarantee than man pages are in sync with what's available... + +commit 9ef80f10ddbb379591ba8403da211fc10faeb954 +Author: Panu Matilainen +Date: Fri Aug 10 11:41:24 2007 +0300 + + Cut down on false perl requires (rhbz#198033...) + Patch from John Owens. + +commit 65c3b9c4ab46008d9fdd283b63242771dd948985 +Author: Ralf Corsépius +Date: Fri Aug 10 10:02:25 2007 +0200 + + Depend on external libbeecrypt + +commit 5b21d43bf4aa5377f266e7a01a1c69b24041776e +Author: Ralf Corsépius +Date: Fri Aug 10 09:43:52 2007 +0200 + + Depend on external libpopt + +commit fdb199e5a13203bcaaf92af1dd93bc25c9dee0c1 +Author: Panu Matilainen +Date: Thu Aug 9 23:43:39 2007 +0300 + + Add arch to default query output, finally... (rhbz#221148) + +commit 4a70bc0eb12ac68698f0baab28d3efb0ce42eb8f +Author: Panu Matilainen +Date: Thu Aug 9 22:34:49 2007 +0300 + + Avoid truncating /var/log/rpmpkgs in case of errors (rhbz#232830) + +commit a3c7fe2fab7da2671fc200041bb9618c29d825b3 +Author: Panu Matilainen +Date: Thu Aug 9 22:02:02 2007 +0300 + + Clarify --initdb usage in manual (rhbz#218057) + +commit 8afa0d14221a950ce85f3fcca226a9e6e570fdbb +Author: Panu Matilainen +Date: Thu Aug 9 21:50:56 2007 +0300 + + Skip stale and unaccessible (FUSE) mountpoints (rhbz#190496, 220991) + Ported from rpm5.org work of Jeff Johnson. + +commit 03a0e17d744c84ec7dd424cac72b4257159c2d6f +Author: Ralf Corsépius +Date: Thu Aug 9 18:03:59 2007 +0200 + + Link rpminject against librpmbuild. + +commit 82b91d79948c03303224d5eb472fa252c520f794 +Author: Ralf Corsépius +Date: Thu Aug 9 16:54:50 2007 +0200 + + Update. + +commit 2e76290a6d5a5ed4966d9bab204bd4ad898a9f82 +Author: Ralf Corsépius +Date: Thu Aug 9 15:45:48 2007 +0200 + + Fix contact address. + +commit 818fd1b7f4e56395b77829f1c9c8aa42bf0c09c1 +Author: Ralf Corsépius +Date: Thu Aug 9 15:42:41 2007 +0200 + + Run update-po. + +commit 0e037592af686431f495c0e401ff6ccee01c1e04 +Author: Ralf Corsépius +Date: Thu Aug 9 15:28:10 2007 +0200 + + Convert to UTF-8. + +commit 5d07280066012e871ff8e17176c050dc13bc3612 +Author: Ralf Corsépius +Date: Thu Aug 9 15:20:13 2007 +0200 + + Remove ro.po (Unused). + +commit 52ed1dbf1aab6c8199a68ea21c75271806a42c69 +Author: Ralf Corsépius +Date: Thu Aug 9 15:19:25 2007 +0200 + + Remove (Unused). + +commit 6e7ad57a06d7cc91d47cd9a9901ee281d68cbf1f +Author: Ralf Corsépius +Date: Thu Aug 9 15:11:59 2007 +0200 + + Remove (Unused). + +commit ddbef73ab4e3286087d04233f458aa04942eb1f6 +Author: Ralf Corsépius +Date: Thu Aug 9 15:09:57 2007 +0200 + + Remove (Unused). + +commit ad2c08036219ded749ac66cf444914721d55b21e +Author: Ralf Corsépius +Date: Thu Aug 9 15:04:18 2007 +0200 + + Bring tdbi and tsql under automake control. + +commit 2d34243d2c22930b51984ebfa6b1276d0cdb4f46 +Author: Ralf Corsépius +Date: Thu Aug 9 14:59:31 2007 +0200 + + Remove (Unused). + +commit cd0e6521a09b685291ecf5850d4fc5ebe3349327 +Author: Ralf Corsépius +Date: Thu Aug 9 14:58:33 2007 +0200 + + Remove (Unused). + +commit 9decc4889024b6e27b868a58d3f6e8035a33899b +Author: Ralf Corsépius +Date: Thu Aug 9 14:57:06 2007 +0200 + + Remove gl. + +commit 788dd93d93a786ba0155513dbd755bf2263b570a +Author: Ralf Corsépius +Date: Thu Aug 9 14:56:54 2007 +0200 + + Remove (Unused). + +commit d85566acd100eb1a3a86f0a5869cd0d91dd0e6f0 +Author: Ralf Corsépius +Date: Thu Aug 9 14:46:11 2007 +0200 + + Remove (Unused). + +commit 48f15525f08a788ab5faa0940f2403fc13991806 +Author: Ralf Corsépius +Date: Thu Aug 9 14:45:20 2007 +0200 + + Remove (Unused). + +commit ebfbc82bb1cd01bb58c5263e2bb5cba478667be2 +Author: Panu Matilainen +Date: Thu Aug 9 15:15:24 2007 +0300 + + Avoid unnecessary .rpmnew and .rpmsave files (rhbz#128622) + Don't create .rpmnew and .rpmsave files when file/symlink on disk differs + just by timestamp. Patch by Tomas Mraz. + +commit 2c8d28ef6aca0007dc7c3b776d10205661647521 +Author: Panu Matilainen +Date: Thu Aug 9 14:18:11 2007 +0300 + + Include it and es in translations + +commit 9a308817438e4d78a14a379bbcb307c605b4b8c2 +Author: Panu Matilainen +Date: Thu Aug 9 14:11:31 2007 +0300 + + Updated Italian translation from RHEL 4 + +commit 87eae0411682b648ed7ca753719d1782443bbd13 +Author: Panu Matilainen +Date: Thu Aug 9 14:09:29 2007 +0300 + + Updated Spanish translation from RHEL 4. + +commit cdb779d258aafed12733bdab25273307f8b15515 +Author: Ralf Corsépius +Date: Thu Aug 9 11:54:23 2007 +0200 + + Bring tests under automake control. + +commit fdff55eb8dfe5dffc285868a77cb131896415833 +Author: Panu Matilainen +Date: Thu Aug 9 11:22:40 2007 +0300 + + Attempt to resurrect trb + +commit 61f96e5b0fae706dc55a25e8addae69b340280c3 +Author: Ralf Corsépius +Date: Thu Aug 9 09:19:29 2007 +0200 + + Cleanup EXTRA_PROGRAMS. + Remove MAGIC. + +commit b0c22d1a6c2ea4f0446383c6d601358d451fb8c8 +Author: Ralf Corsépius +Date: Thu Aug 9 09:13:05 2007 +0200 + + Bring test progs under automake control. + +commit 3edd6f1a9d148acfdde3fa5b3f8440838142b5e3 +Author: Ralf Corsépius +Date: Thu Aug 9 09:03:13 2007 +0200 + + Remove trhn (No sources). + +commit 9ff27308e780b9bd06c3323fef5707ffa695376e +Author: Ralf Corsépius +Date: Thu Aug 9 08:26:48 2007 +0200 + + Add const char *__progname to make it buildable again. + +commit 023d2681009865b34ad9c0b4ee4ce5cd87e8aee5 +Author: Ralf Corsépius +Date: Thu Aug 9 03:44:12 2007 +0200 + + Remove $(PROGRAMS). + +commit 06ce3de4b60204291842fa2db4760cfe359ee0af +Author: Ralf Corsépius +Date: Thu Aug 9 03:43:41 2007 +0200 + + Remove rpmqv.c from EXTRA_DIST. + +commit 952bc81d443188e50a8823d802b5bf55a03addef +Author: Ralf Corsépius +Date: Wed Aug 8 18:12:31 2007 +0200 + + Eliminate mylibs. + +commit ae6c6255659dace7ac904b2d039a5be74463cfbc +Author: Ralf Corsépius +Date: Wed Aug 8 16:54:26 2007 +0200 + + Bring the apps under automake control. + +commit e5f7bcc6829c6de1812cf069f980c0ad9c5af82f +Author: Ralf Corsépius +Date: Wed Aug 8 15:48:22 2007 +0200 + + Fix a couple translations. + +commit 14d292ae94bd6cf2a3c2b450d0d5afe500e25f1b +Author: Ralf Corsépius +Date: Wed Aug 8 15:03:55 2007 +0200 + + Remove WITH_PYTHON_SUBDIR. + +commit 3a9d5dda6067ad037d11f47665bdb0fe13e8e743 +Author: Ralf Corsépius +Date: Wed Aug 8 15:02:56 2007 +0200 + + Hard-code python subdir. + +commit 9b91c4a2fcb71d800fd3d55d32128ef62b434e1c +Author: Panu Matilainen +Date: Wed Aug 8 15:18:52 2007 +0300 + + Fix permissions + +commit c7e5193b219b2d5e05a6606aff5d3f2a2e4f2db4 +Author: packman@mccallum.corsepiu.local +Date: Wed Aug 8 13:35:00 2007 +0200 + + Remove BEECRYPTLOBJS, .created. + +commit 8480c29b091b42acea2ee17b7c5ddfb86982f2cb +Author: Panu Matilainen +Date: Mon Aug 6 23:09:02 2007 +0300 + + Add a few missing files to POTFILES.in (rhbz#249608) + +commit 21524dd9cf016bc4e4bdf88ee611579c71fe6ba8 +Author: Panu Matilainen +Date: Mon Aug 6 15:46:11 2007 +0300 + + rpm is not a cross-tool... + + The patch below removes AC_CANONICAL_TARGET from configure.ac and + changes $target to $host. + + Background: AC_CANONICAL_TARGET is supposed to take the target of a + cross-tool, not the target of cross-compiling a package + (== a configure script's --host). + + Patch from Ralf Corsepius + +commit b0fcfbb19bc4dc5e4cf243664f0c87c008e5f065 +Author: Panu Matilainen +Date: Mon Aug 6 14:47:43 2007 +0300 + + Couple of ARM-related typo fixes from Lennert Buytenhek. + +commit 439e3f82006a4de3cb3364853c2fe19c910d9920 +Author: Panu Matilainen +Date: Mon Aug 6 14:47:10 2007 +0300 + + Detect and use -gnueabi instead of -gnu on ARM as necessary. + Patch from Lennert Buytenhek. + +commit 480c7faa69c55fb01d2b9a4feb4e9cfdd90b1832 +Author: Panu Matilainen +Date: Mon Aug 6 14:24:29 2007 +0300 + + Use PACKAGE_BUGREPORT in rpmrc.c's error messages. + + Background: autoconf supplies a define (PACKAGE_BUGREPORT) which can be + used to provide an email-address for bug reporting. So far, rpmrc.c + sources used a hard-coded addresses instead. + + This had caused i18n'ed strings (po/*) to contain different email + addresses for bug reporting. The patch changes this behavior into a the + i18n'ed strings to use the address as a string. + + From Ralf Corsepius. + +commit 37c6a80fd9ba9a49da5cc4ae3de33d70e92427ee +Author: Panu Matilainen +Date: Mon Aug 6 13:31:23 2007 +0300 + + Remove dead tficl code.. + +commit 2b3802175e150f6c8543e949a6f843113ab9dae2 +Author: Panu Matilainen +Date: Mon Aug 6 12:58:45 2007 +0300 + + Fix --dump usage description in the manpage. + Patch from Yu Zhiguo. + +commit aab16a0274277360816419a91cafcc837e00dd6d +Author: Panu Matilainen +Date: Mon Aug 6 12:04:05 2007 +0300 + + Allow building without python-devel. + + The patch below adds a check for presence of Python.h to configure.ac + and applies automake-conditionals to switch off building rpm's python + bindings if Python.h can't be found. + + Patch from Ralf Corsepius. + +commit 91dc76dab02f6b88eb52dd86136bade7abc767f4 +Author: Panu Matilainen +Date: Mon Aug 6 12:02:54 2007 +0300 + + Automake cleanups from Ralf Corsepius. + + * $(mkinstalldirs) in Makefile.ams is an anachronism. + Modern Makefile.ams should use $(MKDIR_P) instead. + + * There is one direct call to "mkdir -p" inside of the toplevel + Makefile.am - mkdir -p is non-portable. Portable Makefile.ams should use + MKDIR_P instead. + +commit c823d84c722c789fbd36f43f48a3943466369b74 +Author: Panu Matilainen +Date: Mon Aug 6 12:01:31 2007 +0300 + + Minor bug fixes to test programs to make them buildable again. + Patch from Ralf Corsepius. + +commit 65404e8850b446088fd5437ff4cb294c42ce4d1f +Author: Panu Matilainen +Date: Mon Aug 6 11:46:51 2007 +0300 + + Updated Brazilian Portugese translation from Igor Pires Soares. + +commit 8d2b416782e35fc439401f35166091fe0f9de038 +Author: Panu Matilainen +Date: Sun Aug 5 11:30:55 2007 +0300 + + Automake cleanups. + + - Replace INCLUDES with AM_CPPFLAGS + (INCLUDES has been replaced by AM_CPPFLAGS and is deprecated in + modern automakes for several years) + - Require autoconf-2.61 and automake-1.10 + (already required by autogen.sh) + - update mkinstalldirs with the version from automake-1.10 + (The version in rpm is ancient and known to be bugged) + + Patch from Ralf Corsepius + +commit 6c4b0fc9e44ea3b9449e171404c1b2037d15d01e +Author: Panu Matilainen +Date: Tue Jul 31 12:06:34 2007 +0300 + + Extract pkgconfig and libtool dependencies automatically. + Ported from rpm5.org work of Jeff Johnson. + +commit 345d1189aef724e893f8beb4f57db5111ddd6166 +Author: Panu Matilainen +Date: Mon Jul 30 13:43:22 2007 +0300 + + Fixing fallout from MARK64 removal.. + +commit cab228435bde1b5496522c03a4ce9840f2ef3701 +Author: Panu Matilainen +Date: Mon Jul 30 11:58:31 2007 +0300 + + Update internal BDB to version 4.6.18. + +commit 2d07882d45e9e575c00f8f402d4c7271bb65cfe9 +Author: Panu Matilainen +Date: Thu Jul 26 10:50:06 2007 +0300 + + Get python to honor prefix on install + +commit 4bcd08549d811907b52082ec531d6d20a21f9e56 +Author: Panu Matilainen +Date: Wed Jul 25 17:10:57 2007 +0300 + + Set libdir /usr/lib vs lib64 directly, drop MARK64 stuff + +commit 2e1a7ca2f782b664dbe226971f6c4aa8ffd39981 +Author: Panu Matilainen +Date: Wed Jul 25 17:05:36 2007 +0300 + + Rpm's "stuff" is in pkglibdir, not libdir, fix usage in install-data-local + +commit 48524d3b3303717c7d0455d8d58dd291f793f627 +Author: Panu Matilainen +Date: Wed Jul 25 17:04:15 2007 +0300 + + Flatten python makefiles, path tweaks + +commit f922a20f90726295efb4320b2611c14803fe966e +Author: Panu Matilainen +Date: Wed Jul 25 15:36:58 2007 +0300 + + Add initial rpm.pc pkg-config support. + +commit 8eb84ab6c7867421acc5037d08f8c43463ef4c44 +Author: Panu Matilainen +Date: Tue Jul 24 15:19:39 2007 +0300 + + Update translations.. + +commit a71588e9bbf0701287944057705517cf746a8a11 +Author: Panu Matilainen +Date: Tue Jul 24 15:18:17 2007 +0300 + + Update TODO + - popt and internal libmagic removed + - gettext-system updated + - bdb has already been updated (only not taken advantage of yet) + - "make distcheck" actually works now + +commit 129f42a6699c1110e1db9704443733d391487aa2 +Author: Panu Matilainen +Date: Tue Jul 24 15:17:04 2007 +0300 + + Add linit.h to liblua sources (distcheck sanity) + +commit f40d7401a5094cae2a72094cfe5fa46ada207e9c +Author: Panu Matilainen +Date: Tue Jul 24 14:59:58 2007 +0300 + + Further makefile cleanups. + - don't use wildcards in EXTRA_DIST + - additional -local uninstall and distclean targets to clean up what + the make did + +commit 7b6ef059a2ed56f8fe35542570d7a767daebf952 +Author: Panu Matilainen +Date: Tue Jul 24 14:21:32 2007 +0300 + + More gettext cleanups. + - Use po/LINGUAS for language list instead of ALL_LINGUAS in configure.ac + - replace obsolete INTLLIB with LIBINTL, gee.. + +commit ee5d67f1f029cb9b5bea5ea87e15229361edffb6 +Author: Panu Matilainen +Date: Tue Jul 24 14:14:27 2007 +0300 + + Fool bdb make system to "work" with distcheck + +commit adff791d95d89ff5f314fd3b335840b424c7fc72 +Author: Panu Matilainen +Date: Tue Jul 24 14:13:13 2007 +0300 + + Run autopoint from autogen to generate necessary gettext-things. + Remove automatically generated files. + +commit a600b09a88360fa807a499ec98b5145f058d3a80 +Author: Panu Matilainen +Date: Tue Jul 24 13:10:31 2007 +0300 + + Python install path fiddling to appease with distcheck + +commit f763a218799f3a50515ac2893dd6a12fd0b35a4a +Author: Panu Matilainen +Date: Tue Jul 24 11:55:37 2007 +0300 + + Use python distutils for determining include etc paths + +commit 8a2706cd117f37262f59d6b45bb32af8978a19d7 +Author: Panu Matilainen +Date: Tue Jul 24 10:19:55 2007 +0300 + + Kill of one more rpmfile reference + +commit ffa3122d5843fe931cbdb4346fd54c5d78b6a024 +Author: Panu Matilainen +Date: Tue Jul 24 10:13:28 2007 +0300 + + Expect neon headers to live in neon/ directory in include path + +commit 70e1c373d1cbcafac350fe4d5d83d09f3f3df3f0 +Author: Panu Matilainen +Date: Tue Jul 24 10:07:23 2007 +0300 + + Expect beecrypt headers to live in beecrypt/ directory in include path + +commit 68fc61fe087f6f97695eb888ba342fc248cddab1 +Author: Panu Matilainen +Date: Tue Jul 24 09:59:33 2007 +0300 + + Rip out internal libmagic, require external. + This is going to need more sorting out... + +commit 4cc65f782d828feb21a6b4bd43f57dd197ca0aed +Author: Panu Matilainen +Date: Mon Jul 23 13:12:14 2007 +0300 + + Always create ChangeLog from scratch on make dist. + +commit 871c280b84a6840c000245d6bc5c653e4628a4e1 +Author: Panu Matilainen +Date: Mon Jul 23 10:43:47 2007 +0300 + + Update scriptlet names to match current reality (rhbz#248128) + +commit bd21dff1087c4583c122197583952de715a38ff2 +Author: Panu Matilainen +Date: Mon Jul 23 10:02:54 2007 +0300 + + Avoid static buffer and extra copy in docdir checking. + From rpm5.org / Ralf S. Engelschall. + +commit 00b4b3a68a6e88f11b958c54101d2aea735645e4 +Author: Panu Matilainen +Date: Sat Jul 21 15:48:03 2007 +0300 + + Support fully qualified $Foo::Bar::VERSION expressions (rhbz#249135). + Patch from Ville Skyttä. + +commit 0ef67980e8a428985886482f33ebf8cdce979f7b +Author: Panu Matilainen +Date: Sat Jul 21 15:05:19 2007 +0300 + + Make rpmdbCheckTerminate() non-terminating. + This allows use in exit handler without affecting exit code, and permits + caller to do its own cleanup if necessary. + +commit 6fdd71bbeef3d1c1b731b9fbbbfad792715c3a1f +Author: Panu Matilainen +Date: Fri Jul 20 11:23:11 2007 +0300 + + Force rpmdb clean termination on exit from python. + Python process tracebacking with active iterators can and will otherwise leave + stale locks around (as is presumably the reason for rhbz#235389 and various + other locking issues) + +commit a9f84cb15e00decc28598dfded8b1c4867bd8a9a +Author: Panu Matilainen +Date: Fri Jul 20 11:19:56 2007 +0300 + + Support explicitly asking from rpmdb cleanup + termination. + New rpmdbCheckTerminate() function which checks for termination signals + and allows requesting termination via parameter as well. Make + rpmdbCheckSignals() just a wrapper that calls it with terminate=0. + +commit 17b615eeb63e76bf0ee0f5fe26ff9401892b9265 +Author: Panu Matilainen +Date: Fri Jul 20 10:41:15 2007 +0300 + + Add python methods for checking pending signals from rpmsqCaught. + - a thin wrapper for rpmdbCheckSignals() from rpm5.org / Jeff Johnson + - a function taking a list of signals to check and returning list caught + signals (python doesn't know about signal sets so rpmsqCaught needs + wrapping) + +commit 3b3a700984c9f04e6dc5c9905b89d793d6ea5fda +Author: Panu Matilainen +Date: Wed Jul 18 16:05:56 2007 +0300 + + Use type from headerGet*(), not tagType() for now + Blows up with header extensions... + +commit 2cfd3012bfcb5c5c61bbaf662ef084e0ab789d79 +Author: Panu Matilainen +Date: Mon Jul 16 16:48:14 2007 +0300 + + Update internal BDB to version 4.5.20 + +commit b754fe19fd387ca5fe8e7c00ddaa25c898fa192f +Author: Panu Matilainen +Date: Mon Jul 16 16:20:51 2007 +0300 + + Remove long unused rpm.c, also removals from EXTRA_DIST + +commit a1ba6ca84a13cdc14dd290f84d1e3984d52941f2 +Author: Panu Matilainen +Date: Mon Jul 16 16:18:47 2007 +0300 + + Remove ancient, irrelevant README.amiga... + +commit 0f879a48bd684fc4d3b35b53bfb3a03807aa46a4 +Author: Panu Matilainen +Date: Mon Jul 16 16:14:51 2007 +0300 + + Use binary search for looking up tag values + types. + Mostly derived from rpm5.org work of Jeff Johnsson, additionally + - fix thinko in bsearch result stabilization logic + - fix querytags in verbose mode to actually show the types as intended + +commit 505cad15bf554a72061c53c6120f453f2b530ed6 +Author: Panu Matilainen +Date: Mon Jul 16 13:39:48 2007 +0300 + + Full sync of RPMTAG_* definitions with rpm5.org. + + As promised on rpm-maint: + https://lists.dulug.duke.edu/pipermail/rpm-maint/2007-June/000357.html + Now that new tags don't cost anything in terms of python binding etc + maintenance we can at least keep tags compatible so querying cross-rpm + works (mostly - there are differences like md5 vs filedigests) + +commit d406964cb1018403ab50337d02fd78b9bbd9052d +Author: Panu Matilainen +Date: Mon Jul 16 13:21:41 2007 +0300 + + Use tagType() for determining header data types (array or not etc) + +commit 89b63475e2ea89f671c3e55aafc6010af3d402b4 +Author: Panu Matilainen +Date: Mon Jul 16 13:17:05 2007 +0300 + + Duh, forgot to bring in RPM_MASK_TYPE definition + +commit 6388d220bff107f26116345708e0aa69890bcd14 +Author: Panu Matilainen +Date: Mon Jul 16 13:13:46 2007 +0300 + + Use simple and stoopid linear tagType lookup for now. + +commit 892e8fe2954f64c6d129c57f86d1d4348f2fe23e +Author: Panu Matilainen +Date: Mon Jul 16 11:11:41 2007 +0300 + + Automatic return types for header tags. + Derived from rpm5.org work of Jeff Johnsson + +commit c57831dc7d62ec3f2119bb955e3fb6ef7a205206 +Author: Panu Matilainen +Date: Fri Jul 13 14:23:21 2007 +0300 + + Use tagValue() for name->tag lookups instead of manually walking tagtable. + +commit 8360b1147cb2ad146903ff0fafe1a1f5a5f38d6f +Author: Panu Matilainen +Date: Fri Jul 13 14:18:00 2007 +0300 + + Update tagtype definitions wrt rpm5.org + +commit ba7c00097076b2a5ec42fde068ea88e0106590f2 +Author: Panu Matilainen +Date: Fri Jul 13 12:59:22 2007 +0300 + + Kill RH-specific _vsflags_up2date, use generic __vsflags in bindings instead + +commit 7ed32d335125cb406c6361167e10b095ab1e5a26 +Author: Panu Matilainen +Date: Fri Jul 13 12:46:48 2007 +0300 + + Clean up python ts object creation. + - Remove code duplication by making rpmts_Create() just a wrapper that calls + rpmtsObject to create the instance + - Move the initialization from rpmts_init() to rpmts_new(), calling + ts.__init__() multiple times isn't something we want to allow (setting + vsflags multiple times is ok but there's a method to do that already) + +commit 2404685050a3405602225274d09d02baeb28a547 +Author: Panu Matilainen +Date: Thu Jul 12 16:10:46 2007 +0300 + + Kill of RPMTAG_RHNPLATFORM: don't add to header, mark deprecated. + +commit 5a3f376a2bba42855bd6a1b4002dd094293a19f1 +Author: Panu Matilainen +Date: Thu Jul 12 15:46:31 2007 +0300 + + Rip out rhnLoad() and rhnUnload() from python bindings. + Prehistoric, unused and vendor specific stuff... time to go. + +commit 27e182d20cdaa3727837886ec2aea592d60918dd +Author: Panu Matilainen +Date: Thu Jul 12 15:36:15 2007 +0300 + + Remove references to internal zlib from internal libmagic + +commit 77521a682d322cef9a468a565042e5ba651c1824 +Author: Panu Matilainen +Date: Thu Jul 12 14:36:49 2007 +0300 + + And one last debugedit fix... + Modern gcc doesn't like arithmetics on void pointers, cast where needed. + +commit bc983c5995ff19fdcbdd3351ffbcb03ff5e889f3 +Author: Panu Matilainen +Date: Thu Jul 12 13:53:23 2007 +0300 + + Silence the rest of ptr signedness issues in debugedit + +commit a0a1875130a7fd46574cafa61619f8ecf5cf9cf8 +Author: Panu Matilainen +Date: Thu Jul 12 13:47:51 2007 +0300 + + comp_dir doesn't need to be unsigned + +commit 1a86730b9ccb828d53cf92921bcc85ac6c88291b +Author: Panu Matilainen +Date: Thu Jul 12 13:43:40 2007 +0300 + + Remove unused variable (debugedit) + +commit ba8d55161afae5ad2fdb859417eff6bf014ccdd5 +Author: Panu Matilainen +Date: Thu Jul 12 13:43:01 2007 +0300 + + Debugedit cleanup continued. + Cast to expected type on all uses of strchr() + +commit 3b8aa6423fdc23c709b8f133cbad9ec6038c4758 +Author: Panu Matilainen +Date: Thu Jul 12 13:41:18 2007 +0300 + + Debugedit cleanup continued. + Cast to expected types on all uses of has_prefix() canonicalize_path() + +commit e1e269c23cea39923d8e9fcce9028f9a583f9e8e +Author: Panu Matilainen +Date: Thu Jul 12 13:37:32 2007 +0300 + + debugedit signedness fixes wrt strlen() + +commit 7e6084ad8293c2172362eac9e140a478f2883a9f +Author: Panu Matilainen +Date: Thu Jul 12 13:27:07 2007 +0300 + + One last fix for const qualifier discarding complaint in python. + OTOH we need to call PyCObject_FromVoidPtr() with non-const cast.. + +commit 85e427b2ef85c474d85ab2e57b2244dfd96e4fe8 +Author: Panu Matilainen +Date: Thu Jul 12 13:23:33 2007 +0300 + + int vs ptr sizes differ on some platforms, make alNum intptr_t to fix + +commit 6f993fee6506639c6f3bb94bf98750d747891b31 +Author: Panu Matilainen +Date: Thu Jul 12 13:03:19 2007 +0300 + + Pull in rpmfi int_32 -> uint_32 changes from rpm5.org. + TODO reminder to audit all uses of those, plenty of places where signed + doesn't make much sense, inconsistent use etc. + +commit e12cf3d1cc653dfac7bb7fe3f9aa801ab0536c88 +Author: Panu Matilainen +Date: Thu Jul 12 12:30:26 2007 +0300 + + Use uint_32 for dirindexes everywhere + +commit cce81e1fa00d98dc97b6a9daa6b8b55437933ff8 +Author: Panu Matilainen +Date: Thu Jul 12 11:55:45 2007 +0300 + + rpmioSlurp() related cleanups. + Derived from rpm5.org / Ralf S. Engelschall + +commit d52a645802ea47b2a4a435d628dedc86b509df51 +Author: Panu Matilainen +Date: Thu Jul 12 11:06:16 2007 +0300 + + Fread() and Fwrite() can return negative values, change type to reflect that + +commit cf85c830fb626a3cb6074ffad95eff3d0d18a408 +Author: Panu Matilainen +Date: Thu Jul 12 10:10:25 2007 +0300 + + Cast argv to rpm_execcon expected type + +commit cd4fb0f9f4c583d60f4a86e62f0c8cc268af408d +Author: Panu Matilainen +Date: Thu Jul 12 10:00:43 2007 +0300 + + Silence yet another char ptr signedness warning + +commit d0e8db7af4ca8d67f1d2047a966801ffc1165dfa +Author: Panu Matilainen +Date: Thu Jul 12 09:22:38 2007 +0300 + + parseSpec() cookie should be const, make it so... + +commit 29dbb10c1f30b241486bcb60627283e8a87950ec +Author: Panu Matilainen +Date: Thu Jul 12 09:20:09 2007 +0300 + + Some obvious "missing const" cases... + +commit 495efd502db5e1d663e77cfb0a3c47dfacb7e018 +Author: Panu Matilainen +Date: Thu Jul 12 09:18:00 2007 +0300 + + Avoid discarding const + +commit a0f532e2faa3fa7d0ffcfa337ab0922bdec4d4e9 +Author: Panu Matilainen +Date: Thu Jul 12 09:16:23 2007 +0300 + + Fix yet-another-compiler-warning. + tmpSpecFile gets passed to mkstemp() which expects to modify the template + thus discarding const + +commit 6e0ccfb0d524d875929e2ed5f89afef07373abac +Author: Panu Matilainen +Date: Wed Jul 11 16:12:56 2007 +0300 + + Cast to expected type. + +commit 1f54d19e16bff4f423cf9b2dadcea061f622e7f4 +Author: Panu Matilainen +Date: Wed Jul 11 16:12:29 2007 +0300 + + Cast to fix size difference. + Patch derived from rpm5.org / Jeff Johnsson + +commit 22c0cab843bec0eb84f42952e97abf30ece8aaed +Author: Panu Matilainen +Date: Wed Jul 11 16:00:51 2007 +0300 + + Cast to void** to silence hge() warning + +commit 982660de766296d275b542a177822ea6642d904a +Author: Panu Matilainen +Date: Wed Jul 11 15:56:12 2007 +0300 + + b64decode() len paramenter is unsigned size type, use it... + +commit ba63d405aee2b6f618c9bebf79af39d1b6ca6692 +Author: Panu Matilainen +Date: Wed Jul 11 15:39:51 2007 +0300 + + Turn rpmioSlurp() length argument to unsigned size_t, fix up uses. + Derived from rpm5.org / Ralf S. Engelschall, I do agree length can't really + be negative... + +commit 29657cb81bd3fd3489b944ad4187007ea0ac7f8d +Author: Panu Matilainen +Date: Wed Jul 11 15:33:50 2007 +0300 + + Use unsigned size type for pgpReadPkts(). + Derived from rpm5.org / Ralf S. Engelschall, I was too blind to see + ssize_t vs size_t, duh :) + +commit 4ec63d707bc53627717a0c4687b25c0a7106a0d2 +Author: Panu Matilainen +Date: Wed Jul 11 15:29:30 2007 +0300 + + Cast timedRead() buffers to expected type. + Patch from rpm5.org / Jeff Johnsson + +commit 4948a27bec2b228fe7322563c7e5f70ceaef6b87 +Author: Panu Matilainen +Date: Wed Jul 11 15:13:47 2007 +0300 + + Use correct formatting for scoreboard pointers + +commit 9539d0a9ff3d963016984572fb6a6cca2d5f3bac +Author: Panu Matilainen +Date: Wed Jul 11 14:48:38 2007 +0300 + + Cast to int to avoid gcc complaint from python enum registration. + +commit fa262a27649a5908b3641e479bb4061b2b773d19 +Author: Panu Matilainen +Date: Wed Jul 11 14:45:34 2007 +0300 + + Add missing include for mergesort + +commit 112a6db25d6047b7c83c968d894c4d58a4dcf849 +Author: Panu Matilainen +Date: Wed Jul 11 14:31:54 2007 +0300 + + Char ptr signedness fixes to python bindings. + +commit ac2d3f8f4672b00be4b97d80c02beebcfa24ac40 +Author: Panu Matilainen +Date: Wed Jul 11 14:27:48 2007 +0300 + + Correct type for python rpmrc lenght function + +commit cf646d480241567661307492a17e77a4788117d1 +Author: Panu Matilainen +Date: Wed Jul 11 14:23:07 2007 +0300 + + getRepackageHeaderFromTE() expects const char * as 4th argument + +commit 62f1ed90b8342224011eaef5b3369e436f60136f +Author: Panu Matilainen +Date: Wed Jul 11 14:02:12 2007 +0300 + + Ifdef unused http timeout setting to future.. + +commit 6a51e2f49f4f23d97363b081f1a56c2e08a49ec1 +Author: Panu Matilainen +Date: Wed Jul 11 13:52:22 2007 +0300 + + One more domd5() buffer signedness fix. + +commit b8da45aba1216b4da067cbccf865b3ef3557d948 +Author: Panu Matilainen +Date: Wed Jul 11 13:50:54 2007 +0300 + + Missing include for domd5 + +commit f0a178f1283caeaf88ee0c1b76f9acc63ff4d336 +Author: Panu Matilainen +Date: Wed Jul 11 13:48:43 2007 +0300 + + domd5() buffer signedness fixes. + +commit 40e8f62678fcf2498108f2af683522301ed17b25 +Author: Panu Matilainen +Date: Wed Jul 11 13:42:04 2007 +0300 + + rpmteIsSource() doesn't return pointers + +commit ed982f539c4d2f40df79c1ce73440878e63896c7 +Author: Panu Matilainen +Date: Wed Jul 11 13:36:03 2007 +0300 + + Quiesce false gcc unused variable warning. + +commit 33d9e08adf892263b9805311a0c8b223294288ff +Author: Panu Matilainen +Date: Wed Jul 11 13:33:32 2007 +0300 + + Add missing includes to local lua sources. + +commit d580a904031f6e9c2635dce2fcc984de0f7acf30 +Author: Panu Matilainen +Date: Wed Jul 11 13:20:45 2007 +0300 + + More ptr target signedness fixes... + +commit ed3e713b17d36308f124b1697dca5e6aa5cf8cce +Author: Panu Matilainen +Date: Wed Jul 11 13:13:35 2007 +0300 + + Make offsets match what rpmdbAppendIterator() expects + +commit 2e8356bda9919461a6ce84a172ad936f19869405 +Author: Panu Matilainen +Date: Wed Jul 11 13:10:47 2007 +0300 + + ...and more pointer signedness fixes... + +commit e497e39d2ec7f66c46822a571af5a81c7c737e2e +Author: Panu Matilainen +Date: Wed Jul 11 13:00:45 2007 +0300 + + More char ptr signedness fixes.. + +commit 3f92e558da363c78a525795307833578d5cc6ce6 +Author: Panu Matilainen +Date: Wed Jul 11 12:54:35 2007 +0300 + + More char ptr signedness fixes. + +commit 8b76976f6c09a92352bbdd817d4b6fe31659d277 +Author: Panu Matilainen +Date: Wed Jul 11 12:44:45 2007 +0300 + + Cast assignment to destination type to fix warnings. + +commit c8b871d5496b4920ef234f049ae2bb1483702a56 +Author: Panu Matilainen +Date: Wed Jul 11 12:34:46 2007 +0300 + + Ifdef out currently unused rpm logging facility stuff. + +commit e1508eff864621c9a91c9a4f016fda915ea28bb2 +Author: Panu Matilainen +Date: Wed Jul 11 12:32:17 2007 +0300 + + Shut up fdUpdateDigest() differing signedness compiler warnings. + Derived from rpm5.org. + +commit 220c0fd514e9e1d4b38a77c22df8679ad52421ab +Author: Panu Matilainen +Date: Tue Jul 10 15:25:32 2007 +0300 + + More python method pointer type fixes. + +commit c12c54dca8ae655ebb068e6f5ee597b7cb75e2bf +Author: Panu Matilainen +Date: Tue Jul 10 15:20:34 2007 +0300 + + Cast to PyObject to avoid compiler whining + +commit f91bb73993794e573ecc234106feca12739a4cea +Author: Panu Matilainen +Date: Tue Jul 10 15:19:04 2007 +0300 + + Fix bunch of compiler warnings from python bindings (method pointer types) + +commit 075560d864115ae7aed0c461040a1e151ae05725 +Author: Panu Matilainen +Date: Tue Jul 10 14:02:29 2007 +0300 + + Add missing include to rpmcache + +commit 52f208dca305cd52d9760f9814583c1e4de243e6 +Author: Panu Matilainen +Date: Tue Jul 10 13:52:49 2007 +0300 + + Remove meaningles statement to avoid compiler warning. + +commit fd187d8cf5e94a7ed442e50603f009508af0e41c +Author: Panu Matilainen +Date: Tue Jul 10 13:46:32 2007 +0300 + + Remove two useless rpmtsSELinuxEnabled() calls. + +commit 0fdfaed857e6ad44c0b30ae0cf9b9aa0b9c4797b +Author: Panu Matilainen +Date: Tue Jul 10 13:43:46 2007 +0300 + + Bunch of variable initializations to avoid compiler warnings. + +commit 896a10be647ae2c2c9fb80fdb1e6e5a5c343cdca +Author: Panu Matilainen +Date: Tue Jul 10 13:36:47 2007 +0300 + + Cast dbenv error call method set to void* to fix compiler warnings. + +commit 2f340d4deea1626f3b7e5dac50a6c239d8e95d6d +Author: Panu Matilainen +Date: Tue Jul 10 13:35:50 2007 +0300 + + Cast glob_t *dir methods to void* to fix compiler warnings. + +commit 31592ebc7f399bff9903c9b3134aabb351b102b6 +Author: Panu Matilainen +Date: Tue Jul 10 13:34:17 2007 +0300 + + Cast signal handler pointers to void* to avoid compiler warnings. + +commit 4a46e1fb4b4a931a6f88a095a847c386bc4dac31 +Author: Panu Matilainen +Date: Tue Jul 10 13:32:45 2007 +0300 + + Cast tid to time_t for ctime() to avoid compiler warning. + +commit 773405eebb607277a6b1ab1a35feca06a4901346 +Author: Panu Matilainen +Date: Tue Jul 10 13:23:56 2007 +0300 + + Fix a couple of compiler warnings + +commit 049674696d7f495ddf4faa4e0327712870f603ab +Author: Panu Matilainen +Date: Tue Jul 10 12:15:43 2007 +0300 + + Remove const type-qualifiers from function return types everywhere. + They're meaningless in C and cause tonne of build warnings. + +commit f64a1a327bfb443fea6ed766be40547c855d27a0 +Author: Panu Matilainen +Date: Tue Jul 10 11:39:40 2007 +0300 + + Cast to strlen expected type to avoid warning. + +commit a7458d9dd7587b9782305966c47e0f913c4a53db +Author: Panu Matilainen +Date: Tue Jul 10 11:39:11 2007 +0300 + + Msg buffer signedness change to avoid several compiler warnings. + +commit d2c56c404cdceda9ca3af82741d8185c8cd4fe22 +Author: Panu Matilainen +Date: Tue Jul 10 11:19:12 2007 +0300 + + Use correct size type for getpeername() + +commit c9ce3241df1bc64dc61299a0a4c213530c6cef1a +Author: Panu Matilainen +Date: Tue Jul 10 11:00:04 2007 +0300 + + Remove / #ifdef out unused variables as appropriate. + +commit fbf324936b2fcc876da545720c7d1c2240c24f07 +Author: Panu Matilainen +Date: Tue Jul 10 10:47:35 2007 +0300 + + #ifdef out unused pgpSecret* definitions to shut up compiler warnings. + +commit f1b4f7590b9170e04636a66b92888163fc7cac9b +Author: Panu Matilainen +Date: Tue Jul 10 10:27:55 2007 +0300 + + Fix bunch of string formatting warnings. + +commit 7b7d879160bdf9288f0546203f015b2a8e639485 +Author: Panu Matilainen +Date: Mon Jul 9 12:47:25 2007 +0300 + + Avoid closing scriptlet stdout by mistake. + +commit ac543bac0b243afafdb160e78010e2a03f0de452 +Author: Panu Matilainen +Date: Mon Jul 9 12:39:43 2007 +0300 + + Make docdir checking stricter (rhbz#246819) + +commit d8c6119ae580a0e0977337fe1e82450d7732a451 +Author: Panu Matilainen +Date: Mon Jul 9 12:31:32 2007 +0300 + + Remove outdated comment in check-rpaths-worker + +commit 3ad747cd55aa4ae0e6f773984573186d2891d91f +Author: Panu Matilainen +Date: Mon Jul 9 11:47:48 2007 +0300 + + Fix ordering with --nodeps. + This adds unneeded second rpmalMakeIndex() call to normal path, the index + creation needs some kind of tracking mechanism to avoid this... + +commit a867e6786e66c623449f464b6c8c13900f0a7cdb +Author: Panu Matilainen +Date: Mon Jul 9 11:23:58 2007 +0300 + + Permit packages with no payload format (rpm 3.x compat), ugh... + +commit 03d95de7a0138354698772d9c393bcb4a71a4279 +Author: Panu Matilainen +Date: Mon Jul 9 11:01:33 2007 +0300 + + Fix include of misc.h, rpmpgp.h and rpmsq.h in C++. + +commit 60194412dadd4a0184f5100b7c6fe7d84a566f98 +Author: Panu Matilainen +Date: Fri Jul 6 15:16:09 2007 +0300 + + Include symlinks in find-lang search (rhbz#246729) + +commit 5275cce57b26482baa54ba9935a36d9c93aa4e23 +Author: Panu Matilainen +Date: Thu Jul 5 16:59:34 2007 +0300 + + Rip out popt. + +commit 769ad04453840ad92cb2a438c6f0825a76cd01f7 +Author: Panu Matilainen +Date: Thu Jul 5 14:47:29 2007 +0300 + + Tags fixup. + - consistent tag naming + - remove false 4.4.2.1-rc2 tag + - use dots instead of underscores, hg has no silly limits wrt that... + +commit 694a18cd7c1260cc359c64b5224654c67847cda7 +Author: Panu Matilainen +Date: Wed Jul 4 15:35:12 2007 +0300 + + Added tag 4.4.2.1-rc2 for changeset da8803a1a1f0 + +commit 96a7eacd1c203bacc9e76bbf5f1493505b22e050 +Author: Panu Matilainen +Date: Wed Jul 4 15:34:52 2007 +0300 + + Duh, really kill the broken tests. + +commit b1952ec5f97217850bad9cdce0ab119bb2225731 +Author: Panu Matilainen +Date: Wed Jul 4 15:21:07 2007 +0300 + + Added tag 4.4.2.1-rc2 for changeset 2aa6758ed8fb + +commit a2c38fbcaf0558c8a151d66438efdf10673d0e04 +Author: Panu Matilainen +Date: Wed Jul 4 15:18:43 2007 +0300 + + Preparing for 4.4.2.1-rc2 + - update CHANGES and version + - update translations + +commit fc1646506bcf017a9cd8ed7fab9ab9537513a2c3 +Author: Panu Matilainen +Date: Wed Jul 4 15:11:27 2007 +0300 + + New debugedit option to recompute build ID (rhbz#246404) + Patch from Roland McGrath. + +commit b95a206f14bf76f817b845b4a9a1ab6b43c433d2 +Author: Panu Matilainen +Date: Wed Jul 4 15:06:20 2007 +0300 + + Include additional buildroot sanity check scripts (rhbz#245639) + - check-buildroot for checing buildroot files for references to $RPM_BUILD_ROOT + - check-rpaths* for checking buildroot files for broken rpaths + + Scripts by Enrico Scholz, Ville Skyttä. + +commit d7d8c35e67d3dc79acc40dc4411a2f14c584bec9 +Author: Panu Matilainen +Date: Tue Jul 3 14:27:08 2007 +0300 + + Fix segfault on errors if neon transport is used (rhbz#220392) + Patch from rpm5.org / JBJ. + +commit 39defaa877956e0719451f37d1eee81350a163ca +Author: Panu Matilainen +Date: Tue Jul 3 14:13:13 2007 +0300 + + Pass --wildcards to tar on build (rhbz#206841) + Tar no longer accepts globbing by default as it's incompatible with + traditional implementations: + http://lists.gnu.org/archive/html/bug-tar/2006-06/msg00001.html + + Rpm needs to work with upstream tar really, the --wildcards option has been + supported since 2001 so older versions shouldn't suffer either. + +commit 6fcff4422a954ff9d44cbe23a16a15739c2e2729 +Author: Panu Matilainen +Date: Tue Jul 3 11:51:51 2007 +0300 + + Minor update to Polish translation (rhbz#243569) + From Piotr DrÄ…g. + +commit de50397c711455d144efaf6709909423e7ef0f12 +Author: Panu Matilainen +Date: Mon Jul 2 15:02:15 2007 +0300 + + Plug some memory leaks. + Patches from rpm5.org / JBJ. + +commit 0195ea4a5ae0b04844e9a34cbb5839cb899dd792 +Author: Panu Matilainen +Date: Fri Jun 29 14:12:44 2007 +0300 + + TODO-update... + +commit c00b3321a4b208b1fb3d447cdc118d379e5fe9f6 +Author: Panu Matilainen +Date: Fri Jun 29 14:11:10 2007 +0300 + + Add /usr/share/gtk-doc/html/ to docDirs. + Patch from Jeremy Katz + +commit d9ea43262e26dbdd23bdb060704d21004055807e +Author: Panu Matilainen +Date: Fri Jun 29 12:33:03 2007 +0300 + + Disable totally broken tests, add fixing reminder to TODO. + +commit 3b6acfff8d8e22c31287bb4d9a434b5da733032f +Author: Panu Matilainen +Date: Thu Jun 28 14:44:48 2007 +0300 + + Remember to free up match iterators (rhbz#246044) + +commit 2738140221eafc47db72e353663bb916f544d60f +Author: Panu Matilainen +Date: Wed Jun 27 16:29:16 2007 +0300 + + Fix a warning from sparse in popt.h (rhbz#202005) + Patch from Kjartan Maraas. + +commit 52789915e5034cab9a720d5c8dd7afb8af0d9312 +Author: Panu Matilainen +Date: Wed Jun 27 16:17:21 2007 +0300 + + Updated Russian man pages. + From Andrew Martynov, rhbz#185620. + +commit b91128a0b841fec6517020f6b348923458e9cbe6 +Author: Panu Matilainen +Date: Tue Jun 26 20:46:51 2007 +0300 + + Remove hardcoded libtermcap vs bash kludge. + +commit fd1ea6a5e9ce474e840b58256f086936ef147247 +Author: Panu Matilainen +Date: Tue Jun 26 09:38:21 2007 +0300 + + Bump popt version to allow clean upgrades with the current bundled mess. + +commit 7e9df78063312e6619cf78ed9568d19c3feee64a +Author: Panu Matilainen +Date: Mon Jun 25 17:14:39 2007 +0300 + + Added tag 4.4.2.1-rc1 for changeset 89fa17e70ff2 + +commit 6ea7ff5cd74d6085b4099815e8e1bc47e37f7b2e +Author: Panu Matilainen +Date: Mon Jun 25 13:29:09 2007 +0300 + + Mark as 4.4.2.1-rc1 + +commit 278ce875a7d2aa9d01900d55b64a0d75b10521a0 +Author: Panu Matilainen +Date: Mon Jun 25 13:27:56 2007 +0300 + + Update TODO + CHANGES.. + +commit 9b3c7b96c5f2ca1bc326df8385ed34c11c2ff6a8 +Author: Panu Matilainen +Date: Mon Jun 25 13:27:21 2007 +0300 + + Pull full changelog from hg into dist tarball. + +commit b4355dfb945cf121adcd0f4c95cca2ce4f2df715 +Author: Panu Matilainen +Date: Mon Jun 25 13:12:13 2007 +0300 + + Use ustar format for dist tarball. + BDB has some very long paths that start getting stripped out when our + version string is longer than just x.y.z. + +commit 6e2f56fe25a9ee62af51e0408861a8a43c97a709 +Author: Panu Matilainen +Date: Mon Jun 25 12:47:33 2007 +0300 + + Remove ppc64 inline asm (rhbz#233145) + + Patch in both Fedora and Suse... + +commit 66c2a1d82ac83436ce4ff3071d3a028e5ea51ba6 +Author: Panu Matilainen +Date: Mon Jun 25 12:37:29 2007 +0300 + + Enable ts ordering for erasure mode. + Same patch in Suse & Fedora... + +commit aa467ebc5b03dbd837970abdfdc3329a3f62bb77 +Author: Panu Matilainen +Date: Mon Jun 25 12:28:25 2007 +0300 + + Transaction ordering fixes (rhbz#196590, 202540, 202542, 202543, 202544) + Patch from Fedora / Paul Nasrat. + +commit f49c8bc304c86c97864c60b70e3d420f7a04042e +Author: Panu Matilainen +Date: Mon Jun 25 10:40:14 2007 +0300 + + IPv4/6 and EPSV support by Arkadiusz Miskiewicz + +commit ccd3a804e33fb149f6db5b4dc0a78697dfe074d7 +Author: Panu Matilainen +Date: Mon Jun 25 10:37:37 2007 +0300 + + Nuke ugly /var/log/lastlog kludgery. + +commit 406a410bc3b4f245803dec59c1ee4a72aa10e313 +Author: Panu Matilainen +Date: Mon Jun 25 10:31:37 2007 +0300 + + Don't mmap large files (rhbz#139539, 177616) + Patch from Thomas Woerner + +commit 8b8e27ec5bd47c1dddbc197911e2168bedd71373 +Author: Panu Matilainen +Date: Mon Jun 25 10:28:05 2007 +0300 + + Detect and provide a requirement for DT_GNU_HASH. + Patch from Fedora. + +commit 82885665ce59795aceb439452cfd3bddbae04afe +Author: Panu Matilainen +Date: Thu Jun 21 15:13:04 2007 +0300 + + ARM arch update. + + Adds more ARM sub-archs, and adds some bits to deal properly with the new + ARM ABI (EABI). Patch from Lennert Buytenhek. + +commit 57f2cabf0f0915cbd4b1b86c247bad42e9a7d19b +Author: Paul Nasrat +Date: Thu Jun 21 12:28:13 2007 +0100 + + Initialise replaced + +commit 746d798d5dc05239c129beda98f04807a64040ad +Author: Paul Nasrat +Date: Thu Jun 21 09:57:19 2007 +0100 + + Backed out changeset 99c5bd19ffc4bfbfa5601767cbc1338b5fa570e9 + +commit b363333f5d04cfd14b1b514a499cddf5a1aea6db +Author: Paul Nasrat +Date: Thu Jun 21 08:57:01 2007 +0100 + + Initialise replaced on rpmfiNew + +commit c44738eae897466e8496efd4b75b5116dd4e6a97 +Author: Paul Nasrat +Date: Thu Jun 21 08:09:24 2007 +0100 + + Fix thinko + +commit e790bca3e99fa9609cf448234a9ca6c5ad6b860f +Author: Panu Matilainen +Date: Wed Jun 20 13:25:27 2007 +0300 + + Initial CHANGES update for 4.4.2.1 + +commit 51d4ac0ec415e126ef60c4718f7fd2d2ec841b7f +Author: Panu Matilainen +Date: Wed Jun 20 12:09:51 2007 +0300 + + TODO-update + +commit de9baf46443953af69ebf7489a69aa460e964a16 +Author: Panu Matilainen +Date: Wed Jun 20 12:06:36 2007 +0300 + + Auto*foo to check if gcc supports -fno-strict-aliasing. + +commit 2501a547b6809608ebb5f4c70f3ff39f7b104183 +Author: Panu Matilainen +Date: Wed Jun 20 11:07:53 2007 +0300 + + Duh, remember to initialize opt_F + +commit a36fe663614c7047a5dcd893ea39d2115be2ecc4 +Author: Panu Matilainen +Date: Wed Jun 20 10:58:10 2007 +0300 + + Add reminder about enabling mmap() use after 4.4.2.1. + The code's been unused for years so too risky to enable right now but should + offer good performance improvement. Fix the HAVE_MMAP checks. + +commit 57a53d1080b91343e5420acce88e3eaae86483e8 +Author: Panu Matilainen +Date: Wed Jun 20 10:26:14 2007 +0300 + + Move SELinux specifics to the section of configure.ac where SELinux is already + handled instead of mixing it into the 'static linking' section. + Patch from rpm5.org. + +commit fb93d8d34f80d01c754061ab8e32ef74c01ab339 +Author: Panu Matilainen +Date: Wed Jun 20 10:23:38 2007 +0300 + + More configure.ac cleanups. + From rpm5.org + +commit 54ac5046344030a70c37052996aa4a9c635dffbf +Author: Panu Matilainen +Date: Wed Jun 20 10:20:15 2007 +0300 + + Throw out unused stuff from configure.ac + Patch from rpm5.org + +commit 866771356c0c4515b8ee84831584c3a27e5ce88f +Author: Panu Matilainen +Date: Tue Jun 19 16:12:04 2007 +0300 + + Rename headerCheckPayload() -> headerCheckPayloadFormat() + to remove any potential confusion as to what it really does. + +commit a4d336f0536154450d54ff7d350cc85a85511e96 +Author: Panu Matilainen +Date: Tue Jun 19 15:16:13 2007 +0300 + + Update mailinglist address in error message, ugh.. + +commit 2cb4d412b1063a1f269a02b36f4e387003dbf989 +Author: Panu Matilainen +Date: Tue Jun 19 15:10:25 2007 +0300 + + Add support for specifying fuzz factor to %patch (rhbz#243720) + + Based on rpm5.org patch, additionally support both -F1 and -F 1 formats. + Use stpcpy() instead of strcat() for doPatch() args processing. + +commit ed8566798f91f82c37d4db8f85296534fe2f4b2b +Author: Panu Matilainen +Date: Tue Jun 19 14:35:40 2007 +0300 + + Update translations + +commit 4f5217f70ae16ffe4fbe93f2b59c6f6208612609 +Author: Panu Matilainen +Date: Tue Jun 19 14:29:10 2007 +0300 + + Fix variable double definition. + +commit 759ad2f36c91589665b4a67f1d00cfc58e6e5087 +Author: Panu Matilainen +Date: Tue Jun 19 14:21:01 2007 +0300 + + Fix CVE-2007-2799 integer overflow in internal libmagic. Patch from RHEL4. + +commit 59920364efcc433d2d72d82cdc2b55758eba71b1 +Author: Panu Matilainen +Date: Tue Jun 19 14:19:36 2007 +0300 + + Fix CVE-2007-1536 in internal libmagic, patch from RHEL4. + +commit 036e9e6dcb8165bb5862b55c6e8825161d78775c +Author: Panu Matilainen +Date: Tue Jun 19 13:45:42 2007 +0300 + + Don't treat provides as implicit obsoletes (rhbz#111071 etc). + This isn't really desired behavior by anybody. + + Patch from OpenSuSE / Michael Schroeder + +commit 30234b37379ea53db1b1a5a2bc75d25a9cb6a2d7 +Author: Panu Matilainen +Date: Tue Jun 19 13:33:50 2007 +0300 + + Open non-temporary db's before chroot (rhbz#103952, 173285) + +commit f95946925cc0f63fc11ca925347e737a7e18a43f +Author: Panu Matilainen +Date: Tue Jun 19 13:22:41 2007 +0300 + + Don't open temporary databases at rpmdbOpenAll(): + Add a helper function for filtering out temp databases and use it in all + the various places. + +commit c7705557d9cff5fd56c96d0915148efd5fcb7e3c +Author: Panu Matilainen +Date: Tue Jun 19 13:00:13 2007 +0300 + + Remove rpm and popt specs, spec files are vendor specific anyway. + +commit e752d9cf8521439544308f350d6f6e720c03782b +Author: Panu Matilainen +Date: Tue Jun 19 12:49:07 2007 +0300 + + Nuke antique "reference" baddeps list. + +commit 1cfcfba438736d11d76f69bc24bf900b4d01f59f +Author: Panu Matilainen +Date: Tue Jun 19 12:47:21 2007 +0300 + + Nuke all dependency whiteouts, very much vendor-specific... + +commit 9d454b367b0153cd3738bf97b087f29d5c00b4b0 +Author: Panu Matilainen +Date: Tue Jun 19 12:28:12 2007 +0300 + + Nuke default skipDirs list (rhbz#140055 & others). + The skipDir() mechanism left in place for now for vendors to tweak if + they see necessary. + +commit 34957f796c96c112603e3be66981da3dc304d0ba +Author: Panu Matilainen +Date: Tue Jun 19 07:30:01 2007 +0300 + + Make %_signature default to gpg. + +commit 0cfdc4fa038f9f37c403c613bc8c4dab4f3bb68e +Author: Paul Nasrat +Date: Mon Jun 18 14:31:13 2007 +0100 + + Ensure the status of the file which be replaced by another rpm package is + updated + +commit 7b78d3932b613987ad3e97a0c85c1e9ee18ec587 +Author: Panu Matilainen +Date: Mon Jun 18 12:48:07 2007 +0300 + + Don't segfault on a header without RPMTAG_NAME (rhbz#239557). + Patch from JBJ. + +commit 6f69c70e76deb57f5af8ee316e116a0c3b4c1077 +Author: Panu Matilainen +Date: Mon Jun 18 08:50:52 2007 +0300 + + Check all header strings to resize buffer CVE-2006-5466 (#212833). + Patch backported from rpm5.org / JBJ. + +commit 900de8606fc2d40f38fc050de9211586fc343d22 +Author: Panu Matilainen +Date: Mon Jun 18 08:29:01 2007 +0300 + + Flush query format buffer before listing files (rhbz#212833). + Patch from JBJ. + +commit af26016f77ef0e9b450ade0e7e742da1c09d5867 +Author: Panu Matilainen +Date: Fri Jun 15 10:33:36 2007 +0300 + + Don't try to open nonexistent file twice. + Patch from JBJ. + +commit c8dbe9d10b621c46eac0565d515767c50597f4e8 +Author: Panu Matilainen +Date: Tue Jun 12 11:22:49 2007 +0300 + + Skip packages/headers with non-verifiable signatures and treat + them as errors (rhbz#239557) + +commit f8c4fb6f16ab5aef4c26305cfc5dfb8433c76fc7 +Author: Panu Matilainen +Date: Tue Jun 12 09:38:35 2007 +0300 + + Updated Polish popt translation (Piotr DrÄ…g) + +commit d5d686b3b6ae0757dfed5eff3db91275c4583956 +Author: Panu Matilainen +Date: Mon Jun 11 21:08:28 2007 +0300 + + Updated Polish translation from Piotr DrÄ…g. + +commit 05ef6555f5f563ae55689e0d06a27c337b5eb8ce +Author: Panu Matilainen +Date: Mon Jun 11 13:22:25 2007 +0300 + + Fix query output when querying for non-installed . (rhbz#124016) + +commit dae15112df43f66055832f0c081c5d53c2bf222b +Author: Panu Matilainen +Date: Mon Jun 11 11:59:09 2007 +0300 + + Permit multiple versions of a package to be installed (-i) + within a single transaction (rhbz#213399) + +commit cb55ab4c3584422612e8586a9398dc5f9d6955ea +Author: Panu Matilainen +Date: Mon Jun 11 10:37:40 2007 +0300 + + Treat null epoch equal to zero epoch in python labelCompare (rhbz#227860). + Patch from JBJ. + +commit 07b45099bbaf51d5a92516be06245be7e44972c9 +Author: Panu Matilainen +Date: Mon Jun 11 10:30:29 2007 +0300 + + Treat null epoch equal to zero epoch in freshen (rhbz#143301). Patch from JBJ. + +commit f32c97f621ae8726130c042db66481c1336cf620 +Author: Panu Matilainen +Date: Fri Jun 8 16:07:05 2007 +0300 + + Allow characters >127 that don't fit the current locale in the + specfile (e.g. latin1 in utf-8 locale). + + Patch from OpenSuSE. + +commit 2045bd1814b44536eb006a03e96ef167eb873a96 +Author: Panu Matilainen +Date: Fri Jun 8 14:22:30 2007 +0300 + + Fix a few format string errors in German translation. + +commit 20b4dbe0ba0de9b4bdcc5054e61fc9ac2b59e514 +Author: Panu Matilainen +Date: Fri Jun 8 14:18:53 2007 +0300 + + Run msgfmt in check-mode to detect format string etc errors. + +commit 42171378282f9f074f1038c65f4c0de4c7d55ede +Author: Panu Matilainen +Date: Fri Jun 8 13:57:08 2007 +0300 + + Updated Finnish translation. + + Fix (by correcting or removing) tonne of dangerously incorrect fuzzy + translations. + +commit 48048a39309e180fa439b1b158a87c2081bafbaa +Author: Panu Matilainen +Date: Thu Jun 7 21:51:59 2007 +0300 + + Ts/db reference counting for match-iterators in python (rhbz#241751) + + Adds additional refcounting to the python level ts/db object to avoid + anonymous ts/db from getting deleted while still iterating over it. + +commit 578e90f2f83ba1872890182902f0fd0de28db402 +Author: Panu Matilainen +Date: Thu Jun 7 14:59:45 2007 +0300 + + Ooops, rpmdbFindFpList() not finding anything is not an error... + +commit 825191fe76b4b9be0062bb46be11bbd823256598 +Author: Panu Matilainen +Date: Thu Jun 7 14:56:48 2007 +0300 + + Return error codes from rpmdbFindFpList() on "can't happen" situations. + rpmtsRun() already checks it, and those things can happen in some exotic + cases like rhbz#106057 as non-root, unless the non-temporary db's are opened + before chroot... + +commit fe762d20a5d4d23899029cec6ec0280473283c13 +Author: Paul Nasrat +Date: Thu Jun 7 11:49:48 2007 +0100 + + Detect python2.5 + +commit f17f9a948aee4ba26511eabd255e55a22596e9b9 +Author: Panu Matilainen +Date: Thu Jun 7 13:19:43 2007 +0300 + + Add new srcdefattr macro (Michael Schroeder / OpenSuSE) + + Helps avoiding useless warnings when installing src.rpm's etc. + (susebz#48870, rhbz#125515) + +commit 22281cf90b1b684b765026bb817c4eb9edb87173 +Author: Panu Matilainen +Date: Thu Jun 7 12:56:22 2007 +0300 + + Another TODO-update. + +commit 40f4ed1de86e76799ad6839ed01d2a2974e4edc1 +Author: Panu Matilainen +Date: Thu Jun 7 12:15:52 2007 +0300 + + Remove old testing cruft. + +commit 1c254443c7bbc6c68f4131ccd518caadb6af7211 +Author: Panu Matilainen +Date: Thu Jun 7 10:29:54 2007 +0300 + + Minor fix to zh_TW translation (Wei-Lun Chao) + +commit b06dfb3870595721b41c03fe23e46ed5a90c8df1 +Author: Panu Matilainen +Date: Thu Jun 7 09:09:49 2007 +0300 + + Add zh_TW translation (Wei-Lun Chao). Remove empty zh and zh_CN.GB2312 po's. + +commit 8ae7508882536b5b85f3b8f8ce204e0d6aa1d350 +Author: Panu Matilainen +Date: Wed Jun 6 16:56:17 2007 +0300 + + Disable strict aliasing to stop type-punning warning spew. + +commit 0f18a279a8910d2a56e584318bd838599cc870fd +Author: Panu Matilainen +Date: Wed Jun 6 16:12:58 2007 +0300 + + Add db3 back to AC_CONFIG_SUBDIRS. Oops... + +commit 63548fdfa090782c2c804781891d1d7cfd507bba +Author: Panu Matilainen +Date: Wed Jun 6 14:46:47 2007 +0300 + + Make po Makefiles honor datarootdir + +commit e8c0fa24beeb46dde6f0f70f496ac7aa416c0903 +Author: Panu Matilainen +Date: Wed Jun 6 14:42:19 2007 +0300 + + More auto*foo cleanups: + - move AIX and MINIX checks earlier to avoid complaints + - use AC_PROG_LIBTOOL instead of -RANLIB to avoid obsoletion warning + +commit 802add035e4afbc5909af2517e7a347dae8e715b +Author: Panu Matilainen +Date: Wed Jun 6 14:40:54 2007 +0300 + + autogen.sh tweaking: + - generate config.rpath from autogen for now (kludge...) + - update autogen "documented versions" to F7 level, remove double versions + checks (and complaints) from file/autogen + +commit 1371af04f4162dd25d58c4e984b0bbd1efc82917 +Author: Panu Matilainen +Date: Wed Jun 6 13:37:18 2007 +0300 + + Unbreak zlib configure check. + +commit 98d634bc7f5b438b9707c78194cc548ccfce12b7 +Author: Panu Matilainen +Date: Wed Jun 6 12:50:56 2007 +0300 + + Make peace with auto*foo. + + - Remove checks for internal zlib + - Don't try to auto*foo'ize nonexistent zlib, sqlite subdirs. Db3 subdir + isn't auto*-enabled + - Set AM_GNU_GETTEXT_VERSION to make auto"#¤"# to realize we're using gettext + - Don't stomp into auto*** namespace with LUA_SPLINT stuff (from JBJ) + +commit c7f7ebe61c1593049bc80651ce4db7fbbfb9a828 +Author: Panu Matilainen +Date: Wed Jun 6 12:45:20 2007 +0300 + + Remove popt internal gettext, make peace with auto*foo. + + Rpm internal gettext was already removed, but there was another copy in popt... + Fiddle with auto*foo to quieten various warnings and actually pass + make distcheck. + +commit d25fe17c71f11f6c3019d80897784781f822cb45 +Author: Panu Matilainen +Date: Wed Jun 6 12:01:24 2007 +0300 + + Allow tests to pass in distcheck where builddir != srcdir. + +commit c755a3820e6734cf94a92380aeaf5ed899757d50 +Author: Panu Matilainen +Date: Tue Jun 5 15:34:52 2007 +0300 + + Force FILEVERIFYFLAGS to be a list in python bindings. + +commit 504775bb6997ba05ce441b2c8a67b65c289639b9 +Author: Panu Matilainen +Date: Tue Jun 5 15:18:49 2007 +0300 + + Python rpm.te Key() refcount fix (rhbz#182063) from JBJ. + +commit 7ca13025364fd3320d658e8220346f2eb7e0a55e +Author: Panu Matilainen +Date: Tue Jun 5 15:16:37 2007 +0300 + + Fix typo in check-prereq (rhbz#203182) by Steve Grubb. + +commit 592a1e5998c9b3646987e494de481a413473dd10 +Author: Panu Matilainen +Date: Tue Jun 5 12:43:53 2007 +0300 + + Payload compatibility checking fixes. + + Only check for payload compatibility when dealing with packages (and not + eg build headers). Don't crash if no payload format defined in header. + +commit 086dac456e607d61d0c2e31f80d29797c7ec4e50 +Author: Panu Matilainen +Date: Tue Jun 5 09:45:58 2007 +0300 + + Add --dupes popt alias for detecting duplicate packages in rpmdb from JBJ. + +commit 768b36f1cf27af7ca6f67fdbefa71ef4b3397e8d +Author: Panu Matilainen +Date: Tue May 29 13:43:06 2007 +0300 + + Restore SIGILL handler in machine detection code. + + Patch from OpenSuSE. + +commit 89e3d5c1aeadf65337615241b68f28f06f665e4b +Author: Panu Matilainen +Date: Fri May 25 12:57:10 2007 +0300 + + Run filelist checks even if other errors are present. + + This causes the unpackaged files check to be run even if there are other + errors in the file processing. This is rather handy in spotting spec typos + and such. + + Patch from OpenSuSE, somewhat modified. + +commit a3f86a1d3d5af61b0eb8ba16d6ae0c0de1517d36 +Author: Paul Nasrat +Date: Thu May 24 14:40:54 2007 +0100 + + Fail if no beecrypt found + +commit c3ce7e90a5cd994f1f6be1d21d9470b8fe344bb6 +Author: Panu Matilainen +Date: Thu May 24 10:56:53 2007 +0300 + + Check for supported payload format on package install. (rhbz#140052) + + Add a new API function to check for supported payload format from header, have + rpmtsAddInstallElement() check and fail if not. Check for tsadd failure + on src.rpm install as well. + +commit 932673b78705548d823f3ce23def5d5f9ea712f4 +Author: Panu Matilainen +Date: Wed May 23 12:12:07 2007 +0300 + + Remove hardcoded RH GPG-keys from the source. + +commit ff0620c3ea7caee6ed7a3d6420b932e546a0854c +Author: Panu Matilainen +Date: Wed May 23 10:27:15 2007 +0300 + + Raise an exception if adding an install/upgrade element to transaction fails. + +commit d9281caad55627c7e9c33fa6ccdfb88a44bf78c6 +Author: Panu Matilainen +Date: Wed May 23 08:40:22 2007 +0300 + + More informative error message when lstat() in verification fails. + Eg when running verification as non-root, it can lead to confusing results + until you realize you didn't have permission to verify the file. + + Patch originally from OpenSuSE, slightly modified. + +commit b1c7f449f619d35b27abd2158812474af70e0f15 +Author: Panu Matilainen +Date: Fri May 18 16:25:02 2007 +0300 + + Small TODO-update. + +commit b73bea14786fe8f6d7dc2457b51730d939e4eec4 +Author: Paul Nasrat +Date: Thu May 17 11:06:55 2007 +0100 + + Emit diff headers (#237561) + Patch derived from Ville Skytta + +commit de2e849ede59f1b3deec085676126d912011c052 +Author: Peter Jones +Date: Wed May 16 10:59:15 2007 -0400 + + - let diff arguments be specified in the environment + +commit 832fe4f01865cd17ab9393fc48b960206da223b0 +Author: Paul Nasrat +Date: Wed May 16 14:45:24 2007 +0100 + + dbmatch keys can be unicode objects also (#219008) + Jeremy Katz + +commit 485c8dac0dcce8db9be173692d2d34f4cf3efab9 +Author: Panu Matilainen +Date: Wed May 16 16:22:01 2007 +0300 + + Do not run pre/posttrans scripts in test mode. + + Patch from OpenSuSE. + +commit 9358ce594ff7e5c05b4a9df3155411d537c41de9 +Author: Panu Matilainen +Date: Wed May 16 16:19:18 2007 +0300 + + Deal with bad lines in --setperms and --setugids. + Happens for example if a package is not installed (--pipe also captures stderr). + + Patch from OpenSuSE. + +commit 2c080c11877fa083b6439b207368e05bb24e5b59 +Author: Panu Matilainen +Date: Wed May 16 16:18:05 2007 +0300 + + Make rebuilddb work with the --root option. + + Patch from OpenSuSE. + +commit 7e796f6f52b175097914a0b7bfd5d104b0d60ade +Author: Panu Matilainen +Date: Wed May 16 16:16:45 2007 +0300 + + Fix building without Lua support. + + Patch from OpenSuSE. + +commit 9909fef073fdf033a6c2a8a8063398ed043797af +Author: pmatilai@dhcp115.koti.laiskiainen.org +Date: Mon May 14 16:52:48 2007 +0300 + + - initial TODO for collecting future ideas + +commit 45d2eff6fdc7389fc426d1214f7d0397c523bdb0 +Author: Paul Nasrat +Date: Thu May 10 13:20:11 2007 +0100 + + Remove SELinux context verification (#193488) + +commit a94e9ed5c5df62dc2f917b1a3d3bc69cd7678c9a +Author: Paul Nasrat +Date: Thu May 10 13:15:34 2007 +0100 + + Add mono req/provides support + Alexander Larsson alexl@redhat.com + +commit c3524d91c7d47088eaf05e792c766067a0550d15 +Author: Paul Nasrat +Date: Thu May 10 13:08:38 2007 +0100 + + Use older perl helper scripts by default + +commit e07026a8eb49aef195fe030a710019d8f2baa11c +Author: Paul Nasrat +Date: Thu May 10 12:35:49 2007 +0100 + + Add patch to treat changelog as list + +commit 4da917bfef96aaaed02717a3a8952325086e7084 +Author: Paul Nasrat +Date: Tue May 1 05:55:14 2007 +0100 + + Enable configurable preferable elf colour policy (#235757) + Patch from: dwmw2 at redhat.com + +commit e0fe0e26eee361c20e960064162e3a7ad3bc63c9 +Author: Paul Nasrat +Date: Mon Apr 23 10:49:31 2007 +0100 + + Fix debugedit for relative paths (#232222) + +commit 2b0bc853c3b6e575613e946c346d915fe289f811 +Author: Paul Nasrat +Date: Mon Apr 16 16:13:27 2007 +0100 + + Fix default verify flags for %doc rh#235353 + Patch from Michael Schroeder + +commit 9bde9d187ca12ecb829f2b8831578f10dd7fdfae +Author: Paul Nasrat +Date: Mon Apr 16 13:31:37 2007 +0100 + + Call Fflush at the end of writeing a signed package to catch out + of disk space errors. + Patch from OpenSuSE + +commit 21818c6c8f3d4fe7836326d27f38421c29c22db7 +Author: Paul Nasrat +Date: Mon Apr 16 13:31:04 2007 +0100 + + Fix to handle oldpackages that use HEADERIMAGE + +commit 0e863398d4c4f8b750b41e0eeeb643d3b9ebbf06 +Author: Paul Nasrat +Date: Mon Apr 16 13:26:12 2007 +0100 + + When deleting files, drop any s-bit first, so that a malicious + user does not have access to old programs if he hard links them + to some other directory. [#50376] rh#125517 + Patch from OpenSuSE + +commit a6368d35530243b8d6bb0ca302a16c903f967921 +Author: Paul Nasrat +Date: Mon Apr 16 13:23:58 2007 +0100 + + Also decode early for PGP sigtags, which are actually header+payload + RSA signatures. Without this patch, verification of a package + that has just a header+payload RSA signature but no header-only RSA + signature fails. + Patch from OpenSuSE + +commit a435fe4baec1f3217bc437996bcea75493186d1e +Author: Paul Nasrat +Date: Mon Apr 16 13:23:13 2007 +0100 + + Make rpmdbSync obey the no_dbsync flag + Patch from OpenSuSE + +commit fd8b51eb5ee1024eb1fa702e9fe48826eeca264f +Author: Paul Nasrat +Date: Mon Apr 16 13:22:34 2007 +0100 + + Build lua without readline support. + Patch from OpenSuSE + +commit e71dd23825fafd47e8a7e81cd0919c0bee9dd184 +Author: Paul Nasrat +Date: Mon Apr 16 13:21:22 2007 +0100 + + Check rpmtsInitDB return value. Also patches rpm.c, which + actually is not used anymore. + Patch from OpenSuSE + +commit af236859a0375b1423845498b97a5dc7d7834bc1 +Author: Paul Nasrat +Date: Mon Apr 16 13:20:30 2007 +0100 + + Fix off-by-one error in glob call. + Fix from OpenSuSE + +commit 367d30909c9f8caf8882a665b3e4007c0b6ff9d0 +Author: Paul Nasrat +Date: Mon Apr 16 13:19:39 2007 +0100 + + Fix --noghost query option. rh#103207 + +commit d0c8cb4a15ce49f72b92f7eac5f429acca9cf24a +Author: Paul Nasrat +Date: Mon Apr 16 13:18:19 2007 +0100 + + Check getcwd return value, abort if rpm cannot determine current + directory. + Patch from OpenSuSE + +commit 3c102d6404bdaa14c6553049f9cf1dcec127814a +Author: Paul Nasrat +Date: Mon Apr 16 13:17:19 2007 +0100 + + Return an error if Fileno is called with NULL instead of segfaulting. + Patch from OpenSuSE + +commit 9b0ef9f4f326c02906a4f9dd636b95fcf3d88553 +Author: Paul Nasrat +Date: Mon Apr 16 13:16:35 2007 +0100 + + Deal with a return value of "-2" when database locking failed. + Patch from OpenSuSE + +commit e2395df0e020476df61d12219140ecfaff2ed788 +Author: Paul Nasrat +Date: Mon Apr 16 13:15:54 2007 +0100 + + Do not call rpmtsRun with an empty transaction list, it returns -1 + which messes up the numFailed counter. [#43267] + Patch from OpenSuSE + +commit 332cb7d273746dd98fc9cfd12a9ca4475ef7b961 +Author: Paul Nasrat +Date: Mon Apr 16 13:15:10 2007 +0100 + + Allow "--ignoresize" for erase operations. + Patch from OpenSuSE + +commit 5fdd5efb26d67e89c5d1cda51435de2896348102 +Author: Paul Nasrat +Date: Mon Apr 16 13:14:17 2007 +0100 + + Fix segfault when rpmbuild stumbles over an empty file list. + The "+ 1" is a remedy for xmalloc(0), which would return NULL. + Patch from OpenSuSE + +commit fd6e4142505093ca91aafcba1351bb33820ae39a +Author: Paul Nasrat +Date: Mon Apr 16 13:12:32 2007 +0100 + + Add support for a new macro, %{_docdir}. It can be used to specify + the name of the directory for %doc files. + Default is "%{NAME}-%{VERSION}", SUSE uses just "%{NAME}". + rh#125514 + Patch from OpenSuSE + +commit 026b82f53b8f19e2b3af1f4366de0de2554d2173 +Author: Paul Nasrat +Date: Mon Apr 16 13:07:52 2007 +0100 + + Fix uncompress waitpid logic to shut up the compiler [#160434] + Patch from OpenSuSE + +commit cc4d429e932cfc46fd75f09378858c4ba0fb8ab9 +Author: Paul Nasrat +Date: Mon Apr 16 13:06:24 2007 +0100 + + Fix a typo: the macro is currently called %{buildsubdir} + Patch from OpenSuSE + +commit 0707e98841652e99ab415e631b5df3b967b51c28 +Author: Paul Nasrat +Date: Mon Apr 16 13:05:18 2007 +0100 + + This fixes a typo that caused a compiler warning [#178055]. + Patch from OpenSuSE + +commit 5521d1537087b2c9ac67ef513a88b532444df3b5 +Author: Paul Nasrat +Date: Mon Apr 16 12:49:38 2007 +0100 + + Fork failure patch from OpenSuSE + +commit 1bb1b1e24dcb17cd9e1952b2f5bb41195ab904cf +Author: Paul Nasrat +Date: Mon Apr 16 12:42:56 2007 +0100 + + Allow customisable diff and use -p by default (#146981) + +commit a7d07fd6df1e3a57de899af6bc6cc718ae38c064 +Author: Paul Nasrat +Date: Tue Mar 27 14:55:48 2007 +0100 + + Ignore cscope/ctags output + +commit a63c710e70d0aeb30b710d79102db543cf6e87ac +Author: Paul Nasrat +Date: Thu Mar 15 15:59:55 2007 +0000 + + Fix for debugedit with ../../ in paths + +commit 116899502943d6a1fddaf0b832838245c8e33c1e +Author: Paul Nasrat +Date: Thu Mar 15 15:59:22 2007 +0000 + + Fix debugedit for O0 + +commit 060918ca2750edca3c21810d9d947ed7befd31ae +Author: Paul Nasrat +Date: Thu Mar 15 15:58:27 2007 +0000 + + Fix up debuginfo for various issues - inc. libc-client debuginfo (rh#205339) + +commit 32fd6b3a758388ac89ef4a2032198cbe83e740c6 +Author: Paul Nasrat +Date: Thu Mar 15 15:57:30 2007 +0000 + + Fix for thinko in debugedit on ppc + +commit 160025c3b921831809f92b8aa51d2d4146d9ce5f +Author: Paul Nasrat +Date: Wed Mar 14 15:52:12 2007 +0000 + + Cleanup: Remove old mpw references + +commit 3397c5ef532f1277541cbbfe340a9399fe8066de +Author: Paul Nasrat +Date: Wed Mar 14 15:46:35 2007 +0000 + + Cleanup: Remove dumpasn1 util + +commit 11ecf683bb0335391bf61389f89b1da1ef4a6f85 +Author: Paul Nasrat +Date: Wed Mar 14 15:46:17 2007 +0000 + + Require external gettext + +commit c9f0099bad9ca894cc4a071196e4b3da2cbc2b7c +Author: Paul Nasrat +Date: Wed Mar 14 15:08:28 2007 +0000 + + Cleanup: remove internal gettext + +commit f6c3bbd99a30d2be1b920c2c5c1e267b8953f627 +Author: Paul Nasrat +Date: Wed Mar 14 15:05:00 2007 +0000 + + Cleanup: remove vendor GPG/PGP keys + +commit 8c75c212cddff80d9453dd68d2cec2a2c11f6790 +Author: Paul Nasrat +Date: Wed Mar 14 15:03:21 2007 +0000 + + Cleanup: remove old convertdb utility + +commit 12be1601500b6fca4edbc639699b8a7c20eb40cd +Author: Paul Nasrat +Date: Wed Mar 14 15:02:32 2007 +0000 + + Cleanup: remove oldrpmdb utility + +commit fee3fd5e1559748a7e008b50edba6c56e1986036 +Author: Paul Nasrat +Date: Wed Mar 14 14:54:26 2007 +0000 + + Cleanup: remove xmlspec + +commit 9981e8bb3ccec64b34b1fca201364196c6a66a43 +Author: Paul Nasrat +Date: Wed Mar 14 14:47:08 2007 +0000 + + Cleanup - move gendiff to scripts subdir + +commit 82ec4b8dd75e534aa74ca3bd23a6202d64dae9fa +Author: Paul Nasrat +Date: Wed Mar 14 14:31:21 2007 +0000 + + Remove rpm 4.0.4 examples + +commit 6214fb8563464956b77464b6aca57400f8762e2b +Author: Paul Nasrat +Date: Tue Mar 13 10:32:40 2007 +0000 + + Fix potential segfault if no rpmlock_path defined (rh#231146) + +commit 9621964a56f05b0368e2dc21d835fbbde232dca3 +Author: Paul Nasrat +Date: Thu Feb 22 17:20:23 2007 +0000 + + Remove unused library + +commit de2d563c757c87836f3cac64bdbadcf1a45011c1 +Author: Paul Nasrat +Date: Thu Feb 22 14:17:02 2007 +0000 + + This fixes doxygen generation by removing a reference to a non-existent file + (rh#187714). + +commit 40d26f7bcb98b7d71b993cb9c3151db8855dc9ba +Author: Paul Nasrat +Date: Thu Feb 22 14:16:27 2007 +0000 + + This patch from Peter Bowen fixes rpm version comparison for strings with + trailing null segments (rh#178798). + +commit a465e0637a2630c167d0e5338922f2a26a7edf01 +Author: Paul Nasrat +Date: Thu Feb 22 14:15:30 2007 +0000 + + Make fcntl lock sensitive to --root (#151255) + +commit e315c18adc8ad05bfda164d481da08dbe33c9652 +Author: Paul Nasrat +Date: Thu Feb 22 12:27:42 2007 +0000 + + Fix netshared path comparison (rh#52725) fix by jbj. + +commit 69927942b1be3f496a187e4dbd8acb2501a1ee5b +Author: Paul Nasrat +Date: Thu Feb 22 12:26:56 2007 +0000 + + Fix from James Olin Oden for a scriptlet deadlock (#146549). + +commit d9cd2282fd98995c6ae1d35d06dd0e810d18ee8f +Author: Paul Nasrat +Date: Thu Feb 22 12:26:10 2007 +0000 + + Filter out incorrect perl(main) provides (rh#177960). + +commit 152c452c108c0d6a2a591077352f9a61f20eaa9c +Author: Paul Nasrat +Date: Thu Feb 22 12:22:56 2007 +0000 + + This patch synchronises the internal file sources. + +commit df0ad26d266c3cbb966ade76b55936af704fe1bc +Author: Paul Nasrat +Date: Thu Feb 22 12:21:11 2007 +0000 + + This patch ensures the rpm cronjob to record rpmpkgs uses the full path to + prevent potential PATH issues (rh#174211). + +commit f94c3f49cb8cb2268657947c802c4edab20bdbd5 +Author: Paul Nasrat +Date: Thu Feb 22 12:19:49 2007 +0000 + + This patch fixes up the calculation total install size when we have excluded + files in the manifest (rh#89661). + +commit 72a389737b9619b3aa01027fd96f647e3ec69ccb +Author: Paul Nasrat +Date: Thu Feb 22 12:17:26 2007 +0000 + + Fix popt CHARSET for various languages (#172155) + +commit 9de7baea6b2b9ade04e12b1e46fb20fa442c0b0a +Author: Paul Nasrat +Date: Thu Feb 22 12:16:04 2007 +0000 + + This fixes the db build to handle newer CFLAGS which can contain the long + option --param. + +commit c70602482da17345f54d2faa582e589ebf91c41b +Author: Paul Nasrat +Date: Thu Feb 22 12:14:43 2007 +0000 + + This patch fixes how Requires(pre,postun) is handled to bring it in line with + seperate Requires() lines (rh#155700). + +commit be96c4edb3d436bb5891be7e39d936c2d68e59b1 +Author: Paul Nasrat +Date: Thu Feb 22 12:09:46 2007 +0000 + + This patch fixes an off-by-one error in rpmalAllFileSatisfiesDepend() which + could lead to a segfault. + +commit 4eee7e354b2372cdc4c85f56934dfed9cfbcebec +Author: Paul Nasrat +Date: Thu Feb 22 12:00:22 2007 +0000 + + Re-enable fileconflicts + This patch re-enables fileconflicts by default (rh#151609). + +commit 2a3e33e962cccad1e46714479f17e7211270dd3a +Author: Paul Nasrat +Date: Thu Feb 22 11:57:46 2007 +0000 + + Disable hkp lookup by default + This patch turns off RPM's hkp lookup by default. Having this on by default + caused heavy load on the keyservers. + +commit 547b1b5d76a2dda015e7fdc60f027443149388a9 +Author: Paul Nasrat +Date: Fri Feb 16 17:42:02 2007 +0000 + + Ignore popt tarball + +commit 3afd57b55d7ccd182e9752f5b25d74429eb2676a +Author: Paul Nasrat +Date: Fri Feb 16 17:38:43 2007 +0000 + + Remove cvs based archive target + +commit 81841dc6ba6640f1e98d69eb312d17cdfd455fed +Author: Paul Nasrat +Date: Fri Feb 16 17:36:26 2007 +0000 + + Remove some cvs targets + +commit b6733cac778db11ed984ae1f6826221b22bcfdf2 +Author: Paul Nasrat +Date: Fri Feb 16 17:33:43 2007 +0000 + + Remove reference to sqlite + +commit 73eb6058b860089e9a4e45e9921e6eb5d2e3091d +Author: Paul Nasrat +Date: Fri Feb 16 17:20:09 2007 +0000 + + Remove wraptastic.org url from spec + +commit 578e7591575246b6f97a710d9e4f35bc3e0a1654 +Author: Paul Nasrat +Date: Fri Feb 16 17:18:50 2007 +0000 + + Point to correct mailing list + James Bowes + +commit 3a3ad1591292b7ecde4b94bd8be214ce216f20d1 +Author: Paul Nasrat +Date: Fri Feb 16 16:31:40 2007 +0000 + + Add hgignore for clean hg status following build + +commit a13bfd1be5fd07c9007369ebc0c8377dbd99ace9 +Author: Paul Nasrat +Date: Fri Feb 16 16:27:54 2007 +0000 + + Allow build without the neon library. + Resurrects old httpOpen code from rpm-4.1.1. + Building without neon means no webdav file uploads, though. + Michael Schroeder + +commit 04019761ac96654bb517f2972a3240ad74c69d58 +Author: Paul Nasrat +Date: Fri Feb 16 16:26:41 2007 +0000 + + Don't exit on differing autotools. + +commit 955ed0bace80c7ac4643b13fdc2d5e694472b1c7 +Author: Paul Nasrat +Date: Fri Feb 16 16:25:20 2007 +0000 + + Remove internal zlib + +commit 5fde01b1e0e75d13515d1c3819cfe369903c20e5 +Author: Paul Nasrat +Date: Fri Feb 16 16:25:10 2007 +0000 + + Remove internal neon + +commit 41fc8a0cdcc2589f12ec28e6d0cfbae0bfdfb41a +Author: Paul Nasrat +Date: Fri Feb 16 16:24:52 2007 +0000 + + Remove internal sqlite + +commit 2225a3db62f3c334b3f73cd6d5c49685b0f52a30 +Author: Paul Nasrat +Date: Fri Feb 16 16:24:26 2007 +0000 + + Remove mvista dir from tree + +commit 80700b231e87d353c01d91b8d8bf2ed656d09c3d +Author: Paul Nasrat +Date: Fri Feb 16 16:24:16 2007 +0000 + + Remove lsbpkgchk from tree + +commit d12a7441fc14b9b1802ca7b4e288a49f4484351d +Author: Paul Nasrat +Date: Fri Feb 16 16:23:54 2007 +0000 + + Remove internal librsync + +commit 564a43147481ab23087fd756dc67f0a38371da96 +Author: Paul Nasrat +Date: Fri Feb 16 16:22:20 2007 +0000 + + Remove internal libelf + +commit 3c7ee3db5bb508e5d39974d65d13ca001f490186 +Author: Paul Nasrat +Date: Fri Feb 16 16:21:18 2007 +0000 + + Remove internal expat + +commit 9dcf0798fd7bd90cd8349359e313d9d564639161 +Author: Paul Nasrat +Date: Fri Feb 16 16:21:00 2007 +0000 + + Remove internal elfutils + +commit 1302fd60fc65fc3bd71c301c6d06e3505cdcf95e +Author: Paul Nasrat +Date: Fri Feb 16 16:20:02 2007 +0000 + + Remove internal beecrypt + +commit 29f8a24e89a3daaa7b325faa5bcb44cd0c2cb9b8 +Author: Paul Nasrat +Date: Thu Feb 15 11:37:17 2007 +0000 + + Fix parsing for parenthesis + Michael Schroeder + +commit 850fadec1773fd1ae853a046557240fc52a9ba83 +Author: Paul Nasrat +Date: Thu Feb 15 11:25:34 2007 +0000 + + Remove autogenerated file from elfutils + +commit c8d2911445537c3ef011be1856e81229dd897b0b +Author: pauln@enki.eridu +Date: Thu Jan 4 14:44:50 2007 +0000 + + Remove autogenerated file + +commit 71ddb958270c657d075c5838e82fd90c0f059a4a +Author: pauln@enki.eridu +Date: Thu Jan 4 14:41:34 2007 +0000 + + Remove autogenerated file + +commit ad9562edf95465d52a265f4bf44fdef7bfbfb7eb +Author: Paul Nasrat +Date: Thu Dec 14 11:40:03 2006 -0500 + + fix tags + +commit 4a1bae5ebbdbf3c3fbf65dbb0008fb4fdc8757a7 +Author: Paul Nasrat +Date: Thu Dec 14 11:39:35 2006 -0500 + + Add tags + +commit 8cdc487c74fb99357cf8bc44d7a671f264b611db +Author: jbj +Date: Thu Jul 21 01:47:28 2005 +0000 + + - release rpm-4.4.2. + + CVS patchset: 7919 + CVS date: 2005/07/21 01:47:28 + +commit 541b65137170d5ec746fd5271d7bbc83f9daf4b7 +Author: jbj +Date: Thu Jul 21 01:45:44 2005 +0000 + + - fix: magic_file() closes stdin when given directory path. + - use perldeps.pl, phase out perl.{req,prov} (again). + - document __vsflags (#147489). + + CVS patchset: 7918 + CVS date: 2005/07/21 01:45:44 + +commit 24ad66e595161ad5d648a4c9e0a157fd848ff848 +Author: jbj +Date: Sun Jul 17 18:58:29 2005 +0000 + + Revert to using perl.{req,prov} instead of perldeps.pl. + + CVS patchset: 7910 + CVS date: 2005/07/17 18:58:29 + +commit f772f6ff5ebbd331fba6e42d1d2d96dfd88ab24e +Author: jbj +Date: Sun Jul 17 18:34:44 2005 +0000 + + Sanity. + + CVS patchset: 7909 + CVS date: 2005/07/17 18:34:44 + +commit 65a16730751e520c692fb5d13d911d89eed2a1e9 +Author: jbj +Date: Sun Jul 17 15:29:55 2005 +0000 + + Don't bother packaging silly symlinks. + + CVS patchset: 7908 + CVS date: 2005/07/17 15:29:55 + +commit fe59a3bb4e3b96aed505c8d371b35a7ec7f430cb +Author: jbj +Date: Sun Jul 17 14:58:08 2005 +0000 + + Ooops. + + CVS patchset: 7907 + CVS date: 2005/07/17 14:58:08 + +commit cc74f6a27da156d3ef14aae70e7a6fecb05d9ceb +Author: jbj +Date: Sun Jul 17 14:55:56 2005 +0000 + + - upgrade to file-4.14 internal. + + CVS patchset: 7906 + CVS date: 2005/07/17 14:55:56 + +commit ffe774c49327139c93031d0b11c0b69787f08868 +Author: jbj +Date: Sat Jul 16 16:37:06 2005 +0000 + + - upgrade to zlib-1.2.2.4 internal. + - macosx: avoid minigzip build failures. + + CVS patchset: 7894 + CVS date: 2005/07/16 16:37:06 + +commit c1afde7db586b58ad8e1ccf8d3825130f3babf14 +Author: jbj +Date: Fri Jul 15 15:08:34 2005 +0000 + + - permit scriptlet includes from builddir for spec files w/o %setup. + + CVS patchset: 7889 + CVS date: 2005/07/15 15:08:34 + +commit e7cb28cfe725d47aa64dcb6bf41b878b139dbd99 +Author: jbj +Date: Thu Jul 14 15:50:30 2005 +0000 + + Typo. + + CVS patchset: 7888 + CVS date: 2005/07/14 15:50:30 + +commit b75e3e5f5100567c524c95ef8866795e6d798874 +Author: jbj +Date: Thu Jul 14 11:08:25 2005 +0000 + + Typo. + + CVS patchset: 7887 + CVS date: 2005/07/14 11:08:25 + +commit 99b8ed77f5a91c86d5dabb1eae49c864fc0e7564 +Author: jbj +Date: Wed Jul 13 16:50:30 2005 +0000 + + Typo's. + + CVS patchset: 7886 + CVS date: 2005/07/13 16:50:30 + +commit cb1d12af9057536c5d1625b3092abf4bbe1a8fb1 +Author: jbj +Date: Wed Jul 13 12:11:00 2005 +0000 + + Added from bugzilla #153935. + + CVS patchset: 7885 + CVS date: 2005/07/13 12:11:00 + +commit 54338346440f6b7552e232fa5179eb51b60a851a +Author: jbj +Date: Wed Jul 13 12:03:04 2005 +0000 + + Added from bugzilla #153936. + + CVS patchset: 7884 + CVS date: 2005/07/13 12:03:04 + +commit 1f35cde9cadf21446f2fd2dc57ce7dbd2e942df1 +Author: jbj +Date: Wed Jul 13 11:28:29 2005 +0000 + + - avoid '?' for zero length file mmap failure doing md5 (#159405). + + CVS patchset: 7883 + CVS date: 2005/07/13 11:28:29 + +commit ab6ca22fcd881d96c78e79a43d067995caa31a10 +Author: jbj +Date: Wed Jul 13 11:21:28 2005 +0000 + + - permit zlib in rpm to be built with make -j (#159404). + + CVS patchset: 7882 + CVS date: 2005/07/13 11:21:28 + +commit 2a16343146d390ff3ee8f79c1e072f456cf5d70a +Author: jbj +Date: Wed Jul 13 11:15:16 2005 +0000 + + - fix: initialize variables used in debug msg (#160458). + + CVS patchset: 7881 + CVS date: 2005/07/13 11:15:16 + +commit d66903fe9c842ec5cb6bb3cf8f27e39c40420309 +Author: jbj +Date: Wed Jul 13 11:09:39 2005 +0000 + + - fix: find-debuginfo.sh kernel voo-doo tweaks (#159346). + + CVS patchset: 7880 + CVS date: 2005/07/13 11:09:39 + +commit 51b32ae1301f6b862fab83bfebb574a08defbc77 +Author: jbj +Date: Wed Jul 13 10:47:56 2005 +0000 + + Add porting sanity check (#159024). + + CVS patchset: 7879 + CVS date: 2005/07/13 10:47:56 + +commit 5d98fa4d18be7e2502d695da0c165e2ff605f2c5 +Author: jbj +Date: Wed Jul 13 10:40:08 2005 +0000 + + - fix: permit sqlite3 rpmdb with chroot (#159424). + + CVS patchset: 7878 + CVS date: 2005/07/13 10:40:08 + +commit c9a99c833cd466f2bf8bb1be829d8add56667d11 +Author: jbj +Date: Wed Jul 13 10:34:15 2005 +0000 + + - fix: make sqlite3 rpmdb endian-neutral (#159425). + + CVS patchset: 7877 + CVS date: 2005/07/13 10:34:15 + +commit f7de2d2424b38311ba7340b495db5e3b2670146b +Author: jbj +Date: Wed Jul 13 10:16:06 2005 +0000 + + - use perldeps.pl, phase out perl.{req,prov} (#161921). + + CVS patchset: 7876 + CVS date: 2005/07/13 10:16:06 + +commit ae02fe2242a0f50262f435f41add7277fa5098b6 +Author: jbj +Date: Wed Jul 13 10:03:31 2005 +0000 + + - *_terminate_build macros set per-pkg, not per-invocation (#161081). + + CVS patchset: 7875 + CVS date: 2005/07/13 10:03:31 + +commit 6aed9338a64e5b7904855ac88c8a43fda48b278f +Author: jbj +Date: Wed Jul 13 09:52:45 2005 +0000 + + - fix: % at end-of-line overflow (#161091). + + CVS patchset: 7874 + CVS date: 2005/07/13 09:52:45 + +commit ae4725e37f5472c0610d9cfb85a1d916d89f164f +Author: jbj +Date: Wed Jul 13 09:23:07 2005 +0000 + + - fix: java compiled with -O0 confuses debugedit (#161722). + + CVS patchset: 7873 + CVS date: 2005/07/13 09:23:07 + +commit 378fa2a5acc1acac4da88dacba76644ea331bad4 +Author: jbj +Date: Tue Jul 12 11:29:05 2005 +0000 + + - added brp-java-gcjcompile build helper. + + CVS patchset: 7872 + CVS date: 2005/07/12 11:29:05 + +commit a237ec26e0ac5e2442c96803c98f85bf7df33baf +Author: jbj +Date: Tue Jul 12 10:57:09 2005 +0000 + + - added CVSId: tag and SVNId: alias (#162807). + + CVS patchset: 7871 + CVS date: 2005/07/12 10:57:09 + +commit 041411f15195b7331339b86f20c75c6514bcf458 +Author: jbj +Date: Tue Jul 12 10:32:16 2005 +0000 + + - updated de.po (#162756). + + CVS patchset: 7869 + CVS date: 2005/07/12 10:32:16 + +commit c5fae2e870f71cd09716b945dcac58799707be30 +Author: jbj +Date: Tue Jul 12 09:53:31 2005 +0000 + + - updated de.po (#162756). + + CVS patchset: 7868 + CVS date: 2005/07/12 09:53:31 + +commit ed528e79dc56a7d3fef4a61c5031b83caf3e6f6e +Author: jbj +Date: Sun Jul 10 17:22:50 2005 +0000 + + Don't crap out with missing dependencies. + + CVS patchset: 7867 + CVS date: 2005/07/10 17:22:50 + +commit 42ddc4777310e2353e447a38ef6c482baaec4772 +Author: jbj +Date: Mon Jul 4 20:10:07 2005 +0000 + + Change file list to handle China's politics. + + CVS patchset: 7866 + CVS date: 2005/07/04 20:10:07 + +commit 2e857d1fc0456a06b440d4dfa1e0e6b00be43ae6 +Author: jbj +Date: Mon Jul 4 19:02:58 2005 +0000 + + - rebuild to start the rpm-4.4.2 release gears turning. + + CVS patchset: 7865 + CVS date: 2005/07/04 19:02:58 + +commit 0b42a940c169bdc449067b04162e77537031da9d +Author: jbj +Date: Sat Jul 2 18:54:08 2005 +0000 + + GCC fidgets, add parentheses around timedRead vector. + + CVS patchset: 7864 + CVS date: 2005/07/02 18:54:08 + +commit 441733afe1680fa3d53aae2c7050293b03e9643d +Author: jbj +Date: Sat Jul 2 18:53:12 2005 +0000 + + Correct typo. + + CVS patchset: 7863 + CVS date: 2005/07/02 18:53:12 + +commit 7320bab1df56d88cb9deb267b1409a6c181aea12 +Author: jbj +Date: Mon Jun 6 23:35:24 2005 +0000 + + XXX Really old packages have HEADER_IMAGE, not HEADER_SIGNATURES. + + CVS patchset: 7861 + CVS date: 2005/06/06 23:35:24 + +commit 6a72073729e292b15cb0b36b68696bb6219f380b +Author: jbj +Date: Mon May 30 06:40:54 2005 +0000 + + Permit file names with spaces. + + CVS patchset: 7858 + CVS date: 2005/05/30 06:40:54 + +commit 48e63cdacf53807914bf8514a84fd2c8883a6c95 +Author: pauln +Date: Tue May 24 15:35:39 2005 +0000 + + remove old trans + + CVS patchset: 7856 + CVS date: 2005/05/24 15:35:39 + +commit fb7f36eb3544d0964284443e02e4dc4e90aebc60 +Author: pauln +Date: Tue May 24 14:33:10 2005 +0000 + + Update translations + + CVS patchset: 7855 + CVS date: 2005/05/24 14:33:10 + +commit 77ec466ecb3459d6888d366c0537b2b0b110ce20 +Author: pauln +Date: Thu May 19 17:26:53 2005 +0000 + + fix buildarchtranslate for ppc64 + + CVS patchset: 7854 + CVS date: 2005/05/19 17:26:53 + +commit 8a78376368a1f068755f85a7f1cd0ce829758a69 +Author: pauln +Date: Mon May 16 12:39:45 2005 +0000 + + update po + + CVS patchset: 7852 + CVS date: 2005/05/16 12:39:45 + +commit d3afe2c94cc07162ce87a8bfe0dd1fa28287e7a0 +Author: pauln +Date: Wed May 11 16:11:27 2005 +0000 + + scriptlet signal failure message + + CVS patchset: 7851 + CVS date: 2005/05/11 16:11:27 + +commit 48d3465bbac9fcaa2863206ae368e3d7183fc344 +Author: jbj +Date: Wed May 4 21:02:59 2005 +0000 + + FAQ #24 conformant versions. + + CVS patchset: 7848 + CVS date: 2005/05/04 21:02:59 + +commit f01c74a5b4206804938171e09d8b9f4fc416851a +Author: jbj +Date: Mon Apr 11 11:43:25 2005 +0000 + + Nuke _rpmdb.c. + + CVS patchset: 7846 + CVS date: 2005/04/11 11:43:25 + +commit 1c40b6d1bea019b9dd05a8f6ae86a331156b2108 +Author: jbj +Date: Sun Mar 27 21:55:32 2005 +0000 + + Change allocTempBuffer() handling. + + CVS patchset: 7841 + CVS date: 2005/03/27 21:55:32 + +commit 634678115f0b30ee2ac869d3e9f4307137f813a0 +Author: jbj +Date: Sun Mar 27 18:42:26 2005 +0000 + + Iterate over "select key from Packages" result. + + CVS patchset: 7840 + CVS date: 2005/03/27 18:42:26 + +commit 0a5677a0114c75405949f4046b66c18bc611681e +Author: jbj +Date: Sat Mar 26 21:07:30 2005 +0000 + + Gather all keys for iterator. + + CVS patchset: 7839 + CVS date: 2005/03/26 21:07:30 + +commit d779a6a7f81214f516bc21ed5ab88c5fa5b330e6 +Author: jbj +Date: Fri Mar 25 17:30:00 2005 +0000 + + MDK patch at #108778. + + CVS patchset: 7837 + CVS date: 2005/03/25 17:30:00 + +commit 71de90d88e9203f29f35002660f18158c58792a2 +Author: jbj +Date: Wed Mar 23 21:20:22 2005 +0000 + + Handle int8 and int16 indices correctly. + + CVS patchset: 7836 + CVS date: 2005/03/23 21:20:22 + +commit fddaa8e68ba5618b612ea490026a919a5a065c3f +Author: jbj +Date: Wed Mar 23 18:19:35 2005 +0000 + + rip out compile/bind/exec methods, wrong approach to speeding up sql. + configure sqlite dbi in the usual way by calling dbiNew(). + + CVS patchset: 7835 + CVS date: 2005/03/23 18:19:35 + +commit e2499f3cadd4e0e1438eefcd3827093e0107523f +Author: jbj +Date: Wed Mar 23 16:29:32 2005 +0000 + + Refactor sql_step assertion. + + CVS patchset: 7834 + CVS date: 2005/03/23 16:29:32 + +commit 73bdcda3bd73d94e26c17fb40a0f36854f71d13b +Author: jbj +Date: Wed Mar 23 14:42:00 2005 +0000 + + More fiddles. + + CVS patchset: 7833 + CVS date: 2005/03/23 14:42:00 + +commit 14badd0a70db4ed1442e72b4a22f4a9a9064be58 +Author: jbj +Date: Sun Mar 20 18:52:14 2005 +0000 + + Simplify. + + CVS patchset: 7832 + CVS date: 2005/03/20 18:52:14 + +commit 48ddc57fe82c06c659edab2a7172fe7bf372e8ef +Author: jbj +Date: Sun Mar 20 18:13:36 2005 +0000 + + Make SQL_DB and DB identical structures in dbi->dbi_db. + + CVS patchset: 7831 + CVS date: 2005/03/20 18:13:36 + +commit 4b2c3b1ba50c9e5d9d89f24298e80369b4a7b5c6 +Author: jbj +Date: Sun Mar 20 17:53:17 2005 +0000 + + Make SCP_t and DBC identical structures. + + CVS patchset: 7830 + CVS date: 2005/03/20 17:53:17 + +commit 0546898531ec5a5db4a198cb68f8b16debaeacc0 +Author: jbj +Date: Sun Mar 20 17:37:47 2005 +0000 + + Simplify db->app_private handling. + + CVS patchset: 7829 + CVS date: 2005/03/20 17:37:47 + +commit 06b322efe5f3b1f9e199b6ef48d1b497e0564ef0 +Author: jbj +Date: Sun Mar 20 16:33:30 2005 +0000 + + Remove sql cursor chaining. + + CVS patchset: 7828 + CVS date: 2005/03/20 16:33:30 + +commit 7154555008deb164c8a14ffe0573554dc2ecb25b +Author: jbj +Date: Sun Mar 20 15:53:26 2005 +0000 + + Check that dbcursor is always non-null. + + CVS patchset: 7827 + CVS date: 2005/03/20 15:53:26 + +commit 0f21a8eda09b5ff120243f882b558327aaa2ef71 +Author: jbj +Date: Sat Mar 19 20:07:12 2005 +0000 + + Handle %dev markers more gracefully. + + CVS patchset: 7826 + CVS date: 2005/03/19 20:07:12 + +commit 59f63dfdccccb00b201c3c6b984120166233e80e +Author: jbj +Date: Sat Mar 19 15:17:29 2005 +0000 + + Disable synchronous writes. + + CVS patchset: 7825 + CVS date: 2005/03/19 15:17:29 + +commit b17779435e6978c3870ad65142f8597203c13e27 +Author: jbj +Date: Fri Mar 18 22:47:40 2005 +0000 + + fix: RPM_BIN_TYPE bound to wrong pos. + Use SQLITE_STATIC rather than SQLITE_TRANSIENT. + + CVS patchset: 7824 + CVS date: 2005/03/18 22:47:40 + +commit 46617a98afdd2f238d2e93a4982db1611cbeac17 +Author: jbj +Date: Fri Mar 18 21:45:07 2005 +0000 + + Repair -qa. + + CVS patchset: 7823 + CVS date: 2005/03/18 21:45:07 + +commit 6abb0b372c2cf8a08b1e0b7f97aa600c352da701 +Author: jbj +Date: Fri Mar 18 16:02:13 2005 +0000 + + Sanity. + + CVS patchset: 7822 + CVS date: 2005/03/18 16:02:13 + +commit 097688c5f212abd3c7030fcfd119b991f56d7846 +Author: jbj +Date: Thu Mar 17 23:35:14 2005 +0000 + + Another line of spew under if (_debug) test. + + CVS patchset: 7821 + CVS date: 2005/03/17 23:35:14 + +commit 51b429fd63401a51d7156b4fb71a018d049f8aa8 +Author: jbj +Date: Thu Mar 17 23:16:30 2005 +0000 + + FUnctiona --rebuilddb. Add if (_debug) to modulate the spew. + + CVS patchset: 7820 + CVS date: 2005/03/17 23:16:30 + +commit be4aa28834fc7f1b37d8f13437d5eaf469d438dc +Author: jbj +Date: Thu Mar 17 19:54:37 2005 +0000 + + Splint fiddles. + + CVS patchset: 7819 + CVS date: 2005/03/17 19:54:37 + +commit 4c63745fe818b616feb3395c953ac1833d65b551 +Author: jbj +Date: Thu Mar 17 17:12:26 2005 +0000 + + Add tagType(). + + CVS patchset: 7818 + CVS date: 2005/03/17 17:12:26 + +commit a839baba3fb30d3d37c25310358747319bd50692 +Author: jbj +Date: Thu Mar 17 16:51:02 2005 +0000 + + Rip out encode/decode entirely. Almost certainly nothing works ... + + CVS patchset: 7817 + CVS date: 2005/03/17 16:51:02 + +commit dccc6cc43b47a1aeb06a66d9afd5e4576763c97d +Author: jbj +Date: Thu Mar 17 09:33:59 2005 +0000 + + Consolidate elements into SCP_t (definite brokenness here). + + CVS patchset: 7816 + CVS date: 2005/03/17 09:33:59 + +commit ff58b52867943f6c7643b1f28f0dc207c720e7a1 +Author: jbj +Date: Thu Mar 17 02:44:51 2005 +0000 + + Preliminary attempt at sql_get_table clone that understands blobs and sizes. + + CVS patchset: 7815 + CVS date: 2005/03/17 02:44:51 + +commit 931a32c210ee3ae49831de4e52088c68d9672db5 +Author: jbj +Date: Wed Mar 16 22:42:08 2005 +0000 + + First hacks at using sqlite3_step() instead of sqlite3_exec(). + RPMTAG_NAME uses unencoded blob for rpmdb join keys, but retrieval + has hotwired length (and so broken). + + CVS patchset: 7814 + CVS date: 2005/03/16 22:42:08 + +commit 07dba5c4fe50804552839e1661f163350cc6d03e +Author: jbj +Date: Wed Mar 16 18:34:40 2005 +0000 + + Change schema to get rid of most encode/decode operations. More to do ... + + CVS patchset: 7813 + CVS date: 2005/03/16 18:34:40 + +commit 1dc1276dba6738db124eb0aebdb24b35c1df7263 +Author: jbj +Date: Tue Mar 15 21:50:49 2005 +0000 + + Start sqlite3 fixing. + + CVS patchset: 7812 + CVS date: 2005/03/15 21:50:49 + +commit 7cf8f9004cd831d70722cf8257ea4e81502aaf96 +Author: jbj +Date: Tue Mar 15 18:30:38 2005 +0000 + + Ancient history. + + CVS patchset: 7811 + CVS date: 2005/03/15 18:30:38 + +commit c79f0d930ee1949de9c56b3c5cde68c64d5e521a +Author: jbj +Date: Mon Mar 14 10:30:44 2005 +0000 + + Sanity. + + CVS patchset: 7810 + CVS date: 2005/03/14 10:30:44 + +commit 9697810e39019e4929d742fc1d94e4e917dc6b7f +Author: jbj +Date: Sun Mar 13 22:13:25 2005 +0000 + + Permit build with extternal file and libmagic. + + CVS patchset: 7808 + CVS date: 2005/03/13 22:13:25 + +commit 9be7cc33c1de67e8cf2a1f9897e876c3f25d023d +Author: jbj +Date: Sun Mar 13 02:11:38 2005 +0000 + + Sanity. + + CVS patchset: 7806 + CVS date: 2005/03/13 02:11:38 + +commit 1a42537124a5e6804821ddb17a63a0ee86724b5a +Author: jbj +Date: Sun Mar 13 01:56:50 2005 +0000 + + - permit RSA/{sha1,sha256,sha384,sha512} signature verification. + + CVS patchset: 7805 + CVS date: 2005/03/13 01:56:50 + +commit 42981d3ccd4dba420beead451a658c7487066d18 +Author: jbj +Date: Sun Mar 13 01:39:19 2005 +0000 + + Add support for RSA on sha1/sha256/sha384/sha512. + + CVS patchset: 7804 + CVS date: 2005/03/13 01:39:19 + +commit 48972a87c8ce5f87464e54379e56cf0fd9573dc7 +Author: jbj +Date: Sun Mar 13 01:15:37 2005 +0000 + + Add support for sha256/sha384/sha512 (if available.). + Update beecrypt version. + + CVS patchset: 7803 + CVS date: 2005/03/13 01:15:37 + +commit d9499c8bdb77c101f9b127848111235a61f9a5ea +Author: jbj +Date: Sat Mar 12 16:36:28 2005 +0000 + + Don't dump pgp pkt spewage. + + CVS patchset: 7802 + CVS date: 2005/03/12 16:36:28 + +commit e1fbc0615bfad2e55b241d746dfb29e72cbf9a01 +Author: jbj +Date: Sat Mar 12 16:00:15 2005 +0000 + + Identify header RSA signatures correctly. + + CVS patchset: 7801 + CVS date: 2005/03/12 16:00:15 + +commit 63864b6a281f715df8f87da1f0d98746d0090ac9 +Author: jbj +Date: Sat Mar 12 15:16:42 2005 +0000 + + Add hdrmd5ctx for header-only md5 rsa/md5 signatures. + + CVS patchset: 7800 + CVS date: 2005/03/12 15:16:42 + +commit 0fd7021de91c63fba5ed1b81dde5ab22eb12a4c3 +Author: jbj +Date: Wed Mar 9 13:22:48 2005 +0000 + + - permit gpg to be used for RSA/MD5 signatures. + - permit RSA key sizes larger than 1024 bits. + + CVS patchset: 7799 + CVS date: 2005/03/09 13:22:48 + +commit 1166cecd963d3597bdc445e8d5c5e54bbb18b5a0 +Author: jbj +Date: Mon Mar 7 23:52:44 2005 +0000 + + Start removing implied gpg==dsa, pgp==rsa. + Add PKCS1 ASN prefixes for RSA other than MD5. + + CVS patchset: 7797 + CVS date: 2005/03/07 23:52:44 + +commit b809c5837e73ab1793ab381f9a984efd604274b4 +Author: jbj +Date: Mon Mar 7 22:51:18 2005 +0000 + + fix: inverted RSA parameters on rsavrfy(). + + CVS patchset: 7795 + CVS date: 2005/03/07 22:51:18 + +commit d7ba4879997c36403746f611c888bbfc428fa5ef +Author: jbj +Date: Mon Mar 7 14:00:49 2005 +0000 + + R++. + + CVS patchset: 7789 + CVS date: 2005/03/07 14:00:49 + +commit ffea31644e113d557c4ec012fc3117547074f3f4 +Author: jbj +Date: Mon Mar 7 14:00:18 2005 +0000 + + Casts on lvalues are no longer permitted by gcc4.0. + + CVS patchset: 7788 + CVS date: 2005/03/07 14:00:18 + +commit 9dc1b3bb80c37d45d9235002b084be6743f1d774 +Author: jbj +Date: Mon Mar 7 13:57:25 2005 +0000 + + Remove autocrap generated cruft. + + CVS patchset: 7787 + CVS date: 2005/03/07 13:57:25 + +commit 8a23189efa9af800490d59e3a582be785b85e129 +Author: jbj +Date: Thu Mar 3 11:47:52 2005 +0000 + + Permit changelog timestamp back to 1990. + + CVS patchset: 7785 + CVS date: 2005/03/03 11:47:52 + +commit 9d946f4129982a54c480f6c47f883576ddf64704 +Author: jbj +Date: Sun Feb 20 14:20:11 2005 +0000 + + - updated sv.po . + + CVS patchset: 7778 + CVS date: 2005/02/20 14:20:11 + +commit 094e57ce7127374375533093b8b60764de8359a0 +Author: jbj +Date: Thu Feb 17 02:36:37 2005 +0000 + + - rework configure.ac et al to lose internal library baggage flexibly. + + CVS patchset: 7775 + CVS date: 2005/02/17 02:36:37 + +commit ba7be476a7db37d1051aa7cb13da98b57f4fceab +Author: jbj +Date: Wed Feb 16 20:33:46 2005 +0000 + + rpm-4.4.2-0.3. + + CVS patchset: 7774 + CVS date: 2005/02/16 20:33:46 + +commit f94168ba0ec1d74cfdb76c05ef8821fa0bc524b9 +Author: jbj +Date: Wed Feb 16 20:04:28 2005 +0000 + + - remove remnant -I/opt/local hacks, --prefix=/usr is recommended. + + CVS patchset: 7773 + CVS date: 2005/02/16 20:04:28 + +commit d27e3e835d6f202c3e564603302d2881eb0c525b +Author: jbj +Date: Wed Feb 16 19:23:53 2005 +0000 + + Bye-bye! + + CVS patchset: 7772 + CVS date: 2005/02/16 19:23:53 + +commit 055323fb1baf979295cb2b4c9687b85409466333 +Author: jbj +Date: Wed Feb 16 19:22:32 2005 +0000 + + Remove rpmdb and poptmodule sources. + + CVS patchset: 7771 + CVS date: 2005/02/16 19:22:32 + +commit c94624a03cf7945ce5b20048b0cc751f654b9bc1 +Author: jbj +Date: Wed Feb 16 19:05:36 2005 +0000 + + - sqlite3: update encode/decode from sqlite-2.8.16. + - add --xml popt alias for query modes. + - remove _rpmdb now that python2.[34] are commonly available. + + CVS patchset: 7770 + CVS date: 2005/02/16 19:05:36 + +commit 4983ab74e734e93a20e05b0f785490f50d28fda3 +Author: jbj +Date: Wed Feb 16 16:21:35 2005 +0000 + + Update to sqlite-3.1.2. + + CVS patchset: 7769 + CVS date: 2005/02/16 16:21:35 + +commit ce642a9360c6798c9771c640c13250979ac0b02a +Author: jbj +Date: Wed Feb 16 03:45:54 2005 +0000 + + fix: restore longer scope for sqlite3 data (which frees on cClose). + + CVS patchset: 7767 + CVS date: 2005/02/16 03:45:54 + +commit cfd6fb526d0bd5692309590a5b27cb5f36bd53ff +Author: jbj +Date: Mon Feb 14 02:19:04 2005 +0000 + + - start 4.4.2 devel. + + CVS patchset: 7765 + CVS date: 2005/02/14 02:19:04 + +commit 6bb128c5f41093b47d3409c065c0a562b343c198 +Author: jbj +Date: Mon Feb 14 01:34:12 2005 +0000 + + - don't build with sqlite3 if is missing. + + CVS patchset: 7764 + CVS date: 2005/02/14 01:34:12 + +commit 128ae6695d48ca3a919682233716267cb90d8dd1 +Author: jbj +Date: Sun Feb 13 20:39:50 2005 +0000 + + - don't classify files in /dev (#146623). + + CVS patchset: 7763 + CVS date: 2005/02/13 20:39:50 + +commit 5af47d7379257649bb7f7d2aeba6568122745cdb +Author: jbj +Date: Sun Feb 13 04:28:53 2005 +0000 + + Build rpm-4.4.1-0.24. + + CVS patchset: 7762 + CVS date: 2005/02/13 04:28:53 + +commit d0615e9641047afab2706be1ce7537e35c3c6242 +Author: jbj +Date: Sun Feb 13 03:01:09 2005 +0000 + + - macosx: change to --prefix=/usr rather than /opt/local. + - use waitpid rather than SIGCHLD reaper. + - rip out DB_PRIVATE revert if not NPTL, it's not the right thing to do. + + CVS patchset: 7761 + CVS date: 2005/02/13 03:01:09 + +commit 66a6ab533f9f0a293a049dd7f154cedfc614a331 +Author: jbj +Date: Sat Feb 12 19:03:32 2005 +0000 + + - zlib: uniqify certain symbols to prevent name space pollution. + - macosx: include so that python sees the u_char typedef. + + CVS patchset: 7760 + CVS date: 2005/02/12 19:03:32 + +commit 4bfb4d6f3fdeab36404947a2a63d88aa70f48760 +Author: jbj +Date: Sat Feb 12 14:12:33 2005 +0000 + + - permit build scriptlet interpreters to be individually overridden. + + CVS patchset: 7759 + CVS date: 2005/02/12 14:12:33 + +commit 704d36f484c546eea1f0c72f7992db223a98ffc0 +Author: jbj +Date: Thu Feb 10 09:04:05 2005 +0000 + + - perform callbacks as always (#147537). + + CVS patchset: 7757 + CVS date: 2005/02/10 09:04:05 + +commit 85bdd0ae7c9f9ee420fa42541bd3a795b8184c76 +Author: jbj +Date: Tue Feb 8 17:15:10 2005 +0000 + + Update bytesRemain iff R/W operation. + + CVS patchset: 7746 + CVS date: 2005/02/08 17:15:10 + +commit 2b6fc07fe7aed1c9452d41494994f8b35f44693a +Author: jbj +Date: Mon Feb 7 23:04:28 2005 +0000 + + Build requires bzip2-devel, not bzip2 (#124925). + + CVS patchset: 7743 + CVS date: 2005/02/07 23:04:28 + +commit ecc7ba5ff1328d7b80fc4a481a74854cf6b3ae74 +Author: jbj +Date: Sat Feb 5 23:53:12 2005 +0000 + + rpm-4.4.1-0.18 sanity. + + CVS patchset: 7742 + CVS date: 2005/02/05 23:53:12 + +commit af7d1a9034ea08e9d730c066f92146468e07d980 +Author: jbj +Date: Thu Feb 3 23:05:59 2005 +0000 + + - discover and use getmntinfo if present. + + CVS patchset: 7741 + CVS date: 2005/02/03 23:05:59 + +commit 087bd712534fc8055d8bbc2cdbafc3e5d4f85783 +Author: jbj +Date: Thu Feb 3 17:28:42 2005 +0000 + + - run-time endian test rather than chasing (#146752). + + CVS patchset: 7740 + CVS date: 2005/02/03 17:28:42 + +commit 2a9a1c4cdb46e124a8d9c5994823ee3d87e5b749 +Author: jbj +Date: Thu Feb 3 17:28:04 2005 +0000 + + Run-time endian test rather than chasing (#146752). + + CVS patchset: 7739 + CVS date: 2005/02/03 17:28:04 + +commit d32eae95624c06e0244275ef1b5461f90ea273c9 +Author: jbj +Date: Thu Feb 3 16:21:36 2005 +0000 + + Orphans. + + CVS patchset: 7738 + CVS date: 2005/02/03 16:21:36 + +commit 0935020492e29e5b31bc6254db784e54ab5b4910 +Author: jbj +Date: Wed Feb 2 18:47:42 2005 +0000 + + - fix: length of gpg V4 hash seed was incorrect (#146896). + - add support for V4 rfc-2440 signatures. + + CVS patchset: 7737 + CVS date: 2005/02/02 18:47:42 + +commit 7d8671172e6a02522f67fabd1def80b176789102 +Author: jbj +Date: Sat Jan 29 16:05:03 2005 +0000 + + Default MYPATH=":" instead when cros-compiling (#133573). + + CVS patchset: 7724 + CVS date: 2005/01/29 16:05:03 + +commit d9d8e5dddb838e37b3d5a55047a67581f9ff9621 +Author: jbj +Date: Fri Jan 28 20:25:01 2005 +0000 + + - python: force dbMatch() h# key to be 32 bit integer (#146477). + + CVS patchset: 7720 + CVS date: 2005/01/28 20:25:01 + +commit fadd9c8edb96946cb1d1dcf172f4109e2c4bcd35 +Author: jbj +Date: Fri Jan 28 06:36:29 2005 +0000 + + Revert glob/fnmatch/alloca uniqify on macosx for now. + + CVS patchset: 7717 + CVS date: 2005/01/28 06:36:29 + +commit ff752142178293a108f87559b770a101153a8cd1 +Author: jbj +Date: Fri Jan 28 02:17:08 2005 +0000 + + Remove unused _rpmlock_file. + + CVS patchset: 7716 + CVS date: 2005/01/28 02:17:08 + +commit cbf210254223680dbb0b10623fd6d3f91ca34a01 +Author: jbj +Date: Wed Jan 26 04:50:03 2005 +0000 + + - add missing #if defined(ENABLE_NLS) (#146184). + + CVS patchset: 7714 + CVS date: 2005/01/26 04:50:03 + +commit cd8de55c266c1b8f6cd213b5b4a4ad0041ffc73a +Author: jbj +Date: Wed Jan 26 04:05:34 2005 +0000 + + - move global /var/lock/rpm/transaction to dbpath. + - permit fcntl path to be configured through rpmlock_path macro. + + CVS patchset: 7712 + CVS date: 2005/01/26 04:05:34 + +commit 84d6a9cac5741df9043786bc5f951ad39794f51f +Author: jbj +Date: Tue Jan 25 05:24:40 2005 +0000 + + macosx/opendarwin hackery, take 1. + + CVS patchset: 7710 + CVS date: 2005/01/25 05:24:40 + +commit 80f64337af4881c51d7c5dcde60ffc8171f79e01 +Author: jbj +Date: Sun Jan 23 21:38:10 2005 +0000 + + Add public keys, ignore compile (opendarwin). + + CVS patchset: 7709 + CVS date: 2005/01/23 21:38:10 + +commit a5ced6cf05b54f0e4d4195a035b54418dac80b98 +Author: jbj +Date: Sun Jan 23 21:37:03 2005 +0000 + + Sanity. + + CVS patchset: 7708 + CVS date: 2005/01/23 21:37:03 + +commit 9e1bfe0af5fd0183f882f60ebbb670f867682425 +Author: jbj +Date: Sun Jan 23 20:44:57 2005 +0000 + + - blueprint rpm-4_4 and HEAD to minimize diff spew. + + CVS patchset: 7706 + CVS date: 2005/01/23 20:44:57 + +commit 15d076fc8ff97ea14a78d78bf4ddab8939bf6a50 +Author: jbj +Date: Sun Jan 23 20:30:39 2005 +0000 + + Orphan. + + CVS patchset: 7705 + CVS date: 2005/01/23 20:30:39 + +commit 0ccd287fbe33c50e061204d2c375a4ff0337ad21 +Author: jbj +Date: Sun Jan 23 18:22:14 2005 +0000 + + Configure zlib subdir automagically. + + CVS patchset: 7704 + CVS date: 2005/01/23 18:22:14 + +commit 8590097736398543e9c9bebd9c3cf3524fc19e2b +Author: jbj +Date: Tue Jan 18 00:30:20 2005 +0000 + + - add https://svn.uhulinux.hu/packages/dev/zlib/patches/02-rsync.patch + + CVS patchset: 7703 + CVS date: 2005/01/18 00:30:20 + +commit bdec54d9745b04f60f38ef5c4131ff53f52fd19b +Author: jbj +Date: Tue Jan 18 00:10:04 2005 +0000 + + Sanity. + + CVS patchset: 7702 + CVS date: 2005/01/18 00:10:04 + +commit 217c588baacf213a4570ee13e27477683baa3e88 +Author: jbj +Date: Mon Jan 17 23:58:09 2005 +0000 + + Build on macosx. + + CVS patchset: 7701 + CVS date: 2005/01/17 23:58:09 + +commit cd3d87df20647dc49e9091115a4e78922387ceb0 +Author: jbj +Date: Mon Jan 17 18:47:27 2005 +0000 + + Remove generated files. + + CVS patchset: 7698 + CVS date: 2005/01/17 18:47:27 + +commit 5732d3daae06a8abc26bbdd03c14a99aca3261f2 +Author: jbj +Date: Sun Jan 9 17:48:19 2005 +0000 + + - build against external/internal neon. + + CVS patchset: 7692 + CVS date: 2005/01/09 17:48:19 + +commit a35472d84950e3d2243c9a336351b27505932792 +Author: jbj +Date: Wed Jan 5 14:31:20 2005 +0000 + + Sanity. + + CVS patchset: 7679 + CVS date: 2005/01/05 14:31:20 + +commit c2a0d5d163a23a823c3a106f904eb821151b2f07 +Author: jbj +Date: Wed Jan 5 13:46:28 2005 +0000 + + Don't install man pages. + + CVS patchset: 7677 + CVS date: 2005/01/05 13:46:28 + +commit 82011226e266f55238fc7e3f7dbe776230b05c3e +Author: jbj +Date: Wed Jan 5 13:33:55 2005 +0000 + + Install /usr/lib/rpm/magic*. + + CVS patchset: 7676 + CVS date: 2005/01/05 13:33:55 + +commit c7510bceec93c47a9176f73eea0db7900ebb8208 +Author: jbj +Date: Wed Jan 5 04:46:01 2005 +0000 + + build rpm-4.4.1-0.6. + + CVS patchset: 7674 + CVS date: 2005/01/05 04:46:01 + +commit 84ec406c35efeb8fb566ceab2fb1a4796cf7b447 +Author: jbj +Date: Tue Jan 4 19:31:31 2005 +0000 + + - mac os x patches (#133611, #133612, #134637). + + CVS patchset: 7673 + CVS date: 2005/01/04 19:31:31 + +commit 6da6f7fc0a87818021bb07705450a29f46d7f14b +Author: jbj +Date: Tue Jan 4 17:46:10 2005 +0000 + + - mac os x patches (#131943,#131944,#132924,#132926). + + CVS patchset: 7671 + CVS date: 2005/01/04 17:46:10 + +commit 228d0e350ac2f20ee7ca1f74c46620e219559542 +Author: jbj +Date: Tue Jan 4 17:11:00 2005 +0000 + + Splint fiddles. + + CVS patchset: 7669 + CVS date: 2005/01/04 17:11:00 + +commit 34caf4357ac173eb273ec16611dc8da24fa75858 +Author: jbj +Date: Mon Jan 3 14:28:50 2005 +0000 + + Wait for specific pid's. + + CVS patchset: 7664 + CVS date: 2005/01/03 14:28:50 + +commit f7348895a66e7e03b126bef8e3857bf4c89358d5 +Author: jbj +Date: Mon Jan 3 02:10:06 2005 +0000 + + - upgrade to file-4.12 internal. + + CVS patchset: 7662 + CVS date: 2005/01/03 02:10:06 + +commit 751f7e3b54d87e054e5fc4cf547eb99d04087dd0 +Author: jbj +Date: Mon Jan 3 02:02:54 2005 +0000 + + Upgrade to file-4.12 (with RH patches). + + CVS patchset: 7661 + CVS date: 2005/01/03 02:02:54 + +commit 7793ec11ecf1d3024b7440b3e04bde57d3862b72 +Author: jbj +Date: Sun Jan 2 20:49:23 2005 +0000 + + - revert MAGIC_COMPRESS, real fix is in libmagic (#143782). + + CVS patchset: 7657 + CVS date: 2005/01/02 20:49:23 + +commit 55e2652abbf89a9e1e35e547d8d7521389608508 +Author: jbj +Date: Sun Jan 2 19:40:49 2005 +0000 + + Upgrade ro db-4.3.27. + + CVS patchset: 7655 + CVS date: 2005/01/02 19:40:49 + +commit c82ffb778ac8e17f804e08165a1375ca9230c7f7 +Author: jbj +Date: Sun Jan 2 19:01:06 2005 +0000 + + Upgrade to db-4.3.27. + + CVS patchset: 7654 + CVS date: 2005/01/02 19:01:06 + +commit 50f13cec8f285b20e83789c2f98246b7e11f0767 +Author: jbj +Date: Sun Jan 2 18:30:11 2005 +0000 + + Dead. + + CVS patchset: 7653 + CVS date: 2005/01/02 18:30:11 + +commit 5b38c248329af254a714380199f1828168e312be +Author: jbj +Date: Sun Jan 2 18:27:49 2005 +0000 + + Orphan. + + CVS patchset: 7650 + CVS date: 2005/01/02 18:27:49 + +commit cf517f08bbfa7768f9421178c03a4357a34e8528 +Author: jbj +Date: Tue Dec 7 15:39:32 2004 +0000 + + - use package color as Obsoletes: color. + + CVS patchset: 7639 + CVS date: 2004/12/07 15:39:32 + +commit fd0b82c71af015861a246541d7f8ed694dbad701 +Author: jbj +Date: Tue Dec 7 00:58:50 2004 +0000 + + Redirect grep to /dev/null. + + CVS patchset: 7637 + CVS date: 2004/12/07 00:58:50 + +commit eb9c78fb09102564d29d32d8e8522110e4a6fd15 +Author: jbj +Date: Tue Dec 7 00:06:36 2004 +0000 + + avoid md5 on sparse /var/log/lastlog file + + CVS patchset: 7633 + CVS date: 2004/12/07 00:06:36 + +commit 63377cb838839e519a81757698bbc380cca94b36 +Author: jbj +Date: Mon Dec 6 15:47:27 2004 +0000 + + - automagically detect and emit "python(abi) = 2.4" dependencies. + - popt 1.10.1 to preserve newer. + + CVS patchset: 7631 + CVS date: 2004/12/06 15:47:27 + +commit cf8bf4efd96da10b33a2b556dc78015cefbcfc9c +Author: jbj +Date: Sun Dec 5 20:05:46 2004 +0000 + + - force *.py->*.pyo byte code compilation with brp-python-bytecompile. + - automagically detect and emit "python(abi) = 2.4" dependencies. + + CVS patchset: 7628 + CVS date: 2004/12/05 20:05:46 + +commit edc0ad3152685cdf284953c2618bc895e9025d01 +Author: jbj +Date: Sun Dec 5 19:10:53 2004 +0000 + + - rpm-4.4 final release. + + CVS patchset: 7627 + CVS date: 2004/12/05 19:10:53 + +commit d49ad2ca27a44c85ca1bf5f084b0d75274cb368b +Author: jbj +Date: Wed Dec 1 17:52:31 2004 +0000 + + Deal with \r\n after "-----END PGP PBLIC KEY BLOCK-----" from hkp://sks.keyserver.penguin.de + Add parser failure error codes. + + CVS patchset: 7622 + CVS date: 2004/12/01 17:52:31 + +commit 99e1763612f500a7779d7c56db1d9a8c45fa0b59 +Author: jbj +Date: Mon Nov 29 14:32:14 2004 +0000 + + Sanity. + + CVS patchset: 7620 + CVS date: 2004/11/29 14:32:14 + +commit 15204958aa03cc2c059fbe670c5d306534156a1f +Author: jbj +Date: Mon Nov 29 14:29:22 2004 +0000 + + - detect and return errors from neon through Ferror. + + CVS patchset: 7619 + CVS date: 2004/11/29 14:29:22 + +commit f5203aea8bd83dc18e48dda4a564429c0e48bab4 +Author: jbj +Date: Sun Nov 28 21:14:41 2004 +0000 + + - add support for automagic pubkey retrieval using HKP. + + CVS patchset: 7617 + CVS date: 2004/11/28 21:14:41 + +commit 88ace07349542e10a3834814372807e2eca30f42 +Author: jbj +Date: Thu Nov 25 15:52:44 2004 +0000 + + - python: bleeping keywords broke labelCompare. + + CVS patchset: 7601 + CVS date: 2004/11/25 15:52:44 + +commit 6a18dcbdf0c291f9a3615f4414477fbadb057b38 +Author: jbj +Date: Thu Nov 25 04:45:10 2004 +0000 + + - fix: chunked davRead returns 0 is EOF. + + CVS patchset: 7600 + CVS date: 2004/11/25 04:45:10 + +commit 3f8541f639c6be4c060adf48fb5eff9696cb6725 +Author: jbj +Date: Mon Nov 22 21:46:14 2004 +0000 + + Typo. + + CVS patchset: 7596 + CVS date: 2004/11/22 21:46:14 + +commit 70ffc09ac58b99626af566ae2a0f1ddd430697c1 +Author: jbj +Date: Mon Nov 22 21:45:34 2004 +0000 + + - add Requires: neon-devel. + + CVS patchset: 7595 + CVS date: 2004/11/22 21:45:34 + +commit 43fc25d787d8edc1868e12069e075d01045199cb +Author: jbj +Date: Mon Nov 22 21:41:28 2004 +0000 + + - sparcv8: optflags changed to -mtune=ultrasparc (#140420). + + CVS patchset: 7593 + CVS date: 2004/11/22 21:41:28 + +commit 5c17470e1c6f977501ca1025a3578e53723387b1 +Author: jbj +Date: Fri Nov 19 18:01:30 2004 +0000 + + Sanity. + + CVS patchset: 7591 + CVS date: 2004/11/19 18:01:30 + +commit 3ffb936701c4cb2907ec56c9737d2752a6533567 +Author: jbj +Date: Fri Nov 19 17:41:09 2004 +0000 + + - bump soname into libfoo-4.4.so everywhere. + + CVS patchset: 7590 + CVS date: 2004/11/19 17:41:09 + +commit aba69f496375ef8368665a781805bda3be7c66b1 +Author: jbj +Date: Fri Nov 19 17:26:22 2004 +0000 + + - remove noNeon runtime switch, http through neon only. + - remove http put to be able to build against upstream neon. + + CVS patchset: 7589 + CVS date: 2004/11/19 17:26:22 + +commit 41c3c4df68ea311955fa4508db580fcdecd697d4 +Author: jbj +Date: Fri Nov 19 16:25:49 2004 +0000 + + Builds with external libraries. + + CVS patchset: 7588 + CVS date: 2004/11/19 16:25:49 + +commit 989c9c34d293688809ff58ce5a7e7d2f1361a394 +Author: jbj +Date: Fri Nov 19 15:52:04 2004 +0000 + + t on rpm-4_4. + + CVS patchset: 7587 + CVS date: 2004/11/19 15:52:04 + +commit 2daf3d2d0e7a17d663aef5bc798cd9f8a5dd7c6a +Author: jbj +Date: Fri Nov 19 15:48:28 2004 +0000 + + Not on rpm-4_4. + + CVS patchset: 7586 + CVS date: 2004/11/19 15:48:28 + +commit c7c416edfab0d5c992a74371f4d824a7e3bcb76f +Author: jbj +Date: Fri Nov 19 15:47:20 2004 +0000 + + Not on rpm-4_4 branch. + + CVS patchset: 7585 + CVS date: 2004/11/19 15:47:20 + +commit 6f22b87b7c83a79f47624725b9e1a65d3a35181d +Author: jbj +Date: Fri Nov 19 15:44:15 2004 +0000 + + Not in rpm-4_4. + + CVS patchset: 7584 + CVS date: 2004/11/19 15:44:15 + +commit f331e9dc4a7bc7cd75a7299c61ea67aca60ff24e +Author: jbj +Date: Fri Nov 19 15:18:03 2004 +0000 + + Sanity. + + CVS patchset: 7583 + CVS date: 2004/11/19 15:18:03 + +commit 24e6f8633e766bb8205a2ac55ad735a97b945f8c +Author: pauln +Date: Wed Nov 17 17:05:39 2004 +0000 + + Add kwargs everywhere - courtesy of pjones@redhat.com + + CVS patchset: 7582 + CVS date: 2004/11/17 17:05:39 + +commit d7a0e859ba4842548bfe344f6408af80c10b1c50 +Author: pauln +Date: Mon Nov 15 14:12:19 2004 +0000 + + Re-export hidden VSF symbols 139221 + + CVS patchset: 7581 + CVS date: 2004/11/15 14:12:19 + +commit 7be6851e3f7d88949419baaf9f0a05378084af96 +Author: jbj +Date: Thu Nov 11 16:57:42 2004 +0000 + + Re-add the rpc fixes from db-4.3.14. + + CVS patchset: 7580 + CVS date: 2004/11/11 16:57:42 + +commit fbbbddcd7e7b80152be34332e113c867e513673f +Author: jbj +Date: Thu Nov 11 16:25:25 2004 +0000 + + Add new db-4.3.21 files. + + CVS patchset: 7579 + CVS date: 2004/11/11 16:25:25 + +commit acf19af1ab27ad071c1614f9610ae29eb5c902c1 +Author: jbj +Date: Thu Nov 11 15:58:46 2004 +0000 + + Upgrade to db-4.3.21. + + CVS patchset: 7578 + CVS date: 2004/11/11 15:58:46 + +commit f9473219d523ace837a3ef5a1212bb6dcad2a690 +Author: jbj +Date: Thu Nov 11 06:11:37 2004 +0000 + + - selinux: use rpm_execcon, not execv, to run scriptlets (#136848). + - fix: segfault on --verifydb (#138589). + + CVS patchset: 7577 + CVS date: 2004/11/11 06:11:37 + +commit 8ce559b875c401630120a251cc73b23012f45080 +Author: jbj +Date: Thu Nov 11 03:58:46 2004 +0000 + + Avoid unnecessary chroot("/") calls for certain Mac OSX kernels. + Strip URL clutter from --root paths in rpmtsRootDir(ts) and newRpmdb(). + + CVS patchset: 7574 + CVS date: 2004/11/11 03:58:46 + +commit 13b145b6af842a268d99a6a64fcf4e416ee4e681 +Author: jbj +Date: Thu Nov 11 02:29:51 2004 +0000 + + Functional http remote globbing through WebDAV. + BUG: Something goofy with Keepalive On still. + + CVS patchset: 7573 + CVS date: 2004/11/11 02:29:51 + +commit b1ac9a514607dd0d05fb9ad9a97c2e058e1f9328 +Author: jbj +Date: Thu Nov 11 01:04:59 2004 +0000 + + Create. + + CVS patchset: 7572 + CVS date: 2004/11/11 01:04:59 + +commit 7008350f3ef19fe3ce5737cf84b9600481ba851c +Author: jbj +Date: Thu Nov 11 01:04:07 2004 +0000 + + - make peace with libtool-1.5.10 and automake-1.9.3. + + CVS patchset: 7571 + CVS date: 2004/11/11 01:04:07 + +commit 103a5c0e4860837984060eeb2c3d6f366993d03d +Author: jbj +Date: Thu Nov 11 00:13:38 2004 +0000 + + Wire HTTP PUT through libneon. + + CVS patchset: 7570 + CVS date: 2004/11/11 00:13:38 + +commit 910c42099e33c725937ec9c78460aa8bafb0ccd0 +Author: jbj +Date: Wed Nov 10 00:50:41 2004 +0000 + + - add --delsign to purge packages of digital signatures. + + CVS patchset: 7569 + CVS date: 2004/11/10 00:50:41 + +commit 20ed3220672daf608e930791a5ded2d3bf892269 +Author: jbj +Date: Wed Nov 10 00:49:04 2004 +0000 + + Sanity. + + CVS patchset: 7568 + CVS date: 2004/11/10 00:49:04 + +commit 9b623629bdbf4766ac613aacd5ff24cddecaf34e +Author: jbj +Date: Tue Nov 9 19:40:10 2004 +0000 + + - resurrect freshen.sh to, say, upgrade only kernel-bigmem packages. + + CVS patchset: 7565 + CVS date: 2004/11/09 19:40:10 + +commit 487c902d2fe8ee7010154963e357e624ce849c7d +Author: jbj +Date: Tue Nov 9 06:59:34 2004 +0000 + + - python: add python 2.4 support. + + CVS patchset: 7562 + CVS date: 2004/11/09 06:59:34 + +commit e5e4a65519c5138f505b19659ae60f2eb489c706 +Author: jbj +Date: Mon Nov 8 22:49:00 2004 +0000 + + Stub in rpmrpc primitives. + + CVS patchset: 7561 + CVS date: 2004/11/08 22:49:00 + +commit 2cecae5394694809fbcfd50dabb7e196141c8754 +Author: jbj +Date: Mon Nov 8 21:12:45 2004 +0000 + + Splint fiddles. + + CVS patchset: 7560 + CVS date: 2004/11/08 21:12:45 + +commit f38adb14040b297a257d6f2f3213d13ca9dcd3af +Author: jbj +Date: Mon Nov 8 20:56:18 2004 +0000 + + Splint clean. + + CVS patchset: 7559 + CVS date: 2004/11/08 20:56:18 + +commit fffc17ec6d5429e84cc96b268a7e03c0560e65ab +Author: jbj +Date: Mon Nov 8 18:38:42 2004 +0000 + + Sanity. + + CVS patchset: 7558 + CVS date: 2004/11/08 18:38:42 + +commit fc4aad4c4c9d283135d67144030896c91bc7bbbc +Author: jbj +Date: Mon Nov 8 18:06:15 2004 +0000 + + Typo. + + CVS patchset: 7557 + CVS date: 2004/11/08 18:06:15 + +commit 8f3b9ed6634cf571105d862613424a1ecdaf6ca6 +Author: jbj +Date: Mon Nov 8 18:05:55 2004 +0000 + + R++; + + CVS patchset: 7556 + CVS date: 2004/11/08 18:05:55 + +commit 1727acd62d0919858cb37282b2dd9879afa4865f +Author: jbj +Date: Mon Nov 8 18:00:00 2004 +0000 + + - use external libneon for http/https transport. + + CVS patchset: 7555 + CVS date: 2004/11/08 18:00:00 + +commit 04a779db7250865087dad5108e2dff3103419e71 +Author: jbj +Date: Mon Nov 8 17:10:36 2004 +0000 + + Functional https:// with Keepalive on. + + CVS patchset: 7554 + CVS date: 2004/11/08 17:10:36 + +commit 42554d5d08e4f4d4252a54fe38ad5ad4e00d2493 +Author: jbj +Date: Mon Nov 8 01:54:12 2004 +0000 + + Rebalance refcounts with keepalive. + + CVS patchset: 7553 + CVS date: 2004/11/08 01:54:12 + +commit e5370f96a4c4eaa3d054d8a0e60aa8f593f5373e +Author: jbj +Date: Sun Nov 7 18:49:08 2004 +0000 + + Drill many neon hooks. + + CVS patchset: 7552 + CVS date: 2004/11/07 18:49:08 + +commit 351af63e8c87fc52f0e6eaf013f4df8dd372bf66 +Author: jbj +Date: Sat Nov 6 21:02:15 2004 +0000 + + Orphan. + + CVS patchset: 7551 + CVS date: 2004/11/06 21:02:15 + +commit d2d8ce7910cc12c902e4826289909afe754a9a50 +Author: jbj +Date: Sat Nov 6 21:01:03 2004 +0000 + + Remove dead code. + + CVS patchset: 7550 + CVS date: 2004/11/06 21:01:03 + +commit f790586b45bb1c6827426ed9e9d8a1451a2229e2 +Author: jbj +Date: Sat Nov 6 20:57:30 2004 +0000 + + Add handlers for Content-Length: et al HTTP tags used by rpmio. + + CVS patchset: 7549 + CVS date: 2004/11/06 20:57:30 + +commit 7e731dd8ce07a68a6affdc24c561890f51fa4e03 +Author: jbj +Date: Sat Nov 6 19:26:52 2004 +0000 + + Balance fd refcounts like http://. Much subtle hackery, sigh. + + CVS patchset: 7548 + CVS date: 2004/11/06 19:26:52 + +commit fa16f9dc94f11ad7bbcb767cb9ba85ed2b42eafa +Author: jbj +Date: Sat Nov 6 17:59:19 2004 +0000 + + Implement davReq/davResp instead. + + CVS patchset: 7547 + CVS date: 2004/11/06 17:59:19 + +commit 0736ef114728337278343a92e0db6aeaec3f8ee2 +Author: jbj +Date: Sat Nov 6 16:09:15 2004 +0000 + + Update to HEAD. + + CVS patchset: 7546 + CVS date: 2004/11/06 16:09:15 + +commit 945b4f65ef02782ed93443751fe3d8f455cf25af +Author: jbj +Date: Fri Nov 5 20:43:10 2004 +0000 + + w00t! rpm -q -W https://wellfleet.jbj.org/rawhide/test milestone! + + CVS patchset: 7545 + CVS date: 2004/11/05 20:43:10 + +commit 50596fe84b032b34dbc5c851eed2da67fc55d4fa +Author: jbj +Date: Fri Nov 5 16:20:42 2004 +0000 + + Stub in libio routines. + + CVS patchset: 7544 + CVS date: 2004/11/05 16:20:42 + +commit 368da1cf2677927f1d59b96a074b5cb6cffc04b3 +Author: jbj +Date: Fri Nov 5 16:00:31 2004 +0000 + + Store server capabilities and lockstore in urlinfo. + Attach urlinfo to fetch context prior to ripping ne_parse_uri. + Substitute /u->service/u->scheme/ everywhere to conform with modern usage. + Splint clean. + + CVS patchset: 7543 + CVS date: 2004/11/05 16:00:31 + +commit 04724d83c32a5cb9fe7ee4cd5411d60e768e26d3 +Author: jbj +Date: Fri Nov 5 03:09:00 2004 +0000 + + Eliminate global session and neon uri parsing, use the urlcache instead. + + CVS patchset: 7542 + CVS date: 2004/11/05 03:09:00 + +commit 8e7cbc84da14207e38143226fd144b9a5155df6d +Author: jbj +Date: Fri Nov 5 00:45:02 2004 +0000 + + Implement davStat (and clone davLstat), sufficient for fts walk. + + CVS patchset: 7541 + CVS date: 2004/11/05 00:45:02 + +commit 9865db5f7ecce9116011e776be784e0b38fd25c2 +Author: jbj +Date: Thu Nov 4 20:15:17 2004 +0000 + + Link librpmio with -lneon. + Implement Opendir et al across https:// using neon. + + CVS patchset: 7540 + CVS date: 2004/11/04 20:15:17 + +commit 02eda2bcf8328cdfd3b1ec2b3c126da300851908 +Author: jbj +Date: Thu Nov 4 19:27:48 2004 +0000 + + Splint fiddles from rpmdav.c take 0. + + CVS patchset: 7539 + CVS date: 2004/11/04 19:27:48 + +commit 80c888e0c7ead8f644baa607801fab0d45b56799 +Author: jbj +Date: Thu Nov 4 14:19:47 2004 +0000 + + Typos. + + CVS patchset: 7538 + CVS date: 2004/11/04 14:19:47 + +commit f02d2a3449a6216056667ab919e827c177d397ad +Author: jbj +Date: Thu Nov 4 14:16:30 2004 +0000 + + Split out avOpendir/avReaddir/avClosedir to rpmdav.c. + Stub in davOpen. + + CVS patchset: 7537 + CVS date: 2004/11/04 14:16:30 + +commit afeddbf68df1ebaa6069845fcfd773401c0ba849 +Author: jbj +Date: Thu Nov 4 13:29:11 2004 +0000 + + Stub in URL_IS_HTTPS everywhere. + + CVS patchset: 7536 + CVS date: 2004/11/04 13:29:11 + +commit 99012f2fab4b449228bf06aa3a11d0a0798ffbed +Author: jbj +Date: Thu Nov 4 13:27:08 2004 +0000 + + Annotations from cadaver checks. + + CVS patchset: 7535 + CVS date: 2004/11/04 13:27:08 + +commit af723bb9343f5a6b0392604efd281e7d3225b577 +Author: jbj +Date: Mon Nov 1 16:54:50 2004 +0000 + + Annotate openssl too. + + CVS patchset: 7533 + CVS date: 2004/11/01 16:54:50 + +commit 85d28994b93ee020dae26193e81aacf4be90b3ea +Author: jbj +Date: Sun Oct 31 20:22:01 2004 +0000 + + - python: remove ".A" from creaky ts.check() tuple return (#135008). + - python: fix RPMPROB_BADRELOCATE segfault return in ts.check (#137116). + - revert selinux patch until fc3 release. + - reprise file conflicts yet again, flip/flop/flip/flop ... + - fix: buffer overrun displaying ko_KR (#135389). + + CVS patchset: 7532 + CVS date: 2004/10/31 20:22:01 + +commit 4ba9d376d97595752e19b1310f1eded58e414b38 +Author: jbj +Date: Sun Oct 31 09:24:19 2004 +0000 + + Splint fiddles. + + CVS patchset: 7530 + CVS date: 2004/10/31 09:24:19 + +commit ad4046da94b74e01b0336f1b86178f503866cbd8 +Author: jbj +Date: Sun Oct 31 04:14:11 2004 +0000 + + Splint fiddles. + + CVS patchset: 7529 + CVS date: 2004/10/31 04:14:11 + +commit d294191632dfbe72fa01cb1c77a9b1f80ecfe058 +Author: jbj +Date: Sat Oct 30 22:51:26 2004 +0000 + + Splint fiddles. + + CVS patchset: 7527 + CVS date: 2004/10/30 22:51:26 + +commit 8a9422ca615265302a2fed9105b78c6505840a26 +Author: jbj +Date: Sat Oct 30 20:29:18 2004 +0000 + + Spint fiddles. + + CVS patchset: 7526 + CVS date: 2004/10/30 20:29:18 + +commit 6e8a0d22e2483dbdba690248ea4d6427e49eb1b3 +Author: jbj +Date: Sat Oct 30 00:45:18 2004 +0000 + + Path to magic.h. + + CVS patchset: 7525 + CVS date: 2004/10/30 00:45:18 + +commit 69227ecd1bf64421da5ee99c14cf1613e1114787 +Author: jbj +Date: Fri Oct 29 13:57:41 2004 +0000 + + Update to neon trunk. + + CVS patchset: 7523 + CVS date: 2004/10/29 13:57:41 + +commit e603ae4198c394996d56a34bc69c92a1b16dfddb +Author: jbj +Date: Fri Oct 29 13:34:35 2004 +0000 + + Update to 0.24.7. + + CVS patchset: 7522 + CVS date: 2004/10/29 13:34:35 + +commit 0189ffbf596a81418b9740ee6d2455cb4a6c358f +Author: jbj +Date: Fri Oct 29 00:00:47 2004 +0000 + + Ignore generated files. + + CVS patchset: 7521 + CVS date: 2004/10/29 00:00:47 + +commit c1e3a63771c3db1a1b01df3af7d58009207dcde3 +Author: jbj +Date: Thu Oct 28 23:59:27 2004 +0000 + + - attempt dependency tree breadth, take 1. + + CVS patchset: 7520 + CVS date: 2004/10/28 23:59:27 + +commit 37718380bf1a5503555b3ac7575570ad68fe2fa1 +Author: jbj +Date: Thu Oct 28 23:57:36 2004 +0000 + + - bump popt to version to 1.10. + + CVS patchset: 7519 + CVS date: 2004/10/28 23:57:36 + +commit e609515b336384c95b59e7f87c3059119fa0b543 +Author: jbj +Date: Wed Oct 27 22:57:14 2004 +0000 + + Build rpm-4.4-0.1 packages. + + CVS patchset: 7518 + CVS date: 2004/10/27 22:57:14 + +commit 67b6b42557e4a4f78cb18dd6f2e912910967f57c +Author: jbj +Date: Wed Oct 27 04:55:11 2004 +0000 + + Splint clean. + + CVS patchset: 7517 + CVS date: 2004/10/27 04:55:11 + +commit 194e3c10d3f3e76fa09410ceb578dfdff79fc517 +Author: jbj +Date: Wed Oct 27 02:17:58 2004 +0000 + + - fix: handle non-unique dirnames in rpmalAdd(). + + CVS patchset: 7516 + CVS date: 2004/10/27 02:17:58 + +commit b7896908db63e5dbe3dbc2152434d29dae8435b5 +Author: jbj +Date: Tue Oct 26 23:29:28 2004 +0000 + + Getter/setter methods for isSource and Header from rpmte. + Add RPMDB_ADDED transaction element iterator to rpmgi. + Two iterations to load and then spew query in topologically sorted order. + + CVS patchset: 7515 + CVS date: 2004/10/26 23:29:28 + +commit 421dab010c0ba090b64a31a32278bfaae71ea561 +Author: jbj +Date: Tue Oct 26 17:42:55 2004 +0000 + + Do a consolidated insertion, not a concatenation, in rpmReadManifest. + + CVS patchset: 7514 + CVS date: 2004/10/26 17:42:55 + +commit 959434ca80cdbb55e1372a338d25a27759e8f29a +Author: jbj +Date: Tue Oct 26 00:22:10 2004 +0000 + + Splint fiddles. + + CVS patchset: 7513 + CVS date: 2004/10/26 00:22:10 + +commit 0a68012b6f704ccf0964f0e4ea098b8d1f940c13 +Author: jbj +Date: Mon Oct 25 18:10:48 2004 +0000 + + Add options to populate transaction set while iterating. + Avoid mixed source/binary sanity check in rpmtsAddInstallElement. + Turn off query spewage if/when populating while iterating. + Display rpmtsCheck problems and suggestions after iterating. + + CVS patchset: 7512 + CVS date: 2004/10/25 18:10:48 + +commit 274d1d0d6d7a39fe13fcd2296a0cc818ae09278c +Author: jbj +Date: Mon Oct 25 15:35:10 2004 +0000 + + Teach rpmcache to use globla ftsOpts. + + CVS patchset: 7511 + CVS date: 2004/10/25 15:35:10 + +commit 0f86e55aa4305dedfec636fb71bf3fce6bc23da0 +Author: jbj +Date: Mon Oct 25 15:26:51 2004 +0000 + + Wire ftsOpts globally. + + CVS patchset: 7510 + CVS date: 2004/10/25 15:26:51 + +commit 3eb61f7a4ab9263ac95096357236f3e814b83b65 +Author: jbj +Date: Mon Oct 25 14:20:55 2004 +0000 + + Stub out rpmgiWalkPathFilter, prior to teaching rpmcache about rpmgi. + + CVS patchset: 7509 + CVS date: 2004/10/25 14:20:55 + +commit 7c25d1ffaed9ab2e626db874150d17bbc6424cee +Author: jbj +Date: Mon Oct 25 01:10:13 2004 +0000 + + Add undocumented --hdlist and --ftswalk query/verify sources. + Bugs: + * @todo hdlist should use argv to open system hdlist path. + + CVS patchset: 7508 + CVS date: 2004/10/25 01:10:13 + +commit 7138fa3bed4ef36fe94e2f6bdbac071685cbe86d +Author: jbj +Date: Mon Oct 25 00:34:08 2004 +0000 + + Use rpmgi glob and manifest load for --package. + Bugs: + * @todo An empty file read as manifest truncates argv returning RPMRC_NOTFOUND. + * @todo Errors, e.g. non-existent path in manifest, will terminate iteration. + * @todo Chained manifests lose an arg someplace. + + CVS patchset: 7507 + CVS date: 2004/10/25 00:34:08 + +commit f60aac8e5a0be5659388f1e0cf705fdde0b519aa +Author: jbj +Date: Sun Oct 24 22:25:32 2004 +0000 + + Iterate on RPMQV_ALL, adding filters to match iterator from argv. + + CVS patchset: 7506 + CVS date: 2004/10/24 22:25:32 + +commit 595a207f27c0ef38d6e604deda2ac9423a9b4421 +Author: jbj +Date: Sun Oct 24 20:35:41 2004 +0000 + + Arg iteration for --query and --verify, everything but RPMQV_ALL. + + CVS patchset: 7505 + CVS date: 2004/10/24 20:35:41 + +commit 3691d13f0427ecee102acfc2a658c6c2a89227fb +Author: jbj +Date: Sun Oct 24 19:36:30 2004 +0000 + + Explicit rpmgiFlags enum defined, add RPMGI_{NOGLOB,NOMANIFEST,NOHEADER}. + Abstract arg iteration into rpmcliArgIter(). + Add undocumented --rpmgidebug. + + CVS patchset: 7504 + CVS date: 2004/10/24 19:36:30 + +commit 883580417100b31808d0ef8d69bcfdd510e85d0a +Author: jbj +Date: Thu Oct 21 21:18:35 2004 +0000 + + Compile in the correct path to /usr/lib/rpm/magic. + Add magic for rpm packages and headers. + Add MAGIC_COMPRESS and MAGIC_CHECK to extract types from compressed files. + Permit info and man pages into RPMTAG_FILECLASS. + Package all the Berkeley DB utilities with rpm. + + CVS patchset: 7502 + CVS date: 2004/10/21 21:18:35 + +commit bc1ad5caaf0c827355f4254cb3b4e7f4e76a94b4 +Author: jbj +Date: Thu Oct 21 19:24:07 2004 +0000 + + Install rpmfile and magic* into /usr/lib/rpm. + + CVS patchset: 7501 + CVS date: 2004/10/21 19:24:07 + +commit b7f251ae164590335bfca52c9dfce56a9e9c6512 +Author: jbj +Date: Thu Oct 21 18:40:56 2004 +0000 + + - port to internal file-4.10 libmagic rather than libfmagic. + + CVS patchset: 7500 + CVS date: 2004/10/21 18:40:56 + +commit 2083dadd4c6e57010bb703da6699ebfd0bda85be +Author: jbj +Date: Thu Oct 21 16:13:21 2004 +0000 + + Splint fiddles. + + CVS patchset: 7499 + CVS date: 2004/10/21 16:13:21 + +commit a1bfe90ddc19fcce50b89471ebd77d9ea5e76270 +Author: jbj +Date: Thu Oct 21 13:26:05 2004 +0000 + + DB_WRITECURSOR cannot be used with sunrpc dbenv. + + CVS patchset: 7498 + CVS date: 2004/10/21 13:26:05 + +commit b96dba474f64505fa9e21a84984b39ba42a49ba1 +Author: jbj +Date: Thu Oct 21 00:24:38 2004 +0000 + + Install all Berkeley DB utilities. + Don't set DB_WRITECURSOR if using sunrpc. + + CVS patchset: 7497 + CVS date: 2004/10/21 00:24:38 + +commit 5e872f35ed574ec549155fd8a56828aed59aedfb +Author: jbj +Date: Wed Oct 20 10:31:47 2004 +0000 + + Add lua to doxygen. + + CVS patchset: 7496 + CVS date: 2004/10/20 10:31:47 + +commit 8faa61c020369ecf850a823a505b946485fa1bea +Author: jbj +Date: Wed Oct 20 10:19:34 2004 +0000 + + Doxygen fiddles. + + CVS patchset: 7495 + CVS date: 2004/10/20 10:19:34 + +commit 2c192f3e33ef5237c6b00a9962c112c2bd304464 +Author: jbj +Date: Wed Oct 20 09:20:43 2004 +0000 + + Add #include "db_int_def.h" to generated db_server_svc.c (pnasrat). + + CVS patchset: 7494 + CVS date: 2004/10/20 09:20:43 + +commit 924df419119e16f1fe8833e8f804ba37b58c1981 +Author: cturner +Date: Wed Oct 20 04:15:15 2004 +0000 + + update to 0.68, make it compile again with rpm 4.0 + + CVS patchset: 7493 + CVS date: 2004/10/20 04:15:15 + +commit e47ccc321adb157633bddb9b17c75deb6ee875d8 +Author: jbj +Date: Wed Oct 20 02:34:17 2004 +0000 + + Add rpmtsCheck() and rpmtsOrder() to iterator. + Add rpmgi.[ch] to Dpxyfiles.in and POTFOLES.in + + CVS patchset: 7492 + CVS date: 2004/10/20 02:34:17 + +commit 7a34fdc4a2b4fbfae85e4bc7e67f5da59ab7c732 +Author: jbj +Date: Tue Oct 19 22:52:33 2004 +0000 + + Stare at a redhat-artwork problem in rpmal.c with multiple versions, + punt for now. + Add transaction elements to rpmgi ts. + + CVS patchset: 7491 + CVS date: 2004/10/19 22:52:33 + +commit ea8c710ac49f103a95cf42b291b5d54f98fc2eb1 +Author: pauln +Date: Tue Oct 19 21:35:24 2004 +0000 + + Build and changes for _rpm module + + CVS patchset: 7490 + CVS date: 2004/10/19 21:35:24 + +commit d96e690b8d0e5796d7954f02b56d4b3d0fe00410 +Author: pauln +Date: Tue Oct 19 21:33:22 2004 +0000 + + Initial python wrapped rpm module files + + CVS patchset: 7489 + CVS date: 2004/10/19 21:33:22 + +commit 4330e4eab5adcf65c895a318917a74aa535d9258 +Author: pauln +Date: Tue Oct 19 21:31:03 2004 +0000 + + ignore file for rpm-python rpm dir + + CVS patchset: 7488 + CVS date: 2004/10/19 21:31:03 + +commit b7dfb8ada08ccd92bcf9f3cd9ac4045b7bd1fed1 +Author: jbj +Date: Tue Oct 19 16:39:36 2004 +0000 + + Change options to specify type of iteration. + + CVS patchset: 7487 + CVS date: 2004/10/19 16:39:36 + +commit 343b3223e8d23b17809eb04db1d9826a8a709edb +Author: jbj +Date: Tue Oct 19 15:54:38 2004 +0000 + + Merge iterator types into pseudo tags. + Load argv and ftpopts through iterator modifier, not creator. + + CVS patchset: 7486 + CVS date: 2004/10/19 15:54:38 + +commit fb6dac4267136d0209ccdd5ddb13691c178f0ffe +Author: jbj +Date: Tue Oct 19 02:30:25 2004 +0000 + + Store path to header in iterator. + Iterator returns rpmRC rather than value, eliminate queryFormat methods. + + CVS patchset: 7485 + CVS date: 2004/10/19 02:30:25 + +commit 67ce81d2013ce58c55f65d151e0206d590a505bf +Author: jbj +Date: Tue Oct 19 01:31:20 2004 +0000 + + Attach header reference to the iterator. + + CVS patchset: 7484 + CVS date: 2004/10/19 01:31:20 + +commit ddfad5f8782002bc2679aa82b9e58b58efb1430b +Author: jbj +Date: Mon Oct 18 22:47:20 2004 +0000 + + Isolate most state changes in rpmgiNext, with lazy open/close. + Refactor some of the mess into subroutines. + + CVS patchset: 7483 + CVS date: 2004/10/18 22:47:20 + +commit e93a77c9b792b68c63ce7d3d360ab7f43d37feb6 +Author: jbj +Date: Mon Oct 18 01:08:56 2004 +0000 + + Add generalized iterator to rpmlib. + + CVS patchset: 7482 + CVS date: 2004/10/18 01:08:56 + +commit ed4688aca76a81449ac3debdd8ef60a7afd5c45d +Author: jbj +Date: Sun Oct 17 23:32:55 2004 +0000 + + Glob ftswalk/arglist args always. + + CVS patchset: 7481 + CVS date: 2004/10/17 23:32:55 + +commit 8f1ca37afaf5d83b9be72eb3e2aa6e2ed587084a +Author: jbj +Date: Sun Oct 17 23:11:24 2004 +0000 + + Add manifests to --arglist processing. + + CVS patchset: 7480 + CVS date: 2004/10/17 23:11:24 + +commit ed8a00518df4dd88d234c7ece4e6b481e21efbcc +Author: jbj +Date: Sun Oct 17 19:00:10 2004 +0000 + + - free rpmrc when looping on --target arches (#127730). + + CVS patchset: 7479 + CVS date: 2004/10/17 19:00:10 + +commit 18f7b6bc0e5510192207766135aa4ef9fe4c3b8a +Author: jbj +Date: Sun Oct 17 18:49:52 2004 +0000 + + - don't add time stamp to compressed man pages (#132526). + + CVS patchset: 7477 + CVS date: 2004/10/17 18:49:52 + +commit b4264419a8c36ff910d30b57b88cd59353ff02a9 +Author: jbj +Date: Sun Oct 17 18:44:15 2004 +0000 + + - permit Conflicts: /path/to/file. + + CVS patchset: 7476 + CVS date: 2004/10/17 18:44:15 + +commit 8b3d9c1a128528f000a92075c68f46d2410673e5 +Author: jbj +Date: Sun Oct 17 18:25:44 2004 +0000 + + Better error message. + + CVS patchset: 7475 + CVS date: 2004/10/17 18:25:44 + +commit 5a91608e9134873e5af65dc548f7552f12073d43 +Author: jbj +Date: Sun Oct 17 18:24:36 2004 +0000 + + fix: legacy syntax not even close. + - permit Obsoletes: /path/to/file. + + CVS patchset: 7474 + CVS date: 2004/10/17 18:24:36 + +commit dea95c48df9d7e9b54fbf2e54784938fdacbdde7 +Author: jbj +Date: Sat Oct 16 12:50:52 2004 +0000 + + Upgrade to db-4.3.14 internal. + + CVS patchset: 7473 + CVS date: 2004/10/16 12:50:52 + +commit a32e0850ed4599a9dce98819f4e22f944f3b2eac +Author: jbj +Date: Sat Oct 16 02:36:10 2004 +0000 + + Orphan. + + CVS patchset: 7472 + CVS date: 2004/10/16 02:36:10 + +commit d03f220fde879509cab2ac1c73b71b7efb52b737 +Author: jbj +Date: Sat Oct 16 01:31:54 2004 +0000 + + ... and in with the New ... + + CVS patchset: 7471 + CVS date: 2004/10/16 01:31:54 + +commit 2dc699bfe049b9319ea3719f604d25940ff52004 +Author: jbj +Date: Fri Oct 15 23:22:46 2004 +0000 + + Out with the old ... + + CVS patchset: 7470 + CVS date: 2004/10/15 23:22:46 + +commit 85a380eeaf8472a4f4235e7f7b2e32d5f9bcaa24 +Author: jbj +Date: Fri Oct 15 18:25:14 2004 +0000 + + - obsolete Serial:, Copyright:, and RHNPlatform: syntax in spec files. + + CVS patchset: 7469 + CVS date: 2004/10/15 18:25:14 + +commit d57bc03f6567acf6d1631541b97ce7cdb1b262bb +Author: jbj +Date: Fri Oct 15 00:14:29 2004 +0000 + + - disable expensive header+payload verifies in default config. + - adjust digest/signature stats to count #pkgs and bytes. + + CVS patchset: 7465 + CVS date: 2004/10/15 00:14:29 + +commit 44b6c334221653154fc75afd45115f530906f9e9 +Author: jbj +Date: Thu Oct 14 16:37:57 2004 +0000 + + Open ftswalk/argv paths to permit --qf on header. + + CVS patchset: 7464 + CVS date: 2004/10/14 16:37:57 + +commit d5bce7dc38c78eba9bf2f9e67554b1f1a3ca19eb +Author: jbj +Date: Thu Oct 14 15:45:41 2004 +0000 + + Hack in hdlist queries. + + CVS patchset: 7463 + CVS date: 2004/10/14 15:45:41 + +commit 9e30825226d5b1613eb210094fde5f5488fb4725 +Author: jbj +Date: Thu Oct 14 15:09:07 2004 +0000 + + - fix: don't set handler if SIG_IGN is already set (#134474). + + CVS patchset: 7462 + CVS date: 2004/10/14 15:09:07 + +commit 47ea5da7dd42de36b235b688205fb35f53e3cad6 +Author: jbj +Date: Wed Oct 13 21:03:29 2004 +0000 + + - silently add default %defattr(-,root,root) for all packages. + + CVS patchset: 7461 + CVS date: 2004/10/13 21:03:29 + +commit 5c095b4d656f6429700b1c585060b05308dd49e7 +Author: jbj +Date: Wed Oct 13 19:03:45 2004 +0000 + + Splint fiddles. + + CVS patchset: 7460 + CVS date: 2004/10/13 19:03:45 + +commit 3027bc96de4ca46c42de6e7cf0b31feed64334bc +Author: jbj +Date: Wed Oct 13 18:40:33 2004 +0000 + + Move rpm-python test scripts to test subdirectory. + + CVS patchset: 7459 + CVS date: 2004/10/13 18:40:33 + +commit c096a1d284fe9b4068af654d70b8bdf4a0f0cc81 +Author: jbj +Date: Wed Oct 13 15:33:50 2004 +0000 + + - python: add rpm.ps() object to carry problem set info. + - python: permit rpm.ds() analogue to hdr.dsFromHeader() creator. + - python: permit rpm.fi() analogue to hdr.fiFromHeader() creator. + + CVS patchset: 7458 + CVS date: 2004/10/13 15:33:50 + +commit f9dbc32cda89d152270557249004746ca4df975f +Author: jbj +Date: Wed Oct 13 15:28:19 2004 +0000 + + Permit fi = rpm.fi(h, tagN, flags) creator, analogous to h.fiFromHeader(). + Add optional flags to hdr_fiFromHeader(). + + CVS patchset: 7457 + CVS date: 2004/10/13 15:28:19 + +commit 8b2a6b9e8f3e4d39381900ae2c4a79ffb3ac0334 +Author: jbj +Date: Wed Oct 13 14:53:21 2004 +0000 + + Permit ds = rpm.ds(h, tagN, flags) creator, analogous to h.dsFromHeader(). + Add optional flags to hdr_dsFromHeader(). + + CVS patchset: 7456 + CVS date: 2004/10/13 14:53:21 + +commit 2f0f41425dae3d90f29c668983e2ff0bfb6c9a54 +Author: jbj +Date: Wed Oct 13 06:26:16 2004 +0000 + + Return current problem set form transaction. + + CVS patchset: 7455 + CVS date: 2004/10/13 06:26:16 + +commit 8ebeba69794be76533a1aad712b03a764e15800d +Author: jbj +Date: Wed Oct 13 05:47:55 2004 +0000 + + Remove pugly extra newline from --changelog. + + CVS patchset: 7454 + CVS date: 2004/10/13 05:47:55 + +commit 628676b987963c910ca6272e940b7fa85a5edf08 +Author: jbj +Date: Tue Oct 12 21:16:54 2004 +0000 + + More cleanup. + + CVS patchset: 7453 + CVS date: 2004/10/12 21:16:54 + +commit 78c3de9ce3e76ddc3483ec3f32a9a60e3509fc6e +Author: jbj +Date: Tue Oct 12 21:08:04 2004 +0000 + + No need for ps.NumProblems() method. + + CVS patchset: 7452 + CVS date: 2004/10/12 21:08:04 + +commit 112846247dc0f6e0a70b368c0e2bdf77a9355b33 +Author: jbj +Date: Tue Oct 12 20:26:05 2004 +0000 + + Proof-of-concept rpmps object. Ick ... + + CVS patchset: 7451 + CVS date: 2004/10/12 20:26:05 + +commit b576fa4259ff43d09fb56a9bb78f81dd13b8e148 +Author: jbj +Date: Tue Oct 12 00:13:22 2004 +0000 + + rpmps framework created. + + CVS patchset: 7450 + CVS date: 2004/10/12 00:13:22 + +commit 12ccd4fb2feb43f81ec6db27e38e8a04778f4c3f +Author: jbj +Date: Mon Oct 11 23:31:18 2004 +0000 + + Add Find and Merge methods, Sort stub. + + CVS patchset: 7449 + CVS date: 2004/10/11 23:31:18 + +commit 771d9e1222a2d2fc0790c5b9ae769f494ac61725 +Author: pauln +Date: Mon Oct 11 15:16:49 2004 +0000 + + Don't include Arch in release for backwards compat (#135008) + + CVS patchset: 7447 + CVS date: 2004/10/11 15:16:49 + +commit a2fd0f887e7091e4b35450ad482a460e051bd79f +Author: jbj +Date: Sun Oct 10 20:55:11 2004 +0000 + + Add --qf to rpmgi. + + CVS patchset: 7446 + CVS date: 2004/10/10 20:55:11 + +commit e7f1a0e59fcfd681ed6c7685777a3c94269c26dd +Author: jbj +Date: Sun Oct 10 05:30:48 2004 +0000 + + Create generic iterator (needs work). + + CVS patchset: 7445 + CVS date: 2004/10/10 05:30:48 + +commit fa313c61b0ced1bcdd26fabb934d195156fbc153 +Author: jbj +Date: Sun Oct 10 01:24:16 2004 +0000 + + Typo. + + CVS patchset: 7444 + CVS date: 2004/10/10 01:24:16 + +commit d1a74696d65c7904c9b2a4b29e356ecf7947c067 +Author: jbj +Date: Sat Oct 9 21:58:33 2004 +0000 + + Doxygen and cpp nit picks. + + CVS patchset: 7443 + CVS date: 2004/10/09 21:58:33 + +commit 3c792a32c1cc8547ea858613af64fde54cbdfc8b +Author: jbj +Date: Sat Oct 9 20:39:27 2004 +0000 + + Changes from rpm-4_3 branch. + + CVS patchset: 7442 + CVS date: 2004/10/09 20:39:27 + +commit a36aa761ec0f525c0a206f0a46d404a3ccab5887 +Author: jbj +Date: Sat Oct 9 20:22:01 2004 +0000 + + More changes from rpm-4_3 branch. + + CVS patchset: 7441 + CVS date: 2004/10/09 20:22:01 + +commit 24bb3c7ce2dafefb995ecc0fb0f1de3727b4aaee +Author: jbj +Date: Sat Oct 9 19:40:09 2004 +0000 + + Flush changes from rpm-4_3 branch. + + CVS patchset: 7440 + CVS date: 2004/10/09 19:40:09 + +commit 90168175522d3133caa3c7da0454c43c23bb06a0 +Author: jbj +Date: Sat Oct 9 18:32:24 2004 +0000 + + Splint fiddles. + + CVS patchset: 7439 + CVS date: 2004/10/09 18:32:24 + +commit dfcc57328817fe35c3d23d10a0337e8c95bbe7a2 +Author: jbj +Date: Sat Oct 9 18:23:00 2004 +0000 + + Splint fiddles. + + CVS patchset: 7438 + CVS date: 2004/10/09 18:23:00 + +commit f4545b773ce594f3fdeaaf1c03685ecdeb669984 +Author: jbj +Date: Sat Oct 9 18:07:24 2004 +0000 + + Splint fiddles. + + CVS patchset: 7437 + CVS date: 2004/10/09 18:07:24 + +commit c15266f569c77cbddc9b72c0fb83befcf00a0ab6 +Author: jbj +Date: Sat Oct 9 17:44:27 2004 +0000 + + Splint fiddles. + + CVS patchset: 7436 + CVS date: 2004/10/09 17:44:27 + +commit b831315e41173e27a4e402c65d318b43558c4fca +Author: jbj +Date: Sat Oct 9 17:29:22 2004 +0000 + + Splint fiddles. + + CVS patchset: 7435 + CVS date: 2004/10/09 17:29:22 + +commit d8822ba626caea60e6310157c1a180cde16bfe0a +Author: jbj +Date: Sat Oct 9 16:55:46 2004 +0000 + + Enable prototypes with splint. + + CVS patchset: 7434 + CVS date: 2004/10/09 16:55:46 + +commit 41d1ebf4bdec32219afce270140979f4f92104f3 +Author: jbj +Date: Sat Oct 9 16:25:56 2004 +0000 + + Upgrade to zlib-1.2.2. + + CVS patchset: 7433 + CVS date: 2004/10/09 16:25:56 + +commit 1f4f517ac07cce2edf9a7ac95dd9e4350bf1c99c +Author: jbj +Date: Sat Oct 9 16:12:14 2004 +0000 + + Splint annotations. + + CVS patchset: 7432 + CVS date: 2004/10/09 16:12:14 + +commit 808e41afe3482f2f4a63e15900d01cd410d1bbc6 +Author: pauln +Date: Mon Oct 4 15:03:43 2004 +0000 + + Don't version compare obsolete with package header + + CVS patchset: 7427 + CVS date: 2004/10/04 15:03:43 + +commit 502f88e0e67bb1df91e09a32a370b04bda36259e +Author: jbj +Date: Thu Sep 30 21:45:27 2004 +0000 + + - prevent RPMSENSE_PREREQ from being set or tested. + + CVS patchset: 7425 + CVS date: 2004/09/30 21:45:27 + +commit 10336f101cd2798c8eb64335f8cc57baadea6454 +Author: jbj +Date: Thu Sep 30 20:18:40 2004 +0000 + + - add Disttag: syntax to spec file parser and header content. + - define Suggests:/Enhances: and Priority: tag values. + + CVS patchset: 7424 + CVS date: 2004/09/30 20:18:40 + +commit 40409429140f8db038e62291ba92630f3928ca74 +Author: jbj +Date: Sun Sep 19 16:14:54 2004 +0000 + + - upgrade to pristine zlib-1.2.1.2. + + CVS patchset: 7420 + CVS date: 2004/09/19 16:14:54 + +commit 59293dd8928d6f0033a45fdef9e9f50a296a3a0b +Author: cturner +Date: Mon Sep 13 18:55:24 2004 +0000 + + add call to get headerUnload + + CVS patchset: 7418 + CVS date: 2004/09/13 18:55:24 + +commit dd17e87985c3fd2e76fc122c9dc01159fc8f11b9 +Author: jbj +Date: Tue Aug 31 15:39:37 2004 +0000 + + - ia64: auto-relocate entire, not partial, directory contents (#126905). + - ia64: auto-relocate glibc.ix86 interpreter path (#100563). + - shared libraries in separate rpm-libs package. + - fix: defattr for rpm-libs (#130461). + - fix: static glibc/libgcc helpers always installed (#127522). + - ia64: make sure that autorelocated file dependencies are satisfied. + - ia64: relocate all scriptlet interpreters. + - ia64: don't bother trying to preload autorelocated modules. + - fix: filesystem package needs mail/lock w/o getgrnam. + - fix: do getpwnam/getgrnam to load correct modules before chroot. + + CVS patchset: 7415 + CVS date: 2004/08/31 15:39:37 + +commit ce2ad5848a52c6ea96e8a29fb8eb40e314b25ccf +Author: jbj +Date: Thu Aug 19 17:00:15 2004 +0000 + + - avoid "can't happen" recursion while retrieving pubkeys. + + CVS patchset: 7401 + CVS date: 2004/08/19 17:00:15 + +commit 904e8dbf0d94fb93657f63cab6761565865d7f75 +Author: joden +Date: Wed Aug 18 02:30:49 2004 +0000 + + - Added support for $RPM_Requires and $RPM_Provides. + - Added POD. + + CVS patchset: 7398 + CVS date: 2004/08/18 02:30:49 + +commit 52bd07cec8e3bfd8370139af7a236ab77ba0ed70 +Author: joden +Date: Wed Aug 18 00:41:48 2004 +0000 + + - Fixed duplicate requires bug. + - Was not showing provides (not exists, shoudl have been exists on the ignore + check). + + CVS patchset: 7397 + CVS date: 2004/08/18 00:41:48 + +commit 7646f288f47c171a0c0d3e69d88d74e989b5d5f5 +Author: joden +Date: Wed Aug 11 11:04:48 2004 +0000 + + Second pass at edit to rpmtsRun doxygen. + + CVS patchset: 7396 + CVS date: 2004/08/11 11:04:48 + +commit 31b9e5419a824222880b4c85fab554e904ab90e0 +Author: joden +Date: Wed Aug 11 00:32:19 2004 +0000 + + Add docs to rpmtsRun to explain what is required before a call + to rpmtsRun can be successful. + + CVS patchset: 7395 + CVS date: 2004/08/11 00:32:19 + +commit e71a58fece93f6f25e8c2e1aafdc7b5ece3923f1 +Author: jbj +Date: Wed Aug 4 03:42:35 2004 +0000 + + Spint fiddles. + + CVS patchset: 7394 + CVS date: 2004/08/04 03:42:35 + +commit 20c3ac1c5049690fff934d2c62ee9dc8ee215844 +Author: jbj +Date: Tue Aug 3 21:51:05 2004 +0000 + + Install into /usr/lib64 where appropriate. + + CVS patchset: 7393 + CVS date: 2004/08/03 21:51:05 + +commit df56cd1e0d091e4db89a02ea531b6e4774ec244e +Author: jbj +Date: Tue Aug 3 21:16:26 2004 +0000 + + Modern autocrap conventions, dump acconfig.h. + + CVS patchset: 7392 + CVS date: 2004/08/03 21:16:26 + +commit be851958f2063a2abdf7524c060b9e480cc11596 +Author: jbj +Date: Tue Aug 3 20:43:07 2004 +0000 + + Remove more autocrap clinker. + + CVS patchset: 7391 + CVS date: 2004/08/03 20:43:07 + +commit 66bf198b5e347664b2bfbb8856058ae0219f483a +Author: jbj +Date: Tue Aug 3 20:37:14 2004 +0000 + + Remove autocrap clinker. + + CVS patchset: 7390 + CVS date: 2004/08/03 20:37:14 + +commit 6a12bc63ae1524bc22c36a960560de0a8785aec2 +Author: jbj +Date: Tue Aug 3 20:31:49 2004 +0000 + + Upgrade to file-4.10. + + CVS patchset: 7389 + CVS date: 2004/08/03 20:31:49 + +commit 311c1c7274224f386e12f71d6b70460ffa1b1637 +Author: jbj +Date: Tue Aug 3 20:16:18 2004 +0000 + + Upgrade to file-4.09. + + CVS patchset: 7388 + CVS date: 2004/08/03 20:16:18 + +commit 2b86cac35f6c633d500fda5c88262b93307c3093 +Author: jbj +Date: Tue Aug 3 06:32:42 2004 +0000 + + Annotate minigzip.c too. + + CVS patchset: 7387 + CVS date: 2004/08/03 06:32:42 + +commit e5a9674ee310e6c36d253c4509221331af77acf4 +Author: jbj +Date: Tue Aug 3 06:01:33 2004 +0000 + + Splint fiddles. + + CVS patchset: 7386 + CVS date: 2004/08/03 06:01:33 + +commit 8192896ba301cfa4a420a84b0ef9ccf097118dcf +Author: jbj +Date: Tue Aug 3 00:04:07 2004 +0000 + + Convert args to ANSI C. + Side effects annotated. + + CVS patchset: 7385 + CVS date: 2004/08/03 00:04:07 + +commit 83d6e589a5ac6b9a4ac001df05bb537ae5d97646 +Author: jbj +Date: Mon Aug 2 21:08:19 2004 +0000 + + Start splint annotations. + + CVS patchset: 7384 + CVS date: 2004/08/02 21:08:19 + +commit f3d9d5e38e5d46cf5898c316a4947248289e5734 +Author: jbj +Date: Mon Aug 2 20:56:53 2004 +0000 + + Retrofit auocrap. + + CVS patchset: 7383 + CVS date: 2004/08/02 20:56:53 + +commit 50d7519287bb97b6571d42333dd47c4953bcf2bd +Author: jbj +Date: Mon Aug 2 20:19:49 2004 +0000 + + Update to zlib-1.2.1.1. + + CVS patchset: 7382 + CVS date: 2004/08/02 20:19:49 + +commit 4214fd57d11e9bb57e72fcc61a2259ff172b12f4 +Author: jbj +Date: Mon Aug 2 19:32:37 2004 +0000 + + Out with the old. + + CVS patchset: 7381 + CVS date: 2004/08/02 19:32:37 + +commit 43aa4c17b0c5558515e0e32d6f9e956b54ffd369 +Author: jbj +Date: Mon Aug 2 16:56:03 2004 +0000 + + Splint fiddles. + + CVS patchset: 7380 + CVS date: 2004/08/02 16:56:03 + +commit 90afeb87035da6b7603dd0360fae23b5f715b0bf +Author: jbj +Date: Mon Aug 2 16:17:49 2004 +0000 + + Annotate function args. + + CVS patchset: 7379 + CVS date: 2004/08/02 16:17:49 + +commit 21bd2977b7f2f6fb43fab81fade1777938eaed15 +Author: jbj +Date: Mon Aug 2 08:42:28 2004 +0000 + + Splint fiddles. + + CVS patchset: 7378 + CVS date: 2004/08/02 08:42:28 + +commit b01550d8fc5a716a6111312fe49226663a96d19e +Author: jbj +Date: Mon Aug 2 03:30:10 2004 +0000 + + More #include fiddles. + Add python/system.h to insure python included before any glibc includes. + + CVS patchset: 7377 + CVS date: 2004/08/02 03:30:10 + +commit 6626798a65dcf66c7268d4dca95a32e140b01c40 +Author: jbj +Date: Mon Aug 2 02:23:27 2004 +0000 + + Add system.h and debug.h, remove internal include path structure. + + CVS patchset: 7376 + CVS date: 2004/08/02 02:23:27 + +commit 538aa3a481e0886ba1d255785ab38a720fc70c35 +Author: jbj +Date: Mon Aug 2 01:49:37 2004 +0000 + + Ignore generated files. + + CVS patchset: 7375 + CVS date: 2004/08/02 01:49:37 + +commit 47158a39af48eeb8b3ea0d8ede1626b47776c6de +Author: jbj +Date: Mon Aug 2 01:40:39 2004 +0000 + + Restore .cvsignores through out. + + CVS patchset: 7374 + CVS date: 2004/08/02 01:40:39 + +commit c0270060ca0f69d7edcbeadb84bec193526f3517 +Author: jbj +Date: Mon Aug 2 01:01:51 2004 +0000 + + Get rid of extraneous Makefile.in. + + CVS patchset: 7373 + CVS date: 2004/08/02 01:01:51 + +commit 8931f04c4dcc79d665aa703594f93ada56b6e0b9 +Author: jbj +Date: Mon Aug 2 00:45:38 2004 +0000 + + Upgrade to beecrypt-4.0.0. + + CVS patchset: 7372 + CVS date: 2004/08/02 00:45:38 + +commit 8462a31960e9cfd3274b83edd59f9cc3b74c40d2 +Author: jbj +Date: Sun Aug 1 19:05:02 2004 +0000 + + Make peace with automake-1.9. + + CVS patchset: 7371 + CVS date: 2004/08/01 19:05:02 + +commit b789f02618b62309b9cffc185e140ddf6fa20b54 +Author: jbj +Date: Sun Aug 1 16:33:55 2004 +0000 + + Make peace with automake-1.9. + + CVS patchset: 7368 + CVS date: 2004/08/01 16:33:55 + +commit 66250307ba9b85f37cc7f6c58537f3d8bfc17479 +Author: jbj +Date: Sat Jul 31 17:48:11 2004 +0000 + + Add support for beecrypt-4.0.0. + + CVS patchset: 7367 + CVS date: 2004/07/31 17:48:11 + +commit 316c323e09dde1e5685121c2d5c7f213681d85a1 +Author: jbj +Date: Mon Jul 5 20:14:28 2004 +0000 + + - ia64: auto-relocate glibc.ix86 interpreter path (#100563). + + CVS patchset: 7360 + CVS date: 2004/07/05 20:14:28 + +commit a63e1592af0425001191106c5ed080ed3099dfaa +Author: jbj +Date: Mon Jul 5 19:21:18 2004 +0000 + + - ia64: auto-relocate entire, not partial, directory contents (#126905). + + CVS patchset: 7357 + CVS date: 2004/07/05 19:21:18 + +commit 07444608bcf20037636a4811a47b87d66c05d942 +Author: jbj +Date: Mon Jul 5 15:24:17 2004 +0000 + + - bump rpm and popt versions to insure "newer". + - change default behavior to resolve file conflicts as LIFO. + - add --fileconflicts to recover rpm traditional behavior. + - prefer elf64 over elf32 files, everywhere and always (#126853). + + CVS patchset: 7354 + CVS date: 2004/07/05 15:24:17 + +commit bc600c50e38ad8b3ab4385c2c5bbb8073024fbd7 +Author: joden +Date: Tue Jun 29 01:05:27 2004 +0000 + + Allowed for "our" in from front of $RPM_Provides. + + CVS patchset: 7351 + CVS date: 2004/06/29 01:05:27 + +commit db72fdae404aabe204830e38ad91c210563abaed +Author: joden +Date: Tue Jun 29 00:44:07 2004 +0000 + + Changed spit() to split(). + Also, made the places where variables are grokked, allow for "our". + + CVS patchset: 7350 + CVS date: 2004/06/29 00:44:07 + +commit 7748d84d5cda2e1dc5844c1ddbdb58ac49ba0354 +Author: arekm +Date: Sun Jun 20 19:21:34 2004 +0000 + + Updated. + + CVS patchset: 7349 + CVS date: 2004/06/20 19:21:34 + +commit 8fa4686e09a678ec75c8f1db38fef3592b31689d +Author: arekm +Date: Sun Jun 20 18:55:19 2004 +0000 + + - find-lang.sh: implemented --with-kde (finds KDE help files); + add --all-name option (finds every lang file); drop defattr() + from *.lang files (arekm,mkochano,pascalek,wiget@PLD). + + CVS patchset: 7348 + CVS date: 2004/06/20 18:55:19 + +commit 5f27320366fc8963c8bd5568140039badda10b34 +Author: arekm +Date: Thu Jun 17 21:16:02 2004 +0000 + + - update pld emails + + CVS patchset: 7347 + CVS date: 2004/06/17 21:16:02 + +commit a413bb610f3f6ffe616650206ce096f61260074c +Author: arekm +Date: Thu Jun 17 20:53:28 2004 +0000 + + - fix: readelf.c breakage on some non x86 arches (qboosh@PLD). + (on top of previous readelf.c commit) + + CVS patchset: 7346 + CVS date: 2004/06/17 20:53:28 + +commit 40100f75a42b1b07efeb2f9a357f1291a3873aa4 +Author: arekm +Date: Thu Jun 17 20:52:03 2004 +0000 + + - update to readelf.c from 4.07 + + CVS patchset: 7345 + CVS date: 2004/06/17 20:52:03 + +commit a6e1622368cd564ea050a431e2146b28a306b81c +Author: arekm +Date: Thu Jun 17 20:18:34 2004 +0000 + + - conditional build support/unification (jajcus,malekith,qboosh,wiget@PLD). + (see macros.in for detailed explanation) + + CVS patchset: 7344 + CVS date: 2004/06/17 20:18:34 + +commit ee7456cc9f7100adea3d713b5fbc8b21e59012f8 +Author: jbj +Date: Wed Jun 16 17:48:07 2004 +0000 + + - add ppc8[25]60 arches. + + CVS patchset: 7343 + CVS date: 2004/06/16 17:48:07 + +commit 3b8c7177a73048d133aa783e4f7b8db184c85f28 +Author: jbj +Date: Tue Jun 15 21:01:34 2004 +0000 + + Achieve xml -> hdr -> xml idempotency. + + CVS patchset: 7341 + CVS date: 2004/06/15 21:01:34 + +commit a1af0d0f46bec874a50077c03c133f160203ad3d +Author: jbj +Date: Tue Jun 15 21:00:14 2004 +0000 + + Correct typos. + + CVS patchset: 7340 + CVS date: 2004/06/15 21:00:14 + +commit bb7ba371839408a7da6a14624cb29201598f05b2 +Author: jbj +Date: Tue Jun 15 20:16:22 2004 +0000 + + Generate header from xml parse. + + CVS patchset: 7339 + CVS date: 2004/06/15 20:16:22 + +commit dfc183d5a79725a1bc23858313adb5a7003f756c +Author: jbj +Date: Tue Jun 15 20:04:54 2004 +0000 + + Orphan. + + CVS patchset: 7338 + CVS date: 2004/06/15 20:04:54 + +commit 940d50af528b825a20a50177f542fa67b0e89db6 +Author: jbj +Date: Tue Jun 15 18:08:05 2004 +0000 + + - add type to tag array. + + CVS patchset: 7337 + CVS date: 2004/06/15 18:08:05 + +commit 64948579f6875faf51f0453ec8b85f329a5824a4 +Author: jbj +Date: Tue Jun 15 15:12:04 2004 +0000 + + Common signature/header data spew. + + CVS patchset: 7336 + CVS date: 2004/06/15 15:12:04 + +commit 5c83007efe26c8b155a5b9967ff6fd11943935a8 +Author: jbj +Date: Tue Jun 15 06:41:05 2004 +0000 + + Signature header dump and xml functional. + + CVS patchset: 7335 + CVS date: 2004/06/15 06:41:05 + +commit 8035f3bf5562158de092251d88c94430d3505ad8 +Author: jbj +Date: Tue Jun 15 06:39:25 2004 +0000 + + Use tag table passed to headerSprintf rather than tagName() for xml lookup. + + CVS patchset: 7334 + CVS date: 2004/06/15 06:39:25 + +commit 380a2a3d37203ca31546ece0800cc18c8f0821ec +Author: jbj +Date: Mon Jun 14 18:20:41 2004 +0000 + + - fix: disable fingerprint generation on kernel paths. + + CVS patchset: 7331 + CVS date: 2004/06/14 18:20:41 + +commit 32eace269f74b37e192091e228a3e086b03ba644 +Author: jbj +Date: Mon Jun 14 18:14:45 2004 +0000 + + Add time package and time.xar archive. + + CVS patchset: 7329 + CVS date: 2004/06/14 18:14:45 + +commit 62599080b8e340816154b63801e026d32032378b +Author: jbj +Date: Mon Jun 14 18:01:25 2004 +0000 + + ndle new-fangled empty tags. + + CVS patchset: 7328 + CVS date: 2004/06/14 18:01:25 + +commit 43c795b188af63fd2e98d6cb135f932e7d2ee6ed +Author: jbj +Date: Mon Jun 14 17:54:06 2004 +0000 + + Typo. + + CVS patchset: 7326 + CVS date: 2004/06/14 17:54:06 + +commit 06e0d71feb288f66aa851b79a66cfeb8ee229cbb +Author: jbj +Date: Mon Jun 14 17:46:45 2004 +0000 + + - xml: instead of 0 markup. + + CVS patchset: 7325 + CVS date: 2004/06/14 17:46:45 + +commit 0cfd37159a27802c8cc086dd182379bd4281c54b +Author: jbj +Date: Mon Jun 14 17:00:13 2004 +0000 + + - xml: use markup for empty tags. + + CVS patchset: 7324 + CVS date: 2004/06/14 17:00:13 + +commit 9c20832828e6d12375ddc9e691ace847a893b50f +Author: arekm +Date: Mon Jun 14 16:50:14 2004 +0000 + + Do amd64-linux|ia32e-linux, too. + + CVS patchset: 7322 + CVS date: 2004/06/14 16:50:14 + +commit a2a13dcee9ea4f6b7fb9d0cbe953a3d3a754b1b8 +Author: arekm +Date: Mon Jun 14 16:34:04 2004 +0000 + + Use libtool magic to build python modules. + + CVS patchset: 7321 + CVS date: 2004/06/14 16:34:04 + +commit 123d6b033c0f85eec3b5de74a9d81fb2048417c2 +Author: arekm +Date: Mon Jun 14 11:05:52 2004 +0000 + + Fix po files so newer gettext won't fail. + + CVS patchset: 7320 + CVS date: 2004/06/14 11:05:52 + +commit 1075276ec83ecd848ed9587efd66b822471e1d8f +Author: jbj +Date: Mon Jun 14 07:01:11 2004 +0000 + + Separate bit masks for input and output formats. + + CVS patchset: 7319 + CVS date: 2004/06/14 07:01:11 + +commit f8c9788c7e70517da8ce58671700bf74b71ada67 +Author: jbj +Date: Mon Jun 14 03:23:12 2004 +0000 + + Add rpmxp.c to rpmtool. + + CVS patchset: 7318 + CVS date: 2004/06/14 03:23:12 + +commit 7177fe1589cad14c70e39a95e078d09c7a96dc29 +Author: jbj +Date: Mon Jun 14 03:12:22 2004 +0000 + + First crack at xml parser object. + + CVS patchset: 7317 + CVS date: 2004/06/14 03:12:22 + +commit 4d51df0eeb17c458c3bcd424a21842f05a8ed8b3 +Author: jbj +Date: Mon Jun 14 02:42:44 2004 +0000 + + Add version and DTD to xml output spew. + + CVS patchset: 7316 + CVS date: 2004/06/14 02:42:44 + +commit 3397980c6153c8d63969a9a5c99ccc6dbadc5a8e +Author: jbj +Date: Mon Jun 14 02:26:19 2004 +0000 + + A libxml2 parser in C. + + CVS patchset: 7315 + CVS date: 2004/06/14 02:26:19 + +commit 0acd60292225044505bd0bbcc34693d5b7bc042f +Author: jbj +Date: Sun Jun 13 17:37:50 2004 +0000 + + Follow python naming conventions more closely. + Use XML_READER_FOO_TYPE rather than numbers. + + CVS patchset: 7314 + CVS date: 2004/06/13 17:37:50 + +commit d7de47c06770e55969fc6cfde6e3529b67021e02 +Author: jbj +Date: Sun Jun 13 17:10:18 2004 +0000 + + Add libxml2 handler. + + CVS patchset: 7313 + CVS date: 2004/06/13 17:10:18 + +commit f712c984b01e27148949a3bb3f0b068405da4153 +Author: jbj +Date: Sat Jun 12 12:12:25 2004 +0000 + + A pyexpat parser for rpmHeader xml. + + CVS patchset: 7312 + CVS date: 2004/06/12 12:12:25 + +commit 9ef3e18d7fec70705c9f2925766aa6af0de8658a +Author: jbj +Date: Fri Jun 11 21:49:46 2004 +0000 + + Splint. + + CVS patchset: 7311 + CVS date: 2004/06/11 21:49:46 + +commit 4bec6209478a73f34f0096ce0183d76f501da4e2 +Author: jbj +Date: Fri Jun 11 21:09:48 2004 +0000 + + splint fiddles. + + CVS patchset: 7310 + CVS date: 2004/06/11 21:09:48 + +commit ff5c99445acab9ddb11bcd8ada8798da2dcd3825 +Author: jbj +Date: Fri Jun 11 19:26:54 2004 +0000 + + - fix: malloc failure from dbus test suite (#124747). + + CVS patchset: 7309 + CVS date: 2004/06/11 19:26:54 + +commit 7bdc1f24fdb9c3468d76097ca757802cc5bac9fe +Author: jbj +Date: Fri Jun 11 17:56:01 2004 +0000 + + Sanity. + + CVS patchset: 7308 + CVS date: 2004/06/11 17:56:01 + +commit 99e34f26fb35e4dbaffa83d795ae2af1f500cb23 +Author: jbj +Date: Fri Jun 11 17:52:58 2004 +0000 + + - python: permit integer keys to ts.dbMatch(). + + CVS patchset: 7306 + CVS date: 2004/06/11 17:52:58 + +commit 3186a9ba73b093c3d77f6f041163c3bfc8ceabad +Author: jbj +Date: Thu Jun 10 16:33:16 2004 +0000 + + - python: return ds, not tuple, for ds iteration. + + CVS patchset: 7305 + CVS date: 2004/06/10 16:33:16 + +commit b41bba2c1696a073e03b5e8db8947a860dfd8fdd +Author: pauln +Date: Thu Jun 10 14:48:46 2004 +0000 + + Return a single ds if you try and iterate over a single ds + + CVS patchset: 7301 + CVS date: 2004/06/10 14:48:46 + +commit 4b3532d3419b210582121089069cba228d0cf502 +Author: jbj +Date: Thu Jun 10 13:26:50 2004 +0000 + + - add 'requires' and 'conflicts' tag aliases. + + CVS patchset: 7300 + CVS date: 2004/06/10 13:26:50 + +commit 08d0abf87895af248aaa61bbbb1da58a0e12bf41 +Author: jbj +Date: Tue Jun 8 15:26:20 2004 +0000 + + Permit sanity check on immutable region tags too. + + CVS patchset: 7297 + CVS date: 2004/06/08 15:26:20 + +commit e672824ee3375c300c5bd18b164627d6ff15d05c +Author: jbj +Date: Tue Jun 8 15:22:57 2004 +0000 + + Preserve allignment for missing files with --verify. + + CVS patchset: 7295 + CVS date: 2004/06/08 15:22:57 + +commit bf5333001a67bbda3877973c623e49f07b65ba4e +Author: jbj +Date: Tue Jun 1 16:37:33 2004 +0000 + + - fix: dev package build on s390x hack around. + + CVS patchset: 7289 + CVS date: 2004/06/01 16:37:33 + +commit 9f035a4d8a924dad4a6e8306844d6831bf7676fd +Author: jbj +Date: Tue Jun 1 13:58:57 2004 +0000 + + - fix: "/path/foo.../bar" was losing a dot (#123844). + + CVS patchset: 7287 + CVS date: 2004/06/01 13:58:57 + +commit 5aed900edbabdb5600163786f9dbfea33e7351dd +Author: jbj +Date: Mon May 31 22:02:27 2004 +0000 + + Create output path for opath template. + + CVS patchset: 7285 + CVS date: 2004/05/31 22:02:27 + +commit f8b744a53c7785d7770e83ae2661443c4dd735da +Author: jbj +Date: Mon May 31 20:44:17 2004 +0000 + + The death of rpmarchive.c. + CVS ---------------------------------------------------------------------- + + CVS patchset: 7284 + CVS date: 2004/05/31 20:44:17 + +commit 02eea0067fae78dea88acaa31749c4562b0f03ab +Author: jbj +Date: Mon May 31 20:16:28 2004 +0000 + + Create rpmtool to replace the toy example programs. + + CVS patchset: 7283 + CVS date: 2004/05/31 20:16:28 + +commit 6fc421d2352be905c44829a537c98119fa30d4f2 +Author: jbj +Date: Mon May 31 20:12:09 2004 +0000 + + Typo. + + CVS patchset: 7282 + CVS date: 2004/05/31 20:12:09 + +commit d99838e608993ff6ae0e29f1d8b179b2db12e42a +Author: jbj +Date: Sun May 30 22:27:38 2004 +0000 + + Upgrade to expat-1.9.7. + + CVS patchset: 7281 + CVS date: 2004/05/30 22:27:38 + +commit 99e2bddb673b2a8b2f4398b8cc1746cd1cfc2342 +Author: jbj +Date: Sun May 30 17:52:57 2004 +0000 + + - use /etc/selinux/targeted/contexts/files/file_contexts for now. + - disable file contexts into package metadata during build. + + CVS patchset: 7280 + CVS date: 2004/05/30 17:52:57 + +commit a29bd9bb89f277602edcf115b7a388f281a0e04b +Author: jbj +Date: Sun May 30 17:52:11 2004 +0000 + + - fix: follow current is_selinux_enabled() return (#121004). + + CVS patchset: 7279 + CVS date: 2004/05/30 17:52:11 + +commit 401cd94fb94d6a940f17f4740f322476d0addc8e +Author: jbj +Date: Sun May 30 17:46:39 2004 +0000 + + Make peace with latest autofoo. + + CVS patchset: 7277 + CVS date: 2004/05/30 17:46:39 + +commit 42386beb8b189a1376cfc4a6e7a69b180a538a12 +Author: jbj +Date: Sat May 29 15:56:01 2004 +0000 + + - use poll(2) if available, avoid borked aurora/sparc select (#124574). + + CVS patchset: 7276 + CVS date: 2004/05/29 15:56:01 + +commit aab51e6392d79b925dba37f198a36b18fefdbee8 +Author: jbj +Date: Sat May 29 13:47:39 2004 +0000 + + Identify caos distribution (#124746). + + CVS patchset: 7273 + CVS date: 2004/05/29 13:47:39 + +commit 1d7dfb26c721095d1086dea8eab4979064eb9cd7 +Author: jbj +Date: Fri May 28 04:47:42 2004 +0000 + + More cleanup, remove compile warnings. + + CVS patchset: 7270 + CVS date: 2004/05/28 04:47:42 + +commit 84aef46ba35a80454e71d860f488ef7357355d5e +Author: jbj +Date: Fri May 28 04:34:21 2004 +0000 + + Code cleanup. + + CVS patchset: 7269 + CVS date: 2004/05/28 04:34:21 + +commit d0df223d839dea8324bfb17f90308a93ffcbf796 +Author: jbj +Date: Fri May 28 03:12:43 2004 +0000 + + Sanity clean-up. + + CVS patchset: 7268 + CVS date: 2004/05/28 03:12:43 + +commit 10dcc28d51a08e9b3a78690e9ac6a3c5ea31c41d +Author: jbj +Date: Fri May 28 03:02:02 2004 +0000 + + Make sexpOutputStream entirely opaque. + + CVS patchset: 7267 + CVS date: 2004/05/28 03:02:02 + +commit 48a7ecb978f77409f0a45b247e399801fbd95bb7 +Author: jbj +Date: Fri May 28 02:41:00 2004 +0000 + + Make input stream entirely opaque. + + CVS patchset: 7266 + CVS date: 2004/05/28 02:41:00 + +commit beb0021a4c9933f04046a9e5457f09fd88259df3 +Author: jbj +Date: Fri May 28 01:48:49 2004 +0000 + + Make sexpString and sexpList opaque and abstract. + + CVS patchset: 7265 + CVS date: 2004/05/28 01:48:49 + +commit b45401eaff532bf58c300d697265449fcf88c447 +Author: jbj +Date: Fri May 28 01:18:36 2004 +0000 + + Make sexpSimpleString and sexpObject opaque and abstract. + + CVS patchset: 7264 + CVS date: 2004/05/28 01:18:36 + +commit 75e1e268c3236ab5bfd6d891839260ca7f7b20be +Author: jbj +Date: Fri May 28 00:55:56 2004 +0000 + + Continue making structures abstarct and opaque. + + CVS patchset: 7263 + CVS date: 2004/05/28 00:55:56 + +commit d95c3f7fa53835042958a9d4332c12d6c0025267 +Author: jbj +Date: Thu May 27 23:53:43 2004 +0000 + + Splint fiddles. + + CVS patchset: 7262 + CVS date: 2004/05/27 23:53:43 + +commit 38f19a18df9320b9bfc80464888fe4c2d106dced +Author: jbj +Date: Thu May 27 23:07:01 2004 +0000 + + Use popt instead. + + CVS patchset: 7261 + CVS date: 2004/05/27 23:07:01 + +commit bde534de89f018d9c6cd3f1e722734ec2ffd5798 +Author: jbj +Date: Thu May 27 21:35:37 2004 +0000 + + Add no-brainer make check. + + CVS patchset: 7260 + CVS date: 2004/05/27 21:35:37 + +commit e2f84dd30882d16855eb2e693170c62d9eee76e6 +Author: jbj +Date: Thu May 27 20:57:47 2004 +0000 + + Splint fiddles. + + CVS patchset: 7259 + CVS date: 2004/05/27 20:57:47 + +commit a70db07ead554f0af9467a6a8f6eda95797e55b6 +Author: jbj +Date: Thu May 27 20:20:23 2004 +0000 + + Zap trialing white space. + + CVS patchset: 7258 + CVS date: 2004/05/27 20:20:23 + +commit b1dc346f8ad221f282a51b10fd2f47a164026d71 +Author: jbj +Date: Thu May 27 20:19:13 2004 +0000 + + Zap ^M everywhere. + + CVS patchset: 7257 + CVS date: 2004/05/27 20:19:13 + +commit 8ef74a59838498443ae9fb28d0d14101bf771a27 +Author: jbj +Date: Thu May 27 20:16:55 2004 +0000 + + Splint fiddles. + + CVS patchset: 7256 + CVS date: 2004/05/27 20:16:55 + +commit 6aed2fa8ac85c8bc8f116309c2d96bd0e45263c8 +Author: jbj +Date: Thu May 27 19:00:51 2004 +0000 + + ANSI C prototypes, no-brainer splint annotations. + + CVS patchset: 7255 + CVS date: 2004/05/27 19:00:51 + +commit 26371c10a6237a016419d22cc8d773e32cd587e8 +Author: jbj +Date: Thu May 27 18:10:44 2004 +0000 + + No-brainer autocrap wrapper. + + CVS patchset: 7254 + CVS date: 2004/05/27 18:10:44 + +commit 0023779c86c940a9fe47d4b45195022f94538174 +Author: jbj +Date: Thu May 27 17:55:01 2004 +0000 + + Creat from Rivest's sexp distribution. + + CVS patchset: 7253 + CVS date: 2004/05/27 17:55:01 + +commit 86700899e6a1c6816be064a66ef264db4c170f8e +Author: jbj +Date: Wed May 26 21:10:07 2004 +0000 + + - add aurora/sparc patches (#124469). + + CVS patchset: 7252 + CVS date: 2004/05/26 21:10:07 + +commit 8a960623dffee67386797e4ea4ac2fd3dc61de76 +Author: cturner +Date: Wed May 26 12:26:04 2004 +0000 + + constants to help with dep resolution; from Daniel P. Berrange, berrange@redhat.com + + CVS patchset: 7250 + CVS date: 2004/05/26 12:26:04 + +commit 83a0eb0b3633cdec627971d84dbbbb801870999c +Author: pauln +Date: Fri May 21 11:43:05 2004 +0000 + + Fix to detect PIE executables and don't add as library provides + + CVS patchset: 7249 + CVS date: 2004/05/21 11:43:05 + +commit ae687a3144f83e88f45281461074a424c166700c +Author: arekm +Date: Thu May 20 21:30:00 2004 +0000 + + Fix help for list-file option. + + CVS patchset: 7248 + CVS date: 2004/05/20 21:30:00 + +commit 96063191fc5d3902e0ef56781be34c2a454a1cbd +Author: niemeyer +Date: Tue May 4 21:12:04 2004 +0000 + + - Adding support for integer keys in ts.dbMatch(). + - Adding readHeaderFromFD(). + + CVS patchset: 7247 + CVS date: 2004/05/04 21:12:04 + +commit bd7c49f4e0e6c58de08b8888043e2f6f7f151897 +Author: joden +Date: Tue May 4 06:04:23 2004 +0000 + + %postun failures are now propagated back to transaction state machine. + ...james + + CVS patchset: 7246 + CVS date: 2004/05/04 06:04:23 + +commit ed47ca65b121a14efefa4718074402fb69fb173c +Author: joden +Date: Mon May 3 17:29:16 2004 +0000 + + Minor tweaks to comments in autorollback code, made removal of re-packaged + package print to standard out in arb and rb code. + ...james + + CVS patchset: 7245 + CVS date: 2004/05/03 17:29:16 + +commit f748bc43d91694a8ea7d4d4546bab2a635e1d79d +Author: jbj +Date: Mon Apr 19 12:12:12 2004 +0000 + + Splint fiddles. + + CVS patchset: 7242 + CVS date: 2004/04/19 12:12:12 + +commit b687c65d77a2efa630a46206682c7d5495549de3 +Author: jbj +Date: Mon Apr 19 12:06:30 2004 +0000 + + splint fiddles. + + CVS patchset: 7241 + CVS date: 2004/04/19 12:06:30 + +commit 2296caaece3b4b5f17f483c80655d354a5bdb1d2 +Author: niemeyer +Date: Sun Apr 18 23:47:29 2004 +0000 + + Force global Lua state initialization during rpmReadConfigFiles(). + + CVS patchset: 7240 + CVS date: 2004/04/18 23:47:29 + +commit a018c6e59c4abccce831ddb3a292198721b9a82a +Author: niemeyer +Date: Sun Apr 18 20:47:29 2004 +0000 + + Implemented Lua support for the hooking system. + + CVS patchset: 7239 + CVS date: 2004/04/18 20:47:29 + +commit a19d5569cdbeb72780e7ea694bbf7d31538aaa1c +Author: niemeyer +Date: Sun Apr 18 18:30:21 2004 +0000 + + Implemented external interface for the hooking system, and + included in rpm context. + + CVS patchset: 7238 + CVS date: 2004/04/18 18:30:21 + +commit e0c6886a5478c9e1b1721312973c49758ad171b4 +Author: niemeyer +Date: Sun Apr 18 03:23:39 2004 +0000 + + Adding in-development hooking system into the repository. + + CVS patchset: 7237 + CVS date: 2004/04/18 03:23:39 + +commit a7722ac9939189915d8863779af95d8a10c583f8 +Author: cturner +Date: Wed Apr 14 12:46:13 2004 +0000 + + prep for release + + CVS patchset: 7235 + CVS date: 2004/04/14 12:46:13 + +commit c37ab909a265d0560a8999da87507ba69ba101eb +Author: cturner +Date: Wed Apr 14 12:44:30 2004 +0000 + + integrate test patch from ville + + CVS patchset: 7234 + CVS date: 2004/04/14 12:44:30 + +commit 005e4f513105bbf602bb2f04990f2c2b738d8ff6 +Author: niemeyer +Date: Tue Apr 13 16:34:40 2004 +0000 + + Fixed bug in "rpm -qf": if a file in the current directory had the + same name as a dependency provided by some package, "rpm -qf filename" + would return the package owning that dependency. + + CVS patchset: 7233 + CVS date: 2004/04/13 16:34:40 + +commit 606192b963798c359deac6ff60e09ff9045c3b6b +Author: cturner +Date: Fri Apr 9 13:20:57 2004 +0000 + + patches from Ville to add changelog support + + CVS patchset: 7232 + CVS date: 2004/04/09 13:20:57 + +commit 70905ee4c6f5e0e7ce3a0c9c5cd297fbe99d0483 +Author: niemeyer +Date: Thu Apr 8 20:27:53 2004 +0000 + + Implemented multiline macro support. + + CVS patchset: 7231 + CVS date: 2004/04/08 20:27:53 + +commit 66f860d94fa9b33f4abfcc41ea2267bd2660c613 +Author: jbj +Date: Thu Apr 8 00:12:01 2004 +0000 + + - perl: use __perl for perl variable macros (#115156). + + CVS patchset: 7229 + CVS date: 2004/04/08 00:12:01 + +commit 2e491f5fcf77f7b61d2ab96e095bd72b95d544c4 +Author: jbj +Date: Thu Apr 8 00:07:13 2004 +0000 + + Typos. + + CVS patchset: 7228 + CVS date: 2004/04/08 00:07:13 + +commit d10d7501ec2d5fe532bb6213899b2933e75fec10 +Author: jbj +Date: Thu Apr 8 00:04:17 2004 +0000 + + Add bug number. + + CVS patchset: 7225 + CVS date: 2004/04/08 00:04:17 + +commit ec32c2ab0da852fe0bf30aaf39429f964de9dc30 +Author: jbj +Date: Thu Apr 8 00:03:51 2004 +0000 + + - perl: skip new-fangled head[34] while gerenerating deps (#118243). + + CVS patchset: 7224 + CVS date: 2004/04/08 00:03:51 + +commit 12d5c367af207a802583264dc70d986c19b02b09 +Author: jbj +Date: Wed Apr 7 23:50:35 2004 +0000 + + - fix: no transaction lock if --test was specified (#119783). + + CVS patchset: 7222 + CVS date: 2004/04/07 23:50:35 + +commit dc885367f50e2d0669abd6308e1a09bb9aa9ae2d +Author: jbj +Date: Wed Apr 7 23:26:00 2004 +0000 + + - fix: segfault on --recontext if file_contexts unreadable (#117374). + - fix: /etc/security/selinux/file_contexts is default path. + + CVS patchset: 7220 + CVS date: 2004/04/07 23:26:00 + +commit 84573a3571e268dff5d103b47bf1ecb37127a13a +Author: jbj +Date: Wed Apr 7 18:07:08 2004 +0000 + + Splint fiddles. + + CVS patchset: 7219 + CVS date: 2004/04/07 18:07:08 + +commit e81af296a9961dc92dde4ac03353c858b944d8eb +Author: jbj +Date: Wed Apr 7 17:31:29 2004 +0000 + + Make peace with libtool-1.5.4. + + CVS patchset: 7218 + CVS date: 2004/04/07 17:31:29 + +commit f98e6cf1a20a9d22942b1bbe7a5b411bc1b8754d +Author: jbj +Date: Wed Apr 7 17:30:07 2004 +0000 + + Make peace with libtool-1.5.3. + + CVS patchset: 7217 + CVS date: 2004/04/07 17:30:07 + +commit 0d73d4699b47f839db61580687fc972f48dd42d6 +Author: jbj +Date: Thu Apr 1 12:56:54 2004 +0000 + + revert buildtime tie breaking, not the right thing to do. + splint fiddles. + + CVS patchset: 7216 + CVS date: 2004/04/01 12:56:54 + +commit 34daf7ced86d499d1b5fc08b0b0cc430fc8678e8 +Author: jbj +Date: Tue Mar 30 21:00:47 2004 +0000 + + Start rpm-4.4 devel. + + CVS patchset: 7210 + CVS date: 2004/03/30 21:00:47 + +commit e757135378572360076a1086d0e6783bd6d65928 +Author: arekm +Date: Tue Mar 30 18:13:11 2004 +0000 + + Document last changes. + + CVS patchset: 7209 + CVS date: 2004/03/30 18:13:11 + +commit 4458dc3de868237a2fdf4b7f1ea57370b64b07f4 +Author: arekm +Date: Tue Mar 30 16:41:37 2004 +0000 + + Simplify cpuid code; fix it for gcc 3.4; always push/pop ebx for PIC and non PIC. Patch by Pawe³ Sikora . + Modified Files: lib/rpmrc.c + + CVS patchset: 7208 + CVS date: 2004/03/30 16:41:37 + +commit f1dab7350d83b962264f7f39928c1d5c62d92088 +Author: arekm +Date: Tue Mar 30 00:40:26 2004 +0000 + + Make rpmGlob() locale independent to get stable behaviour whatever locale is used when building (Artur Frysiak ). + Modified Files: rpmio/macro.c + + CVS patchset: 7207 + CVS date: 2004/03/30 00:40:26 + +commit 08c64490958627beb726eadf4ced1857ce7f75eb +Author: jbj +Date: Mon Mar 29 07:43:42 2004 +0000 + + Proof-of-concept for arch filtered dependencies. + + CVS patchset: 7206 + CVS date: 2004/03/29 07:43:42 + +commit 12e86b2c5f10e7853fca8bdc0007aeaeea6dcfb7 +Author: arekm +Date: Sun Mar 28 20:10:54 2004 +0000 + + buildarchtranslate p3/p4 to i386 as it's on other cases (athlon/i686/i586) + + CVS patchset: 7205 + CVS date: 2004/03/28 20:10:54 + +commit 0acbe9ea0cec65a66c9fb8f96d1d4e188c242451 +Author: jbj +Date: Sun Mar 28 16:24:02 2004 +0000 + + Typo. + + CVS patchset: 7204 + CVS date: 2004/03/28 16:24:02 + +commit 68325b9175c8306bf80fc2031c59c519f8a0e17c +Author: jbj +Date: Sun Mar 28 16:07:26 2004 +0000 + + - scareMem = 0 everywhere, document deprecation phase out. + + CVS patchset: 7203 + CVS date: 2004/03/28 16:07:26 + +commit 13ca035edbc9a954d57048391e725d546c6bafb0 +Author: jbj +Date: Sun Mar 28 15:06:10 2004 +0000 + + - fix: don't add leading space to %* argv expansion (#119059). + + CVS patchset: 7202 + CVS date: 2004/03/28 15:06:10 + +commit dff80a94cc80be4aa9e6a71ca271c8640fcea323 +Author: jbj +Date: Sun Mar 28 14:57:53 2004 +0000 + + - use package build time as EVR comparison tie breaker. + + CVS patchset: 7201 + CVS date: 2004/03/28 14:57:53 + +commit 94c663d938df4c866bcb70ba5266d55d68a9bdc6 +Author: jbj +Date: Sun Mar 28 13:49:19 2004 +0000 + + Sanity. + + CVS patchset: 7200 + CVS date: 2004/03/28 13:49:19 + +commit 9673560957adfe65d8dc9129b0dbcea4451c0109 +Author: arekm +Date: Sun Mar 28 02:58:54 2004 +0000 + + Polish translation update. + + CVS patchset: 7199 + CVS date: 2004/03/28 02:58:54 + +commit b07c0fbce4c6647cd8bb2dde7b3416d95dfdf986 +Author: arekm +Date: Sun Mar 28 02:41:32 2004 +0000 + + pentium3/pentium4 support by Pawe³ Sikora . + Modified Files: installplatform macros.in rpmrc.in lib/rpmrc.c lib/rpmts.c + + CVS patchset: 7198 + CVS date: 2004/03/28 02:41:32 + +commit 1cdfdb8b6ca37e51631b1ca44cf43636929bfaa9 +Author: arekm +Date: Sun Mar 28 00:49:54 2004 +0000 + + When fixing permissions do u+w, too (fixes badly packaged tarballs) + + CVS patchset: 7197 + CVS date: 2004/03/28 00:49:54 + +commit a8b1e8604841890131b0c31554de89374de3a38e +Author: joden +Date: Sat Mar 27 11:34:14 2004 +0000 + + Made it so %* does not evaluate with a leading space. For instance: + %define xxx() "%{*}" + %xxx 1 2 3 + would evaluate to: + " 1 2 3" + and now evaluates to: + "1 2 3" + + CVS patchset: 7196 + CVS date: 2004/03/27 11:34:14 + +commit 60057a2de1e72a8077afc926e40addc923695419 +Author: jbj +Date: Fri Mar 26 17:27:57 2004 +0000 + + Splint fiddles. + + CVS patchset: 7195 + CVS date: 2004/03/26 17:27:57 + +commit 18fe40be2d0c5a5b0d52e4cdccda909c812a9882 +Author: jbj +Date: Fri Mar 26 15:44:18 2004 +0000 + + Typo. + + CVS patchset: 7194 + CVS date: 2004/03/26 15:44:18 + +commit f3fb31edbb7a1202c225da48cd14e2c69cbd3e56 +Author: jbj +Date: Fri Mar 26 15:42:45 2004 +0000 + + splint fiddles. + + CVS patchset: 7193 + CVS date: 2004/03/26 15:42:45 + +commit 227d09b4ba879b63a4af3f0220011f3a182e4741 +Author: jbj +Date: Thu Mar 25 19:41:22 2004 +0000 + + Endian neutral join keys for rpmdbAdd() and rpmdbRemove(). + + CVS patchset: 7192 + CVS date: 2004/03/25 19:41:22 + +commit 951c816851735ebc4a3ee50d1b6950966785d1a5 +Author: jbj +Date: Thu Mar 25 18:14:03 2004 +0000 + + - endian neutral rpmdb join keys (finally). + + CVS patchset: 7191 + CVS date: 2004/03/25 18:14:03 + +commit c096a690b819a14072d9465fe91cfe349a3e9214 +Author: niemeyer +Date: Wed Mar 24 19:47:11 2004 +0000 + + - Now Lua interface is using a global state. + - /usr/lib/rpm/init.lua is called during intialization. + + CVS patchset: 7188 + CVS date: 2004/03/24 19:47:11 + +commit 47d16168ca1f3793a0a0e822763992d3a0356418 +Author: niemeyer +Date: Tue Mar 23 23:52:45 2004 +0000 + + Removing unwanted "static" attribute in "luaL_reg *lib". Using it + removes the prectability of initalization order in relation to + lualibs. + + CVS patchset: 7187 + CVS date: 2004/03/23 23:52:45 + +commit b0ccb6fc076aedd8c3ee8dd1eb67dbce92c84e83 +Author: niemeyer +Date: Tue Mar 23 18:38:19 2004 +0000 + + Adding missing entries in EXTRA_DIST. + + CVS patchset: 7186 + CVS date: 2004/03/23 18:38:19 + +commit d843388f7eec3da4dfe0930b7c66497e38102baf +Author: jbj +Date: Tue Mar 23 14:49:38 2004 +0000 + + Uniqify symbols to prevent name space pollution. + + CVS patchset: 7185 + CVS date: 2004/03/23 14:49:38 + +commit 58c9db0b19e1f61758e63516c3d99c60ed9b103a +Author: jbj +Date: Tue Mar 23 07:18:55 2004 +0000 + + Spint fiddles. + + CVS patchset: 7184 + CVS date: 2004/03/23 07:18:55 + +commit bc35b858d6638674ed6e94af87137fbcbe3c826e +Author: jbj +Date: Tue Mar 23 05:52:59 2004 +0000 + + Splint fiddles. + + CVS patchset: 7183 + CVS date: 2004/03/23 05:52:59 + +commit 7b5c3b42c9b847badc5c6f66f054ee536ce82edd +Author: jbj +Date: Tue Mar 23 05:09:13 2004 +0000 + + Splint annotations. + + CVS patchset: 7182 + CVS date: 2004/03/23 05:09:13 + +commit 9ecefd3901e8d3dc5652247bb4ab02f73a949fb7 +Author: jbj +Date: Tue Mar 23 02:27:55 2004 +0000 + + Splint annotations. + + CVS patchset: 7181 + CVS date: 2004/03/23 02:27:55 + +commit 8255684ac781a966ea7835c1015411c0b0ee4f4d +Author: jbj +Date: Sun Mar 21 13:25:53 2004 +0000 + + Automake 1.8.3. + + CVS patchset: 7180 + CVS date: 2004/03/21 13:25:53 + +commit fa111e33baa1443d7d84b0872234e60f46ab948f +Author: niemeyer +Date: Fri Mar 19 21:14:32 2004 +0000 + + Upgrading to Lua 5.0.2. + + CVS patchset: 7179 + CVS date: 2004/03/19 21:14:32 + +commit 635edd95230e17e8ada5793719d7e385e729df30 +Author: niemeyer +Date: Fri Mar 19 20:08:20 2004 +0000 + + - New internal Lua support scheme, laying under rpmio. + - New API abstracting access to Lua state (rpmlua is + abstract to everyone but rpmlua.c). + - New %{lua: ... } macro. + Modified Files: + lib/Makefile.am lib/psm.c lib/rpmts.c lua/local/linit.lch + lua/local/linit.lua rpmio/Makefile.am rpmio/macro.c + Added Files: + rpmio/rpmlua.c rpmio/rpmlua.h + Removed Files: + lib/rpmlua.c lib/rpmlua.h + + CVS patchset: 7178 + CVS date: 2004/03/19 20:08:20 + +commit a1a283837a6b70c9ee4731f9172cfc614a1a7c6b +Author: jbj +Date: Thu Mar 18 15:29:23 2004 +0000 + + Resurrect "other endian" rpmdb functionality. + + CVS patchset: 7177 + CVS date: 2004/03/18 15:29:23 + +commit 73260d956c54a3d95aa7d367c09ed3e2cb2a2a00 +Author: niemeyer +Date: Tue Mar 16 21:58:25 2004 +0000 + + - Implemented support for internal Lua scripts. + - Implemented %pretrans and %posttrans script slots. + Changed files: + Makefile.am configure.ac build/pack.c build/parseScript.c + build/parseSpec.c build/rpmbuild.h build/rpmspec.h + lib/Makefile.am lib/psm.c lib/rpmlib.h lib/rpmlibprov.c + lib/rpmts.c lib/rpmts.h lib/transaction.c + Added files: + lib/rpmlua.c lib/rpmlua.h lua/* + + CVS patchset: 7175 + CVS date: 2004/03/16 21:58:25 + +commit 55f77d61d72a3993436db9a8eefec9eaa7fb61ae +Author: jbj +Date: Tue Mar 16 17:13:25 2004 +0000 + + - fix: grrr, skip notes on non-i386 entirely. + + CVS patchset: 7174 + CVS date: 2004/03/16 17:13:25 + +commit aac00c11d5865e36b054b1ac8a6f476517b7aca8 +Author: jbj +Date: Mon Mar 15 14:40:01 2004 +0000 + + re-add splint fiddles. + + CVS patchset: 7172 + CVS date: 2004/03/15 14:40:01 + +commit d440039375df3dab23c796005e14a64475b3946d +Author: jbj +Date: Sat Mar 13 13:34:44 2004 +0000 + + - fix: handle elf64 note sections correctly. + + CVS patchset: 7171 + CVS date: 2004/03/13 13:34:44 + +commit dde3339464686204bc339007054214bf78f85fc2 +Author: jbj +Date: Thu Mar 11 17:33:17 2004 +0000 + + - fix: ENOTSUP filter from lsetfilecon borkage. + + CVS patchset: 7168 + CVS date: 2004/03/11 17:33:17 + +commit 5f12397f520f3a879ed82e73046cad62b9bec633 +Author: pauln +Date: Thu Mar 11 08:32:02 2004 +0000 + + Make spec-py lint free. + + CVS patchset: 7166 + CVS date: 2004/03/11 08:32:02 + +commit da9a1be04c4225fd6855c900ff3c011ac2347b50 +Author: pauln +Date: Thu Mar 11 07:03:40 2004 +0000 + + Begin lint fixes for spec-py + + CVS patchset: 7165 + CVS date: 2004/03/11 07:03:40 + +commit fcfdff02e8304b6ba36a0e8667c0172dec898444 +Author: pauln +Date: Thu Mar 11 06:25:48 2004 +0000 + + Fix splint warnings for spec + + CVS patchset: 7164 + CVS date: 2004/03/11 06:25:48 + +commit 1a9da41d89b455123e97c115429431b268041cb4 +Author: jbj +Date: Thu Mar 11 03:06:38 2004 +0000 + + substititute labelCompare into rpmds_compare; map rpmdsCompare onto '==' and '!='. + + CVS patchset: 7163 + CVS date: 2004/03/11 03:06:38 + +commit 11507f2cf4a8b2f62489c2ccfda4dfb816ad7799 +Author: jbj +Date: Wed Mar 10 23:01:46 2004 +0000 + + - add sparcv8 and enable elf32/elf64 Zon sparc64 (#117302). + - fix: --querybynumber looped. + + CVS patchset: 7161 + CVS date: 2004/03/10 23:01:46 + +commit aeab20571904cd350fdecfe2238a4ff617bdcacb +Author: pauln +Date: Wed Mar 10 22:44:29 2004 +0000 + + Initial rpm.spec implementation + + CVS patchset: 7160 + CVS date: 2004/03/10 22:44:29 + +commit f557b1bda0f5a15d6030dd9464a6f352199da4f9 +Author: jbj +Date: Tue Mar 9 17:27:16 2004 +0000 + + - fix: sq->reaped needs sighold(SIGCHLD)/sigrelease(SIGCHLD) (#117620). + + CVS patchset: 7155 + CVS date: 2004/03/09 17:27:16 + +commit 25e004f33d613ecc6ce43510c71d810d00a566f5 +Author: jbj +Date: Sun Mar 7 21:11:27 2004 +0000 + + Add comments, minor performance improvement. + + CVS patchset: 7154 + CVS date: 2004/03/07 21:11:27 + +commit ccc7bf2fd9b68a81fb4a5b95ae9ade845abf6d36 +Author: jbj +Date: Sun Mar 7 12:50:36 2004 +0000 + + Protect sq->reaped with sighold and sigrelease. + + CVS patchset: 7153 + CVS date: 2004/03/07 12:50:36 + +commit 324746dc753372a3bca171a5046c290b1fd4fcd1 +Author: jbj +Date: Sat Mar 6 17:59:22 2004 +0000 + + Filter ENOTSUP lsetfilecon() to permit tmpfs mount on /dev/shm. + + CVS patchset: 7152 + CVS date: 2004/03/06 17:59:22 + +commit 5a457b0586fe135456ea8800f1ac48ba31588ffa +Author: jbj +Date: Fri Mar 5 23:11:51 2004 +0000 + + Use /etc/security/selinux/file_contexts as default instead. + + CVS patchset: 7151 + CVS date: 2004/03/05 23:11:51 + +commit d7db215d7fdc442284f3522274f1c90d13de9fbe +Author: joden +Date: Fri Mar 5 18:22:25 2004 +0000 + + initial autorollback feature. + + CVS patchset: 7149 + CVS date: 2004/03/05 18:22:25 + +commit 3341692cc2d64203514fe10af19f239146da070d +Author: pauln +Date: Fri Mar 5 18:00:55 2004 +0000 + + Added todo for types for tagtbl + + CVS patchset: 7148 + CVS date: 2004/03/05 18:00:55 + +commit 21dd22e321f079ca33680eb1baa858dfb3851fad +Author: joden +Date: Fri Mar 5 02:23:14 2004 +0000 + + Initial autorollback feature. + + CVS patchset: 7147 + CVS date: 2004/03/05 02:23:14 + +commit 42f592baf7be4bc8864ab1d7d9ca072ee56262a8 +Author: joden +Date: Fri Mar 5 02:21:48 2004 +0000 + + initial autorollback feature. + + CVS patchset: 7146 + CVS date: 2004/03/05 02:21:48 + +commit 0e3c5edc64ad1c1fff3c66e2d907e58ba150f88f +Author: jbj +Date: Wed Mar 3 01:58:36 2004 +0000 + + Typo. + + CVS patchset: 7145 + CVS date: 2004/03/03 01:58:36 + +commit 8fa552c691de8c202630a1eba78864eee5fb53c2 +Author: jbj +Date: Tue Mar 2 21:55:03 2004 +0000 + + Change lock file location. + Lock in outer, not in chroot, file tree for now. + + CVS patchset: 7142 + CVS date: 2004/03/02 21:55:03 + +commit 5ef0bf77c22339195fc0b746e8b4dfe03020d360 +Author: jbj +Date: Tue Mar 2 01:31:01 2004 +0000 + + - permit globs in macrofiles: directive (#117217). + + CVS patchset: 7139 + CVS date: 2004/03/02 01:31:01 + +commit f3cd4db8ea843f622d4ff887c41af0d00ae3cef4 +Author: jbj +Date: Thu Feb 26 01:23:48 2004 +0000 + + use static variable, not define, for lock file path. + + CVS patchset: 7135 + CVS date: 2004/02/26 01:23:48 + +commit 99825287bd2f7c1bd663194cf67d639de6ca31ec +Author: jbj +Date: Thu Feb 26 01:20:52 2004 +0000 + + splint fiddles. + + CVS patchset: 7134 + CVS date: 2004/02/26 01:20:52 + +commit 55eec2cbdcbff3248cb8c6de9e2860820ab430a7 +Author: niemeyer +Date: Wed Feb 25 20:04:36 2004 +0000 + + It was 2 bytes, not one. Amateurs.. humpf. ;-) + + CVS patchset: 7132 + CVS date: 2004/02/25 20:04:36 + +commit 037f02539c18072476245c2fb24220a8c620d5f3 +Author: niemeyer +Date: Wed Feb 25 20:02:23 2004 +0000 + + Oops. "path" was being allocated with 1 byte less than necessary. + + CVS patchset: 7131 + CVS date: 2004/02/25 20:02:23 + +commit 0f828b95fce2b1f150748e37582dff1d767f6951 +Author: niemeyer +Date: Wed Feb 25 19:54:58 2004 +0000 + + Creating transaction locking scheme based on fcntl file locking + during writing operations. For now, this system will wait forever + for the lock to be released. This will ensure that current + applications will get the necessary protection without breaking + unexpectedly. + Modified Files: + lib/Makefile.am lib/rpmts.c lib/transaction.c + Added Files: + lib/rpmlock.c lib/rpmlock.h + + CVS patchset: 7130 + CVS date: 2004/02/25 19:54:58 + +commit c5406814b8c821a715a391764e18a86d0d2aa300 +Author: jbj +Date: Mon Feb 23 00:43:45 2004 +0000 + + - force FD_CLOEXEC on 1st 100 inherited fdno's. + + CVS patchset: 7125 + CVS date: 2004/02/23 00:43:45 + +commit 6e15023bd18dc9d36e05cec215a96ed18f520596 +Author: jbj +Date: Mon Feb 23 00:03:14 2004 +0000 + + - set "rpm_script_t" exec type for scriptlets iff /bin/sh, else default. + + CVS patchset: 7123 + CVS date: 2004/02/23 00:03:14 + +commit 9c173cb51533e19cfadf335bdfe2232815eadc45 +Author: jbj +Date: Sun Feb 22 23:43:05 2004 +0000 + + - stable sort for policy specifications, patterns before paths. + + CVS patchset: 7121 + CVS date: 2004/02/22 23:43:05 + +commit 4eea80d22ac4358591d1a055e0db7c695d91e843 +Author: jbj +Date: Sun Feb 22 20:24:13 2004 +0000 + + - add ia32e arch. + + CVS patchset: 7116 + CVS date: 2004/02/22 20:24:13 + +commit 6ec3d6d4d18a4e83c644ea8c2c571bd7b6e13c30 +Author: jbj +Date: Sat Feb 21 18:37:56 2004 +0000 + + Typo. + + CVS patchset: 7114 + CVS date: 2004/02/21 18:37:56 + +commit 7d3676c15898e31bec9573e86f57f02b6d303d55 +Author: jbj +Date: Sat Feb 21 18:36:09 2004 +0000 + + Fix typo. + + CVS patchset: 7112 + CVS date: 2004/02/21 18:36:09 + +commit fa18754507f0381b471041a0ed26133ddc79fae9 +Author: sopwith +Date: Fri Feb 20 20:18:20 2004 +0000 + + another oops + + CVS patchset: 7108 + CVS date: 2004/02/20 20:18:20 + +commit 2a92438258b3150d94db9224e4e9578b1d6c931e +Author: sopwith +Date: Fri Feb 20 20:06:31 2004 +0000 + + oops + + CVS patchset: 7107 + CVS date: 2004/02/20 20:06:31 + +commit 0f7a21bdea4920c3e1bdfcae5d5f4781291846cc +Author: sopwith +Date: Fri Feb 20 20:05:27 2004 +0000 + + Further fixes related to 113661 + + CVS patchset: 7105 + CVS date: 2004/02/20 20:05:27 + +commit 9322d0e8ea220f4ec4943d44729c64dac0e23ac9 +Author: jbj +Date: Fri Feb 20 11:24:41 2004 +0000 + + - fix: only first "mkdir -p" directory had context set. + + CVS patchset: 7102 + CVS date: 2004/02/20 11:24:41 + +commit ee64849ebf4800c1e351d2e35abff6482ebf9d18 +Author: pauln +Date: Tue Feb 17 14:29:42 2004 +0000 + + Return 1 and -1 as we state we do - #113668 + + CVS patchset: 7099 + CVS date: 2004/02/17 14:29:42 + +commit e0dc1382c615c6f4d343d0247a578d6d1c76be61 +Author: jbj +Date: Mon Feb 16 04:57:25 2004 +0000 + + - establish rpm_script_t before scriptlet exec. + + CVS patchset: 7098 + CVS date: 2004/02/16 04:57:25 + +commit 78a861c1ea0b2eca07a41b58bd7defb773c3de70 +Author: jbj +Date: Mon Feb 16 03:07:48 2004 +0000 + + - establish rpm_script_t before scriptlet exec, ignore errors for now. + + CVS patchset: 7095 + CVS date: 2004/02/16 03:07:48 + +commit 275746a36b3c637c5a3e097cba5996036cb66885 +Author: jbj +Date: Sun Feb 15 23:51:36 2004 +0000 + + - fix: setfiles (aka rpmsx.c) dinna handle patterns correctly. + + CVS patchset: 7093 + CVS date: 2004/02/15 23:51:36 + +commit 64aca824816ab4019d55c0795332e48247768837 +Author: jbj +Date: Sun Feb 15 22:12:45 2004 +0000 + + - fix: set fcontext for "mkdir -p" directories not in packages. + + CVS patchset: 7091 + CVS date: 2004/02/15 22:12:45 + +commit c37ae1046b5b1761294b5b378bc332a9910074a5 +Author: jbj +Date: Sun Feb 15 20:54:19 2004 +0000 + + - fix: set fcontext from pkg when file_contexts doesn't exist (#114040). + + CVS patchset: 7088 + CVS date: 2004/02/15 20:54:19 + +commit 26f46dd3893c0b933911a0e28596dd9d3ea28d14 +Author: pauln +Date: Wed Jan 28 00:09:06 2004 +0000 + + Enable selinux contexts in rpmtsRun - patch from Jeremy Katz + + CVS patchset: 7086 + CVS date: 2004/01/28 00:09:06 + +commit 7ab738b23df05fbf81eeaadc414b04af07ecd8c6 +Author: jbj +Date: Mon Jan 26 09:59:36 2004 +0000 + + - python: throw exception on bad arg to labelCompare (#113661). + + CVS patchset: 7084 + CVS date: 2004/01/26 09:59:36 + +commit fc0bc5e2e469a6c97245487a7c7dec05ee446724 +Author: jbj +Date: Thu Jan 22 23:03:40 2004 +0000 + + - other perl variables (#114121). + + CVS patchset: 7083 + CVS date: 2004/01/22 23:03:40 + +commit b8988af3c5664e539768f94e72718b64dc9da703 +Author: jbj +Date: Thu Jan 22 14:28:08 2004 +0000 + + Build with gcc-2.95.3 and python-2.2, remove incompat CFLAGS and casts. + + CVS patchset: 7082 + CVS date: 2004/01/22 14:28:08 + +commit 5c2cdc17638b20ce25aa97deb40396a920c31f99 +Author: jbj +Date: Wed Jan 21 23:31:45 2004 +0000 + + Sanity. + + CVS patchset: 7081 + CVS date: 2004/01/21 23:31:45 + +commit 46c795f21171aaa5cb606a82020bbc00009ca0c4 +Author: jbj +Date: Fri Jan 16 05:47:51 2004 +0000 + + Quick fix for [] vs None retrun. + + CVS patchset: 7080 + CVS date: 2004/01/16 05:47:51 + +commit ac38a8072fbaad04e97cc9745a597bca58bd97c5 +Author: jbj +Date: Wed Jan 14 16:20:04 2004 +0000 + + Return [] for tags with no contents. + + CVS patchset: 7078 + CVS date: 2004/01/14 16:20:04 + +commit 9dfb191cee4d579b7d899d751991dd4407dcfc5f +Author: jbj +Date: Wed Jan 14 14:41:57 2004 +0000 + + Require beecrypt, not beecrypt-devel. + + CVS patchset: 7077 + CVS date: 2004/01/14 14:41:57 + +commit b41509cdb0411c05be60e8a8d2255af8a94e98ed +Author: jbj +Date: Mon Jan 12 16:27:21 2004 +0000 + + - fix: handle files w/o contexts correctly. + + CVS patchset: 7076 + CVS date: 2004/01/12 16:27:21 + +commit 14c4c71c6e2f71ac7b95a30b8c51f91606c2a7a3 +Author: jbj +Date: Sun Jan 11 15:24:19 2004 +0000 + + rpm-nls-fixes.patch (from PLD). + + CVS patchset: 7074 + CVS date: 2004/01/11 15:24:19 + +commit 47ac30a7eb407dc9aca3274b9dae4e688c7d16ec +Author: jbj +Date: Sat Jan 10 18:48:19 2004 +0000 + + Avoid trying to set "<>" file context. + + CVS patchset: 7073 + CVS date: 2004/01/10 18:48:19 + +commit 0de6405c250a63c340c27d69f8268bdbcce5138c +Author: jbj +Date: Fri Jan 9 23:20:07 2004 +0000 + + Don't try to set empty file contexts. + + CVS patchset: 7072 + CVS date: 2004/01/09 23:20:07 + +commit 5c261bacdc416d8af44780c180028b93471bf507 +Author: jbj +Date: Fri Jan 9 23:17:33 2004 +0000 + + Map "<>" expressions to "". + + CVS patchset: 7071 + CVS date: 2004/01/09 23:17:33 + +commit ec590d0d692af370f7c7dea0aaa7b199b187d839 +Author: jbj +Date: Fri Jan 9 23:14:00 2004 +0000 + + Use "", not NULL, for missing file contexts. + + CVS patchset: 7070 + CVS date: 2004/01/09 23:14:00 + +commit 40d5a86be045c851c74a9bc193e1b2f0c0d80453 +Author: pauln +Date: Fri Jan 9 13:53:38 2004 +0000 + + Fix rpm-4.2/rpm-4.3 typo. As highlighted by Matthias + + CVS patchset: 7069 + CVS date: 2004/01/09 13:53:38 + +commit 13926965b51599a6759c0480a85f0dd514736863 +Author: jbj +Date: Mon Jan 5 19:04:59 2004 +0000 + + More typos. + + CVS patchset: 7068 + CVS date: 2004/01/05 19:04:59 + +commit afaec3b8c2804f8a1aba28fbb1c32a0d03ad439a +Author: jbj +Date: Mon Jan 5 18:31:50 2004 +0000 + + Typo. + + CVS patchset: 7067 + CVS date: 2004/01/05 18:31:50 + +commit 038c29640f32ca39949ace4e5be59e10689b0e91 +Author: jbj +Date: Mon Jan 5 17:38:18 2004 +0000 + + - selinux phases 1 and 2 delivered. + + CVS patchset: 7066 + CVS date: 2004/01/05 17:38:18 + +commit 89897484c48492059733f003f6c037c3ad8e33c1 +Author: jbj +Date: Mon Jan 5 17:15:18 2004 +0000 + + Typo. + + CVS patchset: 7065 + CVS date: 2004/01/05 17:15:18 + +commit 4c99a1c2da1e4bbde88f79456aad422c38d37f2e +Author: jbj +Date: Mon Jan 5 17:00:40 2004 +0000 + + - selinux phases 1 and 2 delivered. + + CVS patchset: 7064 + CVS date: 2004/01/05 17:00:40 + +commit cf60d725654c1d9bb354a0f71d274e60b781040c +Author: jbj +Date: Mon Jan 5 14:09:47 2004 +0000 + + add --with-selinux, move selinux stubs to system.h. + + CVS patchset: 7063 + CVS date: 2004/01/05 14:09:47 + +commit c305927d5d7e7e4a4bb13e168c7888c6fa1d7e33 +Author: jbj +Date: Sat Jan 3 21:43:10 2004 +0000 + + Add %policy marker to suck *.te content into metadata. + + CVS patchset: 7062 + CVS date: 2004/01/03 21:43:10 + +commit 7989c8c4f5a76abe88ed633922ac40cadab674ab +Author: jbj +Date: Thu Jan 1 17:49:17 2004 +0000 + + - python: avoid invoking python to acquire ill-specified parameters. + + CVS patchset: 7060 + CVS date: 2004/01/01 17:49:17 + +commit f5d50a5c675f29af595f0d86c81948bc0774ea70 +Author: jbj +Date: Thu Jan 1 16:50:31 2004 +0000 + + - python: return [], not None, accessing header tags (#112794). + + CVS patchset: 7059 + CVS date: 2004/01/01 16:50:31 + +commit f9093cfebc7949e82c0bbd4b118500d54664bdcb +Author: jbj +Date: Thu Jan 1 16:41:24 2004 +0000 + + - python: include Python.h before glibc features.h. + + CVS patchset: 7057 + CVS date: 2004/01/01 16:41:24 + +commit 0deeb05eed84b896be18c23bb2855222b1b0faf3 +Author: jbj +Date: Thu Jan 1 16:34:10 2004 +0000 + + - python: include Python.h before glibc features.h. + + CVS patchset: 7055 + CVS date: 2004/01/01 16:34:10 + +commit 355fc032c345d089362454b743cf8cbe6c81cd8d +Author: pauln +Date: Thu Jan 1 12:14:25 2004 +0000 + + Return [] for lists see #112794 + + CVS patchset: 7054 + CVS date: 2004/01/01 12:14:25 + +commit 4a158e3aa04ac34e6d67ab25e9b89f4dc58685c5 +Author: jbj +Date: Tue Dec 30 20:31:05 2003 +0000 + + - pad to display length, not strlen, for i18n popt args (#106240). + + CVS patchset: 7053 + CVS date: 2003/12/30 20:31:05 + +commit a3bf9b96f92fb7184d30d0ffedd6c37bbe57b6c4 +Author: jbj +Date: Tue Dec 30 15:12:50 2003 +0000 + + - use -fPIC -DPIC on all platforms, not just mandatory (#112713). + + CVS patchset: 7051 + CVS date: 2003/12/30 15:12:50 + +commit 60a6f22facd168a8e428d39ede7ad730296bed4c +Author: jbj +Date: Tue Dec 30 15:02:22 2003 +0000 + + - use -fPIC -DPIC on all platforms, not just mandatory (#112713). + + CVS patchset: 7049 + CVS date: 2003/12/30 15:02:22 + +commit b1069869998cc7f4e0b4e50309fbe0482b638445 +Author: jbj +Date: Tue Dec 30 13:14:49 2003 +0000 + + - spelling corrections (#112728). + + CVS patchset: 7047 + CVS date: 2003/12/30 13:14:49 + +commit af5973adad846302e85d717992910c2559dd09b3 +Author: jbj +Date: Tue Dec 30 13:14:49 2003 +0000 + + - spelling corrections (#112728). + + CVS patchset: 7046 + CVS date: 2003/12/30 13:14:49 + +commit f5580509bf9a5d6df7afa6ea34a281f270d3a6be +Author: jbj +Date: Sun Dec 28 18:27:40 2003 +0000 + + revert using perldeps.pl, not yet ready. + + CVS patchset: 7044 + CVS date: 2003/12/28 18:27:40 + +commit ae5e64ce0d32b6f933639991c77ad70d20d45c1c +Author: jbj +Date: Sun Dec 28 15:46:35 2003 +0000 + + - missing build dependency (#111104). + + CVS patchset: 7042 + CVS date: 2003/12/28 15:46:35 + +commit b7a722971a8e78efe49aee6dc98185e8b1ae042b +Author: jbj +Date: Sun Dec 28 15:36:06 2003 +0000 + + - find-debuginfo.sh: permit stripping unwritable by non-root (#112429). + + CVS patchset: 7040 + CVS date: 2003/12/28 15:36:06 + +commit 98b52012449200e9d0f6a1a1dd36824c95a13c61 +Author: jbj +Date: Sun Dec 28 15:14:40 2003 +0000 + + - perl.req: avoid regex misfire on '^use' in "= <<" assign (#109934). + - use perldeps {--provides|--requires}. + + CVS patchset: 7037 + CVS date: 2003/12/28 15:14:40 + +commit 5618e713b8b73772ae332b8728401162eabd09a2 +Author: jbj +Date: Sat Dec 27 18:02:20 2003 +0000 + + - flush pipe before exit 1 in check-files (#103867). + + CVS patchset: 7036 + CVS date: 2003/12/27 18:02:20 + +commit aef89a72025586ae62bd3ebefbaa810696ff0065 +Author: jbj +Date: Sat Dec 27 17:54:57 2003 +0000 + + - mark _javadocdir as documentation (#102898). + + CVS patchset: 7033 + CVS date: 2003/12/27 17:54:57 + +commit 067fbd90e2ab33884c3d2131160a3fa7fd1a6009 +Author: jbj +Date: Sat Dec 27 16:02:18 2003 +0000 + + Escaped tab for non-gnu sed (#104821). + + CVS patchset: 7032 + CVS date: 2003/12/27 16:02:18 + +commit 51ae7c0fb086b6467a55a40f3a30e6fb8621dbd6 +Author: jbj +Date: Sat Dec 27 02:40:25 2003 +0000 + + splint fiddles. + + CVS patchset: 7030 + CVS date: 2003/12/27 02:40:25 + +commit 1aefecc638725d827eac1d1c5de8e0a36738638c +Author: jbj +Date: Sat Dec 27 01:54:01 2003 +0000 + + Move #include "ugid.h" to fsm.c, nuke unused variable in psm.c. + + CVS patchset: 7028 + CVS date: 2003/12/27 01:54:01 + +commit 016206e42e864e761ea3c05c8f3c74d97bb9d2d9 +Author: jbj +Date: Sat Dec 27 01:50:30 2003 +0000 + + Warn only if installing. + + CVS patchset: 7025 + CVS date: 2003/12/27 01:50:30 + +commit 59f6e1d78fd5eba67116d889c452fd2250b4c165 +Author: jbj +Date: Sat Dec 27 01:37:56 2003 +0000 + + - fix: wrong package count for trigger scriptlet 1st arg (#100509). + - fix: don't break header SHA1 if non-existent user/group (#97727). + - remove fuids/fgids from rpmfi, easier to lookup fuser/fgroup instead. + - merge sensible parts of openpkg rpm.patch.bugfix (#104780). + + CVS patchset: 7024 + CVS date: 2003/12/27 01:37:56 + +commit e21b054fbc14dc3be3b7946c7bc7ab9298aff5f7 +Author: jbj +Date: Fri Dec 26 19:02:01 2003 +0000 + + - perl.req typo (#106672). + + CVS patchset: 7022 + CVS date: 2003/12/26 19:02:01 + +commit 19db4bb4a2bb033b8b5723872ab29cf375b519c8 +Author: jbj +Date: Fri Dec 26 18:56:21 2003 +0000 + + - man page corrections (#106415). + + CVS patchset: 7019 + CVS date: 2003/12/26 18:56:21 + +commit ec1d257a369671436ae80b1c9449a58b638e4707 +Author: jbj +Date: Fri Dec 26 18:16:03 2003 +0000 + + - convert ja and ko man pages to utf8 (#106050). + + CVS patchset: 7017 + CVS date: 2003/12/26 18:16:03 + +commit 60d50a708f2a953cb4338c05b2bd766feec11970 +Author: jbj +Date: Fri Dec 26 17:56:05 2003 +0000 + + use '=' iff long option (#108924). + + CVS patchset: 7016 + CVS date: 2003/12/26 17:56:05 + +commit c419d9436ee8f2dff8d0647888f39029af6a9eb0 +Author: jbj +Date: Fri Dec 26 17:45:18 2003 +0000 + + Typo (#106565). + + CVS patchset: 7013 + CVS date: 2003/12/26 17:45:18 + +commit 5c747d9870d80aa0213f325bc03e22f081749b0d +Author: jbj +Date: Fri Dec 26 17:36:38 2003 +0000 + + - don't use mktemp if mkstemp is available (#103850). + + CVS patchset: 7012 + CVS date: 2003/12/26 17:36:38 + +commit 32c0cfd728a123e5c594e540d1a2aeef67895709 +Author: jbj +Date: Fri Dec 26 16:34:52 2003 +0000 + + - fix: escape '+' in regex patterns through RPMMIRE_DEFAULT (#103851). + - RPMMIRE_DEFAULT is overkill, use RPMMIRE_STRCMP instead (#103851). + + CVS patchset: 7011 + CVS date: 2003/12/26 16:34:52 + +commit 47abfc1242177db364b0bd78d5658ed35a0fe469 +Author: jbj +Date: Fri Dec 26 16:14:49 2003 +0000 + + Make sure no. of added provides matches added list size if some + dependencies are skipped due to coloring (#103865). + + CVS patchset: 7010 + CVS date: 2003/12/26 16:14:49 + +commit 23ddd50de97a301a7c7a402b8d3ee4b3cc26355b +Author: jbj +Date: Fri Dec 26 15:09:26 2003 +0000 + + Sick hack to preserve the pretense that popt has an ABI. + + CVS patchset: 7008 + CVS date: 2003/12/26 15:09:26 + +commit a3a26eb6687879e42d061c91021180ad55a68925 +Author: jbj +Date: Fri Dec 26 03:36:25 2003 +0000 + + fix: double free with sub-pkgs (#112643). + + CVS patchset: 7007 + CVS date: 2003/12/26 03:36:25 + +commit 210183cc698151d970684325b5ac3a0aa98d0136 +Author: jbj +Date: Thu Dec 25 23:00:44 2003 +0000 + + Add lsetfilecon to install modes. + + CVS patchset: 7006 + CVS date: 2003/12/25 23:00:44 + +commit f09888fc1a1597023b0a29a34c3f4f81f694898d +Author: jbj +Date: Thu Dec 25 19:02:01 2003 +0000 + + Verify file contexts from file security context patterns. + + CVS patchset: 7005 + CVS date: 2003/12/25 19:02:01 + +commit 41f5aa7c539e09f64426c6563c770553a5efc8aa +Author: jbj +Date: Tue Dec 23 15:37:16 2003 +0000 + + - plug some rpmbuild memory leaks. + - file security contexts added to package header. + + CVS patchset: 7003 + CVS date: 2003/12/23 15:37:16 + +commit 3fa2603bfc3cc6332ac671e73f9d20bbef3acbd6 +Author: jbj +Date: Tue Dec 23 07:51:10 2003 +0000 + + Add filecontexts tags to header if %_build_file_contexts_path is configured. + + CVS patchset: 7002 + CVS date: 2003/12/23 07:51:10 + +commit 2b989f11c76c875aa5b68e6db1b7240040f392ff +Author: jbj +Date: Tue Dec 23 06:56:46 2003 +0000 + + splint fiddle. + + CVS patchset: 7000 + CVS date: 2003/12/23 06:56:46 + +commit db03eb6a92629e7a707a79656b79efafff98de83 +Author: jbj +Date: Tue Dec 23 06:25:04 2003 +0000 + + - fix some small memory leaks (valgrind). + + CVS patchset: 6998 + CVS date: 2003/12/23 06:25:04 + +commit 945bc28d58f59e5816e10f3b7ae12f8ffe75c782 +Author: jbj +Date: Mon Dec 22 21:09:40 2003 +0000 + + - test build with methods needed for selinux. + + CVS patchset: 6996 + CVS date: 2003/12/22 21:09:40 + +commit 9dcae00ef6357e34ceb94c63813c49d21b9f2602 +Author: pauln +Date: Mon Dec 22 14:38:13 2003 +0000 + + Fix for lists in P/R/O/C see bug #110226 + + CVS patchset: 6995 + CVS date: 2003/12/22 14:38:13 + +commit bea918bb7741d0e4b3f8ba134014bdfdd4214ce4 +Author: jbj +Date: Mon Dec 22 07:47:45 2003 +0000 + + Add --filecontext, --fscontext, --recontext for 3 sources of security contexts. + + CVS patchset: 6994 + CVS date: 2003/12/22 07:47:45 + +commit 3a3b74989a0e9986706f67a37dedbc725aa0f916 +Author: jbj +Date: Mon Dec 22 07:21:21 2003 +0000 + + Doxygen typo. + + CVS patchset: 6993 + CVS date: 2003/12/22 07:21:21 + +commit a7ecbbf0a947a592756ceafda207d41e26144c04 +Author: jbj +Date: Mon Dec 22 07:15:04 2003 +0000 + + Update to latest. + + CVS patchset: 6992 + CVS date: 2003/12/22 07:15:04 + +commit fe3f3a6567be0ac2677eae31a265da19b81004d2 +Author: jbj +Date: Mon Dec 22 03:27:38 2003 +0000 + + Apply regex patterns to args. + + CVS patchset: 6991 + CVS date: 2003/12/22 03:27:38 + +commit 17bf716992d20285df89df043e560908b699e863 +Author: jbj +Date: Mon Dec 22 03:26:57 2003 +0000 + + splint fiddles. + + CVS patchset: 6990 + CVS date: 2003/12/22 03:26:57 + +commit 04a45c2ae849fa917cba3a6051cf8b41c414f26d +Author: jbj +Date: Sun Dec 21 23:42:22 2003 +0000 + + More getter methods, add stems to regex pattern match. + + CVS patchset: 6989 + CVS date: 2003/12/21 23:42:22 + +commit 3cd622588855dbf359b67b5532fd2629b0b6bb68 +Author: jbj +Date: Sun Dec 21 18:12:35 2003 +0000 + + Add getters, permit revesed iteration. + + CVS patchset: 6988 + CVS date: 2003/12/21 18:12:35 + +commit 64e6dc0ae3e1347a4488d6c30597b4cee1f0de80 +Author: jbj +Date: Sun Dec 21 17:17:57 2003 +0000 + + Parse selinux file_contexts patterns. + + CVS patchset: 6987 + CVS date: 2003/12/21 17:17:57 + +commit 7961bb65b63e82045f7fdafcedbf6340a470e17a +Author: jbj +Date: Sun Dec 21 15:21:41 2003 +0000 + + Create file security context container. + + CVS patchset: 6986 + CVS date: 2003/12/21 15:21:41 + +commit 42f49f11fa06ec224a7dff91b51bc1ecb09a0515 +Author: jbj +Date: Sat Dec 20 22:44:31 2003 +0000 + + Rewrite loop conditionals with continue, use pointers rather than array index. + + CVS patchset: 6985 + CVS date: 2003/12/20 22:44:31 + +commit e9b4b4d0e3f0ce128460a9e8d90036e40efb5066 +Author: jbj +Date: Sat Dec 20 20:38:27 2003 +0000 + + Use popt for arg parsing. + + CVS patchset: 6984 + CVS date: 2003/12/20 20:38:27 + +commit 2ac9c8b279d097735e73274fb231dc31308d17d3 +Author: jbj +Date: Sat Dec 20 17:59:30 2003 +0000 + + split parsing into seperate routine. + + CVS patchset: 6983 + CVS date: 2003/12/20 17:59:30 + +commit 508c03a0427a6e20b73a3de902e7cd5326e680e0 +Author: jbj +Date: Sat Dec 20 16:41:26 2003 +0000 + + Swallow setfiles.c from policycoreutils for hacking. + + CVS patchset: 6982 + CVS date: 2003/12/20 16:41:26 + +commit 4170ed78521c3dbb14891f6b3bb012e62fe11475 +Author: jbj +Date: Thu Dec 18 12:00:37 2003 +0000 + + - fix: ds.Single() method needs malloc'd elements (#109919). + + CVS patchset: 6980 + CVS date: 2003/12/18 12:00:37 + +commit 6db41ea31cb7a9c3eda393088bfed0f1f143e9b3 +Author: jbj +Date: Thu Dec 18 03:36:21 2003 +0000 + + Typo. + + CVS patchset: 6978 + CVS date: 2003/12/18 03:36:21 + +commit b0fc5b445f6a2c82fefb1706825ee6a6e9503661 +Author: jbj +Date: Thu Dec 18 03:14:08 2003 +0000 + + - detect (and remove) dbenv files while upgrading to db-4.2.52. + - fix: dangling pointer brain fart (#107835). + + CVS patchset: 6976 + CVS date: 2003/12/18 03:14:08 + +commit 60207c0346637a32b792e371436eeb731665409e +Author: jbj +Date: Tue Dec 16 03:41:35 2003 +0000 + + - build with db-4.2.52 internal. + - refresh bsddb. + + CVS patchset: 6973 + CVS date: 2003/12/16 03:41:35 + +commit 8960e3895f7af91126465368dff8fbb36ab4e853 +Author: jbj +Date: Mon Dec 15 21:42:09 2003 +0000 + + - upgrade to db-4.2.52. + + CVS patchset: 6972 + CVS date: 2003/12/15 21:42:09 + +commit 752cac72e220dcad4e6fce39508e714e59e3e0a1 +Author: jbj +Date: Thu Dec 11 19:09:58 2003 +0000 + + - only internal Berkeley db from now on. + - revive "make dist". + + CVS patchset: 6971 + CVS date: 2003/12/11 19:09:58 + +commit 4c5d56d3bf4cded801abe8830350c5cf973e2bfc +Author: niemeyer +Date: Wed Dec 10 20:36:33 2003 +0000 + + Introduced -d option into diff being run in check-files. This will + ensure that a minimum set of changes is computed, avoiding spurious + errors about files that are actually being packaged. + + CVS patchset: 6970 + CVS date: 2003/12/10 20:36:33 + +commit 1e01bac6de16cec342c146a8aae1d7057c28867e +Author: cturner +Date: Tue Dec 9 17:15:29 2003 +0000 + + version bump + + CVS patchset: 6969 + CVS date: 2003/12/09 17:15:29 + +commit 1e1522762811804507926930bf9e715dd2554cdb +Author: cturner +Date: Tue Dec 9 16:56:09 2003 +0000 + + update changes + + CVS patchset: 6968 + CVS date: 2003/12/09 16:56:09 + +commit eb6546239a4319aac31e31e39acd3db0045a22d0 +Author: cturner +Date: Tue Dec 9 16:54:59 2003 +0000 + + changes to make it compile once again on gcc 2.x; some naughtiness crept in + + CVS patchset: 6967 + CVS date: 2003/12/09 16:54:59 + +commit b2c8f0fa7eb2c794f04c4f3eb74160bd846f277f +Author: cturner +Date: Mon Dec 8 21:41:13 2003 +0000 + + oops, need the test headerlist in the MANIFEST + + CVS patchset: 6966 + CVS date: 2003/12/08 21:41:13 + +commit 6517cd197971687e4e3ae0452b5da1d48772acbd +Author: cturner +Date: Mon Dec 8 21:36:50 2003 +0000 + + add bindings and test case to load hdlist files like the python bindings + + CVS patchset: 6965 + CVS date: 2003/12/08 21:36:50 + +commit 5e20d90422cb49d77248a11711ada17f28bf32de +Author: jbj +Date: Mon Dec 1 19:15:38 2003 +0000 + + splint fiddles, no warnings. + + CVS patchset: 6961 + CVS date: 2003/12/01 19:15:38 + +commit 3dcfeb3f9aaf003f29d2c8c0c3a545953f529c08 +Author: jbj +Date: Sun Nov 23 19:50:52 2003 +0000 + + Merge changes from rpm-4.2.1 development. + + CVS patchset: 6959 + CVS date: 2003/11/23 19:50:52 + +commit fda9ddca9bcd46cefc145c14cfd901906600c9d2 +Author: jbj +Date: Sun Nov 23 16:10:08 2003 +0000 + + - changes for db-4.2.42. + - splint fiddles. + + CVS patchset: 6957 + CVS date: 2003/11/23 16:10:08 + +commit 3f976dcda6980cf55461d11ec75eaf372a87cdbc +Author: jbj +Date: Sun Aug 31 16:09:53 2003 +0000 + + Hi Mark!. + + CVS patchset: 6945 + CVS date: 2003/08/31 16:09:53 + +commit af6895764a3da75b876d74bab6c9fa766a4e57e4 +Author: cturner +Date: Wed Jul 23 13:23:53 2003 +0000 + + ... and a version bump + + CVS patchset: 6941 + CVS date: 2003/07/23 13:23:53 + +commit c46d7c71ea0bd2ad95842f4023680402a6570cd4 +Author: cturner +Date: Wed Jul 23 13:23:34 2003 +0000 + + incorporate install/remove, as well as sort fix, from James Olin Oden + + CVS patchset: 6940 + CVS date: 2003/07/23 13:23:34 + +commit cc54cba032c912cefcd3e6eca46ba7a87b2d7e9e +Author: jbj +Date: Thu Jul 10 12:43:51 2003 +0000 + + - apply debugedit patch necessary to produce kernel -debuginfo files. + + CVS patchset: 6933 + CVS date: 2003/07/10 12:43:51 + +commit 03d806feaa49d2cb0cf5d677cffec5c8c62bde52 +Author: jbj +Date: Wed Jul 9 20:18:54 2003 +0000 + + - resolve elf32/elf64 file conflicts to prefer elf64. + + CVS patchset: 6931 + CVS date: 2003/07/09 20:18:54 + +commit dee9dcd3fc53a27c2edf6ebfda44a7bd9a5ad355 +Author: jbj +Date: Wed Jul 2 19:26:33 2003 +0000 + + Orphan. + + CVS patchset: 6926 + CVS date: 2003/07/02 19:26:33 + +commit 3182fc3777e17e1ee37ef05b342710982de27d87 +Author: jbj +Date: Wed Jul 2 19:26:04 2003 +0000 + + - don't attempt to remove dbenv on --rebuilddb. + - autorelocate ix86 package file paths on ia64. + + CVS patchset: 6925 + CVS date: 2003/07/02 19:26:04 + +commit d0594e1ce00578e3b2afad060076abd6c5fd9300 +Author: jbj +Date: Thu Jun 26 18:19:26 2003 +0000 + + Update to 4.0.31. + + CVS patchset: 6919 + CVS date: 2003/06/26 18:19:26 + +commit 85a5a1cfe31c4c24fee48e6f9dbadb1de42745cc +Author: jbj +Date: Tue Jun 24 19:29:36 2003 +0000 + + Sanity. + + CVS patchset: 6918 + CVS date: 2003/06/24 19:29:36 + +commit 86704da569d91112768240b28a05e77fc1ac2d13 +Author: jbj +Date: Fri Jun 20 19:04:15 2003 +0000 + + Automagically byte compile python code. + + CVS patchset: 6913 + CVS date: 2003/06/20 19:04:15 + +commit 1f7f5254641744ee4e9edbfa3fce4a08acb591db +Author: jbj +Date: Thu Jun 19 14:52:20 2003 +0000 + + - staylor wanted an easter egg. + + CVS patchset: 6911 + CVS date: 2003/06/19 14:52:20 + +commit e235ebcc4c3bf98876ad5e753afb2d17cc512111 +Author: jbj +Date: Mon Jun 16 16:05:42 2003 +0000 + + Update from PLD. + + CVS patchset: 6909 + CVS date: 2003/06/16 16:05:42 + +commit 1851a170577d62fe8d64b4449e6edbbe86a810f7 +Author: jbj +Date: Mon Jun 16 15:02:35 2003 +0000 + + Update from PLD. + + CVS patchset: 6904 + CVS date: 2003/06/16 15:02:35 + +commit ee7eded2f4674165cb5fda2bfe1f078854e1d46c +Author: jbj +Date: Mon Jun 16 13:26:03 2003 +0000 + + Corrections from PLD. + + CVS patchset: 6903 + CVS date: 2003/06/16 13:26:03 + +commit 32897f1256a89b2814841a42ad3b61cab27b09b5 +Author: jbj +Date: Sun Jun 15 12:48:11 2003 +0000 + + Typo. + + CVS patchset: 6902 + CVS date: 2003/06/15 12:48:11 + +commit cdc31c02f0b6c142508585b3752b37fb780cd9b3 +Author: jbj +Date: Fri Jun 13 18:51:55 2003 +0000 + + Yet another merge from beecrypt-3.0.0. + + CVS patchset: 6901 + CVS date: 2003/06/13 18:51:55 + +commit 8e19d00216a6d200937fb9383f96f7a6dedd4abd +Author: jbj +Date: Fri Jun 13 17:04:02 2003 +0000 + + Apply patch.4.1.25.1. + + CVS patchset: 6900 + CVS date: 2003/06/13 17:04:02 + +commit cecbf1bdb2c28210916ed4d917430980cc76e1ec +Author: jbj +Date: Thu Jun 5 16:58:47 2003 +0000 + + - toy method to enable --stats through bindings. + + CVS patchset: 6899 + CVS date: 2003/06/05 16:58:47 + +commit 611fcf0c780e94e14adcaf08e21994b37e65fc55 +Author: jbj +Date: Thu Jun 5 11:48:23 2003 +0000 + + - update ja man pages (#92261). + + CVS patchset: 6897 + CVS date: 2003/06/05 11:48:23 + +commit d9c593e6321ac854ba97470fab655c2704a2f9f2 +Author: jbj +Date: Wed Jun 4 19:28:27 2003 +0000 + + Remove dead code. + + CVS patchset: 6894 + CVS date: 2003/06/04 19:28:27 + +commit d865a3cfe1e8cfea7cb4fc71c7258227573b4c08 +Author: jbj +Date: Wed Jun 4 18:02:49 2003 +0000 + + dump xml queryformat debugging code. + + CVS patchset: 6892 + CVS date: 2003/06/04 18:02:49 + +commit 563a233ece3000a410d899dff6931fae650df46c +Author: jbj +Date: Tue Jun 3 22:06:27 2003 +0000 + + - treat missing epoch's exactly the same as Epoch: 0. + + CVS patchset: 6891 + CVS date: 2003/06/03 22:06:27 + +commit e052452f33b96a62109b8194fd4ed931e3b9d933 +Author: jbj +Date: Tue Jun 3 15:52:57 2003 +0000 + + Remove debugging. + + CVS patchset: 6889 + CVS date: 2003/06/03 15:52:57 + +commit 92dc678a0e5e4449da71ef342512973b8b878b0c +Author: jbj +Date: Tue Jun 3 15:48:50 2003 +0000 + + Merge fix for DSA on 64bit platforms. + + CVS patchset: 6888 + CVS date: 2003/06/03 15:48:50 + +commit e1e73e64303396eaf199d312d5167f9ee5449c02 +Author: jbj +Date: Mon Jun 2 22:35:03 2003 +0000 + + Debugging for 64 bit platforms. + + CVS patchset: 6887 + CVS date: 2003/06/02 22:35:03 + +commit c06cf329eb1f4c6bc6c83f85846a078d2788382a +Author: jbj +Date: Mon Jun 2 21:12:27 2003 +0000 + + Use automake-1.7.5. + + CVS patchset: 6886 + CVS date: 2003/06/02 21:12:27 + +commit 90a64fd85f2677a26a42fe7f76c1dd6e5503d960 +Author: jbj +Date: Mon Jun 2 21:06:33 2003 +0000 + + Use %Zu for printing size_t. + + CVS patchset: 6885 + CVS date: 2003/06/02 21:06:33 + +commit 01ad499d33db1bed5bf5fb305a16645650de00c4 +Author: jbj +Date: Mon Jun 2 17:44:57 2003 +0000 + + Retrofit providesNVR. + + CVS patchset: 6883 + CVS date: 2003/06/02 17:44:57 + +commit c3d235daaf15afad506160cade5e52ed6939b454 +Author: jbj +Date: Mon Jun 2 17:01:41 2003 +0000 + + Yet another beecrypt-3.0.0 merge. + + CVS patchset: 6882 + CVS date: 2003/06/02 17:01:41 + +commit 3ea8d7b1979c3bb88bffece0087f858b7a4678a7 +Author: jbj +Date: Mon Jun 2 15:58:04 2003 +0000 + + Yet another merge to beecrypt-3.0.0.. + + CVS patchset: 6881 + CVS date: 2003/06/02 15:58:04 + +commit f5c14e57bc86454af679c407e9799d51706bd833 +Author: jbj +Date: Fri May 30 16:58:13 2003 +0000 + + Consolidate external beecrypt changes. + + CVS patchset: 6880 + CVS date: 2003/05/30 16:58:13 + +commit 1c5f871b492f0b28d053f45881faba2f24d9c077 +Author: jbj +Date: Thu May 29 16:07:35 2003 +0000 + + Yet another beecrypt-3.0.0 merge. + + CVS patchset: 6878 + CVS date: 2003/05/29 16:07:35 + +commit b8772cff2dffaacf21fa91c07c1968f39bee3d59 +Author: jbj +Date: Wed May 28 17:18:56 2003 +0000 + + Spliddles and diddles. + + CVS patchset: 6877 + CVS date: 2003/05/28 17:18:56 + +commit a3a09742fe81e7875d9c3727c7fa3beaecec0ed7 +Author: jbj +Date: Wed May 28 15:09:08 2003 +0000 + + Another merge from beecrypt-3.0.0. + + CVS patchset: 6876 + CVS date: 2003/05/28 15:09:08 + +commit 0148a73a15ad36e9c6b17fa1cdfa345e9d648d47 +Author: jbj +Date: Tue May 27 21:34:03 2003 +0000 + + Another beecrypt-3.0.0 merge. + + CVS patchset: 6875 + CVS date: 2003/05/27 21:34:03 + +commit 9e1e00f00a8873c85f5583e4f68df86cfe3d6dc3 +Author: jbj +Date: Fri May 23 17:34:22 2003 +0000 + + Use mpextgcd, not mpbinv_w. + + CVS patchset: 6874 + CVS date: 2003/05/23 17:34:22 + +commit dfcd749bbb273c6638174cdf640216c56786a7e6 +Author: jbj +Date: Fri May 23 16:32:16 2003 +0000 + + Spliddles. + + CVS patchset: 6873 + CVS date: 2003/05/23 16:32:16 + +commit 0baf05de865499764c4d9ff82c56679737432a0d +Author: jbj +Date: Fri May 23 15:55:57 2003 +0000 + + Another merge to beecrypt-3.0.0. + + CVS patchset: 6872 + CVS date: 2003/05/23 15:55:57 + +commit dac695e290b95514115d68dbfe21209eeb66ee82 +Author: jbj +Date: Thu May 22 21:21:43 2003 +0000 + + Prepare to build with external beecrypt-3.0.0. + + CVS patchset: 6871 + CVS date: 2003/05/22 21:21:43 + +commit 185ee2095cc22a9ab6d3f6e918a7577c7fd6e996 +Author: jbj +Date: Thu May 22 18:05:07 2003 +0000 + + Spliddles. + + CVS patchset: 6870 + CVS date: 2003/05/22 18:05:07 + +commit f052bf8629523610f8061071ce7722b0a4ed706c +Author: jbj +Date: Thu May 22 17:53:03 2003 +0000 + + Yet Another Merge with beecrypt-3.0.0. + + CVS patchset: 6869 + CVS date: 2003/05/22 17:53:03 + +commit 8d73a1c5ebc7b62b312465f3f89d7b1c93dd680a +Author: jbj +Date: Tue May 20 14:02:12 2003 +0000 + + Resolve conflicts. + + CVS patchset: 6868 + CVS date: 2003/05/20 14:02:12 + +commit fea55d4139a791e915a3a5bf1214695479e429a8 +Author: jbj +Date: Tue May 20 13:51:54 2003 +0000 + + Initial revision + + CVS patchset: 6867 + CVS date: 2003/05/20 13:51:54 + +commit 4ec7ad486eb4cde45127097b23db051f97bc6ecf +Author: jbj +Date: Sun May 18 18:33:39 2003 +0000 + + Upgrade to zlib-1.2.0.1. + + CVS patchset: 6860 + CVS date: 2003/05/18 18:33:39 + +commit 128338204307e65672e4a6bea046e826152a5210 +Author: jbj +Date: Sun May 18 15:37:51 2003 +0000 + + - use beecrypt-3.0.0 API with beecrypt.api.h et al, not types.h. + + CVS patchset: 6859 + CVS date: 2003/05/18 15:37:51 + +commit 1418ba4594520f9e164fee1b1acfc0da594c4212 +Author: jbj +Date: Sun May 18 15:25:28 2003 +0000 + + Merge to latest beecrypt-3.0.0. + + CVS patchset: 6858 + CVS date: 2003/05/18 15:25:28 + +commit e5a47e5247135a70fa6c6ccd5b67a45458f5ac2d +Author: jbj +Date: Sat May 17 19:36:25 2003 +0000 + + Fix "make dist" + + CVS patchset: 6857 + CVS date: 2003/05/17 19:36:25 + +commit bba59fdb64a0f2d628d3021fa6062d4543714759 +Author: jbj +Date: Sat May 17 19:27:47 2003 +0000 + + Create python bindings. + + CVS patchset: 6856 + CVS date: 2003/05/17 19:27:47 + +commit fb3f3b2e978f4cd8035dc99475460fcbbbd0965e +Author: jbj +Date: Sat May 17 18:13:56 2003 +0000 + + Spliddles and diddles. + + CVS patchset: 6855 + CVS date: 2003/05/17 18:13:56 + +commit ead95d01cd7fd24587e34adaf31d07363b52403c +Author: jbj +Date: Sat May 17 17:47:23 2003 +0000 + + Merge with latest beecrypt-3.0.0, dump types.h. + + CVS patchset: 6854 + CVS date: 2003/05/17 17:47:23 + +commit c76d999142d8a318f0382f9ffb30416aacfcc287 +Author: jbj +Date: Sat May 17 03:19:55 2003 +0000 + + Rounding for signed division cases. + + CVS patchset: 6853 + CVS date: 2003/05/17 03:19:55 + +commit 386487237fc75ae3e8bffef5dde692a971679477 +Author: jbj +Date: Sat May 17 02:54:40 2003 +0000 + + SPecial cases for negatives to odd positive powers. + + CVS patchset: 6852 + CVS date: 2003/05/17 02:54:40 + +commit 7804d6920846be7f538c2e6ad29bdd1771db994d +Author: jbj +Date: Sat May 17 02:34:45 2003 +0000 + + Finish signed magnitude tests. + + CVS patchset: 6851 + CVS date: 2003/05/17 02:34:45 + +commit e8f14c1c1ef2485c42d1bd5926553a85eb8c2d7e +Author: jbj +Date: Fri May 16 21:17:31 2003 +0000 + + Create. + + CVS patchset: 6850 + CVS date: 2003/05/16 21:17:31 + +commit 38004c8677c87c968fc1cf541bc49f08dcc4fc8a +Author: jbj +Date: Fri May 16 21:14:30 2003 +0000 + + fix: do headerFree after headerRead. + + CVS patchset: 6849 + CVS date: 2003/05/16 21:14:30 + +commit 2dfc9f2eefc0302a8adb7f8a74bf5be21505e105 +Author: jbj +Date: Fri May 16 20:04:53 2003 +0000 + + Fix x86_64 typo. + + CVS patchset: 6848 + CVS date: 2003/05/16 20:04:53 + +commit caee135c54ea54149775d61dc49d4bcf58ff2268 +Author: jbj +Date: Fri May 16 17:19:42 2003 +0000 + + Merge to latest beecrypt-3.0.0. + + CVS patchset: 6847 + CVS date: 2003/05/16 17:19:42 + +commit 420be4069938be086e69834ee5df914d2eaf21f1 +Author: jbj +Date: Thu May 15 14:22:30 2003 +0000 + + - add version check for package with provides and obsoletes. + + CVS patchset: 6846 + CVS date: 2003/05/15 14:22:30 + +commit cdb6cfe7f06f52c1285f1dca63f680d01a90dfc6 +Author: jbj +Date: Thu May 15 13:53:41 2003 +0000 + + - fix: nested %if handling, optind initialization posix vs. glibc. + + CVS patchset: 6843 + CVS date: 2003/05/15 13:53:41 + +commit bf8cae09c80ae3f6551e8247ed02ffd24636c296 +Author: jbj +Date: Thu May 15 13:44:18 2003 +0000 + + - fix: nested %if handling, optind initialization posix vs. gloibc. + + CVS patchset: 6839 + CVS date: 2003/05/15 13:44:18 + +commit e5b645cfe4edc921fd5c7694beff84b27df988a4 +Author: jbj +Date: Mon May 12 22:28:28 2003 +0000 + + Overloading methods of subtype example. + + CVS patchset: 6838 + CVS date: 2003/05/12 22:28:28 + +commit 03dc1c2738a211060a847f226fa24898c748ca82 +Author: jbj +Date: Mon May 12 17:27:27 2003 +0000 + + Typos. + + CVS patchset: 6837 + CVS date: 2003/05/12 17:27:27 + +commit 77c10c042f75fb1ec8bd373a20a9b60a91066c85 +Author: jbj +Date: Mon May 12 00:57:16 2003 +0000 + + Oops, need _BEECRYPT_TYPES_H define after all, sigh. + + CVS patchset: 6836 + CVS date: 2003/05/12 00:57:16 + +commit e77ef01a5f41a71b9846985e588d21ba9b289679 +Author: jbj +Date: Mon May 12 00:36:05 2003 +0000 + + Use bc_lock_t to hide type of locking. + + CVS patchset: 6835 + CVS date: 2003/05/12 00:36:05 + +commit d5ccace91a8abca1ee0123fcac7d6922b287baef +Author: jbj +Date: Mon May 12 00:07:54 2003 +0000 + + Expand the correct "#include +Date: Sun May 11 21:21:58 2003 +0000 + + Typo from merging. + + CVS patchset: 6833 + CVS date: 2003/05/11 21:21:58 + +commit 583e1e89eb365c516d28c1706e8aa8fb98aed1f2 +Author: jbj +Date: Sun May 11 21:20:18 2003 +0000 + + Merge with latest beecrypt-3.0.0. + + CVS patchset: 6832 + CVS date: 2003/05/11 21:20:18 + +commit 17182c4ac1b01c63050a138abb7662ce731ec258 +Author: jbj +Date: Sun May 11 16:17:04 2003 +0000 + + Add carry/borrow test with signed magnitude mpw's. + + CVS patchset: 6831 + CVS date: 2003/05/11 16:17:04 + +commit f1d3267c1545146aec53c87662204f7422f400a3 +Author: jbj +Date: Sat May 10 19:23:57 2003 +0000 + + Add coercion-on-the-fly. + Rename to python function, not tp_foo member, names. + Tests for Knuth polynomial in base, iterativepowers. + + CVS patchset: 6830 + CVS date: 2003/05/10 19:23:57 + +commit 728df698b6de1fe03ce3f8925e53e5a91340d61f +Author: jbj +Date: Fri May 9 23:05:45 2003 +0000 + + Sanity. + + CVS patchset: 6829 + CVS date: 2003/05/09 23:05:45 + +commit 9b1821f798cf273b1c5e0dd42f5bea68504232e8 +Author: jbj +Date: Fri May 9 22:01:59 2003 +0000 + + Merge mpnumber malloc's into python mpw object malloc. + + CVS patchset: 6828 + CVS date: 2003/05/09 22:01:59 + +commit 4fee8b2420dffc35704f07c0659324548450296e +Author: jbj +Date: Fri May 9 16:13:34 2003 +0000 + + Prepare to dump mpnumber from mpwObject. + + CVS patchset: 6827 + CVS date: 2003/05/09 16:13:34 + +commit 9c5529608e389271b80469054bfe80737521590a +Author: jbj +Date: Thu May 8 20:39:29 2003 +0000 + + - don't use error string after gzclose (Dmitry V. Levin). + Spliddles for rpmio, drill h_errno all the way through. + + CVS patchset: 6826 + CVS date: 2003/05/08 20:39:29 + +commit db7ab2f447ee6097b2e98a526f6383a5ca388718 +Author: jbj +Date: Thu May 8 15:52:36 2003 +0000 + + - don't use error string after gzclose (Dmitry V. Levin). + + CVS patchset: 6825 + CVS date: 2003/05/08 15:52:36 + +commit 8fbd1290f661e6b0f6020b9de4b9cf900bcae2dc +Author: jbj +Date: Wed May 7 23:20:31 2003 +0000 + + Convert mpw to and from long. + + CVS patchset: 6824 + CVS date: 2003/05/07 23:20:31 + +commit 716074d0131800602361b6daf6bd6271885efbd5 +Author: jbj +Date: Wed May 7 19:00:42 2003 +0000 + + Blueprint mpw against mpz routines, abandon signed division fo now. + + CVS patchset: 6823 + CVS date: 2003/05/07 19:00:42 + +commit db263d446b72a55d69f357c83c1efd80c20d8225 +Author: jbj +Date: Tue May 6 23:11:46 2003 +0000 + + - fix: cut-n-paste error setting nopromote for Conflicts: (#81965). + + CVS patchset: 6822 + CVS date: 2003/05/06 23:11:46 + +commit 5f26a13065d64ede572b33f00349af041309e74a +Author: jbj +Date: Tue May 6 22:54:03 2003 +0000 + + *** empty log message *** + + CVS patchset: 6821 + CVS date: 2003/05/06 22:54:03 + +commit 19306b30aa76c22277607a59a2ba6a9ff5eaf7ac +Author: jbj +Date: Tue May 6 21:53:02 2003 +0000 + + Use single ndivmod, rather than nmod followed by ndivmod, in mpstr. + + CVS patchset: 6820 + CVS date: 2003/05/06 21:53:02 + +commit 3743a6283b6e644034ebacf0439a9eb468e25429 +Author: jbj +Date: Tue May 6 19:57:10 2003 +0000 + + Fix s/bc/mpw/ typos in mpstr. + Fix cut and paste booboo, s/rshift/lshift/ for when x << y. + + CVS patchset: 6819 + CVS date: 2003/05/06 19:57:10 + +commit 12a12cf3982e160c342e7f9ba714d5734b64aefa +Author: jbj +Date: Mon May 5 21:44:49 2003 +0000 + + Sanity. + + CVS patchset: 6818 + CVS date: 2003/05/05 21:44:49 + +commit 3bb3246247fea289d3a2638fde2f3d0b191774fd +Author: jbj +Date: Mon May 5 21:42:55 2003 +0000 + + Add unit test {rpmdb,mpw}/test subdirs. + + CVS patchset: 6817 + CVS date: 2003/05/05 21:42:55 + +commit 704ce887bfe69799fff28882443025d59417f733 +Author: jbj +Date: Mon May 5 21:42:13 2003 +0000 + + Move to rpmdb subdirectory. + + CVS patchset: 6816 + CVS date: 2003/05/05 21:42:13 + +commit 52b7a8e310e2f1d4289c8532fe0226b8b731903c +Author: jbj +Date: Mon May 5 19:33:46 2003 +0000 + + Upgrade to bsddb from python-2.3. + + CVS patchset: 6815 + CVS date: 2003/05/05 19:33:46 + +commit c7b7ca5bbd5a2a166b9c47d2de3ee80786ce7730 +Author: jbj +Date: Mon May 5 16:07:50 2003 +0000 + + Use new mpfpruntf now in beecrypt-3.0.0 API. + + CVS patchset: 6814 + CVS date: 2003/05/05 16:07:50 + +commit 5cd37687754d5ec15b8865d67ccad52de53a33a0 +Author: jbj +Date: Mon May 5 16:02:02 2003 +0000 + + Merge in latest beecrypt-3.0.0 changes. + + CVS patchset: 6813 + CVS date: 2003/05/05 16:02:02 + +commit 4e1b7e82c001543adfa4ecbacccae61c93711f9a +Author: jbj +Date: Mon May 5 02:16:59 2003 +0000 + + Back out Py_TPFLAGS_BASETYPE for now. + + CVS patchset: 6812 + CVS date: 2003/05/05 02:16:59 + +commit 3db8afedc08c3f7425438ff029b5413456e6969d +Author: jbj +Date: Sun May 4 17:34:53 2003 +0000 + + Use getattro/setattro throughout. + Convert to mpfprintlin from diddled mpprintln. + + CVS patchset: 6811 + CVS date: 2003/05/04 17:34:53 + +commit 66964f525cee898d418d6aa0da10a785b44f6692 +Author: jbj +Date: Sun May 4 16:44:00 2003 +0000 + + Orphan. + + CVS patchset: 6810 + CVS date: 2003/05/04 16:44:00 + +commit f54e177d8a8ee61d2d07cbc36e20c33c630f5ccb +Author: jbj +Date: Sun May 4 16:00:18 2003 +0000 + + Merge latest beecrypt-3.0.0 bits. + Spliddles. + + CVS patchset: 6809 + CVS date: 2003/05/04 16:00:18 + +commit 6d64db3442af92c18847d75b473141fbd28a72b0 +Author: jbj +Date: Fri May 2 21:50:23 2003 +0000 + + Sanity. + + CVS patchset: 6808 + CVS date: 2003/05/02 21:50:23 + +commit 1b00e0031d5f85028300b1734418f43bf4584205 +Author: jbj +Date: Fri May 2 21:05:46 2003 +0000 + + Generate random primes method. + + CVS patchset: 6807 + CVS date: 2003/05/02 21:05:46 + +commit 69eaee5148a660465f4cd7a4bca91305c1b76379 +Author: jbj +Date: Fri May 2 18:38:20 2003 +0000 + + Spliddles. + + CVS patchset: 6806 + CVS date: 2003/05/02 18:38:20 + +commit 4b4cf3a0ebf421c4a950a2f2a48405fdad710911 +Author: jbj +Date: Fri May 2 17:58:41 2003 +0000 + + Spliddles. + + CVS patchset: 6805 + CVS date: 2003/05/02 17:58:41 + +commit 6479a55c561f2fbd606b72f8721066acbd842041 +Author: jbj +Date: Fri May 2 17:47:41 2003 +0000 + + spliddles for type checking. + + CVS patchset: 6804 + CVS date: 2003/05/02 17:47:41 + +commit f3de276031932be5311f97694c581d312393330e +Author: jbj +Date: Fri May 2 16:18:50 2003 +0000 + + Import changes from latest beecrypt-3.0.0. + + CVS patchset: 6803 + CVS date: 2003/05/02 16:18:50 + +commit 366f697b6690d245319eb856985e84625c25236d +Author: jbj +Date: Thu May 1 23:28:46 2003 +0000 + + Intergate beecrypt spliddles. + + CVS patchset: 6802 + CVS date: 2003/05/01 23:28:46 + +commit 0b64f73176d63b71b289b9946e3e77a135e79070 +Author: jbj +Date: Thu May 1 19:55:27 2003 +0000 + + spliddles. + + CVS patchset: 6801 + CVS date: 2003/05/01 19:55:27 + +commit 31e269224f4a3beabbdac86182d6ed9a44657253 +Author: jbj +Date: Thu May 1 08:09:16 2003 +0000 + + fix typo in system.h. + python: bindings for returning mpw's from random number generator. + + CVS patchset: 6800 + CVS date: 2003/05/01 08:09:16 + +commit d13b4600f400d208873ac9c8c325ceebc2f3a257 +Author: jbj +Date: Wed Apr 30 21:35:20 2003 +0000 + + Add mpw.rndm to return random in range 1 < r < b-1. + + CVS patchset: 6799 + CVS date: 2003/04/30 21:35:20 + +commit 44fd5be7f9107a77882afee663a1030e08077cc0 +Author: jbj +Date: Wed Apr 30 21:05:20 2003 +0000 + + Create rpmrng module. + + CVS patchset: 6798 + CVS date: 2003/04/30 21:05:20 + +commit 1359f248a342c67e364ab83000f83f0c513f4686 +Author: jbj +Date: Wed Apr 30 20:04:58 2003 +0000 + + splint fiddles. + + CVS patchset: 6797 + CVS date: 2003/04/30 20:04:58 + +commit b1c4b8352440609c0c9c1a9a415d37a8e0c75439 +Author: jbj +Date: Wed Apr 30 18:16:10 2003 +0000 + + Create rpm.mpw module from guts of rpm.bc. + + CVS patchset: 6796 + CVS date: 2003/04/30 18:16:10 + +commit e4aa414fe7eb95b08e8784b4bfb59ff7a8151a83 +Author: jbj +Date: Wed Apr 30 17:46:38 2003 +0000 + + Create. + + CVS patchset: 6795 + CVS date: 2003/04/30 17:46:38 + +commit ebb6a798bceec91ba01b18b8789688794641d5d7 +Author: jbj +Date: Wed Apr 30 17:45:30 2003 +0000 + + Reorganize to streamline debugging. + + CVS patchset: 6794 + CVS date: 2003/04/30 17:45:30 + +commit b9ddecf2deada2d98aa3efff2db3eb9ee097de22 +Author: jbj +Date: Wed Apr 30 03:25:19 2003 +0000 + + Bindings for modular arithmetic. + + CVS patchset: 6793 + CVS date: 2003/04/30 03:25:19 + +commit dc60eb0074ed651ea687d190150e3037b9057349 +Author: jbj +Date: Wed Apr 30 01:03:33 2003 +0000 + + beecrypt-3.0.0 merge: doxygen pass. + + CVS patchset: 6792 + CVS date: 2003/04/30 01:03:33 + +commit ac36dd47499046706dc9c464bc1df398fe6a578b +Author: jbj +Date: Wed Apr 30 00:11:40 2003 +0000 + + beecrypt-3.0.0 merge: entropy_noise_gather converts bits-tp-bytes, not words. + + CVS patchset: 6791 + CVS date: 2003/04/30 00:11:40 + +commit d38e3db906459b7a2d9d2d8275d7d4fa8ae0a9e9 +Author: jbj +Date: Tue Apr 29 16:49:51 2003 +0000 + + - fix: IDTXglob should return REMOVETID sorted headers (#89857). + + CVS patchset: 6790 + CVS date: 2003/04/29 16:49:51 + +commit f7b055f024141730443759d6511e18c4ba463212 +Author: jbj +Date: Tue Apr 29 11:32:25 2003 +0000 + + Typo. + + CVS patchset: 6789 + CVS date: 2003/04/29 11:32:25 + +commit 01eb96d5995fc6ab49d3a0d06036797c953bb955 +Author: jbj +Date: Tue Apr 29 08:35:56 2003 +0000 + + beecrypt-3.0.0 merge: expand MP_WBITS into types.h + + CVS patchset: 6788 + CVS date: 2003/04/29 08:35:56 + +commit a94207342d80a5ca6fc19e05de95ec346c937ccb +Author: jbj +Date: Tue Apr 29 08:15:16 2003 +0000 + + beecrypt-3.0.0 merge: splint checks. + + CVS patchset: 6787 + CVS date: 2003/04/29 08:15:16 + +commit d4538f2d0da92317bbfeb37b1c7513350763b0f4 +Author: jbj +Date: Mon Apr 28 21:10:07 2003 +0000 + + beecrypt-3.0.0 merge: DSA/SHA1 functional in rpm. + + CVS patchset: 6786 + CVS date: 2003/04/28 21:10:07 + +commit e1e5fa4343052fea261b2d611cd9592378e940f1 +Author: jbj +Date: Mon Apr 28 20:48:32 2003 +0000 + + Orphans + + CVS patchset: 6785 + CVS date: 2003/04/28 20:48:32 + +commit e4474b56d620eda7c1f55b385aebac1731569a60 +Author: jbj +Date: Mon Apr 28 19:34:20 2003 +0000 + + beecrypt-3.0.0 merge: uint32 excision. + + CVS patchset: 6784 + CVS date: 2003/04/28 19:34:20 + +commit a08149369a67ef068bd205164c941768a8e97937 +Author: jbj +Date: Mon Apr 28 15:06:30 2003 +0000 + + beecrypt-3.0.0 merge: bring in latest asm code. + + CVS patchset: 6783 + CVS date: 2003/04/28 15:06:30 + +commit 6099f7ee0e858d8831726ff1e430e4f80d63ba62 +Author: jbj +Date: Sun Apr 27 23:06:37 2003 +0000 + + beecrypt-3.0.0 merge: (mostly) grand renaming, mpw et al. + + CVS patchset: 6782 + CVS date: 2003/04/27 23:06:37 + +commit 18eea94d34737988ae6c8dfaa9aebd349236994c +Author: jbj +Date: Sat Apr 26 21:45:28 2003 +0000 + + beecrypt-3.0.0 merge: (partial) grand renaming, uint32 et al. + + CVS patchset: 6781 + CVS date: 2003/04/26 21:45:28 + +commit a7467cba85c4e0ed6e28aa6f808083398f509974 +Author: jbj +Date: Fri Apr 25 20:46:38 2003 +0000 + + beecrypt-3.0.0 merge: grand renaming, mp32barrett et al. + + CVS patchset: 6780 + CVS date: 2003/04/25 20:46:38 + +commit 68b7bd7ebafa868590effdcefa97e8be57d64b3b +Author: jbj +Date: Fri Apr 25 20:36:06 2003 +0000 + + beecrypt-3.0.0 merge: grand renaming, mp32barret et al. + + CVS patchset: 6779 + CVS date: 2003/04/25 20:36:06 + +commit 6718ac9b84f8c3ddad6e5bb7b9716ee4cb894594 +Author: jbj +Date: Fri Apr 25 19:45:10 2003 +0000 + + beecrypt-3.0.0 merge: grand renaming, mp32number et al. + + CVS patchset: 6778 + CVS date: 2003/04/25 19:45:10 + +commit f589bf944ec8038f716840f66ef5c064f0645661 +Author: jbj +Date: Fri Apr 25 19:22:20 2003 +0000 + + beecrypt-3.0.0 merge: file renaming. + Sanity. + + CVS patchset: 6777 + CVS date: 2003/04/25 19:22:20 + +commit 6531425e337992aae37b5fd16021c6534ca230df +Author: jbj +Date: Fri Apr 25 19:19:48 2003 +0000 + + beecrypt-3.0.0 merge: grand renaming, mp32number et al. + + CVS patchset: 6776 + CVS date: 2003/04/25 19:19:48 + +commit b52edfb1ed46c2eeb79c63dd9ceba158754257de +Author: jbj +Date: Fri Apr 25 18:02:45 2003 +0000 + + beecrypt-3.0.0 merge: copyright messages, new primitive types merged. + + CVS patchset: 6775 + CVS date: 2003/04/25 18:02:45 + +commit 79d776ceb661deaf583f6ba4db182d1d7053edcc +Author: jbj +Date: Fri Apr 25 16:53:36 2003 +0000 + + bc-3.0.0: rename mp32*.[ch] files. + + CVS patchset: 6774 + CVS date: 2003/04/25 16:53:36 + +commit fce07c707aed73ce92114d1ecb0cb825e230b9e8 +Author: jbj +Date: Fri Apr 25 12:26:38 2003 +0000 + + Do signed scaling when dividing. + + CVS patchset: 6773 + CVS date: 2003/04/25 12:26:38 + +commit 7f77dc6110f123b3e1fccc337cb39040e12e0fc6 +Author: jbj +Date: Fri Apr 25 03:01:58 2003 +0000 + + Rework arithmetic. + + CVS patchset: 6772 + CVS date: 2003/04/25 03:01:58 + +commit d55b8e03bc4ae98674595bb5cac6804c358cb80f +Author: jbj +Date: Thu Apr 24 23:02:35 2003 +0000 + + fix: 15^8 had sign problems in intermediate. + + CVS patchset: 6771 + CVS date: 2003/04/24 23:02:35 + +commit 740d48650b698234f8769c853285a6ac51853e66 +Author: jbj +Date: Thu Apr 24 19:31:18 2003 +0000 + + fix: mp32str difficulties with sign bit. + + CVS patchset: 6770 + CVS date: 2003/04/24 19:31:18 + +commit ec5c521b8347b988f9fab0dbed4ee21d82e767ff +Author: jbj +Date: Thu Apr 24 19:29:52 2003 +0000 + + Call romtsOrder() on erasures. + + CVS patchset: 6769 + CVS date: 2003/04/24 19:29:52 + +commit d2d3476ced6b79934f057a24ede10cada53a8e2e +Author: jbj +Date: Thu Apr 24 16:59:05 2003 +0000 + + Trim leading zero's. + + CVS patchset: 6768 + CVS date: 2003/04/24 16:59:05 + +commit de92f6ba0e709d3432bfdc21029676f702d2bfec +Author: jbj +Date: Thu Apr 24 12:23:30 2003 +0000 + + Print positive numbers only. + Add extra word for sign bit. + + CVS patchset: 6767 + CVS date: 2003/04/24 12:23:30 + +commit d832d12330ab9b9dcf28dc937eaf8d5e668001fc +Author: jbj +Date: Wed Apr 23 23:40:08 2003 +0000 + + Mostly functional sliding window exponentiation bindings. + + CVS patchset: 6766 + CVS date: 2003/04/23 23:40:08 + +commit 3f50b8fe7e1f94b9fa8fbec915f74510841ddcd2 +Author: jbj +Date: Mon Apr 21 22:31:28 2003 +0000 + + Don't segfault if given ascii armored rather than binary pubkey packets. + + CVS patchset: 6765 + CVS date: 2003/04/21 22:31:28 + +commit 96142f1201ecfd4b867a40b2ba733bdf7269ef79 +Author: jbj +Date: Mon Apr 21 14:30:19 2003 +0000 + + Orphan. + + CVS patchset: 6764 + CVS date: 2003/04/21 14:30:19 + +commit 41cfdb404cbdd5c9cfeef99c5276e69d04c9b1d2 +Author: jbj +Date: Fri Apr 18 14:03:31 2003 +0000 + + - python: missed tuple refcount in IDTXload/IDTXglob. + + CVS patchset: 6763 + CVS date: 2003/04/18 14:03:31 + +commit e95166341a539e5fda08e9dbc6eab8db452f5fb5 +Author: jbj +Date: Fri Apr 18 14:03:11 2003 +0000 + + python: missed tuple refcount in IDTXload/IDTXglob. + + CVS patchset: 6762 + CVS date: 2003/04/18 14:03:11 + +commit 8490f11738a664e0d8c413b88fa3fe830facb573 +Author: jbj +Date: Thu Apr 17 22:14:15 2003 +0000 + + Typos and transfer trash. + + CVS patchset: 6761 + CVS date: 2003/04/17 22:14:15 + +commit c6156e0abde993ecff24a265e40b4f270a9e0076 +Author: jbj +Date: Thu Apr 17 17:17:27 2003 +0000 + + Doxygen doco markup. + + CVS patchset: 6760 + CVS date: 2003/04/17 17:17:27 + +commit 19dbe0729458b91be1f574c3504533031f1c936d +Author: jbj +Date: Thu Apr 17 15:57:42 2003 +0000 + + Ignore .created too. + + CVS patchset: 6759 + CVS date: 2003/04/17 15:57:42 + +commit 7232f895edaddb02c7c3cda04eba56b6d48bb154 +Author: jbj +Date: Thu Apr 17 15:14:49 2003 +0000 + + Don't overflow internal tables with unknown user/group (#85346). + + CVS patchset: 6758 + CVS date: 2003/04/17 15:14:49 + +commit 5f527ceb06dadf3c6febd710f2c5f8b027ab1cd7 +Author: jbj +Date: Thu Apr 17 14:47:57 2003 +0000 + + rpmbuild, not rpm, -ba. + + CVS patchset: 6757 + CVS date: 2003/04/17 14:47:57 + +commit 80aa2324955cdb73af81331dd47ac106e8ec831f +Author: jbj +Date: Thu Apr 17 14:47:19 2003 +0000 + + rpmbuiod, not rpm, -ba. + + CVS patchset: 6756 + CVS date: 2003/04/17 14:47:19 + +commit 97eb9b42fd7643637f1d9b09212f1faf79656a1d +Author: jbj +Date: Thu Apr 17 14:44:07 2003 +0000 + + rpm-build, not rpmbuild. + + CVS patchset: 6755 + CVS date: 2003/04/17 14:44:07 + +commit f7aaeb11df0bdbdffd6916ca083d0d8be4afb253 +Author: jbj +Date: Wed Apr 16 22:13:18 2003 +0000 + + - permit secondary tag match patterns with RPMQV_ALL. + + CVS patchset: 6754 + CVS date: 2003/04/16 22:13:18 + +commit 27785211ad035c1f5e36628771ca4f4b8cd017f5 +Author: jbj +Date: Wed Apr 16 17:55:13 2003 +0000 + + Orphan. + + CVS patchset: 6753 + CVS date: 2003/04/16 17:55:13 + +commit c243ab099b4429a20d1ac00baa3eeae206be4365 +Author: jbj +Date: Wed Apr 16 17:48:04 2003 +0000 + + - resurrect manifests, RPMRC_NOTFOUND returned by readLead(). + + CVS patchset: 6752 + CVS date: 2003/04/16 17:48:04 + +commit 14165bc5582af0306bff6bb42b7c76305bec5abf +Author: jbj +Date: Tue Apr 15 20:04:25 2003 +0000 + + Merge file-4.02 changes. + + CVS patchset: 6751 + CVS date: 2003/04/15 20:04:25 + +commit 392e5feaca236adca8eb5097e3c1c849031aa30a +Author: jbj +Date: Tue Apr 15 18:50:00 2003 +0000 + + Port -F and -N from file-4.02. + + CVS patchset: 6750 + CVS date: 2003/04/15 18:50:00 + +commit 81565202683f7b9d44a0d7dd66f0e610b29022c3 +Author: jbj +Date: Tue Apr 15 17:24:17 2003 +0000 + + Move sources to src sub-directory. + + CVS patchset: 6749 + CVS date: 2003/04/15 17:24:17 + +commit 58886e8cbaf167cde1a8a9d0113ad836fad50d55 +Author: jbj +Date: Tue Apr 15 17:01:30 2003 +0000 + + Move magic generation to sub-directory. + + CVS patchset: 6748 + CVS date: 2003/04/15 17:01:30 + +commit a2ed3a1f3e9ed7e6bcde955147ab7703d2139d9a +Author: jbj +Date: Tue Apr 15 16:58:35 2003 +0000 + + Move magic creation to sub-directory. + + CVS patchset: 6747 + CVS date: 2003/04/15 16:58:35 + +commit 20d11cf0f4b568eef0f66d2d606d103496948db0 +Author: jbj +Date: Tue Apr 15 16:45:06 2003 +0000 + + Move man pages to sub-directory. + + CVS patchset: 6746 + CVS date: 2003/04/15 16:45:06 + +commit 212ee02ec39b2a6d4b893d62addd9b99d4ae7a59 +Author: jbj +Date: Tue Apr 15 16:43:03 2003 +0000 + + Move man pages to sub directory. + + CVS patchset: 6745 + CVS date: 2003/04/15 16:43:03 + +commit 114be8061f77db28b1cfd4daf5dd38cfb10740c0 +Author: jbj +Date: Tue Apr 15 15:19:30 2003 +0000 + + Gratuitous name changes from file-4.02. + + CVS patchset: 6744 + CVS date: 2003/04/15 15:19:30 + +commit 99837681b3ec1f79ae23c9a60fa7e9162926e858 +Author: jbj +Date: Tue Apr 15 15:03:49 2003 +0000 + + Gratuitous name changes from file-4.02. + + CVS patchset: 6743 + CVS date: 2003/04/15 15:03:49 + +commit 1eef3a8561dbfa760f504ca9852cabdbc988a750 +Author: jbj +Date: Mon Apr 14 21:04:57 2003 +0000 + + Create. + + CVS patchset: 6742 + CVS date: 2003/04/14 21:04:57 + +commit 748f965540b6133d588864de928e7485a7bf54e9 +Author: jbj +Date: Mon Apr 14 21:04:43 2003 +0000 + + Typos. + + CVS patchset: 6741 + CVS date: 2003/04/14 21:04:43 + +commit 57b080d43fbc3095152e01f74d9a5b2342a400ae +Author: jbj +Date: Mon Apr 14 20:54:50 2003 +0000 + + Compiles with file.h changes from file-4.02. + + CVS patchset: 6740 + CVS date: 2003/04/14 20:54:50 + +commit b3d8f3155ed6fda819fd1d8df881bcb0a88f6717 +Author: jbj +Date: Mon Apr 14 19:24:29 2003 +0000 + + Clone for file-4.02 merge. + + CVS patchset: 6739 + CVS date: 2003/04/14 19:24:29 + +commit 12b77c0582c21366e3479a05c844cae7aaf6f32c +Author: jbj +Date: Fri Apr 11 22:21:40 2003 +0000 + + Beecrypt python bindings for arithmetic and radix conversion formatting. + + CVS patchset: 6738 + CVS date: 2003/04/11 22:21:40 + +commit 142d1ac037a2c8a6b8236b3fa70909565dffd71f +Author: jbj +Date: Fri Apr 11 00:52:17 2003 +0000 + + Mostly complete beecrypt bindings. + + CVS patchset: 6737 + CVS date: 2003/04/11 00:52:17 + +commit 552d691608cf3bef7d95acea4e2310a437da2c54 +Author: jbj +Date: Wed Apr 9 21:46:31 2003 +0000 + + Splint fiddles. + + CVS patchset: 6736 + CVS date: 2003/04/09 21:46:31 + +commit 783219a8325bca538d21c367f9c523a79dbcb011 +Author: jbj +Date: Tue Apr 8 21:42:55 2003 +0000 + + fix: prevent segfault if malicious server sends 1 GB of data through ftpNLST. + fix: rpmal could segfault under obscure conditions. + Use array, not individual structures, for rpmsw{Enter,Exit} timestamps. + + CVS patchset: 6735 + CVS date: 2003/04/08 21:42:55 + +commit f60ec855de0d6bfd29325fcb73b2901780e72e3d +Author: jbj +Date: Mon Apr 7 12:05:35 2003 +0000 + + Calibrated stopwatch using rdtsc. + Probes for digest/signature and rpmdb. + + CVS patchset: 6734 + CVS date: 2003/04/07 12:05:35 + +commit 0bb715a528359c01b6077f850ab0bc2e0f5e8c55 +Author: jbj +Date: Fri Apr 4 22:15:58 2003 +0000 + + Accumulate compress/uncompress times. + + CVS patchset: 6733 + CVS date: 2003/04/04 22:15:58 + +commit b18870666993f4f0e3679872bd0b168d6176320e +Author: jbj +Date: Fri Apr 4 16:22:44 2003 +0000 + + Add cpuinfo() test program. + + CVS patchset: 6732 + CVS date: 2003/04/04 16:22:44 + +commit 126654591c74112bffcf98887bd9a0c654856bbd +Author: jbj +Date: Thu Apr 3 00:07:41 2003 +0000 + + Gettextify output strftime(3) formats (#83611). + + CVS patchset: 6731 + CVS date: 2003/04/03 00:07:41 + +commit 598457907828b062cedc2cff252aeeab7b988fce +Author: jbj +Date: Wed Apr 2 23:26:06 2003 +0000 + + Use rpmswEnter/rpmswExit throughout. + + CVS patchset: 6730 + CVS date: 2003/04/02 23:26:06 + +commit 95f01d39a57c3c3d8ebf80cfd78e67c550dc32e5 +Author: jbj +Date: Wed Apr 2 21:16:26 2003 +0000 + + Splint clean. + + CVS patchset: 6729 + CVS date: 2003/04/02 21:16:26 + +commit 1f366d6a00d1cf8dc08a40fe789a1b68b4b80a5a +Author: jbj +Date: Wed Apr 2 19:24:41 2003 +0000 + + Splint fiddles. + + CVS patchset: 6728 + CVS date: 2003/04/02 19:24:41 + +commit d96a0816260b82501945f1b8e015efcf0839705c +Author: jbj +Date: Tue Apr 1 22:30:04 2003 +0000 + + Splint fiddles. + + CVS patchset: 6727 + CVS date: 2003/04/01 22:30:04 + +commit b0ca58af8e9bca4c1c8d288c71c39d4b484102d8 +Author: jbj +Date: Tue Apr 1 22:27:39 2003 +0000 + + Splint fiddles. + Create struct rpmop_s from OPSTAT_t. + + CVS patchset: 6726 + CVS date: 2003/04/01 22:27:39 + +commit 4eb5fa7dc583f7c89d3a6118f73f581300a1375e +Author: jbj +Date: Tue Apr 1 22:26:09 2003 +0000 + + Splint fiddles. + Move OPSTAT_t to rpmsw.h. + + CVS patchset: 6725 + CVS date: 2003/04/01 22:26:09 + +commit cec67caee668e6f95b1f5163b04d034d8c52fe5e +Author: jbj +Date: Tue Apr 1 22:20:45 2003 +0000 + + Splint fiddles. + + CVS patchset: 6724 + CVS date: 2003/04/01 22:20:45 + +commit 02bb493292857e493155e345ef5a766240b21e96 +Author: jbj +Date: Fri Mar 28 22:47:18 2003 +0000 + + fix: Pass FIPS-C character by character, not strlen(ifn). + + CVS patchset: 6723 + CVS date: 2003/03/28 22:47:18 + +commit 485f497e21a63a7d9dd75f2197b5223a5965959c +Author: jbj +Date: Fri Mar 28 22:11:06 2003 +0000 + + Add gcrypt to tdigest. + + CVS patchset: 6722 + CVS date: 2003/03/28 22:11:06 + +commit 53f81816ea838ac251ea69b9b143f2ac764ec5b5 +Author: jbj +Date: Thu Mar 27 21:53:39 2003 +0000 + + Sanity. + + CVS patchset: 6721 + CVS date: 2003/03/27 21:53:39 + +commit fc0a8f7bc95191481d9f3f7a97155af46d55013b +Author: jbj +Date: Tue Mar 25 23:51:24 2003 +0000 + + Add transaction stop watch points. + + CVS patchset: 6718 + CVS date: 2003/03/25 23:51:24 + +commit d79b053df3bd0b0b08d52a3d09a667650b1c7028 +Author: jbj +Date: Tue Mar 25 00:22:23 2003 +0000 + + Repair rdtsc stopwatch, use gettimeofday(3) for now. + + CVS patchset: 6716 + CVS date: 2003/03/25 00:22:23 + +commit 0b8c3f8319fb610f809f3276ae8001b67b85177d +Author: jbj +Date: Mon Mar 24 17:25:42 2003 +0000 + + Add benchmark stopwatch, change precision from milli- to micro-secs. + + CVS patchset: 6715 + CVS date: 2003/03/24 17:25:42 + +commit 803528c258d2c14b820a9b2fb5bf2eba9a486133 +Author: jbj +Date: Sun Mar 23 00:36:13 2003 +0000 + + Make peace with automake-1.7.3. + Recheck thread safety markes with fsm synchronous threads. + + CVS patchset: 6714 + CVS date: 2003/03/23 00:36:13 + +commit 96cd0c2e288fa8ca561ad814265bc2138a80ddaa +Author: jbj +Date: Thu Mar 20 23:42:05 2003 +0000 + + Make sure that $(RPM_BUILD_ROOT}/usr/lib is 1st libarry searched. + Bump popt version. + + CVS patchset: 6710 + CVS date: 2003/03/20 23:42:05 + +commit 97ec1053c9290e6f43e661be733ba08e3b1175b5 +Author: jbj +Date: Wed Mar 19 16:05:49 2003 +0000 + + - unify signal handling in librpmio, use condvar to deliver signal. + + CVS patchset: 6707 + CVS date: 2003/03/19 16:05:49 + +commit 099e6cd1ae88c97384ac085a8ceafdcf85a51ab6 +Author: jbj +Date: Wed Mar 19 03:36:13 2003 +0000 + + Sanity, take 2. + + CVS patchset: 6706 + CVS date: 2003/03/19 03:36:13 + +commit 6cb657b9d27bc6cd861a721d5284486a52993310 +Author: jbj +Date: Wed Mar 19 03:00:02 2003 +0000 + + Sanity. + + CVS patchset: 6705 + CVS date: 2003/03/19 03:00:02 + +commit d2a425e0158a0dced5bf199f229924890067c563 +Author: jbj +Date: Tue Mar 18 17:48:19 2003 +0000 + + - fix: short option help missing string terminator. + + CVS patchset: 6704 + CVS date: 2003/03/18 17:48:19 + +commit 5fe1914a155697b4f14483a394de9b25a4af5c19 +Author: jbj +Date: Tue Mar 18 02:41:33 2003 +0000 + + Proof of concept scriptlet queue, single or multi threaded. + + CVS patchset: 6699 + CVS date: 2003/03/18 02:41:33 + +commit 1923ecbc300d330eae0cf898f9274d11d11df658 +Author: cturner +Date: Sun Mar 16 23:32:37 2003 +0000 + + version bump + + CVS patchset: 6698 + CVS date: 2003/03/16 23:32:37 + +commit 935e813ccc5180d2cf186326c03928caf7f5f7a9 +Author: cturner +Date: Sun Mar 16 23:31:42 2003 +0000 + + oops, make sure File::Spec is loaded + + CVS patchset: 6697 + CVS date: 2003/03/16 23:31:42 + +commit 423aba69efad7d971129932c0edc990b4a093d3e +Author: cturner +Date: Sun Mar 16 23:31:08 2003 +0000 + + fix rpmlib 4.0.x segfault that is a result of iterator freeing after the creating db is freed + + CVS patchset: 6696 + CVS date: 2003/03/16 23:31:08 + +commit cfa8f19149254733f1e066c6476c06dbe37d399d +Author: cturner +Date: Sun Mar 16 23:16:46 2003 +0000 + + fix problem in perl 5.6.x with basename/realpath/etc + + CVS patchset: 6695 + CVS date: 2003/03/16 23:16:46 + +commit 77b724ec9940a01f435cc20a2a5f0445a14ef276 +Author: jbj +Date: Sun Mar 16 22:36:52 2003 +0000 + + Create rpmsq, combining rpmdb/psm signal handlers. + + CVS patchset: 6694 + CVS date: 2003/03/16 22:36:52 + +commit 04aa0e394ea53e1e87c547e2476c52dbf560fda1 +Author: jbj +Date: Sun Mar 16 02:59:17 2003 +0000 + + Start unifying signal handlers. + + CVS patchset: 6693 + CVS date: 2003/03/16 02:59:17 + +commit 0feab83bbe7f1d8a76e66cbfbe33f9459086cf93 +Author: jbj +Date: Sat Mar 15 21:51:11 2003 +0000 + + Sanity. + + CVS patchset: 6692 + CVS date: 2003/03/15 21:51:11 + +commit 55b458f93376e2611566a369ce676a7893a6c52e +Author: jbj +Date: Sat Mar 15 16:56:46 2003 +0000 + + Create. + + CVS patchset: 6691 + CVS date: 2003/03/15 16:56:46 + +commit 5def9fa5c68a8d6c36993ed85b4bd962b46974f3 +Author: jbj +Date: Fri Mar 14 23:37:42 2003 +0000 + + Create. + + CVS patchset: 6690 + CVS date: 2003/03/14 23:37:42 + +commit d5be3140637989f5f37f9e9d5518285395477f02 +Author: jbj +Date: Fri Mar 14 23:37:25 2003 +0000 + + Sanity. + + CVS patchset: 6689 + CVS date: 2003/03/14 23:37:25 + +commit 2d999924a620080dc211c5458fde93440dbed22a +Author: jbj +Date: Fri Mar 14 21:43:16 2003 +0000 + + Skip /usr/lib/debug when walking $RPM_BUILD_ROOT. + + CVS patchset: 6688 + CVS date: 2003/03/14 21:43:16 + +commit 97bed5159ebefd633bdd3c11a48b2deeef1424da +Author: jbj +Date: Fri Mar 14 18:11:09 2003 +0000 + + Unchain iterator on NULL return. + Don't segfault on --fileclass. + + CVS patchset: 6685 + CVS date: 2003/03/14 18:11:09 + +commit bcf3c3dde45feb07c8caa454ecf0ab27ca79b271 +Author: jbj +Date: Thu Mar 13 12:04:35 2003 +0000 + + Close and free iterators/cursors on signal exit path. + + CVS patchset: 6681 + CVS date: 2003/03/13 12:04:35 + +commit ed1cc2fa039332bc35517c3c7b433150da419ef6 +Author: jbj +Date: Wed Mar 12 21:57:50 2003 +0000 + + Sanity. + + CVS patchset: 6680 + CVS date: 2003/03/12 21:57:50 + +commit 521861e7443971e712fd292c7ccfe7b1cfddf2e7 +Author: jbj +Date: Wed Mar 12 13:31:13 2003 +0000 + + Don't put newlines in base64 tag, add rpmHeader tag. + + CVS patchset: 6679 + CVS date: 2003/03/12 13:31:13 + +commit c3d4c061ac667e066ec39e131b803161f0a8e919 +Author: jbj +Date: Wed Mar 12 02:08:58 2003 +0000 + + Orphan. + + CVS patchset: 6678 + CVS date: 2003/03/12 02:08:58 + +commit 06b2ab0587c24a880df54c03e5a640b5b2cd7a44 +Author: jbj +Date: Wed Mar 12 02:08:20 2003 +0000 + + - --queryformat '[%{*:xml}\n]' to dump header content in XML. + + CVS patchset: 6677 + CVS date: 2003/03/12 02:08:20 + +commit fc24c6edb493a347add26341639d44bf3abeebe2 +Author: jbj +Date: Tue Mar 11 00:51:26 2003 +0000 + + Use an iterator to hide pattern matching on tag/ext names. + + CVS patchset: 6676 + CVS date: 2003/03/11 00:51:26 + +commit f9200584683e5bda36cc3cc66d66cb0d43c51305 +Author: jbj +Date: Mon Mar 10 23:28:24 2003 +0000 + + - upgrade to zlib-1.2.beta7. + - pass structure pointer, not args, through headerSprintf call chain. + - add ":xml" header format modifier. + + CVS patchset: 6675 + CVS date: 2003/03/10 23:28:24 + +commit 205419460247f03ab62c2357f305e9931ecefe1e +Author: cturner +Date: Mon Mar 10 17:08:00 2003 +0000 + + ugh, rpm 4.1isms snuck in + + CVS patchset: 6674 + CVS date: 2003/03/10 17:08:00 + +commit 91740bfd15c78e2b63a75495255a3b4727935bd8 +Author: cturner +Date: Mon Mar 10 16:31:58 2003 +0000 + + prep a 0.61 build + + CVS patchset: 6671 + CVS date: 2003/03/10 16:31:58 + +commit b58ca441e66148fa7f206729898943551c6c4c19 +Author: jbj +Date: Mon Mar 10 14:39:07 2003 +0000 + + Minimize ars passed throuch headerSprintf call chain. + + CVS patchset: 6670 + CVS date: 2003/03/10 14:39:07 + +commit 57ba0c77a23c2f040d152ee5c0ff49262fbf8f26 +Author: cturner +Date: Sun Mar 9 18:34:27 2003 +0000 + + beginnings of control over the verify flags for transactions + + CVS patchset: 6669 + CVS date: 2003/03/09 18:34:27 + +commit 477a3e0e3cc64d346c72a645828eda0dd75cf832 +Author: cturner +Date: Sun Mar 9 17:53:35 2003 +0000 + + add expand_macro + + CVS patchset: 6668 + CVS date: 2003/03/09 17:53:35 + +commit 6da035db569794121d4311a34754fb268cf68702 +Author: cturner +Date: Sun Mar 9 09:56:44 2003 +0000 + + lot of changes to fix some fundamental refcount probs. also add new header sprintf method from James Olin Oden + + CVS patchset: 6667 + CVS date: 2003/03/09 09:56:44 + +commit 680669383a5a35c4e8f7ff65799cac62edb5222c +Author: jbj +Date: Sat Mar 8 23:31:10 2003 +0000 + + Splint fiddles. + + CVS patchset: 6666 + CVS date: 2003/03/08 23:31:10 + +commit 946203d5d9aa29f5b59a94786d04e4a8e34f4832 +Author: jbj +Date: Sat Mar 8 23:18:09 2003 +0000 + + Splint fiddles. + + CVS patchset: 6665 + CVS date: 2003/03/08 23:18:09 + +commit 363bdbfa512829c536cad4dc10d2ad8b3c77772d +Author: jbj +Date: Sat Mar 8 21:47:46 2003 +0000 + + Update to infnew-7 patch. + + CVS patchset: 6664 + CVS date: 2003/03/08 21:47:46 + +commit 1dac41397f9e8176d1b1afbb320af659ebefbf1f +Author: jbj +Date: Sat Mar 8 18:30:38 2003 +0000 + + Sanity. + + CVS patchset: 6663 + CVS date: 2003/03/08 18:30:38 + +commit f465bd6d99dfe0cabe2bfeffc6c41d01d2913d68 +Author: jbj +Date: Fri Mar 7 03:02:57 2003 +0000 + + Sanity. + + CVS patchset: 6659 + CVS date: 2003/03/07 03:02:57 + +commit b178992ceb7ed12c31e5e9d7118af0a271c5f343 +Author: jbj +Date: Fri Mar 7 03:01:20 2003 +0000 + + Fiddles to build on Red Hat 7.3. + + CVS patchset: 6657 + CVS date: 2003/03/07 03:01:20 + +commit 51e7f7a5e9f5e5c762e049a97309e32928dd5bcc +Author: jbj +Date: Thu Mar 6 22:50:04 2003 +0000 + + - fix: memory leak (85522). + + CVS patchset: 6656 + CVS date: 2003/03/06 22:50:04 + +commit 29cffe52fca8d5480c333c557996d2bc0196a801 +Author: jbj +Date: Thu Mar 6 00:57:54 2003 +0000 + + Revert c99 syntax in elfutils. + Fiddles to build on Red Hat 7.3. + + CVS patchset: 6654 + CVS date: 2003/03/06 00:57:54 + +commit e8cf6cbb056a5b4517191b2a216d48a712993460 +Author: jbj +Date: Wed Mar 5 00:13:11 2003 +0000 + + Sanity. + + CVS patchset: 6652 + CVS date: 2003/03/05 00:13:11 + +commit ef4490102a278a335d711dda2fc144a99f985a76 +Author: jbj +Date: Tue Mar 4 23:35:23 2003 +0000 + + automake before autoconf. + + CVS patchset: 6651 + CVS date: 2003/03/04 23:35:23 + +commit 2d3e04467bc30b0a7091556c0877526020f0c8bd +Author: jbj +Date: Tue Mar 4 22:59:11 2003 +0000 + + Build with elfutils-0.76 internal, take 2. + + CVS patchset: 6648 + CVS date: 2003/03/04 22:59:11 + +commit dd3b88df4df7cb30c5685f011a80a125e0431482 +Author: jbj +Date: Tue Mar 4 22:03:25 2003 +0000 + + Resolve conflicts. + + CVS patchset: 6647 + CVS date: 2003/03/04 22:03:25 + +commit c207ce7fd07e3d149bf6ac179d937a6f96ea9d24 +Author: jbj +Date: Tue Mar 4 21:57:14 2003 +0000 + + Initial revision + + CVS patchset: 6646 + CVS date: 2003/03/04 21:57:14 + +commit dd8e9be4ce4a9d98dea8df4eff7c1ccf1e038adf +Author: jbj +Date: Sat Mar 1 20:23:39 2003 +0000 + + Sanity. + + CVS patchset: 6641 + CVS date: 2003/03/01 20:23:39 + +commit f8cf4fc4a9f675d2a2d742c481ac52065b3c58cf +Author: jbj +Date: Fri Feb 28 19:42:36 2003 +0000 + + Orphans. + + CVS patchset: 6639 + CVS date: 2003/02/28 19:42:36 + +commit 5a71684d622be1c74ff1e0454ca2cd6705711448 +Author: jbj +Date: Fri Feb 28 19:38:25 2003 +0000 + + Orphan. + + CVS patchset: 6638 + CVS date: 2003/02/28 19:38:25 + +commit 7ac407a6df300fe3519fdce6e7c1bc206fb92169 +Author: jbj +Date: Fri Feb 28 19:32:06 2003 +0000 + + Initial revision + + CVS patchset: 6472 + CVS date: 2003/02/28 19:32:06 + +commit 783533803f83ebae7ad9c0ac4db509308189aa65 +Author: jbj +Date: Fri Feb 28 19:23:24 2003 +0000 + + Initial revision + + CVS patchset: 6073 + CVS date: 2003/02/28 19:23:24 + +commit ee64989f26334b937b430bb2e9fdc812d930ad74 +Author: jbj +Date: Thu Feb 27 20:57:57 2003 +0000 + + - file: check size read from elf header (#85297). + + CVS patchset: 6072 + CVS date: 2003/02/27 20:57:57 + +commit be0ee61ce94b8821b075d57caee261251f963aee +Author: jbj +Date: Thu Feb 27 20:30:53 2003 +0000 + + - check size read from elf header (#85297). + + CVS patchset: 6071 + CVS date: 2003/02/27 20:30:53 + +commit 8f41770db22e211beb93c6be13072817d8d33e07 +Author: jbj +Date: Fri Feb 21 17:01:37 2003 +0000 + + More picky splint fiddles. + + CVS patchset: 6070 + CVS date: 2003/02/21 17:01:37 + +commit 13a2b0b906b3c31365277a41f3fb00beae0dfc14 +Author: jbj +Date: Fri Feb 21 05:13:48 2003 +0000 + + Splint fiddles. + + CVS patchset: 6069 + CVS date: 2003/02/21 05:13:48 + +commit c1c4bed30245ecc474d4d8ed72183d5e75eea500 +Author: jbj +Date: Fri Feb 21 04:19:07 2003 +0000 + + Splint fiddles. + + CVS patchset: 6068 + CVS date: 2003/02/21 04:19:07 + +commit 939bbface17bc1e87a64aa55ca6783c4be322e94 +Author: jbj +Date: Thu Feb 20 21:06:04 2003 +0000 + + Ready for splint annotations. + + CVS patchset: 6067 + CVS date: 2003/02/20 21:06:04 + +commit 8940ecbe6285f120af403f255c52d11b58c06e21 +Author: jbj +Date: Thu Feb 20 20:58:11 2003 +0000 + + Add versioning to library. + Pick up remaining expat files. + + CVS patchset: 6066 + CVS date: 2003/02/20 20:58:11 + +commit 867c6144032a7b80b734ae084e035202272d7d5c +Author: jbj +Date: Thu Feb 20 20:40:53 2003 +0000 + + Automakify, getting rid of generated files. + + CVS patchset: 6065 + CVS date: 2003/02/20 20:40:53 + +commit a86d93be542c918a10630f6348c29b346c0274f4 +Author: jbj +Date: Thu Feb 20 18:55:53 2003 +0000 + + Initial revision + + CVS patchset: 6041 + CVS date: 2003/02/20 18:55:53 + +commit 2c26d43b9898a3b5efb06b34946e7918384c1e55 +Author: jbj +Date: Thu Feb 20 17:51:23 2003 +0000 + + Sanity. + + CVS patchset: 6040 + CVS date: 2003/02/20 17:51:23 + +commit 3dade9b6af09b1f4e17229ff55f665dce1bdc815 +Author: jbj +Date: Fri Feb 14 23:03:35 2003 +0000 + + - file: fix ogg/vorbis file classification problems. + - skip fingerprints in /usr/share/doc and /usr/src/debug. + - add file(1) as /usr/lib/rpm/rpmfile. + - enable transaction coloring for s390x/ppc64. + + CVS patchset: 6039 + CVS date: 2003/02/14 23:03:35 + +commit dd4954229d327ae3524504d5c6b769cb877fb887 +Author: jbj +Date: Fri Feb 14 20:20:20 2003 +0000 + + fix: ogg/vorbis file classification problems. + + CVS patchset: 6038 + CVS date: 2003/02/14 20:20:20 + +commit 82c4d0c0fb86fd56e46ea18509911a7097359ce8 +Author: jbj +Date: Thu Feb 6 16:52:57 2003 +0000 + + - popt: diddle doxygen/splint annotations, corrected doco. + + CVS patchset: 6037 + CVS date: 2003/02/06 16:52:57 + +commit e0e3dbeaec406fcb9674d674bf42ce09452cb2cd +Author: jbj +Date: Wed Feb 5 15:35:57 2003 +0000 + + Spelling correction. + + CVS patchset: 6036 + CVS date: 2003/02/05 15:35:57 + +commit 3b6005fbd9eb3d071674343db8defe3c3aabc74a +Author: jbj +Date: Mon Feb 3 11:46:52 2003 +0000 + + oops, get rid of debugging printf's. + destroy nptl functional test mutex/cond iff successful. + initialize getcwd buffer to zero to keep valgrind happy. + + CVS patchset: 6035 + CVS date: 2003/02/03 11:46:52 + +commit 8b68faf981d02d50d1666f543c337bb72cd23def +Author: jbj +Date: Fri Jan 31 22:55:28 2003 +0000 + + - fix: trap SIGPIPE, close database(s). + - configurable default query output format. + + CVS patchset: 6034 + CVS date: 2003/01/31 22:55:28 + +commit 80e703591701ddbd4616ea3b741ecbba389b42fb +Author: jbj +Date: Wed Jan 29 19:52:28 2003 +0000 + + - pay attention to package color when upgrading identical packages. + + CVS patchset: 6033 + CVS date: 2003/01/29 19:52:28 + +commit e10b348c6a72689d2d6e68cdf69d829001d1c1c7 +Author: jbj +Date: Wed Jan 29 18:53:01 2003 +0000 + + Functional upgrade glibc*i386 on x86_64 platform + + CVS patchset: 6032 + CVS date: 2003/01/29 18:53:01 + +commit c63f257a7ebd1d41a3caf38172251bdb2e6c0b20 +Author: jbj +Date: Tue Jan 28 17:17:26 2003 +0000 + + - fix: clean relocation path for --prefix=/. + - python: permit stdout/stderr to be remapped to install.log. + + CVS patchset: 6031 + CVS date: 2003/01/28 17:17:26 + +commit b4352eaa31f458d0eee5bf9b319982ded7fb246f +Author: jbj +Date: Mon Jan 27 18:09:04 2003 +0000 + + Update sv.po. + + CVS patchset: 6030 + CVS date: 2003/01/27 18:09:04 + +commit 4cab573997627bc9210a4c345da380a3ba83d2b8 +Author: jbj +Date: Mon Jan 27 17:45:53 2003 +0000 + + - fix: more debugedit.c problems. + + CVS patchset: 6029 + CVS date: 2003/01/27 17:45:53 + +commit c87fa0b0298dda7ae49e3b079a7d464934188fe2 +Author: jbj +Date: Sat Jan 25 20:59:52 2003 +0000 + + - permit anaconda to choose "presentation order". + + CVS patchset: 6028 + CVS date: 2003/01/25 20:59:52 + +commit 8441baccd286b9693e74841946d338c3667f0bae +Author: jbj +Date: Sat Jan 25 18:10:30 2003 +0000 + + Display statfs(2) returns for debugging. + + CVS patchset: 6027 + CVS date: 2003/01/25 18:10:30 + +commit 79365b0a0d558e40aea22d5c87a25b372f69accc +Author: jbj +Date: Fri Jan 24 21:01:50 2003 +0000 + + Add file to the splint sources too. + + CVS patchset: 6026 + CVS date: 2003/01/24 21:01:50 + +commit 83037d78fecac9fd89db832b0040a17a93f5667a +Author: jbj +Date: Fri Jan 24 19:41:55 2003 +0000 + + splint fiddles. + + CVS patchset: 6025 + CVS date: 2003/01/24 19:41:55 + +commit 19884892c015cd7371f0b2cee666484f159fbf43 +Author: jbj +Date: Fri Jan 24 17:11:36 2003 +0000 + + Apply patches 9+10, equivalent to db-4.1.25 now. + + CVS patchset: 6024 + CVS date: 2003/01/24 17:11:36 + +commit 7e716b70fb68cbef5bd35e154a734269067f1e37 +Author: jbj +Date: Thu Jan 23 20:23:24 2003 +0000 + + splint fiddles. + + CVS patchset: 6023 + CVS date: 2003/01/23 20:23:24 + +commit ff140452c3620c5216778aa72505ada37f3407be +Author: jbj +Date: Wed Jan 22 19:21:23 2003 +0000 + + - fix: debugedit.c problem. + + CVS patchset: 6022 + CVS date: 2003/01/22 19:21:23 + +commit de2448bccde0147dfa8cbbe8344691a7e0b118de +Author: jbj +Date: Wed Jan 22 12:28:41 2003 +0000 + + Exit non-zero with bogus args. + + CVS patchset: 6021 + CVS date: 2003/01/22 12:28:41 + +commit ff2846d708c5bc2d0068a84f4c280c28e92a1319 +Author: jbj +Date: Wed Jan 22 12:06:15 2003 +0000 + + Make robustly stand alone. + + CVS patchset: 6020 + CVS date: 2003/01/22 12:06:15 + +commit 2159f129703b200cf7aa81537a19d9148571b134 +Author: jbj +Date: Tue Jan 21 00:59:36 2003 +0000 + + fix: check arch for null before appending. + + CVS patchset: 6019 + CVS date: 2003/01/21 00:59:36 + +commit d6ea2fbf22bd4828bf30e2fd3248d2a191ce27d5 +Author: jbj +Date: Mon Jan 20 23:52:04 2003 +0000 + + Splint fiddles. + + CVS patchset: 6018 + CVS date: 2003/01/20 23:52:04 + +commit fc1b33b66f0502ad1d9ccf0e3a2112e7aeb8b478 +Author: jbj +Date: Mon Jan 20 16:12:12 2003 +0000 + + Restore compiler warnings now tthat elfutil's -Werror is not there. + + CVS patchset: 6017 + CVS date: 2003/01/20 16:12:12 + +commit f49f99df008b7909d5f7bf01702d70d7b7475a59 +Author: jbj +Date: Fri Jan 17 17:43:04 2003 +0000 + + - duplicate package checks with arch/os checks if colored. + - file conflict checks with colors. + + CVS patchset: 6013 + CVS date: 2003/01/17 17:43:04 + +commit e5c6b0d28d48fb35ff47c0c2d55021735ec7e88c +Author: jbj +Date: Thu Jan 16 16:59:47 2003 +0000 + + Update to latest. + + CVS patchset: 6012 + CVS date: 2003/01/16 16:59:47 + +commit 6169570ccb926c3c449d99d06753a03233fbb1e0 +Author: jbj +Date: Thu Jan 16 16:34:02 2003 +0000 + + Nitpicky fix. + + CVS patchset: 6011 + CVS date: 2003/01/16 16:34:02 + +commit e906131f952eff844d0b8c53b3152baef4475f8b +Author: jbj +Date: Tue Jan 14 22:08:35 2003 +0000 + + Link /usr/lib/rpm/rpmi statically. + + CVS patchset: 6010 + CVS date: 2003/01/14 22:08:35 + +commit b11f8eeaf21f31177d4be2cfd6ad277aec60310c +Author: jbj +Date: Mon Jan 13 20:58:21 2003 +0000 + + - teach rpmquery to return "owning" package(s) in spite of alternatives. + + CVS patchset: 6009 + CVS date: 2003/01/13 20:58:21 + +commit 52133f7a61c908af41dd0abef0a23db52cd25fd2 +Author: jbj +Date: Sun Jan 12 21:26:08 2003 +0000 + + typo. + + CVS patchset: 6008 + CVS date: 2003/01/12 21:26:08 + +commit d23480d85dea973d9a03b6e2d51b71410dbd7b0c +Author: jbj +Date: Sun Jan 12 21:23:49 2003 +0000 + + - file: *really* read elf64 notes correctly. + - python: restore thread context on errorCB (#80744). + + CVS patchset: 6007 + CVS date: 2003/01/12 21:23:49 + +commit 254626a18d8a54dfd3b09df5a1ed6027c9a83bf3 +Author: jbj +Date: Sun Jan 12 18:39:01 2003 +0000 + + Create. + + CVS patchset: 6006 + CVS date: 2003/01/12 18:39:01 + +commit 190a628644486b9c0ea6d3da44e808c21e72e3ac +Author: jbj +Date: Fri Jan 10 20:37:45 2003 +0000 + + Sanity. + + CVS patchset: 6005 + CVS date: 2003/01/10 20:37:45 + +commit b91db5522ba698a9b4743f3049adcae562b5d445 +Author: jbj +Date: Fri Jan 10 20:34:26 2003 +0000 + + - fix: obscure corner case(s) with rpmvercmp (#50977). + + CVS patchset: 6004 + CVS date: 2003/01/10 20:34:26 + +commit 24e18d4b3f38d7f7c2c4564b4026290fe7318e70 +Author: jbj +Date: Wed Jan 8 23:27:51 2003 +0000 + + Teach python subdirs lib64 too. + + CVS patchset: 6003 + CVS date: 2003/01/08 23:27:51 + +commit 0635d0ad62a786cb357ae43e602d77cbfb03f59c +Author: jbj +Date: Wed Jan 8 22:36:23 2003 +0000 + + Use $(shell ...) in Makefile.am, duh. + + CVS patchset: 6002 + CVS date: 2003/01/08 22:36:23 + +commit 050717618aade6df46f1302fd369ae96f9b9a48c +Author: jbj +Date: Wed Jan 8 21:37:01 2003 +0000 + + - python: put rpmmodule.so where python expects to find. + - add brp-strip-static-archive build root policy helper. + - add -lelf to rpm LDFLAGS, not LDADD, since there is no libelf.la now. + + CVS patchset: 6001 + CVS date: 2003/01/08 21:37:01 + +commit a6b27ed8a2510f3b5fdd4fc5c4322c60ac73b621 +Author: jbj +Date: Tue Jan 7 23:13:52 2003 +0000 + + - file: read elf64 notes correctly. + + CVS patchset: 6000 + CVS date: 2003/01/07 23:13:52 + +commit a585d154ac9b9b8d19bf28b2de56e98276ed990e +Author: jbj +Date: Tue Jan 7 00:49:55 2003 +0000 + + - add perldeps.pl, start to replace perl.{prov,req}. + + CVS patchset: 5999 + CVS date: 2003/01/07 00:49:55 + +commit b4ca0ec8b20851e331578b7191d8562e3f0de17f +Author: jbj +Date: Mon Jan 6 23:55:44 2003 +0000 + + - for DSO's, provide the file basename if DT_SONAME not found. + + CVS patchset: 5998 + CVS date: 2003/01/06 23:55:44 + +commit c4e0fdbf2120af5017e0c2c08ecdfa943e7c330d +Author: jbj +Date: Mon Jan 6 19:47:33 2003 +0000 + + - portabilitly: solaris fixes. + + CVS patchset: 5997 + CVS date: 2003/01/06 19:47:33 + +commit 92676fe33232f6cac4847a6943f31bc303a54d26 +Author: jbj +Date: Sun Jan 5 19:30:54 2003 +0000 + + - file: avoid ogg/vorbis file classification problems. + + CVS patchset: 5996 + CVS date: 2003/01/05 19:30:54 + +commit 0fef0de4041cab4b97979c15d9da5ed445e8f53e +Author: jbj +Date: Fri Jan 3 21:30:33 2003 +0000 + + fix: inverted logic in RPMPROB_FILTER_REPLACENEWFILES filtering. + + CVS patchset: 5995 + CVS date: 2003/01/03 21:30:33 + +commit ed806144245212853f1bd030981d967bfe77630e +Author: jbj +Date: Wed Jan 1 20:33:21 2003 +0000 + + - fix: dependency helpers now rate limited at 10ms, not 1s. + - add per-arch canonical color, only x86_64 enabled for now. + + CVS patchset: 5994 + CVS date: 2003/01/01 20:33:21 + +commit eb93e7599587e462128dc3217e95adf3f1cd361c +Author: jbj +Date: Wed Jan 1 17:32:51 2003 +0000 + + Update CHANGES. + + CVS patchset: 5993 + CVS date: 2003/01/01 17:32:51 + +commit 49d9daa8d715550c1ed6c803d85cf5b273e06508 +Author: jbj +Date: Wed Jan 1 17:26:46 2003 +0000 + + fix: file dependency dictionary has size other than #files. + + CVS patchset: 5992 + CVS date: 2003/01/01 17:26:46 + +commit 2ca7f5f3b779418788d08da42f43d157e0d3786e +Author: jbj +Date: Wed Jan 1 16:54:04 2003 +0000 + + fix: restore upgrade functionality with colors. + + CVS patchset: 5991 + CVS date: 2003/01/01 16:54:04 + +commit 86f5190567b804dc82398802ca10a55322288df9 +Author: jbj +Date: Tue Dec 31 02:12:02 2002 +0000 + + Dump multilib code, colored depndencies instead. + + CVS patchset: 5990 + CVS date: 2002/12/31 02:12:02 + +commit 39cbc98d696209913e83cd2ddc5dd48fad8da687 +Author: jbj +Date: Tue Dec 31 01:23:03 2002 +0000 + + 1st crack at colored installs. + + CVS patchset: 5989 + CVS date: 2002/12/31 01:23:03 + +commit be48ddd9e2f81fa2a3d224d1d7de0c532abf6c9d +Author: jbj +Date: Mon Dec 30 14:50:33 2002 +0000 + + - fix: typo in assertion. + + CVS patchset: 5988 + CVS date: 2002/12/30 14:50:33 + +commit 24e9464d2e30b02b4178198947b45fb45c165cbb +Author: jbj +Date: Mon Dec 30 02:37:01 2002 +0000 + + - use rpmfiFDepends() underneath --fileprovide and --filerequire. + - python: add fi.FColor() and fi.FClass() methods. + - calculate dependency color and refernces. + - python: add ds.Color() and ds.Refs() methods. + + CVS patchset: 5987 + CVS date: 2002/12/30 02:37:01 + +commit 1b8508adc27371a944e730c218364eea110f8d9f +Author: jbj +Date: Mon Dec 30 00:03:53 2002 +0000 + + - use rpmfiFDepends() underneath --fileprovide/--filerequire. + + CVS patchset: 5986 + CVS date: 2002/12/30 00:03:53 + +commit cb4b0b8ce12baa3ec035f91e4bd5ad4c0cfa1886 +Author: jbj +Date: Sun Dec 29 22:31:00 2002 +0000 + + - fix :armor query extension, tgpg mktmp handling (#80684). + - use rpmfiClass underneath --fileclass. + + CVS patchset: 5985 + CVS date: 2002/12/29 22:31:00 + +commit c67befa2833503c8864ec906a07ad8b4b617947c +Author: jbj +Date: Sun Dec 29 19:44:18 2002 +0000 + + splint fiddles. + + CVS patchset: 5984 + CVS date: 2002/12/29 19:44:18 + +commit 98fc9d533c9d5698c558a54d47d7087bb8f25a96 +Author: jbj +Date: Sun Dec 29 19:28:30 2002 +0000 + + - python: eliminate hash.[ch] and upgrade.[ch], methods too. + + CVS patchset: 5983 + CVS date: 2002/12/29 19:28:30 + +commit e4cac6608a15d6fa9e1ee7895ba86efc9f2e9922 +Author: jbj +Date: Sun Dec 29 18:19:19 2002 +0000 + + - don't segfault with packages produced by rpm-2.93 (#80618). + + CVS patchset: 5982 + CVS date: 2002/12/29 18:19:19 + +commit 817a6d983661b3d0ade1159238ea774f93cb7806 +Author: jbj +Date: Sun Dec 29 01:06:58 2002 +0000 + + - add rpmfi methods to access color, class, and dependencies. + + CVS patchset: 5981 + CVS date: 2002/12/29 01:06:58 + +commit d7a0ee2ca85c99ee49cd2110c027e0f09ef1795e +Author: jbj +Date: Sat Dec 28 23:17:06 2002 +0000 + + splint fiddles. + + CVS patchset: 5980 + CVS date: 2002/12/28 23:17:06 + +commit e65f6df21678082a8adc74d6eb30933fcaa70687 +Author: jbj +Date: Sat Dec 28 19:31:21 2002 +0000 + + - error if querying with iterator on different sized arrays. + + CVS patchset: 5979 + CVS date: 2002/12/28 19:31:21 + +commit 2119e50b90f0b5f145778e5325188d1d4487378a +Author: jbj +Date: Sat Dec 28 00:24:14 2002 +0000 + + - fix builddir relative inclusion, add %%pubkeys to rpm header. + - fix: package relocations were broken (#75057). + + CVS patchset: 5978 + CVS date: 2002/12/28 00:24:14 + +commit 5e61b7cae81967b9bcc0700755336e5e42207b5e +Author: jbj +Date: Fri Dec 27 19:42:22 2002 +0000 + + - ignore ENOENT return from db->close (#80514,#79314). + + CVS patchset: 5977 + CVS date: 2002/12/27 19:42:22 + +commit c7975dbe480f9bb3d68e1075ba5fa967db8e3455 +Author: jbj +Date: Fri Dec 27 18:01:00 2002 +0000 + + - disable perl module magic rule. + + CVS patchset: 5976 + CVS date: 2002/12/27 18:01:00 + +commit cad1c310aac361cb8f07ffaa77e8ce8a5d6dda98 +Author: jbj +Date: Fri Dec 27 16:12:09 2002 +0000 + + - add BETA-GPG-KEY (but not in headers using %%pubkey yet). + + CVS patchset: 5975 + CVS date: 2002/12/27 16:12:09 + +commit be9a1f9007cbeb6955004c8309d1b9ebfb35d09a +Author: jbj +Date: Thu Dec 26 23:19:17 2002 +0000 + + Don't fire helper for executable requires. + + CVS patchset: 5974 + CVS date: 2002/12/26 23:19:17 + +commit 1aa83a98fc49f0a4dc272f12d33f425b632b52dd +Author: jbj +Date: Thu Dec 26 20:38:26 2002 +0000 + + - resurrect automagic perl(foo) dependency generation. + + CVS patchset: 5973 + CVS date: 2002/12/26 20:38:26 + +commit 3300e2810e0f86dd54b87fc9a46f9672a478b87f +Author: jbj +Date: Thu Dec 26 17:18:01 2002 +0000 + + Initialize differently if using rpc access. + + CVS patchset: 5972 + CVS date: 2002/12/26 17:18:01 + +commit ef982508f3e64b89be674038dc64c8300e670450 +Author: jbj +Date: Tue Dec 24 20:37:39 2002 +0000 + + - add Red Hat pubkeys to rpm header. + + CVS patchset: 5971 + CVS date: 2002/12/24 20:37:39 + +commit 60b4c2293fc0840258fc7a785c71784b05017479 +Author: jbj +Date: Tue Dec 24 20:06:33 2002 +0000 + + - permit both relative/absolute paths, display 'P' when verifying. + + CVS patchset: 5970 + CVS date: 2002/12/24 20:06:33 + +commit 6b0679df90d7c90aea308c2e5328aed401176790 +Author: jbj +Date: Tue Dec 24 19:49:06 2002 +0000 + + - add %%pubkey attribute to read armored pubkey files into header. + + CVS patchset: 5969 + CVS date: 2002/12/24 19:49:06 + +commit 268376a208ce942e92088315d383a4e09974cbc2 +Author: jbj +Date: Tue Dec 24 17:06:35 2002 +0000 + + Rescusitate doxygen file manifest. + + CVS patchset: 5968 + CVS date: 2002/12/24 17:06:35 + +commit fec28fa0043b8071e0fa2cadd465eeb0c1cdbb81 +Author: jbj +Date: Tue Dec 24 07:38:02 2002 +0000 + + Keep message to 1 line. + + CVS patchset: 5967 + CVS date: 2002/12/24 07:38:02 + +commit e2c12fef0a6e599db54427aab03ecac7a01a1e37 +Author: jbj +Date: Tue Dec 24 07:33:26 2002 +0000 + + Check for unshared posix mutexes only on 1st open. + + CVS patchset: 5966 + CVS date: 2002/12/24 07:33:26 + +commit e5b828ce71266fc0bf667769e68b32425f31f1af +Author: jbj +Date: Tue Dec 24 07:28:01 2002 +0000 + + Ignore rpmdeps executable. + + CVS patchset: 5965 + CVS date: 2002/12/24 07:28:01 + +commit bf9543cf81121ebe4a22fe52bb28ae4e412428d2 +Author: jbj +Date: Tue Dec 24 07:27:23 2002 +0000 + + Remove unused Flags. + + CVS patchset: 5964 + CVS date: 2002/12/24 07:27:23 + +commit e788b7c1f347e1cf42109590247ba03f3ab50229 +Author: jbj +Date: Tue Dec 24 07:21:04 2002 +0000 + + - fix: remove rpmfi scareMem so that headers can be reloaded on ia64. + - fix: set DB_PRIVATE, not DB_ENV_PRIVATE, if unshared posix mutexes. + - remove useless kernel/glibc dependencies (#79872). + - add matching "config(N) = EVR" dependencies iff %%config is found. + + CVS patchset: 5963 + CVS date: 2002/12/24 07:21:04 + +commit b7129ca89835ca7819b104f38d18970004fb0064 +Author: jbj +Date: Tue Dec 24 04:04:20 2002 +0000 + + splint fiddles. + + CVS patchset: 5962 + CVS date: 2002/12/24 04:04:20 + +commit 415b3e6ff241d1c7120ee12ddb28bb1ad25c2e0d +Author: jbj +Date: Tue Dec 24 02:41:45 2002 +0000 + + fix: ia64 segfault on build. + + CVS patchset: 5961 + CVS date: 2002/12/24 02:41:45 + +commit e3c423226eb5dcf13d3ae5ffb5abb11900f061fb +Author: jbj +Date: Mon Dec 23 20:58:36 2002 +0000 + + Sanity. + + CVS patchset: 5960 + CVS date: 2002/12/23 20:58:36 + +commit 34fd5ec8108c44927486b303622daa2d8af76e94 +Author: jbj +Date: Sun Dec 22 02:23:38 2002 +0000 + + Typos. + + CVS patchset: 5959 + CVS date: 2002/12/22 02:23:38 + +commit b63b4a5d122e8dfb631c8fa75a9a7a92708080ec +Author: jbj +Date: Sun Dec 22 02:11:05 2002 +0000 + + - simplify specfile query linkage loop. + - drill rpmts into parseSpec(), carrying Spec along. + + CVS patchset: 5958 + CVS date: 2002/12/22 02:11:05 + +commit 1f6cdca2d549e02f3e65afa27b80cb852e283cd2 +Author: jbj +Date: Sat Dec 21 20:37:37 2002 +0000 + + - add --enable-posixmutexes when configuring on linux. + - add rpmdb_{deadlock,dump,load,svc,stat,verify} utilities. + - include srpm pkgid in binary headers (#71460). + - add %check scriptlet to run after %install (#64137). + + CVS patchset: 5957 + CVS date: 2002/12/21 20:37:37 + +commit b2402702ae91a73f7e4a4787b6a170357e219533 +Author: jbj +Date: Sat Dec 21 01:31:24 2002 +0000 + + splint fiddles. + + CVS patchset: 5956 + CVS date: 2002/12/21 01:31:24 + +commit ec22ac6d3cbfac0130049c816023b9766095353e +Author: jbj +Date: Sat Dec 21 01:05:44 2002 +0000 + + Sanity. + + CVS patchset: 5955 + CVS date: 2002/12/21 01:05:44 + +commit e0a6204a4804ffc8bf1c4dd4165cf2c55838b0cf +Author: jbj +Date: Fri Dec 20 18:36:23 2002 +0000 + + - copy compressFilelist to convertdb1.c, remove internal legacy.h. + + CVS patchset: 5954 + CVS date: 2002/12/20 18:36:23 + +commit ec1cec87636c8c3b29b103ca034f445af83e4154 +Author: jbj +Date: Fri Dec 20 18:25:59 2002 +0000 + + - error on exclusive Packages fcntl lock if DB_ENV_PRIVATE is set. + + CVS patchset: 5953 + CVS date: 2002/12/20 18:25:59 + +commit 1a49f5b1acf5a257631ae9e52519d71285b2239b +Author: jbj +Date: Fri Dec 20 16:09:15 2002 +0000 + + - test pthread_{mutex,cond}attr_setpshared(), add DB_ENV_PRIVATE if not. + + CVS patchset: 5952 + CVS date: 2002/12/20 16:09:15 + +commit c346c3e69f15104de5b653b8d1657731bc6edc6c +Author: jbj +Date: Fri Dec 20 15:03:18 2002 +0000 + + - dynamically link /bin/rpm, link against good old -lpthread. + + CVS patchset: 5951 + CVS date: 2002/12/20 15:03:18 + +commit e7f55c20f5c7ae0eac290dd7f9d3a948e1f6ab26 +Author: jbj +Date: Thu Dec 19 23:41:52 2002 +0000 + + - add -I/usr/include/nptl, Conflicts: kernel <= 2.4.19. + + CVS patchset: 5950 + CVS date: 2002/12/19 23:41:52 + +commit e7615329e96a64022f37885a0695ee9026c9d161 +Author: jbj +Date: Wed Dec 18 23:00:31 2002 +0000 + + Sanity. + + CVS patchset: 5949 + CVS date: 2002/12/18 23:00:31 + +commit d2ee89c989f13c7c4cf725c063e428f553789744 +Author: jbj +Date: Wed Dec 18 22:59:03 2002 +0000 + + Correct typo. + + CVS patchset: 5948 + CVS date: 2002/12/18 22:59:03 + +commit b3bc3cb19d15acc86df9400dc5e77adf8f6f1dd5 +Author: jbj +Date: Wed Dec 18 22:54:00 2002 +0000 + + - add --file{class,provide,require} popt aliases and header extensions + + CVS patchset: 5947 + CVS date: 2002/12/18 22:54:00 + +commit c10d7179bbead171e67e924538ad0f6751c8e961 +Author: jbj +Date: Wed Dec 18 16:18:33 2002 +0000 + + - popt aliases for -U et al to achieve dynamic link with nptl. + + CVS patchset: 5946 + CVS date: 2002/12/18 16:18:33 + +commit ad8350c14945a91b8d6b054cb1d6b458460e3525 +Author: sopwith +Date: Wed Dec 18 01:46:25 2002 +0000 + + Add --dwim + + CVS patchset: 5945 + CVS date: 2002/12/18 01:46:25 + +commit d69ad2f4fa325d0231360923adfdb60bfb22c0e0 +Author: jbj +Date: Tue Dec 17 19:22:15 2002 +0000 + + - rebuild against glibc with fcntl fixed in libpthread. + - re-enable CDB locking, removing "private" from %%__dbi_cdb macro. + + CVS patchset: 5944 + CVS date: 2002/12/17 19:22:15 + +commit 1552eaba2eea4943e2234ffc1026ff08c18d8725 +Author: jbj +Date: Sun Dec 15 18:30:44 2002 +0000 + + - disable fcntl(2) lock on Packages until glibc+nptl is fixed. + - make cdb locks "private" for pthreads compatibility w/o NPTL. + - add --enable-posixmutexes to use NPTL. + - make dependency generation "opt-out" everywhere. + + CVS patchset: 5943 + CVS date: 2002/12/15 18:30:44 + +commit becf1f7abaaf5304384490f8ef256f744f0c8dfc +Author: jbj +Date: Sat Dec 14 22:03:14 2002 +0000 + + - generate Elf provides even if file is not executable. + + CVS patchset: 5942 + CVS date: 2002/12/14 22:03:14 + +commit 96f4a259b507751db2d51b43978ba7b69a149c3a +Author: jbj +Date: Sat Dec 14 21:39:19 2002 +0000 + + - fix: make sure each library has DT_NEEDED for all unresolved syms. + + CVS patchset: 5941 + CVS date: 2002/12/14 21:39:19 + +commit 23a39efab69f2b60624a7c112ba7eb1a939afff1 +Author: jbj +Date: Fri Dec 13 23:34:40 2002 +0000 + + - debug_packages "works", but non-noarch w/o %setup has empty payload. + - make dependency generation "opt-in" in order to build in distro. + - rebuild rpm with internal dependency generation enabled. + + CVS patchset: 5940 + CVS date: 2002/12/13 23:34:40 + +commit 06ace585a76d86c41f5d9efa0069aadc76bc0795 +Author: jbj +Date: Fri Dec 13 20:50:14 2002 +0000 + + Bail on rpmfts_repr() for now. + + CVS patchset: 5939 + CVS date: 2002/12/13 20:50:14 + +commit 04a04dc62e6f2f94c0f88d2552db7e075d652ed1 +Author: jbj +Date: Thu Dec 12 19:21:50 2002 +0000 + + - fix: add %%ifnarch noarch to debug_package macro + + CVS patchset: 5938 + CVS date: 2002/12/12 19:21:50 + +commit d5a81771b690eca36a7b4efde27ef874204452c9 +Author: jbj +Date: Thu Dec 12 19:16:45 2002 +0000 + + - fix: add rpmlib(VersionedDependencies) if versioned Provides: found. + + CVS patchset: 5937 + CVS date: 2002/12/12 19:16:45 + +commit 8681309f1a19ebe597464aa3d1304bef06d3790e +Author: jbj +Date: Thu Dec 12 17:46:22 2002 +0000 + + Add + PyObject *md_dict; /*!< to look like PyModuleObject */ + to all rpmfoo_Type's. + + CVS patchset: 5936 + CVS date: 2002/12/12 17:46:22 + +commit 78ddb8c8761d21ad59f99404c1f077c1434e943a +Author: jbj +Date: Wed Dec 11 15:06:17 2002 +0000 + + Sanity. + + CVS patchset: 5935 + CVS date: 2002/12/11 15:06:17 + +commit fb0d3c9741a83bc8267eeccd4a2e490f4129e38c +Author: jbj +Date: Wed Dec 11 14:24:46 2002 +0000 + + - rebuild against glibc with TLS support. + + CVS patchset: 5934 + CVS date: 2002/12/11 14:24:46 + +commit 513fc078defe9b5893236002c9966e3cc7043ef1 +Author: jbj +Date: Wed Dec 11 03:16:24 2002 +0000 + + Add iterators to rpmfts-py.c. + splint fiddles. + + CVS patchset: 5933 + CVS date: 2002/12/11 03:16:24 + +commit 2452c14619fd14c1b7eba69eec0c7d32dbf56d86 +Author: jbj +Date: Wed Dec 11 00:12:17 2002 +0000 + + Add rpmfts-py.[ch] bindings for fts(3) from rpmio. + splint fiddles. + + CVS patchset: 5932 + CVS date: 2002/12/11 00:12:17 + +commit fe6043016c84107132bd0dc80ef454d2c81342b7 +Author: jbj +Date: Tue Dec 10 19:46:03 2002 +0000 + + Add tp_{init,alloc,new,free} methods to rpmts. + Use PyObject_{New,Del} consistently throughout. + + CVS patchset: 5931 + CVS date: 2002/12/10 19:46:03 + +commit d412f8be53602c3a06d3b7b05a2fdae1af8a2b01 +Author: jbj +Date: Tue Dec 10 16:35:29 2002 +0000 + + Sanity. + + CVS patchset: 5930 + CVS date: 2002/12/10 16:35:29 + +commit c663b52bda675da4156476aa6154b439d89d6d13 +Author: jbj +Date: Tue Dec 10 16:32:27 2002 +0000 + + Repair fc->skipReq insertion typo. + + CVS patchset: 5929 + CVS date: 2002/12/10 16:32:27 + +commit c6dcee8ac6daa501de3ce727758d50b0807d868c +Author: jbj +Date: Tue Dec 10 16:31:39 2002 +0000 + + Add coercions. + + CVS patchset: 5928 + CVS date: 2002/12/10 16:31:39 + +commit 76cf50aa5bc111fc23b2c4fa4702c915126a9f61 +Author: jbj +Date: Mon Dec 9 17:59:03 2002 +0000 + + Include rpmbc-py.h too. + + CVS patchset: 5927 + CVS date: 2002/12/09 17:59:03 + +commit 971303be3e56cd9123c2a4d0b8897052ad2a6658 +Author: jbj +Date: Mon Dec 9 17:22:55 2002 +0000 + + - don't generate dependencies unless execute bit is set. + - enable internal automagic dependency generation as default. + + CVS patchset: 5926 + CVS date: 2002/12/09 17:22:55 + +commit 1b650d04abfc1fc38ffb08121752b235ad8a4bd8 +Author: jbj +Date: Sun Dec 8 21:50:36 2002 +0000 + + Implement divide and divmod methods. + + CVS patchset: 5925 + CVS date: 2002/12/08 21:50:36 + +commit 0b6941dbb41bce6392086c73799afc9433fcaa2b +Author: jbj +Date: Sun Dec 8 20:57:34 2002 +0000 + + Add Debug method, implement obvious functions. + + CVS patchset: 5924 + CVS date: 2002/12/08 20:57:34 + +commit 9e279581d8d0f513e07bb275972ed9cec3dc897c +Author: jbj +Date: Sun Dec 8 19:04:54 2002 +0000 + + Stubs for beecrypt bindings. + + CVS patchset: 5923 + CVS date: 2002/12/08 19:04:54 + +commit 3d1f33d2706b276ce82ecdef36eacf69343389e6 +Author: jbj +Date: Sat Dec 7 22:45:11 2002 +0000 + + Sanity. + + CVS patchset: 5922 + CVS date: 2002/12/07 22:45:11 + +commit 9e737c3f6d48a94140f64bcb8b108c6f98709005 +Author: jbj +Date: Sat Dec 7 22:29:21 2002 +0000 + + Insturment auto request/provide disabling. + + CVS patchset: 5921 + CVS date: 2002/12/07 22:29:21 + +commit bb2c78fdba1cc6ea151936c5547e8cee92d02169 +Author: jbj +Date: Sat Dec 7 21:27:09 2002 +0000 + + Splint fiddles. + + CVS patchset: 5920 + CVS date: 2002/12/07 21:27:09 + +commit 92dee513d21e94a3aa7ee455d12cffed82db2ff2 +Author: jbj +Date: Sat Dec 7 19:00:57 2002 +0000 + + Finish converting to .splintrc. + + CVS patchset: 5919 + CVS date: 2002/12/07 19:00:57 + +commit 704ad49b02dbe1fbb7fc2189900f26d5a0b15c3e +Author: jbj +Date: Sat Dec 7 05:48:45 2002 +0000 + + Handle (N,EVR,Flags) Provide:/Require: triple. + + CVS patchset: 5918 + CVS date: 2002/12/07 05:48:45 + +commit 95cbf4bfe8bc6a9abcbb19e1034bb65c891b4dd1 +Author: sopwith +Date: Fri Dec 6 02:09:57 2002 +0000 + + part two + + CVS patchset: 5917 + CVS date: 2002/12/06 02:09:57 + +commit cf6060f773898d579fb3443133e10cafcf57940e +Author: sopwith +Date: Fri Dec 6 02:04:31 2002 +0000 + + Better detection of ppc64 et al + + CVS patchset: 5916 + CVS date: 2002/12/06 02:04:31 + +commit a2e69e76226fd29b6aeacc982b7acd62843e48ae +Author: jbj +Date: Wed Dec 4 02:01:47 2002 +0000 + + python: gilding lilies. + + CVS patchset: 5915 + CVS date: 2002/12/04 02:01:47 + +commit 0717d19bb11f312bfeba9a43651a72581dcd6a21 +Author: jbj +Date: Tue Dec 3 21:00:38 2002 +0000 + + Add new rpmte methods. + + CVS patchset: 5914 + CVS date: 2002/12/03 21:00:38 + +commit c96202ddef5c4ffcc3da81e1915b84e8f2a6102c +Author: jbj +Date: Tue Dec 3 02:57:02 2002 +0000 + + - internal automagic dependency generation (disabled for now). + + CVS patchset: 5913 + CVS date: 2002/12/03 02:57:02 + +commit c84e1589b098a29804a3c75c58c576aea305c06b +Author: jbj +Date: Mon Dec 2 15:04:16 2002 +0000 + + - late rpmts reference causes premature free (#78862). + + CVS patchset: 5912 + CVS date: 2002/12/02 15:04:16 + +commit 80b23366e79f229831efb6a590c90e2724d37927 +Author: jbj +Date: Sun Dec 1 21:34:06 2002 +0000 + + - use usrlib_LTLIBRARIES to install directly in /usr/lib64 instead. + + CVS patchset: 5911 + CVS date: 2002/12/01 21:34:06 + +commit 0efbbada0f3005d6f81a940ba7b06aef2703a50b +Author: jbj +Date: Sun Dec 1 18:03:22 2002 +0000 + + - link rpm libraries together, use shared helpers with external -lelf. + - move libfmagic to librpmio. + - use libtool-1.4.3, autoconf-2.56. + - add explicit -L/lib64 -L/usr/lib64 for libtool mode=relink on x86_64. + + CVS patchset: 5910 + CVS date: 2002/12/01 18:03:22 + +commit 5dfaaf855c2ee3164deacc7d720ec3c759bed8eb +Author: jbj +Date: Sat Nov 30 22:49:10 2002 +0000 + + Link rpmcache/rpmgraph statically for now. + + CVS patchset: 5909 + CVS date: 2002/11/30 22:49:10 + +commit 760d3a0c8b9c70b0fac0e6af49e683c9bf289d7e +Author: jbj +Date: Sat Nov 30 22:15:29 2002 +0000 + + More splint fiddles. + + CVS patchset: 5908 + CVS date: 2002/11/30 22:15:29 + +commit bd00220d417766369bb3e14193bbe7c2876a53e4 +Author: jbj +Date: Sat Nov 30 21:42:24 2002 +0000 + + Splint fiddles. + + CVS patchset: 5907 + CVS date: 2002/11/30 21:42:24 + +commit 0046c56cf8dc3503bc6f93d7bfde34cb8a9ac5c2 +Author: jbj +Date: Sat Nov 30 21:07:08 2002 +0000 + + - upgrade to elfutils-0.63. + + CVS patchset: 5906 + CVS date: 2002/11/30 21:07:08 + +commit b3c62fe13637ae987830f3a696e43b24c6caa55a +Author: jbj +Date: Sat Nov 30 19:23:16 2002 +0000 + + Orphans. + + CVS patchset: 5905 + CVS date: 2002/11/30 19:23:16 + +commit e50b4bc9cff8e8699e1e882570fd2c9e8879b2b6 +Author: jbj +Date: Sat Nov 30 19:10:05 2002 +0000 + + Conflicts. + + CVS patchset: 5904 + CVS date: 2002/11/30 19:10:05 + +commit 9b838f86043783a5b17b2a54a066fda56af5f9f3 +Author: jbj +Date: Sat Nov 30 18:41:53 2002 +0000 + + Initial revision + + CVS patchset: 5903 + CVS date: 2002/11/30 18:41:53 + +commit fc990ef48b29b1b5995d9fe5ef229bb223ad5095 +Author: jbj +Date: Fri Nov 29 21:35:53 2002 +0000 + + - build with external elfutils (preferred), if available. + + CVS patchset: 5900 + CVS date: 2002/11/29 21:35:53 + +commit a972f919a69bafb970237b102048699cfa81b3f9 +Author: jbj +Date: Wed Nov 27 01:28:55 2002 +0000 + + - apply patches 7 and 8 to db-4.1.24. + - upgrade to elfutils-0.59. + - add -g to all platforms optflags. + + CVS patchset: 5899 + CVS date: 2002/11/27 01:28:55 + +commit 2d8de3930b869b574fa236241040f0950c7cb55b +Author: jbj +Date: Wed Nov 27 01:10:45 2002 +0000 + + Resurrect configure and Makefile.in. + + CVS patchset: 5898 + CVS date: 2002/11/27 01:10:45 + +commit 35da88d5bbb143cd8f7878938fc186ad2ca0c94d +Author: jbj +Date: Wed Nov 27 01:01:37 2002 +0000 + + OSI license. + + CVS patchset: 5897 + CVS date: 2002/11/27 01:01:37 + +commit cbcc6b8b7478d1cee9d1192e64a3fbb840da77c6 +Author: jbj +Date: Wed Nov 27 01:01:23 2002 +0000 + + Sanity. + + CVS patchset: 5896 + CVS date: 2002/11/27 01:01:23 + +commit aadf64db75a2fe24ec67097ceff25638e5372eef +Author: jbj +Date: Wed Nov 27 00:21:10 2002 +0000 + + OSI license. + + CVS patchset: 5895 + CVS date: 2002/11/27 00:21:10 + +commit 33d47ca99a4f1f23a215a053f8b55bcdd670ab74 +Author: jbj +Date: Tue Nov 26 23:04:08 2002 +0000 + + Don't bother with Makefile.in. + + CVS patchset: 5894 + CVS date: 2002/11/26 23:04:08 + +commit b7696c27a7a0e35fcbd92d5dcb60df636f8c8548 +Author: jbj +Date: Tue Nov 26 23:02:51 2002 +0000 + + Don't bother with configure. + + CVS patchset: 5893 + CVS date: 2002/11/26 23:02:51 + +commit e1450d788f2f23c33c92016f511c73e2daa10245 +Author: jbj +Date: Tue Nov 26 23:00:35 2002 +0000 + + Orphans. + + CVS patchset: 5892 + CVS date: 2002/11/26 23:00:35 + +commit 211e40766a5de1be22a7d7e5325a1dc1fc97c9a0 +Author: jbj +Date: Tue Nov 26 22:57:29 2002 +0000 + + Conflicts. + + CVS patchset: 5891 + CVS date: 2002/11/26 22:57:29 + +commit 40e35cdce684eff593bd07fa5c44aac1497a1f36 +Author: jbj +Date: Tue Nov 26 22:54:36 2002 +0000 + + Conflicts. + + CVS patchset: 5890 + CVS date: 2002/11/26 22:54:36 + +commit c366b1cc14596b771a5d722c3fea9cec61f62f47 +Author: jbj +Date: Tue Nov 26 22:53:44 2002 +0000 + + Initial revision + + CVS patchset: 5889 + CVS date: 2002/11/26 22:53:44 + +commit 8ec359ea45cb587db1bedcbaf296e3a59031b9d1 +Author: jbj +Date: Tue Nov 26 22:53:11 2002 +0000 + + Conflicts. + + CVS patchset: 5887 + CVS date: 2002/11/26 22:53:11 + +commit 83b2da2fa8be42498c210fa0ba46da15f6802b88 +Author: jbj +Date: Tue Nov 26 22:47:41 2002 +0000 + + 7.Fix a bug which kept the Berkeley DB XML release from building with the + Berkeley DB 4.1.24 release. This bug only affects builds of the Berkeley + DB XML release. + 8.Fix a bug which causes Berkeley DB to checkpoint quiescent database + environments. + + CVS patchset: 5883 + CVS date: 2002/11/26 22:47:41 + +commit eb8d9ee37b8b285292baa8c0eca88d802891e295 +Author: jbj +Date: Tue Nov 26 22:45:05 2002 +0000 + + Orphan. + + CVS patchset: 5882 + CVS date: 2002/11/26 22:45:05 + +commit cd993acac7d1791130b399add1c236f6d2bb91e0 +Author: jbj +Date: Tue Nov 26 22:44:47 2002 +0000 + + - bundle libfmagic into librpmbuild for now. + + CVS patchset: 5881 + CVS date: 2002/11/26 22:44:47 + +commit a496b09106a0ba21cb5f5a24257879cc8fad201e +Author: jbj +Date: Tue Nov 26 22:34:21 2002 +0000 + + Use glibc __progname convention (with retrofit) throughout. + + CVS patchset: 5880 + CVS date: 2002/11/26 22:34:21 + +commit 5b5c816a467e5826292e705893a8b3b15b7c23e3 +Author: sopwith +Date: Fri Nov 22 15:10:28 2002 +0000 + + Add ppc64 + + CVS patchset: 5879 + CVS date: 2002/11/22 15:10:28 + +commit 1b1882800cce7f271bebdb6d62a8b3f9c99baf26 +Author: sopwith +Date: Fri Nov 22 14:58:21 2002 +0000 + + Handle python disablement better by always passing --with-python/--without-python + as appropriate. + + CVS patchset: 5878 + CVS date: 2002/11/22 14:58:21 + +commit 5d5c6b8f1ccf4fe46c6e4549f0fb3f30a2f79dec +Author: jbj +Date: Wed Nov 20 15:13:03 2002 +0000 + + - use rpmdeps rather than find-{requires,provides}. + + CVS patchset: 5877 + CVS date: 2002/11/20 15:13:03 + +commit 22389abbd44af3376c4c86824a558eae412bc541 +Author: jbj +Date: Tue Nov 19 18:40:21 2002 +0000 + + - add AC_SYS_LARGFILE throughout. + - statically link rpmdeps against (internal) libfmagic. + + CVS patchset: 5876 + CVS date: 2002/11/19 18:40:21 + +commit 1c023424d7fb2de08293a5721e11ec4a909a04e2 +Author: jbj +Date: Tue Nov 19 15:07:08 2002 +0000 + + Correct doxygen-1.2.18 warnings. + + CVS patchset: 5875 + CVS date: 2002/11/19 15:07:08 + +commit 47ce5c04fbafb31c46e8c4e59893c389bd6b6f3d +Author: jbj +Date: Tue Nov 19 13:50:55 2002 +0000 + + MOre annotations. + + CVS patchset: 5874 + CVS date: 2002/11/19 13:50:55 + +commit 78890a935a25bd98f7b9ebd70e1da8cd044c63cf +Author: jbj +Date: Mon Nov 18 23:53:05 2002 +0000 + + Print to private buffer, not stdout. + Kill off ckfputs/ckfprintf. + + CVS patchset: 5873 + CVS date: 2002/11/18 23:53:05 + +commit a489262365e5b7b6af7ed1cbc191635a646d37ad +Author: jbj +Date: Sat Nov 16 15:06:17 2002 +0000 + + - fix: option conflict error message (#77373). + + CVS patchset: 5872 + CVS date: 2002/11/16 15:06:17 + +commit 362d1ae73fdfe76b07fba14a28b139048c8965e6 +Author: jbj +Date: Fri Nov 15 21:10:32 2002 +0000 + + - resurrect availablePackages one more time. + + CVS patchset: 5871 + CVS date: 2002/11/15 21:10:32 + +commit 2dc6fe0505c2f8a5cbef51a32732b6f97dbfc898 +Author: jbj +Date: Fri Nov 15 18:34:44 2002 +0000 + + Build -0.9. + + CVS patchset: 5870 + CVS date: 2002/11/15 18:34:44 + +commit fbd96006c48de87b8ae3194d10ffdf34bd3f9461 +Author: jbj +Date: Fri Nov 15 18:29:34 2002 +0000 + + Apply patch.4.1.24.6: + 6.Fix a bug where Berkeley DB could overwrite incorrectly formatted files rather than returning an error to the application during open. + + CVS patchset: 5869 + CVS date: 2002/11/15 18:29:34 + +commit 0288c9fcfa151f293ff96ffe601aa04e3cb28d33 +Author: jbj +Date: Fri Nov 15 18:28:43 2002 +0000 + + Apply patch.4.1.24.5: + 5.Fix a bug where Hash databases could be corrupted on filesystems that do not zero-fill implicitly created blocks. This patch only needs to + be applied for Berkeley DB applications running on such filesystems (for example, Windows/9X, QNX, VxWorks DosFS 1.0 and + unpatched DosFS 2.2). + + CVS patchset: 5868 + CVS date: 2002/11/15 18:28:43 + +commit 0b18a15516f26eaab58c1d53abe0b4039e02dd6b +Author: jbj +Date: Fri Nov 15 18:28:01 2002 +0000 + + Apply patch.4.1.24.4: + 4.Fix a bug where read-only databases were not mapped into memory but were instead read through the Berkeley DB buffer cache. + + CVS patchset: 5867 + CVS date: 2002/11/15 18:28:01 + +commit c0e27af8c5dc9d209854ca9170995622652fc30c +Author: jbj +Date: Fri Nov 15 18:27:07 2002 +0000 + + Apply patch.4.1.24.3: + 3.Fix a link error ("GetLongPathNameA could not be located in the dynamic link library KERNEL32.dll") that prevented the Berkeley DB + 4.1.24 release from loading on some Windows/NT systems. + + CVS patchset: 5866 + CVS date: 2002/11/15 18:27:07 + +commit d3805810d30fb0a900ad73eb9104368ca2222641 +Author: jbj +Date: Fri Nov 15 18:26:16 2002 +0000 + + Apply patch.4.1.24.2: + 2.Fix a bug where replicas could not remove log files because the checkpoint lsn was not being updated properly. + + CVS patchset: 5865 + CVS date: 2002/11/15 18:26:16 + +commit 94f365ca99d55f693e4a62437f71282cff08c60d +Author: jbj +Date: Fri Nov 15 18:25:24 2002 +0000 + + Apply patch.4.1.24.1: + 1.Fix a bug which could cause database environment open to hang. This bug only affects encrypted Berkeley DB database environments, + and the patch should only be applied to Berkeley DB releases including cryptographic support. + + CVS patchset: 5864 + CVS date: 2002/11/15 18:25:24 + +commit 5e12066479a49936f1a00a145c3262229a8cf8f0 +Author: jbj +Date: Fri Nov 15 18:01:47 2002 +0000 + + - update to elfutils-0.56. + - have debug sub-subpackage use external, not internal, elfutils. + + CVS patchset: 5863 + CVS date: 2002/11/15 18:01:47 + +commit 62d158f87b5fbae30a03c9594694b5fd52b3e21b +Author: sopwith +Date: Thu Nov 14 12:53:11 2002 +0000 + + Patch from #77849 + + CVS patchset: 5862 + CVS date: 2002/11/14 12:53:11 + +commit 15e18dcd5044086a4aee47a098ca6651b814f9b8 +Author: jbj +Date: Wed Nov 13 20:05:06 2002 +0000 + + Initial revision + + CVS patchset: 5856 + CVS date: 2002/11/13 20:05:06 + +commit d0c70393b66be44289d235f4e3320e37e247908a +Author: jbj +Date: Wed Nov 13 19:57:19 2002 +0000 + + Resolve conflicts. + + CVS patchset: 5855 + CVS date: 2002/11/13 19:57:19 + +commit 64b3c45688b005c01a0fe9b4e4edfa17addbc263 +Author: jbj +Date: Wed Nov 13 19:45:07 2002 +0000 + + Initial revision + + CVS patchset: 5853 + CVS date: 2002/11/13 19:45:07 + +commit 8e53ee685acc6d2868c82279c427a58ea9dc5428 +Author: jbj +Date: Wed Nov 13 18:18:33 2002 +0000 + + - fix: bash must have functional libtermcap.so.2. + + CVS patchset: 5850 + CVS date: 2002/11/13 18:18:33 + +commit 314d3fba1c40af3dc743f21ad3e85a5d5153e15b +Author: jbj +Date: Tue Nov 12 22:56:03 2002 +0000 + + more debugging. + + CVS patchset: 5849 + CVS date: 2002/11/12 22:56:03 + +commit e87e61d32e06a03bc6db1d2be8f546f1791eb892 +Author: jbj +Date: Tue Nov 12 21:55:50 2002 +0000 + + --rollback debugging (for now). + + CVS patchset: 5848 + CVS date: 2002/11/12 21:55:50 + +commit 937ba6c27ce37057fed550927e1f5c523475d33f +Author: jbj +Date: Tue Nov 12 20:09:04 2002 +0000 + + Elfutils fiddles fo fix striptofile. + + CVS patchset: 5847 + CVS date: 2002/11/12 20:09:04 + +commit 4b68a64e6b866f54fd5f396605dc9a5ca63979bb +Author: jbj +Date: Tue Nov 12 19:58:00 2002 +0000 + + Sanity. + + CVS patchset: 5846 + CVS date: 2002/11/12 19:58:00 + +commit fd2febe30909b1919e7e8c5d7c2b5f9d3eae1c1e +Author: jbj +Date: Sat Nov 9 19:25:13 2002 +0000 + + - add _javadir/_javadocdir/_javaclasspath macros. + + CVS patchset: 5845 + CVS date: 2002/11/09 19:25:13 + +commit 1d55aedd3f2f42b56fc2c1bb3880980f89181a89 +Author: jbj +Date: Fri Nov 8 22:48:30 2002 +0000 + + Ignore generated files. + + CVS patchset: 5844 + CVS date: 2002/11/08 22:48:30 + +commit 0f9652535c818cd92489dbce3c44e777507b68bd +Author: jbj +Date: Fri Nov 8 22:27:08 2002 +0000 + + Sanity. + + CVS patchset: 5843 + CVS date: 2002/11/08 22:27:08 + +commit a83d336131ac2f993aacf6625bd2ded4775335fb +Author: cturner +Date: Fri Nov 8 22:25:19 2002 +0000 + + little bit closer to working on x86_64; allow -lbz2 to be forced on Makefile.PL + + CVS patchset: 5842 + CVS date: 2002/11/08 22:25:19 + +commit 3a6513ab13dad27e26d5b05707c2e1cd8bd6884a +Author: jbj +Date: Fri Nov 8 22:23:36 2002 +0000 + + Regenerate libltdl autocrap. + + CVS patchset: 5841 + CVS date: 2002/11/08 22:23:36 + +commit b80cd0baa027dfc6a148e32ae918612e98b0aeb6 +Author: jbj +Date: Thu Nov 7 16:00:54 2002 +0000 + + Re-enable libcpu and libasm. + + CVS patchset: 5840 + CVS date: 2002/11/07 16:00:54 + +commit 8f9013cec58353997122b87df1931ddaf7fb1089 +Author: jbj +Date: Thu Nov 7 14:22:41 2002 +0000 + + Revert x86_64 hacks. + Update to latest config.{guess,sub}. + + CVS patchset: 5839 + CVS date: 2002/11/07 14:22:41 + +commit be3e76bc1dae0fe5a71502fd173b0ab07e343339 +Author: jbj +Date: Thu Nov 7 13:18:27 2002 +0000 + + Resolve conflicts. + + CVS patchset: 5837 + CVS date: 2002/11/07 13:18:27 + +commit 9f5183ea6490c7859ecfb281af1097adad43fb48 +Author: jbj +Date: Thu Nov 7 13:18:27 2002 +0000 + + Resolve conflicts. + + CVS patchset: 5836 + CVS date: 2002/11/07 13:18:27 + +commit d9fb627db673d01a4e3a483730fa60085df0c1d7 +Author: jbj +Date: Thu Nov 7 13:14:30 2002 +0000 + + Initial revision + + CVS patchset: 5834 + CVS date: 2002/11/07 13:14:30 + +commit 6f04ed9f48258141f87dfa5e32884328107578ad +Author: jbj +Date: Thu Nov 7 13:13:41 2002 +0000 + + Libdwarf annotations. + + CVS patchset: 5832 + CVS date: 2002/11/07 13:13:41 + +commit cce908ec4ae567a93cb54bd605ba8c7d08382249 +Author: jbj +Date: Wed Nov 6 16:46:54 2002 +0000 + + Upgrade to bsddb3 3.4.2, include db-4.1.17 fiddles. + + CVS patchset: 5829 + CVS date: 2002/11/06 16:46:54 + +commit 47b8b814681c26307b0599558634cadf96bcb5da +Author: jbj +Date: Tue Nov 5 23:08:19 2002 +0000 + + splint fiddles. + + CVS patchset: 5828 + CVS date: 2002/11/05 23:08:19 + +commit 75d27753a7d589afce7bc4b3109fce96c30a09f7 +Author: jbj +Date: Tue Nov 5 23:00:34 2002 +0000 + + Mostly tasteful/consistent splint annotations for libelf. + + CVS patchset: 5827 + CVS date: 2002/11/05 23:00:34 + +commit 10447b34d679a266a2e42e87776e4f41fcc936ba +Author: jbj +Date: Tue Nov 5 22:49:32 2002 +0000 + + Revert elf-knowledge.h hack. + + CVS patchset: 5826 + CVS date: 2002/11/05 22:49:32 + +commit 90d7f523997837adac14c77a9a61d405fcdf66e9 +Author: jbj +Date: Tue Nov 5 22:45:02 2002 +0000 + + Remove multilib patch. + splint fiddles. + + CVS patchset: 5825 + CVS date: 2002/11/05 22:45:02 + +commit e99358b753e1f8b12474e0b15097af79bf49cc8c +Author: jbj +Date: Sat Oct 26 14:43:43 2002 +0000 + + - fix: permit build with --disable-nls (#76258). + - add error message on glob failure (#76012). + + CVS patchset: 5821 + CVS date: 2002/10/26 14:43:43 + +commit 76cc00093491cab018afbdfe74cee7676159cd70 +Author: jbj +Date: Fri Oct 25 16:46:37 2002 +0000 + + Use internal elfutils, not libelf, includes. + + CVS patchset: 5819 + CVS date: 2002/10/25 16:46:37 + +commit 1cf7c12c53c65e1173e9ff4c48b5d9f74b8bb845 +Author: jbj +Date: Fri Oct 25 15:40:08 2002 +0000 + + - rpm.8: gpg uses GNUPGHOME, not GPGPATH (#76691). + + CVS patchset: 5818 + CVS date: 2002/10/25 15:40:08 + +commit d65517beca09a6049052f82c7e55c63530489acc +Author: jbj +Date: Fri Oct 25 14:46:49 2002 +0000 + + - fix: /dev/initctl has not MD5 segfault (#76718). + + CVS patchset: 5817 + CVS date: 2002/10/25 14:46:49 + +commit 6328dbbbf043ee08a7e5c1cbe880d03af60adca4 +Author: jbj +Date: Thu Oct 24 21:42:57 2002 +0000 + + Kill tfr.c, use rpmdeps. + + CVS patchset: 5816 + CVS date: 2002/10/24 21:42:57 + +commit 4cf0b35006a640b6d24284583aee283b0612121d +Author: jbj +Date: Thu Oct 24 21:41:24 2002 +0000 + + Build 4.2-0.5. + + CVS patchset: 5815 + CVS date: 2002/10/24 21:41:24 + +commit e2b28faace3abc3f1962e6c54fdb5f4af797ebf1 +Author: jbj +Date: Thu Oct 24 21:36:12 2002 +0000 + + - add /usr/lib/rpm/rpmdeps. + - add /usr/lib/rpm/magic. + + CVS patchset: 5814 + CVS date: 2002/10/24 21:36:12 + +commit dec92019981323fac040c4d73f553d9e6bd72dda +Author: jbj +Date: Thu Oct 24 18:33:09 2002 +0000 + + Add stupid "()(64bit" markings. + + CVS patchset: 5813 + CVS date: 2002/10/24 18:33:09 + +commit acc814a6674319927a49d97e35925635fb4c7baa +Author: jbj +Date: Wed Oct 23 20:41:57 2002 +0000 + + - elfutils: avoid gcc-3.2 ICE on x86_64 for now. + + CVS patchset: 5812 + CVS date: 2002/10/23 20:41:57 + +commit bd1235296294ef894ec7d4ddf3cb0407848a91d0 +Author: jbj +Date: Wed Oct 23 20:34:52 2002 +0000 + + - resurrect genhdlist "greased lightning" pathway for now. + + CVS patchset: 5811 + CVS date: 2002/10/23 20:34:52 + +commit d906129a9a26847f84c63724910b0e1a7f689df0 +Author: jbj +Date: Wed Oct 23 16:28:08 2002 +0000 + + Resolve conflicts. + + CVS patchset: 5810 + CVS date: 2002/10/23 16:28:08 + +commit 6aba3b12d016a37037164e4ee8152eed7412bf90 +Author: jbj +Date: Wed Oct 23 16:20:17 2002 +0000 + + Resolve conflict. + + CVS patchset: 5809 + CVS date: 2002/10/23 16:20:17 + +commit aecacb8eafa9d4958aa4251cc7f47597671e586c +Author: jbj +Date: Wed Oct 23 16:02:16 2002 +0000 + + Initial revision + + CVS patchset: 5808 + CVS date: 2002/10/23 16:02:16 + +commit ad513051bd51228aa506e3d33adfff37d4d1eef7 +Author: jbj +Date: Wed Oct 23 15:39:41 2002 +0000 + + Initial revision + + CVS patchset: 5803 + CVS date: 2002/10/23 15:39:41 + +commit 30b650580233b357cc7e68e95accc9db4186e5b5 +Author: jbj +Date: Wed Oct 23 00:09:06 2002 +0000 + + Upgrade to autoconf-2.54 and elfutils-0.51. + + CVS patchset: 5802 + CVS date: 2002/10/23 00:09:06 + +commit df88f7add5379ecd0482a7ea5b21d0b776d59fac +Author: jbj +Date: Tue Oct 22 23:54:26 2002 +0000 + + Re-fiddle elfutils-0.51 autocrap for rpm. + + CVS patchset: 5801 + CVS date: 2002/10/22 23:54:26 + +commit 650e74822c968d7629a734ad18530e3fff97e81c +Author: jbj +Date: Tue Oct 22 23:43:54 2002 +0000 + + Don't keep generated files. + + CVS patchset: 5800 + CVS date: 2002/10/22 23:43:54 + +commit 07e7163d3934ca6887758892671e2ec419a836d6 +Author: jbj +Date: Tue Oct 22 23:01:12 2002 +0000 + + Resolve conflicts. + + CVS patchset: 5799 + CVS date: 2002/10/22 23:01:12 + +commit 75ccbf4900b1dea10363e774337c522e45d01d2b +Author: jbj +Date: Tue Oct 22 22:52:08 2002 +0000 + + Initial revision + + CVS patchset: 5798 + CVS date: 2002/10/22 22:52:08 + +commit f4890ceb80399e9400b801b7b7474be18ed38cd4 +Author: jbj +Date: Mon Oct 21 23:25:02 2002 +0000 + + Accurate dependencies generated, but perl deps are slow. + + CVS patchset: 5795 + CVS date: 2002/10/21 23:25:02 + +commit 1d123655af369d7b3f6a5d17606a04a8d2bd40b1 +Author: jbj +Date: Mon Oct 21 22:51:39 2002 +0000 + + Attach per-interpreter namespace deps to files too. + + CVS patchset: 5794 + CVS date: 2002/10/21 22:51:39 + +commit a57d70b73526196d62300c7dacbd3106ecb2fa96 +Author: jbj +Date: Mon Oct 21 21:07:58 2002 +0000 + + Rationalize per-interpreter dependency generation. + + CVS patchset: 5793 + CVS date: 2002/10/21 21:07:58 + +commit 9f8af168ceda5737a8b6f83f7311d66e0ddcf21f +Author: jbj +Date: Mon Oct 21 19:29:23 2002 +0000 + + Add per-interpreter perl dependencies. + + CVS patchset: 5792 + CVS date: 2002/10/21 19:29:23 + +commit 01360cd4be4bd9c467132ffe11719c8f81dd63e8 +Author: cturner +Date: Mon Oct 21 13:49:04 2002 +0000 + + turn sigchecking off for now; bump version + + CVS patchset: 5791 + CVS date: 2002/10/21 13:49:04 + +commit e9e68be03a2965f0379e4eef1d60ff70eb2ef4a6 +Author: jbj +Date: Sat Oct 19 22:48:25 2002 +0000 + + Functional ELF/SCRIPT dependency generation. + + CVS patchset: 5790 + CVS date: 2002/10/19 22:48:25 + +commit 4a77efce46d82f91c0539c3c012381ff20d0d2f5 +Author: jbj +Date: Fri Oct 18 18:45:47 2002 +0000 + + - add debug sub-package patch. + - re-add elfutils/libdwarf (for dwarf.h), eliminate tools/dwarf2.h. + + CVS patchset: 5789 + CVS date: 2002/10/18 18:45:47 + +commit 71f563826d0155b77165230cf90a2739d7d2f679 +Author: jbj +Date: Fri Oct 18 16:01:59 2002 +0000 + + Debug package patch. + + CVS patchset: 5788 + CVS date: 2002/10/18 16:01:59 + +commit 81ff484d0ff37cc097d09540ea24e6577df92e41 +Author: jbj +Date: Fri Oct 18 14:57:10 2002 +0000 + + Grab strings necessary for dependencies from ELF headers. + + CVS patchset: 5787 + CVS date: 2002/10/18 14:57:10 + +commit 5b92a57aa8f8a4aba49ba001ecce7cd117467af2 +Author: jbj +Date: Thu Oct 17 19:33:37 2002 +0000 + + First build of rpm-4.2. + + CVS patchset: 5786 + CVS date: 2002/10/17 19:33:37 + +commit 8bd4f7a79753e25140797d9f180f85cfb75072eb +Author: jbj +Date: Thu Oct 17 19:26:43 2002 +0000 + + Pare down to internal only libelf. + + CVS patchset: 5785 + CVS date: 2002/10/17 19:26:43 + +commit 8d3a42390ae9bbff92006fb473defb6b9f804006 +Author: jbj +Date: Wed Oct 16 20:37:01 2002 +0000 + + print size_t appropriately. + + CVS patchset: 5784 + CVS date: 2002/10/16 20:37:01 + +commit 1cda81417cecea839fb6bf6778ec96ea8be88b0c +Author: jbj +Date: Wed Oct 16 17:57:23 2002 +0000 + + - dump libelf, gulp elfutils, for now. + - python: permit headers to be hashed. + - use %%{_lib} for libraries. + - include file-3.39 (with homebrewed) libfmagic, for now. + + CVS patchset: 5783 + CVS date: 2002/10/16 17:57:23 + +commit 68568c5fe047c7eb767a3779436cee2775dde37a +Author: jbj +Date: Wed Oct 16 16:25:11 2002 +0000 + + Include magic.mime. + + CVS patchset: 5782 + CVS date: 2002/10/16 16:25:11 + +commit 2782446f1e6e143beaf5df99ac635decb955b0d7 +Author: jbj +Date: Tue Oct 15 18:52:50 2002 +0000 + + - python: permit headers to be hashed. + + CVS patchset: 5780 + CVS date: 2002/10/15 18:52:50 + +commit 538754111590cac7b699c19bca0da4953e2b7df4 +Author: jbj +Date: Tue Oct 15 18:44:56 2002 +0000 + + Create. + + CVS patchset: 5779 + CVS date: 2002/10/15 18:44:56 + +commit ada36102ab34ce7937dfddd49d2f60f4ccd9e3db +Author: jbj +Date: Tue Oct 15 18:44:16 2002 +0000 + + Replace libelf with elfutils. + + CVS patchset: 5778 + CVS date: 2002/10/15 18:44:16 + +commit 8da8b70df8dbf3c83ae5c45c861f00856e35631a +Author: jbj +Date: Tue Oct 15 18:32:05 2002 +0000 + + Clean up autocrud. + + CVS patchset: 5777 + CVS date: 2002/10/15 18:32:05 + +commit 4b652fc8259c1ab9d54e9a0d4348bbbdb5afca18 +Author: jbj +Date: Tue Oct 15 14:53:45 2002 +0000 + + Initial revision + + CVS patchset: 5775 + CVS date: 2002/10/15 14:53:45 + +commit aab865e8473a06e0f9408daee27701931e896e50 +Author: jbj +Date: Mon Oct 14 18:48:01 2002 +0000 + + Classify images. + + CVS patchset: 5774 + CVS date: 2002/10/14 18:48:01 + +commit a0bdebee4dad4cae17a8585cf9be74fb7093a3c5 +Author: jbj +Date: Mon Oct 14 14:52:45 2002 +0000 + + Spin mostly complete file classifier off to rpmfc.[ch]. + + CVS patchset: 5773 + CVS date: 2002/10/14 14:52:45 + +commit 627873989525aa2c713a1a755d82b3ad79575d8e +Author: jbj +Date: Sun Oct 13 14:39:21 2002 +0000 + + Add argv.[ch]. + + CVS patchset: 5772 + CVS date: 2002/10/13 14:39:21 + +commit 097ff145c9571f7ace5427f2409ef3804c95a131 +Author: jbj +Date: Sun Oct 13 13:53:07 2002 +0000 + + Sanity. + + CVS patchset: 5771 + CVS date: 2002/10/13 13:53:07 + +commit 07a348e2e658be2a614b4f61bea916bde9c7564f +Author: jbj +Date: Sat Oct 12 18:35:29 2002 +0000 + + anity. + + CVS patchset: 5770 + CVS date: 2002/10/12 18:35:29 + +commit d097ccae7c06bc351566b82be15998467d99f0de +Author: jbj +Date: Sat Oct 12 17:05:19 2002 +0000 + + Remove CVS cruft. + + CVS patchset: 5769 + CVS date: 2002/10/12 17:05:19 + +commit 021532cd71ae0dad747f437563bd9f18a353c453 +Author: jbj +Date: Fri Oct 11 22:55:40 2002 +0000 + + Cleanups. + + CVS patchset: 5768 + CVS date: 2002/10/11 22:55:40 + +commit c840ecba352f3149101d33a600b2c86eb15436a7 +Author: jbj +Date: Fri Oct 11 21:35:37 2002 +0000 + + Resurrect MULTILIB on the build side. + + CVS patchset: 5767 + CVS date: 2002/10/11 21:35:37 + +commit c176aaeca57a2d982619cc8e7fa8af6984dfb545 +Author: sopwith +Date: Fri Oct 11 17:22:50 2002 +0000 + + Fix s390 typo + + CVS patchset: 5765 + CVS date: 2002/10/11 17:22:50 + +commit 675393c450c3ff67aa6cdc63a5677047549c4393 +Author: jbj +Date: Thu Oct 10 22:48:21 2002 +0000 + + Patch from 20021010. + + CVS patchset: 5764 + CVS date: 2002/10/10 22:48:21 + +commit 2cff374b93ee0c0ccf7a53b4394185ec4d8f9059 +Author: jbj +Date: Wed Oct 9 19:13:31 2002 +0000 + + Add multilib platforms. + + CVS patchset: 5761 + CVS date: 2002/10/09 19:13:31 + +commit d0ccee051fd915b5ae34a9d8b31642255577bb2c +Author: jbj +Date: Wed Oct 9 19:07:43 2002 +0000 + + - fix: use size_t consistently, avoid segfault on ia64. + + CVS patchset: 5760 + CVS date: 2002/10/09 19:07:43 + +commit e7c99cdec359357c3694bd12b9df6170a742be70 +Author: jbj +Date: Mon Oct 7 10:26:43 2002 +0000 + + Typos. pause with signals blocked ain't gonna work. + + CVS patchset: 5757 + CVS date: 2002/10/07 10:26:43 + +commit 868c27220d5ad94408829c36eff950fb46e898d1 +Author: jbj +Date: Mon Oct 7 09:05:06 2002 +0000 + + lclint annotations. + + CVS patchset: 5756 + CVS date: 2002/10/07 09:05:06 + +commit 8e71e2cc310504228384d777607cb8fd9f6b76b7 +Author: jbj +Date: Sun Oct 6 05:55:24 2002 +0000 + + db1 to db3 conversion program (Michael Schroeder ) + + CVS patchset: 5755 + CVS date: 2002/10/06 05:55:24 + +commit 9ff3ad0cae29caae061925192eedddfa0acf31b7 +Author: jbj +Date: Sun Oct 6 05:28:21 2002 +0000 + + Add 64bit patch. + + CVS patchset: 5753 + CVS date: 2002/10/06 05:28:21 + +commit 00c78bd40c7328b315b68e777c259983a2ace16d +Author: jbj +Date: Fri Oct 4 21:52:11 2002 +0000 + + Use error(3) if available, diddle up a replacement for those who have not. + Hide stdout in fmagic, drill fmagic through the output routines. + + CVS patchset: 5752 + CVS date: 2002/10/04 21:52:11 + +commit b8751e90f613909e1da1c7909aa760699203b53a +Author: jbj +Date: Fri Oct 4 16:09:47 2002 +0000 + + Make CFLAGS pickier. + Eliminate is_tar() from the API by merging is_tar.c into ascmagic.c. + Use buf/nb names consistently throughout. + Carry mlist/fn/buf/nb/sb in fmagic (for now, a per-file structure is needed). + + CVS patchset: 5751 + CVS date: 2002/10/04 16:09:47 + +commit 3fec2112f7985602db97f6d156c334b84934ac2d +Author: jbj +Date: Thu Oct 3 22:07:30 2002 +0000 + + Drill an opaque "fmagic" control structure through the API. + Rename all functions to start with prefix "fmagic". + + CVS patchset: 5750 + CVS date: 2002/10/03 22:07:30 + +commit be3340d858f85c8e22260a1db0bd451c7e0e8ef4 +Author: jbj +Date: Wed Oct 2 22:38:00 2002 +0000 + + Collapse CLI flags into a single int. + + CVS patchset: 5749 + CVS date: 2002/10/02 22:38:00 + +commit 2dfa85a312b4dd70979f0cb9d559647db7a24426 +Author: jbj +Date: Wed Oct 2 19:00:31 2002 +0000 + + Split CLI from libraries, create libfmagic. + + CVS patchset: 5748 + CVS date: 2002/10/02 19:00:31 + +commit 1c582f226dc0027f82fe76eff7da6771b54559aa +Author: jbj +Date: Wed Oct 2 16:45:37 2002 +0000 + + Add mcheck functionality throughout. + + CVS patchset: 5747 + CVS date: 2002/10/02 16:45:37 + +commit 74b6896952ae14dc3d46bcadeaf9290e7c6df951 +Author: jbj +Date: Wed Oct 2 13:47:39 2002 +0000 + + Revert bogus ELF patch, enable automake dependencies. + + CVS patchset: 5746 + CVS date: 2002/10/02 13:47:39 + +commit 41f87d9dab616f18a072170e98ad2061bfa8b1df +Author: jbj +Date: Tue Oct 1 21:46:33 2002 +0000 + + Sanity. + + CVS patchset: 5745 + CVS date: 2002/10/01 21:46:33 + +commit 6d294939a66d74418a36825f1936b4fe31f3a65e +Author: jbj +Date: Tue Oct 1 19:17:55 2002 +0000 + + Apply patches from file-3.37-8. + + CVS patchset: 5744 + CVS date: 2002/10/01 19:17:55 + +commit 8a72493bda86309fb6590cafe6113fb4774f7f90 +Author: jbj +Date: Tue Oct 1 19:03:37 2002 +0000 + + dd system.h/debug.h, factor build conf into system.h. + + CVS patchset: 5743 + CVS date: 2002/10/01 19:03:37 + +commit bb6324de469b395a113cad0dcd0126af504c07dd +Author: jbj +Date: Tue Oct 1 17:02:02 2002 +0000 + + Reorder routines to eliminate static prototypes. + + CVS patchset: 5742 + CVS date: 2002/10/01 17:02:02 + +commit 69f31f57625896cad0bd54e5e35b53808d2c641c +Author: jbj +Date: Tue Oct 1 15:18:16 2002 +0000 + + lclint fiddles. + + CVS patchset: 5741 + CVS date: 2002/10/01 15:18:16 + +commit 9e39ec258af280198beb131dc969b0386db536d5 +Author: jbj +Date: Tue Oct 1 11:16:54 2002 +0000 + + lclint annotations. + + CVS patchset: 5740 + CVS date: 2002/10/01 11:16:54 + +commit 70a5bb4b789013428565c7722ae29bd4cb6ae490 +Author: jbj +Date: Mon Sep 30 23:37:47 2002 +0000 + + Wrap in lclint. + + CVS patchset: 5739 + CVS date: 2002/09/30 23:37:47 + +commit 90f09149dbb0e7068cf37bf54f6ab401e018df3d +Author: jbj +Date: Mon Sep 30 23:28:10 2002 +0000 + + Update autocrap to latest. + + CVS patchset: 5738 + CVS date: 2002/09/30 23:28:10 + +commit 9fd8525a8b53609578216eec887c8876f36da236 +Author: jbj +Date: Mon Sep 30 21:45:34 2002 +0000 + + Initial revision + + CVS patchset: 5732 + CVS date: 2002/09/30 21:45:34 + +commit 6d8b923dfb4182d49c74bae474fb1ff303a4bbd6 +Author: jbj +Date: Sat Sep 21 14:30:04 2002 +0000 + + Convert to UTF-8. + + CVS patchset: 5731 + CVS date: 2002/09/21 14:30:04 + +commit 9e6dc0e00ec028a14812ba36fc781fb6e121bb3b +Author: jbj +Date: Fri Sep 20 21:26:16 2002 +0000 + + - eliminate myftw, use Fts(3) instead. + + CVS patchset: 5730 + CVS date: 2002/09/20 21:26:16 + +commit 56b4e83a2ee1ab40c7f92cfa4d962fcede4ef785 +Author: jbj +Date: Fri Sep 20 16:34:33 2002 +0000 + + Add va_end to match va_copy (#74251). + + CVS patchset: 5729 + CVS date: 2002/09/20 16:34:33 + +commit 943bede39829b35cf4062bf86012141be64e7609 +Author: jbj +Date: Fri Sep 20 16:16:01 2002 +0000 + + - update to db-4.1.24 final. + + CVS patchset: 5727 + CVS date: 2002/09/20 16:16:01 + +commit fbce9c0c31c4b3693baa43cc63b4585defa80fb4 +Author: jbj +Date: Fri Sep 20 13:58:39 2002 +0000 + + Orphans. + + CVS patchset: 5726 + CVS date: 2002/09/20 13:58:39 + +commit e07524eedbdf6fde6886c2258779582271187269 +Author: jbj +Date: Fri Sep 20 13:49:09 2002 +0000 + + Orphans. + + CVS patchset: 5725 + CVS date: 2002/09/20 13:49:09 + +commit 728dd6394f7feda59405bd5255741b0e38d05d6d +Author: jbj +Date: Fri Sep 20 13:37:09 2002 +0000 + + Orphans. + + CVS patchset: 5724 + CVS date: 2002/09/20 13:37:09 + +commit f15b4eca77a90fa3303955c386b5b6d134862ff8 +Author: jbj +Date: Fri Sep 20 13:24:06 2002 +0000 + + Create. + + CVS patchset: 5723 + CVS date: 2002/09/20 13:24:06 + +commit 2376437b8faec79eb8ccaa874f271d4ee69d276f +Author: jbj +Date: Thu Sep 19 21:06:40 2002 +0000 + + Conflict resolved. + + CVS patchset: 5722 + CVS date: 2002/09/19 21:06:40 + +commit 4a15060bcbf38c550f7dcc86ceff277854f9eecf +Author: jbj +Date: Thu Sep 19 20:33:51 2002 +0000 + + Initial revision + + CVS patchset: 5721 + CVS date: 2002/09/19 20:33:51 + +commit 0fd303f38a72c9a465081a7b1b9a77f7d181fd84 +Author: jbj +Date: Thu Sep 19 16:30:25 2002 +0000 + + Check for orphan'ed chnages in rpm-4.1. + + CVS patchset: 5718 + CVS date: 2002/09/19 16:30:25 + +commit 3ea6dcbfe573ddbfad7a020f162c1dbc901564a8 +Author: jbj +Date: Tue Sep 17 18:52:26 2002 +0000 + + Set %_arch to RPMCANONARCH. + + CVS patchset: 5716 + CVS date: 2002/09/17 18:52:26 + +commit 0ef682d77e28d4ab69e11b4c064acb195e061737 +Author: jbj +Date: Tue Sep 17 15:21:03 2002 +0000 + + - lclint clean. + + CVS patchset: 5715 + CVS date: 2002/09/17 15:21:03 + +commit c1542ea2071d8c4086877587919eb7e4165c2b85 +Author: jbj +Date: Mon Sep 16 23:24:41 2002 +0000 + + Another pgp parser fix. + + CVS patchset: 5713 + CVS date: 2002/09/16 23:24:41 + +commit 40726dd94f8d149a56b9ccf0ddf1615a710ed0ae +Author: jbj +Date: Mon Sep 16 20:10:20 2002 +0000 + + Sync with rpm-4.1 parsing changes. + + CVS patchset: 5711 + CVS date: 2002/09/16 20:10:20 + +commit d50a43910123440fafa18b3bd90952f4d312a215 +Author: jbj +Date: Mon Sep 16 13:17:30 2002 +0000 + + The char array 'format' sometimes get 10 characters and when + strcpy is done on it, strcpy tries to add a '/0' to it beyond + the capacity. Not sure why, but, the const char *ch gets bad + address. Anyway, format should be atleast 11 chars to accommodate + strings like "%.34s\n%42s" and a terminating '\0'. + + CVS patchset: 5708 + CVS date: 2002/09/16 13:17:30 + +commit d63a81d8f060c7eb73f170cdb9a5e38549d957f9 +Author: jbj +Date: Wed Sep 4 18:14:08 2002 +0000 + + Don't mess with uint32_t, breaks on 6.x. + + CVS patchset: 5706 + CVS date: 2002/09/04 18:14:08 + +commit 77ec71122fbacfc073c52196b953c69e26c37869 +Author: jbj +Date: Wed Sep 4 18:08:12 2002 +0000 + + - fix: register SIGCHLD handler before forking (#73134). + + CVS patchset: 5704 + CVS date: 2002/09/04 18:08:12 + +commit dfdb8d487f84e43df3e18143e0ac13f70d742a25 +Author: cturner +Date: Wed Sep 4 15:18:02 2002 +0000 + + store the filename used to read the RPM into the header object + + CVS patchset: 5702 + CVS date: 2002/09/04 15:18:02 + +commit 0c09564b83f14b62ac73cbac18a218a7613aa33d +Author: jbj +Date: Wed Sep 4 01:52:26 2002 +0000 + + - fix: parse header data more carefully. + + CVS patchset: 5701 + CVS date: 2002/09/04 01:52:26 + +commit 56b3772145de71568a14366f55ffa83a5b507dac +Author: jbj +Date: Tue Sep 3 20:15:20 2002 +0000 + + - fix: parse pgp packets more carefully. + + CVS patchset: 5699 + CVS date: 2002/09/03 20:15:20 + +commit f19f373a59e4728fd7a3132eedd75973b99fe447 +Author: jbj +Date: Tue Sep 3 12:23:51 2002 +0000 + + - fix: always do rpmalMakeIndex. + - fix: resurrect --triggers (#73330). + - python: typo in NOKEY exception string. + + CVS patchset: 5696 + CVS date: 2002/09/03 12:23:51 + +commit cc5d229b0e7a13f4d9efac2aed5926a0078df48c +Author: jbj +Date: Sat Aug 31 22:39:34 2002 +0000 + + Sync with rpm-4.1. + + CVS patchset: 5695 + CVS date: 2002/08/31 22:39:34 + +commit 929d5d38346273dbdaf20e5ceb3b1687405676af +Author: jbj +Date: Tue Aug 27 22:19:44 2002 +0000 + + - requirement on libelf >= 0.8.2 to work around incompatible soname (#72792). + + CVS patchset: 5686 + CVS date: 2002/08/27 22:19:44 + +commit 02f9006732201e863d51ce0c170c9c29edaaa364 +Author: jbj +Date: Tue Aug 27 20:50:21 2002 +0000 + + - fix: segfault with --checksig, plug memory leak (#72455). + - rpm-4.1 release candidate. + + CVS patchset: 5684 + CVS date: 2002/08/27 20:50:21 + +commit ab5c7289be52e7798ed0e7ed624dc25d22355641 +Author: jbj +Date: Tue Aug 27 13:52:23 2002 +0000 + + xmlspec-20020827.diff + + CVS patchset: 5679 + CVS date: 2002/08/27 13:52:23 + +commit 8df2a575d6d514b796bd2c8c7b5ea1fa5147deb1 +Author: jbj +Date: Mon Aug 26 19:11:56 2002 +0000 + + ... in with the new C implementation. + + CVS patchset: 5676 + CVS date: 2002/08/26 19:11:56 + +commit b2483edf46d2a3f3f648bc08e428e93c6be5033a +Author: jbj +Date: Mon Aug 26 19:10:29 2002 +0000 + + Out with the old C++ implementation ... + + CVS patchset: 5675 + CVS date: 2002/08/26 19:10:29 + +commit 0fae1010f0c9a563ea79a01d82eea80e7e8f7ece +Author: jbj +Date: Mon Aug 26 18:56:11 2002 +0000 + + - set cachesize without a dbenv, the default is far too small. + - db: don't return EACCES on db->close w/o environment. + - unify cachesize configuration, with (or without) a dbenv. + - comments regarding unsupported (yet) db-4.1.17 functionality. + + CVS patchset: 5674 + CVS date: 2002/08/26 18:56:11 + +commit 85a70389f6797877fea23b2d2bfe1c0a8acbce6c +Author: jbj +Date: Mon Aug 26 17:56:32 2002 +0000 + + - python: don't remap NOKEY/UNTRUSTED to OK. + - beecrypt: change local absolute symbols to defines for prelinking. + - update ru.po. + + CVS patchset: 5673 + CVS date: 2002/08/26 17:56:32 + +commit 224b8c70028460c0a3cc9be001171d3a89b1cb32 +Author: jbj +Date: Mon Aug 26 17:51:39 2002 +0000 + + Update ru.po. + + CVS patchset: 5672 + CVS date: 2002/08/26 17:51:39 + +commit 4914b096245af88592888170a442c099c35d891f +Author: jbj +Date: Mon Aug 26 17:42:39 2002 +0000 + + - python: don't remap NOKEY/UNTRUSTED to OK. + + CVS patchset: 5671 + CVS date: 2002/08/26 17:42:39 + +commit f267c44df61796a672a073deef85cfb1c907f72c +Author: jbj +Date: Mon Aug 26 17:41:55 2002 +0000 + + - beecrypt: change local absolute symbols to defines for prelinking. + + CVS patchset: 5670 + CVS date: 2002/08/26 17:41:55 + +commit f5a546f5801067dd922aa83e7d78e8e59c84e738 +Author: jbj +Date: Fri Aug 23 21:01:59 2002 +0000 + + - merge signature returns into rpmRC. + - python: exceptions on NOKEY/NOTTRUSTED. + + CVS patchset: 5667 + CVS date: 2002/08/23 21:01:59 + +commit 4e245109ad54513ec5563b4292cce64f90482ed6 +Author: jbj +Date: Fri Aug 23 17:27:14 2002 +0000 + + Auto-update by eugene@ultra.net + + CVS patchset: 5665 + CVS date: 2002/08/23 17:27:14 + +commit 31257878fc63d2daab066a08bce46919bd4a5609 +Author: jbj +Date: Fri Aug 23 17:17:33 2002 +0000 + + Auto-update by eugene@ultra.net + + CVS patchset: 5664 + CVS date: 2002/08/23 17:17:33 + +commit 90b34cd4e51de9b69a1a1e4bf58fcee31c2bf192 +Author: jbj +Date: Thu Aug 22 19:21:14 2002 +0000 + + - add a macro to create a sub-package with debugging symbols. + + CVS patchset: 5662 + CVS date: 2002/08/22 19:21:14 + +commit 9db12e8040c6bc6700a9a1c88e7724c11c43f892 +Author: jbj +Date: Thu Aug 22 16:34:51 2002 +0000 + + Update popt internal copyright messages. + + CVS patchset: 5659 + CVS date: 2002/08/22 16:34:51 + +commit 1467c44c734f7953213e5d3dbebf9b09c7f2d74d +Author: jbj +Date: Thu Aug 22 12:57:17 2002 +0000 + + - fix: don't stop if db1 database is currently in /var/lib/rpm (#72224). + + CVS patchset: 5656 + CVS date: 2002/08/22 12:57:17 + +commit 9e06e3b8ca76ae55eaf2c4e37ba9cac729789014 +Author: jbj +Date: Thu Aug 22 00:37:21 2002 +0000 + + - fix: region trailer offset sanity check wrong (#71996). + + CVS patchset: 5654 + CVS date: 2002/08/22 00:37:21 + +commit b6b6612cfa451a62839e45b69423eb1a16a03f57 +Author: jbj +Date: Tue Aug 20 22:05:18 2002 +0000 + + - check for interrupt during iteration. + - python: add ts.setProbFilter() method, remove ts.run() argument. + + CVS patchset: 5652 + CVS date: 2002/08/20 22:05:18 + +commit 46d1fa7527073148293e8a49ed13c80043758dae +Author: jbj +Date: Tue Aug 20 14:56:37 2002 +0000 + + - fix: add epoch to "already installed" check. + + CVS patchset: 5650 + CVS date: 2002/08/20 14:56:37 + +commit fb8ced897951d9376c10e2121eded06ec81e0599 +Author: jbj +Date: Tue Aug 20 13:39:31 2002 +0000 + + - python: supid typo broke ts.check(). + + CVS patchset: 5648 + CVS date: 2002/08/20 13:39:31 + +commit ae8428475cbfde3af746d51a056e0655fe6269d8 +Author: jbj +Date: Mon Aug 19 22:27:44 2002 +0000 + + - add --with-efence to configure, check install/upgrade with efence. + - beecrypt: short hex string conversion overflows target buffer. + - mark "successors only" packages in transaction. + - reap scriptlets with SIGCHLD handler. + - rename PSM_t to rpmpsm, add methods and refcounts to manage. + - remove %%configure/%%makeinstall from arch-os/macros, default is OK. + - don't export MALLOC_CHECK_ to scriptlets. + - squeaky clean memory leak checking. + - always malloc rpmfi structure, refcounts are correct in rpmtsRun(). + - skip redundant /sbin/ldconfig scripts on upgrade (if possible). + + CVS patchset: 5645 + CVS date: 2002/08/19 22:27:44 + +commit 105f7a517cd13b7c40b359548a9c75cbd00ed9c4 +Author: jbj +Date: Thu Aug 15 22:25:33 2002 +0000 + + hp-ux: ETXTBSY fiddles. + + CVS patchset: 5642 + CVS date: 2002/08/15 22:25:33 + +commit c7881d801745b4c156a8aa2afc17b95f97481e34 +Author: jbj +Date: Thu Aug 15 18:50:46 2002 +0000 + + - python: explicit method to set transFlags. + - python: stuff package name into a string for repackage callbacks. + - rollback: re-create empty transaction set for multiple rollbacks. + - fix: %%basename typo (Dmitry V. Levin). + - fix: queryformat segfaults (Dmitry V. Levin). + + CVS patchset: 5639 + CVS date: 2002/08/15 18:50:46 + +commit 622e40678461d27bc8f8b45061bdc4d866a8bdf2 +Author: jbj +Date: Wed Aug 14 21:35:35 2002 +0000 + + Update to db-4.1.17. + + CVS patchset: 5636 + CVS date: 2002/08/14 21:35:35 + +commit 2a3235eb27dccdd51b6a4e113c22fe219edef0c5 +Author: jbj +Date: Wed Aug 14 19:38:59 2002 +0000 + + db-4.1.17 orphans. + + CVS patchset: 5635 + CVS date: 2002/08/14 19:38:59 + +commit 41d4fce5c44bed0df416eac8f24f31240a391b22 +Author: jbj +Date: Wed Aug 14 19:19:13 2002 +0000 + + db-4.1.17 orphans. + + CVS patchset: 5634 + CVS date: 2002/08/14 19:19:13 + +commit 372fe8d762b5d501f546e37996d5e5e9185ba558 +Author: jbj +Date: Wed Aug 14 18:47:29 2002 +0000 + + db-4.1.17 orphans. + + CVS patchset: 5633 + CVS date: 2002/08/14 18:47:29 + +commit 8faf9d1ea6d5743be84b20e509d52bab283ece71 +Author: jbj +Date: Wed Aug 14 17:31:52 2002 +0000 + + db-4.1.17 orphans. + + CVS patchset: 5632 + CVS date: 2002/08/14 17:31:52 + +commit 4aac97a69fb764add274089dbc7a1c5bd02c59c8 +Author: jbj +Date: Wed Aug 14 16:42:12 2002 +0000 + + db-4.1.17 orphans. + + CVS patchset: 5631 + CVS date: 2002/08/14 16:42:12 + +commit d481ba55c02407124c499c7800ea556786137bc5 +Author: jbj +Date: Wed Aug 14 16:31:49 2002 +0000 + + Initial revision + + CVS patchset: 5630 + CVS date: 2002/08/14 16:31:49 + +commit 9114d6ffea4ee330874ebc8febe225ce0e891eac +Author: jbj +Date: Wed Aug 14 14:48:04 2002 +0000 + + - fix: rebuilddb stat'ed target, not source, for rename sanity, take 2. + + CVS patchset: 5627 + CVS date: 2002/08/14 14:48:04 + +commit ee6c74d4c244b4d19372d119ad61a9116dcde07d +Author: jbj +Date: Tue Aug 13 21:30:18 2002 +0000 + + Avoid DB_RECOVER deadlock (#70362). + + CVS patchset: 5626 + CVS date: 2002/08/13 21:30:18 + +commit 48a2529ce4b3ab1f677d3de9b70e8cbe14d910c6 +Author: jbj +Date: Tue Aug 13 20:40:32 2002 +0000 + + - fix: rebuilddb stat'ed target, not source, for rename sanity. + - create /var/lib/rpm if non-existent in, say, a chroot. + - erased packages are now repackaged into /var/spool/repackage. + + CVS patchset: 5625 + CVS date: 2002/08/13 20:40:32 + +commit 9b29055f422cd5f2aeff27b6c80e7c83317920c9 +Author: jbj +Date: Tue Aug 13 16:36:44 2002 +0000 + + - supply transitive closure for CLI packages from rpmdb-redhat database. + + CVS patchset: 5624 + CVS date: 2002/08/13 16:36:44 + +commit f34283307b084d1baf8ac598d2053f914fd0ce3f +Author: jbj +Date: Sun Aug 11 17:17:55 2002 +0000 + + Re-add the POPT_ keywod to xgettext text extraction. + + CVS patchset: 5623 + CVS date: 2002/08/11 17:17:55 + +commit 398a66a90db88547613f6df9589e3d554aa4c470 +Author: jbj +Date: Sat Aug 10 17:51:29 2002 +0000 + + Make rpmpopt text available for translation. + + CVS patchset: 5622 + CVS date: 2002/08/10 17:51:29 + +commit 644401875d02f4fad5e8e5a004aa9bd08153ba84 +Author: jbj +Date: Fri Aug 9 23:14:10 2002 +0000 + + - python: include instance in IDTXload, filename in IDTXglob, return + - python: argument to ts.addErase (if integer) deletes that instance. + - python: rpmmi methods to return this instance, and number of members. + + CVS patchset: 5620 + CVS date: 2002/08/09 23:14:10 + +commit 7937158c01c71774eb5872f742a9d9c771df5b79 +Author: jbj +Date: Fri Aug 9 22:25:04 2002 +0000 + + - python: add (optional) ts.check() callback. + + CVS patchset: 5619 + CVS date: 2002/08/09 22:25:04 + +commit c961f3f78e34e77989f603dcdd92e269bbe15546 +Author: jbj +Date: Thu Aug 8 22:20:26 2002 +0000 + + - python: add return codes for rollbacks and fooDB methods. + - avoid generating fingerprints for locale/zoneinfo sub-directories. + + CVS patchset: 5618 + CVS date: 2002/08/08 22:20:26 + +commit 4d8ebc7c664ff4bbc30d14c8a1350bf54e729ac7 +Author: cturner +Date: Thu Aug 8 21:38:59 2002 +0000 + + fix doc typo + + CVS patchset: 5617 + CVS date: 2002/08/08 21:38:59 + +commit 8578aab9a720afac5a8c16750290f86babef6607 +Author: cturner +Date: Thu Aug 8 20:48:36 2002 +0000 + + remove some spurious warnings, clean up some ambiguities + + CVS patchset: 5616 + CVS date: 2002/08/08 20:48:36 + +commit 6106bdb3594e9236854f09b25f2c88c868799fda +Author: jbj +Date: Thu Aug 8 16:06:13 2002 +0000 + + lclint fiddles. + + CVS patchset: 5615 + CVS date: 2002/08/08 16:06:13 + +commit acfdb7fd57bea6322f922193faf04986e06c6d04 +Author: jbj +Date: Wed Aug 7 23:19:10 2002 +0000 + + Remove hdrVerifyFile, unusable as was (#58576). + + CVS patchset: 5614 + CVS date: 2002/08/07 23:19:10 + +commit fc4fc1fe2762c24bb8e44374ccca5dd0260a4e89 +Author: jbj +Date: Wed Aug 7 21:55:43 2002 +0000 + + Round correctly so that progress bars complete to 100%. + + CVS patchset: 5613 + CVS date: 2002/08/07 21:55:43 + +commit 926661cbc2c8a4ae75aadc6cce4fd01446339e1e +Author: cturner +Date: Wed Aug 7 17:05:35 2002 +0000 + + return RPM 4.0 support... sort of + + CVS patchset: 5612 + CVS date: 2002/08/07 17:05:35 + +commit e98f4606b09742b6b23e3e863451d417d74f5219 +Author: cturner +Date: Wed Aug 7 16:21:31 2002 +0000 + + version bump + + CVS patchset: 5611 + CVS date: 2002/08/07 16:21:31 + +commit ddec1f33d559bad09493dfd24175e0f10ebd1a96 +Author: cturner +Date: Wed Aug 7 16:08:45 2002 +0000 + + port 4.1 branch to this branch + + CVS patchset: 5610 + CVS date: 2002/08/07 16:08:45 + +commit d0f22dcaa2bf996bfb7c1ca06a7126fce2d43c36 +Author: jbj +Date: Wed Aug 7 14:20:45 2002 +0000 + + Teach unzip about %setup -q. + + CVS patchset: 5609 + CVS date: 2002/08/07 14:20:45 + +commit 9f11b31f6b92f04636ce1eaa8eef1e3624d854e9 +Author: jbj +Date: Wed Aug 7 13:47:59 2002 +0000 + + - fix: src.rpm installs need fd pos at payload. + + CVS patchset: 5608 + CVS date: 2002/08/07 13:47:59 + +commit d0905ecafb429f32ec76b61617eb732027455c5d +Author: jbj +Date: Tue Aug 6 19:07:37 2002 +0000 + + - python: bindings to import pubkeys and display openpgp packets. + + CVS patchset: 5605 + CVS date: 2002/08/06 19:07:37 + +commit 035cf961d56c884708902652175070de31e45a57 +Author: jbj +Date: Tue Aug 6 01:41:44 2002 +0000 + + - add bitmask for precise control of signature/digest verification. + + CVS patchset: 5604 + CVS date: 2002/08/06 01:41:44 + +commit 5211039a20762b4a50c006ccf79666bff34967c2 +Author: jbj +Date: Mon Aug 5 21:46:50 2002 +0000 + + - python: the death of rpmdb-py.[ch], use ts.fooDB() methods instead. + - python: the death of rpm.headerFromPackage(), use ts.hdrFromFdno(). + - python: permit direct ts.dbMatch() python iterations. + - python: the death of rpm.checksig(), use ts.hdrFromFdno() instead. + + CVS patchset: 5603 + CVS date: 2002/08/05 21:46:50 + +commit bd5ee7affaa5f350c03fba20952b7a16e1311c4e +Author: jbj +Date: Mon Aug 5 19:45:52 2002 +0000 + + - fix: check for lead magic, better error message on failure (#69751). + + CVS patchset: 5602 + CVS date: 2002/08/05 19:45:52 + +commit b8656c52ed8d856e0b744f35488b3c5ec0b023e8 +Author: jbj +Date: Mon Aug 5 18:40:58 2002 +0000 + + - python: enable threads on callbacks and longish rpmlib calls. + - python: expose RPMTAG_SOURCEPACKAGE to identify source headers. + - python: eliminate headerFromPackage() tuple return, deprecated. + - python: add ts.hdrFromFdno(fdno) method. + + CVS patchset: 5601 + CVS date: 2002/08/05 18:40:58 + +commit 3a99677e951529022c50d866593035558e449825 +Author: jbj +Date: Mon Aug 5 16:25:39 2002 +0000 + + - python: bare bones rollback bindings. + + CVS patchset: 5600 + CVS date: 2002/08/05 16:25:39 + +commit 71327238150d689f0b4cfe7be8cd8addb0ccc78a +Author: jbj +Date: Sun Aug 4 19:58:12 2002 +0000 + + - add --predefine to define macros before reading macro configuration. + + CVS patchset: 5599 + CVS date: 2002/08/04 19:58:12 + +commit ae3511bfa5f33adcb37f32704c65d8c85e810dda +Author: jbj +Date: Sun Aug 4 19:04:16 2002 +0000 + + - fix: don't repackage %%ghost files. + + CVS patchset: 5598 + CVS date: 2002/08/04 19:04:16 + +commit de0ff3b553d9f1b44c73b378637544ed6092df1e +Author: jbj +Date: Sun Aug 4 16:55:55 2002 +0000 + + - resurrect --rollback. + - renumber the callback types to be an orthogonal bit mask. + - provide repackage progress callbacks, compression is slow. + + CVS patchset: 5597 + CVS date: 2002/08/04 16:55:55 + +commit 00375ca2bf6017f6fb652558776fb588e9df142f +Author: jbj +Date: Sat Aug 3 22:31:39 2002 +0000 + + Remove dbi_tear_down, now that rpmdb's are closed on signals. + lclint fiddles. + + CVS patchset: 5596 + CVS date: 2002/08/03 22:31:39 + +commit f5c9fd111bf2d68bff373738310bfc355577233b +Author: jbj +Date: Fri Aug 2 21:52:01 2002 +0000 + + - check header blobs on export (i.e. rpmdbAdd()).. + - enable iterator header blob checks for install/erase modes. + - python: _vsflags_up2date macro to configure verify signature flags. + + CVS patchset: 5595 + CVS date: 2002/08/02 21:52:01 + +commit 78fafefc38e1176e747c3453393bffa3f7f5c551 +Author: jbj +Date: Fri Aug 2 16:46:02 2002 +0000 + + Sanity. + + CVS patchset: 5594 + CVS date: 2002/08/02 16:46:02 + +commit 31e9a0f278402dd5243bbb6c38d03080073836b4 +Author: jbj +Date: Fri Aug 2 16:39:55 2002 +0000 + + - fix: signed pubkeys were imported incorrectly (#68291). + - include tgpg script to verify signatures using only gpg. + + CVS patchset: 5593 + CVS date: 2002/08/02 16:39:55 + +commit 4a58c73baa5212da005a5192f60a77fdfa8601ec +Author: jbj +Date: Fri Aug 2 14:10:33 2002 +0000 + + - fix: repair --root with --verify (#70527). + + CVS patchset: 5592 + CVS date: 2002/08/02 14:10:33 + +commit b2480c3ded1975563f793a846919f3078098d764 +Author: jbj +Date: Fri Aug 2 12:49:27 2002 +0000 + + - fix: identify athlon with 3DNOWEXT as "athlon", not "i786" (#70539). + + CVS patchset: 5591 + CVS date: 2002/08/02 12:49:27 + +commit d8eaee30df6d1e4f53dfa34ec11bafeccfc27642 +Author: jbj +Date: Thu Aug 1 21:20:26 2002 +0000 + + - preserve rpmdb file attributes across --rebuilddb (#70367). + + CVS patchset: 5590 + CVS date: 2002/08/01 21:20:26 + +commit 77dadc40f449c789c53ebd7a23cb34db7c54c94a +Author: jbj +Date: Thu Aug 1 20:21:40 2002 +0000 + + Sanity. + + CVS patchset: 5589 + CVS date: 2002/08/01 20:21:40 + +commit 4605223103a20504192cefad16a6cb11e1decce7 +Author: jbj +Date: Thu Aug 1 18:37:17 2002 +0000 + + - python: methods to disable all new features for benchmarking. + + CVS patchset: 5588 + CVS date: 2002/08/01 18:37:17 + +commit 1d1b33527129384685997c1ad5954d61988d42ea +Author: jbj +Date: Wed Jul 31 19:41:32 2002 +0000 + + - change from default off to default on. + + CVS patchset: 5587 + CVS date: 2002/07/31 19:41:32 + +commit b297e9e63c2790f11b8a4ca0bd4225d896fca1be +Author: jbj +Date: Wed Jul 31 18:27:53 2002 +0000 + + - configurable (default off) build failure iff unpackaged files (PLD). + + CVS patchset: 5586 + CVS date: 2002/07/31 18:27:53 + +commit bcacb6d74552ba608320a444974508794ac3ca4e +Author: jbj +Date: Wed Jul 31 15:13:46 2002 +0000 + + Carry PLD scripts/configuration for perl/python/php in rpm sources. + + CVS patchset: 5585 + CVS date: 2002/07/31 15:13:46 + +commit 8ab4727f8cc8806021377729383652c31808f215 +Author: jbj +Date: Wed Jul 31 13:11:25 2002 +0000 + + - make --querytags a common option, fix errant regex (#70135). + - db3: increase mpool and cachesize, compile w/o --enable-debug. + + CVS patchset: 5584 + CVS date: 2002/07/31 13:11:25 + +commit 33e9f2c0d285bb854c6c7ce8842063485878342f +Author: jbj +Date: Tue Jul 30 21:37:10 2002 +0000 + + - prevent stale locks in __db files by closing databases on signals. + + CVS patchset: 5583 + CVS date: 2002/07/30 21:37:10 + +commit 06b3f0c2061b989347240cd6644206c5b429b190 +Author: jbj +Date: Tue Jul 30 17:07:39 2002 +0000 + + installplatform clean up, add athlon (PLD). + + CVS patchset: 5582 + CVS date: 2002/07/30 17:07:39 + +commit f32db08a31ae8925fd6f05354e598635a978c171 +Author: jbj +Date: Tue Jul 30 16:39:08 2002 +0000 + + - detect athlon/duron with CMOV (PLD). + + CVS patchset: 5581 + CVS date: 2002/07/30 16:39:08 + +commit f0ba06b85a4875254f6f4abda86e2310de93a0e0 +Author: jbj +Date: Mon Jul 29 23:13:54 2002 +0000 + + Remove debugging printf. + + CVS patchset: 5580 + CVS date: 2002/07/29 23:13:54 + +commit c27ac5773527e6bdf58606313130fbd454915a57 +Author: jbj +Date: Mon Jul 29 23:08:02 2002 +0000 + + Orphans. + + CVS patchset: 5579 + CVS date: 2002/07/29 23:08:02 + +commit c8502fbab503982d95f49141c0a7fa305c750e90 +Author: jbj +Date: Mon Jul 29 23:06:06 2002 +0000 + + - update trpm. + - factor all mode-specific options into mode-specific tables. + - treat an unspecified epoch as Epoch: 0 everywhere. + + CVS patchset: 5578 + CVS date: 2002/07/29 23:06:06 + +commit 5a1ebaccd57b157b70bcd1277f66c5d97e94edf1 +Author: jbj +Date: Sun Jul 28 14:52:33 2002 +0000 + + - python: don't segfault in ts.GetKeys() on erased packages. + resurrect build modes. + add undocumented debugging options. + + CVS patchset: 5577 + CVS date: 2002/07/28 14:52:33 + +commit 670ab1c845c0f5f9d252b4599186b4934d20c4b7 +Author: jbj +Date: Sun Jul 28 00:41:15 2002 +0000 + + - popt: display sub-table options only once on --usage. + - wire --nosignatures et al as common options, rework CLI options. + + CVS patchset: 5575 + CVS date: 2002/07/28 00:41:15 + +commit c33342be5f9bcf69e6967db5c196b6ba32326694 +Author: jbj +Date: Thu Jul 25 23:36:32 2002 +0000 + + - fix: --repackage repaired (#67217). + - fix: rpm2cpio disables signature checks (i.e. same behavior). + + CVS patchset: 5574 + CVS date: 2002/07/25 23:36:32 + +commit e03b4bf8602b591e75c9d85fda69c49ba89c9ffb +Author: jbj +Date: Thu Jul 25 18:50:08 2002 +0000 + + - popt: fix --usage (#62234). + + CVS patchset: 5573 + CVS date: 2002/07/25 18:50:08 + +commit e5761bc7250ea40c2e439b481ee1edcb5630a0a4 +Author: jbj +Date: Thu Jul 25 17:26:12 2002 +0000 + + Orphan. + + CVS patchset: 5572 + CVS date: 2002/07/25 17:26:12 + +commit 2881b1bb53f7bec6bfdd84d22b99ac2c1fe58902 +Author: jbj +Date: Thu Jul 25 17:03:11 2002 +0000 + + - python: remove the old initdb/rebuilddb methods, use ts.fooDB(). + - python: 1st crack at backport to 1.5.2. + + CVS patchset: 5571 + CVS date: 2002/07/25 17:03:11 + +commit 81fef9848051e5068694cde9b3c2be743d5a93e1 +Author: jbj +Date: Thu Jul 25 00:13:25 2002 +0000 + + - python: add ts.hdrCheck(), ts.rebuildDB() methods. + - python: iterating on an ts object returns transaction elements now. + - add yellowdog as vendor. + + CVS patchset: 5570 + CVS date: 2002/07/25 00:13:25 + +commit c4f6f42f9458f0b20f16138ddc6f91f201c6ef03 +Author: jbj +Date: Wed Jul 24 18:52:22 2002 +0000 + + - fix: segfault if given a text file as 2nd arg to -Uvh (#69508). + + CVS patchset: 5569 + CVS date: 2002/07/24 18:52:22 + +commit ede1f445e09895daee8bce8a2ddc9200839ee5de +Author: jbj +Date: Wed Jul 24 16:21:23 2002 +0000 + + - verify signatures/digests retrieved through rpmdbNextIterator(). + - imbue %ghost with missingok attribute with --verify (#68933). + + CVS patchset: 5568 + CVS date: 2002/07/24 16:21:23 + +commit 6540da425629bf45020047214b81e156c62c7d7b +Author: jbj +Date: Sun Jul 21 22:37:14 2002 +0000 + + fix: Header SHA1 was giving false positive. + + CVS patchset: 5567 + CVS date: 2002/07/21 22:37:14 + +commit 6af194ed8eae2111a296a7b400a229f0df336a2b +Author: jbj +Date: Sun Jul 21 22:06:19 2002 +0000 + + - add methods to make signature handling opaque wrto rpmts. + + CVS patchset: 5566 + CVS date: 2002/07/21 22:06:19 + +commit c2ffec4c6ff43026abea088a36360fbacfc80282 +Author: jbj +Date: Sun Jul 21 14:23:20 2002 +0000 + + Remove obsolete files. + + CVS patchset: 5565 + CVS date: 2002/07/21 14:23:20 + +commit 6eecde7ae6ef5e39945054716e4d69e77378ff8d +Author: jbj +Date: Sun Jul 21 14:20:41 2002 +0000 + + Update to gettext-0.11.2-3 intl contents. + + CVS patchset: 5564 + CVS date: 2002/07/21 14:20:41 + +commit 22016eccf09b1b396a3c536afc8c0b9e1afe1c62 +Author: jbj +Date: Sun Jul 21 14:18:04 2002 +0000 + + Update to gettext COPY.LIB-2.1 + + CVS patchset: 5563 + CVS date: 2002/07/21 14:18:04 + +commit 6bb9e27c57b31bc4634c15ddaa118e2202248e51 +Author: jbj +Date: Sun Jul 21 14:17:23 2002 +0000 + + Update to gettext/intl license. + + CVS patchset: 5562 + CVS date: 2002/07/21 14:17:23 + +commit 293a81e2590888951a1341341eb3ff034b8a0406 +Author: jbj +Date: Sat Jul 20 21:07:31 2002 +0000 + + - version added to *.la dependency libraries (#69063). + - expose digests in rpmio API, but hide internal beecrypt API (#68999). + + CVS patchset: 5561 + CVS date: 2002/07/20 21:07:31 + +commit bfb8488c10a5dfccbcb7c556408b300f8901cd88 +Author: jbj +Date: Sat Jul 20 19:02:40 2002 +0000 + + - popt: parse file into string of options (#56860). + + CVS patchset: 5560 + CVS date: 2002/07/20 19:02:40 + +commit c499cd119c15536c0d4742077fa8c73fa92dace6 +Author: jbj +Date: Fri Jul 19 20:26:38 2002 +0000 + + Remove foo.iter() method, use tp_iter mechanism, for rpmmi/rpmds/rpmfi. + + CVS patchset: 5559 + CVS date: 2002/07/19 20:26:38 + +commit 6c4025a55b46c33c8eaffe21b942aeb83fe08a3e +Author: jbj +Date: Thu Jul 18 21:42:18 2002 +0000 + + up2date functional on rpm-python-4.1 bindings. + + CVS patchset: 5558 + CVS date: 2002/07/18 21:42:18 + +commit 1adc12b6875596843ec98d3849206aefdc4d5679 +Author: jbj +Date: Mon Jul 15 21:15:22 2002 +0000 + + Clarify intl licensing. + + CVS patchset: 5555 + CVS date: 2002/07/15 21:15:22 + +commit 3ea74aa3c7203c10ad97326778e22b1e654eefc7 +Author: jbj +Date: Sun Jul 14 21:23:29 2002 +0000 + + - python: sanity check fixes on rpmts/rpmte methods. + + CVS patchset: 5554 + CVS date: 2002/07/14 21:23:29 + +commit 8caf68303188699c1a1d9499c53a43794a86d922 +Author: jbj +Date: Sat Jul 13 19:54:36 2002 +0000 + + - teach gendiff about unreadable files (#42666). + + CVS patchset: 5553 + CVS date: 2002/07/13 19:54:36 + +commit fa1098b41069d66a3c7b6ba2bc07dba945ebc850 +Author: jbj +Date: Sat Jul 13 19:32:42 2002 +0000 + + Use ${MAKE}, not make, for portability. + + CVS patchset: 5552 + CVS date: 2002/07/13 19:32:42 + +commit 425a2d3783c62095bfa76f1b3d901b42069b1ab6 +Author: jbj +Date: Sat Jul 13 19:18:43 2002 +0000 + + - popt: mingw32 portability configure check (#67911). + + CVS patchset: 5551 + CVS date: 2002/07/13 19:18:43 + +commit 261b4a2ecbc7b4ccef094490c74e90f8cfdacfff +Author: jbj +Date: Sat Jul 13 19:08:51 2002 +0000 + + - install rpmal.h and rpmhash.h, implicit rpmps.hinclude, for now. + - revert headerFree/headerLink/headerUnlink debugging. + + CVS patchset: 5550 + CVS date: 2002/07/13 19:08:51 + +commit b9df0c51e490b2a2e158a8525d7753cb1fe1bc6e +Author: jbj +Date: Fri Jul 12 21:59:20 2002 +0000 + + - skip signing packages already signed with same key (#62118). + + CVS patchset: 5549 + CVS date: 2002/07/12 21:59:20 + +commit 4f819b92d4d81d8d14fd0027bdf7486acff8fe23 +Author: jbj +Date: Fri Jul 12 20:29:35 2002 +0000 + + Fix format translations (#68708). + + CVS patchset: 5548 + CVS date: 2002/07/12 20:29:35 + +commit d132234000940b4c7b0f1d91ec8f8c27f184914c +Author: jbj +Date: Fri Jul 12 19:09:09 2002 +0000 + + - display signature details using rpm -qi + + CVS patchset: 5547 + CVS date: 2002/07/12 19:09:09 + +commit 1bf723fca490b598fa289ddcd437bc61c87d4ef4 +Author: jbj +Date: Thu Jul 11 21:47:51 2002 +0000 + + - update for sv.po. + + CVS patchset: 5545 + CVS date: 2002/07/11 21:47:51 + +commit 1bbc4b2c373811287f7f199f38485eb9e394939f +Author: jbj +Date: Thu Jul 11 16:44:55 2002 +0000 + + - fix: repair 2ndary match criteria with rpmdb iterators. + + CVS patchset: 5544 + CVS date: 2002/07/11 16:44:55 + +commit f0ad50e2669da6cedcec2c193cc9783cf63091a9 +Author: jbj +Date: Tue Jul 9 15:35:57 2002 +0000 + + - placeholders for manifest constants for SuSE patch packages. + + CVS patchset: 5543 + CVS date: 2002/07/09 15:35:57 + +commit 241fad12870c58bd76468267f2816d409dbc7e57 +Author: jbj +Date: Mon Jul 8 14:21:26 2002 +0000 + + Propagate splint-3.0.1.7 close(2) internalState annotation throughout. + + CVS patchset: 5542 + CVS date: 2002/07/08 14:21:26 + +commit a273ea6a095daa16e663d96e474c75115c3c2bdc +Author: jbj +Date: Sat Jul 6 18:48:09 2002 +0000 + + - fix: permit deletions of added packages (#67108). + + CVS patchset: 5541 + CVS date: 2002/07/06 18:48:09 + +commit 68b42bb762d650fe68d4bcc8827051e08a69201c +Author: jbj +Date: Fri Jul 5 16:51:57 2002 +0000 + + - update rpmcache.8. + + CVS patchset: 5540 + CVS date: 2002/07/05 16:51:57 + +commit 6dca216517ffb04f30d84ce1d1335efc37e7736d +Author: jbj +Date: Thu Jul 4 21:08:05 2002 +0000 + + - fix: forgot lazy open of database on --freshen path (#67907). + - proof-of-concept rpmcache functionality. + + CVS patchset: 5539 + CVS date: 2002/07/04 21:08:05 + +commit af3c677f06687e5ad1e33eb24f984c7ac5ff2a33 +Author: jbj +Date: Wed Jul 3 14:01:49 2002 +0000 + + - use rpmfi in showQueryPackage(), eliminating headerGetEntry(). + + CVS patchset: 5538 + CVS date: 2002/07/03 14:01:49 + +commit e5fb770e7d9aac53a513965c0f2bcf360934794b +Author: jbj +Date: Tue Jul 2 23:54:35 2002 +0000 + + Add boundsread annotations throughout, enable +bounds checking. + Start narrowing the scope of bounds annotations by adding more annotations. + + CVS patchset: 5537 + CVS date: 2002/07/02 23:54:35 + +commit 77076c7c8d83f8b783634c7328b132b938389987 +Author: jbj +Date: Tue Jul 2 13:16:50 2002 +0000 + + add (disabled for now) dependency check to rpmgraph. + splint and gettext fiddles. + + CVS patchset: 5536 + CVS date: 2002/07/02 13:16:50 + +commit 8c4991e9d533de552b957ea445d65f6834205f29 +Author: jbj +Date: Sun Jun 30 22:47:32 2002 +0000 + + - warn only once for each NOKEY/UNTRUSTED key id. + - factor common options into table, add rpmcliInit() and rpmcliFini(). + - add preliminary rpmgraph(8) and rpmcache(8) executables to rpm-devel. + + CVS patchset: 5535 + CVS date: 2002/06/30 22:47:32 + +commit 10e3aaa69f3d7f74958e3dd0d0b471b296a1bb23 +Author: jbj +Date: Sat Jun 29 03:16:34 2002 +0000 + + - open rpmdb early RDONLY, reopen later RDWR, avoid signed srpm noise. + + CVS patchset: 5534 + CVS date: 2002/06/29 03:16:34 + +commit 3a76f46b137107eb66f15f390959e985ce2028d9 +Author: jbj +Date: Fri Jun 28 23:58:34 2002 +0000 + + - rescusitate remote ftp globs (#67678). + + CVS patchset: 5533 + CVS date: 2002/06/28 23:58:34 + +commit d89ce5854d39a9e896759fb96e6e303c67573bb6 +Author: jbj +Date: Fri Jun 28 21:54:24 2002 +0000 + + - disambiguate added/installed dependency failures (#50388). + + CVS patchset: 5532 + CVS date: 2002/06/28 21:54:24 + +commit f5fc8957b433616cf5010e26866205985c385479 +Author: jbj +Date: Fri Jun 28 14:55:04 2002 +0000 + + New fangled head syntax. + + CVS patchset: 5531 + CVS date: 2002/06/28 14:55:04 + +commit 12191c8ea08e7fbd3468b33d41da97b5bfa2cad7 +Author: jbj +Date: Fri Jun 28 14:51:17 2002 +0000 + + - find-lang.sh: make sure that mo pattern matches leading '/' (#67368). + + CVS patchset: 5530 + CVS date: 2002/06/28 14:51:17 + +commit ef1b1d0d2f30f69aac9288820b84322ddda3d265 +Author: jbj +Date: Fri Jun 28 13:04:38 2002 +0000 + + - fix: multiple relocations (#67596). + - add --build/--program-prefix, delete libtoolize, from %configure. + + CVS patchset: 5529 + CVS date: 2002/06/28 13:04:38 + +commit 4252cddc29cd3e60bdc6a0791c6d2dd58fcb3c2e +Author: jbj +Date: Fri Jun 28 00:35:57 2002 +0000 + + Establish mechanism for up2date to reconfigure rpmlib. + Disambiguate failures to import with error messages. + + CVS patchset: 5528 + CVS date: 2002/06/28 00:35:57 + +commit 446dfecf4305808f80cae52b8432f1434d6bb4f8 +Author: jbj +Date: Thu Jun 27 17:04:27 2002 +0000 + + Add requirement on patch. + + CVS patchset: 5527 + CVS date: 2002/06/27 17:04:27 + +commit 37a10dd3bc862a2d69945e3a90fc581f49ee574a +Author: jbj +Date: Thu Jun 27 16:37:15 2002 +0000 + + - use rpmdb-redhat for suggestions if/when configured (#67430). + + CVS patchset: 5526 + CVS date: 2002/06/27 16:37:15 + +commit 5d1dadc96ee51d9d8aa6b5a43363773d2f601fd4 +Author: jbj +Date: Tue Jun 25 18:43:40 2002 +0000 + + - python: link internal libelf (if used) directly into rpmmodule.so. + + CVS patchset: 5525 + CVS date: 2002/06/25 18:43:40 + +commit 4826782959c1ba99bea48f231678ffee3b990377 +Author: jbj +Date: Mon Jun 24 15:55:30 2002 +0000 + + Reenable "make install". + + CVS patchset: 5524 + CVS date: 2002/06/24 15:55:30 + +commit 937fa6e4ea08e001473e4345b966ce2c64ddf0be +Author: cturner +Date: Sun Jun 23 20:04:46 2002 +0000 + + bump version for release to CPAN + + CVS patchset: 5523 + CVS date: 2002/06/23 20:04:46 + +commit 13d177beb233e111b3ede3edc1340747433a7556 +Author: jbj +Date: Sun Jun 23 19:47:08 2002 +0000 + + Add boundswrite annotations everywhere. + + CVS patchset: 5522 + CVS date: 2002/06/23 19:47:08 + +commit 05cb73a7ee762065339393057d421613866e0418 +Author: jbj +Date: Sat Jun 22 18:51:56 2002 +0000 + + Factor bounds checking annotations into source code. + + CVS patchset: 5521 + CVS date: 2002/06/22 18:51:56 + +commit ba41c1ccb13a7a27466470e501a0d4f30fddec40 +Author: jbj +Date: Fri Jun 21 18:14:03 2002 +0000 + + Check S_ISREG explicitly to avoid '?' in ls(1)-like displays. + + CVS patchset: 5520 + CVS date: 2002/06/21 18:14:03 + +commit 2933d0ec0cca4b2dadb1c3e8427b49b8ae262272 +Author: jbj +Date: Fri Jun 21 18:00:50 2002 +0000 + + - fix: reading macro files can corrupt memory if BUFSIZ is teensy. + - fix: assertion failure iff incomplete package install (#66837). + + CVS patchset: 5519 + CVS date: 2002/06/21 18:00:50 + +commit a6827b5a8043f87b59ade4fd02ae256a3937b9f1 +Author: jbj +Date: Thu Jun 20 23:08:34 2002 +0000 + + - resurrect libelf with Elf64, prelink verify should work everywhere. + + CVS patchset: 5518 + CVS date: 2002/06/20 23:08:34 + +commit f96fc8d89419570a3fbf6b198d5d35ecee2ed6a3 +Author: jbj +Date: Thu Jun 20 21:53:31 2002 +0000 + + - resurrect libelf with Elf64, prelink verify should work everywhere. + autostuff fiddles. + + CVS patchset: 5517 + CVS date: 2002/06/20 21:53:31 + +commit e96eefbe680b180d854eaea2e5023e088745ed7f +Author: jbj +Date: Thu Jun 20 21:49:33 2002 +0000 + + Remove autogenerated file. + + CVS patchset: 5516 + CVS date: 2002/06/20 21:49:33 + +commit 71077a3682137681055e588cd3e4d85fc14dff4f +Author: jbj +Date: Thu Jun 20 20:39:35 2002 +0000 + + Remove autogenerated files from CVS. + + CVS patchset: 5515 + CVS date: 2002/06/20 20:39:35 + +commit 110df96c22325d96559d5d66a89308c1fc708f9c +Author: jbj +Date: Thu Jun 20 17:17:23 2002 +0000 + + - add translated man pages from PLD. + + CVS patchset: 5514 + CVS date: 2002/06/20 17:17:23 + +commit be2a538537041702617102a5a26cf00f1fcf9578 +Author: jbj +Date: Thu Jun 20 14:50:02 2002 +0000 + + Merge in PLD non-english man pages. + + CVS patchset: 5513 + CVS date: 2002/06/20 14:50:02 + +commit 0a7481d0f777a6fc0e578b31d08312f5376cb125 +Author: jbj +Date: Thu Jun 20 02:19:21 2002 +0000 + + - make sure that rpm can verify prelinked shared libraries. + - don't install /usr/lib/rpm/redhat per-vendor configuration anymore. + + CVS patchset: 5512 + CVS date: 2002/06/20 02:19:21 + +commit 3255a1e854607cd1f39e3f0688f63eb790387f87 +Author: jbj +Date: Wed Jun 19 19:27:20 2002 +0000 + + Annotate incondefs in source code. + + CVS patchset: 5511 + CVS date: 2002/06/19 19:27:20 + +commit edd89aa67e871430b73d103ca92b9baa0432f18b +Author: jbj +Date: Wed Jun 19 18:56:15 2002 +0000 + + splint fiddles. + + CVS patchset: 5510 + CVS date: 2002/06/19 18:56:15 + +commit 49658e0fffae92961788e6067fa37d8065a0b695 +Author: jbj +Date: Wed Jun 19 18:52:46 2002 +0000 + + Annotate incondefs in source code. + + CVS patchset: 5509 + CVS date: 2002/06/19 18:52:46 + +commit 448e44da6c79f1eb6789d6922e05a4b15e66c96a +Author: jbj +Date: Tue Jun 18 17:52:02 2002 +0000 + + Add a couple of toy programs. + + CVS patchset: 5508 + CVS date: 2002/06/18 17:52:02 + +commit 7de7470228c6d8adc42872554b5de7b8dee3f261 +Author: jbj +Date: Tue Jun 18 17:00:30 2002 +0000 + + Splint annotations and spec file. + + CVS patchset: 5507 + CVS date: 2002/06/18 17:00:30 + +commit cd8a7dcf4e0b6a45fcb06ce1555504f3bcd4f6ee +Author: jbj +Date: Mon Jun 17 16:38:22 2002 +0000 + + Initial revision + + CVS patchset: 5498 + CVS date: 2002/06/17 16:38:22 + +commit dd5ee218a552c5ffe33325ba6eddf3ebc681475f +Author: jbj +Date: Sat Jun 15 19:53:27 2002 +0000 + + beecrypt.gas.h needs to be carried into the tarball. + + CVS patchset: 5496 + CVS date: 2002/06/15 19:53:27 + +commit 20901c1a62c2ec5bdff92bf2881ec51cb5ce7656 +Author: jbj +Date: Sat Jun 15 19:43:41 2002 +0000 + + - beecrypt: merge changes from beecrypt-2.3.0. + - beecrypt: merge doxygen markup with rpmapi doco. + - beecrypt: revert cpu/arch compile option mixup (#66752). + + CVS patchset: 5495 + CVS date: 2002/06/15 19:43:41 + +commit 8336b090a9996532e63e32cd8c483a9128be2dc9 +Author: jbj +Date: Sat Jun 15 19:00:35 2002 +0000 + + Ignore generated files. + + CVS patchset: 5494 + CVS date: 2002/06/15 19:00:35 + +commit 73554c7eb5879d0fbac43e65be35840fd20c374a +Author: jbj +Date: Sat Jun 15 18:58:33 2002 +0000 + + Remove all generated files from CVS. + + CVS patchset: 5493 + CVS date: 2002/06/15 18:58:33 + +commit 83b4afa7a8ec57dc4f824b7d52b1a37e15c8d7a4 +Author: jbj +Date: Sat Jun 15 18:55:26 2002 +0000 + + DOn't need generated config.h.in in CVS. + + CVS patchset: 5492 + CVS date: 2002/06/15 18:55:26 + +commit 94250cf3b4a69997befaf5129ee23db4dcd54284 +Author: jbj +Date: Sat Jun 15 18:52:02 2002 +0000 + + Don't need Makefile.in files, they're generated. + + CVS patchset: 5491 + CVS date: 2002/06/15 18:52:02 + +commit 1412d46c3c97f5fb6d8dcf46a827529800a33a96 +Author: jbj +Date: Sat Jun 15 18:49:02 2002 +0000 + + Make check and splint clean. + Don't install fooopt files, they are merely ASM_FOO switches. + Don't install beecrypt.{api,win}.h + Get rid of autocruft files in CVS. + + CVS patchset: 5490 + CVS date: 2002/06/15 18:49:02 + +commit ba1865e6077d3cbc1d877e1c711bd27503c4a5bc +Author: jbj +Date: Sat Jun 15 18:11:05 2002 +0000 + + Sanity. + + CVS patchset: 5489 + CVS date: 2002/06/15 18:11:05 + +commit 2acd2c7654396467c2a87f64825300a1348b1ec9 +Author: jbj +Date: Sat Jun 15 14:28:29 2002 +0000 + + Before merging new-fangled configure.ac + + CVS patchset: 5488 + CVS date: 2002/06/15 14:28:29 + +commit 4d5f1d55b940b2120643eb3c84ef2186b1c2edf0 +Author: jbj +Date: Sat Jun 15 14:19:38 2002 +0000 + + Make sure that "make dist" is functional. + Rename fips180opt -> sha1opt platform specific asm files. + + CVS patchset: 5487 + CVS date: 2002/06/15 14:19:38 + +commit 3b9d647cc134a1ffbc32bda018b298de48d2cfc6 +Author: jbj +Date: Sat Jun 15 13:24:42 2002 +0000 + + Expose aes constant tables, needed by the asm voodoo. + + CVS patchset: 5486 + CVS date: 2002/06/15 13:24:42 + +commit 82e03255833e87efe6e38a2c2c04539d610303d4 +Author: jbj +Date: Fri Jun 14 21:05:36 2002 +0000 + + Doxygen and splint fiddles. + + CVS patchset: 5485 + CVS date: 2002/06/14 21:05:36 + +commit 609f6ba9c8c281275fbe8948318050c172e46462 +Author: jbj +Date: Fri Jun 14 20:31:05 2002 +0000 + + First crack at merging beecrypt-2.3.0 changes. + + CVS patchset: 5484 + CVS date: 2002/06/14 20:31:05 + +commit 243ff70d72f270941de5ac0122b8a72eb46a65f1 +Author: jbj +Date: Wed Jun 12 14:58:58 2002 +0000 + + Add bugzilla # to cheangelog. + + CVS patchset: 5483 + CVS date: 2002/06/12 14:58:58 + +commit 93e968c51534a33f75eaa0459edd8afa1008744a +Author: jbj +Date: Wed Jun 12 14:54:06 2002 +0000 + + Orphan. + + CVS patchset: 5482 + CVS date: 2002/06/12 14:54:06 + +commit 93ae345321b41b7e964fc5f31c95a62039e2afbe +Author: jbj +Date: Wed Jun 12 14:52:59 2002 +0000 + + - fix: separate existence and number checks for problems found. + + CVS patchset: 5481 + CVS date: 2002/06/12 14:52:59 + +commit d523f4266d6860ed099bae737076d6fc971b3a45 +Author: jbj +Date: Mon Jun 10 16:07:12 2002 +0000 + + - document digital signature verification in rpm.8. + + CVS patchset: 5480 + CVS date: 2002/06/10 16:07:12 + +commit bafe5279493a2295d161b35ccbbcea785cfe2089 +Author: jbj +Date: Mon Jun 10 13:07:32 2002 +0000 + + Document file attribute opt outs in verify mode. + Document --nodigest/--nosignature/--nosuggest. + + CVS patchset: 5479 + CVS date: 2002/06/10 13:07:32 + +commit db4e72211ef17d0bd061d3881ee5dc661289fb90 +Author: jbj +Date: Sun Jun 9 22:15:16 2002 +0000 + + Sanity. + + CVS patchset: 5477 + CVS date: 2002/06/09 22:15:16 + +commit d29a60e1f20312a0067fe3a1336a1faaf69f420e +Author: jbj +Date: Sun Jun 9 17:12:35 2002 +0000 + + Update rpm.8 and rpmbuild.8 from docbook in max-rpm CVS. + + CVS patchset: 5475 + CVS date: 2002/06/09 17:12:35 + +commit 2d531597319a7daf6ad126ac0f93096d3180af83 +Author: jbj +Date: Fri Jun 7 13:26:07 2002 +0000 + + Orphans. + + CVS patchset: 5472 + CVS date: 2002/06/07 13:26:07 + +commit 128357ffba2916f1e5e322a28361b8eaa9a5b494 +Author: jbj +Date: Fri Jun 7 13:12:34 2002 +0000 + + Changes from bsddb3-3.3.4. + + CVS patchset: 5471 + CVS date: 2002/06/07 13:12:34 + +commit 8d1ff9feac92bae03417280eebae5c19a1e7661a +Author: jbj +Date: Wed Jun 5 22:07:55 2002 +0000 + + Lclint fiddles. + + CVS patchset: 5468 + CVS date: 2002/06/05 22:07:55 + +commit e8f1e413309a4df972a029c82f469b4b5b74e3a6 +Author: jbj +Date: Wed Jun 5 21:04:32 2002 +0000 + + Add xmlspec-20020605.diff orphans. + + CVS patchset: 5467 + CVS date: 2002/06/05 21:04:32 + +commit 8780c9932c35ce442f2cde96724d9a86e6f8f65a +Author: jbj +Date: Wed Jun 5 21:02:39 2002 +0000 + + Add xmlspec-20020605.diff changes. + + CVS patchset: 5466 + CVS date: 2002/06/05 21:02:39 + +commit 2395582ab025e75aae8f51c8787d34c5c961f88c +Author: jbj +Date: Wed Jun 5 20:26:57 2002 +0000 + + - python: portability fiddles (#54350). + - check inodes (but not blocks) on FAT file systems (#64256). + + CVS patchset: 5465 + CVS date: 2002/06/05 20:26:57 + +commit 14d95f25f736587e23b5aa8a2302eb5f3b168df9 +Author: jbj +Date: Tue Jun 4 22:02:15 2002 +0000 + + - use /etc/rpm/platform (if it exists), rather than uname(2), for arch. + + CVS patchset: 5464 + CVS date: 2002/06/04 22:02:15 + +commit dd50743445cb505bb67d5d43d566b51409b8df0e +Author: jbj +Date: Tue Jun 4 15:09:19 2002 +0000 + + Add -I../rpmdb. + + CVS patchset: 5463 + CVS date: 2002/06/04 15:09:19 + +commit 9d880e91429b66f64f4d162a7b50ef5c4c5ac7f3 +Author: jbj +Date: Tue Jun 4 15:06:36 2002 +0000 + + Update from "Jaco Greeff" . + + CVS patchset: 5462 + CVS date: 2002/06/04 15:06:36 + +commit bf7fc63baa6fe063bc159011e796d88117723bcd +Author: jbj +Date: Mon Jun 3 23:27:05 2002 +0000 + + Teach doxygen about python/*-py.c files. + Make sure that automake includes the python/test/* files. + + CVS patchset: 5461 + CVS date: 2002/06/03 23:27:05 + +commit 37426c66d793a8a287a506f49e2df2a753210254 +Author: jbj +Date: Mon Jun 3 20:56:33 2002 +0000 + + - python: include rpmdb module, renamed from bsddb3. + + CVS patchset: 5460 + CVS date: 2002/06/03 20:56:33 + +commit 9b2ac14866c7740e67e17d37392f2397cd1dcdd3 +Author: jbj +Date: Mon Jun 3 20:44:08 2002 +0000 + + Functional unit tests after renaming bsdddb3 -> rpmdb, _db -> _rpmdb. + + CVS patchset: 5459 + CVS date: 2002/06/03 20:44:08 + +commit b3308c5f878ec970f48c7559bb62646b182c3128 +Author: jbj +Date: Sun Jun 2 20:50:48 2002 +0000 + + Clone an rpmdb module from bsddb3 (rpmdb/*.py need work). + + CVS patchset: 5458 + CVS date: 2002/06/02 20:50:48 + +commit 26db42d8cc86e054e6ed8a1a12a3d06083c933be +Author: jbj +Date: Sat Jun 1 15:48:00 2002 +0000 + + - fix: use getgrnam, not getpwnam, to convert gid -> group. + - fix: avoid sign extension, use only 16 bits, when verifying rdev. + - python: separate {add,del}Macro methods, prepare for macro dictionary. + - i18n: copy current production PO files to top-of-stack. + + CVS patchset: 5457 + CVS date: 2002/06/01 15:48:00 + +commit 3c1ca5b1aabc175d4e7948e6e0f8eb90315495ea +Author: jbj +Date: Thu May 30 15:08:46 2002 +0000 + + Add -I../rpmdb and -I../popt + + CVS patchset: 5456 + CVS date: 2002/05/30 15:08:46 + +commit b2048a714003e34bb415c991c8c082dde4db8280 +Author: jbj +Date: Thu May 30 15:03:17 2002 +0000 + + Initial revision + + CVS patchset: 5454 + CVS date: 2002/05/30 15:03:17 + +commit c3ed66c29857b6eb86f5c4eda555e797adf64199 +Author: jbj +Date: Tue May 28 23:06:44 2002 +0000 + + - eliminate legacy db methods, add ts.dbMatch method. + + CVS patchset: 5453 + CVS date: 2002/05/28 23:06:44 + +commit 3b633106748d2677dc129e732b150054b5bb91fd +Author: jbj +Date: Tue May 28 16:22:42 2002 +0000 + + - add rpmal/rpmte/rpmfd methods to bindings. + - drop cpanflute and cpanflute2, will be in Chip's CPAN package now. + + CVS patchset: 5452 + CVS date: 2002/05/28 16:22:42 + +commit 23bbe266cc1856fbbb29d8b8ea1cc52d7372f9e1 +Author: jbj +Date: Mon May 27 21:40:08 2002 +0000 + + Add bindings for rpmte and FD_t. + + CVS patchset: 5451 + CVS date: 2002/05/27 21:40:08 + +commit 259bb824ccefadfc9a53f8307b3fc01f5324b5fa +Author: jbj +Date: Mon May 27 18:12:12 2002 +0000 + + Add rpmal bindings, Grand Renaming to rpmalFoo(). + + CVS patchset: 5450 + CVS date: 2002/05/27 18:12:12 + +commit ca60c30e3a048234fa3e6736d3145af6128b6f8c +Author: jbj +Date: Sun May 26 18:40:25 2002 +0000 + + - fix: un-resurrect "()(64bit)" markings using objdump on i386. + + CVS patchset: 5449 + CVS date: 2002/05/26 18:40:25 + +commit 3067a2c91dc0e85acab883e3fccc5caf15247d89 +Author: jbj +Date: Sat May 25 17:15:20 2002 +0000 + + - re-enable rpm-python sub-package. + - fix: resurrect "()(64bit)" markings using objdump. + + CVS patchset: 5448 + CVS date: 2002/05/25 17:15:20 + +commit 4f1bba10aa4a9463b068aff002e7c8ffd36f21c1 +Author: jbj +Date: Thu May 23 21:06:42 2002 +0000 + + - add rpmds/rpmfi/rpmts methods to bindings. + + CVS patchset: 5447 + CVS date: 2002/05/23 21:06:42 + +commit aeb8ed2318f0a486ee258cc39f9546981386b957 +Author: jbj +Date: Thu May 23 19:42:23 2002 +0000 + + Create rpmts-py.c. + + CVS patchset: 5446 + CVS date: 2002/05/23 19:42:23 + +commit ed2765de234f2cbcedc363981e852056c9b02315 +Author: jbj +Date: Thu May 23 17:29:21 2002 +0000 + + rpmds and rpmfi iterators, take 0. + + CVS patchset: 5445 + CVS date: 2002/05/23 17:29:21 + +commit 0f0184d17f13b9cb17d6b0ba4aefb29d0ad53e10 +Author: jbj +Date: Thu May 23 00:49:19 2002 +0000 + + Bind rpmds as class derived from header. + + CVS patchset: 5444 + CVS date: 2002/05/23 00:49:19 + +commit 4008c689df96417da550fb8006055e04f553aaf2 +Author: jbj +Date: Tue May 21 16:33:33 2002 +0000 + + Enable CDB access as default. + Remove unused int from dbiIndexSet. + + CVS patchset: 5443 + CVS date: 2002/05/21 16:33:33 + +commit db4f917fa91434a46fedb55abd1f0723f58f15ac +Author: jbj +Date: Tue May 21 14:56:05 2002 +0000 + + Make sure that db.h symlink is created. + + CVS patchset: 5442 + CVS date: 2002/05/21 14:56:05 + +commit 0b61bf14759ea3c8f8ff1442ddad8bd309906e4e +Author: jbj +Date: Tue May 21 00:00:39 2002 +0000 + + Always use cursors. + Use DB_KEYLAST with db->c_put for now, just like rpm-4.0.x. + Make sure that db->c_get is done before doing db->c_del. + Check that CDB access is still functional. + + CVS patchset: 5441 + CVS date: 2002/05/21 00:00:39 + +commit 386882db7a38f24e0222a2ae94d4c93a34af0d37 +Author: jbj +Date: Sun May 19 23:37:24 2002 +0000 + + - fix: synthesize unpacking progress callbacks for packages w/o files. + + CVS patchset: 5440 + CVS date: 2002/05/19 23:37:24 + +commit 2126e4ad09e175a4356a29ab03756dbbeb8c976f +Author: jbj +Date: Sun May 19 18:42:25 2002 +0000 + + - Grand Renaming of rpm data types. + + CVS patchset: 5439 + CVS date: 2002/05/19 18:42:25 + +commit 38385c8d6323e3695e0b267ab7b2fcffff9f72b3 +Author: jbj +Date: Fri May 17 21:08:39 2002 +0000 + + Transactions made increasingly opaque. + + CVS patchset: 5438 + CVS date: 2002/05/17 21:08:39 + +commit 076a6e29c5c8a35a5f78ae2a15339d030cfe2fdf +Author: jbj +Date: Thu May 16 16:55:21 2002 +0000 + + - opaque (well mostly) rpmTransactionSet using methods. + + CVS patchset: 5437 + CVS date: 2002/05/16 16:55:21 + +commit bc9d22eeb9034966654091306e3e3fc9a9dd7c71 +Author: jbj +Date: Mon May 13 22:45:30 2002 +0000 + + AIX fiddles (Albert Chin ). + + CVS patchset: 5434 + CVS date: 2002/05/13 22:45:30 + +commit f9f1064dc0681321e13d240b193895ecc7d6d5cf +Author: jbj +Date: Mon May 13 22:34:25 2002 +0000 + + Eliminate bogus strerror message for manifests. + + CVS patchset: 5433 + CVS date: 2002/05/13 22:34:25 + +commit 5a51033929040439103c27d9cf070079c756d8f9 +Author: rjray +Date: Fri May 10 08:09:51 2002 +0000 + + Changes for 0.40, and they are many. + + CVS patchset: 5432 + CVS date: 2002/05/10 08:09:51 + +commit 9d37ae1efe6157bb49c4872eadce5b30db67952d +Author: rjray +Date: Fri May 10 08:04:55 2002 +0000 + + RPM generation now works, mostly due to backing out the changes after + discussing release and distribution plans with the rpm maintainer. + + CVS patchset: 5431 + CVS date: 2002/05/10 08:04:55 + +commit f76caca7d74805d2514af20c0b1a6313f3d5251b +Author: rjray +Date: Fri May 10 07:38:58 2002 +0000 + + Allow new() to take options like TIEHASH does. Also documents new. + + CVS patchset: 5430 + CVS date: 2002/05/10 07:38:58 + +commit 76c37b4c7634a086e152c4cb155e2a563fc2b74b +Author: rjray +Date: Fri May 10 07:38:21 2002 +0000 + + Some casts to reduce compiler warnings on some systems. + + CVS patchset: 5429 + CVS date: 2002/05/10 07:38:21 + +commit 5a5b62e9c14f51d430c11642e05d77052c223ee8 +Author: rjray +Date: Fri May 10 07:37:08 2002 +0000 + + Changed some safemalloc calls to New/Newz. Put a fix in FIRSTKEY to avoid + getting a null back from the initial tag look-up. Cause DESTROY to free some + memory that was being forgotten. Pulled out all the 3.0 and pre-4.0.3 support + code. + + CVS patchset: 5428 + CVS date: 2002/05/10 07:37:08 + +commit 97aaa7f141caf7f1a00808cac245ce93c7cbc365 +Author: rjray +Date: Fri May 10 05:53:48 2002 +0000 + + Turned a macro call that was using safemalloc into a direct call to + Newz. Turned some calls to safefree into Safefree. + + CVS patchset: 5427 + CVS date: 2002/05/10 05:53:48 + +commit e17659692997068b4cd5ee4a91f2aa9ee093b89a +Author: rjray +Date: Fri May 10 05:50:19 2002 +0000 + + Removed uneeded #define + + CVS patchset: 5426 + CVS date: 2002/05/10 05:50:19 + +commit 4749da2d88ec35d6dc13a72a02affad56747f723 +Author: jbj +Date: Tue May 7 14:26:39 2002 +0000 + + Sanity. + + CVS patchset: 5425 + CVS date: 2002/05/07 14:26:39 + +commit b4c604e75c8550c5e63d5a6781e03ef40b78cca4 +Author: jbj +Date: Tue May 7 01:07:41 2002 +0000 + + - plug most install mode leaks. + + CVS patchset: 5424 + CVS date: 2002/05/07 01:07:41 + +commit e6ba507f771047db75773b166dc137b0a3e46ef7 +Author: jbj +Date: Mon May 6 19:48:14 2002 +0000 + + - rework most of rpmdb.c prepatory to implementing duplicates. + - fix: 2 memory leaks in headerSprintf. + - fix: db mire's access out-of-bounds memory. + + CVS patchset: 5423 + CVS date: 2002/05/06 19:48:14 + +commit 287934f4aabcaf6455a40754b0fca83492b5f825 +Author: jbj +Date: Sun May 5 21:49:45 2002 +0000 + + Add mi_key and mi_data to db match iterator. + + CVS patchset: 5422 + CVS date: 2002/05/05 21:49:45 + +commit 81c2a9d267450f62264576199aa5b607391ac3f1 +Author: jbj +Date: Sat May 4 20:13:14 2002 +0000 + + Add toy db->associate, db->join, dbcursor->c_pget wrappers. + + CVS patchset: 5421 + CVS date: 2002/05/04 20:13:14 + +commit 40aceb784a9421b0410210187668522525594b7d +Author: jbj +Date: Sat May 4 16:41:01 2002 +0000 + + Pass dbiGet() flags from application. + + CVS patchset: 5420 + CVS date: 2002/05/04 16:41:01 + +commit d30a242160781822b0d6f5bfd40a2c7aca923f46 +Author: jbj +Date: Sat May 4 12:55:03 2002 +0000 + + Eliminate another layer of db abstraction, continue eradicating db1. + + CVS patchset: 5419 + CVS date: 2002/05/04 12:55:03 + +commit 3abd712fc3a4ba9c485283d601989ee7de1c21b0 +Author: jbj +Date: Sat May 4 00:02:37 2002 +0000 + + Wire key DBT through the API. + + CVS patchset: 5418 + CVS date: 2002/05/04 00:02:37 + +commit 48cd520355559a518f5332a01d2869d4f9dbf605 +Author: jbj +Date: Fri May 3 23:26:25 2002 +0000 + + - use DBT_DB_MALLOC to eliminate re-malloc'ing header blobs. + + CVS patchset: 5417 + CVS date: 2002/05/03 23:26:25 + +commit 06b247567ef73e1cb5368ba50549689609a7590a +Author: jbj +Date: Fri May 3 19:06:03 2002 +0000 + + Sanity. + + CVS patchset: 5416 + CVS date: 2002/05/03 19:06:03 + +commit 7b2717efe2916fd714eb2c55ebe1ac754e7c65fd +Author: jbj +Date: Thu May 2 23:34:20 2002 +0000 + + - eliminate db1 support. + - enable CDB by default. + + CVS patchset: 5415 + CVS date: 2002/05/02 23:34:20 + +commit 2b83d36c089f9e27e43e776d08e79d58ec2e6ba8 +Author: jbj +Date: Thu May 2 22:16:30 2002 +0000 + + - eliminate db1 support. + - fix: rpmdb iterator memory leak in python bindings. + - fix: include for 6.2 python modules. + - remove vestiges of mipseb arch (#62408). + + CVS patchset: 5414 + CVS date: 2002/05/02 22:16:30 + +commit cf2484ce1f2225e01b61dabb18a4d54e8fd6e375 +Author: jbj +Date: Wed May 1 22:13:00 2002 +0000 + + - attempt to make peace with automake-1.6.1, autoconf-2.53. + - rip out two layers of dbN gook, internal Berkeley db is here to stay. + + CVS patchset: 5412 + CVS date: 2002/05/01 22:13:00 + +commit 9ecc4d884f3765c4bb19fefff70cbd7d7b1db794 +Author: jbj +Date: Mon Apr 15 13:59:22 2002 +0000 + + Typo. + + CVS patchset: 5407 + CVS date: 2002/04/15 13:59:22 + +commit b463db44dced1a5dd6bab2cb04e8f1a55aa72c67 +Author: jbj +Date: Sun Apr 14 21:48:44 2002 +0000 + + - use build time to choose one of multiple alternative suggestions. + - add --nosuggests to disable suggested resolutions. + - splint fiddles. + + CVS patchset: 5406 + CVS date: 2002/04/14 21:48:44 + +commit e6ebdb1d9fe1fb6077dacd6be378bab982ddcd34 +Author: cturner +Date: Sun Apr 14 05:13:23 2002 +0000 + + vastly improve test suite; add some new methods; add some documentation; use librpm.la to help determine linker parameters + + CVS patchset: 5405 + CVS date: 2002/04/14 05:13:23 + +commit 4fffd96bd361ba9692ebe67d63c978725d9f86d9 +Author: cturner +Date: Sun Apr 14 03:12:14 2002 +0000 + + be smarter about extracting LIBS linker entries + + CVS patchset: 5404 + CVS date: 2002/04/14 03:12:14 + +commit 2b9c26d7b479553827cf77cecf3367cfd297f479 +Author: jbj +Date: Sat Apr 13 19:01:32 2002 +0000 + + Sanity. + + CVS patchset: 5403 + CVS date: 2002/04/13 19:01:32 + +commit e3c57cf71efb077e28106cdaeb6ecc7910ca7aae +Author: jbj +Date: Sat Apr 13 18:52:18 2002 +0000 + + - merge conflicts into problems, handle as transaction set variable. + + CVS patchset: 5402 + CVS date: 2002/04/13 18:52:18 + +commit 46bbc20b324f456a9ff104f5e7300215950fb6c9 +Author: jbj +Date: Sat Apr 13 01:28:20 2002 +0000 + + - use rpmdb-redhat to suggest dependency resolution(s). + + CVS patchset: 5401 + CVS date: 2002/04/13 01:28:20 + +commit 8edea74bb45267034d2e4eb3e39e2883824e03ce +Author: rjray +Date: Fri Apr 12 22:40:11 2002 +0000 + + Added a command-line option to the "perl Makefile.PL" invocation used for + building the Perl-RPM sub-component. This interacts with changes already made + to Perl-RPM/Makefile.PL. + + CVS patchset: 5400 + CVS date: 2002/04/12 22:40:11 + +commit ffe1809d31f18e43be123073afc7314a1652e196 +Author: rjray +Date: Fri Apr 12 22:37:34 2002 +0000 + + This change is not 100% complete, as the Makefile is still unable to create a + working rpm specfile on its own. However, it works to allow seamless building + of the extension outside of a full rpm build, and will recognize the + command-line argument that ../rpm.spec will pass to signal a build in the + larger context. + + CVS patchset: 5399 + CVS date: 2002/04/12 22:37:34 + +commit aaca0fed295459215eb41e40bedbc3fa25fefc5c +Author: rjray +Date: Fri Apr 12 00:16:33 2002 +0000 + + First of two efforts at redefining how multiple packages for one name are + handled. This applies the patch from Gerald Teschl that makes a + multiple match yield the newest, rather than the first one encountered. After + this, I'll try to handle list-context. + + CVS patchset: 5398 + CVS date: 2002/04/12 00:16:33 + +commit 2f1222755ba4574ef358779b53a950bc5bdff1d0 +Author: rjray +Date: Thu Apr 11 23:07:01 2002 +0000 + + Now that rpm 3.0 is no longer supported, the ERR_CHAR_CONST macro is no longer + needed. + + CVS patchset: 5397 + CVS date: 2002/04/11 23:07:01 + +commit 18f406d5e418289151e5c45419b157166a402f5a +Author: rjray +Date: Thu Apr 11 23:06:01 2002 +0000 + + Now that rpm 3.0 is no longer supported, the HDR_ITER_CONST macro is no longer + needed. + + CVS patchset: 5396 + CVS date: 2002/04/11 23:06:01 + +commit a1062052bce4c47b67a158690665263c086f5384 +Author: rjray +Date: Thu Apr 11 22:42:08 2002 +0000 + + Removed all the rpm 3.0 support logic #if/#endif blocks. rpm 3.0 is no longer + supported. + + CVS patchset: 5395 + CVS date: 2002/04/11 22:42:08 + +commit ce0282868bc66e9da507cf34d84de92bd988ab76 +Author: rjray +Date: Thu Apr 11 22:41:15 2002 +0000 + + Removed all the #if/#endif conditionals for rpm 3.0 compatibility. The rpm 3.0 + line is no longer supported. + + CVS patchset: 5394 + CVS date: 2002/04/11 22:41:15 + +commit 86997fb34278445752c67829474437eeca915307 +Author: rjray +Date: Thu Apr 11 22:40:20 2002 +0000 + + Removed all the #if/#endif blocks that were for distinguishing 3.0 and 4.0 rpm + lineage. rpm 3.0 is no longer going to be supported. + + CVS patchset: 5393 + CVS date: 2002/04/11 22:40:20 + +commit ef7f4a88db5e38d5a9832cd5d52e9d5ff126ce7d +Author: rjray +Date: Thu Apr 11 22:38:07 2002 +0000 + + Switched the order of preference in choosing a package to use as a control for + testing. The kernel package might have more than one instance on the system, + which breaks some of the tests. The rpm package should be OK. + + CVS patchset: 5392 + CVS date: 2002/04/11 22:38:07 + +commit 8a44e3aba9d7c316bcf3f37646e25ab9ab9c3b76 +Author: cturner +Date: Thu Apr 11 17:10:12 2002 +0000 + + silly test + + CVS patchset: 5390 + CVS date: 2002/04/11 17:10:12 + +commit 2404e8d91895eae6913b9181094e6ef1f3c47ed0 +Author: jbj +Date: Thu Apr 11 16:55:19 2002 +0000 + + - rescusitate --rebuild. + + CVS patchset: 5389 + CVS date: 2002/04/11 16:55:19 + +commit bd2f1e9543e175e9b1c07e308da38d39807ccabd +Author: jbj +Date: Wed Apr 10 22:10:13 2002 +0000 + + Fix: source package already part of the transaction. + + CVS patchset: 5388 + CVS date: 2002/04/10 22:10:13 + +commit e5a632b26dc0f8df7f552dcf0a07f703db9fd329 +Author: jbj +Date: Wed Apr 10 20:00:40 2002 +0000 + + - beecrypt: add types.h, eliminate need for config.gnu.h. + + CVS patchset: 5386 + CVS date: 2002/04/10 20:00:40 + +commit fa1361480f0b9a1154579a21668a249d0bce6126 +Author: jbj +Date: Tue Apr 9 21:36:47 2002 +0000 + + Use NEEDED from objdump, not ldd, to auto-generate Requires:. + + CVS patchset: 5385 + CVS date: 2002/04/09 21:36:47 + +commit 39d9e33336dfed1a63aa4db86d194da51de66422 +Author: cturner +Date: Tue Apr 9 09:38:12 2002 +0000 + + more churn. more stable. a hint of documentation, but only a hint. + + CVS patchset: 5383 + CVS date: 2002/04/09 09:38:12 + +commit 721d88ed7f53a607108dd78dc82d3da83ea05ee2 +Author: jbj +Date: Mon Apr 8 22:52:45 2002 +0000 + + Sanity. + + CVS patchset: 5382 + CVS date: 2002/04/08 22:52:45 + +commit 5c1ca96c965d07c8efe9c47081a9aaf6a6e03e7e +Author: jbj +Date: Mon Apr 8 20:09:40 2002 +0000 + + Check {fsm,psm} for orphans. + + CVS patchset: 5381 + CVS date: 2002/04/08 20:09:40 + +commit b5f320dfacdfb56ed2b84e845d515715ccb53e05 +Author: jbj +Date: Mon Apr 8 19:13:35 2002 +0000 + + Check rpm-4.0.4 for orpahns. + + CVS patchset: 5380 + CVS date: 2002/04/08 19:13:35 + +commit b45c27e2ab0ba5c0d3bd3385ef561943d4cc57f9 +Author: jbj +Date: Mon Apr 8 18:56:01 2002 +0000 + + doxygen cleanup. + + CVS patchset: 5379 + CVS date: 2002/04/08 18:56:01 + +commit ffdfd1056e25d18f95776fbff43fceca864be95f +Author: jbj +Date: Sun Apr 7 19:52:42 2002 +0000 + + - speedup large queries by ~50%. + - revert to presentation ordering Yet Again (#62158). + - non-glibc: on upgrade, mergesort is much faster than quicksort. + + CVS patchset: 5377 + CVS date: 2002/04/07 19:52:42 + +commit 6e2d56377d4ac91f44918e58918d777540f6565c +Author: cturner +Date: Sun Apr 7 07:22:29 2002 +0000 + + cleanup some memory issues; fix iteration over DB and proper freeing of headers; fix silly refcount trick of db and iterators to be more like the simpler python system + + CVS patchset: 5376 + CVS date: 2002/04/07 07:22:29 + +commit f5f18ee2a856e8e17ac9261f36cea95de7d34aa0 +Author: cturner +Date: Sun Apr 7 06:45:24 2002 +0000 + + initial import of perl-RPM2 + + CVS patchset: 5375 + CVS date: 2002/04/07 06:45:24 + +commit e7b38bbd0c52cea744bbecb72e38f0f7e7faccfa +Author: jbj +Date: Sun Mar 17 21:13:43 2002 +0000 + + Test program for file name join. + + CVS patchset: 5363 + CVS date: 2002/03/17 21:13:43 + +commit c1d98e55b215aa262a01b7df8ef3083fe53a99e1 +Author: jbj +Date: Sun Mar 17 15:49:09 2002 +0000 + + - *really* dump signature header immutable region. + + CVS patchset: 5362 + CVS date: 2002/03/17 15:49:09 + +commit a7266b73948b535e38fe0ba29e05912209a45ff9 +Author: jbj +Date: Sun Mar 17 15:46:23 2002 +0000 + + Bail on mmap/rsync fiddles for now. + + CVS patchset: 5361 + CVS date: 2002/03/17 15:46:23 + +commit 3212547cb597483f131e7f53204d87fe3a9f72f9 +Author: jbj +Date: Sun Mar 17 01:23:32 2002 +0000 + + Conflicts. + + CVS patchset: 5360 + CVS date: 2002/03/17 01:23:32 + +commit 3b6077c0bd89b73b163c9bd29516536577e121c5 +Author: jbj +Date: Sat Mar 16 19:56:27 2002 +0000 + + Initial revision + + CVS patchset: 5359 + CVS date: 2002/03/16 19:56:27 + +commit 54945a10c1659c6204410476534babc36e6cf180 +Author: jbj +Date: Wed Mar 13 20:01:50 2002 +0000 + + Factor notify callback function/arg onto per-ts method. + + CVS patchset: 5357 + CVS date: 2002/03/13 20:01:50 + +commit fb845b7ee7e65bb0523efc6effbb9dd01f5c699e +Author: jbj +Date: Wed Mar 13 17:59:49 2002 +0000 + + Split transaction set handling into separate file, prepatory to + devising some toy access methods. + + CVS patchset: 5356 + CVS date: 2002/03/13 17:59:49 + +commit 976cf8dec79b51102ed51cb72681bbac0abf3f5d +Author: jbj +Date: Wed Mar 13 15:06:07 2002 +0000 + + Pass ts and args to rpmInstall() and rpmErase(). + + CVS patchset: 5355 + CVS date: 2002/03/13 15:06:07 + +commit 2c45013b703f6f976bc8a64a38fcae56f0ffb156 +Author: jbj +Date: Tue Mar 12 21:01:58 2002 +0000 + + Sanity. + + CVS patchset: 5354 + CVS date: 2002/03/12 21:01:58 + +commit 865ec50f9462126bf3bdddc236cad7df282e20af +Author: jbj +Date: Tue Mar 12 20:28:30 2002 +0000 + + - permit --dbpath and --root with signature (i.e. --import) modes. + + CVS patchset: 5353 + CVS date: 2002/03/12 20:28:30 + +commit d18bbd9bdcfaf031e5ca7b6acd5bcc4d2532d3e4 +Author: jbj +Date: Tue Mar 12 16:56:17 2002 +0000 + + - drill ts/fi through verify mode, add methods to keep fi abstract. + - use mmap when calculating file digests on verify, ~20% faster. + + CVS patchset: 5352 + CVS date: 2002/03/12 16:56:17 + +commit 0a71efcfc06c380feb5558aaf5de6773229894da +Author: jbj +Date: Sun Mar 10 19:00:31 2002 +0000 + + - splint annotationsm, signature cleanup. + + CVS patchset: 5351 + CVS date: 2002/03/10 19:00:31 + +commit f5dbab424baea97859d250d5d33d435ddf6ae73e +Author: jbj +Date: Sun Mar 10 15:16:57 2002 +0000 + + - make --addsign and --resign behave exactly the same. + + CVS patchset: 5350 + CVS date: 2002/03/10 15:16:57 + +commit f0907e2f267a05348e4f0a6bbe2afde5d4a49c07 +Author: jbj +Date: Sat Mar 9 19:02:59 2002 +0000 + + Strip CFLAGS passed as argument to db configure. + + CVS patchset: 5349 + CVS date: 2002/03/09 19:02:59 + +commit 14ec54e33b72fe073251479f101c1d610e7009ca +Author: jbj +Date: Fri Mar 8 22:24:58 2002 +0000 + + - wire --nodigest/--nosignature options to checksig/query/verify modes. + + CVS patchset: 5348 + CVS date: 2002/03/08 22:24:58 + +commit 441764ef45b668d6a573934a6e267c76bd2f7dc0 +Author: jbj +Date: Thu Mar 7 22:54:43 2002 +0000 + + - add header RSA signature (untested, disabled for now). + - don't bother with signing check if 16 bits of hash don't match. + - only V3 signatures for now. + + CVS patchset: 5347 + CVS date: 2002/03/07 22:54:43 + +commit 52864ffa4d78d6880130613a0ac4f1656b883a41 +Author: jbj +Date: Thu Mar 7 02:17:59 2002 +0000 + + - add header RSA signature (untested). + + CVS patchset: 5346 + CVS date: 2002/03/07 02:17:59 + +commit c6449e9c4439b7f2cf6c620a78d464b10a6c75b1 +Author: jbj +Date: Wed Mar 6 23:17:31 2002 +0000 + + - add header DSA signature. + + CVS patchset: 5345 + CVS date: 2002/03/06 23:17:31 + +commit 2e2d1cad39b9bf8af73ec7b2c584236aabcdad14 +Author: jbj +Date: Sun Mar 3 23:09:49 2002 +0000 + + - add payload uncompressed size to signature to avoid rewriting header. + - drill header sha1 into signature parallel to header+payload md5. + - mandatory "most effective" signature check on query/verify/install. + - don't bother adding empty filemd's to index. + - add Pubkey index, using signer id as binary key. + - display pubkeys in hex when debugging db access. + - retrieve pubkey(s) from rpmdb, not from detached signature file. + - reapply Berkeley DB patch #4491. + + CVS patchset: 5341 + CVS date: 2002/03/03 23:09:49 + +commit 48b19eaedae1d80691073730628c3ef806d6322d +Author: jbj +Date: Thu Feb 28 22:08:55 2002 +0000 + + Speed up "w = iv(s) mod q" by eliminating the unnecessary {u,v,t}2 + computation. + + CVS patchset: 5340 + CVS date: 2002/02/28 22:08:55 + +commit 9aa5bedac729594138d9320ee291f3dce5f5b6b1 +Author: jbj +Date: Thu Feb 28 15:48:39 2002 +0000 + + Use Knuth algorithm Y for computing DSA "w = inv(s) mod q". + + CVS patchset: 5339 + CVS date: 2002/02/28 15:48:39 + +commit 87a411ddf244ef13225ccb42c0bbc4fe191ab146 +Author: jbj +Date: Wed Feb 27 21:38:51 2002 +0000 + + Sanity. + + CVS patchset: 5338 + CVS date: 2002/02/27 21:38:51 + +commit 845f038002384bcb32bde513734ccfbb1d2830d7 +Author: jbj +Date: Wed Feb 27 14:26:29 2002 +0000 + + Create. + + CVS patchset: 5337 + CVS date: 2002/02/27 14:26:29 + +commit 5c2e4bdc1e189f2038e315dbd09a6b504a71ec57 +Author: jbj +Date: Mon Feb 25 15:29:22 2002 +0000 + + Annotation fiddles. + + CVS patchset: 5336 + CVS date: 2002/02/25 15:29:22 + +commit ec53bfce3db7d7a0802cae1ff5143f9e6beaf040 +Author: jbj +Date: Sun Feb 24 20:44:36 2002 +0000 + + Synthesize a st_ino field for fts(3) use across FTP. + + CVS patchset: 5335 + CVS date: 2002/02/24 20:44:36 + +commit 02893e232d2dcb8bf70a7b7244e792f2f27b9d32 +Author: jbj +Date: Sun Feb 24 17:14:33 2002 +0000 + + Auto-detect lvr vendor if /etc/lvr-release (#59897). + + CVS patchset: 5334 + CVS date: 2002/02/24 17:14:33 + +commit 6df10492d972520c7be51ae7ccf9b02780e5693b +Author: jbj +Date: Sat Feb 23 21:24:37 2002 +0000 + + fix: opendir(3) et al functional with FTP. + Use GNU extensions to apply glob(3) to ftp:// URL's. + + CVS patchset: 5333 + CVS date: 2002/02/23 21:24:37 + +commit 4e34d9ebf749b0db380380b0de7b3f82b4c151bc +Author: jbj +Date: Fri Feb 22 22:52:26 2002 +0000 + + Make peace with lclint for fts.[ch]. + + CVS patchset: 5332 + CVS date: 2002/02/22 22:52:26 + +commit 0108a7b8cbcfeb1ed6a97e8841d234616e91de5b +Author: jbj +Date: Fri Feb 22 17:12:15 2002 +0000 + + tpkgid cleanup. + Recognize GNU extensions in myGlobPatternP(), flag in misc/fnmatch.h, as well. + + CVS patchset: 5331 + CVS date: 2002/02/22 17:12:15 + +commit 66477dc13d82817781de9e3d08db5d1d052ebf28 +Author: jbj +Date: Thu Feb 21 22:53:30 2002 +0000 + + Add tpkgid.c. + + CVS patchset: 5330 + CVS date: 2002/02/21 22:53:30 + +commit b41f855114c36c620da4a8949ea8ee7531c05f7e +Author: jbj +Date: Thu Feb 21 00:30:49 2002 +0000 + + Add pkgid db builder pre-cursor. + + CVS patchset: 5329 + CVS date: 2002/02/21 00:30:49 + +commit 70e1c2a7c0c3dbe35009f52338f9efedbf7baa5f +Author: jbj +Date: Wed Feb 20 22:57:06 2002 +0000 + + Include fts.[ch] in rpmio, APi renamed to Fts_foo. + + CVS patchset: 5328 + CVS date: 2002/02/20 22:57:06 + +commit d947e66128088105fed98d8e6a6e3038225bbd7e +Author: jbj +Date: Wed Feb 20 22:28:00 2002 +0000 + + Add (for portability) copies of fts.{c,h} from glibc-2.2.90-6. + + CVS patchset: 5327 + CVS date: 2002/02/20 22:28:00 + +commit 5547ba7557cd7025be9dfdb6002aaa2841d85977 +Author: jbj +Date: Wed Feb 20 22:09:28 2002 +0000 + + Sanity. + + CVS patchset: 5326 + CVS date: 2002/02/20 22:09:28 + +commit 6ed5e192438ef5d99aeeedfd2f06ac0b341ab30b +Author: jbj +Date: Wed Feb 20 21:00:15 2002 +0000 + + - make peace with automake et al in 8.0, ugh. + - auto-configure with gcj, build javaglue.c. + + CVS patchset: 5325 + CVS date: 2002/02/20 21:00:15 + +commit cde71600d4e34b64176f1d7c1f60eaab9d7ed20a +Author: jbj +Date: Wed Feb 20 20:51:20 2002 +0000 + + Autogenerated. + + CVS patchset: 5324 + CVS date: 2002/02/20 20:51:20 + +commit 09f274515f9876569ea165e09257eaeee5959d5b +Author: jbj +Date: Sun Feb 10 21:13:52 2002 +0000 + + - make peace with automake et al in 8.0, ugh. + + CVS patchset: 5314 + CVS date: 2002/02/10 21:13:52 + +commit 30b9428ce07b2fc3df44742dc58673cb1fb102ec +Author: jbj +Date: Sun Feb 10 19:00:16 2002 +0000 + + - make peace with gcc-3.1, remove compiler cruft. + + CVS patchset: 5313 + CVS date: 2002/02/10 19:00:16 + +commit 08e032599414865cb4482eb427d9a4e4caf004be +Author: jbj +Date: Sun Feb 10 17:19:28 2002 +0000 + + Sanity. + + CVS patchset: 5312 + CVS date: 2002/02/10 17:19:28 + +commit be0595b4b5eeb1dcc74cbe33a341c2da6dfe9d89 +Author: jbj +Date: Sun Feb 10 16:50:06 2002 +0000 + + Flip 4.0.4 devel changes back here. + More splint fiddles. + + CVS patchset: 5311 + CVS date: 2002/02/10 16:50:06 + +commit f9f29be96a5ad8774294ffe50d2d243009fa91c1 +Author: jbj +Date: Sat Feb 9 22:40:52 2002 +0000 + + Don't bother with man page. + + CVS patchset: 5310 + CVS date: 2002/02/09 22:40:52 + +commit d83891c743e83ced7e6773f37d5e524840702835 +Author: jbj +Date: Sat Feb 9 22:39:29 2002 +0000 + + Sync with 4.0.4, splint clean. + + CVS patchset: 5309 + CVS date: 2002/02/09 22:39:29 + +commit 1cf6127e8194d154f1e7e28c40761901531c2229 +Author: jbj +Date: Sat Feb 9 20:09:59 2002 +0000 + + Ignore built files. + + CVS patchset: 5308 + CVS date: 2002/02/09 20:09:59 + +commit 65d033ec86e8b0322f7016dd7a1cc91aa4ec32f2 +Author: jbj +Date: Sat Feb 9 20:08:32 2002 +0000 + + Update to rpm-4.0.x API. + + CVS patchset: 5307 + CVS date: 2002/02/09 20:08:32 + +commit 8ddeef05cd90c5b381d2ebea6b6b35a3000b553c +Author: jbj +Date: Sat Feb 9 19:21:34 2002 +0000 + + Capture rpm-3.0.3 examples from "Maximum RPM". + + CVS patchset: 5306 + CVS date: 2002/02/09 19:21:34 + +commit 380b21d69e86fc34f9785369043b3933ec0df645 +Author: jbj +Date: Thu Feb 7 16:55:01 2002 +0000 + + Sync with rpm-4.0.4. + + CVS patchset: 5303 + CVS date: 2002/02/07 16:55:01 + +commit 56de656223afce0b119f4c44addaaa5642f3ed52 +Author: jbj +Date: Mon Feb 4 23:29:59 2002 +0000 + + - generate index for pkgid (aka Sigmd5) tag, query/verify by pkgid. + - generate index for hdrid (aka Sha1header) tag, query/verify by hdrid. + - generate index for fileid (aka Filemd5s) tag, query/verify by fileid. + - query/verify by install transaction id. + + CVS patchset: 5300 + CVS date: 2002/02/04 23:29:59 + +commit 14bdb24e993893d0a65cf14956c00eb7d1edb02b +Author: jbj +Date: Mon Feb 4 18:07:52 2002 +0000 + + 1) added sprintf method to headers + 2) added setVerbosity() + + CVS patchset: 5298 + CVS date: 2002/02/04 18:07:52 + +commit 696c5d9d67e4bde344b921c94ffad5a8ad075ce8 +Author: jbj +Date: Mon Feb 4 16:53:51 2002 +0000 + + rollback changes from 4.0.4. + + CVS patchset: 5297 + CVS date: 2002/02/04 16:53:51 + +commit 81d60b470679acaab73d37f6a2f3f2dc6b3cba60 +Author: jbj +Date: Sat Feb 2 22:45:41 2002 +0000 + + Sync with rpm-4.0.4 rollbacks. + + CVS patchset: 5293 + CVS date: 2002/02/02 22:45:41 + +commit ff7a19b2bd00ef66ee702136f2365fae8f713966 +Author: jbj +Date: Fri Feb 1 15:19:44 2002 +0000 + + - permit args to be hidden within %%__find_{requires,provides}. + - a couple more perl.{prov,req} fiddles. + + CVS patchset: 5289 + CVS date: 2002/02/01 15:19:44 + +commit d52d65e9f2d9087b9db306315c217d52e085a77f +Author: jbj +Date: Wed Jan 30 22:19:56 2002 +0000 + + - legacy: configurable whiteout for known Red Hat dependency loops. + - perl.req: don't mis-generate dependencies like perl(::path/to/foo.pl). + + CVS patchset: 5286 + CVS date: 2002/01/30 22:19:56 + +commit 64e5b924aaa72ac46440f9bb3fc27db118cff671 +Author: jbj +Date: Mon Jan 28 16:16:27 2002 +0000 + + popt PAIN, sigh. + + CVS patchset: 5283 + CVS date: 2002/01/28 16:16:27 + +commit e1a7a8a081480bb938fa94118d2686f657516f87 +Author: jbj +Date: Mon Jan 28 15:51:06 2002 +0000 + + Transaction rollbacks from rpm-4.04, (sanity flush). + + CVS patchset: 5281 + CVS date: 2002/01/28 15:51:06 + +commit 6ab55413243ab347f4c3cc09c33ce329bc058b08 +Author: jbj +Date: Mon Jan 28 15:18:18 2002 +0000 + + Avoid accidental collisions with POPT_BIT_SET for flags in popt tables. + + CVS patchset: 5277 + CVS date: 2002/01/28 15:18:18 + +commit 9b1df115e358f4925015f8ca4742cb7aa3fcffb5 +Author: jbj +Date: Mon Jan 28 15:08:56 2002 +0000 + + Teach autogen.sh about beecrypt. + Use rpm optflags when compiling beecrypt. + + CVS patchset: 5275 + CVS date: 2002/01/28 15:08:56 + +commit 69e97f28a018b37580e1d6daad02a38875592f92 +Author: jbj +Date: Sun Jan 27 16:49:06 2002 +0000 + + Merge from rpm-4.0.4. + - trap SIGILL for ppc64 inline asm voodoo fix from cross-dressed ppc32. + - fix: fancy hash fiddles if not a tty. + - fix: handle /.../ correctly in rpmCleanPath(). + + CVS patchset: 5274 + CVS date: 2002/01/27 16:49:06 + +commit 0bbb7bb94e340b22f584c9ebd8a1f667d68217bd +Author: jbj +Date: Wed Jan 23 00:58:47 2002 +0000 + + - turn on auto-generated perl requirements (#58519, #58536, #58537). + Sanity. + + CVS patchset: 5265 + CVS date: 2002/01/23 00:58:47 + +commit c74fa2496545a34868e93ab830b304033781cde3 +Author: jbj +Date: Fri Jan 18 22:51:30 2002 +0000 + + - missing key(s) on keyring when verifying a signature is now an error. + - remove dependency whiteout. + - splint fiddles. + + CVS patchset: 5255 + CVS date: 2002/01/18 22:51:30 + +commit 3ef59667d3d4c6e2c4a64d53dc60472abb607e26 +Author: jbj +Date: Thu Jan 17 20:11:42 2002 +0000 + + Resync with db-4.0.14 (and what's on the rpm-4_0 branch). + + CVS patchset: 5254 + CVS date: 2002/01/17 20:11:42 + +commit 3e0d0877ffe376e5187a173441a5f2a9ad68de49 +Author: jbj +Date: Fri Jan 11 23:03:22 2002 +0000 + + - permit subset installs for %lang colored hardlink file sets. + + CVS patchset: 5252 + CVS date: 2002/01/11 23:03:22 + +commit cbcc2cc4676f33b926f93cd0f89350c8d50062b7 +Author: jbj +Date: Thu Jan 10 19:16:54 2002 +0000 + + - fix: signing multiple times dinna work, discard immutable region. + - remove poptmodule.so for separate packaging. + + CVS patchset: 5250 + CVS date: 2002/01/10 19:16:54 + +commit 0776a0c42584f85620e0ed12521d2acb1ef4ceef +Author: jbj +Date: Mon Jan 7 20:01:00 2002 +0000 + + - autodetect python 1.5/2.2. + + CVS patchset: 5242 + CVS date: 2002/01/07 20:01:00 + +commit a6faa04f39519b65f122883de1673824e5c9105f +Author: jbj +Date: Mon Jan 7 18:36:23 2002 +0000 + + - Depends should use CDB if configured. + + CVS patchset: 5241 + CVS date: 2002/01/07 18:36:23 + +commit ce922f5bdf08eb9058c7ba60c551df2704ae4c26 +Author: jbj +Date: Sun Jan 6 22:12:44 2002 +0000 + + - handle lazy db open's in chroot with absolute path, not prefix strip. + + CVS patchset: 5239 + CVS date: 2002/01/06 22:12:44 + +commit 350d7592de623c3c236e45c103981d1e55f5e5d4 +Author: jbj +Date: Sun Jan 6 02:23:33 2002 +0000 + + - sparc: make dbenv per-rpmdb, not per-dbi. + + CVS patchset: 5237 + CVS date: 2002/01/06 02:23:33 + +commit cd622ba0de30cdd85658bb2fe007c5ed02e89e23 +Author: jbj +Date: Sat Jan 5 18:41:05 2002 +0000 + + Spelling error. + + CVS patchset: 5234 + CVS date: 2002/01/05 18:41:05 + +commit f345a8f37f08153af3c787e48d2c215f17b26f77 +Author: jbj +Date: Sat Jan 5 03:23:42 2002 +0000 + + Compute parent and no. of children for each package. + Use rpmsort to display equivalence tree using graphwiz. + + CVS patchset: 5232 + CVS date: 2002/01/05 03:23:42 + +commit a6bf63789aceb747d6de0aadd15795ba98ef48cf +Author: jbj +Date: Fri Jan 4 18:34:04 2002 +0000 + + Use rpmsort to display dependencies for dotty from graphviz. + Build rpmsort by default. + + CVS patchset: 5231 + CVS date: 2002/01/04 18:34:04 + +commit 6ac07ef3742ae462999ae839adcfe908eb8824b8 +Author: jbj +Date: Thu Dec 27 21:04:37 2001 +0000 + + - simple automake wrapper for zlib. + + CVS patchset: 5230 + CVS date: 2001/12/27 21:04:37 + +commit 0e58e87c7af3427ffe9252ac9ce2e652160299bb +Author: jbj +Date: Thu Dec 27 21:00:17 2001 +0000 + + - simple automake wrappers for zlib. + - expose various comments for doxygen digestification. + + CVS patchset: 5229 + CVS date: 2001/12/27 21:00:17 + +commit a3b362c466a12488fffe2f6dd4fffb728da2b0c0 +Author: jbj +Date: Thu Dec 20 16:28:46 2001 +0000 + + - solaris: translate i86pc to i386 (#57182). + - fix: %GNUconfigure breaks with single quotes (#57264). + - fix: typo in find-requires. + - tru64 compiler message cleanup. + - add buildarch lines for hppa (#57728). + + CVS patchset: 5228 + CVS date: 2001/12/20 16:28:46 + +commit 7940b1b4a5eb6a0371651904095e9c6b06206de1 +Author: jbj +Date: Wed Dec 19 19:39:35 2001 +0000 + + Do "strip -g". + + CVS patchset: 5226 + CVS date: 2001/12/19 19:39:35 + +commit c4a7546f0739524cb0d2a71f2d1d2e5f074e91ed +Author: jbj +Date: Wed Dec 19 19:35:11 2001 +0000 + + - add getmntent define, don't expand fnmatch. + + CVS patchset: 5224 + CVS date: 2001/12/19 19:35:11 + +commit 53ce5564b5301c79af54c933d092524e946102fa +Author: jbj +Date: Sun Dec 9 20:17:38 2001 +0000 + + - solaris: translate i86pc to i386 (#57182). + + CVS patchset: 5218 + CVS date: 2001/12/09 20:17:38 + +commit 85f676ed6637f2ff677d6b32c0e1f547df7fe9ee +Author: jbj +Date: Sat Dec 8 17:21:36 2001 +0000 + + - lclint-3.0.0.19 fiddles. + + CVS patchset: 5217 + CVS date: 2001/12/08 17:21:36 + +commit 58f451f3c3240f76874e27bff8325dea88134e7e +Author: jbj +Date: Sat Dec 8 17:12:12 2001 +0000 + + - 1st crack at making zlib rsync friendly. + + CVS patchset: 5216 + CVS date: 2001/12/08 17:12:12 + +commit 5a0508d51fcf84412a8f6a88a09d6dd63a16e47e +Author: jbj +Date: Thu Dec 6 18:34:49 2001 +0000 + + - 3 madvise calls and a 16Mb mmapped buffer == ~5% install speedup. Wow. + - use db-4.0.14 final internally. + + CVS patchset: 5215 + CVS date: 2001/12/06 18:34:49 + +commit d7e49147a28f795312b330cbfe68e60798212a93 +Author: jbj +Date: Thu Dec 6 15:08:48 2001 +0000 + + Merge in orphans from db-4.0.14. + + CVS patchset: 5214 + CVS date: 2001/12/06 15:08:48 + +commit ebaa5e2c5402e0cb586cea44d470aafe59adbbd9 +Author: jbj +Date: Thu Dec 6 00:07:07 2001 +0000 + + Initial revision + + CVS patchset: 5213 + CVS date: 2001/12/06 00:07:07 + +commit 82a945940d6ab360f5d6f7e7c80e145a08e8a0a3 +Author: jbj +Date: Sat Nov 24 15:36:50 2001 +0000 + + - protect brp-compress against /bin/ls output ambiguity (#56656,#56336). + + CVS patchset: 5208 + CVS date: 2001/11/24 15:36:50 + +commit e98018b4d8730a80b2d320e6393f9129b2d13770 +Author: jbj +Date: Fri Nov 23 15:49:11 2001 +0000 + + - fix a couple dinky memory leaks. + - build with an internal zlib for now. + + CVS patchset: 5207 + CVS date: 2001/11/23 15:49:11 + +commit 9d66753a5b99ecd9ae022c5ff42eec58b57d8c13 +Author: jbj +Date: Thu Nov 22 21:12:46 2001 +0000 + + More annotations. + + CVS patchset: 5206 + CVS date: 2001/11/22 21:12:46 + +commit d77eeb993d5f2f63facad07452169f547f614503 +Author: jbj +Date: Wed Nov 21 22:01:55 2001 +0000 + + Annotations, pass 0. + + CVS patchset: 5205 + CVS date: 2001/11/21 22:01:55 + +commit 2b8138a6fe8dbc9a031f7a2553652fb24d1120e2 +Author: jbj +Date: Wed Nov 21 21:06:35 2001 +0000 + + Orphan. + + CVS patchset: 5204 + CVS date: 2001/11/21 21:06:35 + +commit a3a4ece5a61f258cb5c74085ef4d65be3750b7b1 +Author: jbj +Date: Wed Nov 21 21:06:17 2001 +0000 + + Sanitize the speedup patch a bit. + + CVS patchset: 5203 + CVS date: 2001/11/21 21:06:17 + +commit b20a562f23b0969b6c7e7679a6c82fc801fbbd22 +Author: jbj +Date: Wed Nov 21 20:47:36 2001 +0000 + + Apply speedup patch from Ben LaHaise from + http://touchme.toronto.redhat.com/~bcrl/zlib-x86-opt-20010103C.diff + + CVS patchset: 5202 + CVS date: 2001/11/21 20:47:36 + +commit a758bedad830501ddc8d7c277f6f92645c1a7e18 +Author: jbj +Date: Wed Nov 21 20:36:10 2001 +0000 + + Painless lclint configuration. + + CVS patchset: 5201 + CVS date: 2001/11/21 20:36:10 + +commit 28818cf7c860de7858e490b5e2c59b1e752abf47 +Author: jbj +Date: Wed Nov 21 19:49:47 2001 +0000 + + Patches from Red Hat 7.2 zlib-1.1.3-24 package. + + CVS patchset: 5200 + CVS date: 2001/11/21 19:49:47 + +commit d17885422f51f54f78426e112ae08b5934ff52a9 +Author: jbj +Date: Wed Nov 21 19:43:12 2001 +0000 + + Initial revision + + CVS patchset: 5197 + CVS date: 2001/11/21 19:43:12 + +commit a224782884d6ab6f147033277a93e6a4f06fd6a0 +Author: jbj +Date: Mon Nov 19 22:45:35 2001 +0000 + + - header handling moved to librpmdb to avoid linkage loops. + + CVS patchset: 5193 + CVS date: 2001/11/19 22:45:35 + +commit ceed8357c7f11f2b04c491011244feba416e9fa7 +Author: jbj +Date: Sun Nov 18 17:49:21 2001 +0000 + + - convert file md5sum's to binary on the fly, reducing memory footprint. + + CVS patchset: 5192 + CVS date: 2001/11/18 17:49:21 + +commit 06522b9c1e615d3c7e37ceb5ac89b518b6ec3a80 +Author: jbj +Date: Sun Nov 18 11:46:22 2001 +0000 + + 1st element in tsort candidate queue was not marked. + + CVS patchset: 5191 + CVS date: 2001/11/18 11:46:22 + +commit aaaf5f8e316069cc613b80cc0be8e46267e3cd65 +Author: jbj +Date: Sat Nov 17 20:44:16 2001 +0000 + + - use TR_REMOVED relations as well as TR_ADDED for ordering. + - drop requirement that removed packages immediately follow added. + - hybrid chainsaw/presentation ordering algorithm. + + CVS patchset: 5190 + CVS date: 2001/11/17 20:44:16 + +commit 945d5a740cf8d933aec5f89169715ba2e79ca2e7 +Author: jbj +Date: Sat Nov 17 08:02:17 2001 +0000 + + - methods to complete making transactionElement opaque. + + CVS patchset: 5189 + CVS date: 2001/11/17 08:02:17 + +commit 6a4d22da653a584fc06790b9846e7ab754ac43ff +Author: jbj +Date: Sat Nov 17 00:52:45 2001 +0000 + + Continue making transactionElement opaque. + + CVS patchset: 5188 + CVS date: 2001/11/17 00:52:45 + +commit c2b98f0e2c02bc17590bcafd6ab1938af0d9c550 +Author: jbj +Date: Fri Nov 16 23:22:24 2001 +0000 + + Move addTE/delTE to rpmte.c. + + CVS patchset: 5187 + CVS date: 2001/11/16 23:22:24 + +commit 7d44f133958d5e4d8a6e1bd5e4b925be3bbdad48 +Author: jbj +Date: Fri Nov 16 22:42:19 2001 +0000 + + - use array of pointers rather than contiguous array for ts->order. + + CVS patchset: 5186 + CVS date: 2001/11/16 22:42:19 + +commit bf2a991c6721bd498c18b4f64362e5475c31c529 +Author: jbj +Date: Fri Nov 16 20:26:01 2001 +0000 + + Create rpmte.[ch]. + + CVS patchset: 5185 + CVS date: 2001/11/16 20:26:01 + +commit 2bc33264387266c1a1ac2b9f6958e96a268d8b15 +Author: jbj +Date: Fri Nov 16 19:26:33 2001 +0000 + + - annotations to make a transactionElement opaque. + + CVS patchset: 5184 + CVS date: 2001/11/16 19:26:33 + +commit eda96fd190ca2f6b43bf1e29887dbdbf8ceebaf0 +Author: jbj +Date: Fri Nov 16 13:58:21 2001 +0000 + + Eliminate dead code. + + CVS patchset: 5183 + CVS date: 2001/11/16 13:58:21 + +commit 7f1fd8aabc3fc022bb8332a500165e4e21c3534c +Author: jbj +Date: Fri Nov 16 00:26:30 2001 +0000 + + - transaction.c: use wrappers/iterators to access TFI_t. + + CVS patchset: 5182 + CVS date: 2001/11/16 00:26:30 + +commit 846ed75f9b1b0c4c916787aa79477e98be02d30e +Author: jbj +Date: Thu Nov 15 18:22:33 2001 +0000 + + - tweak overlapped file fingerprint retrieval for speed. + + CVS patchset: 5181 + CVS date: 2001/11/15 18:22:33 + +commit f50fc15ba017e156b11d94ea18c7373b370dc5e5 +Author: jbj +Date: Wed Nov 14 00:14:01 2001 +0000 + + depends.c and rpmal.c have opaque TFI_t. + + CVS patchset: 5180 + CVS date: 2001/11/14 00:14:01 + +commit b1c03797ebf5646187b13fd73a57f8e8571674d5 +Author: jbj +Date: Tue Nov 13 19:04:33 2001 +0000 + + - split file info tag sets into rpmfi.c. + - create toy TFI_t iterators. + + CVS patchset: 5179 + CVS date: 2001/11/13 19:04:33 + +commit 49f98b8daed5ea05f585495d2df856a56b0567fa +Author: jbj +Date: Mon Nov 12 22:54:39 2001 +0000 + + transaction.c: lclint cleanups. + + CVS patchset: 5178 + CVS date: 2001/11/12 22:54:39 + +commit 21a35690b3d6e79206ae62724cb8fbd538be57cb +Author: jbj +Date: Mon Nov 12 20:51:05 2001 +0000 + + - commit to using rpmDepSet and TFI_t, not header. + - lclint rpmio fiddles. + + CVS patchset: 5177 + CVS date: 2001/11/12 20:51:05 + +commit 55ffccbddecade7b99992900cec5dd2aef3b059c +Author: jbj +Date: Sun Nov 11 22:51:00 2001 +0000 + + - unify rpmFNSet into TFI_t. + - eliminate header reference in rpmtransAddPackage, use TFI_t data. + + CVS patchset: 5176 + CVS date: 2001/11/11 22:51:00 + +commit 1eb0503123bfd829d5122e54353a000d89333a10 +Author: jbj +Date: Sun Nov 11 20:45:20 2001 +0000 + + Replace loadFi with fiNew, freeFi with fiFree. + + CVS patchset: 5175 + CVS date: 2001/11/11 20:45:20 + +commit ac9f0fea036a08c071d28d2056fc9646ec7e679c +Author: jbj +Date: Sun Nov 11 16:17:57 2001 +0000 + + - factor per-transactionElement data out of TFI_t through pointer ref. + + CVS patchset: 5174 + CVS date: 2001/11/11 16:17:57 + +commit b97f1cf32b47de9019f93e229207f1619b93fd49 +Author: jbj +Date: Sun Nov 11 12:47:08 2001 +0000 + + - common structure elements for unification of TFI_t and rpmFNSet. + + CVS patchset: 5173 + CVS date: 2001/11/11 12:47:08 + +commit 2928a5b00d55c07df73971f7d2f845bc0618380f +Author: jbj +Date: Sun Nov 11 03:15:47 2001 +0000 + + Discard ts->addedPackages at end of rpmdepOrder() for now. + + CVS patchset: 5172 + CVS date: 2001/11/11 03:15:47 + +commit 7ea494327675e59d4f0998233698602312075dee +Author: jbj +Date: Sun Nov 11 02:50:31 2001 +0000 + + Iterate over TR_REMOVED transactionElement stripped data, don't hit rpmdb. + + CVS patchset: 5171 + CVS date: 2001/11/11 02:50:31 + +commit 8d08d4a43b277f8684ebbad723c9fcbe9054be72 +Author: jbj +Date: Sun Nov 11 01:46:43 2001 +0000 + + Rip headers out of addedPackages. + + CVS patchset: 5170 + CVS date: 2001/11/11 01:46:43 + +commit 0abf36fd4d042c1ee93aa0bdd23b96999952868b +Author: jbj +Date: Sun Nov 11 00:11:33 2001 +0000 + + Rip alGetHeader() out of depends.c. + + CVS patchset: 5169 + CVS date: 2001/11/11 00:11:33 + +commit a086ad7dd1cb93321faa1b863622123edd2287b3 +Author: jbj +Date: Sat Nov 10 19:24:19 2001 +0000 + + Start removing alGetHeader. + + CVS patchset: 5168 + CVS date: 2001/11/10 19:24:19 + +commit 431499aecadbc9effe9559fb09ba9e77aca8865c +Author: jbj +Date: Sat Nov 10 01:39:50 2001 +0000 + + - strip header tags for erased as well as installed transactionElements. + + CVS patchset: 5167 + CVS date: 2001/11/10 01:39:50 + +commit eb1789dad7eec05197ba2a7f838d8587814d8526 +Author: jbj +Date: Fri Nov 9 23:13:50 2001 +0000 + + - no-brainer refcounts for rpmDepSet and rpmFNSet objects. + + CVS patchset: 5166 + CVS date: 2001/11/09 23:13:50 + +commit 56a319f1aa4d8965a3ecd0681a76f0adb9e04311 +Author: jbj +Date: Fri Nov 9 20:41:18 2001 +0000 + + - header tag sets are per-transactionElement, not per-availablePackage. + + CVS patchset: 5165 + CVS date: 2001/11/09 20:41:18 + +commit 978a87ed82871b869addf3cd0e8e3fd43546f65b +Author: jbj +Date: Fri Nov 9 19:22:29 2001 +0000 + + Start deconstructing TFI_t in favor of a per-transactionElement rpmFNSet. + + CVS patchset: 5164 + CVS date: 2001/11/09 19:22:29 + +commit ac15c68ca55ee520177bfb0e1576b1069d9fbccf +Author: jbj +Date: Fri Nov 9 17:22:08 2001 +0000 + + - no-brainer refcounts for rpmProblemSet object. + + CVS patchset: 5163 + CVS date: 2001/11/09 17:22:08 + +commit eb10f05b8587e931bd261e99241cac2b8649d4dc +Author: jbj +Date: Thu Nov 8 22:04:35 2001 +0000 + + - rip out rpmDependencyConflict, replace with rpmProblem instead. + + CVS patchset: 5162 + CVS date: 2001/11/08 22:04:35 + +commit 0467af9ab587ca2f8bcb376d53a30d7857d7809a +Author: jbj +Date: Thu Nov 8 16:28:35 2001 +0000 + + Remove dead code. + + CVS patchset: 5161 + CVS date: 2001/11/08 16:28:35 + +commit ae2e9b1bad7d82c423fc5a2192e05ca4f0f6d9fb +Author: jbj +Date: Thu Nov 8 00:12:49 2001 +0000 + + - linear search on added package provides is dumb. + - discarding entire signature header when using --addsign is dumb. + - typedef the fuile name/python object "key" throughout as fnpyKey. + - start ripping rpmDependencyConflict out of the API. + + CVS patchset: 5160 + CVS date: 2001/11/08 00:12:49 + +commit e680cce3e8a80425586c6e2448f57a48606d220b +Author: jbj +Date: Tue Nov 6 22:46:26 2001 +0000 + + - fix: harmless typo in db3 chroot hack. + - fix: big-endian's with sizeof(time_t) != sizeof(int_32) mtime broken. + - fix: add Korean message catalogs (#54473). + - add RPHNPLATFORM and PLATFORM tags. + - linear search on added package provides is dumb. + - discarding entire signature header when using --addsign is dumb. + + CVS patchset: 5159 + CVS date: 2001/11/06 22:46:26 + +commit 0724785fb3a9b4d4fc1d10c6e6238b70f9752c56 +Author: jbj +Date: Mon Nov 5 14:09:22 2001 +0000 + + Start merging file info into dependency set. + + CVS patchset: 5157 + CVS date: 2001/11/05 14:09:22 + +commit a5a5eed7c46d5f54e443b9ea0556710055cfb07b +Author: jbj +Date: Mon Nov 5 03:44:05 2001 +0000 + + Start deconstructing availablePackage list. + + CVS patchset: 5156 + CVS date: 2001/11/05 03:44:05 + +commit 37a303a3a7d48d84c6750b51f8f5f2a62aaf659d +Author: jbj +Date: Sun Nov 4 22:00:11 2001 +0000 + + - rpmal: availablePackage is totally opaque, alKey with index replaces. + + CVS patchset: 5155 + CVS date: 2001/11/04 22:00:11 + +commit 4c422570c0ac7bc059349eba1774d5bff347515f +Author: jbj +Date: Sun Nov 4 17:00:00 2001 +0000 + + - rpmds: move trigger dependencies into a rpmDepSet as well. + + CVS patchset: 5154 + CVS date: 2001/11/04 17:00:00 + +commit bab3637c98da3722bab8598233113cb5c8f763cc +Author: jbj +Date: Sun Nov 4 15:43:26 2001 +0000 + + - rpmds: create dsProblem(), dsiGetDNEVR() retrieved DNEVR, not N. + - depends.h: hack around teIterator() et al from include for now. + + CVS patchset: 5153 + CVS date: 2001/11/04 15:43:26 + +commit 358848088d23d8c1389ed75f3cf9a8804c6baa43 +Author: jbj +Date: Sat Nov 3 02:34:15 2001 +0000 + + - depends.c: rpmDepSet is (almost) opaque, move to rpmds.[ch]. + + CVS patchset: 5152 + CVS date: 2001/11/03 02:34:15 + +commit 95555cf3d4c02f8649a271d0c1f6699f56c9c9f5 +Author: jbj +Date: Fri Nov 2 23:17:54 2001 +0000 + + - rpmRangesOverlap renamed to dsCompare, add dsNotify method as well. + + CVS patchset: 5151 + CVS date: 2001/11/02 23:17:54 + +commit b9520f3a9420c1738eb1691406b141029ac959ae +Author: jbj +Date: Fri Nov 2 21:01:25 2001 +0000 + + - create toy rpmDepSet iterators. + + CVS patchset: 5150 + CVS date: 2001/11/02 21:01:25 + +commit 973638fdc2ea244084ff39d6544aeccf85501812 +Author: jbj +Date: Fri Nov 2 05:36:48 2001 +0000 + + - create rpmDepSet constructors/destructors. + + CVS patchset: 5149 + CVS date: 2001/11/02 05:36:48 + +commit 86fee1906066b9bac00449acdce05f845a0c89db +Author: jbj +Date: Fri Nov 2 03:13:35 2001 +0000 + + - invent some toy transactionElement iterators. + + CVS patchset: 5148 + CVS date: 2001/11/02 03:13:35 + +commit b0e16172c3b42c758fd411650a8c2bbbf791a507 +Author: jbj +Date: Thu Nov 1 23:18:15 2001 +0000 + + - depends.c: availablePackage is (almost) opaque. + + CVS patchset: 5147 + CVS date: 2001/11/01 23:18:15 + +commit fe68f3c0cd84698d54764fd24a1b91a28e8703f5 +Author: jbj +Date: Thu Nov 1 20:15:10 2001 +0000 + + - add header refcount annotations throughout. + + CVS patchset: 5146 + CVS date: 2001/11/01 20:15:10 + +commit df89c3d2009d13e32b0aec7ccda28219d92d2c33 +Author: jbj +Date: Wed Oct 31 22:19:42 2001 +0000 + + Do tsort on transactionElement's, not availaiblePackage's. + + CVS patchset: 5145 + CVS date: 2001/10/31 22:19:42 + +commit a15e74ecd67b7df026ce9bdb1204ef19ce5d4fde +Author: jbj +Date: Wed Oct 31 04:00:58 2001 +0000 + + More unraveling of availablePackage from depends.c. + + CVS patchset: 5144 + CVS date: 2001/10/31 04:00:58 + +commit 93ab09b3d9cc6187466456457e8c102c1e6bec0e +Author: jbj +Date: Tue Oct 30 18:55:39 2001 +0000 + + Create rpmDepSet. + + CVS patchset: 5143 + CVS date: 2001/10/30 18:55:39 + +commit 9ea554f799af5914cee5c34c82750a7f0918d30a +Author: jbj +Date: Tue Oct 30 18:00:21 2001 +0000 + + - transaction.c: cleanly uncouple availablePackage from TFI_t. + + CVS patchset: 5142 + CVS date: 2001/10/30 18:00:21 + +commit bdae587b2ea0dc058d178cfb6a4f102fa541a0ab +Author: jbj +Date: Mon Oct 29 23:39:51 2001 +0000 + + - add some dinky availablePackage methods. + + CVS patchset: 5141 + CVS date: 2001/10/29 23:39:51 + +commit e62f50c8a585566d68bbfdbaf1eead46630e3ca9 +Author: jbj +Date: Mon Oct 29 20:12:35 2001 +0000 + + - start hiding availablePackage data/methods in rpmal.c/rpmal.h. + + CVS patchset: 5140 + CVS date: 2001/10/29 20:12:35 + +commit 89c1ce1325ed7391e3253aab3eb8c176af38781d +Author: jbj +Date: Mon Oct 29 16:39:13 2001 +0000 + + Remove DYING code. + + CVS patchset: 5139 + CVS date: 2001/10/29 16:39:13 + +commit 87b17923e66310483ce1ed2cf5f54adcb80e9e23 +Author: jbj +Date: Mon Oct 29 16:35:01 2001 +0000 + + Gather all problem handling routines in one place. + + CVS patchset: 5138 + CVS date: 2001/10/29 16:35:01 + +commit 966fabbc441b5d859ecda64fe926be3912603fe5 +Author: jbj +Date: Sun Oct 28 22:17:47 2001 +0000 + + - memory indices for dependency check are typedef'd and abstract'd. + - no-brainer refcounts for fi object, debug the mess. + - dump the header early in transaction, recreate fi before installing. + + CVS patchset: 5137 + CVS date: 2001/10/28 22:17:47 + +commit c1d367a0941b3778a84252691bbd294a0a8be4b7 +Author: jbj +Date: Sat Oct 27 22:31:10 2001 +0000 + + - transaction sets cerated in cli main. + - no-brainer refcounts for ts object. + + CVS patchset: 5136 + CVS date: 2001/10/27 22:31:10 + +commit 7402ce15464cc59617177a2af2799c36c8ef60fd +Author: jbj +Date: Sat Oct 27 20:09:20 2001 +0000 + + - legacy signatures always checked where possible on package read. + - wire transactions through rpmcli build modes. + - lazy rpmdb open/close through transaction methods (mostly anyways). + - no-brainer refcounts for rpmdb object. + - check added header against transaction set, replace if newer. + + CVS patchset: 5135 + CVS date: 2001/10/27 20:09:20 + +commit 4a1a5e81483a2f81b22c3a0d2cb054d93055998e +Author: jbj +Date: Fri Oct 26 04:16:19 2001 +0000 + + - wire transactions through rpmcli install/erase modes. + - legacy signatures always checked on package read. + + CVS patchset: 5134 + CVS date: 2001/10/26 04:16:19 + +commit f03b462b1ef0ad128b7732c0492eefeff9c2248e +Author: jbj +Date: Thu Oct 25 01:36:32 2001 +0000 + + - legacy signatures always checked on -qp and -Vp. + + CVS patchset: 5133 + CVS date: 2001/10/25 01:36:32 + +commit cdeb78fb1a97bee2778e873725fe452ba5d79786 +Author: jbj +Date: Wed Oct 24 13:48:55 2001 +0000 + + - wire transactions through rpmcli query/verify modes. + + CVS patchset: 5132 + CVS date: 2001/10/24 13:48:55 + +commit 72f92dd7448cfb1394a40a0fc5c302cdd31753f8 +Author: jbj +Date: Tue Oct 23 20:52:51 2001 +0000 + + - wire transactions through rpmcli signature modes. + + CVS patchset: 5131 + CVS date: 2001/10/23 20:52:51 + +commit 3b820b2d5354fffc824218ee3750a1a9435f0a8e +Author: jbj +Date: Tue Oct 23 16:48:20 2001 +0000 + + - generate an rpm header on the fly for imported pubkeys. + + CVS patchset: 5130 + CVS date: 2001/10/23 16:48:20 + +commit 01baa77546d1efce05edecfabef82c5610ed559e +Author: jbj +Date: Sun Oct 21 21:48:23 2001 +0000 + + Orphans. + + CVS patchset: 5129 + CVS date: 2001/10/21 21:48:23 + +commit 1ad22a0bc4efaad2113975267bf5bf0708cb870e +Author: jbj +Date: Sun Oct 21 21:43:32 2001 +0000 + + - all symbols but hdrVec are now forward references in linkage. + + CVS patchset: 5128 + CVS date: 2001/10/21 21:43:32 + +commit d5dd3dfbc6f0e9128e055eaf84635c85de7b8139 +Author: jbj +Date: Sat Oct 20 22:31:09 2001 +0000 + + - stupid macros to configure public key file paths. + + CVS patchset: 5127 + CVS date: 2001/10/20 22:31:09 + +commit 00a348f332021405f90b86748fe209bf1e820830 +Author: jbj +Date: Sat Oct 20 20:28:56 2001 +0000 + + - add :base64 and :armor format extensions, dump binary tags in hex. + - proof-of-concept pubkey retrieval from RPM-{PGP,GPG}-KEY. + + CVS patchset: 5126 + CVS date: 2001/10/20 20:28:56 + +commit d589b29c7fd3fa9c77f4ba6810fe8654cf67e2a1 +Author: jbj +Date: Fri Oct 19 22:47:40 2001 +0000 + + Permit multiple, simultaneous, digests on a single FD_t. + + CVS patchset: 5125 + CVS date: 2001/10/19 22:47:40 + +commit e2dfa4f2d4f643ff2c47adfc8ae6b4b700c62b8b +Author: jbj +Date: Fri Oct 19 19:51:18 2001 +0000 + + - beecrypt is at least as good as pgp/gpg on verify, pull the plug. + + CVS patchset: 5124 + CVS date: 2001/10/19 19:51:18 + +commit e2a842407516209b3447997d19879848d074c3d6 +Author: jbj +Date: Fri Oct 19 13:51:20 2001 +0000 + + Start ripping gpg/pgp on signature verify paths. + + CVS patchset: 5123 + CVS date: 2001/10/19 13:51:20 + +commit ca1d809cb1d9125b7029e2d5d378d2a04955f178 +Author: jbj +Date: Fri Oct 19 01:35:57 2001 +0000 + + Rewire digests, step 2. + + CVS patchset: 5122 + CVS date: 2001/10/19 01:35:57 + +commit aaaaf45ba6713203598c5f0c1373bdb11f5e41fe +Author: jbj +Date: Fri Oct 19 01:34:52 2001 +0000 + + New file from db-4.0.7 to be ignored. + + CVS patchset: 5121 + CVS date: 2001/10/19 01:34:52 + +commit 308f022df4ceee11a0cae80521ff1ddbcbfadcee +Author: jbj +Date: Fri Oct 19 01:24:21 2001 +0000 + + Rewire digests, step 1. + + CVS patchset: 5120 + CVS date: 2001/10/19 01:24:21 + +commit 73df151e8fb2df5b6a57eaf944fabebad0fd47d9 +Author: jbj +Date: Thu Oct 18 16:39:54 2001 +0000 + + Scaffholding for dumping full headers carried through transaction. + + CVS patchset: 5119 + CVS date: 2001/10/18 16:39:54 + +commit d57a29baac08c4cc929c9755cfbc5c93d56a0f4d +Author: jbj +Date: Wed Oct 17 16:43:36 2001 +0000 + + Converging on lclint-3.0.17 strict level. + + CVS patchset: 5118 + CVS date: 2001/10/17 16:43:36 + +commit 96a3f7a55d444296f97c3e28c8d810e220e1cb9f +Author: jbj +Date: Tue Oct 16 17:42:18 2001 +0000 + + Factor -type problems into explicit code annotations. + + CVS patchset: 5117 + CVS date: 2001/10/16 17:42:18 + +commit 9f45bcd3ecf3f3548ed7a8490b882a6ca9ffeb94 +Author: jbj +Date: Tue Oct 16 14:58:57 2001 +0000 + + More lclint annotations. + + CVS patchset: 5116 + CVS date: 2001/10/16 14:58:57 + +commit cafccc00586497bdc9c5a4c12b19709fbd417976 +Author: jbj +Date: Mon Oct 15 21:07:08 2001 +0000 + + - use only header methods, routines are now static. + + CVS patchset: 5115 + CVS date: 2001/10/15 21:07:08 + +commit 14c1b443f6697a32c672b3a7e48ded98929431f9 +Author: jbj +Date: Mon Oct 15 19:27:13 2001 +0000 + + More branchstate lclint annotations. + + CVS patchset: 5114 + CVS date: 2001/10/15 19:27:13 + +commit 72471f2e54686202a9862a3fd3bd6d0135d81d2a +Author: jbj +Date: Mon Oct 15 17:53:34 2001 +0000 + + Explicit branchstate annotations. + + CVS patchset: 5113 + CVS date: 2001/10/15 17:53:34 + +commit 3f462f318fd2f602fddb1a95e5d652e67aafa49e +Author: jbj +Date: Mon Oct 15 04:22:09 2001 +0000 + + - upgrade to db-4.0.7. + + CVS patchset: 5112 + CVS date: 2001/10/15 04:22:09 + +commit 4d30baadae68f6454ca01d11903225450e98d88f +Author: jbj +Date: Mon Oct 15 03:54:05 2001 +0000 + + Resolve conflicts. + + CVS patchset: 5111 + CVS date: 2001/10/15 03:54:05 + +commit db7110722d3317cc81dd11c104dd45ac8c328e20 +Author: jbj +Date: Mon Oct 15 03:47:21 2001 +0000 + + Initial revision + + CVS patchset: 5110 + CVS date: 2001/10/15 03:47:21 + +commit 033e2a186a797374caeb2295a00dee5eef202ffc +Author: jbj +Date: Mon Oct 15 03:28:09 2001 +0000 + + Typo. + + CVS patchset: 5107 + CVS date: 2001/10/15 03:28:09 + +commit d8dc44f36377c59164d19106f0f93843ea5b3a09 +Author: jbj +Date: Mon Oct 15 03:22:10 2001 +0000 + + lclint fiddles to annotate globals. + + CVS patchset: 5106 + CVS date: 2001/10/15 03:22:10 + +commit 4b67d7621c20e1f2c5aa1ebdf7bb26eb3a6ae0d5 +Author: jbj +Date: Sat Oct 13 22:01:38 2001 +0000 + + More lclint annotations. + + CVS patchset: 5105 + CVS date: 2001/10/13 22:01:38 + +commit 525f4cb8b1317120c36a75f47f796d285f69078c +Author: jbj +Date: Sat Oct 13 19:35:58 2001 +0000 + + - ratchet up to lclint "strict" level. + + CVS patchset: 5104 + CVS date: 2001/10/13 19:35:58 + +commit 2d312d19c14300224ea85ea4fd62a0844d1af573 +Author: jbj +Date: Thu Oct 11 21:31:56 2001 +0000 + + - proof-of-concept PGP/RSA verification for legacy signatures. + + CVS patchset: 5103 + CVS date: 2001/10/11 21:31:56 + +commit 61b8964fb92c2b9fd55652e11decabd53df89813 +Author: jbj +Date: Mon Oct 8 16:12:33 2001 +0000 + + - upgrade to beecrypt-2.2.0pre. + + CVS patchset: 5102 + CVS date: 2001/10/08 16:12:33 + +commit 49fb1d34f1cad5cc4360d120aa3034bf8b0f8f68 +Author: jbj +Date: Mon Oct 8 15:48:30 2001 +0000 + + Lclint clean. + + CVS patchset: 5101 + CVS date: 2001/10/08 15:48:30 + +commit 4c15c4d2740d44d437648b17ef89a34b366bc654 +Author: jbj +Date: Mon Oct 8 14:48:22 2001 +0000 + + Resolve conflicts. + + CVS patchset: 5100 + CVS date: 2001/10/08 14:48:22 + +commit d14c5439529865c90d2a7e31c0dba5f5c9ff1765 +Author: jbj +Date: Mon Oct 8 13:31:57 2001 +0000 + + Initial revision + + CVS patchset: 5099 + CVS date: 2001/10/08 13:31:57 + +commit 71dff1a731923b405a9a189cb087f7fe5e013290 +Author: jbj +Date: Fri Oct 5 20:39:50 2001 +0000 + + - proof-of-concept GPG/DSA verification for legacy signatures. + + CVS patchset: 5097 + CVS date: 2001/10/05 20:39:50 + +commit 726fff1bd1dc3f74a1f4b7f900c1075b6f32ca31 +Author: jbj +Date: Fri Oct 5 05:10:12 2001 +0000 + + Test vectors for GPG V3 DSA signature of "abc". + + CVS patchset: 5096 + CVS date: 2001/10/05 05:10:12 + +commit 5d3d83bffd8ad028b278038c372e124efd65d905 +Author: jbj +Date: Fri Oct 5 05:05:28 2001 +0000 + + Remove swab'ed versions of sethex routines, not yet needed. + + CVS patchset: 5095 + CVS date: 2001/10/05 05:05:28 + +commit 186fe8da935aa3e257677d156063d5703786b2a3 +Author: jbj +Date: Wed Oct 3 16:11:27 2001 +0000 + + Fix segfault with "rpm --rebuild foo.spec". + + CVS patchset: 5094 + CVS date: 2001/10/03 16:11:27 + +commit 105dbc3c83dc569cc46f5ff76bc154cda9e6e015 +Author: jbj +Date: Tue Oct 2 18:29:43 2001 +0000 + + Add b32bswabhex/mp32nswabhex. + + CVS patchset: 5092 + CVS date: 2001/10/02 18:29:43 + +commit c91fc958592f719722f116883f24613cc090a2f9 +Author: jbj +Date: Mon Oct 1 17:40:12 2001 +0000 + + Display signature and public key internals, calculate SHA1 digest as well. + Display private signature internals in tkey. + Add dumpasn to rpmio jfor reference. + + CVS patchset: 5091 + CVS date: 2001/10/01 17:40:12 + +commit b7c25b0befd789b6bb1bc1393a04c8e70c36dfba +Author: jbj +Date: Sat Sep 29 17:44:45 2001 +0000 + + - create RFC-2440 OpenPGP API in rpmio. + - display signature packets before exec'ing gpg/pgp when verifying. + + CVS patchset: 5090 + CVS date: 2001/09/29 17:44:45 + +commit 9390fb8bff283960b6b0fb675007cd3d0fc9f20a +Author: jbj +Date: Sat Sep 29 13:42:58 2001 +0000 + + Sanity. + + CVS patchset: 5089 + CVS date: 2001/09/29 13:42:58 + +commit 690d53d79ec6947a0730cb8ff65b360a8995c293 +Author: jbj +Date: Sat Sep 29 01:27:22 2001 +0000 + + Move OpenPGP constants to rpmio/rpmpgp.h. + + CVS patchset: 5088 + CVS date: 2001/09/29 01:27:22 + +commit e8b918d801e75cb6b580bafa423a720c01c5a9c8 +Author: jbj +Date: Fri Sep 28 00:48:29 2001 +0000 + + Bug fixxed, remove the example. + + CVS patchset: 5087 + CVS date: 2001/09/28 00:48:29 + +commit 367788b45e31e08cc493e5d1fa828c6d370f0427 +Author: jbj +Date: Fri Sep 28 00:35:50 2001 +0000 + + Remove broken asm mp32{even,odd} for now. + Add the RSA test(s) to beetest. + + CVS patchset: 5086 + CVS date: 2001/09/28 00:35:50 + +commit aeb07623428910e8811818209cc4389cd4296d58 +Author: jbj +Date: Thu Sep 27 16:54:57 2001 +0000 + + Remove lclint warnings from dsa.[ch]. + + CVS patchset: 5085 + CVS date: 2001/09/27 16:54:57 + +commit 524652214da6ed0c6578e3c7ea2f989ee8c99b52 +Author: jbj +Date: Thu Sep 27 14:40:14 2001 +0000 + + Add DSA routines. + + CVS patchset: 5084 + CVS date: 2001/09/27 14:40:14 + +commit 90fb17b3568ef80f14ccb58764c3e7898096dcb5 +Author: jbj +Date: Wed Sep 26 14:45:50 2001 +0000 + + - bind beecrypt md5/sha1 underneath rpmio. + + CVS patchset: 5083 + CVS date: 2001/09/26 14:45:50 + +commit 92556605afa18d27318aa526985e231e60ea70d7 +Author: jbj +Date: Tue Sep 25 20:51:34 2001 +0000 + + - legacy: drop brokenMD5 support (rrpm-2.3.3 to rpm-2.3.8 on sparc). + - eliminate DYING code. + + CVS patchset: 5082 + CVS date: 2001/09/25 20:51:34 + +commit cb216009409823affa8e24c880b910fdd9531fb0 +Author: jbj +Date: Tue Sep 25 16:21:44 2001 +0000 + + - drop rpmio/base64.[ch] in favor of beecrypt. + - drop lib/md5*.[ch] files in favor of beecrypt. + + CVS patchset: 5081 + CVS date: 2001/09/25 16:21:44 + +commit a2830a271c2486a266dfc18490989f0e41cf9d10 +Author: jbj +Date: Tue Sep 25 16:21:29 2001 +0000 + + More lclint fiddles. + + CVS patchset: 5080 + CVS date: 2001/09/25 16:21:29 + +commit 2a420b223d46c4cbc33623e9ce6f08f6e63a67c0 +Author: jbj +Date: Tue Sep 25 14:03:27 2001 +0000 + + - drop rpmio/base64.[ch] in favor of beecrypt versions. + + CVS patchset: 5079 + CVS date: 2001/09/25 14:03:27 + +commit 85d220be2365d60bbb0eb56306a794e55c754161 +Author: jbj +Date: Tue Sep 25 03:03:23 2001 +0000 + + - Start rpm-4.1. + - Loosely wire beecrypt library into rpm. + + CVS patchset: 5078 + CVS date: 2001/09/25 03:03:23 + +commit 9d555b6216692deeb97eb821e42716a7cd529ae0 +Author: jbj +Date: Mon Sep 24 21:53:14 2001 +0000 + + Move to lclint-3.0.0.15, revisit and clean up annotations. + intl/: Add gettext orphans. + popt/intl/: Add gettext orphans. + beecrypt: Add beecrypt repository. + rpmio/tdigest.c: Add beecrypt digest checks. + + CVS patchset: 5077 + CVS date: 2001/09/24 21:53:14 + +commit 76b20cd2f4ebd499766aec27f62089690ac1d073 +Author: jbj +Date: Mon Sep 24 19:17:45 2001 +0000 + + Remove dead code. + Display both GPG/PGP decodes in openpgp. + + CVS patchset: 5076 + CVS date: 2001/09/24 19:17:45 + +commit 9db80726185159ff58598c6be52ca192602323c7 +Author: jbj +Date: Mon Sep 24 19:02:24 2001 +0000 + + Handle white space in b64{dec,enc}. + + CVS patchset: 5075 + CVS date: 2001/09/24 19:02:24 + +commit 3e3ac9b75fadfd6e79bb7463af51ba94349eafca +Author: jbj +Date: Mon Sep 24 16:52:17 2001 +0000 + + Replace b64{enc,dec}. + + CVS patchset: 5074 + CVS date: 2001/09/24 16:52:17 + +commit cd5831cddd9c308aa67ee0cb014c7f2da39326c8 +Author: jbj +Date: Mon Sep 24 14:56:45 2001 +0000 + + Add tests/openpgp and tests/base64bug. + + CVS patchset: 5073 + CVS date: 2001/09/24 14:56:45 + +commit e71e5d2619b0179f2110cd5c6d37e470d9c92a0b +Author: jbj +Date: Mon Sep 24 13:03:50 2001 +0000 + + Annotate aio_foo routines, clean up mess of workarounds. + + CVS patchset: 5072 + CVS date: 2001/09/24 13:03:50 + +commit e653dd8e8180498a77f0e9371d10d7e90727c2e3 +Author: jbj +Date: Sun Sep 23 21:06:52 2001 +0000 + + annotations for audio/dsp entropy sources. + + CVS patchset: 5071 + CVS date: 2001/09/23 21:06:52 + +commit 039162ac61254a49feffa577e2dccafe4d75707c +Author: jbj +Date: Sun Sep 23 15:47:37 2001 +0000 + + More lclint fiddles. + + CVS patchset: 5070 + CVS date: 2001/09/23 15:47:37 + +commit 0f7777894493527a5672d0ce09c4855e2b69495f +Author: jbj +Date: Sun Sep 23 12:09:48 2001 +0000 + + More lclint annotations, now at the strict level with a complete program. + + CVS patchset: 5069 + CVS date: 2001/09/23 12:09:48 + +commit 1eef0782f60f9d8d80be273ace982ad4c2a56d98 +Author: jbj +Date: Fri Sep 21 15:07:11 2001 +0000 + + - lclint-3.0.0.15 fiddles. + + CVS patchset: 5067 + CVS date: 2001/09/21 15:07:11 + +commit 59a045374df64f3bc62eb200f7d11338ea2787a8 +Author: jbj +Date: Thu Sep 20 20:17:13 2001 +0000 + + Orphans + + CVS patchset: 5066 + CVS date: 2001/09/20 20:17:13 + +commit 127af901c36a384da5bd12536fcc3c03d7cb5ef8 +Author: jbj +Date: Thu Sep 20 20:16:11 2001 +0000 + + Doxygen fiddles. + + CVS patchset: 5065 + CVS date: 2001/09/20 20:16:11 + +commit fcc1f6571c7d61b839e3d092b29940bf739c4f4c +Author: jbj +Date: Wed Sep 19 21:30:01 2001 +0000 + + Wire in doxygen doco. + + CVS patchset: 5064 + CVS date: 2001/09/19 21:30:01 + +commit 3f2193ff8fd567ec5bbfcf6d430d371ee9637e5e +Author: jbj +Date: Wed Sep 19 18:05:47 2001 +0000 + + lclint fiddles. + + CVS patchset: 5063 + CVS date: 2001/09/19 18:05:47 + +commit 02c1189d5951c70f632482fc0a674af35e9ea15d +Author: jbj +Date: Wed Sep 19 16:16:15 2001 +0000 + + Add autogen.sh et al to build from CVS. + First pass at lclint annotations. + + CVS patchset: 5062 + CVS date: 2001/09/19 16:16:15 + +commit 7aea4d1e958c385d5ecd01638a3f295426ccf15c +Author: jbj +Date: Tue Sep 18 19:28:21 2001 +0000 + + Create. + + CVS patchset: 5061 + CVS date: 2001/09/18 19:28:21 + +commit 78de87f74cc1a9cfffb9a198509f2e6697b8bca8 +Author: jbj +Date: Tue Sep 18 19:23:46 2001 +0000 + + Initial revision + + CVS patchset: 5051 + CVS date: 2001/09/18 19:23:46 + +commit 38edc494525ccdf25f11ed2288378ba640928900 +Author: jbj +Date: Sat Sep 15 21:21:31 2001 +0000 + + - close/discard Depends index after rpmdepCheck() use. + + CVS patchset: 5049 + CVS date: 2001/09/15 21:21:31 + +commit da9b21485cd9400883de08b2754bd103f25144da +Author: jbj +Date: Sat Sep 15 13:49:11 2001 +0000 + + Sync with rpm-4_0 branch. + + CVS patchset: 5048 + CVS date: 2001/09/15 13:49:11 + +commit 2b23209fceb4377bd4c4b5230c580122ffa81b41 +Author: jbj +Date: Fri Aug 31 14:02:13 2001 +0000 + + - fix: Provides: /path did not work with added packages (#52183). + - fix: progress bar scaling did not include source rpm count. + + CVS patchset: 5038 + CVS date: 2001/08/31 14:02:13 + +commit 46713343fb02fe669de4ff879e1e3477746c05d1 +Author: jbj +Date: Tue Aug 28 20:33:06 2001 +0000 + + - dependency whiteout for libgnomeprint -> gnome-print (ordering only). + - dependency whiteout for nautilus -> nautilus-mozilla (ordering only). + + CVS patchset: 5035 + CVS date: 2001/08/28 20:33:06 + +commit 64a1d1afdcfce7b401f02eb19e268cd3562ef1ac +Author: jbj +Date: Mon Aug 27 18:39:17 2001 +0000 + + - fix: error message on failed package installs resurrected. + - python: memory leaks in headerLoad/headerunload bindings. + - python: retrofit sha1 digest using RPMTAG_SHA1RHN. + - python: change rhnUnload bindings. + + CVS patchset: 5032 + CVS date: 2001/08/27 18:39:17 + +commit f847cb330c61b74a376df1f4ddb1e89251327e6f +Author: jbj +Date: Sun Aug 26 17:22:33 2001 +0000 + + Mark bugzilla #52183 change. + + CVS patchset: 5030 + CVS date: 2001/08/26 17:22:33 + +commit 5994a308bc062fff53ff0184b8dea15d19fcfb63 +Author: jbj +Date: Sat Aug 25 01:54:58 2001 +0000 + + - within a region, entries sort by address; added drips sort by tag. + + CVS patchset: 5028 + CVS date: 2001/08/25 01:54:58 + +commit a0ebbe5925f63d9a802c50bba8e9298cea21f1f7 +Author: jbj +Date: Fri Aug 24 17:55:08 2001 +0000 + + - headers without RPMTAG_NAME are skipped when retrieved. + + CVS patchset: 5025 + CVS date: 2001/08/24 17:55:08 + +commit 507f3400be2592b030f76ca144980635cce8d25b +Author: jbj +Date: Fri Aug 17 19:38:06 2001 +0000 + + - verify perms (but not mode) on %ghost files. + + CVS patchset: 5019 + CVS date: 2001/08/17 19:38:06 + +commit 3b6b341a44b635e979434572eaf74986385319f5 +Author: jbj +Date: Thu Aug 16 18:49:07 2001 +0000 + + - python: add exception to detect bad data in hdrUnload. + - change dir creation message from warning to debug for now. + + CVS patchset: 5017 + CVS date: 2001/08/16 18:49:07 + +commit e42f1fd9675c52de900356a73777ec482e285591 +Author: jbj +Date: Wed Aug 15 14:03:03 2001 +0000 + + - always use dl size in regionSwab() return. + - ppc: revert ppcmac to ppc. + - ppc: autoconf test for va_copy. + + CVS patchset: 5015 + CVS date: 2001/08/15 14:03:03 + +commit a36acaf3b8f2a1417c65ab9f68e3a868045a12d4 +Author: jbj +Date: Mon Aug 13 16:39:14 2001 +0000 + + - fix: segfault on headerFree given malicious data. + - fix: don't verify hash page nelem. + - better error messages for verification failures. + - include directory /usr/lib/rpm in rpm package. + + CVS patchset: 5013 + CVS date: 2001/08/13 16:39:14 + +commit 8f2315934d44214c4c446d077c8122c4dea6381f +Author: jbj +Date: Thu Aug 9 02:53:26 2001 +0000 + + - add -D_REENTRANT (note rpmlib is still not thread safe). + + CVS patchset: 5009 + CVS date: 2001/08/09 02:53:26 + +commit 46cc804f36f076882932b2301fe25aabea11b983 +Author: jbj +Date: Wed Aug 8 18:13:06 2001 +0000 + + - add legacy (compile only) wrappers for fdFileno et al. + + CVS patchset: 5007 + CVS date: 2001/08/08 18:13:06 + +commit e699b8fab3f25912141fd1cefc1cc0375b3dd9be +Author: jbj +Date: Mon Aug 6 11:27:27 2001 +0000 + + - portability: some compilers squawk at return ((void) foo()) (#50419). + - remove fdFileno() from librpmio, use inline version instead (#50420). + - fix: linux find-requires needs quotes around [:blank:]. + - remove /var/lib/rpm/__db* cache files if %__dbi_cdb is not configured. + - python: add hiesenbug patch. + + CVS patchset: 5005 + CVS date: 2001/08/06 11:27:27 + +commit 682c9534adb618becfa7565a4f45eea5e8f2bb2a +Author: jbj +Date: Sat Aug 4 16:18:58 2001 +0000 + + - fix: autoconf glob tests (#50845). + + CVS patchset: 5003 + CVS date: 2001/08/04 16:18:58 + +commit dce5aa0ebd1a784ad8db04e07c7c2347e450160e +Author: jbj +Date: Fri Aug 3 15:17:55 2001 +0000 + + lclint clean again. + + CVS patchset: 5001 + CVS date: 2001/08/03 15:17:55 + +commit 46d2e8bbd870dce29f43af7c67f50c97754975bd +Author: jbj +Date: Fri Aug 3 05:04:13 2001 +0000 + + - fix: i18n tags not terminated correctly with NUL (#50304). + - add explicit casts to work around a s390 compiler problem. + + CVS patchset: 4998 + CVS date: 2001/08/03 05:04:13 + +commit 1a5a027bcc8071a3b50f726bf8a3e93cd770ef1d +Author: jbj +Date: Tue Jul 31 18:13:22 2001 +0000 + + - add support for mips (#49283). + - add __as, _build_arch, and __cxx macros (#36662, #36663, #49280). + - detailed build package error messages. + + CVS patchset: 4996 + CVS date: 2001/07/31 18:13:22 + +commit c6fba63aca2cbee02848e5913cddc730e43cee8e +Author: jbj +Date: Sat Jul 28 00:33:07 2001 +0000 + + - fix: --noscripts is another multimode option. + - add tmpdir to configure db3 tmpdir into chroot tree. + - permit lazy db opens within chroot. + - fix: diddle dbenv path to accomodate backing store reopen in chroot. + + CVS patchset: 4990 + CVS date: 2001/07/28 00:33:07 + +commit 03e498c64e1cca77b862f0b37549cd7c4a598149 +Author: jbj +Date: Tue Jul 24 20:39:19 2001 +0000 + + - fix: don't segfault when presented with rpm-2.4.10 packaging (#49688). + + CVS patchset: 4987 + CVS date: 2001/07/24 20:39:19 + +commit 085e3275d2e1a90db7abd816a7fce31685b58fc7 +Author: jbj +Date: Tue Jul 24 02:52:52 2001 +0000 + + - rename pmac to ppcmac. + - ia64: revert -O0 compilation. + - upgrade to db-3.3.11 final. + + CVS patchset: 4984 + CVS date: 2001/07/24 02:52:52 + +commit 3a17cb851b4e65d4c6b5f1ad1b59afdccfabc743 +Author: jbj +Date: Mon Jul 23 20:15:24 2001 +0000 + + Orphans. + + CVS patchset: 4977 + CVS date: 2001/07/23 20:15:24 + +commit d91a331d0c88bef042117c4a20b597aede61cb77 +Author: jbj +Date: Mon Jul 23 20:09:04 2001 +0000 + + Initial revision + + CVS patchset: 4976 + CVS date: 2001/07/23 20:09:04 + +commit 2aec992c9d5db8cdf706fb3dcd8cdfa642ca84d3 +Author: jbj +Date: Mon Jul 23 16:02:27 2001 +0000 + + - add pmac/ppciseries/ppcpseries varieties to ppc arch family. + - include tdigest.c tkey.c and trpmio.c to "make dist". + - re-enable dependency resolution source from package NVR. + + CVS patchset: 4973 + CVS date: 2001/07/23 16:02:27 + +commit a66e1f6a9271f5e61f369ad844ad73b93a8a1f3b +Author: jbj +Date: Sun Jul 22 12:38:28 2001 +0000 + + - enable rpm-perl subpackage. + + CVS patchset: 4971 + CVS date: 2001/07/22 12:38:28 + +commit 7723beeaf4948e03de652d30a5a38d77670bc623 +Author: jbj +Date: Sat Jul 21 19:44:22 2001 +0000 + + - add sha1 test vectors, verify on ix86/alpha/sparc. + - add (but disable for now) rpm-perl subpackage from Perl-RPM. + - python: parameterize with PYVER to handle 1.5 and/or 2.1 builds. + - add build dependency on zlib-devel (#49575). + + CVS patchset: 4969 + CVS date: 2001/07/21 19:44:22 + +commit 74ce2b5c67fc4c4b6eb36825ea09860c3c8fd7fd +Author: jbj +Date: Fri Jul 20 17:09:08 2001 +0000 + + Patch from . + + CVS patchset: 4965 + CVS date: 2001/07/20 17:09:08 + +commit 46ded4611836f6191cf18ee525e62f26282c11a1 +Author: jbj +Date: Fri Jul 20 16:41:09 2001 +0000 + + - fix: yet another segfault from bad metadata prevented. + + CVS patchset: 4962 + CVS date: 2001/07/20 16:41:09 + +commit 3a2ddf155134e02f5aa421f739cb1ca3f034421c +Author: jbj +Date: Thu Jul 19 21:14:05 2001 +0000 + + - fix: 4 memory leaks eliminated. + + CVS patchset: 4960 + CVS date: 2001/07/19 21:14:05 + +commit 7bfb0979b655aefaf148534a722356cc92c272f8 +Author: jbj +Date: Wed Jul 18 23:03:27 2001 +0000 + + - resurrect --specedit for i18n. + + CVS patchset: 4957 + CVS date: 2001/07/18 23:03:27 + +commit 2225886928ab5e2784cf782f36355753236a1097 +Author: jbj +Date: Wed Jul 18 10:49:09 2001 +0000 + + - fix: %dev(...) needs to map rdev and mtime from metadata. + + CVS patchset: 4953 + CVS date: 2001/07/18 10:49:09 + +commit fe5362ef809874996febb2eb0aa89877ee1f74fd +Author: jbj +Date: Tue Jul 17 20:01:46 2001 +0000 + + - python: "seal" immutable region for legacy headers in rhnUnload() . + - python: add poptmodule.so bindings. + + CVS patchset: 4951 + CVS date: 2001/07/17 20:01:46 + +commit bad8c7a9b243a1f72338dc04daba56a944149716 +Author: jbj +Date: Tue Jul 17 03:03:14 2001 +0000 + + - fix: _smp_flags macro broken. + - python: bind rhnUnload differently. + - fix: rescusitate --querytags. + - fix: short aliases broken (#49213). + + CVS patchset: 4949 + CVS date: 2001/07/17 03:03:14 + +commit ecfb46adaaeff044c1a44602b141ca885d351c06 +Author: jbj +Date: Mon Jul 16 14:48:07 2001 +0000 + + - fix: don't total hard linked file size multiple times (#46286). + - add %dev(type,major,minor) directive to permit non-root dev build. + + CVS patchset: 4944 + CVS date: 2001/07/16 14:48:07 + +commit 77d49ea5a28862a3c9a014b7636b0c57a2c439e5 +Author: jbj +Date: Sat Jul 14 20:09:56 2001 +0000 + + - isolate cdb access configuration (experimental, use at your own risk). + - fix: hard fail on locked dbopen if CDB locking not in use. + - fix: dbconfig with mp_mmapsize=16Mb/mp_size=1Mb for + "everything ENOSPC" failure check. + + CVS patchset: 4942 + CVS date: 2001/07/14 20:09:56 + +commit cfa46ad5cb7ecc5de6bdbea733fd454749ed15bc +Author: jbj +Date: Fri Jul 13 13:44:26 2001 +0000 + + - fix: scope multi-mode options like --nodeps correctly (#48825). + + CVS patchset: 4940 + CVS date: 2001/07/13 13:44:26 + +commit 81de17180f1b870e2bc4ade50814f46ae9d6bf9d +Author: jbj +Date: Wed Jul 11 14:23:01 2001 +0000 + + - fix: adjust arg count for --POPTdesc/--POPTargs deletion. + - add linux per-platform macro %_smp_mflags . + - document more popt aliases for --help usage. + - remove --tarbuild from man page(s), use -t[abpcils] instead (#48666). + + CVS patchset: 4936 + CVS date: 2001/07/11 14:23:01 + +commit be9867aa181d83f73cdc9e2acc5f790c4cfc8637 +Author: jbj +Date: Wed Jul 11 02:16:16 2001 +0000 + + - python bindings should not segfault when fed bad data. + + CVS patchset: 4934 + CVS date: 2001/07/11 02:16:16 + +commit 3bbe7a7fc4111c050eb21eeb9867a17ba46d9796 +Author: jbj +Date: Wed Jul 11 00:07:46 2001 +0000 + + - unlink all __db.nnn files before 1st db open. + + CVS patchset: 4932 + CVS date: 2001/07/11 00:07:46 + +commit e15b4593ebd2f2f147a8c86511aec1b0decb34ab +Author: jbj +Date: Tue Jul 10 17:59:11 2001 +0000 + + - package version now configureable, default v3. + - rename rpm libraries to have version with libtool -release. + - fix: -i CLI context broken Yet Again. + + CVS patchset: 4930 + CVS date: 2001/07/10 17:59:11 + +commit f440f450d9648f06ed8589adf7d4c1d6a286550b +Author: jbj +Date: Sun Jul 8 21:30:35 2001 +0000 + + - python: rhnLoad/rhnUnload to check header digest. + + CVS patchset: 4928 + CVS date: 2001/07/08 21:30:35 + +commit 34f1d5125146c995c49f39a41c8799c5cc3201c2 +Author: jbj +Date: Sat Jul 7 19:37:52 2001 +0000 + + Orphans. + + CVS patchset: 4925 + CVS date: 2001/07/07 19:37:52 + +commit 134a8a85c2873b24bb3a4a15b0a9dae1662bc875 +Author: jbj +Date: Sat Jul 7 19:15:17 2001 +0000 + + - popthelp.c: don't use stpcpy to avoid portability grief (#47500). + - permit alias/exec description/arg text to be set from popt config. + - use rpmqv.c, not rpm.c, as rpm's main() routine. + + CVS patchset: 4923 + CVS date: 2001/07/07 19:15:17 + +commit 9df3fc957f97511ce04123f3cbebdf9dc543cebb +Author: jbj +Date: Fri Jul 6 20:37:42 2001 +0000 + + - expose rpmShowProgress() and rpmVerifyDigest() in rpmcli.h. + - portability: avoid st_mtime, gendiff uses basename, etc (#47497). + - glibc-2.0.x has not __va_copy(). + - popthelp.c: static copy of stpcpy/stpncpy for the deprived (#47500). + + CVS patchset: 4921 + CVS date: 2001/07/06 20:37:42 + +commit 20c2a42d4f18fe324c3bc06cc106136130f44c9b +Author: jbj +Date: Tue Jul 3 19:26:58 2001 +0000 + + - fix: redundant entries in file manifests handled correctly (#46914). + - map uid/gid from metadata into payload headers. + + CVS patchset: 4915 + CVS date: 2001/07/03 19:26:58 + +commit c33e408649c342e000edce34ca122058a9050cdd +Author: jbj +Date: Sat Jun 30 18:32:28 2001 +0000 + + - update intl dirs to gettext-0.10.38. + - fix: sanity check for header size added in headerCopyLoad() (#46469). + + CVS patchset: 4913 + CVS date: 2001/06/30 18:32:28 + +commit 5177464972a45db08785964718215c2a9ddd7179 +Author: jbj +Date: Fri Jun 29 22:38:13 2001 +0000 + + Update included gettext routines to 0.10.38. + + CVS patchset: 4911 + CVS date: 2001/06/29 22:38:13 + +commit 3e219ad91a7ccc6632b948c5bab03694f3f6b25d +Author: jbj +Date: Thu Jun 28 22:19:08 2001 +0000 + + - fix: sanity checks on #tags (<65K) and offset (<16Mb) in header. + - fix: add -r to useradd to prevent /etc/skel glop (#46215). + - fix: disambiguate typedef and struct name(s) for kpackage. + + CVS patchset: 4908 + CVS date: 2001/06/28 22:19:08 + +commit b533de2b2722679b3e1bc486467310bd8c61f806 +Author: jbj +Date: Mon Jun 25 20:01:42 2001 +0000 + + Yet another patial harlink set fix. + + CVS patchset: 4903 + CVS date: 2001/06/25 20:01:42 + +commit 3bb77854aa61ac18b672df8baf34f32537cf6604 +Author: jbj +Date: Mon Jun 25 17:49:42 2001 +0000 + + - fix: permit partially enumerated hardlink file sets during build. + - fix: resurrect rpm signature modes. + + CVS patchset: 4902 + CVS date: 2001/06/25 17:49:42 + +commit f40a045acb3de64dce15019ed5f1da4612a817f9 +Author: jbj +Date: Thu Jun 21 03:51:34 2001 +0000 + + - add %{_gnu} macro to append "-gnu" to %{_target_platform} to + support --target/--host flavored %configure. Legacy behavior + available by undefining %{_gnu}. + + CVS patchset: 4899 + CVS date: 2001/06/21 03:51:34 + +commit 60977b6c27aca83d1c15deef2e4f759268308075 +Author: jbj +Date: Wed Jun 20 21:20:16 2001 +0000 + + - fix: rpm -qlv link count for directories dinna include '..'. + - fix: rpm -qlv size for directories should be zero. + - add --noghost to filter non-payload files from rpm -qlv output. + + CVS patchset: 4897 + CVS date: 2001/06/20 21:20:16 + +commit 6f88379b75dd5a0f029e709d29a3c10f40b76102 +Author: jbj +Date: Wed Jun 20 16:45:33 2001 +0000 + + Typo. + + CVS patchset: 4894 + CVS date: 2001/06/20 16:45:33 + +commit 512b5ce682beae889b6d32b011771f1b63e36329 +Author: jbj +Date: Wed Jun 20 16:42:19 2001 +0000 + + - fix: partial sets of hardlinked files permitted in payload (yes, changed). + - work around a (possible) compiler problem on ia64. + + CVS patchset: 4893 + CVS date: 2001/06/20 16:42:19 + +commit 5f2d9ab25b9339314ac318cf0f968fe03c31be97 +Author: jbj +Date: Wed Jun 20 06:29:20 2001 +0000 + + - fix: partial sets of hardlinked files forbidden in payload. + - fix: mark rpmdb files with %config to prevent erasure on downgrade. + + CVS patchset: 4891 + CVS date: 2001/06/20 06:29:20 + +commit 24245d28f88728b3ba40d305d857c74e394846c9 +Author: rjray +Date: Wed Jun 20 05:15:46 2001 +0000 + + These are adjustments made on the rpm-4_0 branch by Jeff. I've built and tested + them again my 3.0.5 test platform with no errors. Thus, they are being merged + onto the trunk. + + CVS patchset: 4889 + CVS date: 2001/06/20 05:15:46 + +commit c23977f8bf6478d5f050a0e02093a73ee58e9d08 +Author: jbj +Date: Wed Jun 20 01:28:15 2001 +0000 + + Add /usr/lib/rpm/noarch* symlinks to package. + + CVS patchset: 4888 + CVS date: 2001/06/20 01:28:15 + +commit efc5280a47fd738eb3207153e7642d9e379e1ae6 +Author: jbj +Date: Tue Jun 19 23:33:35 2001 +0000 + + Remove, changes now merged into linux.{prov,req}. + + CVS patchset: 4885 + CVS date: 2001/06/19 23:33:35 + +commit 8cd30c7190a630809a54f259718576d29bde80da +Author: jbj +Date: Tue Jun 19 20:03:13 2001 +0000 + + - make package ordering loop messages debug, not warning. + + CVS patchset: 4883 + CVS date: 2001/06/19 20:03:13 + +commit eb8db3316d3a125c8974436112829d56aa63b21f +Author: jbj +Date: Tue Jun 19 16:59:23 2001 +0000 + + - finalize per-header methods, accessing headerFoo through vector. + + CVS patchset: 4880 + CVS date: 2001/06/19 16:59:23 + +commit c6bd3de937ce3d40daa228e237c52527b9cdb8e1 +Author: jbj +Date: Tue Jun 19 11:38:51 2001 +0000 + + - preliminary abstraction to support per-header methods. + + CVS patchset: 4878 + CVS date: 2001/06/19 11:38:51 + +commit 29ea1567e7eafc457aed5529b240161cf8d4657f +Author: jbj +Date: Sun Jun 17 22:18:03 2001 +0000 + + Sync with rpm-4_0 branch. + + CVS patchset: 4876 + CVS date: 2001/06/17 22:18:03 + +commit c32276cdf5c28d7d701d7211e55f28ebc6f097d7 +Author: jbj +Date: Sun Jun 17 15:19:26 2001 +0000 + + - popt: add POPT_CONTEXT_ARG_OPTS for all opts to return 1 (#30912). + - fix: fsm reads/writes now return error on partial I/O. + - fix: Ferror returned spurious error for gzdio/bzdio. + + CVS patchset: 4874 + CVS date: 2001/06/17 15:19:26 + +commit 6f3943da6c5a26d2bf52cd7c47352bf785e9c8e6 +Author: jbj +Date: Sun Jun 17 00:36:01 2001 +0000 + + - popt: add POPT_ARGFLAG_SHOW_DEFAULT to display initial values (#32558). + + CVS patchset: 4872 + CVS date: 2001/06/17 00:36:01 + +commit 1ed6bde25a2d8c1878ed3b52298848d09a50bd3c +Author: jbj +Date: Sat Jun 16 01:49:10 2001 +0000 + + linux.req now verified functional on ia64-linux. + + CVS patchset: 4870 + CVS date: 2001/06/16 01:49:10 + +commit c0ef3c810f0cb08f0dc65ebe83921d24ce2d13b7 +Author: jbj +Date: Fri Jun 15 21:52:47 2001 +0000 + + - linux.req needs exit 0 + + CVS patchset: 4868 + CVS date: 2001/06/15 21:52:47 + +commit 6afa016e86bc87b7ac7d2a90db00df7b35cc99a4 +Author: jbj +Date: Fri Jun 15 18:53:06 2001 +0000 + + - ia64/sparc: .{req,prov} identical to linux.{req,prov}. + - add "rpmlib(ScriptletInterpreterArgs)" to track + %post -p "/sbin/ldconfig -n /usr/lib" + incompatibilities. + + CVS patchset: 4866 + CVS date: 2001/06/15 18:53:06 + +commit c097611c41b8480734a47547018dd0e0e61efcbb +Author: jbj +Date: Fri Jun 15 16:01:59 2001 +0000 + + Orphans. + + CVS patchset: 4864 + CVS date: 2001/06/15 16:01:59 + +commit 58b120d8785b7622a3c5c603f109a1fc2f085f68 +Author: jbj +Date: Fri Jun 15 16:01:10 2001 +0000 + + - alpha: don't add "()(64bit)" dependency markers. + + CVS patchset: 4863 + CVS date: 2001/06/15 16:01:10 + +commit f0d2abd2bcb74ab18645355ba45189abe77f38bf +Author: jbj +Date: Fri Jun 15 04:56:33 2001 +0000 + + - fix: db1 end-of-file not detected in legacy compatible way. + - fix: remove (harmless) chown error message from %post. + - add --target/--host to %configure, add example cross-build/config.site + scripts to /usr/lib/rpm (#44581). + - rpmdb iterator selectors permit default/strcmp/regex/glob matching. + - rpmdb iterator selectors permit negative matches. + + CVS patchset: 4861 + CVS date: 2001/06/15 04:56:33 + +commit 22b9de5f331285fef6b353b9441d121dcc639ea2 +Author: jbj +Date: Wed Jun 13 20:57:06 2001 +0000 + + - add rpmdbSetIteratorRE() for regex matching in database iterators. + - permit rpm -qa to take RE args applied to name tag. + - permit dbiFindMatches() to use version/release patterns. + - eliminate all uses of rpmdbSetIterator{Version,Release}. + + CVS patchset: 4859 + CVS date: 2001/06/13 20:57:06 + +commit 7233e3ad7373eec14ca47dc292806deb986519b1 +Author: jbj +Date: Tue Jun 12 17:06:47 2001 +0000 + + - remove rpmrc Provides: Yet Again, use virtual packages. + - dump cursor debugging wrappers. + - rpm --verify can disable rpmFileAttr checks. + + CVS patchset: 4856 + CVS date: 2001/06/12 17:06:47 + +commit 1b87bd9ef75810794edede55d94c25c5d1e94d41 +Author: jbj +Date: Tue Jun 12 04:10:21 2001 +0000 + + - remove dead code frpm popt table reorg. + - more CLI typedefs/prototypes moved from rpmlib.h to rpmcli.h. + - rpm --verify skips files in non-installed states. + - rpm --verify skips content checks for %ghost files. + - rpm --verify displays config/doc/gnost/license/readme atrrs for files. + - rpm --verify checks immutable header region digest if available. + - rpmbuild adds header region digest (SHA1 as string). + - use rpmTag* typedefs in new hge/hae/hme/hre header vectors. + + CVS patchset: 4854 + CVS date: 2001/06/12 04:10:21 + +commit 03f527390168680d98f13ada0dbf6be4cd17dc9c +Author: jbj +Date: Fri Jun 8 20:45:59 2001 +0000 + + - fix: QUERY_FOR_LIST file count clobbered. + - create top level rpmcli API, factor top level modes into popt tables. + - popt: add POPT_BIT_SET/POPT_BIT_CLR to API. + - autogen.sh checks for latest libtool-1.4 and automake-1.4-p2. + - rpm --verify reports failure(s) if corresponding tag is not in header. + - rpm --verify honors %config(missingok), add -v for legacy behavior. + + CVS patchset: 4852 + CVS date: 2001/06/08 20:45:59 + +commit 7bf9296288c38f3bf82ec38481738101bf063981 +Author: jbj +Date: Wed Jun 6 19:57:12 2001 +0000 + + - default to dbenv with mpool, --rebuilddb with nofsync is much faster. + + CVS patchset: 4849 + CVS date: 2001/06/06 19:57:12 + +commit 16d8c9e229508e4fcd3f03ac491c0c366c9172ac +Author: jbj +Date: Wed Jun 6 16:18:03 2001 +0000 + + - document build modes in rpmbuild.8, rpmbuild is born. + + CVS patchset: 4846 + CVS date: 2001/06/06 16:18:03 + +commit f0a67ca8b05a635340213158e9086b3bdf5443fd +Author: jbj +Date: Wed Jun 6 12:36:31 2001 +0000 + + - permit duplicates for btree indices. + + CVS patchset: 4843 + CVS date: 2001/06/06 12:36:31 + +commit c635bbf0aedc73aa138078ffe1c761507de9d91a +Author: jbj +Date: Tue Jun 5 22:01:13 2001 +0000 + + fix: increment pointer in funky header ext while loop. + + CVS patchset: 4841 + CVS date: 2001/06/05 22:01:13 + +commit 8959a0de7070e4a3886ede3f1703ac6098b5a6eb +Author: jbj +Date: Tue Jun 5 20:39:35 2001 +0000 + + Typos. + + CVS patchset: 4837 + CVS date: 2001/06/05 20:39:35 + +commit 4ae69250a2595531743074d81aec5804a1b5573f +Author: jbj +Date: Tue Jun 5 19:26:22 2001 +0000 + + - fix typos in linux.{req,prov}. + + CVS patchset: 4834 + CVS date: 2001/06/05 19:26:22 + +commit 750d54d8a33e67d8f89ed95a785c0f025c833aa8 +Author: jbj +Date: Mon Jun 4 13:55:58 2001 +0000 + + lclint fiddles. + + CVS patchset: 4833 + CVS date: 2001/06/04 13:55:58 + +commit 9e1929c9bb268faad7c8f140161504dbaf7f00f0 +Author: jbj +Date: Fri Jun 1 22:00:07 2001 +0000 + + - fix: lclint fiddles broke uCache initialization (#43139). + + CVS patchset: 4829 + CVS date: 2001/06/01 22:00:07 + +commit 3720e702daeefc4fbb8ce0665b8e6019c6e8b216 +Author: jbj +Date: Fri Jun 1 20:26:24 2001 +0000 + + perl.prov patch (#43081). + + CVS patchset: 4827 + CVS date: 2001/06/01 20:26:24 + +commit 25f341822c555005b79494b1a02e0c3b4d1f8f8d +Author: jbj +Date: Fri Jun 1 19:27:33 2001 +0000 + + - merge sparc64/ia64 fiddles back into linux.{req,prov}. + - automagically generate perl module dependencies always. + + CVS patchset: 4825 + CVS date: 2001/06/01 19:27:33 + +commit f5ebe3fb424b215dbd455cabd37f5ea56bd5dbff +Author: jbj +Date: Thu May 31 22:31:14 2001 +0000 + + - return multiple suggested packages (Pawel Kolodziej ). + - fix: return suggested packages when using Depends cache. + + CVS patchset: 4823 + CVS date: 2001/05/31 22:31:14 + +commit f8b347a38aeb9a8c90739f3cd2cd2d5c5e46fcce +Author: jbj +Date: Thu May 31 19:02:55 2001 +0000 + + lclint annotations. + + CVS patchset: 4821 + CVS date: 2001/05/31 19:02:55 + +commit cc54f00167e420f4e2bc4094e76c604da3c540a6 +Author: jbj +Date: Wed May 30 22:42:43 2001 +0000 + + - fix: for busted db1, attempt chain reconnection to following record. + + CVS patchset: 4819 + CVS date: 2001/05/30 22:42:43 + +commit 2a4452a1f91b1fc11ce13092980b83092357cf1f +Author: jbj +Date: Tue May 29 20:01:28 2001 +0000 + + - fix: popt exec doesn't add '--', --target et al no longer need '='. + - fix: popt consume-next-arg "!#:+" w/o side effect (#41956). + + CVS patchset: 4817 + CVS date: 2001/05/29 20:01:28 + +commit 61cd63ab8e816d46e81b3df2bb8cfe9b2267f85d +Author: jbj +Date: Tue May 29 15:03:35 2001 +0000 + + - eliminate db-1.85 and db-2.x configuration. + - fix: popt arg sanity checks broken, optarg != optArg. + - fix: popt range checks on floats/doubles broken. + - popt: return POPT_ERROR_ERRNO on config open/read/close failure. + + CVS patchset: 4815 + CVS date: 2001/05/29 15:03:35 + +commit e6c22123bc088afd6f0f564b8f5224af3cf2d2e6 +Author: jbj +Date: Fri May 25 19:51:53 2001 +0000 + + - perform db->verify when closing db files. + + CVS patchset: 4813 + CVS date: 2001/05/25 19:51:53 + +commit 4d76eb6dee47bbb119846428af238727d7cd5b61 +Author: jbj +Date: Wed May 23 17:53:30 2001 +0000 + + RPMTAG_BUILDROOT is internal tag. + + CVS patchset: 4810 + CVS date: 2001/05/23 17:53:30 + +commit 23783af2276940639be72ca2ae4599f387beb899 +Author: jbj +Date: Wed May 23 16:38:52 2001 +0000 + + - remove all header region assertion failures, return NULL instead. + + CVS patchset: 4809 + CVS date: 2001/05/23 16:38:52 + +commit 71f818828ed608b895896670f15437ffc491b785 +Author: jbj +Date: Wed May 23 14:25:19 2001 +0000 + + - headerFree() returns NULL, _free is C++ safe. + + CVS patchset: 4807 + CVS date: 2001/05/23 14:25:19 + +commit 0112602155b5500ba63e9874072c89d5241aec7a +Author: jbj +Date: Tue May 22 18:09:30 2001 +0000 + + - refuse to install on systems using db1. + + CVS patchset: 4805 + CVS date: 2001/05/22 18:09:30 + +commit f67a2912d291a14eaf05b8de14922c0f34ddce62 +Author: jbj +Date: Tue May 22 16:05:47 2001 +0000 + + Change contact email address. + + CVS patchset: 4803 + CVS date: 2001/05/22 16:05:47 + +commit aed337b31d60115102d32c0532a327f0d173d1db +Author: jbj +Date: Mon May 21 16:00:45 2001 +0000 + + - fix: skip %ghost files when building packages (#38218). + + CVS patchset: 4801 + CVS date: 2001/05/21 16:00:45 + +commit 8cc9d509e4e0009e16c7228bdf5d65a069054142 +Author: jbj +Date: Sun May 20 18:33:23 2001 +0000 + + - fix: i18n strings need 1 on sucess return code (#41313). + + CVS patchset: 4799 + CVS date: 2001/05/20 18:33:23 + +commit 2622029162ad26cf8463ac7026db9d85ca254cf9 +Author: jbj +Date: Wed May 16 20:02:08 2001 +0000 + + fix: rpmtransAddPackage assumed removed packages were sorted (#35827). + + CVS patchset: 4797 + CVS date: 2001/05/16 20:02:08 + +commit cec2fe637a8b872282e7029867a253384ed1d553 +Author: jbj +Date: Wed May 16 19:19:15 2001 +0000 + + - fix: filter duplicate package removals (#35828). + - add armv3l arch. + + CVS patchset: 4795 + CVS date: 2001/05/16 19:19:15 + +commit 56510bc6e99ed2bde5cb8e9845031c26b42a406e +Author: rjray +Date: Tue May 15 07:57:34 2001 +0000 + + Update for 0.32 release + + CVS patchset: 4793 + CVS date: 2001/05/15 07:57:34 + +commit 1be201a2eadf9f25e7c39a2e2a33706de63795ae +Author: rjray +Date: Tue May 15 07:49:56 2001 +0000 + + Significant speed-ups gained by breaking down the constants into fewer, + shorter string compares. This is most notable under the 'R' constants in the + outermost switch-block inside of the routine constant(). The test time for the + full suite on the main dev box dropped over 25%. + + CVS patchset: 4792 + CVS date: 2001/05/15 07:49:56 + +commit 00956b95c5177b52c745558b4918f7a231749248 +Author: rjray +Date: Tue May 15 06:22:36 2001 +0000 + + Fixing more of the "attempt to free unreferenced scalar" messages + + CVS patchset: 4791 + CVS date: 2001/05/15 06:22:36 + +commit 7ebaafac6a3fa3f9de36ba24718589f2db4b981a +Author: jbj +Date: Mon May 14 21:19:34 2001 +0000 + + Grrr, hacks to the hacks to get db3 to configure. + + CVS patchset: 4790 + CVS date: 2001/05/14 21:19:34 + +commit 3c563d21182b97271411e6b3209a07b6f78b94db +Author: jbj +Date: Mon May 14 20:12:10 2001 +0000 + + - upgrade to db-3.3.4. + + CVS patchset: 4787 + CVS date: 2001/05/14 20:12:10 + +commit a9184b73ecb9bcb5dedb503529a0696cdb5b008a +Author: jbj +Date: Sun May 13 20:03:09 2001 +0000 + + Resolve conflicts. + + CVS patchset: 4783 + CVS date: 2001/05/13 20:03:09 + +commit 2af040895b279eca8fb5a44240da7e42c8b4ac66 +Author: jbj +Date: Sun May 13 19:58:25 2001 +0000 + + Initial revision + + CVS patchset: 4782 + CVS date: 2001/05/13 19:58:25 + +commit 9b44f1b7168b70652f7fad2e0da6fdade4b965d7 +Author: jbj +Date: Sun May 13 18:03:34 2001 +0000 + + - add cron/logrotate scripts to save installed package filenames. + + CVS patchset: 4779 + CVS date: 2001/05/13 18:03:34 + +commit 87c15895a05f100b8a6eb26c17f8742f2b1b3df2 +Author: jbj +Date: Sun May 13 17:55:58 2001 +0000 + + - add cron/logrotate scripts to save installed package filenames. + + CVS patchset: 4777 + CVS date: 2001/05/13 17:55:58 + +commit 1da20d37d8db366a0607614a2a030dc408f97b91 +Author: rjray +Date: Sat May 12 11:40:27 2001 +0000 + + Various debugging + + CVS patchset: 4775 + CVS date: 2001/05/12 11:40:27 + +commit 27009dd00b9789c90c71190cd0c93c721fc83611 +Author: jbj +Date: Fri May 11 23:25:46 2001 +0000 + + - harden rpmdb iterators from damaged header instance segfaults. + + CVS patchset: 4774 + CVS date: 2001/05/11 23:25:46 + +commit b589c5c97d348437ebf67429eb93674baf769b81 +Author: jbj +Date: Fri May 11 17:18:16 2001 +0000 + + Path is /etc/rpmrc, not /etc/rpm/rpmc, in comment (#40163). + + CVS patchset: 4771 + CVS date: 2001/05/11 17:18:16 + +commit 39c24d294e8e3ca2b2b32bd8e4e45a38a62951ba +Author: jbj +Date: Fri May 11 16:45:06 2001 +0000 + + Remove typos and stray debugging fprintf's. + + CVS patchset: 4770 + CVS date: 2001/05/11 16:45:06 + +commit 0f30480a8925f3651a364ab2ec7fe88e2b2e2ff2 +Author: jbj +Date: Fri May 11 14:52:28 2001 +0000 + + Generate manifest for rpmdb. + + CVS patchset: 4768 + CVS date: 2001/05/11 14:52:28 + +commit f5d0541223f386cc3d97b6323ce83d996fa46fe4 +Author: jbj +Date: Fri May 11 04:06:12 2001 +0000 + + - rpm database has rpm.rpm g+w permissions to share db3 mutexes. + - expose more db3 macro configuration tokens. + - move fprint.[ch] and hash.[ch] to rpmdb directory. + - detect and fiddle incompatible mixtures of db3 env/open flags. + - add DBI_WRITECURSOR to map to db3 flags with CDB database model. + - add rpmdbSetIteratorRewrite to warn of pending lazy (re-)writes. + + CVS patchset: 4766 + CVS date: 2001/05/11 04:06:12 + +commit c7ee57336766b4411f3aeaaa78dd3778cfea3244 +Author: jbj +Date: Fri May 11 04:01:04 2001 +0000 + + - rpm database has rpm.rpm g+w permissions to share db3 mutexes. + - expose more db3 macro configuration tokens. + - move fprint.[ch] and hash.[ch] to rpmdb directory. + - detect and fiddle incompatible mixtures of db3 env/open flags. + - add DBI_WRITECURSOR to map to db3 flags with CDB database model. + - add rpmdbSetIteratorRewrite to warn of pending lazy (re-)writes. + + CVS patchset: 4765 + CVS date: 2001/05/11 04:01:04 + +commit dda243d6621372bf8c10bc04643e730d9e388091 +Author: jbj +Date: Fri May 11 02:43:07 2001 +0000 + + Ignore "stuff". + + CVS patchset: 4762 + CVS date: 2001/05/11 02:43:07 + +commit d026618b6b046bd0f3a6110eafd1bf1bd4e8aead +Author: jbj +Date: Wed May 9 22:58:56 2001 +0000 + + - rpm executables now setuid rpm to share write locks. + - expose more db3 macro configuration tokens. + + CVS patchset: 4756 + CVS date: 2001/05/09 22:58:56 + +commit 47a7f6e9177a12ba07bed42bca2a230c48eaa6a8 +Author: jbj +Date: Tue May 8 13:59:47 2001 +0000 + + Create db2 file manifest, as alpha is different. + + CVS patchset: 4755 + CVS date: 2001/05/08 13:59:47 + +commit 9c636fed5b7e038315b77114b1ba9e46051351f4 +Author: jbj +Date: Tue May 8 00:03:14 2001 +0000 + + - create rpmdb.la so that linkage against rpm's db-3.2.9 is possible. + + CVS patchset: 4752 + CVS date: 2001/05/08 00:03:14 + +commit d9e5d40dd5b8be2e1304452e61a797f66b5c0a1f +Author: jbj +Date: Mon May 7 19:21:16 2001 +0000 + + - use internal db-3.2.9 sources to build by default. + - don't build db1 by default. + + CVS patchset: 4750 + CVS date: 2001/05/07 19:21:16 + +commit cb55d5c6cd129c37b25670c77704c396307ffb15 +Author: jbj +Date: Mon May 7 01:54:56 2001 +0000 + + - fix: debugging message displays header keys (#38454). + + CVS patchset: 4747 + CVS date: 2001/05/07 01:54:56 + +commit c3835f5ca0e3ea856213a22367233e148ea26550 +Author: jbj +Date: Sun May 6 19:17:14 2001 +0000 + + - fix: specfile queries with BuildArch: (#27589). + + CVS patchset: 4746 + CVS date: 2001/05/06 19:17:14 + +commit 6f5615eab6821743c73c278030e01d117a5ee163 +Author: jbj +Date: Sun May 6 13:39:22 2001 +0000 + + Change URL. + + CVS patchset: 4743 + CVS date: 2001/05/06 13:39:22 + +commit 8f75bbc17dab6c334583f33c7b912fb16d2ddc4b +Author: jbj +Date: Sat May 5 19:28:32 2001 +0000 + + - enough lclint annotations and fiddles already. + + CVS patchset: 4741 + CVS date: 2001/05/05 19:28:32 + +commit d78e027808deb6aef4e65338d160986d7e576a90 +Author: jbj +Date: Thu May 3 21:00:18 2001 +0000 + + - still more boring lclint annotations and fiddles. + + CVS patchset: 4738 + CVS date: 2001/05/03 21:00:18 + +commit 0ecdbba93587408c670124e88d39451c681a77eb +Author: jbj +Date: Mon Apr 30 22:32:22 2001 +0000 + + - yet more boring lclint annotations and fiddles. + + CVS patchset: 4732 + CVS date: 2001/04/30 22:32:22 + +commit a57a13b1350ff1a094c202c90391f8676f487582 +Author: rjray +Date: Sun Apr 29 22:44:54 2001 +0000 + + These are mostly further clean-up of the 4.0.2-compatibility effort. + + CVS patchset: 4727 + CVS date: 2001/04/29 22:44:54 + +commit b4056f2affde298b4940054cc569534ac54a4624 +Author: rjray +Date: Sun Apr 29 22:44:13 2001 +0000 + + Made some changes to how rpm version is represented, added a new -Ddefine to + the c-flags. + + CVS patchset: 4726 + CVS date: 2001/04/29 22:44:13 + +commit 81ac89f4e6f176f9095e73b34d94d4ccf12da237 +Author: jbj +Date: Sun Apr 29 22:43:01 2001 +0000 + + - more boring lclint annotations and fiddles. + + CVS patchset: 4725 + CVS date: 2001/04/29 22:43:01 + +commit c83cfd5ed5b9637a090e57bef5aca5d5b96d00f4 +Author: jbj +Date: Sun Apr 29 16:08:55 2001 +0000 + + - transaction iterator(s) need to run in reverse order on pure erasures. + - erasures not yet strict, warn & chug on unlink(2)/rmdir(2) failure. + + CVS patchset: 4723 + CVS date: 2001/04/29 16:08:55 + +commit 3b5820c4205e440d9aad5c5d626721ee30b12292 +Author: jbj +Date: Sun Apr 29 01:05:43 2001 +0000 + + - globalize _free(3) wrapper in rpmlib.h, consistent usage throughout. + - internalize locale insensitive ctype(3) in rpmio.h + - boring lclint annotations and fiddles. + + CVS patchset: 4721 + CVS date: 2001/04/29 01:05:43 + +commit 6a0524ed57548de92daa4b6cf8ee9d2ab39d7a42 +Author: jbj +Date: Sat Apr 28 11:33:59 2001 +0000 + + Patch 3.2.9.2 from www.sleepycat.com. + + CVS patchset: 4718 + CVS date: 2001/04/28 11:33:59 + +commit 0c919b0df21f108a34e0cc9f91d304856738e08f +Author: jbj +Date: Sat Apr 28 11:32:45 2001 +0000 + + Patch 3.2.9.1 from www.sleepycat.com. + + CVS patchset: 4716 + CVS date: 2001/04/28 11:32:45 + +commit 16eaf800759c4e5975645c7d909e82f51351ca7b +Author: rjray +Date: Fri Apr 27 09:07:08 2001 +0000 + + Disable the version-checking on XS code for now, until I can figure out how + to do it correctly. + + CVS patchset: 4715 + CVS date: 2001/04/27 09:07:08 + +commit ca82f7d8d847f45717ff689f9e919bb15bc0dd7e +Author: rjray +Date: Fri Apr 27 09:05:55 2001 +0000 + + Updated for 0.31 + + CVS patchset: 4714 + CVS date: 2001/04/27 09:05:55 + +commit b264f286be77b518db765cb8ce354e7b17742de5 +Author: rjray +Date: Fri Apr 27 09:05:21 2001 +0000 + + Changed the way $VERSION is set + + CVS patchset: 4713 + CVS date: 2001/04/27 09:05:21 + +commit d6dad290930651d1cb727e98b5fb2ab78f0ee8e2 +Author: rjray +Date: Fri Apr 27 08:43:23 2001 +0000 + + Trimmed another one out. + + CVS patchset: 4712 + CVS date: 2001/04/27 08:43:23 + +commit f16a0d9cae2a26d912b503d72d6af66d017d9504 +Author: rjray +Date: Fri Apr 27 08:41:56 2001 +0000 + + The 4.0.2 rpm release changed all #define constants to enum sets, which pretty + much hosed this file as it stood. Now, there's no "not_here" hook, and we will + have to accept that if a name changes or gets dropped in the future, the + compile will break. Which is probably a good thing, since that happens on + occasion, too. + + CVS patchset: 4711 + CVS date: 2001/04/27 08:41:56 + +commit a9a1fd866c573f41287e6ad256ce64b3970a1eaa +Author: jbj +Date: Thu Apr 26 20:39:52 2001 +0000 + + - fix: ineeded count wrong for overlapped, created files. + + CVS patchset: 4709 + CVS date: 2001/04/26 20:39:52 + +commit bab8d207cea4bc12502852a8b4566c79b45d66ef +Author: jbj +Date: Wed Apr 25 15:07:53 2001 +0000 + + - fix: readlink return value clobbered by header write. + + CVS patchset: 4707 + CVS date: 2001/04/25 15:07:53 + +commit a71985e5be5051164d089b1424130d0f303ff3c0 +Author: jbj +Date: Mon Apr 23 20:56:59 2001 +0000 + + - regenerate rpm.8 man page from docbook glop (in max-rpm). + - lib/depends.c: diddle debugging messages. + + CVS patchset: 4703 + CVS date: 2001/04/23 20:56:59 + +commit 1aaf1b9b5d3777a36f9cfff600912a7f468dc732 +Author: jbj +Date: Sun Apr 22 08:58:22 2001 +0000 + + - cpanflute perl dependency needs explicit epoch (#37034). + + CVS patchset: 4702 + CVS date: 2001/04/22 08:58:22 + +commit 389d253e6236173e05b488d8f77ebe3b785f84a8 +Author: jbj +Date: Sat Apr 21 06:02:09 2001 +0000 + + Sync with rpm-4_0 branch. + + CVS patchset: 4700 + CVS date: 2001/04/21 06:02:09 + +commit 84329c6779c60c57f75ae66b92f6fb9f37c3b4f6 +Author: jbj +Date: Tue Apr 17 19:34:58 2001 +0000 + + Remove blank line to avoid irix lossage (#34656). + + CVS patchset: 4688 + CVS date: 2001/04/17 19:34:58 + +commit 8b20f15fbf2b7c1fed46b228dca2fc8358414903 +Author: jbj +Date: Tue Apr 17 19:29:12 2001 +0000 + + - portability: vsnprintf/snprintf wrappers for those without (#34657). + + CVS patchset: 4686 + CVS date: 2001/04/17 19:29:12 + +commit 63db1277013da1355d86ef5f3faf5dff26581c17 +Author: jbj +Date: Tue Apr 17 18:30:23 2001 +0000 + + - fix: Fwrite's are optimized out by aggressive compiler(irix) (#34711). + + CVS patchset: 4684 + CVS date: 2001/04/17 18:30:23 + +commit c360a8907b132495e411824c92dfe4189e76ac3d +Author: jbj +Date: Tue Apr 17 18:23:58 2001 +0000 + + - fix: s390 (and ppc?) could return CPIOERR_BAD_HEADER (#28645). + + CVS patchset: 4682 + CVS date: 2001/04/17 18:23:58 + +commit 1ea9d2cf9d4a58f2c5cf0489a326dbb495e613a0 +Author: rjray +Date: Sat Apr 14 09:25:38 2001 +0000 + + typo + + CVS patchset: 4679 + CVS date: 2001/04/14 09:25:38 + +commit 033f860f68e7cd6bc2ae3f194415b372e8bb69a6 +Author: jbj +Date: Fri Apr 13 19:24:16 2001 +0000 + + Create. + + CVS patchset: 4678 + CVS date: 2001/04/13 19:24:16 + +commit f75a3f71ab5b584af5a4d3b168064968fd400c48 +Author: jbj +Date: Tue Apr 10 12:36:45 2001 +0000 + + Doxygen annotations for config files. + Doxygen annotations for rpmdep section. + Add manifests for install modes. + + CVS patchset: 4675 + CVS date: 2001/04/10 12:36:45 + +commit 999f9b1654a3546b2c7e42fe3b3b224ec2781b1f +Author: jbj +Date: Tue Apr 3 20:41:09 2001 +0000 + + - fix: %_netsharedpath needs to look at basenames (#26561). + - fix: --excludepath was broken (#24434). + + CVS patchset: 4669 + CVS date: 2001/04/03 20:41:09 + +commit f0205431eff36c80a3e3e918ccd7ad4b66d6fd08 +Author: jbj +Date: Tue Apr 3 14:43:32 2001 +0000 + + Don't compile rpmsort by default (#29907). + + CVS patchset: 4666 + CVS date: 2001/04/03 14:43:32 + +commit 3ee7efc408c5eae30e0e08e647ffad480ded575f +Author: jbj +Date: Tue Apr 3 14:22:52 2001 +0000 + + casts to keep picky compilers happy (#29992). + + CVS patchset: 4665 + CVS date: 2001/04/03 14:22:52 + +commit 9e6924a604e9e5a3135ce102d064450072f61f38 +Author: jbj +Date: Tue Apr 3 13:41:56 2001 +0000 + + - fix: --relocate missing trailing slash (#28874,#25876). + - fix: --excludedoc shouldn't create empty doc dir (#14531). + + CVS patchset: 4663 + CVS date: 2001/04/03 13:41:56 + +commit 9f7e40a27c98c651170b28512dce3fb5c6d6e6cd +Author: jbj +Date: Wed Mar 28 16:00:11 2001 +0000 + + - fix: AIX has sizeof(uint_16) != sizeof(mode_t) verify cast needed. + + CVS patchset: 4657 + CVS date: 2001/03/28 16:00:11 + +commit 879d15a9548bf7e6fbd22ebe1974bc63974ef53f +Author: jbj +Date: Wed Mar 28 14:59:23 2001 +0000 + + - fix: i18n tags in rpm-2.5.x had wrong offset/length (#33478). + + CVS patchset: 4655 + CVS date: 2001/03/28 14:59:23 + +commit 075607676dee5f7d2006ba6f561b15d2e505e10a +Author: jbj +Date: Fri Mar 23 20:27:48 2001 +0000 + + - fix: parameterized macro segfault (Jakub Bogusz ). + fix: off by 1 with rpmGlob when presented with multiple non-globbed items. + fix: rpmReadPackageManifest actually works now. + + CVS patchset: 4653 + CVS date: 2001/03/23 20:27:48 + +commit 1975b49aa7167e7694da5659e29660aca44d02fc +Author: jbj +Date: Thu Mar 22 23:39:01 2001 +0000 + + - python: strip header regions during unload. + - add -g to optflags in per-platform config. + - permit confgure/compile with db3-3.2.9. + - permit manifest files as args to query/verify modes. + + CVS patchset: 4649 + CVS date: 2001/03/22 23:39:01 + +commit 731946f4b90eb1173452dd30f1296dd825155d82 +Author: jbj +Date: Wed Mar 21 18:33:35 2001 +0000 + + Initial revision + + CVS patchset: 4644 + CVS date: 2001/03/21 18:33:35 + +commit 7ed904da030dc4640ff9bce8458ba07cc09d830d +Author: jbj +Date: Tue Mar 20 15:00:07 2001 +0000 + + Strip header regions during unload. + + CVS patchset: 4643 + CVS date: 2001/03/20 15:00:07 + +commit 63890e6a4ab13e7ccafbd7643095539f832743fa +Author: jbj +Date: Sat Mar 17 19:55:09 2001 +0000 + + Doco updates. + + CVS patchset: 4641 + CVS date: 2001/03/17 19:55:09 + +commit 54704b3b838fefd7547df94a6a9042e6ca84446a +Author: jbj +Date: Fri Mar 16 20:23:49 2001 +0000 + + - add --with/--without popt glue for conditional builds(Tomasz Kloczko). + + CVS patchset: 4639 + CVS date: 2001/03/16 20:23:49 + +commit 84705dbb7660d4b1ea4b8429d84b154d2a283093 +Author: jbj +Date: Fri Mar 16 16:33:25 2001 +0000 + + - add %exclude support (i.e. "everything but") to %files. + (Michael (Micksa) Slade" ) + + CVS patchset: 4637 + CVS date: 2001/03/16 16:33:25 + +commit b787b643938baac16cad931d7a8c9394ef9703c7 +Author: jbj +Date: Thu Mar 15 18:55:06 2001 +0000 + + - add cpuid asm voodoo to detect athlon processors. + + CVS patchset: 4634 + CVS date: 2001/03/15 18:55:06 + +commit 99b6c6fa03ab9d854f5b1967432b17d65a817ebc +Author: jbj +Date: Thu Mar 15 17:54:55 2001 +0000 + + Bump version to 4.1. + Invert logic for db1, don't build by default. + + CVS patchset: 4629 + CVS date: 2001/03/15 17:54:55 + +commit 93e502737ad7e072e8f1e43173204566539b8221 +Author: jbj +Date: Thu Mar 15 14:48:52 2001 +0000 + + Correct --verify modifiers. + + CVS patchset: 4628 + CVS date: 2001/03/15 14:48:52 + +commit db68dedc824de4cfddb37f3b576c9894011f9c5d +Author: jbj +Date: Thu Mar 15 14:44:08 2001 +0000 + + - update per-interpreter dependency scripts, add sql/tcl (#20295). + - fix: rpmvercmp("1.a", "1.") returned -1, not +1 (#21392). + + CVS patchset: 4627 + CVS date: 2001/03/15 14:44:08 + +commit c19f6836770882a60fb6ceef5f9eaa153515979c +Author: jbj +Date: Thu Mar 15 14:14:22 2001 +0000 + + Fix rpmvercmp for case (should return +1, #21392) + rpmvercmp("1.a", "1.") + + CVS patchset: 4626 + CVS date: 2001/03/15 14:14:22 + +commit bd80ac253d70e8da19e5634f0ab6f3e8aedf8eb5 +Author: jbj +Date: Thu Mar 15 13:58:16 2001 +0000 + + Updated dependency scripts (#20295). + + CVS patchset: 4625 + CVS date: 2001/03/15 13:58:16 + +commit fc920e3ac326473d884ffc6cfc86225d98442ea0 +Author: jbj +Date: Wed Mar 14 23:09:09 2001 +0000 + + Update to doxygen-1.2.6 configuration. + Add manual files to Doxfile.in. + lclint annotations. + + CVS patchset: 4624 + CVS date: 2001/03/14 23:09:09 + +commit a40655424d818053ccddde39ec62e1ebd0983ed2 +Author: jbj +Date: Wed Mar 14 23:06:36 2001 +0000 + + Remove compiler warnings. + + CVS patchset: 4623 + CVS date: 2001/03/14 23:06:36 + +commit 9c044153231edc7318b488348a2918af049f4240 +Author: jbj +Date: Wed Mar 14 23:04:43 2001 +0000 + + Update from Ken Estes (#31699). + + CVS patchset: 4622 + CVS date: 2001/03/14 23:04:43 + +commit 59b4f98dc51b2c332da428117105f6780ab5714f +Author: jbj +Date: Wed Mar 14 18:07:47 2001 +0000 + + Sync with rpm-4.0.2 final. + + CVS patchset: 4621 + CVS date: 2001/03/14 18:07:47 + +commit 9b59a8f22a7b26f7fa936175c392225d68ff5a2c +Author: rjray +Date: Sun Mar 11 08:55:55 2001 +0000 + + Makefile.PL + + CVS patchset: 4615 + CVS date: 2001/03/11 08:55:55 + +commit 0102f1b568b067f9bde7a9e7f6c162d6104de5cc +Author: rjray +Date: Thu Mar 8 06:37:55 2001 +0000 + + Release 0.30 + + CVS patchset: 4614 + CVS date: 2001/03/08 06:37:55 + +commit 5da6e5c09a744affd3340956bdad1bc178293b52 +Author: rjray +Date: Thu Mar 8 06:12:32 2001 +0000 + + Various tweaks + + CVS patchset: 4613 + CVS date: 2001/03/08 06:12:32 + +commit dbf468af61aeff91f88b9da98ee6e4bb8027f166 +Author: rjray +Date: Thu Mar 8 06:11:20 2001 +0000 + + Fixed rpm 4.0 issue + + CVS patchset: 4612 + CVS date: 2001/03/08 06:11:20 + +commit 487fac0d286bf572ebca0541ba9d673fde01b739 +Author: rjray +Date: Wed Mar 7 19:17:24 2001 +0000 + + prep for 0.30 + + CVS patchset: 4610 + CVS date: 2001/03/07 19:17:24 + +commit 302144c26ccc2d29afe71cd64cd96805bdbcf454 +Author: jbj +Date: Sun Mar 4 17:31:48 2001 +0000 + + Re-yacc getdate.c. + + CVS patchset: 4608 + CVS date: 2001/03/04 17:31:48 + +commit 918ec7bea067c2836c320d4ee52fe3d6395e4dbe +Author: jbj +Date: Sun Mar 4 17:26:37 2001 +0000 + + Swipe from cvs sources. + + CVS patchset: 4607 + CVS date: 2001/03/04 17:26:37 + +commit 2ad94143e2a609c6449d29664645f4c3a462d519 +Author: jbj +Date: Sun Mar 4 17:15:56 2001 +0000 + + Eliminate setFileOwners() and installSources(). + Resurrect source installs. + + CVS patchset: 4606 + CVS date: 2001/03/04 17:15:56 + +commit a77bec0d7e7722e27104d61bd9e8ba6d3de69769 +Author: jbj +Date: Sun Mar 4 15:34:53 2001 +0000 + + - Add btree indexes for Dirnames, Requireversion, Provideversion, Insttaltid, + and Removetid. + - Add per-script and per-trigger control options and flags. + - Add --apply option and flags. + + CVS patchset: 4605 + CVS date: 2001/03/04 15:34:53 + +commit 1a93da4accc11e0064f9c0c848d537e00abbde3e +Author: jbj +Date: Sat Mar 3 21:35:41 2001 +0000 + + Implement PSM_NOTIFY. + + CVS patchset: 4604 + CVS date: 2001/03/03 21:35:41 + +commit df79f7143e4444987c47e17a743eb96ccb5c760b +Author: jbj +Date: Sat Mar 3 20:45:47 2001 +0000 + + Remove dead code. + + CVS patchset: 4603 + CVS date: 2001/03/03 20:45:47 + +commit acbbbb19f712e0fc00976e45247c5a5608a59fd8 +Author: jbj +Date: Sat Mar 3 20:41:37 2001 +0000 + + Move fileActionString to fsm.c where it belongs. + Open repackage output fd in PSM_INIT, not PSM_PROCESS. + Factor common chroot calls to beginning of PSM_PRE and end of PSM_POST. + Factor common rpmdbCountPackages to top of PSM_INIT. + + CVS patchset: 4602 + CVS date: 2001/03/03 20:41:37 + +commit 597bf30f9ff72dc93b17d10901467336aa724ef6 +Author: jbj +Date: Sat Mar 3 18:49:09 2001 +0000 + + find-{provies,requires} with AIX5 support. + + CVS patchset: 4601 + CVS date: 2001/03/03 18:49:09 + +commit 665c365a12630dc0e2a9a5f6f005bc8b84b6868b +Author: jbj +Date: Fri Mar 2 19:47:45 2001 +0000 + + Add top level, external enties to psmStage(). + + CVS patchset: 4596 + CVS date: 2001/03/02 19:47:45 + +commit e403840dbac865e660698f9528ded42adaa5e823 +Author: jbj +Date: Fri Mar 2 17:27:30 2001 +0000 + + Still more functionality into psmStage(). + + CVS patchset: 4595 + CVS date: 2001/03/02 17:27:30 + +commit 9e4608369ad651f5e05d95a38d948a9f4aac58ce +Author: jbj +Date: Fri Mar 2 16:17:03 2001 +0000 + + More functionality into psmStage. + + CVS patchset: 4594 + CVS date: 2001/03/02 16:17:03 + +commit b7bbb4018acecb03b8f593852bb534cf80e0721e +Author: jbj +Date: Fri Mar 2 15:03:29 2001 +0000 + + More functionality in psmStage. + + CVS patchset: 4593 + CVS date: 2001/03/02 15:03:29 + +commit 3e63d3b76801048ab26c6314d67aa213474b86a0 +Author: jbj +Date: Fri Mar 2 08:28:18 2001 +0000 + + Flesh out init/pre/process/post/fini PSM stages. + + CVS patchset: 4592 + CVS date: 2001/03/02 08:28:18 + +commit d955c25e489d9cc84fcd0fe5b597d7caacd8afaf +Author: jbj +Date: Thu Mar 1 18:28:11 2001 +0000 + + More functionality in psmStage. + + CVS patchset: 4591 + CVS date: 2001/03/01 18:28:11 + +commit d69ac19b05107c991fb63deacd3d7a56c23d6847 +Author: jbj +Date: Thu Mar 1 17:04:27 2001 +0000 + + Move more functionality into psmStage. + + CVS patchset: 4590 + CVS date: 2001/03/01 17:04:27 + +commit 83cb34ccab962eddc8dd103d05788043b152fdd2 +Author: jbj +Date: Thu Mar 1 16:01:16 2001 +0000 + + More data merged into PSM_t. + + CVS patchset: 4589 + CVS date: 2001/03/01 16:01:16 + +commit 6b5f9032a45b519ac40d53b08bb77318ad146d87 +Author: jbj +Date: Wed Feb 28 16:41:19 2001 +0000 + + Add trigggers to psm. + + CVS patchset: 4588 + CVS date: 2001/02/28 16:41:19 + +commit cc646a80a15a62355ef29d157cfc782573aac935 +Author: jbj +Date: Wed Feb 28 15:49:23 2001 +0000 + + Merge scriptlet handling into psm.c, remove from API. + + CVS patchset: 4587 + CVS date: 2001/02/28 15:49:23 + +commit 15941e5fea63d566111ac57e94886b1ea761b110 +Author: jbj +Date: Wed Feb 28 13:59:29 2001 +0000 + + Move more args into PSM_t. + + CVS patchset: 4586 + CVS date: 2001/02/28 13:59:29 + +commit 770f01d2d4f5783a60e7854e2c4f5918520c2f2d +Author: jbj +Date: Tue Feb 27 23:12:30 2001 +0000 + + Start wiring PSM_t throughout. + + CVS patchset: 4585 + CVS date: 2001/02/27 23:12:30 + +commit 56bea19bfc794370c8b18de5becfdfefd560e98b +Author: jbj +Date: Tue Feb 27 22:08:53 2001 +0000 + + Sketch out PSM_t for package state machine. + + CVS patchset: 4584 + CVS date: 2001/02/27 22:08:53 + +commit 74f16c53a389ed68ee93d6eccc31e0f9236ef8c4 +Author: jbj +Date: Tue Feb 27 21:30:27 2001 +0000 + + Handle non-string tag indices correctly. + Sync with rpm-4.0.2. + + CVS patchset: 4583 + CVS date: 2001/02/27 21:30:27 + +commit 84ab8a1f64c1ebb8e98cca47adf2be414ed15daf +Author: rjray +Date: Tue Feb 27 07:37:01 2001 +0000 + + Doc fix + + CVS patchset: 4580 + CVS date: 2001/02/27 07:37:01 + +commit 8737af8adcb7003e0f78c2c62b799fde17a9cd55 +Author: rjray +Date: Tue Feb 27 07:36:29 2001 +0000 + + *** empty log message *** + + CVS patchset: 4579 + CVS date: 2001/02/27 07:36:29 + +commit cf7b6002da860e3de697bac21e31e21e26acb9d9 +Author: rjray +Date: Tue Feb 27 07:35:32 2001 +0000 + + Removed a redundancy + + CVS patchset: 4578 + CVS date: 2001/02/27 07:35:32 + +commit 6783b510aacca09bd52c6e4adfa530adbf1b0e1c +Author: rjray +Date: Tue Feb 27 07:34:44 2001 +0000 + + Changes mostly to the handling of RPM::Header objects within the RPM::Database + class. Also some other memory-related fixes in RPM::Header. + + CVS patchset: 4577 + CVS date: 2001/02/27 07:34:44 + +commit 08285d5eff167a475fd918c263841f761f4cfbab +Author: rjray +Date: Tue Feb 27 07:34:00 2001 +0000 + + Changed in prototype for one of the rpmdb_* routines. + + CVS patchset: 4576 + CVS date: 2001/02/27 07:34:00 + +commit f64f273405156545b1492bfe93966b2154b7c3b4 +Author: jbj +Date: Wed Feb 21 19:14:35 2001 +0000 + + Add fflush (#24319). + + CVS patchset: 4565 + CVS date: 2001/02/21 19:14:35 + +commit 547ddc6d8a56b58c82e388c1007ca6ff785b2530 +Author: jbj +Date: Wed Feb 21 18:14:16 2001 +0000 + + Add Requires: rpm = %{version} to rpm-python. + + CVS patchset: 4563 + CVS date: 2001/02/21 18:14:16 + +commit c56c829d2898cfbe88a7660e319fa858f3dddeaf +Author: jbj +Date: Mon Feb 19 17:12:21 2001 +0000 + + 1st crack at --repackage. + + CVS patchset: 4557 + CVS date: 2001/02/19 17:12:21 + +commit 8f99e61fc799c32282fc93d5783e7fd4f84779c8 +Author: jbj +Date: Sat Feb 17 17:53:21 2001 +0000 + + Merge changes from rpm-4.0.2. + Add iterators and reverse flag so that erase transactions can run backwards. + + CVS patchset: 4556 + CVS date: 2001/02/17 17:53:21 + +commit e89f3d17910f91811bcb7a87378dc0f413ab6e66 +Author: jbj +Date: Sat Feb 17 16:05:13 2001 +0000 + + Add missing tokens. + + CVS patchset: 4555 + CVS date: 2001/02/17 16:05:13 + +commit 85a84a6826f982160c31286fb23be771d69eb5ea +Author: jbj +Date: Mon Feb 12 19:02:15 2001 +0000 + + Add rpmRC return code type for the usual 0/1/2 codes. + Add RPMRC_BADSIZE to deal with packages changing size after repackaging. + + CVS patchset: 4550 + CVS date: 2001/02/12 19:02:15 + +commit bc348ac49cddff43f7aed6d0d17531a8482d0e47 +Author: jbj +Date: Mon Feb 12 16:33:08 2001 +0000 + + Rename RPMSIG_* signature types to RPMSIGTYPE_* to avoid confusion. + Remove dead code. + + CVS patchset: 4549 + CVS date: 2001/02/12 16:33:08 + +commit 2be9ecf0eb0f5f4afe10d0cb2b096d7442d5f2f7 +Author: jbj +Date: Sun Feb 11 22:02:29 2001 +0000 + + 1st stab at --repackage. + + CVS patchset: 4545 + CVS date: 2001/02/11 22:02:29 + +commit eccb6f66fc6cc5ecdebf40a6a8150a804f870fe5 +Author: jbj +Date: Sat Feb 10 16:47:40 2001 +0000 + + Reorganize sources before implementing --repackage. + + CVS patchset: 4543 + CVS date: 2001/02/10 16:47:40 + +commit d304bac9be5dfaefab20c0a953ee1f5197422b45 +Author: jbj +Date: Sat Feb 10 14:35:55 2001 +0000 + + - fix: diddle exit code for attempted installs of non-packages (#26850). + - python binding diddles to reduce installer memory footprint by + delayed loading of file info. + + CVS patchset: 4542 + CVS date: 2001/02/10 14:35:55 + +commit c7cbf952abe353d8a06387726426ae50448b6e0a +Author: jbj +Date: Fri Feb 9 20:59:08 2001 +0000 + + Orphans. + + CVS patchset: 4538 + CVS date: 2001/02/09 20:59:08 + +commit d991f23281c6e80b323f762c0138689679bbb32b +Author: jbj +Date: Fri Feb 9 20:58:37 2001 +0000 + + fix: make a copy of retrieved header before loading. + handle out-of-sync hardlinks as sub-state, don't save the file name. + fix: on build, was broke, add --fsmdebug as well. + + CVS patchset: 4537 + CVS date: 2001/02/09 20:58:37 + +commit 2f9fa168c803e4ddbb20021a128f759da553bd06 +Author: jbj +Date: Thu Feb 8 23:05:05 2001 +0000 + + Remove DEAD code. + + CVS patchset: 4531 + CVS date: 2001/02/08 23:05:05 + +commit cc3e5fd3dbcbb94928c5fc88d4257ca3514c7805 +Author: jbj +Date: Thu Feb 8 21:50:38 2001 +0000 + + Move state machine drivers into fsmStage. + Off to fix build's yet again. + + CVS patchset: 4530 + CVS date: 2001/02/08 21:50:38 + +commit 485f508bb1a7f60fcbd7757be4acdfedb51b17ab +Author: jbj +Date: Wed Feb 7 17:57:10 2001 +0000 + + Update location of sources. + + CVS patchset: 4524 + CVS date: 2001/02/07 17:57:10 + +commit 2f2295bf07847e72f7f7fee5aa52607fec9fed14 +Author: jbj +Date: Tue Feb 6 22:39:56 2001 +0000 + + Asynchronous commit of installed files. + fix: set file mtimes from package. + fix: insure that notify is not called at start of commit. + + CVS patchset: 4523 + CVS date: 2001/02/06 22:39:56 + +commit 29045caf73b54f5a72b93e41010a263a2d7e3cdb +Author: jbj +Date: Mon Feb 5 22:22:43 2001 +0000 + + fix: links weren't renamed correctly. + Use hge/hfd vectors most everywhere. + + CVS patchset: 4522 + CVS date: 2001/02/05 22:22:43 + +commit 62ff3348fdfe8712cf49efd52476670bf5245b6b +Author: jbj +Date: Mon Feb 5 17:55:34 2001 +0000 + + Remove XFA_SKIPPING from iterator. + Make sure that external stages are properly postponed. + + CVS patchset: 4521 + CVS date: 2001/02/05 17:55:34 + +commit 1b9cbfcc5e6b6971acf99b8d65e84fb6764c2de3 +Author: jbj +Date: Sun Feb 4 22:15:30 2001 +0000 + + revert speedup on commit if same perms, there's more to do. + lclint annotations. + + CVS patchset: 4520 + CVS date: 2001/02/04 22:15:30 + +commit a0a2c1d83cc45c575f53989cb72d5bd2aed40014 +Author: jbj +Date: Sun Feb 4 18:15:21 2001 +0000 + + Rip out remnants of cpio file mapping. + + CVS patchset: 4519 + CVS date: 2001/02/04 18:15:21 + +commit b9726c19b2e5901b4bec4f640b05747ca52e29ed +Author: jbj +Date: Sun Feb 4 02:04:09 2001 +0000 + + Merged build/install in file state machine. + + CVS patchset: 4518 + CVS date: 2001/02/04 02:04:09 + +commit 53279c4ac34621cebd36fa940e24374c4451d4aa +Author: jbj +Date: Sat Feb 3 20:07:39 2001 +0000 + + fix: db1 dbopen() check found in libc not auto-configuring forrectly. + Add fsm->goal to start unifying install/erase/build state machines. + Use rpmio syscall rpc where available. + FSM_BUILD has explicit init/fini stages. + FSM_LSTAT done once in init. + FSM_MKDIRS done in init. + + CVS patchset: 4517 + CVS date: 2001/02/03 20:07:39 + +commit 2816871692ceb70eb1feb75314acbc98c20369dc +Author: jbj +Date: Sat Feb 3 14:30:57 2001 +0000 + + Add I/O to file state machine. + + CVS patchset: 4516 + CVS date: 2001/02/03 14:30:57 + +commit e3d524717407f943594d41429988b61561e36549 +Author: jbj +Date: Fri Feb 2 15:04:44 2001 +0000 + + Use fsm for building. + + CVS patchset: 4514 + CVS date: 2001/02/02 15:04:44 + +commit 1363a3339deb73cbbfe38b432a1af51640c0cb6e +Author: jbj +Date: Fri Feb 2 00:07:49 2001 +0000 + + fix: grrr, post increment off by 1 iterator. + + CVS patchset: 4513 + CVS date: 2001/02/02 00:07:49 + +commit ac1a303d16136b4f1312ba4c1b6a1c5cba6c87f8 +Author: jbj +Date: Thu Feb 1 20:19:17 2001 +0000 + + Handle links correctly, wotta PITA. Now to clean up and find the double free ... + + CVS patchset: 4512 + CVS date: 2001/02/01 20:19:17 + +commit 618184c4bf450b09f0fa82ac5b57460289b24cf6 +Author: jbj +Date: Tue Jan 30 23:38:39 2001 +0000 + + Simple install file state machine. + + CVS patchset: 4510 + CVS date: 2001/01/30 23:38:39 + +commit d8b44a5d651e009760ed47f5802aeb3e325552cc +Author: jbj +Date: Mon Jan 29 22:53:48 2001 +0000 + + Commit to install file state machine. + + CVS patchset: 4509 + CVS date: 2001/01/29 22:53:48 + +commit f684f63a728fb00af75c3122d2e4f808737459f7 +Author: jbj +Date: Sun Jan 28 19:12:04 2001 +0000 + + Apply suffixes only to files. + Bundle dev/symlink/fifo/sock into hdr state machine. + + CVS patchset: 4505 + CVS date: 2001/01/28 19:12:04 + +commit c225a48edf44d64e72ba4ac4822005ff49a57862 +Author: jbj +Date: Sun Jan 28 02:14:29 2001 +0000 + + Orphan. + + CVS patchset: 4504 + CVS date: 2001/01/28 02:14:29 + +commit 3aeae6be321dbe150a574ac0a97d3598d3f1091b +Author: jbj +Date: Sun Jan 28 02:13:48 2001 +0000 + + Payload state machine, with commit and undo. + + CVS patchset: 4503 + CVS date: 2001/01/28 02:13:48 + +commit 971e0ea6fcc306d297f16211938cfbd7cc765dbc +Author: jbj +Date: Sat Jan 27 17:42:24 2001 +0000 + + 1st crack at a payload unpack state machine. + + CVS patchset: 4502 + CVS date: 2001/01/27 17:42:24 + +commit c825d02369a2b0bc9d26e0f07b6f9a6a288587ef +Author: jbj +Date: Fri Jan 26 17:06:09 2001 +0000 + + lclint annotations. + + CVS patchset: 4500 + CVS date: 2001/01/26 17:06:09 + +commit 3039fe0cca283fd8d7fd1a08bdbb73e00c2499f9 +Author: jbj +Date: Thu Jan 25 20:26:47 2001 +0000 + + Orphan. + + CVS patchset: 4499 + CVS date: 2001/01/25 20:26:47 + +commit dd94329f0c3d6fc592a88c68d7df833f88435f09 +Author: jbj +Date: Thu Jan 25 20:26:35 2001 +0000 + + - remove support for v1 src rpm's. + - reposition callbacks with ts/fi in cpio payload layer. + + CVS patchset: 4498 + CVS date: 2001/01/25 20:26:35 + +commit 5ae2e10e9eaef7c0ca0104c0294f16eb66c9958e +Author: jbj +Date: Thu Jan 25 12:58:03 2001 +0000 + + Isolate install/erase actions. + Start wrapping src rpm installs in a transaction. + + CVS patchset: 4497 + CVS date: 2001/01/25 12:58:03 + +commit f0853f68436ca65cc891d32719fc74c98bbf4ce5 +Author: jbj +Date: Wed Jan 24 21:35:52 2001 +0000 + + Add rollback.h, 1st attempt to rationalize TFI_t. + + CVS patchset: 4496 + CVS date: 2001/01/24 21:35:52 + +commit de35e20bf1b423e7c5279ca6ea5a4807df2c4673 +Author: jbj +Date: Wed Jan 24 15:58:35 2001 +0000 + + Rip XFI_t from install. + + CVS patchset: 4495 + CVS date: 2001/01/24 15:58:35 + +commit 8b7b911a17f187822f6e72b162ef3bea39366176 +Author: jbj +Date: Tue Jan 23 23:03:28 2001 +0000 + + Rip out cpioFileMap. + + CVS patchset: 4493 + CVS date: 2001/01/23 23:03:28 + +commit 7eb91a51526e6d85cbcec1760d7a18144b1aa9b5 +Author: jbj +Date: Tue Jan 23 16:07:28 2001 +0000 + + Expose loadFi/freeFi. + Add elements to TFI_t that will be needed by install/remove. + + CVS patchset: 4489 + CVS date: 2001/01/23 16:07:28 + +commit 15439b46c01fdc961d078e776d1f6b7b01c29b6a +Author: jbj +Date: Mon Jan 22 19:11:19 2001 +0000 + + Make cpio maps totally opaque. + + CVS patchset: 4487 + CVS date: 2001/01/22 19:11:19 + +commit 4a0c7b16a8a2f62ee449a248911abc99ddcd7e46 +Author: jbj +Date: Sun Jan 21 23:48:56 2001 +0000 + + Create. + + CVS patchset: 4480 + CVS date: 2001/01/21 23:48:56 + +commit ccdf2e17d8502607a21caa52efaf0ed98a0dee5c +Author: jbj +Date: Sun Jan 21 23:48:09 2001 +0000 + + Make cpio mappings opaque. + + CVS patchset: 4479 + CVS date: 2001/01/21 23:48:09 + +commit d07437babbde795e5f58fa6b6092c2867a1781f7 +Author: jbj +Date: Sun Jan 21 15:43:32 2001 +0000 + + - cpio mappings carry dirname/basename, not absolute path. + + CVS patchset: 4474 + CVS date: 2001/01/21 15:43:32 + +commit b8694daf7caeab685bb5e86d1c5909174f519e81 +Author: jbj +Date: Fri Jan 19 19:31:11 2001 +0000 + + ewt's cpio hack reverted. + + CVS patchset: 4470 + CVS date: 2001/01/19 19:31:11 + +commit ab794ac6f7466258f7cef1f922e657da310521d4 +Author: jbj +Date: Fri Jan 19 17:21:55 2001 +0000 + + Typo. + + CVS patchset: 4469 + CVS date: 2001/01/19 17:21:55 + +commit 8b64adc8121936aa516662193ab8e75432069164 +Author: jbj +Date: Fri Jan 19 16:49:14 2001 +0000 + + ewt's cpio hack. + + CVS patchset: 4468 + CVS date: 2001/01/19 16:49:14 + +commit 7922ac38468e4296b4839d9876d2003d4278fbea +Author: msw +Date: Fri Jan 19 04:27:24 2001 +0000 + + exit 0 if not in the if clause + + CVS patchset: 4466 + CVS date: 2001/01/19 04:27:24 + +commit 1f44236f648737316b55b43c97ab941d33ec20ee +Author: jbj +Date: Fri Jan 19 01:38:55 2001 +0000 + + - fix: insure that %lang scopes over hard links correctly. + - fix: rpmCleanPath was nibbling at .. in macrofiles incorrectly. + + CVS patchset: 4464 + CVS date: 2001/01/19 01:38:55 + +commit 4688ffcfa3cd07c5aa190282219a2a6cf3a70e58 +Author: jbj +Date: Wed Jan 17 16:03:50 2001 +0000 + + Orphans. + + CVS patchset: 4460 + CVS date: 2001/01/17 16:03:50 + +commit bfa1698ec347d71bb6f0a43baec16dcc29fb0860 +Author: jbj +Date: Wed Jan 17 16:00:36 2001 +0000 + + - 1st crack at Mandrake specific per-platform macros. + + CVS patchset: 4459 + CVS date: 2001/01/17 16:00:36 + +commit 45f7994691135302d6365239c4da7756bc689980 +Author: jbj +Date: Tue Jan 16 21:54:59 2001 +0000 + + Re-add successor line. + + CVS patchset: 4457 + CVS date: 2001/01/16 21:54:59 + +commit 0eb282dc4ea02b14351278ebd578a8ab99237d1d +Author: jbj +Date: Tue Jan 16 17:33:59 2001 +0000 + + - tsort prefers presentation order. + + CVS patchset: 4456 + CVS date: 2001/01/16 17:33:59 + +commit 888f65b07da0715694f0fcf3e2afa6ee16076296 +Author: jbj +Date: Tue Jan 16 14:10:21 2001 +0000 + + fix: segfault through python bindings with fd to non-package (#24089). + + CVS patchset: 4453 + CVS date: 2001/01/16 14:10:21 + +commit ef0d093f14a37803174e776f3241474020b7586f +Author: jbj +Date: Tue Jan 16 13:39:50 2001 +0000 + + Increase size of help format buffer (#24093). + + CVS patchset: 4450 + CVS date: 2001/01/16 13:39:50 + +commit 3e85ac2cd2eab018c0bb3190677314afaa9c7d54 +Author: jbj +Date: Tue Jan 16 13:09:35 2001 +0000 + + dropped piece of patch. + + CVS patchset: 4448 + CVS date: 2001/01/16 13:09:35 + +commit e4ae142a225585ccf03276fc607ba40edb10cf75 +Author: jbj +Date: Tue Jan 16 12:54:00 2001 +0000 + + Typo. + + CVS patchset: 4446 + CVS date: 2001/01/16 12:54:00 + +commit c74cc1df1c51f0c2a99de94cb0a0b1e9448499f2 +Author: jbj +Date: Mon Jan 15 23:09:42 2001 +0000 + + - fix: extra newline in many error messages (#23947). + - fix: rpm -Va with db1 needs per-iterator, not per-index, offset. + - add install/remove transaction id tags. + + CVS patchset: 4441 + CVS date: 2001/01/15 23:09:42 + +commit 082ccecf35f3fb73c2a58b9052f102e5d9386fc4 +Author: jbj +Date: Mon Jan 15 22:55:49 2001 +0000 + + Add missing keyword=POPT_ line to xgettext extraction. + + CVS patchset: 4440 + CVS date: 2001/01/15 22:55:49 + +commit d229ea2db02fc71295836f5a37dce924a871f3b4 +Author: jbj +Date: Sat Jan 13 17:39:54 2001 +0000 + + - fix the hack. + + CVS patchset: 4436 + CVS date: 2001/01/13 17:39:54 + +commit 5b06c479a5ee7c545e105c0a9ac55daa31fc4836 +Author: jbj +Date: Fri Jan 12 21:47:49 2001 +0000 + + - hack: permit installer to determine package ordering using 1000003 tag. + + CVS patchset: 4435 + CVS date: 2001/01/12 21:47:49 + +commit 31a589ae49d9f711792a9bb24f5c0b8b1b3cd965 +Author: jbj +Date: Fri Jan 12 18:22:27 2001 +0000 + + doxygen annotations for python bindings. + + CVS patchset: 4433 + CVS date: 2001/01/12 18:22:27 + +commit fd0c1a672de734f768ad6fc6d0751b5c6710bc86 +Author: jbj +Date: Fri Jan 12 16:34:16 2001 +0000 + + Remove bash syntax. + + CVS patchset: 4431 + CVS date: 2001/01/12 16:34:16 + +commit abcf8c192ad26630b8820b881ff30822c28ce5ab +Author: jbj +Date: Thu Jan 11 17:18:10 2001 +0000 + + rpm2cpio(8) typos (#23662). + + CVS patchset: 4428 + CVS date: 2001/01/11 17:18:10 + +commit 2e137679467f975e486879f672969375fc9fcf70 +Author: jbj +Date: Thu Jan 11 14:13:04 2001 +0000 + + doxygen annotations for build/*. + - fix: don't hang on build error. + - fix: remove "error: " prefix from signature verification message. + + CVS patchset: 4426 + CVS date: 2001/01/11 14:13:04 + +commit 67aa2355659586f88f8481778bf46e8d44f59788 +Author: jbj +Date: Wed Jan 10 22:19:55 2001 +0000 + + - fix: find-requires.perl needed update (#23450). + + CVS patchset: 4424 + CVS date: 2001/01/10 22:19:55 + +commit dcbf7492f21b41ed552317e576609712e356f735 +Author: jbj +Date: Wed Jan 10 20:42:32 2001 +0000 + + - successors from tsort are processed in presentation order. + + CVS patchset: 4423 + CVS date: 2001/01/10 20:42:32 + +commit 862f4b1af9801265872d53d2dfff623b3b558788 +Author: msw +Date: Tue Jan 9 23:13:04 2001 +0000 + + register more enums + + CVS patchset: 4422 + CVS date: 2001/01/09 23:13:04 + +commit 903a070e8de00c6cf6a1479994c70027eccdfd78 +Author: jbj +Date: Tue Jan 9 21:46:11 2001 +0000 + + - fix: digests on input FD_t dinna work. + - fix: remove rebuilddb debugging leakage. + + CVS patchset: 4421 + CVS date: 2001/01/09 21:46:11 + +commit 424793073c381d75d75bd1b4787d153ba16fd4b1 +Author: jbj +Date: Tue Jan 9 04:07:49 2001 +0000 + + - tsorted packages processed in successor count order. + - fix: resurrect --excludepath (#19666). + + CVS patchset: 4418 + CVS date: 2001/01/09 04:07:49 + +commit 330737d2fca4f68061e481c25b7793d309e98fb0 +Author: jbj +Date: Mon Jan 8 17:20:32 2001 +0000 + + configure.in: Typo in --with-puthon. + Add eu_ES (Basque). + + CVS patchset: 4416 + CVS date: 2001/01/08 17:20:32 + +commit 8f18329bf9ed6d4e043df9b6affa86209332a47b +Author: jbj +Date: Fri Jan 5 21:04:45 2001 +0000 + + - fix: 3 packages from Red Hat 5.2 had bogus %verifyscript tag. + + CVS patchset: 4413 + CVS date: 2001/01/05 21:04:45 + +commit 9bf42922ebe56ef1799d0be4628a90f95367acdd +Author: jbj +Date: Thu Jan 4 02:24:14 2001 +0000 + + - fix: pass scriptlet args, as in %post -p "/sbin/ldconfig -n /lib". + (Rodrigo Barbosa) + + CVS patchset: 4411 + CVS date: 2001/01/04 02:24:14 + +commit 520800b61de36ffe27723d7d9ecae748faa314f4 +Author: jbj +Date: Thu Jan 4 00:53:41 2001 +0000 + + Duh, conversion to lower is " ... | 0.20". + + CVS patchset: 4409 + CVS date: 2001/01/04 00:53:41 + +commit e8d41399496f62196613412687c3e14442222ee7 +Author: jbj +Date: Wed Jan 3 20:28:29 2001 +0000 + + solaris awk hase not (foo ? ... : ...) construct. + + CVS patchset: 4407 + CVS date: 2001/01/03 20:28:29 + +commit 23fcf67cb51b54c4c1f23188ee355dbcbfba0a28 +Author: jbj +Date: Wed Jan 3 20:19:27 2001 +0000 + + - fix: avoid locale issues with strcasecmp/strncasecmp (#23199). + - remove almost all explicit uses of stderr in rpmlib using rpmError(). + + CVS patchset: 4406 + CVS date: 2001/01/03 20:19:27 + +commit fd2c1d927f4a13e0507ab929a009decdbb90c01e +Author: jbj +Date: Tue Jan 2 17:27:18 2001 +0000 + + Sanity (make dist). + + CVS patchset: 4402 + CVS date: 2001/01/02 17:27:18 + +commit 6aafc439daffd1232b410346abb2307cef0a2d4d +Author: jbj +Date: Tue Jan 2 17:19:34 2001 +0000 + + doxygen annotations for popt. + + CVS patchset: 4401 + CVS date: 2001/01/02 17:19:34 + +commit 25d8bdb6c44745b67129440bac510cb779ebfd42 +Author: jbj +Date: Tue Jan 2 00:12:03 2001 +0000 + + Sanity (make dist). + + CVS patchset: 4399 + CVS date: 2001/01/02 00:12:03 + +commit 836b60f018634944eb61315bad54d644960e71a6 +Author: jbj +Date: Tue Jan 2 00:10:45 2001 +0000 + + fix: qva->qva_sourceCnt check now 2 rather than 1 with nested tables. + + CVS patchset: 4398 + CVS date: 2001/01/02 00:10:45 + +commit fa3e119a8350665f9c8d98929e4ceed041c4c3f3 +Author: jbj +Date: Mon Jan 1 23:14:47 2001 +0000 + + - use popt autohelp for rpm helper binaries. + + CVS patchset: 4396 + CVS date: 2001/01/01 23:14:47 + +commit f2f0eb928e912e49baec2970529f74980d16aab1 +Author: jbj +Date: Sun Dec 31 20:46:18 2000 +0000 + + Don't want -pg flags. + + CVS patchset: 4395 + CVS date: 2000/12/31 20:46:18 + +commit 37a87e6f14cc9f4e81779c4777454e331934bb96 +Author: jbj +Date: Sun Dec 31 20:30:37 2000 +0000 + + - (popt): add POPT_ARGFLAG_OPTIONAL for long options with optional arg. + - (popt): diddle auto-help to include type of arg expected. + + CVS patchset: 4394 + CVS date: 2000/12/31 20:30:37 + +commit b9145eabe09db09a56c9daf3006426b08182d848 +Author: jbj +Date: Sat Dec 30 19:59:37 2000 +0000 + + - (popt): fix float/double handling (#19701). + - (popt): non-linux needs (#22732). + + CVS patchset: 4390 + CVS date: 2000/12/30 19:59:37 + +commit e5899585adb06bc6d934b6a571c6778710a334a6 +Author: jbj +Date: Sat Dec 30 19:01:23 2000 +0000 + + - (non-linux): move stubs.c to rpmio (#21132). + - (python): bind initdb (#20988). + + CVS patchset: 4389 + CVS date: 2000/12/30 19:01:23 + +commit 23f9e46a3394fbe6687a1c0446c9a2ae393cc515 +Author: jbj +Date: Sat Dec 30 18:26:10 2000 +0000 + + Typo. + + CVS patchset: 4387 + CVS date: 2000/12/30 18:26:10 + +commit 06e45e2923af6c68c85d90a27c523987740f6036 +Author: jbj +Date: Fri Dec 29 21:44:37 2000 +0000 + + - fix: avoid FAT and other brain-dead file systems that have not inodes. + - fix: hack around alpha mis-compilation signature problems. + - rpmmodule.c(handleDbResult): return empty list when nothing matches. + + CVS patchset: 4385 + CVS date: 2000/12/29 21:44:37 + +commit aff441656cc10f1326a3d65c96051f8096880de1 +Author: gafton +Date: Fri Dec 29 19:25:38 2000 +0000 + + fix handleDbResult so that it will return an empty list when nothing matches instead of delivering an exception + + CVS patchset: 4382 + CVS date: 2000/12/29 19:25:38 + +commit bc5ea0ac35691a2400767c661fd204e54d614c3e +Author: jbj +Date: Wed Dec 27 21:22:17 2000 +0000 + + Bump release. + + CVS patchset: 4378 + CVS date: 2000/12/27 21:22:17 + +commit f84fd1900d2c478ad645b9d8b12557bc4e7825ac +Author: jbj +Date: Wed Dec 27 21:19:53 2000 +0000 + + - use malloc'ed buffer for large queries. + + CVS patchset: 4377 + CVS date: 2000/12/27 21:19:53 + +commit 6fca2e5c39f9251ce799724052470c96edfc0383 +Author: jbj +Date: Tue Dec 26 19:06:54 2000 +0000 + + Fix --queryformat. + + CVS patchset: 4374 + CVS date: 2000/12/26 19:06:54 + +commit 190b5df3693c0368d8a2483626f20c19919130d9 +Author: jbj +Date: Tue Dec 26 13:10:18 2000 +0000 + + - send query/verify output through rpmlog(). + - resurrect rpmErrorSetCallback() and rpmErrorString(). + + CVS patchset: 4372 + CVS date: 2000/12/26 13:10:18 + +commit fdd2f17c5647079fa042ddb8660233a6b32c7075 +Author: jbj +Date: Thu Dec 21 21:07:41 2000 +0000 + + - fix: removed headers from db need a headerCopy(). + + CVS patchset: 4368 + CVS date: 2000/12/21 21:07:41 + +commit 8e1c9c413bec997990e3c9f9ab72dae50914d6a7 +Author: jbj +Date: Thu Dec 21 17:20:19 2000 +0000 + + Sanity (make dist). + + CVS patchset: 4367 + CVS date: 2000/12/21 17:20:19 + +commit c339c239b9aadeaa228377c3f812db81e9d3c083 +Author: jbj +Date: Thu Dec 21 17:14:53 2000 +0000 + + - immutable headers, once installed by rpm3, need to lose immutablity. + + CVS patchset: 4365 + CVS date: 2000/12/21 17:14:53 + +commit b874299aab3b048055c63036b650e5352f39c574 +Author: jbj +Date: Wed Dec 20 21:08:18 2000 +0000 + + - whiteout mozilla loop for 7.1. + fix the auto %_tmppath creation. + + CVS patchset: 4363 + CVS date: 2000/12/20 21:08:18 + +commit e6161a7cb3a21c1a6dbac2aee3e0627a6852fc25 +Author: jbj +Date: Tue Dec 19 23:22:00 2000 +0000 + + Sync with rpm-4_0 branch. + + CVS patchset: 4361 + CVS date: 2000/12/19 23:22:00 + +commit 22be517f73d31bc1eb80f8a69bb8211670cd16fc +Author: jbj +Date: Tue Dec 19 17:43:56 2000 +0000 + + - identify install scriptlet failures with the name of the scriptlet. + - handle install chroot's identically throughout the install process. + - add rpmlib(HeaderLoadSortsTags) for tracking header regions "just in case". + - create _tmppath on the fly if not present. + + CVS patchset: 4355 + CVS date: 2000/12/19 17:43:56 + +commit 73ee3b2e8657ea8367a34e683bb7a3fc73af8494 +Author: jbj +Date: Sun Dec 17 19:55:31 2000 +0000 + + Move assertion to avoid false failure. + + CVS patchset: 4352 + CVS date: 2000/12/17 19:55:31 + +commit c52fc1329b320bfb4a1c20d99b104abe558dee16 +Author: jbj +Date: Sun Dec 17 01:16:14 2000 +0000 + + Spelling correction. + + CVS patchset: 4349 + CVS date: 2000/12/17 01:16:14 + +commit f7c8cb86898a47f396a7f3ee0d5fcba1de328a56 +Author: jbj +Date: Sat Dec 16 19:00:30 2000 +0000 + + - gendiff: generate ChangeLog patches more intelligently (#22356). + + CVS patchset: 4348 + CVS date: 2000/12/16 19:00:30 + +commit 92c9e1fc77e3b8dd523bc34323bf377b719e94b5 +Author: jbj +Date: Thu Dec 14 22:14:29 2000 +0000 + + - fix: segfault on build path, ignore deleted drips. + - fix: synthesized callbacks for removed packages have not a pkgkey. + + CVS patchset: 4346 + CVS date: 2000/12/14 22:14:29 + +commit 66671b9701767918dfc0541f15aca2e6abd0ac85 +Author: jbj +Date: Wed Dec 13 22:00:33 2000 +0000 + + - fix: (transaction.c) assume file state normal if tag is missing. + - fix: failed signature read headerFree segfault. + - fix: revert ALPHA_LOSSAGE, breaks 6.2/i386. + + CVS patchset: 4343 + CVS date: 2000/12/13 22:00:33 + +commit 9ead48e86bb92aa19ba3159a3fd123f978c3b8a9 +Author: jbj +Date: Tue Dec 12 21:45:18 2000 +0000 + + Sanity (make dist). + + CVS patchset: 4340 + CVS date: 2000/12/12 21:45:18 + +commit c7248553bebb427efa2ad1059ddd7c77b4d062d7 +Author: jbj +Date: Tue Dec 12 21:05:49 2000 +0000 + + - fix: headerLoad segfault in python bindings. + + CVS patchset: 4339 + CVS date: 2000/12/12 21:05:49 + +commit db32ab6bea1b635129820d6b628e6156c61b5385 +Author: jbj +Date: Tue Dec 12 20:03:45 2000 +0000 + + Sync with rpm-4_0 branch. + + CVS patchset: 4338 + CVS date: 2000/12/12 20:03:45 + +commit 2e9d2616969433851a1c883c900d6ea5acde67b7 +Author: jbj +Date: Mon Dec 4 02:13:11 2000 +0000 + + - use package version 3 if --nodirtokens is specified. + + CVS patchset: 4317 + CVS date: 2000/12/04 02:13:11 + +commit 0d5ea219853edb5872fff3b5145ccd1c5783df14 +Author: jbj +Date: Mon Dec 4 00:55:17 2000 +0000 + + Sync with rpm-4_0 branch. + + CVS patchset: 4315 + CVS date: 2000/12/04 00:55:17 + +commit 780c0c2987c4b66bcad29b7cb2c1eb46bdd0b0c8 +Author: jbj +Date: Sun Dec 3 17:47:49 2000 +0000 + + - python: bind package removal (#21274). + + CVS patchset: 4307 + CVS date: 2000/12/03 17:47:49 + +commit 2885f536b6e314734c0c04245d77b9f7bdc76d42 +Author: jbj +Date: Sat Dec 2 21:53:44 2000 +0000 + + Bring header reggions mods back to top of stack. + + CVS patchset: 4305 + CVS date: 2000/12/02 21:53:44 + +commit d7a40e754dc6b0ac07d2185bb5723384065feab5 +Author: jbj +Date: Sat Dec 2 16:52:14 2000 +0000 + + - improved find-{requires,provides} for aix4/hpux/irix6/osf. + Tim Mooney + + CVS patchset: 4300 + CVS date: 2000/12/02 16:52:14 + +commit 28625265e4cb2653f8994cebae1da6fce6919d9d +Author: jbj +Date: Wed Nov 22 20:05:51 2000 +0000 + + FILENAMES -> OLDFILENAMES, tags have changed . + + CVS patchset: 4291 + CVS date: 2000/11/22 20:05:51 + +commit 339e76efe045148c013b1e2e5d4a09f892dcdcda +Author: jbj +Date: Thu Nov 16 22:55:10 2000 +0000 + + - md5 sums are little endian (no swap) so big endian needs the swap. + + CVS patchset: 4285 + CVS date: 2000/11/16 22:55:10 + +commit 72887bda14d22d91807850aa8550a07953596129 +Author: rjray +Date: Thu Nov 16 08:06:35 2000 +0000 + + minor nits + + CVS patchset: 4282 + CVS date: 2000/11/16 08:06:35 + +commit 5241ae65819f65820f335f7c5adc94bf33fe01c3 +Author: jbj +Date: Wed Nov 15 20:44:57 2000 +0000 + + Annotations. + + CVS patchset: 4279 + CVS date: 2000/11/15 20:44:57 + +commit fa7f37728fa08ff9ce066ed2928b646b0b8dcf1f +Author: jbj +Date: Wed Nov 15 20:44:06 2000 +0000 + + Avoid gcc enum warnings, remove ugly braces. + + CVS patchset: 4278 + CVS date: 2000/11/15 20:44:06 + +commit 045d275d4977f339bdfe5080ee6c78155af2aa67 +Author: jbj +Date: Wed Nov 15 20:42:25 2000 +0000 + + Add const's. + + CVS patchset: 4277 + CVS date: 2000/11/15 20:42:25 + +commit 2d09e6c9da6ff24bcffb837ea2f88e92f75d63d4 +Author: jbj +Date: Wed Nov 15 20:38:58 2000 +0000 + + Sanity. + + CVS patchset: 4276 + CVS date: 2000/11/15 20:38:58 + +commit 4718cca58c9befe4041c054e819ec917592d40ef +Author: jbj +Date: Wed Nov 15 16:09:47 2000 +0000 + + Add arm per-platform config directories. + + CVS patchset: 4275 + CVS date: 2000/11/15 16:09:47 + +commit a17b1cd86cd3e7f76a178111c591404cf9f63fd5 +Author: jbj +Date: Wed Nov 15 16:00:42 2000 +0000 + + - hpux w/o -D_OPEN_SOURCE has not h_errno. + + CVS patchset: 4271 + CVS date: 2000/11/15 16:00:42 + +commit 5a3203d4851f69e47be2797ffa98fe97085ed6e1 +Author: jbj +Date: Wed Nov 15 15:28:46 2000 +0000 + + - fix: segfault on exit of "rpm -qp --qf '%{#fsnames}' pkg" (#20595). + + CVS patchset: 4268 + CVS date: 2000/11/15 15:28:46 + +commit 98d922e42d9e7d98d2b6628cd5af9f081dc3451c +Author: rjray +Date: Tue Nov 14 06:43:53 2000 +0000 + + *** empty log message *** + + CVS patchset: 4266 + CVS date: 2000/11/14 06:43:53 + +commit f34af1ea587faf2141060c6400f88080377ffd00 +Author: rjray +Date: Tue Nov 14 06:19:10 2000 +0000 + + Fixing scalar mortality issues + + CVS patchset: 4265 + CVS date: 2000/11/14 06:19:10 + +commit 0f33f87d1ce6fb5d6e7023e2da4c3339d2e3d74c +Author: jbj +Date: Sun Nov 12 19:33:07 2000 +0000 + + - fix: duplicate headerFree() on installBinaryPackage() error return. + + CVS patchset: 4263 + CVS date: 2000/11/12 19:33:07 + +commit 44e5913dae80f1040748441af35fb02b840c397a +Author: jbj +Date: Sun Nov 12 11:11:49 2000 +0000 + + - fine-grained Requires, remove install PreReq's from Requires db. + + CVS patchset: 4258 + CVS date: 2000/11/12 11:11:49 + +commit 97e479677f998ed02643804b37bf89e40a56a0cf +Author: jbj +Date: Sun Nov 12 10:02:54 2000 +0000 + + Sanity. + + CVS patchset: 4257 + CVS date: 2000/11/12 10:02:54 + +commit e94ee3fa1b5714e6eeed381912d8263cc560875a +Author: rjray +Date: Sat Nov 11 09:24:32 2000 +0000 + + All changes in before 0.292 release + + CVS patchset: 4253 + CVS date: 2000/11/11 09:24:32 + +commit f7db7be14f8b08f1c949da3a7d891cc2d6ec6036 +Author: rjray +Date: Fri Nov 10 09:55:50 2000 +0000 + + Bumped version number in preparation for next release + + CVS patchset: 4251 + CVS date: 2000/11/10 09:55:50 + +commit 187174dc4b51b1b78d02e1c3f37f653de478cd66 +Author: rjray +Date: Fri Nov 10 09:41:50 2000 +0000 + + More tests. + + CVS patchset: 4250 + CVS date: 2000/11/10 09:41:50 + +commit 011f727bbff26c84a2044c6458e3d06f972c486b +Author: rjray +Date: Fri Nov 10 08:49:57 2000 +0000 + + Wide-range changes and bugfixing. Commit to sync w/ desktop + + CVS patchset: 4249 + CVS date: 2000/11/10 08:49:57 + +commit 843e9e77638ee94fbce8b4f5a623c4610b5854d0 +Author: rjray +Date: Fri Nov 10 08:49:11 2000 +0000 + + sync w/ desktop + + CVS patchset: 4248 + CVS date: 2000/11/10 08:49:11 + +commit 80450e23a63a38d0fae18a2d7110ca82d2184fa4 +Author: rjray +Date: Fri Nov 10 08:48:39 2000 +0000 + + Added .gdbinit + + CVS patchset: 4247 + CVS date: 2000/11/10 08:48:39 + +commit 38b66577e62875adac4542b7923d614f65cf4239 +Author: jbj +Date: Wed Nov 8 17:07:01 2000 +0000 + + - add region marker as RPM_BIN_TYPE in packages and database. + - fix: don't headerCopy() relocateable packages if not relocating. + + CVS patchset: 4246 + CVS date: 2000/11/08 17:07:01 + +commit 387de4bd656512e840108ca8a79c3b972eb133c2 +Author: jbj +Date: Tue Nov 7 13:16:56 2000 +0000 + + Orphan. + + CVS patchset: 4245 + CVS date: 2000/11/07 13:16:56 + +commit 636e4b37718ea8f87fcf29f934aa0a03e9bfcc69 +Author: jbj +Date: Tue Nov 7 13:16:43 2000 +0000 + + - load headers as single contiguous region. + + CVS patchset: 4244 + CVS date: 2000/11/07 13:16:43 + +commit 62c5a919309223a72c05bbcd2e26559bce67def1 +Author: jbj +Date: Thu Nov 2 17:57:25 2000 +0000 + + - add support for unzip rodrigob@conectiva.com.br> + + CVS patchset: 4243 + CVS date: 2000/11/02 17:57:25 + +commit 5f541ebafd9a1ef35d01f5f169a15533f0396d1c +Author: jbj +Date: Thu Nov 2 14:48:43 2000 +0000 + + Document that --target needs equal sign. + + CVS patchset: 4242 + CVS date: 2000/11/02 14:48:43 + +commit 6a0534e5d909191f33b835b15f981bfc282a29db +Author: jbj +Date: Tue Oct 31 18:24:05 2000 +0000 + + Return unsatisfied immediately if "rpmlib(" dependency fails to match. + + CVS patchset: 4241 + CVS date: 2000/10/31 18:24:05 + +commit 865ba80f1eebe26aa8e81634d643d6ec95faf5fa +Author: jbj +Date: Tue Oct 31 16:53:14 2000 +0000 + + - add rpmGetRpmlibProvides() to retrieve rpmlib(...) provides + "Pawel A. Gajda" . + + CVS patchset: 4236 + CVS date: 2000/10/31 16:53:14 + +commit edfbc6958ac14d095801ced4abf585aa74b2ad67 +Author: jbj +Date: Tue Oct 31 16:22:43 2000 +0000 + + Document that --target needs equal sign. + + CVS patchset: 4235 + CVS date: 2000/10/31 16:22:43 + +commit ce1e8d26ec5c76550c59fa30b6e6787e21f866e0 +Author: jbj +Date: Tue Oct 31 16:18:34 2000 +0000 + + - add support for SHA1 as well as MD5 message digests. + lclint annotations. + + CVS patchset: 4234 + CVS date: 2000/10/31 16:18:34 + +commit d69a6f7c1c4901dd48ca730937ce67886fbf2c61 +Author: jbj +Date: Tue Oct 31 16:10:49 2000 +0000 + + Eliminate. + + CVS patchset: 4233 + CVS date: 2000/10/31 16:10:49 + +commit 95acf8ebaff1197dcb24df29bef7a8150035d2e1 +Author: jbj +Date: Sat Oct 28 18:45:58 2000 +0000 + + - better item/task progress bars . + + CVS patchset: 4232 + CVS date: 2000/10/28 18:45:58 + +commit e407eeefe7afcbfbfb11d213ac08f102c8200db7 +Author: jbj +Date: Sat Oct 28 17:30:58 2000 +0000 + + - add brp-strip-shared script . + + CVS patchset: 4231 + CVS date: 2000/10/28 17:30:58 + +commit 3ad99fcba52fcc5e8ab636d2f1760c945cdfbf19 +Author: jbj +Date: Sat Oct 28 17:16:25 2000 +0000 + + - add cscope/ctags (Rodrigo Barbosa). + - remove getMacroBody() from rpmio API. + - hide libio lossage in prototype, not API. + lclint annotations. + + CVS patchset: 4230 + CVS date: 2000/10/28 17:16:25 + +commit b8f90f10cbb592d7ac15dccae503767f262cd719 +Author: jbj +Date: Fri Oct 27 21:45:14 2000 +0000 + + - fix: runTriggers was not adding countCorrection. + + CVS patchset: 4229 + CVS date: 2000/10/27 21:45:14 + +commit 12dd80dc37fef861ada690fa0c7ffcc8a47d4fa4 +Author: jbj +Date: Thu Oct 26 15:32:03 2000 +0000 + + Add base64 fiddles to get at signature contents to librpmio.a. + parsePrep.c: fix typo's. + + CVS patchset: 4227 + CVS date: 2000/10/26 15:32:03 + +commit f104a06fb09a071d9abae455b6d44473ef4be4f1 +Author: jbj +Date: Tue Oct 24 14:09:41 2000 +0000 + + @todo FIXME: Option -q broken when not immediately after %setup. + + CVS patchset: 4226 + CVS date: 2000/10/24 14:09:41 + +commit 3e1e23bf0630949e1ae6d9c9adb4bc606056c75d +Author: jbj +Date: Tue Oct 24 13:46:51 2000 +0000 + + - verify MD5 sums of payload files when unpacking archive. + + CVS patchset: 4225 + CVS date: 2000/10/24 13:46:51 + +commit 5a35ed816dc9ef10c3c0951f676779a9e4381207 +Author: notting +Date: Sun Oct 22 07:51:45 2000 +0000 + + add arch_compat: i686 for ia64 + + CVS patchset: 4223 + CVS date: 2000/10/22 07:51:45 + +commit 03efb685f124339951146926d00f204feabca001 +Author: jbj +Date: Fri Oct 20 22:04:27 2000 +0000 + + - pass rpmTransactionSet, not elements, to installBinaryPackage et al. + + CVS patchset: 4221 + CVS date: 2000/10/20 22:04:27 + +commit 8699b8a12376ab718d09f9f215a40940567556dc +Author: jbj +Date: Fri Oct 20 16:47:00 2000 +0000 + + - detect rdonly linux file systems. + - check available inodes as well as blocks on mounted file systems. + + CVS patchset: 4220 + CVS date: 2000/10/20 16:47:00 + +commit ec4738cfff4bf79d9a0fb972f6ed7f4ce72cbf08 +Author: rjray +Date: Fri Oct 13 09:24:05 2000 +0000 + + Removed references to Package + + CVS patchset: 4217 + CVS date: 2000/10/13 09:24:05 + +commit fb6fce2b529e30881d1aff84c0e6706f9f9d1de7 +Author: rjray +Date: Fri Oct 13 09:23:55 2000 +0000 + + *** empty log message *** + + CVS patchset: 4216 + CVS date: 2000/10/13 09:23:55 + +commit 88908907dce477c5b611dadef91a2c726e39fb3e +Author: rjray +Date: Fri Oct 13 08:47:26 2000 +0000 + + Bumped VERSION up to 0.291 + + CVS patchset: 4215 + CVS date: 2000/10/13 08:47:26 + +commit 1947c4fcca4a808d33f751954364ef38da0429a7 +Author: rjray +Date: Fri Oct 13 08:44:31 2000 +0000 + + Removed package stuff for 0.291 + + CVS patchset: 4214 + CVS date: 2000/10/13 08:44:31 + +commit bc2bf1f5c4c4b2167140d338e835837113f48368 +Author: rjray +Date: Fri Oct 13 08:43:39 2000 +0000 + + *** empty log message *** + + CVS patchset: 4213 + CVS date: 2000/10/13 08:43:39 + +commit 60fe55269a19a1a491ef5c7f8d8c1755ddfb9290 +Author: rjray +Date: Fri Oct 13 08:42:32 2000 +0000 + + Tweaked the spec file, removed Package stuff for 0.291. + + CVS patchset: 4212 + CVS date: 2000/10/13 08:42:32 + +commit b310c36245ded46ac107b8be78552a4eb10818f7 +Author: rjray +Date: Thu Oct 12 05:10:40 2000 +0000 + + Added RPM::Package stuff + + CVS patchset: 4211 + CVS date: 2000/10/12 05:10:40 + +commit 021e5e38a3ea47964458662a9564f265520894cc +Author: rjray +Date: Thu Oct 12 05:09:45 2000 +0000 + + Checkpoint. Currently loads and does minimal operations. + + CVS patchset: 4210 + CVS date: 2000/10/12 05:09:45 + +commit ead6af89ab9be825ecdfe034115b14e93e2292a1 +Author: rjray +Date: Thu Oct 12 05:09:16 2000 +0000 + + Added a bug fix, removed an unused var, and added a constant() with AUTOLOAD + + CVS patchset: 4209 + CVS date: 2000/10/12 05:09:16 + +commit 8d85374707430b2a50388d886b6c6ef1c74abf79 +Author: rjray +Date: Thu Oct 12 05:08:08 2000 +0000 + + RPM packaging support, including make rules and a spec file. + + CVS patchset: 4208 + CVS date: 2000/10/12 05:08:08 + +commit 090b045e04f46bab0f36632ae1f06b34115d9447 +Author: rjray +Date: Thu Oct 12 05:07:09 2000 +0000 + + Merged into Makefile.PL + + CVS patchset: 4207 + CVS date: 2000/10/12 05:07:09 + +commit 88290004866aed2cc5e6b2b8c6c4c3428b39d87d +Author: jbj +Date: Tue Oct 10 21:17:53 2000 +0000 + + Man page and help message correction (#18759). + + CVS patchset: 4203 + CVS date: 2000/10/10 21:17:53 + +commit 5583a45ff0b492e359fd912f8675d16ade0d519b +Author: rjray +Date: Tue Oct 10 08:37:45 2000 +0000 + + Baseline file, tests to be added + + CVS patchset: 4202 + CVS date: 2000/10/10 08:37:45 + +commit d20550b5a6097edbbdec2fffd83c3f0c1a70ca7e +Author: rjray +Date: Tue Oct 10 08:37:20 2000 +0000 + + Added another value for RPM_PACKAGE_* + + CVS patchset: 4201 + CVS date: 2000/10/10 08:37:20 + +commit ab501927a673bd28a4108f8b791321b6274d5eb3 +Author: rjray +Date: Tue Oct 10 08:36:40 2000 +0000 + + This is the spec file per cpanflute and Jeff. This will be enhanced + + CVS patchset: 4200 + CVS date: 2000/10/10 08:36:40 + +commit 7da9566b9ed77de5c5dadb5a3627a36d7fd4174e +Author: rjray +Date: Tue Oct 10 08:28:10 2000 +0000 + + The rpm-version defines should have been put in for versions older + than 4.0. + + CVS patchset: 4199 + CVS date: 2000/10/10 08:28:10 + +commit aff9958bb64619b234c176c298dfee8753d04e06 +Author: rjray +Date: Tue Oct 10 08:22:21 2000 +0000 + + Cleanup on the AUTOLOAD function. + + CVS patchset: 4198 + CVS date: 2000/10/10 08:22:21 + +commit 9dd3fe65529f2abb88d4a381ed00e59a1ceda631 +Author: rjray +Date: Tue Oct 10 08:21:56 2000 +0000 + + Added loading-tests for RPM::Error and RPM::Package + + CVS patchset: 4197 + CVS date: 2000/10/10 08:21:56 + +commit 7edce976fc9d827d8ac4efcf126f4674ac473c18 +Author: rjray +Date: Sun Oct 8 10:09:26 2000 +0000 + + The start of Package functionality (CVS checkpoint to tremere) + + CVS patchset: 4196 + CVS date: 2000/10/08 10:09:26 + +commit f53b8cb1c2c5c80fb945af8421c62282327c6582 +Author: rjray +Date: Sun Oct 8 10:08:58 2000 +0000 + + Changes related to start of Package integration + + CVS patchset: 4195 + CVS date: 2000/10/08 10:08:58 + +commit 8bc42f9c4df2eb167acc9ff1849551326cce76a8 +Author: rjray +Date: Sun Oct 8 10:07:49 2000 +0000 + + Added a fail-clause for O_RPM_Blessed + + CVS patchset: 4194 + CVS date: 2000/10/08 10:07:49 + +commit d25ad49c138cf9a5f3b0aa65897544746951ce32 +Author: rjray +Date: Sun Oct 8 10:06:58 2000 +0000 + + Removed unused var + + CVS patchset: 4193 + CVS date: 2000/10/08 10:06:58 + +commit 396beef3985e62a92812926035b62b7eb4117488 +Author: rjray +Date: Sun Oct 8 10:06:37 2000 +0000 + + *** empty log message *** + + CVS patchset: 4192 + CVS date: 2000/10/08 10:06:37 + +commit feaffd1820e9e5fdf3b2514f9a0da45a6b21bab4 +Author: rjray +Date: Sun Oct 8 10:06:04 2000 +0000 + + Added Package to bootstrap list + + CVS patchset: 4191 + CVS date: 2000/10/08 10:06:04 + +commit a9a33f8b735f528ceac6d5f44907ead6b3710cc1 +Author: rjray +Date: Sun Oct 8 10:05:36 2000 +0000 + + Added Package to build list + + CVS patchset: 4190 + CVS date: 2000/10/08 10:05:36 + +commit 987f5e818c431d00dca41f9d56678b32aefa3909 +Author: rjray +Date: Thu Oct 5 05:33:59 2000 +0000 + + changed for 0.29 + + CVS patchset: 4189 + CVS date: 2000/10/05 05:33:59 + +commit 4be4eb099b874138f9452829797ea01e1792d97a +Author: rjray +Date: Thu Oct 5 04:48:59 2000 +0000 + + Various updates in prelude to 0.29, mainly rpm 4.0 compatibility + + CVS patchset: 4188 + CVS date: 2000/10/05 04:48:59 + +commit 68ff87361d8a715509da5d57077af50bb8e9edd4 +Author: jbj +Date: Fri Sep 29 19:50:29 2000 +0000 + + doxygen annotations. + - fix: more (possible) xstrdup side effects. + + CVS patchset: 4186 + CVS date: 2000/09/29 19:50:29 + +commit 17993c73cae2e6674c732d685ffa5093a95cf2bd +Author: jbj +Date: Fri Sep 29 00:51:41 2000 +0000 + + manpage fix (johnsonm@redhat.com) + + CVS patchset: 4184 + CVS date: 2000/09/29 00:51:41 + +commit 88579dc7a79ab1e26fc38301683d0dc7ce29382a +Author: jbj +Date: Thu Sep 28 22:58:40 2000 +0000 + + - handle possible db3 dependency on -lpthread more gracefully. + + CVS patchset: 4181 + CVS date: 2000/09/28 22:58:40 + +commit 4893fba6f059d6eae5a209b9883a452bd0cb3e22 +Author: jbj +Date: Tue Sep 26 22:28:09 2000 +0000 + + - fix: avoid calling getpass twice as side effect of xstrdup macro (#17672). + + CVS patchset: 4179 + CVS date: 2000/09/26 22:28:09 + +commit 39b81b51744f848298c994611869acbfc993d545 +Author: jbj +Date: Tue Sep 26 18:04:12 2000 +0000 + + - order packages using tsort, clipping PreReq:'s in dependency loops. + + CVS patchset: 4177 + CVS date: 2000/09/26 18:04:12 + +commit e1d18f949b67a0aac82ffaa12d4d18c23d8c99c4 +Author: jbj +Date: Tue Sep 26 17:43:56 2000 +0000 + + Remove bash2 dependency. + + CVS patchset: 4176 + CVS date: 2000/09/26 17:43:56 + +commit d3a569263a19604c9088ed0a85c69b12bed635db +Author: jbj +Date: Tue Sep 26 17:42:39 2000 +0000 + + Add rpmsort. + + CVS patchset: 4175 + CVS date: 2000/09/26 17:42:39 + +commit 1bf24642f706123f7997b27270eaeb89bf3e582e +Author: jbj +Date: Tue Sep 26 17:42:00 2000 +0000 + + rpminject.c: add mtrace prologue. + + CVS patchset: 4174 + CVS date: 2000/09/26 17:42:00 + +commit 750614f58fffbd1fca8279ab30a21354990f1072 +Author: jbj +Date: Tue Sep 26 17:21:51 2000 +0000 + + doxygen annotations. + + CVS patchset: 4173 + CVS date: 2000/09/26 17:21:51 + +commit 6a2f555121f950f2854e0180c6177c2ffba63ed8 +Author: jbj +Date: Tue Sep 26 17:21:12 2000 +0000 + + rpmdb.c: Mark dead code, replaced with per-iterator cursors. + + CVS patchset: 4172 + CVS date: 2000/09/26 17:21:12 + +commit 6bcb79bc9bdcdb162a75655a0e07de023a3b7b27 +Author: jbj +Date: Tue Sep 26 17:19:32 2000 +0000 + + Add @todo Should directories have %doc/%config attributes? (#14531). + + CVS patchset: 4171 + CVS date: 2000/09/26 17:19:32 + +commit 4920a3b122ef190eac016bdf2955df9cdbfef2c6 +Author: jbj +Date: Sat Sep 16 14:05:26 2000 +0000 + + - don't trim leading ./ in rpmCleanPath() (#14961). + + CVS patchset: 4169 + CVS date: 2000/09/16 14:05:26 + +commit 81cf1461aa5850cd068a185aff6ae1f155506747 +Author: notting +Date: Thu Sep 14 23:05:30 2000 +0000 + + fix 64bit lib stuff + + CVS patchset: 4166 + CVS date: 2000/09/14 23:05:30 + +commit 2108d886ba66b90f75a9daa75f8b0a74090e999c +Author: jbj +Date: Thu Sep 14 11:42:48 2000 +0000 + + Revert rpmrc excision for now. + rpmio: add rpmlog.c/rpmlog.h. + + CVS patchset: 4163 + CVS date: 2000/09/14 11:42:48 + +commit 581d3c0324099d067e33cf1a53b2e9eb7478a534 +Author: jbj +Date: Wed Sep 13 17:26:54 2000 +0000 + + - fix: honor --test when doing --freshen. + + CVS patchset: 4158 + CVS date: 2000/09/13 17:26:54 + +commit 5d6496b6276163a077316c8a57e57e032cebdbba +Author: jbj +Date: Mon Sep 11 17:09:32 2000 +0000 + + - popt: support for float/double args. + + CVS patchset: 4155 + CVS date: 2000/09/11 17:09:32 + +commit 1466d06e7464af0e720d64396c83bbbb7e492329 +Author: notting +Date: Thu Sep 7 20:47:18 2000 +0000 + + add (lib64) stuff on ia64 as well + + CVS patchset: 4151 + CVS date: 2000/09/07 20:47:18 + +commit f2efc7263e952cef24f2196f92d02ee0b3b9aa1e +Author: jbj +Date: Fri Sep 1 21:15:40 2000 +0000 + + - unify rpmError and rpmMessge interfaces through rpmlog. + - collect and display rpm build error messages at end of build. + + CVS patchset: 4149 + CVS date: 2000/09/01 21:15:40 + +commit 4f0179f7ee468c3876ee823a69d89c236784372f +Author: jbj +Date: Thu Aug 31 02:38:57 2000 +0000 + + Unify rpmError() and rpmMessage() on top of rpmlog(). + + CVS patchset: 4148 + CVS date: 2000/08/31 02:38:57 + +commit 679aca04c8ffd077d3cd8e2ab3279899ee239b9a +Author: jbj +Date: Wed Aug 30 17:47:53 2000 +0000 + + Doxygen annotations. + + CVS patchset: 4147 + CVS date: 2000/08/30 17:47:53 + +commit c7b24dad58de9de732247194935112066908ff4c +Author: jbj +Date: Tue Aug 29 22:04:33 2000 +0000 + + - translate rpm.8 man page (Peter Ivanyi ). + Doxygen annotations. + + CVS patchset: 4146 + CVS date: 2000/08/29 22:04:33 + +commit 17c5c7e645fd412f8105bccf201f69674737b551 +Author: jbj +Date: Mon Aug 28 15:25:04 2000 +0000 + + Document global/system/user configuration hierarchy in rpmrc/macros (#17038). + + CVS patchset: 4142 + CVS date: 2000/08/28 15:25:04 + +commit c0424122dd154d712a01a0126762252519283fb6 +Author: jbj +Date: Mon Aug 28 01:50:45 2000 +0000 + + - rip out rpm{get,put}text, use getpo.sh and specspo instead. + + CVS patchset: 4139 + CVS date: 2000/08/28 01:50:45 + +commit 8c10883fdd434363e6cc48125337b5f305cc5534 +Author: jbj +Date: Mon Aug 28 01:08:57 2000 +0000 + + Doxygen annotations. + + CVS patchset: 4138 + CVS date: 2000/08/28 01:08:57 + +commit af938797acd2a1fc33c2e83aac0f006973d5c3c9 +Author: jbj +Date: Sun Aug 27 21:35:14 2000 +0000 + + - consistent return for all signature verification. + - use enum for signature header tags. + + CVS patchset: 4137 + CVS date: 2000/08/27 21:35:14 + +commit e3ce4c85e1669dc7112e65f28fc6c450741a4263 +Author: jbj +Date: Sun Aug 27 21:32:23 2000 +0000 + + Add todo note. + + CVS patchset: 4136 + CVS date: 2000/08/27 21:32:23 + +commit e355e21aaed46371b9074d603e760a35112b288f +Author: jbj +Date: Sun Aug 27 20:03:44 2000 +0000 + + Eliminate. + + CVS patchset: 4135 + CVS date: 2000/08/27 20:03:44 + +commit d83648fc60c69113f80765908430b2eac8c3dba1 +Author: jbj +Date: Sun Aug 27 19:43:51 2000 +0000 + + Rip out rpmrc configuration. + + CVS patchset: 4134 + CVS date: 2000/08/27 19:43:51 + +commit 9866d30b0d4a494f33dd3f30074eff6c0dea90b5 +Author: jbj +Date: Sun Aug 27 19:40:35 2000 +0000 + + Doxygen annotations. + + CVS patchset: 4133 + CVS date: 2000/08/27 19:40:35 + +commit f8b364d7a88e346412bd2f458b25d1728abaaf5c +Author: jbj +Date: Sun Aug 27 19:27:03 2000 +0000 + + Doxygen annotations. + + CVS patchset: 4132 + CVS date: 2000/08/27 19:27:03 + +commit bb6d8f7278f902223a1b5bd7a4b89bd604d642c8 +Author: jbj +Date: Sun Aug 27 19:19:44 2000 +0000 + + Eliminate rpm_malloc.h. + + CVS patchset: 4131 + CVS date: 2000/08/27 19:19:44 + +commit a131131381d03cd76c1e6d15ab5b3486ed6f17b3 +Author: jbj +Date: Sun Aug 27 19:18:25 2000 +0000 + + Doxygen annotations. + + CVS patchset: 4130 + CVS date: 2000/08/27 19:18:25 + +commit 918188a90c4911652bbcbe1f20a09b3123d2b5fa +Author: jbj +Date: Sun Aug 27 18:34:02 2000 +0000 + + Doxygen annotations. + + CVS patchset: 4129 + CVS date: 2000/08/27 18:34:02 + +commit 325519f9332cb7c7d36b6bda2f350aa572ad208a +Author: rjray +Date: Fri Aug 25 15:21:34 2000 +0000 + + doc fixes + + CVS patchset: 4128 + CVS date: 2000/08/25 15:21:34 + +commit 1834248adbd92628b84e3cc9954b514f11c7dab7 +Author: rjray +Date: Fri Aug 25 15:21:11 2000 +0000 + + fixes to rpmhdr_STORE + + CVS patchset: 4127 + CVS date: 2000/08/25 15:21:11 + +commit ca22ac99c14be4b531f369889ba1708233c4f666 +Author: rjray +Date: Fri Aug 25 15:20:26 2000 +0000 + + code and doc for vercmp() + + CVS patchset: 4126 + CVS date: 2000/08/25 15:20:26 + +commit bd3f3a317c5a8ce8d21fa8dbe394effff729a5e5 +Author: rjray +Date: Fri Aug 25 15:18:58 2000 +0000 + + *** empty log message *** + + CVS patchset: 4125 + CVS date: 2000/08/25 15:18:58 + +commit 7f6eae072772a54345e03b6fc604c58925541720 +Author: jbj +Date: Thu Aug 24 17:31:01 2000 +0000 + + Update from Ken Estes. + + CVS patchset: 4121 + CVS date: 2000/08/24 17:31:01 + +commit c12ee61e0e91918c5e6fbc5a0668e5385c344c4c +Author: jbj +Date: Thu Aug 24 15:56:51 2000 +0000 + + Consistent example for gendiff (#16669). + + CVS patchset: 4120 + CVS date: 2000/08/24 15:56:51 + +commit f463e1253d69b02f60aaa8c31ac3bb9542d037b1 +Author: msw +Date: Thu Aug 24 06:21:08 2000 +0000 + + merge + + CVS patchset: 4118 + CVS date: 2000/08/24 06:21:08 + +commit 8433a7c14278535b9ec868482e90aa630333dbb4 +Author: msw +Date: Thu Aug 24 06:16:44 2000 +0000 + + fixed + + CVS patchset: 4115 + CVS date: 2000/08/24 06:16:44 + +commit cd05426202e9348de5ba3490991688a7f0abc81a +Author: msw +Date: Wed Aug 23 22:53:05 2000 +0000 + + added a hack to get the header that was passed to the transaction callback marshaller but not passed as arguments to the python callback + + CVS patchset: 4112 + CVS date: 2000/08/23 22:53:05 + +commit e3e8daa4315b6e280c840eca029872034037c4e1 +Author: jbj +Date: Wed Aug 23 13:49:07 2000 +0000 + + lclint annotations. + + CVS patchset: 4109 + CVS date: 2000/08/23 13:49:07 + +commit 94b157906c46dd9bf20de6a21d45bb4d94601c6a +Author: jbj +Date: Wed Aug 23 13:46:36 2000 +0000 + + comments only. + + CVS patchset: 4108 + CVS date: 2000/08/23 13:46:36 + +commit 60938f2a87994c321eb3aecd855c680b738376c4 +Author: jbj +Date: Wed Aug 23 13:11:53 2000 +0000 + + doxygen/lclint annotations. + + CVS patchset: 4107 + CVS date: 2000/08/23 13:11:53 + +commit 5f308b88fdd39a6f656f0e25501c8d565e087e53 +Author: jbj +Date: Wed Aug 23 13:05:01 2000 +0000 + + doxygen/lclint annotations. + + CVS patchset: 4106 + CVS date: 2000/08/23 13:05:01 + +commit d919e56b452414ed7923b901d8bfa9fa5d123e2e +Author: jbj +Date: Wed Aug 23 13:02:13 2000 +0000 + + doxygen annotations. + + CVS patchset: 4105 + CVS date: 2000/08/23 13:02:13 + +commit e62a4131e48b004d15964fb642f72cbf05c7f7ba +Author: jbj +Date: Wed Aug 23 12:59:48 2000 +0000 + + lclint annotations. + + CVS patchset: 4104 + CVS date: 2000/08/23 12:59:48 + +commit bb4c04321a7b800192f6634ec8cb44a5d5a3425c +Author: jbj +Date: Wed Aug 23 12:58:25 2000 +0000 + + doxygen additions. + + CVS patchset: 4103 + CVS date: 2000/08/23 12:58:25 + +commit 9e06f7ae66bfa89570a9ee5c9af815abf294e54c +Author: jbj +Date: Wed Aug 23 12:40:12 2000 +0000 + + lclint additions. + + CVS patchset: 4102 + CVS date: 2000/08/23 12:40:12 + +commit fca172125bad0b4384499c4bfb80d224ed7bb26e +Author: jbj +Date: Wed Aug 23 12:39:49 2000 +0000 + + lclint/doxygen additions. + + CVS patchset: 4101 + CVS date: 2000/08/23 12:39:49 + +commit d0581d13d46920e263b6dfc30b5035259553ad0d +Author: jbj +Date: Sun Aug 20 21:39:13 2000 +0000 + + - add callbacks on package erasure. + - fix: preserve cpio errno when using Fclose with libio. + - fix: initialize sigs everywhere in python header object. + + CVS patchset: 4097 + CVS date: 2000/08/20 21:39:13 + +commit e372c808d2acdb101de76f025b7047fe94a9a582 +Author: jbj +Date: Sun Aug 20 21:30:32 2000 +0000 + + - fix: preserve cpio errno when using Fclose with libio. + + CVS patchset: 4096 + CVS date: 2000/08/20 21:30:32 + +commit ca3e81798fb4c5a175d722ee1039ccfcb2752cce +Author: jbj +Date: Sat Aug 19 13:41:42 2000 +0000 + + Identify signature bindings in version 3.0.6. + + CVS patchset: 4089 + CVS date: 2000/08/19 13:41:42 + +commit ea1956063d11e39f9bd26ca7b8875befee607e56 +Author: jbj +Date: Sat Aug 19 13:37:41 2000 +0000 + + Remove fprintf. + + CVS patchset: 4086 + CVS date: 2000/08/19 13:37:41 + +commit d0e98332d4115aa087e1e1f8e39b80c02c406f10 +Author: jbj +Date: Sat Aug 19 13:10:34 2000 +0000 + + - python bindings to query and verify signatures. + + CVS patchset: 4085 + CVS date: 2000/08/19 13:10:34 + +commit c96e7513f8dd3ebd4030946720e2dff96a5c3cd2 +Author: rjray +Date: Fri Aug 18 08:29:07 2000 +0000 + + Updated for 0.28 + + CVS patchset: 4082 + CVS date: 2000/08/18 08:29:07 + +commit a58cf01cb9b07d501e31aaf7ff3549579e8b1dc6 +Author: rjray +Date: Fri Aug 18 08:25:39 2000 +0000 + + Some error-fixing around reading header data from files, and some additional + fixing when reading from an ftp source. Also added a source_name() method + to access the struct element that remembers the source when the header data + comes from a file, ftp or http. + + CVS patchset: 4081 + CVS date: 2000/08/18 08:25:39 + +commit a54be2690ab06b9897d81dcb20cd636930b9b1d2 +Author: rjray +Date: Fri Aug 18 08:24:22 2000 +0000 + + Support and docs for the source_name() class method. + + CVS patchset: 4080 + CVS date: 2000/08/18 08:24:22 + +commit acfd3ffe5cab382e6f600edc1b082cb6845a75ef +Author: rjray +Date: Fri Aug 18 08:23:43 2000 +0000 + + Yet more docs. + + CVS patchset: 4079 + CVS date: 2000/08/18 08:23:43 + +commit b7e4f83858f100e4c1d26420b889df06fed0fdd7 +Author: rjray +Date: Fri Aug 18 08:23:25 2000 +0000 + + Added a field to the RPM_Header struct. + + CVS patchset: 4078 + CVS date: 2000/08/18 08:23:25 + +commit 9b6f934309708042a29afc7dc71d5fb6b90258e0 +Author: rjray +Date: Thu Aug 17 09:23:44 2000 +0000 + + Reinstated some tags, now that they are better-documented. + + CVS patchset: 4075 + CVS date: 2000/08/17 09:23:44 + +commit 54e75815aa29b74953e8eecc85f2f1a314e93d1d +Author: rjray +Date: Thu Aug 17 09:23:19 2000 +0000 + + Removed RPMTAG_SOURCE from the list of scalars; it's actually a + list. Changed the open in new_from_fname() to be "r" instead of "r+" + because of assertions in the rpmio code when the input source is + stdin. + + CVS patchset: 4074 + CVS date: 2000/08/17 09:23:19 + +commit 564a1d1c008ee03b69dfa5e7524db8c10e89373b +Author: rjray +Date: Thu Aug 17 09:22:10 2000 +0000 + + More documentation, including several corrections. + + CVS patchset: 4073 + CVS date: 2000/08/17 09:22:10 + +commit 1e087bdb41721981576258b39e3fbf16e357375b +Author: jbj +Date: Wed Aug 16 13:37:08 2000 +0000 + + - fix: rebuild db1 -> db3 ate 1st header (#16263). + + CVS patchset: 4072 + CVS date: 2000/08/16 13:37:08 + +commit b6c0e1126efd8fbbeb54624d6c3b13d95a70bc96 +Author: rjray +Date: Wed Aug 16 09:38:05 2000 +0000 + + Bumped version number + + CVS patchset: 4069 + CVS date: 2000/08/16 09:38:05 + +commit 8f6305aedfc490435335e4eb01b40a1baff55af5 +Author: rjray +Date: Wed Aug 16 09:31:58 2000 +0000 + + Lots more documentation + + CVS patchset: 4068 + CVS date: 2000/08/16 09:31:58 + +commit bdcae97fe111f145f5aed177bc6568d6bdaabce3 +Author: rjray +Date: Wed Aug 16 09:31:46 2000 +0000 + + Some clean-up, re-instated a deleted tag. + + CVS patchset: 4067 + CVS date: 2000/08/16 09:31:46 + +commit 9f9b055b09056dd000478aa90eb9e384bb59c489 +Author: rjray +Date: Wed Aug 16 09:31:04 2000 +0000 + + rpmprune is no longer managed as a *.PL file. + + CVS patchset: 4066 + CVS date: 2000/08/16 09:31:04 + +commit 6907b0b3544b54684215052701578cc642b7e00a +Author: rjray +Date: Tue Aug 15 07:59:24 2000 +0000 + + Renamed rpmprune.PL to rpmprune (MakeMaker now handles fixing up #! line). + + CVS patchset: 4065 + CVS date: 2000/08/15 07:59:24 + +commit 32bff1c05bdbae02760382db3828379af6372825 +Author: jbj +Date: Mon Aug 14 19:27:20 2000 +0000 + + Ignore rpmpopt-4.x. + + CVS patchset: 4064 + CVS date: 2000/08/14 19:27:20 + +commit 4851add979b4aef1d34fdb6ec621a7df1776a631 +Author: jbj +Date: Mon Aug 14 19:26:47 2000 +0000 + + Update versions, rpm -> 4.1, popt -> 1.7. + + CVS patchset: 4063 + CVS date: 2000/08/14 19:26:47 + +commit 349c7a49c2cf376668f34d9fb6e404c24740a4b3 +Author: jbj +Date: Mon Aug 14 18:18:54 2000 +0000 + + - disable rpmlib(VersionedDependencies) by defining _noVersionedDependencies. + - man page fixes. + + CVS patchset: 4062 + CVS date: 2000/08/14 18:18:54 + +commit 92d83fc9356f149a58db8bd3f0ed5fb7331c97e4 +Author: jbj +Date: Mon Aug 14 13:25:09 2000 +0000 + + - disable rpmlib(VersionedDependencies) by defining _noVersionedDependencies. + - typo in configure.in (#16096). + + CVS patchset: 4060 + CVS date: 2000/08/14 13:25:09 + +commit c181d853c6d42f8d477267c23c221743178d7a8c +Author: jbj +Date: Sun Aug 13 19:29:11 2000 +0000 + + Auto-update by leon@geon.donetsk.ua + + CVS patchset: 4059 + CVS date: 2000/08/13 19:29:11 + +commit 44874e4aa7fd513334a8f01a3fd3063f7fbb9dcd +Author: jbj +Date: Sun Aug 13 18:47:06 2000 +0000 + + Auto-update by leon@geon.donetsk.ua + + CVS patchset: 4058 + CVS date: 2000/08/13 18:47:06 + +commit 65dfd2d73ab8fd5e45e58471d61075f1f93ea8d5 +Author: jbj +Date: Sun Aug 13 18:36:34 2000 +0000 + + Auto-update by leon@geon.donetsk.ua + + CVS patchset: 4057 + CVS date: 2000/08/13 18:36:34 + +commit 5d5fbd6387f887a1db67d439d84601feb414b57e +Author: jbj +Date: Sun Aug 13 17:40:22 2000 +0000 + + Auto-update by leon@geon.donetsk.ua + + CVS patchset: 4056 + CVS date: 2000/08/13 17:40:22 + +commit 85054e48a778171490654a0c6b180420914ceada +Author: jbj +Date: Fri Aug 11 15:25:44 2000 +0000 + + Simplify environment setting for braindead (i.e. solaris) shells. + + CVS patchset: 4055 + CVS date: 2000/08/11 15:25:44 + +commit f796e164d4258ae117f772d5dc9e0ad0af23d738 +Author: rjray +Date: Fri Aug 11 08:17:42 2000 +0000 + + Fixes related to possible bad return values in error conditions. + + CVS patchset: 4054 + CVS date: 2000/08/11 08:17:42 + +commit 5aa8137a94ac44eabc2a71964761231e3d436400 +Author: jbj +Date: Fri Aug 11 00:13:51 2000 +0000 + + Auto-update by kmaraas@online.no + + CVS patchset: 4053 + CVS date: 2000/08/11 00:13:51 + +commit a54ccb6dc03f0b2e22576bc6b22eb08a6a8032f5 +Author: jbj +Date: Thu Aug 10 16:29:06 2000 +0000 + + Add refresh-po. + + CVS patchset: 4051 + CVS date: 2000/08/10 16:29:06 + +commit 1068f1d715bd39b6e009d30bd32f7941084148f9 +Author: jbj +Date: Thu Aug 10 15:34:37 2000 +0000 + + Recognize embedded quotes in description/summary/group header text. + + CVS patchset: 4050 + CVS date: 2000/08/10 15:34:37 + +commit 41cb8868ee9d479e4618b30dde6a65d5e86312e4 +Author: jbj +Date: Thu Aug 10 06:05:50 2000 +0000 + + Document --noscripts when verifying (#7905). + + CVS patchset: 4049 + CVS date: 2000/08/10 06:05:50 + +commit 60ae47c6180db17180814c5354560297eb8764b1 +Author: jbj +Date: Thu Aug 10 05:55:20 2000 +0000 + + Document "?" output with -Va (#8113). + + CVS patchset: 4048 + CVS date: 2000/08/10 05:55:20 + +commit 88fe538074a81c5bcc4e6cd48c2579ad99d507a5 +Author: jbj +Date: Wed Aug 9 16:49:10 2000 +0000 + + Free fn after error message, not before. + + CVS patchset: 4047 + CVS date: 2000/08/09 16:49:10 + +commit 559b59e36aa9bb3fd80b026494846687dfc7a6ec +Author: jbj +Date: Wed Aug 9 15:33:22 2000 +0000 + + Auto-update by kmaraas@online.no + + CVS patchset: 4046 + CVS date: 2000/08/09 15:33:22 + +commit 557abbea24a29178bdb4fda5b89dadde48e11de7 +Author: jbj +Date: Tue Aug 8 20:38:46 2000 +0000 + + Auto-update by milan.kerslager@spsselib.hiedu.cz + + CVS patchset: 4045 + CVS date: 2000/08/08 20:38:46 + +commit e23ee83a85774417c83cd82f73731b9c4ab4334b +Author: jbj +Date: Tue Aug 8 13:37:28 2000 +0000 + + Auto-update by leon@geon.donetsk.ua + + CVS patchset: 4044 + CVS date: 2000/08/08 13:37:28 + +commit 9d503d826458d9bd3f05ac67d37681e2d6fe30fe +Author: jbj +Date: Tue Aug 8 13:34:20 2000 +0000 + + Auto-update by leon@geon.donetsk.ua + + CVS patchset: 4043 + CVS date: 2000/08/08 13:34:20 + +commit 701eb02ba26f4a0cb9292b3c02c367968730ec0c +Author: jbj +Date: Tue Aug 8 13:20:07 2000 +0000 + + Auto-update by leon@geon.donetsk.ua + + CVS patchset: 4042 + CVS date: 2000/08/08 13:20:07 + +commit cf852a6c37abac546a2cf1fc07805eeb5228ae26 +Author: rjray +Date: Tue Aug 8 07:19:18 2000 +0000 + + Changes for 0.27 release + + CVS patchset: 4041 + CVS date: 2000/08/08 07:19:18 + +commit 4e248a0e08eb7ac629e6f37e8e639ee87205e869 +Author: rjray +Date: Tue Aug 8 07:18:47 2000 +0000 + + Minor changes to reflect new RPM::Database and RPM::Header interfaces. + + CVS patchset: 4040 + CVS date: 2000/08/08 07:18:47 + +commit 7d7f80782c6f068d941379c8c0b808647e63ef9b +Author: rjray +Date: Tue Aug 8 07:05:13 2000 +0000 + + Corrected small oversight that would have prevented exporting both $RPM + and %RPM at the same time. + + CVS patchset: 4039 + CVS date: 2000/08/08 07:05:13 + +commit c0deb8c50868dadfcbffa77b9a04dac2f494a9c9 +Author: rjray +Date: Tue Aug 8 07:02:06 2000 +0000 + + Covered some changes not yet reflected in the documentation. + + CVS patchset: 4038 + CVS date: 2000/08/08 07:02:06 + +commit a99d4311e49d61af23d3fd2b28ae4ad5697c18bd +Author: jbj +Date: Mon Aug 7 23:20:43 2000 +0000 + + Auto-update by leon@geon.donetsk.ua + + CVS patchset: 4037 + CVS date: 2000/08/07 23:20:43 + +commit c283e789b72a69f1e0051cce19aaf171d9ad7980 +Author: jbj +Date: Mon Aug 7 19:38:19 2000 +0000 + + - fix: segfault when globbing on "" (#15593). + + CVS patchset: 4036 + CVS date: 2000/08/07 19:38:19 + +commit 54a0015cfa499f885bc85a45ec4db334187ca33d +Author: jbj +Date: Mon Aug 7 15:09:45 2000 +0000 + + Auto-update by goeran@uddeborg.pp.se + + CVS patchset: 4035 + CVS date: 2000/08/07 15:09:45 + +commit 15c9864b5f74474b2741a37d75e86f9fff557a3f +Author: jbj +Date: Mon Aug 7 13:56:22 2000 +0000 + + Sanity. + + CVS patchset: 4034 + CVS date: 2000/08/07 13:56:22 + +commit 584eb24f5c0f62640df2ecaf6f9db41d6791e8bf +Author: rjray +Date: Mon Aug 7 09:33:08 2000 +0000 + + More documentation. + + CVS patchset: 4033 + CVS date: 2000/08/07 09:33:08 + +commit 4bdab8790468ef6d267e8914c70d14dd29f38c38 +Author: rjray +Date: Mon Aug 7 09:31:23 2000 +0000 + + Took out a few more. + + CVS patchset: 4032 + CVS date: 2000/08/07 09:31:23 + +commit fb10254a4150db668e95a1ef2869b9b86a0111b4 +Author: rjray +Date: Mon Aug 7 09:28:39 2000 +0000 + + Added RPM/Error.xs + + CVS patchset: 4031 + CVS date: 2000/08/07 09:28:39 + +commit 144ad516873be653cd2e450ffb7b0de19faba674 +Author: rjray +Date: Mon Aug 7 09:28:14 2000 +0000 + + Extended the import to include $RPM as a possible object, and added mention + of these to the manpage. + + CVS patchset: 4030 + CVS date: 2000/08/07 09:28:14 + +commit 7382c79fde5138912f462af3a717f2efd42d11c6 +Author: rjray +Date: Mon Aug 7 09:17:37 2000 +0000 + + Last effort created some -w noise. + + CVS patchset: 4029 + CVS date: 2000/08/07 09:17:37 + +commit f53263d6442d694f0d2b4db54b92a94b30d910c6 +Author: rjray +Date: Mon Aug 7 08:46:05 2000 +0000 + + Added an export of %RPM, which if requested is a pre-tied hash connected + to the RPM database. + + CVS patchset: 4028 + CVS date: 2000/08/07 08:46:05 + +commit 727057b831c2cf7b4860232bbf70f66e56b69a9e +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + Very thorough re-write of how values are returned from FETCH. See docs. + + CVS patchset: 4027 + CVS date: 2000/08/06 08:57:09 + +commit df88ea39941f4c350c8ea5baedbc7d6d84855a29 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + Various changes, partial support for RPM::Package, changes to prototypes. + + CVS patchset: 4026 + CVS date: 2000/08/06 08:57:09 + +commit 15872dcc17fef99facdc874a4e2a52a244c9a837 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + The start of the XS half of RPM::Package support + + CVS patchset: 4025 + CVS date: 2000/08/06 08:57:09 + +commit 89328ef3d43b4069dbe6ba003ae0176182452945 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + The start of the Perl half of RPM::Package support. + + CVS patchset: 4024 + CVS date: 2000/08/06 08:57:09 + +commit 54a8027df984fcea4a897d0678ec505c08aecf8d +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + Start of the XS half of RPM::Transaction class. + + CVS patchset: 4023 + CVS date: 2000/08/06 08:57:09 + +commit ed096373b620800a83cb4e5cb4105317e834a958 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + Start of the Perl half of RPM::Transaction class. + + CVS patchset: 4022 + CVS date: 2000/08/06 08:57:09 + +commit 0a5b09770be3f58cf2405ea707324756a1d4c5f7 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + Start of support for RPM::Package and RPM::Transaction classes. + + CVS patchset: 4021 + CVS date: 2000/08/06 08:57:09 + +commit c9d8746a4ee8372e6cbd60cd9d473c70ca6037e8 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + More documentation added. More yet to do, still. + + CVS patchset: 4020 + CVS date: 2000/08/06 08:57:09 + +commit f6e18a08667532448cd4320ea6697c93ec77c7c1 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + Changes to manage the new FETCH-return behavior of the RPM::Header class. + + CVS patchset: 4019 + CVS date: 2000/08/06 08:57:09 + +commit b7c004278e74ff1e4903d2c0c643629c0394e8d6 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + Changed to reflect new RPM::Header behavior, added tests for new features. + + CVS patchset: 4018 + CVS date: 2000/08/06 08:57:09 + +commit 6d00e4754013dfcae066a729b8843ec970119c11 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + Changed some tests to fit new RPM::Header behavior. + + CVS patchset: 4017 + CVS date: 2000/08/06 08:57:09 + +commit 965e6616c39ec56b2d0401db060edcd4ef145747 +Author: rjray +Date: Sun Aug 6 08:57:09 2000 +0000 + + Added use of RPM/Error.xs in the build, improved dependancy checking. + + CVS patchset: 4016 + CVS date: 2000/08/06 08:57:09 + +commit 33a8b7e0848fa2bf24cb4d6d9b84419814f0a445 +Author: rjray +Date: Sun Aug 6 08:57:08 2000 +0000 + + Most (not all) of the changes made leading up to 0.27. + + CVS patchset: 4015 + CVS date: 2000/08/06 08:57:08 + +commit 180355d08e1eae948f5332662f22d8b5d49d455f +Author: jbj +Date: Fri Aug 4 19:52:54 2000 +0000 + + Sanity (make dist). + + CVS patchset: 4014 + CVS date: 2000/08/04 19:52:54 + +commit 517da861a993ecd48ed3df6f4f389e4a402d02dd +Author: jbj +Date: Fri Aug 4 19:48:28 2000 +0000 + + - fix: -Va broken, make db cursors per-iterator, not per-dbi. + + CVS patchset: 4013 + CVS date: 2000/08/04 19:48:28 + +commit ed5a2c61abec313a9effc2a2cd22df4cb06d7769 +Author: jbj +Date: Fri Aug 4 19:47:22 2000 +0000 + + - fix: popt POST callbacks typo. + + CVS patchset: 4012 + CVS date: 2000/08/04 19:47:22 + +commit 65c116ec44028ebfcacc631a5f6478a8190f504f +Author: jbj +Date: Thu Aug 3 21:48:27 2000 +0000 + + Auto-update by nemeth@qwertynet.hu + + CVS patchset: 4011 + CVS date: 2000/08/03 21:48:27 + +commit 65ccfaee782075ab1063c458145435c8e803f48c +Author: jbj +Date: Thu Aug 3 16:55:05 2000 +0000 + + ia64 is different. + + CVS patchset: 4010 + CVS date: 2000/08/03 16:55:05 + +commit 71a49b1bb8136829a58f5a3316a0af1443c5465d +Author: jbj +Date: Thu Aug 3 16:10:56 2000 +0000 + + Sanity (make dist). + + CVS patchset: 4009 + CVS date: 2000/08/03 16:10:56 + +commit 4249774cfe355373adf99784a4daa167851fbb52 +Author: jbj +Date: Wed Aug 2 17:50:12 2000 +0000 + + Auto-update by goeran@uddeborg.pp.se + + CVS patchset: 4008 + CVS date: 2000/08/02 17:50:12 + +commit 0974df316309385d6857f5df82457bdfce74f604 +Author: jbj +Date: Wed Aug 2 16:50:42 2000 +0000 + + Auto-update by goeran@uddeborg.pp.se + + CVS patchset: 4007 + CVS date: 2000/08/02 16:50:42 + +commit b1c1744043eb5d6c8581ac9ff5330142087ef9ae +Author: jbj +Date: Wed Aug 2 13:00:50 2000 +0000 + + Auto-update by ra@xo.hp.is + + CVS patchset: 4006 + CVS date: 2000/08/02 13:00:50 + +commit 5a9048e6a23bb64642645427e9c5cc4b58f06b96 +Author: jbj +Date: Wed Aug 2 12:53:07 2000 +0000 + + Auto-update by ra@xo.hp.is + + CVS patchset: 4005 + CVS date: 2000/08/02 12:53:07 + +commit 04117490d8e3a75366379623dce1023e2c9771a3 +Author: jbj +Date: Wed Aug 2 12:46:41 2000 +0000 + + Auto-update by ra@xo.hp.is + + CVS patchset: 4004 + CVS date: 2000/08/02 12:46:41 + +commit ff104c53286422b730610463e7921c63e1b059db +Author: rjray +Date: Wed Aug 2 08:45:16 2000 +0000 + + All functionality of the RPM::Error class moved from RPM.xs to RPM/Error.xs + + CVS patchset: 4003 + CVS date: 2000/08/02 08:45:16 + +commit bc3ea50dd55ec5e347139ba156e319fd39c26c41 +Author: rjray +Date: Wed Aug 2 08:44:23 2000 +0000 + + Initial structure for RPM::Package and prototype re-arranging for Error.xs + + CVS patchset: 4002 + CVS date: 2000/08/02 08:44:23 + +commit a1d2ce1360416535161e70e30aa62f21cfe98ee7 +Author: rjray +Date: Wed Aug 2 08:43:42 2000 +0000 + + *** empty log message *** + + CVS patchset: 4001 + CVS date: 2000/08/02 08:43:42 + +commit 53ec0d37fc7bacbb94e3ad76affd11b28c4a31a2 +Author: rjray +Date: Wed Aug 2 08:23:55 2000 +0000 + + Tests for the new functionality in RPM::Header + + CVS patchset: 4000 + CVS date: 2000/08/02 08:23:55 + +commit b272589f374192cdbd830ce6a4094a8195c9640d +Author: rjray +Date: Wed Aug 2 08:05:00 2000 +0000 + + Added and documented two new methods: filenames and scalar_tag + + CVS patchset: 3999 + CVS date: 2000/08/02 08:05:00 + +commit e51a34f4965929ad4e60d9437793c3e0254e31dc +Author: rjray +Date: Wed Aug 2 08:04:31 2000 +0000 + + Start using an explicit value for $VERSION + + CVS patchset: 3998 + CVS date: 2000/08/02 08:04:31 + +commit df59ae51d489eafd7d9fa025382f49fb31e52255 +Author: jbj +Date: Tue Aug 1 23:05:02 2000 +0000 + + Auto-update by pmmm@rnl.ist.utl.pt + + CVS patchset: 3997 + CVS date: 2000/08/01 23:05:02 + +commit 199f3a0028cd33c43f42d08ac2b5f2f1a4fb96ce +Author: jbj +Date: Tue Aug 1 22:31:40 2000 +0000 + + Sanity. + + CVS patchset: 3996 + CVS date: 2000/08/01 22:31:40 + +commit b41b30411afffc3c928687f4da1b5e4ac9d11fb0 +Author: rjray +Date: Tue Aug 1 07:59:47 2000 +0000 + + Added the filenames() method and documented it. This method re-assembles + the file fully-qualified names from the three header tags. + + CVS patchset: 3995 + CVS date: 2000/08/01 07:59:47 + +commit 11fa17601b6caec51119c7b744e840c9bd24521c +Author: jbj +Date: Mon Jul 31 21:27:20 2000 +0000 + + - fix: segfault on erase if filestates is missing in header (#14679). + + CVS patchset: 3994 + CVS date: 2000/07/31 21:27:20 + +commit 79f6c8be8708941355e6408ad8ce527bc8af4d92 +Author: jbj +Date: Mon Jul 31 15:04:20 2000 +0000 + + - fix: uniqify dependency problems when printing (#14034). + - popt: add ability to perform callbacks for every, not just first, match. + + CVS patchset: 3993 + CVS date: 2000/07/31 15:04:20 + +commit 6040ca6f5333229b24e9bc319e87ba797601dbc3 +Author: jbj +Date: Sat Jul 29 20:31:56 2000 +0000 + + - re-resurrect firstkey/nextkey python bindings for up2date compatibility. + + CVS patchset: 3992 + CVS date: 2000/07/29 20:31:56 + +commit 61cabed3ed4bfb065664d65fbd897e1a03be141f +Author: jbj +Date: Sat Jul 29 17:30:18 2000 +0000 + + - link rpm2cpio dynamically since cpio is linked dynamically. + + CVS patchset: 3991 + CVS date: 2000/07/29 17:30:18 + +commit 972f0d31032cecc00dc9f779b400c3021c8fe621 +Author: jbj +Date: Sat Jul 29 13:16:45 2000 +0000 + + - bail on firstkey/nextkey, there's a better way. + + CVS patchset: 3990 + CVS date: 2000/07/29 13:16:45 + +commit 71e3aaa18c5a51f2f576290a752a67167296617e +Author: msw +Date: Fri Jul 28 23:07:50 2000 +0000 + + properly reference the db + + CVS patchset: 3989 + CVS date: 2000/07/28 23:07:50 + +commit 41667f92cf216fa32dd1d0dfbb206ef39026cd92 +Author: jbj +Date: Fri Jul 28 17:58:58 2000 +0000 + + - resurrect firstkey/nextkey python bindings. + + CVS patchset: 3988 + CVS date: 2000/07/28 17:58:58 + +commit 94a3bfbb8b3fbf895e22fccc4bc4039b19573515 +Author: jbj +Date: Thu Jul 27 15:29:24 2000 +0000 + + Run "make refresh" and "make *.report". + + CVS patchset: 3987 + CVS date: 2000/07/27 15:29:24 + +commit 6656937639d47f79268ec472846f907b5be47fde +Author: jbj +Date: Thu Jul 27 14:00:26 2000 +0000 + + Auto-update by milan.kerslager@spsselib.hiedu.cz + + CVS patchset: 3986 + CVS date: 2000/07/27 14:00:26 + +commit 31b4e91a0fc575748d0dfd80b2fb7684b2ea4d1a +Author: jbj +Date: Wed Jul 26 21:10:11 2000 +0000 + + Auto-update by milan.kerslager@spsselib.hiedu.cz + + CVS patchset: 3985 + CVS date: 2000/07/26 21:10:11 + +commit aae8aa89e7832eaf4ae5db77d582e308d7b52454 +Author: jbj +Date: Wed Jul 26 21:07:14 2000 +0000 + + Auto-update by milan.kerslager@spsselib.hiedu.cz + + CVS patchset: 3984 + CVS date: 2000/07/26 21:07:14 + +commit 6769a82ac99ba355ea1004c991b44616026c80da +Author: jbj +Date: Wed Jul 26 16:38:14 2000 +0000 + + Typo. + + CVS patchset: 3983 + CVS date: 2000/07/26 16:38:14 + +commit e3003878fad130784d89e10a1dd13eea5b5b7b4c +Author: jbj +Date: Wed Jul 26 16:24:07 2000 +0000 + + - fix: look for any/all dbapi when rebuilding. + + CVS patchset: 3982 + CVS date: 2000/07/26 16:24:07 + +commit df541a5be316e20ea60fb429893908ab543c8361 +Author: jbj +Date: Tue Jul 25 19:05:30 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3981 + CVS date: 2000/07/25 19:05:30 + +commit 1bfc24d0b71d11750e32258602a40611b02e6383 +Author: jbj +Date: Tue Jul 25 18:37:21 2000 +0000 + + - create rpmbuild/rpmquery/rpmverify/rpmsign symlinks. + + CVS patchset: 3980 + CVS date: 2000/07/25 18:37:21 + +commit 21a0dc3ffedaf5cae3843b3a2a995195393849b0 +Author: jbj +Date: Tue Jul 25 14:04:24 2000 +0000 + + New file + + CVS patchset: 3979 + CVS date: 2000/07/25 14:04:24 + +commit 7b13205bb10aa390354ba517a409c86260947ae9 +Author: jbj +Date: Mon Jul 24 21:38:42 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3978 + CVS date: 2000/07/24 21:38:42 + +commit 3092074460c6caca7139a16dbbc2b528f4eedb98 +Author: jbj +Date: Mon Jul 24 21:32:01 2000 +0000 + + Cosmetic. + + CVS patchset: 3977 + CVS date: 2000/07/24 21:32:01 + +commit 945c179d1fc158f5508910012d013349fd799300 +Author: jbj +Date: Mon Jul 24 20:51:31 2000 +0000 + + Auto-update by goeran@uddeborg.pp.se + + CVS patchset: 3976 + CVS date: 2000/07/24 20:51:31 + +commit fc8db65c94be42ae0a8b4beca559e3b3d146a655 +Author: msw +Date: Mon Jul 24 19:09:53 2000 +0000 + + don't blow our foot off by calling rpmReadConfigFiles on the find upgrade packages case + + CVS patchset: 3975 + CVS date: 2000/07/24 19:09:53 + +commit 2dbe09091b86efa2f2b1102e728323b74851b3bf +Author: jbj +Date: Sat Jul 22 14:14:07 2000 +0000 + + Add ./usr/lib/*/man/man*. + + CVS patchset: 3974 + CVS date: 2000/07/22 14:14:07 + +commit 646ced58119d80f675c5ac4dd5bdc41f9cc1e756 +Author: jbj +Date: Sat Jul 22 14:06:32 2000 +0000 + + Add ./usr/share/doc/*/man/man* + + CVS patchset: 3973 + CVS date: 2000/07/22 14:06:32 + +commit cf0e8e43d2823c27cc1c417c002f49ac1aef96b1 +Author: rjray +Date: Fri Jul 21 17:02:33 2000 +0000 + + Changes (mostly documentation) made while at TPC4 + + CVS patchset: 3969 + CVS date: 2000/07/21 17:02:33 + +commit e5cdedfe18c645790e0a21bcf74be04bafcaf3d2 +Author: jbj +Date: Tue Jul 18 17:01:11 2000 +0000 + + - rebuild against glibc-2.1.91-14. + +- add /usr/kerberos/man to brp-compress. + + CVS patchset: 3962 + CVS date: 2000/07/18 17:01:11 + +commit 38c2c2a87aa31be29dd70f221b67e3f9de87677b +Author: jbj +Date: Tue Jul 18 15:31:26 2000 +0000 + + Add /usr/kerberos/man. + + CVS patchset: 3961 + CVS date: 2000/07/18 15:31:26 + +commit b6f8886ab8cda0a3cb1631e5226a864c2cef5384 +Author: jbj +Date: Mon Jul 17 15:41:48 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3959 + CVS date: 2000/07/17 15:41:48 + +commit 721e696edd3d93a287be84d8be3192278600793f +Author: jbj +Date: Mon Jul 17 00:40:17 2000 +0000 + + Sync with rpm-3.0.5 chnages. + + CVS patchset: 3958 + CVS date: 2000/07/17 00:40:17 + +commit e533c29d5e9e66a783a78418c2dd1c49a718404d +Author: jbj +Date: Sun Jul 16 19:23:09 2000 +0000 + + Eliminate conflicts. + + CVS patchset: 3956 + CVS date: 2000/07/16 19:23:09 + +commit 5b7d286d960a2bd139e10aa13392f46dc0c26d5d +Author: jbj +Date: Sat Jul 15 18:30:45 2000 +0000 + + Remove oldrpmdb.c as well. + + CVS patchset: 3955 + CVS date: 2000/07/15 18:30:45 + +commit 4fb053be5106a915877b54fbca4c126ebac9fbc1 +Author: jbj +Date: Sat Jul 15 18:22:24 2000 +0000 + + Eliminate convertdb.c. + + CVS patchset: 3954 + CVS date: 2000/07/15 18:22:24 + +commit 600dfddcfbd0a4a105c3f9bee94fe2a78b437fe7 +Author: jbj +Date: Sat Jul 15 18:15:23 2000 +0000 + + markReplacedFiles: don't bother if nothing to do. + + CVS patchset: 3953 + CVS date: 2000/07/15 18:15:23 + +commit 4a160b6a1496a977c57d03f9e424044c793f8a9d +Author: jbj +Date: Sat Jul 15 16:00:14 2000 +0000 + + - fix: make set of replaced file headers unique. + - fix: don't attempt dbiOpen with anything but requested dbN. + + CVS patchset: 3952 + CVS date: 2000/07/15 16:00:14 + +commit 64ad51587fa7d089a8e4effc2402eda84f0b0724 +Author: jbj +Date: Sat Jul 15 14:57:26 2000 +0000 + + Remove IET_NAME. + + CVS patchset: 3951 + CVS date: 2000/07/15 14:57:26 + +commit 77ea46f6a0f1a0d1240ab76ead01d7e4ffb9e62d +Author: jbj +Date: Sat Jul 15 14:53:54 2000 +0000 + + - rip out pre-transaction syscalls, more design is needed. + - display rpmlib provides when invoked with --showrc. + - remove (dead) dependency checks on implicitly provided package names. + - remove (dead) rpmdb API code in python bindings. + - remove (legacy) support for version 1 packaging. + - remove (legacy) support for converting gdbm databases. + + CVS patchset: 3950 + CVS date: 2000/07/15 14:53:54 + +commit cee37252ba056685c9c2ff23757460e31159c812 +Author: rjray +Date: Sat Jul 15 08:19:20 2000 +0000 + + For 0.26 + + CVS patchset: 3949 + CVS date: 2000/07/15 08:19:20 + +commit 17706c9d5aac630fa4ca933c05601d55331845ef +Author: jbj +Date: Fri Jul 14 16:53:19 2000 +0000 + + Typo. + + CVS patchset: 3948 + CVS date: 2000/07/14 16:53:19 + +commit 43f319d5881fbd8be7fd61e8d0b1654c1ab71fb3 +Author: rjray +Date: Fri Jul 14 08:03:28 2000 +0000 + + For 0.26 + + CVS patchset: 3947 + CVS date: 2000/07/14 08:03:28 + +commit a5b9c1343abbd452c9f7e1367f1b103acc4af29b +Author: rjray +Date: Fri Jul 14 08:01:02 2000 +0000 + + Updated version number + + CVS patchset: 3946 + CVS date: 2000/07/14 08:01:02 + +commit 8fe5d3fd8d3f4a4bfe8a7887005972999e02725a +Author: rjray +Date: Fri Jul 14 08:00:40 2000 +0000 + + Sped up the dependancy checks + + CVS patchset: 3945 + CVS date: 2000/07/14 08:00:40 + +commit 587db3f1802efb56fc9d7867e80b917ca37895eb +Author: rjray +Date: Fri Jul 14 07:57:52 2000 +0000 + + *** empty log message *** + + CVS patchset: 3944 + CVS date: 2000/07/14 07:57:52 + +commit beb694da1482b8b5e5ca8fa16008cb310a59ca50 +Author: jbj +Date: Thu Jul 13 23:30:41 2000 +0000 + + - fix: initialize pretransaction argv (segfault). + - fix: check rpmlib features w/o database (and check earlier as well). + + CVS patchset: 3943 + CVS date: 2000/07/13 23:30:41 + +commit 3cd0284d6c269c0d528e861ef2bffa1d884f8795 +Author: jbj +Date: Wed Jul 12 23:19:08 2000 +0000 + + - add S_ISLNK pre-transaction syscall test. + + CVS patchset: 3942 + CVS date: 2000/07/12 23:19:08 + +commit 6e2db4d82bffa37427480ecf543d110051d94f17 +Author: jbj +Date: Wed Jul 12 22:10:26 2000 +0000 + + - add S_ISLNK pre-transaction syscall test. + + CVS patchset: 3941 + CVS date: 2000/07/12 22:10:26 + +commit 10c07affc9209b3eef6599c3f2ce0c58dcd05216 +Author: jbj +Date: Wed Jul 12 04:02:35 2000 +0000 + + - compare versions if doing --freshen. + + CVS patchset: 3940 + CVS date: 2000/07/12 04:02:35 + +commit a964fee9fa20d79f5d704c40ce2f3cdae66a6fc8 +Author: jbj +Date: Tue Jul 11 22:30:18 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3939 + CVS date: 2000/07/11 22:30:18 + +commit 45c996bc4d7bb5b43588eab1497ff2ab3416e22d +Author: jbj +Date: Tue Jul 11 22:23:16 2000 +0000 + + - fix: legacy requires './' payload prefix to be omitted for rpm itself. + - fix: remove verbose database +++/--- messages to conform to doco. + + CVS patchset: 3938 + CVS date: 2000/07/11 22:23:16 + +commit 253ff2ea313820a0babbca65820d82a1b2047c8e +Author: jbj +Date: Tue Jul 11 16:16:03 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3937 + CVS date: 2000/07/11 16:16:03 + +commit 5ce53ccb60268737fd23bd43dc9649c1221cf48c +Author: jbj +Date: Tue Jul 11 16:12:47 2000 +0000 + + - fix: set multilibno on sparc per-platform config. + + CVS patchset: 3936 + CVS date: 2000/07/11 16:12:47 + +commit 2380ca4893a57e8f9af1073c3ed7d3c326f7382e +Author: jbj +Date: Tue Jul 11 03:46:56 2000 +0000 + + fix: source rpm's need to do compressFilelist to get filenames. + fix: python should use RPMTAG_OBSOLETESNAME, not RPMTAG_OBSOLETES. + + CVS patchset: 3934 + CVS date: 2000/07/11 03:46:56 + +commit 7344a127255792114d649bc3f0d1fab6b517605e +Author: jbj +Date: Tue Jul 11 02:12:49 2000 +0000 + + - remove build mode help from rpm.c, use rpmb instead. + - support for rpmlib(...) internal feature dependencies. + + CVS patchset: 3933 + CVS date: 2000/07/11 02:12:49 + +commit dbb584f43a96c5ee8aefda1e8b83adebbfa4830f +Author: jbj +Date: Sun Jul 9 23:22:58 2000 +0000 + + Sanoty (make dist). + + CVS patchset: 3931 + CVS date: 2000/07/09 23:22:58 + +commit db3190176b4615621024fdf2cfaad406ba11aa83 +Author: jbj +Date: Sun Jul 9 23:10:25 2000 +0000 + + - prefix payload paths with "./", otherwise "/" can't be represented. + - fix: compressFilelist broke when fed '/'. + - fix: typo in --last popt alias (#12690). + - fix: clean file paths before performing -qf (#12493). + + CVS patchset: 3930 + CVS date: 2000/07/09 23:10:25 + +commit 10eb9f2c5d4736cd0ca71e5e25c0f3e97de3a4e9 +Author: jbj +Date: Sun Jul 9 15:50:39 2000 +0000 + + Help message field alignment. + + CVS patchset: 3928 + CVS date: 2000/07/09 15:50:39 + +commit c956f0437ab76bf1ea79a684de8e6921c3368777 +Author: jbj +Date: Sun Jul 9 15:17:11 2000 +0000 + + fix: do chroot around pre-transaction syscalls. + + CVS patchset: 3927 + CVS date: 2000/07/09 15:17:11 + +commit 913d116d71f5c2cb47c35944b8c1fcd9795fd6e3 +Author: jbj +Date: Sun Jul 9 04:42:12 2000 +0000 + + - add pre-transaction syscall's to handle /etc/init.d change. + - don't bother saving '/' as fingerprint subdir. + + CVS patchset: 3926 + CVS date: 2000/07/09 04:42:12 + +commit 6f562fce82cce2963cf8287fd57aa1ed29c95adc +Author: jbj +Date: Sat Jul 8 19:37:54 2000 +0000 + + Typo. + + CVS patchset: 3925 + CVS date: 2000/07/08 19:37:54 + +commit ef01bed0d5688faf6ec389beecf47e2bee7a6a11 +Author: jbj +Date: Fri Jul 7 21:19:21 2000 +0000 + + Update i18n from gnome version. + + CVS patchset: 3924 + CVS date: 2000/07/07 21:19:21 + +commit 95c0edf74b8427821e068f30ccbbe3a0099f6766 +Author: jbj +Date: Fri Jul 7 20:36:19 2000 +0000 + + Turn on Depends return cache (again). + + CVS patchset: 3923 + CVS date: 2000/07/07 20:36:19 + +commit 625d765b6e9ee0d6683625f6e57eee8378c9af7d +Author: jbj +Date: Fri Jul 7 20:06:41 2000 +0000 + + lclint fiddles. + avoid pathological buffer overflow in lib/rpmrc.c + + CVS patchset: 3922 + CVS date: 2000/07/07 20:06:41 + +commit dc421620ffedebd5d0f9cb24790d72610c0c09b2 +Author: jbj +Date: Fri Jul 7 19:46:05 2000 +0000 + + lclint fiddles. + + CVS patchset: 3921 + CVS date: 2000/07/07 19:46:05 + +commit a463744b6d4e6e5c0f05730cc77039f4a2e17fd7 +Author: jbj +Date: Wed Jul 5 20:39:15 2000 +0000 + + - change optflags for i386. + - multilib patch, take 1. + + CVS patchset: 3920 + CVS date: 2000/07/05 20:39:15 + +commit 0c6891dc9760a7e4de4844abf09bb474643f25c7 +Author: jbj +Date: Wed Jul 5 11:45:07 2000 +0000 + + Option --ftpport misdocumented as --ftpuseport. + + CVS patchset: 3917 + CVS date: 2000/07/05 11:45:07 + +commit 621d05b229914a709492d137fa013e2e0a754161 +Author: jbj +Date: Wed Jun 28 16:24:30 2000 +0000 + + Auto-update by jba@pobox.com + + CVS patchset: 3916 + CVS date: 2000/06/28 16:24:30 + +commit d9439e2ae48df538412d302bd5897a63dd9f082e +Author: jbj +Date: Fri Jun 23 14:18:13 2000 +0000 + + i486 optflags typo fixed. + + CVS patchset: 3915 + CVS date: 2000/06/23 14:18:13 + +commit bd6170f2e2ba013db0f65351502bb64843f27ca7 +Author: jbj +Date: Fri Jun 23 13:29:55 2000 +0000 + + Typo. + + CVS patchset: 3913 + CVS date: 2000/06/23 13:29:55 + +commit a79f1235619b8dacb99107eaf410e42e6e7bfac3 +Author: jbj +Date: Fri Jun 23 12:56:46 2000 +0000 + + Include ppc, not powerpc, in package. + + CVS patchset: 3911 + CVS date: 2000/06/23 12:56:46 + +commit 91aece18bcbf737b2b2d7ae5fd8fcf955d249ba6 +Author: jbj +Date: Fri Jun 23 01:44:36 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3910 + CVS date: 2000/06/23 01:44:36 + +commit 5df134128b2c4cd6549b7e4c978ae0e88c0651ad +Author: jbj +Date: Fri Jun 23 01:19:45 2000 +0000 + + - support for separate source/binary compression policy. + - support for bzip payloads. + + CVS patchset: 3908 + CVS date: 2000/06/23 01:19:45 + +commit 4d888092960c6160f86dff474b2bf9e89f106d5e +Author: jbj +Date: Fri Jun 23 00:49:43 2000 +0000 + + - python: initdb binding (Dan Burcaw ). + - internalize --freshen (Gordon Messmer ). + + CVS patchset: 3905 + CVS date: 2000/06/23 00:49:43 + +commit 4cd7474f6e3bb9937c3a884ad010dbc1413bc00d +Author: jbj +Date: Thu Jun 22 21:59:02 2000 +0000 + + Auto-update by goeran@uddeborg.pp.se + + CVS patchset: 3902 + CVS date: 2000/06/22 21:59:02 + +commit c30d074add226d820801735dd2e89d255c07d30a +Author: jbj +Date: Thu Jun 22 20:24:49 2000 +0000 + + Auto-update by kmaraas@online.no + + CVS patchset: 3901 + CVS date: 2000/06/22 20:24:49 + +commit cf36c64d5ed27dd329700a606f7b38253d44a550 +Author: jbj +Date: Thu Jun 22 16:37:14 2000 +0000 + + - python: initdb binding (Dan Burcaw ). + + CVS patchset: 3900 + CVS date: 2000/06/22 16:37:14 + +commit 308fcc70c74b615eefef3df8899c625be9195d8c +Author: jbj +Date: Thu Jun 22 14:03:36 2000 +0000 + + - put version on rpmpopt filename to avoid legacy filename collision. + + CVS patchset: 3898 + CVS date: 2000/06/22 14:03:36 + +commit e04385f3d9446c95c6a43abf214126d60668da5d +Author: jbj +Date: Thu Jun 22 13:39:44 2000 +0000 + + - put version on rpmpopt filename to avoid legacy filename collision. + + CVS patchset: 3897 + CVS date: 2000/06/22 13:39:44 + +commit b7f2d98443ed1b31794e89cf79975bb910301d3f +Author: rjray +Date: Thu Jun 22 08:43:45 2000 +0000 + + Added logic for delivery of scripts, as well as definition of first + sample script. + + CVS patchset: 3896 + CVS date: 2000/06/22 08:43:45 + +commit 55b1c375351cf1b241bf274c2f5e47e21e7f0147 +Author: rjray +Date: Thu Jun 22 08:43:12 2000 +0000 + + Stupidity. Left a commented-out debug line in the code. + + CVS patchset: 3895 + CVS date: 2000/06/22 08:43:12 + +commit 3cd625281f775310f717148bb71aba38234daa4a +Author: rjray +Date: Thu Jun 22 08:42:00 2000 +0000 + + Corrected copyright line. + + CVS patchset: 3894 + CVS date: 2000/06/22 08:42:00 + +commit e0629ae58ffd5a344fd9d5754c8ac038db478357 +Author: rjray +Date: Thu Jun 22 08:35:13 2000 +0000 + + More verbosity in comments + + CVS patchset: 3893 + CVS date: 2000/06/22 08:35:13 + +commit 11e9ee9dc716f2c81e28502a410d120548d222ce +Author: rjray +Date: Thu Jun 22 08:33:23 2000 +0000 + + added utils/rpmprune.PL + + CVS patchset: 3892 + CVS date: 2000/06/22 08:33:23 + +commit 7ba502455d44c76841fc1c55a2538991740aeffc +Author: rjray +Date: Thu Jun 22 08:32:06 2000 +0000 + + Covered some missing docs, added $VERSION and $revision. + + CVS patchset: 3891 + CVS date: 2000/06/22 08:32:06 + +commit c8d8f037ec09d88bbc83af6e96da3ccb96131e99 +Author: rjray +Date: Thu Jun 22 08:21:37 2000 +0000 + + The first example script. Read the man page. + + CVS patchset: 3890 + CVS date: 2000/06/22 08:21:37 + +commit df56a91d88a9fe4faecc7cf9c40a239be06020f7 +Author: jbj +Date: Thu Jun 22 00:07:10 2000 +0000 + + Auto-update by pmmm@rnl.ist.utl.pt + + CVS patchset: 3889 + CVS date: 2000/06/22 00:07:10 + +commit 8393e93bc833a2b0f14691f67896646f53bd9965 +Author: jbj +Date: Wed Jun 21 23:48:05 2000 +0000 + + - uname on i370 has s390 as arch (#11456). + + CVS patchset: 3888 + CVS date: 2000/06/21 23:48:05 + +commit fab0493dbe64fd7448dd8f269acf7b07f8136f94 +Author: jbj +Date: Wed Jun 21 23:28:50 2000 +0000 + + - fix: don't expand macros in false branch of %if (kasal@suse.cz). + - fix: macro expansion problem and clean up (#11484) (kasal@suse.cz). + + CVS patchset: 3885 + CVS date: 2000/06/21 23:28:50 + +commit f80675128ca91bf23a233004389bec4ac0b7d037 +Author: jbj +Date: Wed Jun 21 23:25:39 2000 +0000 + + Auto-update by kenneth@gnu.org + + CVS patchset: 3884 + CVS date: 2000/06/21 23:25:39 + +commit 20c0250a55d4e09a893f4d2aa2719460c68d2df0 +Author: jbj +Date: Wed Jun 21 22:05:30 2000 +0000 + + Don't try to i18n untranslatable strings ("Göran Uddeborg" ). + + CVS patchset: 3883 + CVS date: 2000/06/21 22:05:30 + +commit d0bc6370e4098f576ba70290d0bad49062f2f346 +Author: jbj +Date: Wed Jun 21 21:52:04 2000 +0000 + + Auto-update by goeran@uddeborg.pp.se + + CVS patchset: 3882 + CVS date: 2000/06/21 21:52:04 + +commit e923c00c9431c420afc8c5165970fbd112ee2554 +Author: jbj +Date: Wed Jun 21 21:47:34 2000 +0000 + + Auto-update by kenneth@gnu.org + + CVS patchset: 3881 + CVS date: 2000/06/21 21:47:34 + +commit b4cd9c2d085175fc0070db5f3788ea5cb7baf522 +Author: jbj +Date: Wed Jun 21 14:27:52 2000 +0000 + + Auto-update by kmaraas@online.no + + CVS patchset: 3880 + CVS date: 2000/06/21 14:27:52 + +commit 7898e0f1c997a72a975506989aca3535b77234e5 +Author: jbj +Date: Wed Jun 21 14:25:06 2000 +0000 + + Auto-update by kmaraas@online.no + + CVS patchset: 3879 + CVS date: 2000/06/21 14:25:06 + +commit 18a1a352b4684710f0153ccab53822c7c78e8497 +Author: jbj +Date: Tue Jun 20 21:45:50 2000 +0000 + + - add RPMTAG_OPTFLAGS, configured optflags when package was built. + - add RPMTAG_DISTURL for rpmfind-like tools (content unknown yet). + - teach brp-compress about /usr/info and /usr/share/info as well. + - update macros.in from rpm-4.0 (w/o dbi configuration). + + CVS patchset: 3878 + CVS date: 2000/06/20 21:45:50 + +commit 593b0c78746229347e1638ef789f3c2291c20df5 +Author: jbj +Date: Tue Jun 20 16:29:22 2000 +0000 + + - update brp-* scripts from rpm-4.0, enable in per-platform config. + - alpha: add -mieee to default optflags. + + CVS patchset: 3876 + CVS date: 2000/06/20 16:29:22 + +commit 4272f490caa3921b46fef03d7f2820c9da2bb6f0 +Author: jbj +Date: Tue Jun 20 15:54:48 2000 +0000 + + - API: uncouple fadio from rest of rpmio. + - API: externalize legacy fdOpen interface for rpmfind et al. + + CVS patchset: 3873 + CVS date: 2000/06/20 15:54:48 + +commit f365ff702280b8256a10e5cc9dad17be638ef947 +Author: jbj +Date: Tue Jun 20 14:20:06 2000 +0000 + + fix: typo in brp-compress caused i18n man pages not to compress. + + CVS patchset: 3870 + CVS date: 2000/06/20 14:20:06 + +commit 4bfa50e50b107fb8d2825b9196aa06aff802552f +Author: jbj +Date: Mon Jun 19 22:49:48 2000 +0000 + + Auto-update by menthos@menthos.com + + CVS patchset: 3869 + CVS date: 2000/06/19 22:49:48 + +commit 99e915cbab3a8a33b9189891b86500e9da8a6330 +Author: jbj +Date: Mon Jun 19 11:35:29 2000 +0000 + + fix: open all db indices before performing chroot. + + CVS patchset: 3868 + CVS date: 2000/06/19 11:35:29 + +commit d793b76868bd76bf11e13346ddfea2abeaf3c24f +Author: jbj +Date: Sun Jun 18 23:26:50 2000 +0000 + + Include libpopt as well. + + CVS patchset: 3865 + CVS date: 2000/06/18 23:26:50 + +commit 2dd80c4f8b267a6894c712043290e11036cd595e +Author: jbj +Date: Sun Jun 18 22:38:37 2000 +0000 + + require --rebuilddb to convert db1 -> db3, better messages. + + CVS patchset: 3864 + CVS date: 2000/06/18 22:38:37 + +commit 60189386b5509816d86dc8181298cdaf2b7c5d1c +Author: rjray +Date: Sat Jun 17 08:39:32 2000 +0000 + + Fixed minor oops in cmpver. + + CVS patchset: 3863 + CVS date: 2000/06/17 08:39:32 + +commit a92c28e43a4cb8b963d79b2ce0e7f00b716f5299 +Author: rjray +Date: Sat Jun 17 08:11:25 2000 +0000 + + Added rpmhdr_cmpver, which compares two headers against their versions and + (if necessary) releases. Also made small change to header_from_object() macro. + + CVS patchset: 3862 + CVS date: 2000/06/17 08:11:25 + +commit 1b8f626dbf111f7263d1d770b3ff714f7bf26d13 +Author: rjray +Date: Sat Jun 17 08:10:05 2000 +0000 + + Removed the half-done Perl implementation of the version-compare. Added + docs for the new one, which is XS code calling an undocumented routine from + the API. + + CVS patchset: 3861 + CVS date: 2000/06/17 08:10:05 + +commit 549e0f67d1732e98ffa91c16fdf78282b489ff58 +Author: jbj +Date: Sat Jun 17 04:36:15 2000 +0000 + + - fix: broken glob test with empty build directory (Geoff Keating). + + CVS patchset: 3860 + CVS date: 2000/06/17 04:36:15 + +commit 9fb2e0a01bf9965b21dc0e3594c6476d15dd7202 +Author: jbj +Date: Fri Jun 16 19:12:09 2000 +0000 + + - fix: resurrect symlink unique'ifying property of finger prints. + + CVS patchset: 3856 + CVS date: 2000/06/16 19:12:09 + +commit bd9f4474d04cae5915f82ee690b62726bd527ba8 +Author: jbj +Date: Fri Jun 16 19:08:41 2000 +0000 + + Create. + + CVS patchset: 3855 + CVS date: 2000/06/16 19:08:41 + +commit 3722086565dc016476954f2b53a9b390f162e291 +Author: jbj +Date: Fri Jun 16 02:25:40 2000 +0000 + + Auto-update by ra@xo.hp.is + + CVS patchset: 3853 + CVS date: 2000/06/16 02:25:40 + +commit 3e67c922e57b8fb3b6f6e994c97f7a6aff12b592 +Author: jbj +Date: Fri Jun 16 02:17:41 2000 +0000 + + Auto-update by ra@xo.hp.is + + CVS patchset: 3852 + CVS date: 2000/06/16 02:17:41 + +commit fd865f604b16759fa1398efba85ebbc6d6adfc79 +Author: jbj +Date: Fri Jun 16 00:03:50 2000 +0000 + + New file + + CVS patchset: 3851 + CVS date: 2000/06/16 00:03:50 + +commit 5fd7db4160520cfc7c7f85c1f9a7d64ca1fdb378 +Author: jbj +Date: Thu Jun 15 23:50:22 2000 +0000 + + New file + + CVS patchset: 3850 + CVS date: 2000/06/15 23:50:22 + +commit df21bd3fe026b0e30c4da987e68b67093273e555 +Author: jbj +Date: Thu Jun 15 10:11:50 2000 +0000 + + Remove leading comments. + + CVS patchset: 3849 + CVS date: 2000/06/15 10:11:50 + +commit 5a4c90ff29051e84583cd587ab5fea84cdd4d8b6 +Author: jbj +Date: Wed Jun 14 14:21:06 2000 +0000 + + - fix: don't count removed files if removed packages is empty set. + - fix: permit '\0' as special case key (e.g. "/" in Basenames). + + CVS patchset: 3848 + CVS date: 2000/06/14 14:21:06 + +commit 9667ef4db6f7e0144de5e76959853dd1a39ca219 +Author: rjray +Date: Wed Jun 14 09:28:38 2000 +0000 + + INCOMPLETE: More-specific lib importing, start of a cmpver method (not done). + + CVS patchset: 3847 + CVS date: 2000/06/14 09:28:38 + +commit b7fdb73eff87a1d7047151ec1251b22ff5eb1337 +Author: rjray +Date: Wed Jun 14 09:27:39 2000 +0000 + + Code clean-up and removal of some croak() calls. + + CVS patchset: 3846 + CVS date: 2000/06/14 09:27:39 + +commit b5f2ee2f01619f870544ab0738286cd8a6e6921b +Author: rjray +Date: Wed Jun 14 09:27:01 2000 +0000 + + Removed last "croak" calls. + + CVS patchset: 3845 + CVS date: 2000/06/14 09:27:01 + +commit eeb38b3f62b7e115c08e0ba5d9bd844f55511d32 +Author: rjray +Date: Wed Jun 14 09:26:22 2000 +0000 + + thread-safing the Perl-visible routines + + CVS patchset: 3844 + CVS date: 2000/06/14 09:26:22 + +commit aeb26aa094b408982eb080ba4354f6cc1802f56e +Author: rjray +Date: Wed Jun 14 09:25:51 2000 +0000 + + changes thus far (checkpoint) + + CVS patchset: 3843 + CVS date: 2000/06/14 09:25:51 + +commit e8ea93373b11fae48a875f4bb06e2105a53e441f +Author: msw +Date: Tue Jun 13 20:15:35 2000 +0000 + + link against rpmio, disable Fopen + + CVS patchset: 3842 + CVS date: 2000/06/13 20:15:35 + +commit c61fac02fcc0a9d5ecf446e993f972026d5efb27 +Author: jbj +Date: Tue Jun 13 19:00:40 2000 +0000 + + Avoid "Target buffer overflow" with larger macro expansions. + + CVS patchset: 3841 + CVS date: 2000/06/13 19:00:40 + +commit ecde0bb1ad67866af4a03f44b085940e5a07d140 +Author: jbj +Date: Tue Jun 13 15:31:00 2000 +0000 + + Look for -ldb-3.0 before -ldb. + + CVS patchset: 3840 + CVS date: 2000/06/13 15:31:00 + +commit 89d947e4497801223a1c2fd9470537297de45927 +Author: jbj +Date: Tue Jun 13 10:00:08 2000 +0000 + + - remove incremental link. + - portability: sparc-sun-solaris2.5.1. + + CVS patchset: 3839 + CVS date: 2000/06/13 10:00:08 + +commit d545b4c07b2cf8590f7d51409a6796d4f8d9db9d +Author: jbj +Date: Tue Jun 13 09:12:39 2000 +0000 + + Solaris per-platform macros. + + CVS patchset: 3838 + CVS date: 2000/06/13 09:12:39 + +commit db41d9d8b4afe403966c056ce360d20fda4d7d34 +Author: jbj +Date: Tue Jun 13 07:15:15 2000 +0000 + + More libtool fiddles. + + CVS patchset: 3837 + CVS date: 2000/06/13 07:15:15 + +commit 29e3cfc24a9cfec05cffbd98c1cbddc3acb84f7c +Author: jbj +Date: Mon Jun 12 22:34:00 2000 +0000 + + - fix: avoid clobbering db cursor in removeBinaryPackage. + - expose cursors in dbi interfaces, remove internal cursors. + + CVS patchset: 3836 + CVS date: 2000/06/12 22:34:00 + +commit b95e4e43c30deb19e981c9095fe060f1d50cc130 +Author: jbj +Date: Mon Jun 12 22:15:04 2000 +0000 + + Ignore *.mo as well. + + CVS patchset: 3835 + CVS date: 2000/06/12 22:15:04 + +commit a6a2d216f2ca9d9301b5ffdd357a135bbf24454e +Author: jbj +Date: Mon Jun 12 22:14:17 2000 +0000 + + solaris2.5.1: libtool cannot LIBADD non-libtool libs. + + CVS patchset: 3834 + CVS date: 2000/06/12 22:14:17 + +commit f5e02c8d7a4bcba11154e6d84411ee0037ad3f85 +Author: jbj +Date: Mon Jun 12 22:13:10 2000 +0000 + + Solaris2.5.1 has not EXIT_FAILURE. + + CVS patchset: 3833 + CVS date: 2000/06/12 22:13:10 + +commit 1d0544854e923f670b2607c43bfb09aa5cac0440 +Author: jbj +Date: Mon Jun 12 22:12:28 2000 +0000 + + Don't use BSDish typedefs. + + CVS patchset: 3832 + CVS date: 2000/06/12 22:12:28 + +commit 17ee7fe3e93bcd9bc9ea4a0599cf3f45dbba1df5 +Author: jbj +Date: Mon Jun 12 22:11:51 2000 +0000 + + Ignoe *.mo as well. + + CVS patchset: 3831 + CVS date: 2000/06/12 22:11:51 + +commit 2063e9bd5373dd18a18fda9419e4560420ca9e45 +Author: jbj +Date: Mon Jun 12 22:07:13 2000 +0000 + + Add dbcursor to dbi interface. + + CVS patchset: 3830 + CVS date: 2000/06/12 22:07:13 + +commit bed61632d7a89025e5854810e768d5c4e4e4996d +Author: jbj +Date: Sun Jun 11 19:15:27 2000 +0000 + + Fix db return code handling, majorly horked. + Autoconf detection of db-3.1. + Move --all to query/verify popt table. + + CVS patchset: 3829 + CVS date: 2000/06/11 19:15:27 + +commit 812fe275491c81cf4f9532d223fc5ed7a6b48e28 +Author: rjray +Date: Sun Jun 11 11:24:23 2000 +0000 + + Replaced warn() calls with calls to rpm_error(). + + CVS patchset: 3828 + CVS date: 2000/06/11 11:24:23 + +commit 9b7f41cae3d630e9d43456a1f6a314f66c2ceec0 +Author: rjray +Date: Sun Jun 11 11:23:26 2000 +0000 + + Made errSV usable across the dl, plus renamed it rpm_errSV to avoid conflicts. + + CVS patchset: 3827 + CVS date: 2000/06/11 11:23:26 + +commit 66c9e61522bb5c653efc4f60843231167aa95895 +Author: rjray +Date: Sat Jun 10 22:27:30 2000 +0000 + + Adding the NVR method, tests, and docs + + CVS patchset: 3826 + CVS date: 2000/06/10 22:27:30 + +commit 9c177b5c623e578faafb709b5eda4f0bbaba0432 +Author: jbj +Date: Fri Jun 9 21:26:11 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3825 + CVS date: 2000/06/09 21:26:11 + +commit 4afe94756b1d4960b946c88912b458c04c856e9e +Author: jbj +Date: Fri Jun 9 21:24:37 2000 +0000 + + - make librpmio standalone. + + CVS patchset: 3824 + CVS date: 2000/06/09 21:24:37 + +commit 685d3e79b097371c7c222a224716e88d38fe30bd +Author: jbj +Date: Fri Jun 9 19:33:52 2000 +0000 + + Remove dead code. + + CVS patchset: 3823 + CVS date: 2000/06/09 19:33:52 + +commit c38a7cdcfbf8140bb1fa39a29a8b6aaaa168e037 +Author: jbj +Date: Fri Jun 9 18:57:23 2000 +0000 + + Move low level support routines to librpmio. + + CVS patchset: 3822 + CVS date: 2000/06/09 18:57:23 + +commit 1ab33a5491c15c3f996d5d1e36387de849704305 +Author: jbj +Date: Wed Jun 7 23:55:10 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3821 + CVS date: 2000/06/07 23:55:10 + +commit 6665bbbfc21a6e974486650fd314cfff579ddb83 +Author: jbj +Date: Wed Jun 7 23:25:41 2000 +0000 + + - create rpmio directory for librpmio. + + CVS patchset: 3820 + CVS date: 2000/06/07 23:25:41 + +commit d307058775a45e1e1f8127fbecec69403d44187d +Author: jbj +Date: Tue Jun 6 23:32:34 2000 +0000 + + Escape % in changelog. + + CVS patchset: 3819 + CVS date: 2000/06/06 23:32:34 + +commit eba909558689931e02bb4df2aa24a0ab0fccd360 +Author: jbj +Date: Tue Jun 6 20:06:09 2000 +0000 + + Repair db1 functionality. + Require db3 in default configuration. + + CVS patchset: 3818 + CVS date: 2000/06/06 20:06:09 + +commit efcc0a3985cecea25d5ae566495e8242ecc6265c +Author: jbj +Date: Tue Jun 6 09:01:06 2000 +0000 + + Use libtool-1.3.5. + Sanity (make dist). + + CVS patchset: 3817 + CVS date: 2000/06/06 09:01:06 + +commit f187aa785763b9880b3073b2f0a9d168e61e960a +Author: jbj +Date: Mon Jun 5 16:40:04 2000 +0000 + + Add triply escaped newlines to %makeinfo. + + CVS patchset: 3816 + CVS date: 2000/06/05 16:40:04 + +commit 22b3a309e1dcebc4b8ac717ad39c6d162928194e +Author: jbj +Date: Mon Jun 5 15:21:19 2000 +0000 + + Remove curly braces from makeinstall. + + CVS patchset: 3815 + CVS date: 2000/06/05 15:21:19 + +commit b856c8b2079c1aad7ec52ce4d3709513d91f8474 +Author: jbj +Date: Mon Jun 5 14:18:40 2000 +0000 + + - add optflags for i486 and i586. + - fix: segfault with legacy packages missing RPMTAG_FILEINODES. + + CVS patchset: 3814 + CVS date: 2000/06/05 14:18:40 + +commit 12113fad01ebb45b0e156921518720d04c5ebeb4 +Author: rjray +Date: Mon Jun 5 08:14:32 2000 +0000 + + Found and fixed a segfault-causing bug. Added a method called is_source() + to ID whether the header is from a SRPM. + + CVS patchset: 3813 + CVS date: 2000/06/05 08:14:32 + +commit 4ed61bac9c44ab6c02f6fc8f94ef831a8c9a619e +Author: rjray +Date: Mon Jun 5 08:11:43 2000 +0000 + + Added documentation for the is_source() method + + CVS patchset: 3812 + CVS date: 2000/06/05 08:11:43 + +commit 858f92b7f344ec141d6f2f4ae1f9302318ee30c0 +Author: rjray +Date: Mon Jun 5 08:10:32 2000 +0000 + + Removed more inapplicable constants, and documented some others + + CVS patchset: 3811 + CVS date: 2000/06/05 08:10:32 + +commit 5155aef4fb905f213f7acd9a3caa6d34cfe9a2a8 +Author: rjray +Date: Mon Jun 5 08:06:09 2000 +0000 + + Removed two of the opts keys in rpmdb_TIEHASH + + CVS patchset: 3810 + CVS date: 2000/06/05 08:06:09 + +commit 3f0318301cfdd5694e036747515929acb7c10d28 +Author: rjray +Date: Mon Jun 5 08:04:16 2000 +0000 + + changed $VERSION to 0.25 + + CVS patchset: 3809 + CVS date: 2000/06/05 08:04:16 + +commit a3e317557251240d4d0d58a176a4cce1a2b8166e +Author: rjray +Date: Mon Jun 5 08:02:58 2000 +0000 + + added IMPORTANT.perl + + CVS patchset: 3808 + CVS date: 2000/06/05 08:02:58 + +commit 63c3be40e9de2ab463a1cc7fb09d2d436045eea9 +Author: rjray +Date: Mon Jun 5 08:02:24 2000 +0000 + + updates for 0.25 version + + CVS patchset: 3807 + CVS date: 2000/06/05 08:02:24 + +commit 89a54dc7a0472180db46ad0c9eca8f1c6b586068 +Author: jbj +Date: Sat Jun 3 20:26:00 2000 +0000 + + Add i390 noarch entry. + Make sure count is good when finding by label. + + CVS patchset: 3806 + CVS date: 2000/06/03 20:26:00 + +commit c115c2d279b86fe42e6611a81e58a7bed2b690b7 +Author: rjray +Date: Sat Jun 3 08:23:26 2000 +0000 + + notes regarding database-linkage issues + + CVS patchset: 3805 + CVS date: 2000/06/03 08:23:26 + +commit 74d8ff03916f10886af4dc18669e1338a3bc219b +Author: jbj +Date: Fri Jun 2 19:46:53 2000 +0000 + + Update flags for i486/i586. + + CVS patchset: 3804 + CVS date: 2000/06/02 19:46:53 + +commit d784a11d3fc9ebf0c9579dbfd9cc08137348a5b9 +Author: rjray +Date: Fri Jun 2 07:54:49 2000 +0000 + + Thread-clean-related fixes, and comments changed to C-style + + CVS patchset: 3803 + CVS date: 2000/06/02 07:54:49 + +commit 37f5db0733b8ad84e762812a8b0a397eba9188a4 +Author: rjray +Date: Fri Jun 2 07:54:24 2000 +0000 + + *** empty log message *** + + CVS patchset: 3802 + CVS date: 2000/06/02 07:54:24 + +commit 631e0079b8473f017670a2cff5f60d9ba90d42a4 +Author: rjray +Date: Fri Jun 2 07:54:07 2000 +0000 + + moved tie until after the test-range print, in case of tie-failure + + CVS patchset: 3801 + CVS date: 2000/06/02 07:54:07 + +commit 03d43275660f66d88a21258c9ec6ff77651b3751 +Author: rjray +Date: Fri Jun 2 07:53:39 2000 +0000 + + Added exit on failure to tie + + CVS patchset: 3800 + CVS date: 2000/06/02 07:53:39 + +commit 14698620a5724f33c94640afa5c11403027c22e5 +Author: rjray +Date: Fri Jun 2 07:52:39 2000 +0000 + + cleaner handling of error return vals on database and header typemaps + + CVS patchset: 3799 + CVS date: 2000/06/02 07:52:39 + +commit 10a6795c834379656cdf21ed6a28e0028ffe57ef +Author: rjray +Date: Fri Jun 2 07:51:51 2000 +0000 + + Thread-clean-related fixes, changed comments to C-style + + CVS patchset: 3798 + CVS date: 2000/06/02 07:51:51 + +commit ddb6383e928048e047d33ed2ca23e14d9193e539 +Author: rjray +Date: Fri Jun 2 07:51:21 2000 +0000 + + checkpoint + + CVS patchset: 3797 + CVS date: 2000/06/02 07:51:21 + +commit a9fa8c89d4b1abe420f03c2711ae1ca80a4cc8e9 +Author: rjray +Date: Fri Jun 2 07:51:01 2000 +0000 + + Many changes-- changed all comments to C-style, removed all the header-datum + stuff (that wouldn't solve the problem anyway), added more thread-related + default defines. + + CVS patchset: 3796 + CVS date: 2000/06/02 07:51:01 + +commit 3266cc8fb7a0a00c7068a2b8f228522a349417ab +Author: rjray +Date: Fri Jun 2 07:49:49 2000 +0000 + + add dependant-package checking + + CVS patchset: 3795 + CVS date: 2000/06/02 07:49:49 + +commit f5891874339fc420cd2317f70865b79a8d767e0f +Author: rjray +Date: Fri Jun 2 07:48:40 2000 +0000 + + *** empty log message *** + + CVS patchset: 3794 + CVS date: 2000/06/02 07:48:40 + +commit 1f297b1c9801b541203a7fbeb47761564edd33e3 +Author: jbj +Date: Thu Jun 1 15:40:30 2000 +0000 + + Build with autogen same as rpm.spec. + + CVS patchset: 3793 + CVS date: 2000/06/01 15:40:30 + +commit cf4c7a1fc6a125ba9584dffd6529f3539ee0c630 +Author: jbj +Date: Thu Jun 1 14:16:58 2000 +0000 + + Add optflags for i486/i586, delete the silly i[789]86 entries. + + CVS patchset: 3792 + CVS date: 2000/06/01 14:16:58 + +commit bd18564430d84bd6417744e7b1769f06629c8ed9 +Author: jbj +Date: Thu Jun 1 13:43:05 2000 +0000 + + Use %{_usr} not %{_prefix} for %_defaultdocdir path. + + CVS patchset: 3791 + CVS date: 2000/06/01 13:43:05 + +commit a12bee781a73992dc79af4283369c260e98e2f92 +Author: jbj +Date: Thu Jun 1 12:54:06 2000 +0000 + + Get per-platform optflags correct. + + CVS patchset: 3790 + CVS date: 2000/06/01 12:54:06 + +commit 8e228337f379e1044c93d6572fc0cd765491430d +Author: jbj +Date: Thu Jun 1 06:26:09 2000 +0000 + + Restore value of %_arch in per-platform macros. + + CVS patchset: 3789 + CVS date: 2000/06/01 06:26:09 + +commit ef6736bd90a6d314aa789d4542175537e7ff2366 +Author: jbj +Date: Thu Jun 1 05:36:14 2000 +0000 + + Move noLang to rpmlib. + Add defaultdocdir to per-platform macros. + + CVS patchset: 3788 + CVS date: 2000/06/01 05:36:14 + +commit dcbbd4721720c4cd0514326d572c359b2976a497 +Author: jbj +Date: Thu Jun 1 04:47:42 2000 +0000 + + Split popt glue into lib/popt{BT,QV}.c. + Add dependencies to *.la. + + CVS patchset: 3787 + CVS date: 2000/06/01 04:47:42 + +commit 9b910f6c5478707623cb37ab20497041124baeba +Author: jbj +Date: Thu Jun 1 02:01:02 2000 +0000 + + Create vendor-less noarch link as well. + + CVS patchset: 3786 + CVS date: 2000/06/01 02:01:02 + +commit 18742142a96bb5ee49a08e1999fb92e96b3bdb34 +Author: jbj +Date: Thu Jun 1 02:00:12 2000 +0000 + + Hack to pass build args correctly. + Create noarch symlink to canonical arch directory. + + CVS patchset: 3785 + CVS date: 2000/06/01 02:00:12 + +commit df6f361f16c1b9d365a35b43a6c560a297643d82 +Author: jbj +Date: Thu Jun 1 00:54:36 2000 +0000 + + Add athlon rpmrc config. + Add sparcv9 per-platform config. + + CVS patchset: 3784 + CVS date: 2000/06/01 00:54:36 + +commit 50a8f3b0a3fc8a1c8a684b9144850bd7bca6416b +Author: jbj +Date: Wed May 31 17:45:43 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3783 + CVS date: 2000/05/31 17:45:43 + +commit 8e0b5929ee6c07b31deb7510b57b4c05c1adf9b4 +Author: jbj +Date: Wed May 31 17:39:01 2000 +0000 + + Duplicate query aliases onto rpmq. + + CVS patchset: 3782 + CVS date: 2000/05/31 17:39:01 + +commit a09a109f60030873c7e61c13685361381d2e9812 +Author: jbj +Date: Wed May 31 15:57:22 2000 +0000 + + Typo. + + CVS patchset: 3781 + CVS date: 2000/05/31 15:57:22 + +commit 2cfe19084858ec55e2cd9db5a7b5c4e7dbdbb44c +Author: jbj +Date: Wed May 31 15:53:53 2000 +0000 + + Add noarch as well. + + CVS patchset: 3780 + CVS date: 2000/05/31 15:53:53 + +commit 59673372bd0801aaf770a95e8fda54a824da406a +Author: jbj +Date: Wed May 31 15:45:35 2000 +0000 + + Create i[3456]86 platform directories. + + CVS patchset: 3779 + CVS date: 2000/05/31 15:45:35 + +commit 98f19479817c3f82f91383d65b32679249c1c71a +Author: jbj +Date: Wed May 31 13:19:37 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3776 + CVS date: 2000/05/31 13:19:37 + +commit ff0fe552993b8bc148e77d1397ffdbfb58c1c3d7 +Author: jbj +Date: Wed May 31 09:07:05 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3775 + CVS date: 2000/05/31 09:07:05 + +commit b8a4fafb6184cbc2bafbdb090e1306575cb9a7b3 +Author: jbj +Date: Wed May 31 09:04:55 2000 +0000 + + installplatform: quote ars passed to sed. + + CVS patchset: 3774 + CVS date: 2000/05/31 09:04:55 + +commit 0a5dc40698a0e3f220a88ebb68f9c68c1aa3b6e4 +Author: msw +Date: Wed May 31 05:30:15 2000 +0000 + + add --short-circuit + + CVS patchset: 3773 + CVS date: 2000/05/31 05:30:15 + +commit c9ca61e094bdbd2ea1e552a2a4757fee458b71b7 +Author: msw +Date: Wed May 31 04:57:13 2000 +0000 + + oops, revert this part + + CVS patchset: 3772 + CVS date: 2000/05/31 04:57:13 + +commit 1ea450eb3afb646f6a753822192b19b4a22551ba +Author: msw +Date: Wed May 31 04:53:53 2000 +0000 + + pass --target + + CVS patchset: 3771 + CVS date: 2000/05/31 04:53:53 + +commit c2751355b6627ace2192d7d8cdc7cd5ef121e66b +Author: msw +Date: Wed May 31 03:36:25 2000 +0000 + + updated + + CVS patchset: 3770 + CVS date: 2000/05/31 03:36:25 + +commit eed2d042ff62d12c3eb20d99361059cfce95c279 +Author: msw +Date: Wed May 31 03:35:51 2000 +0000 + + include an escaped '\' as well as continuation for these macros that span shell lines + + CVS patchset: 3769 + CVS date: 2000/05/31 03:35:51 + +commit 0afc1fa3c973b4c2d91dbbecb007593929f48d59 +Author: jbj +Date: Tue May 30 23:04:09 2000 +0000 + + Add popt glue for --clean, --rmsource, --rmspec. + Teach rpmb about --nodeps. + + CVS patchset: 3768 + CVS date: 2000/05/30 23:04:09 + +commit 73d9a67dca7b0355bfd3682b237d3e111a1927a3 +Author: jbj +Date: Tue May 30 20:02:54 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3767 + CVS date: 2000/05/30 20:02:54 + +commit 835c1caaf3b7a8edba8f04ea3f4973fd341b296e +Author: jbj +Date: Tue May 30 19:30:28 2000 +0000 + + - mark packaging with version 4 to reflect filename/provide changes. + - change next version from 3.1 to 4.0 to reflect package format change. + + CVS patchset: 3766 + CVS date: 2000/05/30 19:30:28 + +commit f5faf376691c17a964c8c7e7decf4ea3ad265f1a +Author: jbj +Date: Tue May 30 16:52:31 2000 +0000 + + - turn on new, more complete version of %%configure. + - add %%makeinstall analogue of new %%configure for autoconf packages. + + CVS patchset: 3765 + CVS date: 2000/05/30 16:52:31 + +commit 81c22296d07b22db81bba9af308f3b04b409aa89 +Author: rjray +Date: Tue May 30 01:03:13 2000 +0000 + + checkpoint for second alpha (0.2) release + + CVS patchset: 3764 + CVS date: 2000/05/30 01:03:13 + +commit 3b00918ccb698b4e50661ceee3e8254609d1a4e7 +Author: rjray +Date: Sat May 27 08:35:35 2000 +0000 + + *** empty log message *** + + CVS patchset: 3763 + CVS date: 2000/05/27 08:35:35 + +commit e0accf5fba53431b44733d7d17c89cb539b045f9 +Author: rjray +Date: Sat May 27 05:22:51 2000 +0000 + + checkpointing laptop to repository + + CVS patchset: 3762 + CVS date: 2000/05/27 05:22:51 + +commit 240b0d9d340f2fe83aa965b9a680c58282a05747 +Author: rjray +Date: Sat May 27 03:59:26 2000 +0000 + + added new files, changed some paths + + CVS patchset: 3761 + CVS date: 2000/05/27 03:59:26 + +commit 7b8b4dc22cb9c2fe106705e37b83d5838dcb62fe +Author: rjray +Date: Sat May 27 03:58:51 2000 +0000 + + Modified/fixed some tests. + + CVS patchset: 3760 + CVS date: 2000/05/27 03:58:51 + +commit 0b06485803a9d3c6a993ff3830970278795fd695 +Author: rjray +Date: Sat May 27 03:56:38 2000 +0000 + + test suite for the utils in RPM.pm + + CVS patchset: 3759 + CVS date: 2000/05/27 03:56:38 + +commit ccd9711a024fa725e24e42de5e3becada817f908 +Author: rjray +Date: Sat May 27 03:55:58 2000 +0000 + + test suite for error package + + CVS patchset: 3758 + CVS date: 2000/05/27 03:55:58 + +commit b040c6b8b73fe32d637132e76386bfd2e8a11340 +Author: rjray +Date: Sat May 27 03:54:14 2000 +0000 + + merged here from individual dirs + + CVS patchset: 3757 + CVS date: 2000/05/27 03:54:14 + +commit d8b0bb0bb10bcd821256967e78738f8d20ea6bb2 +Author: rjray +Date: Sat May 27 03:53:56 2000 +0000 + + Perl side of the error management module + + CVS patchset: 3756 + CVS date: 2000/05/27 03:53:56 + +commit d42614ac1650f88c5a141c431548277af9388241 +Author: jbj +Date: Fri May 26 18:59:08 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3755 + CVS date: 2000/05/26 18:59:08 + +commit 5807d4262ea2783d1a69becefeaf7d294d1d27b3 +Author: jbj +Date: Fri May 26 18:51:11 2000 +0000 + + Remove build modes from rpm, use rpmb and/or popt glue instead. + + CVS patchset: 3754 + CVS date: 2000/05/26 18:51:11 + +commit f0ee44c4417b7e449d698dc74d76e102950eadd2 +Author: jbj +Date: Fri May 26 13:58:11 2000 +0000 + + Honor POPT_ARGFLAG_ONEDASH when dup'ing args for popt exec. + + CVS patchset: 3753 + CVS date: 2000/05/26 13:58:11 + +commit 08ce5a09e037daabdb1a493a8cb26a61a0cc8e39 +Author: jbj +Date: Wed May 24 18:28:36 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3752 + CVS date: 2000/05/24 18:28:36 + +commit 9f3668324f5d7d98f218fb53d95b101eb93874df +Author: jbj +Date: Wed May 24 18:09:06 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3751 + CVS date: 2000/05/24 18:09:06 + +commit c7273eb0bca1a7b4d7ccfea11fe9562b88034c53 +Author: jbj +Date: Wed May 24 17:53:35 2000 +0000 + + - change popt exec alias in oreder to exec rpm children. + - split rpm into 5 pieces along major mode fault lines with popt glue. + + CVS patchset: 3750 + CVS date: 2000/05/24 17:53:35 + +commit 0d1548767532377b8e0fcce719e9a42f567da5c3 +Author: jbj +Date: Mon May 22 17:33:32 2000 +0000 + + Add /usr/share compression as well. + + CVS patchset: 3749 + CVS date: 2000/05/22 17:33:32 + +commit b75f1f2f81bafe06633a421aa116f5a280f928e1 +Author: rjray +Date: Mon May 22 08:38:05 2000 +0000 + + test suites + + CVS patchset: 3748 + CVS date: 2000/05/22 08:38:05 + +commit dafd4d5fb105bfbe2ff958b01455f5dce1044a14 +Author: rjray +Date: Mon May 22 08:37:45 2000 +0000 + + Main class defines and code + + CVS patchset: 3747 + CVS date: 2000/05/22 08:37:45 + +commit 01b0ea4852b1eb3f108719e0ba490d64cad67d1e +Author: rjray +Date: Mon May 22 08:37:23 2000 +0000 + + Various includes and typedefs + + CVS patchset: 3746 + CVS date: 2000/05/22 08:37:23 + +commit 14bb8abeb2b4659418b58b29fd8f4a9316b8b228 +Author: rjray +Date: Mon May 22 08:37:02 2000 +0000 + + C type to Perl type mappings + + CVS patchset: 3745 + CVS date: 2000/05/22 08:37:02 + +commit c1b186dee0b9d32be73df3e9f2bd114189f43daa +Author: rjray +Date: Mon May 22 08:36:41 2000 +0000 + + MakeMaker file + + CVS patchset: 3744 + CVS date: 2000/05/22 08:36:41 + +commit df654c37b83e0346bab0aec4d4235bdd17d70234 +Author: rjray +Date: Mon May 22 08:36:20 2000 +0000 + + Basic doc-related files + + CVS patchset: 3743 + CVS date: 2000/05/22 08:36:20 + +commit adb00c4337424e65ef1f72a5a3555a07a3d0c750 +Author: jbj +Date: Thu May 18 21:03:14 2000 +0000 + + Create from rpm.c. + + CVS patchset: 3742 + CVS date: 2000/05/18 21:03:14 + +commit 7f1e954024b68736c826d571b26a0c91a038b4fa +Author: jbj +Date: Thu May 18 14:06:48 2000 +0000 + + Casts for debugging messages. + + CVS patchset: 3741 + CVS date: 2000/05/18 14:06:48 + +commit 3d8229ebfc33db9e1fdc83df6039b5030c710eb9 +Author: jbj +Date: Thu May 18 13:00:51 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3740 + CVS date: 2000/05/18 13:00:51 + +commit de1a875b623594c947742135851bfa79cc65a5be +Author: jbj +Date: Thu May 18 12:58:27 2000 +0000 + + 2nd try at db1 -> db3 stable functionality. + + CVS patchset: 3739 + CVS date: 2000/05/18 12:58:27 + +commit 1b0ce7471b2a36a959b7f5d18a60367cd99acab0 +Author: jbj +Date: Thu May 18 12:11:51 2000 +0000 + + fix: don't change hardlink st_size. + + CVS patchset: 3738 + CVS date: 2000/05/18 12:11:51 + +commit 3eeb37f5f647dbb6a457086e0476cfc51d303270 +Author: msw +Date: Wed May 17 05:35:18 2000 +0000 + + fixup headers when loading them + + CVS patchset: 3737 + CVS date: 2000/05/17 05:35:18 + +commit a71ac24efb57d2fe9c69f41c6ba25d6f5fdaac68 +Author: msw +Date: Wed May 17 03:12:10 2000 +0000 + + fix prototypes + + CVS patchset: 3736 + CVS date: 2000/05/17 03:12:10 + +commit e25b52d41e1f14725eb5df68615adf86d4d48281 +Author: msw +Date: Wed May 17 02:43:01 2000 +0000 + + fix prototypes + + CVS patchset: 3735 + CVS date: 2000/05/17 02:43:01 + +commit 2ce2b30e439ddc15e3525267ab1c1ba903bd9981 +Author: msw +Date: Wed May 17 02:37:59 2000 +0000 + + updated + + CVS patchset: 3734 + CVS date: 2000/05/17 02:37:59 + +commit cc52ab848a8677c8f8141e2dd58cf8cab23e2f11 +Author: msw +Date: Wed May 17 02:35:09 2000 +0000 + + build against glibc 2.2 + + CVS patchset: 3733 + CVS date: 2000/05/17 02:35:09 + +commit 8dfba973c9ae091e27f23f29448a83bd0e9c827a +Author: msw +Date: Wed May 17 02:34:42 2000 +0000 + + rpmio madness + + CVS patchset: 3732 + CVS date: 2000/05/17 02:34:42 + +commit e6a8d2f8dea6261d2655a3a1ae05210c81d65e9a +Author: msw +Date: Tue May 16 20:22:59 2000 +0000 + + bzip2 1.0 + + CVS patchset: 3731 + CVS date: 2000/05/16 20:22:59 + +commit 23ce7cf4cd6b3a70b0404fb9e31b6f3130538d0d +Author: jbj +Date: Tue May 16 18:32:49 2000 +0000 + + add calculated nlink field to -qlv output (like ls -al). + + CVS patchset: 3730 + CVS date: 2000/05/16 18:32:49 + +commit 2cf5b85fa1c5c4147a104af83bc00b712c1f0fd3 +Author: jbj +Date: Tue May 16 17:10:13 2000 +0000 + + fix: (segfault) verify needs rpmdb while query does not. + + CVS patchset: 3729 + CVS date: 2000/05/16 17:10:13 + +commit 3065159ad31105e0f61791e8c071938021cb00c2 +Author: jbj +Date: Sat May 13 19:06:41 2000 +0000 + + Add builddependenciees. + + CVS patchset: 3728 + CVS date: 2000/05/13 19:06:41 + +commit fa4fe81cb961e2258ad834f49d88f1549dc61145 +Author: jbj +Date: Sat May 13 15:52:38 2000 +0000 + + fix: sparc64 per-platform directory shouldn't be sparc64linux. + + CVS patchset: 3727 + CVS date: 2000/05/13 15:52:38 + +commit ac47974f082896f8f23a4287e0b7e591aed9cff8 +Author: jbj +Date: Fri May 12 23:30:28 2000 +0000 + + fix stupid mistakes (alpha segfaults). + + CVS patchset: 3726 + CVS date: 2000/05/12 23:30:28 + +commit 4c63d48ebeb2c1bcf788f6943ab5c7649a4956ca +Author: jbj +Date: Fri May 12 23:12:15 2000 +0000 + + Remiver compiler warnings on alpha. + + CVS patchset: 3725 + CVS date: 2000/05/12 23:12:15 + +commit 9733e2e589c60f2f0112b00ac6575e97e9628671 +Author: jbj +Date: Fri May 12 23:10:43 2000 +0000 + + fix: define/eval options assumed sizeof(int) == sizeof(void *). + + CVS patchset: 3724 + CVS date: 2000/05/12 23:10:43 + +commit 4a4704f98f9ebf216652caa01994895005bc1994 +Author: jbj +Date: Wed May 10 15:36:29 2000 +0000 + + - include RPM-GPG-KEY in file manifest. + - simplify --last popt alias, date like -qi (bjerrick@easystreet.com). + - fix: alloca'd memory used outside of scope (alpha segfault). + + CVS patchset: 3723 + CVS date: 2000/05/10 15:36:29 + +commit 46fe7a531a15fd20c3ff1c4b46a8e731246460c0 +Author: jbj +Date: Mon May 8 13:00:41 2000 +0000 + + Orphans. + + CVS patchset: 3722 + CVS date: 2000/05/08 13:00:41 + +commit 26bfb9e0783b7b83429d0f99e8b3178f903799d7 +Author: jbj +Date: Mon May 8 12:24:23 2000 +0000 + + here's a patch to make rpm (3.1-0.14) work on current FreeBSD versions + (tried 4.0-RELEASE and 5.0-CURRENT). + It adds freebsdelf.prov and freebsdelf.req in autodeps, modifies brp-strip + and brp-strip-comment-note to work with find versions that don't support + -perm +something and strip versions that fail with an error when they + can't strip a file, and modifies the configure check for GNU glob to check + for GLOB_PERIOD additionally. + This is required because FreeBSD's glob has some (but not all) of the GNU + extensions, but doesn't work the way rpm assumes (segfault as soon as + globbing is used in %files); GLOB_PERIOD can be used to tell the BSD + version apart from the GNU one. + + CVS patchset: 3721 + CVS date: 2000/05/08 12:24:23 + +commit 764e820f16757eb563b4f3ff24506a3983efd088 +Author: jbj +Date: Sun May 7 00:53:11 2000 +0000 + + Repair rebuilddb lossage, removing debug messages and final copy on user msgs. + Initialize dbN vector from dbNopen. + Use db3 return convention for dbNopen. + Always save tag index in join key. + Rename rpmdbAppendIteratorMatches -> rpmdbAppendIterator. + Remove tolerant from rpmdbRemove API. + Use hdrNum rather than offset, tagNum rather than fileNumber most everywhere. + rpmdb.c: Create rpmdbPruneIterator to exclude items from set. + rpmdb.c: Remove legacy code from rpmdbAdd/rpmdbRemove. + rpmdb.c: Rename (shorten) many routines. + tagName.c: prepare for ADDED/REMOVED/AVAILABLE temorary databases. + depends.c: use rpmdbPruneIterator. + depends.c: don't check ranges unless provides names match. + depends.c: Depends now works (watch out for data values of 0). + rpmpopt.in: Add --dbapi and --rebuilddbapi options. + + CVS patchset: 3720 + CVS date: 2000/05/07 00:53:11 + +commit b5bd7abfd1136292a14af5085ca4c84b9e156a26 +Author: jbj +Date: Tue May 2 19:37:01 2000 +0000 + + Don't do initdb, as we don't know what dbapi to use. + Remove -lpthread, new glibc has problems. + + CVS patchset: 3719 + CVS date: 2000/05/02 19:37:01 + +commit 191af9ebb542214b294aca29aa17bc5cad3b7393 +Author: msw +Date: Tue May 2 18:56:17 2000 +0000 + + don't call these header munges on null headers + + CVS patchset: 3718 + CVS date: 2000/05/02 18:56:17 + +commit a2891ff2c64d639f8f70798abcc365df7ad724c4 +Author: msw +Date: Tue May 2 18:07:59 2000 +0000 + + compress filelist, fixup provides + + CVS patchset: 3717 + CVS date: 2000/05/02 18:07:59 + +commit f5848782698ffc0082ded9fa8fa3e2ac880a0914 +Author: jbj +Date: Tue May 2 17:30:49 2000 +0000 + + installplatform: typo. + + CVS patchset: 3716 + CVS date: 2000/05/02 17:30:49 + +commit 0430a166f532ebb3883ec963237ac4f75b523bb5 +Author: jbj +Date: Tue May 2 16:09:15 2000 +0000 + + fix: don't generate sparc6464 names when creating platform directories. + + CVS patchset: 3715 + CVS date: 2000/05/02 16:09:15 + +commit 66f6c0c16bea886b91eff2c163dd4726d4707f3a +Author: jbj +Date: Tue May 2 08:54:01 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3714 + CVS date: 2000/05/02 08:54:01 + +commit ba0b5f506714062208e091816ecff827d5f36572 +Author: jbj +Date: Tue May 2 08:45:07 2000 +0000 + + Remove debugging messages. + + CVS patchset: 3713 + CVS date: 2000/05/02 08:45:07 + +commit c19f4c1c317aab49e57f2f9c81b4c031e99f0734 +Author: jbj +Date: Tue May 2 08:30:31 2000 +0000 + + Add usedbenv (disabled) to use db3 as db1 was used. + Configure to accept any db api (but rebuild will switch to db3). + Rename *_major to *_api throughout. + Always open Depends with O_CREAT|O_RDWR. + db1.c: use good ol' requredby.rpm name, not requiredbyindex.rpm. + db1.c: hide pkgs FD_t in dbi_db, eliminate dbi_pkgs. + depends.c: Skip Depends caching on dbiPut failure (e.g. perms). + rpmdb.c: remove _useDbiMajor, pass dbapi on call. + rpmdb.c: repair rot in rpmdbRemoveDatabase()/rpmdbMoveDatabase(). + rpmdb.c: disable ^C hack in signal block/unblock. + + CVS patchset: 3712 + CVS date: 2000/05/02 08:30:31 + +commit 73f95c99cea1308e32ccdbfe90dcc8ccd585d9d6 +Author: jbj +Date: Mon May 1 17:50:35 2000 +0000 + + Rename db0.c to db1.c, resurrect db2.c (from db3.c). + Add ia64 and sparc64 changes. + rpm.spec: add per-platform sub-directories. + Add rpmdbSync to API. + installplatform: pass LIB=lib64 on sparc64. + db3.c: Add nodbsync, lockdbfd, debug dbi configuration. + db3.c: don't check dbi_mode when deciding on DB_WRITECURSOR. + + CVS patchset: 3711 + CVS date: 2000/05/01 17:50:35 + +commit 5197d92f13815b602983cf9c032591f6001b03d7 +Author: jbj +Date: Fri Apr 28 15:14:47 2000 +0000 + + Don't incrementally link pthreads, causes segfault on (at least) alpha. + db0.c: Simulate db->sync on falloc. + db0.c: Use RPMDBI_PACKAGES for rpmtag comparisons. + db0.c: Add debug for dbi open/close like db3. + db0.c: Remove dbi if temporary (i.e. Depends). + db3.c: Filter DB_INCOMPLETE from db->sync return, it's usually harmless. + depends.c: Free Depends iterator, pass keylen, and use cursors. + depends.c: Free iterator *after* loop, not at end of 1st pass. + rpmdb.c: Fine grained cursor locks to avoid "crossed cursors" deadlocks. + rpmdb.c: Lazy open/close during rpmdbAdd/rpmdbRemove/openDatabase. + rpmdb.c: Remove last remnants of dbix, do dynamic lookup instead. + rpmdb.c: Resurrect rpmdbUpdateRecord in iterator loop. + macros.in: Add Depends dbi to config. + macros.in: Configure "nommap:mp_size=2Mb:pagesize=16Kb". + + CVS patchset: 3707 + CVS date: 2000/04/28 15:14:47 + +commit e1b556f8d022cd5d7f3fc0599c2e14091c8464f4 +Author: jbj +Date: Thu Apr 27 12:50:54 2000 +0000 + + - API: replace rpmdbUpdateRecord with rpmdbSetIteratorModified. + + CVS patchset: 3706 + CVS date: 2000/04/27 12:50:54 + +commit 113948c75c111b27d168719573d5c29c92e7dc0d +Author: jbj +Date: Thu Apr 27 01:11:48 2000 +0000 + + Sanity and API clean up. (make dist) + + CVS patchset: 3705 + CVS date: 2000/04/27 01:11:48 + +commit 24a64f27394fcf24e3e3f3d9d2f7b321f603a6a8 +Author: jbj +Date: Thu Apr 27 00:10:28 2000 +0000 + + - API: replace rpmdbUpdateRecord with rpmdbRemove/rpmdbAdd. + - API: replace rpmdbFindByLabel with RPMDBI_LABEL iteration. + - API: replace rpmdbGetRecord with iterators. + - API: replace findMatches with iterators. + + CVS patchset: 3704 + CVS date: 2000/04/27 00:10:28 + +commit b24f837828e451a5ddf371038a2f2f0ed64580a2 +Author: jbj +Date: Wed Apr 26 14:06:16 2000 +0000 + + Rip out remaining legacy dbi interfaces. + Add flags to all calls. + Create dbi interface wrapper to vectors. + + CVS patchset: 3701 + CVS date: 2000/04/26 14:06:16 + +commit 106e94001192f3d702c35341645fcaa1add94cec +Author: jbj +Date: Tue Apr 25 20:14:21 2000 +0000 + + Fix popt/po/tr.po addition. + + CVS patchset: 3700 + CVS date: 2000/04/25 20:14:21 + +commit 69b1adb5b0b4da803f91e6362964320873a37410 +Author: jbj +Date: Tue Apr 25 19:57:26 2000 +0000 + + Sanity (rebuild to check autoconf configuration in dist-7.0). + + CVS patchset: 3699 + CVS date: 2000/04/25 19:57:26 + +commit 61e10b58994e5f5f7331ac387d395ceb0bf010db +Author: msw +Date: Tue Apr 25 19:50:02 2000 +0000 + + fix configure check + + CVS patchset: 3698 + CVS date: 2000/04/25 19:50:02 + +commit 9c0c7e9fbd7a4cd1a0383334e7255f53d4c08fa3 +Author: jbj +Date: Tue Apr 25 19:41:37 2000 +0000 + + Sanity. + + CVS patchset: 3697 + CVS date: 2000/04/25 19:41:37 + +commit 76e42fa65b0f9aa133d7c0f7cae2e8a35462789c +Author: msw +Date: Tue Apr 25 15:26:18 2000 +0000 + + a little more work on the rpm module + + CVS patchset: 3696 + CVS date: 2000/04/25 15:26:18 + +commit 4b44030f25892213ba5d30d8d4949db4cafe3c78 +Author: jbj +Date: Mon Apr 24 16:57:40 2000 +0000 + + Add Turkish translation (Fatih Demir ) + + CVS patchset: 3695 + CVS date: 2000/04/24 16:57:40 + +commit b5cadb90d6c875740946b7bbdb00a59b6b2c4319 +Author: jbj +Date: Sun Apr 23 20:37:57 2000 +0000 + + make db indices as lightweight as possible, with per-dbi config. + db1.c will never be needed, eliminate. + API: merge rebuilddb.c into rpmdb.c. + + CVS patchset: 3694 + CVS date: 2000/04/23 20:37:57 + +commit ab3e4a08a7985f9ccb8bd8611adecec5567e6e18 +Author: jbj +Date: Fri Apr 21 00:27:45 2000 +0000 + + Typo. + + CVS patchset: 3693 + CVS date: 2000/04/21 00:27:45 + +commit 4da5ec06876561b74ce246d710d88cf5806d5a00 +Author: jbj +Date: Fri Apr 21 00:23:18 2000 +0000 + + Sanity. + + CVS patchset: 3692 + CVS date: 2000/04/21 00:23:18 + +commit ac6c6b770402ad1800e255df280458e39d0fc1a2 +Author: jbj +Date: Fri Apr 21 00:21:15 2000 +0000 + + fix: legacy packages required provides EVR/Flags to be added. + fix: generating provides EVER was broke with epoch. + db3 tuned for installer speed (i.e. no locking, create/remove on fly). + add new_db_api and old_db_api macros to control precisely for db version used. + + CVS patchset: 3691 + CVS date: 2000/04/21 00:21:15 + +commit eca43c56fb5c29ec13f3bea77b9ea4d76c9ec9e0 +Author: jbj +Date: Thu Apr 20 12:46:38 2000 +0000 + + Sanity (build 0.8). + + CVS patchset: 3690 + CVS date: 2000/04/20 12:46:38 + +commit a2665e12c6d16245c2783c4ea3a85fd9bf16174e +Author: jbj +Date: Thu Apr 20 11:54:03 2000 +0000 + + Sanity (re-adding rpm-python). + + CVS patchset: 3689 + CVS date: 2000/04/20 11:54:03 + +commit 2126a23ce91a1cc93e6b0d7c3b39c59b0faf877d +Author: msw +Date: Thu Apr 20 00:21:31 2000 +0000 + + match iterator support + + CVS patchset: 3688 + CVS date: 2000/04/20 00:21:31 + +commit f75d794af48cf4c1f24cbbd972bed3fc7153e610 +Author: jbj +Date: Wed Apr 19 22:15:02 2000 +0000 + + Change iterator interface to use RPMTAG_FOO rather than RPMDBI_FOO. + + CVS patchset: 3687 + CVS date: 2000/04/19 22:15:02 + +commit dce2eccbd5b7a01605988df46580ec1ce2580f37 +Author: jbj +Date: Wed Apr 19 16:59:02 2000 +0000 + + Sanity. + + CVS patchset: 3686 + CVS date: 2000/04/19 16:59:02 + +commit c89b7ff341c504ce2f684149d46b2e6939faed31 +Author: jbj +Date: Wed Apr 19 16:03:49 2000 +0000 + + Hi! + I'd like to start building sparc64 packages (eventhough the install rule + details are yet to be designed - IMHO if 64bit SPARC userland is going into + 7.0 we should rebuild all packages into 64bit in the next months or so to + have time to chase bugs etc.), and this is about what I need. + Basically I'd like to have %{_lib} to stand for the last part (normally + "lib") of dirname for directories like /lib, /usr/lib, /usr/X11R6/lib + because on sparc64-linux they are /lib64, /usr/lib64, /usr/X11R6/lib64 (and + on Solaris /lib/sparcv9, /usr/lib/sparcv9 etc.), so that one can use things + like + /usr/%{_lib} in the spec files. + Another thing which I need is an arch specific build root policy. + This patch does a few things: + 1) add installplatform into EXTRA_DIST files, so that it is actually invoked + during rpm build not from CVS + 2) Define %_lib lib and let target specific macros override it + 3) Split __spec_install_post into __arch_install_post and __os_install_post, + --buildpolicy now specifies the __os_install_post part only. spec files + can still override the __arch_install_post if the want to. + brp-sparc64-linux is used to move 64bit libraries to */lib64 directories + from */lib directories if make install of some package left them there. + 4) Change installplatform so that on sparc* it creates both sparc and + sparc64 target macro dirs (/usr/lib/rpm/sparc{,64}-redhat-linux in + sparc*-redhat-linux case). + + CVS patchset: 3685 + CVS date: 2000/04/19 16:03:49 + +commit bb4eafd53dc21710f0618499cba70bc4d046aa00 +Author: jbj +Date: Wed Apr 19 15:26:10 2000 +0000 + + Data size of index databases now per-index (was always 8 bytes). + Global rpm data base parameterization used per-index. + + CVS patchset: 3684 + CVS date: 2000/04/19 15:26:10 + +commit 588daae4b40313b05247e3bf4fcc2b675ec04317 +Author: jbj +Date: Tue Apr 18 18:11:43 2000 +0000 + + Consolidate changes into rpmdb.c. + + CVS patchset: 3683 + CVS date: 2000/04/18 18:11:43 + +commit 24f68f3a0df0004f7f3e623147474fb5632e29be +Author: jbj +Date: Tue Apr 18 17:23:21 2000 +0000 + + Eliminate, contents moved to rpmdb.c/rpmdb.h. + + CVS patchset: 3682 + CVS date: 2000/04/18 17:23:21 + +commit a7b421a7f027bd2497a057651fc393aa64497a6c +Author: jbj +Date: Tue Apr 18 17:22:37 2000 +0000 + + Prepare to move contents to rpmdb.c/rpmdb.h + + CVS patchset: 3681 + CVS date: 2000/04/18 17:22:37 + +commit 29fa01b329203018067a9f90fc859c05e406cc47 +Author: jbj +Date: Mon Apr 17 12:28:58 2000 +0000 + + Start composting db interfaces. + + CVS patchset: 3680 + CVS date: 2000/04/17 12:28:58 + +commit 3a7e311add683b212665084eb5e62a2a566fefc5 +Author: jbj +Date: Sat Apr 15 20:21:15 2000 +0000 + + fix: cpio.c: pre-, not post-, decrement the link count. + (from Fabrice Bellet ) + + CVS patchset: 3679 + CVS date: 2000/04/15 20:21:15 + +commit a6fc8ecb52d57acc8a4c601d49b019a6ae9eac91 +Author: jbj +Date: Thu Apr 13 17:59:10 2000 +0000 + + add explcit "Provides: name = [epoch:]version-release" to headers. + + CVS patchset: 3678 + CVS date: 2000/04/13 17:59:10 + +commit 0c83ea489f9d5f36d3d2e1af06f77396a3f733cb +Author: jbj +Date: Thu Apr 13 16:00:34 2000 +0000 + + Sanity (bump release). + + CVS patchset: 3677 + CVS date: 2000/04/13 16:00:34 + +commit bd4ce434867c61fb80976f05b6556e48391b1864 +Author: jbj +Date: Thu Apr 13 12:43:49 2000 +0000 + + Remove rpmdbFindByFile from API (and fix RPMDBI_FILE iterator). + + CVS patchset: 3676 + CVS date: 2000/04/13 12:43:49 + +commit 7fd28d7bf20d37d360011b1a6957d35b99bf8098 +Author: jbj +Date: Thu Apr 13 10:41:31 2000 +0000 + + Insure that EXIT_FAILURE is defined (irix6.5). + + CVS patchset: 3675 + CVS date: 2000/04/13 10:41:31 + +commit 41db4a0210a45057741ef4d69fa6703924ed0d2e +Author: jbj +Date: Thu Apr 13 10:11:32 2000 +0000 + + The death of rpmdbFindBy{Provides,RequiredBy,Conflicts}. + + CVS patchset: 3674 + CVS date: 2000/04/13 10:11:32 + +commit 48e8650520c78c81f67164da89f1bb6143022ad8 +Author: jbj +Date: Thu Apr 13 09:07:08 2000 +0000 + + The death of rpmdbFindBy{Group,TriggeredBy,Header}. + + CVS patchset: 3673 + CVS date: 2000/04/13 09:07:08 + +commit bb472e02e1bde04b02702cf72473f9a5dbcb983d +Author: jbj +Date: Wed Apr 12 18:21:40 2000 +0000 + + Convert to rpm-3.1 API. + + CVS patchset: 3672 + CVS date: 2000/04/12 18:21:40 + +commit a4a828e3a5ff469d0695028d8b11ca67210da100 +Author: jbj +Date: Wed Apr 12 16:31:51 2000 +0000 + + Make sure that match iterators can be called with mi = NULL. + Remove DYING code. + + CVS patchset: 3671 + CVS date: 2000/04/12 16:31:51 + +commit db11adf6e8a725d8ed2d316215e782cc6c40c231 +Author: jbj +Date: Wed Apr 12 16:30:46 2000 +0000 + + Remove DYING code. + + CVS patchset: 3670 + CVS date: 2000/04/12 16:30:46 + +commit b33d2bf2454263b6743d19db8328a61b5cb0b69d +Author: jbj +Date: Wed Apr 12 16:29:03 2000 +0000 + + Pass key as void *, not char *. + + CVS patchset: 3669 + CVS date: 2000/04/12 16:29:03 + +commit f3571adf59bc99f660fae74353fcd8b6b9da2882 +Author: jbj +Date: Wed Apr 12 13:42:57 2000 +0000 + + API: pass *SearchIndex() length of key (0 will use strlen(key)). + API: remove rpmdb{First,Next}RecNum routines. + db3.c: remove cursor DB_RMW implementation, something else is needed. + rpmdb.c: first crack at rpmdb match iterator. + query.c: ditto. + rebuilddb.c: ditto. + dumpdb.c: ditto. + + CVS patchset: 3668 + CVS date: 2000/04/12 13:42:57 + +commit 3cbb3be0452b4eddfec2dfc8ca1da2ede59eb9b0 +Author: jbj +Date: Tue Apr 11 16:15:54 2000 +0000 + + - treat legacy falloc.c as "special" db[01] index for package headers. + + CVS patchset: 3667 + CVS date: 2000/04/11 16:15:54 + +commit fc40e956bf541a91629f42d62f6f6c6bed3507a9 +Author: jbj +Date: Tue Apr 11 15:28:07 2000 +0000 + + make header db a "special" type of index database in db0, hiding falloc.c. + header retrieval from db does not guarantee any alignment. + eliminate dbiGetFirstKey method in db vectors. + add db{copen,cclose,cget,join} methods in db vectors. + clean up __db.NNN files from failed db3 open. + + CVS patchset: 3666 + CVS date: 2000/04/11 15:28:07 + +commit d91a22b16557c4681e0141edfb5f3627ee39f81f +Author: jbj +Date: Sat Apr 8 21:36:02 2000 +0000 + + fix: dbiCloseIndex not called (typo). + dump db1 and db2 for now. + + CVS patchset: 3665 + CVS date: 2000/04/08 21:36:02 + +commit df023d73e8ea4a282e382977a482a28cacdd5d93 +Author: jbj +Date: Sat Apr 8 19:28:08 2000 +0000 + + Hash package headers using simple counter. + + CVS patchset: 3664 + CVS date: 2000/04/08 19:28:08 + +commit 48a4968d366ef9114822ee26fec08c9cf934b1ed +Author: jbj +Date: Fri Apr 7 16:24:43 2000 +0000 + + fix: rpmdbCountPackages should pass by reference, not value. + + CVS patchset: 3663 + CVS date: 2000/04/07 16:24:43 + +commit eb75d9280bdf6ce203c6ba12615e8a6f821a0d42 +Author: jbj +Date: Fri Apr 7 16:09:25 2000 +0000 + + use "rpmdb db" consistently throughout, add doxygen tags. + db3.c: save join keys in endian neutral binary format. + rpmdb.c: create rpmdbCountPackages(). + install.c: use rpmdbCountPackages(). + uninstall.c: Ditto. + + CVS patchset: 3662 + CVS date: 2000/04/07 16:09:25 + +commit d2d06f6b3e943614357fb87ee4cab459e1fd634d +Author: jbj +Date: Fri Apr 7 13:10:37 2000 +0000 + + solaris2.6: avoid bsearch with empty dir list (Ric Klaren - klaren@cs.utwente.nl) + + CVS patchset: 3661 + CVS date: 2000/04/07 13:10:37 + +commit 97639028476fe63a5b40b98aa60a3bfb8b147ca2 +Author: jbj +Date: Thu Apr 6 15:20:29 2000 +0000 + + use hashed access for package headers. + + CVS patchset: 3660 + CVS date: 2000/04/06 15:20:29 + +commit 18a1e73ac671294487ebff8644b688a8821dc7b6 +Author: jbj +Date: Tue Apr 4 10:10:47 2000 +0000 + + Sanity. + + CVS patchset: 3659 + CVS date: 2000/04/04 10:10:47 + +commit c2ced005591fa9fd11d25883223476bbae2133f4 +Author: jbj +Date: Tue Apr 4 09:27:48 2000 +0000 + + Permit dboffsets in hex and octal. + + CVS patchset: 3658 + CVS date: 2000/04/04 09:27:48 + +commit 9965b2d482d3592b447cc6d7919dab9b6c406e52 +Author: jbj +Date: Mon Apr 3 14:36:39 2000 +0000 + + Sanity. + + CVS patchset: 3657 + CVS date: 2000/04/03 14:36:39 + +commit f211e85a5e4af143179757be9bf6159ecbcb2698 +Author: jbj +Date: Mon Apr 3 14:31:12 2000 +0000 + + Add variable to control dbenv teardown on close. + + CVS patchset: 3656 + CVS date: 2000/04/03 14:31:12 + +commit a8f6f02bc145fa8fbe4587b6ade51bb7b99d1a6b +Author: jbj +Date: Mon Apr 3 14:30:24 2000 +0000 + + Permit db3 paramaters from macro. + Permit private dbcursor (but this will go away soon). + + CVS patchset: 3655 + CVS date: 2000/04/03 14:30:24 + +commit 6c203a39e5226be62a2c3b8404ffb8750238ea82 +Author: jbj +Date: Mon Apr 3 14:27:21 2000 +0000 + + Indicate that dbenv should be trashed after a rebuild. + + CVS patchset: 3654 + CVS date: 2000/04/03 14:27:21 + +commit 9ee04f850d5cde98d0a3541930bb5654c0fa1e37 +Author: jbj +Date: Mon Apr 3 14:26:46 2000 +0000 + + Replace individual dbi pointers with an array. + + CVS patchset: 3653 + CVS date: 2000/04/03 14:26:46 + +commit 6b89dea994e17db67444da86414d64a7b7d2c27f +Author: jbj +Date: Mon Apr 3 14:24:55 2000 +0000 + + Prefer db3. + + CVS patchset: 3652 + CVS date: 2000/04/03 14:24:55 + +commit c87582cbf21ebeab827269b94e81f1adda09b656 +Author: jbj +Date: Mon Apr 3 14:24:30 2000 +0000 + + Bump popt sub-package version. + + CVS patchset: 3651 + CVS date: 2000/04/03 14:24:30 + +commit d01b8832553b6576b2c9ae31fadb5f3bf850f210 +Author: jbj +Date: Fri Mar 31 17:23:13 2000 +0000 + + Get the database permissions right. + + CVS patchset: 3650 + CVS date: 2000/03/31 17:23:13 + +commit 0833c5686ab2aa82a2afeb295adca3d60af6612e +Author: jbj +Date: Fri Mar 31 17:16:36 2000 +0000 + + As erik mentioned, here is a patch. It makes it so packages don't get searched + to find directories which were improperly assigned in broken spec file file + +lists, + causing, for example, KDE to be installed on an upgrade from 6.1 to 6.2 when + KDE was not previously installed... + + CVS patchset: 3649 + CVS date: 2000/03/31 17:16:36 + +commit 91a44edf36c4bb668ad8d3ce451ed31632eaf54c +Author: jbj +Date: Fri Mar 31 14:55:23 2000 +0000 + + - try for db3 DB_INIT_CDB model. + + CVS patchset: 3648 + CVS date: 2000/03/31 14:55:23 + +commit 24fbbd3954aee785dac7f6f3e26721944549cff4 +Author: jbj +Date: Fri Mar 31 14:33:40 2000 +0000 + + db3 configured for testing with (DB_INIT_MPOOL|DB_INIT_CDB|DB_SYSTEM_MEM). + + CVS patchset: 3647 + CVS date: 2000/03/31 14:33:40 + +commit 920d26a5150cbfb9ed9c8e547470d4b02c9a267b +Author: jbj +Date: Fri Mar 31 09:33:17 2000 +0000 + + fix: duplicate free in db3. + Use Berkeley "home" db directory with relative rather than absolute paths. + + CVS patchset: 3646 + CVS date: 2000/03/31 09:33:17 + +commit 00914dd961fb8e5cf25e555964a68debbd70679e +Author: jbj +Date: Thu Mar 30 19:22:46 2000 +0000 + + Mostly functional db2 interface, db3 still has problems. + + CVS patchset: 3645 + CVS date: 2000/03/30 19:22:46 + +commit f4606533e43ba1c153133096fee26b16e0360631 +Author: jbj +Date: Thu Mar 30 19:21:09 2000 +0000 + + fix: move free after error message that needs data. + + CVS patchset: 3644 + CVS date: 2000/03/30 19:21:09 + +commit 353a2811a4173728aae666217dde44880654531d +Author: jbj +Date: Mon Mar 27 15:55:07 2000 +0000 + + add db3 to the pile, isolate all with incremental link and vectors. + + CVS patchset: 3643 + CVS date: 2000/03/27 15:55:07 + +commit 62381feb62bc1980a24069386060bad917baf901 +Author: jbj +Date: Mon Mar 27 11:13:25 2000 +0000 + + Compilation with db3. + + CVS patchset: 3642 + CVS date: 2000/03/27 11:13:25 + +commit 22a911a3b36c9cde5159e0343632246ba9fa007c +Author: jbj +Date: Sun Mar 26 22:45:02 2000 +0000 + + Add --preferdb for now to permit testing db0/db1/db2. + + CVS patchset: 3641 + CVS date: 2000/03/26 22:45:02 + +commit c47d8f3f6311435f60402a6230429a89bb7e23a4 +Author: jbj +Date: Fri Mar 24 22:12:59 2000 +0000 + + Bump version to next release. + + CVS patchset: 3640 + CVS date: 2000/03/24 22:12:59 + +commit 7ae0e5d6059aeda81bd9233e7e6515e058eb6bb8 +Author: jbj +Date: Fri Mar 24 17:20:17 2000 +0000 + + Sanity. + + CVS patchset: 3639 + CVS date: 2000/03/24 17:20:17 + +commit adf70c073e0d4e08cde84659d3abe6ff640b4666 +Author: jbj +Date: Fri Mar 24 08:00:12 2000 +0000 + + Sanity. + + CVS patchset: 3638 + CVS date: 2000/03/24 08:00:12 + +commit ea8051c29adcce7688286c3c7c620b46d6dad5b3 +Author: jbj +Date: Thu Mar 23 20:58:01 2000 +0000 + + convert db1 -> db2 on-disk format using --rebuilddb. + + CVS patchset: 3637 + CVS date: 2000/03/23 20:58:01 + +commit cab176172b8ef247f24e5aa0928c3aa0b8adabd9 +Author: jbj +Date: Thu Mar 23 15:49:50 2000 +0000 + + - API: change dbi to pass by reference, not value. + - cram all of db1, db_185, and db2 interfaces into rpmlib. + + CVS patchset: 3636 + CVS date: 2000/03/23 15:49:50 + +commit 46e17d7a2d27cb91d1c930de46c0a8026410b0d5 +Author: jbj +Date: Sat Mar 18 14:24:21 2000 +0000 + + Typo. + + CVS patchset: 3634 + CVS date: 2000/03/18 14:24:21 + +commit 80d940387d4e79ada2f4f25f29c6f3849dbb6d5b +Author: jbj +Date: Fri Mar 17 21:04:50 2000 +0000 + + configure noarch compatibility in rpmrc for ia64. + + CVS patchset: 3633 + CVS date: 2000/03/17 21:04:50 + +commit e745a2dd07345b508c0365a04e8c389978ff4262 +Author: jbj +Date: Thu Mar 16 14:27:04 2000 +0000 + + configure.in fiddles for BSD systems (Patrick Schoo). + + CVS patchset: 3631 + CVS date: 2000/03/16 14:27:04 + +commit cf68a32ca6fca6aa2118683bd2c7c0cf83bba91c +Author: jbj +Date: Wed Mar 15 19:50:57 2000 +0000 + + - fix: noLibio = 0 on Red Hat 4.x and 5.x. + - fix: typo in autodeps/linux.req. + + CVS patchset: 3630 + CVS date: 2000/03/15 19:50:57 + +commit e806f1865e28bbfd5001bc702214e7081f05a649 +Author: jbj +Date: Tue Mar 14 15:24:25 2000 +0000 + + Add note that -L paths may have to be used. + + CVS patchset: 3627 + CVS date: 2000/03/14 15:24:25 + +commit 3e7f416a741e65be1eb72e99c700cd3dacbd72fe +Author: jbj +Date: Mon Mar 13 15:17:12 2000 +0000 + + use DIRNAMES/BASENAMES/DIRINDICES not FILENAMES in packages and db. + + CVS patchset: 3626 + CVS date: 2000/03/13 15:17:12 + +commit 853af666a2af62b5779a5f6f7f0f6244b865df4c +Author: jbj +Date: Mon Mar 13 15:13:53 2000 +0000 + + Start rpm-3.1 development. + + CVS patchset: 3625 + CVS date: 2000/03/13 15:13:53 + +commit 3d5d32e294aae5115dd6f2989f4b88e3c589634f +Author: jbj +Date: Sat Mar 11 21:13:18 2000 +0000 + + Red Hat 4.2 has not __set_errno. + + CVS patchset: 3624 + CVS date: 2000/03/11 21:13:18 + +commit 15432f908996c74cebb6d9e0409f922794528950 +Author: jbj +Date: Sat Mar 11 20:59:30 2000 +0000 + + Red Hat 5.2 has not __PMT. + + CVS patchset: 3623 + CVS date: 2000/03/11 20:59:30 + +commit ef56b9257c56f7e43bbc82fd577f589a767a247a +Author: jbj +Date: Sat Mar 11 20:35:03 2000 +0000 + + Sanity (penultimate rpm-3.0.4). + + CVS patchset: 3622 + CVS date: 2000/03/11 20:35:03 + +commit bed2a465fe49ce05f9678e619d016a2d26649c98 +Author: jbj +Date: Sat Mar 11 20:14:07 2000 +0000 + + fix: use glibc 2.1 glob/fnmatch everywhere. + + CVS patchset: 3621 + CVS date: 2000/03/11 20:14:07 + +commit 5d662d2e9c0b18a1ddfb8ad929bf6edf3586fa3d +Author: jbj +Date: Fri Mar 10 22:02:29 2000 +0000 + + Update portability routines from glibc-2.1. + + CVS patchset: 3620 + CVS date: 2000/03/10 22:02:29 + +commit f4885d95eeb329676d0e8c05e379ff6315bcf60b +Author: jbj +Date: Fri Mar 10 20:49:09 2000 +0000 + + Portability. + + CVS patchset: 3619 + CVS date: 2000/03/10 20:49:09 + +commit 94e1c52e5e977e0c4421a590fecd258eb06d0421 +Author: jbj +Date: Fri Mar 10 20:47:57 2000 +0000 + + Can't include system.h w/o mishap. + + CVS patchset: 3618 + CVS date: 2000/03/10 20:47:57 + +commit afb7d4bc0ef1627539d9dcba0093622ed8ce2ed8 +Author: jbj +Date: Fri Mar 10 17:51:43 2000 +0000 + + Use /usr/lib paths. + + CVS patchset: 3617 + CVS date: 2000/03/10 17:51:43 + +commit cb608da54243a2e56fbfb2e5258681a0f1faa9f8 +Author: jbj +Date: Fri Mar 10 17:50:53 2000 +0000 + + Get config.h by includeing "system.h" + + CVS patchset: 3616 + CVS date: 2000/03/10 17:50:53 + +commit ac8637bd5275962c11f89fb9a802626a21bf0592 +Author: jbj +Date: Fri Mar 10 17:49:09 2000 +0000 + + Update to glibc-2.1 version with GNU extensions. + + CVS patchset: 3615 + CVS date: 2000/03/10 17:49:09 + +commit 3af1f7d94ed7454c025a520c05a8084117131582 +Author: jbj +Date: Fri Mar 10 16:53:08 2000 +0000 + + fix: better filter in linux.req to avoid ARM specific objdump output. + + CVS patchset: 3614 + CVS date: 2000/03/10 16:53:08 + +commit 8d3c1b2ba0884aca1c0ffcaf913480ecea321fd6 +Author: jbj +Date: Thu Mar 9 20:52:56 2000 +0000 + + Sanity (penultimate rpm-3.0.4 release candidate). + + CVS patchset: 3613 + CVS date: 2000/03/09 20:52:56 + +commit f3989411406eb991f5a3eb78e3ad09cd3d509068 +Author: jbj +Date: Thu Mar 9 20:48:15 2000 +0000 + + Get the escapes correct for "id -u" fidget. + + CVS patchset: 3612 + CVS date: 2000/03/09 20:48:15 + +commit de046f790738795acff4b7f52f030d96ae8ddcca +Author: jbj +Date: Thu Mar 9 18:13:19 2000 +0000 + + Orphan. + + CVS patchset: 3611 + CVS date: 2000/03/09 18:13:19 + +commit e93943f1e01bb8898e8445fb3ab1a648d1be7b68 +Author: jbj +Date: Thu Mar 9 18:13:02 2000 +0000 + + - portability: skip bzip2 if not available. + - portability: skip gzseek if not available (zlib-1.0.4). + - portability: skip personality if not available (linux). + - portability: always include arpa/inet.h (HP-UX). + - portability: don't use id -u (Brandon Allbery). + - portability: don't chown/chgrp -h w/o lchown. + - portability: splats in rpm.spec to find /usr/{share,local}/locale/* + + CVS patchset: 3610 + CVS date: 2000/03/09 18:13:02 + +commit acdafeca5ca650d1944e45b94bc6a60ff3fb67a2 +Author: jbj +Date: Tue Mar 7 15:37:17 2000 +0000 + + portability: zlib-1.0.4 has not gzseek + portability: Red Hat 4.x has not personality + + CVS patchset: 3609 + CVS date: 2000/03/07 15:37:17 + +commit 8787c03f2d0872a24cdd23efaba5aa744ddea481 +Author: jbj +Date: Tue Mar 7 14:40:48 2000 +0000 + + Avoid libio on Red Hat 5.2 with libc5. + + CVS patchset: 3608 + CVS date: 2000/03/07 14:40:48 + +commit c0650f0a1974590831e9c76650ba5d2007478b37 +Author: jbj +Date: Fri Mar 3 23:44:13 2000 +0000 + + Correct attribution. + + CVS patchset: 3607 + CVS date: 2000/03/03 23:44:13 + +commit 5c1b6d0ba65278ffe440bd2ce4b4213e9e2d3f32 +Author: jbj +Date: Thu Mar 2 20:21:10 2000 +0000 + + simpler hpux.prov script (Tim Mooney). + + CVS patchset: 3606 + CVS date: 2000/03/02 20:21:10 + +commit bda1f6866a7a313c9dfebf0137360b347e903fc3 +Author: jbj +Date: Wed Mar 1 17:28:32 2000 +0000 + + Bump release (0.48). + + CVS patchset: 3605 + CVS date: 2000/03/01 17:28:32 + +commit d19dc8f760b75d2df40168edace51be9251f267d +Author: jbj +Date: Wed Mar 1 17:16:47 2000 +0000 + + Typo. + + CVS patchset: 3604 + CVS date: 2000/03/01 17:16:47 + +commit 81af2158e2bfd78b4364653ed5acd31be0f808f4 +Author: jbj +Date: Wed Mar 1 15:34:53 2000 +0000 + + Add %changelog. + + CVS patchset: 3603 + CVS date: 2000/03/01 15:34:53 + +commit 2b30bc3b2ddb6a61801bcdecbb22a1c673913e0d +Author: jbj +Date: Wed Mar 1 15:28:30 2000 +0000 + + Bump release. + + CVS patchset: 3602 + CVS date: 2000/03/01 15:28:30 + +commit 584a5265756f74d67e34c959ce4d0271a0abd7bd +Author: jbj +Date: Wed Mar 1 00:22:47 2000 +0000 + + Add changelog. + + CVS patchset: 3601 + CVS date: 2000/03/01 00:22:47 + +commit 8aceebd817c77792eea840ec5585264e023b13f4 +Author: jbj +Date: Tue Feb 29 23:22:44 2000 +0000 + + Portability fiddles. + Rebuild with latest rpmmodule.so code. + + CVS patchset: 3600 + CVS date: 2000/02/29 23:22:44 + +commit 968b07939a883a54b17cc35702e93a0191bfb374 +Author: jbj +Date: Tue Feb 29 01:57:37 2000 +0000 + + Can't print a NULL on non-GNU systems. + + CVS patchset: 3599 + CVS date: 2000/02/29 01:57:37 + +commit 39d03aa29e19bcb01471de836c5d0793ab8d9e5c +Author: msw +Date: Mon Feb 28 20:00:31 2000 +0000 + + i18nation + + CVS patchset: 3598 + CVS date: 2000/02/28 20:00:31 + +commit 19e47314eaaae3e46760207ea434448fce11ba11 +Author: jbj +Date: Mon Feb 28 00:08:24 2000 +0000 + + More typos. + + CVS patchset: 3597 + CVS date: 2000/02/28 00:08:24 + +commit 8853928d695ea1c27a4ebcf5351c455e9ab8b481 +Author: jbj +Date: Sun Feb 27 23:57:14 2000 +0000 + + Typos. + + CVS patchset: 3596 + CVS date: 2000/02/27 23:57:14 + +commit a217056e70d56a4eb666bda599d89ba2a4e0a014 +Author: jbj +Date: Sun Feb 27 23:40:36 2000 +0000 + + Permit building w/o libbz2.a. + In popt, check for building within the rpm tree before requiring GNU gettext. + + CVS patchset: 3595 + CVS date: 2000/02/27 23:40:36 + +commit 2fdcb4810f0edef7fbb11eb60e7c7336982419c6 +Author: jbj +Date: Sun Feb 27 22:45:47 2000 +0000 + + Typo. + + CVS patchset: 3594 + CVS date: 2000/02/27 22:45:47 + +commit 795a3ac5948f4942e40d9311777ccd679825413e +Author: jbj +Date: Sun Feb 27 20:50:52 2000 +0000 + + Diminish solaris2.6 gcc noise. + + CVS patchset: 3593 + CVS date: 2000/02/27 20:50:52 + +commit 945d2cd8af0d5057c0a26d31c196e36a685e0572 +Author: jbj +Date: Sun Feb 27 20:17:21 2000 +0000 + + i18n install is in /usr/lib not /usr/share for solaris2.6. + + CVS patchset: 3592 + CVS date: 2000/02/27 20:17:21 + +commit 742a513e5f4eeb92648bb29247793735dfe88ac7 +Author: jbj +Date: Sun Feb 27 18:52:30 2000 +0000 + + Solaris2.6 portability. + + CVS patchset: 3591 + CVS date: 2000/02/27 18:52:30 + +commit 79940584c97aa8f3f7c8ff027ad79ed8fc7c3ff5 +Author: jbj +Date: Fri Feb 25 17:30:28 2000 +0000 + + Create symlink to platform configuration directory too. + + CVS patchset: 3590 + CVS date: 2000/02/25 17:30:28 + +commit 9e75d5397f5a3d22d3ea884f0a859ddf8e2b13d7 +Author: jbj +Date: Fri Feb 25 16:49:05 2000 +0000 + + - sparc-sun-solaris2.6 portability check. + + CVS patchset: 3589 + CVS date: 2000/02/25 16:49:05 + +commit 601d666d4825619b9ecd12b839efbe6b0ebe4516 +Author: jbj +Date: Fri Feb 25 16:29:44 2000 +0000 + + - fix: filter excluded paths before adding install prefixes (#8709). + - add i18n lookaside to PO catalogue(s) for i18n strings. + - try for /etc/rpm/macros.specspo so that specspo autoconfigures rpm. + - per-platform configuration factored into /usr/lib/rpm subdir. + + CVS patchset: 3588 + CVS date: 2000/02/25 16:29:44 + +commit 18edb9da1a3b658208492fb9934c1a82a639014b +Author: jbj +Date: Thu Feb 24 23:33:58 2000 +0000 + + (solaris 2.6): portability requires setenv.c. + + CVS patchset: 3587 + CVS date: 2000/02/24 23:33:58 + +commit 466f98a9fb5d0609afa370462e415d4fdead07c9 +Author: jbj +Date: Thu Feb 24 22:28:31 2000 +0000 + + Automake portability diddles. + + CVS patchset: 3586 + CVS date: 2000/02/24 22:28:31 + +commit fc45026a9e1bd32ef8dec83f2e3bdac3262820b8 +Author: jbj +Date: Thu Feb 24 05:41:47 2000 +0000 + + Make sure that IPPORT_FTP is defined. + + CVS patchset: 3585 + CVS date: 2000/02/24 05:41:47 + +commit 1cd98cb04c9eccd7cf8b7a09824086a954406036 +Author: jbj +Date: Wed Feb 23 22:43:27 2000 +0000 + + Sanity (0.44 release). + + CVS patchset: 3584 + CVS date: 2000/02/23 22:43:27 + +commit ace35961e8653796e75f6c5ac0e709a849de8f87 +Author: jbj +Date: Wed Feb 23 22:40:53 2000 +0000 + + Add %_i18ndomains configuration. + + CVS patchset: 3583 + CVS date: 2000/02/23 22:40:53 + +commit fba7de185d1ce4583275871dcd44bcf483235ff5 +Author: jbj +Date: Wed Feb 23 19:20:20 2000 +0000 + + First attempt at rpmHeaderGetEntry(). + + CVS patchset: 3582 + CVS date: 2000/02/23 19:20:20 + +commit becec721d0a3e2f927b1abed7ef792724f9a642d +Author: jbj +Date: Wed Feb 23 17:34:41 2000 +0000 + + i18n lookaside. + + CVS patchset: 3581 + CVS date: 2000/02/23 17:34:41 + +commit 6e545408441c511267b1252e29ea0668f3cc37ce +Author: jbj +Date: Wed Feb 23 17:20:20 2000 +0000 + + ANSIfcation. + + CVS patchset: 3580 + CVS date: 2000/02/23 17:20:20 + +commit f880c9a8d6fdd6c39dc524a2740eb3911e81bae3 +Author: jbj +Date: Wed Feb 23 01:48:51 2000 +0000 + + fix: missed level of indirection in i18nTag(). + + CVS patchset: 3579 + CVS date: 2000/02/23 01:48:51 + +commit 6ad3b578cb736f70c0a774166ba71f126f67fff1 +Author: jbj +Date: Tue Feb 22 21:19:33 2000 +0000 + + Another attempt to get i18n lookaside functional. + + CVS patchset: 3578 + CVS date: 2000/02/22 21:19:33 + +commit 9126b5c2c020ac51e87302bef5bee45f3d81e6b2 +Author: jbj +Date: Tue Feb 22 13:08:35 2000 +0000 + + sparc: 64bit find-{provides,requires}. + + CVS patchset: 3577 + CVS date: 2000/02/22 13:08:35 + +commit 3e1e638ba2d642de1902e0438b40764560ae844f +Author: jbj +Date: Tue Feb 22 13:04:06 2000 +0000 + + Sanity-0.43. + + CVS patchset: 3576 + CVS date: 2000/02/22 13:04:06 + +commit 1484d82ecd03fa2bb0e7e798eb0bdc391775040f +Author: jbj +Date: Tue Feb 22 12:05:13 2000 +0000 + + fix: filter excluded paths before adding install prefixes (#8709). + + CVS patchset: 3575 + CVS date: 2000/02/22 12:05:13 + +commit 0cb75458e015ead284e14c8ed3075cb25e97e21f +Author: jbj +Date: Tue Feb 22 03:11:30 2000 +0000 + + permit cli setting of build root policies. + + CVS patchset: 3574 + CVS date: 2000/02/22 03:11:30 + +commit c39e2a9ea09b9c57cd611a603af31c86f460519a +Author: jbj +Date: Tue Feb 22 03:09:53 2000 +0000 + + macro expansion (and absolute path) in %files -f arg (#9508,#9091). + + CVS patchset: 3573 + CVS date: 2000/02/22 03:09:53 + +commit 76b9a27eecd2b4f8e1af29d9b67ad9c0e079d3d3 +Author: jbj +Date: Tue Feb 22 01:09:16 2000 +0000 + + updated sv.po from . + + CVS patchset: 3572 + CVS date: 2000/02/22 01:09:16 + +commit 7b1e9c5a02c1640cce5f15d5f1ff4e8d3ac68542 +Author: jbj +Date: Mon Feb 21 10:32:01 2000 +0000 + + Avoid segfault on malformed %{!?FOO:} expansion (#9581). + + CVS patchset: 3571 + CVS date: 2000/02/21 10:32:01 + +commit 8feebaf1105ed6ff22702b5117522eb321a7bccc +Author: jbj +Date: Thu Feb 17 21:49:52 2000 +0000 + + Remove fuzzies. + + CVS patchset: 3570 + CVS date: 2000/02/17 21:49:52 + +commit bbcdd265694c3ea39517a96c56f4259648e062d1 +Author: jbj +Date: Thu Feb 17 21:00:06 2000 +0000 + + add sl.po from Primoz Peterlin . + + CVS patchset: 3569 + CVS date: 2000/02/17 21:00:06 + +commit 685f9f501b1b07b24a7f6bdac535b256b5f5f8d1 +Author: jbj +Date: Thu Feb 17 16:34:25 2000 +0000 + + Sanity (bump release). + + CVS patchset: 3568 + CVS date: 2000/02/17 16:34:25 + +commit 8439e6da013eff04ed49b8d55eb3689953e972ba +Author: jbj +Date: Thu Feb 17 16:29:28 2000 +0000 + + ENABLE_I18N_LOOKASIDE, take two. + + CVS patchset: 3567 + CVS date: 2000/02/17 16:29:28 + +commit 3a092572e8155e342920b403d4a2b8512bc6d868 +Author: jbj +Date: Thu Feb 17 16:26:52 2000 +0000 + + Use better RE and grep for exelist and liblist. + + CVS patchset: 3566 + CVS date: 2000/02/17 16:26:52 + +commit 015dd4088541a5656974eeea16aa15616e6a1576 +Author: sopwith +Date: Thu Feb 17 03:32:20 2000 +0000 + + Include shlib files. + + CVS patchset: 3565 + CVS date: 2000/02/17 03:32:20 + +commit b89ccd9be6122713f0aa10c20ccaaad94a487c75 +Author: jbj +Date: Wed Feb 16 19:10:42 2000 +0000 + + Disable i18n lookaside for now. + + CVS patchset: 3564 + CVS date: 2000/02/16 19:10:42 + +commit d7167e5b06411343310a06b70a4a73902182cd77 +Author: jbj +Date: Wed Feb 16 03:02:44 2000 +0000 + + Compress man pages early. + + CVS patchset: 3563 + CVS date: 2000/02/16 03:02:44 + +commit 8355c12f1f74c655908834f4fbec8ad083f3d76f +Author: jbj +Date: Wed Feb 16 00:36:55 2000 +0000 + + Improved cpanflute (Tim Powers). + + CVS patchset: 3562 + CVS date: 2000/02/16 00:36:55 + +commit 7c659d5969594ee3b02165826bb064271b2f1a3e +Author: jbj +Date: Wed Feb 16 00:33:16 2000 +0000 + + Improvements from Tim Powers. + + CVS patchset: 3561 + CVS date: 2000/02/16 00:33:16 + +commit 9358ab55e92d266900ea21d170adcd98fa721a4f +Author: jbj +Date: Tue Feb 15 22:17:43 2000 +0000 + + add scripts for autogenerating CPAN dependencies. + + CVS patchset: 3560 + CVS date: 2000/02/15 22:17:43 + +commit 0433f0617364374db62721413e9a1c3622fa4f91 +Author: jbj +Date: Tue Feb 15 16:43:30 2000 +0000 + + Sanity (make release). + + CVS patchset: 3559 + CVS date: 2000/02/15 16:43:30 + +commit 38e3c32e92f90cc3c62245b72c2ea287ab07f3d9 +Author: jbj +Date: Tue Feb 15 16:40:28 2000 +0000 + + new rpm-build package to isolate rpm dependencies on perl/bash2. + always remove duplicate identical package entries on --rebuilddb. + + CVS patchset: 3558 + CVS date: 2000/02/15 16:40:28 + +commit 6b70a982bc5ea599d32650a6b8ed45dac23cf8f8 +Author: jbj +Date: Tue Feb 15 16:00:00 2000 +0000 + + Fix inverted test on headerGetEntry return. + + CVS patchset: 3557 + CVS date: 2000/02/15 16:00:00 + +commit d932818c2369e9d39c2da0b8605a0f702a38ffde +Author: jbj +Date: Sun Feb 13 19:24:19 2000 +0000 + + Patches from PLD. + + CVS patchset: 3556 + CVS date: 2000/02/13 19:24:19 + +commit 277645f5b0d9aea985e1f266ed7bbcf0483abb6a +Author: jbj +Date: Sun Feb 13 19:23:55 2000 +0000 + + Implementation of i18n look-aside, no-op'ed for now. + + CVS patchset: 3555 + CVS date: 2000/02/13 19:23:55 + +commit 077cd4165f3e1ee97e16762ed30df1feb46bb2c9 +Author: jbj +Date: Fri Feb 11 23:16:47 2000 +0000 + + Report actual file name that failed to open. + + CVS patchset: 3554 + CVS date: 2000/02/11 23:16:47 + +commit eebe8047cced799ccff013be9318756349777ad0 +Author: msw +Date: Fri Feb 11 21:06:10 2000 +0000 + + add a method to fill the filelist fully + + CVS patchset: 3553 + CVS date: 2000/02/11 21:06:10 + +commit d54a9c27932856619af3dc87fef98d9af0b62df2 +Author: msw +Date: Fri Feb 11 20:29:22 2000 +0000 + + add compress/uncompress filelist + + CVS patchset: 3552 + CVS date: 2000/02/11 20:29:22 + +commit f35fa76d2d73af0d33289b463328391333b64114 +Author: jbj +Date: Fri Feb 11 19:20:51 2000 +0000 + + Typo. + + CVS patchset: 3551 + CVS date: 2000/02/11 19:20:51 + +commit 147c6789a9f198b77cbeff9aebe89ec0dbe70554 +Author: sopwith +Date: Fri Feb 11 04:44:14 2000 +0000 + + Makefile.am: Distribute test-poptrc, don't try to wildcard .po files. + testit.sh: Work with srcdir != builddir. + + CVS patchset: 3550 + CVS date: 2000/02/11 04:44:14 + +commit f7b80eb2113be009143e14c8cc526b30f97bc1f6 +Author: jbj +Date: Thu Feb 10 22:13:48 2000 +0000 + + Commit broken perl binding changes. + + CVS patchset: 3549 + CVS date: 2000/02/10 22:13:48 + +commit da3765de28bcafdaf705282e33543479b0d0014e +Author: jbj +Date: Thu Feb 10 00:27:21 2000 +0000 + + brp-compress deals with hard links correctly. + patch for ja.po. + + CVS patchset: 3548 + CVS date: 2000/02/10 00:27:21 + +commit 967484b1df58ed3870039547f1167350314dc9d1 +Author: msw +Date: Tue Feb 8 20:18:38 2000 +0000 + + nuke const warning + + CVS patchset: 3547 + CVS date: 2000/02/08 20:18:38 + +commit 2be6cc688dcbaf1f9312785433efd1b15318182d +Author: msw +Date: Tue Feb 8 20:01:30 2000 +0000 + + handle header format extensions + + CVS patchset: 3546 + CVS date: 2000/02/08 20:01:30 + +commit 855721fd090371d7ed57bf3507fda10f80fbb9c3 +Author: jbj +Date: Mon Feb 7 19:28:44 2000 +0000 + + Sanity (bump release). + + CVS patchset: 3545 + CVS date: 2000/02/07 19:28:44 + +commit f6e3e14f10af301a2ff4c9ecc02b9e3e4086ac95 +Author: jbj +Date: Sun Feb 6 19:07:13 2000 +0000 + + {Free,Open}BSD find-{provides,requires} (suzukis@file.phys.tohoku.ac.jp). + + CVS patchset: 3544 + CVS date: 2000/02/06 19:07:13 + +commit f7b7154b57dd4ae628c4eac68bc62a9cca8c37de +Author: jbj +Date: Sun Feb 6 19:05:36 2000 +0000 + + (From suzukis@file.phys.tohoku.ac.jp) + It seems that current rpm can work on FreeBSD, on OpenBSD, + and possibly on NetBSD (myself have not checked yet), but + find-provides and find-requires scripts are not provided + in rpm tarball. And, taking a glance on the "port"ed version + of rpm by FreeBSD people, they didn't write their own scripts. + Here's find-provides and find-requires for FreeBSD & OpenBSD. + I checked on FreeBSD-2.2.8 and OpenBSD-2.5 (possibly works on 2.6 too) + both a.out executable format. One of the known problem is + that following script cannot check the inter-library dependency. + On both systems, objdump is not bundled in default installation, + and even if you install objdump of GNU binutils, + it cannot check the inter-library dependency. + The recent FreeBSD and NetBSD are in ELF format, so should + be modified... I will send a version for FreeBSD-3.4 sooner + or later, but if anybody is interested in, please write. + I wish these scripts will be included in future version of rpm. + suzuki + + CVS patchset: 3543 + CVS date: 2000/02/06 19:05:36 + +commit 016eacb22a8decd8f37473c8559949c93135650e +Author: jbj +Date: Sun Feb 6 18:07:12 2000 +0000 + + Insure compression with -9 and handle symlinks correctly. + + CVS patchset: 3542 + CVS date: 2000/02/06 18:07:12 + +commit def2638570a88d6491d3e62365998228ec3ad75d +Author: msw +Date: Mon Jan 31 21:55:23 2000 +0000 + + merge from anaconda + + CVS patchset: 3541 + CVS date: 2000/01/31 21:55:23 + +commit 128700d1d69d74bc8ce760e503d398cd5f1c7087 +Author: ewt +Date: Mon Jan 31 16:42:12 2000 +0000 + + updated upgrade code to handle new format file lists + + CVS patchset: 3540 + CVS date: 2000/01/31 16:42:12 + +commit 6a63a1472b653b85843b10809a1218edd5bd30fa +Author: jbj +Date: Fri Jan 28 22:55:42 2000 +0000 + + Doxygen. + + CVS patchset: 3539 + CVS date: 2000/01/28 22:55:42 + +commit ef9f2f731f2f1803d5d0c533f5d55690b09f403c +Author: jbj +Date: Thu Jan 27 22:38:41 2000 +0000 + + Permit rpmrc/macros file as args to convetrpmrc.sh. + + CVS patchset: 3538 + CVS date: 2000/01/27 22:38:41 + +commit 64f2549d63dbd2dad25257fb221470c20da6e083 +Author: jbj +Date: Mon Jan 24 22:13:45 2000 +0000 + + Documentation comments. + + CVS patchset: 3537 + CVS date: 2000/01/24 22:13:45 + +commit 47ed2d60efb56b54b1a99ebb90941afd1a6619b1 +Author: jbj +Date: Mon Jan 24 22:08:58 2000 +0000 + + Sanity (bump release). + + CVS patchset: 3536 + CVS date: 2000/01/24 22:08:58 + +commit 4e095c79a7bdbcf7ca9b028053d92b404d540a14 +Author: jbj +Date: Mon Jan 24 22:03:52 2000 +0000 + + Args reversed generating untar command. + + CVS patchset: 3535 + CVS date: 2000/01/24 22:03:52 + +commit 3f679aa4d7633a9fa1529d8e1f715487d0a5b9f6 +Author: jbj +Date: Mon Jan 24 20:44:29 2000 +0000 + + explicitly expand file lists in writeRPM for rpmputtext. + + CVS patchset: 3534 + CVS date: 2000/01/24 20:44:29 + +commit dd35cf769bc4e3f46fd65c13bb2cccb64f074fcf +Author: jbj +Date: Mon Jan 24 20:02:32 2000 +0000 + + Documentation sugar. + + CVS patchset: 3533 + CVS date: 2000/01/24 20:02:32 + +commit 103b41c1d11b3b925dc253bf6372af5dd28e313f +Author: jbj +Date: Mon Jan 24 16:11:16 2000 +0000 + + fix: on --erase, segfault caused by "" prefix. + + CVS patchset: 3532 + CVS date: 2000/01/24 16:11:16 + +commit 9e9b42aa070906d26c32822642a61001d780e4ff +Author: jbj +Date: Mon Jan 24 14:34:14 2000 +0000 + + Pass size(...)-1 to avoid buffer overflow on links that are 1024b long. + + CVS patchset: 3531 + CVS date: 2000/01/24 14:34:14 + +commit 38b3bd8554506717d025b394285afc8c18bbd269 +Author: jbj +Date: Mon Jan 24 13:26:26 2000 +0000 + + fix: on --rebuilddb, make sure new/old paths are not the same (#8752). + + CVS patchset: 3530 + CVS date: 2000/01/24 13:26:26 + +commit 84d4aa7c11e71fc9ee6469683faf78b3a46f0387 +Author: jbj +Date: Sun Jan 23 23:27:29 2000 +0000 + + Exit if new db directory already exists when doing --rebuilddb. + + CVS patchset: 3529 + CVS date: 2000/01/23 23:27:29 + +commit 00304183a4e4a493fcecf89e2b8b95ba66c28cc4 +Author: jbj +Date: Wed Jan 19 22:51:39 2000 +0000 + + Doxygen fiddles. + + CVS patchset: 3528 + CVS date: 2000/01/19 22:51:39 + +commit 9a4edb2c30b0729d839cc19d1261afcd8597f47e +Author: jbj +Date: Wed Jan 19 20:54:53 2000 +0000 + + Preliminary support for doxygen generated API doco. + + CVS patchset: 3527 + CVS date: 2000/01/19 20:54:53 + +commit 9acd405dec10d71ad9c59c583eef1f5eb7eae78b +Author: jbj +Date: Wed Jan 19 19:54:08 2000 +0000 + + Doxygen fiddles. + + CVS patchset: 3526 + CVS date: 2000/01/19 19:54:08 + +commit 99c1eec9bf19b3af693343ed4df74d14cecf53fd +Author: jbj +Date: Wed Jan 19 19:20:56 2000 +0000 + + Preliminary support for doxygen generated API doco. + + CVS patchset: 3525 + CVS date: 2000/01/19 19:20:56 + +commit 9db5309a4568f08c1099de40e00a42b53cede293 +Author: jbj +Date: Mon Jan 17 18:58:36 2000 +0000 + + updated perl scripts (Ken Estes). + + CVS patchset: 3524 + CVS date: 2000/01/17 18:58:36 + +commit c3a725717a2418b4b446440807764c217e7677fe +Author: jbj +Date: Mon Jan 17 18:32:44 2000 +0000 + + Updated msgid's. + + CVS patchset: 3523 + CVS date: 2000/01/17 18:32:44 + +commit 9416c8bfd12321109f8e1ac4f824bcb05115474c +Author: jbj +Date: Mon Jan 17 18:12:32 2000 +0000 + + add %_rebuilddbpath macro to permit rebuilding db in new location. + + CVS patchset: 3522 + CVS date: 2000/01/17 18:12:32 + +commit ddaf37928146cd692ddd2125547073ab974fb9f9 +Author: jbj +Date: Mon Jan 17 14:03:44 2000 +0000 + + Typo. + + CVS patchset: 3521 + CVS date: 2000/01/17 14:03:44 + +commit 96c29a1ac76e5aa09e9cd7e8c2a44e0c66bc4554 +Author: jbj +Date: Sat Jan 15 14:17:07 2000 +0000 + + extract spec files from bzip'ped tarballs too on tar builds. + + CVS patchset: 3520 + CVS date: 2000/01/15 14:17:07 + +commit 5081e778c494ede6bb019b9b28b8c8fd5288e3f0 +Author: jbj +Date: Wed Jan 12 22:06:20 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3519 + CVS date: 2000/01/12 22:06:20 + +commit 0d185e8fb5eca20fccb5fd57645eed6f32d6db86 +Author: jbj +Date: Wed Jan 12 21:48:58 2000 +0000 + + fix: resurrect relative path's in fprint lookup queries. + + CVS patchset: 3518 + CVS date: 2000/01/12 21:48:58 + +commit ea3ab95e1768ecf47248180c87a97640010322e8 +Author: jbj +Date: Tue Jan 11 19:12:34 2000 +0000 + + default value for %_install_langs is all. + + CVS patchset: 3517 + CVS date: 2000/01/11 19:12:34 + +commit 483793a8776118bc968485f83a880e0cedb0fe24 +Author: jbj +Date: Tue Jan 11 16:13:16 2000 +0000 + + configurable compression type/level for package payloads. + + CVS patchset: 3516 + CVS date: 2000/01/11 16:13:16 + +commit 2e2da920eaf13d75d4694cfe12a5b324871d13bf +Author: jbj +Date: Tue Jan 11 15:40:11 2000 +0000 + + Orphan. + + CVS patchset: 3515 + CVS date: 2000/01/11 15:40:11 + +commit 9f35fb43733452c2e979dec182347e0b250567ea +Author: jbj +Date: Tue Jan 11 15:22:35 2000 +0000 + + configurable PATH for install %pre/%post et al scriptlets. + use only %_install_langs, not LINGUAS/LANG when deciding to install. + + CVS patchset: 3514 + CVS date: 2000/01/11 15:22:35 + +commit 8685f7a0deb76e24a40700da0208128b60de16d8 +Author: jbj +Date: Tue Jan 11 13:06:12 2000 +0000 + + updated sv.po (goeran@uddeborg.pp.se) (#8349). + + CVS patchset: 3513 + CVS date: 2000/01/11 13:06:12 + +commit 091acab1c8243a2db3f8fdf4c9326ff42af0c712 +Author: jbj +Date: Mon Jan 10 15:50:47 2000 +0000 + + add manpage for gendiff (pbrown@redhat.com). + + CVS patchset: 3512 + CVS date: 2000/01/10 15:50:47 + +commit 65e8fdb8f9bf5857e1c4ebf8adbefc566126037c +Author: jbj +Date: Fri Jan 7 17:32:27 2000 +0000 + + add several BuildRoot FTW policies. + + CVS patchset: 3511 + CVS date: 2000/01/07 17:32:27 + +commit ba46bbb4feb8c4fab914cfc835e953d8d94485a4 +Author: jbj +Date: Wed Jan 5 19:48:31 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3510 + CVS date: 2000/01/05 19:48:31 + +commit 98dd6f2c02a0c7d4d56b7793324fb41bad295946 +Author: jbj +Date: Wed Jan 5 19:46:45 2000 +0000 + + resurrect failed glob error message during build + + CVS patchset: 3509 + CVS date: 2000/01/05 19:46:45 + +commit 8d76e5e019c15c43c91e23fe5e878dcce7ff0ada +Author: jbj +Date: Tue Jan 4 13:12:07 2000 +0000 + + Correct open flags for signing packages. + Sanity (make dist). + + CVS patchset: 3508 + CVS date: 2000/01/04 13:12:07 + +commit a9327e66a6ce615b65d8d2c77e371384d92478f3 +Author: jbj +Date: Mon Jan 3 19:40:13 2000 +0000 + + Orphan. + + CVS patchset: 3507 + CVS date: 2000/01/03 19:40:13 + +commit 3a8b22e36a1c5e3e0aace0e7f032a43db5d5934e +Author: jbj +Date: Mon Jan 3 19:39:22 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3506 + CVS date: 2000/01/03 19:39:22 + +commit dccf7cc466e54d27776c334cf1bc4d71437a01fd +Author: jbj +Date: Mon Jan 3 19:37:56 2000 +0000 + + fix: manageFile needs to and with O_WRONLY(=1), not O_RDONLY(=0). + + CVS patchset: 3505 + CVS date: 2000/01/03 19:37:56 + +commit 24c9e3d63a7f1aa62e00e095a06964c9030f2e29 +Author: jbj +Date: Mon Jan 3 18:35:40 2000 +0000 + + Sanity (make dist). + + CVS patchset: 3504 + CVS date: 2000/01/03 18:35:40 + +commit 540413b30c1e27ac0e5d861c87dac49669b24aca +Author: jbj +Date: Mon Jan 3 18:32:49 2000 +0000 + + fix: fp.subDir was incorrectly set to NULL in sparse chroot's. + + CVS patchset: 3503 + CVS date: 2000/01/03 18:32:49 + +commit e0beefa28944f291392988a41db5604e487e4be8 +Author: jbj +Date: Thu Dec 30 19:17:03 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3502 + CVS date: 1999/12/30 19:17:03 + +commit f84337efb646ae318e36e433472d62240caf94a8 +Author: jbj +Date: Thu Dec 30 18:29:50 1999 +0000 + + Orphan. + + CVS patchset: 3501 + CVS date: 1999/12/30 18:29:50 + +commit 171f602c2728999ad459b045f64f502b8274f05e +Author: jbj +Date: Thu Dec 30 18:26:13 1999 +0000 + + add ja translation and man pages (Kanda Mitsuru kanda@nn.iij4u.or.jp). + + CVS patchset: 3500 + CVS date: 1999/12/30 18:26:13 + +commit f7833b54abc2f86bcb6bcf3dc29957269c851660 +Author: jbj +Date: Thu Dec 30 17:08:38 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3499 + CVS date: 1999/12/30 17:08:38 + +commit a718761d7ec7ffc9e136c1372e8139beb910c616 +Author: jbj +Date: Thu Dec 30 17:06:53 1999 +0000 + + Force python arrays for DIRNAMES/BASENAMES/DIRINDEXES. + + CVS patchset: 3498 + CVS date: 1999/12/30 17:06:53 + +commit b325535ff19dbc77a43e42808ffeb31c794e76bd +Author: jbj +Date: Fri Dec 24 14:54:34 1999 +0000 + + split python bindings into a separate sub-package of rpm. + + CVS patchset: 3497 + CVS date: 1999/12/24 14:54:34 + +commit 7007cb8ae4cdf69bdd9de43d29eb4dd73fd3c311 +Author: jbj +Date: Wed Dec 22 21:31:39 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3496 + CVS date: 1999/12/22 21:31:39 + +commit f74f748dcfd846b45715a4ba3e26907ec1073a7b +Author: jbj +Date: Wed Dec 22 21:30:28 1999 +0000 + + duplicate popt routine so that librpm.so needs not libpopt.so. + + CVS patchset: 3495 + CVS date: 1999/12/22 21:30:28 + +commit d2fb5c2be0e812fc3c767f885a2c68de31776683 +Author: jbj +Date: Tue Dec 21 17:16:08 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3494 + CVS date: 1999/12/21 17:16:08 + +commit 3b0700f77b8ad72f4cd7f1ffbfe4b1fc37740603 +Author: jbj +Date: Tue Dec 21 17:11:43 1999 +0000 + + lib/rpmio.c: Start weeding the debug messages. + lib/rpmio.c: Functional HTTP PUT. + + CVS patchset: 3493 + CVS date: 1999/12/21 17:11:43 + +commit 6e704014b740394aba2452f8fb78726925a78dcf +Author: jbj +Date: Sun Dec 19 19:55:14 1999 +0000 + + Initialize values behind pointers before calling rpmGet{Arch,Os}Info. + Sanity (make dist). + + CVS patchset: 3492 + CVS date: 1999/12/19 19:55:14 + +commit e6c1c88e7c0ab49ebfc35c18319b731d187be760 +Author: jbj +Date: Sun Dec 19 18:59:46 1999 +0000 + + Typo (t->num rather than tnum causes segfault while re-reading rpmrc on exit). + + CVS patchset: 3491 + CVS date: 1999/12/19 18:59:46 + +commit 2a7a110805a4ec51e5227e51147a831d4bfb8277 +Author: jbj +Date: Sat Dec 18 19:38:18 1999 +0000 + + fix: turn off stdio buffering if not opened O_RDONLY for now. + + CVS patchset: 3490 + CVS date: 1999/12/18 19:38:18 + +commit d76e89ddef99c60a271ece1910ba3e2da23906cd +Author: jbj +Date: Sat Dec 18 15:20:29 1999 +0000 + + Spelling correction. + + CVS patchset: 3489 + CVS date: 1999/12/18 15:20:29 + +commit eddf0228f58f33211313e9a8ff7bd61f7afdb38e +Author: jbj +Date: Thu Dec 16 21:58:19 1999 +0000 + + diddle some names to keep my C++ brethern happy (i.e. kpackage port). + + CVS patchset: 3488 + CVS date: 1999/12/16 21:58:19 + +commit 82a546f8f44fdd1cf14deb854816e0a29c63a39b +Author: jbj +Date: Thu Dec 16 19:38:28 1999 +0000 + + fix: missing strdup when overriding buildroot from command line + argument (#1026,#5006). + + CVS patchset: 3487 + CVS date: 1999/12/16 19:38:28 + +commit f7748bb6b3d73be7075ba442c61d6bfb682a1bfd +Author: jbj +Date: Wed Dec 15 21:51:07 1999 +0000 + + expose enough of legacy fdio interface to compile gnorpm. + + CVS patchset: 3486 + CVS date: 1999/12/15 21:51:07 + +commit 3da0771698b46ca6f83e29acaa4ea698586fc6a1 +Author: jbj +Date: Wed Dec 15 18:19:47 1999 +0000 + + Correct --tarball option (long name should have been --tarbuild). + + CVS patchset: 3485 + CVS date: 1999/12/15 18:19:47 + +commit d6cb9b8fda11e0e7a24b1010fc5b0b164ee40bfd +Author: jbj +Date: Wed Dec 15 17:10:31 1999 +0000 + + uninstall.c: rpmdbRemove used to have 2nd arg, tolerant = 0. This generates + an error message because of a db-1.85 hash access bug that cannot be + easily fixed. So, we turn off the error message. + + CVS patchset: 3484 + CVS date: 1999/12/15 17:10:31 + +commit 94a2aeab4880fdb11185ab124dbfe7c205f7e2d4 +Author: jbj +Date: Wed Dec 15 15:52:47 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3483 + CVS date: 1999/12/15 15:52:47 + +commit 4da2c641a09811b954bfd8effa8185f29c7dd0d2 +Author: jbj +Date: Wed Dec 15 15:52:47 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3482 + CVS date: 1999/12/15 15:52:47 + +commit 8885331b742acd8a827771fabe51b527c1b455b7 +Author: jbj +Date: Wed Dec 15 15:51:30 1999 +0000 + + fix: compressFileList was over-generating dirNames. + fix: alAddPackage sorted dirNames too soon, destroying dirMapping. + + CVS patchset: 3481 + CVS date: 1999/12/15 15:51:30 + +commit dab52919d121711f70e286416e2304733aa2e268 +Author: jbj +Date: Mon Dec 13 19:27:34 1999 +0000 + + NULL missing at end of packages-to-be-installed array. + + CVS patchset: 3480 + CVS date: 1999/12/13 19:27:34 + +commit 8f481702d8203c95d390f6eac93434019cf8d797 +Author: jbj +Date: Sun Dec 12 21:14:05 1999 +0000 + + reload macros from cmd line when re-reading config files. + + CVS patchset: 3479 + CVS date: 1999/12/12 21:14:05 + +commit 292b9f10befbeb1044d2db98f62de0e65aff3317 +Author: jbj +Date: Sun Dec 12 17:46:22 1999 +0000 + + lib/rpminstall.c: Perform glob on remote ftp install args. + lib/misc.[ch]: Rename remoteGlob to rpmGlob. Preserve glob_error behavior. + build/files.c: Ditto. + lib/rpmio.c: Collapse ftpFileDesc() into ftpReq(). + lib/rpmio.c: Eliminate all uses of u->path. + lib/url.c: Ditto. + lib/url.c: Tweak url cache code to reuse empty slots (never happens). + + CVS patchset: 3478 + CVS date: 1999/12/12 17:46:22 + +commit b438e61808c5a81b6d648a632278b6adc7db680e +Author: jbj +Date: Sun Dec 12 01:46:13 1999 +0000 + + perform glob on remote ftp queries. + fix: ftpAbort must close the data channel to read abort status. + + CVS patchset: 3477 + CVS date: 1999/12/12 01:46:13 + +commit 6f2127f425eea67893d12dc12e4f2bba2a64a100 +Author: jbj +Date: Sat Dec 11 17:55:20 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3476 + CVS date: 1999/12/11 17:55:20 + +commit a5c7e24cd9de4f232bdce21d513963b20f2dcd14 +Author: jbj +Date: Sat Dec 11 17:55:20 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3475 + CVS date: 1999/12/11 17:55:20 + +commit bd928fc23c2383de6ead25cd64fdc2f1210f88c5 +Author: jbj +Date: Sat Dec 11 17:53:25 1999 +0000 + + partial implementation for ftp globbing. + + CVS patchset: 3474 + CVS date: 1999/12/11 17:53:25 + +commit 7bcf51daa5454d86a6271c0de45e583f577d4b55 +Author: ewt +Date: Sat Dec 11 17:47:55 1999 +0000 + + doLookup() wasn't stat'ing / properly + + CVS patchset: 3473 + CVS date: 1999/12/11 17:47:55 + +commit 52b5346ed85c200e4609005242c823cbacab7fdf +Author: jbj +Date: Fri Dec 10 21:29:23 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3472 + CVS date: 1999/12/10 21:29:23 + +commit 3e251df497671a4fdbf2fb952252355c2aef9d36 +Author: jbj +Date: Fri Dec 10 21:29:23 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3471 + CVS date: 1999/12/10 21:29:23 + +commit f7be8892ddedca2cb0b7ec9c97354880c9e16040 +Author: jbj +Date: Fri Dec 10 21:26:58 1999 +0000 + + add contentLength sanity check on rpmdb headerWrite. + + CVS patchset: 3470 + CVS date: 1999/12/10 21:26:58 + +commit 8b63e8893f97921794630572436227c7d5dcb4e1 +Author: jbj +Date: Fri Dec 10 18:13:23 1999 +0000 + + fix: don't look at password when searching urlCache. + + CVS patchset: 3469 + CVS date: 1999/12/10 18:13:23 + +commit 16782dd67fa7014caa61518e4bdae1f39c8c13a0 +Author: jbj +Date: Fri Dec 10 15:44:12 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3468 + CVS date: 1999/12/10 15:44:12 + +commit ff438dd50d181d25ee0029f6d1332aaea8c2bb9b +Author: jbj +Date: Fri Dec 10 15:37:41 1999 +0000 + + Back out fix for dirIndexes memory leak. + + CVS patchset: 3467 + CVS date: 1999/12/10 15:37:41 + +commit bd109d5df5c914b3b3897d0344d61bf28e2aacb9 +Author: jbj +Date: Wed Dec 8 19:04:50 1999 +0000 + + rename new FILENAMES tags to BASENAMES/DIRNAMES/DIRINDEXES. + + CVS patchset: 3466 + CVS date: 1999/12/08 19:04:50 + +commit 132bdc063e023b2473056935f3f0dc182e79ecbe +Author: jbj +Date: Wed Dec 8 16:34:04 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3465 + CVS date: 1999/12/08 16:34:04 + +commit 77cdb93629dd680a292d6ab2011fc7a94bdac581 +Author: jbj +Date: Wed Dec 8 16:34:04 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3464 + CVS date: 1999/12/08 16:34:04 + +commit bd4e61e98e9a70c9b22948538460ed71d932d365 +Author: jbj +Date: Wed Dec 8 16:32:25 1999 +0000 + + fix: new filelists require package index, not pointer. + + CVS patchset: 3463 + CVS date: 1999/12/08 16:32:25 + +commit ca5882b322289dc644aa01e4ff662badfde6ca8b +Author: jbj +Date: Tue Dec 7 21:14:51 1999 +0000 + + Makefile.am: Add RPM-GPG-KEY to the package. + Use fdLink/fdFree for fd/scriptFd references in transaction set/availableList. + fprint.h: Permit (and check for) subDir = NULL in fingerPrints. + More lclint annotations. + + CVS patchset: 3462 + CVS date: 1999/12/07 21:14:51 + +commit 92a11a944b81bea96a3ab951d04b8cfdedf7d159 +Author: jbj +Date: Tue Dec 7 07:05:14 1999 +0000 + + Here is a patch for rpmdiff. It fixes a bug where I did not + understand the difference between: + 'FILEUIDS', 'FILEGIDS', + and + 'FILEGROUPNAME', 'FILEUSERNAME', + Ken + + CVS patchset: 3461 + CVS date: 1999/12/07 07:05:14 + +commit 4d81760947605d0378274447e9802d2233047d4f +Author: jbj +Date: Mon Dec 6 18:03:52 1999 +0000 + + fix: default for rd_timeoutsecs is 1 sec (avoid ufdio assertion). + + CVS patchset: 3460 + CVS date: 1999/12/06 18:03:52 + +commit a923894df743a8a106db80172d3bc1697554ba54 +Author: jbj +Date: Mon Dec 6 17:53:13 1999 +0000 + + fix: Fopen should use 0666 as default (umask will be applied later). + + CVS patchset: 3459 + CVS date: 1999/12/06 17:53:13 + +commit c56b542f6e290acef32bf804f4bfac93b583e7f6 +Author: jbj +Date: Sun Dec 5 21:23:55 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3458 + CVS date: 1999/12/05 21:23:55 + +commit acd32889f49328cccfdb4be351141a098ef2ae5c +Author: jbj +Date: Sun Dec 5 21:22:45 1999 +0000 + + expose enough of the legacy fdio interface to compile rpmfind/rpm2html. + + CVS patchset: 3457 + CVS date: 1999/12/05 21:22:45 + +commit b80c6385f40de1c066e27eadc08cde7ff025a1f4 +Author: jbj +Date: Thu Dec 2 21:58:04 1999 +0000 + + Handle both old and new style bash2 hacks for now. + + CVS patchset: 3456 + CVS date: 1999/12/02 21:58:04 + +commit d863da403bf652bbe253b3ce484ca1235beab2e8 +Author: jbj +Date: Thu Dec 2 20:38:44 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3455 + CVS date: 1999/12/02 20:38:44 + +commit 4ee67ca11a663db9b9c54a7c2ca15dd39fc622cb +Author: jbj +Date: Thu Dec 2 20:37:26 1999 +0000 + + Bump release. + + CVS patchset: 3454 + CVS date: 1999/12/02 20:37:26 + +commit 83e1c73b2f49e7542a698a6e7c260fcf9c795b6e +Author: jbj +Date: Thu Dec 2 18:30:31 1999 +0000 + + initial version of check-prereqs. + + CVS patchset: 3453 + CVS date: 1999/12/02 18:30:31 + +commit 2b8dc2ee5bee229a7e7886ee79e9dd4b2f8c6922 +Author: jbj +Date: Thu Dec 2 17:07:29 1999 +0000 + + fail to package if absolute symlink points within build root. + + CVS patchset: 3452 + CVS date: 1999/12/02 17:07:29 + +commit 7e8b64d33591bad6c877d6fe7660107cb339d7f5 +Author: jbj +Date: Thu Dec 2 16:31:35 1999 +0000 + + permit --whatprovides to lookup file dependencies. + + CVS patchset: 3451 + CVS date: 1999/12/02 16:31:35 + +commit fc75f4fc82f10d3d9e72d3978beda5ef2c9171d8 +Author: jbj +Date: Wed Dec 1 20:17:05 1999 +0000 + + Sanity (make dist). + + CVS patchset: 3450 + CVS date: 1999/12/01 20:17:05 + +commit 8da3fc6db1926f13aceb842860fbfd7d5a2871a5 +Author: jbj +Date: Wed Dec 1 20:00:39 1999 +0000 + + Solaris fiddles. + + CVS patchset: 3449 + CVS date: 1999/12/01 20:00:39 + +commit 8289346751e2d994a83416e90a67b5c96f4b07cd +Author: jbj +Date: Wed Dec 1 19:57:17 1999 +0000 + + Add underscore in front of (possibly) non-supported FDIO_t vectors. + Make buildFileList() part of rpmlib API as rpmBuildFileList(). + lib/rpmdb.c: Compare fingerprints from different caches by value. + + CVS patchset: 3448 + CVS date: 1999/12/01 19:57:17 + +commit 3678e4a3b548c00667db8587eb3061ac49ae3a67 +Author: jbj +Date: Tue Nov 30 18:41:12 1999 +0000 + + Sanity. + + CVS patchset: 3447 + CVS date: 1999/11/30 18:41:12 + +commit 920f41920e121328a2906246eba7b0cea7774849 +Author: jbj +Date: Tue Nov 30 18:39:50 1999 +0000 + + python/* needs to include "system.h". + + CVS patchset: 3446 + CVS date: 1999/11/30 18:39:50 + +commit 7a41cb8e4a8ab930e2cbd03d0fdf9f9eb3a7c073 +Author: jbj +Date: Tue Nov 30 18:27:49 1999 +0000 + + lib/transaction.c: Fix (in the right place) the dil memory leak. + + CVS patchset: 3445 + CVS date: 1999/11/30 18:27:49 + +commit 3c9bc3c94fcc2160f7cac9d09b8f94e5a333d64d +Author: jbj +Date: Tue Nov 30 18:13:39 1999 +0000 + + Update-po. + + CVS patchset: 3444 + CVS date: 1999/11/30 18:13:39 + +commit 06aedc29ca90537e91d0ed2b7a90493a8bd7d8e8 +Author: jbj +Date: Tue Nov 30 18:07:08 1999 +0000 + + lib/depends.c: Fix minor memory leak. + lib/fprint.c: Pass both dirName/baseName to fpLookup() to avoid memory leaks. + lib/rpmdb.c: ditto, and use scaremem=1. + lib/transaction.c: Fix minor memory leak. + + CVS patchset: 3443 + CVS date: 1999/11/30 18:07:08 + +commit 4e56943831a57ab9cc00182007ee55c6fc46ba1e +Author: jbj +Date: Tue Nov 30 14:49:45 1999 +0000 + + lib/install.c: Check errno and mkdir specdir/sourcedir only for local fs. + lib/rpmio.c: Create ftpOpen/httpOpen from ufdOpen case's. + lib/rpmio.c: ftpStat et al uses ftpOpen and NLST w/o path. + lib/query.c: Don't Fclose(fd) if fd == NULL. + + CVS patchset: 3442 + CVS date: 1999/11/30 14:49:45 + +commit c48ddf778309aae045945c372cc2eae9e60fcaa9 +Author: jbj +Date: Mon Nov 29 14:56:36 1999 +0000 + + Add timestamping to statistics. + Rudimentary display of statistics for GZDIO/BZDIO. + + CVS patchset: 3441 + CVS date: 1999/11/29 14:56:36 + +commit db3213b0574239c732f4a9e59a1e297589d3eb3c +Author: jbj +Date: Sat Nov 27 00:15:07 1999 +0000 + + lib/stubs.c: Add portability routines to rpmlib for portable shared rpmlib. + lib/rpmio.c: Internalize single use of inet_aton(). + lib/rpmio.h: Include libio.h retrofit here rather than in system.h. + configure.in: Remove regex/glob tests. + + CVS patchset: 3440 + CVS date: 1999/11/27 00:15:07 + +commit 4d26dfa475765173ecb06bf17bda66ddb179acad +Author: jbj +Date: Fri Nov 26 22:31:19 1999 +0000 + + Minimal python compile. + + CVS patchset: 3439 + CVS date: 1999/11/26 22:31:19 + +commit 90098c27571975cd88c05b617504d78e06187431 +Author: jbj +Date: Fri Nov 26 22:02:37 1999 +0000 + + Package 3.0.4-0.1 + + CVS patchset: 3438 + CVS date: 1999/11/26 22:02:37 + +commit 2c4c12af4f9f901fb07edc4a6c5d7f5e0f831ed6 +Author: jbj +Date: Fri Nov 26 22:00:02 1999 +0000 + + use directory tokens internally to reduce memory usage. + + CVS patchset: 3437 + CVS date: 1999/11/26 22:00:02 + +commit f202d104d070c43fa9b1f029fa85f6b7517ae5c6 +Author: jbj +Date: Fri Nov 26 21:58:42 1999 +0000 + + Consistent usage for fileNames, baseNames, dirNames and dirIndexes throughout. + rpm.c: Add --nodirtokens and --dirtokens to control file list compression. + lib/misc.c: Default (conservative) valuse _noDirTokens is TRUE. + lib/misc.c: Add expandFileList analogue to compressFileList. + build/pack.c: Compress file list only if compression is requested. + lib/rpmdb.c: Expand file list before headerWrite if compression not requested. + + CVS patchset: 3436 + CVS date: 1999/11/26 21:58:42 + +commit c8406c80d2a9670df64f1ab7e38d90626cad906f +Author: jbj +Date: Fri Nov 26 16:19:30 1999 +0000 + + lib/macro.c: Create rpmCleanPath(). + build/misc.c: Delete cleanFileName(). + + CVS patchset: 3435 + CVS date: 1999/11/26 16:19:30 + +commit 2a423cf9398d597b1320e95e864909e292f9c82f +Author: jbj +Date: Wed Nov 24 16:55:42 1999 +0000 + + Display message if GNU xgettext is not found. + + CVS patchset: 3434 + CVS date: 1999/11/24 16:55:42 + +commit 5144525bbc1936f7e0288718a7614ffa1c6ca63b +Author: jbj +Date: Wed Nov 24 16:16:17 1999 +0000 + + build/files.c: Remove dead code. + lib/cpio.c: Open file to be installed with "w" not "r+". + lib/fprint.c: Use variable length string keys for rpmdbFindByFile cache. + + CVS patchset: 3433 + CVS date: 1999/11/24 16:16:17 + +commit 4221ce1aa1fff15764b1620d904c713f8bc727ae +Author: jbj +Date: Wed Nov 24 00:03:54 1999 +0000 + + lib/macro.c: Canonicalize paths in rpmGetPath(). + build.c: ditto. + build/build.c: ditto. + build/files.c: ditto. + build/parsePreamble.c: ditto. + build/parseSpec.c: ditto. + build/myftw.c: Use Opendir/Readdir/Closedir wrappers. + lib/cpio.c: Use Readlink/Stat/Lstat wrappers while building archive. + lib/rpmio.c: functional ftpLstat, ftpStat and ftpReadlink. + + CVS patchset: 3432 + CVS date: 1999/11/24 00:03:54 + +commit abe7856bb066b68cffb378cd30771bc57bc49333 +Author: jbj +Date: Fri Nov 19 19:47:43 1999 +0000 + + Add reminder to export shell variables. + + CVS patchset: 3431 + CVS date: 1999/11/19 19:47:43 + +commit c6d768583ef384f1037d5d3fb3c73174cebd6bdf +Author: jbj +Date: Fri Nov 19 18:19:41 1999 +0000 + + macros.in: Add buildsubdir and scriptlet template macros. + build/build.c: Rewrite to use scriptlet templates. + build/files.c: Rename variables to prepare for (possibly) URL's in %files. + build/myftw.c: Use Lstat. + build/parsePreamble.c: Permit URL's in BuildRoot tag if not from spec file. + build/parseSpec.c: ditto + build/parsePrep.c: Add buildsubdir macro. + lib/macro.c: Add url2path (nickname u2p) and verbose macro primitives. + lib/url.c: urlPath returns "" if url is NULL (rpmGenPath memory corruption). + + CVS patchset: 3430 + CVS date: 1999/11/19 18:19:41 + +commit 1f6614e61efc520d2da0c09604d4ee1c06117073 +Author: jbj +Date: Thu Nov 18 18:07:46 1999 +0000 + + The death of lib/ftp.c, merged into lib/rpmio.c. + Start composting the rpmio API. + Preliminary (not working) support for HTTP PUT. + build.c: Check fd for NULL and use Ferror() for Fopen return. + build/parseSpec.c: ditto + build/pack.c: Use fdGetFP() rather than fpio->ffileno(). + build/parseSpec.c: ditto + build/pack.c: Use Stat/Mkdir wrappers. + build/pack.c: Do Fflush before fdDup so that writes can remain buffered. + lib/install.c: ditto + build/parsePrep.c: Skip over URL leadin when writing %prep scriptlet. + lib/misc.c: Rewrite to use simpler urlPath(). Restore checks on local fs. + lib/rpmchecksig.c: Open with "r+" rather than "w" to avoid truncation. + lib/url.c: Do lazy malloc of u->buf in rpmio.c checkResponse(). + lib/rpmio.c: Make persist/contentLength per-fd rather than per-url. + lib/rpmio.c: Add wr_chunked method for HTTP PUT (still broken). + lib/rpmio.c: ftpAbort() should use timedRead. + lib/rpmio.c: Add Fflush(). + lib/url.c: urlPath() should return something ("/") on url = NULL (paranoia). + lib/url.c: urlSplit() should return something ("/") on url w/o path. + + CVS patchset: 3429 + CVS date: 1999/11/18 18:07:46 + +commit 3a6118d4194d9672b24cd7b357e6191f4eb47fde +Author: jbj +Date: Thu Nov 18 17:10:15 1999 +0000 + + From: Dick Porter -- + Here is a patch for popt to implement selective argument stripping from argv. + With this patch I can use popt in ORBit (the CORBA spec requires ORBs to + remove all ORB options from argv), which allows me to export a popt option + table to the rest of Gnome. + There is also a bug fix included where a string was realloc()d into a space + too small to hold the trailing NULL. + + CVS patchset: 3428 + CVS date: 1999/11/18 17:10:15 + +commit 284ac8bec49c6a708dd096c17115c34c3cd8bc80 +Author: jbj +Date: Thu Nov 18 16:57:45 1999 +0000 + + fix: realloc didn't include space for trailing NUL. + + CVS patchset: 3427 + CVS date: 1999/11/18 16:57:45 + +commit 1140a20ef80e32b3ab3da9153cab8e940dcc58ed +Author: jbj +Date: Mon Nov 15 23:57:18 1999 +0000 + + Make static fd in transaction callback persistent. + + CVS patchset: 3426 + CVS date: 1999/11/15 23:57:18 + +commit 07fa5616811da29b4e4630288864f858b019e77f +Author: jbj +Date: Mon Nov 15 22:16:54 1999 +0000 + + rpm.c: Add --ftpdebug, --urldebug, --rpmiodebug (for my sanity). + build/pack.c: Remove unnecessary persist in package{Sources,Binaries}. + lib/rpmio.c: Expose fdGetFp() for use in url.c. + lib/rpmio.c: Debug refs with FILE/FTP/HTTP url's. + lib/url.c: Push fp in order to use Fclose() when cleaning up url cache. + + CVS patchset: 3425 + CVS date: 1999/11/15 22:16:54 + +commit 4e62a322a266e9d95007540d10e67fc75bf80aa7 +Author: jbj +Date: Sun Nov 14 19:15:18 1999 +0000 + + lib/rpmio.c: Implement per-fd layers as a stack, add fdPush/fdPop. + lib/rpmio.c: Add fd{Get,Set}{Io,Fp,Fdno} abstraction wrappers. + lib/rpmio.c: Start rationalizing debug output by using fdbg to display the + fd layer stack. + rpm.c: Add --nolibio to disable libio if desired. + rpm2cpio.c: Use Fdopen(..., gzdio) and ufdCopy(). + build/build.c: Use Fdopen(..., fpio) rather than fdio. + build/files.c: Use Fdopen(..., fpio) rather than ufdio. + build/parseSpec.c: ditto. + lib/macro.c: ditto. + lib/rpmrc.c: ditto + lib/macro.c: Use Fopen(..., ufdio) in isCompressed() rather that fdOpen(). + lib/misc.c: ditto. + lib/misc.c: Avoid fstat by using Stat. + build/pack.c: Add persist fdLink() and use fdFree() in package{Sources,Binaries} + build/pack.c: Try to remove the fdDup before cpioBuildArchive() call. + build/pack.c: Use rpmGenPath with %{_builddir}. + build/parsePreamble.c: Use fdSize rather than Stat to get icon file size. + lib/rpmrc.c: ditto + lib/ftp.c: start capturing ufdio layer syserrno/errcookie. + + CVS patchset: 3424 + CVS date: 1999/11/14 19:15:18 + +commit 471ba3b2386a15b5cd0ad202238dd38161788416 +Author: jbj +Date: Fri Nov 12 21:26:04 1999 +0000 + + add/update dependency scripts (Ken Estes). + + CVS patchset: 3423 + CVS date: 1999/11/12 21:26:04 + +commit 8ce88756fdb4a1cd88085acfac49c3a7180bb1bb +Author: jbj +Date: Fri Nov 12 17:20:49 1999 +0000 + + Use Fstrerror on ufdio throughut. + rpm.c: add --rmspec to usage output. + build/files.c: use ufdio to permit '%files -f ' (untested). + build/pack.c: use ufdio in readRPM(), writeRPM(), and addFileToTag(). + build/parsePreamble.c: use ufdio in readIcon(). + lib/ftp.c: httpOpen() now takes FD_t ctrl arg to uncouple from u->ctrl. + lib/install.c: usr rpmGenPath() to identify first found url in file path concat. + lib/install.c: permit url's in files[i].relativePath. + lib/macro.c: use ufdio, diddle macros for tmacro standalone build. + lib/macro.c: Create rpmGenPath(). + lib/macro.c: diddle macro files path to permit url's. + lib/rpmchecksig.c: use Fopen on fdio. + lib/rpmio.c: replace copyData() with ufdCopy(). + lib/rpmio.c: replace httpGetFile() with ufdGetFile(). + lib/rpmio.c: add ufdWrite(). + lib/rpmio.c: permit 2 simultaneous persistent malloc/open HTTP/1.1 connections. + lib/rpmio.c: Add Lstat(), Stat(), and Access(). + lib/rpmio.c: assume paths in syscall stubs are loopback (WRONG). + lib/url.c: add urlPath(). + + CVS patchset: 3422 + CVS date: 1999/11/12 17:20:49 + +commit e0b1d0be3607ef673555ca17078bfff6f854267e +Author: jbj +Date: Wed Nov 10 22:09:49 1999 +0000 + + Swap 2nd and 3rd arg to Fread/Fwrite to preserve read/write type return. + Use Fstrerror to retrieve fd->syserrno. + Make ftpFileDoneNeeded per-fd rather than per-url. + Make data fd unique rather than per-url. + Use appropriate protocol commands for ufdio writing. + + CVS patchset: 3421 + CVS date: 1999/11/10 22:09:49 + +commit aeab1e959d1fb383a0ff21924bff0edd01404fab +Author: jbj +Date: Tue Nov 9 20:57:38 1999 +0000 + + fix: typo in error message (#6858). + tufdio.c: Create. + rpmurl.h: Add ctrl, data, buf, and bufAlloced to urlinfo. UFDSANE assertion. + rpmio.h: Add fdWritable(), fdReadable(), fdRdline(), exported (for now) to + ftp.c checkResponse(). + ftp.c: checkResponse() rewritten to use above. + ftp.c: checkResponse() handles html in 501 response on closed http connection. + ftp.c: ftpCommand() rewritten to simplify (using stpcpy). + ftp.c: httpOpen() now reopens time-out persistent connection. + ftp.c: Get rid of O_NONBLOCK reads, not necessary AFAICT. + ftp.c: ftpFileDesc() uses u->data rather than passed in fd arg. + Use a consistent refcounting scheme to achieve persistent malloc and open ctrl. + query.c: get ready for Remglob(). + rpmio.c: ftpCmd() functional (using tufdio). + + CVS patchset: 3420 + CVS date: 1999/11/09 20:57:38 + +commit 20cafc16fec4345edef90a5e8586de6434eed773 +Author: jbj +Date: Sat Nov 6 20:44:11 1999 +0000 + + Sanity. + + CVS patchset: 3419 + CVS date: 1999/11/06 20:44:11 + +commit e8c7c6893ce0de37de7218d6419ca31452eaa601 +Author: jbj +Date: Fri Nov 5 20:00:26 1999 +0000 + + rpmio.c: Add per FD_t syserrno, read timers and simple counting statistics. + rpmio.c: Honor contentLength to prevent R/W I/O dribbles. + ftp.c: Support for HTTP/1.1 with persistent connection. + ftp.c: Read (and set) Content-Length and HTTP minor version from reply. + + CVS patchset: 3418 + CVS date: 1999/11/05 20:00:26 + +commit 3363604c7076329e431afdc975f205b54f088631 +Author: jbj +Date: Thu Nov 4 21:26:08 1999 +0000 + + Use Fopen almost everywhere. + Rip out --enable-bzip2-payload, we'll use Fopen w macros instead. + Work out ref counting for ftpControl so that control channel is persistent. + build/build.c: Use fpio to write build stage script. + parseSpec.c: Rework include stack to use FD_t, not FILE *. + tread.c: Delete, use ufdio->read instead. + rpmio.c: Filter out fdio fd == NULL assertion failures. + rpmrc.c: Don't fail if HOME is not environment. + rpmrc.c: Rework ufdio FTP rcfile I/O to be more similar to stdio. + + CVS patchset: 3417 + CVS date: 1999/11/04 21:26:08 + +commit 94dd9f796e8c8fa7b59e9690d8d0cf476313e5a5 +Author: jbj +Date: Wed Nov 3 20:33:53 1999 +0000 + + First use of libio. + + CVS patchset: 3416 + CVS date: 1999/11/03 20:33:53 + +commit 85d4129c7bedafd466625fd4400ea5607e2f09a1 +Author: jbj +Date: Tue Nov 2 17:56:30 1999 +0000 + + Move most of the ftp and http interface to rpmio.c. + + CVS patchset: 3415 + CVS date: 1999/11/02 17:56:30 + +commit 7fc3a97733080a03e8bb3872bd37019db483b93c +Author: jbj +Date: Tue Nov 2 14:33:14 1999 +0000 + + Add ref/deref/new/fileno/open vectors to FDIO_t. + Hide fdOpen/ufdOpen, use {fdio,ufdio}->open throughout. + url.c: Create ref counted abstract urlinfo type with debugging. + url.c: Rename functions to urlNew/urlFree/urlFreeCache for consistency. + rpmio.c: Create ref counted abstract FD_t type with debugging. + rpmio.c: Create private struct _FD_s type. + cpio.c: Create fd[GS]etCpioPos to preserve FD_t abstraction. + + CVS patchset: 3414 + CVS date: 1999/11/02 14:33:14 + +commit 65a08c9e60c0bff0e09cfdcc98ca97910ab24ac5 +Author: jbj +Date: Mon Nov 1 23:23:09 1999 +0000 + + fix: expandNextArg() can't permit '\\' escapes. + + CVS patchset: 3413 + CVS date: 1999/11/01 23:23:09 + +commit b1cb8f1b3ed725542bbba6a8f2fe6a1722c2e632 +Author: jbj +Date: Mon Nov 1 19:03:31 1999 +0000 + + Typo. + + CVS patchset: 3412 + CVS date: 1999/11/01 19:03:31 + +commit decd6483206dd25fac8032957f67286552904123 +Author: jbj +Date: Mon Nov 1 19:02:46 1999 +0000 + + freshen.sh: detect when all packages are up to date (Ian Macdonald). + + CVS patchset: 3411 + CVS date: 1999/11/01 19:02:46 + +commit efa7fc6d03dbff3b6900063bb58f45b5a84aff95 +Author: jbj +Date: Mon Nov 1 14:29:37 1999 +0000 + + ftp.c: Preserve FD_t abstraction by creating fdDebug()/ufdSetFd(). + + CVS patchset: 3410 + CVS date: 1999/11/01 14:29:37 + +commit b57249fd5e6a292a6d6aec9c0ec4b9d2fecb08d1 +Author: jbj +Date: Sun Oct 31 21:38:21 1999 +0000 + + Spec: Add rootdir (as in chroot). + parseSpec(): Pass rootdir argument. + rpm.c: Rework bigMode enum to simplify per-mode option checks. + build/build.c: Attempt a chroot before execl(). + falloc.c: thinko: test for non-existent packages database was broke. + makeTempFile(): Skip possible URL leader on tempfile name expansion. + rpmio.c: Mkdir/Chdir/Rmdir/Rename/Chroot/Unlink syscall wrappers. + rpmdb.c: Coalesce and simplify legacy openDatabase() wrappers. + uninstall.c: Skip possible URL leader on chroot arg. + + CVS patchset: 3409 + CVS date: 1999/10/31 21:38:21 + +commit 3d087dcf52531f766af0c503a6cbddfaef84f86a +Author: jbj +Date: Sat Oct 30 21:26:45 1999 +0000 + + Rename faFoo() routines, use FD_t I/O with fadio cookie throughout. + Try to be URL sensitive on filename arguments throughout. + falloc.c: Eliminate faFile, use FD_t. + falloc.c: preserve abstract FD_t by creating fadGet*()/fadSet*(). + macro.c: rpmGetPath() expansions were clobbering URL's. + rpmio.c: create Fcntl(), Pread(), Pwrite() from previous faFoo(). + rpmio.c: attempt per FD_t debugging. + rpm.c: permit --dbpath with --rebuild. + + CVS patchset: 3408 + CVS date: 1999/10/30 21:26:45 + +commit 2b84d36c2edb0acd8f47bd3316e1535cfdf60fc0 +Author: jbj +Date: Sat Oct 30 16:43:29 1999 +0000 + + Make fdFileno() static, use Fileno()/Ferror() analogues throughout. + Make ufdClose() static, use Fclose() with ufdio cookie throughout. + rpm.c: Clean urlinfoCache and rpmBuildArgs leaks. + url.c: urlIsURL() should be here, not in rpmio.c. + url.c: Preserve FD_t abstraction by creating ufdGetUrlinfo(). + url.c: Create freeUrlinfoCache(). + rpmio.c: Create ufdio cookie. + + CVS patchset: 3407 + CVS date: 1999/10/30 16:43:29 + +commit 533991efdbbeff0c0f3b6f5b008c748ee61bc85e +Author: jbj +Date: Sat Oct 30 16:17:02 1999 +0000 + + Merged back into rpmio.c. + + CVS patchset: 3406 + CVS date: 1999/10/30 16:17:02 + +commit 1484a93a3f9a46d91b732c9d20ab7a24f7bee413 +Author: jbj +Date: Sat Oct 30 16:16:30 1999 +0000 + + Sanity. + + CVS patchset: 3405 + CVS date: 1999/10/30 16:16:30 + +commit 7b4cf4bf196bbc8477fb5aae8a37c56f20c6aaa2 +Author: jbj +Date: Fri Oct 29 23:03:12 1999 +0000 + + fix: resurrect multiple target platform builds. + + CVS patchset: 3404 + CVS date: 1999/10/29 23:03:12 + +commit 1e0138188b4887431444d90395be0f2fac5c2db3 +Author: jbj +Date: Fri Oct 29 16:06:01 1999 +0000 + + check for memory leaks (almost all leaks are plugged). + + CVS patchset: 3403 + CVS date: 1999/10/29 16:06:01 + +commit 0d0b405c201b43f2eebc61257f5992931e1cdb0c +Author: jbj +Date: Wed Oct 27 23:18:10 1999 +0000 + + use compressed filenames on install side. + start unifying FD types, CFD_t now gone. + + CVS patchset: 3402 + CVS date: 1999/10/27 23:18:10 + +commit 82c75cb6a261465700ca469793b54ad68bef99a8 +Author: jbj +Date: Mon Oct 25 20:10:00 1999 +0000 + + Add poptDupArgv() and const's to popt.3 man page. + + CVS patchset: 3401 + CVS date: 1999/10/25 20:10:00 + +commit b074f1e2e712870d73613b4f8d848e963182b7e5 +Author: jbj +Date: Mon Oct 25 19:07:14 1999 +0000 + + lclint annotations. + + CVS patchset: 3400 + CVS date: 1999/10/25 19:07:14 + +commit ba1f155cdcd759363d00a1d0a9317c720c584d84 +Author: jbj +Date: Mon Oct 25 18:24:38 1999 +0000 + + Lazy allocation of deleted arg bit map. + + CVS patchset: 3399 + CVS date: 1999/10/25 18:24:38 + +commit 1cdcd275a8b81a8e5258a0696ab198ccfd7408ca +Author: jbj +Date: Mon Oct 25 18:22:19 1999 +0000 + + Add !#:+ token parsing to retrieve (and delete) next argument from list. + + CVS patchset: 3398 + CVS date: 1999/10/25 18:22:19 + +commit e2d517c67ce9c4a100bad0e44f17b930e4b457b7 +Author: jbj +Date: Fri Oct 22 18:25:39 1999 +0000 + + Modify test1 to do poptResetContext before parsing args. + + CVS patchset: 3397 + CVS date: 1999/10/22 18:25:39 + +commit d4fed4bde1aafd03c328b7ebd710a8e33c7f2203 +Author: jbj +Date: Fri Oct 22 18:10:51 1999 +0000 + + fix: long options like "--long=val" needed longArg reset to NULL at top of + poptGetNextOpt() while loop. + Variables in poptGetNextOpt() are also locally scoped. + + CVS patchset: 3396 + CVS date: 1999/10/22 18:10:51 + +commit d5b272105ba8b2a9e38cb70166f503bd974f5ee5 +Author: jbj +Date: Thu Oct 21 21:38:18 1999 +0000 + + Functional "make check". + + CVS patchset: 3395 + CVS date: 1999/10/21 21:38:18 + +commit bd34f27bb4617a172b1fee3be70b040e041858a1 +Author: jbj +Date: Thu Oct 21 20:36:16 1999 +0000 + + lclint annotations and compiler cruft. + + CVS patchset: 3394 + CVS date: 1999/10/21 20:36:16 + +commit c8b83b08c57667fe92ad68a76eba9dff8abd031e +Author: jbj +Date: Thu Oct 21 18:48:00 1999 +0000 + + lclint annotations. + + CVS patchset: 3393 + CVS date: 1999/10/21 18:48:00 + +commit 8bf4afe2d738ede9a3c5567da6679205ac9b6f5a +Author: jbj +Date: Thu Oct 21 18:20:29 1999 +0000 + + Create. + + CVS patchset: 3392 + CVS date: 1999/10/21 18:20:29 + +commit d1a5cef88a7340caf881c5a7b1689bcaf37f06c4 +Author: jbj +Date: Thu Oct 21 18:20:12 1999 +0000 + + lclint annotations. + + CVS patchset: 3391 + CVS date: 1999/10/21 18:20:12 + +commit 3ae84a6867ec831d2a3bcc0423565104626efd28 +Author: jbj +Date: Thu Oct 21 15:04:25 1999 +0000 + + lclint annotations. + + CVS patchset: 3390 + CVS date: 1999/10/21 15:04:25 + +commit 1bcfa7ac608310ff018e9fca851f64d61ec99ddf +Author: ewt +Date: Thu Oct 21 02:40:57 1999 +0000 + + got installs/removes working with new file lists + + CVS patchset: 3389 + CVS date: 1999/10/21 02:40:57 + +commit e6698260f453b3f9418a8d7fdbbd6d764ef99606 +Author: jbj +Date: Wed Oct 20 21:47:42 1999 +0000 + + Use xmalloc/xrealloc/xstrdup. + + CVS patchset: 3388 + CVS date: 1999/10/20 21:47:42 + +commit 6defa683eb5eab3411a1bd827106ccf45edfd7f3 +Author: jbj +Date: Wed Oct 20 21:40:10 1999 +0000 + + lclint annotations. + + CVS patchset: 3387 + CVS date: 1999/10/20 21:40:10 + +commit 574cad11f200498c52daf162d71b22c928926534 +Author: jbj +Date: Wed Oct 20 18:38:37 1999 +0000 + + Tyo: RPMTAG_COMPFILENAMES is ...COMPFILELIST. + Remove compiler warnings. + + CVS patchset: 3386 + CVS date: 1999/10/20 18:38:37 + +commit 22947b332ed67b529c33e60ed0309e55ec7de678 +Author: jbj +Date: Wed Oct 20 16:48:10 1999 +0000 + + perl from /usr/bin + + CVS patchset: 3385 + CVS date: 1999/10/20 16:48:10 + +commit b38f7bc532b038cfc0aac13ba8a7ff15c6c6b923 +Author: jbj +Date: Wed Oct 20 16:46:54 1999 +0000 + + Dependency code from Ken Estes. + + CVS patchset: 3384 + CVS date: 1999/10/20 16:46:54 + +commit 925c8130d5e4b8399e45e79b6253df5f8a8de760 +Author: ewt +Date: Wed Oct 20 10:22:46 1999 +0000 + + another batch of changes for new file list format -- one more to go + + CVS patchset: 3383 + CVS date: 1999/10/20 10:22:46 + +commit 28c54f8f22bd0185fd587d63cae27f4542f9edd8 +Author: ewt +Date: Sun Oct 17 20:59:39 1999 +0000 + + relocations work better now + + CVS patchset: 3382 + CVS date: 1999/10/17 20:59:39 + +commit 00ba060900a25d1521edf8018da17c4a0804550f +Author: jbj +Date: Mon Oct 11 16:37:55 1999 +0000 + + Start rpm-3.0.4. + + CVS patchset: 3381 + CVS date: 1999/10/11 16:37:55 + +commit 87c7c2f8d7fe1e0a8cf430448dccc625d1d5a347 +Author: jbj +Date: Mon Oct 11 15:47:27 1999 +0000 + + Add quotes to check for file list existence (nigel@pobox.com). + + CVS patchset: 3380 + CVS date: 1999/10/11 15:47:27 + +commit cfa9ce427b7c5e2dbb9eba9fe94fff59833d53b3 +Author: ewt +Date: Fri Oct 8 20:30:49 1999 +0000 + + support new file list format for relocations and package removal + + CVS patchset: 3379 + CVS date: 1999/10/08 20:30:49 + +commit 568dceb42b2cdaaeafdcab97e155475ef6d1f2b2 +Author: jbj +Date: Fri Oct 8 17:42:02 1999 +0000 + + Do lseek as part of readp/writep. + + CVS patchset: 3378 + CVS date: 1999/10/08 17:42:02 + +commit 8ef4ebd1331eed2ff91feda99a0ad7726a083743 +Author: jbj +Date: Fri Oct 8 16:38:33 1999 +0000 + + Use xmalloc/xstrdup rather than malloc/strdup. + + CVS patchset: 3377 + CVS date: 1999/10/08 16:38:33 + +commit 1ba4ccb8706d27ba8e5da5d9fc03544af1445b56 +Author: ewt +Date: Wed Oct 6 22:52:35 1999 +0000 + + use OLDFILENAMES tag + + CVS patchset: 3376 + CVS date: 1999/10/06 22:52:35 + +commit c0f5d38f862c428849bf73e9242d475a33f08c31 +Author: ewt +Date: Wed Oct 6 22:52:12 1999 +0000 + + updated for compressed file lists -- dep check should stay much smaller + now + + CVS patchset: 3375 + CVS date: 1999/10/06 22:52:12 + +commit 360c32cb66543a85d9b3a2befc1e97f6af9e8ea1 +Author: ewt +Date: Wed Oct 6 22:51:53 1999 +0000 + + rpmdbFindByFile() deals with compressed file lists + + CVS patchset: 3374 + CVS date: 1999/10/06 22:51:53 + +commit f90d8e7415fe75045db5db5504016c0ba5773a8e +Author: ewt +Date: Wed Oct 6 22:50:55 1999 +0000 + + moved removed of extra UID information from header here from dependency + code (why was it ever there?) + + CVS patchset: 3373 + CVS date: 1999/10/06 22:50:55 + +commit 2423cad4c41645bf43f8b6201d6ef5f2a6ed6481 +Author: ewt +Date: Wed Oct 6 18:29:27 1999 +0000 + + fixed bug w/ compressing file lists + + CVS patchset: 3372 + CVS date: 1999/10/06 18:29:27 + +commit c04fd2f1e4cfdba7a69db2ee9a9e79e890ee3fc3 +Author: ewt +Date: Wed Oct 6 15:51:38 1999 +0000 + + write out compressed file lists *only* -- this is for sanity, we'll write + out both sets for compatibility once the rest of the stuff starts to work + + CVS patchset: 3371 + CVS date: 1999/10/06 15:51:38 + +commit 4cfb2f8d63490f0bc7508bd25a2fc519d19e0707 +Author: ewt +Date: Wed Oct 6 15:51:14 1999 +0000 + + first steps toward getting compressed file lists to work -- most things + are still *horribly* broken + + CVS patchset: 3370 + CVS date: 1999/10/06 15:51:14 + +commit 55773323ccd3b5f4a0bac80d468c4cdbf572376f +Author: jbj +Date: Mon Oct 4 22:04:20 1999 +0000 + + Rpm 3.0.3 release. + + CVS patchset: 3369 + CVS date: 1999/10/04 22:04:20 + +commit 1f815adc05bfef382d99696661f3c853e464b403 +Author: jbj +Date: Mon Oct 4 21:00:30 1999 +0000 + + Poertability. + + CVS patchset: 3368 + CVS date: 1999/10/04 21:00:30 + +commit be45257fd9ca72ea8d450afe20ea3fc8254f0798 +Author: jbj +Date: Mon Oct 4 20:18:48 1999 +0000 + + dumb cpp's want white space around lclint annotations (Tim Mooney). + aix: aix.req broken by cut-and-paste (Tim Mooney). + + CVS patchset: 3367 + CVS date: 1999/10/04 20:18:48 + +commit cabcec362682a5bd68d5acc2191333cb903a2e4e +Author: jbj +Date: Mon Oct 4 19:40:03 1999 +0000 + + lclint annotations from build. + + CVS patchset: 3366 + CVS date: 1999/10/04 19:40:03 + +commit 767f75648fb05790ddb3200cba8ddf730a136dd2 +Author: jbj +Date: Mon Oct 4 17:29:58 1999 +0000 + + fix: non-GNU globs burp on repeated '/' in patterns. + + CVS patchset: 3365 + CVS date: 1999/10/04 17:29:58 + +commit 9336fba9832d8ebf9e325b15f96961f2ca92507c +Author: jbj +Date: Mon Oct 4 15:15:46 1999 +0000 + + Display errno on getOutputFrom() fork/exec failures. + + CVS patchset: 3364 + CVS date: 1999/10/04 15:15:46 + +commit f72d5eec3bb762c1e158b7abd2e1538019c73c5b +Author: jbj +Date: Thu Sep 30 21:40:20 1999 +0000 + + Sanity. + + CVS patchset: 3363 + CVS date: 1999/09/30 21:40:20 + +commit 907e305591fab72f5c152c134bfe0a999f5d6753 +Author: jbj +Date: Thu Sep 30 21:20:34 1999 +0000 + + Build on solaris2.6 with gcc. + + CVS patchset: 3362 + CVS date: 1999/09/30 21:20:34 + +commit 46b128762bf88581fbca33d00129c32e559e2c94 +Author: jbj +Date: Thu Sep 30 21:10:04 1999 +0000 + + Sanity. + + CVS patchset: 3361 + CVS date: 1999/09/30 21:10:04 + +commit 4310a0aa2ac5d5a714898d35b3ca83cff7937fbe +Author: jbj +Date: Thu Sep 30 20:14:16 1999 +0000 + + Sanity. + + CVS patchset: 3360 + CVS date: 1999/09/30 20:14:16 + +commit 1db2e3df7a24397d83f4db7229aae94ed01ae9d6 +Author: jbj +Date: Thu Sep 30 20:04:03 1999 +0000 + + Sanity. + + CVS patchset: 3359 + CVS date: 1999/09/30 20:04:03 + +commit 082c8bba35d4ea9257e9a2f411e071b3b7b8847f +Author: jbj +Date: Thu Sep 30 19:37:54 1999 +0000 + + Sanity. + + CVS patchset: 3358 + CVS date: 1999/09/30 19:37:54 + +commit a7d1b1a2c90b2ac1bb931cf36933b324c64695b9 +Author: jbj +Date: Thu Sep 30 19:31:44 1999 +0000 + + Sanity. + + CVS patchset: 3357 + CVS date: 1999/09/30 19:31:44 + +commit d7ba7d08d195283773b170080b14072a71a4477b +Author: jbj +Date: Thu Sep 30 17:45:42 1999 +0000 + + More HPUX cc fiddles. + + CVS patchset: 3356 + CVS date: 1999/09/30 17:45:42 + +commit ff642c3a5eeacf392c1bb220a1ca70f9296a1fe9 +Author: jbj +Date: Thu Sep 30 16:56:05 1999 +0000 + + HPUX cc compiler fidgets. + + CVS patchset: 3355 + CVS date: 1999/09/30 16:56:05 + +commit 5b7c1963ebf6d543d46de2e72ac0d9615bc8598f +Author: jbj +Date: Thu Sep 30 16:11:52 1999 +0000 + + Access fd_fileno correctly. + + CVS patchset: 3354 + CVS date: 1999/09/30 16:11:52 + +commit 1baa4101d6a58837ad196d987bb1fc18d62aed08 +Author: jbj +Date: Thu Sep 30 16:03:43 1999 +0000 + + Don't build rpmgettext/rpmputtext if USE_NLS=no. + + CVS patchset: 3353 + CVS date: 1999/09/30 16:03:43 + +commit 2affcc2244e177bced04013197c032e38a0e9d67 +Author: jbj +Date: Thu Sep 30 14:53:33 1999 +0000 + + HPUX groks not long long. + + CVS patchset: 3352 + CVS date: 1999/09/30 14:53:33 + +commit 960b02877875443801bfca622330623fcb4d73e8 +Author: jbj +Date: Thu Sep 30 00:22:15 1999 +0000 + + new find req/prov scripts for non-linux platforms (Tim Mooney). + + CVS patchset: 3351 + CVS date: 1999/09/30 00:22:15 + +commit ff01ced80f6811c940da2e098873f3dc3233c083 +Author: jbj +Date: Thu Sep 30 00:03:10 1999 +0000 + + Add libtool.m4. + + CVS patchset: 3350 + CVS date: 1999/09/30 00:03:10 + +commit 307e51db290281f68520adacff4a2e46e8b03f71 +Author: jbj +Date: Thu Sep 30 00:00:10 1999 +0000 + + Ignore generated files. + + CVS patchset: 3349 + CVS date: 1999/09/30 00:00:10 + +commit aaa572a6eadcde7eb190c5bb352b4dd63be04792 +Author: jbj +Date: Wed Sep 29 23:58:51 1999 +0000 + + Aother typo. + + CVS patchset: 3348 + CVS date: 1999/09/29 23:58:51 + +commit e3be66cc1094de9dd4f41c58aec5c497dfbac80e +Author: jbj +Date: Wed Sep 29 23:57:42 1999 +0000 + + Add libtool.m4 to aclocal.m4. + + CVS patchset: 3347 + CVS date: 1999/09/29 23:57:42 + +commit b8acb34828d4d8d2aa45ec9b066ebb6e4d016c20 +Author: jbj +Date: Wed Sep 29 23:48:54 1999 +0000 + + Typo. + + CVS patchset: 3346 + CVS date: 1999/09/29 23:48:54 + +commit 3e86bf7d52def1dd00a4f58f8f4bf63363b94a40 +Author: jbj +Date: Wed Sep 29 23:48:23 1999 +0000 + + Ignore generated files. + + CVS patchset: 3345 + CVS date: 1999/09/29 23:48:23 + +commit 043529894e481ac82012899310f2a01837a5d4d0 +Author: jbj +Date: Wed Sep 29 23:37:04 1999 +0000 + + Nuke'em again. + + CVS patchset: 3344 + CVS date: 1999/09/29 23:37:04 + +commit a20c89d42bd04629ee290b46046b63e92ea3a18c +Author: jbj +Date: Wed Sep 29 23:29:57 1999 +0000 + + Check in time stamps again. + + CVS patchset: 3343 + CVS date: 1999/09/29 23:29:57 + +commit 32942a7b6bdfb0c12dae5bc0c6e8fec12c8aac9a +Author: jbj +Date: Wed Sep 29 23:26:08 1999 +0000 + + Check in time stamps. + + CVS patchset: 3342 + CVS date: 1999/09/29 23:26:08 + +commit 798e32a254f8a85b01ecdc22088be506815b5736 +Author: jbj +Date: Wed Sep 29 21:22:24 1999 +0000 + + Create. + + CVS patchset: 3341 + CVS date: 1999/09/29 21:22:24 + +commit 0750a8385c5083ae19b3f137660fa19921a33d4b +Author: jbj +Date: Wed Sep 29 21:12:45 1999 +0000 + + Add intl so popt no longer requires gettext. + + CVS patchset: 3340 + CVS date: 1999/09/29 21:12:45 + +commit 07d68db900f165350dfe51b2e80ff1e7077e3a6e +Author: jbj +Date: Wed Sep 29 15:59:55 1999 +0000 + + Don't use err(3) for now. + + CVS patchset: 3339 + CVS date: 1999/09/29 15:59:55 + +commit 63798c65a1d243b3fb8750f1e8b1de07acbf5acc +Author: jbj +Date: Tue Sep 28 18:38:51 1999 +0000 + + updated pl/rpm.8 (PLD team). + + CVS patchset: 3338 + CVS date: 1999/09/28 18:38:51 + +commit 5714a7f0b1dc139f0c7b31a8eeb127e5f3a2f093 +Author: jbj +Date: Tue Sep 28 15:24:01 1999 +0000 + + portatbility fiddles (solaris). + create binary rpm directory (e.g. .../%{_target_cpu}) on the fly. + + CVS patchset: 3337 + CVS date: 1999/09/28 15:24:01 + +commit aaf3ed92bc7b91a003c11a9e74b3ed62a801c30e +Author: jbj +Date: Sun Sep 26 23:46:42 1999 +0000 + + Add regex.c/regex.h. + + CVS patchset: 3336 + CVS date: 1999/09/26 23:46:42 + +commit c7a61217062bc81485fba5561c48a91031dbbe99 +Author: jbj +Date: Sun Sep 26 23:44:36 1999 +0000 + + Search /usr/include before misc. + + CVS patchset: 3335 + CVS date: 1999/09/26 23:44:36 + +commit a38a3b7f35adebd1bbefa7cf2ccde413db1c8a2e +Author: jbj +Date: Sun Sep 26 23:16:14 1999 +0000 + + Sanity. + + CVS patchset: 3334 + CVS date: 1999/09/26 23:16:14 + +commit 23ddc3c8ceb8484e05acc9920db98b3e54ad0df8 +Author: jbj +Date: Sun Sep 26 22:50:47 1999 +0000 + + Autoconf test for glob (and regex) functionality. + + CVS patchset: 3333 + CVS date: 1999/09/26 22:50:47 + +commit bc0955ad3c26524eef366a9e66a889d38a05b12f +Author: jbj +Date: Sun Sep 26 17:28:00 1999 +0000 + + Solaris compilation. + + CVS patchset: 3332 + CVS date: 1999/09/26 17:28:00 + +commit d6f997e62d7bce0f24623ba8acfe3280fd6caf82 +Author: jbj +Date: Sun Sep 26 17:09:46 1999 +0000 + + Drill msgid at same time as msgstrs. + + CVS patchset: 3331 + CVS date: 1999/09/26 17:09:46 + +commit e60094b302720378ca194db760e51299b32e0a70 +Author: jbj +Date: Sun Sep 26 15:04:03 1999 +0000 + + Retrofit glibc __progname. + + CVS patchset: 3330 + CVS date: 1999/09/26 15:04:03 + +commit 0464b19302bcceafe0c597f1feb693f69ab9b12d +Author: jbj +Date: Sun Sep 26 00:44:52 1999 +0000 + + Sanity. + + CVS patchset: 3329 + CVS date: 1999/09/26 00:44:52 + +commit 861a7532cdc06f841d0a93e45e5b962033d35397 +Author: jbj +Date: Sun Sep 26 00:43:12 1999 +0000 + + fix: rpm-2.5.1 had file list w/o leading / fix. + + CVS patchset: 3328 + CVS date: 1999/09/26 00:43:12 + +commit c63192d864acc8481c2afc2012d5c98efdb8abad +Author: jbj +Date: Fri Sep 24 23:36:52 1999 +0000 + + Release candidate. + + CVS patchset: 3327 + CVS date: 1999/09/24 23:36:52 + +commit c5890f94566506396bd2d041db7d8e4c5930eb29 +Author: jbj +Date: Fri Sep 24 21:58:35 1999 +0000 + + Sanity. + + CVS patchset: 3326 + CVS date: 1999/09/24 21:58:35 + +commit 896f0898dcadc03f9442e80734769551cd56a55f +Author: jbj +Date: Fri Sep 24 18:03:20 1999 +0000 + + Remove unnecssary malloc. + + CVS patchset: 3325 + CVS date: 1999/09/24 18:03:20 + +commit 098c2a19dfa65bc9a97a0e11f4c80a56eb97eabd +Author: jbj +Date: Fri Sep 24 16:02:14 1999 +0000 + + Improved warning message on legacy epoch-less compare. + + CVS patchset: 3324 + CVS date: 1999/09/24 16:02:14 + +commit aa3a086ba2e1a4ecc2deaba687ed8d71426df217 +Author: jbj +Date: Fri Sep 24 14:54:23 1999 +0000 + + fix: version compares compatible with epoch-less requires/conflicts. + + CVS patchset: 3323 + CVS date: 1999/09/24 14:54:23 + +commit cdaf55aa9c8ba8c4f31b0e8974cc0617f4cf04ed +Author: jbj +Date: Fri Sep 24 01:50:04 1999 +0000 + + Test for non-existence of provides/obsoletes tags (without versioning). + + CVS patchset: 3322 + CVS date: 1999/09/24 01:50:04 + +commit dcb48a58ffc57c35e3356f1cf3809113ed7f8167 +Author: jbj +Date: Thu Sep 23 22:30:45 1999 +0000 + + Make sure that %lang(it) matches LANG=it. + + CVS patchset: 3321 + CVS date: 1999/09/23 22:30:45 + +commit 25132a985ab9518148b4010991a3d50e773df6d9 +Author: jbj +Date: Thu Sep 23 21:46:48 1999 +0000 + + Add rpminject. + + CVS patchset: 3320 + CVS date: 1999/09/23 21:46:48 + +commit 388163596677a563fc7febcf5aa52638fdc86420 +Author: jbj +Date: Wed Sep 22 18:17:41 1999 +0000 + + lclint annotations. + + CVS patchset: 3319 + CVS date: 1999/09/22 18:17:41 + +commit ac5b027ef0710c5a5ee4ab22c68c4bd06843afcb +Author: jbj +Date: Wed Sep 22 18:04:16 1999 +0000 + + Sanity. + + CVS patchset: 3318 + CVS date: 1999/09/22 18:04:16 + +commit df6acadcf7830eba3e585a2fa23bab29f3ac6c02 +Author: jbj +Date: Wed Sep 22 18:03:19 1999 +0000 + + Add --redhatprovides and --redhatrequires to rpmpopt. + + CVS patchset: 3317 + CVS date: 1999/09/22 18:03:19 + +commit 444952d085ab84f3960fc6ed3f402499dd69527c +Author: jbj +Date: Wed Sep 22 16:34:08 1999 +0000 + + Orphan. + + CVS patchset: 3316 + CVS date: 1999/09/22 16:34:08 + +commit 868920d4a76844d8cbef8589e7247f4c9ff1a104 +Author: jbj +Date: Wed Sep 22 13:43:45 1999 +0000 + + Update from specspo. + + CVS patchset: 3315 + CVS date: 1999/09/22 13:43:45 + +commit 391f138fc1e13f7197460ada9b42e9decc5a5e75 +Author: jbj +Date: Tue Sep 21 22:42:10 1999 +0000 + + Bump release. + + CVS patchset: 3314 + CVS date: 1999/09/21 22:42:10 + +commit 9fea0d1addb5a14d493e44934ab5c82403787639 +Author: jbj +Date: Tue Sep 21 22:41:37 1999 +0000 + + Apply sanity check to database permissions. + + CVS patchset: 3313 + CVS date: 1999/09/21 22:41:37 + +commit e6318cc57f9581393d6cb534e3dece38b87aa3cb +Author: jbj +Date: Tue Sep 21 17:21:57 1999 +0000 + + fix: removed files fingerprint memory leak. + fix: resurrect allfiles flag from rpm-2.5.x. + + CVS patchset: 3312 + CVS date: 1999/09/21 17:21:57 + +commit 20d78e939aa218e85ef19013769494851d863f13 +Author: jbj +Date: Tue Sep 21 03:22:53 1999 +0000 + + fix: command line install had header memory leak. + check for NULL on all memory allocations. + free rpmrc mallocs on exit. + permit run time leak detection. + + CVS patchset: 3311 + CVS date: 1999/09/21 03:22:53 + +commit 78ce864c5eee9b2d4fc3a3a4a201818f4e500d50 +Author: jbj +Date: Mon Sep 20 15:35:08 1999 +0000 + + Add err.[ch] to portability checks (as yet unused). + get latest error.[ch] from glibc. + + CVS patchset: 3310 + CVS date: 1999/09/20 15:35:08 + +commit 6bdf51d7f3a40988812f3d5ea829ae2395e8e05a +Author: jbj +Date: Mon Sep 20 13:34:47 1999 +0000 + + Start experimental support for bzip2 payloads. + + CVS patchset: 3309 + CVS date: 1999/09/20 13:34:47 + +commit aa8b92fedffeed174157fee39090dcb78611ac5a +Author: jbj +Date: Mon Sep 20 13:23:46 1999 +0000 + + Skip provides along for the ride. + + CVS patchset: 3308 + CVS date: 1999/09/20 13:23:46 + +commit 86aa4396e54fd9b56590fb1af56079154f54b7ed +Author: jbj +Date: Mon Sep 20 13:04:44 1999 +0000 + + Don't segfault on unversioned provides. + + CVS patchset: 3307 + CVS date: 1999/09/20 13:04:44 + +commit 2fe0890ca552e4fd829d181030569b1b3542e466 +Author: jbj +Date: Sun Sep 19 19:41:00 1999 +0000 + + Sanity. + + CVS patchset: 3306 + CVS date: 1999/09/19 19:41:00 + +commit e0e0a755b917d358d38003a3da2f46d83fb70265 +Author: jbj +Date: Sun Sep 19 15:27:37 1999 +0000 + + When comparing EVR with missing epoch, package with epoch is considered newer. + Free providesEVR from added package index. + python: shared module linked correctly. + + CVS patchset: 3305 + CVS date: 1999/09/19 15:27:37 + +commit 29c1a3598ac127c4b2b0b936a2edd6c76ce82325 +Author: jbj +Date: Sun Sep 19 00:29:44 1999 +0000 + + do versioned provides/conflicts resolution correctly. + rpmpopt: display versioned provides/obsoletes. + revert to shared libbz2.so now that bzip2 is in base install. + + CVS patchset: 3304 + CVS date: 1999/09/19 00:29:44 + +commit b0f03239bbd48ef228e0f390e0f6afd94b27c316 +Author: jbj +Date: Fri Sep 17 23:18:24 1999 +0000 + + Typo. + + CVS patchset: 3303 + CVS date: 1999/09/17 23:18:24 + +commit 0148d1e87dc4dc6d31bf2b01e5a21a99ed46239c +Author: jbj +Date: Fri Sep 17 22:59:31 1999 +0000 + + python: shared module needs -lrpm -lbz2. + + CVS patchset: 3302 + CVS date: 1999/09/17 22:59:31 + +commit 7cf4b2e1aa3c238aa2e972efda67e63e7207877c +Author: jbj +Date: Fri Sep 17 22:23:33 1999 +0000 + + lclint annotations. + + CVS patchset: 3301 + CVS date: 1999/09/17 22:23:33 + +commit 0a816b4cb5dc06db41a096c7455bcc4f8c815910 +Author: jbj +Date: Fri Sep 17 22:10:39 1999 +0000 + + add perms to openDatabase() call. + + CVS patchset: 3300 + CVS date: 1999/09/17 22:10:39 + +commit d0d0eefa53d0baab83ca7588582c75cc251556e2 +Author: jbj +Date: Fri Sep 17 22:06:32 1999 +0000 + + Turn off noise for now. + + CVS patchset: 3299 + CVS date: 1999/09/17 22:06:32 + +commit 8258a9497eb12c8a55b7ad16e467977c066db9ee +Author: jbj +Date: Fri Sep 17 22:02:44 1999 +0000 + + lclint annotations. + + CVS patchset: 3298 + CVS date: 1999/09/17 22:02:44 + +commit 8464ba8e6c86367812164541cb5ad084c69b63f9 +Author: jbj +Date: Fri Sep 17 22:01:34 1999 +0000 + + rewrite installArchive() with common exit point. + lclint annotations. + + CVS patchset: 3297 + CVS date: 1999/09/17 22:01:34 + +commit ca578f4da5537564d942294fb21ef2b7bc12959e +Author: jbj +Date: Fri Sep 17 21:51:23 1999 +0000 + + lclint annotations. + + CVS patchset: 3296 + CVS date: 1999/09/17 21:51:23 + +commit 57313de553626f1f414292d171f4204500d531f0 +Author: jbj +Date: Fri Sep 17 21:50:10 1999 +0000 + + simplyify prefix prepending. + lclint annotations. + + CVS patchset: 3295 + CVS date: 1999/09/17 21:50:10 + +commit d567366f46a7ec05eeab6985f11797c445c205a2 +Author: jbj +Date: Fri Sep 17 21:44:39 1999 +0000 + + lclint annotations. + + CVS patchset: 3294 + CVS date: 1999/09/17 21:44:39 + +commit aea37e90473a6c82913e5f9968f64194bc3b60d8 +Author: jbj +Date: Fri Sep 17 21:31:38 1999 +0000 + + lclint annotations. + + CVS patchset: 3293 + CVS date: 1999/09/17 21:31:38 + +commit 4cf669a6f5d80adf97e1d5cf8507d3af2a4c581f +Author: jbj +Date: Fri Sep 17 21:26:00 1999 +0000 + + lclint annotations. + + CVS patchset: 3292 + CVS date: 1999/09/17 21:26:00 + +commit e5d3c31bb26bfcae20340f2902c43dba23e08da9 +Author: jbj +Date: Fri Sep 17 21:08:32 1999 +0000 + + lclint annotations. + + CVS patchset: 3291 + CVS date: 1999/09/17 21:08:32 + +commit 00dcfeff38c8af85dfb7a96834e9ca758dd273fa +Author: jbj +Date: Fri Sep 17 20:52:46 1999 +0000 + + lclint annotations. + + CVS patchset: 3290 + CVS date: 1999/09/17 20:52:46 + +commit a8e5caca589b5d87c6fa0b9664219a26405e1720 +Author: jbj +Date: Fri Sep 17 20:42:51 1999 +0000 + + lclint annotations and consts. + + CVS patchset: 3289 + CVS date: 1999/09/17 20:42:51 + +commit b8d3c0d56a77ca1131a74560413a0e8a16704f4f +Author: jbj +Date: Fri Sep 17 20:40:41 1999 +0000 + + lclint annotations. + + CVS patchset: 3288 + CVS date: 1999/09/17 20:40:41 + +commit b226bc53d0074ed9eadc979abcda1adb75fd7ff3 +Author: jbj +Date: Fri Sep 17 20:17:40 1999 +0000 + + lclint annotations. + + CVS patchset: 3287 + CVS date: 1999/09/17 20:17:40 + +commit bdefece969c640b12069b40f74322c20d2663491 +Author: jbj +Date: Fri Sep 17 20:15:22 1999 +0000 + + lclinit annotations. + + CVS patchset: 3286 + CVS date: 1999/09/17 20:15:22 + +commit 315eb02ffa5324d5ea71750b003738ff73c66a73 +Author: jbj +Date: Fri Sep 17 20:11:44 1999 +0000 + + Update from anaconda. + + CVS patchset: 3285 + CVS date: 1999/09/17 20:11:44 + +commit 89a17f4cfab00c46170f07a2f68f91c3e8ca26df +Author: jbj +Date: Fri Sep 17 18:33:21 1999 +0000 + + Link with librpm and libbz2. + + CVS patchset: 3284 + CVS date: 1999/09/17 18:33:21 + +commit 6bdc80981e13f49419a8eb3e9056cfb6ac3abd35 +Author: jbj +Date: Tue Sep 14 16:04:03 1999 +0000 + + fix: with unspecified epochs, skip dependency epoch compare. + + CVS patchset: 3283 + CVS date: 1999/09/14 16:04:03 + +commit 5776936ece0bcb7f9c0f6f899dcb5d3a9c0a2352 +Author: jbj +Date: Tue Sep 14 05:41:13 1999 +0000 + + fix: versioned provides devolved to existence test with conflicts. + + CVS patchset: 3282 + CVS date: 1999/09/14 05:41:13 + +commit f005d4c15c11eacc245d11e2f069881d2543e32c +Author: jbj +Date: Sun Sep 12 20:43:23 1999 +0000 + + Fiddles to resurrect lclint. + + CVS patchset: 3281 + CVS date: 1999/09/12 20:43:23 + +commit fa165f14175844cbb582eea1617345da0bd779eb +Author: jbj +Date: Sun Sep 12 00:47:09 1999 +0000 + + Bump release. + + CVS patchset: 3280 + CVS date: 1999/09/12 00:47:09 + +commit 075fa0ef785c4f31e1fad8d7e71b4b11b8934533 +Author: jbj +Date: Sun Sep 12 00:41:51 1999 +0000 + + glibc2: always enable dynamic mtrace if available. + + CVS patchset: 3279 + CVS date: 1999/09/12 00:41:51 + +commit 55c52041442a629962a4317a1a7cf9fce50da05b +Author: jbj +Date: Sat Sep 11 23:57:59 1999 +0000 + + fix: avoid db problems with self-obsoleting packages on install. + + CVS patchset: 3278 + CVS date: 1999/09/11 23:57:59 + +commit ff2540dba8917e8adc9775f2ad33f671403eeeb5 +Author: jbj +Date: Sat Sep 11 21:10:02 1999 +0000 + + Common variable naming using EVR rather than Version. + + CVS patchset: 3277 + CVS date: 1999/09/11 21:10:02 + +commit 70a0eb1d9ba1e60e10a995604a3fa259945e06c2 +Author: jbj +Date: Fri Sep 10 23:48:56 1999 +0000 + + pgp and pgp5 have compatible RSA signature (#4780). + + CVS patchset: 3276 + CVS date: 1999/09/10 23:48:56 + +commit f293b8e06f1d721587c9a7f1de3184f8fc8fddf7 +Author: jbj +Date: Fri Sep 10 13:36:18 1999 +0000 + + Display Mb or Kb. + + CVS patchset: 3275 + CVS date: 1999/09/10 13:36:18 + +commit 1cc9b7b5e8a1b19343b8b9add6a53dc5c97d49d3 +Author: ewt +Date: Fri Sep 10 00:50:25 1999 +0000 + + version 1.4 + + CVS patchset: 3274 + CVS date: 1999/09/10 00:50:25 + +commit a7a728a11e98db57b8f0888cd8076c9daf07d120 +Author: jbj +Date: Thu Sep 9 15:16:01 1999 +0000 + + Limit header max size to < 32 Mb (~16 times largest currently known). + + CVS patchset: 3273 + CVS date: 1999/09/09 15:16:01 + +commit 424a891e92464d7d94991a092f656a4400e83c55 +Author: jbj +Date: Thu Sep 9 15:09:30 1999 +0000 + + Apply max 32 Mb sabity check to headers. + + CVS patchset: 3272 + CVS date: 1999/09/09 15:09:30 + +commit 6b66cf510cdedda4e89aaa5d63168b334ded07e2 +Author: jbj +Date: Wed Sep 8 22:50:30 1999 +0000 + + Fix lchown detection. + + CVS patchset: 3271 + CVS date: 1999/09/08 22:50:30 + +commit 7c106b348feb608521d38951f39dd85b34d1f6a4 +Author: jbj +Date: Wed Sep 8 22:33:01 1999 +0000 + + Fix lchown test. + + CVS patchset: 3270 + CVS date: 1999/09/08 22:33:01 + +commit 81355ca3677059062a7ac7b654de6863c31d1dde +Author: jbj +Date: Tue Sep 7 23:04:24 1999 +0000 + + Bump release. + + CVS patchset: 3269 + CVS date: 1999/09/07 23:04:24 + +commit 6281ee4de1edd2882452f3cc0ddff5e8ab94f222 +Author: jbj +Date: Tue Sep 7 22:49:45 1999 +0000 + + Use sizeof("...")-1 throughout. + + CVS patchset: 3268 + CVS date: 1999/09/07 22:49:45 + +commit 834db501abf63981c5445edac45af8de278b0777 +Author: jbj +Date: Tue Sep 7 22:48:55 1999 +0000 + + Update from anaconda. + + CVS patchset: 3267 + CVS date: 1999/09/07 22:48:55 + +commit 002c65379feb473d79a626b8abcf474c5cd72f2b +Author: jbj +Date: Tue Sep 7 22:46:19 1999 +0000 + + Solaris: use getpassphrase rather than getpass if available. + + CVS patchset: 3266 + CVS date: 1999/09/07 22:46:19 + +commit 719984e0960264b3bc821b8aa99afbb8e525a638 +Author: jbj +Date: Tue Sep 7 19:53:10 1999 +0000 + + Tru64: avoid find-requires variable size limit (Tim Mooney). + + CVS patchset: 3265 + CVS date: 1999/09/07 19:53:10 + +commit 582808bce3d636bfd8c2a71e0982af6fe91b2fef +Author: jbj +Date: Tue Sep 7 19:47:53 1999 +0000 + + link libbz2.a statically to avoid rpm->bzip2 dependence for now. + + CVS patchset: 3264 + CVS date: 1999/09/07 19:47:53 + +commit f2cfa9e4944becc9f3bf885cffd663ce69d2695e +Author: jbj +Date: Tue Sep 7 16:24:20 1999 +0000 + + suggested changes to docs from Ken Estes (#4451). + + CVS patchset: 3263 + CVS date: 1999/09/07 16:24:20 + +commit aed59a55a77acd2d6fa6cf2723d077f0bffd2315 +Author: jbj +Date: Tue Sep 7 15:46:53 1999 +0000 + + suggested changes to docs from Ken Estes (#4451). + + CVS patchset: 3262 + CVS date: 1999/09/07 15:46:53 + +commit fabbb86306277887f45569898e1f6a6c60c0c618 +Author: jbj +Date: Tue Sep 7 14:50:32 1999 +0000 + + add --freshen to usage message (#4823). + + CVS patchset: 3261 + CVS date: 1999/09/07 14:50:32 + +commit b4be0ac88bf159068e7b5e5a96de5603a05cae47 +Author: jbj +Date: Tue Sep 7 12:32:10 1999 +0000 + + add sparcv9 architecture. + + CVS patchset: 3260 + CVS date: 1999/09/07 12:32:10 + +commit d753cdadf734488f5539a53e3898fd3ebc1a4508 +Author: jbj +Date: Mon Sep 6 20:59:39 1999 +0000 + + fix: don't successfully match with strncasecmp("sparc", "sparc64", 5) + + CVS patchset: 3259 + CVS date: 1999/09/06 20:59:39 + +commit bc837d1e3f616a7dd2973f25b7ac1d18bfafcb16 +Author: ewt +Date: Sun Sep 5 16:56:44 1999 +0000 + + added message to getFilesystem() -- this can hang up when we can't + reach nfs servers, and it's nice for -vv to indicate what's wrong + + CVS patchset: 3258 + CVS date: 1999/09/05 16:56:44 + +commit 7685084b9e5c1c32aad5a849495e0beec1815cf5 +Author: ewt +Date: Sat Sep 4 19:38:05 1999 +0000 + + *** empty log message *** + + CVS patchset: 3257 + CVS date: 1999/09/04 19:38:05 + +commit dacd97b455d7351b5680f7259b6791b4f3942990 +Author: ewt +Date: Sat Sep 4 19:37:00 1999 +0000 + + null terminate parsed argument lists + + CVS patchset: 3256 + CVS date: 1999/09/04 19:37:00 + +commit aeeaed68f9714080bb3a6e60e3c6125e37b3b4bc +Author: jbj +Date: Wed Aug 25 20:00:26 1999 +0000 + + get the right default if no --prefix is given. + + CVS patchset: 3255 + CVS date: 1999/08/25 20:00:26 + +commit 374924ae9607253e1615db2fe982591daa175ae9 +Author: jbj +Date: Tue Aug 24 23:27:48 1999 +0000 + + Fix duplicate dependency check. + + CVS patchset: 3254 + CVS date: 1999/08/24 23:27:48 + +commit 6c46bff3021b8ec6ece201a0dcab6a963a4b7184 +Author: jbj +Date: Tue Aug 24 22:26:55 1999 +0000 + + add versions to prereq. + add syntax sensitive implict prereq on rpm-3.0.3. + + CVS patchset: 3253 + CVS date: 1999/08/24 22:26:55 + +commit 881c8fbba23132bedfa6d6bdacbb8513347e5b1f +Author: jbj +Date: Tue Aug 24 22:08:52 1999 +0000 + + Orphans. + + CVS patchset: 3252 + CVS date: 1999/08/24 22:08:52 + +commit 5b7d1f7876a40e6900331a9aa9a77263c3fe6a57 +Author: jbj +Date: Tue Aug 24 21:10:30 1999 +0000 + + update python bindings from anaconda. + + CVS patchset: 3251 + CVS date: 1999/08/24 21:10:30 + +commit 438d40966ef28e012b49ec2a61462d27c5e88b70 +Author: jbj +Date: Tue Aug 24 15:18:43 1999 +0000 + + add headerWrite return code and check for errors. + + CVS patchset: 3250 + CVS date: 1999/08/24 15:18:43 + +commit e04da2741558aad5db0c2e15724e1b68be79996a +Author: jbj +Date: Tue Aug 24 14:10:58 1999 +0000 + + Remove legacy langNum interface.l + + CVS patchset: 3249 + CVS date: 1999/08/24 14:10:58 + +commit 5c4a3b51cea5d3de47221b760a7fc282160b0ed9 +Author: jbj +Date: Mon Aug 23 23:51:34 1999 +0000 + + Typo. + + CVS patchset: 3248 + CVS date: 1999/08/23 23:51:34 + +commit 3ae1ccb3aaff3a6e4b2d37d533bb07f34621e96f +Author: jbj +Date: Mon Aug 23 23:10:35 1999 +0000 + + fix: segfault with "--sign" w/o supplying files (#4651). + + CVS patchset: 3247 + CVS date: 1999/08/23 23:10:35 + +commit 751c9f18c8c7ecb18e33edc8614c0f91d5b1e528 +Author: jbj +Date: Mon Aug 23 16:05:08 1999 +0000 + + More environment fiddles. + + CVS patchset: 3246 + CVS date: 1999/08/23 16:05:08 + +commit 279e4cc33839f46209224742fb0ce4ada6f03ec6 +Author: jbj +Date: Sun Aug 22 04:17:12 1999 +0000 + + add %_install_langs to configure languages to be installed. + + CVS patchset: 3245 + CVS date: 1999/08/22 04:17:12 + +commit b2aff25f78baea9cfba2106702d8de63e4537e9c +Author: jbj +Date: Sat Aug 21 23:07:22 1999 +0000 + + Check POSIX environment variables too. + + CVS patchset: 3244 + CVS date: 1999/08/21 23:07:22 + +commit d2094dc229f3efa82bde4c92d77d7314a370d4f0 +Author: jbj +Date: Fri Aug 20 21:05:18 1999 +0000 + + add versions to obsoletes. + + CVS patchset: 3243 + CVS date: 1999/08/20 21:05:18 + +commit 75808ee2d4c1b34c70758d5c72a2b7a386b1124b +Author: jbj +Date: Fri Aug 20 19:11:37 1999 +0000 + + Add script execution order. + + CVS patchset: 3242 + CVS date: 1999/08/20 19:11:37 + +commit e42968ff8b28a632917ec526bae27b10d8e5576f +Author: jbj +Date: Fri Aug 20 17:55:12 1999 +0000 + + Break out locale match test. + + CVS patchset: 3241 + CVS date: 1999/08/20 17:55:12 + +commit 36771ae0adff7e595eb4f0e28d3293db18186431 +Author: jbj +Date: Thu Aug 19 21:09:38 1999 +0000 + + Shared libraries in main package. + + CVS patchset: 3240 + CVS date: 1999/08/19 21:09:38 + +commit 8907c7e1a03b721ce696bce499b52ebc7ebb1cd7 +Author: jbj +Date: Thu Aug 19 19:42:18 1999 +0000 + + match "de" when locale is specified as "de_DE.ISO-8859-1@Munich". + + CVS patchset: 3239 + CVS date: 1999/08/19 19:42:18 + +commit 5eca02dc3469eb2a76412d50c4543d93e1517630 +Author: jbj +Date: Wed Aug 18 18:28:36 1999 +0000 + + Documentation fiddles (#3638). + + CVS patchset: 3238 + CVS date: 1999/08/18 18:28:36 + +commit 5a8aceb05e843bfb523b91a904846ec23276350c +Author: jbj +Date: Wed Aug 18 17:04:54 1999 +0000 + + fix: use pgp5 rather than pgp-2.6.3 if both are in %_pgpbin (#4564). + + CVS patchset: 3237 + CVS date: 1999/08/18 17:04:54 + +commit 13db81ac61d360b20ebe5934e3e11d37404b875d +Author: jbj +Date: Wed Aug 18 16:29:53 1999 +0000 + + Typo. + + CVS patchset: 3236 + CVS date: 1999/08/18 16:29:53 + +commit 54218bb5e15f932c13afe64fdb3567ed9c2803dc +Author: jbj +Date: Tue Aug 17 23:09:09 1999 +0000 + + Bump release. + + CVS patchset: 3235 + CVS date: 1999/08/17 23:09:09 + +commit 210d76a5cd8dad3eb22fbf8f8b02ac2d00829924 +Author: jbj +Date: Tue Aug 17 23:05:24 1999 +0000 + + fix: more precise handling was needed for multiple overlapped removed files. + + CVS patchset: 3234 + CVS date: 1999/08/17 23:05:24 + +commit 50b5b66546c3f520401d06304b92fbf1eb86546f +Author: jbj +Date: Mon Aug 16 22:11:25 1999 +0000 + + Bump release. + + CVS patchset: 3233 + CVS date: 1999/08/16 22:11:25 + +commit 3cb1e6fe07d2035d5d9bd0d74f02d0db6f861acb +Author: jbj +Date: Mon Aug 16 22:10:27 1999 +0000 + + fix: n>1 occurrences of %config(noreplace) should not FA_CREATE (#4355). + + CVS patchset: 3232 + CVS date: 1999/08/16 22:10:27 + +commit dde031db23b1d98350d7237c0f2ebb4b4f81ac88 +Author: jbj +Date: Mon Aug 16 20:14:34 1999 +0000 + + tmacro was broke. + + CVS patchset: 3231 + CVS date: 1999/08/16 20:14:34 + +commit 06689265dded4ea12840ab808d799bb389b52dbb +Author: jbj +Date: Mon Aug 16 18:57:37 1999 +0000 + + fix: last char in rpmrc w/o terminating newline lost (#4361). + prepare for handling \r in macro exapnsions. + + CVS patchset: 3230 + CVS date: 1999/08/16 18:57:37 + +commit 96114b6bf298ca19e348a703e95eb4c34d72cc3b +Author: jbj +Date: Mon Aug 16 16:18:25 1999 +0000 + + fix: macro table cannot contain NULL pointers (#4263). + + CVS patchset: 3229 + CVS date: 1999/08/16 16:18:25 + +commit 1e4d3532ea18961649955eba075f82be5a71ece4 +Author: jbj +Date: Sun Aug 15 19:11:40 1999 +0000 + + resuscitate net shared paths (#4330). + + CVS patchset: 3228 + CVS date: 1999/08/15 19:11:40 + +commit 5a137dbb7161acad2983333a2af085a8f36e5a30 +Author: jbj +Date: Sun Aug 15 14:42:28 1999 +0000 + + Bump release. + + CVS patchset: 3227 + CVS date: 1999/08/15 14:42:28 + +commit 721d10da7c494d56fc1e537993c459750edf0f18 +Author: jbj +Date: Sun Aug 15 13:41:06 1999 +0000 + + Fix the erased files last fix. + + CVS patchset: 3226 + CVS date: 1999/08/15 13:41:06 + +commit f12ab9fac151d0dadcfb49fb16f5e495c00c5774 +Author: jbj +Date: Sat Aug 14 20:01:38 1999 +0000 + + fix: don't remove file until last occurence in transaction (#4291). + + CVS patchset: 3225 + CVS date: 1999/08/14 20:01:38 + +commit e466edec37f656159c561c63d73226d70c3e64a8 +Author: jbj +Date: Sat Aug 14 15:33:19 1999 +0000 + + Comments, consts and style. + + CVS patchset: 3224 + CVS date: 1999/08/14 15:33:19 + +commit de8d6b59e1f0f7b32bc12188c5e50d7fb592e7fa +Author: jbj +Date: Fri Aug 13 20:05:57 1999 +0000 + + Comments, consts, and simplifications. + + CVS patchset: 3223 + CVS date: 1999/08/13 20:05:57 + +commit 07f2fceeb43e1f39852b8cf68c2587964c0ed8a3 +Author: jbj +Date: Mon Aug 9 14:28:13 1999 +0000 + + Prepare for per-package non-string macros like epoch. + Collapse RPMFILE_STATE_NETSHARED onto RPMFILE_STATE_NOTINSTALLED. + + CVS patchset: 3222 + CVS date: 1999/08/09 14:28:13 + +commit f88a79c205c36a3e04454798ec7851908ed10e16 +Author: jbj +Date: Sun Aug 8 17:51:43 1999 +0000 + + Typo. + + CVS patchset: 3221 + CVS date: 1999/08/08 17:51:43 + +commit ac542cea244cb33689051a3bc3f454a37b4445ce +Author: jbj +Date: Sun Aug 8 17:45:05 1999 +0000 + + Typo. + + CVS patchset: 3220 + CVS date: 1999/08/08 17:45:05 + +commit 9c7952f3faf29c30517ab4d587e8203579b77366 +Author: jbj +Date: Sun Aug 8 17:43:28 1999 +0000 + + Run ldconfig in %post. + + CVS patchset: 3219 + CVS date: 1999/08/08 17:43:28 + +commit d71e246e745774457083496159bd1c4533a39524 +Author: jbj +Date: Sat Aug 7 00:07:51 1999 +0000 + + Comments and consts ... + + CVS patchset: 3218 + CVS date: 1999/08/07 00:07:51 + +commit e36fd7ef12192da3574af8fc36d08f492d3fb035 +Author: jbj +Date: Fri Aug 6 23:44:25 1999 +0000 + + Comments and consts ... + + CVS patchset: 3217 + CVS date: 1999/08/06 23:44:25 + +commit 64c9a2d1cfa65f039eca023311d46a759556c63b +Author: jbj +Date: Fri Aug 6 22:52:49 1999 +0000 + + Use headerNVR throughout. + More const's. + + CVS patchset: 3216 + CVS date: 1999/08/06 22:52:49 + +commit 0343b15e5511e3b5b99cbc7e8e712aed9589b487 +Author: jbj +Date: Fri Aug 6 21:35:15 1999 +0000 + + Get rid of trailing white space. + + CVS patchset: 3215 + CVS date: 1999/08/06 21:35:15 + +commit b5b29dd7a36f7b3f3d0884d0084a1b683d7f5a97 +Author: jbj +Date: Wed Aug 4 18:07:18 1999 +0000 + + Clarify licensing: "GNU General Public License" not s/General //. + + CVS patchset: 3214 + CVS date: 1999/08/04 18:07:18 + +commit 1daea4ec399ddbb0b81a1251ab67cd355c1d29ff +Author: jbj +Date: Wed Aug 4 14:46:07 1999 +0000 + + Re-add bzip2 build requirement. + + CVS patchset: 3213 + CVS date: 1999/08/04 14:46:07 + +commit 795a39fe3f276c5821e68169898a43f9ddba5512 +Author: jbj +Date: Mon Aug 2 21:06:33 1999 +0000 + + More informative message for "free list corrupt". + + CVS patchset: 3212 + CVS date: 1999/08/02 21:06:33 + +commit f692823a2d44734554b94ea900327616602d350d +Author: jbj +Date: Mon Aug 2 19:24:36 1999 +0000 + + Not quite ready for build requires bzip2. + + CVS patchset: 3211 + CVS date: 1999/08/02 19:24:36 + +commit 13bc36591663bc6c9f08511e4edbded7bda5ba56 +Author: jbj +Date: Mon Aug 2 19:10:09 1999 +0000 + + Sanity. + + CVS patchset: 3210 + CVS date: 1999/08/02 19:10:09 + +commit f9ed8f7bdc2467873142260705782a2910280137 +Author: jbj +Date: Thu Jul 29 12:36:03 1999 +0000 + + macro fixes (Benedict Lofstedt, #4220): + expand %# just like %{#} (and with same value as shell analogues). + macro defaults for *, 0, and # if no args specified. + getopt on non-linux requires optind to be saved/restored. + + CVS patchset: 3209 + CVS date: 1999/07/29 12:36:03 + +commit 587dab926c4314c71390bd6f6c5844751b8dfd1c +Author: jbj +Date: Thu Jul 29 11:20:20 1999 +0000 + + fix: getopt on non-linux requires optind to be saved/restored + rather than just set to 0 (Benedict Lofstedt, #4220). + + CVS patchset: 3208 + CVS date: 1999/07/29 11:20:20 + +commit c789b859108907d135a37c3acc030755678ba76b +Author: gafton +Date: Wed Jul 28 00:56:34 1999 +0000 + + Finally fixed it up for the new version of perl. + + CVS patchset: 3207 + CVS date: 1999/07/28 00:56:34 + +commit 3952d8e797bae56a0122ef96b2361686305c4852 +Author: jbj +Date: Tue Jul 27 22:05:43 1999 +0000 + + popt: heavy dose of const. + + CVS patchset: 3206 + CVS date: 1999/07/27 22:05:43 + +commit 12dacc46fba0fb50e984e11f6d391c9b69f5cf8b +Author: gafton +Date: Mon Jul 26 23:39:34 1999 +0000 + + Hacks + + CVS patchset: 3205 + CVS date: 1999/07/26 23:39:34 + +commit b22ee45ae2937612fdab3b8639432a6e30d1d6e7 +Author: jbj +Date: Mon Jul 26 21:52:44 1999 +0000 + + Bump release. + + CVS patchset: 3204 + CVS date: 1999/07/26 21:52:44 + +commit cdd837431a4606ab692d3a53c40b61013307cf76 +Author: jbj +Date: Mon Jul 26 21:51:03 1999 +0000 + + fix: segfault on --rebuild (#4185). + + CVS patchset: 3203 + CVS date: 1999/07/26 21:51:03 + +commit 5ddfcc2f6ab43ca5bbaf4cfce2aeeef5c316616c +Author: jbj +Date: Fri Jul 23 19:19:15 1999 +0000 + + add post install configurable dependency checking. + + CVS patchset: 3202 + CVS date: 1999/07/23 19:19:15 + +commit 22dad3f4ce2a1571a1a109f817568dc322d6354b +Author: jbj +Date: Thu Jul 22 23:05:43 1999 +0000 + + add _mandir/_infodir macro expansions to docdirs (Tomasz Kloczko). + + CVS patchset: 3201 + CVS date: 1999/07/22 23:05:43 + +commit b27a7971eb4f2c83fcebac447916e396dcbcc5be +Author: jbj +Date: Thu Jul 22 23:01:31 1999 +0000 + + the death of RPMSENSE_SERIAL, use [epoch:]version[-release] instead. + + CVS patchset: 3200 + CVS date: 1999/07/22 23:01:31 + +commit 775e0bc797aef06b577bf36d6deca6da606ffc24 +Author: jbj +Date: Thu Jul 22 22:38:44 1999 +0000 + + print all dependencies for each package at end of build. + + CVS patchset: 3199 + CVS date: 1999/07/22 22:38:44 + +commit e5a77f761f660a8a07235d84b4df2970f6e89b1d +Author: jbj +Date: Thu Jul 22 19:38:25 1999 +0000 + + fix: sanity test on specfile fails when encountering i18n chars. + + CVS patchset: 3198 + CVS date: 1999/07/22 19:38:25 + +commit f4cb9f792a3d5845fd22c91912511f04bb23ef7d +Author: jbj +Date: Thu Jul 22 17:51:59 1999 +0000 + + Bump release. + + CVS patchset: 3197 + CVS date: 1999/07/22 17:51:59 + +commit 0f7a33ebf8ea7128f5504e93e77f8aeaa43ab119 +Author: jbj +Date: Thu Jul 22 17:48:31 1999 +0000 + + add versions to provides. + + CVS patchset: 3196 + CVS date: 1999/07/22 17:48:31 + +commit 1cbea413b4e90fe517fbb18f925fea9a13cc0c31 +Author: jbj +Date: Wed Jul 21 16:17:42 1999 +0000 + + Bump release. + + CVS patchset: 3195 + CVS date: 1999/07/21 16:17:42 + +commit 114c7f8f69cdb31e7e8a9bde989133bc0d6889b6 +Author: jbj +Date: Wed Jul 21 16:17:12 1999 +0000 + + Match any epoch if package has epoch and dependency doesn't specify. + + CVS patchset: 3194 + CVS date: 1999/07/21 16:17:12 + +commit c9cd11a3259022f2040ae497b8199a332665ee74 +Author: jbj +Date: Tue Jul 20 20:49:39 1999 +0000 + + Sanity. + + CVS patchset: 3193 + CVS date: 1999/07/20 20:49:39 + +commit 2da2ce8b10a8960a793b2ba28156b6b738558f19 +Author: jbj +Date: Tue Jul 20 20:48:49 1999 +0000 + + Bump release. + + CVS patchset: 3192 + CVS date: 1999/07/20 20:48:49 + +commit 1132ce76b9ae341bd356c7ba9d811638bcd2a97a +Author: jbj +Date: Tue Jul 20 20:48:29 1999 +0000 + + Save and restore 1st char of next line in multiline expansion correctly. + + CVS patchset: 3191 + CVS date: 1999/07/20 20:48:29 + +commit c50704544bf39d077f73f33aea423db911308b8e +Author: jbj +Date: Tue Jul 20 18:51:57 1999 +0000 + + fix: incomplete cleanup if --rebuilddb fails (#4115). + + CVS patchset: 3190 + CVS date: 1999/07/20 18:51:57 + +commit 16b83080f748d6b409b7cf07eb1aa61a97d892d9 +Author: jbj +Date: Tue Jul 20 18:50:33 1999 +0000 + + Orphan. + + CVS patchset: 3189 + CVS date: 1999/07/20 18:50:33 + +commit dbe7cc83782fe4851276e9b83e58527960e4cfb9 +Author: jbj +Date: Tue Jul 20 11:56:22 1999 +0000 + + Credit the PLD team. + + CVS patchset: 3188 + CVS date: 1999/07/20 11:56:22 + +commit adb4f581473e441123d9c1bee9f2b3e23ca82312 +Author: jbj +Date: Mon Jul 19 22:28:41 1999 +0000 + + Orphans. + + CVS patchset: 3187 + CVS date: 1999/07/19 22:28:41 + +commit 42487584200e0f47d8a8665468d9022496986e11 +Author: jbj +Date: Mon Jul 19 22:20:57 1999 +0000 + + Man pages have moved. + + CVS patchset: 3186 + CVS date: 1999/07/19 22:20:57 + +commit ac305baca71f512e09656c98378cc0587ebbb6c2 +Author: jbj +Date: Mon Jul 19 22:20:01 1999 +0000 + + Orphans. + + CVS patchset: 3185 + CVS date: 1999/07/19 22:20:01 + +commit 7fb78a663d30c83a0df3cf3bac45c12f85b19aff +Author: jbj +Date: Mon Jul 19 22:15:08 1999 +0000 + + Bump release. + + CVS patchset: 3184 + CVS date: 1999/07/19 22:15:08 + +commit 46572592b4f958444c854bb9ee0cc6e7d8cd1d86 +Author: jbj +Date: Mon Jul 19 22:13:12 1999 +0000 + + add pl translation and man pages (Tomasz K?oczko et al). + + CVS patchset: 3183 + CVS date: 1999/07/19 22:13:12 + +commit 816ca6b54c3a4e5776bc091bfe3e754f77704231 +Author: jbj +Date: Mon Jul 19 21:25:53 1999 +0000 + + debug multiline macro expansion. + + CVS patchset: 3182 + CVS date: 1999/07/19 21:25:53 + +commit b499fad53862605683cda2a897ba953406e178e3 +Author: gafton +Date: Mon Jul 19 20:17:59 1999 +0000 + + Updated + + CVS patchset: 3181 + CVS date: 1999/07/19 20:17:59 + +commit c4e615007f983bb065f86a58b15ba792eeba51d3 +Author: jbj +Date: Mon Jul 19 18:39:48 1999 +0000 + + permit multiline macro expansions. + + CVS patchset: 3180 + CVS date: 1999/07/19 18:39:48 + +commit 673bd51d8bd8e3d2f24bdb4906af37975a8628a5 +Author: jbj +Date: Mon Jul 19 16:20:02 1999 +0000 + + Another dead strtok. + + CVS patchset: 3179 + CVS date: 1999/07/19 16:20:02 + +commit 07a1b9a39fe390001df01eba15d9faec0682261d +Author: jbj +Date: Mon Jul 19 13:23:00 1999 +0000 + + Bump release. + + CVS patchset: 3178 + CVS date: 1999/07/19 13:23:00 + +commit 902cdf4c1b2715f5b19007dbcfabf5579cc42f8d +Author: jbj +Date: Mon Jul 19 13:22:21 1999 +0000 + + fix: %if parsing skipped 3 chars too many. + + CVS patchset: 3177 + CVS date: 1999/07/19 13:22:21 + +commit 78808908b4bbf3086cb0ab0688dd20b51b29f5db +Author: jbj +Date: Sat Jul 17 19:00:45 1999 +0000 + + make query (rpm -qvl) behave like (POSIX?) ls for older files (#4050). + + CVS patchset: 3176 + CVS date: 1999/07/17 19:00:45 + +commit 149db88d72ba9b4114abe1c53ebc9768e5578ef7 +Author: gafton +Date: Fri Jul 16 08:46:16 1999 +0000 + + ignore perl + + CVS patchset: 3175 + CVS date: 1999/07/16 08:46:16 + +commit 8e4d1531d6e10bbe405d7f80b4f1ae940ec5cf88 +Author: gafton +Date: Fri Jul 16 08:45:24 1999 +0000 + + New file + + CVS patchset: 3174 + CVS date: 1999/07/16 08:45:24 + +commit 1d18d03f9d3632cea29e45db952a22a601f09fbe +Author: gafton +Date: Fri Jul 16 08:44:54 1999 +0000 + + Added rpmdb traversal + + CVS patchset: 3173 + CVS date: 1999/07/16 08:44:54 + +commit dfb29dcf5b7d676ca572bdb324612df4e83c480c +Author: jbj +Date: Thu Jul 15 23:08:18 1999 +0000 + + Force static library linkage. + + CVS patchset: 3172 + CVS date: 1999/07/15 23:08:18 + +commit 5ad244b9d1fc1c7110eebe6c2b104afa7514ecd9 +Author: jbj +Date: Thu Jul 15 22:26:15 1999 +0000 + + Change shared lib defaults. + + CVS patchset: 3171 + CVS date: 1999/07/15 22:26:15 + +commit 40354061750dac15bc0cf036626a5e5220a271c7 +Author: jbj +Date: Thu Jul 15 22:01:29 1999 +0000 + + Typo. + + CVS patchset: 3170 + CVS date: 1999/07/15 22:01:29 + +commit d9f36428bc78fafc8b658bb0f10358040952186b +Author: jbj +Date: Thu Jul 15 21:48:28 1999 +0000 + + Typo. + + CVS patchset: 3169 + CVS date: 1999/07/15 21:48:28 + +commit 48114d505c8789c6b409a6fb28ddf2c05f5e223a +Author: jbj +Date: Thu Jul 15 21:47:49 1999 +0000 + + Build shared libs too. + + CVS patchset: 3168 + CVS date: 1999/07/15 21:47:49 + +commit 3655254b008133be1172cceb53b5b4a89fc78afc +Author: jbj +Date: Thu Jul 15 21:18:39 1999 +0000 + + Popuilate. + + CVS patchset: 3167 + CVS date: 1999/07/15 21:18:39 + +commit d73d7c130cc6dde7eb651c149b97233b994df3af +Author: jbj +Date: Thu Jul 15 21:09:52 1999 +0000 + + Carry Makefile.in for now. + + CVS patchset: 3166 + CVS date: 1999/07/15 21:09:52 + +commit 35f09998f87dca3101b5989db4ff8c4df9fbac02 +Author: jbj +Date: Thu Jul 15 21:02:54 1999 +0000 + + add python bindings to rpm-devel (linux only). + + CVS patchset: 3165 + CVS date: 1999/07/15 21:02:54 + +commit c3f62fe632456a58e60107f972692a9f5afe9f00 +Author: jbj +Date: Thu Jul 15 20:15:23 1999 +0000 + + Automake to create python bindings. + + CVS patchset: 3164 + CVS date: 1999/07/15 20:15:23 + +commit aa85d25a0e5e3b146f8f65c582c652d62109869c +Author: gafton +Date: Wed Jul 14 22:06:21 1999 +0000 + + Added transactions skeleton + + CVS patchset: 3163 + CVS date: 1999/07/14 22:06:21 + +commit ed0b4f5fc1511f69f8e179edefd4688b00b82b39 +Author: gafton +Date: Wed Jul 14 18:23:16 1999 +0000 + + added comment + + CVS patchset: 3162 + CVS date: 1999/07/14 18:23:16 + +commit 99c487c9eff00d3b8b3d5bec1d51aa6084976d65 +Author: jbj +Date: Wed Jul 14 18:15:09 1999 +0000 + + Copy from anaconda/rpmmodules. + + CVS patchset: 3161 + CVS date: 1999/07/14 18:15:09 + +commit 4352ef4a987e56b69f91be767427fae1593eb310 +Author: gafton +Date: Wed Jul 14 17:23:30 1999 +0000 + + Updated + + CVS patchset: 3160 + CVS date: 1999/07/14 17:23:30 + +commit 4adbd80d74a551019494c49d64cf33d2a36b4ffe +Author: jbj +Date: Wed Jul 14 16:53:57 1999 +0000 + + Orphans. + + CVS patchset: 3159 + CVS date: 1999/07/14 16:53:57 + +commit a10abcc2bf24b060a15701e5fd6311275e3715fd +Author: jbj +Date: Wed Jul 14 16:52:52 1999 +0000 + + Merge Christian's preliminary perl bindings. + + CVS patchset: 3158 + CVS date: 1999/07/14 16:52:52 + +commit 40d76f715b4a71e2c69d185e83177b1c2cef9750 +Author: jbj +Date: Wed Jul 14 16:47:30 1999 +0000 + + move checksig/resign major modes into rpmlib. + + CVS patchset: 3157 + CVS date: 1999/07/14 16:47:30 + +commit 4a0755d14fad844a3953b5abaa95bf255d80f0ba +Author: jbj +Date: Wed Jul 14 16:09:41 1999 +0000 + + Create from top level checksig.c. + + CVS patchset: 3156 + CVS date: 1999/07/14 16:09:41 + +commit d795e1e296bc300ee6ae51f9b7037e6b9de82500 +Author: jbj +Date: Wed Jul 14 15:43:30 1999 +0000 + + move install/erase major modes into rpmlib. + + CVS patchset: 3155 + CVS date: 1999/07/14 15:43:30 + +commit 6fef7c55e95b1d7481132b23da3435958e66ed3a +Author: jbj +Date: Wed Jul 14 15:28:03 1999 +0000 + + Create from top level install.c. + + CVS patchset: 3154 + CVS date: 1999/07/14 15:28:03 + +commit 3165d323386c48a2d7e644dae155620d9479c750 +Author: jbj +Date: Wed Jul 14 14:36:10 1999 +0000 + + Eliminate static prototypes. + + CVS patchset: 3153 + CVS date: 1999/07/14 14:36:10 + +commit 4bd2f3531a51fd99adb4e3e7007a3ffee1b178ef +Author: jbj +Date: Tue Jul 13 23:33:02 1999 +0000 + + File internals rearranged to taste. + + CVS patchset: 3152 + CVS date: 1999/07/13 23:33:02 + +commit fca8845a9a45f9d2d8940f145b311ef79d51c1ee +Author: jbj +Date: Tue Jul 13 23:19:08 1999 +0000 + + Eliminate static prototypes. + + CVS patchset: 3151 + CVS date: 1999/07/13 23:19:08 + +commit 348fcc286d45687fc7d00312a13c1f9f20bcd661 +Author: jbj +Date: Tue Jul 13 22:53:46 1999 +0000 + + Eliminate static prototypes. + + CVS patchset: 3150 + CVS date: 1999/07/13 22:53:46 + +commit 05dc5eaccf810133472f31223784419321490bb3 +Author: jbj +Date: Tue Jul 13 22:45:06 1999 +0000 + + Eliminate static prototypes. + + CVS patchset: 3149 + CVS date: 1999/07/13 22:45:06 + +commit fe8d812f821f66ea70419382bba04abdc8bc9e17 +Author: jbj +Date: Tue Jul 13 22:21:25 1999 +0000 + + Eliminate static prototypes. + + CVS patchset: 3148 + CVS date: 1999/07/13 22:21:25 + +commit 9bcf57372b268034b6ef6c3f24e0a12cf5ff63ad +Author: jbj +Date: Tue Jul 13 22:17:16 1999 +0000 + + Eliminate const warning. + + CVS patchset: 3147 + CVS date: 1999/07/13 22:17:16 + +commit 0ea6b769d96189da1cda0ae462d7eb306e78d00e +Author: jbj +Date: Tue Jul 13 22:08:55 1999 +0000 + + Remove static prototypes. + + CVS patchset: 3146 + CVS date: 1999/07/13 22:08:55 + +commit 71b7c18f72a0beff8348f8ba65f5bc70f4d5726f +Author: jbj +Date: Tue Jul 13 22:05:28 1999 +0000 + + Eliminate static prototypes. + + CVS patchset: 3145 + CVS date: 1999/07/13 22:05:28 + +commit 42892b018d529a5fa244b40a6a356b2135545d9d +Author: jbj +Date: Tue Jul 13 22:00:05 1999 +0000 + + Eliminate static prototypes. + + CVS patchset: 3144 + CVS date: 1999/07/13 22:00:05 + +commit 8bd997f2e0d977ddde56ea4debad83197355a2c9 +Author: jbj +Date: Tue Jul 13 21:37:57 1999 +0000 + + Perl bindings need + #include + not + #include "foo.h" + + CVS patchset: 3143 + CVS date: 1999/07/13 21:37:57 + +commit 2f400a54b2194cc1caee95cb0a3da74f4bce1735 +Author: jbj +Date: Sun Jul 11 18:02:31 1999 +0000 + + Use size of target not claimed size of soruce in memcpy. + + CVS patchset: 3142 + CVS date: 1999/07/11 18:02:31 + +commit 5992f0fe0329285149d07945d2450da8a72ac981 +Author: jbj +Date: Sat Jul 10 20:51:35 1999 +0000 + + add epoch (as [0-9]*:version-release) to install dependency parse. + + CVS patchset: 3141 + CVS date: 1999/07/10 20:51:35 + +commit 050075d98e184dbf768bd8df20fe7bd2135b8bea +Author: jbj +Date: Sat Jul 10 17:21:36 1999 +0000 + + Bump release. + + CVS patchset: 3140 + CVS date: 1999/07/10 17:21:36 + +commit 3138e99fd496abc3db828e7f3cadfa5e442b102b +Author: jbj +Date: Sat Jul 10 17:21:10 1999 +0000 + + include shared libs in rpm-devel (no versioning yet). + + CVS patchset: 3139 + CVS date: 1999/07/10 17:21:10 + +commit 8938ee3a9d1b7478cdfa022785b734355cae31c6 +Author: jbj +Date: Sat Jul 10 16:23:30 1999 +0000 + + Eliminate unnecessary extern. + + CVS patchset: 3138 + CVS date: 1999/07/10 16:23:30 + +commit ab69afb6e3b8382362f598a09ade77b5dcc133eb +Author: jbj +Date: Thu Jul 8 22:37:05 1999 +0000 + + Typos. + + CVS patchset: 3137 + CVS date: 1999/07/08 22:37:05 + +commit 25e6b06959c7f0ee81654059e7770c60d70d9ba3 +Author: jbj +Date: Thu Jul 8 22:10:33 1999 +0000 + + add configure scaffolding to support rpm-4.0 packages. + + CVS patchset: 3136 + CVS date: 1999/07/08 22:10:33 + +commit 7f9aeb867a19b3d6262c065054d7b1b6bb0844f3 +Author: jbj +Date: Thu Jul 8 19:59:55 1999 +0000 + + add --eval to find result of macro expansion. + + CVS patchset: 3135 + CVS date: 1999/07/08 19:59:55 + +commit 9c1719e45f3ab1547d83e74099fd953942cad26d +Author: jbj +Date: Wed Jul 7 19:26:02 1999 +0000 + + Ignore .libs. + + CVS patchset: 3134 + CVS date: 1999/07/07 19:26:02 + +commit d70b2a549638b0549b9e2073fce5d586f58c30a8 +Author: jbj +Date: Wed Jul 7 19:25:34 1999 +0000 + + Begin rpm-3.0.3. + + CVS patchset: 3133 + CVS date: 1999/07/07 19:25:34 + +commit f8ea714939333dbd77d37ccfcb2e8cd2b1a00b02 +Author: jbj +Date: Wed Jul 7 14:30:35 1999 +0000 + + Release rpm-3.0.2. + + CVS patchset: 3132 + CVS date: 1999/07/07 14:30:35 + +commit 110e5ef1b0fae309fd965f33e1449e4083a2c52d +Author: jbj +Date: Wed Jul 7 14:29:25 1999 +0000 + + tru64: use /bin/sh not /usr/bin/ksh in find-requires. + + CVS patchset: 3131 + CVS date: 1999/07/07 14:29:25 + +commit 419325db063cb976c1806d37a7adebbd18ba0bcf +Author: jbj +Date: Wed Jul 7 14:28:07 1999 +0000 + + *** empty log message *** + + CVS patchset: 3130 + CVS date: 1999/07/07 14:28:07 + +commit 9ed3f8f6fd74b8684d5ae86adb89e0102def5434 +Author: jbj +Date: Tue Jul 6 17:32:49 1999 +0000 + + changelog stamp broken w/ big endian 64 bit time_t (Stephane Erania). + + CVS patchset: 3129 + CVS date: 1999/07/06 17:32:49 + +commit e49a44937bc9510e08e0673c4d09eb853186a63d +Author: jbj +Date: Tue Jul 6 12:51:16 1999 +0000 + + Bump release. + + CVS patchset: 3128 + CVS date: 1999/07/06 12:51:16 + +commit 6782ac4fa4e03a835cbc56217c44a49501826397 +Author: jbj +Date: Tue Jul 6 12:50:45 1999 +0000 + + Check that url contained service field. + Return strerror if ftpStrerror is not enough. + + CVS patchset: 3127 + CVS date: 1999/07/06 12:50:45 + +commit 8e1bdb7ebd20ab61953270b6f5ba78f48fe0d21d +Author: jbj +Date: Sat Jul 3 23:36:35 1999 +0000 + + Add newborns. + + CVS patchset: 3126 + CVS date: 1999/07/03 23:36:35 + +commit d64cb1c78cd91fdde3bc1be2b588f7c9890e5c77 +Author: jbj +Date: Sat Jul 3 23:21:36 1999 +0000 + + Reorder. Ignore javadeps. + + CVS patchset: 3125 + CVS date: 1999/07/03 23:21:36 + +commit 400ffe008c8baa82e7b6e56fdaa5cfd7c61fd2f9 +Author: jbj +Date: Sat Jul 3 22:58:08 1999 +0000 + + 12 more dead strtoks. + + CVS patchset: 3124 + CVS date: 1999/07/03 22:58:08 + +commit ebdafb810ec772a905f03fc5ee923b5841807af7 +Author: jbj +Date: Sat Jul 3 17:59:28 1999 +0000 + + Redundant line. + + CVS patchset: 3123 + CVS date: 1999/07/03 17:59:28 + +commit 45637b94c1e6929b3e478ec9a1ae490a624467de +Author: jbj +Date: Sat Jul 3 14:52:06 1999 +0000 + + Add arch/os for IBM Big Iron. + + CVS patchset: 3122 + CVS date: 1999/07/03 14:52:06 + +commit 25643f9764eedaff0769483112bd8b31b17b6ead +Author: jbj +Date: Fri Jul 2 21:15:25 1999 +0000 + + Add includes for more robust standalone behavior. + + CVS patchset: 3121 + CVS date: 1999/07/02 21:15:25 + +commit 56496ce0886ebf4ca168387f4fa149b3fd52a6d9 +Author: jbj +Date: Fri Jul 2 20:56:04 1999 +0000 + + Quick 'n dirty macro evaluation. + + CVS patchset: 3120 + CVS date: 1999/07/02 20:56:04 + +commit 5fc70a54d73a54638812ba224cddbf84b5b5e1bf +Author: jbj +Date: Wed Jun 30 21:24:06 1999 +0000 + + More ugliness. + + CVS patchset: 3119 + CVS date: 1999/06/30 21:24:06 + +commit 2cc65c7fb730acc5459a41ba45119950c9dd7e4c +Author: jbj +Date: Wed Jun 30 21:18:43 1999 +0000 + + Ugly hack to get query dependencies right. + + CVS patchset: 3118 + CVS date: 1999/06/30 21:18:43 + +commit 082ee36e0a65e817dd44936cfa89e50fcefcd5af +Author: jbj +Date: Wed Jun 30 20:09:31 1999 +0000 + + move url.c and ftp.c to rpmlib right next to query. + + CVS patchset: 3117 + CVS date: 1999/06/30 20:09:31 + +commit 10b1febba767d88cb43983b9e44cbb1d345f7544 +Author: jbj +Date: Wed Jun 30 19:03:17 1999 +0000 + + Bump release. + + CVS patchset: 3116 + CVS date: 1999/06/30 19:03:17 + +commit ae5b56fa00804e3391aba88038ee16798b486c90 +Author: jbj +Date: Wed Jun 30 19:02:46 1999 +0000 + + move url.c and ftp.c to rpmlib right next to query. + + CVS patchset: 3115 + CVS date: 1999/06/30 19:02:46 + +commit c0d41067da0219fdf0d2fccd8628f5d336554229 +Author: jbj +Date: Wed Jun 30 19:02:06 1999 +0000 + + Dead. + + CVS patchset: 3114 + CVS date: 1999/06/30 19:02:06 + +commit e77fec4b16d30f5ecacd033314f3e092e90ba050 +Author: jbj +Date: Wed Jun 30 19:01:47 1999 +0000 + + Use rpmurl.h not separate url.h ftp.h. + + CVS patchset: 3113 + CVS date: 1999/06/30 19:01:47 + +commit c9ba6cba9c3ed612d7bdb3978da1577dc314d76e +Author: jbj +Date: Wed Jun 30 14:18:05 1999 +0000 + + avoid numeric overflow in version comparison (Thayne Harbaugh). + + CVS patchset: 3112 + CVS date: 1999/06/30 14:18:05 + +commit 79ba901dfee62d4ef037b312974c12cfaa08858f +Author: jbj +Date: Mon Jun 28 21:26:57 1999 +0000 + + Better error message on ftp open failures. + + CVS patchset: 3111 + CVS date: 1999/06/28 21:26:57 + +commit de9f04066425bceb29d6ac5592fcd001c8d0f8e6 +Author: jbj +Date: Fri Jun 25 10:14:13 1999 +0000 + + fix: --checksig segfault with odd pgp output (e.g. w/o ~/.pgp) (#3720) + + CVS patchset: 3110 + CVS date: 1999/06/25 10:14:13 + +commit 7f5a4a4aed21b30717605d6e1d7829661476af81 +Author: jbj +Date: Thu Jun 24 22:23:46 1999 +0000 + + fix: bsearch needs macro table sorted after undefine. + + CVS patchset: 3109 + CVS date: 1999/06/24 22:23:46 + +commit 8bc8f024e61fc218fe8285e33e645a2bb8df7ed6 +Author: jbj +Date: Wed Jun 23 21:01:38 1999 +0000 + + Finesse tagName dependency loop. + + CVS patchset: 3108 + CVS date: 1999/06/23 21:01:38 + +commit 963f0117f943daaab57110a5438e17da42878c01 +Author: jbj +Date: Tue Jun 22 23:02:15 1999 +0000 + + Bump release. + + CVS patchset: 3107 + CVS date: 1999/06/22 23:02:15 + +commit 3e6bf30555ba476c016475ef96485bccb99007d2 +Author: jbj +Date: Tue Jun 22 23:00:26 1999 +0000 + + fix: false fingerprint stat cache hit -- "the tetex problem". + + CVS patchset: 3106 + CVS date: 1999/06/22 23:00:26 + +commit 190bef3fe67bdfcb0ca6cede598ba660cfca1f08 +Author: jbj +Date: Sat Jun 19 18:09:49 1999 +0000 + + Re-initialize dependency flags for each token. + + CVS patchset: 3105 + CVS date: 1999/06/19 18:09:49 + +commit 9da0429a4e7801ce68d068ef4faa483a2535c76c +Author: jbj +Date: Sat Jun 19 17:43:53 1999 +0000 + + Bump release. + + CVS patchset: 3104 + CVS date: 1999/06/19 17:43:53 + +commit 2d040b54c41bbce6187f0574dbb297a9d71379f2 +Author: jbj +Date: Fri Jun 18 17:47:59 1999 +0000 + + Don't let executables depend on libNoVersion.so + + CVS patchset: 3103 + CVS date: 1999/06/18 17:47:59 + +commit a7052073c667e579e578612ad380bc87ce8fc01a +Author: jbj +Date: Fri Jun 18 14:37:11 1999 +0000 + + Sanity. + + CVS patchset: 3102 + CVS date: 1999/06/18 14:37:11 + +commit 35f20f2eceeaf27b44d8d5639e2a95277a4dc792 +Author: jbj +Date: Fri Jun 18 14:33:16 1999 +0000 + + Incorrect sense matched. + + CVS patchset: 3101 + CVS date: 1999/06/18 14:33:16 + +commit c2cef6642004897e415dc203eeae436d65cf87fa +Author: jbj +Date: Thu Jun 17 23:28:54 1999 +0000 + + Typo. + + CVS patchset: 3100 + CVS date: 1999/06/17 23:28:54 + +commit d13637e024732c50a55f027b54d58a2359725153 +Author: jbj +Date: Thu Jun 17 23:22:01 1999 +0000 + + Typo. + + CVS patchset: 3099 + CVS date: 1999/06/17 23:22:01 + +commit e98e5cc4bcc3b3066e4a2f83d63ceb78e6c3363c +Author: jbj +Date: Thu Jun 17 22:37:40 1999 +0000 + + Bump release. + + CVS patchset: 3098 + CVS date: 1999/06/17 22:37:40 + +commit 51487c42f533a75eccc10767324e3a1cc9e48ab2 +Author: jbj +Date: Thu Jun 17 22:29:22 1999 +0000 + + fix: --rebuilddb with --root dinna remove directory (Michael Andres). + + CVS patchset: 3097 + CVS date: 1999/06/17 22:29:22 + +commit bafb62fbb0e8d912fe372f776be9280df76e6679 +Author: jbj +Date: Thu Jun 17 21:35:34 1999 +0000 + + MiNT port (Guido Flohr ). + + CVS patchset: 3096 + CVS date: 1999/06/17 21:35:34 + +commit 8fa7181fa3b0db8e282c03e8df251cb32518bfa3 +Author: jbj +Date: Thu Jun 17 20:18:08 1999 +0000 + + eliminate find-requirements on libNoVersion (Red Hat linux only). + add new-fangled requires on "libc.so.6(GLIBC_2.1)" (sparc-linux only). + + CVS patchset: 3095 + CVS date: 1999/06/17 20:18:08 + +commit a5697afafd9f5c8e480c0f6052cf4885ce8af811 +Author: jbj +Date: Thu Jun 17 15:44:47 1999 +0000 + + don't spin while waiting for delayed requires/provides input (#3289). + common parse for all dependency token syntax. + + CVS patchset: 3094 + CVS date: 1999/06/17 15:44:47 + +commit 567a4e033ec21ad30baf4e379ffbab30503795df +Author: jbj +Date: Wed Jun 16 21:45:11 1999 +0000 + + rpm-devel should require popt (#3125). + + CVS patchset: 3093 + CVS date: 1999/06/16 21:45:11 + +commit 9a01054a201bcb624434632bdefdec94b881d16f +Author: jbj +Date: Wed Jun 16 21:39:57 1999 +0000 + + resurrect "rpm -Va --nofiles" (i.e. dependencies only) (#3111) + + CVS patchset: 3092 + CVS date: 1999/06/16 21:39:57 + +commit 984a6ad296e5643a638bbca6509b7ed55cbc1146 +Author: jbj +Date: Wed Jun 16 20:02:17 1999 +0000 + + Propagate CONFIG_SITE to popt (#3212). + + CVS patchset: 3091 + CVS date: 1999/06/16 20:02:17 + +commit b63a3e97dfc8414fcfde9d127cac24d7a1be64e8 +Author: jbj +Date: Tue Jun 15 14:46:31 1999 +0000 + + build root from cmd line did not set macro %buildroot. + + CVS patchset: 3090 + CVS date: 1999/06/15 14:46:31 + +commit cef1847364f17c4bc752488c200bf4237207bf62 +Author: jbj +Date: Tue Jun 15 14:35:17 1999 +0000 + + Plug memory leak. + + CVS patchset: 3089 + CVS date: 1999/06/15 14:35:17 + +commit 18d8dfc0c99ffd304b5eb0fabc23b8b37615cab2 +Author: jbj +Date: Tue Jun 15 12:38:30 1999 +0000 + + Update to libtool-1.3.2. + + CVS patchset: 3088 + CVS date: 1999/06/15 12:38:30 + +commit 02d0ab97b631254e37b1e4e5026cc477b72c08ba +Author: jbj +Date: Wed Jun 9 19:06:48 1999 +0000 + + wrong: "arch_compat: sun4u: sparc" + + CVS patchset: 3087 + CVS date: 1999/06/09 19:06:48 + +commit 00425624b6a6af73226a5cea5e7547f29fb84490 +Author: jbj +Date: Wed Jun 9 14:13:31 1999 +0000 + + don't clobber LDFLAGS in top-level Makefile (Tim Mooney). + move libtool version forward. + + CVS patchset: 3086 + CVS date: 1999/06/09 14:13:31 + +commit 07a258e32922b9d49b967a053246e3e2046e1887 +Author: jbj +Date: Sat Jun 5 21:00:53 1999 +0000 + + Remove compiler warnings. + + CVS patchset: 3085 + CVS date: 1999/06/05 21:00:53 + +commit b7a61f5b889f9c3b1cbd628847dd8ac47c243bd6 +Author: jbj +Date: Sat Jun 5 20:52:30 1999 +0000 + + Add javadeps and perl provides/requires scripts (Ken Estes). + + CVS patchset: 3084 + CVS date: 1999/06/05 20:52:30 + +commit f3a29caf8fabf6f6280a976c41c8d3bba7d7e13a +Author: jbj +Date: Fri Jun 4 19:05:22 1999 +0000 + + add vpkg-provides.sh (Tim Mooney). + + CVS patchset: 3083 + CVS date: 1999/06/04 19:05:22 + +commit f2ad04e0634ff28fded04e277a3816d804ff152d +Author: jbj +Date: Wed Jun 2 20:32:49 1999 +0000 + + updated ru translation (Sergey Kubushin). + + CVS patchset: 3082 + CVS date: 1999/06/02 20:32:49 + +commit b846572401c3087398a59cfb7877c4ae67b8d84d +Author: jbj +Date: Wed Jun 2 18:08:50 1999 +0000 + + move printDep* routines into rpmlib for gnorpm et al. + + CVS patchset: 3081 + CVS date: 1999/06/02 18:08:50 + +commit cde2b85a9d8dd04897b8e73aa456bd0c33fad93e +Author: jbj +Date: Wed Jun 2 14:45:46 1999 +0000 + + fix: bigendian's with longlong file sizes (e.g. IRIX) dinna work. + + CVS patchset: 3080 + CVS date: 1999/06/02 14:45:46 + +commit 3e2edc54224f6d36e3127816b53fd641785337a4 +Author: jbj +Date: Wed May 26 04:05:33 1999 +0000 + + add BuildConflicts: and BuildRequires: in spec file and src rpm. + + CVS patchset: 3079 + CVS date: 1999/05/26 04:05:33 + +commit b6b3485847db4317122e3d42db7a16d55c590222 +Author: jbj +Date: Wed May 26 00:09:42 1999 +0000 + + Typo. + + CVS patchset: 3078 + CVS date: 1999/05/26 00:09:42 + +commit a162f5ddbd8aed0a8cbae61bc4b408152c010b6a +Author: jbj +Date: Tue May 25 20:24:46 1999 +0000 + + permit multiple "Provides: " lines in rpmrc (#2999). + + CVS patchset: 3077 + CVS date: 1999/05/25 20:24:46 + +commit de4a177dca6835246eb9d6ecd5d52559e52da2ff +Author: jbj +Date: Mon May 24 21:32:03 1999 +0000 + + eliminate armv4 entries from rpmrc (Andrew E. Mileski). + + CVS patchset: 3076 + CVS date: 1999/05/24 21:32:03 + +commit 2ed98fa0744f713bb1ca4d13b66197c070fdb603 +Author: jbj +Date: Mon May 24 20:37:52 1999 +0000 + + Begin 3.0.2. + + CVS patchset: 3075 + CVS date: 1999/05/24 20:37:52 + +commit f3fe795e955d4b524cfde881730879533367bdfa +Author: jbj +Date: Mon May 24 15:36:39 1999 +0000 + + add librpmbuild.a to the file list. + + CVS patchset: 3074 + CVS date: 1999/05/24 15:36:39 + +commit f85d25c0b07b3df0ef1ecb346f59f2b1e56b2c96 +Author: ewt +Date: Sun May 23 18:34:30 1999 +0000 + + 1) got --prefix working (again) + 2) rpmtransAddPackage() makes a copy of the relocation list + + CVS patchset: 3073 + CVS date: 1999/05/23 18:34:30 + +commit 1c79e3fe742b6f956227bf4bfe94de6202f706d7 +Author: ewt +Date: Sun May 23 18:34:06 1999 +0000 + + added lib-rpmrc + + CVS patchset: 3072 + CVS date: 1999/05/23 18:34:06 + +commit 15d28f59f6d474334dee41dd9f627167c2898b60 +Author: ewt +Date: Sun May 23 18:33:00 1999 +0000 + + added ia64 arch number + + CVS patchset: 3071 + CVS date: 1999/05/23 18:33:00 + +commit ce8c2d53efb93bc37fc0d13f9ae72e4691e5f64d +Author: jbj +Date: Tue May 18 14:11:01 1999 +0000 + + On HP-UX, FILENAME_MAX is only 14 -- use 4096 instead. + + CVS patchset: 3070 + CVS date: 1999/05/18 14:11:01 + +commit f11e91ff1d0f91fe73b1bcadb092cb9582f15b77 +Author: jbj +Date: Mon May 17 19:32:15 1999 +0000 + + Debug multiple %langs's per item. + + CVS patchset: 3069 + CVS date: 1999/05/17 19:32:15 + +commit 036cdfdc69bcfeb99ae91709c0b80dce746f6525 +Author: jbj +Date: Mon May 17 18:44:14 1999 +0000 + + permit %lang(xx,yy,zz) constructs -- 2 more dead strtoks. + + CVS patchset: 3068 + CVS date: 1999/05/17 18:44:14 + +commit 0c2d03c5b62ee36fc3cb76d5cd3b056e0c83ae15 +Author: jbj +Date: Mon May 17 16:40:11 1999 +0000 + + Force FILELANGS tag even if not specified. + + CVS patchset: 3067 + CVS date: 1999/05/17 16:40:11 + +commit c0b62c5773bf9ed8fdd563b9127c68ca032e3987 +Author: jbj +Date: Mon May 17 16:34:58 1999 +0000 + + Bump rlease. + + CVS patchset: 3066 + CVS date: 1999/05/17 16:34:58 + +commit 58a7953f0c816ca813ea092901cab515a93c8879 +Author: jbj +Date: Mon May 17 16:27:38 1999 +0000 + + permit multiple %lang(xx) markers on elements in %files. + + CVS patchset: 3065 + CVS date: 1999/05/17 16:27:38 + +commit 8d0c528b5942347c852ef733b1ef3a0df57aecb1 +Author: jbj +Date: Sat May 15 14:46:29 1999 +0000 + + fix: prevent return code wrap during packagage checking/resigning. + + CVS patchset: 3063 + CVS date: 1999/05/15 14:46:29 + +commit f3abab07b4e3b073c60bb7421aab551d32dc69d9 +Author: jbj +Date: Fri May 14 18:59:43 1999 +0000 + + Add nil macro. + + CVS patchset: 3062 + CVS date: 1999/05/14 18:59:43 + +commit 3dc8ed83ab4d4d409c88dbfc29b0d3264016b1a4 +Author: jbj +Date: Fri May 14 18:48:12 1999 +0000 + + another strtok bites the dust. + + CVS patchset: 3061 + CVS date: 1999/05/14 18:48:12 + +commit 6e5c77a7beaa8a65294a9c6c992e70e288fff89c +Author: jbj +Date: Thu May 13 14:26:58 1999 +0000 + + fix: conversion script left off leading underscores. + + CVS patchset: 3060 + CVS date: 1999/05/13 14:26:58 + +commit 73fb1d72355a5defacb8bd388afd5c13245b38f8 +Author: jbj +Date: Wed May 12 20:24:00 1999 +0000 + + fix: shared file not skipped when removed. + + CVS patchset: 3059 + CVS date: 1999/05/12 20:24:00 + +commit ac640010ef52ece0f125d2bded78ff91f1a5ef7e +Author: jbj +Date: Tue May 11 20:05:43 1999 +0000 + + better cpio error message if package contains missing hard links. + + CVS patchset: 3058 + CVS date: 1999/05/11 20:05:43 + +commit c276bd3827ce05f8fa95eca93a9afc835b2c3428 +Author: jbj +Date: Tue May 11 16:21:06 1999 +0000 + + Update-po. + + CVS patchset: 3057 + CVS date: 1999/05/11 16:21:06 + +commit 2b81e0423d9b2aaab6a00897235324f64781be52 +Author: jbj +Date: Tue May 11 16:13:28 1999 +0000 + + Remove verify.c + + CVS patchset: 3056 + CVS date: 1999/05/11 16:13:28 + +commit b638d1ef0e33d2de1d44199dc63345db36969fd5 +Author: jbj +Date: Mon May 10 23:41:04 1999 +0000 + + colesce query and verify modes. + + CVS patchset: 3055 + CVS date: 1999/05/10 23:41:04 + +commit 6e2d075970bfe25af4d7a1607cfd7472d60ae780 +Author: jbj +Date: Mon May 10 22:58:35 1999 +0000 + + Fix requires_eq macro. + + CVS patchset: 3054 + CVS date: 1999/05/10 22:58:35 + +commit 081ebcd142c3213ce7337ea60a47083a66640e1e +Author: jbj +Date: Fri May 7 19:40:51 1999 +0000 + + Typo. + + CVS patchset: 3053 + CVS date: 1999/05/07 19:40:51 + +commit 92dc15f7ffe5400e2beae7c099d1c9e99678b557 +Author: jbj +Date: Fri May 7 18:33:35 1999 +0000 + + fix: resurrect -Vp, -Vf and -Vg functionality. + + CVS patchset: 3052 + CVS date: 1999/05/07 18:33:35 + +commit 331076d9a13f4625650fbde1f517b8320ab5a432 +Author: jbj +Date: Thu May 6 23:21:08 1999 +0000 + + Add argument to specedit to choose between specs and powertools packages. + + CVS patchset: 3051 + CVS date: 1999/05/06 23:21:08 + +commit 5df8ebee630e9cbc6dfaea72925a7be596bd44f3 +Author: jbj +Date: Wed May 5 19:01:01 1999 +0000 + + Add perl macros (from Artur Frysiak ) + + CVS patchset: 3050 + CVS date: 1999/05/05 19:01:01 + +commit 8b7923f6bc11107d441a8edb6a08c81ab66c3cd6 +Author: jbj +Date: Wed May 5 13:25:25 1999 +0000 + + add rpm prefix to MD5 routines to avoid name conflict on solaris. + + CVS patchset: 3049 + CVS date: 1999/05/05 13:25:25 + +commit 05d3980fa413c89babe2a59221bd81804b6e6834 +Author: jbj +Date: Tue May 4 19:15:05 1999 +0000 + + Typo. + + CVS patchset: 3048 + CVS date: 1999/05/04 19:15:05 + +commit b3998debd6efff4729436ae299ec40ffd6c1f49a +Author: jbj +Date: Tue May 4 15:11:23 1999 +0000 + + Another typo. + + CVS patchset: 3047 + CVS date: 1999/05/04 15:11:23 + +commit fe3cab9b89662c710fcbab43977ce1376fcd1d9a +Author: jbj +Date: Tue May 4 14:26:56 1999 +0000 + + Typo. + + CVS patchset: 3046 + CVS date: 1999/05/04 14:26:56 + +commit 26c219a0d0efc67aa3b9945638e3dbbd3b997dcd +Author: jbj +Date: Mon May 3 23:20:42 1999 +0000 + + Bump release. + + CVS patchset: 3045 + CVS date: 1999/05/03 23:20:42 + +commit a918f8f9c00f220215902eccedbfbc2e1cb21fee +Author: jbj +Date: Mon May 3 23:20:08 1999 +0000 + + New flags to integrate rpmputtext with build system. + + CVS patchset: 3044 + CVS date: 1999/05/03 23:20:08 + +commit 07d8488056ca8cdc02c7239d5fd7d1217515d676 +Author: jbj +Date: Fri Apr 30 16:11:07 1999 +0000 + + Sanity. + + CVS patchset: 3043 + CVS date: 1999/04/30 16:11:07 + +commit ab46aedd86f681a46670e00383e529136c7eabbf +Author: jbj +Date: Fri Apr 30 15:55:45 1999 +0000 + + resurrect toplevel tar target. + spec file removal separate from source removal (Shing-Gene Yung). + + CVS patchset: 3042 + CVS date: 1999/04/30 15:55:45 + +commit d28afe6e1e4652c9e55af2f67b088517b9677f66 +Author: jbj +Date: Fri Apr 30 14:59:47 1999 +0000 + + fix: %doc wrongly inherits lang from last entry in %files. + + CVS patchset: 3041 + CVS date: 1999/04/30 14:59:47 + +commit 77317dc8f66b0f3b57f9998e61a71df872f36e90 +Author: jbj +Date: Fri Apr 30 14:56:32 1999 +0000 + + fix: non-apache servers need "GET ... HTTP/1.0" by the book. + + CVS patchset: 3040 + CVS date: 1999/04/30 14:56:32 + +commit ee185b8ef38bad9ac3d5ad42697e817572bcd7f0 +Author: jbj +Date: Thu Apr 29 21:48:24 1999 +0000 + + Strip rpmgettext/rpmputtext. + + CVS patchset: 3039 + CVS date: 1999/04/29 21:48:24 + +commit 11327c6c7e2061b625c276e1a6fb4a2ba1c49270 +Author: jbj +Date: Thu Apr 29 21:07:52 1999 +0000 + + Bump release. + + CVS patchset: 3038 + CVS date: 1999/04/29 21:07:52 + +commit d26418617c697b3118a4cc0c9eb94ea72b1e01d1 +Author: jbj +Date: Thu Apr 29 19:18:22 1999 +0000 + + fix: prefer pgp2.6.3 over pgp5 if both are installed. + + CVS patchset: 3037 + CVS date: 1999/04/29 19:18:22 + +commit 73996a7806f9cd20c43af217523a5eba043cf097 +Author: jbj +Date: Wed Apr 28 14:20:31 1999 +0000 + + Update RU translation. + + CVS patchset: 3036 + CVS date: 1999/04/28 14:20:31 + +commit b72b138ea595c95697a5bb4e01dd504c41cd8248 +Author: jbj +Date: Wed Apr 28 14:12:55 1999 +0000 + + Update-po before new RU files. + + CVS patchset: 3035 + CVS date: 1999/04/28 14:12:55 + +commit e305220516334651a46fdced9ce508c31add929b +Author: jbj +Date: Wed Apr 28 13:49:37 1999 +0000 + + Sanity. + + CVS patchset: 3034 + CVS date: 1999/04/28 13:49:37 + +commit 9bb2e8ddc1145c9607a6b334f56066b4500b03b2 +Author: jbj +Date: Tue Apr 27 19:46:45 1999 +0000 + + Typo. + + CVS patchset: 3033 + CVS date: 1999/04/27 19:46:45 + +commit 7d84d9a070ee4d5026230c435fb0bf72142d5e64 +Author: jbj +Date: Mon Apr 26 17:54:28 1999 +0000 + + fix: optflags not implicitly set to canonical arch value. + + CVS patchset: 3032 + CVS date: 1999/04/26 17:54:28 + +commit 5e43be57bd1ed50d0e4b2e3a7cc8276f39266e05 +Author: ewt +Date: Mon Apr 26 17:38:44 1999 +0000 + + s/querybypkg/filesbypkg/g + + CVS patchset: 3031 + CVS date: 1999/04/26 17:38:44 + +commit 4ea813b28b89cb42c37605b58d18cb0eb7fa8e88 +Author: jbj +Date: Mon Apr 26 15:01:40 1999 +0000 + + Shell bulletproofing. + + CVS patchset: 3030 + CVS date: 1999/04/26 15:01:40 + +commit b8a99b4444fca7452a9f1f367c24699ef16d1d11 +Author: ewt +Date: Thu Apr 22 16:01:02 1999 +0000 + + *** empty log message *** + + CVS patchset: 3029 + CVS date: 1999/04/22 16:01:02 + +commit c276ec532c2331fa16cc9e3ca295342a086379c2 +Author: ewt +Date: Thu Apr 22 16:00:43 1999 +0000 + + $2 passed to %triggerpostun was wong + + CVS patchset: 3028 + CVS date: 1999/04/22 16:00:43 + +commit 97843056606d8c2c33c9a24d1f5c17b6dacbbcfc +Author: jbj +Date: Wed Apr 21 16:20:20 1999 +0000 + + Typo. + + CVS patchset: 3027 + CVS date: 1999/04/21 16:20:20 + +commit 4c10d8f2325f6a658c3ae78d74b267990b9fe510 +Author: jbj +Date: Wed Apr 21 15:35:06 1999 +0000 + + Bump version/release. + + CVS patchset: 3026 + CVS date: 1999/04/21 15:35:06 + +commit 65cc651fc4d85a5c4ebc0469f0757d7f083db3cc +Author: jbj +Date: Wed Apr 21 15:32:23 1999 +0000 + + fix: noarch header gets initialized differently. + + CVS patchset: 3025 + CVS date: 1999/04/21 15:32:23 + +commit a0d3acc8a3e386940e153dcd7ddf1b110820dd96 +Author: jbj +Date: Tue Apr 20 22:45:52 1999 +0000 + + Add -C dir and -M options to %GNUconfigure. + + CVS patchset: 3024 + CVS date: 1999/04/20 22:45:52 + +commit 0cf9b0bdfed25fd22c80b32219b33edd61ed05dc +Author: jbj +Date: Tue Apr 20 19:17:23 1999 +0000 + + fix: % before non-alphabetic non-macro special now passed unscathed. + + CVS patchset: 3023 + CVS date: 1999/04/20 19:17:23 + +commit 10b88439eb63852e8a0d5cb1a32724529ee49c61 +Author: jbj +Date: Tue Apr 20 18:21:08 1999 +0000 + + Add core set of autoconf/automake variables. + + CVS patchset: 3022 + CVS date: 1999/04/20 18:21:08 + +commit 4542ab23b2b386499366dfd555657c5bddb5e779 +Author: jbj +Date: Mon Apr 19 08:41:30 1999 +0000 + + Make 3.0 release same as Red Hat version. + + CVS patchset: 3017 + CVS date: 1999/04/19 08:41:30 + +commit 8d7018d847f1da914b6e0d59378d07ab63cb70bb +Author: jbj +Date: Mon Apr 19 08:28:20 1999 +0000 + + Release rpm 3.0. + + CVS patchset: 3016 + CVS date: 1999/04/19 08:28:20 + +commit 56b31cf8324974da891d028eec4a92072a5a5271 +Author: jbj +Date: Sun Apr 18 20:56:19 1999 +0000 + + Root reserved fs blocks adjustment should be 1.05 (not 1/0.95). + + CVS patchset: 3015 + CVS date: 1999/04/18 20:56:19 + +commit 553cc8be098f827627cae1ebeb2b206b054e601d +Author: jbj +Date: Sun Apr 18 20:18:48 1999 +0000 + + Prereq gawk, not awk. + + CVS patchset: 3014 + CVS date: 1999/04/18 20:18:48 + +commit 54b2127faa044f5729f74a5ce60e0543d2133add +Author: jbj +Date: Sun Apr 18 19:36:46 1999 +0000 + + Bump release. + + CVS patchset: 3013 + CVS date: 1999/04/18 19:36:46 + +commit c67e60d5e793ef2ba0f3327aa13e7cf693196d6e +Author: jbj +Date: Sun Apr 18 19:01:46 1999 +0000 + + convert per-system configuration in /etc/rpmrc to macros. + + CVS patchset: 3012 + CVS date: 1999/04/18 19:01:46 + +commit 3b9ca6b62e66d2e92160e0aa7ecf415fe499d575 +Author: jbj +Date: Sun Apr 18 17:08:49 1999 +0000 + + Fix disk space estimate. + + CVS patchset: 3011 + CVS date: 1999/04/18 17:08:49 + +commit ba617e479df389ae2faf9866e92e365756ab2b6d +Author: jbj +Date: Sat Apr 17 14:23:42 1999 +0000 + + check build prerequisites before building from specfile. + + CVS patchset: 3010 + CVS date: 1999/04/17 14:23:42 + +commit 68b321a44fb9b043909747cccec51c53613dd347 +Author: jbj +Date: Sat Apr 17 09:07:20 1999 +0000 + + Bump release. + + CVS patchset: 3009 + CVS date: 1999/04/17 09:07:20 + +commit b35e80b7b8d5c8d7d208721bffb2087b29c3819c +Author: jbj +Date: Sat Apr 17 08:38:18 1999 +0000 + + Update. + + CVS patchset: 3008 + CVS date: 1999/04/17 08:38:18 + +commit f3a36fd9c9cde77207c2301aa91d263468e43bae +Author: jbj +Date: Sat Apr 17 05:06:58 1999 +0000 + + Typo. + + CVS patchset: 3007 + CVS date: 1999/04/17 05:06:58 + +commit a36d27ad3a9e2bd8244b76eec15cb39d46a9e4ed +Author: jbj +Date: Fri Apr 16 23:06:17 1999 +0000 + + Add conversion script (johnsonm@rdhat.com). + + CVS patchset: 3006 + CVS date: 1999/04/16 23:06:17 + +commit 2320364c7762b11225be7a9511065ae207095a9f +Author: jbj +Date: Fri Apr 16 23:05:00 1999 +0000 + + Use statvfs on solaris2.6+ (Eddie Bugg ) + + CVS patchset: 3005 + CVS date: 1999/04/16 23:05:00 + +commit f13de7df8d75a321b08408a95292d51a40dc6c07 +Author: jbj +Date: Fri Apr 16 22:26:17 1999 +0000 + + Make sparc4[cdmu] compatible with noarch. + + CVS patchset: 3004 + CVS date: 1999/04/16 22:26:17 + +commit 220e344c339a61c3000196da3c5566a8c141bd43 +Author: jbj +Date: Fri Apr 16 06:15:27 1999 +0000 + + Bump release. + + CVS patchset: 3003 + CVS date: 1999/04/16 06:15:27 + +commit 59e22c8102383c060757a661b268567c7697ed3d +Author: jbj +Date: Fri Apr 16 05:44:36 1999 +0000 + + Add -f to combat new POSIX behavior chown/chgrp on dangling symlinks. + Hard configure absolute paths (rather than using which). + + CVS patchset: 3002 + CVS date: 1999/04/16 05:44:36 + +commit 5d946bae6109a9cdaeb25d81df83564ddeeac9b4 +Author: jbj +Date: Thu Apr 15 06:18:48 1999 +0000 + + Bump release. + + CVS patchset: 3001 + CVS date: 1999/04/15 06:18:48 + +commit 3c532167278b3f9b83dce9d97a45b5d1c3f5277a +Author: jbj +Date: Thu Apr 15 06:16:04 1999 +0000 + + typo. + + CVS patchset: 3000 + CVS date: 1999/04/15 06:16:04 + +commit bcdfc22cf73cdbcd968c96184c2b24b25d8b6807 +Author: jbj +Date: Thu Apr 15 06:14:34 1999 +0000 + + Fix: handle %config(noreplace) correctly for linuxconf. + + CVS patchset: 2999 + CVS date: 1999/04/15 06:14:34 + +commit 0530ddd0bbdefae60cc5a2035e7f49a6114010b4 +Author: jbj +Date: Thu Apr 15 05:38:43 1999 +0000 + + Make sure parens match. + + CVS patchset: 2998 + CVS date: 1999/04/15 05:38:43 + +commit aa2536a3dba3ac34a5d2d380276d88aa7c609758 +Author: ewt +Date: Wed Apr 14 19:49:17 1999 +0000 + + 2.95-4 + + CVS patchset: 2997 + CVS date: 1999/04/14 19:49:17 + +commit 0c1e1a7f4726608f9853a29dea239eaf836b3b95 +Author: ewt +Date: Wed Apr 14 19:48:25 1999 +0000 + + we need to remember about shared files long enough to handle config files + properly + + CVS patchset: 2996 + CVS date: 1999/04/14 19:48:25 + +commit 89e28f78e89e3f07cc4bbc61f5bf0d5d5ee1ad5a +Author: jbj +Date: Wed Apr 14 12:35:08 1999 +0000 + + Make silly headerGetEntry consistent throughout. + + CVS patchset: 2995 + CVS date: 1999/04/14 12:35:08 + +commit 9c6e100351d70b9d3724be36858baf72d6e23b72 +Author: jbj +Date: Wed Apr 14 11:42:35 1999 +0000 + + basename prototype. + + CVS patchset: 2994 + CVS date: 1999/04/14 11:42:35 + +commit 527e1bc4e0430a08f5a897ecee4feecdd57a6875 +Author: jbj +Date: Wed Apr 14 11:28:31 1999 +0000 + + fix: last update transaction set segfault bug in installer. + improved checks for statfs (Tim Mooney). + remove inconsistent use of __P((...)) throughout. + non-static inline functions caused IRIX cc pain. + CPIOERR_CHECK_ERRNO masking caused AIX cc warnings. + + CVS patchset: 2993 + CVS date: 1999/04/14 11:28:31 + +commit f5cf7b223f88c4cc975f4778010909209435fdae +Author: jbj +Date: Tue Apr 13 22:58:08 1999 +0000 + + Bump release. + + CVS patchset: 2992 + CVS date: 1999/04/13 22:58:08 + +commit e1fd3b3f250feeafe2bdf0bf740aa1c665ce7907 +Author: ewt +Date: Tue Apr 13 22:47:44 1999 +0000 + + don't start mucking with filelists for packages which have already been removed! + + CVS patchset: 2991 + CVS date: 1999/04/13 22:47:44 + +commit f5f4de42eca22ea8004becd62d35791c4f3171e2 +Author: ewt +Date: Tue Apr 13 17:26:43 1999 +0000 + + added some assertions + + CVS patchset: 2990 + CVS date: 1999/04/13 17:26:43 + +commit 6ca17d58f45fc8815e88bdd75d376910b8687b4b +Author: ewt +Date: Tue Apr 13 17:12:09 1999 +0000 + + fixed minor memory leak + + CVS patchset: 2989 + CVS date: 1999/04/13 17:12:09 + +commit 720cfa506df565d8ebf43184fea418393345bc48 +Author: ewt +Date: Tue Apr 13 17:11:54 1999 +0000 + + minor cleanups + + CVS patchset: 2988 + CVS date: 1999/04/13 17:11:54 + +commit 13c006cb583250ab4b0d0a4eae621c8a8219c46a +Author: ewt +Date: Mon Apr 12 21:19:44 1999 +0000 + + 2.95-2 + + CVS patchset: 2987 + CVS date: 1999/04/12 21:19:44 + +commit c69903d87152ecf926afb09839671acec532fc71 +Author: msw +Date: Mon Apr 12 21:03:50 1999 +0000 + + don't report disk space problems for packages w/ no files + + CVS patchset: 2986 + CVS date: 1999/04/12 21:03:50 + +commit f5028ecd3689d781b4a0e71b2ce300997233876e +Author: msw +Date: Mon Apr 12 20:33:50 1999 +0000 + + duh -- don't free alloca() buffers + + CVS patchset: 2985 + CVS date: 1999/04/12 20:33:50 + +commit d590fe33e17cf9c908e15e84c29f5a064b8aa006 +Author: ewt +Date: Mon Apr 12 16:11:24 1999 +0000 + + version 2.95 + + CVS patchset: 2984 + CVS date: 1999/04/12 16:11:24 + +commit 26ee995123a365eaa16b828ac744c5b06adbd5d2 +Author: ewt +Date: Mon Apr 12 16:09:19 1999 +0000 + + replaced distribution line in --info with relocations info + + CVS patchset: 2983 + CVS date: 1999/04/12 16:09:19 + +commit ad9224dbbf684748e45cde69823d128a4ed1facd +Author: ewt +Date: Mon Apr 12 16:08:11 1999 +0000 + + we were saving a little too much memory + + CVS patchset: 2982 + CVS date: 1999/04/12 16:08:11 + +commit 7bfe9f85d7199460fe923de4bff9d38a44a73ec9 +Author: jbj +Date: Sun Apr 11 22:18:10 1999 +0000 + + Bump release. + + CVS patchset: 2981 + CVS date: 1999/04/11 22:18:10 + +commit c5f831ad7e86abcf5e67f41a99b12362d165a354 +Author: jbj +Date: Sun Apr 11 22:15:26 1999 +0000 + + Default to not build shared libraries. + + CVS patchset: 2980 + CVS date: 1999/04/11 22:15:26 + +commit ba7f3e41e0713b6173e0970054b4fa13040d9b22 +Author: jbj +Date: Fri Apr 9 22:41:34 1999 +0000 + + Include all po files. + + CVS patchset: 2979 + CVS date: 1999/04/09 22:41:34 + +commit a1e91c99857bc08da18b7de3bc5ab2a8b40fa7de +Author: ewt +Date: Fri Apr 9 21:59:14 1999 +0000 + + *** empty log message *** + + CVS patchset: 2978 + CVS date: 1999/04/09 21:59:14 + +commit f6d65265ed14cab319adb210da3a293616cc17fa +Author: ewt +Date: Fri Apr 9 21:58:07 1999 +0000 + + removed extra headerFree() :-( + + CVS patchset: 2977 + CVS date: 1999/04/09 21:58:07 + +commit f9bb9355cc4bf7f7ea554b44270647501935b718 +Author: jbj +Date: Fri Apr 9 15:18:16 1999 +0000 + + Don't mark empty strings as translatable. + + CVS patchset: 2976 + CVS date: 1999/04/09 15:18:16 + +commit e9e7a32d24618f203f07940a0cb921867bffbb77 +Author: jbj +Date: Fri Apr 9 14:15:28 1999 +0000 + + Add popt to include path. + + CVS patchset: 2975 + CVS date: 1999/04/09 14:15:28 + +commit 39ce07cc160cf79d966033b3365fdfda140d5feb +Author: jbj +Date: Thu Apr 8 21:27:57 1999 +0000 + + Update Slovak translations. + Update-po. + + CVS patchset: 2974 + CVS date: 1999/04/08 21:27:57 + +commit 8dfb93f84f7862cb820b89718c8b2dcc3bba4fe2 +Author: jbj +Date: Thu Apr 8 20:53:45 1999 +0000 + + non-linux, non-gcc portability fixes (Tim Mooney). + + CVS patchset: 2973 + CVS date: 1999/04/08 20:53:45 + +commit 200d5128061648a19dac9c0784d95be15cad7803 +Author: jbj +Date: Thu Apr 8 20:09:48 1999 +0000 + + From Tim Mooney: + Make the statfs stuff work more reliably. Switch from using AC_EGREP_HEADER + to AC_TRY_COMPILE, which should be much more reliable. + Change all places where a previous patch I had sent in said "convertdb" + when it should have said "rpmconvert". + Change the LDFLAGS_STATIC for HP-UX so that static linking isn't done on + HP-UX with libtool. Everything could be linked statically *except* the shl_* + routines, which are in `libdld.1', but libtool doesn't know how to do + a "--prefer-static" type link, so we have to just avoid trying the static + link at all. + Fix a warning that happens over and over as `header.h' is included + on Digital Unix systems. Digital Unix defines `__alpha', not `__alpha__', + so I just added the additional check for __alpha. + Fix a number of places in the code where there is a spurious/extra + semi-colon. This gets rid of quite a few warnings. + + CVS patchset: 2972 + CVS date: 1999/04/08 20:09:48 + +commit 90ac221132dbb8f410a7ecaf08497edb6809e9c1 +Author: jbj +Date: Thu Apr 8 19:24:56 1999 +0000 + + Better diagnostic message for unparseable macro error. + + CVS patchset: 2971 + CVS date: 1999/04/08 19:24:56 + +commit 929049a21042e9fb8f0486ea5af098e9edc57ffa +Author: jbj +Date: Wed Apr 7 21:10:05 1999 +0000 + + Use fdRead, not read typo. + + CVS patchset: 2970 + CVS date: 1999/04/07 21:10:05 + +commit 5f61eccb06e0c0526aaf82e2d591158463733fa6 +Author: sopwith +Date: Wed Apr 7 18:57:23 1999 +0000 + + Merge (most) changes from the GNOME version of popt. The remaining changes + are GNOME-specific. + + CVS patchset: 2969 + CVS date: 1999/04/07 18:57:23 + +commit 46d50aea919979a05e15c91c4c3fc7799820f5b6 +Author: ewt +Date: Wed Apr 7 06:29:53 1999 +0000 + + release 4 + + CVS patchset: 2968 + CVS date: 1999/04/07 06:29:53 + +commit 281503a7f9ef7e3f757012fd68b8cf1c3b0cf745 +Author: ewt +Date: Wed Apr 7 06:25:08 1999 +0000 + + version 1.3 + + CVS patchset: 2967 + CVS date: 1999/04/07 06:25:08 + +commit 4c23cb8b6fe44143a96d8b205e41306066fd2f5c +Author: ewt +Date: Wed Apr 7 06:23:07 1999 +0000 + + *** empty log message *** + + CVS patchset: 2966 + CVS date: 1999/04/07 06:23:07 + +commit ffa1389df4627db2815b835b2f4391ea4850c407 +Author: ewt +Date: Wed Apr 7 06:22:30 1999 +0000 + + added tests for single - argument + + CVS patchset: 2965 + CVS date: 1999/04/07 06:22:30 + +commit 362c4cc03213c78e959a3af6cfabef6695e6a723 +Author: ewt +Date: Wed Apr 7 06:20:13 1999 +0000 + + we weren't quite careful enough about testing for a single - + + CVS patchset: 2964 + CVS date: 1999/04/07 06:20:13 + +commit 34cf387ac294d9c832854c2dcec5d8ff8ee3cc87 +Author: ewt +Date: Wed Apr 7 06:11:01 1999 +0000 + + deal with errors properly + + CVS patchset: 2963 + CVS date: 1999/04/07 06:11:01 + +commit 9a3add1327ae2f4050d33606a78b883a3730dace +Author: ewt +Date: Wed Apr 7 06:04:42 1999 +0000 + + install callbacks didn't return proper total size for source packages + + CVS patchset: 2962 + CVS date: 1999/04/07 06:04:42 + +commit edf3ad468fbb2f5940f62e0155b4c5f80f0e43cb +Author: ewt +Date: Wed Apr 7 05:54:45 1999 +0000 + + fix size estimates for source packages + + CVS patchset: 2961 + CVS date: 1999/04/07 05:54:45 + +commit 1e9035b3b9ae3701fa56ceeb7a3a2a5fab88800e +Author: ewt +Date: Wed Apr 7 05:31:28 1999 +0000 + + when we're upgrading from one version to the same version, don't regard + that as a true upgrade -- the old package should be left out of the + remove list + + CVS patchset: 2960 + CVS date: 1999/04/07 05:31:28 + +commit 4606c3415399da816dea7f2567d88bfb22b87644 +Author: ewt +Date: Wed Apr 7 00:06:56 1999 +0000 + + give an error w/ we find packages with bad capabilities + + CVS patchset: 2959 + CVS date: 1999/04/07 00:06:56 + +commit 1d353c4ac41bb65f53bd8b50e0180d0121af7dcb +Author: ewt +Date: Wed Apr 7 00:06:00 1999 +0000 + + added comments + + CVS patchset: 2958 + CVS date: 1999/04/07 00:06:00 + +commit 65c0322d804d990251b0a0877c9cf8eee7f4dedb +Author: ewt +Date: Wed Apr 7 00:05:08 1999 +0000 + + check capabilities flag + + CVS patchset: 2957 + CVS date: 1999/04/07 00:05:08 + +commit f5346e0e71da4996ffa18d7918b53a20b379c4f1 +Author: ewt +Date: Wed Apr 7 00:04:32 1999 +0000 + + removed some fixme's which don't need fixing + + CVS patchset: 2956 + CVS date: 1999/04/07 00:04:32 + +commit 37f75f8ad8c5c775d61fc2f78e4bcc2bb1928360 +Author: jbj +Date: Tue Apr 6 21:41:47 1999 +0000 + + Include "popt.h" from rpmlib.h so that struct poptOption is defined. + + CVS patchset: 2955 + CVS date: 1999/04/06 21:41:47 + +commit 5ff51b4f8629661c695b52fd74e66282bbc72ffc +Author: jbj +Date: Tue Apr 6 19:51:23 1999 +0000 + + fix: --prefix resurrected. + + CVS patchset: 2954 + CVS date: 1999/04/06 19:51:23 + +commit 7184a3a632349b6c5171347e2203f4d9912c1037 +Author: ewt +Date: Tue Apr 6 19:08:27 1999 +0000 + + 1) fixed --prefix + 2) got RPM_INSTALL_PREFIX env variables set properly + + CVS patchset: 2953 + CVS date: 1999/04/06 19:08:27 + +commit c06d64a88cf2b921854607d465493887bcf8f0fb +Author: jbj +Date: Tue Apr 6 16:54:55 1999 +0000 + + fix: os was not initialized with "--target i586". + + CVS patchset: 2952 + CVS date: 1999/04/06 16:54:55 + +commit e1cef20ad03bc04997953e498cea77b957aea4f9 +Author: ewt +Date: Mon Apr 5 20:30:21 1999 +0000 + + added disk space fudge factor + + CVS patchset: 2951 + CVS date: 1999/04/05 20:30:21 + +commit 0f9aa84de9708cb17c96312e4c6f2b608dd5a0e0 +Author: jbj +Date: Mon Apr 5 19:25:07 1999 +0000 + + Reset release. + + CVS patchset: 2950 + CVS date: 1999/04/05 19:25:07 + +commit 7fb97e9a9a81977f57a33b727cddac09f38fe653 +Author: jbj +Date: Mon Apr 5 19:21:20 1999 +0000 + + fix: segfault while parsing target string. + + CVS patchset: 2949 + CVS date: 1999/04/05 19:21:20 + +commit 0beb0f799d72bc4f775769ce79a593018b558369 +Author: jbj +Date: Mon Apr 5 19:01:33 1999 +0000 + + Bump version. + + CVS patchset: 2948 + CVS date: 1999/04/05 19:01:33 + +commit c56d566b179f212f3e6500a7101c8c4f9f08522a +Author: jbj +Date: Mon Apr 5 16:06:28 1999 +0000 + + Bump release. + + CVS patchset: 2947 + CVS date: 1999/04/05 16:06:28 + +commit 78ccf90ab8afc864d829c0bb88f1638848652514 +Author: jbj +Date: Mon Apr 5 16:05:44 1999 +0000 + + Update-po. + + CVS patchset: 2946 + CVS date: 1999/04/05 16:05:44 + +commit f98ec6d75d1a5ff6d19782d3e3462f468f409a50 +Author: jbj +Date: Mon Apr 5 15:23:37 1999 +0000 + + permit 0x1b in specfile sanity check. + + CVS patchset: 2945 + CVS date: 1999/04/05 15:23:37 + +commit 81bb570437b5185179287876132d5566f647208e +Author: ewt +Date: Sun Apr 4 21:26:36 1999 +0000 + + removes for upgrades should happen inthe middle of transactions, not + clustered at the end + + CVS patchset: 2943 + CVS date: 1999/04/04 21:26:36 + +commit 3e38468d2d9dc16dbb96fdd5568b3f614fc2decc +Author: jbj +Date: Sun Apr 4 20:10:33 1999 +0000 + + Arm-linux fiddles: set RPMCANONARCH correctly and go back to -O2 (#1985). + + CVS patchset: 2942 + CVS date: 1999/04/04 20:10:33 + +commit 114d2630ad6a4d3786f1a4dbd0bfabeb3929bdc4 +Author: jbj +Date: Sun Apr 4 16:56:53 1999 +0000 + + Don't clobber fd (#1966). + + CVS patchset: 2941 + CVS date: 1999/04/04 16:56:53 + +commit c2ace2da95fdd6719f2b9217848a25244b845454 +Author: jbj +Date: Sat Apr 3 17:13:35 1999 +0000 + + Portability fiddles (Tim Mooney). + + CVS patchset: 2940 + CVS date: 1999/04/03 17:13:35 + +commit a050bcb8172f1830cc22560a8c588a76eb2182b2 +Author: jbj +Date: Sat Apr 3 00:05:46 1999 +0000 + + Bump release. + + CVS patchset: 2939 + CVS date: 1999/04/03 00:05:46 + +commit 30fde130876a910ed382b5e4319a8401173d7819 +Author: jbj +Date: Sat Apr 3 00:05:03 1999 +0000 + + add name/version/release macros during src.rpm install. + attempt mkdir sourcedir/specdir during src.rpm install. + + CVS patchset: 2938 + CVS date: 1999/04/03 00:05:03 + +commit 4e50407fddebf63b2f5e426e64cc3ed9271f34c4 +Author: jbj +Date: Thu Apr 1 23:46:50 1999 +0000 + + Bump release. + + CVS patchset: 2937 + CVS date: 1999/04/01 23:46:50 + +commit 6266b08a66354fc2ec731bc642e2cbbd8bc2de84 +Author: jbj +Date: Thu Apr 1 22:26:44 1999 +0000 + + add per-target macrofiles to search path. + take globalMacroContext out of macro api. + fix: flush all macros between builds. + + CVS patchset: 2936 + CVS date: 1999/04/01 22:26:44 + +commit 9bcdba42f2849957f59d93a5fd2aa861742f115b +Author: jbj +Date: Thu Apr 1 16:57:18 1999 +0000 + + Add autofetch of nosource tarballs. + + CVS patchset: 2935 + CVS date: 1999/04/01 16:57:18 + +commit 4111caf5e8a6efca00949068fd5bc2c5d370ee0d +Author: ewt +Date: Wed Mar 31 22:19:00 1999 +0000 + + don't install a single package twice + + CVS patchset: 2934 + CVS date: 1999/03/31 22:19:00 + +commit 5fbc0dd6c39f033ca0cd3a6975f1195b94f113db +Author: jbj +Date: Wed Mar 31 20:37:55 1999 +0000 + + add explicit macrofiles path to rpmrc. + + CVS patchset: 2933 + CVS date: 1999/03/31 20:37:55 + +commit 3fae8324504fc1b4c15d3fe5d3f6846191400b4f +Author: jbj +Date: Wed Mar 31 16:59:17 1999 +0000 + + Bump release. + + CVS patchset: 2932 + CVS date: 1999/03/31 16:59:17 + +commit f0a088596ec7da11c44a83dd42d34935532b83e5 +Author: jbj +Date: Wed Mar 31 16:57:01 1999 +0000 + + expand twiddles in macrofiles list. + + CVS patchset: 2931 + CVS date: 1999/03/31 16:57:01 + +commit b4dfd488b0e1e4233ff0279965d0d8a3b1b67328 +Author: jbj +Date: Wed Mar 31 16:23:34 1999 +0000 + + Typo. + + CVS patchset: 2930 + CVS date: 1999/03/31 16:23:34 + +commit 9b580d78a37f35bfee07ce69496f9cadc2f71590 +Author: jbj +Date: Wed Mar 31 15:08:40 1999 +0000 + + I was told by Timur Bakeyev that on BSD systems + setuid should be prefered over setreuid. + On Unixware 2.1 linking the Midnight Commander against libucb + broke the binary horrible (readdir returned garbage). I haven't + looked deeper into this because I don't have such a system. + Instead I applied a similar patch like the one attached + to this message (I made this patch against popt from CVS). + from Norbert Warmuth + + CVS patchset: 2929 + CVS date: 1999/03/31 15:08:40 + +commit ad9d28638c2ad3c9aac5f58b573c067d2199d874 +Author: jbj +Date: Wed Mar 31 14:58:43 1999 +0000 + + Include alloca.h if available (Tim Mooney). + + CVS patchset: 2928 + CVS date: 1999/03/31 14:58:43 + +commit 37d0ee567a49fd2afcd80e734efd69d47a832b85 +Author: jbj +Date: Wed Mar 31 13:16:08 1999 +0000 + + Restore check on BuildRoot != "/". + + CVS patchset: 2927 + CVS date: 1999/03/31 13:16:08 + +commit 214f096003c91d9536363cab54b5bb81f2c3d35d +Author: jbj +Date: Wed Mar 31 13:07:20 1999 +0000 + + (re-)enable fixowner/fixgroup macros. + fix: specfile BuildRoot was masking rpmrc macro. + + CVS patchset: 2926 + CVS date: 1999/03/31 13:07:20 + +commit 48e8d3521c73671038ad40ccf9d3677e38009d6e +Author: jbj +Date: Tue Mar 30 19:34:01 1999 +0000 + + Restore "chmod -R ." as default. + + CVS patchset: 2925 + CVS date: 1999/03/30 19:34:01 + +commit ceb687851bc6f83d60e9a2de237a52b3136b19e8 +Author: jbj +Date: Sun Mar 28 01:04:37 1999 +0000 + + Eliminate ftp/http proxy vars. + + CVS patchset: 2924 + CVS date: 1999/03/28 01:04:37 + +commit df6dcb8a860744e1712a3cb778083d0e7db5072c +Author: jbj +Date: Sun Mar 28 00:50:29 1999 +0000 + + Bump release. + + CVS patchset: 2923 + CVS date: 1999/03/28 00:50:29 + +commit 9b94f186e688a2e604948bb4d6d460b78d67c3c0 +Author: jbj +Date: Sun Mar 28 00:47:40 1999 +0000 + + fix: avoid segfault using --prefix until ewt fixes. + add --define "%foo %bar" option. + dump macros to same fd as --showrc uses. + add %GNUconfigure for full-blown package regeneration. + fix: RPM_ARCH/RPM_OS had wrong values. + fix: create ppc directories correctly. + + CVS patchset: 2922 + CVS date: 1999/03/28 00:47:40 + +commit 6147ae79959477cec35cb6ed6211c0c1b53ac710 +Author: jbj +Date: Sat Mar 27 21:40:56 1999 +0000 + + %vendor contains Red Hat + %_vendor contains redhat + + CVS patchset: 2921 + CVS date: 1999/03/27 21:40:56 + +commit 017f7f9bb5b9441b4041442bbc6d3b381a9ea36b +Author: ewt +Date: Sat Mar 27 20:37:34 1999 +0000 + + release 5 + + CVS patchset: 2920 + CVS date: 1999/03/27 20:37:34 + +commit 091d12699469451ff260a5f4a4671c6dd4145daf +Author: ewt +Date: Sat Mar 27 20:36:08 1999 +0000 + + added help message for --ignoresize + + CVS patchset: 2919 + CVS date: 1999/03/27 20:36:08 + +commit 7361e830934dc1fb78b0ab6aa6843c5cf1cdabe6 +Author: ewt +Date: Sat Mar 27 17:47:04 1999 +0000 + + invalidate the ftpControl fd when ftpGetFileDesc() fails + + CVS patchset: 2918 + CVS date: 1999/03/27 17:47:04 + +commit e088e8fb770a4b87ee5444f2d9a0a64f36bf484b +Author: ewt +Date: Sat Mar 27 17:41:23 1999 +0000 + + *** empty log message *** + + CVS patchset: 2917 + CVS date: 1999/03/27 17:41:23 + +commit 3237d652a555591d3df4c771504ed1ad41b52e74 +Author: ewt +Date: Fri Mar 26 22:04:55 1999 +0000 + + added ignoresize + + CVS patchset: 2916 + CVS date: 1999/03/26 22:04:55 + +commit 7a9fe7272ca2ef91efab16edcdc86b19ee381d54 +Author: jbj +Date: Fri Mar 26 20:07:34 1999 +0000 + + autoReq/autoProv now per-package. + + CVS patchset: 2915 + CVS date: 1999/03/26 20:07:34 + +commit 746681bee72b41cf3cb5c6a7b1687ad8c29c95a1 +Author: jbj +Date: Fri Mar 26 19:52:42 1999 +0000 + + Typo -- libtool-1.2f. + + CVS patchset: 2914 + CVS date: 1999/03/26 19:52:42 + +commit e6d646a8c97c9dcb28a9ee084acb51582156bd00 +Author: jbj +Date: Wed Mar 24 12:38:08 1999 +0000 + + fix: segfault from unknown uid/gid -- use builder's uid/gid instead. + + CVS patchset: 2913 + CVS date: 1999/03/24 12:38:08 + +commit f8c33e1165d90e4cbf9380608b27d3405788906a +Author: jbj +Date: Mon Mar 22 20:46:21 1999 +0000 + + fix: accessing freed memory. + + CVS patchset: 2912 + CVS date: 1999/03/22 20:46:21 + +commit dff7526edd6292ab39fa7a2021c04ab84396230e +Author: jbj +Date: Mon Mar 22 20:23:24 1999 +0000 + + Bump release. + + CVS patchset: 2911 + CVS date: 1999/03/22 20:23:24 + +commit a1058e3d9ed9fda442a89d7529a3c09e3e564449 +Author: jbj +Date: Mon Mar 22 18:36:23 1999 +0000 + + more DU 4.0D fiddles (Shing-Gene Yung). + + CVS patchset: 2910 + CVS date: 1999/03/22 18:36:23 + +commit bd3990b81cbd1df9b5b5164ef32e44158288e95f +Author: jbj +Date: Mon Mar 22 17:31:53 1999 +0000 + + fix: don't add header if signature generation failed (Carlo Wood). + + CVS patchset: 2909 + CVS date: 1999/03/22 17:31:53 + +commit 7944ca9ba3f29bc3a2f6ba69d2d0c55f080d6e6d +Author: jbj +Date: Mon Mar 22 16:23:05 1999 +0000 + + fix: segfault from double close on ftpGetFileDesc ftpAbort path. + + CVS patchset: 2908 + CVS date: 1999/03/22 16:23:05 + +commit 2f5f89f2a3a974ce54f4670edc91c2b56e0b2551 +Author: jbj +Date: Sun Mar 21 19:11:29 1999 +0000 + + Typos. + + CVS patchset: 2907 + CVS date: 1999/03/21 19:11:29 + +commit 89e64b9785efb334ab62dd0f982585a012c9f630 +Author: jbj +Date: Sun Mar 21 18:43:22 1999 +0000 + + pgp5 support (Carlo Wood ). + + CVS patchset: 2906 + CVS date: 1999/03/21 18:43:22 + +commit bc76393a1701faba6defb20ce0b81002ce129a7f +Author: jbj +Date: Sat Mar 20 21:09:47 1999 +0000 + + eliminate old rpmrc configuration syntax. + + CVS patchset: 2905 + CVS date: 1999/03/20 21:09:47 + +commit 801b0c9b4b3aa050b0bd0b2863feccd8a0918a02 +Author: jbj +Date: Sat Mar 20 15:11:03 1999 +0000 + + Bump version. + + CVS patchset: 2904 + CVS date: 1999/03/20 15:11:03 + +commit 49926ed9f6ea03ba4814a240095cd5f0e671ae70 +Author: jbj +Date: Fri Mar 19 22:38:40 1999 +0000 + + update with libtool-2.4f. + + CVS patchset: 2903 + CVS date: 1999/03/19 22:38:40 + +commit ef1b0f4d694a78a5671bb4f8bde52c9042cefb9b +Author: ewt +Date: Fri Mar 19 21:33:28 1999 +0000 + + *** empty log message *** + + CVS patchset: 2902 + CVS date: 1999/03/19 21:33:28 + +commit 604cf5d1e665820c10f2f29897f075050b634abe +Author: ewt +Date: Fri Mar 19 18:42:38 1999 +0000 + + added string for DISKSPACE problem + + CVS patchset: 2901 + CVS date: 1999/03/19 18:42:38 + +commit 6823e0ce122231519762a34cfa87b243098416d5 +Author: ewt +Date: Fri Mar 19 18:42:17 1999 +0000 + + 1) moved disk space code into handleOverlappedFiles() + 2) added some missing headerLink() calls + 2) removed unnecessary notifys + + CVS patchset: 2900 + CVS date: 1999/03/19 18:42:17 + +commit 52f3a21929bd29942139467a3904c3d2ac998f2a +Author: jbj +Date: Fri Mar 19 16:39:15 1999 +0000 + + DU 4.0D fiddles (Shing-Gene Yung) + + CVS patchset: 2899 + CVS date: 1999/03/19 16:39:15 + +commit 881f2388fc7dd8b62b43f6e03283422234d37999 +Author: ewt +Date: Fri Mar 19 03:39:17 1999 +0000 + + added disk space checking + + CVS patchset: 2898 + CVS date: 1999/03/19 03:39:17 + +commit 44c09b105ed044c30ae9345ed42d0d0ae743b94a +Author: jbj +Date: Wed Mar 17 20:01:40 1999 +0000 + + Bump release. + + CVS patchset: 2897 + CVS date: 1999/03/17 20:01:40 + +commit e444149fe3126e33ddf06beba6e5926901846fd9 +Author: jbj +Date: Wed Mar 17 20:01:09 1999 +0000 + + Typos. + + CVS patchset: 2896 + CVS date: 1999/03/17 20:01:09 + +commit 70e3f43050ffe6759ba3a20f5969b3aab9113662 +Author: jbj +Date: Wed Mar 17 18:17:15 1999 +0000 + + Bump version. + + CVS patchset: 2895 + CVS date: 1999/03/17 18:17:15 + +commit d84c548c0ba241ceb19e2a9c1aa457cf5652098d +Author: jbj +Date: Wed Mar 17 18:11:01 1999 +0000 + + fix: recursive strtok's is a no-no. + + CVS patchset: 2894 + CVS date: 1999/03/17 18:11:01 + +commit fa3c0712e2b60521415cad49de6c2ab762959242 +Author: jbj +Date: Tue Mar 16 20:47:27 1999 +0000 + + RE fiddle to get canonical arch correct. + + CVS patchset: 2893 + CVS date: 1999/03/16 20:47:27 + +commit ca9dc63de974d1335dce533d310ffbb11812fce0 +Author: jbj +Date: Tue Mar 16 20:04:26 1999 +0000 + + Fix newSpec in "rpm -q --specfile --specedit" + + CVS patchset: 2892 + CVS date: 1999/03/16 20:04:26 + +commit 776dc9c2581c54e7ebb9980ca01401956e4f81b0 +Author: jbj +Date: Sun Mar 14 00:34:52 1999 +0000 + + change support@redhat.com to rpm-list@redhat.com. + + CVS patchset: 2891 + CVS date: 1999/03/14 00:34:52 + +commit d32ae3ef069894e08929261d911ad300b9767a3a +Author: jbj +Date: Sat Mar 13 23:29:59 1999 +0000 + + Typos. + + CVS patchset: 2890 + CVS date: 1999/03/13 23:29:59 + +commit a36b1b3871c78e0a1e98cb1a5b7d00ecac260238 +Author: jbj +Date: Sat Mar 13 22:37:47 1999 +0000 + + fix: with --target=i686, pass macro %_arch=i386. + + CVS patchset: 2889 + CVS date: 1999/03/13 22:37:47 + +commit 40670e2a961b15503b0a2b0acad8ccc64b8c0a62 +Author: jbj +Date: Fri Mar 12 18:20:31 1999 +0000 + + Bump version. + + CVS patchset: 2888 + CVS date: 1999/03/12 18:20:31 + +commit aaaf86cfe18ec374aa3206d617fddfe09a5e5127 +Author: jbj +Date: Fri Mar 12 18:20:06 1999 +0000 + + fix: rpm -q --specfile --specedit now works even with BuildArch:. + + CVS patchset: 2887 + CVS date: 1999/03/12 18:20:06 + +commit c50cdee669b707c40fcc87403d2173a1ee83c4f0 +Author: jbj +Date: Fri Mar 12 15:56:48 1999 +0000 + + fix: --target=arch works. + + CVS patchset: 2886 + CVS date: 1999/03/12 15:56:48 + +commit da6cb7f4e53e80d12a66fdba1caca6e5f804f989 +Author: jbj +Date: Fri Mar 12 15:32:02 1999 +0000 + + Bump release. + + CVS patchset: 2885 + CVS date: 1999/03/12 15:32:02 + +commit be7c392673e97b6b3fe7e6b9561afe919c22610b +Author: jbj +Date: Fri Mar 12 06:01:36 1999 +0000 + + Resurrect --target. + + CVS patchset: 2884 + CVS date: 1999/03/12 06:01:36 + +commit 876abb2617148c6c2a23ee6deb1446eaa7740d4c +Author: jbj +Date: Fri Mar 12 06:00:17 1999 +0000 + + Make canonarch dir as well as buildarch dir. + + CVS patchset: 2883 + CVS date: 1999/03/12 06:00:17 + +commit e57db6a8e021dbe39a4674c5c4f75ed045b61662 +Author: jbj +Date: Fri Mar 12 05:57:41 1999 +0000 + + rpmRelocation no longer used. + + CVS patchset: 2882 + CVS date: 1999/03/12 05:57:41 + +commit b51670d6e33a1a6e9fcbd69fb528981c78b56b79 +Author: jbj +Date: Fri Mar 12 05:57:01 1999 +0000 + + Typos -- curlys match curlys. + + CVS patchset: 2881 + CVS date: 1999/03/12 05:57:01 + +commit 572c470125abc3b068216c9bee539eba5f0f9fd3 +Author: jbj +Date: Fri Mar 12 05:55:51 1999 +0000 + + Don't segfault if filename does not exist. + + CVS patchset: 2880 + CVS date: 1999/03/12 05:55:51 + +commit b9234bb860f9908f15ab6915cb815fa869c96896 +Author: jbj +Date: Thu Mar 11 17:57:00 1999 +0000 + + Typo. + + CVS patchset: 2879 + CVS date: 1999/03/11 17:57:00 + +commit 19caf606ac867c8fbde6c96d7706d4675d52064a +Author: jbj +Date: Thu Mar 11 17:23:57 1999 +0000 + + Don't cache proxy info. + + CVS patchset: 2878 + CVS date: 1999/03/11 17:23:57 + +commit f34ebe53f56fc06ebc7c72be55249a58da5c4e3f +Author: jbj +Date: Thu Mar 11 02:08:42 1999 +0000 + + Matt's cache hit algorithm. + + CVS patchset: 2877 + CVS date: 1999/03/11 02:08:42 + +commit a63acfe986e5255f82a49468e8a6c37067d5a570 +Author: jbj +Date: Wed Mar 10 17:24:16 1999 +0000 + + 2.92-4 + + CVS patchset: 2876 + CVS date: 1999/03/10 17:24:16 + +commit 7a974dfe8d60abc8ec55397a70026e6f4146c7d4 +Author: jbj +Date: Wed Mar 10 17:00:57 1999 +0000 + + Typo. + + CVS patchset: 2875 + CVS date: 1999/03/10 17:00:57 + +commit 38400127cb2b3dba0c4232b10944acaf96f9f840 +Author: jbj +Date: Wed Mar 10 17:00:34 1999 +0000 + + Stash ftpGetFileDesc failures too. + + CVS patchset: 2874 + CVS date: 1999/03/10 17:00:34 + +commit bbd84c568f5f3f8c951f3d741e207f1dc2c4331d +Author: jbj +Date: Wed Mar 10 15:24:48 1999 +0000 + + New descriptive text. + + CVS patchset: 2873 + CVS date: 1999/03/10 15:24:48 + +commit dd2ebadb484ec8cb62f1f885e153c3072c1b1e18 +Author: ewt +Date: Wed Mar 10 04:47:06 1999 +0000 + + updated for new rpmdepOrder() + + CVS patchset: 2872 + CVS date: 1999/03/10 04:47:06 + +commit a73e669b5971a583301f9f7188012c1bc5d790fc +Author: ewt +Date: Wed Mar 10 03:43:22 1999 +0000 + + replaced = NULL stuff here and there with blanket memset() calls + + CVS patchset: 2871 + CVS date: 1999/03/10 03:43:22 + +commit 4deee420a340d9389475a598fbb456b0cef41992 +Author: sopwith +Date: Wed Mar 10 02:55:24 1999 +0000 + + autogen.sh: Fix builddir != srcdir. + *.c: Fix compilation with -ansi -pedantic-errors. + + CVS patchset: 2870 + CVS date: 1999/03/10 02:55:24 + +commit 35d63ade01d13df445c8c917c99e84fdd1ac1d4b +Author: ewt +Date: Wed Mar 10 02:53:37 1999 +0000 + + updated rpmdepOrder() for better cooperation with new transaction code + + CVS patchset: 2869 + CVS date: 1999/03/10 02:53:37 + +commit 1f9c136553dadc9eae56f6d9e9958eb5036cc2ed +Author: jbj +Date: Tue Mar 9 18:47:08 1999 +0000 + + Ratchet forward to rpm-2.5.7. + + CVS patchset: 2868 + CVS date: 1999/03/09 18:47:08 + +commit dcea20ca588c3a88d68db192819956fe394f959e +Author: ewt +Date: Tue Mar 9 17:42:36 1999 +0000 + + changed version number + + CVS patchset: 2867 + CVS date: 1999/03/09 17:42:36 + +commit 8bb3d5556ed49c9695c2f92a3a9116d6f89f21f2 +Author: ewt +Date: Tue Mar 9 17:41:10 1999 +0000 + + changed version number + + CVS patchset: 2866 + CVS date: 1999/03/09 17:41:10 + +commit d559a8afd3e8289aa61779523b6594fa82f32310 +Author: jbj +Date: Tue Mar 9 16:53:52 1999 +0000 + + Work around failing --prefix ... + + CVS patchset: 2865 + CVS date: 1999/03/09 16:53:52 + +commit a44cb6f19e6e6ad1778c9d6a74cd18dc195c01df +Author: ewt +Date: Tue Mar 9 16:29:22 1999 +0000 + + memory optimizations + + CVS patchset: 2864 + CVS date: 1999/03/09 16:29:22 + +commit 655aad964de09c7c5fa345ad35c8f42548794725 +Author: jbj +Date: Tue Mar 9 03:37:22 1999 +0000 + + Fix proxy FTP segfault. + + CVS patchset: 2863 + CVS date: 1999/03/09 03:37:22 + +commit fb28457b676cd91e15d47ed7c7d9807b47622701 +Author: ewt +Date: Sat Mar 6 18:47:56 1999 +0000 + + rev 2 + + CVS patchset: 2862 + CVS date: 1999/03/06 18:47:56 + +commit 1f16f5c166deb070f8c409a001a402ab09d03be9 +Author: ewt +Date: Sat Mar 6 18:43:49 1999 +0000 + + be a bit more agressive about freeing memory + + CVS patchset: 2861 + CVS date: 1999/03/06 18:43:49 + +commit 852533fe9ac33f0855291fcaf92dfeb9bab408f8 +Author: ewt +Date: Sat Mar 6 17:19:48 1999 +0000 + + redid ingoreSet code which was broken + + CVS patchset: 2860 + CVS date: 1999/03/06 17:19:48 + +commit 7f62e74a3fc881e9b907bfbfc894f5ec38e8d56b +Author: ewt +Date: Sat Mar 6 15:16:34 1999 +0000 + + removed double frees + + CVS patchset: 2859 + CVS date: 1999/03/06 15:16:34 + +commit d3c3f654f19e8fef2d9a8f8721ba29ad70d13816 +Author: ewt +Date: Fri Mar 5 22:43:03 1999 +0000 + + support for new rpmRunTransactions() parameter + + CVS patchset: 2858 + CVS date: 1999/03/05 22:43:03 + +commit 7d7728ef2b81a3a1b29de7b93ca2229ae41c2f57 +Author: ewt +Date: Fri Mar 5 22:41:59 1999 +0000 + + reduce the number of reads a bit + + CVS patchset: 2857 + CVS date: 1999/03/05 22:41:59 + +commit 1ed14e0bcf48c0b738c2211b30afed62934a7d38 +Author: ewt +Date: Fri Mar 5 22:41:10 1999 +0000 + + 1) reindented notify lines + 2) added ignoreSet parameter + + CVS patchset: 2856 + CVS date: 1999/03/05 22:41:10 + +commit e0e9021472cd6eb2ef2eba033279f6b9a1b1d95b +Author: ewt +Date: Fri Mar 5 22:40:29 1999 +0000 + + added ignoreSet to rpmRunTransaction() + + CVS patchset: 2855 + CVS date: 1999/03/05 22:40:29 + +commit ea630b173721a938cc7cfbefadd31a3f7ef91873 +Author: ewt +Date: Fri Mar 5 22:33:00 1999 +0000 + + tiny little optimization + + CVS patchset: 2854 + CVS date: 1999/03/05 22:33:00 + +commit 23430a401a0c8a9bb9f9d3da71df9a2bfe738b33 +Author: ewt +Date: Fri Mar 5 21:37:15 1999 +0000 + + fixed memory leak + + CVS patchset: 2853 + CVS date: 1999/03/05 21:37:15 + +commit ad163a65bd7e2caf744928f311ef5bd6dbdbccdd +Author: ewt +Date: Fri Mar 5 01:19:29 1999 +0000 + + fixed a memory leak + + CVS patchset: 2852 + CVS date: 1999/03/05 01:19:29 + +commit 58e6b0d408b267727a69f22236e43e7ff3fe58a1 +Author: ewt +Date: Fri Mar 5 01:18:19 1999 +0000 + + plugged a memory leak + + CVS patchset: 2851 + CVS date: 1999/03/05 01:18:19 + +commit 6338acbf5edae4b7718ce8a8e2110d918e98af72 +Author: ewt +Date: Fri Mar 5 01:17:49 1999 +0000 + + purely cosmetic changes + + CVS patchset: 2850 + CVS date: 1999/03/05 01:17:49 + +commit f3c66319d33b9e82386bf07c073cabe63a6148d4 +Author: ewt +Date: Fri Mar 5 01:17:21 1999 +0000 + + wasn't using fdClose() for some odd reason + + CVS patchset: 2849 + CVS date: 1999/03/05 01:17:21 + +commit 0b4a1f434375bcf87f6abc2f545eb4a76e30c46b +Author: ewt +Date: Fri Mar 5 01:16:42 1999 +0000 + + plugged some minor memory leaks + + CVS patchset: 2848 + CVS date: 1999/03/05 01:16:42 + +commit 1f49616d61aa2b0effce0a2c72dc36ed9a67076b +Author: ewt +Date: Thu Mar 4 23:45:26 1999 +0000 + + Use callbacks to open/close files. This avoids limits on how many files + we can have open at a time, andcloses a memory leak for good measure. + + CVS patchset: 2847 + CVS date: 1999/03/04 23:45:26 + +commit eca1c0bf1922f14d05045863540b297e3f699e95 +Author: ewt +Date: Thu Mar 4 23:26:51 1999 +0000 + + plugged memory leak + + CVS patchset: 2846 + CVS date: 1999/03/04 23:26:51 + +commit b2e49d841daad3965e2446b4283ff4e4202e76bf +Author: jbj +Date: Sun Feb 28 19:07:13 1999 +0000 + + Bump version. + + CVS patchset: 2845 + CVS date: 1999/02/28 19:07:13 + +commit c871d58f381b0e83a063e1dde4a0d57cff6a52e2 +Author: jbj +Date: Sun Feb 28 18:36:19 1999 +0000 + + fix: memory leaks in rpmRunTransactions plugged. + + CVS patchset: 2844 + CVS date: 1999/02/28 18:36:19 + +commit f5c1c639b85b521b193ada3fd8e7d4d5d9ba6934 +Author: jbj +Date: Sun Feb 28 14:57:00 1999 +0000 + + Bump release. + + CVS patchset: 2843 + CVS date: 1999/02/28 14:57:00 + +commit a3d1bd66628a5eb1a2770cbea6e1531549eb350b +Author: jbj +Date: Sun Feb 28 14:18:56 1999 +0000 + + increase timeout in tread from 5 to 30 secs for slow links. + + CVS patchset: 2842 + CVS date: 1999/02/28 14:18:56 + +commit 0e54446b944f3d208cb1da361d638ff25b13572b +Author: jbj +Date: Fri Feb 26 21:47:33 1999 +0000 + + fix: build of packages w/o BuildRoot segfault. + + CVS patchset: 2840 + CVS date: 1999/02/26 21:47:33 + +commit eb77d9f4593fbf00e99eac3ab2c31de2cf1ce8d9 +Author: ewt +Date: Thu Feb 25 20:17:30 1999 +0000 + + *** empty log message *** + + CVS patchset: 2839 + CVS date: 1999/02/25 20:17:30 + +commit 8069caca00caac8815078603ed1db91685a29fa2 +Author: ewt +Date: Thu Feb 25 20:16:43 1999 +0000 + + allow single dash arguments (to represent stdin) + + CVS patchset: 2838 + CVS date: 1999/02/25 20:16:43 + +commit c2421db17a996ea4b729bfc1811ecfa451ea3914 +Author: jbj +Date: Thu Feb 25 02:54:39 1999 +0000 + + Typo. + + CVS patchset: 2837 + CVS date: 1999/02/25 02:54:39 + +commit 7b9a63b2b2645ae491e6247f18a64f318d5ac489 +Author: jbj +Date: Thu Feb 25 02:50:49 1999 +0000 + + Fix proxy FTP coredump. + + CVS patchset: 2836 + CVS date: 1999/02/25 02:50:49 + +commit a9f17f6470c55de5fbcde25226ee0b784a1499e9 +Author: jbj +Date: Thu Feb 25 02:41:22 1999 +0000 + + Improvements on leak plugging. + + CVS patchset: 2835 + CVS date: 1999/02/25 02:41:22 + +commit 83134039a97b1b7d2e3cfc6313c971e09d56914e +Author: jbj +Date: Wed Feb 24 23:55:30 1999 +0000 + + Bump release. + + CVS patchset: 2834 + CVS date: 1999/02/24 23:55:30 + +commit 12c69b1075ab1cca55cc713758a860ade9eef0b4 +Author: jbj +Date: Wed Feb 24 23:55:00 1999 +0000 + + Memory leaks. + + CVS patchset: 2833 + CVS date: 1999/02/24 23:55:00 + +commit 5f642bafdd847c2e61d2cdd3dc28fb0feff33eab +Author: jbj +Date: Tue Feb 23 07:17:15 1999 +0000 + + Bump release. + + CVS patchset: 2832 + CVS date: 1999/02/23 07:17:15 + +commit 3bb305643b4b8c9ad2b4d3c0421de6d42500ef49 +Author: jbj +Date: Tue Feb 23 07:10:56 1999 +0000 + + Move callback before return. + + CVS patchset: 2831 + CVS date: 1999/02/23 07:10:56 + +commit 696c4ce1251025e97d5a8639287e57b41d895f4d +Author: jbj +Date: Tue Feb 23 05:52:08 1999 +0000 + + Another callback for Matt. + + CVS patchset: 2830 + CVS date: 1999/02/23 05:52:08 + +commit e603e625a138a069de63a156b5745304f654527e +Author: jbj +Date: Tue Feb 23 05:50:38 1999 +0000 + + Capitalize tag names. + + CVS patchset: 2829 + CVS date: 1999/02/23 05:50:38 + +commit 5c135524d79a4f4bfd0f2c06e786932697b322d2 +Author: jbj +Date: Tue Feb 23 00:56:32 1999 +0000 + + More callbacks for Matt. + + CVS patchset: 2828 + CVS date: 1999/02/23 00:56:32 + +commit ba8e017ac035cc36e63fbce173d3f6c715639c33 +Author: jbj +Date: Mon Feb 22 22:15:19 1999 +0000 + + Add notifys for msw. + + CVS patchset: 2827 + CVS date: 1999/02/22 22:15:19 + +commit 46fe51d2e9b639a03d42cbae64676b7205546bf4 +Author: jbj +Date: Mon Feb 22 18:09:17 1999 +0000 + + Meta-msgid's generated by tagName. + + CVS patchset: 2826 + CVS date: 1999/02/22 18:09:17 + +commit 7a7e3397ea44de1ddb5600d671a754f5865c8414 +Author: jbj +Date: Mon Feb 22 17:45:50 1999 +0000 + + Bump release. + + CVS patchset: 2825 + CVS date: 1999/02/22 17:45:50 + +commit 6b9fe27f52f5558f64acecb8e99b27dd21dd4192 +Author: jbj +Date: Mon Feb 22 17:44:57 1999 +0000 + + permit substitution of I18N strings from PO meta-catalogues. + + CVS patchset: 2824 + CVS date: 1999/02/22 17:44:57 + +commit c9ca4e44a56ec5484d6321ae2b3ef1599adf6799 +Author: ewt +Date: Sun Feb 21 04:02:57 1999 +0000 + + removed outdated fixme + + CVS patchset: 2823 + CVS date: 1999/02/21 04:02:57 + +commit 12b921284d210c13091b176fdbb0bc6fd2adc461 +Author: ewt +Date: Sun Feb 21 04:01:12 1999 +0000 + + fixed relocated/excluded paths + + CVS patchset: 2822 + CVS date: 1999/02/21 04:01:12 + +commit 4db26fd478db2574b825f848020818fc4ce20a00 +Author: jbj +Date: Sun Feb 21 03:57:57 1999 +0000 + + Permit group extraction from command line. + + CVS patchset: 2821 + CVS date: 1999/02/21 03:57:57 + +commit 6d53fa695bf28941fce2ad57a8ce43e962945f49 +Author: jbj +Date: Sun Feb 21 03:57:09 1999 +0000 + + Ultrapenguin has not S_ISTXT (although ALLPERMS mentions). + + CVS patchset: 2820 + CVS date: 1999/02/21 03:57:09 + +commit 1725b77f712de3aa201a060fc5116492fbfd054a +Author: ewt +Date: Sun Feb 21 03:34:52 1999 +0000 + + got excludedocs, netsharedpath, and lang exclusions working + + CVS patchset: 2819 + CVS date: 1999/02/21 03:34:52 + +commit 4bf2ceb8a301530bb8f9d98fed2b98afcb39eda4 +Author: ewt +Date: Sun Feb 21 03:32:56 1999 +0000 + + dded FA_ to enum fileActions stuff + + CVS patchset: 2818 + CVS date: 1999/02/21 03:32:56 + +commit f9db40a17201c50237ae2f57f88093578469d76f +Author: ewt +Date: Sun Feb 21 02:34:45 1999 +0000 + + should be able to install v1 source packages now, though I certainly + didn't test it + + CVS patchset: 2817 + CVS date: 1999/02/21 02:34:45 + +commit a79bc883fc1b3a669f637f8552bcb04cac07cde8 +Author: jbj +Date: Fri Feb 19 23:17:17 1999 +0000 + + Tighter constraints on urlinfo cache-hits. + Force ftp control channel close in ufdClose. + + CVS patchset: 2816 + CVS date: 1999/02/19 23:17:17 + +commit 78bb12db47983849a8e552f14a7d71af9c4bbe7f +Author: jbj +Date: Fri Feb 19 17:52:46 1999 +0000 + + Added space in format. + + CVS patchset: 2815 + CVS date: 1999/02/19 17:52:46 + +commit aefcab536ea414c27c770f85876f009da519e891 +Author: jbj +Date: Fri Feb 19 15:26:46 1999 +0000 + + Bump releas. + + CVS patchset: 2814 + CVS date: 1999/02/19 15:26:46 + +commit bbd07e2c481ac60a82ccddd3ec7bad1308703589 +Author: jbj +Date: Fri Feb 19 15:23:34 1999 +0000 + + Typo. + + CVS patchset: 2812 + CVS date: 1999/02/19 15:23:34 + +commit 63b073c0876b4137e49d82cd3d0bb94d844a5766 +Author: jbj +Date: Thu Feb 18 17:50:44 1999 +0000 + + Bump release. + + CVS patchset: 2811 + CVS date: 1999/02/18 17:50:44 + +commit 6f35dcf84bc859aefe8c4bf54a1d29aeb3a6a39a +Author: jbj +Date: Thu Feb 18 17:21:50 1999 +0000 + + rename file before unlinking to avoid EBUSY failures. + + CVS patchset: 2810 + CVS date: 1999/02/18 17:21:50 + +commit c74948930dbd848faddf14546d4e3c797fd722b9 +Author: jbj +Date: Wed Feb 17 17:26:53 1999 +0000 + + headerGetEntry now returns count=0 if tag not found (Chris Blizzard). + + CVS patchset: 2808 + CVS date: 1999/02/17 17:26:53 + +commit 77e113332e357fbe08c5552e3bf0335016f29c42 +Author: jbj +Date: Wed Feb 17 17:20:17 1999 +0000 + + Avoid double close in ufdOpen(). + + CVS patchset: 2806 + CVS date: 1999/02/17 17:20:17 + +commit 64e0363db6396a16b981bdbae40f46ed80689a8e +Author: jbj +Date: Wed Feb 17 17:04:51 1999 +0000 + + Meta-msgid generation. + + CVS patchset: 2804 + CVS date: 1999/02/17 17:04:51 + +commit 01450f4a02eb5117bab00956b48713b77c9cc1d6 +Author: ewt +Date: Wed Feb 17 04:33:50 1999 +0000 + + moved ensureOlder() to transaction.c + + CVS patchset: 2803 + CVS date: 1999/02/17 04:33:50 + +commit c1959865f841ae4e408a8166592b58e2e3efd852 +Author: ewt +Date: Wed Feb 17 04:32:55 1999 +0000 + + added checks for installation of old packages + + CVS patchset: 2802 + CVS date: 1999/02/17 04:32:55 + +commit 784a8eeb8ad9494a40d09ade64ef6372fb18dbaa +Author: ewt +Date: Wed Feb 17 04:04:53 1999 +0000 + + fixed noreplace handling + + CVS patchset: 2801 + CVS date: 1999/02/17 04:04:53 + +commit c361b1f1efafcf9f4c14ea81be82e69a7700dbcc +Author: ewt +Date: Wed Feb 17 03:46:57 1999 +0000 + + don't be too clever -- skipping file creation because it'll be created + later in the transaction ignores the needs of %post scripts + + CVS patchset: 2800 + CVS date: 1999/02/17 03:46:57 + +commit da45cac856377c490ef25006c4dfaba3afa8c3b3 +Author: ewt +Date: Wed Feb 17 03:42:57 1999 +0000 + + moved things to transaction flags from independent install/uninstall flags + + CVS patchset: 2799 + CVS date: 1999/02/17 03:42:57 + +commit a56247c2b2df165a0da2c4ff5379cbd19425c64f +Author: jbj +Date: Tue Feb 16 06:17:46 1999 +0000 + + Repair rpmputtext. + + CVS patchset: 2798 + CVS date: 1999/02/16 06:17:46 + +commit 7b495d4b7c22a7d66fa76289c3900905eef9e623 +Author: jbj +Date: Tue Feb 16 03:07:24 1999 +0000 + + Update to automake 1.4a. + + CVS patchset: 2797 + CVS date: 1999/02/16 03:07:24 + +commit 1556aeb600b7d9344faf5990b6f57d78f4a8a46c +Author: jbj +Date: Tue Feb 16 02:42:29 1999 +0000 + + add callbacks for installer updates while doing URL xfers. + + CVS patchset: 2796 + CVS date: 1999/02/16 02:42:29 + +commit 81f17dd94b4528af653c7bf76a10266c1e8d081e +Author: jbj +Date: Tue Feb 16 02:14:19 1999 +0000 + + Repair http queries. + New function urlStrerror to fish out URL open failure codes. + + CVS patchset: 2795 + CVS date: 1999/02/16 02:14:19 + +commit 6d0e3c455d9d8dd917429277d774c43bffd37c55 +Author: jbj +Date: Mon Feb 15 18:58:17 1999 +0000 + + sub-packages should inheirit Prefixes tag (Ian Mortimer). + + CVS patchset: 2794 + CVS date: 1999/02/15 18:58:17 + +commit b6eaf3aee4ab84d3991b174fe6eda97677e7d3d7 +Author: jbj +Date: Mon Feb 15 18:51:16 1999 +0000 + + resurrect osf1 as canonical os name (Time Mooney). + + CVS patchset: 2793 + CVS date: 1999/02/15 18:51:16 + +commit 5336a6f5e4de9a1b2ca67c80deb3009cee77a793 +Author: jbj +Date: Mon Feb 15 18:26:09 1999 +0000 + + augment linux provides/requires for glibc 2.1 backward compatibility. + + CVS patchset: 2790 + CVS date: 1999/02/15 18:26:09 + +commit 206a2b42ccc1f41ed2bb04bedd871d93945bfb74 +Author: jbj +Date: Wed Feb 10 16:25:48 1999 +0000 + + Fix inverted args in error message. + + CVS patchset: 2788 + CVS date: 1999/02/10 16:25:48 + +commit 232b1ca6df145314c41713fbba500ad8b2f6a9c7 +Author: ewt +Date: Sun Feb 7 23:14:16 1999 +0000 + + rel 8 + + CVS patchset: 2787 + CVS date: 1999/02/07 23:14:16 + +commit b997c2ad4d4a8ae8f4a6c14b4cf886058a09ff17 +Author: ewt +Date: Sun Feb 7 23:14:04 1999 +0000 + + don't let hdrs[] be sparse + + CVS patchset: 2786 + CVS date: 1999/02/07 23:14:04 + +commit 7b20861ad6c97839dc77823afeedd4ce15420a94 +Author: ewt +Date: Sun Feb 7 21:57:30 1999 +0000 + + *** empty log message *** + + CVS patchset: 2785 + CVS date: 1999/02/07 21:57:30 + +commit a92a662e9ec55b5e26f87ed53ee1289649e11a87 +Author: ewt +Date: Sun Feb 7 21:21:11 1999 +0000 + + rel 7 + + CVS patchset: 2784 + CVS date: 1999/02/07 21:21:11 + +commit f93e0d2f61381f2ff87674b365b664510943eb1c +Author: ewt +Date: Sun Feb 7 21:20:04 1999 +0000 + + added fdScript stuff + + CVS patchset: 2783 + CVS date: 1999/02/07 21:20:04 + +commit 22b0159facaad0ad544b241965cb92fd86129a48 +Author: ewt +Date: Sun Feb 7 21:19:00 1999 +0000 + + 1) %attr(mode,user,group,dmode) is illegal! (though %defattr is fine) + 2) use %attr(mode) for directories w/o a separate dmode + + CVS patchset: 2782 + CVS date: 1999/02/07 21:19:00 + +commit 177b2215a967e09b4aaf9e92d4dd56b556e510a9 +Author: ewt +Date: Sun Feb 7 20:09:27 1999 +0000 + + need to chroot() a bit sooner + + CVS patchset: 2781 + CVS date: 1999/02/07 20:09:27 + +commit d9ff192cbaa7b9322dd736e9ffafbb0a5ca0e74e +Author: ewt +Date: Sun Feb 7 18:36:13 1999 +0000 + + I don't know why this works better, but it does. + + CVS patchset: 2780 + CVS date: 1999/02/07 18:36:13 + +commit 05e7aecfed2b37566433be2f648233d2dddd9102 +Author: ewt +Date: Sun Feb 7 16:44:21 1999 +0000 + + uninstalls need to handle shared config files properly + + CVS patchset: 2779 + CVS date: 1999/02/07 16:44:21 + +commit 0ac25fcf2607dfb1ba880770b20a90e56ead28b3 +Author: jbj +Date: Fri Feb 5 20:13:58 1999 +0000 + + Bump release. + + CVS patchset: 2778 + CVS date: 1999/02/05 20:13:58 + +commit decbf0135cbc534d6cafd4e351eaa25588a9e1ee +Author: adevries +Date: Fri Feb 5 20:00:24 1999 +0000 + + Made HTTP much better. + + CVS patchset: 2777 + CVS date: 1999/02/05 20:00:24 + +commit 6e22dccb47172ee94141d13be8ee9afb8a4f7500 +Author: jbj +Date: Fri Feb 5 18:32:06 1999 +0000 + + - add BuildPrereq: in spec file and src rpm. + + CVS patchset: 2776 + CVS date: 1999/02/05 18:32:06 + +commit 39daf317c745ee27e07186b92febe8214a444add +Author: ewt +Date: Thu Feb 4 23:00:23 1999 +0000 + + changed minimal open code (again) + + CVS patchset: 2775 + CVS date: 1999/02/04 23:00:23 + +commit 5409a7ad52d233839315bf5fe98103b4d540ea37 +Author: ewt +Date: Thu Feb 4 22:04:10 1999 +0000 + + minimal opens need to provide name index + + CVS patchset: 2774 + CVS date: 1999/02/04 22:04:10 + +commit a7366495ae19850d0cc996cae867ac5b59b250af +Author: adevries +Date: Thu Feb 4 18:48:03 1999 +0000 + + Finally, preliminary http support. + - Alex + + CVS patchset: 2773 + CVS date: 1999/02/04 18:48:03 + +commit 0166b45137233b4e51b0062633b13962a6af0715 +Author: ewt +Date: Thu Feb 4 05:10:05 1999 +0000 + + make --test work for source packages + + CVS patchset: 2772 + CVS date: 1999/02/04 05:10:05 + +commit c7c870b0c5d1ebc6696d3be28e52f30c48dc21ab +Author: ewt +Date: Thu Feb 4 05:03:16 1999 +0000 + + added rpmdbOpenForTraversal() + + CVS patchset: 2771 + CVS date: 1999/02/04 05:03:16 + +commit 35cb65b449feb3ac7533576b0c588de8f3d8a303 +Author: ewt +Date: Tue Feb 2 19:43:35 1999 +0000 + + handle spec file which Provide filenames + + CVS patchset: 2770 + CVS date: 1999/02/02 19:43:35 + +commit ce6ad243f66e23c2c037b06329639a92a688944f +Author: jbj +Date: Wed Jan 27 19:46:13 1999 +0000 + + Sanity. + + CVS patchset: 2769 + CVS date: 1999/01/27 19:46:13 + +commit f8e3f7e92cfc25c05fcefbc796c6ea3f523d416b +Author: jbj +Date: Wed Jan 27 19:41:20 1999 +0000 + + Bump release. + + CVS patchset: 2768 + CVS date: 1999/01/27 19:41:20 + +commit 83863df5019310f6813f64f6fe7d7d04e5d3f00b +Author: jbj +Date: Wed Jan 27 19:40:01 1999 +0000 + + Fix defattr/attr screwup. + + CVS patchset: 2767 + CVS date: 1999/01/27 19:40:01 + +commit 291f407baa5f6bbc5d35386ec0a1a88c18d32f3b +Author: jbj +Date: Wed Jan 27 15:40:06 1999 +0000 + + Needed trailing / when expanding specdir. + + CVS patchset: 2766 + CVS date: 1999/01/27 15:40:06 + +commit 1330d5fc27b289568764ac294b32437246eb66ed +Author: jbj +Date: Tue Jan 26 22:25:24 1999 +0000 + + Typo. + + CVS patchset: 2765 + CVS date: 1999/01/26 22:25:24 + +commit 06de7de1382954ce352027680568087196c8cffa +Author: jbj +Date: Tue Jan 26 21:58:46 1999 +0000 + + Bump release. + + CVS patchset: 2764 + CVS date: 1999/01/26 21:58:46 + +commit ee244b7e0ada391f29837d15647ef1f63d27c17c +Author: jbj +Date: Tue Jan 26 21:57:57 1999 +0000 + + Parse BuildRequires: and add appropriate RPMTAG_*REQUIRES* to src rpm + header. + + CVS patchset: 2763 + CVS date: 1999/01/26 21:57:57 + +commit a012dfe2dde3ef8f798defd9951bd13025db9d0e +Author: jbj +Date: Tue Jan 26 20:30:07 1999 +0000 + + Typo. + + CVS patchset: 2762 + CVS date: 1999/01/26 20:30:07 + +commit c1cb9dc9e4f271af96fa75d0e15da6cb06b5b8b8 +Author: jbj +Date: Tue Jan 26 20:01:34 1999 +0000 + + Orphan. + + CVS patchset: 2761 + CVS date: 1999/01/26 20:01:34 + +commit 29241c8d043395672b32b37f8a0d25363739f54e +Author: jbj +Date: Tue Jan 26 19:55:43 1999 +0000 + + Check for correct versions of libtool/autoconf/automake. + + CVS patchset: 2760 + CVS date: 1999/01/26 19:55:43 + +commit 0809998ce30bd293a0ad7fea4c2f1bb7c68fcebb +Author: jbj +Date: Tue Jan 26 19:07:25 1999 +0000 + + 1st attempt to automate srpm building. + + CVS patchset: 2757 + CVS date: 1999/01/26 19:07:25 + +commit ddd00bd992bce2706eea52862b71ac0a2659f809 +Author: jbj +Date: Tue Jan 26 19:04:39 1999 +0000 + + Use "make dist" when making an archive. Make sure tag is correct. + + CVS patchset: 2756 + CVS date: 1999/01/26 19:04:39 + +commit 6d1bd5f75bb9a41afe8dab15d1788921f3086a59 +Author: jbj +Date: Tue Jan 26 18:29:40 1999 +0000 + + Restore RPMCONFIGDIR throughout. + + CVS patchset: 2755 + CVS date: 1999/01/26 18:29:40 + +commit cb451613c94dfa9310fbfde7f9f6c42b34cbafec +Author: jbj +Date: Tue Jan 26 18:20:15 1999 +0000 + + Bump release. + + CVS patchset: 2754 + CVS date: 1999/01/26 18:20:15 + +commit 5bb717be191bff766e0ce7e2f36fc7f714dedb19 +Author: jbj +Date: Tue Jan 26 18:08:14 1999 +0000 + + make '-' character illegal (again) in version/release. + Use auto-standard names for auto-package components. + + CVS patchset: 2753 + CVS date: 1999/01/26 18:08:14 + +commit 6f6b66d55a979a922255ec01d0f6b38369d9f268 +Author: ewt +Date: Tue Jan 26 17:10:29 1999 +0000 + + changes for packages w/ 0 files + + CVS patchset: 2752 + CVS date: 1999/01/26 17:10:29 + +commit 2daecca27b7f56fd8093e689a374eedb0c6e36d5 +Author: jbj +Date: Mon Jan 25 19:46:40 1999 +0000 + + Eliminate generated files. + + CVS patchset: 2750 + CVS date: 1999/01/25 19:46:40 + +commit 777388f1634bb4b9ee4f79ba8465536c1d5bafbb +Author: jbj +Date: Mon Jan 25 15:07:44 1999 +0000 + + Add required file. + + CVS patchset: 2749 + CVS date: 1999/01/25 15:07:44 + +commit e9cbe6622a50d77b71cb658726f897dd50efe816 +Author: jbj +Date: Sun Jan 24 19:40:38 1999 +0000 + + Eliminate files that can be regenerated. + + CVS patchset: 2748 + CVS date: 1999/01/24 19:40:38 + +commit 6503ca3645d71e8f4805e52747ee33d20b2217d8 +Author: jbj +Date: Fri Jan 22 22:20:44 1999 +0000 + + Do only string replacement (w/o -C) in %configure for now. + + CVS patchset: 2747 + CVS date: 1999/01/22 22:20:44 + +commit d635ea8d0987019dc8a20ca4a6da72180b2d5872 +Author: jbj +Date: Fri Jan 22 20:02:40 1999 +0000 + + Libtool config files needed by cvs checkouts. + + CVS patchset: 2746 + CVS date: 1999/01/22 20:02:40 + +commit b3ff088a22985690ae8844d978bdcf8e83ad4e69 +Author: jbj +Date: Fri Jan 22 18:42:31 1999 +0000 + + Use libtool to build libraries, but force --disable-shared for now. + + CVS patchset: 2745 + CVS date: 1999/01/22 18:42:31 + +commit 5dbf31f418895b396607d6ae1c9275689b5e89a5 +Author: jbj +Date: Fri Jan 22 17:24:04 1999 +0000 + + Ignore libtool glop. + + CVS patchset: 2744 + CVS date: 1999/01/22 17:24:04 + +commit ecf16c45e7952bf034eb3972625df91b32ac1efa +Author: jbj +Date: Fri Jan 22 17:22:59 1999 +0000 + + Bump release. + + CVS patchset: 2743 + CVS date: 1999/01/22 17:22:59 + +commit 072b219a6970e156a267d1dfc0dab87169bfcf17 +Author: jbj +Date: Fri Jan 22 17:22:17 1999 +0000 + + Use libbtool to generate librpmbuild.a. + + CVS patchset: 2742 + CVS date: 1999/01/22 17:22:17 + +commit 398c9e0363c65ddab756427d07d41908292036e4 +Author: jbj +Date: Fri Jan 22 15:57:39 1999 +0000 + + Change dependencies so that automake is not needed to build. + Update rpm POTFILES. + Popt too. + + CVS patchset: 2741 + CVS date: 1999/01/22 15:57:39 + +commit a72a5178aff6d3ddc60851d0936c005598465ef7 +Author: jbj +Date: Fri Jan 22 00:40:53 1999 +0000 + + use portable #!/bin/sh (Tim Mooney). + + CVS patchset: 2740 + CVS date: 1999/01/22 00:40:53 + +commit d09dddb1a68d5be9d0ff4b63c3cc1dbfc7c6e8c8 +Author: jbj +Date: Fri Jan 22 00:38:10 1999 +0000 + + don't erase failing build script (Tim Mooney). + + CVS patchset: 2738 + CVS date: 1999/01/22 00:38:10 + +commit fc421d4a1f59c2c4ebc7f3a0366bf739877e812d +Author: jbj +Date: Fri Jan 22 00:34:30 1999 +0000 + + use portable mkinstalldirs (Tim Mooney). + + CVS patchset: 2736 + CVS date: 1999/01/22 00:34:30 + +commit ba66f057961eadf16e3034a884e521dd0b6ed684 +Author: jbj +Date: Fri Jan 22 00:25:25 1999 +0000 + + irix6 autodeps were dup'd (Shing-Gene Yung ). + + CVS patchset: 2733 + CVS date: 1999/01/22 00:25:25 + +commit 324f6639d7758005bcda8f081911186f0a5f517b +Author: jbj +Date: Thu Jan 21 22:30:50 1999 +0000 + + After running libtoolize to update config.guess config.sub + + CVS patchset: 2732 + CVS date: 1999/01/21 22:30:50 + +commit b0784c39c1996f8abb8cd439197c6a045238f3ee +Author: jbj +Date: Thu Jan 21 19:43:23 1999 +0000 + + Add rpmpopt to the dist. + + CVS patchset: 2731 + CVS date: 1999/01/21 19:43:23 + +commit e13cffa7460b2069bb9ad67af2525d80a1e018d8 +Author: jbj +Date: Thu Jan 21 19:14:31 1999 +0000 + + Fix: clear orphaned "Transfer complete" from ftp control channel if + using ftpGetFileDesc() access with cached control connection. + + CVS patchset: 2730 + CVS date: 1999/01/21 19:14:31 + +commit 4bcd4d620df2afd3b448ded4eb06e9708ca58165 +Author: jbj +Date: Thu Jan 21 18:42:53 1999 +0000 + + Automake: almost functional make dist. + + CVS patchset: 2729 + CVS date: 1999/01/21 18:42:53 + +commit 394f3cb1ddf52fa7829dab790e34f1dfa5886b5d +Author: jbj +Date: Thu Jan 21 17:18:38 1999 +0000 + + Eliminate Makefile.inc dependence in subdirs. + Change "Bad header" to "Bad/unreadable header" for most common cpio failure. + + CVS patchset: 2728 + CVS date: 1999/01/21 17:18:38 + +commit 459dc6ef3eb334df673c514b67c1e343942b9a1c +Author: jbj +Date: Tue Jan 19 23:59:28 1999 +0000 + + create rpmbzio.c to avoid implicit dependence on libbz2 for installer. + + CVS patchset: 2727 + CVS date: 1999/01/19 23:59:28 + +commit 903b747e028caf47d1b0f19d546b11a5c5732f00 +Author: jbj +Date: Tue Jan 19 23:54:30 1999 +0000 + + Released rpm-2.90 -- version is now 2.91 + Use automake 1.4 and autoconf 2.13. + + CVS patchset: 2726 + CVS date: 1999/01/19 23:54:30 + +commit aeb2017fb240f1ebb469b3b98bdfd86fe896f9fe +Author: jbj +Date: Tue Jan 19 19:56:37 1999 +0000 + + More automake nonsense. + + CVS patchset: 2725 + CVS date: 1999/01/19 19:56:37 + +commit f4ccc38cdf5be6a3f05b1510c8ff6b767b5b57ad +Author: jbj +Date: Tue Jan 19 19:50:18 1999 +0000 + + Automake fiddles. + + CVS patchset: 2724 + CVS date: 1999/01/19 19:50:18 + +commit 4123688cb1f010e1c42331ccbc85d9bbdd0dc36d +Author: jbj +Date: Tue Jan 19 19:42:31 1999 +0000 + + Automake fiddles. + + CVS patchset: 2723 + CVS date: 1999/01/19 19:42:31 + +commit efd78aab74e2ef3a101bbfc4c2c6082418d15468 +Author: jbj +Date: Tue Jan 19 17:23:32 1999 +0000 + + Create %configure macro. + + CVS patchset: 2722 + CVS date: 1999/01/19 17:23:32 + +commit 02f03358f6dbc347a18a8afdd1c33ae3841c9cf6 +Author: jbj +Date: Tue Jan 19 16:52:25 1999 +0000 + + getservbyname needed ntohs(). + + CVS patchset: 2721 + CVS date: 1999/01/19 16:52:25 + +commit a0f1da436bf39a965d550318916578b7aef85d34 +Author: ewt +Date: Tue Jan 19 16:25:10 1999 +0000 + + added --excludepath + + CVS patchset: 2720 + CVS date: 1999/01/19 16:25:10 + +commit 11264c2b93341c5caedc53c0a77de5f083a1a532 +Author: ewt +Date: Tue Jan 19 16:24:57 1999 +0000 + + use SKIPNSTATE + + CVS patchset: 2719 + CVS date: 1999/01/19 16:24:57 + +commit aeee27354957ad5f63513f3ed580bee01428b479 +Author: ewt +Date: Tue Jan 19 16:24:43 1999 +0000 + + added SAVENSTATE action + + CVS patchset: 2718 + CVS date: 1999/01/19 16:24:43 + +commit fb49619ccfe9eea3903d623c305a9310680267ac +Author: jbj +Date: Tue Jan 19 16:02:44 1999 +0000 + + getservbyname returns network ordered port. + + CVS patchset: 2716 + CVS date: 1999/01/19 16:02:44 + +commit 06a29f2dd5ea70a3bb30f379a29725518daad96c +Author: ewt +Date: Tue Jan 19 03:02:45 1999 +0000 + + handle RPMTAG_ORIGFILENAMES properly + + CVS patchset: 2715 + CVS date: 1999/01/19 03:02:45 + +commit 8c45431632d039f5d9666fd66acefaf4ccac0faf +Author: ewt +Date: Tue Jan 19 03:01:52 1999 +0000 + + 1) fixed relocations + 2) let the relocation stuff omit files by path + + CVS patchset: 2714 + CVS date: 1999/01/19 03:01:52 + +commit 74b036680cf053416bc171fa8385a18549ea18c7 +Author: ewt +Date: Tue Jan 19 02:58:48 1999 +0000 + + force the unknown action to be 0 + + CVS patchset: 2713 + CVS date: 1999/01/19 02:58:48 + +commit 46ddcf95cc18871f5f7c75fe1889a5aa64ecbf59 +Author: ewt +Date: Tue Jan 19 02:56:13 1999 +0000 + + mucked with comments a bit + + CVS patchset: 2712 + CVS date: 1999/01/19 02:56:13 + +commit f84b91ec9dae00b1e3e3aa3754636833d0a35803 +Author: jbj +Date: Mon Jan 18 19:04:44 1999 +0000 + + Christian sez' -O not -O2 on armv4l. + + CVS patchset: 2711 + CVS date: 1999/01/18 19:04:44 + +commit 71171a5c04c539d2580b58dd74e4981d81a64cdf +Author: jbj +Date: Mon Jan 18 00:13:45 1999 +0000 + + identify missing keys by type (Toshio Kuratomi) + + CVS patchset: 2710 + CVS date: 1999/01/18 00:13:45 + +commit 260b5c18cec1e1059f11060277a2191f8c07b151 +Author: jbj +Date: Fri Jan 15 17:29:21 1999 +0000 + + Update from libtool. + + CVS patchset: 2708 + CVS date: 1999/01/15 17:29:21 + +commit e616c441bc870b20b741bd10dd00665871e198f4 +Author: jbj +Date: Fri Jan 15 16:31:14 1999 +0000 + + Use %optflags from rpmrc not macros. + + CVS patchset: 2706 + CVS date: 1999/01/15 16:31:14 + +commit 94c5a9f233102f51f997aedda302f47f522b10a0 +Author: jbj +Date: Fri Jan 15 16:20:17 1999 +0000 + + Bump release. + + CVS patchset: 2705 + CVS date: 1999/01/15 16:20:17 + +commit b5361c831885403c08bcacd811125c5a42279c2d +Author: ewt +Date: Fri Jan 15 03:50:51 1999 +0000 + + relocate filelists from files opened in a callback + + CVS patchset: 2704 + CVS date: 1999/01/15 03:50:51 + +commit d35b55b7b74b50e0fb089e98a92b809309294246 +Author: ewt +Date: Fri Jan 15 03:49:40 1999 +0000 + + handle stat of / properly for fingerprints + + CVS patchset: 2703 + CVS date: 1999/01/15 03:49:40 + +commit 08bfb976269799d72aadd2ce8d7966d7f4b3c4e6 +Author: jbj +Date: Wed Jan 13 22:53:33 1999 +0000 + + Default value for ALLPERMS. + + CVS patchset: 2702 + CVS date: 1999/01/13 22:53:33 + +commit aa362e8c171e6eda8fa3c575fdfe7e659e8fbfcf +Author: jbj +Date: Wed Jan 13 22:10:00 1999 +0000 + + Use mmap when writing rpm's. + + CVS patchset: 2701 + CVS date: 1999/01/13 22:10:00 + +commit fda6c97ad1e5fa639fa95369aabd46b40ab226cd +Author: jbj +Date: Wed Jan 13 21:20:00 1999 +0000 + + Don't free alooca memory. + + CVS patchset: 2700 + CVS date: 1999/01/13 21:20:00 + +commit fc0c2ddc4ff37f2f220ef01134fb9597f50f1784 +Author: jbj +Date: Wed Jan 13 20:24:00 1999 +0000 + + Fix: sub-packages require name from header (which is not %{name}). + + CVS patchset: 2699 + CVS date: 1999/01/13 20:24:00 + +commit bc0404541a5041b9745055cd9d7b226423c85084 +Author: jbj +Date: Wed Jan 13 20:13:20 1999 +0000 + + Release is 9. + + CVS patchset: 2698 + CVS date: 1999/01/13 20:13:20 + +commit d2afcd026091eab068d802d6401b69c14aadd1df +Author: jbj +Date: Wed Jan 13 19:28:12 1999 +0000 + + Use mktemp(3) for temp file names. + + CVS patchset: 2697 + CVS date: 1999/01/13 19:28:12 + +commit a48b72b8b9115ba673643ae2ba5a6d9a2326880d +Author: jbj +Date: Wed Jan 13 18:30:31 1999 +0000 + + Fix: seg fault due to multiple close in runScript(). + More const char * within verify. + + CVS patchset: 2696 + CVS date: 1999/01/13 18:30:31 + +commit 82065b1d64a263de245efd08978003bc54d07707 +Author: jbj +Date: Tue Jan 12 11:44:21 1999 +0000 + + Bump version. + + CVS patchset: 2693 + CVS date: 1999/01/12 11:44:21 + +commit b5d564eb99cd9798996627af4c30e4a652e955b5 +Author: jbj +Date: Tue Jan 12 11:43:31 1999 +0000 + + Automake noise.. + + CVS patchset: 2692 + CVS date: 1999/01/12 11:43:31 + +commit 33d610be387218a7c786a84e585efd2cc3a33881 +Author: ewt +Date: Tue Jan 12 03:11:25 1999 +0000 + + I'm too lazy to put these in a third time. + + CVS patchset: 2691 + CVS date: 1999/01/12 03:11:25 + +commit 37a0fd968d3e033a71f0f3e5ed12cefedb5a6ab6 +Author: jbj +Date: Mon Jan 11 23:16:09 1999 +0000 + + Typo. + + CVS patchset: 2690 + CVS date: 1999/01/11 23:16:09 + +commit 42ea3846fc41b46a314b711ab91faa3d9153c5aa +Author: jbj +Date: Sun Jan 10 21:39:13 1999 +0000 + + Bump version. + + CVS patchset: 2689 + CVS date: 1999/01/10 21:39:13 + +commit dd63b4fd681b1ee38d31c963d6c6ec59664211a8 +Author: jbj +Date: Sun Jan 10 17:10:17 1999 +0000 + + More fixes from Toshio. + + CVS patchset: 2688 + CVS date: 1999/01/10 17:10:17 + +commit 8e4b5d19fc40b0b5af6364ae855ea39564ce768c +Author: jbj +Date: Sat Jan 9 00:24:02 1999 +0000 + + 1998 8 Jan Toshio Kuratomi + * rpm.c: An error message for --nomd5 incorrectly read "--nopgp can only + be used during...."... Changed the --nopgp to --nomd5 + 1998 7 Jan Toshio Kuratomi + * lib/rpmlib.h: Add a RPMSIGTAG_GPG define for gnupg. + * lib/rpmlib.h: Add RPMVAR_GPG_PATH and RPMVAR_GPG_NAME variables. + * lib/rpmrc.c: (optionTable) Add gpg_path and gpg_name to the optionTable + (same stats as pgp_name and pgp_path.) + * lib/signature.c: (rpmLookupSignatureType) Add RPMSIGTAG_GPG as one of the + recognized types. + * lib/signature.c: (rpmAddSignature) Add ability to create gnupg signature. + * lib/signature.c: (makeGPGSignature) Routine to create a gnupg signature + (based on makePGPSignature.) + * lib/signature.c: (rpmVerifySignature) Add ability to verify gnupg + signatures. + * lib/signature.c: (verifyGPGSignature) Routine to verify a gnupg signature + (based on verifyPGPSignature.) + * lib/signature.c: (rpmGetPassPhrase) When getting pass phrase for gnupg, + use RPMVAR_GPG_NAME instead of RPMVAR_PGP_NAME if we are signing with + GPG isntead of PGP. + * lib/signature.c: (checkPassPhrase) Need to allow for GPG when we check + the PassPhrase's correctness. + * rpm.c: Add equivalent GPG lines everywhere we find a PGP line. + * rpm.c: Add equivalent gpg stanzas wherever we find a pgp stanza. + * checksig.h: define CHECKSIG_GPG (1 << 2) [Is this correct?] + * checksig.c: (doCheckSig) Check for GPG signatures. [A lot could be + wrong/left out here.] + * rpm.c: change the call to rpmGetPassPhrase to throw in the sigType as + well. + * signature.h: change rpmGetPassPhrase declaration to: + rpmGetPassPhrase(const char * prompt, const int sigTag); + * signature.c: (rpmGetPassPhrase) change the function to accept the + signature type as its second argument. + + CVS patchset: 2686 + CVS date: 1999/01/09 00:24:02 + +commit 8792366734a989de7865d45218fdc75ba7e023ec +Author: jbj +Date: Fri Jan 8 20:30:50 1999 +0000 + + Fix check for source RPM. + + CVS patchset: 2685 + CVS date: 1999/01/08 20:30:50 + +commit b9370c8b18f761db7f161684bb1478b184af02b2 +Author: jbj +Date: Fri Jan 8 19:53:34 1999 +0000 + + defaultdocdir should not have testdir prepended. + + CVS patchset: 2684 + CVS date: 1999/01/08 19:53:34 + +commit b7fde554e60769d77d57e2e9ea2bfcec873d4575 +Author: jbj +Date: Fri Jan 8 17:21:21 1999 +0000 + + Bump release. + + CVS patchset: 2683 + CVS date: 1999/01/08 17:21:21 + +commit 303fa780d31fb4b408515e89e5bee43a7fc12632 +Author: jbj +Date: Fri Jan 8 16:44:30 1999 +0000 + + EGCS cruft. + Use cpioStrerror when getNextHeader fails. + More const warnings removed. + binary rpms always have RPMTAG_SOURCERPM, source rpms do not. + + CVS patchset: 2682 + CVS date: 1999/01/08 16:44:30 + +commit 401268b739cd07cb51c227456ee7e01dfbb6bff3 +Author: ewt +Date: Fri Jan 8 03:12:51 1999 +0000 + + *** empty log message *** + + CVS patchset: 2681 + CVS date: 1999/01/08 03:12:51 + +commit c4b85d23ed171c6b3d7fdccb4be1e05aefbd38da +Author: ewt +Date: Fri Jan 8 03:12:11 1999 +0000 + + const cleanups + + CVS patchset: 2680 + CVS date: 1999/01/08 03:12:11 + +commit a12dc83141f2ed32b8511d16aa800d11d5c480cc +Author: ewt +Date: Fri Jan 8 03:11:54 1999 +0000 + + make use of currentDirectory() + + CVS patchset: 2679 + CVS date: 1999/01/08 03:11:54 + +commit 8bef8b932c7b913a12f58d21615336299e0624bb +Author: ewt +Date: Fri Jan 8 03:10:12 1999 +0000 + + added currentDirectory() + + CVS patchset: 2678 + CVS date: 1999/01/08 03:10:12 + +commit 0c69b1363d0f61e1f78c33e334987d8429d45996 +Author: ewt +Date: Fri Jan 8 03:09:57 1999 +0000 + + 1) const cleanups + 2) chroot() when setting up file actions + + CVS patchset: 2677 + CVS date: 1999/01/08 03:09:57 + +commit a4a7a0e44eb6a5f6d3517fc32ee84e25c436c8fc +Author: ewt +Date: Thu Jan 7 17:06:24 1999 +0000 + + assemble replaced file list + + CVS patchset: 2676 + CVS date: 1999/01/07 17:06:24 + +commit fbc95234ac04ae834985298983068b2fa024f8ec +Author: ewt +Date: Thu Jan 7 17:05:10 1999 +0000 + + added struct sharedFileInfo + + CVS patchset: 2675 + CVS date: 1999/01/07 17:05:10 + +commit b369006f28ccef0c911e30341586880621a9b227 +Author: ewt +Date: Thu Jan 7 17:05:02 1999 +0000 + + replaced file list is passed in externally + + CVS patchset: 2674 + CVS date: 1999/01/07 17:05:02 + +commit 560d7be379d02109d82d2ba9e3f0b9585b05ec4b +Author: ewt +Date: Thu Jan 7 04:11:12 1999 +0000 + + \n properly if -v is used on install w/o -h + + CVS patchset: 2673 + CVS date: 1999/01/07 04:11:12 + +commit deff5aec38ebefec951308a4204802f3e89ccc70 +Author: ewt +Date: Thu Jan 7 04:07:31 1999 +0000 + + try to use notify function properly (though hashing still doesn't work??) + + CVS patchset: 2672 + CVS date: 1999/01/07 04:07:31 + +commit 3036da5cf68b1b6cacab7db54e078d2e92413f19 +Author: ewt +Date: Thu Jan 7 04:07:00 1999 +0000 + + 1) don't pass a label string for source package installation + 2) rpmtransAddPackage() can fail (only on source packages though) + + CVS patchset: 2671 + CVS date: 1999/01/07 04:07:00 + +commit fd5e7c4e30fd89a49d64bf54fbb1734a8ad04c9d +Author: ewt +Date: Thu Jan 7 04:06:30 1999 +0000 + + don't let them add packages for installation if they are source packages + + CVS patchset: 2670 + CVS date: 1999/01/07 04:06:30 + +commit 1164370f664f6c3ec6b12a9a6743ebb5e857f581 +Author: ewt +Date: Thu Jan 7 04:05:23 1999 +0000 + + reworked rework of source package install -- I think this was is + cleaner, and more in the spirit of transaction sets (sorry Jeff) + + CVS patchset: 2669 + CVS date: 1999/01/07 04:05:23 + +commit 72111f3e44428fd9bda9031aa01f8e1a7d1189da +Author: jbj +Date: Thu Jan 7 00:45:52 1999 +0000 + + Re-implement the ability to install source rpms. + + CVS patchset: 2668 + CVS date: 1999/01/07 00:45:52 + +commit b2f3993b1bd22becd6289445abbb4fe6d8db2bed +Author: jbj +Date: Wed Jan 6 21:05:03 1999 +0000 + + Eliminate inline functions (the inline, not the function). + EGCS cruft. + + CVS patchset: 2667 + CVS date: 1999/01/06 21:05:03 + +commit 95cfbca845f9fd1328ad1d4ee81dcf69c804a1f2 +Author: jbj +Date: Wed Jan 6 20:54:08 1999 +0000 + + EGCS cruft. + + CVS patchset: 2666 + CVS date: 1999/01/06 20:54:08 + +commit 0e31bb0e781ed81387752daaa561a95597d5811f +Author: jbj +Date: Wed Jan 6 18:19:36 1999 +0000 + + Typos. + + CVS patchset: 2665 + CVS date: 1999/01/06 18:19:36 + +commit c959f725695701b3fd2bd3b64714ae5744b597e1 +Author: jbj +Date: Wed Jan 6 17:45:48 1999 +0000 + + Bump release. + + CVS patchset: 2664 + CVS date: 1999/01/06 17:45:48 + +commit bd626d134d27fa77cae0f26aa7c03649d1bb2ef9 +Author: jbj +Date: Wed Jan 6 17:33:50 1999 +0000 + + propagate "const char *" into rpmlib prototypes. + + CVS patchset: 2663 + CVS date: 1999/01/06 17:33:50 + +commit 7eca53f7ea2a634205d7234bc00d1f06e378db39 +Author: ewt +Date: Wed Jan 6 03:56:31 1999 +0000 + + fixed an infinite loop (oops) + + CVS patchset: 2662 + CVS date: 1999/01/06 03:56:31 + +commit 1ba327b1e8e6af7e8698fac13783cbb94f67e9d9 +Author: ewt +Date: Wed Jan 6 03:54:56 1999 +0000 + + upgrade flag wasn't being passed properly + + CVS patchset: 2661 + CVS date: 1999/01/06 03:54:56 + +commit 69e9b14c97eea43ef96ca5f25f8ef70568365f43 +Author: ewt +Date: Wed Jan 6 03:51:53 1999 +0000 + + fixed labels and hashing + + CVS patchset: 2660 + CVS date: 1999/01/06 03:51:53 + +commit 1fd38f09887057bc8cf77f9a444fca46b7735adc +Author: ewt +Date: Wed Jan 6 03:16:35 1999 +0000 + + use altH in problem struct + + CVS patchset: 2659 + CVS date: 1999/01/06 03:16:35 + +commit decbbfcdabc3fa13fd325f2b5635b16d95902c0a +Author: ewt +Date: Wed Jan 6 03:16:14 1999 +0000 + + display altH info for file conflicts + + CVS patchset: 2658 + CVS date: 1999/01/06 03:16:14 + +commit 78064b8749230db3d2ff53a0a05b9699e9d42c28 +Author: ewt +Date: Wed Jan 6 03:15:45 1999 +0000 + + added altH field to problem structure + + CVS patchset: 2657 + CVS date: 1999/01/06 03:15:45 + +commit 03c8985d5e82b2910d7732da628b3808d6b524fa +Author: ewt +Date: Wed Jan 6 03:14:44 1999 +0000 + + include lookup.h + + CVS patchset: 2656 + CVS date: 1999/01/06 03:14:44 + +commit 8b6764efbcb0a1ba51f90a1d11efdd3494133292 +Author: ewt +Date: Wed Jan 6 03:14:26 1999 +0000 + + *** empty log message *** + + CVS patchset: 2655 + CVS date: 1999/01/06 03:14:26 + +commit 0a15aaad53d0cf71344b84e3a7deff104315dc96 +Author: ewt +Date: Wed Jan 6 02:29:42 1999 +0000 + + headers in available lists weren't being freed properly + + CVS patchset: 2654 + CVS date: 1999/01/06 02:29:42 + +commit 8af5b5af8757e9385ea90770997b45f4f82c06db +Author: jbj +Date: Tue Jan 5 23:13:56 1999 +0000 + + Expand path macros with rpmGetPath(path, ...). + + CVS patchset: 2652 + CVS date: 1999/01/05 23:13:56 + +commit c7c985480ab320547dbdb977a0e8682c24710393 +Author: jbj +Date: Tue Jan 5 17:27:04 1999 +0000 + + Avoid segfault with "rpm --initdb" when no database exists. + + CVS patchset: 2650 + CVS date: 1999/01/05 17:27:04 + +commit 0906a9bebd1ec9c72125980d8de4d158dc9a4d5e +Author: jbj +Date: Mon Jan 4 22:10:05 1999 +0000 + + Playpen release. + + CVS patchset: 2649 + CVS date: 1999/01/04 22:10:05 + +commit 84bfb712a6daa5bbb251bb68b52863e07c92425b +Author: ewt +Date: Mon Jan 4 19:11:04 1999 +0000 + + 1) install packages still need to pay attention to db entries for + packages being removed + 2) don't ignore the removal action decided on by the database just + because of overlapping files + + CVS patchset: 2648 + CVS date: 1999/01/04 19:11:04 + +commit c4567f6371f37c82004d5425278d8f4c3ae85c38 +Author: ewt +Date: Mon Jan 4 16:44:52 1999 +0000 + + canonicalize the root directory + + CVS patchset: 2647 + CVS date: 1999/01/04 16:44:52 + +commit fcfce2db40da497ebd1d7f169eefe44a48884cc0 +Author: ewt +Date: Mon Jan 4 16:44:38 1999 +0000 + + removed removeBinaryPackage() + + CVS patchset: 2646 + CVS date: 1999/01/04 16:44:38 + +commit 37d4963129888be4cb4870e22f0bac48d7e7f0da +Author: ewt +Date: Mon Jan 4 16:44:20 1999 +0000 + + package removal should have proper semantics now + + CVS patchset: 2645 + CVS date: 1999/01/04 16:44:20 + +commit 46328662ee8ce15b284472dfda857d4be872a63e +Author: ewt +Date: Mon Jan 4 16:44:05 1999 +0000 + + Use an action list which is passed into removeBinaryPackage() rather then + generating our own. This outdated a bunch of functions (like + handleSharedFiles()), which have been removed. + + CVS patchset: 2644 + CVS date: 1999/01/04 16:44:05 + +commit 6ef4113eb330e8bef70835a09bde3ec31b484f01 +Author: ewt +Date: Mon Jan 4 16:43:31 1999 +0000 + + 1) renamed enum instAction to enum fileActions + 2) removed KEEP action (it was identical to SKIP), added REMOVE action + 3) removed findSharedFiles() prototype + 4) added removeBinaryPackages() and fileActionString() prototype + + CVS patchset: 2643 + CVS date: 1999/01/04 16:43:31 + +commit fca3a181f4127fd669ab94a37f99b273ce66a017 +Author: ewt +Date: Mon Jan 4 16:42:15 1999 +0000 + + 1) moved root canonicalization to transaction set creation + 2) removed KEEP state (SKIP had identical semantics) + 3) added REMOVE state to fileActionString() + 4) export fileActionString() + + CVS patchset: 2642 + CVS date: 1999/01/04 16:42:15 + +commit 854d1760c0e45659897e0eba6b400e3bb8652e03 +Author: jbj +Date: Sun Jan 3 03:13:50 1999 +0000 + + Expand SPECDIR/SOURCEDIR using macros. + + CVS patchset: 2641 + CVS date: 1999/01/03 03:13:50 + +commit e8d006c635bc39cb9190f240b03bbb30399dbdc4 +Author: jbj +Date: Thu Dec 31 22:09:43 1998 +0000 + + use "original db-1.85" if available (Raw Hide glibc 2.1). + + CVS patchset: 2640 + CVS date: 1998/12/31 22:09:43 + +commit 7731ce66a1762885e2097d906393c2b6f91026f5 +Author: ewt +Date: Thu Dec 31 20:19:07 1998 +0000 + + create .rpmorig stuff + + CVS patchset: 2639 + CVS date: 1998/12/31 20:19:07 + +commit 670095971ec8a92252a8fa6fd8f85fdd43248f79 +Author: ewt +Date: Thu Dec 31 19:16:31 1998 +0000 + + generate a file action list and pass it into installBinaryPackage() + + CVS patchset: 2638 + CVS date: 1998/12/31 19:16:31 + +commit 9102dc094c2796cbc0527e2198072f489b37c9fb +Author: ewt +Date: Thu Dec 31 19:16:12 1998 +0000 + + makes use of a passed in action list rather then generating our own + + CVS patchset: 2637 + CVS date: 1998/12/31 19:16:12 + +commit 3dde252b6801e5b6f56bd11cfabe0176324d0424 +Author: ewt +Date: Thu Dec 31 16:19:42 1998 +0000 + + switched around file conflict logic to build a proper action set + + CVS patchset: 2636 + CVS date: 1998/12/31 16:19:42 + +commit ae671205466b3dc0b34c445e1b85ec641f79e935 +Author: ewt +Date: Thu Dec 31 16:19:20 1998 +0000 + + updated a comment ;-) + + CVS patchset: 2635 + CVS date: 1998/12/31 16:19:20 + +commit 029e1deb65f2a08b623e9c6e1907fba36f7e1eb2 +Author: ewt +Date: Thu Dec 31 16:18:58 1998 +0000 + + enum instActions { UNKNOWN, CREATE, BACKUP, KEEP, SAVE, SKIP, ALTNAME }; + enum fileTypes { XDIR, BDEV, CDEV, SOCK, PIPE, REG, LINK } ; + + CVS patchset: 2634 + CVS date: 1998/12/31 16:18:58 + +commit bedb797889055f375a4916baca74c2ae6c5b29b9 +Author: ewt +Date: Thu Dec 31 16:18:27 1998 +0000 + + renamed some enums to avoid conflicts with enums now defined in install.h + + CVS patchset: 2633 + CVS date: 1998/12/31 16:18:27 + +commit 381dd7d4532a0e9475a9b8d8c30a12f3799d09d7 +Author: ewt +Date: Wed Dec 30 23:03:43 1998 +0000 + + reworked shared file lookups in database; it's *much* more efficient now + + CVS patchset: 2632 + CVS date: 1998/12/30 23:03:43 + +commit b2c5f65efb7b777be4cba6d3fdf6b55cba111c4a +Author: ewt +Date: Wed Dec 30 23:03:18 1998 +0000 + + updated relocateable package handling + + CVS patchset: 2631 + CVS date: 1998/12/30 23:03:18 + +commit 8d0dd34d5c9089b5e6a9d17e329a2938db2ccefb +Author: ewt +Date: Wed Dec 30 23:02:49 1998 +0000 + + added RPMPROB_FILE_CONFLICT message + + CVS patchset: 2630 + CVS date: 1998/12/30 23:02:49 + +commit 87451ef325979e5cf6c5b25c5ec57f6bc5ad5571 +Author: ewt +Date: Wed Dec 30 23:02:27 1998 +0000 + + fixed scare memory option + + CVS patchset: 2629 + CVS date: 1998/12/30 23:02:27 + +commit a771d1a7a827b4144a673a8e0d71942752677be0 +Author: ewt +Date: Wed Dec 30 23:01:11 1998 +0000 + + added rpmdbFindFpList + + CVS patchset: 2628 + CVS date: 1998/12/30 23:01:11 + +commit fdef7d45749917bc6465de816d9012e8747a0860 +Author: ewt +Date: Wed Dec 30 21:39:51 1998 +0000 + + headerLoad() wasn't initializing the usage count + + CVS patchset: 2627 + CVS date: 1998/12/30 21:39:51 + +commit 42edfe17497d61b7d2b6909da12fc00fbdb8f03c +Author: ewt +Date: Wed Dec 30 20:22:18 1998 +0000 + + make sure files to sign exist before asking for the pass phrase + + CVS patchset: 2625 + CVS date: 1998/12/30 20:22:18 + +commit 7618c64e23ddf34c702ac8abc7e74d23ef83c932 +Author: ewt +Date: Wed Dec 30 16:59:54 1998 +0000 + + 1) make use of fpLookupList() for some speedup + 2) be a bit better about freeing memory -- I'm sure there are plenty + of holes left still, though + 3) added a braindead db lookup for shared files. this will be reworked soon. + + CVS patchset: 2624 + CVS date: 1998/12/30 16:59:54 + +commit d7ad76b4fcea79a327c5ef49ad28d1c116c66117 +Author: ewt +Date: Wed Dec 30 16:56:28 1998 +0000 + + added fpLookupList() + + CVS patchset: 2623 + CVS date: 1998/12/30 16:56:28 + +commit 61a2cbcabfaea2b3f36d7eb1759aab61a935ce80 +Author: jbj +Date: Wed Dec 30 01:51:53 1998 +0000 + + use "original db-1.85" if available (Raw Hide glibc 2.1). + + CVS patchset: 2622 + CVS date: 1998/12/30 01:51:53 + +commit 27bfa9da821b9653e0193b1c47c616ae015742bf +Author: ewt +Date: Tue Dec 29 03:02:20 1998 +0000 + + version 1.2.3 + + CVS patchset: 2620 + CVS date: 1998/12/29 03:02:20 + +commit 1a6b3d01c7287161191301fb7591fa2f91366d38 +Author: ewt +Date: Tue Dec 29 02:52:47 1998 +0000 + + const'ified poptParseArgvString (Jeff Garzik) + + CVS patchset: 2619 + CVS date: 1998/12/29 02:52:47 + +commit d3bd733a950b73d36fa5bea2e033fad3f5977184 +Author: ewt +Date: Tue Dec 29 02:35:08 1998 +0000 + + fixed memset() in help message generation (Dale Hawkins) + added extern "C" stuff to popt.h for C++ compilers (Dale Hawkins) + + CVS patchset: 2618 + CVS date: 1998/12/29 02:35:08 + +commit 35381371cda1d98647998f738a8735449a7c4fd3 +Author: ewt +Date: Sat Dec 26 18:32:08 1998 +0000 + + make use of fingerprints for checking file conflicts + + CVS patchset: 2617 + CVS date: 1998/12/26 18:32:08 + +commit 55d6927c9d4d63bd8864e86d376312340b9db667 +Author: ewt +Date: Sat Dec 26 18:31:45 1998 +0000 + + 1) allow generic key types + 2) possibly copy the key around + 3) optionally return the key stored in the table + + CVS patchset: 2616 + CVS date: 1998/12/26 18:31:45 + +commit 008d1240004ce4c0adbc2ba40327ed6bd8537ff8 +Author: ewt +Date: Sat Dec 26 18:29:32 1998 +0000 + + added fpHashFunction() and fpEqual() + + CVS patchset: 2615 + CVS date: 1998/12/26 18:29:32 + +commit 429557f9d6e985bfecdfd05d16aa04a454708760 +Author: ewt +Date: Sat Dec 26 17:13:34 1998 +0000 + + use fingerprinting for path lookups + + CVS patchset: 2614 + CVS date: 1998/12/26 17:13:34 + +commit a2c96ed1f5f4a6534fda1a55b25fcfbb04371cc9 +Author: ewt +Date: Sat Dec 26 17:13:10 1998 +0000 + + removed unused variable + + CVS patchset: 2613 + CVS date: 1998/12/26 17:13:10 + +commit 1319828529c7f462884fa35ecbe92ccef92cd980 +Author: ewt +Date: Sat Dec 26 17:12:50 1998 +0000 + + added simple fingerprinting + + CVS patchset: 2612 + CVS date: 1998/12/26 17:12:50 + +commit 29edbba1a83312f5509748b378af87763f9b5e41 +Author: ewt +Date: Sat Dec 26 16:33:51 1998 +0000 + + 1) initial cut at hash tables + 2) initial cut at file list handling during transaction processing + + CVS patchset: 2611 + CVS date: 1998/12/26 16:33:51 + +commit 0199cb5b0add417da4cb4241b4c8dd8070fc8400 +Author: adevries +Date: Thu Dec 24 07:09:55 1998 +0000 + + Updated the man page, finally. + + CVS patchset: 2610 + CVS date: 1998/12/24 07:09:55 + +commit 92a278f68ed828d744de5cf4d0667fd7403ed6c8 +Author: ewt +Date: Fri Dec 18 19:09:38 1998 +0000 + + *** empty log message *** + + CVS patchset: 2606 + CVS date: 1998/12/18 19:09:38 + +commit 0c254129027caaff918760d86753ef067b5b47a3 +Author: jbj +Date: Thu Dec 17 16:45:22 1998 +0000 + + ultrapenguin 1.1.9 sparc64 changes. + + CVS patchset: 2605 + CVS date: 1998/12/17 16:45:22 + +commit 10d3b6d5b6784c8a3c1680497af3e0a15e5e884a +Author: ewt +Date: Wed Dec 16 21:58:53 1998 +0000 + + first pass at new transaction api; basic installing/removing works + fine but I wouldn't push it much harder then that + + CVS patchset: 2603 + CVS date: 1998/12/16 21:58:53 + +commit 033797c0ef831a0fd0a8e7ccf4f014e3476a67de +Author: ewt +Date: Tue Dec 15 05:48:11 1998 +0000 + + added dbiGetFirstKey() + + CVS patchset: 2602 + CVS date: 1998/12/15 05:48:11 + +commit 2bbb5a8f933867a4c1518eb58bc1b835f3e4b081 +Author: ewt +Date: Tue Dec 15 05:46:58 1998 +0000 + + *** empty log message *** + + CVS patchset: 2601 + CVS date: 1998/12/15 05:46:58 + +commit 26bd58415bbe763af2f945e8f13ad9d46a0af228 +Author: ewt +Date: Tue Dec 15 05:45:36 1998 +0000 + + 1) store basenames only in fileindex + 2) do realpath stuff in rpmdbFindByFile() + 3) do smart symlink chasing + + CVS patchset: 2600 + CVS date: 1998/12/15 05:45:36 + +commit 665fc7e9094dd6c464dfc604c5e70e7aeaca92a9 +Author: ewt +Date: Tue Dec 15 05:43:18 1998 +0000 + + don't do realpath stuff here; it's done in rpmdbFindByFile() now + + CVS patchset: 2599 + CVS date: 1998/12/15 05:43:18 + +commit ce37ae3d9d7c48e14e710ca94f6e10cfb1592fc8 +Author: jbj +Date: Mon Dec 14 21:34:11 1998 +0000 + + permit http:// and file:// url's as well as ftp://. + attempt ftp ABOR on query/verify url's. + cache open ftp control descriptor with password. + verify needed same realpath semantics as query. + plug fd leak in urlGetFile(). + + CVS patchset: 2598 + CVS date: 1998/12/14 21:34:11 + +commit 80693fe2cecbdf8f8f0e95737dba4f1fbcf2ba59 +Author: jbj +Date: Thu Dec 10 20:56:01 1998 +0000 + + Move inlines to rpmio.c. + rpmio.h needs necessary includes. + + CVS patchset: 2594 + CVS date: 1998/12/10 20:56:01 + +commit 4dac29ae701ec67fa55861973ff0d65f84f55d47 +Author: johnsonm +Date: Thu Dec 10 18:37:22 1998 +0000 + + releasing 1.2.2 + + CVS patchset: 2593 + CVS date: 1998/12/10 18:37:22 + +commit 9d8c68e32d87826eede3849a28d2d5c53fae506e +Author: jbj +Date: Sat Dec 5 23:22:41 1998 +0000 + + translate cpio errors using cpioStrerror. + + CVS patchset: 2592 + CVS date: 1998/12/05 23:22:41 + +commit fb2fc01de41dc92ebe66a027e975f9063adb6c8a +Author: jbj +Date: Sat Dec 5 20:06:00 1998 +0000 + + Automake voodoo. + + CVS patchset: 2590 + CVS date: 1998/12/05 20:06:00 + +commit 3fae42117d1489d64f6b5d4d90473b3a059f8fcb +Author: jbj +Date: Sat Dec 5 19:38:29 1998 +0000 + + display "..?....." rather than "..5....." for unreadable files. + run time (rather than compile time) host endian check. + + CVS patchset: 2589 + CVS date: 1998/12/05 19:38:29 + +commit c36ca7c15b13dd2221007150b726886232e88a87 +Author: jbj +Date: Sat Dec 5 19:18:43 1998 +0000 + + Typos. + + CVS patchset: 2588 + CVS date: 1998/12/05 19:18:43 + +commit 9702a4c8c601e628cbf6345f19f92f0ce75e8e7f +Author: jbj +Date: Sat Dec 5 19:16:19 1998 +0000 + + display "..?....." rather than "..5....." for unreadable files. + run time (rather than compile time) host endian check. + + CVS patchset: 2587 + CVS date: 1998/12/05 19:16:19 + +commit c76756479efc783ccfe66cb17c3e0ead6ba88da0 +Author: jbj +Date: Thu Dec 3 19:36:01 1998 +0000 + + caldera patches (ray@Caldera.DE) + + CVS patchset: 2584 + CVS date: 1998/12/03 19:36:01 + +commit d92ce3f6354ce7dba633589a8001348c68cc1351 +Author: jbj +Date: Thu Dec 3 19:30:32 1998 +0000 + + added ARM patches. + + CVS patchset: 2583 + CVS date: 1998/12/03 19:30:32 + +commit b1e4b6e679ec075ed5c00b837f0eff9f61298790 +Author: jbj +Date: Thu Dec 3 17:35:50 1998 +0000 + + http/file/ftp URL's for query/verify (but not install) work. + + CVS patchset: 2580 + CVS date: 1998/12/03 17:35:50 + +commit d12d3e8eea84c64d2a0951c6806d654a45a6923a +Author: ewt +Date: Thu Dec 3 14:47:55 1998 +0000 + + 1) let you pass the db type per-index + 2) during rebuild, just open packages.rpm, not the indexes + + CVS patchset: 2579 + CVS date: 1998/12/03 14:47:55 + +commit e3205eaa9f6b14f3989e570162a351739c302a3b +Author: jbj +Date: Wed Dec 2 21:10:18 1998 +0000 + + Sanity. + + CVS patchset: 2577 + CVS date: 1998/12/02 21:10:18 + +commit 8351bf636ade67fe72c354a4696f63a79fe501ef +Author: ewt +Date: Wed Dec 2 20:50:57 1998 +0000 + + made rpmio.o contiain the functions properly + + CVS patchset: 2576 + CVS date: 1998/12/02 20:50:57 + +commit 9b362a451a7cb84df543e7add5e7ef1b0643e243 +Author: jbj +Date: Wed Dec 2 19:55:36 1998 +0000 + + Compile in default macro values sufficient to pass make check. + + CVS patchset: 2575 + CVS date: 1998/12/02 19:55:36 + +commit b3179e6de35d2b960dab92230e106a817b00bc64 +Author: jbj +Date: Wed Dec 2 18:09:41 1998 +0000 + + Set max_macro_depth to 16 always. + + CVS patchset: 2574 + CVS date: 1998/12/02 18:09:41 + +commit d92392129691bddc6cb6ce6fbefd6969fd02d315 +Author: jbj +Date: Wed Dec 2 17:59:32 1998 +0000 + + change --rcfile to permit colon separated file list. + compile in defaults from rpmrc/macros. + + CVS patchset: 2573 + CVS date: 1998/12/02 17:59:32 + +commit 4c4388dea16abe3083ed0fdb237983388d264ddc +Author: jbj +Date: Wed Dec 2 15:17:01 1998 +0000 + + Sanity. + + CVS patchset: 2572 + CVS date: 1998/12/02 15:17:01 + +commit d13e72854260e93b68cae7fd9bf3304743c69ace +Author: jbj +Date: Tue Dec 1 23:28:26 1998 +0000 + + More build popts moved to build.c + Fix access of freed memory. + + CVS patchset: 2571 + CVS date: 1998/12/01 23:28:26 + +commit d1b089000e2b91f6d42848b4ccd4a30b0aae223c +Author: johnsonm +Date: Tue Dec 1 22:28:41 1998 +0000 + + fixed a few typos, documented POPT_ARGFLAG_DOC_HIDDEN + + CVS patchset: 2570 + CVS date: 1998/12/01 22:28:41 + +commit ef96e432ede7b490d3256dcd6ef6fe4ce054cb71 +Author: johnsonm +Date: Tue Dec 1 19:05:36 1998 +0000 + + POPT_ARG_VAL appears to work, now that I have a finished test case... + + CVS patchset: 2569 + CVS date: 1998/12/01 19:05:36 + +commit 234db2e2f68fe57220371d2d46f9c68897223eff +Author: jbj +Date: Tue Dec 1 17:18:38 1998 +0000 + + Start separating build options. + I18N for popt tables. + + CVS patchset: 2568 + CVS date: 1998/12/01 17:18:38 + +commit 5f72265982d9fc3de1bc506dbea33dc64d5700a3 +Author: jbj +Date: Tue Dec 1 00:10:18 1998 +0000 + + Sanity. + + CVS patchset: 2567 + CVS date: 1998/12/01 00:10:18 + +commit 5d69afce68cc51d4d8f9b4e1c87e1f538409fbd8 +Author: jbj +Date: Mon Nov 30 22:39:11 1998 +0000 + + Use AC_CANONICAL_SYSTEM, not AC_CANONICAL_HOST. + + CVS patchset: 2566 + CVS date: 1998/11/30 22:39:11 + +commit 4e4d1936359e11d9c0bbff7b55997d8043e84551 +Author: jbj +Date: Mon Nov 30 20:54:35 1998 +0000 + + Add library dependencies. + Remake with latest automake. + + CVS patchset: 2565 + CVS date: 1998/11/30 20:54:35 + +commit 03864a75db89b44efc68c94c965e80227bedb940 +Author: ewt +Date: Mon Nov 30 17:53:01 1998 +0000 + + switched to rpmfilexists + + CVS patchset: 2564 + CVS date: 1998/11/30 17:53:01 + +commit 4dede4ad3c1a04f17dc3ec77b50d6ff942129cfd +Author: ewt +Date: Mon Nov 30 17:48:03 1998 +0000 + + switched exists() to rpmfileexists() + + CVS patchset: 2563 + CVS date: 1998/11/30 17:48:03 + +commit 2940357e3df5c2701ef748cc9d2f1054e52945de +Author: jbj +Date: Wed Nov 25 20:23:32 1998 +0000 + + fix incorrect directory permissions using %attr/%defattr. + + CVS patchset: 2562 + CVS date: 1998/11/25 20:23:32 + +commit b4b8bc6a61cb427b744da4ed5cbc546ab9a641c3 +Author: jbj +Date: Wed Nov 25 19:52:12 1998 +0000 + + Sanity. + + CVS patchset: 2561 + CVS date: 1998/11/25 19:52:12 + +commit 469f309419c1cd9da52327bc0aa6905a5fab6a42 +Author: jbj +Date: Wed Nov 25 19:43:31 1998 +0000 + + Sanity. + + CVS patchset: 2560 + CVS date: 1998/11/25 19:43:31 + +commit 65f24cffd10f55f6fa818412a3c1d44fab9d099a +Author: jbj +Date: Wed Nov 25 19:31:10 1998 +0000 + + Sanity. + + CVS patchset: 2559 + CVS date: 1998/11/25 19:31:10 + +commit 46052773f37316fb3b03e621aebdfde739274c0c +Author: jbj +Date: Wed Nov 25 19:09:55 1998 +0000 + + Use VFA_t for %verify attribute parsing. + + CVS patchset: 2558 + CVS date: 1998/11/25 19:09:55 + +commit b2fd4c2d88653aa2d3832e24c066f9d5d204772a +Author: jbj +Date: Wed Nov 25 00:42:36 1998 +0000 + + Add dup for the "other" gzdopen premature close. + + CVS patchset: 2556 + CVS date: 1998/11/25 00:42:36 + +commit 4551a1256f6c43498c838838fe9343e8b6ccb69a +Author: jbj +Date: Tue Nov 24 19:30:38 1998 +0000 + + Clean up on files.c. + + CVS patchset: 2555 + CVS date: 1998/11/24 19:30:38 + +commit bf93337cec80049e178d4c8e2762bb68c89ff7a4 +Author: jbj +Date: Mon Nov 23 21:47:55 1998 +0000 + + Sanity. + + CVS patchset: 2554 + CVS date: 1998/11/23 21:47:55 + +commit fa463ea4ab6ecec6ee6ccb5b48a08d60ab1b1a4f +Author: jbj +Date: Mon Nov 23 19:06:28 1998 +0000 + + Typo. + + CVS patchset: 2553 + CVS date: 1998/11/23 19:06:28 + +commit eb0436b4b23ebdc8d18d2745223b6ceaf9e9a94c +Author: jbj +Date: Sun Nov 22 19:48:48 1998 +0000 + + Start abstracting compressed I/O. + + CVS patchset: 2552 + CVS date: 1998/11/22 19:48:48 + +commit a15a36abd12dba7dcf5cab390100dfcbc16dd6b8 +Author: jbj +Date: Fri Nov 20 20:18:22 1998 +0000 + + Sanity. + + CVS patchset: 2551 + CVS date: 1998/11/20 20:18:22 + +commit 8f2a5b4031cba427d46b8d19a8da5d30eddb2f4a +Author: jbj +Date: Fri Nov 20 00:34:55 1998 +0000 + + update-po. + + CVS patchset: 2550 + CVS date: 1998/11/20 00:34:55 + +commit 1a20fafcc9c37b5df659ff2e3f4f284bbb797dda +Author: jbj +Date: Fri Nov 20 00:31:53 1998 +0000 + + Add querytags test. + + CVS patchset: 2548 + CVS date: 1998/11/20 00:31:53 + +commit 2b44c3a5c3528eb84df457317243f82f1a98dd36 +Author: jbj +Date: Fri Nov 20 00:29:46 1998 +0000 + + permit "rpm -q --specfile ... file.spec" queries. + + CVS patchset: 2547 + CVS date: 1998/11/20 00:29:46 + +commit 8d6486d50f9bac50b3d49245e15b159933958cf9 +Author: johnsonm +Date: Thu Nov 19 20:56:15 1998 +0000 + + Improved man page a bit, install by default. + Added POPT_ARG_VAL + + CVS patchset: 2545 + CVS date: 1998/11/19 20:56:15 + +commit 7e617bde3629f7fbfa7e600621a6196f2653498e +Author: jbj +Date: Thu Nov 19 19:10:23 1998 +0000 + + lclint noise. + + CVS patchset: 2544 + CVS date: 1998/11/19 19:10:23 + +commit dc7ee4090deb5638aee8837f7cad73840cf74e5f +Author: jbj +Date: Thu Nov 19 18:10:28 1998 +0000 + + finish hiding rpmdb index record data ("matches"). + + CVS patchset: 2543 + CVS date: 1998/11/19 18:10:28 + +commit 2578b7fc8451f06f83640b448bda098e295447cb +Author: jbj +Date: Wed Nov 18 21:41:05 1998 +0000 + + implement abstract fd type almost everywhere. + + CVS patchset: 2542 + CVS date: 1998/11/18 21:41:05 + +commit 9e52926682d6df396086c32c9c86a81212441775 +Author: jbj +Date: Wed Nov 18 19:42:07 1998 +0000 + + Sanity. + + CVS patchset: 2541 + CVS date: 1998/11/18 19:42:07 + +commit 28c4ae83a312a54cbe0faa2827ca6a3f9106b4a9 +Author: jbj +Date: Mon Nov 16 21:40:28 1998 +0000 + + LCLINT pass 0. + + CVS patchset: 2540 + CVS date: 1998/11/16 21:40:28 + +commit bed2bf89c9cc52f655900413d32eb8a5bdcb810c +Author: ewt +Date: Mon Nov 16 21:01:30 1998 +0000 + + *** empty log message *** + + CVS patchset: 2539 + CVS date: 1998/11/16 21:01:30 + +commit bc2c860f87d25ce6be51e9dfd3f352879b6e5547 +Author: ewt +Date: Mon Nov 16 21:00:43 1998 +0000 + + bug in alias handling (showed up w/ --triggers) + + CVS patchset: 2538 + CVS date: 1998/11/16 21:00:43 + +commit 3b5593c7e0ea3aadb67669aba623df44c955a8ce +Author: jbj +Date: Sun Nov 15 17:00:24 1998 +0000 + + strncasecmp on spec file separators (KDE has %Description). + + CVS patchset: 2537 + CVS date: 1998/11/15 17:00:24 + +commit 468597524d30c44c7c17a20b58c512003ab0dc1a +Author: jbj +Date: Sun Nov 8 18:23:16 1998 +0000 + + remove redundant md5 computation on uninstall. + + CVS patchset: 2534 + CVS date: 1998/11/08 18:23:16 + +commit 2d8382033656676768b21ca792302b106b86fc05 +Author: jbj +Date: Sun Nov 8 00:15:33 1998 +0000 + + permit --rmsource --force even if sources/patches are missing. + + CVS patchset: 2532 + CVS date: 1998/11/08 00:15:33 + +commit ff40919a65327793fd4a10855b2898ee538a8e51 +Author: jbj +Date: Sat Nov 7 23:55:43 1998 +0000 + + permit --rmsource --force even if sources/patches are missing. + + CVS patchset: 2531 + CVS date: 1998/11/07 23:55:43 + +commit bb2f68c51011365af953e407b845adb72c6c267e +Author: jbj +Date: Sat Nov 7 22:48:12 1998 +0000 + + don't compute md5sum on non-file %config objects. (from Jos Vos) + + CVS patchset: 2529 + CVS date: 1998/11/07 22:48:12 + +commit 886d61a91e41156e5f241a096b85cd8a2c62d2ab +Author: jbj +Date: Sat Nov 7 22:05:28 1998 +0000 + + check arch only on RPMBUILD_{PREP,BUILD,INSTALL,PACKAGEBINARY}. + + CVS patchset: 2527 + CVS date: 1998/11/07 22:05:28 + +commit d51ce05214e8b55b2d493bbb9f572ff5ff06f6fd +Author: jbj +Date: Fri Nov 6 22:55:30 1998 +0000 + + configure.in: set default value for RPM. (Tim Mooney) + + CVS patchset: 2525 + CVS date: 1998/11/06 22:55:30 + +commit 7806f10c0378d698e6b12030773556760ec77bf6 +Author: jbj +Date: Fri Nov 6 22:42:27 1998 +0000 + + update-po. + + CVS patchset: 2523 + CVS date: 1998/11/06 22:42:27 + +commit 03cffdb11976dab2799aa098806c35e15ffeedd5 +Author: jbj +Date: Fri Nov 6 22:41:10 1998 +0000 + + update and rename Czech (Pavel Makovec ) + + CVS patchset: 2522 + CVS date: 1998/11/06 22:41:10 + +commit 9f08d63bfb8b90817ad141a2eef7b0bde85e0ac6 +Author: jbj +Date: Fri Nov 6 22:16:17 1998 +0000 + + update Russian translation w man pages. + + CVS patchset: 2521 + CVS date: 1998/11/06 22:16:17 + +commit 496f994b05745c2dc5ad9ff857e7e30d0deb5c44 +Author: jbj +Date: Fri Nov 6 22:12:01 1998 +0000 + + add new Epoch: keyword just like Serial:. + + CVS patchset: 2520 + CVS date: 1998/11/06 22:12:01 + +commit 4514c7600fccadf64720905e3512b7343ec6939b +Author: jbj +Date: Fri Nov 6 19:55:55 1998 +0000 + + solaris: don't attempt static link. (Tim Mooney) + fix: timeCheck in rpm.c should be unsigned long. (Tim Mooney) + osf: prov searches only shared libraries. (Tim Mooney) + solaris: set PATH in prov/req scripts. (Tim Mooney) + fix: ignore modes on symlinks. (Tim Mooney) + + CVS patchset: 2517 + CVS date: 1998/11/06 19:55:55 + +commit 45f063a167b2c4e217395efbd5d5ff18c65bacb4 +Author: jbj +Date: Fri Nov 6 18:50:33 1998 +0000 + + Sanity. + + CVS patchset: 2515 + CVS date: 1998/11/06 18:50:33 + +commit b9defc611c3c62d36bc61be9abd910666281dba4 +Author: jbj +Date: Fri Nov 6 18:30:35 1998 +0000 + + sub-packages inherit RPMTAG_EPOCH (just like RPMTAG_VERSION/RELEASE). + + CVS patchset: 2514 + CVS date: 1998/11/06 18:30:35 + +commit 06346f87e70453d6758ac06837060880a54a2bd2 +Author: jbj +Date: Tue Nov 3 19:13:50 1998 +0000 + + Set value of LOCALEDIR. + Change name of installed file to popt.mo. + + CVS patchset: 2512 + CVS date: 1998/11/03 19:13:50 + +commit 63898fa0ab57ef356f8c4e6e9f44b85aa8ee2c9f +Author: ewt +Date: Thu Oct 29 22:54:31 1998 +0000 + + updated to version 1.2.1 + + CVS patchset: 2511 + CVS date: 1998/10/29 22:54:31 + +commit 9d5b0438279f888b03c30a77af0130cff1137743 +Author: ewt +Date: Thu Oct 29 22:52:03 1998 +0000 + + added POPT_ARG_INTL_DOMAIN (Elliot Lee) + updated Makefile's to be more GNUish (Elliot Lee) + + CVS patchset: 2510 + CVS date: 1998/10/29 22:52:03 + +commit 983300ecb3e5faa170dd939b31c8605ba9f4b136 +Author: ewt +Date: Thu Oct 29 16:33:04 1998 +0000 + + their must be a { between two % in a query format (unless %% is used) + + CVS patchset: 2509 + CVS date: 1998/10/29 16:33:04 + +commit d05a0a39c9aa57c097c799b6c670877651ad26ac +Author: jbj +Date: Thu Oct 29 15:16:11 1998 +0000 + + update-po. + + CVS patchset: 2507 + CVS date: 1998/10/29 15:16:11 + +commit 8b3dc0e6a6949088873e6151162c7958e177a6ec +Author: jbj +Date: Thu Oct 29 13:49:24 1998 +0000 + + Sanity. + + CVS patchset: 2506 + CVS date: 1998/10/29 13:49:24 + +commit 56187988a61e37c7d02e6ea4c02272bf84393547 +Author: jbj +Date: Thu Oct 29 13:46:56 1998 +0000 + + No more query.h. + + CVS patchset: 2505 + CVS date: 1998/10/29 13:46:56 + +commit 482a553ada47b679df075c1c05dcaad5e3d776e8 +Author: jbj +Date: Tue Oct 27 19:54:08 1998 +0000 + + fix off-by-1 alloca that prevented relocating /. + + CVS patchset: 2504 + CVS date: 1998/10/27 19:54:08 + +commit 62efcbd3fc18b322d1cb236f0ea4cf7dc9099beb +Author: ewt +Date: Tue Oct 27 05:41:02 1998 +0000 + + 1) split query option parsing into popt subtables + 2) moved query code into rpmlib + + CVS patchset: 2502 + CVS date: 1998/10/27 05:41:02 + +commit 2796491ba3a7b3047fbb24f469d31ded77e274fd +Author: ewt +Date: Tue Oct 27 05:38:37 1998 +0000 + + implemented POPT_ARGINFO_INC_DATA + + CVS patchset: 2501 + CVS date: 1998/10/27 05:38:37 + +commit f65c9a1541f742f2cfd901e693d3f9ef8bc02b0f +Author: jbj +Date: Mon Oct 26 21:53:26 1998 +0000 + + Add install steps for libpopt.a and popt.h + + CVS patchset: 2500 + CVS date: 1998/10/26 21:53:26 + +commit 7ce37fbf245ff0348daa8ae4970847d21bfc5c9c +Author: ewt +Date: Mon Oct 26 21:20:31 1998 +0000 + + don't typedef poptOption on c++ + + CVS patchset: 2499 + CVS date: 1998/10/26 21:20:31 + +commit 4cb02e48bb9d348f9d434f9f3791c8b93c22b19f +Author: jbj +Date: Thu Oct 22 20:32:09 1998 +0000 + + Revert VERSION change. + + CVS patchset: 2498 + CVS date: 1998/10/22 20:32:09 + +commit dc791bb98dadc41a0617480773746bccf973e719 +Author: jbj +Date: Thu Oct 22 20:15:23 1998 +0000 + + Oriphan. + + CVS patchset: 2497 + CVS date: 1998/10/22 20:15:23 + +commit b08a35c0a3b1eca37bc28c210508aa3b39b92e57 +Author: jbj +Date: Thu Oct 22 20:15:05 1998 +0000 + + Set VERSION at top of Makefile.am, expand popt.spec.in accordingly. + + CVS patchset: 2496 + CVS date: 1998/10/22 20:15:05 + +commit d1bd01611747c37170b1f0c278443fd3a5e3e892 +Author: jbj +Date: Thu Oct 22 20:06:47 1998 +0000 + + Sanity. + + CVS patchset: 2495 + CVS date: 1998/10/22 20:06:47 + +commit 19fbfec6ae76ef696b3839b8f8ba7f8d5d63ebca +Author: jbj +Date: Thu Oct 22 19:41:24 1998 +0000 + + Quiet "make archive: output. + + CVS patchset: 2494 + CVS date: 1998/10/22 19:41:24 + +commit 1d6ef834aafe5aba71ba67912f681b5d49bc5ad9 +Author: jbj +Date: Thu Oct 22 19:39:12 1998 +0000 + + Check in to test "make archive". + + CVS patchset: 2493 + CVS date: 1998/10/22 19:39:12 + +commit 90d8ac2686423b33aca084200d4f4948bd332500 +Author: jbj +Date: Thu Oct 22 19:11:53 1998 +0000 + + Add test1 as compile target. + + CVS patchset: 2492 + CVS date: 1998/10/22 19:11:53 + +commit 3a394eb3e66eac60037f68c560ad2802e79d7d58 +Author: gafton +Date: Thu Oct 22 18:59:41 1998 +0000 + + fixed a typo in translation + + CVS patchset: 2491 + CVS date: 1998/10/22 18:59:41 + +commit 548d5b27e02740c5d3e822ca56668b43832e7fad +Author: ewt +Date: Thu Oct 22 18:58:07 1998 +0000 + + use autogen, version 1.2 + + CVS patchset: 2490 + CVS date: 1998/10/22 18:58:07 + +commit 1ce75c2e66136f2ed22065a9eb9303bef49abc93 +Author: ewt +Date: Thu Oct 22 18:57:30 1998 +0000 + + use autogen + + CVS patchset: 2489 + CVS date: 1998/10/22 18:57:30 + +commit 0524e0a99cf939d283c5b6005179cdcdada51fba +Author: ewt +Date: Thu Oct 22 18:57:04 1998 +0000 + + *** empty log message *** + + CVS patchset: 2488 + CVS date: 1998/10/22 18:57:04 + +commit 1abebef2bacc5bf5488568d9777fa7e806f71b8d +Author: ewt +Date: Thu Oct 22 18:56:55 1998 +0000 + + added po subdirectory + + CVS patchset: 2487 + CVS date: 1998/10/22 18:56:55 + +commit 961e7ec87f490a05ed6a3bd3596688b6a711836b +Author: ewt +Date: Thu Oct 22 18:56:26 1998 +0000 + + tried to get install rule working + + CVS patchset: 2486 + CVS date: 1998/10/22 18:56:26 + +commit 95696935ceb9e6e65b62d529abc60701cd07b013 +Author: ewt +Date: Thu Oct 22 18:53:48 1998 +0000 + + added a missing \n + + CVS patchset: 2485 + CVS date: 1998/10/22 18:53:48 + +commit f1ee2a640217ae61da2ccc7fa57c21534416052e +Author: ewt +Date: Thu Oct 22 18:52:38 1998 +0000 + + install popt.mo, not rpm.mo + + CVS patchset: 2484 + CVS date: 1998/10/22 18:52:38 + +commit 00622ef496952ebec0d011c668602041b54e9397 +Author: ewt +Date: Thu Oct 22 18:51:37 1998 +0000 + + added romainian + + CVS patchset: 2483 + CVS date: 1998/10/22 18:51:37 + +commit a5e3717c73c21cb4d2b789790a362083f3a14455 +Author: gafton +Date: Thu Oct 22 18:49:50 1998 +0000 + + *** empty log message *** + + CVS patchset: 2482 + CVS date: 1998/10/22 18:49:50 + +commit 10c722007a992fd7a830f6dd65a5d5a8253c6b1f +Author: ewt +Date: Thu Oct 22 18:43:50 1998 +0000 + + fixes + + CVS patchset: 2481 + CVS date: 1998/10/22 18:43:50 + +commit dbf444268cbc330807330ad559fd3a1474b3156c +Author: ewt +Date: Thu Oct 22 18:41:04 1998 +0000 + + added po/Makefile.in + + CVS patchset: 2480 + CVS date: 1998/10/22 18:41:04 + +commit 490368555553bc9b6839c099203b00b6acf687c2 +Author: ewt +Date: Thu Oct 22 18:40:57 1998 +0000 + + *** empty log message *** + + CVS patchset: 2479 + CVS date: 1998/10/22 18:40:57 + +commit b0ff21dbad2f3769b4814e2b6a9a7b314f797b2f +Author: ewt +Date: Thu Oct 22 18:33:13 1998 +0000 + + these don't need to be in CVS + + CVS patchset: 2478 + CVS date: 1998/10/22 18:33:13 + +commit 1bf1381215c951dbfb69abde35e4c719feef95c5 +Author: ewt +Date: Thu Oct 22 18:32:50 1998 +0000 + + added i18n support + + CVS patchset: 2477 + CVS date: 1998/10/22 18:32:50 + +commit c272e2a2fc6316e79ce715ddb4c2994bea675cd9 +Author: jbj +Date: Thu Oct 22 18:06:35 1998 +0000 + + Standalone popt with automake. + + CVS patchset: 2476 + CVS date: 1998/10/22 18:06:35 + +commit cbbb7842d1212268aaf87e878f9c8cf85eeed2aa +Author: ewt +Date: Thu Oct 22 16:03:47 1998 +0000 + + *** empty log message *** + + CVS patchset: 2475 + CVS date: 1998/10/22 16:03:47 + +commit 48775318719ef627f3d099adfde2bb6bdd26e3e3 +Author: ewt +Date: Thu Oct 22 16:03:38 1998 +0000 + + added ifo on help functions + + CVS patchset: 2474 + CVS date: 1998/10/22 16:03:38 + +commit d56f5e6d16e8343610d9214fdbbe9f11fabe5488 +Author: ewt +Date: Wed Oct 21 21:44:18 1998 +0000 + + implemented POPT_ARGFLAG_DOC_HIDDEN, POPT_CBFLAG_PRE, POPT_CBFLAG_POST + + CVS patchset: 2473 + CVS date: 1998/10/21 21:44:18 + +commit fa3f916f27a9b3012078ad7c42e454ea54cb017b +Author: ewt +Date: Wed Oct 21 20:34:05 1998 +0000 + + added poptGetInvocationName() + + CVS patchset: 2472 + CVS date: 1998/10/21 20:34:05 + +commit 46e27fdf22ebbcf2f215486d22ff80eb3986607b +Author: ewt +Date: Wed Oct 21 20:31:23 1998 +0000 + + added POPT_ARGFLAG_ONEDASH + + CVS patchset: 2471 + CVS date: 1998/10/21 20:31:23 + +commit 3607264dfd549d50e3582b6c7061c65fd281e1af +Author: jbj +Date: Tue Oct 20 19:30:02 1998 +0000 + + More "make check" enhancement. + + CVS patchset: 2469 + CVS date: 1998/10/20 19:30:02 + +commit 444714ca5cb4a6ceb7a483706cffcf0b550174f0 +Author: jbj +Date: Tue Oct 20 15:36:12 1998 +0000 + + Enhanced hello.spec. + + CVS patchset: 2468 + CVS date: 1998/10/20 15:36:12 + +commit 04852fe8b7300ddaba4417250e0b5c4c8bd8f080 +Author: jbj +Date: Tue Oct 20 14:40:34 1998 +0000 + + Add lead/header/signature/cpio verification. + + CVS patchset: 2467 + CVS date: 1998/10/20 14:40:34 + +commit c98d94abb2ed545771c23729cc5a9be26cde3d24 +Author: jbj +Date: Tue Oct 20 13:40:27 1998 +0000 + + Working make check. + + CVS patchset: 2466 + CVS date: 1998/10/20 13:40:27 + +commit 5fc8cb62a550c25c2d688b1c85fee56203ad1d66 +Author: jbj +Date: Tue Oct 20 11:54:13 1998 +0000 + + First attempt at "make check". + + CVS patchset: 2465 + CVS date: 1998/10/20 11:54:13 + +commit 6fa0d192717289118eb934d23ea087006b0c4a1a +Author: ewt +Date: Fri Oct 16 19:05:12 1998 +0000 + + added proper licensing info + + CVS patchset: 2464 + CVS date: 1998/10/16 19:05:12 + +commit 9f20ee028be86ad9c02275772f1153f00c99a4f6 +Author: jbj +Date: Thu Oct 15 23:29:25 1998 +0000 + + augment --showrc with -v, only display set variables without -v. + add macrofiles variable, permit second entry to initMacros(). + + CVS patchset: 2463 + CVS date: 1998/10/15 23:29:25 + +commit 200977cdf3524d4b4e519870940167aef2886e5c +Author: jbj +Date: Thu Oct 15 16:34:51 1998 +0000 + + add config.h defines for scripts like find-requires. + + CVS patchset: 2462 + CVS date: 1998/10/15 16:34:51 + +commit 1b359d4778e687157a7e0f77d0356d549f40e871 +Author: jbj +Date: Wed Oct 14 19:00:22 1998 +0000 + + Permit multiple -l flags. + Internalize language loop for speed. + + CVS patchset: 2460 + CVS date: 1998/10/14 19:00:22 + +commit c21f3285204c86aa2e90594798aed4052d618e22 +Author: jbj +Date: Tue Oct 13 15:10:10 1998 +0000 + + Turn on writing. + + CVS patchset: 2457 + CVS date: 1998/10/13 15:10:10 + +commit d8e111920b0f379e6f659586a73ccbb0f180e522 +Author: ewt +Date: Tue Oct 13 15:04:40 1998 +0000 + + test1.c + + CVS patchset: 2456 + CVS date: 1998/10/13 15:04:40 + +commit e6ba33c6b498c62584fe5b23524c87eef7a6a711 +Author: ewt +Date: Tue Oct 13 14:52:13 1998 +0000 + + used POPT_ARG_MASK + + CVS patchset: 2455 + CVS date: 1998/10/13 14:52:13 + +commit 4cee4c7f334964cbfa1c833b2710227f6e3bd489 +Author: ewt +Date: Tue Oct 13 14:47:38 1998 +0000 + + use POPT_ARG_MASK + + CVS patchset: 2454 + CVS date: 1998/10/13 14:47:38 + +commit 9b1c7d5afc014d1ab333ed15dfa500d8a5bdf3f3 +Author: ewt +Date: Tue Oct 13 14:45:18 1998 +0000 + + 1) added (unimplemented) POPT_CB_USE_INCLUDE_DATA and POPT_ARG_FLAG_* + 2) added (and sued) POPT_ARG_MASK + + CVS patchset: 2453 + CVS date: 1998/10/13 14:45:18 + +commit 301fd9e17335d546b4c49886addcbf9ebfe5fd88 +Author: ewt +Date: Mon Oct 12 18:25:56 1998 +0000 + + fixed --help + + CVS patchset: 2450 + CVS date: 1998/10/12 18:25:56 + +commit 9daa5cbdee6e00fb642a83ae150f8b71ea3663da +Author: jbj +Date: Mon Oct 12 15:49:16 1998 +0000 + + Typo. + + CVS patchset: 2448 + CVS date: 1998/10/12 15:49:16 + +commit 06032e9afd7a6ba6e0401fc707652e5b42c79541 +Author: jbj +Date: Sun Oct 11 21:43:10 1998 +0000 + + Plug input fd leak. + + CVS patchset: 2447 + CVS date: 1998/10/11 21:43:10 + +commit 0406f6dae3c777968467b6845e02bccb544ceca6 +Author: jbj +Date: Sun Oct 11 20:58:58 1998 +0000 + + Test drill. + + CVS patchset: 2446 + CVS date: 1998/10/11 20:58:58 + +commit a776c84fe10d2fa21211c605665a2ecaa2811b6b +Author: jbj +Date: Sun Oct 11 17:32:45 1998 +0000 + + Makefile.in generated. + + CVS patchset: 2445 + CVS date: 1998/10/11 17:32:45 + +commit 0609401b792bbcb1b5278b0115a10c56dbe48e7a +Author: jbj +Date: Sun Oct 11 16:17:45 1998 +0000 + + Sub-dir compilation on solaris. + + CVS patchset: 2442 + CVS date: 1998/10/11 16:17:45 + +commit df9b72c229181fb88f309631bb260b55c0c6a787 +Author: jbj +Date: Sun Oct 11 15:19:55 1998 +0000 + + permit rpm to be built in a sub-directory (--srcdir=DIR). + + CVS patchset: 2441 + CVS date: 1998/10/11 15:19:55 + +commit 4e498b0bcb7b0669e4eeac32d1a3052718646412 +Author: jbj +Date: Fri Oct 9 23:51:19 1998 +0000 + + permit rpm to be built in a sub-directory (--srcdir=DIR). + + CVS patchset: 2440 + CVS date: 1998/10/09 23:51:19 + +commit 8ce5bb8febef35db985f3213d8303157983d8f20 +Author: jbj +Date: Fri Oct 9 00:52:32 1998 +0000 + + return CPIO_BAD_HEADER instead of exiting. (Scott M. Stone) + + CVS patchset: 2438 + CVS date: 1998/10/09 00:52:32 + +commit 768c0238b0544477f81492be0e3339f2b9eaa8fe +Author: jbj +Date: Fri Oct 9 00:48:18 1998 +0000 + + untranslate "(none)" for auto relocating script wrappers. + + CVS patchset: 2436 + CVS date: 1998/10/09 00:48:18 + +commit 70d38b48bccdbfc933bdf9a76d1689d735720d5c +Author: jbj +Date: Fri Oct 9 00:47:03 1998 +0000 + + Sanity. + + CVS patchset: 2435 + CVS date: 1998/10/09 00:47:03 + +commit 12dbb712dddd146acb348c05355bb1fba38fb707 +Author: jbj +Date: Thu Oct 8 18:51:48 1998 +0000 + + Do "ln -s a a", not lazy "ln -s a". + + CVS patchset: 2431 + CVS date: 1998/10/08 18:51:48 + +commit 025a69e0d71a094d1dde676d052317a08264296f +Author: jbj +Date: Thu Oct 8 18:49:59 1998 +0000 + + rpmgettext on solaris. + + CVS patchset: 2429 + CVS date: 1998/10/08 18:49:59 + +commit 5e2e4ae2ef2d8d0f22e49ff90b14943587ab78a6 +Author: jbj +Date: Thu Oct 8 16:03:06 1998 +0000 + + Orphan. + + CVS patchset: 2428 + CVS date: 1998/10/08 16:03:06 + +commit 3427af0adbbdef335ca37733938fdd15a93534a4 +Author: jbj +Date: Thu Oct 8 16:02:08 1998 +0000 + + egcs warnings. + + CVS patchset: 2427 + CVS date: 1998/10/08 16:02:08 + +commit 3c4dd252d7038a7d13c2ed88fbe173eebf88a0e8 +Author: jbj +Date: Thu Oct 8 15:16:23 1998 +0000 + + Restore rpmputtext compilation. + + CVS patchset: 2426 + CVS date: 1998/10/08 15:16:23 + +commit 1607fbe7a370485b5ae1dcf4ba0f7216a3cbb9bb +Author: jbj +Date: Thu Oct 8 14:59:17 1998 +0000 + + Consolidate i18n baggage into AM_GNU_GETTEXT and system.h. + + CVS patchset: 2425 + CVS date: 1998/10/08 14:59:17 + +commit dbc931969995fc56dd9b0361b7fbd8d2264d6472 +Author: jbj +Date: Thu Oct 8 14:23:53 1998 +0000 + + add required files to popt. + restore CVSTAG for "make archive" + + CVS patchset: 2424 + CVS date: 1998/10/08 14:23:53 + +commit afbe183dd5cf6079e1d3249ac54fe8946ad37e49 +Author: jbj +Date: Thu Oct 8 12:44:39 1998 +0000 + + Use AC_REPLACE_FUNCS. + + CVS patchset: 2423 + CVS date: 1998/10/08 12:44:39 + +commit d93b2ada1113caba237fd73b04d8eebe45fc5d31 +Author: jbj +Date: Thu Oct 8 11:55:37 1998 +0000 + + egcs warning removal. + + CVS patchset: 2422 + CVS date: 1998/10/08 11:55:37 + +commit 7e8efa2f984512efdd92f76c1e13be97c36943a2 +Author: jbj +Date: Thu Oct 8 11:19:57 1998 +0000 + + automake linux fiddles. + + CVS patchset: 2421 + CVS date: 1998/10/08 11:19:57 + +commit df9fe91d0cc46123a9c93f499d54387609d64e3d +Author: jbj +Date: Thu Oct 8 10:57:03 1998 +0000 + + Orphan. + + CVS patchset: 2420 + CVS date: 1998/10/08 10:57:03 + +commit b70bc6469bbd04be5013702159ab70e16e06019d +Author: jbj +Date: Thu Oct 8 10:52:51 1998 +0000 + + Orphans. + + CVS patchset: 2419 + CVS date: 1998/10/08 10:52:51 + +commit 1516f1d56c6fc74fa77596e78237ab7400cae4e2 +Author: jbj +Date: Thu Oct 8 10:40:27 1998 +0000 + + configure using automake. + + CVS patchset: 2418 + CVS date: 1998/10/08 10:40:27 + +commit 44184bacebad7f7e3d8afc6e31015683ff78e5f5 +Author: jbj +Date: Wed Oct 7 17:06:10 1998 +0000 + + arch/os (and platform) should be case insensitive everywhere forever. + + CVS patchset: 2417 + CVS date: 1998/10/07 17:06:10 + +commit 44df481b463d98d27110da4f48c6d4b0cf8561e2 +Author: jbj +Date: Wed Oct 7 16:05:51 1998 +0000 + + fix per-arch macro setting (e.g. optflags). + better way to handle Linux vs. linux. + + CVS patchset: 2416 + CVS date: 1998/10/07 16:05:51 + +commit 698ec237180132948d22ee2fea740e2df8dcec5c +Author: jbj +Date: Wed Oct 7 15:33:51 1998 +0000 + + attempt to deal rationally with os as "Linux" or "linux". + + CVS patchset: 2415 + CVS date: 1998/10/07 15:33:51 + +commit 7a57c1de121da87f67b3713e8a812969c0f17af3 +Author: jbj +Date: Wed Oct 7 13:48:53 1998 +0000 + + Typo. + + CVS patchset: 2414 + CVS date: 1998/10/07 13:48:53 + +commit ffb5ed842f60ea3f234dbe530b25e1f237ceb4f0 +Author: jbj +Date: Tue Oct 6 23:16:29 1998 +0000 + + Move forceIncludeFile to eliminate warning. + + CVS patchset: 2412 + CVS date: 1998/10/06 23:16:29 + +commit 081efe9cfae95e1a231e57da3183fceac1149f44 +Author: jbj +Date: Tue Oct 6 23:11:54 1998 +0000 + + Initialize fileStack. + + CVS patchset: 2411 + CVS date: 1998/10/06 23:11:54 + +commit 7ad030f18f118f164a088852aa01ffc2784d006b +Author: jbj +Date: Tue Oct 6 19:18:47 1998 +0000 + + non-linux arch/os identification (Eugene Kanter). + + CVS patchset: 2410 + CVS date: 1998/10/06 19:18:47 + +commit 76b407a906cffa58e7d8986b11de92b3da1d032a +Author: jbj +Date: Tue Oct 6 17:56:44 1998 +0000 + + portable mode_t/pid_t typedefs. + + CVS patchset: 2406 + CVS date: 1998/10/06 17:56:44 + +commit c821c63f4f1597b44d4a0e96193ddf48a2f74567 +Author: jbj +Date: Tue Oct 6 17:49:59 1998 +0000 + + update-po. + + CVS patchset: 2404 + CVS date: 1998/10/06 17:49:59 + +commit fecf31143c2da611b824e323299ac52c7144c46a +Author: jbj +Date: Tue Oct 6 17:34:58 1998 +0000 + + add generalized expression handler (Tom Dyas) + + CVS patchset: 2403 + CVS date: 1998/10/06 17:34:58 + +commit 606a74badc1788bc0c78221de466c21d5b0f57ee +Author: jbj +Date: Tue Oct 6 16:04:03 1998 +0000 + + use /usr/lib/rpm/mkinstalldirs if mkdir -p fails. + + CVS patchset: 2402 + CVS date: 1998/10/06 16:04:03 + +commit 7a9831a86cb98687225976cced128748e0c1bd08 +Author: jbj +Date: Tue Oct 6 15:26:55 1998 +0000 + + more portable dirent handling (Hermann Lauer). + + CVS patchset: 2401 + CVS date: 1998/10/06 15:26:55 + +commit a48ab753eee6ef2d4c45e73b1f3a3a566a8c4350 +Author: jbj +Date: Tue Oct 6 14:21:06 1998 +0000 + + fix check for trailing / in Prefix: + + CVS patchset: 2400 + CVS date: 1998/10/06 14:21:06 + +commit 0bbb9e055716817b1e0b9ceddf99a3d54fa05098 +Author: jbj +Date: Mon Oct 5 19:49:30 1998 +0000 + + miscellaneous portability cruft (Eugene Kanter). + + CVS patchset: 2398 + CVS date: 1998/10/05 19:49:30 + +commit 4acdf2581ad413bb5e48644f0b04ab4bf5bc3ce8 +Author: jbj +Date: Mon Oct 5 18:35:07 1998 +0000 + + Create. + + CVS patchset: 2396 + CVS date: 1998/10/05 18:35:07 + +commit 8dab48ac0ad15696e3970575a80f53fa226175dd +Author: jbj +Date: Mon Oct 5 18:31:48 1998 +0000 + + miscellaneous portability cruft (Eugene Kanter). + + CVS patchset: 2395 + CVS date: 1998/10/05 18:31:48 + +commit 430cc4f45ec0083fb4a8f60afa088250089a4a5a +Author: jbj +Date: Mon Oct 5 17:26:46 1998 +0000 + + miscellaneous portability cruft (Eugene Kanter). + + CVS patchset: 2392 + CVS date: 1998/10/05 17:26:46 + +commit ac661a8436f9d63277e610f12b854fa257caea44 +Author: jbj +Date: Mon Oct 5 17:25:18 1998 +0000 + + remove 2 character language name assumption. + add /usr/lib/rpm/find-lang.sh (W. L. Estes ) + + CVS patchset: 2391 + CVS date: 1998/10/05 17:25:18 + +commit 220a2033af18797417d3000b163d237e55dc84f9 +Author: jbj +Date: Mon Oct 5 17:24:18 1998 +0000 + + No i18n on rpminject.c + + CVS patchset: 2390 + CVS date: 1998/10/05 17:24:18 + +commit a0f290873e35f0895dac8ca72cca54cb8b20a177 +Author: jbj +Date: Mon Oct 5 17:20:09 1998 +0000 + + remove 2 character language name assumption. + add /usr/lib/rpm/find-lang.sh (W. L. Estes ) + + CVS patchset: 2389 + CVS date: 1998/10/05 17:20:09 + +commit f4b29669e796e147091edaa1329baeb81e2ffe4d +Author: jbj +Date: Fri Oct 2 15:37:37 1998 +0000 + + miscellaneous portability cruft (Eugene Kanter). + + CVS patchset: 2386 + CVS date: 1998/10/02 15:37:37 + +commit 4e3cea63b560380de0d34e70004f40bbcfc63dda +Author: jbj +Date: Fri Oct 2 14:01:29 1998 +0000 + + Makefile: don't use ln -sf. + + CVS patchset: 2384 + CVS date: 1998/10/02 14:01:29 + +commit 0d38d87261256a8753c292571a693e2a040b9723 +Author: jbj +Date: Fri Oct 2 13:50:49 1998 +0000 + + rpm.spec: create /usr/src/redhat/* in %install. + + CVS patchset: 2382 + CVS date: 1998/10/02 13:50:49 + +commit 83a84b5e430cdc439b11826a8f220f2698723f69 +Author: jbj +Date: Fri Oct 2 13:45:30 1998 +0000 + + getOutputFrom(): fix race between last read on pipe and child death + (exacerbated in 2.5.4). + + CVS patchset: 2380 + CVS date: 1998/10/02 13:45:30 + +commit 26e10a5280b10fdaf63a4bf861e5142e7bffe344 +Author: jbj +Date: Tue Sep 29 14:19:39 1998 +0000 + + Eliminate gcc warning. + + CVS patchset: 2378 + CVS date: 1998/09/29 14:19:39 + +commit a88e320d6d8d2c338e1987bb268d9aaeb192f163 +Author: jbj +Date: Mon Sep 28 22:03:28 1998 +0000 + + Sync with 2.5.4. + + CVS patchset: 2376 + CVS date: 1998/09/28 22:03:28 + +commit fd068345e6e5165b8b772edc3392adda228800fe +Author: jbj +Date: Sun Sep 27 22:03:52 1998 +0000 + + add Slovak translation (Stanislav Meduna ) + gettextify rpmMessage/rpmError/fprintf messages. + + CVS patchset: 2368 + CVS date: 1998/09/27 22:03:52 + +commit 4ce5eff979df73a23c4ef071e52cff67693e15d2 +Author: jbj +Date: Sun Sep 27 21:55:05 1998 +0000 + + Add sk translation. + + CVS patchset: 2367 + CVS date: 1998/09/27 21:55:05 + +commit a97c115f33ca6df258fbf412ee9f3ea4cd4bcdfa +Author: jbj +Date: Sun Sep 27 20:17:31 1998 +0000 + + add Slovak translation (Stanislav Meduna ) + gettextify rpmMessage/rpmError/fprintf messages. + + CVS patchset: 2366 + CVS date: 1998/09/27 20:17:31 + +commit 660ace52bccc0f77573f210aaa5347752f3c045b +Author: ewt +Date: Sun Sep 27 16:05:54 1998 +0000 + + fixed ls -l information for sockets + + CVS patchset: 2364 + CVS date: 1998/09/27 16:05:54 + +commit 696d7869323e4813004dbd32874755378d2565d7 +Author: ewt +Date: Sun Sep 27 15:58:31 1998 +0000 + + made callback display val + + CVS patchset: 2363 + CVS date: 1998/09/27 15:58:31 + +commit a388d1ad903c3e0dc659bf3a2a7d62039a037a6f +Author: ewt +Date: Sun Sep 27 15:57:56 1998 +0000 + + split popt into multiple files + + CVS patchset: 2362 + CVS date: 1998/09/27 15:57:56 + +commit 41bcd2e98b4fb80e0ad5569aab9da8b16bb4391f +Author: ewt +Date: Sun Sep 27 15:56:18 1998 +0000 + + 1) modified test to display callback val field + 2) split popt stuff into multiple iles + + CVS patchset: 2361 + CVS date: 1998/09/27 15:56:18 + +commit aacc8cc6c9f48decef167358fca1f840e8304294 +Author: ewt +Date: Sun Sep 27 15:54:20 1998 +0000 + + changed popt callbacks t get a pointer into the option table + + CVS patchset: 2360 + CVS date: 1998/09/27 15:54:20 + +commit 88c518a2c8f4e0650c1806cc3dc1afbd77cbc1bd +Author: ewt +Date: Sun Sep 27 15:53:49 1998 +0000 + + started autohelp, include, and callback docs + + CVS patchset: 2359 + CVS date: 1998/09/27 15:53:49 + +commit 240dac723b6d22f20d87e1eefd404e456bda6386 +Author: ewt +Date: Sun Sep 27 15:02:53 1998 +0000 + + by default, allow exec's across absolute paths + + CVS patchset: 2358 + CVS date: 1998/09/27 15:02:53 + +commit 0b277bc85b1fec1aba7566bed03c732ed3088edc +Author: ewt +Date: Sun Sep 27 14:57:03 1998 +0000 + + 1) added included tables + 2) added option callbacks + 3) added automatic help/usage messages + + CVS patchset: 2357 + CVS date: 1998/09/27 14:57:03 + +commit 60e834d306ea049d85b8f77d6b27933f055883b9 +Author: jbj +Date: Fri Sep 25 12:20:55 1998 +0000 + + update po files; add cz to catalogs. + + CVS patchset: 2356 + CVS date: 1998/09/25 12:20:55 + +commit 563733b477a9592ef347eaf7a7169d5d9e71d63f +Author: jbj +Date: Fri Sep 25 09:07:11 1998 +0000 + + expand args using popt on pre-rpmReadConfigFiles arg pass. + + CVS patchset: 2354 + CVS date: 1998/09/25 09:07:11 + +commit 54b2849f61f86f75c1eb7481c6aa7ebd4acb6284 +Author: jbj +Date: Thu Sep 24 20:36:54 1998 +0000 + + skip arch checks if only packaging source rpm. + + CVS patchset: 2352 + CVS date: 1998/09/24 20:36:54 + +commit d6a3e244e0aa5308844623f7973f03bd87dc3aaf +Author: jbj +Date: Thu Sep 24 19:13:08 1998 +0000 + + add license field to rpmpopt -qi alias. + + CVS patchset: 2350 + CVS date: 1998/09/24 19:13:08 + +commit 4a3682fdc756a9d06117886d502139c163a4891a +Author: jbj +Date: Thu Sep 24 18:02:57 1998 +0000 + + provides/obsoletes requires tokens that begin with alnum or _. + + CVS patchset: 2347 + CVS date: 1998/09/24 18:02:57 + +commit 5428fb90f4432052eb08f9b7e3072e1af97bff4c +Author: jbj +Date: Thu Sep 24 17:47:41 1998 +0000 + + non-zero exit status for verify failures. + + CVS patchset: 2345 + CVS date: 1998/09/24 17:47:41 + +commit c3970176a9da3bcb466b58977a38b9c6c9d7d8af +Author: jbj +Date: Thu Sep 24 16:59:24 1998 +0000 + + hpux does setreuid differently (Hermann Lauer). + + CVS patchset: 2343 + CVS date: 1998/09/24 16:59:24 + +commit f8f96a4609fac0d82e564153e56dc599f11fdbb9 +Author: jbj +Date: Thu Sep 24 16:57:38 1998 +0000 + + hpux does setreuid differently (Hermann Lauer) + + CVS patchset: 2342 + CVS date: 1998/09/24 16:57:38 + +commit 4d413b87d8d3a2bacb291cc43322311b556a2408 +Author: jbj +Date: Thu Sep 24 16:49:51 1998 +0000 + + check for setreuid portably (Eugene Kanter). + + CVS patchset: 2340 + CVS date: 1998/09/24 16:49:51 + +commit 1d6fe134f4b18e190d77e99786d471a8b425b99b +Author: jbj +Date: Wed Sep 23 16:23:18 1998 +0000 + + add Serbian translation (Zoltan Csala ). + + CVS patchset: 2338 + CVS date: 1998/09/23 16:23:18 + +commit 1f1bd8211cd8b23f0ea283fc27c92e7613d7e9ec +Author: jbj +Date: Wed Sep 23 13:31:54 1998 +0000 + + arch/os tables were not being initialized for noarch builds. + + CVS patchset: 2335 + CVS date: 1998/09/23 13:31:54 + +commit 7a84b82c3e2d44d8f8bbb5ee2c4b33cbcc0af5e4 +Author: jbj +Date: Sun Sep 20 19:31:57 1998 +0000 + + Fix for losing end-of-file message. + + CVS patchset: 2333 + CVS date: 1998/09/20 19:31:57 + +commit 32ffb6b77c138989f89bedb97b8ceaf982a9cc2e +Author: jbj +Date: Sun Sep 20 18:27:03 1998 +0000 + + Rearrange gettext sources to taste. + + CVS patchset: 2332 + CVS date: 1998/09/20 18:27:03 + +commit 33e58c54f53e14e4f214153a40fa59f9b0ae07aa +Author: jbj +Date: Sun Sep 20 17:49:35 1998 +0000 + + Copies from gettext-0.10.35. + + CVS patchset: 2331 + CVS date: 1998/09/20 17:49:35 + +commit 0ba3a6c926b206f7bc48e6f3d9ae6ed3823dbdeb +Author: jbj +Date: Sat Sep 19 23:23:54 1998 +0000 + + Sanity. + + CVS patchset: 2330 + CVS date: 1998/09/19 23:23:54 + +commit 572ef48842a4656f5a73fa006598f80dcf348ce5 +Author: jbj +Date: Sat Sep 19 18:00:25 1998 +0000 + + Numeric values for tags in xref field. + Include src rpm name even if not a sub-package. + + CVS patchset: 2329 + CVS date: 1998/09/19 18:00:25 + +commit d7ffdb24eb55ddbc1d7c9183c8dd2d05d32e0692 +Author: jbj +Date: Sat Sep 19 16:57:06 1998 +0000 + + Permit gettext with single language. + + CVS patchset: 2328 + CVS date: 1998/09/19 16:57:06 + +commit 6af85682e178fcb056afdbb6ebf21a9f0e55d1f0 +Author: jbj +Date: Sat Sep 19 16:36:22 1998 +0000 + + quote users/groups/filenames in --setugids. + + CVS patchset: 2327 + CVS date: 1998/09/19 16:36:22 + +commit bd3f2ce41341dcd14c99e0305fa97731b67bbdbe +Author: jbj +Date: Fri Sep 18 19:10:12 1998 +0000 + + First injection. + + CVS patchset: 2325 + CVS date: 1998/09/18 19:10:12 + +commit 669b31acf4367c59f40e99cef4ed3afc8e330e31 +Author: jbj +Date: Thu Sep 17 21:02:54 1998 +0000 + + Prepare for injection. + + CVS patchset: 2324 + CVS date: 1998/09/17 21:02:54 + +commit 14946826bb3f44df904985d69b84174804714037 +Author: jbj +Date: Thu Sep 17 00:58:38 1998 +0000 + + Debug parsing problems with xref comments. + + CVS patchset: 2323 + CVS date: 1998/09/17 00:58:38 + +commit 06a486fd6f5bfb765cdfc9f475677d08e8bbe95a +Author: jbj +Date: Wed Sep 16 21:17:27 1998 +0000 + + More work with xref files. + + CVS patchset: 2322 + CVS date: 1998/09/16 21:17:27 + +commit 603448337a14dfcdd395681dae11088db9a7385d +Author: jbj +Date: Wed Sep 16 08:39:29 1998 +0000 + + add russian translation w man pages (Serguei Koubouchine ). + + CVS patchset: 2321 + CVS date: 1998/09/16 08:39:29 + +commit 74d621fd11ce72ef1e2efcea1defb52ba694a1de +Author: jbj +Date: Wed Sep 16 08:39:11 1998 +0000 + + Typo. + + CVS patchset: 2320 + CVS date: 1998/09/16 08:39:11 + +commit 220fc4aa3cf811e5b892375a65deb23b0f2d08b7 +Author: jbj +Date: Tue Sep 15 21:21:08 1998 +0000 + + Add sourcerpm xref line. + + CVS patchset: 2318 + CVS date: 1998/09/15 21:21:08 + +commit f142465f72fff92e7f9ebc1a826bd0c4a9c5868a +Author: jbj +Date: Tue Sep 15 17:14:41 1998 +0000 + + Parse out msgstr with lang as domain. + + CVS patchset: 2317 + CVS date: 1998/09/15 17:14:41 + +commit f9cd41664a6137ee82a98ab744ecfdbd539e3005 +Author: jbj +Date: Tue Sep 15 16:51:57 1998 +0000 + + Parse into msglist, take 1. + + CVS patchset: 2316 + CVS date: 1998/09/15 16:51:57 + +commit 49656cd7e3e93d16aa6dbac51dae7d8be385e537 +Author: jbj +Date: Tue Sep 15 14:26:02 1998 +0000 + + fix virtual file attribute bug that skipped all files in binary rpm. + + CVS patchset: 2315 + CVS date: 1998/09/15 14:26:02 + +commit 679e135014fbc9af22c3ea26ae435f91064ae51d +Author: jbj +Date: Mon Sep 14 20:58:51 1998 +0000 + + Swipe data structures from gettext. + + CVS patchset: 2311 + CVS date: 1998/09/14 20:58:51 + +commit b4f7b7d126eb85fe87ec99edae0a62ed4b56814e +Author: jbj +Date: Mon Sep 14 18:55:18 1998 +0000 + + eliminate infinite loop with missing tmpdir (Trent Jarvi). + + CVS patchset: 2310 + CVS date: 1998/09/14 18:55:18 + +commit 9d1dec2a001f969acd05a5257c709969c9d8bbb6 +Author: jbj +Date: Mon Sep 14 17:50:49 1998 +0000 + + Parser for rpmpo files. + + CVS patchset: 2308 + CVS date: 1998/09/14 17:50:49 + +commit e09d4d2fbfdbdedabe4cf0c969343adfd6e4cad6 +Author: jbj +Date: Mon Sep 14 17:47:16 1998 +0000 + + os_canon for CYGWIN32_NT/95. + + CVS patchset: 2307 + CVS date: 1998/09/14 17:47:16 + +commit 2847b27b7879b7ea50a2e6ceae0f0d8ea02210f9 +Author: jbj +Date: Sun Sep 13 18:33:17 1998 +0000 + + Don't bother with untranslated RPMTAG_GROUP's. + + CVS patchset: 2304 + CVS date: 1998/09/13 18:33:17 + +commit df2707beca642be48d3ad94004db79714cb79cae +Author: jbj +Date: Sat Sep 12 21:49:03 1998 +0000 + + Merge in rpminject routines. + + CVS patchset: 2303 + CVS date: 1998/09/12 21:49:03 + +commit b68857cfe164fdd3d60383434bd10f9974bf4027 +Author: jbj +Date: Sat Sep 12 20:46:24 1998 +0000 + + rationalize autoconf detection of gzip/bzip2. + + CVS patchset: 2302 + CVS date: 1998/09/12 20:46:24 + +commit bfb66fb33eaa6aa8ed417cd3514b14add42f23f2 +Author: jbj +Date: Sat Sep 12 20:14:49 1998 +0000 + + Add inputdir, outputdir, and gentran flags. + Attempt inverse of printing po strings. + + CVS patchset: 2300 + CVS date: 1998/09/12 20:14:49 + +commit 47c0370a06a26fa13d1183fa1851a5aa78ca09a8 +Author: jbj +Date: Sat Sep 12 19:12:08 1998 +0000 + + Extract I18N headers from rpms. + + CVS patchset: 2299 + CVS date: 1998/09/12 19:12:08 + +commit f6aa54688c13665bf0c86ee87bbae9902b28bfd9 +Author: jbj +Date: Sat Sep 12 13:29:10 1998 +0000 + + restore backward compatible rpmrc/rpmpopt symlinks. + + CVS patchset: 2298 + CVS date: 1998/09/12 13:29:10 + +commit 4d8bd387702d57999e1d2586441b0c0dfc9fe7b3 +Author: jbj +Date: Fri Sep 11 20:14:32 1998 +0000 + + update pt_BR translations (Arnaldo Carvalho de Melo). + + CVS patchset: 2296 + CVS date: 1998/09/11 20:14:32 + +commit 640648d955debc56d49a19266a9cd067de94c615 +Author: jbj +Date: Fri Sep 11 19:36:34 1998 +0000 + + update pt_BR translations (Arnaldo Carvalho de Melo). + + CVS patchset: 2294 + CVS date: 1998/09/11 19:36:34 + +commit fc47c37e207b5fa70087015898e9a89b712c3e00 +Author: jbj +Date: Fri Sep 11 08:11:06 1998 +0000 + + permit --{buildroot,timecheck,test,sign} with -tX (Toshio Kuratomi). + + CVS patchset: 2292 + CVS date: 1998/09/11 08:11:06 + +commit 3d2769f74da29dd0ba948e7d2ab241f8fdba173d +Author: jbj +Date: Fri Sep 11 07:57:41 1998 +0000 + + fix database rebuilds with triggers (Steve Sanberg). + + CVS patchset: 2290 + CVS date: 1998/09/11 07:57:41 + +commit dd573c5a8a569afb2b0c1681b929adc6ad063ac8 +Author: jbj +Date: Thu Sep 10 16:25:15 1998 +0000 + + diagnostic message if unreadable/short source or patch file. + + CVS patchset: 2287 + CVS date: 1998/09/10 16:25:15 + +commit 173ebb3fe6d38ac123b13afa29b61a01409707f0 +Author: jbj +Date: Thu Sep 10 15:09:21 1998 +0000 + + eliminate redundant close in provide/require processing. + + CVS patchset: 2286 + CVS date: 1998/09/10 15:09:21 + +commit 1ae7d58bf0bab6baba3699d480aa19f4b5f5f548 +Author: jbj +Date: Wed Sep 9 21:19:59 1998 +0000 + + solaris portability patch resurrection (Steve Sanberg). + + CVS patchset: 2284 + CVS date: 1998/09/09 21:19:59 + +commit 0a4e182e4003be1497452658b7b3327975694641 +Author: jbj +Date: Sat Sep 5 23:13:35 1998 +0000 + + Integrate shell and macro enviroments for scripts. + + CVS patchset: 2282 + CVS date: 1998/09/05 23:13:35 + +commit 5973a1a52d424f1e40e944560c1bbe86064a6f4a +Author: jbj +Date: Sat Sep 5 21:54:05 1998 +0000 + + More RPMVAR_* conversion to macros. + + CVS patchset: 2281 + CVS date: 1998/09/05 21:54:05 + +commit 2e89e42535225624e56732a9a3c784bfa87e11cb +Author: jbj +Date: Sat Sep 5 20:12:32 1998 +0000 + + Typo. + + CVS patchset: 2280 + CVS date: 1998/09/05 20:12:32 + +commit e8b7b65b28000640df90a72d920eca7daa3db0aa +Author: jbj +Date: Sat Sep 5 20:02:08 1998 +0000 + + Start converting variables into macro expansions. + RPMVAR_SOURCEDIR -> %{_sourcedir} + RPMVAR_BUILDDIR -> %{_builddir} + + CVS patchset: 2279 + CVS date: 1998/09/05 20:02:08 + +commit dd8f00921aa4ec5b45d0db8b3b55b8ea109f1fed +Author: jbj +Date: Sat Sep 5 18:20:52 1998 +0000 + + Rewrite strsep code using strtok for ANSI C portability. + Remove RPMVAR_SETENV for now. + + CVS patchset: 2278 + CVS date: 1998/09/05 18:20:52 + +commit 8fa9463826e3aef7ed763b2d1d6bb0937e91b8cd +Author: jbj +Date: Fri Sep 4 16:17:46 1998 +0000 + + Sync with 5.2 branch. + + CVS patchset: 2275 + CVS date: 1998/09/04 16:17:46 + +commit 03114f2cf11a853aaa6933beae97f49c2229851e +Author: jbj +Date: Tue Sep 1 13:19:24 1998 +0000 + + align "Build Host:" with other fields + + CVS patchset: 2272 + CVS date: 1998/09/01 13:19:24 + +commit b2c81de5d619a76a7cee983b87d8b12be32b2fed +Author: jbj +Date: Mon Aug 31 21:06:41 1998 +0000 + + copy changelog tags to sub-packages just before packaging. + + CVS patchset: 2269 + CVS date: 1998/08/31 21:06:41 + +commit db15666699babd446f30d74d5e76b0a6d5c28d93 +Author: ewt +Date: Tue Aug 25 15:10:04 1998 +0000 + + added info on --triggers, --triggeredby + + CVS patchset: 2265 + CVS date: 1998/08/25 15:10:04 + +commit 3d48c1b420b0740006e3b2128b61009a1d5f7dc8 +Author: marc +Date: Sun Aug 23 19:23:18 1998 +0000 + + speeling + -Marc + + CVS patchset: 2264 + CVS date: 1998/08/23 19:23:18 + +commit 7c055ccee657b74321c21d9eeae9d421b3f39077 +Author: jbj +Date: Thu Aug 20 19:12:30 1998 +0000 + + Typo. + + CVS patchset: 2263 + CVS date: 1998/08/20 19:12:30 + +commit 0a38e41556db8b9070f04cc369559a1ed48cfaae +Author: jbj +Date: Thu Aug 20 16:34:58 1998 +0000 + + Add RPMTAG_EPOCH and RPMTAG_CAPABILITY init to 0. + + CVS patchset: 2262 + CVS date: 1998/08/20 16:34:58 + +commit fddd1e72153562ba64285af4b283bf155d3c5530 +Author: ewt +Date: Wed Aug 19 02:30:02 1998 +0000 + + added epoch handling + + CVS patchset: 2261 + CVS date: 1998/08/19 02:30:02 + +commit 546b00b2815a8b56876f74beffb6a45e7dcf91ba +Author: jbj +Date: Sun Aug 16 18:47:20 1998 +0000 + + Re-add. + + CVS patchset: 2256 + CVS date: 1998/08/16 18:47:20 + +commit 5a7141d62bdcfe3e50fca26cde2d70e21ed0ad83 +Author: jbj +Date: Sun Aug 16 14:35:20 1998 +0000 + + Missing attribution. + + CVS patchset: 2255 + CVS date: 1998/08/16 14:35:20 + +commit 8e9041037f6a50d37378c4c83c6267fe2e5c8849 +Author: jbj +Date: Sun Aug 16 14:26:04 1998 +0000 + + sanity. + + CVS patchset: 2253 + CVS date: 1998/08/16 14:26:04 + +commit 5c7453f237811c40615f4bf66c4276bab4551c02 +Author: jbj +Date: Sun Aug 16 14:06:19 1998 +0000 + + - added :hex query format + - fixed --querytags to display virtual tags + + CVS patchset: 2252 + CVS date: 1998/08/16 14:06:19 + +commit 969ea06e161af3b6d6b232922c44a89e5fc77a6d +Author: ewt +Date: Sun Aug 16 13:48:27 1998 +0000 + + CHANGES + + CVS patchset: 2251 + CVS date: 1998/08/16 13:48:27 + +commit 2ae7a2d53ccc3ab8b56b795ff3b438f411d20290 +Author: ewt +Date: Sun Aug 16 13:43:10 1998 +0000 + + added :hex format + + CVS patchset: 2250 + CVS date: 1998/08/16 13:43:10 + +commit 85d8c817233a557ac69ec5268211d24ce7da3e44 +Author: jbj +Date: Sat Aug 15 14:04:57 1998 +0000 + + Fix infinite recursion on non-ERANGE return from getcwd() during install. + + CVS patchset: 2245 + CVS date: 1998/08/15 14:04:57 + +commit f612cb1bf38b0179bff78ed1b9303af287745ca3 +Author: jbj +Date: Tue Aug 11 18:24:48 1998 +0000 + + Sync with 2.5.2 branch patches. + cpio_gzip: dup the fd before doing gzdopen (Thanks Erik!) + add --noLang to skip non-default languages. + + CVS patchset: 2243 + CVS date: 1998/08/11 18:24:48 + +commit 8ff713d13030f2f598e33535366f785047bd50e4 +Author: jbj +Date: Tue Aug 11 16:09:20 1998 +0000 + + rm .depend for multiple builds in same tree (Will Partain) + + CVS patchset: 2242 + CVS date: 1998/08/11 16:09:20 + +commit 7a94ee782ec2afa3a1615f14cc8fb46fbad0becf +Author: jbj +Date: Sun Aug 9 17:01:57 1998 +0000 + + Get the lead exactly right w/o reading rpmrc. + + CVS patchset: 2240 + CVS date: 1998/08/09 17:01:57 + +commit aa8549e65b669b39fc8e9eb6e9288e853f5175d8 +Author: jbj +Date: Sat Aug 8 22:27:08 1998 +0000 + + writeRPM can now copy cpio archive from fd. + iVS: ---------------------------------------------------------------------- + + CVS patchset: 2239 + CVS date: 1998/08/08 22:27:08 + +commit 145d77b79d95dcf1f4866921f97e97602c275f65 +Author: jbj +Date: Fri Aug 7 18:35:05 1998 +0000 + + initMacros must be called someplace to enable full reursion. + Suggestions for further arch/os decimation. + + CVS patchset: 2238 + CVS date: 1998/08/07 18:35:05 + +commit b17070240573c434575c40f25a010a227c1db604 +Author: adevries +Date: Thu Aug 6 21:53:49 1998 +0000 + + an update. + + CVS patchset: 2237 + CVS date: 1998/08/06 21:53:49 + +commit 8bdb7e0448feb227dcf1050e57db255c6b136e27 +Author: adevries +Date: Thu Aug 6 21:53:07 1998 +0000 + + This gets rid of all the basic rpm options for --buildarch and --buildos. + + CVS patchset: 2236 + CVS date: 1998/08/06 21:53:07 + +commit 73a5b61c2685454e8d716aab23257a0e7ec5e2e2 +Author: adevries +Date: Thu Aug 6 21:15:25 1998 +0000 + + Adding a list of things to do. + + CVS patchset: 2235 + CVS date: 1998/08/06 21:15:25 + +commit d1ad332335c30f5d2ed5341174cb905713a3c203 +Author: adevries +Date: Thu Aug 6 19:40:00 1998 +0000 + + The rpmReadConfigFiles() interface now has a new parameter on the end. + + CVS patchset: 2234 + CVS date: 1998/08/06 19:40:00 + +commit dda966d5433b042f81d4fe9de4fd1248c291e7f2 +Author: adevries +Date: Thu Aug 6 19:35:07 1998 +0000 + + Added support for --buildplatform, setenv: tag in rpmrc, fixed + %buildplatform, fixed it so that the default buildarch is the + canonacalized architecture, not the native. Cross building appears to + work! + + CVS patchset: 2233 + CVS date: 1998/08/06 19:35:07 + +commit 6d430b8a95f0b2a8f0aa520db4fcbde8e1ee7fc3 +Author: adevries +Date: Thu Aug 6 19:27:54 1998 +0000 + + Add support for --buildplatform, and support for the setenv: tag in rpmrc files. Also fixed the %buildplatform macro a bit. Cross building appears to work! + - + + CVS patchset: 2232 + CVS date: 1998/08/06 19:27:54 + +commit 9422cd7082df9d5971ab89c42da00d8a8a284fde +Author: ewt +Date: Thu Aug 6 14:30:10 1998 +0000 + + updated + + CVS patchset: 2230 + CVS date: 1998/08/06 14:30:10 + +commit e1753d36d0c76330b34fdcac4f5cfad08e265ff3 +Author: ewt +Date: Mon Aug 3 15:05:27 1998 +0000 + + fixed another typo + + CVS patchset: 2228 + CVS date: 1998/08/03 15:05:27 + +commit 9ad6207b3ded440c87b5cdde0da51b8df7ab8361 +Author: ewt +Date: Mon Aug 3 14:59:00 1998 +0000 + + fixed spelling of expected + + CVS patchset: 2224 + CVS date: 1998/08/03 14:59:00 + +commit f33efd0cc48f62da84376724356e8d2d2bca9631 +Author: jbj +Date: Sun Aug 2 15:14:38 1998 +0000 + + String substitution macro file. + + CVS patchset: 2223 + CVS date: 1998/08/02 15:14:38 + +commit 0817a10a570692eeac21d30449999621124b2609 +Author: jbj +Date: Sun Aug 2 15:03:54 1998 +0000 + + Create. + + CVS patchset: 2222 + CVS date: 1998/08/02 15:03:54 + +commit 12c5bea4d847ac97efc837deeab2cdebc244df54 +Author: jbj +Date: Sun Aug 2 13:48:37 1998 +0000 + + Special case of "/" in %files was broken. + Don't freeMacros in freeSpec -- macros have been globalized. + Remove extra debugging '_' prefix. + + CVS patchset: 2220 + CVS date: 1998/08/02 13:48:37 + +commit c8271be9c7cff11211ff26e472dfb0ccc70b3290 +Author: jbj +Date: Sat Aug 1 18:48:06 1998 +0000 + + Preliminary macro invironment as side effect of rpmrc parse. + + CVS patchset: 2219 + CVS date: 1998/08/01 18:48:06 + +commit 134c5ae3ba10d3dccdb3a189a891c2ec5dae1104 +Author: jbj +Date: Fri Jul 31 20:53:45 1998 +0000 + + (Un)typo. + + CVS patchset: 2218 + CVS date: 1998/07/31 20:53:45 + +commit 4c932b343e9fd1e98eb10458cabb8abf4d924ce6 +Author: jbj +Date: Fri Jul 31 20:29:03 1998 +0000 + + Typo. + + CVS patchset: 2217 + CVS date: 1998/07/31 20:29:03 + +commit c88091c8e0627d2a7ff2e8784e8455085e15fc86 +Author: jbj +Date: Fri Jul 31 20:17:06 1998 +0000 + + Typo. + + CVS patchset: 2216 + CVS date: 1998/07/31 20:17:06 + +commit f005d723a5290e9afa1c832fa667720d9ca11fd3 +Author: jbj +Date: Fri Jul 31 20:11:49 1998 +0000 + + Macro handling in rpmlib -- rework include: tag with macro expansion. + + CVS patchset: 2215 + CVS date: 1998/07/31 20:11:49 + +commit fc09e52f545cd99dc9f9b98b36518f17d57ed2c3 +Author: jbj +Date: Thu Jul 30 22:42:18 1998 +0000 + + First attempt at librpmbuild API. + + CVS patchset: 2214 + CVS date: 1998/07/30 22:42:18 + +commit 5142bf78e626b861ec1af6be7d81d3bb5c0afe03 +Author: jbj +Date: Thu Jul 30 22:09:42 1998 +0000 + + Consolidated includes for librpmbuild API. + + CVS patchset: 2213 + CVS date: 1998/07/30 22:09:42 + +commit ff2267faac75d20f0b8e8ebfda7f571403ad5ee5 +Author: ewt +Date: Thu Jul 30 14:53:29 1998 +0000 + + don't strcmp() a NULL longName + + CVS patchset: 2212 + CVS date: 1998/07/30 14:53:29 + +commit 55bcc2c4bbcc85a6bb392066929eb0b7887c7d3b +Author: ewt +Date: Thu Jul 30 14:18:58 1998 +0000 + + fixed stupif strdup() mistake + + CVS patchset: 2209 + CVS date: 1998/07/30 14:18:58 + +commit 63842cc30591b5e7dd62471d14fa0b7e37f175ea +Author: ewt +Date: Wed Jul 29 16:03:04 1998 +0000 + + updated for exec passing command name + + CVS patchset: 2207 + CVS date: 1998/07/29 16:03:04 + +commit c0d30e86e32307a700ed8d2f7fd33040e3cf4c63 +Author: ewt +Date: Wed Jul 29 16:02:54 1998 +0000 + + added poptSetExecPath() + + CVS patchset: 2206 + CVS date: 1998/07/29 16:02:54 + +commit a9363dbdd1fedd4c7491884a25e5f0ae4b9fc5ad +Author: ewt +Date: Wed Jul 29 14:37:11 1998 +0000 + + success check of access() was backwards + + CVS patchset: 2200 + CVS date: 1998/07/29 14:37:11 + +commit 49059ccc58ab090f18da19ff724d0b6a3d6a1e12 +Author: adevries +Date: Wed Jul 29 00:57:09 1998 +0000 + + Woops! + fixed it so on free(), it doesn't segfault. + - + + CVS patchset: 2199 + CVS date: 1998/07/29 00:57:09 + +commit 8438ce1cd7875c57e54a666f8eb23039f0b307c9 +Author: adevries +Date: Wed Jul 29 00:39:18 1998 +0000 + + Modified rpmrc.c to allow include: lines in rpmrc files. Also, added functionality to be able to do rpmrc variable-based includes, such as: + include: /usr/lib/rpm/build/%buildplatform.conf + Added three new RPMVAR types, RPMVAR_OS, RPMVAR_ARCH and RPMVAR_BUILDPLATFORM . + - + + CVS patchset: 2198 + CVS date: 1998/07/29 00:39:18 + +commit 9ae23df85b5a76eedac8181a6fe25b39b7d9205d +Author: adevries +Date: Wed Jul 29 00:36:30 1998 +0000 + + Changed the version number, added include functionality. + + CVS patchset: 2197 + CVS date: 1998/07/29 00:36:30 + +commit 4e758564ca52acfd2dc780d50010be8189a83d7d +Author: ewt +Date: Mon Jul 27 18:55:56 1998 +0000 + + 1) pass the name of the current exectuable to exec'd scripts + 2) removed support for setting up popt alises through enviornment variables + + CVS patchset: 2196 + CVS date: 1998/07/27 18:55:56 + +commit 731b388974e6ef376beb75347c10cae568e62825 +Author: ewt +Date: Mon Jul 27 18:55:07 1998 +0000 + + added findme.c + + CVS patchset: 2195 + CVS date: 1998/07/27 18:55:07 + +commit 00a4aa9a8950f58956a94dad099d94f3c2ef2869 +Author: ewt +Date: Mon Jul 27 18:53:42 1998 +0000 + + *** empty log message *** + + CVS patchset: 2194 + CVS date: 1998/07/27 18:53:42 + +commit fe7d5c009aedaf6cbba372146094170a32ca18cd +Author: ewt +Date: Mon Jul 27 18:45:47 1998 +0000 + + changed version number to 2.90 + + CVS patchset: 2193 + CVS date: 1998/07/27 18:45:47 + +commit 9dd96c1cabe0860db0f7765e8dc1f0097aefac61 +Author: ewt +Date: Mon Jul 27 16:25:21 1998 +0000 + + added test1 + + CVS patchset: 2192 + CVS date: 1998/07/27 16:25:21 + +commit c1f123e6a2a264ee3613daa0d22c34232ea9e769 +Author: ewt +Date: Mon Jul 27 16:24:50 1998 +0000 + + no need to check for mmap anymore + + CVS patchset: 2191 + CVS date: 1998/07/27 16:24:50 + +commit 6d8813f7ff02b3e2e9fb0fdce5941656e5b25434 +Author: ewt +Date: Mon Jul 27 16:01:38 1998 +0000 + + *** empty log message *** + + CVS patchset: 2190 + CVS date: 1998/07/27 16:01:38 + +commit 976e67e456992ac6708990f102b24ed8c77de210 +Author: ewt +Date: Mon Jul 27 16:00:38 1998 +0000 + + added -Wall be default + + CVS patchset: 2189 + CVS date: 1998/07/27 16:00:38 + +commit ba97f4c646356c223ccd79059631a185b58b3c84 +Author: ewt +Date: Mon Jul 27 15:58:33 1998 +0000 + + build the test cases + + CVS patchset: 2188 + CVS date: 1998/07/27 15:58:33 + +commit 621f97f98e8ccf9be11ac179929f42f7020a2901 +Author: ewt +Date: Mon Jul 27 15:54:20 1998 +0000 + + *** empty log message *** + + CVS patchset: 2187 + CVS date: 1998/07/27 15:54:20 + +commit 60853de1bef46b700cd51dc1ab2409c0101098f3 +Author: ewt +Date: Mon Jul 27 15:53:36 1998 +0000 + + 1) moved duplicated alias handling code into handleAlias() + 2) added support for exec options + + CVS patchset: 2186 + CVS date: 1998/07/27 15:53:36 + +commit 0c487fc908215cfd871cff69a43f9cf65d68f8fd +Author: ewt +Date: Mon Jul 27 15:52:21 1998 +0000 + + 1) renamed POPT_KEEP_FIRST to POPT_CONTEXT_KEEP_FIRST + 2) added POPT_CONTEXT_NO_EXEC + + CVS patchset: 2185 + CVS date: 1998/07/27 15:52:21 + +commit 3bcb7e50e52426cf3dbfddb40aed60e53be9de2e +Author: ewt +Date: Mon Jul 27 12:55:49 1998 +0000 + + don't use mmap anymore -- it's not worth the trouble + + CVS patchset: 2184 + CVS date: 1998/07/27 12:55:49 + +commit e4151252f8c4e422e18f83616392e3dc53d6d1ab +Author: jbj +Date: Sat Jul 25 21:00:26 1998 +0000 + + Aggregate system includes into system.h. + Rearrange functions to minimize exported routines in librpmbuild API. + VS: ---------------------------------------------------------------------- + + CVS patchset: 2183 + CVS date: 1998/07/25 21:00:26 + +commit c617a31606aec7fccaf26e0947f15f4cbacf089b +Author: jbj +Date: Sat Jul 25 15:33:15 1998 +0000 + + Generalize cpio I/O to eliminate pipe to exec'd gzip on install. + + CVS patchset: 2182 + CVS date: 1998/07/25 15:33:15 + +commit 9acba0bdddcbd3cfd7c3d6729191b23dab432097 +Author: jbj +Date: Sat Jul 25 15:10:58 1998 +0000 + + Add multiple include avoidance and c++ prototype wrapping throughout *.h. + Delete trailing white space in *.h. + + CVS patchset: 2181 + CVS date: 1998/07/25 15:10:58 + +commit 15ac92ba2933d5953abbcae4fa75a771ca5b85e3 +Author: jbj +Date: Sat Jul 25 15:01:44 1998 +0000 + + Better query semantics with symlinks (Tim Mooney). + + CVS patchset: 2180 + CVS date: 1998/07/25 15:01:44 + +commit 2d00835e5bc72bc3ac82e9cf51ab14a51a90e6c9 +Author: jbj +Date: Fri Jul 24 20:30:55 1998 +0000 + + Patch from Tim Mooney. + + CVS patchset: 2179 + CVS date: 1998/07/24 20:30:55 + +commit 765310798953e6a7a82fefe294101330c6d2dc29 +Author: jbj +Date: Thu Jul 23 16:57:44 1998 +0000 + + Typo. + + CVS patchset: 2177 + CVS date: 1998/07/23 16:57:44 + +commit 4b57bc1a40c2ec6d6be1d336909ffb7a6fdbe98d +Author: jbj +Date: Thu Jul 23 16:57:06 1998 +0000 + + Create. + + CVS patchset: 2176 + CVS date: 1998/07/23 16:57:06 + +commit 29d5aee8d8d5113f3e6330237c670f61fff495fa +Author: jbj +Date: Fri Jul 17 14:53:06 1998 +0000 + + Move rpmrc/rpmpopt to /usr/lib/rpm. + + CVS patchset: 2175 + CVS date: 1998/07/17 14:53:06 + +commit c1fc46aeb8e828b0d5e196ef774c05fc1aae9ff5 +Author: jbj +Date: Fri Jul 17 14:18:48 1998 +0000 + + Create. + + CVS patchset: 2174 + CVS date: 1998/07/17 14:18:48 + +commit e6545be221f736d49cc746ced7ef8f5fe7dc272c +Author: jbj +Date: Fri Jul 17 14:15:55 1998 +0000 + + Finish planting /usr/lib/rpm (remove compatibility symlinks). + + CVS patchset: 2173 + CVS date: 1998/07/17 14:15:55 + +commit 2089bf9496276647c8d596df1ecf21ed9c3abf81 +Author: jbj +Date: Thu Jul 16 14:23:41 1998 +0000 + + Bugfix from Fredrik Hubinette . + + CVS patchset: 2171 + CVS date: 1998/07/16 14:23:41 + +commit 94f5fbeec363059ca9eb986ee294ffcdf20bcb04 +Author: jbj +Date: Wed Jul 8 17:50:48 1998 +0000 + + Add new fully recursive macro.c + + CVS patchset: 2169 + CVS date: 1998/07/08 17:50:48 + +commit 209af5b9eb64f5aa35666ad6439c5c3db2f25f1b +Author: jbj +Date: Wed Jul 8 17:30:37 1998 +0000 + + Add {init,add,expand}Macro args everywhere (new macro.c compatibility). + Create /usr/lib/rpm directory and move rpmrc et al there. + + CVS patchset: 2168 + CVS date: 1998/07/08 17:30:37 + +commit 27c677e034eca8672881414f1ceb33fe3144e3dc +Author: jbj +Date: Mon Jul 6 19:26:26 1998 +0000 + + Typo -- include RPMS/* too. + + CVS patchset: 2167 + CVS date: 1998/07/06 19:26:26 + +commit a5ab233a9ad2e65b5e1203209410edf2ddb10f5f +Author: marc +Date: Fri Jul 3 06:20:59 1998 +0000 + + allow %define with leading whitespace + + CVS patchset: 2165 + CVS date: 1998/07/03 06:20:59 + +commit 29ce440d2024be3a4524a8beba514e5c2684c6e3 +Author: jbj +Date: Wed Jul 1 19:17:51 1998 +0000 + + CVS fiddles. + + CVS patchset: 2164 + CVS date: 1998/07/01 19:17:51 + +commit 301d338bc0595b8b949fec9a1b282e01c013c04e +Author: ewt +Date: Tue Jun 30 20:13:44 1998 +0000 + + changed group to Utilities/System + + CVS patchset: 2163 + CVS date: 1998/06/30 20:13:44 + +commit f9cd7f58aba4470c1aef6a741a50b83c4cda416b +Author: ewt +Date: Tue Jun 30 18:53:43 1998 +0000 + + *** empty log message *** + + CVS patchset: 2162 + CVS date: 1998/06/30 18:53:43 + +commit c5ed4ca1260c96a3e1c10a06cf0e20863b54a98e +Author: ewt +Date: Tue Jun 30 18:53:06 1998 +0000 + + version 2.5.2 + + CVS patchset: 2161 + CVS date: 1998/06/30 18:53:06 + +commit 51ec6e32a0a6d2491392bd938e5a01c708fc1108 +Author: ewt +Date: Tue Jun 30 18:52:54 1998 +0000 + + Provides: parsing in rpmrc wasn't done properly + + CVS patchset: 2160 + CVS date: 1998/06/30 18:52:54 + +commit bfc226e9ad87110c9aa0f0d3466135e0f8f47050 +Author: ewt +Date: Tue Jun 30 18:52:29 1998 +0000 + + added an error message when rmdir() fails + + CVS patchset: 2159 + CVS date: 1998/06/30 18:52:29 + +commit 5de4d92922b081d951cfb70bd62c9b15322e0879 +Author: ewt +Date: Tue Jun 30 18:51:44 1998 +0000 + + added --notriggers + + CVS patchset: 2158 + CVS date: 1998/06/30 18:51:44 + +commit e74380923ff04001fd927522145a88a0cf7c717e +Author: ewt +Date: Tue Jun 30 18:51:25 1998 +0000 + + 1) added NOTRIGGERS support + 2) trigger versions include the trigger name for some reason; ignore the + name portion if it's there + + CVS patchset: 2157 + CVS date: 1998/06/30 18:51:25 + +commit ccdab42a9e60001a3562564ff2d88e087119c33c +Author: ewt +Date: Tue Jun 30 18:50:47 1998 +0000 + + 1) made --triggers an alias for --triggerscripts + 2) added --filesbypkg + + CVS patchset: 2156 + CVS date: 1998/06/30 18:50:47 + +commit 682ea21b932eb4c4ee5b9a58e99fb4798123ff90 +Author: ewt +Date: Tue Jun 30 18:50:15 1998 +0000 + + 1) version 2.5.2 + 2) moved buildroot to /var/tmp + 3) /usr/src/redhat/RPMS should have been %dir + + CVS patchset: 2155 + CVS date: 1998/06/30 18:50:15 + +commit bc0bfe06213d8620e0b7726888e591cc36238fc1 +Author: ewt +Date: Tue Jun 30 18:47:20 1998 +0000 + + added updated machten and arm entries + + CVS patchset: 2154 + CVS date: 1998/06/30 18:47:20 + +commit c56cf7d21ebaf25b8df6fe561850450d632c94c8 +Author: ewt +Date: Tue Jun 30 18:46:54 1998 +0000 + + ftp installs were adding an extra /tmp/ to the tmpdir + + CVS patchset: 2153 + CVS date: 1998/06/30 18:46:54 + +commit d01943ad8a933c2e7d48f5cf0af244feb6d4f195 +Author: marc +Date: Mon Jun 29 04:42:36 1998 +0000 + + *** empty log message *** + + CVS patchset: 2152 + CVS date: 1998/06/29 04:42:36 + +commit 710acda0e4a7bff49af56bf9c3c770085495eac2 +Author: ewt +Date: Sun Jun 14 16:04:37 1998 +0000 + + *** empty log message *** + + CVS patchset: 2151 + CVS date: 1998/06/14 16:04:37 + +commit 119bcbf20499aab8d6421a00a16ae3ceb14c7683 +Author: ewt +Date: Sun Jun 14 16:04:00 1998 +0000 + + fssizes weren't behaving for pacakges w/o file list + + CVS patchset: 2150 + CVS date: 1998/06/14 16:04:00 + +commit 835ae99566c22cf8bfac0f6d53e035faca385df8 +Author: ewt +Date: Sun Jun 14 16:03:14 1998 +0000 + + more updates from Tim Mooney + + CVS patchset: 2149 + CVS date: 1998/06/14 16:03:14 + +commit d32b57aafa60dccb0af4996e3eed1d127e57be06 +Author: msf +Date: Fri Jun 12 19:50:44 1998 +0000 + + Enhanced the '--last' option to include release and version numbers + + CVS patchset: 2148 + CVS date: 1998/06/12 19:50:44 + +commit 10cc4878e97b7feaaaad7ab2a5f634b3dce586bc +Author: ewt +Date: Thu Jun 11 20:02:29 1998 +0000 + + --justdb should tag files as normal + + CVS patchset: 2147 + CVS date: 1998/06/11 20:02:29 + +commit 1c35d8d6d7fc3763be564c207567b3fe26818c24 +Author: jbj +Date: Thu Jun 11 02:58:13 1998 +0000 + + Typo. + + CVS patchset: 2146 + CVS date: 1998/06/11 02:58:13 + +commit 34d149ffdaada50c8889b5c3592562965e6e90c5 +Author: marc +Date: Mon Jun 8 00:12:17 1998 +0000 + + Group: i18n + + CVS patchset: 2145 + CVS date: 1998/06/08 00:12:17 + +commit 14996941672975dbbb02e8a40cc5efb7241395a9 +Author: marc +Date: Thu Jun 4 17:03:29 1998 +0000 + + - added --last alias + - fix :depflags query format + + CVS patchset: 2144 + CVS date: 1998/06/04 17:03:29 + +commit ec3256b8b9bccbb428f437772a4aea211699a2bd +Author: marc +Date: Wed Jun 3 03:32:59 1998 +0000 + + - fix bug packing /usr/doc when last file was %dir + + CVS patchset: 2143 + CVS date: 1998/06/03 03:32:59 + +commit a8975d188ea58fee841b4da0ec38140e786ce89d +Author: marc +Date: Tue Jun 2 21:34:51 1998 +0000 + + - fixed ugly i18n header bug + - deal with lang paths sanely when entries are missing languages + + CVS patchset: 2142 + CVS date: 1998/06/02 21:34:51 + +commit 5373b67cf1d99d7746fc630a5fd9d5b2f7a87b89 +Author: marc +Date: Tue Jun 2 19:53:21 1998 +0000 + + handle %files -f with no %setup (no build directory) + + CVS patchset: 2141 + CVS date: 1998/06/02 19:53:21 + +commit 0c0931281542c4c59dd8de85720193904697b9fc +Author: marc +Date: Tue Jun 2 19:30:23 1998 +0000 + + follow symlinks in source packages + copy CHANGELOG* and URL stuff to all subpackages + + CVS patchset: 2140 + CVS date: 1998/06/02 19:30:23 + +commit 006dd62fd2930f4cf17a1381eb7b40ae93f72a63 +Author: ewt +Date: Tue Jun 2 13:48:59 1998 +0000 + + *** empty log message *** + + CVS patchset: 2139 + CVS date: 1998/06/02 13:48:59 + +commit ebc7a63bddcf53a46911ef1e2bf579c3da99903d +Author: ewt +Date: Tue Jun 2 13:48:05 1998 +0000 + + let -bs build just a source package + + CVS patchset: 2138 + CVS date: 1998/06/02 13:48:05 + +commit 58aec46809ebba2efaebc330cb1e9894a4d85439 +Author: ewt +Date: Wed May 27 02:17:44 1998 +0000 + + version 2.5.1 + + CVS patchset: 2137 + CVS date: 1998/05/27 02:17:44 + +commit 45570444844be9203b28d6ed8dd9b238eeb7e1a5 +Author: marc +Date: Wed May 27 02:17:21 1998 +0000 + + Fix segfault + + CVS patchset: 2136 + CVS date: 1998/05/27 02:17:21 + +commit 1789870b35cdbd1ca058bd22affe6ffd31fdacbd +Author: ewt +Date: Tue May 26 13:45:16 1998 +0000 + + - set file states to missing for --justdb packages + - handle missing file states properly in -e code + - install time wasn missing for --justdb packages + + CVS patchset: 2135 + CVS date: 1998/05/26 13:45:16 + +commit 089681ce55499b31a023febf4c0d13845ff04fad +Author: ewt +Date: Tue May 26 13:28:48 1998 +0000 + + various updates from Tim Mooney + + CVS patchset: 2134 + CVS date: 1998/05/26 13:28:48 + +commit 7d24769a3365676ddeed076b6e5db296cca1e85a +Author: ewt +Date: Tue May 26 13:26:09 1998 +0000 + + aix.req + + CVS patchset: 2133 + CVS date: 1998/05/26 13:26:09 + +commit 3e1560b060467de0cc92b72ed77a227cf41b8c16 +Author: ewt +Date: Tue May 26 13:23:03 1998 +0000 + + fixed typo + + CVS patchset: 2132 + CVS date: 1998/05/26 13:23:03 + +commit 07ec9c5bc2527133d784e00a0a069e6f70726295 +Author: ewt +Date: Tue May 26 13:22:39 1998 +0000 + + prefer db_185.h to db.h + + CVS patchset: 2131 + CVS date: 1998/05/26 13:22:39 + +commit 0968b7855484ba6523f0ac33b2faf7b9be7d0676 +Author: ewt +Date: Tue May 26 13:20:40 1998 +0000 + + added finish translation + + CVS patchset: 2130 + CVS date: 1998/05/26 13:20:40 + +commit 9848b7df30f5213f11149a4fe8528af534dad4ba +Author: ewt +Date: Tue May 26 13:19:52 1998 +0000 + + set bzip2path through configure + + CVS patchset: 2129 + CVS date: 1998/05/26 13:19:52 + +commit 12c8e2c29ca59e0f4f60dc0d0630bdfffe841b03 +Author: marc +Date: Mon May 25 18:40:25 1998 +0000 + + *** empty log message *** + + CVS patchset: 2128 + CVS date: 1998/05/25 18:40:25 + +commit c39795e7df882ce289ea6e8b8d2511c4db4800d0 +Author: marc +Date: Mon May 25 03:18:54 1998 +0000 + + Added headerGzRead() and headerGzWrite() + + CVS patchset: 2127 + CVS date: 1998/05/25 03:18:54 + +commit 700837975a076d06a47007bf097c5e22fc94587e +Author: marc +Date: Sun May 24 22:41:45 1998 +0000 + + *** empty log message *** + + CVS patchset: 2126 + CVS date: 1998/05/24 22:41:45 + +commit 1213df19a247d02cfe7273da718e903bbd263ed5 +Author: marc +Date: Sun May 24 22:38:40 1998 +0000 + + unlink() before writing RPM + + CVS patchset: 2125 + CVS date: 1998/05/24 22:38:40 + +commit 82636fbc4b1f3acbf561ee143672b9eadad03359 +Author: ewt +Date: Thu May 21 18:13:16 1998 +0000 + + added config.h.in + + CVS patchset: 2124 + CVS date: 1998/05/21 18:13:16 + +commit e5dd155e6ddf10263ed2f2fd7b79125db76d7676 +Author: ewt +Date: Thu May 21 18:12:48 1998 +0000 + + added loads of .cvsignore files + + CVS patchset: 2123 + CVS date: 1998/05/21 18:12:48 + +commit 4ff9973e0685f7b7ac8f0c20cffbc2a60ffd1aa0 +Author: ewt +Date: Thu May 21 18:11:24 1998 +0000 + + removed CHANGES + + CVS patchset: 2122 + CVS date: 1998/05/21 18:11:24 + +commit 76518a7790bc74de852e469f34949c62b0c17588 +Author: ewt +Date: Thu May 21 18:11:14 1998 +0000 + + added CHANGES file + updated .cvsignore + + CVS patchset: 2121 + CVS date: 1998/05/21 18:11:14 + +commit 7e3b1b2197df204e1063a2c207516ab5b74576f2 +Author: marc +Date: Thu May 21 03:21:13 1998 +0000 + + - make %doc script obey --test + - hopefully fix temp file creation problems + + CVS patchset: 2120 + CVS date: 1998/05/21 03:21:13 + +commit f0d4eed0dbd83837bc3abaf19f0c0957103a0786 +Author: marc +Date: Wed May 20 17:05:26 1998 +0000 + + Actually catch errors from readLine() + + CVS patchset: 2119 + CVS date: 1998/05/20 17:05:26 + +commit c1b802dfda639c253884252835ca7f8020a56338 +Author: marc +Date: Mon May 18 15:16:16 1998 +0000 + + fail if sources are not regular files + + CVS patchset: 2118 + CVS date: 1998/05/18 15:16:16 + +commit b460ebd46bf1c0b4ef998ee3c2d37152f4fc6b76 +Author: ewt +Date: Sun May 10 20:32:15 1998 +0000 + + .cvsignore + + CVS patchset: 2117 + CVS date: 1998/05/10 20:32:15 + +commit 6931b10c8525aebeec9bfe9a80ce3ca72bbe3c91 +Author: ewt +Date: Sun May 10 20:31:51 1998 +0000 + + .cvsignore + + CVS patchset: 2116 + CVS date: 1998/05/10 20:31:51 + +commit d2fc8072f9abecd24513596e9fee59d1ab0a51e4 +Author: ewt +Date: Sun May 10 18:37:35 1998 +0000 + + don't pay attention to reqflags unless a reqversion is present + + CVS patchset: 2115 + CVS date: 1998/05/10 18:37:35 + +commit a03489fed04770208d62db8bc01ed50858e153e3 +Author: ewt +Date: Thu May 7 19:01:58 1998 +0000 + + *** empty log message *** + + CVS patchset: 2114 + CVS date: 1998/05/07 19:01:58 + +commit 7ff21b80097a1fca5b98cfc384bf7b128cb55de7 +Author: ewt +Date: Thu May 7 18:22:34 1998 +0000 + + updated translations + requires patch >= 2.5 + + CVS patchset: 2113 + CVS date: 1998/05/07 18:22:34 + +commit 07fe25a61bb1049ad47dc083966603a722254902 +Author: ewt +Date: Wed May 6 21:46:17 1998 +0000 + + *** empty log message *** + + CVS patchset: 2112 + CVS date: 1998/05/06 21:46:17 + +commit 16e9eae0e1bf199f8cb66b0e578df9a6fb49ccc2 +Author: ewt +Date: Wed May 6 21:46:03 1998 +0000 + + shared files weren't handled properly in netsharedpaths + + CVS patchset: 2111 + CVS date: 1998/05/06 21:46:03 + +commit 6c5e7ad28b10124c700610683ce0ec855c168147 +Author: marc +Date: Wed May 6 21:07:04 1998 +0000 + + fixed bug in part recognition + + CVS patchset: 2110 + CVS date: 1998/05/06 21:07:04 + +commit b527117c0344ab7d2d7a8989f46f757577b7ccfe +Author: ewt +Date: Tue May 5 23:19:54 1998 +0000 + + *** empty log message *** + + CVS patchset: 2109 + CVS date: 1998/05/05 23:19:54 + +commit fb90f503ddb332f4c043773699b18a58dfa87787 +Author: ewt +Date: Tue May 5 23:12:17 1998 +0000 + + fixed misc memory leaks + + CVS patchset: 2108 + CVS date: 1998/05/05 23:12:17 + +commit 2a0f3482cbff46bee5894bc4cc5cd259c696acda +Author: marc +Date: Tue May 5 18:24:36 1998 +0000 + + Copy the I18N table to the source header so i18n works there + + CVS patchset: 2107 + CVS date: 1998/05/05 18:24:36 + +commit 27e10f28bb8ae185f64bc861800069707b2dfa08 +Author: ewt +Date: Mon May 4 21:30:12 1998 +0000 + + version 2.5 + + CVS patchset: 2106 + CVS date: 1998/05/04 21:30:12 + +commit 72dedbf1dd34327db2ad911010730093d8342c59 +Author: marc +Date: Fri May 1 21:10:51 1998 +0000 + + - save/restore existing arch when done with buildarch + + CVS patchset: 2105 + CVS date: 1998/05/01 21:10:51 + +commit 26d510ed983cb4dc3e89d533e6b9f16c5fcf2091 +Author: ewt +Date: Fri May 1 19:33:51 1998 +0000 + + static rpm generation was fubarred + + CVS patchset: 2104 + CVS date: 1998/05/01 19:33:51 + +commit 2afff79ebcefd9d8b2030181ab83e3d73d3f94d6 +Author: ewt +Date: Fri May 1 19:33:36 1998 +0000 + + didn't handle packages w/ empty filelists + + CVS patchset: 2103 + CVS date: 1998/05/01 19:33:36 + +commit bef12c4a53f69b404c716e3b295669372ee8ad81 +Author: marc +Date: Fri May 1 17:10:25 1998 +0000 + + - headerGetEntry() should return count of 1 when returning + strings plucked from i18n strings + + CVS patchset: 2102 + CVS date: 1998/05/01 17:10:25 + +commit da136c205c9c605e614c42c0c732eee6804afccc +Author: marc +Date: Fri May 1 01:54:27 1998 +0000 + + Do not remove comments in scripts + + CVS patchset: 2101 + CVS date: 1998/05/01 01:54:27 + +commit 27dc5bb73ec72d37ada0d3710a0d481719b66360 +Author: marc +Date: Thu Apr 30 21:20:01 1998 +0000 + + undo bug inbtroduced when moving macro before %if + + CVS patchset: 2100 + CVS date: 1998/04/30 21:20:01 + +commit 9e5c81ab8b3a1ade086d9a0eaa772302e60a38f0 +Author: ewt +Date: Thu Apr 30 20:34:08 1998 +0000 + + dump postun triggers properly + + CVS patchset: 2099 + CVS date: 1998/04/30 20:34:08 + +commit 5cbb2405f4bbd97d4914c251bdb17a59c504cd18 +Author: marc +Date: Thu Apr 30 15:20:58 1998 +0000 + + include icons in the source packages + + CVS patchset: 2098 + CVS date: 1998/04/30 15:20:58 + +commit aa3c0aabd1a22e80b2577547b3da1a0a192f6050 +Author: marc +Date: Wed Apr 22 18:11:31 1998 +0000 + + fix type in %triggerpostun + + CVS patchset: 2097 + CVS date: 1998/04/22 18:11:31 + +commit 0f78a6d5e8e01f4f83133d7bbe1703e38ecc1ba8 +Author: ewt +Date: Mon Apr 20 14:44:35 1998 +0000 + + *** empty log message *** + + CVS patchset: 2096 + CVS date: 1998/04/20 14:44:35 + +commit 134a297b4edcdb734f915655f146599ce985b999 +Author: ewt +Date: Mon Apr 20 14:44:07 1998 +0000 + + need to init freePrefixes + + CVS patchset: 2095 + CVS date: 1998/04/20 14:44:07 + +commit 47571d8adfd2014da9ba84458b654f8bd0882141 +Author: marc +Date: Mon Apr 20 01:15:41 1998 +0000 + + Missed some unlinks() when scripts failed + + CVS patchset: 2094 + CVS date: 1998/04/20 01:15:41 + +commit 09ddb1a9f020b5c33d1316f8f6bd8f106a6191a5 +Author: marc +Date: Fri Apr 17 04:25:27 1998 +0000 + + Added AutoReq: and AutoProv: + + CVS patchset: 2093 + CVS date: 1998/04/17 04:25:27 + +commit fded3f9abc235a876bb53fc3fc8bf1ab897e2d11 +Author: ewt +Date: Thu Apr 16 16:25:03 1998 +0000 + + pay attention to autoreqprov flag + + CVS patchset: 2092 + CVS date: 1998/04/16 16:25:03 + +commit 272e203dabf2ebbd2b3a75a53415d87928d5f820 +Author: ewt +Date: Thu Apr 16 16:23:19 1998 +0000 + + return as soon as a dep loop is found + + CVS patchset: 2091 + CVS date: 1998/04/16 16:23:19 + +commit a615f6e8e9a8feea1c96ff59dab8f2370a961efc +Author: marc +Date: Wed Apr 15 15:01:51 1998 +0000 + + Do macro expansion before %if processing + + CVS patchset: 2090 + CVS date: 1998/04/15 15:01:51 + +commit 7d292a2860369511251666344badff46898d5920 +Author: marc +Date: Mon Apr 13 18:10:20 1998 +0000 + + return code buglet + + CVS patchset: 2089 + CVS date: 1998/04/13 18:10:20 + +commit ebc77079a107b33fcf67f8db4350d45104b47699 +Author: ewt +Date: Sat Apr 11 16:07:32 1998 +0000 + + version 2.4.109 + + CVS patchset: 2088 + CVS date: 1998/04/11 16:07:32 + +commit 4da20c6624afa7bed25551cf3916bb2c9d0004d8 +Author: ewt +Date: Sat Apr 11 16:06:58 1998 +0000 + + *** empty log message *** + + CVS patchset: 2087 + CVS date: 1998/04/11 16:06:58 + +commit ac79b84d1aa101f7126c66b7fb286c9c298c732f +Author: ewt +Date: Sat Apr 11 16:05:42 1998 +0000 + + 1) don't malloc() 0 + 2) fixed some memory leaks + + CVS patchset: 2086 + CVS date: 1998/04/11 16:05:42 + +commit 484c325f037a36ccd8a69859f077ff1efe5f8da7 +Author: marc +Date: Thu Apr 9 20:20:17 1998 +0000 + + Jeff Johnson's memleak patches + + CVS patchset: 2085 + CVS date: 1998/04/09 20:20:17 + +commit 16bd7e06bb57e03179759f38279736eafdaff312 +Author: marc +Date: Thu Apr 9 16:46:30 1998 +0000 + + - remove icons with --rmsource + - do dependecy generation on -bl + - check files on all packages on -bl + + CVS patchset: 2084 + CVS date: 1998/04/09 16:46:30 + +commit 95b362f4a1f95721c12ff50d13616dbc19ff3626 +Author: ewt +Date: Thu Apr 9 14:00:32 1998 +0000 + + fixed some broken install rules + + CVS patchset: 2083 + CVS date: 1998/04/09 14:00:32 + +commit 7fbc5ef8673823d1a72c649f4889bb7c87ff03b7 +Author: ewt +Date: Thu Apr 9 13:59:38 1998 +0000 + + don't override CFLAGS for make, just for configure + + CVS patchset: 2082 + CVS date: 1998/04/09 13:59:38 + +commit d1403fe120b8cda1ae6511575b5a5fc44371b65b +Author: ewt +Date: Thu Apr 9 13:55:29 1998 +0000 + + - version 1.1.1 + - spec file needs to ./configure + + CVS patchset: 2081 + CVS date: 1998/04/09 13:55:29 + +commit 2a02725d9e46d014c5961ffa98c5f7cd4051cfff +Author: ewt +Date: Thu Apr 9 02:48:44 1998 +0000 + + version 2.4.108 (the tags for 2.4.107 are wrong though) + + CVS patchset: 2080 + CVS date: 1998/04/09 02:48:44 + +commit 7d993d1bea2d83c7056ee35d9983a0a3e03ad9e3 +Author: ewt +Date: Thu Apr 9 02:46:40 1998 +0000 + + *** empty log message *** + + CVS patchset: 2079 + CVS date: 1998/04/09 02:46:40 + +commit 01eca71f1a169c7bd8bee851d55bcfc8bf96aa32 +Author: ewt +Date: Thu Apr 9 02:45:39 1998 +0000 + + fixed configure.in patch introduced by patch + + CVS patchset: 2078 + CVS date: 1998/04/09 02:45:39 + +commit 6f2eb2440d48b7fa60b910a5e671e64310a252c9 +Author: ewt +Date: Thu Apr 9 02:41:13 1998 +0000 + + 1) fix search for find scripts + 2) new find scripts for Solaris + 3) gernerate -static more automatically + + CVS patchset: 2077 + CVS date: 1998/04/09 02:41:13 + +commit efc6a16bbaf30396b635e2bafc3a9faf31a137ac +Author: ewt +Date: Thu Apr 9 02:36:43 1998 +0000 + + *** empty log message *** + + CVS patchset: 2076 + CVS date: 1998/04/09 02:36:43 + +commit 7964e84a24b9bc116ce921a963621fc1ce696783 +Author: ewt +Date: Thu Apr 9 02:36:10 1998 +0000 + + left extraneous line in after patch + + CVS patchset: 2075 + CVS date: 1998/04/09 02:36:10 + +commit c4b0bbd922c44d0a33d5d48ce9a11d61e95fbd74 +Author: marc +Date: Wed Apr 8 14:22:41 1998 +0000 + + make --clean work with no %setup + + CVS patchset: 2074 + CVS date: 1998/04/08 14:22:41 + +commit 67943e0370d3d949f3c696e561ea1fbdf0aa4bbb +Author: marc +Date: Tue Apr 7 23:58:01 1998 +0000 + + Generate a source RPM name even if we aren't building a source RPM. + + CVS patchset: 2073 + CVS date: 1998/04/07 23:58:01 + +commit 3c53731ab2b78a5232dd9ee7e99a76ef1b09f35e +Author: ewt +Date: Sun Apr 5 20:57:13 1998 +0000 + + fixed bad variable name + + CVS patchset: 2072 + CVS date: 1998/04/05 20:57:13 + +commit 37e6bc17694031a1f7ff14db066921b65f35d4a3 +Author: ewt +Date: Sun Apr 5 17:22:28 1998 +0000 + + implemented %triggerpostun + + CVS patchset: 2071 + CVS date: 1998/04/05 17:22:28 + +commit a1aba0f11d6597e1715dc6584fd2d0d558976422 +Author: marc +Date: Fri Apr 3 17:14:21 1998 +0000 + + Make --rmsource actually work. + + CVS patchset: 2070 + CVS date: 1998/04/03 17:14:21 + +commit f51eda06367d0347379198c4a824e2e68e07bd1e +Author: ewt +Date: Fri Apr 3 16:33:35 1998 +0000 + + version 2.4.107 + + CVS patchset: 2069 + CVS date: 1998/04/03 16:33:35 + +commit 879e03787cf178ef665d1d254e225824edddb771 +Author: ewt +Date: Fri Apr 3 16:33:19 1998 +0000 + + 1) fixed --nomd5 parsing + 2) updated configure.in find-req and find-prov checks + + CVS patchset: 2068 + CVS date: 1998/04/03 16:33:19 + +commit 412714af8d79047f59620dd0829e0641d3dda20e +Author: djb +Date: Thu Apr 2 20:56:34 1998 +0000 + + added postun to command description + + CVS patchset: 2067 + CVS date: 1998/04/02 20:56:34 + +commit ec176c137b9162d9a8014d9ff10a8d3a471ebbbc +Author: djb +Date: Thu Apr 2 20:29:08 1998 +0000 + + typo fix + + CVS patchset: 2066 + CVS date: 1998/04/02 20:29:08 + +commit 99d7188d035d6f5a6e9bae8e383d35b232ee8b2f +Author: ewt +Date: Thu Apr 2 18:33:24 1998 +0000 + + version 2.4.106 -- 105 got lost somewhere :-9 + + CVS patchset: 2065 + CVS date: 1998/04/02 18:33:24 + +commit e0e9b11a55b69384bb300822f10bec685cfa2399 +Author: ewt +Date: Thu Apr 2 18:33:05 1998 +0000 + + *** empty log message *** + + CVS patchset: 2064 + CVS date: 1998/04/02 18:33:05 + +commit ce22bc8796fbbcc3005221330a2806ad10707d5d +Author: ewt +Date: Thu Apr 2 18:31:24 1998 +0000 + + version 2.4.105 + + CVS patchset: 2063 + CVS date: 1998/04/02 18:31:24 + +commit 6d1654df0845324943c58c6dc5da236a87f58423 +Author: ewt +Date: Thu Apr 2 18:31:12 1998 +0000 + + handle negative return values from poptGetNextOpt() + + CVS patchset: 2062 + CVS date: 1998/04/02 18:31:12 + +commit 58fd76f7d024c00dff58273d2ec84a393933e611 +Author: ewt +Date: Thu Apr 2 17:49:19 1998 +0000 + + added CC + + CVS patchset: 2061 + CVS date: 1998/04/02 17:49:19 + +commit ef2758d5f08747734b560ec586be4ca5cee2c2f4 +Author: ewt +Date: Thu Apr 2 17:48:34 1998 +0000 + + applied from from Till which fixes a fssizes problem + + CVS patchset: 2060 + CVS date: 1998/04/02 17:48:34 + +commit 4aa94a4124afaede0d46bfd893d5168e410881f8 +Author: ewt +Date: Thu Apr 2 17:25:44 1998 +0000 + + added CC line + + CVS patchset: 2059 + CVS date: 1998/04/02 17:25:44 + +commit e2167205cfdacd7ea8869a25fc002b8257744029 +Author: marc +Date: Wed Apr 1 16:02:05 1998 +0000 + + Added %triggerpostun + deps for shared libs + only check first 128 chars for non-printables + + CVS patchset: 2058 + CVS date: 1998/04/01 16:02:05 + +commit 1968fa2fd5f7ba2784e86db4f735b54a83c01971 +Author: marc +Date: Sun Mar 29 06:26:45 1998 +0000 + + *** empty log message *** + + CVS patchset: 2057 + CVS date: 1998/03/29 06:26:45 + +commit e562ddba41b34c542b7f02129447b0dc6701be7e +Author: ewt +Date: Fri Mar 27 17:42:28 1998 +0000 + + *** empty log message *** + + CVS patchset: 2056 + CVS date: 1998/03/27 17:42:28 + +commit 52724fe1edba325109a540ec457c9c86e7880636 +Author: ewt +Date: Fri Mar 27 17:41:19 1998 +0000 + + fixed minor typos + + CVS patchset: 2055 + CVS date: 1998/03/27 17:41:19 + +commit d4e89c52a245857aaddaf794bca98e639654a1d9 +Author: ewt +Date: Fri Mar 27 17:26:36 1998 +0000 + + get all of the message catalogs + + CVS patchset: 2054 + CVS date: 1998/03/27 17:26:36 + +commit c287c48d3694081822c19de0d5f6a55d021a1c0c +Author: ewt +Date: Fri Mar 27 17:25:55 1998 +0000 + + an extraneous memcpy() was floating around in headerAppendEntry(), which + caused some reading from unallocated stack regions + + CVS patchset: 2053 + CVS date: 1998/03/27 17:25:55 + +commit 25a085d52a8d3767f036fecad8772c14afa83aa3 +Author: ewt +Date: Fri Mar 27 17:23:41 1998 +0000 + + *** empty log message *** + + CVS patchset: 2052 + CVS date: 1998/03/27 17:23:41 + +commit 0d6558640497de83dec5902e972f84f289b84ba4 +Author: ewt +Date: Fri Mar 27 17:23:20 1998 +0000 + + strntoul() was returning a pointer into alloca()'s memory + + CVS patchset: 2051 + CVS date: 1998/03/27 17:23:20 + +commit 8cfbc0ef42dd0cde5110cb433c0407ee1f8cfe56 +Author: ewt +Date: Fri Mar 27 17:11:43 1998 +0000 + + added trigger docs + + CVS patchset: 2050 + CVS date: 1998/03/27 17:11:43 + +commit 7b8522b57e1182c87a151c81ea35ce8457ce9a34 +Author: ewt +Date: Fri Mar 27 16:46:39 1998 +0000 + + added trigger support + + CVS patchset: 2049 + CVS date: 1998/03/27 16:46:39 + +commit 319ff94132a360ec1b6361416cbd72c4e0738908 +Author: ewt +Date: Mon Mar 23 20:52:17 1998 +0000 + + *** empty log message *** + + CVS patchset: 2048 + CVS date: 1998/03/23 20:52:17 + +commit 3c0b3df2e44b04b275b3df3335666e2555f23a43 +Author: ewt +Date: Mon Mar 23 20:48:29 1998 +0000 + + added autoconf into make archive + + CVS patchset: 2047 + CVS date: 1998/03/23 20:48:29 + +commit ab9e98d3e3d9d1cdadabbdeb172b49d3ad79c010 +Author: ewt +Date: Mon Mar 23 20:42:40 1998 +0000 + + didn't work when open() returned stdin + + CVS patchset: 2046 + CVS date: 1998/03/23 20:42:40 + +commit 36f4818c99398201153fbacab968811f30c7497d +Author: ewt +Date: Mon Mar 23 20:28:01 1998 +0000 + + don't read ~/.popt in setuid apps + + CVS patchset: 2045 + CVS date: 1998/03/23 20:28:01 + +commit 508c31d7040cd6968dd50544b7c2b98a57a6a44d +Author: ewt +Date: Mon Mar 23 20:26:36 1998 +0000 + + *** empty log message *** + + CVS patchset: 2044 + CVS date: 1998/03/23 20:26:36 + +commit fb1398490ed263ecb6fa50a50e4352b1bb121952 +Author: ewt +Date: Mon Mar 23 16:34:38 1998 +0000 + + check LINGUAS when installing i18n files + + CVS patchset: 2043 + CVS date: 1998/03/23 16:34:38 + +commit c456ea27e587d0845a1dd19eecedede6d13c4352 +Author: ewt +Date: Mon Mar 23 16:26:10 1998 +0000 + + *** empty log message *** + + CVS patchset: 2042 + CVS date: 1998/03/23 16:26:10 + +commit 4c80f87f14034a7f451efbe05c4df1d4f57388c1 +Author: marc +Date: Fri Mar 20 22:38:00 1998 +0000 + + Added trigger support to build code + Got rid of myftw warning + + CVS patchset: 2041 + CVS date: 1998/03/20 22:38:00 + +commit 85e4e95c7c83b1ba2171d4fdd4df5c580bc30e54 +Author: sopwith +Date: Fri Mar 20 05:15:08 1998 +0000 + + Make header.h & dbindex.h C++-safe as well + + CVS patchset: 2040 + CVS date: 1998/03/20 05:15:08 + +commit 073cb4fdccd8ceee4a6c581c5f7192706ba287d2 +Author: marc +Date: Fri Mar 20 04:48:27 1998 +0000 + + Added some C++ cruft to rpmlib.h + + CVS patchset: 2039 + CVS date: 1998/03/20 04:48:27 + +commit 6ea468663f85cd5712ce296e61544de739f7316f +Author: marc +Date: Fri Mar 20 04:34:09 1998 +0000 + + Added langpatt: + + CVS patchset: 2038 + CVS date: 1998/03/20 04:34:09 + +commit 114a8e0fd8f9ac99b906603f28374f0cf83856d3 +Author: marc +Date: Wed Mar 11 23:28:47 1998 +0000 + + Work around broken realloc()'s. + + CVS patchset: 2037 + CVS date: 1998/03/11 23:28:47 + +commit d6bd199c5920676da1c490f3fab339d3fd4b21ec +Author: marc +Date: Wed Mar 11 21:32:48 1998 +0000 + + Remove dead code. + + CVS patchset: 2036 + CVS date: 1998/03/11 21:32:48 + +commit f83f246e517eca1282c7d87460fa3f27c12a500b +Author: ewt +Date: Thu Mar 5 20:50:04 1998 +0000 + + get CPP from autoconf + + CVS patchset: 2035 + CVS date: 1998/03/05 20:50:04 + +commit 323f4c4212f3d4080fad4617ef4fb7f30074f359 +Author: ewt +Date: Thu Mar 5 20:49:58 1998 +0000 + + *** empty log message *** + + CVS patchset: 2034 + CVS date: 1998/03/05 20:49:58 + +commit ec4c8852138c5abf4236e120ef5d69ec3f1f8e6d +Author: ewt +Date: Thu Mar 5 20:48:23 1998 +0000 + + ftp files to RPMVAR_TMPPATH, not /var/tmp + + CVS patchset: 2033 + CVS date: 1998/03/05 20:48:23 + +commit f28be6951d0d70ee704243bbb48bbfd32ba28412 +Author: ewt +Date: Wed Mar 4 21:39:35 1998 +0000 + + 1) version 2.4.104 + 2) changed (C) to 1998 + + CVS patchset: 2032 + CVS date: 1998/03/04 21:39:35 + +commit a320896969e64846913c00e50bf2b7f321e5b4f8 +Author: ewt +Date: Wed Mar 4 21:39:19 1998 +0000 + + 'make archive' creates .depend files now + + CVS patchset: 2031 + CVS date: 1998/03/04 21:39:19 + +commit 8ffb41439aa3b9b0f243433889135a0e6c3d304d +Author: djb +Date: Wed Mar 4 19:40:00 1998 +0000 + + fixed buglet in version tree + + CVS patchset: 2030 + CVS date: 1998/03/04 19:40:00 + +commit 753bfb9585f417db255d1795d3c6dce3a63c5896 +Author: ewt +Date: Wed Mar 4 17:24:07 1998 +0000 + + *** empty log message *** + + CVS patchset: 2029 + CVS date: 1998/03/04 17:24:07 + +commit 0c23cb357e1a20d7de0392ae852cfcf1130fa488 +Author: ewt +Date: Wed Mar 4 16:57:29 1998 +0000 + + moved popt table to global scope to satisfy broken compilers + + CVS patchset: 2028 + CVS date: 1998/03/04 16:57:29 + +commit a9b34847ae9825f0f99c9bc0a9442a3b038685e0 +Author: ewt +Date: Wed Mar 4 16:55:20 1998 +0000 + + fixed == typo + + CVS patchset: 2027 + CVS date: 1998/03/04 16:55:20 + +commit 179e9c159a23c4908a7b1bcdb70639f6d9008d35 +Author: ewt +Date: Wed Mar 4 16:53:54 1998 +0000 + + 1) added more portability checks + 2) use new dependency scheume + 3) use autoheader + + CVS patchset: 2026 + CVS date: 1998/03/04 16:53:54 + +commit 0f2c5851dac43dce7f8174de5849dd7f542ce2b6 +Author: ewt +Date: Wed Mar 4 16:53:24 1998 +0000 + + 1) all main()s should return ints + 2) use new dependency scheme + + CVS patchset: 2025 + CVS date: 1998/03/04 16:53:24 + +commit 4786aaf0660172b5778e4cc6197f0be6cb7b8118 +Author: ewt +Date: Wed Mar 4 16:52:59 1998 +0000 + + 1) header file cleanups + 2) use new dependency scheme + 3) changed " #if" to "# if" + + CVS patchset: 2024 + CVS date: 1998/03/04 16:52:59 + +commit 619bdbe02e1b693afffe29226114c4cccc9e1d6b +Author: ewt +Date: Wed Mar 4 16:52:19 1998 +0000 + + 1) check for alloca.h in configure.in + 2) use more portable dependency scheme + + CVS patchset: 2023 + CVS date: 1998/03/04 16:52:19 + +commit 820afde7fa87f430d38c7a38d6734f80f7e16896 +Author: ewt +Date: Wed Mar 4 16:51:54 1998 +0000 + + include alloca.h if present + + CVS patchset: 2022 + CVS date: 1998/03/04 16:51:54 + +commit 1d7baffb338d8571d9ba15f1ebac67325bb8e94a +Author: ewt +Date: Wed Mar 4 16:51:38 1998 +0000 + + 1) make use of new delpendency scheme + 2) made " #if" look like "# if" for portability + 3) added strdup.c + + CVS patchset: 2021 + CVS date: 1998/03/04 16:51:38 + +commit d29004dc6918935f3a6916e59f373874a5f6ab85 +Author: ewt +Date: Wed Mar 4 16:51:06 1998 +0000 + + 1) include cleanups for portability + 2) pulled popt structures and variables out of functions -- they need to + be global due to stupid compilers + 3) modified the Makefile to use relative dependencies, and make dependencies + optional + + CVS patchset: 2020 + CVS date: 1998/03/04 16:51:06 + +commit 25231c427210c21570097a10f4782850a02246ff +Author: ewt +Date: Wed Mar 4 16:49:55 1998 +0000 + + got rid of "#endif foo.h" type things (which aren't ansi) + + CVS patchset: 2019 + CVS date: 1998/03/04 16:49:55 + +commit a4d37675c298b24dbb80d159adbbfd4de993d245 +Author: ewt +Date: Wed Mar 4 16:05:15 1998 +0000 + + don't depend on bash + + CVS patchset: 2018 + CVS date: 1998/03/04 16:05:15 + +commit 62b7293e32f56a1140c996933592b6969ab02111 +Author: ewt +Date: Tue Mar 3 21:45:56 1998 +0000 + + *** empty log message *** + + CVS patchset: 2017 + CVS date: 1998/03/03 21:45:56 + +commit 1de8a71f5e411aa275e3edb2301a56c98589574d +Author: ewt +Date: Tue Mar 3 21:45:38 1998 +0000 + + be more paranoid abou temporary files + + CVS patchset: 2016 + CVS date: 1998/03/03 21:45:38 + +commit 6accf2f42670aa86ce45741eaaa349cb250826a1 +Author: marc +Date: Tue Mar 3 17:07:39 1998 +0000 + + Clean up buildroot (remove suplicate slashes, trailing slashes) + + CVS patchset: 2015 + CVS date: 1998/03/03 17:07:39 + +commit 9fa832f9b60d9dc2c07da88c33c87b7404ae9a86 +Author: marc +Date: Sat Feb 28 20:29:11 1998 +0000 + + Jeff Johnson's mode/dev fixes + + CVS patchset: 2014 + CVS date: 1998/02/28 20:29:11 + +commit 082dc4c97095bb8825ee5b9bfc6e916daffb11fa +Author: marc +Date: Sat Feb 28 16:58:23 1998 +0000 + + Fix dumb memory handling bug. + + CVS patchset: 2013 + CVS date: 1998/02/28 16:58:23 + +commit 5e0cec0c81c3fcf9a3d8882db0fdbf7e29f4809e +Author: ewt +Date: Wed Feb 25 18:31:52 1998 +0000 + + replaced include of with an include of + + CVS patchset: 2012 + CVS date: 1998/02/25 18:31:52 + +commit 425d259fda75fa5302673f1f5b06e439cb66d6dd +Author: ewt +Date: Tue Feb 24 19:43:14 1998 +0000 + + added byHeader to dependency conflict reporting + + CVS patchset: 2011 + CVS date: 1998/02/24 19:43:14 + +commit 6e61dd8c3490c04b0dd45751abfdca164eb1336c +Author: marc +Date: Sat Feb 21 00:03:44 1998 +0000 + + *** empty log message *** + + CVS patchset: 2010 + CVS date: 1998/02/21 00:03:44 + +commit f7d58c70f160c2f7c7ea4a159b896fe31a72234f +Author: marc +Date: Sat Feb 21 00:02:50 1998 +0000 + + Allow spaces in group names. + + CVS patchset: 2009 + CVS date: 1998/02/21 00:02:50 + +commit 0994d93e13ae547585ebd681cd3fff2e9e890886 +Author: ewt +Date: Wed Feb 18 18:43:11 1998 +0000 + + added missing space + + CVS patchset: 2008 + CVS date: 1998/02/18 18:43:11 + +commit 0b66924909c108550c2b05840fa0ca816920bc9a +Author: ewt +Date: Tue Feb 17 17:47:46 1998 +0000 + + added comments mentioning that these files shouldn't be mucked with + + CVS patchset: 2007 + CVS date: 1998/02/17 17:47:46 + +commit 597927f2db2a2ddc16e80a717572b04c4853d5b4 +Author: ewt +Date: Tue Feb 17 16:46:13 1998 +0000 + + 1) added autoconf for popt directory to make archive + 2) version 2.4.103 + + CVS patchset: 2006 + CVS date: 1998/02/17 16:46:13 + +commit 7388abf88b2f181dee5c17f3a4282eaadb3444d3 +Author: ewt +Date: Wed Feb 11 08:59:34 1998 +0000 + + 1) added changes which let RPM build in a directory other then its source + directory + 2) moved popt to autoconf + + CVS patchset: 2005 + CVS date: 1998/02/11 08:59:34 + +commit c8be333089ae5c1d8d523a0cce332f34293ef02c +Author: marc +Date: Tue Feb 10 16:33:04 1998 +0000 + + Make BuildArch: a synonym for BuildArchitectures: + + CVS patchset: 2004 + CVS date: 1998/02/10 16:33:04 + +commit 33d74a2279d3f0a9cb4e33624c0274ba8acf1d0e +Author: otto +Date: Mon Feb 9 19:37:59 1998 +0000 + + Fixed typo in the rpm.8 man page. + + CVS patchset: 2003 + CVS date: 1998/02/09 19:37:59 + +commit 99813b2c61459c81bd1680bb53ef8f7fad1bd612 +Author: ewt +Date: Sun Feb 8 17:30:58 1998 +0000 + + fixed INSTPREFIX virtual tags + + CVS patchset: 2002 + CVS date: 1998/02/08 17:30:58 + +commit 9a3dc5a07b56edb3f77154f463a153137a66d578 +Author: ewt +Date: Sun Feb 8 17:30:39 1998 +0000 + + error codes can't be negative for errno flag to work + + CVS patchset: 2001 + CVS date: 1998/02/08 17:30:39 + +commit fd14facfb016e0029c98dfd5f9b148e89e971151 +Author: ewt +Date: Sun Feb 8 17:30:10 1998 +0000 + + --setugids uses separate chown and chgrp commands + + CVS patchset: 2000 + CVS date: 1998/02/08 17:30:10 + +commit c277b410dcc6ae20415442d625f89e77963dd3ff +Author: ewt +Date: Sun Feb 8 17:29:37 1998 +0000 + + rpmInstallPackage() doesn't take netsharedpath as an argument + + CVS patchset: 1999 + CVS date: 1998/02/08 17:29:37 + +commit 33b012193bdb60dbe87cb47d55ba821fdd261e84 +Author: ewt +Date: Sun Feb 8 17:29:17 1998 +0000 + + 1) fixed memory leak w/ netsharedpaths + 2) generates INSTPREFIXES tag for relocated packages + + CVS patchset: 1998 + CVS date: 1998/02/08 17:29:17 + +commit 1917c5b67d59d52762002d4aa8e8f06b833e5d3d +Author: ewt +Date: Sun Feb 8 17:28:16 1998 +0000 + + 1) fixed RPM_INSTALL_PREFIXn env variables + 2) checks netsharedpath before removing files + + CVS patchset: 1997 + CVS date: 1998/02/08 17:28:16 + +commit 9eebb3a595edde8c9e04e46eba02e9f237259cb2 +Author: ewt +Date: Sun Feb 8 17:26:57 1998 +0000 + + don't pass net shared path to rpmInstallPackage() + + CVS patchset: 1996 + CVS date: 1998/02/08 17:26:57 + +commit 902f28c4dbb3dea9bfaab225cf1b2caa6b3ebe32 +Author: ewt +Date: Sun Feb 8 17:26:11 1998 +0000 + + *** empty log message *** + + CVS patchset: 1995 + CVS date: 1998/02/08 17:26:11 + +commit 14e30a7cb0cb8a597775c5dc9208b8661e3a31f2 +Author: ewt +Date: Sun Feb 8 07:07:02 1998 +0000 + + added a comment to keep things clear + + CVS patchset: 1994 + CVS date: 1998/02/08 07:07:02 + +commit 5e5fb32e4933b981f5fef3bc58b53d458908c8fe +Author: ewt +Date: Sun Feb 8 07:06:31 1998 +0000 + + 1) fixed memory leak + 2) fixed memory allocation problem + + CVS patchset: 1993 + CVS date: 1998/02/08 07:06:31 + +commit bca8e57f2f4326e0f118611c7006a510c2b9b375 +Author: ewt +Date: Sun Feb 8 07:06:07 1998 +0000 + + added suppor fo INSTPREFIX virtual tag (for backwards compatibility) + + CVS patchset: 1992 + CVS date: 1998/02/08 07:06:07 + +commit 05b819a5616f73e0eaa7436efcf238504731b8e3 +Author: ewt +Date: Sun Feb 8 07:05:39 1998 +0000 + + *** empty log message *** + + CVS patchset: 1991 + CVS date: 1998/02/08 07:05:39 + +commit 76cee5d3ccbb4762950334d8236b809f5515e7a3 +Author: marc +Date: Thu Feb 5 14:35:56 1998 +0000 + + Fix problem with bzip2/gzip. + Fix problem with prefix/prefixes. + + CVS patchset: 1990 + CVS date: 1998/02/05 14:35:56 + +commit 7394837eaf3ceb5122014967c467f74a94cca9eb +Author: marc +Date: Thu Feb 5 14:26:43 1998 +0000 + + *** empty log message *** + + CVS patchset: 1989 + CVS date: 1998/02/05 14:26:43 + +commit ea93083e5175b0c3ae24ed6a0e24912b35ae5579 +Author: ewt +Date: Wed Feb 4 16:01:42 1998 +0000 + + *** empty log message *** + + CVS patchset: 1988 + CVS date: 1998/02/04 16:01:42 + +commit 8a3b7532ec6f4b4ba6204d4348d151920d9aff52 +Author: ewt +Date: Wed Feb 4 16:01:14 1998 +0000 + + fixed spelling of instchangelog + + CVS patchset: 1987 + CVS date: 1998/02/04 16:01:14 + +commit b1ce8fb522a844bd7a6c68f3128c0b7c60eb3a7a +Author: ewt +Date: Tue Feb 3 16:40:16 1998 +0000 + + version 2.4.101 + + CVS patchset: 1986 + CVS date: 1998/02/03 16:40:16 + +commit 3125b1e00bb883992c829fe8f2ee3b3040b884b9 +Author: ewt +Date: Tue Feb 3 16:40:02 1998 +0000 + + *** empty log message *** + + CVS patchset: 1985 + CVS date: 1998/02/03 16:40:02 + +commit ab907f8aaca69a460ecf2e5d9d2230fbdb60f2d2 +Author: ewt +Date: Tue Feb 3 15:21:47 1998 +0000 + + fixed various bugs in relocation code + + CVS patchset: 1984 + CVS date: 1998/02/03 15:21:47 + +commit 4f3c571a16fc2b6bf6a2e46d587b90039d4d99ba +Author: marc +Date: Tue Feb 3 15:11:23 1998 +0000 + + Added sanity check on Prefixes: + Added some support for bzip2. Still needs configure and lib-rpmrc.in stuff. + + CVS patchset: 1983 + CVS date: 1998/02/03 15:11:23 + +commit 840599e3d92e29e8e1c1cf7ecf4ad5c37d3bf021 +Author: marc +Date: Tue Feb 3 04:30:19 1998 +0000 + + New prefix handling (also take Prefixes:) + + CVS patchset: 1982 + CVS date: 1998/02/03 04:30:19 + +commit 9fc5557ba49b82434bc5b23e5dee6e69ebd07609 +Author: marc +Date: Mon Feb 2 15:34:36 1998 +0000 + + Fix return code handling + + CVS patchset: 1981 + CVS date: 1998/02/02 15:34:36 + +commit 6681ac1ceeafe5f745b409fc124b900cbf30e8d9 +Author: ewt +Date: Thu Jan 29 19:39:12 1998 +0000 + + fixed problems in file relocation + + CVS patchset: 1980 + CVS date: 1998/01/29 19:39:12 + +commit 2c223345d827d2d77d429faef59d804adf8b33cc +Author: ewt +Date: Wed Jan 28 16:49:43 1998 +0000 + + implemented most of generic package relocation + + CVS patchset: 1979 + CVS date: 1998/01/28 16:49:43 + +commit b910492639f20d8d37b5839da72d4fca6a04671e +Author: marc +Date: Mon Jan 26 15:52:56 1998 +0000 + + Fix bug where macros were being improperly set for Patch: and Source: lines. + + CVS patchset: 1978 + CVS date: 1998/01/26 15:52:56 + +commit 2ae55b71cba7599bf5441e3f97874e76f26c3ba7 +Author: marc +Date: Sun Jan 25 17:03:30 1998 +0000 + + New rpmrc entry BuildShell can used to set the shell used for build scripts. + Default is /bin/sh. + + CVS patchset: 1977 + CVS date: 1998/01/25 17:03:30 + +commit 79fc5363ded0aab99c4489dc4a44f721a1122d5d +Author: marc +Date: Fri Jan 23 04:23:33 1998 +0000 + + Handle files with spaces + + CVS patchset: 1976 + CVS date: 1998/01/23 04:23:33 + +commit 69fdcb85694a4f5745d09e42a9772c1ce7981d8b +Author: ewt +Date: Thu Jan 22 14:13:01 1998 +0000 + + added include of stdio.h + + CVS patchset: 1975 + CVS date: 1998/01/22 14:13:01 + +commit 01c24328af074c071733ccc3162e2f35dff62973 +Author: ewt +Date: Tue Jan 20 02:41:18 1998 +0000 + + accept NULL as a valid prefix in rpmdbOpen() + + CVS patchset: 1974 + CVS date: 1998/01/20 02:41:18 + +commit f36e7608ea56cc899288f755919c7811d85e2ce9 +Author: ewt +Date: Thu Jan 15 19:52:42 1998 +0000 + + changes to differentiate mipsel from mipseb + + CVS patchset: 1973 + CVS date: 1998/01/15 19:52:42 + +commit e583c55c13cd3dbea34fdaee8441a571a9313d6b +Author: ewt +Date: Thu Jan 15 16:47:55 1998 +0000 + + added -L$(topdir)/popt to Makefile.inc + + CVS patchset: 1972 + CVS date: 1998/01/15 16:47:55 + +commit a396fe9ed5478a3e8941fe1b191f0de29f88f9cc +Author: ewt +Date: Thu Jan 15 16:43:11 1998 +0000 + + fixed typo + + CVS patchset: 1971 + CVS date: 1998/01/15 16:43:11 + +commit 056755707e08c37e86e56f3764a764894b8e0f04 +Author: ewt +Date: Thu Jan 15 16:42:41 1998 +0000 + + version 2.4.99 + + CVS patchset: 1970 + CVS date: 1998/01/15 16:42:41 + +commit dc8d984758da8baa2574af13060c40489bb3c5e6 +Author: marc +Date: Thu Jan 15 16:18:31 1998 +0000 + + *** empty log message *** + + CVS patchset: 1969 + CVS date: 1998/01/15 16:18:31 + +commit 7ab0c835714690031cbcd11a8c1c3b2d8b2a290e +Author: marc +Date: Thu Jan 15 15:36:52 1998 +0000 + + Hmm, why don't we actually pass the archive through gzip? + That sounds like a good idea. + + CVS patchset: 1968 + CVS date: 1998/01/15 15:36:52 + +commit 449a0f84c7c585f7f86b31ee6827263be92ffa1f +Author: marc +Date: Thu Jan 15 15:03:08 1998 +0000 + + Change use of "export" to work on non-bash shells. + + CVS patchset: 1967 + CVS date: 1998/01/15 15:03:08 + +commit 83ec1da3f40ad4651c0b869f1585e82a2cfd6342 +Author: marc +Date: Wed Jan 14 22:04:06 1998 +0000 + + Don't build any packages if we got --test. + + CVS patchset: 1966 + CVS date: 1998/01/14 22:04:06 + +commit 041f4d727f55b6b88d729bd0af7d2118b494f0a8 +Author: marc +Date: Wed Jan 14 22:02:01 1998 +0000 + + Don't try to cd into the build dir if there isn't onw. + + CVS patchset: 1965 + CVS date: 1998/01/14 22:02:01 + +commit 2b00d3199d90abcd702d10a81d4c3b28be90db37 +Author: ewt +Date: Wed Jan 14 14:40:02 1998 +0000 + + *** empty log message *** + + CVS patchset: 1964 + CVS date: 1998/01/14 14:40:02 + +commit 1ee0cac0dea2d5090eeda84cf5c478c44f324532 +Author: ewt +Date: Wed Jan 14 14:39:11 1998 +0000 + + fixed rpmlibbuild.a to librpmbuild.a + + CVS patchset: 1963 + CVS date: 1998/01/14 14:39:11 + +commit 63a1a6794b4fafeef773e3a50135e266d0c5f649 +Author: marc +Date: Wed Jan 14 04:14:35 1998 +0000 + + Fix (and slightly change effects of) --rebuild and --recompile. + + CVS patchset: 1962 + CVS date: 1998/01/14 04:14:35 + +commit c1d4e941066ff05c1b63113bdd017986a1cb180e +Author: marc +Date: Wed Jan 14 03:32:44 1998 +0000 + + The spec file read code was inserting a second \n after every line! + + CVS patchset: 1961 + CVS date: 1998/01/14 03:32:44 + +commit e249552f6f28639793e64ded9c919ae2745a8398 +Author: marc +Date: Tue Jan 13 19:59:26 1998 +0000 + + Add changelog and man page entry for --rmsource. + + CVS patchset: 1960 + CVS date: 1998/01/13 19:59:26 + +commit f640acd1b4b6e5f149de40c6200d6ff6fc1a87d4 +Author: marc +Date: Tue Jan 13 19:56:18 1998 +0000 + + Remove requirement of Distribution, Vendor, and Packager. + + CVS patchset: 1959 + CVS date: 1998/01/13 19:56:18 + +commit 9adb4d81fdde1842d1410eca176249db166368b5 +Author: marc +Date: Tue Jan 13 19:53:07 1998 +0000 + + Temp turn off -p "foo foo foo" in CHANGELOG. + Forgot to turn on rmsource. + + CVS patchset: 1958 + CVS date: 1998/01/13 19:53:07 + +commit 161b80d7eb481ae34bb98e69cb93273ea2469b26 +Author: ewt +Date: Tue Jan 13 19:38:40 1998 +0000 + + fix for stupid freebsd header files + + CVS patchset: 1957 + CVS date: 1998/01/13 19:38:40 + +commit 757e50ffc827297e36f793cf79ddc471878f6d0b +Author: ewt +Date: Mon Jan 12 21:31:29 1998 +0000 + + merged in Marc's new build code + + CVS patchset: 1956 + CVS date: 1998/01/12 21:31:29 + +commit ec07f9df959c911c60727ba68c455f4ff20497bf +Author: ewt +Date: Mon Jan 12 16:58:31 1998 +0000 + + fixed memory leak -- findMatches() wasn't freeing headers + + CVS patchset: 1953 + CVS date: 1998/01/12 16:58:31 + +commit 32c00a2278b5d3fe2d17d7829d48002723a8172f +Author: ewt +Date: Mon Jan 12 16:58:16 1998 +0000 + + added include of "intl.h" + + CVS patchset: 1952 + CVS date: 1998/01/12 16:58:16 + +commit 119cba2b87eb3589172f60cfd5712771efc10fc4 +Author: marc +Date: Sun Jan 11 18:53:39 1998 +0000 + + Add intl.h + + CVS patchset: 1951 + CVS date: 1998/01/11 18:53:39 + +commit 26360c96541f6dbfa955d3d9fcc762366b0c6480 +Author: marc +Date: Sun Jan 11 18:20:49 1998 +0000 + + Add intl.h + + CVS patchset: 1950 + CVS date: 1998/01/11 18:20:49 + +commit de01516d05d94b51e0445532871d9a365fe6dc32 +Author: marc +Date: Sun Jan 11 17:17:46 1998 +0000 + + Obsolete root rpmrc var - use buildroot instead. + + CVS patchset: 1949 + CVS date: 1998/01/11 17:17:46 + +commit 7adbd683c5f901fd0d8970cc88025b7cf77bd068 +Author: marc +Date: Sun Jan 11 16:40:08 1998 +0000 + + Small bug fix. + Allow C lang to be specified as "C" (as oppopsed to NULL). + + CVS patchset: 1948 + CVS date: 1998/01/11 16:40:08 + +commit 39165d71e6e5454d96896f4b2c0f2acc192df998 +Author: ewt +Date: Sat Jan 10 07:48:37 1998 +0000 + + freed things improperly + + CVS patchset: 1947 + CVS date: 1998/01/10 07:48:37 + +commit af9aba223f6a49e9ecd96fb1fbc59ffdecf5b97c +Author: ewt +Date: Fri Jan 9 19:10:54 1998 +0000 + + added more i18n strings + + CVS patchset: 1946 + CVS date: 1998/01/09 19:10:54 + +commit bee24b06ae463b921d91225867bc5a6831d06cfe +Author: ewt +Date: Fri Jan 9 19:10:28 1998 +0000 + + added lots of files + + CVS patchset: 1945 + CVS date: 1998/01/09 19:10:28 + +commit f9024508212cdd1e9d6e6b38c405745a4c0fe356 +Author: ewt +Date: Fri Jan 9 18:45:41 1998 +0000 + + added _() around a string + + CVS patchset: 1944 + CVS date: 1998/01/09 18:45:41 + +commit 62d0b6f13b642a0735456ff78c0a3f460fd099ae +Author: ewt +Date: Thu Jan 8 15:32:40 1998 +0000 + + *** empty log message *** + + CVS patchset: 1943 + CVS date: 1998/01/08 15:32:40 + +commit aaa4e01d982018570eb1517dca359a6e3cc3278a +Author: ewt +Date: Thu Jan 8 15:32:10 1998 +0000 + + don't run scripts in test mode + + CVS patchset: 1942 + CVS date: 1998/01/08 15:32:10 + +commit b1271fa8a6e9a4d76fb22092c9c86420a17ec726 +Author: ewt +Date: Thu Jan 8 15:24:27 1998 +0000 + + added Turkish message catalog + + CVS patchset: 1941 + CVS date: 1998/01/08 15:24:27 + +commit f96e84373ea2dbd070326841993917ee09a91532 +Author: ewt +Date: Wed Jan 7 15:43:42 1998 +0000 + + *** empty log message *** + + CVS patchset: 1919 + CVS date: 1998/01/07 15:43:42 + +commit 40f08d3731aa154cacf677b38857271a8fa7ec69 +Author: ewt +Date: Wed Jan 7 15:26:43 1998 +0000 + + build time arch/os numbers weren't going through canon tables + + CVS patchset: 1918 + CVS date: 1998/01/07 15:26:43 + +commit aaf61490701a33aed49ea2be4f8d6bfd19322d0c +Author: ewt +Date: Wed Jan 7 15:25:46 1998 +0000 + + undid some --setugids problems -- I don't know where they came from though + + CVS patchset: 1917 + CVS date: 1998/01/07 15:25:46 + +commit 306172f60020c97064cc194492e28f86efc30f8d +Author: ewt +Date: Tue Jan 6 03:20:24 1998 +0000 + + 0 length files are bad only if the files are regular ones -- it may be + fine for sockets + + CVS patchset: 1916 + CVS date: 1998/01/06 03:20:24 + +commit 2dfbef04161668639212170a47f35f679e9e717f +Author: ewt +Date: Tue Jan 6 02:45:02 1998 +0000 + + static strings before an array qualifier could get dropped + + CVS patchset: 1915 + CVS date: 1998/01/06 02:45:02 + +commit 733a31bb2b309260acee1b7e3b9e322e204e8b03 +Author: ewt +Date: Mon Jan 5 17:22:51 1998 +0000 + + vesrion 2.4.12 + + CVS patchset: 1914 + CVS date: 1998/01/05 17:22:51 + +commit 462655d9c02c3b296bc311ee4ccbaa1e441fe16e +Author: ewt +Date: Mon Jan 5 17:22:44 1998 +0000 + + *** empty log message *** + + CVS patchset: 1913 + CVS date: 1998/01/05 17:22:44 + +commit a84fe2e28e254acf477ee040ea7d32438f5545ff +Author: ewt +Date: Mon Jan 5 17:22:04 1998 +0000 + + Fixed some error messages + + CVS patchset: 1912 + CVS date: 1998/01/05 17:22:04 + +commit ba236840af2fa9ebdb1899f2b2d541fdb6b4689c +Author: ewt +Date: Mon Jan 5 17:21:18 1998 +0000 + + memset() reserved portion of lead + + CVS patchset: 1911 + CVS date: 1998/01/05 17:21:18 + +commit ace46218c0679eb029d155069dfc033f936b7bfd +Author: ewt +Date: Mon Jan 5 17:21:07 1998 +0000 + + 1) version 2.4.12 + 2) doesn't require cpio anymore + + CVS patchset: 1910 + CVS date: 1998/01/05 17:21:07 + +commit 0a3d080403ca110af7217a19a799c5db51d0ed51 +Author: ewt +Date: Tue Dec 30 19:26:15 1997 +0000 + + let mips build noarch packages + + CVS patchset: 1909 + CVS date: 1997/12/30 19:26:15 + +commit 7b53d1ce60fd347aaafe5c1849e28bacd1ef4260 +Author: ewt +Date: Tue Dec 30 19:25:51 1997 +0000 + + made --setperms not follow symlinks + + CVS patchset: 1908 + CVS date: 1997/12/30 19:25:51 + +commit 9122ac746ca4c1393d484f688c889e478eef2c42 +Author: ewt +Date: Tue Dec 30 19:25:42 1997 +0000 + + *** empty log message *** + + CVS patchset: 1907 + CVS date: 1997/12/30 19:25:42 + +commit d07d0e7d82b433ccd601959943c0a451b971f941 +Author: marc +Date: Tue Nov 18 17:30:58 1997 +0000 + + Added RPMTAG_FILEDEVICES, RPMTAG_FILEINODES, and RPMTAG_FILELANGS. + + CVS patchset: 1906 + CVS date: 1997/11/18 17:30:58 + +commit 209c6839dc7086ab461ee30d1ae06520d210ba21 +Author: ewt +Date: Tue Nov 18 14:25:55 1997 +0000 + + changed #ifdef to #if + + CVS patchset: 1905 + CVS date: 1997/11/18 14:25:55 + +commit 248c72996359f03dd41c86ac4698acc4d476418a +Author: ewt +Date: Tue Nov 18 03:15:29 1997 +0000 + + version 2.4.11 + + CVS patchset: 1904 + CVS date: 1997/11/18 03:15:29 + +commit 1e318ff6d174757d8e177cf4426803f13dde283c +Author: ewt +Date: Tue Nov 18 03:13:56 1997 +0000 + + various header file cleanups + + CVS patchset: 1903 + CVS date: 1997/11/18 03:13:56 + +commit d134038e40d3d41f7465248ae94cd68b14399b4b +Author: ewt +Date: Tue Nov 18 03:07:10 1997 +0000 + + Force string.h to be present + + CVS patchset: 1902 + CVS date: 1997/11/18 03:07:10 + +commit 4533301c3816df9b5142d1cd2be9aa45989986ca +Author: ewt +Date: Tue Nov 18 02:57:00 1997 +0000 + + it wasn't ending a static string which occured immediately before + an array + + CVS patchset: 1901 + CVS date: 1997/11/18 02:57:00 + +commit 59f3f537e94420a8b201fc6bce964bfff7e69f24 +Author: ewt +Date: Tue Nov 18 02:45:38 1997 +0000 + + 1) fixed \%dFOO query formats + 2) made %% work in query formats + + CVS patchset: 1900 + CVS date: 1997/11/18 02:45:38 + +commit d5b0c59cecd3032d8b3261077da10d1ace19c6a3 +Author: ewt +Date: Wed Nov 12 14:47:12 1997 +0000 + + *** empty log message *** + + CVS patchset: 1899 + CVS date: 1997/11/12 14:47:12 + +commit aceb7c974016eb17811e2441499f469a511bf8b9 +Author: ewt +Date: Wed Nov 12 14:46:39 1997 +0000 + + fixed SYS_SOCKET symbol + + CVS patchset: 1898 + CVS date: 1997/11/12 14:46:39 + +commit b602abd8c3a7d6e1bd5248b29cd80e1b87b17f0b +Author: marc +Date: Fri Nov 7 17:27:56 1997 +0000 + + *** empty log message *** + + CVS patchset: 1897 + CVS date: 1997/11/07 17:27:56 + +commit 147a37e062f46d3562e027f75ebb6b48955af921 +Author: marc +Date: Thu Nov 6 19:14:03 1997 +0000 + + *** empty log message *** + + CVS patchset: 1896 + CVS date: 1997/11/06 19:14:03 + +commit 31808c0fc22126fe151f9f1717b0f723cfffe8c0 +Author: marc +Date: Thu Nov 6 17:28:29 1997 +0000 + + Fix bug where the directory prefix is listed in the file list + + CVS patchset: 1895 + CVS date: 1997/11/06 17:28:29 + +commit d45341c53c319233d16be3cbf2ae6169f5fa2bed +Author: marc +Date: Wed Nov 5 14:39:20 1997 +0000 + + Handle broken readdir() in sinix + + CVS patchset: 1894 + CVS date: 1997/11/05 14:39:20 + +commit 002ae63afbb68fcdc506e40da390fe1b48f71ef6 +Author: ewt +Date: Tue Nov 4 15:28:55 1997 +0000 + + fixed oops + + CVS patchset: 1893 + CVS date: 1997/11/04 15:28:55 + +commit 05fc59570b1b0f3c555aadc9b78720a2fbc08344 +Author: ewt +Date: Mon Nov 3 20:18:11 1997 +0000 + + *** empty log message *** + + CVS patchset: 1892 + CVS date: 1997/11/03 20:18:11 + +commit d63fd08403359531feb367118e64c2504075b024 +Author: ewt +Date: Mon Nov 3 20:17:45 1997 +0000 + + handle empty files as bad magic, not read errors + + CVS patchset: 1891 + CVS date: 1997/11/03 20:17:45 + +commit 727d6480b1b7291b9bec1e20f04846ef64dbb748 +Author: ewt +Date: Mon Nov 3 15:12:03 1997 +0000 + + removed extraneous ' ' + + CVS patchset: 1890 + CVS date: 1997/11/03 15:12:03 + +commit 68d771b7424c4d9363e11ec69a0048a3e1de9eb8 +Author: marc +Date: Sun Nov 2 22:49:50 1997 +0000 + + Added POPT_KEEP_FIRST to cause popt to *not* ignore first arg. + + CVS patchset: 1889 + CVS date: 1997/11/02 22:49:50 + +commit c74609f805beafd948b59379fe073ee5cb0acc6a +Author: ewt +Date: Sun Nov 2 16:45:17 1997 +0000 + + added error strings for BADNUMBER and OVERFLOW errors + + CVS patchset: 1888 + CVS date: 1997/11/02 16:45:17 + +commit bdc2be0a078a729dca51648d4608e9c6eef662ad +Author: ewt +Date: Sun Nov 2 16:12:55 1997 +0000 + + implmented POPT_ARG_INT and POPT_ARG_LONG + + CVS patchset: 1887 + CVS date: 1997/11/02 16:12:55 + +commit 24626289d2136276a909cbeb56d5f5df1faf81a5 +Author: ewt +Date: Fri Oct 31 19:36:57 1997 +0000 + + *** empty log message *** + + CVS patchset: 1886 + CVS date: 1997/10/31 19:36:57 + +commit 00d2ffce5271597882cc3d7a6afe2faf15a82146 +Author: ewt +Date: Fri Oct 31 19:32:56 1997 +0000 + + fixed misc handling in makefile + + CVS patchset: 1885 + CVS date: 1997/10/31 19:32:56 + +commit b1842c1e7740f062a9d3a32ae7973ceeddd9121c +Author: ewt +Date: Fri Oct 31 19:24:48 1997 +0000 + + only build misc dir and use libmisc.a if necessary + + CVS patchset: 1884 + CVS date: 1997/10/31 19:24:48 + +commit 67c236d758373bb3537f8563e3dd24bde414d3eb +Author: ewt +Date: Fri Oct 31 17:31:17 1997 +0000 + + 1) use rand + 2) conditionally check for newbuild + + CVS patchset: 1883 + CVS date: 1997/10/31 17:31:17 + +commit 016384f4591285d2449cdfe51b38c92a5d8555af +Author: ewt +Date: Fri Oct 31 17:18:49 1997 +0000 + + ftp code works in rpm and install + + CVS patchset: 1882 + CVS date: 1997/10/31 17:18:49 + +commit bcc9a0f74ad73bac457ab8b284413ded038c6212 +Author: ewt +Date: Fri Oct 31 17:10:29 1997 +0000 + + cersion 2.4.10 + + CVS patchset: 1881 + CVS date: 1997/10/31 17:10:29 + +commit a831aa003e9aaa24a737bf8560a0650fda8db105 +Author: ewt +Date: Wed Oct 29 22:13:48 1997 +0000 + + don't give an error if missingok files don't exist on -e + + CVS patchset: 1880 + CVS date: 1997/10/29 22:13:48 + +commit b3a2b23fceef36ed0955b94ebdb2271cf93ab92d +Author: ewt +Date: Wed Oct 29 20:08:20 1997 +0000 + + set uid/gid of source files to the same as the process's + + CVS patchset: 1879 + CVS date: 1997/10/29 20:08:20 + +commit 2048155a4b65efca8f3f4e92b76f67a2b72f9cbb +Author: marc +Date: Wed Oct 29 16:02:07 1997 +0000 + + cookie handling + + CVS patchset: 1878 + CVS date: 1997/10/29 16:02:07 + +commit 673346f72e37073e816011d343e520d30ab1f1af +Author: marc +Date: Wed Oct 29 15:55:29 1997 +0000 + + ignore cookies + + CVS patchset: 1877 + CVS date: 1997/10/29 15:55:29 + +commit 868ce096dc2c453c2ba2c1e547ecd961862a638f +Author: marc +Date: Wed Oct 29 15:55:09 1997 +0000 + + handle cookies in source packages + + CVS patchset: 1876 + CVS date: 1997/10/29 15:55:09 + +commit e4bfb97c6a74814c0877a9f02daaa8266783d21b +Author: marc +Date: Wed Oct 29 15:54:45 1997 +0000 + + added cookie support + + CVS patchset: 1875 + CVS date: 1997/10/29 15:54:45 + +commit 3723ba4c06a02382e9bc157fbc1a848b16813d1f +Author: marc +Date: Wed Oct 29 15:53:35 1997 +0000 + + oboslete code was using a wrong loop invariant + + CVS patchset: 1874 + CVS date: 1997/10/29 15:53:35 + +commit 0426f5a19e1d39af9d1e33735983cf49aceb4375 +Author: ewt +Date: Wed Oct 29 15:12:19 1997 +0000 + + use simple dns stuff + + CVS patchset: 1873 + CVS date: 1997/10/29 15:12:19 + +commit fd2f4aa0592bbd63ceea3a38b6243ec8b05b531d +Author: ewt +Date: Tue Oct 28 20:59:16 1997 +0000 + + look for user/group name->id transitions after running preinstall + + CVS patchset: 1872 + CVS date: 1997/10/28 20:59:16 + +commit 56c3634cfab9fee5619cafb3da43745c2d0e3e8b +Author: ewt +Date: Sun Oct 26 16:42:44 1997 +0000 + + ignore missing entries in requires database + + CVS patchset: 1871 + CVS date: 1997/10/26 16:42:44 + +commit 636fc4bec9353821db983092424a30e2b0c39a84 +Author: marc +Date: Thu Oct 23 15:10:03 1997 +0000 + + Handle patch > 2.1 + + CVS patchset: 1870 + CVS date: 1997/10/23 15:10:03 + +commit 5bfbd87d1dd9281bbb7021356a3e8d449713321e +Author: ewt +Date: Wed Oct 22 03:22:17 1997 +0000 + + fixed oldpatch stuff + + CVS patchset: 1869 + CVS date: 1997/10/22 03:22:17 + +commit 7ade6087751d268d893dabaa677fe3274335a477 +Author: ewt +Date: Wed Oct 22 00:20:06 1997 +0000 + + added check for old patch versions + + CVS patchset: 1868 + CVS date: 1997/10/22 00:20:06 + +commit 93900131c3dd7944ea45975b99f4dfadd01af944 +Author: marc +Date: Fri Oct 17 18:35:53 1997 +0000 + + Handle scripts where script prog in a string array. + Make verify script use runScript(). + Always chdir("/") before running scripts. + + CVS patchset: 1867 + CVS date: 1997/10/17 18:35:53 + +commit 3354920c7cb1059b4e0a5e5a6538bad78d034326 +Author: marc +Date: Fri Oct 17 18:34:22 1997 +0000 + + Use runScript() for verifying script. + Add verify prog args. + + CVS patchset: 1866 + CVS date: 1997/10/17 18:34:22 + +commit 99d07c6e204bd025a00bf283e0107622a665742b +Author: marc +Date: Fri Oct 17 18:12:09 1997 +0000 + + Check for write errors + + CVS patchset: 1865 + CVS date: 1997/10/17 18:12:09 + +commit deaf96073e4b68a0bb993ff7555711b6b6054124 +Author: marc +Date: Fri Oct 17 04:34:34 1997 +0000 + + header adjustment + + CVS patchset: 1864 + CVS date: 1997/10/17 04:34:34 + +commit a8b1b7aa6fe3279e9128220b94cb6391fcd08478 +Author: marc +Date: Fri Oct 17 04:14:06 1997 +0000 + + Added headerAddOrAppendEntry() + Allow more NULL args to getEntry(), etc + + CVS patchset: 1863 + CVS date: 1997/10/17 04:14:06 + +commit adf3f31c69dd450848ae6a332e7444c60409ff1a +Author: ewt +Date: Fri Oct 17 03:12:31 1997 +0000 + + *** empty log message *** + + CVS patchset: 1862 + CVS date: 1997/10/17 03:12:31 + +commit e548c70dde9f70a50fa177dc5ce0512a59b613c4 +Author: ewt +Date: Fri Oct 17 03:12:03 1997 +0000 + + when evaluating conditionals, array iteration number stays the same + + CVS patchset: 1861 + CVS date: 1997/10/17 03:12:03 + +commit 73306a9493d8b545b6cfbe4ad205e9ab597cc8d3 +Author: ewt +Date: Thu Oct 16 17:35:48 1997 +0000 + + made mips compatible with noarch + + CVS patchset: 1860 + CVS date: 1997/10/16 17:35:48 + +commit b564f1a8d92ccb8af36eaf8dfa5cd13eaceab6fd +Author: ewt +Date: Wed Oct 15 18:53:54 1997 +0000 + + oops + + CVS patchset: 1859 + CVS date: 1997/10/15 18:53:54 + +commit aa527b45203013cb4d2a95170ac57796cd955205 +Author: ewt +Date: Wed Oct 15 15:46:09 1997 +0000 + + added header for SunOS + + CVS patchset: 1858 + CVS date: 1997/10/15 15:46:09 + +commit 9a899455f5449442d02735a67dca831f394278b2 +Author: ewt +Date: Wed Oct 15 15:44:57 1997 +0000 + + serial handling fixes + + CVS patchset: 1857 + CVS date: 1997/10/15 15:44:57 + +commit 27f71aba7b121f8474242feba80c62350eed8f25 +Author: marc +Date: Tue Oct 14 22:02:54 1997 +0000 + + Do a sanity check on BuildRoot + + CVS patchset: 1856 + CVS date: 1997/10/14 22:02:54 + +commit 081fc78381c1864115ac1f5203449a78c62eab27 +Author: marc +Date: Tue Oct 14 21:50:13 1997 +0000 + + Allow License: instead of Copyright: + + CVS patchset: 1855 + CVS date: 1997/10/14 21:50:13 + +commit f21b2d27ad2804bdf450f0c66e23e107a411bde3 +Author: marc +Date: Tue Oct 14 21:46:49 1997 +0000 + + Allow Copyrght: to be inherited + + CVS patchset: 1854 + CVS date: 1997/10/14 21:46:49 + +commit b0bed59f684181d9e519b2dd6e7b938285c63e1e +Author: ewt +Date: Tue Oct 14 15:22:55 1997 +0000 + + 1) added make tar rule + + CVS patchset: 1853 + CVS date: 1997/10/14 15:22:55 + +commit d4ee4e7d6f39f9572ace5d73d65011e1503df9fc +Author: ewt +Date: Tue Oct 14 15:20:39 1997 +0000 + + verification fix for systems where a single gid maps to multiple gnames + + CVS patchset: 1852 + CVS date: 1997/10/14 15:20:39 + +commit 91995566f1e73986919ce0fdcc808b07858b01f9 +Author: marc +Date: Mon Oct 13 16:39:27 1997 +0000 + + When creating archive use fsPath to find the file. + + CVS patchset: 1851 + CVS date: 1997/10/13 16:39:27 + +commit 00bec5227c2bf471e8e908357fe46b761849b89b +Author: ewt +Date: Fri Oct 10 21:46:34 1997 +0000 + + updated versions to 2.4.9 + + CVS patchset: 1850 + CVS date: 1997/10/10 21:46:34 + +commit a9d27441864cb8b71f2f1bdac708683e8935d010 +Author: ewt +Date: Fri Oct 10 21:29:15 1997 +0000 + + remove popt.spec when building archive + + CVS patchset: 1849 + CVS date: 1997/10/10 21:29:15 + +commit 7a19e58f99eaca6bd062c4b35cf5678bece16aa4 +Author: ewt +Date: Fri Oct 10 19:12:31 1997 +0000 + + fixes from obsoletes changes + + CVS patchset: 1848 + CVS date: 1997/10/10 19:12:31 + +commit abaa0261fe04fb5be3ce5a36be56039491d34244 +Author: ewt +Date: Fri Oct 10 19:11:01 1997 +0000 + + *** empty log message *** + + CVS patchset: 1847 + CVS date: 1997/10/10 19:11:01 + +commit 6608c32b48787c6832ab6ca22761e26c494c1e1b +Author: ewt +Date: Fri Oct 10 19:10:36 1997 +0000 + + only generate requirements for executable files + + CVS patchset: 1846 + CVS date: 1997/10/10 19:10:36 + +commit 398ca4e827492b1c249826ae6af0118307a5eac8 +Author: marc +Date: Wed Oct 8 15:13:35 1997 +0000 + + Terminate optionsTable + + CVS patchset: 1845 + CVS date: 1997/10/08 15:13:35 + +commit 199b537e338041dee082b81a4df446f34afb9952 +Author: ewt +Date: Tue Oct 7 14:33:50 1997 +0000 + + changed 'archive' rule to use cvs export + + CVS patchset: 1844 + CVS date: 1997/10/07 14:33:50 + +commit 518ddc38e0491224a191ddf38df96111a94e06f6 +Author: marc +Date: Tue Oct 7 14:22:40 1997 +0000 + + Bug + + CVS patchset: 1843 + CVS date: 1997/10/07 14:22:40 + +commit b161f84ea64d724d02383dd854eb4bc1f407da80 +Author: ewt +Date: Mon Oct 6 18:00:11 1997 +0000 + + fflags query formatter handles ghosts + + CVS patchset: 1842 + CVS date: 1997/10/06 18:00:11 + +commit 017fde861df2c50e6230b2d6857870b0ed1b4d18 +Author: marc +Date: Mon Oct 6 17:43:58 1997 +0000 + + Added %ghost option for files + + CVS patchset: 1841 + CVS date: 1997/10/06 17:43:58 + +commit 144ef26448e1f43d3737cfda6c40a4f1b1b75656 +Author: ewt +Date: Fri Oct 3 16:09:15 1997 +0000 + + *** empty log message *** + + CVS patchset: 1840 + CVS date: 1997/10/03 16:09:15 + +commit e436c8ad2e7ec9982e60c8a5cfd889c72185febd +Author: ewt +Date: Fri Oct 3 16:08:45 1997 +0000 + + added smarts for ordering sets + + CVS patchset: 1839 + CVS date: 1997/10/03 16:08:45 + +commit 7ed282cb04ade7021882782c6cdad7aa908d49e9 +Author: ewt +Date: Fri Oct 3 16:08:20 1997 +0000 + + was calculating incorrect archive size for package w/ hard links + + CVS patchset: 1838 + CVS date: 1997/10/03 16:08:20 + +commit e590740bbe85095f3c4e0629a2275be0d88afd47 +Author: ewt +Date: Fri Oct 3 16:06:36 1997 +0000 + + fixed problems introduced by obsolete handling + + CVS patchset: 1837 + CVS date: 1997/10/03 16:06:36 + +commit dac493ef9edff235c4abad40801c93fcbdd35840 +Author: ewt +Date: Fri Oct 3 16:05:46 1997 +0000 + + needs to read rpmrc + + CVS patchset: 1836 + CVS date: 1997/10/03 16:05:46 + +commit d518d25eb911b0c9bffc1da95f3d753ea4041d05 +Author: marc +Date: Tue Sep 30 20:23:20 1997 +0000 + + Sanity check + + CVS patchset: 1835 + CVS date: 1997/09/30 20:23:20 + +commit b7d6861f740b68720d276da802330bd95c6a1914 +Author: ewt +Date: Fri Sep 19 14:08:10 1997 +0000 + + popt is it's own library + + CVS patchset: 1834 + CVS date: 1997/09/19 14:08:10 + +commit 23a98445167f19dbdbadfd4a7a526cbba2b1e745 +Author: ewt +Date: Thu Sep 18 16:46:08 1997 +0000 + + 1) allowed installation based on a PREFIX + 2) added popt.spec + + CVS patchset: 1833 + CVS date: 1997/09/18 16:46:08 + +commit b5572be323cb4d03b21dfcd4a88baba67069cf19 +Author: ewt +Date: Thu Sep 18 16:39:46 1997 +0000 + + 1) use Makefile.inc if it's present + 2) added install rule + + CVS patchset: 1832 + CVS date: 1997/09/18 16:39:46 + +commit b7770cb63d5aec08c3737c13c905ef46835459c0 +Author: ewt +Date: Thu Sep 18 01:54:30 1997 +0000 + + added kickstart support for + 1) keymap + 2) swap + 3) lilo + 4) postinstall networking (preliminary) + 5) dependency resolution + + CVS patchset: 1831 + CVS date: 1997/09/18 01:54:30 + +commit b1af513e6358428e6f934db1c611222812d3f55f +Author: marc +Date: Wed Sep 17 17:52:08 1997 +0000 + + Fix requires generation for scripts + + CVS patchset: 1830 + CVS date: 1997/09/17 17:52:08 + +commit d4803c088c1e115dfbb21e9d2c312bef8af2decb +Author: ewt +Date: Tue Sep 16 23:16:21 1997 +0000 + + added install/dep time support for obsoletes tag + + CVS patchset: 1829 + CVS date: 1997/09/16 23:16:21 + +commit 3b6704e349687faf49c27548ea98dd3f12c3e66a +Author: marc +Date: Tue Sep 16 20:09:31 1997 +0000 + + Move obsoletes to own tag + + CVS patchset: 1828 + CVS date: 1997/09/16 20:09:31 + +commit 7a16d204c479d2eb62ca7468109ebdf856599269 +Author: marc +Date: Tue Sep 16 19:20:16 1997 +0000 + + Added Obsoletes: tag + + CVS patchset: 1827 + CVS date: 1997/09/16 19:20:16 + +commit 6fedd84788cb4df935c9eeb21aca55b3508616e3 +Author: ewt +Date: Sun Sep 14 13:16:51 1997 +0000 + + removed some unused variables + + CVS patchset: 1826 + CVS date: 1997/09/14 13:16:51 + +commit 9b2315744954a4f5ea1d6fb3729c9c678033a4ba +Author: ewt +Date: Sun Sep 14 13:16:36 1997 +0000 + + fixed size in write() + + CVS patchset: 1825 + CVS date: 1997/09/14 13:16:36 + +commit bb1ce12d842438bba1a8d0666e1671c32de59dee +Author: ewt +Date: Sun Sep 14 13:16:25 1997 +0000 + + added various arch_compat and build_arch_compat lines + + CVS patchset: 1824 + CVS date: 1997/09/14 13:16:25 + +commit 2a0ffbb344c9a78fa1cbe180ec1729e80737e373 +Author: ewt +Date: Sun Sep 14 02:33:27 1997 +0000 + + added build compatibilities for m68k ppc + + CVS patchset: 1823 + CVS date: 1997/09/14 02:33:27 + +commit bc5e955e9e779b36fdaa15efb872aed6132cad65 +Author: ewt +Date: Fri Sep 12 19:26:01 1997 +0000 + + vesrion 2.4.7 + + CVS patchset: 1822 + CVS date: 1997/09/12 19:26:01 + +commit ff2e07c8e37905900e06bae096a595bbb1cd0dbf +Author: ewt +Date: Fri Sep 12 19:13:58 1997 +0000 + + vesrion 2.4.7 + + CVS patchset: 1821 + CVS date: 1997/09/12 19:13:58 + +commit 67b7c3bc00af4d30fa1cb37866fbc2d3c97df38b +Author: ewt +Date: Fri Sep 12 19:12:36 1997 +0000 + + do "set -x" as "set -xs" is simply broken + + CVS patchset: 1820 + CVS date: 1997/09/12 19:12:36 + +commit a74c005013aec09c5f49da894480f010ae642d77 +Author: ewt +Date: Fri Sep 12 19:09:07 1997 +0000 + + 1) fixed some HP specific typos + 2) uname() rseults get pushed through *_canon tables before being used + + CVS patchset: 1819 + CVS date: 1997/09/12 19:09:07 + +commit 6558956b6e99c810530888a3e1121a10d77a74c7 +Author: ewt +Date: Tue Sep 9 21:00:48 1997 +0000 + + pre/post script processing had some erroneous free() calls + + CVS patchset: 1818 + CVS date: 1997/09/09 21:00:48 + +commit afdca6b38f988707a9b1506ed80737238dd681f2 +Author: ewt +Date: Tue Sep 9 19:11:27 1997 +0000 + + didn't package / properly + + CVS patchset: 1817 + CVS date: 1997/09/09 19:11:27 + +commit 6dd1dc3c14a8d5c90b22e31e4268aeb4d4484ba2 +Author: ewt +Date: Mon Sep 1 15:55:56 1997 +0000 + + find-requires (Linux) adds requirements for shell interpretors + + CVS patchset: 1816 + CVS date: 1997/09/01 15:55:56 + +commit 65905e2ee76fea6f3d134e8bb26afb31702c1fdc +Author: ewt +Date: Sun Aug 31 14:00:23 1997 +0000 + + *** empty log message *** + + CVS patchset: 1815 + CVS date: 1997/08/31 14:00:23 + +commit 1b98b7327a2b86b131d331d7b5913b4e1e0f72c5 +Author: ewt +Date: Sun Aug 31 13:58:57 1997 +0000 + + Had some wrong month length in date parsing code + + CVS patchset: 1814 + CVS date: 1997/08/31 13:58:57 + +commit 8e4e2d67e1ea748560fb15a6561b9957dc57f5b1 +Author: ewt +Date: Fri Aug 29 15:49:10 1997 +0000 + + *** empty log message *** + + CVS patchset: 1813 + CVS date: 1997/08/29 15:49:10 + +commit b96467df0305107bc8de8959e27c1a47edb21b1d +Author: marc +Date: Fri Aug 29 14:04:58 1997 +0000 + + Do not allow version specification in PreReq: + + CVS patchset: 1812 + CVS date: 1997/08/29 14:04:58 + +commit bc8f275da320f0d67ffeaaeed58246eb4cf6a8a6 +Author: ewt +Date: Thu Aug 28 20:53:30 1997 +0000 + + fixed __hpux test + + CVS patchset: 1811 + CVS date: 1997/08/28 20:53:30 + +commit dedcaa3fbe37d992bbbbf7c8995f8e5a49c0cd43 +Author: ewt +Date: Thu Aug 28 19:15:47 1997 +0000 + + only write install prefix env variable if one is defined + + CVS patchset: 1810 + CVS date: 1997/08/28 19:15:47 + +commit d4e8084b2a8ee8d5eae97a3273f09b4fa3a6eea6 +Author: ewt +Date: Thu Aug 28 19:13:54 1997 +0000 + + replaced temporary file creation to be significantly safer + + CVS patchset: 1809 + CVS date: 1997/08/28 19:13:54 + +commit fe6d4834696c89e5fcdd258439889b153197fb5d +Author: ewt +Date: Thu Aug 28 18:51:07 1997 +0000 + + set RPM_INSTALL_PREFIX properly + + CVS patchset: 1808 + CVS date: 1997/08/28 18:51:07 + +commit 78618acbb3b55a079ceeeabc4dbd339b61d3cd4b +Author: ewt +Date: Thu Aug 28 18:49:01 1997 +0000 + + hpux hacks + + CVS patchset: 1807 + CVS date: 1997/08/28 18:49:01 + +commit 3b9ccca76ad584847bf143336bda6b9261d19e98 +Author: ewt +Date: Thu Aug 28 18:41:06 1997 +0000 + + need to fabricate user/group name lists for v1 packagse + + CVS patchset: 1806 + CVS date: 1997/08/28 18:41:06 + +commit 505557300379d127cbb12b275a7531e0a30e29c1 +Author: ewt +Date: Wed Aug 27 14:25:28 1997 +0000 + + version 2.4.6 + + CVS patchset: 1805 + CVS date: 1997/08/27 14:25:28 + +commit d55cb332670225d344c546787829c69806bf8b68 +Author: ewt +Date: Wed Aug 27 13:24:04 1997 +0000 + + added sun4d arch_canon entry + + CVS patchset: 1804 + CVS date: 1997/08/27 13:24:04 + +commit e637438e975e8c168ac4e7c00e68c4910940024c +Author: ewt +Date: Tue Aug 26 18:22:16 1997 +0000 + + set proper default for chown() checking + + CVS patchset: 1803 + CVS date: 1997/08/26 18:22:16 + +commit 80d5d62bc1a98918f0f16c77dbc1cc35b766390b +Author: marc +Date: Tue Aug 26 16:36:30 1997 +0000 + + Fixed md5 on source packages. + + CVS patchset: 1802 + CVS date: 1997/08/26 16:36:30 + +commit a9f16a53a61dbaf005404ba39350928d8b7b9fef +Author: ewt +Date: Tue Aug 26 14:26:27 1997 +0000 + + chown() follows symlinks on nextstep (that's what I'll guess anyway) + + CVS patchset: 1801 + CVS date: 1997/08/26 14:26:27 + +commit df4eb604ecdc71d15b6b784e5dece0133327971b +Author: ewt +Date: Tue Aug 26 14:21:46 1997 +0000 + + got rid of includes of malloc.h (use stdlib.h instead) + + CVS patchset: 1800 + CVS date: 1997/08/26 14:21:46 + +commit b54778e17dee3e5bf9dd4fc6e52c7b5424531de0 +Author: ewt +Date: Tue Aug 26 14:19:35 1997 +0000 + + added os_canon entries for BSD/OS and NextStep + + CVS patchset: 1799 + CVS date: 1997/08/26 14:19:35 + +commit 7bc17e28d6c5be192bb168154cb7bfc16febf41e +Author: ewt +Date: Mon Aug 25 17:45:30 1997 +0000 + + don't do link count checking on dirs + + CVS patchset: 1798 + CVS date: 1997/08/25 17:45:30 + +commit c7d861cd1fa37a30f3740164696b402c678a22db +Author: ewt +Date: Mon Aug 25 14:39:13 1997 +0000 + + Updated to 2.4.5 + + CVS patchset: 1797 + CVS date: 1997/08/25 14:39:13 + +commit 2519b8c0d035b15b4a41ad32aee8601f2bcfb587 +Author: ewt +Date: Mon Aug 25 14:38:48 1997 +0000 + + 1) RPM_ARCHIVESIZE tag didn't get filled in properly + 2) added include of to lib/install.c + + CVS patchset: 1796 + CVS date: 1997/08/25 14:38:48 + +commit fc32e706f3df1c27cf465c07576c00763ab4c8cf +Author: ewt +Date: Sun Aug 24 18:12:05 1997 +0000 + + 1) added buildarch_compat tables + 2) fixed malloc problem in rpmrc parsing + + CVS patchset: 1795 + CVS date: 1997/08/24 18:12:05 + +commit 18573ee5524b7eb6b343433a5cc8b20974db0e3f +Author: ewt +Date: Sun Aug 24 13:04:46 1997 +0000 + + *** empty log message *** + + CVS patchset: 1794 + CVS date: 1997/08/24 13:04:46 + +commit f35f7825a6b6ae60895e0d9ae6fa382fdda45e9c +Author: ewt +Date: Sun Aug 24 13:04:39 1997 +0000 + + added version stamp + + CVS patchset: 1793 + CVS date: 1997/08/24 13:04:39 + +commit bbe85028fad889dff6667b5735bb064325e11286 +Author: ewt +Date: Sun Aug 24 13:04:25 1997 +0000 + + recognizes i686 + + CVS patchset: 1792 + CVS date: 1997/08/24 13:04:25 + +commit 7f5c95c6750303c3432bef884aa2bd4469dbfae0 +Author: ewt +Date: Sun Aug 24 13:04:06 1997 +0000 + + version 2.4.5 + + CVS patchset: 1791 + CVS date: 1997/08/24 13:04:06 + +commit 3a1f07df62827be18cd2d819896b2ae6cfd28cf3 +Author: ewt +Date: Sun Aug 24 13:00:51 1997 +0000 + + If --root is used, call getpwent() before the chroot(), forcing any + name services libraries to be loaded from outside of the chroot() + + CVS patchset: 1790 + CVS date: 1997/08/24 13:00:51 + +commit f6b5bc1f9dd3c85c626297e131bf7789ebe119ff +Author: ewt +Date: Thu Aug 21 01:56:28 1997 +0000 + + changed vesrion to 2.4.4 + + CVS patchset: 1789 + CVS date: 1997/08/21 01:56:28 + +commit 6aa825730d47a4d3436e9cb5ee58ff9a686088ae +Author: ewt +Date: Thu Aug 21 01:23:14 1997 +0000 + + added --noorder + + CVS patchset: 1788 + CVS date: 1997/08/21 01:23:14 + +commit b782a7d4aa0c7273ebade951d8292a5584a80114 +Author: ewt +Date: Thu Aug 21 01:20:16 1997 +0000 + + 1) rpm2cpio didn't handle zlib errors properly + 2) query formats could yield (none)\n instead of just (none) + 3) queries of fssizes w/o fsnames went bonkers + + CVS patchset: 1787 + CVS date: 1997/08/21 01:20:16 + +commit a50bad6f038dd3965a7702ebeda77de79ed74bbe +Author: ewt +Date: Thu Aug 21 01:07:29 1997 +0000 + + build up LIBS by appending + + CVS patchset: 1786 + CVS date: 1997/08/21 01:07:29 + +commit c24b00b73c8f11bcf801f12d8e83c825188f6cb9 +Author: ewt +Date: Thu Aug 21 01:04:46 1997 +0000 + + applied changes from Alex deVries + + CVS patchset: 1785 + CVS date: 1997/08/21 01:04:46 + +commit 36c5ef71e95ec3ef2d0dc383009383762135dacd +Author: marc +Date: Tue Aug 19 16:36:20 1997 +0000 + + BUILDARCHS is now not only internal + + CVS patchset: 1784 + CVS date: 1997/08/19 16:36:20 + +commit a377e96040f7e49ef6f818556a07cc7160b46ceb +Author: marc +Date: Tue Aug 19 16:35:33 1997 +0000 + + Add BUILDARCHS tag to source packages. + + CVS patchset: 1783 + CVS date: 1997/08/19 16:35:33 + +commit 2ec98d5fed84aa71656b92a3703643f79b249a9c +Author: ewt +Date: Sun Aug 10 13:41:11 1997 +0000 + + Look for random() in -lucb + + CVS patchset: 1782 + CVS date: 1997/08/10 13:41:11 + +commit 3a7e18a373b51458a1094bd6e3026ccea35efdc0 +Author: ewt +Date: Sun Aug 10 13:40:16 1997 +0000 + + Changed licensing of librpm to LGPL + + CVS patchset: 1781 + CVS date: 1997/08/10 13:40:16 + +commit 8f347affdca544ff7cb4e1fe49564727c5d3ee65 +Author: ewt +Date: Thu Jul 31 16:25:34 1997 +0000 + + return proper success code after writing hardlinks + + CVS patchset: 1780 + CVS date: 1997/07/31 16:25:34 + +commit fb72e505a9a7bcc8cf54cc8bc4306a951da5dee6 +Author: ewt +Date: Thu Jul 31 16:02:19 1997 +0000 + + 1) improved cpio error message + 2) moved bad chdir() restoration + 3) close files after writing their contents to cpio archive + + CVS patchset: 1779 + CVS date: 1997/07/31 16:02:19 + +commit 9174be23bae7e21c3e1ffb11c0b301a2ca14bc1b +Author: ewt +Date: Thu Jul 31 14:04:56 1997 +0000 + + 1) cpio can now conditionally follow symlinks + 2) directory archiving is fixed + + CVS patchset: 1778 + CVS date: 1997/07/31 14:04:56 + +commit ce379332c44dd6f69929da17da3e338874733850 +Author: marc +Date: Wed Jul 30 22:19:39 1997 +0000 + + Restore CWD after packing files + + CVS patchset: 1777 + CVS date: 1997/07/30 22:19:39 + +commit 73fa07578ac8c09a911c4b302d923a7cc868b5f3 +Author: ewt +Date: Mon Jul 28 21:16:55 1997 +0000 + + Added include of errno.h + + CVS patchset: 1776 + CVS date: 1997/07/28 21:16:55 + +commit 96a4b7ca2c6fbf6a3786642c27996d09fe42f28d +Author: ewt +Date: Mon Jul 28 20:39:41 1997 +0000 + + added buildarchitectures info + + CVS patchset: 1775 + CVS date: 1997/07/28 20:39:41 + +commit c4a86e70debfbcc7c93bc02c8845b688f2e4a066 +Author: marc +Date: Fri Jul 25 13:57:17 1997 +0000 + + Get rid of warning + + CVS patchset: 1774 + CVS date: 1997/07/25 13:57:17 + +commit ccc21cb726e302dad410c6b4e6cabf4095f1249a +Author: marc +Date: Fri Jul 25 13:09:05 1997 +0000 + + Modify to allow BuildArchitectures: + + CVS patchset: 1773 + CVS date: 1997/07/25 13:09:05 + +commit dd4a1f65102901b5108b2d3a58e3e90e654b2241 +Author: ewt +Date: Thu Jul 24 19:15:03 1997 +0000 + + *** empty log message *** + + CVS patchset: 1772 + CVS date: 1997/07/24 19:15:03 + +commit 53cfcda67d361ff75387474915838f9442226891 +Author: ewt +Date: Thu Jul 24 15:15:48 1997 +0000 + + Added --justdb + + CVS patchset: 1771 + CVS date: 1997/07/24 15:15:48 + +commit 9b0241488164d65d54af6a233dcd8472a660fe26 +Author: ewt +Date: Thu Jul 24 14:41:55 1997 +0000 + + Fixed installs of serial/version tags + + CVS patchset: 1770 + CVS date: 1997/07/24 14:41:55 + +commit d4e36ffd5647d5df0ae6920ce4bf63cc4ed124d6 +Author: ewt +Date: Wed Jul 23 19:11:10 1997 +0000 + + tried to fix --setperms + + CVS patchset: 1769 + CVS date: 1997/07/23 19:11:10 + +commit 815321cb72f68a562e33733ac81acb338a62e11e +Author: ewt +Date: Wed Jul 23 19:10:16 1997 +0000 + + Removed # from :octal specifier + + CVS patchset: 1768 + CVS date: 1997/07/23 19:10:16 + +commit 322f3f85ffdb916c6459cd098b3cf4188eaf9c6e +Author: ewt +Date: Wed Jul 23 19:03:38 1997 +0000 + + *** empty log message *** + + CVS patchset: 1767 + CVS date: 1997/07/23 19:03:38 + +commit 0d6eda54e6f6fa2610f57f9e83372e361202ef12 +Author: ewt +Date: Wed Jul 23 18:43:47 1997 +0000 + + cvs changes + + CVS patchset: 1766 + CVS date: 1997/07/23 18:43:47 + +commit 309b29ed815d9b7c83fdd0351a3579bae22ac9a9 +Author: ewt +Date: Wed Jul 23 18:42:42 1997 +0000 + + "make archive" displays the version number prominetly + + CVS patchset: 1765 + CVS date: 1997/07/23 18:42:42 + +commit 126ba89735b31535ad9efbd66b113ce43db00feb +Author: ewt +Date: Wed Jul 23 18:38:51 1997 +0000 + + fixed problem in awk invocation + + CVS patchset: 1764 + CVS date: 1997/07/23 18:38:51 + +commit 722f358b495cb541521f0d02eae8228e8330af15 +Author: ewt +Date: Wed Jul 23 18:38:43 1997 +0000 + + added Eric Mumpower + + CVS patchset: 1763 + CVS date: 1997/07/23 18:38:43 + +commit c412e45d33bfbcea2e60b520e872442a0db75083 +Author: ewt +Date: Wed Jul 23 18:36:55 1997 +0000 + + look for random() in libm + + CVS patchset: 1762 + CVS date: 1997/07/23 18:36:55 + +commit 29284ac90a663c7dfb2f94edb287b8d9660f1e03 +Author: ewt +Date: Wed Jul 23 18:35:34 1997 +0000 + + added #define for SCO + + CVS patchset: 1761 + CVS date: 1997/07/23 18:35:34 + +commit 94ff866183a1e28b70ea54fb70466dd5a36bcce5 +Author: ewt +Date: Wed Jul 23 18:32:15 1997 +0000 + + added provides rpmrc tag + + CVS patchset: 1760 + CVS date: 1997/07/23 18:32:15 + +commit 31897750f814160ed6bba6b33f14e66127717936 +Author: ewt +Date: Wed Jul 23 18:14:51 1997 +0000 + + removed cpiobin from rpmrc + + CVS patchset: 1759 + CVS date: 1997/07/23 18:14:51 + +commit b74c382c4efaaae31aa17d445f007668a2829fff +Author: ewt +Date: Wed Jul 23 18:08:51 1997 +0000 + + renamed cpio mapping finalPath to fsPath + + CVS patchset: 1758 + CVS date: 1997/07/23 18:08:51 + +commit aaceb01a4fdaf6729733b99ac7d968d17455096b +Author: ewt +Date: Wed Jul 23 18:08:16 1997 +0000 + + *** empty log message *** + + CVS patchset: 1757 + CVS date: 1997/07/23 18:08:16 + +commit 96fd394a90fe6e7746b8f78e467ae5140ce6ae41 +Author: ewt +Date: Wed Jul 23 18:08:01 1997 +0000 + + Moidified to use internal cpio building code + + CVS patchset: 1756 + CVS date: 1997/07/23 18:08:01 + +commit ce27d9c15c362cf04be53c512c78f01fa56a4e7a +Author: ewt +Date: Wed Jul 23 18:07:46 1997 +0000 + + 1) added cpio building code + 2) changed how filenames are read from cpio archives; this shouldn't + break anything + + CVS patchset: 1755 + CVS date: 1997/07/23 18:07:46 + +commit b1120e3415e0bf6007bdfa31679224bc0787da0b +Author: ewt +Date: Wed Jul 23 13:44:42 1997 +0000 + + *** empty log message *** + + CVS patchset: 1754 + CVS date: 1997/07/23 13:44:42 + +commit 6c5567483be5b64ac6384e24b25f7697949a639b +Author: ewt +Date: Wed Jul 23 13:09:33 1997 +0000 + + - compatible arch/os lists should be based on physical machine, not + translated machine + - added build arch/os lists to --showrc + + CVS patchset: 1753 + CVS date: 1997/07/23 13:09:33 + +commit 79c05ecc3edcbc3da41d2ce7039cd858cf01c5e5 +Author: ewt +Date: Wed Jul 23 01:17:17 1997 +0000 + + Fixed architecture overrides + + CVS patchset: 1752 + CVS date: 1997/07/23 01:17:17 + +commit 7b3f4e860149fd68da5e8c51c845b3e4b382b208 +Author: ewt +Date: Wed Jul 23 01:06:03 1997 +0000 + + rewrote rcfile parsing + + CVS patchset: 1751 + CVS date: 1997/07/23 01:06:03 + +commit d30a47c0b44c7ff0ee03a6ed6a5c7ff573c6aacf +Author: ewt +Date: Tue Jul 22 16:29:57 1997 +0000 + + Removed NEWS file + + CVS patchset: 1750 + CVS date: 1997/07/22 16:29:57 + +commit 3cc65fbe06ec54c6411d6c9baeca3d54e4b8ceab +Author: ewt +Date: Tue Jul 22 16:29:09 1997 +0000 + + 1) conditionally display url/packager tags + 2) display "(not installed)" for the install time of packages w/ haven't + been installed + + CVS patchset: 1749 + CVS date: 1997/07/22 16:29:09 + +commit 478cbfe961f53b0e82e9906ce0077ba617d4a65a +Author: ewt +Date: Fri Jul 18 15:21:51 1997 +0000 + + *** empty log message *** + + CVS patchset: 1748 + CVS date: 1997/07/18 15:21:51 + +commit d30d904329cf4944f5021d2936f07e9ac0a0865e +Author: ewt +Date: Fri Jul 18 15:03:35 1997 +0000 + + Dump the stack when a dependency loop is encountered + + CVS patchset: 1747 + CVS date: 1997/07/18 15:03:35 + +commit 007b4c33a2a558fc1f062b8ceab0aeab41a36dac +Author: ewt +Date: Thu Jul 17 19:18:33 1997 +0000 + + When a uname->id translation fails, close the password file and retry + + CVS patchset: 1746 + CVS date: 1997/07/17 19:18:33 + +commit b00397df1140bfda4a0dd49a9224fcb62b8fa13f +Author: ewt +Date: Thu Jul 17 19:18:15 1997 +0000 + + Restore original directory after chroot() + + CVS patchset: 1745 + CVS date: 1997/07/17 19:18:15 + +commit 6c518ea2790669e1632c18a7a49f72b62c275ccb +Author: ewt +Date: Wed Jul 16 01:57:50 1997 +0000 + + *** empty log message *** + + CVS patchset: 1744 + CVS date: 1997/07/16 01:57:50 + +commit 3f8dd5dd2f90b4dea934737de4d76e3e0a222303 +Author: ewt +Date: Wed Jul 16 01:56:14 1997 +0000 + + Don't bother creating devices/symlinks which already exist + + CVS patchset: 1743 + CVS date: 1997/07/16 01:56:14 + +commit acbd1b17c200d87d07415adbc2921793dc470373 +Author: ewt +Date: Wed Jul 16 01:48:46 1997 +0000 + + *** empty log message *** + + CVS patchset: 1742 + CVS date: 1997/07/16 01:48:46 + +commit a498165bc5a9d2802b1d740a56cece424b486940 +Author: ewt +Date: Wed Jul 16 01:44:27 1997 +0000 + + Uses chroot() for --root rather then hand manipulation + + CVS patchset: 1741 + CVS date: 1997/07/16 01:44:27 + +commit cb568d02f5527b063c0bfdcc29134ef20034e192 +Author: ewt +Date: Wed Jul 16 01:42:13 1997 +0000 + + Interface changes for PROG tags + + CVS patchset: 1740 + CVS date: 1997/07/16 01:42:13 + +commit 05ecca354d59e0ed0c9a8afe7cabaac4451f7747 +Author: ewt +Date: Wed Jul 16 01:41:50 1997 +0000 + + Implements POSTUNPROG-type tags + + CVS patchset: 1739 + CVS date: 1997/07/16 01:41:50 + +commit cdf81c1bed179cdf1b598006b114ae47d21ee043 +Author: ewt +Date: Wed Jul 16 01:40:23 1997 +0000 + + Hardwired lookups for root user and group lookups + + CVS patchset: 1738 + CVS date: 1997/07/16 01:40:23 + +commit 0d07345d8ae7c5ddad465a69ad8a3e44a56249ff +Author: ewt +Date: Wed Jul 16 01:39:54 1997 +0000 + + Indexes need to me made w/ ordering is done + + CVS patchset: 1737 + CVS date: 1997/07/16 01:39:54 + +commit 4f0ecdf028f7b364275b93ee91411a3bfea40994 +Author: ewt +Date: Wed Jul 16 01:38:55 1997 +0000 + + Don't check for symlink() reutrning nonzero, check only for < 0 + + CVS patchset: 1736 + CVS date: 1997/07/16 01:38:55 + +commit d2356b89a358e684ebd8f871683a687385d7a6d8 +Author: ewt +Date: Mon Jul 14 14:48:38 1997 +0000 + + Fixes to script runs + + CVS patchset: 1735 + CVS date: 1997/07/14 14:48:38 + +commit cc0a278e1d2a8b81916d443b90c6ac6c1191247d +Author: ewt +Date: Tue Jul 8 18:48:36 1997 +0000 + + Don't include packages multiple times in ordering + + CVS patchset: 1734 + CVS date: 1997/07/08 18:48:36 + +commit 3e4b8299e5e239cfbbca946351fcfb2c6a0f782f +Author: ewt +Date: Tue Jul 8 18:41:10 1997 +0000 + + Packages may satisfy their own dependencies + + CVS patchset: 1733 + CVS date: 1997/07/08 18:41:10 + +commit 94cebfb2fa3f86caec8a854ef257fb34f33ea4ef +Author: ewt +Date: Mon Jul 7 22:22:44 1997 +0000 + + 1) changed popt's ternary operator to work properly + 2) popt doesn't take \ at the end of a line as a newline + 3) fixed --scripts in rpmpopt to take advantage of #1 + + CVS patchset: 1732 + CVS date: 1997/07/07 22:22:44 + +commit 4fc52f759c02ad82d4df94207956fafad46f47d9 +Author: marc +Date: Mon Jul 7 21:13:26 1997 +0000 + + Fix handling of %pre -p when it has no body + + CVS patchset: 1731 + CVS date: 1997/07/07 21:13:26 + +commit 9f56b79acf30747a1102bffcd85b0a9a585ec9a9 +Author: ewt +Date: Mon Jul 7 20:46:18 1997 +0000 + + Added termnary expression evaluation + + CVS patchset: 1730 + CVS date: 1997/07/07 20:46:18 + +commit f253cb1c13493c20654ee4eedb2103064c734417 +Author: ewt +Date: Mon Jul 7 19:20:47 1997 +0000 + + Restored %{#TAG} style + + CVS patchset: 1729 + CVS date: 1997/07/07 19:20:47 + +commit 932e837097d7de0efbf8f5f06a9687e6a23e56d4 +Author: marc +Date: Mon Jul 7 14:51:54 1997 +0000 + + Add %pre/%post -p handling + + CVS patchset: 1728 + CVS date: 1997/07/07 14:51:54 + +commit de6dd8d747ecdc529ed526e9e97dfc46c4ab4b6b +Author: marc +Date: Thu Jul 3 21:11:06 1997 +0000 + + Change message to standard "Build failed." + + CVS patchset: 1727 + CVS date: 1997/07/03 21:11:06 + +commit 03671e7a5f7e27cd02133aa42f9e3bb4326c09ac +Author: marc +Date: Thu Jul 3 16:34:12 1997 +0000 + + Handle -p on pre/post scripts + + CVS patchset: 1726 + CVS date: 1997/07/03 16:34:12 + +commit e5db5b2a684394a7455afb81fa2c1ab172c342b5 +Author: marc +Date: Tue Jul 1 16:29:30 1997 +0000 + + Make comments "deactivate" %define + + CVS patchset: 1725 + CVS date: 1997/07/01 16:29:30 + +commit ce8b1ddc6ef77e8bdf9ccaee5aba3eb54ca5aa53 +Author: ewt +Date: Tue Jul 1 16:24:08 1997 +0000 + + Added install time prerequisite checking + + CVS patchset: 1724 + CVS date: 1997/07/01 16:24:08 + +commit aaea587060aed238d70b9470a8e78c6af824349f +Author: marc +Date: Tue Jul 1 15:23:47 1997 +0000 + + add /usr/X11R6/man to docdirs + + CVS patchset: 1723 + CVS date: 1997/07/01 15:23:47 + +commit ce86635a34fb8989910dcda2164366eb88365cb5 +Author: ewt +Date: Mon Jun 30 15:59:30 1997 +0000 + + Added include for SunOS + + CVS patchset: 1722 + CVS date: 1997/06/30 15:59:30 + +commit cd457cbd869152f8809d12f7e3a66648391c4a62 +Author: ewt +Date: Fri Jun 27 22:39:57 1997 +0000 + + Changed versions to 2.4.3 + + CVS patchset: 1721 + CVS date: 1997/06/27 22:39:57 + +commit 77f29da77ca7adca208254956f3dae881b2e52dc +Author: ewt +Date: Fri Jun 27 21:58:34 1997 +0000 + + oops + + CVS patchset: 1720 + CVS date: 1997/06/27 21:58:34 + +commit b5be704565774dd68e7fd9ea7eef9d516fe9ee20 +Author: ewt +Date: Fri Jun 27 21:55:49 1997 +0000 + + Tried to get everything working for SCO. + + CVS patchset: 1719 + CVS date: 1997/06/27 21:55:49 + +commit 398062305f1881fa45057498799b24f2fafe7714 +Author: ewt +Date: Fri Jun 27 21:47:43 1997 +0000 + + uname() IP* is truncated to just IP + + CVS patchset: 1718 + CVS date: 1997/06/27 21:47:43 + +commit 328cab55d59253e024e3c0017ccfc427942b9572 +Author: ewt +Date: Fri Jun 27 21:47:03 1997 +0000 + + 1) Changed IP24 to IP in prep for better IP handling + 2) Made IP an alias for mips architecture + 3) Added IRIX64 + + CVS patchset: 1717 + CVS date: 1997/06/27 21:47:03 + +commit d7e4e056fab11977e4767875a7abc1aa5fbd1035 +Author: ewt +Date: Thu Jun 26 14:35:37 1997 +0000 + + Fixed output messages + + CVS patchset: 1716 + CVS date: 1997/06/26 14:35:37 + +commit 9dcf56f81fa163cfe46748e7fd0fdc2b943f964e +Author: ewt +Date: Thu Jun 26 14:35:27 1997 +0000 + + Fixed user to group + + CVS patchset: 1715 + CVS date: 1997/06/26 14:35:27 + +commit a3c0eeb9bc12724bbc29afbf6038785fa37ed2d1 +Author: ewt +Date: Wed Jun 25 20:23:27 1997 +0000 + + chown() follows symlinks on hpux + + CVS patchset: 1714 + CVS date: 1997/06/25 20:23:27 + +commit be985f4853101c69384eb0fabb9d81b4050e722e +Author: ewt +Date: Wed Jun 25 16:12:11 1997 +0000 + + remove all CVS dirs during "make archive" + + CVS patchset: 1713 + CVS date: 1997/06/25 16:12:11 + +commit dfe564e55dba38bf561deb8c9623808320bf5d20 +Author: ewt +Date: Wed Jun 25 16:10:19 1997 +0000 + + more osf getmntent_r() patches + + CVS patchset: 1712 + CVS date: 1997/06/25 16:10:19 + +commit 08a988c7523450cb755701c3bf062da53d1b278d +Author: ewt +Date: Wed Jun 25 16:09:38 1997 +0000 + + taght it to figure out the arch of aix systems + + CVS patchset: 1711 + CVS date: 1997/06/25 16:09:38 + +commit 4562a634999fa180c613f58db557d22f06d2ba57 +Author: ewt +Date: Wed Jun 25 16:04:50 1997 +0000 + + correctly determines architecture for powerpc + + CVS patchset: 1710 + CVS date: 1997/06/25 16:04:50 + +commit 1533f245d278734559b507753a893ee0d8d9676e +Author: ewt +Date: Wed Jun 25 15:50:10 1997 +0000 + + new translations + + CVS patchset: 1709 + CVS date: 1997/06/25 15:50:10 + +commit dda52c18d6a434f6f4c947cd75770240a738f9d6 +Author: ewt +Date: Thu Jun 19 22:18:02 1997 +0000 + + Changes for OSF/1 getmntinfo_r() + + CVS patchset: 1708 + CVS date: 1997/06/19 22:18:02 + +commit 5b52e398993a6bc104fc88912f88ed61b9ad9be0 +Author: ewt +Date: Thu Jun 19 22:17:45 1997 +0000 + + fixed "struct fd_set" to fd_set for glibc + + CVS patchset: 1707 + CVS date: 1997/06/19 22:17:45 + +commit 4ff14e057d24add6b0f0f75b3a5833bc80ff5c44 +Author: root +Date: Thu Jun 19 19:46:19 1997 +0000 + + PreReq handling + + CVS patchset: 1706 + CVS date: 1997/06/19 19:46:19 + +commit 6dd67818e951fb1f2577186acebb512ff91b6646 +Author: root +Date: Thu Jun 19 18:51:26 1997 +0000 + + Fix src package file name. + + CVS patchset: 1705 + CVS date: 1997/06/19 18:51:26 + +commit ca410b34d009b64dc1ad483e4bf26152a6bdbd89 +Author: ewt +Date: Thu Jun 19 15:15:03 1997 +0000 + + fixed typo + + CVS patchset: 1704 + CVS date: 1997/06/19 15:15:03 + +commit 300911b8b7e64e91701d81cb1d16e719b2bde17f +Author: ewt +Date: Thu Jun 19 14:16:59 1997 +0000 + + Fixed some typos + + CVS patchset: 1703 + CVS date: 1997/06/19 14:16:59 + +commit bfad9c327187b2e69b3fcd1a2fe22ad57cae23fe +Author: ewt +Date: Thu Jun 19 13:30:47 1997 +0000 + + First pass at SCO getmntent() + + CVS patchset: 1702 + CVS date: 1997/06/19 13:30:47 + +commit a25a642bbbe429a3eea2749a9c4ec6abcd8b3125 +Author: ewt +Date: Thu Jun 19 13:18:41 1997 +0000 + + Include "miscfn.h" + + CVS patchset: 1701 + CVS date: 1997/06/19 13:18:41 + +commit 52ed621c76ca5940a446fc20a672dd18c5f4d511 +Author: ewt +Date: Thu Jun 19 13:17:56 1997 +0000 + + Fixed memory allocation + + CVS patchset: 1700 + CVS date: 1997/06/19 13:17:56 + +commit 9932bf2f0df4de6acebc6452665672e8684c4067 +Author: ewt +Date: Thu Jun 19 13:17:45 1997 +0000 + + Placed include of after for AIX + + CVS patchset: 1699 + CVS date: 1997/06/19 13:17:45 + +commit 9b7a0228d1c600991f54c1410521da983329a218 +Author: ewt +Date: Thu Jun 19 13:13:50 1997 +0000 + + AIX changes from Till Bubeck + + CVS patchset: 1698 + CVS date: 1997/06/19 13:13:50 + +commit f889cd5bdd39d115b913b8c85a660d1b226b5e81 +Author: ewt +Date: Wed Jun 18 23:19:59 1997 +0000 + + *** empty log message *** + + CVS patchset: 1697 + CVS date: 1997/06/18 23:19:59 + +commit c177b9240befd8e3b7fce7f07e1e27ee0ba87422 +Author: ewt +Date: Wed Jun 18 23:17:55 1997 +0000 + + Added language support to header + + CVS patchset: 1696 + CVS date: 1997/06/18 23:17:55 + +commit c36947471e62731e588bd940f91118d7e95c31e6 +Author: ewt +Date: Wed Jun 18 20:45:48 1997 +0000 + + *** empty log message *** + + CVS patchset: 1695 + CVS date: 1997/06/18 20:45:48 + +commit 6ee3ae9249ced83b93a52f034cc4573f983fba54 +Author: ewt +Date: Wed Jun 18 20:45:17 1997 +0000 + + Added %flags(noreplace) support, but it *hasn't been tested an iota* + + CVS patchset: 1694 + CVS date: 1997/06/18 20:45:17 + +commit 45d5621091f7b3d2eeedee4d53844b61545b5b67 +Author: root +Date: Tue Jun 17 15:54:46 1997 +0000 + + Assign new number to RPMFILE_SPECFILE + + CVS patchset: 1693 + CVS date: 1997/06/17 15:54:46 + +commit 36bd9c21011a48be3d8484ce7e7594734f4e477a +Author: root +Date: Tue Jun 17 15:52:09 1997 +0000 + + Clear the stupid isspecfile flag! + + CVS patchset: 1692 + CVS date: 1997/06/17 15:52:09 + +commit d224a783f1e9d020c5d0d4428c07043803a53a5e +Author: ewt +Date: Tue Jun 17 15:37:28 1997 +0000 + + 1) added 's', 'm', 'n' to fflags type tag + 2) implemented missingok + 3) added --allfiles + + CVS patchset: 1691 + CVS date: 1997/06/17 15:37:28 + +commit aaecdd0b19cab6eb1ef040d82b10a6796b337875 +Author: ewt +Date: Tue Jun 17 14:49:07 1997 +0000 + + Fixed mntctl() checking + + CVS patchset: 1690 + CVS date: 1997/06/17 14:49:07 + +commit 8cef38026eb38e668bb12f0b04f3c9b1f3c434eb +Author: ewt +Date: Mon Jun 16 18:24:50 1997 +0000 + + dded --changelog to help, usage, and rpm.8 + + CVS patchset: 1689 + CVS date: 1997/06/16 18:24:50 + +commit e70bb34b548d74b7f939f449d155400957176a6b +Author: ewt +Date: Mon Jun 16 18:21:37 1997 +0000 + + added "day" format specified and --changelog + + CVS patchset: 1688 + CVS date: 1997/06/16 18:21:37 + +commit 0a236450d7477bd809d70edff4ab7fdc918b9e6a +Author: ewt +Date: Mon Jun 16 18:13:23 1997 +0000 + + Tried again to not backup config files on netshared path + + CVS patchset: 1687 + CVS date: 1997/06/16 18:13:23 + +commit 835e5f5f2d33f4532d860898c5875f9e1d7f24d3 +Author: ewt +Date: Mon Jun 16 17:30:59 1997 +0000 + + changed struct rpmdb to struct rpmdb_s for C++ + + CVS patchset: 1686 + CVS date: 1997/06/16 17:30:59 + +commit 6c6815035ecbb57e7e993d0ce32f4b8e8d49ccbe +Author: ewt +Date: Mon Jun 16 17:29:29 1997 +0000 + + Removed buildos: buildarch: brokeness + + CVS patchset: 1685 + CVS date: 1997/06/16 17:29:29 + +commit fbb4be2eb21c8fd14f3e4502ca3dea6d5f964bfb +Author: root +Date: Tue Jun 3 22:02:37 1997 +0000 + + Fail if version or release are empty + + CVS patchset: 1684 + CVS date: 1997/06/03 22:02:37 + +commit 27ba21871780f89e6971d1b672b0b5123406acc9 +Author: root +Date: Tue Jun 3 21:45:09 1997 +0000 + + Allow %if* stuff to be indented + + CVS patchset: 1683 + CVS date: 1997/06/03 21:45:09 + +commit b4dee2cb45d597488cef7c86225d3d49d0f0f83b +Author: ewt +Date: Tue Jun 3 19:08:39 1997 +0000 + + *** empty log message *** + + CVS patchset: 1682 + CVS date: 1997/06/03 19:08:39 + +commit d532528178702bdfab21b8e24898f407a126d10c +Author: ewt +Date: Tue Jun 3 16:08:23 1997 +0000 + + Fixed horrible brokenness + + CVS patchset: 1681 + CVS date: 1997/06/03 16:08:23 + +commit 7ba07d0e70ba58d0d79d9a48169a5b479b3bea95 +Author: ewt +Date: Mon Jun 2 19:59:31 1997 +0000 + + *** empty log message *** + + CVS patchset: 1680 + CVS date: 1997/06/02 19:59:31 + +commit 9b9de6ce15f26c7214423fdcaa8c9d8a9e598044 +Author: ewt +Date: Mon Jun 2 19:59:07 1997 +0000 + + Provide an alternate getmntent() if necessary. + + CVS patchset: 1679 + CVS date: 1997/06/02 19:59:07 + +commit 79b64691980480d3a123903377530a58314f74e3 +Author: ewt +Date: Mon Jun 2 15:46:25 1997 +0000 + + Updated man page + + CVS patchset: 1678 + CVS date: 1997/06/02 15:46:25 + +commit fccf9d02490fac351968d8d75247605adc4af096 +Author: ewt +Date: Mon Jun 2 14:01:29 1997 +0000 + + Use pclose() w/ popen(), not fclose() + + CVS patchset: 1677 + CVS date: 1997/06/02 14:01:29 + +commit c428a31fe6ff1fb402e28df30ea39f9521c6d60d +Author: ewt +Date: Sun Jun 1 23:00:54 1997 +0000 + + *** empty log message *** + + CVS patchset: 1676 + CVS date: 1997/06/01 23:00:54 + +commit 9b92c41eac934f5e95e44c8c9e35a7eb1898a44d +Author: ewt +Date: Sun Jun 1 22:59:24 1997 +0000 + + Added rpmfilename tag to to rpmrc and made use of it during package builds + + CVS patchset: 1675 + CVS date: 1997/06/01 22:59:24 + +commit c5dcacd20144babd52181ea9bb34aa82f895b828 +Author: ewt +Date: Fri May 30 21:57:31 1997 +0000 + + *** empty log message *** + + CVS patchset: 1674 + CVS date: 1997/05/30 21:57:31 + +commit 18e62235a1a469bf46aa538413d368c67b0959ce +Author: ewt +Date: Fri May 30 21:57:10 1997 +0000 + + Solaris fixes + + CVS patchset: 1673 + CVS date: 1997/05/30 21:57:10 + +commit 0965d6236ed9c67e8164f1f6274d2c864b3cdebe +Author: ewt +Date: Fri May 30 21:14:51 1997 +0000 + + *** empty log message *** + + CVS patchset: 1672 + CVS date: 1997/05/30 21:14:51 + +commit eee6452dc0a625802a3c7272b2b042668d530c9e +Author: ewt +Date: Fri May 30 21:14:34 1997 +0000 + + moved findPackageByLabel() to rpmdbFindByLabel() and added rpmdbFindByHeader() + + CVS patchset: 1671 + CVS date: 1997/05/30 21:14:34 + +commit 381df9002167f7867b721c36a0539149a15c5fa2 +Author: ewt +Date: Fri May 30 21:05:02 1997 +0000 + + *** empty log message *** + + CVS patchset: 1670 + CVS date: 1997/05/30 21:05:02 + +commit 1368d5d273dd70c4328a39c37c950f2c44988ee8 +Author: ewt +Date: Fri May 30 21:04:42 1997 +0000 + + added fssizes tag + + CVS patchset: 1669 + CVS date: 1997/05/30 21:04:42 + +commit 9491610f7edd4338a1b186c50000b1ea1b6d1801 +Author: ewt +Date: Fri May 30 14:16:20 1997 +0000 + + added virtual query tag ability, fsnames query tag, + + CVS patchset: 1668 + CVS date: 1997/05/30 14:16:20 + +commit 93af6a49c303b2b1eed3957e6eb70d2a9215dd7c +Author: ewt +Date: Thu May 29 20:10:03 1997 +0000 + + *** empty log message *** + + CVS patchset: 1667 + CVS date: 1997/05/29 20:10:03 + +commit 2eb5561b5add234d261f1b49593d72388137f241 +Author: ewt +Date: Thu May 29 20:09:45 1997 +0000 + + Replaced queryformat code with headerSprintf() + + CVS patchset: 1666 + CVS date: 1997/05/29 20:09:45 + +commit 2aff0769dab3ad948e9daca645ceee205df1e972 +Author: ewt +Date: Wed May 28 14:21:27 1997 +0000 + + Fixed some missing >] in usage message + + CVS patchset: 1665 + CVS date: 1997/05/28 14:21:27 + +commit 6ce27675f6f4c4c85d45d9a700688e7b19be7161 +Author: ewt +Date: Wed May 28 14:19:44 1997 +0000 + + version 2.4.2 + + CVS patchset: 1664 + CVS date: 1997/05/28 14:19:44 + +commit cec51e424349fb9cfc9b5a202138dd4719019e6e +Author: ewt +Date: Tue May 27 14:02:53 1997 +0000 + + changed version to 2.4.1 + + CVS patchset: 1663 + CVS date: 1997/05/27 14:02:53 + +commit 15bd819b0bb1c76453bdb6d459ff028af4de8e6d +Author: ewt +Date: Tue May 27 14:01:45 1997 +0000 + + don't backup config files on netsharedpaths + + CVS patchset: 1662 + CVS date: 1997/05/27 14:01:45 + +commit c3aa83ec8ca6ec354445156e9682aaeb3f35b779 +Author: ewt +Date: Tue May 27 14:01:39 1997 +0000 + + Changed version to 2.4.1 + + CVS patchset: 1661 + CVS date: 1997/05/27 14:01:39 + +commit 171e55b75184386341b2bf139cd48a7b902d271c +Author: ewt +Date: Tue May 27 14:01:14 1997 +0000 + + added info on --build{arch|os} to --help and usage messages + + CVS patchset: 1660 + CVS date: 1997/05/27 14:01:14 + +commit b19f29ec07d3241c04a753a4a4212bdb8567ddbf +Author: ewt +Date: Mon May 26 13:15:46 1997 +0000 + + fixed group verification + + CVS patchset: 1659 + CVS date: 1997/05/26 13:15:46 + +commit 0ac6e87f5ef3bf6b744b34e265cb1528ccc15b13 +Author: ewt +Date: Fri May 23 15:18:15 1997 +0000 + + Omit RPMTAG_ portion of --querytags output. + + CVS patchset: 1658 + CVS date: 1997/05/23 15:18:15 + +commit 149fffad23e65bc40003789b252ef804bdee2707 +Author: ewt +Date: Fri May 23 15:10:58 1997 +0000 + + Omit RPMTAG_ portion of --querytags output. + + CVS patchset: 1657 + CVS date: 1997/05/23 15:10:58 + +commit 32721ebeb22480787ccb46be20189a6f36602f95 +Author: ewt +Date: Wed May 21 19:39:54 1997 +0000 + + Fixed aix chown test. + + CVS patchset: 1656 + CVS date: 1997/05/21 19:39:54 + +commit 098292053eb720fd293a94b2e1ad63f632a24f9d +Author: ewt +Date: Wed May 21 17:46:16 1997 +0000 + + Created noarch architecture + + CVS patchset: 1655 + CVS date: 1997/05/21 17:46:16 + +commit dbd5ccf1a727d010173995f6117744189ebd14a4 +Author: ewt +Date: Tue May 20 17:44:11 1997 +0000 + + *** empty log message *** + + CVS patchset: 1654 + CVS date: 1997/05/20 17:44:11 + +commit c81e8aefaa94f14a5573a6ddb4135c0c304e7653 +Author: ewt +Date: Tue May 20 17:43:34 1997 +0000 + + Must include before for SunOS + + CVS patchset: 1653 + CVS date: 1997/05/20 17:43:34 + +commit 3d2d9920a3caa5cd01e1886f9efcdf55d9250d31 +Author: ewt +Date: Tue May 20 16:24:33 1997 +0000 + + *** empty log message *** + + CVS patchset: 1652 + CVS date: 1997/05/20 16:24:33 + +commit 8f19c5cf59a93e1ae56ec1854d374208781eca51 +Author: ewt +Date: Tue May 20 16:21:17 1997 +0000 + + remove (none) entries during --setperms, --setugids + + CVS patchset: 1651 + CVS date: 1997/05/20 16:21:17 + +commit f770c2a33da106bf98626a18427d353f8e9f7d4e +Author: ewt +Date: Tue May 20 16:19:45 1997 +0000 + + Use :shescape for --setugids, --setperms + + CVS patchset: 1650 + CVS date: 1997/05/20 16:19:45 + +commit 334697c68fe9008b15ed8172ff871039ac642131 +Author: ewt +Date: Tue May 20 16:16:54 1997 +0000 + + Added :shescape query format tag + + CVS patchset: 1649 + CVS date: 1997/05/20 16:16:54 + +commit 49afbf25a16ce997c1e9e6f3ef74da1fa9d9032a +Author: ewt +Date: Tue May 20 15:57:39 1997 +0000 + + Moved includes of miscfn.h to the top. + + CVS patchset: 1648 + CVS date: 1997/05/20 15:57:39 + +commit 12bb20628971224eeada04763ef7cceb0fcc0a35 +Author: ewt +Date: Tue May 20 15:42:49 1997 +0000 + + *** empty log message *** + + CVS patchset: 1647 + CVS date: 1997/05/20 15:42:49 + +commit aeb65017bbce8e790680e7f816af16aac854066b +Author: ewt +Date: Tue May 20 15:42:27 1997 +0000 + + Added more includes of and for AIX + + CVS patchset: 1646 + CVS date: 1997/05/20 15:42:27 + +commit 34110c1694d871015d2c0e48c9da41b3ca226c6d +Author: ewt +Date: Tue May 20 15:29:59 1997 +0000 + + Use a more portable alternative to 'id -u' + + CVS patchset: 1645 + CVS date: 1997/05/20 15:29:59 + +commit c5c46a7c386df074a4f8311b5614f85028ec9729 +Author: ewt +Date: Tue May 20 15:28:25 1997 +0000 + + Use lchown() if it's available + + CVS patchset: 1644 + CVS date: 1997/05/20 15:28:25 + +commit d17a80d764203329c780587027ee3e4d2c81d0a0 +Author: ewt +Date: Mon May 19 14:09:35 1997 +0000 + + Guess chown doesn't follow symlinks w/ configure is run by non-root user. + + CVS patchset: 1643 + CVS date: 1997/05/19 14:09:35 + +commit d532969bf3b0211ca3aa409ec15a48984dfd6440 +Author: ewt +Date: Mon May 19 14:05:32 1997 +0000 + + Fixed some typos in verify.c for CHOWN_FOLLOWS_SYMLINK case + + CVS patchset: 1642 + CVS date: 1997/05/19 14:05:32 + +commit 379067dcddc784fe557ae361f73c8e878e063986 +Author: ewt +Date: Fri May 16 18:41:25 1997 +0000 + + Added de, pt-br catalogs to file list. + + CVS patchset: 1641 + CVS date: 1997/05/16 18:41:25 + +commit f899d97420345333854f2b4ec78cb1b8bb24c111 +Author: ewt +Date: Fri May 16 15:55:47 1997 +0000 + + Updated rpm.spec for 2.4. + + CVS patchset: 1640 + CVS date: 1997/05/16 15:55:47 + +commit 2006e2ea37fb4ea343d899e07924b362bfc66744 +Author: ewt +Date: Fri May 16 15:33:31 1997 +0000 + + *** empty log message *** + + CVS patchset: 1639 + CVS date: 1997/05/16 15:33:31 + +commit 1296efb89ab5a5098702dff5413383d71d9c2314 +Author: ewt +Date: Fri May 16 15:32:57 1997 +0000 + + Applied changes for AIX. This involved using if it's available. + + CVS patchset: 1638 + CVS date: 1997/05/16 15:32:57 + +commit 95eca9397293a0d1a1d7eccad08e8ed8ebc0b1c0 +Author: ewt +Date: Fri May 16 15:25:31 1997 +0000 + + Don't use fchdir() as it's not terribly portable. + + CVS patchset: 1637 + CVS date: 1997/05/16 15:25:31 + +commit d526f6299b4d31f0dbe4cc48453b64fef2124be3 +Author: ewt +Date: Thu May 15 15:24:48 1997 +0000 + + *** empty log message *** + + CVS patchset: 1636 + CVS date: 1997/05/15 15:24:48 + +commit e324da522d9455f360592a1a9b9f8282a2609ce0 +Author: ewt +Date: Thu May 15 15:19:56 1997 +0000 + + If CHOWN_FOLLOWS_SYMLINK is set: + 1) don't set the owner/group of symlinks during cpio expansion + 2) don't verify the owner/group of symlinks + + CVS patchset: 1635 + CVS date: 1997/05/15 15:19:56 + +commit 50a49ee9ed1267d1d044988b92cdefee3db09cbd +Author: ewt +Date: Thu May 15 15:10:42 1997 +0000 + + *** empty log message *** + + CVS patchset: 1634 + CVS date: 1997/05/15 15:10:42 + +commit 1a382cc365e7c7c1fb6fe58d6e4f4f1030130f8e +Author: ewt +Date: Thu May 15 15:09:44 1997 +0000 + + Added --enable-broken-chmod + + CVS patchset: 1633 + CVS date: 1997/05/15 15:09:44 + +commit 555fd3176d2eaa304725b53a8a8c9351700b5104 +Author: ewt +Date: Thu May 15 14:40:20 1997 +0000 + + added packager and url to default -qi output + + CVS patchset: 1632 + CVS date: 1997/05/15 14:40:20 + +commit ba03c6c1f8667f2ef994ecf4d6bd89a0397e1a92 +Author: ewt +Date: Thu May 15 14:32:24 1997 +0000 + + Check for chown() following symlinks + + CVS patchset: 1631 + CVS date: 1997/05/15 14:32:24 + +commit 58166a9c323d8afff48b738d398a4e984bb013dc +Author: ewt +Date: Thu May 15 14:08:52 1997 +0000 + + Fix things up for SunOS + + CVS patchset: 1630 + CVS date: 1997/05/15 14:08:52 + +commit 7ce7d42fb627a5707b1fd37271158d14b8d9ed53 +Author: ewt +Date: Thu May 15 14:04:39 1997 +0000 + + Include "miscfn.h" in a few more places. + + CVS patchset: 1629 + CVS date: 1997/05/15 14:04:39 + +commit c312659a879d98343c4a7179e1f86994db4b1d5d +Author: ewt +Date: Thu May 15 14:02:36 1997 +0000 + + Automatically define NEED_TIMEZONE + + CVS patchset: 1628 + CVS date: 1997/05/15 14:02:36 + +commit 1cc429b054fd7f5215a098eade1589e21272fd7f +Author: ewt +Date: Thu May 15 14:01:41 1997 +0000 + + Include if it's available. + + CVS patchset: 1627 + CVS date: 1997/05/15 14:01:41 + +commit c6aac8432921d5c5586cb29f81cd85831a473e75 +Author: ewt +Date: Thu May 15 14:00:44 1997 +0000 + + Don't segv if we can't do a uid to uname conversion + + CVS patchset: 1626 + CVS date: 1997/05/15 14:00:44 + +commit 9b93a43a010691c149a811e2480c12bcb2d58c17 +Author: ewt +Date: Thu May 15 14:00:14 1997 +0000 + + Allow --dbpath during --rebuildbdb + + CVS patchset: 1625 + CVS date: 1997/05/15 14:00:14 + +commit d969bbac6f416e62a6f06c8f5cd4042937ef3a63 +Author: ewt +Date: Wed May 14 18:43:37 1997 +0000 + + New translation from Karl Eichwalder + + CVS patchset: 1624 + CVS date: 1997/05/14 18:43:37 + +commit 43e43407b8eaf58a1afa5020987e324cbaec5b9d +Author: ewt +Date: Wed May 14 18:42:47 1997 +0000 + + Fixed some minor problems. + + CVS patchset: 1623 + CVS date: 1997/05/14 18:42:47 + +commit 5c28a3c5416dd27a186f9838028f4f4917287ffe +Author: ewt +Date: Wed May 14 18:39:43 1997 +0000 + + Made some missing rpmrc entries a fatal error + + CVS patchset: 1622 + CVS date: 1997/05/14 18:39:43 + +commit 9970538dee53c7732fb1baeaddf5d1bf58fcd704 +Author: ewt +Date: Wed May 14 18:33:00 1997 +0000 + + Removed conflicting realpath() declaration. + + CVS patchset: 1621 + CVS date: 1997/05/14 18:33:00 + +commit 3f88e268a6664a945bd83309ea1a5d572ae266f5 +Author: ewt +Date: Wed May 14 18:32:18 1997 +0000 + + Create intermediate directories properly. + + CVS patchset: 1620 + CVS date: 1997/05/14 18:32:18 + +commit 91ef4108d5596d9038f040ef0b4a186ffb8f2aab +Author: ewt +Date: Wed May 14 18:31:17 1997 +0000 + + Try to handle solaris2.5.1 in configure better + + CVS patchset: 1619 + CVS date: 1997/05/14 18:31:17 + +commit 7df2d5037e31cd0e0714ce4b247dcb5669fccc21 +Author: ewt +Date: Mon May 12 13:28:15 1997 +0000 + + Added includes of miscfn.h + + CVS patchset: 1618 + CVS date: 1997/05/12 13:28:15 + +commit 2dfd1635794207b0332e5d6c278f446b40a2003f +Author: root +Date: Wed May 7 20:22:55 1997 +0000 + + fix cpio bug + fix spec file marking bug + + CVS patchset: 1617 + CVS date: 1997/05/07 20:22:55 + +commit 39422acd79561c6694e66083d16967cd7da0b715 +Author: ewt +Date: Wed May 7 20:08:11 1997 +0000 + + Fixed broken brackets in help document. + + CVS patchset: 1616 + CVS date: 1997/05/07 20:08:11 + +commit bd1ece83f25672ef7dfbbe5895a40f0a178bfa87 +Author: ewt +Date: Wed May 7 19:43:23 1997 +0000 + + = didn't work w/ long arguments + + CVS patchset: 1615 + CVS date: 1997/05/07 19:43:23 + +commit 49a247317a3b5a31f2a3f8a0ebe867aae78de077 +Author: ewt +Date: Wed May 7 19:27:21 1997 +0000 + + Include sys/socket.h if it's available + + CVS patchset: 1614 + CVS date: 1997/05/07 19:27:21 + +commit f3b683a4b0cbd32a4c29a76ef6804406362d7fd4 +Author: ewt +Date: Wed May 7 18:24:36 1997 +0000 + + *** empty log message *** + + CVS patchset: 1613 + CVS date: 1997/05/07 18:24:36 + +commit 24fcb1113e503ac878ca11a2586c6c741ce40e21 +Author: ewt +Date: Wed May 7 18:24:05 1997 +0000 + + Changed a bunch of bsearch() calls to work when sizeof(int) != sizeof(int *) + + CVS patchset: 1612 + CVS date: 1997/05/07 18:24:05 + +commit b00166a733e0a31db68e0a2f60706b10cde60b3c +Author: ewt +Date: Wed May 7 15:16:14 1997 +0000 + + Handle NEED_TIMEZONE, NEED_MYREALLOC + + CVS patchset: 1611 + CVS date: 1997/05/07 15:16:14 + +commit 80a62f50911186070ace7f1ed09b2ae25c398589 +Author: ewt +Date: Wed May 7 15:15:42 1997 +0000 + + Look for limits.h (strtol.c uses it) + + CVS patchset: 1610 + CVS date: 1997/05/07 15:15:42 + +commit 3272c3d1f1ebcb0fa0689f9c19afd03c7f19a2ca +Author: ewt +Date: Wed May 7 15:11:46 1997 +0000 + + *** empty log message *** + + CVS patchset: 1609 + CVS date: 1997/05/07 15:11:46 + +commit 67c8991eb0560035783f1e44ce6b757c61509ec4 +Author: ewt +Date: Wed May 7 15:09:39 1997 +0000 + + *** empty log message *** + + CVS patchset: 1608 + CVS date: 1997/05/07 15:09:39 + +commit 9c2a152c85f5c6b97f25ac4b0b355d6a816fe967 +Author: ewt +Date: Wed May 7 15:07:50 1997 +0000 + + Added config.h, miscfn.h header files + + CVS patchset: 1607 + CVS date: 1997/05/07 15:07:50 + +commit 140af1251243e1cad1ba92b95c1017ee5a918567 +Author: ewt +Date: Wed May 7 15:06:12 1997 +0000 + + Added include of config.h + + CVS patchset: 1606 + CVS date: 1997/05/07 15:06:12 + +commit 5b9ad7af53576de5a03c304a741a063a30036522 +Author: ewt +Date: Wed May 7 15:05:49 1997 +0000 + + Added includes of config.h, miscfn.h + + CVS patchset: 1605 + CVS date: 1997/05/07 15:05:49 + +commit 00237aeb99f0b0a1321c6dbcd61dace77096b8aa +Author: ewt +Date: Wed May 7 15:05:26 1997 +0000 + + added NEED_TIMEZONE, NEED_MYREALLOC + + CVS patchset: 1604 + CVS date: 1997/05/07 15:05:26 + +commit 5ccef4733df2bb9278439a964bdcc911f58903f4 +Author: ewt +Date: Wed May 7 15:05:05 1997 +0000 + + Protoype realpath() if it's not provided by libc. + + CVS patchset: 1603 + CVS date: 1997/05/07 15:05:05 + +commit bb90619b9303fc6c66121b4792172586c5a09d7d +Author: ewt +Date: Wed May 7 15:04:34 1997 +0000 + + Check for strerror, strtol, strtoul. + + CVS patchset: 1602 + CVS date: 1997/05/07 15:04:34 + +commit fee8c944955653af4344a3d3d68d5363c3023ab3 +Author: ewt +Date: Wed May 7 15:02:23 1997 +0000 + + Includes config.h, miscfn.h + + CVS patchset: 1601 + CVS date: 1997/05/07 15:02:23 + +commit a5681a3d0c36411edd808eb6283a7aa0b798a832 +Author: ewt +Date: Wed May 7 14:56:06 1997 +0000 + + Minor cleanups. + + CVS patchset: 1600 + CVS date: 1997/05/07 14:56:06 + +commit 0637a12f1d92a6d97142f01b8ac56a704512254c +Author: ewt +Date: Tue May 6 23:54:28 1997 +0000 + + 1) include config.h first + 2) conditionaly include alloca.h + 3) use ofF_t instead of loff_t as it appears to be more portable + + CVS patchset: 1599 + CVS date: 1997/05/06 23:54:28 + +commit 2b8a1d28e5011306eeb87fc13ef6d2133416b1e0 +Author: ewt +Date: Tue May 6 18:19:19 1997 +0000 + + Source package installs use built in cpio now. + + CVS patchset: 1598 + CVS date: 1997/05/06 18:19:19 + +commit ab932fa5d80ecf50b3d459b2d7d5c4196dc7e989 +Author: ewt +Date: Tue May 6 17:38:05 1997 +0000 + + Added support for hard links. + + CVS patchset: 1597 + CVS date: 1997/05/06 17:38:05 + +commit 0a02b64c726bce0763e71ba393ad2740c2ecdd9f +Author: ewt +Date: Tue May 6 15:27:46 1997 +0000 + + Added callbacks to cpio to allow -h to work. + + CVS patchset: 1596 + CVS date: 1997/05/06 15:27:46 + +commit 260850e9b840b6b745121a8c7c9fe8d70b116d7e +Author: ewt +Date: Mon May 5 20:46:58 1997 +0000 + + Doesn't use cpio to unpack archives anymore... + + CVS patchset: 1595 + CVS date: 1997/05/05 20:46:58 + +commit 060b551100696ae3629eb7a701bb265668bb30cd +Author: ewt +Date: Sat May 3 16:24:05 1997 +0000 + + Fixed rengade .po to .mo + + CVS patchset: 1594 + CVS date: 1997/05/03 16:24:05 + +commit 21ccd4d5db26cfbdd70c8a467649c662f698ad8d +Author: ewt +Date: Fri May 2 18:09:41 1997 +0000 + + Needed to include miscfn.h + + CVS patchset: 1593 + CVS date: 1997/05/02 18:09:41 + +commit 25182162c55f3761846713662bf1a105a5eef570 +Author: ewt +Date: Fri May 2 18:04:15 1997 +0000 + + The gzipbin transition added a %d where there should have been a %s. + + CVS patchset: 1592 + CVS date: 1997/05/02 18:04:15 + +commit f7d09bd88767c8feaa19105b7de1ab179f6bf5f3 +Author: ewt +Date: Fri May 2 15:48:07 1997 +0000 + + *** empty log message *** + + CVS patchset: 1591 + CVS date: 1997/05/02 15:48:07 + +commit 250bbe29e17e638065df09a99f71bffdb57c2b02 +Author: ewt +Date: Fri May 2 15:47:37 1997 +0000 + + Use strings.h on SCO (there's probably a better way of doing this, but this + will work so why bother?). + + CVS patchset: 1590 + CVS date: 1997/05/02 15:47:37 + +commit 4a07d308e2b5107de891028a4703ceff1b78a979 +Author: ewt +Date: Fri May 2 15:05:17 1997 +0000 + + *** empty log message *** + + CVS patchset: 1589 + CVS date: 1997/05/02 15:05:17 + +commit 62fdd6be18d8227a824c4aaf2c3e3e70456c99ba +Author: ewt +Date: Fri May 2 15:04:09 1997 +0000 + + Fixed "cannot open /var/lib/rpm/package.rpm" to use dbpath setting + + CVS patchset: 1588 + CVS date: 1997/05/02 15:04:09 + +commit e37769828624bbb176a287fef1a0ed5a5b47bb3c +Author: ewt +Date: Fri May 2 15:00:38 1997 +0000 + + Don't set owner and group during a "make install" + + CVS patchset: 1587 + CVS date: 1997/05/02 15:00:38 + +commit 8741db86ed3c6867c7f01d579c902889576b408c +Author: ewt +Date: Fri May 2 00:52:23 1997 +0000 + + Added portugese (brazilian) translation. + + CVS patchset: 1586 + CVS date: 1997/05/02 00:52:23 + +commit 5c6641eb47708e76fea3b829913f268f66db26fe +Author: ewt +Date: Fri May 2 00:49:42 1997 +0000 + + Fixed some typos in strings. + + CVS patchset: 1585 + CVS date: 1997/05/02 00:49:42 + +commit 4fbd5adc4417267c7e6ccd8ebc4932e34c053847 +Author: ewt +Date: Thu May 1 21:07:46 1997 +0000 + + Made code recognize gzipbin rpmrc entry. + + CVS patchset: 1584 + CVS date: 1997/05/01 21:07:46 + +commit a4beb010aa937a343e5853d1dfc5f6fd61f755df +Author: ewt +Date: Thu May 1 19:08:15 1997 +0000 + + Look for gzip in path and store binary to use in /usr/lib/rpmrc + + CVS patchset: 1583 + CVS date: 1997/05/01 19:08:15 + +commit b86bcefc78929bb9ad1593e625c9d630359c2012 +Author: ewt +Date: Thu May 1 19:07:43 1997 +0000 + + 1) Added search for gzip binary + 2) Don't die if gzip/cpio not found, just look in path at run time + 3) Fixed problems with stat macro detection + + CVS patchset: 1582 + CVS date: 1997/05/01 19:07:43 + +commit b1d351ab8562420caa70b628a38a66c475c5057a +Author: root +Date: Thu May 1 17:32:04 1997 +0000 + + tweak trigger variable naming + + CVS patchset: 1581 + CVS date: 1997/05/01 17:32:04 + +commit 0bf49c3c45402557f3ebd8e6bce5d57c58ed1626 +Author: root +Date: Thu May 1 17:26:56 1997 +0000 + + tweak naming of trigger variables + + CVS patchset: 1580 + CVS date: 1997/05/01 17:26:56 + +commit d3b8bdddd3d4f0174a4a1c22dcd22ef092f33088 +Author: root +Date: Thu May 1 17:22:35 1997 +0000 + + handle files in Requires/Provides/Conflicts + + CVS patchset: 1579 + CVS date: 1997/05/01 17:22:35 + +commit b2a7ff43f32e891f75d6b2d57fdab100c6a056d4 +Author: ewt +Date: Thu May 1 15:15:11 1997 +0000 + + Made messages translatable. + + CVS patchset: 1578 + CVS date: 1997/05/01 15:15:11 + +commit d4597b438ccfc4c92bba65094cc2d9099553b273 +Author: ewt +Date: Thu May 1 15:14:52 1997 +0000 + + Added more i18n's files + + CVS patchset: 1577 + CVS date: 1997/05/01 15:14:52 + +commit 609ec0acf9fd7db284260ec2ba26c9ce18a23ebc +Author: ewt +Date: Thu May 1 15:14:26 1997 +0000 + + Added @LIBINTL@ to link line + + CVS patchset: 1576 + CVS date: 1997/05/01 15:14:26 + +commit d474db281d8bb22ffee562d20b25365b90614500 +Author: ewt +Date: Thu May 1 14:58:28 1997 +0000 + + Include miscfn.h + + CVS patchset: 1575 + CVS date: 1997/05/01 14:58:28 + +commit 73c573b957dd437bd515e09d6ff755294b612bf0 +Author: ewt +Date: Thu May 1 14:54:31 1997 +0000 + + New translations from Karl Eichwalder + + CVS patchset: 1574 + CVS date: 1997/05/01 14:54:31 + +commit 22a9fe43e3fcafb3cea9231e748b78f532422ef9 +Author: ewt +Date: Thu May 1 14:53:48 1997 +0000 + + fixed minor typo + + CVS patchset: 1573 + CVS date: 1997/05/01 14:53:48 + +commit 890f8653f5b7003c7c42129fb064691eea17d6b4 +Author: ewt +Date: Thu May 1 14:51:16 1997 +0000 + + needs to include "miscfn.h" + + CVS patchset: 1572 + CVS date: 1997/05/01 14:51:16 + +commit eae23ccc642aef0dbcd606768df2aecceb9656c7 +Author: ewt +Date: Thu May 1 14:50:22 1997 +0000 + + need to handle conflictsindex in rpmdbMoveDatabase() and rpmdbRenameDatabase() + + CVS patchset: 1571 + CVS date: 1997/05/01 14:50:22 + +commit 36166b76bb1764c9516f301aa769ed4189ba984e +Author: ewt +Date: Wed Apr 30 21:30:55 1997 +0000 + + Added includes of "miscfn.h". + + CVS patchset: 1570 + CVS date: 1997/04/30 21:30:55 + +commit 71e9bc91501aca955b4d83703761fffbcd296e9e +Author: ewt +Date: Wed Apr 30 19:32:57 1997 +0000 + + *** empty log message *** + + CVS patchset: 1569 + CVS date: 1997/04/30 19:32:57 + +commit 6dcdbecf9040559a2cd24fc86cbb955689ddc766 +Author: ewt +Date: Wed Apr 30 19:28:09 1997 +0000 + + Added file (anything that begins with a leading /) dependencies. + + CVS patchset: 1568 + CVS date: 1997/04/30 19:28:09 + +commit 2cd6cf055dc66a4f613e9a41e3514390d0ae8ec4 +Author: ewt +Date: Wed Apr 30 19:26:53 1997 +0000 + + *** empty log message *** + + CVS patchset: 1567 + CVS date: 1997/04/30 19:26:53 + +commit 8dc6da8e117002d7783736a2e3bbfe64c4e8157d +Author: ewt +Date: Wed Apr 30 19:26:32 1997 +0000 + + Fixed problem with 8 character user names. + + CVS patchset: 1566 + CVS date: 1997/04/30 19:26:32 + +commit 377e15bc2d5427a9e463e35c8fc1db0488c35943 +Author: ewt +Date: Wed Apr 30 18:03:59 1997 +0000 + + Fixed archive rule (recovering from changes for CVS). + + CVS patchset: 1565 + CVS date: 1997/04/30 18:03:59 + +commit 34211b9ecca45ec3a0b16e8421c0c9b4f6ce37c6 +Author: ewt +Date: Wed Apr 30 18:03:27 1997 +0000 + + Changed ucb rules, look for /usr/ucblib. + + CVS patchset: 1564 + CVS date: 1997/04/30 18:03:27 + +commit acb0a9c9289e0b57c735b42321ac3dbd37e576c4 +Author: ewt +Date: Wed Apr 30 15:32:40 1997 +0000 + + Look for S_IFSOCK and define it as 0 if it doesn't exist (this is for SCO). + + CVS patchset: 1563 + CVS date: 1997/04/30 15:32:40 + +commit a2bc26c4c4f5c8b5d48614e781999840d899306e +Author: ewt +Date: Wed Apr 30 15:32:22 1997 +0000 + + changed indentation (oooh...) + + CVS patchset: 1562 + CVS date: 1997/04/30 15:32:22 + +commit bc51bb881a64be21956465ec52fdcdbf199a9494 +Author: ewt +Date: Tue Apr 29 02:45:19 1997 +0000 + + Made many more strings in the toplevel interface translatable. + + CVS patchset: 1561 + CVS date: 1997/04/29 02:45:19 + +commit be4b74cd260a0d0b7246b997af2193614f72992e +Author: ewt +Date: Mon Apr 28 21:17:06 1997 +0000 + + use -F for cvs tag, not -f + + CVS patchset: 1560 + CVS date: 1997/04/28 21:17:06 + +commit 94c6b4b30db11ed2ba7260454ebaf9f604bf68ff +Author: ewt +Date: Mon Apr 28 21:14:50 1997 +0000 + + pass -f to cvs tag + + CVS patchset: 1559 + CVS date: 1997/04/28 21:14:50 + +commit 5773db483c95c43eabe5890745dc9136e0a2dd36 +Author: ewt +Date: Mon Apr 28 21:14:01 1997 +0000 + + 1) added r in front of tag for CVS + 2) make distclean should remove lib-rpmrc + + CVS patchset: 1558 + CVS date: 1997/04/28 21:14:01 + +commit f2f2d31fd3a3a80870d977d517ba7baa96e1e7bd +Author: ewt +Date: Mon Apr 28 21:01:01 1997 +0000 + + rpmFindByFile() removes duplicate and trailing / providing weak filename + canonicaliaztion. + + CVS patchset: 1557 + CVS date: 1997/04/28 21:01:01 + +commit 33553fb3f719a1e67c0ea2e6fbd076ce25c26fb5 +Author: ewt +Date: Mon Apr 28 20:52:18 1997 +0000 + + Moved rpmrc, rpmpopt back to $(libdir) as @sysconfdir@ defaults to /usr/etc + (blech) and they aren't config files anyway. @datadir@ might make more + sense though? + + CVS patchset: 1556 + CVS date: 1997/04/28 20:52:18 + +commit d28996c0935d3cfcc8b4d55f4f19a056c35fbc50 +Author: ewt +Date: Mon Apr 28 20:48:41 1997 +0000 + + Fixed verify script code to compile. + + CVS patchset: 1555 + CVS date: 1997/04/28 20:48:41 + +commit 84de5ba32e199f4ee0e6e09b7ab6b822dfebf746 +Author: ewt +Date: Mon Apr 28 20:45:05 1997 +0000 + + - changed LIBRPMRC_FILENAME, LIBRPMALIAS_FILENAME, RPMNLSDIR + directories to @sysconfdir@, @sysconfdir@, and @datadir@ to + better conform with autoconf + - set RPM_INSTALL_PREFIX environment variable when running + verify scripts + - beginnings of SCO support (though I suspect it will take one + or two more iterations to get it right) + - switched to CVS and updated some Makefile rules + - look for gethostbyname() instead of gethostname() in -nsl + (this could break some things) + - added check for strcasecmp() in -lucb on systems which don't + have strcasecmp() in libc + - don't build -static on hpux10 + - don't try and NLS empty strings + - changed index() call to strchr() in macro code + - include in build/spec.c for various platforms + - added update-po rule to po/Makefile.in + - updated de.po (thanks to Karl Eichwalder) + + CVS patchset: 1554 + CVS date: 1997/04/28 20:45:05 + +commit 0db7dadc02864b676f21a91af2bd8be85983ab29 +Author: root +Date: Wed Apr 23 16:03:07 1997 +0000 + + duh + + CVS patchset: 1553 + CVS date: 1997/04/23 16:03:07 + +commit 7f4bfe283c3e8db9857f0c3e3417c4f2785c8247 +Author: root +Date: Wed Apr 16 20:51:04 1997 +0000 + + *** empty log message *** + + CVS patchset: 1552 + CVS date: 1997/04/16 20:51:04 + +commit 1c275172cccc647bc9f165691564a014b6d5c507 +Author: root +Date: Wed Apr 16 20:49:22 1997 +0000 + + handle source files with bad owner/group + + CVS patchset: 1551 + CVS date: 1997/04/16 20:49:22 + +commit f31e630997775b12769528f7af64853d66969085 +Author: ewt +Date: Wed Apr 16 20:39:48 1997 +0000 + + *** empty log message *** + + CVS patchset: 1550 + CVS date: 1997/04/16 20:39:48 + +commit a9215c3384c766766b9513fe25e2d9628216bf4c +Author: ewt +Date: Wed Apr 16 20:39:24 1997 +0000 + + version 2.3.11 + + CVS patchset: 1549 + CVS date: 1997/04/16 20:39:24 + +commit eb5dbaa968e3bf2f3d63f6750a451e2a00ce8670 +Author: ewt +Date: Wed Apr 16 20:38:38 1997 +0000 + + fixed newlines + + CVS patchset: 1548 + CVS date: 1997/04/16 20:38:38 + +commit 11e17ce9af6e7581ea0104a2fbd6d2989c06ece1 +Author: root +Date: Wed Apr 16 15:51:25 1997 +0000 + + *** empty log message *** + + CVS patchset: 1547 + CVS date: 1997/04/16 15:51:25 + +commit c28af4df7884e2a063b134d6c59bc3da3afd2b96 +Author: root +Date: Wed Apr 16 15:50:37 1997 +0000 + + make tags case sensisitve (lower case) + + CVS patchset: 1546 + CVS date: 1997/04/16 15:50:37 + +commit 90083180cd3bd5bfd3d270add76d7602982bdac4 +Author: root +Date: Wed Apr 16 15:48:49 1997 +0000 + + make %define case sensitive (lower case) + + CVS patchset: 1545 + CVS date: 1997/04/16 15:48:49 + +commit e532d1fc16eb8535e0613a781b8f861cebd1ccce +Author: root +Date: Wed Apr 16 15:48:10 1997 +0000 + + make %patch and %setup case sensitive + + CVS patchset: 1544 + CVS date: 1997/04/16 15:48:10 + +commit c8a09d420496a2e24fe65ef0527e50204dbb0a48 +Author: root +Date: Wed Apr 16 15:34:00 1997 +0000 + + macros should be case insensitive + + CVS patchset: 1543 + CVS date: 1997/04/16 15:34:00 + +commit b444e52d2e209ca8a28016545d24486ee14d6d51 +Author: root +Date: Tue Apr 15 15:34:09 1997 +0000 + + *** empty log message *** + + CVS patchset: 1542 + CVS date: 1997/04/15 15:34:09 + +commit 8fe174e395a583b55fc54bd455fb88bec19f7e45 +Author: root +Date: Tue Apr 15 15:33:08 1997 +0000 + + strip trailing slahes from file names + don't set config flag on directories + + CVS patchset: 1541 + CVS date: 1997/04/15 15:33:08 + +commit 812d83035e2983c218831cf381a58e9b488ad98f +Author: ewt +Date: Tue Apr 15 14:42:12 1997 +0000 + + ignore config bit for direcrroies + + CVS patchset: 1540 + CVS date: 1997/04/15 14:42:12 + +commit 886e17e89bcd43e9dd1f11cc58255f47f594dbb2 +Author: ewt +Date: Tue Apr 15 14:42:08 1997 +0000 + + *** empty log message *** + + CVS patchset: 1539 + CVS date: 1997/04/15 14:42:08 + +commit 5a0f6288e693614ee189e6c5ea4e4b1f45d27ad6 +Author: root +Date: Tue Apr 15 02:23:52 1997 +0000 + + make unknown signature types terribly obvious + + CVS patchset: 1538 + CVS date: 1997/04/15 02:23:52 + +commit 97ad8f52e1d24befb632a7eeb4c5c8e8c0903b7c +Author: root +Date: Mon Apr 14 20:20:43 1997 +0000 + + *** empty log message *** + + CVS patchset: 1537 + CVS date: 1997/04/14 20:20:43 + +commit 1693698c405dfe253b82e291ba924152ee4f50e2 +Author: root +Date: Mon Apr 14 20:20:13 1997 +0000 + + added SOURCEURLn and PATCHURLm pacros + + CVS patchset: 1536 + CVS date: 1997/04/14 20:20:13 + +commit 5144e825ee12fadf64ec04659e08e725d70d5c63 +Author: root +Date: Mon Apr 14 20:05:43 1997 +0000 + + moved %doc/script handling to files.c + + CVS patchset: 1535 + CVS date: 1997/04/14 20:05:43 + +commit 6c38cbd1843cb50106a58772f52191ef0ae23974 +Author: root +Date: Mon Apr 14 20:05:12 1997 +0000 + + call finish_filelists where apprpriate + + CVS patchset: 1534 + CVS date: 1997/04/14 20:05:12 + +commit f4dd8dd1e6125e60356851e1e5c103c70ff8f257 +Author: root +Date: Mon Apr 14 20:04:18 1997 +0000 + + added finish_filelists, moved parseForDocFiles here from spec.c + and moved file -f provcessing vocode from process_filelist() + rto finish_filelists + + CVS patchset: 1533 + CVS date: 1997/04/14 20:04:18 + +commit 5458db1cf4a885ae55e3b58cb63d8365777b7c4b +Author: root +Date: Mon Apr 14 20:04:03 1997 +0000 + + added finish_filelists + + CVS patchset: 1532 + CVS date: 1997/04/14 20:04:03 + +commit c73a4c2a4d782145286c05753703b5956f5bf746 +Author: root +Date: Mon Apr 14 20:03:48 1997 +0000 + + *** empty log message *** + + CVS patchset: 1531 + CVS date: 1997/04/14 20:03:48 + +commit f28df5d5c1d82b998e941a6b7cd31c8f33e6be1b +Author: root +Date: Mon Apr 14 18:40:23 1997 +0000 + + add SOURCEn and PATCHn prefdefined macros + + CVS patchset: 1530 + CVS date: 1997/04/14 18:40:23 + +commit 23fbf53b074763766dc22a823ead8479bd9e3688 +Author: root +Date: Mon Apr 14 17:17:43 1997 +0000 + + *** empty log message *** + + CVS patchset: 1529 + CVS date: 1997/04/14 17:17:43 + +commit 23048b1684b77212f6abaafa485c6bca08ac81fe +Author: root +Date: Thu Apr 10 19:15:28 1997 +0000 + + oops - a failed listcheck never terminated + + CVS patchset: 1528 + CVS date: 1997/04/10 19:15:28 + +commit cbf8d3156771b52c4eb37d47f276e4616009fb71 +Author: root +Date: Thu Apr 10 18:56:31 1997 +0000 + + don't parse macro stuff inside non-reading conditionals + + CVS patchset: 1527 + CVS date: 1997/04/10 18:56:31 + +commit 3f66dedef3edbfcefcd213424de09db35c9f016b +Author: ewt +Date: Wed Apr 9 15:53:54 1997 +0000 + + *** empty log message *** + + CVS patchset: 1526 + CVS date: 1997/04/09 15:53:54 + +commit 5b1d41cb33f297b6adc319fe1936ffeeded10cb6 +Author: ewt +Date: Wed Apr 9 15:53:22 1997 +0000 + + changes for --removeall (or wahtever that caused) broke some things + + CVS patchset: 1525 + CVS date: 1997/04/09 15:53:22 + +commit 899033811a6920a8d9e7aa97a1e334b1ec64541d +Author: ewt +Date: Wed Apr 9 15:52:56 1997 +0000 + + changed to version 2.3.10 + + CVS patchset: 1524 + CVS date: 1997/04/09 15:52:56 + +commit 06109421af4b100dee7327368e44c6c70fc6460f +Author: root +Date: Tue Apr 8 15:44:26 1997 +0000 + + allow %doc and %attr()on a single line + I think it may still break if the %doc is at the end of the line + but who cares + + CVS patchset: 1523 + CVS date: 1997/04/08 15:44:26 + +commit 0ce0902ae5a26e1dbff959e5436d37d7b59bfaa1 +Author: ewt +Date: Tue Apr 1 22:52:39 1997 +0000 + + marc is a dork + + CVS patchset: 1522 + CVS date: 1997/04/01 22:52:39 + +commit a1d5e05c78ff875c52b763f8f7b7eaad2bd2a614 +Author: root +Date: Tue Apr 1 20:59:33 1997 +0000 + + reset firstFree when resetting macros + + CVS patchset: 1521 + CVS date: 1997/04/01 20:59:33 + +commit 4252a906d1c1c0e89314a231ff3e7550507a8580 +Author: root +Date: Mon Mar 31 20:25:54 1997 +0000 + + Initial revision + + CVS patchset: 1520 + CVS date: 1997/03/31 20:25:54 + +commit 434454d7a4d538a3060365e64c17ed524b793c9b +Author: root +Date: Mon Mar 31 20:18:04 1997 +0000 + + added warning + + CVS patchset: 1519 + CVS date: 1997/03/31 20:18:04 + +commit aa55856e82d5d30d2b7e85e9c5334e0935640ef7 +Author: root +Date: Mon Mar 31 20:17:11 1997 +0000 + + *** empty log message *** + + CVS patchset: 1518 + CVS date: 1997/03/31 20:17:11 + +commit 8a7ad17640b1078af3d91c204ebc36f18980719d +Author: ewt +Date: Mon Mar 31 20:15:41 1997 +0000 + + added support for UNINSTALL_ALLMATCHES + + CVS patchset: 1517 + CVS date: 1997/03/31 20:15:41 + +commit fca4fd305164ec05ca2c2dea13ff1096a8333b61 +Author: ewt +Date: Mon Mar 31 20:15:31 1997 +0000 + + added --allmatches + + CVS patchset: 1516 + CVS date: 1997/03/31 20:15:31 + +commit e82919e6de7d1f661064c426b407c2901dfa2a24 +Author: ewt +Date: Mon Mar 31 20:15:23 1997 +0000 + + fixed \r\n stuff + + CVS patchset: 1515 + CVS date: 1997/03/31 20:15:23 + +commit 57e9dfb3a3798eaba66a320b4e9648ad02aeac59 +Author: ewt +Date: Mon Mar 31 20:15:14 1997 +0000 + + *** empty log message *** + + CVS patchset: 1514 + CVS date: 1997/03/31 20:15:14 + +commit 257c5aede44aa25365babfe96faa884f2a785db1 +Author: ewt +Date: Mon Mar 31 19:47:55 1997 +0000 + + *** empty log message *** + + CVS patchset: 1513 + CVS date: 1997/03/31 19:47:55 + +commit 45c8e72b5f3c72ac1ee211de34ba4ea03b7fe171 +Author: ewt +Date: Mon Mar 31 15:47:46 1997 +0000 + + *** empty log message *** + + CVS patchset: 1512 + CVS date: 1997/03/31 15:47:46 + +commit 92f08cd2f468916a6503b3ccc33a95d4203b7f8d +Author: root +Date: Mon Mar 31 14:16:11 1997 +0000 + + %macro handling + fix bug where last "part" was not added to header + + CVS patchset: 1511 + CVS date: 1997/03/31 14:16:11 + +commit 83bc9d61848e75fb3570fe4d98e73f19dc2813c1 +Author: root +Date: Mon Mar 31 14:14:20 1997 +0000 + + added %macro handling on %files -f + added %config(missingok noreplace) + process whole file list before failing + clean up return codes (0 = success) + + CVS patchset: 1510 + CVS date: 1997/03/31 14:14:20 + +commit 5682d91f286aacbe0b26e0dab03e8d413a450461 +Author: root +Date: Mon Mar 31 14:13:21 1997 +0000 + + Initial revision + + CVS patchset: 1509 + CVS date: 1997/03/31 14:13:21 + +commit 33593bf30275c5035ddaf18057180be7097cb6be +Author: root +Date: Mon Mar 31 14:13:00 1997 +0000 + + added macro.o + + CVS patchset: 1508 + CVS date: 1997/03/31 14:13:00 + +commit f8fa3e50ed439a816097e03046d0af30aef4047b +Author: root +Date: Mon Mar 31 14:12:12 1997 +0000 + + added RPMFILE_MISSINGOK and RPMFILE_NOREPLACE + + CVS patchset: 1507 + CVS date: 1997/03/31 14:12:12 + +commit 449ffd13fd1bc14fbf083df0de66e40570226519 +Author: ewt +Date: Fri Mar 28 19:42:41 1997 +0000 + + 2.3.9 + + CVS patchset: 1506 + CVS date: 1997/03/28 19:42:41 + +commit a8652598dc4c446fcb9df97c01fc22bb1f09c697 +Author: ewt +Date: Fri Mar 28 19:41:43 1997 +0000 + + *** empty log message *** + + CVS patchset: 1505 + CVS date: 1997/03/28 19:41:43 + +commit 8fc43321cd96d8bbae46bfbe3e0c79dd6310d5b8 +Author: root +Date: Fri Mar 28 18:01:54 1997 +0000 + + fixed the broken md5 logic + + CVS patchset: 1504 + CVS date: 1997/03/28 18:01:54 + +commit aa64e9fdd7b54737fccd67cc91365d8b6d141b58 +Author: ewt +Date: Fri Mar 28 17:46:34 1997 +0000 + + added more support for broken md5 code + + CVS patchset: 1503 + CVS date: 1997/03/28 17:46:34 + +commit d27dd974ec3edcb20490974d939e80b8bc17fa43 +Author: ewt +Date: Fri Mar 28 17:45:08 1997 +0000 + + made WORDS_BIGENDIAN look like the rest of config.h + + CVS patchset: 1502 + CVS date: 1997/03/28 17:45:08 + +commit 68a71dc3629edff71bae880503788a9a8a1569aa +Author: ewt +Date: Fri Mar 28 17:44:38 1997 +0000 + + added RPMSIGTAG_LEMD5_2 brokenness + + CVS patchset: 1501 + CVS date: 1997/03/28 17:44:38 + +commit 587687ee47aff344ddd9a77e04b6500963b35f48 +Author: root +Date: Fri Mar 28 03:22:36 1997 +0000 + + add WORDS_BIGENDIAN + + CVS patchset: 1500 + CVS date: 1997/03/28 03:22:36 + +commit ab1d659e515be796f968d65d2b68800d2e7f9853 +Author: ewt +Date: Sun Mar 23 19:52:07 1997 +0000 + + rewrote %setup expanion to use popt and allow multiple -a, -b arguments + + CVS patchset: 1499 + CVS date: 1997/03/23 19:52:07 + +commit 37f6056dd0bb08eb03c724695cc7ffba78ab88d9 +Author: ewt +Date: Sun Mar 23 18:51:07 1997 +0000 + + version 2.3.9 + + CVS patchset: 1498 + CVS date: 1997/03/23 18:51:07 + +commit 59e490ffef9898688ae35a198f58e1dbf78fa6ee +Author: ewt +Date: Fri Mar 21 23:57:16 1997 +0000 + + 1) remove spurious printf + 2) cleanup up pipes a bit + + CVS patchset: 1497 + CVS date: 1997/03/21 23:57:16 + +commit e5415fd5dacfc21c3edfaf166e352381360844b7 +Author: ewt +Date: Fri Mar 21 15:50:09 1997 +0000 + + send '\n\r' not just '\n' + + CVS patchset: 1496 + CVS date: 1997/03/21 15:50:09 + +commit f62f50151ab343a69a4775f629dc88de5d9b983c +Author: ewt +Date: Thu Mar 20 15:55:58 1997 +0000 + + 1) close pipes after dup'ing + 2) don't close stderr when running find-* -- it just makes problems harder + to find + + CVS patchset: 1495 + CVS date: 1997/03/20 15:55:58 + +commit 677b95bbd982ba5fb76800d2752766933cd27e60 +Author: ewt +Date: Thu Mar 20 15:55:31 1997 +0000 + + fixed typos + + CVS patchset: 1494 + CVS date: 1997/03/20 15:55:31 + +commit 5c343ab3c18e4465ff54ae2c1d4db7c3ba352883 +Author: ewt +Date: Thu Mar 20 15:19:51 1997 +0000 + + added HAVE_S_ISLNK and HAVE_S_ISSOCK + + CVS patchset: 1493 + CVS date: 1997/03/20 15:19:51 + +commit 88cf717a10b334d6ab3b18fb39af7c477fdeea4a +Author: ewt +Date: Thu Mar 20 15:19:00 1997 +0000 + + 1) added typecast around getpid() to let us printf it on all platforms + 2) fixed spelling of deprecated + + CVS patchset: 1492 + CVS date: 1997/03/20 15:19:00 + +commit e10573b85e4e8eeaf303be8d01e84e14a5090c34 +Author: ewt +Date: Thu Mar 20 15:18:45 1997 +0000 + + return code from rpmRemovePackage() was being ignored + + CVS patchset: 1491 + CVS date: 1997/03/20 15:18:45 + +commit 418a9bc06a2c92bbdf4e3cef9e0ea2564fb334f6 +Author: ewt +Date: Thu Mar 20 15:18:28 1997 +0000 + + define S_ISLNK, S_ISSTAT if needed + + CVS patchset: 1490 + CVS date: 1997/03/20 15:18:28 + +commit 0ca7205ef3e98e25f7ffed4cf6f3415ab79ef11c +Author: ewt +Date: Thu Mar 20 15:18:07 1997 +0000 + + look for S_ISLNK and S_ISSTAT and define macros appropriately + + CVS patchset: 1489 + CVS date: 1997/03/20 15:18:07 + +commit 2940534c5de98d69f578255ff02c006c863e5d4d +Author: ewt +Date: Thu Mar 20 15:18:03 1997 +0000 + + *** empty log message *** + + CVS patchset: 1488 + CVS date: 1997/03/20 15:18:03 + +commit 71b0d739d4e7cbcd83e20c33663cdf02a9e49e16 +Author: ewt +Date: Thu Mar 20 15:14:54 1997 +0000 + + added missing \n + + CVS patchset: 1487 + CVS date: 1997/03/20 15:14:54 + +commit 33a5f18db9e6a2f7a559b831f4541627ab68c57f +Author: root +Date: Fri Mar 14 20:37:13 1997 +0000 + + exec sh on the script, not the script directly + + CVS patchset: 1486 + CVS date: 1997/03/14 20:37:13 + +commit 857f5372870999245c46d2a513977e172972465d +Author: root +Date: Fri Mar 14 20:34:38 1997 +0000 + + cruft cleaning + + CVS patchset: 1485 + CVS date: 1997/03/14 20:34:38 + +commit f16936cb7c1c4a185e3c42fb9516fe50883d05e8 +Author: ewt +Date: Tue Mar 11 17:12:42 1997 +0000 + + fixed changelog parsing + + CVS patchset: 1484 + CVS date: 1997/03/11 17:12:42 + +commit 62d3993e0506aed9e1a63fd56f4bb1f887276cb2 +Author: ewt +Date: Tue Mar 11 17:10:24 1997 +0000 + + fixed error message + + CVS patchset: 1483 + CVS date: 1997/03/11 17:10:24 + +commit 441fceb55ba93475b1a1ff90ebca39da2c437123 +Author: ewt +Date: Tue Mar 11 17:10:04 1997 +0000 + + -ta didn't handle absolute paths to tar files properly + + CVS patchset: 1482 + CVS date: 1997/03/11 17:10:04 + +commit fd5f6c1efc8f6c1271ccde94e4676d8c5241c6e3 +Author: ewt +Date: Tue Mar 11 17:09:34 1997 +0000 + + got rid of LIBSOCKET, ZLIB + check for not needing -lnsl and -lsocket before looking for the libs + + CVS patchset: 1481 + CVS date: 1997/03/11 17:09:34 + +commit 13255871fd472e2f1d6579d8e1ffa8a0a4882888 +Author: ewt +Date: Tue Mar 11 17:09:20 1997 +0000 + + got rid of ZLIB, LIBSOCKET + + CVS patchset: 1480 + CVS date: 1997/03/11 17:09:20 + +commit af2cce911cc3a22301d1f2d554c820ed71c1caec +Author: ewt +Date: Tue Mar 11 17:09:07 1997 +0000 + + *** empty log message *** + + CVS patchset: 1479 + CVS date: 1997/03/11 17:09:07 + +commit d78faa3f8014ae18b72328c02b9bfdecf4fce3f5 +Author: ewt +Date: Tue Mar 11 17:05:16 1997 +0000 + + don't use ZLIB anymore (rolled into normal LIBS variable) + + CVS patchset: 1478 + CVS date: 1997/03/11 17:05:16 + +commit cb679a2dd0945a4cee1a2fa4674feab8dc7be90c +Author: root +Date: Wed Mar 5 15:43:15 1997 +0000 + + header sorting function changed + + CVS patchset: 1477 + CVS date: 1997/03/05 15:43:15 + +commit d8bb04a08182c32cce1f2f89de1df7e60d3c75a0 +Author: ewt +Date: Tue Mar 4 02:24:53 1997 +0000 + + make distclean should remove autodepenency scripts + + CVS patchset: 1476 + CVS date: 1997/03/04 02:24:53 + +commit 146c9933a7f40d51b11b95b23055388e7efdb5e4 +Author: ewt +Date: Tue Mar 4 02:23:51 1997 +0000 + + --requires shouldn't imply -q + + CVS patchset: 1475 + CVS date: 1997/03/04 02:23:51 + +commit 75e6e1d3f08216f67322244e3ef13bb61ef56564 +Author: ewt +Date: Tue Mar 4 02:23:04 1997 +0000 + + fixed POPT_OPTION_DEPTH checking + + CVS patchset: 1474 + CVS date: 1997/03/04 02:23:04 + +commit 2c99fe0b7ee875256ca46ad8ee8cbba1737c2626 +Author: ewt +Date: Tue Mar 4 02:22:20 1997 +0000 + + cleanup up the -lsocket, -lnsl stuff some more + + CVS patchset: 1473 + CVS date: 1997/03/04 02:22:20 + +commit 4cf01a127792cf9bd102d811ad5aaf4b7b6aa8f9 +Author: ewt +Date: Tue Mar 4 02:22:10 1997 +0000 + + added rpmconvert target + + CVS patchset: 1472 + CVS date: 1997/03/04 02:22:10 + +commit 785faee5330cb1942fd3499349a38f8b8807f6c0 +Author: ewt +Date: Tue Mar 4 02:22:04 1997 +0000 + + *** empty log message *** + + CVS patchset: 1471 + CVS date: 1997/03/04 02:22:04 + +commit c6dff6c65492d802875d4b063329d031374a088b +Author: ewt +Date: Tue Mar 4 02:19:06 1997 +0000 + + removed oldrpmdb.c + + CVS patchset: 1470 + CVS date: 1997/03/04 02:19:06 + +commit 0f0e56f1656b34367ae2ea30afa8861828203670 +Author: ewt +Date: Tue Mar 4 02:18:55 1997 +0000 + + added include of + + CVS patchset: 1469 + CVS date: 1997/03/04 02:18:55 + +commit 960d25e7d999d6f7fe61ea1c7d7bf7ab2399bba6 +Author: ewt +Date: Tue Mar 4 02:17:56 1997 +0000 + + removed seemingly extranous include of regex.h + + CVS patchset: 1468 + CVS date: 1997/03/04 02:17:56 + +commit 020f9d270c05b5f3c106e7eb88bb4d686f033f8e +Author: ewt +Date: Tue Mar 4 02:08:21 1997 +0000 + + fixed some simple problems from the last revision + + CVS patchset: 1467 + CVS date: 1997/03/04 02:08:21 + +commit e91eaa89c9f71dc223562350a8421d775227beb7 +Author: ewt +Date: Tue Mar 4 02:07:12 1997 +0000 + + made xargs more resilant to quoting characters in filenames + + CVS patchset: 1466 + CVS date: 1997/03/04 02:07:12 + +commit 1874a35403f88f592f31d07a243102d94ab10827 +Author: root +Date: Mon Mar 3 23:20:18 1997 +0000 + + export headerSort() + + CVS patchset: 1465 + CVS date: 1997/03/03 23:20:18 + +commit 440a29281285bfca633515861763357598bef387 +Author: ewt +Date: Mon Mar 3 23:01:49 1997 +0000 + + don't strlen(NULL) in copyData() + + CVS patchset: 1464 + CVS date: 1997/03/03 23:01:49 + +commit 464233cdd82086249d957ef57109fb85a420fac4 +Author: ewt +Date: Mon Mar 3 15:46:23 1997 +0000 + + fixed ftp URLs + + CVS patchset: 1463 + CVS date: 1997/03/03 15:46:23 + +commit cdc098cb403643b08384b66b8acec5e9430ec098 +Author: root +Date: Thu Feb 27 04:32:38 1997 +0000 + + fail if we get a bad owner/group + + CVS patchset: 1462 + CVS date: 1997/02/27 04:32:38 + +commit b40b26d0200d676a8aa6427f82a3e9c12765b060 +Author: root +Date: Thu Feb 27 04:31:46 1997 +0000 + + if user/group olookup fails return NULL + + CVS patchset: 1461 + CVS date: 1997/02/27 04:31:46 + +commit 2816621389fe7de24db3639d7bfb0ac9579dc097 +Author: ewt +Date: Tue Feb 25 23:18:00 1997 +0000 + + version 2.3.8 + + CVS patchset: 1460 + CVS date: 1997/02/25 23:18:00 + +commit 93e32a738c20aeddb63f8b43520944b7f0790a93 +Author: ewt +Date: Tue Feb 25 23:17:49 1997 +0000 + + rearranged -lsocket/-lnsl checks + + CVS patchset: 1459 + CVS date: 1997/02/25 23:17:49 + +commit 8181256a83b1c88633649550fef055dbe23587d8 +Author: ewt +Date: Tue Feb 25 23:17:38 1997 +0000 + + added -t? functionality + + CVS patchset: 1458 + CVS date: 1997/02/25 23:17:38 + +commit 7e21d61da183e5324590d21f7ce124b4b020d555 +Author: ewt +Date: Tue Feb 25 23:17:29 1997 +0000 + + *** empty log message *** + + CVS patchset: 1457 + CVS date: 1997/02/25 23:17:29 + +commit d5889803cf95c3b815336f26193e8dfba245b88c +Author: ewt +Date: Tue Feb 25 23:17:25 1997 +0000 + + Initial revision + + CVS patchset: 1456 + CVS date: 1997/02/25 23:17:25 + +commit 718c3a1542b78df2e429fbf89204428fda2e3e73 +Author: ewt +Date: Tue Feb 25 23:04:22 1997 +0000 + + removed defaultQueryFormat string (obosoleted by popt) + + CVS patchset: 1455 + CVS date: 1997/02/25 23:04:22 + +commit 7fea6dc9f13685d7f9707529226a20d5ffa45dd5 +Author: ewt +Date: Tue Feb 25 23:03:20 1997 +0000 + + document -t? + + CVS patchset: 1454 + CVS date: 1997/02/25 23:03:20 + +commit 9073456f72218451b2cc16dd71360a1e3697a840 +Author: ewt +Date: Tue Feb 25 22:58:54 1997 +0000 + + added initializations of fileOwnerList, fileGroupList + + CVS patchset: 1453 + CVS date: 1997/02/25 22:58:54 + +commit 1f02b916af723d3ae4648d3ad776c5ad8dc59f45 +Author: root +Date: Mon Feb 24 19:50:57 1997 +0000 + + updated + + CVS patchset: 1452 + CVS date: 1997/02/24 19:50:57 + +commit 603de4d82f2049f7f76565b3376871e1b3a14430 +Author: ewt +Date: Thu Feb 20 16:20:53 1997 +0000 + + *** empty log message *** + + CVS patchset: 1451 + CVS date: 1997/02/20 16:20:53 + +commit fca9595fc1c73ec447cddc0e0e5e9c1bf1fb6a49 +Author: ewt +Date: Thu Feb 20 02:21:36 1997 +0000 + + *** empty log message *** + + CVS patchset: 1450 + CVS date: 1997/02/20 02:21:36 + +commit a9cfcdad6f4a11cb9951caaac7faed9fbd6e6f39 +Author: ewt +Date: Thu Feb 20 02:21:23 1997 +0000 + + 1) include config.h + 2) pay attention to HAVE_DIRENT_H + + CVS patchset: 1449 + CVS date: 1997/02/20 02:21:23 + +commit 6b5a82caab0555e265204b7112826f3beec86579 +Author: ewt +Date: Thu Feb 20 02:20:58 1997 +0000 + + frees FILEUSERNAME and FILEGROUPNAME lists + + CVS patchset: 1448 + CVS date: 1997/02/20 02:20:58 + +commit fc3a2d33a9ae4179ab95d0b02add105c56dc288a +Author: ewt +Date: Thu Feb 20 02:20:46 1997 +0000 + + added HAVE_DIRENT_H + + CVS patchset: 1447 + CVS date: 1997/02/20 02:20:46 + +commit 78385bc21418d0d8b3dca6162245727c79e5ced9 +Author: ewt +Date: Thu Feb 20 02:20:10 1997 +0000 + + 1) traded LIBPATH for LIBS + 2) checks for dirent.h + 3) checks for -lnsl explicitly + + CVS patchset: 1446 + CVS date: 1997/02/20 02:20:10 + +commit 86b4b648b7fb014138095f1d6621988117d0f620 +Author: ewt +Date: Thu Feb 20 02:19:51 1997 +0000 + + 1) version 2.3.7 + 2) traded LIBPATH for LIBS + + CVS patchset: 1445 + CVS date: 1997/02/20 02:19:51 + +commit 90956d09aee0e1873d42326f70e86ac26df18ab5 +Author: ewt +Date: Thu Feb 20 02:10:36 1997 +0000 + + *** empty log message *** + + CVS patchset: 1444 + CVS date: 1997/02/20 02:10:36 + +commit 049a0ed0a555288fa52c9261367e6e2700c90fdb +Author: marc +Date: Tue Feb 18 01:47:16 1997 +0000 + + fix null dereference + + CVS patchset: 1443 + CVS date: 1997/02/18 01:47:16 + +commit a7fe8049fceb88cc995b5f92e916cc56bb394f86 +Author: marc +Date: Tue Feb 18 01:16:14 1997 +0000 + + *** empty log message *** + + CVS patchset: 1442 + CVS date: 1997/02/18 01:16:14 + +commit 2c056abce666a9e1fd00cbaf46eff52cfc764d29 +Author: ewt +Date: Tue Feb 18 00:01:39 1997 +0000 + + *** empty log message *** + + CVS patchset: 1441 + CVS date: 1997/02/18 00:01:39 + +commit 2741e30f3c0c3c93ad24a6aea6f13dcb9be43678 +Author: ewt +Date: Mon Feb 17 23:58:08 1997 +0000 + + got rid of the LIBS/LIBPATH dualism + + CVS patchset: 1440 + CVS date: 1997/02/17 23:58:08 + +commit 9b17af5137c19ba26f433ae663aef10f698c9200 +Author: root +Date: Mon Feb 17 23:45:40 1997 +0000 + + fixed code so -qvv actually works + + CVS patchset: 1439 + CVS date: 1997/02/17 23:45:40 + +commit d0f53bd36d002ca237e9b940a10ad0c60a8a8f8f +Author: root +Date: Mon Feb 17 23:45:37 1997 +0000 + + *** empty log message *** + + CVS patchset: 1438 + CVS date: 1997/02/17 23:45:37 + +commit 479e552ef148590980d1e965db292276993fff0b +Author: ewt +Date: Mon Feb 17 20:29:07 1997 +0000 + + if a user specified rcfile doesn't exist, exit with an error + + CVS patchset: 1437 + CVS date: 1997/02/17 20:29:07 + +commit ef6947376630f67682485b50b629c5cb14cd926a +Author: ewt +Date: Mon Feb 17 20:28:50 1997 +0000 + + be a bit more carefull about checking --rcfiles argument + + CVS patchset: 1436 + CVS date: 1997/02/17 20:28:50 + +commit 14b83466f4a85874f63fc083b56f43574d6e0ece +Author: ewt +Date: Mon Feb 17 20:22:45 1997 +0000 + + *** empty log message *** + + CVS patchset: 1435 + CVS date: 1997/02/17 20:22:45 + +commit a7c9c37358647e9b6e7d287cf4aac1812f1c0dd8 +Author: ewt +Date: Mon Feb 17 20:21:16 1997 +0000 + + 1) added poptStuffArgs() + 2) added character argument aliasing + 3) aliases are searched for in reverse order + + CVS patchset: 1434 + CVS date: 1997/02/17 20:21:16 + +commit 0fd27e81a1e3283304b1f32189f444a275b4acc6 +Author: ewt +Date: Mon Feb 17 20:20:59 1997 +0000 + + 1) added poptStuffArgs() + 2) added shortName to popt aliases + + CVS patchset: 1433 + CVS date: 1997/02/17 20:20:59 + +commit daa851cf1ed5afce3e230b162798b86f0b6319e7 +Author: ewt +Date: Mon Feb 17 20:20:32 1997 +0000 + + 1) empty user/group names are handled better (sigh) + 2) added typecasts to clean up some warning + + CVS patchset: 1432 + CVS date: 1997/02/17 20:20:32 + +commit 94953f0ad7c8c8a1e743de997ca00629d0852336 +Author: ewt +Date: Mon Feb 17 20:20:21 1997 +0000 + + *** empty log message *** + + CVS patchset: 1431 + CVS date: 1997/02/17 20:20:21 + +commit 313c75b2e82949cdb7d7d972c257366ffb91a4cb +Author: ewt +Date: Mon Feb 17 20:20:04 1997 +0000 + + migrated to new format (with --), added --requires, -R, and --info + + CVS patchset: 1430 + CVS date: 1997/02/17 20:20:04 + +commit e21915afcc51f30889366a8d321b10e899834b0f +Author: ewt +Date: Mon Feb 17 20:18:54 1997 +0000 + + dropped QUERY_FOR_INFO, QUERY_FOR_REQUIRES + + CVS patchset: 1429 + CVS date: 1997/02/17 20:18:54 + +commit 65199afb2205ce7af85dad206ab7e28806564696 +Author: ewt +Date: Mon Feb 17 20:18:36 1997 +0000 + + redid -i parsing, moved --info and --requires to popt aliases + + CVS patchset: 1428 + CVS date: 1997/02/17 20:18:36 + +commit 51fc5073792d72ebecfdd25277cbd70e98343956 +Author: ewt +Date: Mon Feb 17 20:18:28 1997 +0000 + + Changed to version 2.3.6 + + CVS patchset: 1427 + CVS date: 1997/02/17 20:18:28 + +commit 2f43ed80e444b6970aeb9694e471f256e09370ba +Author: ewt +Date: Mon Feb 17 16:53:30 1997 +0000 + + -Vp should use realpath() + + CVS patchset: 1426 + CVS date: 1997/02/17 16:53:30 + +commit d58a17d1bde09ab9b8bba06de1e1ff00001c0741 +Author: ewt +Date: Mon Feb 17 16:52:45 1997 +0000 + + --ftp* arguments should work with -Vp as well + + CVS patchset: 1425 + CVS date: 1997/02/17 16:52:45 + +commit 1c3ca02cced5045f22ffb5953784a393962e3080 +Author: ewt +Date: Fri Feb 14 03:40:00 1997 +0000 + + needs to include unistd.h to get some types + + CVS patchset: 1424 + CVS date: 1997/02/14 03:40:00 + +commit 05509cb62aad541b830eefe3a65a860f8a385f5e +Author: ewt +Date: Fri Feb 14 03:32:26 1997 +0000 + + including makes this a bit cleaner + + CVS patchset: 1423 + CVS date: 1997/02/14 03:32:26 + +commit c9ba3d9d89271220c1de40aeafede4312c5da5b1 +Author: ewt +Date: Fri Feb 14 03:26:16 1997 +0000 + + 1) cleaned up horrbile relocateFilelist() hacks thanks to new header + 2) remove UID, GID lists from headers if symbolic versions are present + 3) fixed but in reloacteFilelist() which occasionally made it noop + + CVS patchset: 1422 + CVS date: 1997/02/14 03:26:16 + +commit 9b70abb46223e8bc0b2ea801d654dcccafc89942 +Author: ewt +Date: Fri Feb 14 03:25:52 1997 +0000 + + if symbolic user and group names aren't present try to fall back + on id's (this if for old v1 packages) + + CVS patchset: 1421 + CVS date: 1997/02/14 03:25:52 + +commit 62a01ab51869d05c9ad7e81eb3435580adbb9538 +Author: ewt +Date: Fri Feb 14 03:25:42 1997 +0000 + + added headerRemoveEntry() + + CVS patchset: 1420 + CVS date: 1997/02/14 03:25:42 + +commit 56b924a57ff685e0ca748b09a1586286d6068fbb +Author: ewt +Date: Fri Feb 14 03:25:31 1997 +0000 + + fixed gidToGname() prototype + + CVS patchset: 1419 + CVS date: 1997/02/14 03:25:31 + +commit 6e3bed7cf3dbbb0880d836d46f59204d39261f1d +Author: ewt +Date: Fri Feb 14 03:25:14 1997 +0000 + + exclude 'ignore' marked RPMTAG entriess from tag table + + CVS patchset: 1418 + CVS date: 1997/02/14 03:25:14 + +commit 635803a994a1e6c53026e9adc5692fefe2621ae0 +Author: ewt +Date: Fri Feb 14 03:24:58 1997 +0000 + + added 'internal' keyword to get RPMTAG's ignored by tagtable.c + + CVS patchset: 1417 + CVS date: 1997/02/14 03:24:58 + +commit b26934ee9c1d1b11011618c1d415cd0c097d6284 +Author: ewt +Date: Fri Feb 14 03:24:45 1997 +0000 + + *** empty log message *** + + CVS patchset: 1416 + CVS date: 1997/02/14 03:24:45 + +commit aa7bba8e59e6db594e7d42822b4917cc6653c1ea +Author: ewt +Date: Fri Feb 14 02:05:43 1997 +0000 + + verify users and groups by name not by id + + CVS patchset: 1415 + CVS date: 1997/02/14 02:05:43 + +commit eafe2c752f6c0bbfdae81d8bdfca70af23dc3578 +Author: ewt +Date: Fri Feb 14 02:05:33 1997 +0000 + + use new id query calls from misc.c + + CVS patchset: 1414 + CVS date: 1997/02/14 02:05:33 + +commit 97999ce92c1cad3315d85c02bb3c62007a75d846 +Author: ewt +Date: Fri Feb 14 02:05:13 1997 +0000 + + added unameToUid(), gnameToGid(), uidToUname(), gidToUname() + + CVS patchset: 1413 + CVS date: 1997/02/14 02:05:13 + +commit a7afd38d35cf918d91989d6639e6291bc93a8a1f +Author: ewt +Date: Fri Feb 14 02:04:37 1997 +0000 + + if we're not using GNU gettext #define the i18n stuff away (and get + rid of the gettextstub.c stuff as well) + + CVS patchset: 1412 + CVS date: 1997/02/14 02:04:37 + +commit 22b96549a74c98f35d07a584d4d2d6232b29e303 +Author: ewt +Date: Fri Feb 14 02:04:13 1997 +0000 + + *** empty log message *** + + CVS patchset: 1411 + CVS date: 1997/02/14 02:04:13 + +commit a5cd69b3db129f55bd6776f2148a7cfb1b4bf8fb +Author: ewt +Date: Fri Feb 14 02:04:04 1997 +0000 + + restored include of + + CVS patchset: 1410 + CVS date: 1997/02/14 02:04:04 + +commit 91a063524fa2f409791116c70d6202f5ec36daf3 +Author: ewt +Date: Wed Feb 12 16:54:49 1997 +0000 + + array size mismatches in --qf should send error to stderr + + CVS patchset: 1409 + CVS date: 1997/02/12 16:54:49 + +commit 4f4c7b2e9c55439b20a67ecb455839be55800121 +Author: ewt +Date: Wed Feb 12 05:06:25 1997 +0000 + + *** empty log message *** + + CVS patchset: 1408 + CVS date: 1997/02/12 05:06:25 + +commit b66955246958ab08c0d270c2a3c81761f77438ce +Author: ewt +Date: Wed Feb 12 05:05:58 1997 +0000 + + 1) don't remove pre/post scripts if isdebug is set + 2) use '-xs' reather then separate args -- works around some broken shells + + CVS patchset: 1407 + CVS date: 1997/02/12 05:05:58 + +commit 3e9c2525399679378ef288dd167d00c0ac4e89cb +Author: ewt +Date: Wed Feb 12 05:05:13 1997 +0000 + + 1) don't ever change the umask + 2) when installing sources with --root, directory checks need to + use the relocated paths + + CVS patchset: 1406 + CVS date: 1997/02/12 05:05:13 + +commit 3cb5b141d5d26a73b9d3b4a21763dac1fb3b32ed +Author: ewt +Date: Wed Feb 12 05:04:38 1997 +0000 + + added optflags for ppc + + CVS patchset: 1405 + CVS date: 1997/02/12 05:04:38 + +commit 0d6a23c34e67752094c3141d95ee950fff705b21 +Author: ewt +Date: Wed Feb 12 05:03:02 1997 +0000 + + run depend only against sources used + + CVS patchset: 1404 + CVS date: 1997/02/12 05:03:02 + +commit 7cdaa87e0f96ebd169020a531196e580342b8d80 +Author: ewt +Date: Wed Feb 12 04:48:51 1997 +0000 + + made verify work on URLs + + CVS patchset: 1403 + CVS date: 1997/02/12 04:48:51 + +commit 5a761a05227693e5e4b37abe8a314dcba71950cd +Author: ewt +Date: Wed Feb 12 04:48:37 1997 +0000 + + fixed -r, --root processing + + CVS patchset: 1402 + CVS date: 1997/02/12 04:48:37 + +commit 5c503f570f32253a6eea3a41bc8b2cbc40f4c5e3 +Author: ewt +Date: Wed Feb 12 04:48:06 1997 +0000 + + if a prefix other then /usr or /usr/local is used look in $prefix/lib + and $prefix/include for libraries + + CVS patchset: 1401 + CVS date: 1997/02/12 04:48:06 + +commit 900266be6af55119c525d57035d6afde6cbb11e6 +Author: ewt +Date: Wed Feb 12 04:47:49 1997 +0000 + + *** empty log message *** + + CVS patchset: 1400 + CVS date: 1997/02/12 04:47:49 + +commit cce6ae6b2ccccc0f33f0278bed8ec4feafb08bbe +Author: ewt +Date: Thu Feb 6 20:45:08 1997 +0000 + + changed to version 2.3.5 + + CVS patchset: 1399 + CVS date: 1997/02/06 20:45:08 + +commit a2c2d90cb79abaad2113938a14666fa51a8dbdf8 +Author: ewt +Date: Thu Feb 6 20:44:10 1997 +0000 + + %{#TAG} prints the number of items in the item (array length) + + CVS patchset: 1398 + CVS date: 1997/02/06 20:44:10 + +commit 7be278677ea6deb0bed516dbc223c2d10f8d4c4f +Author: ewt +Date: Thu Feb 6 20:31:43 1997 +0000 + + changed a bunch of parameter names for cleanliness + + CVS patchset: 1397 + CVS date: 1997/02/06 20:31:43 + +commit 949a2fc3e9fad0d5d54f2bf3bd20a27a55f06862 +Author: ewt +Date: Fri Jan 31 21:43:00 1997 +0000 + + *** empty log message *** + + CVS patchset: 1396 + CVS date: 1997/01/31 21:43:00 + +commit e902653112d0cb27c29839d5ec4c146e19024b38 +Author: ewt +Date: Thu Jan 30 21:27:42 1997 +0000 + + *** empty log message *** + + CVS patchset: 1395 + CVS date: 1997/01/30 21:27:42 + +commit 62ccc79f90f0b97dbb8384db7b8add7c2953e3a9 +Author: ewt +Date: Thu Jan 30 21:27:10 1997 +0000 + + fixed sigcheck w/ always failed with a made up error + + CVS patchset: 1394 + CVS date: 1997/01/30 21:27:10 + +commit cfdc587c25c2c1eea6a9f3ad8cd22a0e660ddc44 +Author: ewt +Date: Thu Jan 30 20:45:07 1997 +0000 + + install rpmpopt properly + + CVS patchset: 1393 + CVS date: 1997/01/30 20:45:07 + +commit 63056f52cea7e87bd3fe48f80d7579ef72981e3b +Author: ewt +Date: Thu Jan 30 20:20:29 1997 +0000 + + changed to version 2.3.4 + + CVS patchset: 1392 + CVS date: 1997/01/30 20:20:29 + +commit 79f644ecdad5409b5857c4e2e3b3964b9130d213 +Author: ewt +Date: Thu Jan 30 20:16:49 1997 +0000 + + removed VERIY_SRPM + + CVS patchset: 1391 + CVS date: 1997/01/30 20:16:49 + +commit ca89c7dd06316d8ade0b179c2c6bf58d65a89f35 +Author: ewt +Date: Thu Jan 30 20:14:22 1997 +0000 + + changed fixperms to setperms + + CVS patchset: 1390 + CVS date: 1997/01/30 20:14:22 + +commit e2ef8c9b0acb56954d65f4b814a9331a329ca8fe +Author: ewt +Date: Thu Jan 30 20:09:42 1997 +0000 + + set the time on changelogs to noon UTC + + CVS patchset: 1389 + CVS date: 1997/01/30 20:09:42 + +commit 6a52e861c7b2028d0a9feac29d59a0d8f120ec44 +Author: ewt +Date: Thu Jan 30 20:04:11 1997 +0000 + + NULL terminate result of poptGetArgs() + + CVS patchset: 1388 + CVS date: 1997/01/30 20:04:11 + +commit 6f9e6402382e2e35d9ea479bcb809b5e79676b3a +Author: ewt +Date: Thu Jan 30 20:03:39 1997 +0000 + + moved dbiFreeIndexRecord() to be more appropriate (i.e. not segv) + + CVS patchset: 1387 + CVS date: 1997/01/30 20:03:39 + +commit f4f50e367a0a927a636fd5cc1f41b8d0f79e07bb +Author: ewt +Date: Thu Jan 30 20:03:01 1997 +0000 + + remove one from rpmTagTableSize (NULL entry) + + CVS patchset: 1386 + CVS date: 1997/01/30 20:03:01 + +commit ca81a06e73296cd56a3691db48767c76cadf8f48 +Author: ewt +Date: Thu Jan 30 20:02:28 1997 +0000 + + added doc stubs for --fixperms, --setugids, --rebuilddb, --showrc + + CVS patchset: 1385 + CVS date: 1997/01/30 20:02:28 + +commit 647b233511c9500924167a033421aa85fecf9583 +Author: ewt +Date: Thu Jan 30 19:59:14 1997 +0000 + + 1) removed --provides, --scripts (moved to rpmpopt) + 2) concatenates multiple query formats + 3) doesn't support stdin query/verify modes (thank god) + + CVS patchset: 1384 + CVS date: 1997/01/30 19:59:14 + +commit f1ca8333220eabd80b7671158c35485b36c99435 +Author: ewt +Date: Thu Jan 30 19:58:55 1997 +0000 + + removed stdin verification modes + + CVS patchset: 1383 + CVS date: 1997/01/30 19:58:55 + +commit b5f1f94bba82125bc7a5ae6337ed1d49f2ad7b10 +Author: ewt +Date: Thu Jan 30 19:58:40 1997 +0000 + + removed stdin queries and moved --scripts, --provides to rpmpopt + + CVS patchset: 1382 + CVS date: 1997/01/30 19:58:40 + +commit 9db020e418717341aaf517d883836f15525798c1 +Author: ewt +Date: Thu Jan 30 19:58:26 1997 +0000 + + installs rpmpopt + + CVS patchset: 1381 + CVS date: 1997/01/30 19:58:26 + +commit b0afc4092cef3eeff109f3de7df183afc7dcd516 +Author: ewt +Date: Thu Jan 30 19:57:47 1997 +0000 + + Initial revision + + CVS patchset: 1380 + CVS date: 1997/01/30 19:57:47 + +commit dcd2a73991b7cf8537711955fd430533219c86d0 +Author: ewt +Date: Thu Jan 30 19:57:30 1997 +0000 + + *** empty log message *** + + CVS patchset: 1379 + CVS date: 1997/01/30 19:57:30 + +commit 5aad93af5d0203e26c9be06eafd119a550721a27 +Author: ewt +Date: Thu Jan 30 19:56:36 1997 +0000 + + updated to RPM 2.3.1 (or so) + + CVS patchset: 1378 + CVS date: 1997/01/30 19:56:36 + +commit 7bc74ba4aa4529d9683986493e2da1cb9cd354f9 +Author: ewt +Date: Thu Jan 30 15:54:59 1997 +0000 + + added info on conflicts + + CVS patchset: 1377 + CVS date: 1997/01/30 15:54:59 + +commit fb25acc6f607a72b8ef9d41c71de77dcf0c6b5d0 +Author: ewt +Date: Wed Jan 29 17:40:03 1997 +0000 + + *** empty log message *** + + CVS patchset: 1376 + CVS date: 1997/01/29 17:40:03 + +commit be0b90359bcd8156385178eb9b570c0538c0333f +Author: ewt +Date: Wed Jan 29 17:39:46 1997 +0000 + + does some basic sanity checks on headers read from the database + + CVS patchset: 1375 + CVS date: 1997/01/29 17:39:46 + +commit 364db20c195b8e5fd06cc27e6745dc8ba1e583f9 +Author: ewt +Date: Wed Jan 29 17:39:11 1997 +0000 + + 1) made faNextOffset(), faFirstOffset() return signed ints + 2) both return -1 on error + 3) faNextOffset() detects loops and returns -1 + + CVS patchset: 1374 + CVS date: 1997/01/29 17:39:11 + +commit bc1cb8cc9ff765e13c8691f1babac44f9cc0fb1f +Author: ewt +Date: Wed Jan 29 17:38:47 1997 +0000 + + made rpmdbFirstRecNum() and rpmdbNextRecNum() return signed ints + + CVS patchset: 1373 + CVS date: 1997/01/29 17:38:47 + +commit 5612933dcb9fa3cb0963347605a1feba6847c609 +Author: root +Date: Tue Jan 28 15:34:31 1997 +0000 + + *** empty log message *** + + CVS patchset: 1372 + CVS date: 1997/01/28 15:34:31 + +commit e633246d1ddc1427319a781f85c06942597afdb3 +Author: root +Date: Tue Jan 28 15:33:55 1997 +0000 + + fixed requires/conflicts + + CVS patchset: 1371 + CVS date: 1997/01/28 15:33:55 + +commit 52978613bc110c659a1f9e397ea20bf0b3acb3e4 +Author: root +Date: Sat Jan 25 04:48:56 1997 +0000 + + *** empty log message *** + + CVS patchset: 1370 + CVS date: 1997/01/25 04:48:56 + +commit 6ffeda1eaa7315d94b0d07b6a988c93558a2fd3a +Author: root +Date: Sat Jan 25 04:48:06 1997 +0000 + + added %changelog processing + + CVS patchset: 1369 + CVS date: 1997/01/25 04:48:06 + +commit b161ffd5c8c83449c310e422a5a9bbcfbbb4f29b +Author: root +Date: Sat Jan 25 04:47:27 1997 +0000 + + added RPMTAG_CHANGELOGTIME RPMTAG_CHANGELOGNAME RPMTAG_CHANGELOGTEXT + + CVS patchset: 1368 + CVS date: 1997/01/25 04:47:27 + +commit 021ca4b3450cc99b3ab771dea35f79db3f2bb87f +Author: ewt +Date: Fri Jan 24 22:56:25 1997 +0000 + + added some missing -p's to mkdirs + + CVS patchset: 1367 + CVS date: 1997/01/24 22:56:25 + +commit 49392863405756e01085dbfb7d7804d9b6245dbf +Author: ewt +Date: Fri Jan 24 22:50:38 1997 +0000 + + create RPMNLSDIR + + CVS patchset: 1366 + CVS date: 1997/01/24 22:50:38 + +commit 06927d450814d8b141593d4c375a999121352970 +Author: ewt +Date: Fri Jan 24 22:50:01 1997 +0000 + + changed NLSDIR to RPMNLSDIR + + CVS patchset: 1365 + CVS date: 1997/01/24 22:50:01 + +commit 5b744e7a24293f96ca84e39fcffde299ed04ef42 +Author: ewt +Date: Fri Jan 24 19:06:35 1997 +0000 + + prototype realpath if appropriate + + CVS patchset: 1364 + CVS date: 1997/01/24 19:06:35 + +commit bf515de97c95c27b91bac8fd530a1461ed6211a2 +Author: ewt +Date: Fri Jan 24 19:06:16 1997 +0000 + + prototype bindtextdomain(), textdomain() if libintl.h isn't being used + + CVS patchset: 1363 + CVS date: 1997/01/24 19:06:16 + +commit 6e1a9bd641d8759122d40073f4403f200dc5e594 +Author: ewt +Date: Fri Jan 24 19:06:09 1997 +0000 + + include config.h + + CVS patchset: 1362 + CVS date: 1997/01/24 19:06:09 + +commit 0d6a382fb16f1f74b35be962c86539f8518faa27 +Author: ewt +Date: Fri Jan 24 19:05:56 1997 +0000 + + don't include miscfn.h -- glob.h gets it + + CVS patchset: 1361 + CVS date: 1997/01/24 19:05:56 + +commit 3d51574396bd7934b01c7714a7fcd544820bda5d +Author: ewt +Date: Fri Jan 24 19:05:39 1997 +0000 + + don't mkdir anything -- toplevel Makefile handles that + + CVS patchset: 1360 + CVS date: 1997/01/24 19:05:39 + +commit 87a10745a27e8a05e4442b6a4757d1692116030f +Author: ewt +Date: Fri Jan 24 19:05:23 1997 +0000 + + added STDC_HEADERS, HAVE_STRING_H, HAVE_REALPATH + + CVS patchset: 1359 + CVS date: 1997/01/24 19:05:23 + +commit f818ac27f7d141136e068029f21e7554046291a1 +Author: ewt +Date: Fri Jan 24 19:04:51 1997 +0000 + + 1) check for STDC headers (makes glob.c, etc happy) + 2) check from string.h + 3) define HAVE_REALPATH as appropriate + + CVS patchset: 1358 + CVS date: 1997/01/24 19:04:51 + +commit 3a7a9798784883007a36a49440e2c5d23f272f9b +Author: ewt +Date: Fri Jan 24 19:04:31 1997 +0000 + + moved isUrl initialization to remove dumb warning + + CVS patchset: 1357 + CVS date: 1997/01/24 19:04:31 + +commit 2c83a713fd9fc2129f48fd1d39b0ea494e926028 +Author: ewt +Date: Fri Jan 24 19:04:14 1997 +0000 + + use RPMNLS* rather then NLS* + + CVS patchset: 1356 + CVS date: 1997/01/24 19:04:14 + +commit a34820cda3ef9aa1b07d6674863f4fe4fff6e44b +Author: ewt +Date: Fri Jan 24 19:03:06 1997 +0000 + + 1) only mkdir directories which don't exist + 2) use RPMNLS* rather then NLS* + + CVS patchset: 1355 + CVS date: 1997/01/24 19:03:06 + +commit b0290919c25d402ff0bb12dc1f6d03e504004fa8 +Author: ewt +Date: Fri Jan 24 19:03:01 1997 +0000 + + *** empty log message *** + + CVS patchset: 1354 + CVS date: 1997/01/24 19:03:01 + +commit 352e7cd6f34e41d64050af0ef873903477aae316 +Author: ewt +Date: Fri Jan 24 16:13:19 1997 +0000 + + removed unused variable tok + + CVS patchset: 1353 + CVS date: 1997/01/24 16:13:19 + +commit bfd57b7a22d891f6b88e2c942cc79bfced5d1437 +Author: ewt +Date: Thu Jan 23 21:17:25 1997 +0000 + + 1) added copyData() + 2) changed grabData() to use copyData() + 3) made headerAppendEntry() use copyData() so it will actually work + + CVS patchset: 1352 + CVS date: 1997/01/23 21:17:25 + +commit 21620b1414e73d4234f8d18765c4554afe4b12bd +Author: ewt +Date: Thu Jan 23 21:12:26 1997 +0000 + + increment count in headerAppendEntry() + + CVS patchset: 1351 + CVS date: 1997/01/23 21:12:26 + +commit d0c5b80dec5c5fe0d5fe30770ed02b42ea2dc283 +Author: ewt +Date: Thu Jan 23 20:57:58 1997 +0000 + + *** empty log message *** + + CVS patchset: 1350 + CVS date: 1997/01/23 20:57:58 + +commit d12e155ba86959103f2443f86b9b764c52dcc059 +Author: ewt +Date: Thu Jan 23 20:56:58 1997 +0000 + + always link against libmisc + + CVS patchset: 1349 + CVS date: 1997/01/23 20:56:58 + +commit 0dab6d67bf464bfb1a3adfd68dd853ca8a88e8dd +Author: ewt +Date: Thu Jan 23 20:56:45 1997 +0000 + + may skip file md5 checks + + CVS patchset: 1348 + CVS date: 1997/01/23 20:56:45 + +commit fa4a7a11bba35fac1daa8b9bb75ba3152d4715cd +Author: ewt +Date: Thu Jan 23 20:56:16 1997 +0000 + + added --nomd5 + + CVS patchset: 1347 + CVS date: 1997/01/23 20:56:16 + +commit 4d4c71c5805a4cbdf52297c99e6f20a1afb6e6af +Author: ewt +Date: Thu Jan 23 20:55:52 1997 +0000 + + allows you to omit md5 signature checks + + CVS patchset: 1346 + CVS date: 1997/01/23 20:55:52 + +commit d3f7e48be949aca972ea3e67815dab6e6a994b41 +Author: ewt +Date: Thu Jan 23 20:55:33 1997 +0000 + + added omitFlags to rpmVerifyFile() + + CVS patchset: 1345 + CVS date: 1997/01/23 20:55:33 + +commit 0d0ca1f947d0cf61cfb09f0647562b6d8d1a92c6 +Author: ewt +Date: Thu Jan 23 20:29:16 1997 +0000 + + tried to fix h_errno check + + CVS patchset: 1344 + CVS date: 1997/01/23 20:29:16 + +commit ed17a7118243ce1bad6c0fa2e326af2dec99b1cd +Author: ewt +Date: Thu Jan 23 20:24:25 1997 +0000 + + 1) changed for new headerDump() + 2) reads rpmrc to find rpm library + + CVS patchset: 1343 + CVS date: 1997/01/23 20:24:25 + +commit 167b4407ffe8fd3b3039236b5e897c4eb375fcf9 +Author: ewt +Date: Thu Jan 23 20:24:16 1997 +0000 + + changed for new headerDump() + + CVS patchset: 1342 + CVS date: 1997/01/23 20:24:16 + +commit 5807c0cf2a9c2edf9782dcf9bbf492cd699e7208 +Author: ewt +Date: Thu Jan 23 20:24:00 1997 +0000 + + *** empty log message *** + + CVS patchset: 1341 + CVS date: 1997/01/23 20:24:00 + +commit 8aefc029089b68876913be987e39607d1fac7e15 +Author: ewt +Date: Thu Jan 23 20:23:35 1997 +0000 + + only check rdev w/ appropriate, include device type (block vs char) in + D bit + + CVS patchset: 1340 + CVS date: 1997/01/23 20:23:35 + +commit e14c030f939650117a2d0274021346ba1c2548fb +Author: ewt +Date: Thu Jan 23 20:23:17 1997 +0000 + + added some -'s for correctness + + CVS patchset: 1339 + CVS date: 1997/01/23 20:23:17 + +commit df5f2c436784fb07e71bb6d9c49e3b84cb4f50ca +Author: root +Date: Thu Jan 23 19:17:35 1997 +0000 + + some tmpPath's were being alloceted w/o paying attention to the length + of RPMVAR_TMPPATH + + CVS patchset: 1338 + CVS date: 1997/01/23 19:17:35 + +commit 11eb37a7a23b8074afb3053510cfa7f5f2ebcd3d +Author: ewt +Date: Wed Jan 22 20:42:36 1997 +0000 + + moved struct rpmTagTableEntry to header.h (and renamed it) + + CVS patchset: 1337 + CVS date: 1997/01/22 20:42:36 + +commit 0264e478d897d89fd729ebffbf7afd376eb48e1f +Author: ewt +Date: Wed Jan 22 20:42:10 1997 +0000 + + 1) struct rpmTagTableEntry now struct headerTagTableEntry + + CVS patchset: 1336 + CVS date: 1997/01/22 20:42:10 + +commit b18f0a329c94edfbd2b8ec90fe651ecc996f311c +Author: ewt +Date: Wed Jan 22 20:41:50 1997 +0000 + + headerDump() now needs tag table + + CVS patchset: 1335 + CVS date: 1997/01/22 20:41:50 + +commit 3c528c8ab63e68c813195c3f7fb72aa2ebc2ddb3 +Author: ewt +Date: Wed Jan 22 20:40:45 1997 +0000 + + don't look for getopt anymore (we don't need it) + + CVS patchset: 1334 + CVS date: 1997/01/22 20:40:45 + +commit ac61b79a0034fc381bf29ec8671f12c215d822a2 +Author: ewt +Date: Wed Jan 22 20:40:33 1997 +0000 + + *** empty log message *** + + CVS patchset: 1333 + CVS date: 1997/01/22 20:40:33 + +commit 3272d6857c38f7a8dc75df57536664bb866fb8ab +Author: ewt +Date: Wed Jan 22 20:25:38 1997 +0000 + + bug parsing multiline responses + + CVS patchset: 1332 + CVS date: 1997/01/22 20:25:38 + +commit fb837ffbb494b3af8f16c4b0f96729fc97d9caa5 +Author: ewt +Date: Wed Jan 22 20:25:23 1997 +0000 + + changed types to headerTabTableEntry from rpmTagTableEntry + + CVS patchset: 1331 + CVS date: 1997/01/22 20:25:23 + +commit c212907847fb6e831b837030b04549249ce2330b +Author: ewt +Date: Tue Jan 21 18:09:16 1997 +0000 + + 1) made headerDump() take tag table + 2) removed rpmlib.h, messages.h dependencies + + CVS patchset: 1330 + CVS date: 1997/01/21 18:09:16 + +commit 4d9920ab1fccd0f15166cd0e159e434e2fc72b89 +Author: ewt +Date: Mon Jan 20 22:34:47 1997 +0000 + + 1) use autoconf message facilities + 2) look for h_errno + + CVS patchset: 1329 + CVS date: 1997/01/20 22:34:47 + +commit 1c6087767f4b404b26833a2055aa73dbed8f6110 +Author: ewt +Date: Mon Jan 20 22:34:34 1997 +0000 + + defined HAVE_HERRNO if necessary + + CVS patchset: 1328 + CVS date: 1997/01/20 22:34:34 + +commit 11fda8ed4ff0573b9436e73a3b6eae958563a56a +Author: ewt +Date: Mon Jan 20 22:34:26 1997 +0000 + + added HAVE_HERRNO + + CVS patchset: 1327 + CVS date: 1997/01/20 22:34:26 + +commit 17c36159c7822c4c2b9440b2dd074adcf04a0142 +Author: ewt +Date: Mon Jan 20 22:16:31 1997 +0000 + + added poptBadOption(), poptStrerror(), flags argument to poptAddAlias + + CVS patchset: 1326 + CVS date: 1997/01/20 22:16:31 + +commit 22d5f14f156b0d385b86a83f15b350efede49ea5 +Author: ewt +Date: Mon Jan 20 22:16:01 1997 +0000 + + 1) sanity check --timecheck + 2) print usefull errors during argument processing + + CVS patchset: 1325 + CVS date: 1997/01/20 22:16:01 + +commit 3366d6c2e0f027256860db99b562627aa6db3088 +Author: ewt +Date: Fri Jan 17 22:56:22 1997 +0000 + + added :octal for int32 and int16 + + CVS patchset: 1324 + CVS date: 1997/01/17 22:56:22 + +commit 10ac1065199e0ddfd51fd25fcb9cb9472b2220a7 +Author: ewt +Date: Fri Jan 17 21:58:27 1997 +0000 + + 1) added parsing options for option args + 2) added alias config files + + CVS patchset: 1323 + CVS date: 1997/01/17 21:58:27 + +commit adcc39df50e9d7518554d01a934a08881500bda8 +Author: ewt +Date: Fri Jan 17 21:58:00 1997 +0000 + + 1) added --pipe + 2) read popt config files + 3) takes advantage of some popt shortcuts + + CVS patchset: 1322 + CVS date: 1997/01/17 21:58:00 + +commit bd2663da8eb1f8fed1eda4e4cdd00eadc458270b +Author: ewt +Date: Fri Jan 17 21:57:52 1997 +0000 + + added DLIBRPMALIAS_FILENAME + + CVS patchset: 1321 + CVS date: 1997/01/17 21:57:52 + +commit b7daa4d1d0700944e6b1075fbd6911108b4a435c +Author: ewt +Date: Fri Jan 17 16:23:58 1997 +0000 + + use config.h, not misc-config.h + + CVS patchset: 1320 + CVS date: 1997/01/17 16:23:58 + +commit d9d67931b8a482835f119cdf63192134fbd13feb +Author: ewt +Date: Fri Jan 17 16:23:49 1997 +0000 + + added popt to Makefile.in + + CVS patchset: 1319 + CVS date: 1997/01/17 16:23:49 + +commit 265d11ee06dfa77f450d43d476f93b3493a98cbc +Author: ewt +Date: Fri Jan 17 16:23:22 1997 +0000 + + define PATH_MAX if necessary + + CVS patchset: 1318 + CVS date: 1997/01/17 16:23:22 + +commit 15e5bfc3ce8bf29b038f361141c3a68923b09e77 +Author: ewt +Date: Fri Jan 17 16:22:57 1997 +0000 + + 1) use config.h if available + 2) use if not ifdef + 3) use instead of + + CVS patchset: 1317 + CVS date: 1997/01/17 16:22:57 + +commit 9c23e2a5a99225d657d4ca5d2d1ae3379c3a77e1 +Author: ewt +Date: Fri Jan 17 16:22:45 1997 +0000 + + 1) use config.h if available + 2) use if not ifdef + 3) include + + CVS patchset: 1316 + CVS date: 1997/01/17 16:22:45 + +commit e95e75d71d2f0630b4e187a56d2f96b17bb9467f +Author: ewt +Date: Fri Jan 17 16:22:08 1997 +0000 + + use if not ifdef + include "misc.h" and "config.h" + + CVS patchset: 1315 + CVS date: 1997/01/17 16:22:08 + +commit 0a5763e9d1e5a60b3b6cdbad85da122a01dbfe90 +Author: ewt +Date: Fri Jan 17 16:21:51 1997 +0000 + + 1) use config.h if available + 2) use if not ifdef + 3) typevase getpid() to int for printf() + + CVS patchset: 1314 + CVS date: 1997/01/17 16:21:51 + +commit 9a3d1082496c15b73c887d9e6e3b47357abf6d12 +Author: ewt +Date: Fri Jan 17 16:21:38 1997 +0000 + + include + + CVS patchset: 1313 + CVS date: 1997/01/17 16:21:38 + +commit c1ba92895474b316b6b5b69e7b2a5cf6ab193110 +Author: ewt +Date: Fri Jan 17 16:20:18 1997 +0000 + + 1) use config.h if available + 2) use if not ifdef + + CVS patchset: 1312 + CVS date: 1997/01/17 16:20:18 + +commit c40e834ea0e7fec8af9b59bc09d1b3639199b5b6 +Author: ewt +Date: Fri Jan 17 16:20:10 1997 +0000 + + use config.h now + + CVS patchset: 1311 + CVS date: 1997/01/17 16:20:10 + +commit 176e84672b163a944bbceaf47c01b4dad3cc5cbd +Author: ewt +Date: Fri Jan 17 16:20:07 1997 +0000 + + Initial revision + + CVS patchset: 1310 + CVS date: 1997/01/17 16:20:07 + +commit 5f1329228093aac371dc22377493703973e23cbb +Author: ewt +Date: Fri Jan 17 16:19:51 1997 +0000 + + added topdir to -I path so we find config.h + + CVS patchset: 1309 + CVS date: 1997/01/17 16:19:51 + +commit fa6881186405884687724ab893323c50f0557310 +Author: ewt +Date: Fri Jan 17 15:48:09 1997 +0000 + + use config.h now + + CVS patchset: 1308 + CVS date: 1997/01/17 15:48:09 + +commit d731b1a1b0065c388da861710c99a9af6305dc28 +Author: ewt +Date: Fri Jan 17 15:41:28 1997 +0000 + + use if instead of ifdef + + CVS patchset: 1307 + CVS date: 1997/01/17 15:41:28 + +commit f54f87c666ebfdaafe8ab3644fb09d0d0a6c3e54 +Author: ewt +Date: Fri Jan 17 00:25:02 1997 +0000 + + made rpm depend on misc/libmisc.a + + CVS patchset: 1306 + CVS date: 1997/01/17 00:25:02 + +commit ca2c80ddf980e7596767b63d6c6801e8a5ebcac2 +Author: ewt +Date: Fri Jan 17 00:24:36 1997 +0000 + + Initial revision + + CVS patchset: 1305 + CVS date: 1997/01/17 00:24:36 + +commit f9f5e0cd4b65d45770308d0a89e4e1ffc3f37be4 +Author: ewt +Date: Thu Jan 16 23:26:42 1997 +0000 + + switched from getopt to popt + + CVS patchset: 1304 + CVS date: 1997/01/16 23:26:42 + +commit 21b9b7cabe014d7dcfdfc6b034c19057922ad68d +Author: ewt +Date: Thu Jan 16 19:49:45 1997 +0000 + + don't use config.h + + CVS patchset: 1303 + CVS date: 1997/01/16 19:49:45 + +commit e6914feda1c736c8a0528b68984214489a4ecb56 +Author: ewt +Date: Thu Jan 16 19:46:38 1997 +0000 + + Initial revision + + CVS patchset: 1302 + CVS date: 1997/01/16 19:46:38 + +commit 85719fbf14d8d7e95cc28fc0aacd9fa30daaa045 +Author: ewt +Date: Thu Jan 16 19:46:14 1997 +0000 + + use misc-config.h + + CVS patchset: 1301 + CVS date: 1997/01/16 19:46:14 + +commit b64894d7a8629f96c9e3e9d1eea0ec789fd22781 +Author: ewt +Date: Thu Jan 16 19:44:42 1997 +0000 + + use "miscfn.h" not + + CVS patchset: 1300 + CVS date: 1997/01/16 19:44:42 + +commit 944ef205b9744ae21dca06fd79d1e40f6a8f6aac +Author: ewt +Date: Thu Jan 16 19:44:24 1997 +0000 + + look for glob.h, fnmatch.hj + + CVS patchset: 1299 + CVS date: 1997/01/16 19:44:24 + +commit 23923edefb6baf38c62dc66fe1bc04f95d59cbfa +Author: ewt +Date: Thu Jan 16 19:44:15 1997 +0000 + + don't need INTLDEF + + CVS patchset: 1298 + CVS date: 1997/01/16 19:44:15 + +commit f8009aeafc0c15ac8673b03cb8d69f6d5d0d71cd +Author: ewt +Date: Thu Jan 16 19:43:48 1997 +0000 + + *** empty log message *** + + CVS patchset: 1297 + CVS date: 1997/01/16 19:43:48 + +commit 5142d097245909ca49396d0892dbcb609c05de06 +Author: ewt +Date: Thu Jan 16 17:24:51 1997 +0000 + + added RPMVAR_FIXPERMS + + CVS patchset: 1296 + CVS date: 1997/01/16 17:24:51 + +commit f8d36658fae430512a363c7f7c0fd6ed72244e47 +Author: ewt +Date: Thu Jan 16 17:24:37 1997 +0000 + + *** empty log message *** + + CVS patchset: 1295 + CVS date: 1997/01/16 17:24:37 + +commit 8114a6c58045edee36c94ecd11d358caa31195c2 +Author: ewt +Date: Thu Jan 16 17:24:00 1997 +0000 + + added fixperms entry + + CVS patchset: 1294 + CVS date: 1997/01/16 17:24:00 + +commit 2788ae7180e44f27c212e4b54f943467009db6a6 +Author: ewt +Date: Thu Jan 16 17:23:44 1997 +0000 + + look for POSIX chmod + + CVS patchset: 1293 + CVS date: 1997/01/16 17:23:44 + +commit ed2bd2bede9e3bcfc40e2e30b967901d0d15d626 +Author: ewt +Date: Thu Jan 16 17:23:29 1997 +0000 + + use RPMVAR_FIXPERMS rather then static chmod args + + CVS patchset: 1292 + CVS date: 1997/01/16 17:23:29 + +commit fc92e27c20aad91ce913041a05121a0a9466fae2 +Author: ewt +Date: Thu Jan 16 17:22:20 1997 +0000 + + use not + + CVS patchset: 1291 + CVS date: 1997/01/16 17:22:20 + +commit db2bf9fbf0bbb393fb728803db9e87014c2751ed +Author: ewt +Date: Thu Jan 16 17:03:58 1997 +0000 + + use "cp -pr" not "cp -ar" + + CVS patchset: 1290 + CVS date: 1997/01/16 17:03:58 + +commit 45bcb0704e5200fde9d25cd84ee5fab668db5e04 +Author: ewt +Date: Thu Jan 16 16:46:37 1997 +0000 + + Reimplemented header internals + + CVS patchset: 1289 + CVS date: 1997/01/16 16:46:37 + +commit ebcbd42cc294539b5307a689af0729cb2966c878 +Author: ewt +Date: Thu Jan 16 16:46:15 1997 +0000 + + *** empty log message *** + + CVS patchset: 1288 + CVS date: 1997/01/16 16:46:15 + +commit 8d2e35709ccff8e08040ce927dde0a8f945daafe +Author: ewt +Date: Thu Jan 16 16:45:52 1997 +0000 + + changed to rpm, 2.3.3 + + CVS patchset: 1287 + CVS date: 1997/01/16 16:45:52 + +commit 258f679cccd00317c97360e142c7d86827bf7693 +Author: ewt +Date: Thu Jan 16 16:20:45 1997 +0000 + + changed version to 2.3.2 + + CVS patchset: 1286 + CVS date: 1997/01/16 16:20:45 + +commit 80aca082350f800e542939b1b75027b99bbe9e77 +Author: ewt +Date: Thu Jan 16 16:18:48 1997 +0000 + + 1) fixed bug in rpmVersionCompare() with segv'd + 2) fixed silly type + + CVS patchset: 1285 + CVS date: 1997/01/16 16:18:48 + +commit 57d436b9c0e1825468d5a172eccce965cfaaad09 +Author: ewt +Date: Thu Jan 16 16:17:41 1997 +0000 + + *** empty log message *** + + CVS patchset: 1284 + CVS date: 1997/01/16 16:17:41 + +commit 9c82f20f126c8e6fa3fce4033ec959e8b782053f +Author: ewt +Date: Thu Jan 16 04:12:29 1997 +0000 + + use H_OLDHEADER not H_HEADER + + CVS patchset: 1283 + CVS date: 1997/01/16 04:12:29 + +commit 3895967ba829dd4f8b799bf7751262ac41a15023 +Author: ewt +Date: Wed Jan 15 22:46:41 1997 +0000 + + *** empty log message *** + + CVS patchset: 1282 + CVS date: 1997/01/15 22:46:41 + +commit 5c221d638b02f4441adb1e43bff0706c0a5f2ac2 +Author: ewt +Date: Wed Jan 15 22:45:36 1997 +0000 + + relocating packages didn't work when the package contained a directory + equivalent to the prefix + + CVS patchset: 1281 + CVS date: 1997/01/15 22:45:36 + +commit d9fc50656a1b1aa68262b70ec9b606e9d5f30326 +Author: ewt +Date: Wed Jan 15 16:55:20 1997 +0000 + + passes installprefix to child makes + + CVS patchset: 1280 + CVS date: 1997/01/15 16:55:20 + +commit 82a617f13f76a29a26e3172a8d28a49e0546f84c +Author: ewt +Date: Wed Jan 15 16:55:08 1997 +0000 + + make install needs to respect installprefix + + CVS patchset: 1279 + CVS date: 1997/01/15 16:55:08 + +commit e5b9e4adb3075b1adafabc341b7ab8f722d536bd +Author: ewt +Date: Wed Jan 15 16:26:57 1997 +0000 + + 1) don't export rpmEnsureOlder() + 2) added rpmVersionCompare() + + CVS patchset: 1278 + CVS date: 1997/01/15 16:26:57 + +commit 59ac149c8e193538bd13e21fb42c41f1c24c759d +Author: ewt +Date: Wed Jan 15 16:26:42 1997 +0000 + + don't close std[err,out] after a verify script + + CVS patchset: 1277 + CVS date: 1997/01/15 16:26:42 + +commit ba4290acd3de2ab0b9abe4c51ebf5249fb2ff900 +Author: ewt +Date: Wed Jan 15 16:24:14 1997 +0000 + + 1) made rpmEnsureOlder() static and user a header instead of strings + 2) use rpmvercmp() instead of vercmp() + 3) added rpmVersionCompare() + + CVS patchset: 1276 + CVS date: 1997/01/15 16:24:14 + +commit 0c7b02c1ef1911e7f9557139a275b5e675e06797 +Author: ewt +Date: Wed Jan 15 16:23:50 1997 +0000 + + changed vercmp() to rpmvercmp() + + CVS patchset: 1275 + CVS date: 1997/01/15 16:23:50 + +commit 4b893222661c81edd24de0b3bb84f017a192a9f7 +Author: ewt +Date: Wed Jan 15 16:23:24 1997 +0000 + + *** empty log message *** + + CVS patchset: 1274 + CVS date: 1997/01/15 16:23:24 + +commit e7cff19dc1c59bc5022d1bcc25891715402ae39d +Author: ewt +Date: Tue Jan 14 23:26:46 1997 +0000 + + *** empty log message *** + + CVS patchset: 1273 + CVS date: 1997/01/14 23:26:46 + +commit bd91e242c3044961d54611b0514f98cfe4959965 +Author: ewt +Date: Mon Jan 13 17:23:43 1997 +0000 + + add mkj's usage message + + CVS patchset: 1272 + CVS date: 1997/01/13 17:23:43 + +commit 052ae10749842cb1ecbe94e80d07691fc576c19e +Author: jbj +Date: Sat Jan 4 02:48:55 1997 +0000 + + Sanity (make dist). + + CVS patchset: 1271 + CVS date: 1997/01/04 02:48:55 + +commit 7ac91c9f8b0894cb4a00149b6ce5cd4a2fda60b6 +Author: jbj +Date: Sat Jan 4 02:48:55 1997 +0000 + + Sanity (make dist). + + CVS patchset: 1270 + CVS date: 1997/01/04 02:48:55 + +commit 8eacd2250ae19792c1bc14d567540f9d19dc3b97 +Author: jbj +Date: Sat Jan 4 02:17:22 1997 +0000 + + Add ufdSeek. + + CVS patchset: 1269 + CVS date: 1997/01/04 02:17:22 + +commit 3ba113e5e93ab595026462fecde7677f1038bb8c +Author: ewt +Date: Thu Jan 2 17:49:42 1997 +0000 + + added patter rule for running msgfmt + + CVS patchset: 1268 + CVS date: 1997/01/02 17:49:42 + +commit e3049ed75bcf9f72ce1ba582678c7ebc01245012 +Author: ewt +Date: Thu Jan 2 17:49:09 1997 +0000 + + 1) moved NLSDIR, NLSPACKAGE from Makefile.in + 2) changed to version 2.3.1 + + CVS patchset: 1267 + CVS date: 1997/01/02 17:49:09 + +commit 44dfc187e1df7bd18e9ceb7e5ee128e05ec93308 +Author: ewt +Date: Thu Jan 2 17:48:56 1997 +0000 + + changes to be more i18n friendly + + CVS patchset: 1266 + CVS date: 1997/01/02 17:48:56 + +commit 66e5b49d7d0001cc7a0fc03b44226104fb255b39 +Author: ewt +Date: Thu Jan 2 17:48:35 1997 +0000 + + don't pass NLSDIR to submakes (they get it from Makefile.inc instead) + + CVS patchset: 1265 + CVS date: 1997/01/02 17:48:35 + +commit 0332f9252ef9591a2feb9e6174f0dd224435ec6e +Author: ewt +Date: Thu Jan 2 17:48:29 1997 +0000 + + *** empty log message *** + + CVS patchset: 1264 + CVS date: 1997/01/02 17:48:29 + +commit 61d6be240dff65d907828d3227f0b9e07f28a33f +Author: ewt +Date: Thu Jan 2 17:46:32 1997 +0000 + + handle RPM_CHAR_TYPE like RPM_INT8_TYPE for queries + + CVS patchset: 1263 + CVS date: 1997/01/02 17:46:32 + +commit 6b71cfae881107942c0e9aa6f0c44722dcf3098a +Author: ewt +Date: Thu Jan 2 17:36:24 1997 +0000 + + Initial revision + + CVS patchset: 1262 + CVS date: 1997/01/02 17:36:24 + +commit 087d57853f8bc8f4791a0d2015191ffbbdb3d696 +Author: jbj +Date: Thu Jan 2 08:34:28 1997 +0000 + + Update header. + + CVS patchset: 1261 + CVS date: 1997/01/02 08:34:28 + +commit f8e8ec57a7a0ca37210513783703ca3ac25b4ae2 +Author: jbj +Date: Thu Jan 2 08:26:33 1997 +0000 + + Add header. + + CVS patchset: 1260 + CVS date: 1997/01/02 08:26:33 + +commit 519ad628bd1d260b7ad02cbd6ed965b70211c8db +Author: jbj +Date: Thu Jan 2 08:14:49 1997 +0000 + + Auto-update by jbj@redhat.com + + CVS patchset: 1259 + CVS date: 1997/01/02 08:14:49 + +commit 35b8b604d331fd1c151698a485835135761e1455 +Author: jbj +Date: Thu Jan 2 08:08:02 1997 +0000 + + Auto-update by jbj@redhat.com + + CVS patchset: 1258 + CVS date: 1997/01/02 08:08:02 + +commit a41111b03c947258c66c1aaf16d3116e519e1fd7 +Author: jbj +Date: Thu Jan 2 07:54:59 1997 +0000 + + Create. + + CVS patchset: 1257 + CVS date: 1997/01/02 07:54:59 + +commit 7dbc73fec627ec4760f8b031df64ee659c6e6a86 +Author: jbj +Date: Wed Jan 1 01:30:08 1997 +0000 + + Merge rpm-4.0.4 changes. + + CVS patchset: 1256 + CVS date: 1997/01/01 01:30:08 + +commit 931f010d2dcf882b5217be87485758ad82e57164 +Author: ewt +Date: Tue Dec 24 14:04:45 1996 +0000 + + *** empty log message *** + + CVS patchset: 1255 + CVS date: 1996/12/24 14:04:45 + +commit cfbce6ef6769ecba6b375c82d5a7c304dc763a48 +Author: ewt +Date: Tue Dec 24 14:03:11 1996 +0000 + + changed version to 2.3 + + CVS patchset: 1254 + CVS date: 1996/12/24 14:03:11 + +commit b442e7e1740787f644c448ecc1915122ef659f65 +Author: ewt +Date: Tue Dec 24 14:02:35 1996 +0000 + + don't check for setenv() anymore as we never use it anyway + + CVS patchset: 1253 + CVS date: 1996/12/24 14:02:35 + +commit c3caab7f1feb1052e6a83af9bb3a40af4c7afa95 +Author: ewt +Date: Tue Dec 24 14:02:21 1996 +0000 + + use doputenv() and dosetenv() + + CVS patchset: 1252 + CVS date: 1996/12/24 14:02:21 + +commit 02650a718564ca2c2a7fbd1cc16337b76341e51a +Author: ewt +Date: Tue Dec 24 14:01:56 1996 +0000 + + added doputenv(), dosetenv() + + CVS patchset: 1251 + CVS date: 1996/12/24 14:01:56 + +commit e03fdd38745392455f1dc9b41e0529855531bdeb +Author: ewt +Date: Tue Dec 24 14:00:52 1996 +0000 + + 1) don't chmod() directories that already exist + 2) stamp new directories which mtime + 3) set umask() to 0 + + CVS patchset: 1250 + CVS date: 1996/12/24 14:00:52 + +commit cb4abed453fa05c38122a9de0f3aed6d9b0f4398 +Author: ewt +Date: Fri Dec 20 22:50:53 1996 +0000 + + we weren't printing the sticky bit properly + + CVS patchset: 1249 + CVS date: 1996/12/20 22:50:53 + +commit 3d7e3545194172c6268c77d249ac4e6107398225 +Author: ewt +Date: Fri Dec 20 22:50:31 1996 +0000 + + *** empty log message *** + + CVS patchset: 1248 + CVS date: 1996/12/20 22:50:31 + +commit 6a5447106abef1c23bf937bfe52a56f7d8b9b48d +Author: ewt +Date: Fri Dec 20 22:48:42 1996 +0000 + + gave it more snae handling of symlinks + + CVS patchset: 1247 + CVS date: 1996/12/20 22:48:42 + +commit 2030ca0f9c171ba481e5e7d74a7ee01a9a7bc4a5 +Author: ewt +Date: Mon Dec 16 03:31:16 1996 +0000 + + changed version to 2.2.11 + + CVS patchset: 1246 + CVS date: 1996/12/16 03:31:16 + +commit 01ec02b6ae3b70d061c93a309cf624e482dfeabb +Author: ewt +Date: Mon Dec 16 03:31:03 1996 +0000 + + *** empty log message *** + + CVS patchset: 1245 + CVS date: 1996/12/16 03:31:03 + +commit 74ff0bac2bff51e637ae53420490af06f086ab47 +Author: ewt +Date: Mon Dec 16 03:29:41 1996 +0000 + + fixed silly include file ordering problems on FreeBSD + + CVS patchset: 1244 + CVS date: 1996/12/16 03:29:41 + +commit c7e3a366838e1fb053360bb9bdb9f7cc8377f221 +Author: ewt +Date: Mon Dec 16 03:29:13 1996 +0000 + + fixed silly ifdef logic + + CVS patchset: 1243 + CVS date: 1996/12/16 03:29:13 + +commit 34e7fe62834bd2effd5a6b34ff696dde5f18cbd8 +Author: ewt +Date: Mon Dec 16 03:28:52 1996 +0000 + + changed order of include files for broken FreeBSD + + CVS patchset: 1242 + CVS date: 1996/12/16 03:28:52 + +commit 6c4819a2b885bc8c9cf307020a46bd55bd67ca6e +Author: ewt +Date: Thu Dec 12 21:33:45 1996 +0000 + + fixed some typoes + + CVS patchset: 1241 + CVS date: 1996/12/12 21:33:45 + +commit 86982f323309afdde38ea6e0bb546621e11568f1 +Author: ewt +Date: Thu Dec 12 16:38:19 1996 +0000 + + improved test for rpm + + CVS patchset: 1240 + CVS date: 1996/12/12 16:38:19 + +commit 215e5c00f914b3c3138da0aa837c41a3714e835c +Author: ewt +Date: Thu Dec 12 16:37:22 1996 +0000 + + changed "struct option" to "struct rpmoption" to avoid conflicts with some + broken header files + + CVS patchset: 1239 + CVS date: 1996/12/12 16:37:22 + +commit 3a09a368306fb9180bf1306f31f02a8b9f49bfb7 +Author: ewt +Date: Thu Dec 12 16:35:54 1996 +0000 + + include intl.h instead of libintl.h + + CVS patchset: 1238 + CVS date: 1996/12/12 16:35:54 + +commit 69b514ef3dbeb2f4646b102f36d98fab1e103814 +Author: ewt +Date: Thu Dec 12 03:56:30 1996 +0000 + + use RPM not RPMSTATIC + + CVS patchset: 1237 + CVS date: 1996/12/12 03:56:30 + +commit 481fed5eec8a7874962e6455c9b37bf6d3686a4f +Author: ewt +Date: Thu Dec 12 03:52:15 1996 +0000 + + don't build both rpm and rpm.shared + + CVS patchset: 1236 + CVS date: 1996/12/12 03:52:15 + +commit 6acc8213ea3f04be31e6fa7b22db444687eea7e3 +Author: ewt +Date: Thu Dec 12 03:51:58 1996 +0000 + + *** empty log message *** + + CVS patchset: 1235 + CVS date: 1996/12/12 03:51:58 + +commit 048759f728cfad06e8f8b3e0d305e1d387bdcd02 +Author: ewt +Date: Thu Dec 12 03:44:29 1996 +0000 + + Initial revision + + CVS patchset: 1234 + CVS date: 1996/12/12 03:44:29 + +commit dec77c92e85e56f81a083a1ed02a3f39aab6bb4b +Author: ewt +Date: Thu Dec 12 03:35:01 1996 +0000 + + use _exit instead of exit in forks + + CVS patchset: 1233 + CVS date: 1996/12/12 03:35:01 + +commit 82b53b60a1767a3f8395748c0d1a2ba0062b0b25 +Author: ewt +Date: Thu Dec 12 03:34:18 1996 +0000 + + added include of sys/types.h + + CVS patchset: 1232 + CVS date: 1996/12/12 03:34:18 + +commit 11ebfc5a8ebde0fa36bebbdc65233c5657199728 +Author: ewt +Date: Thu Dec 12 03:33:47 1996 +0000 + + changes to detect amiga's + + CVS patchset: 1231 + CVS date: 1996/12/12 03:33:47 + +commit c6a77883f8a744633ce336e8037c8197899c135d +Author: ewt +Date: Thu Dec 12 03:33:32 1996 +0000 + + 1) added IP22 arch + 2) added FreeBSD OS + + CVS patchset: 1230 + CVS date: 1996/12/12 03:33:32 + +commit 491bea2511f8a323b203955af600b4c45640c886 +Author: ewt +Date: Thu Dec 12 03:33:12 1996 +0000 + + removed INTLDEF thanks to intl.h + + CVS patchset: 1229 + CVS date: 1996/12/12 03:33:12 + +commit 2e1c47a108928705863878bd15c689a15914a287 +Author: ewt +Date: Thu Dec 12 03:32:40 1996 +0000 + + 1) added --disable-nls + 2) slight support for cross compiling + 3) check for libintl.h + + CVS patchset: 1228 + CVS date: 1996/12/12 03:32:40 + +commit 329e94d98e96cb0f5a64b87e0ad5108dd7c50f3e +Author: ewt +Date: Thu Dec 12 03:32:22 1996 +0000 + + made include of alloca.h conditional + + CVS patchset: 1227 + CVS date: 1996/12/12 03:32:22 + +commit a255e37e2f377f50a1f7b883fed193fa36f453c6 +Author: ewt +Date: Thu Dec 12 03:31:50 1996 +0000 + + 1) made install of po directory conditional + + CVS patchset: 1226 + CVS date: 1996/12/12 03:31:50 + +commit fa32168afed4d92b260e3f357d2c18b4044975e8 +Author: ewt +Date: Thu Dec 12 03:31:35 1996 +0000 + + *** empty log message *** + + CVS patchset: 1225 + CVS date: 1996/12/12 03:31:35 + +commit c3ae492d1e3bc18d8dfd84227e17d2c42bfda755 +Author: ewt +Date: Thu Dec 12 03:21:00 1996 +0000 + + minor cleanups -- the gz stream was never getting closed + + CVS patchset: 1224 + CVS date: 1996/12/12 03:21:00 + +commit 602b387052b3dbe04b923261d06ec57ed52e3cd8 +Author: ewt +Date: Thu Dec 12 03:01:09 1996 +0000 + + Initial revision + + CVS patchset: 1223 + CVS date: 1996/12/12 03:01:09 + +commit 5360171eb08096bedc6989176b569a38685d0080 +Author: ewt +Date: Wed Dec 11 19:15:36 1996 +0000 + + fixed case w/ no soname + + CVS patchset: 1222 + CVS date: 1996/12/11 19:15:36 + +commit 86e019bab8a171bed4317ef6b92cc9aba143055e +Author: ewt +Date: Wed Dec 11 15:53:58 1996 +0000 + + actually fixed core dump this time + + CVS patchset: 1221 + CVS date: 1996/12/11 15:53:58 + +commit 211c385eade66c3133127f7ef0ad644690df7e20 +Author: ewt +Date: Wed Dec 11 15:39:57 1996 +0000 + + fixed the fix from memory leak plugging + + CVS patchset: 1220 + CVS date: 1996/12/11 15:39:57 + +commit 65c137ada83c4fe30a5b8a207e518a34ee71382b +Author: ewt +Date: Tue Dec 10 23:15:20 1996 +0000 + + fixed GNU cpio detection + + CVS patchset: 1219 + CVS date: 1996/12/10 23:15:20 + +commit 3b9d4aa2b3bc32f3684a1ac206b45f1c26571ec7 +Author: ewt +Date: Mon Dec 9 19:33:25 1996 +0000 + + *** empty log message *** + + CVS patchset: 1218 + CVS date: 1996/12/09 19:33:25 + +commit 238ba73b8152cc6e2f2f49641a7fadfd2a84cc58 +Author: ewt +Date: Mon Dec 9 19:32:48 1996 +0000 + + changed canonical name for 68k to m68k + + CVS patchset: 1217 + CVS date: 1996/12/09 19:32:48 + +commit cb0d3c339c543a8a33c6a9bc2c99e94c52b27f35 +Author: root +Date: Fri Dec 6 20:25:36 1996 +0000 + + fixed dbiFreeIndex() in rpmInstallPackage() to be called only when it + was needed + + CVS patchset: 1216 + CVS date: 1996/12/06 20:25:36 + +commit 6a73bab77c4fb890ec7ae131300a8600fa215b46 +Author: root +Date: Fri Dec 6 16:53:54 1996 +0000 + + *** empty log message *** + + CVS patchset: 1215 + CVS date: 1996/12/06 16:53:54 + +commit 3a60f69697d00783fa6809f3d006d2a9f5907552 +Author: root +Date: Fri Dec 6 16:52:11 1996 +0000 + + use select() rather than busy waiting in cpio_gzip() + + CVS patchset: 1214 + CVS date: 1996/12/06 16:52:11 + +commit 968063fbab40cafd00b9747254e6ea729c777ce5 +Author: root +Date: Fri Dec 6 16:51:52 1996 +0000 + + if spec check fails, fail. + + CVS patchset: 1213 + CVS date: 1996/12/06 16:51:52 + +commit 374bbf39c9938b3fe4f772bd818e8d2569ba574e +Author: root +Date: Fri Dec 6 16:06:39 1996 +0000 + + added dummy object file to make some ar's happy + + CVS patchset: 1212 + CVS date: 1996/12/06 16:06:39 + +commit 1bcd4b342f47a79113263198c52e15076340ff8a +Author: ewt +Date: Fri Dec 6 04:08:23 1996 +0000 + + *** empty log message *** + + CVS patchset: 1211 + CVS date: 1996/12/06 04:08:23 + +commit 550e8442c388cf08322c4e52823ec7d8fe31b5aa +Author: ewt +Date: Fri Dec 6 04:07:28 1996 +0000 + + plugged memory leaks in upgrade + + CVS patchset: 1210 + CVS date: 1996/12/06 04:07:28 + +commit 1bcc465f1901962afc56fa41311705a6b1165557 +Author: ewt +Date: Thu Dec 5 22:13:46 1996 +0000 + + dependency checking didn't work with a NULL database (conflicts broke this) + + CVS patchset: 1209 + CVS date: 1996/12/05 22:13:46 + +commit 1346212e7720bfcfbbd1ad1e53e9005e74c2d8fb +Author: ewt +Date: Thu Dec 5 22:13:07 1996 +0000 + + changed version from 2.3 to 2.2.10 :-( + + CVS patchset: 1208 + CVS date: 1996/12/05 22:13:07 + +commit f2514c928236d176559d6efe330aca395b8ff5a4 +Author: ewt +Date: Thu Dec 5 22:13:03 1996 +0000 + + *** empty log message *** + + CVS patchset: 1207 + CVS date: 1996/12/05 22:13:03 + +commit ebecf603469dffbb78c6cc68f1f9a5ef49009f4a +Author: ewt +Date: Thu Dec 5 22:04:44 1996 +0000 + + don't let cpio create *any* directories + + CVS patchset: 1206 + CVS date: 1996/12/05 22:04:44 + +commit 2690f0eeca09973a62d1629d5bf06bf8804b8d74 +Author: ewt +Date: Thu Dec 5 21:11:17 1996 +0000 + + 1) netsharedpath had unhappy realtions with prefix's + + CVS patchset: 1205 + CVS date: 1996/12/05 21:11:17 + +commit ae884fe7d6a1445e41bc7965f88cc28341a4687a +Author: ewt +Date: Thu Dec 5 00:01:49 1996 +0000 + + allow -qip - + + CVS patchset: 1204 + CVS date: 1996/12/05 00:01:49 + +commit db144206b5f35d612b038a5b0538e4433bc1299a +Author: ewt +Date: Mon Dec 2 23:27:39 1996 +0000 + + look for GNU cpio 2.4.2 or later (w/ --quiet support), not just + GNU cpio (with --help support) + + CVS patchset: 1203 + CVS date: 1996/12/02 23:27:39 + +commit 131f695565fd10bb68234a1edabfa1f523d4ac6e +Author: ewt +Date: Mon Nov 25 20:17:57 1996 +0000 + + use "objdump -p" rather then hacking it + + CVS patchset: 1202 + CVS date: 1996/11/25 20:17:57 + +commit 1729d08c2af7066a3d7910d17c60dcf37ff4ed5f +Author: ewt +Date: Mon Nov 25 16:05:08 1996 +0000 + + Elliot says this one actually works! + + CVS patchset: 1201 + CVS date: 1996/11/25 16:05:08 + +commit a1ba4b7be3c2c5054a51a540764097eb0a8b0797 +Author: ewt +Date: Mon Nov 25 16:03:04 1996 +0000 + + removed spurious topdir entry + + CVS patchset: 1200 + CVS date: 1996/11/25 16:03:04 + +commit fea564a773cccd40296ab05c9d44288f0354d385 +Author: ewt +Date: Mon Nov 25 16:02:48 1996 +0000 + + Initial revision + + CVS patchset: 1199 + CVS date: 1996/11/25 16:02:48 + +commit c43e1a299cf5f3898c61481ce6635d5a6d5815c5 +Author: ewt +Date: Fri Nov 22 22:24:59 1996 +0000 + + *** empty log message *** + + CVS patchset: 1198 + CVS date: 1996/11/22 22:24:59 + +commit 83484cf5fbd41e58b4485ac6c409c5313b10b572 +Author: ewt +Date: Fri Nov 22 21:49:56 1996 +0000 + + changed tag for alphas to alpha from axp + + CVS patchset: 1197 + CVS date: 1996/11/22 21:49:56 + +commit 6d92aa115f100ae826acca2db70d6ef212f7dfb2 +Author: ewt +Date: Fri Nov 22 20:01:06 1996 +0000 + + changed to version 2.3 + + CVS patchset: 1196 + CVS date: 1996/11/22 20:01:06 + +commit 8322d1044d70d37c329b70f43b130025e80005d8 +Author: ewt +Date: Fri Nov 22 19:23:11 1996 +0000 + + *** empty log message *** + + CVS patchset: 1195 + CVS date: 1996/11/22 19:23:11 + +commit 8e51231790f2309e185e0982a26beff3351c321c +Author: ewt +Date: Fri Nov 22 19:22:33 1996 +0000 + + *** empty log message *** + + CVS patchset: 1194 + CVS date: 1996/11/22 19:22:33 + +commit 0ac124afc2edf15fee047832e9191b4c6363d5cb +Author: ewt +Date: Fri Nov 22 17:20:00 1996 +0000 + + added rpmVerifyScript() + + CVS patchset: 1193 + CVS date: 1996/11/22 17:20:00 + +commit ba2f38194d6109cd9e94dcf7d68caa0526c4e2e5 +Author: ewt +Date: Fri Nov 22 17:19:45 1996 +0000 + + 1) changed some "uninstall" references to "erase" references + + CVS patchset: 1192 + CVS date: 1996/11/22 17:19:45 + +commit b31d0fa4623ff870502e8292f51542b6197272fe +Author: ewt +Date: Fri Nov 22 17:19:34 1996 +0000 + + --scripts prints verify script + + CVS patchset: 1191 + CVS date: 1996/11/22 17:19:34 + +commit 8c77f11f06d8411848119a25b0390555f89b13ae +Author: ewt +Date: Fri Nov 22 17:19:25 1996 +0000 + + added VERIFY_SCRIPTS falg + + CVS patchset: 1190 + CVS date: 1996/11/22 17:19:25 + +commit 25fae5a415b0eb08051c46fbf7525240db2adebf +Author: ewt +Date: Fri Nov 22 17:19:14 1996 +0000 + + added VERIFY_SCRIPTS support + + CVS patchset: 1189 + CVS date: 1996/11/22 17:19:14 + +commit 251232e36f5c6bd2ba7e7c31252607f15ffd9f7f +Author: ewt +Date: Fri Nov 22 17:18:37 1996 +0000 + + *** empty log message *** + + CVS patchset: 1188 + CVS date: 1996/11/22 17:18:37 + +commit 15887305ad8cb323655217915e80c7f69dd034de +Author: ewt +Date: Thu Nov 21 22:30:11 1996 +0000 + + *** empty log message *** + + CVS patchset: 1187 + CVS date: 1996/11/21 22:30:11 + +commit 90dffed8722d4d308963e5d0116650f2fc4e1e6a +Author: root +Date: Thu Nov 21 22:24:34 1996 +0000 + + use find-requires + + CVS patchset: 1186 + CVS date: 1996/11/21 22:24:34 + +commit abee89799bc33ee876ad4bef9ecdcb88c1d100ef +Author: root +Date: Thu Nov 21 22:16:25 1996 +0000 + + oops + + CVS patchset: 1185 + CVS date: 1996/11/21 22:16:25 + +commit 774c0df66a42f7e4fa85167f9aeee503d788dca2 +Author: ewt +Date: Thu Nov 21 22:16:00 1996 +0000 + + removed extra grep + + CVS patchset: 1184 + CVS date: 1996/11/21 22:16:00 + +commit 796032899f5ff50563ff8f44fbd7f94542b61a62 +Author: ewt +Date: Thu Nov 21 22:06:06 1996 +0000 + + don't ever cause core dumps + + CVS patchset: 1183 + CVS date: 1996/11/21 22:06:06 + +commit 61b3ba144f3a9cc1f36c11600140724a4a029e90 +Author: ewt +Date: Thu Nov 21 22:05:26 1996 +0000 + + 1) look for => instead of ! "statically linked" + 2) don't follow symlinks + 3) use basename on lib names + + CVS patchset: 1182 + CVS date: 1996/11/21 22:05:26 + +commit ae565589c53c9b2f6882b6433e0ac6eb707a619e +Author: ewt +Date: Thu Nov 21 22:00:02 1996 +0000 + + 1) moved find-provides to autodeps + 2) added requires shell script + + CVS patchset: 1181 + CVS date: 1996/11/21 22:00:02 + +commit edd6929adcc2c4507ba7aedf96583e3d37da3134 +Author: ewt +Date: Thu Nov 21 21:58:50 1996 +0000 + + Initial revision + + CVS patchset: 1180 + CVS date: 1996/11/21 21:58:50 + +commit 8f846037f5df73eda19529ad0e8ff2532c3c6269 +Author: ewt +Date: Tue Nov 19 20:35:51 1996 +0000 + + follow symlinks and ignore 'file' errors + + CVS patchset: 1179 + CVS date: 1996/11/19 20:35:51 + +commit 96858e59b086e62af97f2358652ac2c28399c293 +Author: root +Date: Tue Nov 19 20:30:29 1996 +0000 + + run find-provides on *all* files in the file list + + CVS patchset: 1178 + CVS date: 1996/11/19 20:30:29 + +commit 06426ba98a17d4e889a3d77a8e84de124021dc35 +Author: root +Date: Tue Nov 19 02:47:46 1996 +0000 + + cleanup + + CVS patchset: 1177 + CVS date: 1996/11/19 02:47:46 + +commit f0c802769591e13ddb369728012719cc9ba7f038 +Author: root +Date: Mon Nov 18 23:16:46 1996 +0000 + + *** empty log message *** + + CVS patchset: 1176 + CVS date: 1996/11/18 23:16:46 + +commit 89bb32a2c0cb9a9ed211abecd24199f5598e4025 +Author: root +Date: Mon Nov 18 23:15:51 1996 +0000 + + only add trigger entries if there are triggers! + + CVS patchset: 1175 + CVS date: 1996/11/18 23:15:51 + +commit 21abb0ace5c6eca7b4b80acac1dc3a47ddf591a5 +Author: root +Date: Mon Nov 18 23:15:21 1996 +0000 + + handle new ldd where it returns 1 for non executables + + CVS patchset: 1174 + CVS date: 1996/11/18 23:15:21 + +commit 735c84c83a595f7376090a3d9ebd9e31f24e745e +Author: root +Date: Mon Nov 18 21:29:23 1996 +0000 + + fix -Q + + CVS patchset: 1173 + CVS date: 1996/11/18 21:29:23 + +commit ab10d4e17d71bd786a68902fcb806bafbc81e6a1 +Author: root +Date: Mon Nov 18 18:10:00 1996 +0000 + + Initial revision + + CVS patchset: 1172 + CVS date: 1996/11/18 18:10:00 + +commit d382745d17ae859c0ad43d691648da576bd70907 +Author: root +Date: Mon Nov 18 18:02:36 1996 +0000 + + The Great Renaming + + CVS patchset: 1171 + CVS date: 1996/11/18 18:02:36 + +commit 5c46c799f264c30b6414f4a64e27b42ca829bb51 +Author: ewt +Date: Fri Nov 15 22:22:38 1996 +0000 + + include find-provides in many make actions + + CVS patchset: 1170 + CVS date: 1996/11/15 22:22:38 + +commit 2575803c35b71fcdf153f5dfbb86dc4607a85066 +Author: ewt +Date: Fri Nov 15 21:04:09 1996 +0000 + + made find-provides os specific + + CVS patchset: 1169 + CVS date: 1996/11/15 21:04:09 + +commit 783f6c4617344c1a6bb6a4b6e42f8f2e4be6b908 +Author: ewt +Date: Fri Nov 15 20:54:16 1996 +0000 + + added rpmReadPackageInfo(), RPMTAG_EXTERNAL_TAG + + CVS patchset: 1168 + CVS date: 1996/11/15 20:54:16 + +commit 68b3ca9ea6933cd8b0bf42e85a5cc1608e26e14d +Author: ewt +Date: Fri Nov 15 20:54:00 1996 +0000 + + cleaned up pkgReadHeader() mechanism + + CVS patchset: 1167 + CVS date: 1996/11/15 20:54:00 + +commit 8af7afa86842ab2df27e91bdba4af5604482de79 +Author: ewt +Date: Fri Nov 15 20:53:34 1996 +0000 + + *** empty log message *** + + CVS patchset: 1166 + CVS date: 1996/11/15 20:53:34 + +commit 3b5163a3d9ef7be5b8a8f382e928517f78ce72cd +Author: ewt +Date: Fri Nov 15 17:44:35 1996 +0000 + + *** empty log message *** + + CVS patchset: 1165 + CVS date: 1996/11/15 17:44:35 + +commit 737def7522d2e5ade38b409a680b16abe697a1b0 +Author: ewt +Date: Fri Nov 15 17:42:53 1996 +0000 + + changed to 2.2.9 + + CVS patchset: 1164 + CVS date: 1996/11/15 17:42:53 + +commit 34a0dc192ab147fae33736814b1b6e34596ecf89 +Author: ewt +Date: Fri Nov 15 17:41:48 1996 +0000 + + made getBooleanVar() a -bit- better + + CVS patchset: 1163 + CVS date: 1996/11/15 17:41:48 + +commit 10eda0cb8ad5dc61cd64bc0d44446063c7ebda9b +Author: root +Date: Thu Nov 14 21:57:24 1996 +0000 + + verify script stuff + + CVS patchset: 1162 + CVS date: 1996/11/14 21:57:24 + +commit 35f133a8cb4fbb5be7bfa22488d4a64d81f9e851 +Author: root +Date: Thu Nov 14 21:55:41 1996 +0000 + + specFile tagging + + CVS patchset: 1161 + CVS date: 1996/11/14 21:55:41 + +commit 468a4386fef259bfff019168f2aeec004fec6614 +Author: root +Date: Thu Nov 14 17:59:05 1996 +0000 + + added specfile flag, verifyscript tag + + CVS patchset: 1160 + CVS date: 1996/11/14 17:59:05 + +commit 098609bcf66f7418cdc387781dfe2f4bac60ea13 +Author: root +Date: Thu Nov 14 17:37:06 1996 +0000 + + Initial revision + + CVS patchset: 1159 + CVS date: 1996/11/14 17:37:06 + +commit 64a4f1d940106da168e7c584d40da79773c9afff +Author: root +Date: Thu Nov 14 17:36:01 1996 +0000 + + added trigger stuff + export ReqComparisons + clean up messages a bit + + CVS patchset: 1158 + CVS date: 1996/11/14 17:36:01 + +commit 54ccf16a42762a3fe29aaa07d60fc39ba330b8e7 +Author: root +Date: Thu Nov 14 17:35:32 1996 +0000 + + added trigger stuff + + CVS patchset: 1157 + CVS date: 1996/11/14 17:35:32 + +commit 7031b1cc8c6044081915e2b421508c1490cd50f2 +Author: root +Date: Thu Nov 14 17:35:21 1996 +0000 + + added trigger.o + + CVS patchset: 1156 + CVS date: 1996/11/14 17:35:21 + +commit 3bb883b77be722e7aaf5dd75a1a8e64296fa8a2a +Author: root +Date: Thu Nov 14 16:02:55 1996 +0000 + + duh + + CVS patchset: 1155 + CVS date: 1996/11/14 16:02:55 + +commit fb970c7e75f094ebc2737998de652aa4396613fb +Author: root +Date: Wed Nov 13 23:15:08 1996 +0000 + + added TRIGGER entries + + CVS patchset: 1154 + CVS date: 1996/11/13 23:15:08 + +commit ffe3bf87ddd47ae0d11120d9d54521870d6de210 +Author: ewt +Date: Wed Nov 6 21:08:25 1996 +0000 + + Initial revision + + CVS patchset: 1153 + CVS date: 1996/11/06 21:08:25 + +commit bd5f7932af8bea7013caf6bedeab71c56bbcee01 +Author: ewt +Date: Wed Nov 6 21:03:55 1996 +0000 + + changed to use #!/bin/bash + + CVS patchset: 1152 + CVS date: 1996/11/06 21:03:55 + +commit f22482e83c54f28dcf84c8dfc8de1c3d8bca5199 +Author: ewt +Date: Wed Nov 6 20:58:54 1996 +0000 + + got rid of a printf("%s", NULL) + + CVS patchset: 1151 + CVS date: 1996/11/06 20:58:54 + +commit f53478370c87e6678d599cbdfcba6a9fbda3c793 +Author: ewt +Date: Wed Nov 6 14:37:21 1996 +0000 + + don't verify files that were never installed (i.e. because of --excludedocs) + + CVS patchset: 1150 + CVS date: 1996/11/06 14:37:21 + +commit 3feb50cd98e149d264ed8a8a090de899539c5ea2 +Author: ewt +Date: Wed Nov 6 14:37:07 1996 +0000 + + added paragraph on --excludedocs + + CVS patchset: 1149 + CVS date: 1996/11/06 14:37:07 + +commit c6ebbac4b83eb9b49c99554078e5dcfde0487754 +Author: ewt +Date: Thu Oct 31 23:52:27 1996 +0000 + + fixed typo + + CVS patchset: 1148 + CVS date: 1996/10/31 23:52:27 + +commit 4e60ff902f5dde8ba8ea88275bebc45e6f769212 +Author: ewt +Date: Thu Oct 31 21:09:26 1996 +0000 + + *** empty log message *** + + CVS patchset: 1147 + CVS date: 1996/10/31 21:09:26 + +commit 14f0517569adebbd072e19a843f8ab128b1252d3 +Author: ewt +Date: Thu Oct 31 21:08:44 1996 +0000 + + added defaultdocdir + + CVS patchset: 1146 + CVS date: 1996/10/31 21:08:44 + +commit 845a829172308ba1c3c7719e0a843fde0b36578f +Author: ewt +Date: Thu Oct 31 21:08:23 1996 +0000 + + fixed message() call to not print NULL %s + + CVS patchset: 1145 + CVS date: 1996/10/31 21:08:23 + +commit b8a8ae879605e372bb3b823839e63c30b8127991 +Author: ewt +Date: Thu Oct 31 21:08:05 1996 +0000 + + use RPMVAR_DEFAULTDOCDIR + + CVS patchset: 1144 + CVS date: 1996/10/31 21:08:05 + +commit 17b351fe0d05a2beb0ac60d16b1dfe719a2d4e40 +Author: ewt +Date: Thu Oct 31 21:07:55 1996 +0000 + + added RPMVAR_DEFAULTDOCDIR + + CVS patchset: 1143 + CVS date: 1996/10/31 21:07:55 + +commit 95fc0bdd1dab527d8cd90d63bf8d2980ea16ccf4 +Author: ewt +Date: Thu Oct 31 21:07:30 1996 +0000 + + 1) don't remove package when preinstall script fails + 2) removed extraneous \n from error() calls + + CVS patchset: 1142 + CVS date: 1996/10/31 21:07:30 + +commit daae77f092a2bd4a21374ccd7e5a7cabd603b304 +Author: ewt +Date: Thu Oct 31 21:06:55 1996 +0000 + + 1) removed \n from error() calls + 2) checks for writeable source/spec directories when installing source + packages + 3) returns proper codes when installing source packages + + CVS patchset: 1141 + CVS date: 1996/10/31 21:06:55 + +commit 26e07c47b461b75d4cda1a95cb954200dcd3df1f +Author: ewt +Date: Thu Oct 31 21:06:20 1996 +0000 + + --root should work with --initdb + + CVS patchset: 1140 + CVS date: 1996/10/31 21:06:20 + +commit 50eae3a5a4b51e043106d1f0c21e5934afb5c5e8 +Author: ewt +Date: Thu Oct 31 19:54:26 1996 +0000 + + kill(2) arguments were backwards + + CVS patchset: 1139 + CVS date: 1996/10/31 19:54:26 + +commit 9ff81b985e6d477f04101d31f7937fe49ef0a9be +Author: ewt +Date: Thu Oct 31 19:53:35 1996 +0000 + + use separate chgrp/chown commands (slightly more portable, if a bit + slower) + + CVS patchset: 1138 + CVS date: 1996/10/31 19:53:35 + +commit 34a53b48993321ecf3e7d640048ef1c875081883 +Author: ewt +Date: Thu Oct 31 19:48:54 1996 +0000 + + moved optflags, topdir defaults from rpmrc to here, removed rpmrc + + CVS patchset: 1137 + CVS date: 1996/10/31 19:48:54 + +commit dce5886eb8965c5b868d4810ef20ccaf148cc778 +Author: ewt +Date: Thu Oct 31 19:48:42 1996 +0000 + + removed /etc/rpmrc install (as we don't ship a default anymore) + + CVS patchset: 1136 + CVS date: 1996/10/31 19:48:42 + +commit e68c9160919324b48529f03a33688d98c422d532 +Author: ewt +Date: Thu Oct 31 19:45:35 1996 +0000 + + added real fix for 2.1 kernel write() behavior + + CVS patchset: 1135 + CVS date: 1996/10/31 19:45:35 + +commit 000e1792b2d1be1645b67a7f265c48fc369c23ff +Author: ewt +Date: Thu Oct 31 19:45:09 1996 +0000 + + fixed ultrasparc number + + CVS patchset: 1134 + CVS date: 1996/10/31 19:45:09 + +commit afaa5018bc2bc26b4e2d1929e1be0fb5a7592d2d +Author: ewt +Date: Thu Oct 31 19:44:13 1996 +0000 + + added ultrasparc arch tags + + CVS patchset: 1133 + CVS date: 1996/10/31 19:44:13 + +commit ae2878694cc575240f0cecddca856f58e501453c +Author: root +Date: Wed Oct 30 02:30:01 1996 +0000 + + add %patch -E + + CVS patchset: 1132 + CVS date: 1996/10/30 02:30:01 + +commit 02f638f9e098e7b8f1d3de62867638b1ecb2be34 +Author: ewt +Date: Tue Oct 22 22:32:20 1996 +0000 + + 1) don't use getpwuid() to get username for uid 0, just use "root" + + CVS patchset: 1131 + CVS date: 1996/10/22 22:32:20 + +commit 6ff46f65f50477f4927649c44a74f5080314c315 +Author: ewt +Date: Mon Oct 21 02:20:20 1996 +0000 + + *** empty log message *** + + CVS patchset: 1130 + CVS date: 1996/10/21 02:20:20 + +commit 947a93a597108fb4e1f905cdfb96c5d72c9db159 +Author: ewt +Date: Mon Oct 21 02:19:37 1996 +0000 + + 1) never removed files which are state RPMFILE_STATE_NOTINSTALLED + + CVS patchset: 1129 + CVS date: 1996/10/21 02:19:37 + +commit 6d61fa694c55af74acd157f403689e722e49101d +Author: ewt +Date: Mon Oct 21 02:19:15 1996 +0000 + + 1) added RPMVAR_NETSHAREDPATH + 2) added netsharedPath parameter to rpmInstallPackage() + + CVS patchset: 1128 + CVS date: 1996/10/21 02:19:15 + +commit 65194700ee22180beac65e2a0a1be06ba4cea555 +Author: ewt +Date: Mon Oct 21 02:18:54 1996 +0000 + + 1) added RPMVAR_NETSHAREDPATH + 2) don't exit w/ unknown options are in rpmrc files + + CVS patchset: 1127 + CVS date: 1996/10/21 02:18:54 + +commit b144da7d021892476b178e71347df1e51dd48ffd +Author: ewt +Date: Mon Oct 21 02:17:39 1996 +0000 + + 1) moved code around to make things a bit more readable + 2) added support for netsharedPath's + 3) cleaned up some memory leaks + + CVS patchset: 1126 + CVS date: 1996/10/21 02:17:39 + +commit 25cc5d49e1634fec2b1946c8f591a6958f9882fe +Author: ewt +Date: Mon Oct 21 02:17:23 1996 +0000 + + conflict checking was using the wrong header + + CVS patchset: 1125 + CVS date: 1996/10/21 02:17:23 + +commit 3cc144a2f83dc71f1c13bca388a8a2fde29027b4 +Author: ewt +Date: Mon Oct 21 02:14:17 1996 +0000 + + handles RPMFILE_STATE_NETSHARED, prints number of unknown states + + CVS patchset: 1124 + CVS date: 1996/10/21 02:14:17 + +commit 40ce2dafe7cb73d7163fda5df776b4c7dd914715 +Author: ewt +Date: Mon Oct 21 02:14:02 1996 +0000 + + passes netSharedPath() from rpmrc + + CVS patchset: 1123 + CVS date: 1996/10/21 02:14:02 + +commit e2b02ae48ba26c36423ac1a537e4e720ec19ad55 +Author: ewt +Date: Mon Oct 21 02:13:41 1996 +0000 + + added -Wall, -Wstrict-prototypes to flags + + CVS patchset: 1122 + CVS date: 1996/10/21 02:13:41 + +commit aca34134701ccc3254f343f7150f6c261ec88198 +Author: ewt +Date: Mon Oct 21 01:24:25 1996 +0000 + + 1) free matches in findSharedFiles() + 2) if no matches are found in findSharedFiles() free memory and return + NULL ptr + + CVS patchset: 1121 + CVS date: 1996/10/21 01:24:25 + +commit 9d5ce56fe4d71cbe053d060d0c696c72854b805c +Author: ewt +Date: Mon Oct 21 01:23:29 1996 +0000 + + rpmdbRemove() should free header it read + matches needed to be freed in removeIndexEntry() + + CVS patchset: 1120 + CVS date: 1996/10/21 01:23:29 + +commit 6491c55d0a581e67abea9c924e34e3eb669c374f +Author: ewt +Date: Mon Oct 21 01:22:47 1996 +0000 + + 1) use freeHeader(), not free() after writeheader() + 2) free iterators in copyHeader() + 3) free string arrays after interation + + CVS patchset: 1119 + CVS date: 1996/10/21 01:22:47 + +commit 1e63efe01ed81252882b188d405554f07b3cf97b +Author: ewt +Date: Mon Oct 21 01:22:12 1996 +0000 + + 1) free binaryHeaders w/ done with installs + 2) free rpmdep structures in both install and uninstall + + CVS patchset: 1118 + CVS date: 1996/10/21 01:22:12 + +commit e513460a43c3a25b3365b98191ff7dccac66a4c7 +Author: ewt +Date: Mon Oct 21 01:21:48 1996 +0000 + + rpmdepFreeConflicts() needs to be used, not plain free() + + CVS patchset: 1117 + CVS date: 1996/10/21 01:21:48 + +commit 39678b767d1b1405ae46ce62f7f2f05f6b1dab7b +Author: ewt +Date: Sun Oct 20 19:31:21 1996 +0000 + + added conflict checking + + CVS patchset: 1116 + CVS date: 1996/10/20 19:31:21 + +commit 15e8f808216f202fba690e2d83c22d171ef2b40a +Author: ewt +Date: Sun Oct 20 19:31:12 1996 +0000 + + added some comments, rpmdbFindByConflicts() + + CVS patchset: 1115 + CVS date: 1996/10/20 19:31:12 + +commit 96ece3484c4f934db1a666d46e2fc2b233d2af34 +Author: ewt +Date: Sun Oct 20 19:31:02 1996 +0000 + + added conflicts index + + CVS patchset: 1114 + CVS date: 1996/10/20 19:31:02 + +commit 6f0f757490eb95bb002b76a30d0b83b815f3c12d +Author: ewt +Date: Sun Oct 20 19:30:48 1996 +0000 + + changed to version 2.2.8 + + CVS patchset: 1113 + CVS date: 1996/10/20 19:30:48 + +commit bbf9b6561a82daff48a6ceb97abcf9e337a4f4d1 +Author: ewt +Date: Sun Oct 20 19:30:10 1996 +0000 + + *** empty log message *** + + CVS patchset: 1112 + CVS date: 1996/10/20 19:30:10 + +commit ff01a9b53b68769d68f32c8f3bdfe18904101aa2 +Author: ewt +Date: Sun Oct 20 19:29:57 1996 +0000 + + return rc from doUninstall() + + CVS patchset: 1111 + CVS date: 1996/10/20 19:29:57 + +commit 6e5691a4ff571cb8b8bdd15ab2720917ea89ef15 +Author: ewt +Date: Sun Oct 20 19:29:34 1996 +0000 + + print conflict problems differently then missing dependencies + + CVS patchset: 1110 + CVS date: 1996/10/20 19:29:34 + +commit 394f7abfbc0bf78fc335b32cfe85b7b155dac1f3 +Author: ewt +Date: Sun Oct 20 18:25:19 1996 +0000 + + added FTPPROXY, FTPPORT + + CVS patchset: 1109 + CVS date: 1996/10/20 18:25:19 + +commit 7e5bb4fd73bee22aeac1230a9497fb5cb7de2a98 +Author: ewt +Date: Sun Oct 20 18:24:50 1996 +0000 + + added --nodeps, --showrc, info on ftp URL + + CVS patchset: 1108 + CVS date: 1996/10/20 18:24:50 + +commit 76f9720b8937679467aceacac4c0a5823a302543 +Author: ewt +Date: Sun Oct 20 18:24:42 1996 +0000 + + added --ftpproxy, --ftpport + + CVS patchset: 1107 + CVS date: 1996/10/20 18:24:42 + +commit 37f861b22af3d8cda33acc95e43f4697e51951a9 +Author: ewt +Date: Sun Oct 20 18:24:18 1996 +0000 + + 1) display more intelligent errors when ftp queries fail + 2 + + CVS patchset: 1106 + CVS date: 1996/10/20 18:24:18 + +commit 1a30047fc520eb6cafb8ba5565107633f1aa80ec +Author: ewt +Date: Sun Oct 20 18:24:06 1996 +0000 + + added ftp proxy support + + CVS patchset: 1105 + CVS date: 1996/10/20 18:24:06 + +commit 03cd239ed5ad0ce9fde7bc1c08c2513486756bf5 +Author: ewt +Date: Sun Oct 20 18:21:04 1996 +0000 + + 1) rewrite ftpCheckResult() to be more robust + 2) added FTPERR_FILE_NOT_FOUND as a separte error + 3) #1 fixed proxy support + 4) added port arg to ftpOpen(), which may be -1 + + CVS patchset: 1104 + CVS date: 1996/10/20 18:21:04 + +commit b6112216646970af5003c4a3ae9ca50af0016377 +Author: ewt +Date: Tue Oct 15 20:51:57 1996 +0000 + + use gettext() from libc if available + + CVS patchset: 1103 + CVS date: 1996/10/15 20:51:57 + +commit 57886e17413c07f21f6c66f9d400c12ca4396b39 +Author: ewt +Date: Tue Oct 15 19:16:26 1996 +0000 + + *** empty log message *** + + CVS patchset: 1102 + CVS date: 1996/10/15 19:16:26 + +commit 483c216793728922cf6e2e1f0986eb997d756d27 +Author: ewt +Date: Tue Oct 15 19:08:14 1996 +0000 + + 1) we must open RPM database for -Vp if dependencies need to be verified + 2) if the database isn't opened during a verify, it needs to be NULL + + CVS patchset: 1101 + CVS date: 1996/10/15 19:08:14 + +commit 8dd60ac9159dd6c2143762b2f7615b8d5042f1b7 +Author: ewt +Date: Tue Oct 15 15:04:09 1996 +0000 + + *** empty log message *** + + CVS patchset: 1100 + CVS date: 1996/10/15 15:04:09 + +commit 224275ea75d813e026f6fa614589ad44d0473dff +Author: ewt +Date: Tue Oct 15 15:03:19 1996 +0000 + + don't assume write(fd, buf, 0) always returns w/o error + + CVS patchset: 1099 + CVS date: 1996/10/15 15:03:19 + +commit 4f6655c287738665b16dc5103a3e68c5939d900c +Author: ewt +Date: Tue Oct 15 03:15:52 1996 +0000 + + Initial revision + + CVS patchset: 1098 + CVS date: 1996/10/15 03:15:52 + +commit 32095d5f4ab554b863cae3cbac77fb49e6e48a4f +Author: ewt +Date: Tue Oct 15 03:15:43 1996 +0000 + + added tread.c + + CVS patchset: 1097 + CVS date: 1996/10/15 03:15:43 + +commit e1060256732e43a1c9f006f597fcd88b2e7f57b9 +Author: ewt +Date: Tue Oct 15 03:15:30 1996 +0000 + + use timedRead() instead of read() + + CVS patchset: 1096 + CVS date: 1996/10/15 03:15:30 + +commit 22f79c11fae52db656a3f17d818f899a0c9a8533 +Author: ewt +Date: Tue Oct 15 03:15:14 1996 +0000 + + moved timedRead() to tread.c + + CVS patchset: 1095 + CVS date: 1996/10/15 03:15:14 + +commit 5d52779a8ea9a07d105910ec083cf61817f54f40 +Author: ewt +Date: Tue Oct 15 03:14:50 1996 +0000 + + added url.o + + CVS patchset: 1094 + CVS date: 1996/10/15 03:14:50 + +commit dcd11545893df2996d1ac07e0e9a7e9bae5d520a +Author: ewt +Date: Tue Oct 15 03:14:50 1996 +0000 + + added support for querying ftp:// packages + + CVS patchset: 1093 + CVS date: 1996/10/15 03:14:50 + +commit 46329edc45e899631b8e175279889f6ad09a74eb +Author: ewt +Date: Tue Oct 15 03:14:50 1996 +0000 + + *** empty log message *** + + CVS patchset: 1092 + CVS date: 1996/10/15 03:14:50 + +commit 6b46a177650e6e4bc855846f6643ade3fb43a2c7 +Author: ewt +Date: Tue Oct 15 03:14:35 1996 +0000 + + pulled URL handling to url.c + + CVS patchset: 1091 + CVS date: 1996/10/15 03:14:35 + +commit 5f567af6b233bd758c5f21fc648d42a54868a76b +Author: ewt +Date: Tue Oct 15 02:23:03 1996 +0000 + + use cpio specified by rpmrc + + CVS patchset: 1090 + CVS date: 1996/10/15 02:23:03 + +commit 278579be90e4e31d8bf89685d22015f8a24eca98 +Author: ewt +Date: Tue Oct 15 02:22:46 1996 +0000 + + *** empty log message *** + + CVS patchset: 1089 + CVS date: 1996/10/15 02:22:46 + +commit f26b120e8071913691cea8ba0ef8f1861b26da2f +Author: ewt +Date: Tue Oct 15 02:14:42 1996 +0000 + + added ftpGetFileDesc(), ftpGetFileDone() and changed ftpGetFile() + to use them + + CVS patchset: 1088 + CVS date: 1996/10/15 02:14:42 + +commit 36ddeb2f7979ddc3d7034ea9af6baf168d12e850 +Author: ewt +Date: Tue Oct 15 02:14:32 1996 +0000 + + added ftpGetFileDesc(), ftpGetFileDone() + + CVS patchset: 1087 + CVS date: 1996/10/15 02:14:32 + +commit ac6ebc279d0ce7dd403d144ef573be447465bb41 +Author: ewt +Date: Tue Oct 15 02:14:02 1996 +0000 + + 1) added sun4m, sun4c arch's + 2) added OSF1 OS + 3) added cpiobin + + CVS patchset: 1086 + CVS date: 1996/10/15 02:14:02 + +commit 1fc9379c0d65f1afdaf9efc09d337841784fa9c4 +Author: ewt +Date: Tue Oct 15 02:13:16 1996 +0000 + + 1) users vfork() when fork() isn't available [amigaos] + 2) looks for GNU cpio + + CVS patchset: 1085 + CVS date: 1996/10/15 02:13:16 + +commit 9764ac9511f96c57b46d224b8f4b30a8d8896a4a +Author: ewt +Date: Tue Oct 15 02:12:51 1996 +0000 + + 1) cleaned up conditional gettext support + 2) removed ; which broke install rule + + CVS patchset: 1084 + CVS date: 1996/10/15 02:12:51 + +commit 46b7c2ba7276c0e64d5592cb39b582b0c1b1dcb8 +Author: ewt +Date: Tue Oct 15 02:11:23 1996 +0000 + + readHeader() should work when fd is a socket + + CVS patchset: 1083 + CVS date: 1996/10/15 02:11:23 + +commit dfeaca7b218452a0cbbb814ec9cb3185ef80b43b +Author: ewt +Date: Mon Oct 14 23:49:40 1996 +0000 + + added RPMVAR_CPIOBIN + + CVS patchset: 1082 + CVS date: 1996/10/14 23:49:40 + +commit ce1c560e21f2d958858c19cbd6bd67a267316464 +Author: ewt +Date: Mon Oct 14 23:49:27 1996 +0000 + + use cpio specified in rpmrc + + CVS patchset: 1081 + CVS date: 1996/10/14 23:49:27 + +commit f30c0309712945258e6bcaa485cc6e3a8494e3b9 +Author: ewt +Date: Mon Sep 30 16:32:37 1996 +0000 + + Initial revision + + CVS patchset: 1080 + CVS date: 1996/09/30 16:32:37 + +commit 27b5ea093993fae763431f460248201d4d7e1d0c +Author: ewt +Date: Sun Sep 29 02:31:30 1996 +0000 + + distclean now removes librpmrc + + CVS patchset: 1079 + CVS date: 1996/09/29 02:31:30 + +commit 5c38e242fc27dde2b500afa13ca76b9228e6ff03 +Author: ewt +Date: Sun Sep 29 02:30:43 1996 +0000 + + Initial revision + + CVS patchset: 1078 + CVS date: 1996/09/29 02:30:43 + +commit 0a2e302f3a3c62f715a00f4bc860f1831439f4b1 +Author: ewt +Date: Sun Sep 29 02:30:27 1996 +0000 + + generalized LIBOBJETS + + CVS patchset: 1077 + CVS date: 1996/09/29 02:30:27 + +commit 0c42e59adc37a253dabab0daf44b92e6fe2ce19c +Author: ewt +Date: Sun Sep 29 02:30:09 1996 +0000 + + used LIBMISC during linking + + CVS patchset: 1076 + CVS date: 1996/09/29 02:30:09 + +commit 5a968b6257383dbbe60713dafd3c9092a0c20afe +Author: ewt +Date: Sun Sep 29 02:29:50 1996 +0000 + + removed dependence on outside ftw.h + + CVS patchset: 1075 + CVS date: 1996/09/29 02:29:50 + +commit 7bc74bbc45ac06dcd136d27588232311c2d1a128 +Author: ewt +Date: Sun Sep 29 02:29:36 1996 +0000 + + don't include + + CVS patchset: 1074 + CVS date: 1996/09/29 02:29:36 + +commit e24a31f3b77bc026f7cddcb9cd61ef6dfe4085fa +Author: ewt +Date: Sun Sep 29 02:29:25 1996 +0000 + + distclean rule should depend on clean rule + + CVS patchset: 1073 + CVS date: 1996/09/29 02:29:25 + +commit b098e693b1783fe0578ce1ee8961251add0e33ee +Author: ewt +Date: Sun Sep 29 02:29:09 1996 +0000 + + added H_SIGNATURE wrapper + + CVS patchset: 1072 + CVS date: 1996/09/29 02:29:09 + +commit eceef605329acf056a4bbc77cf6087a18581a4e9 +Author: ewt +Date: Sun Sep 29 02:28:42 1996 +0000 + + don't include paths.h (which isn't used anyway) + + CVS patchset: 1071 + CVS date: 1996/09/29 02:28:42 + +commit 9a361debb5c9e8e169e4d96dde73468600ab411e +Author: ewt +Date: Sun Sep 29 02:28:29 1996 +0000 + + use posix fcntl() locks rather then BSD flock() + + CVS patchset: 1070 + CVS date: 1996/09/29 02:28:29 + +commit ca102e04a7adddda814484fcc6bd7f6e41ab1263 +Author: ewt +Date: Sun Sep 29 02:28:08 1996 +0000 + + removed use of various endian.h files, as they weren't needed anyway + + CVS patchset: 1069 + CVS date: 1996/09/29 02:28:08 + +commit 72cc4009e47594443b11082f731a2924fba2839e +Author: ewt +Date: Sun Sep 29 02:27:44 1996 +0000 + + use autoconf's endian detection, not system include files + + CVS patchset: 1068 + CVS date: 1996/09/29 02:27:44 + +commit e044f14af3ee10208fb1348603812f8a67730978 +Author: ewt +Date: Sun Sep 29 02:27:20 1996 +0000 + + made filecmp() and decideFileFate() protoyped static as well as + defined static + + CVS patchset: 1067 + CVS date: 1996/09/29 02:27:20 + +commit 86bedc2f1d261cbe08d1ed4c3dbcc0e14e1f25af +Author: ewt +Date: Sun Sep 29 02:27:07 1996 +0000 + + lots of changes and cleanups for Solaris + + CVS patchset: 1066 + CVS date: 1996/09/29 02:27:07 + +commit bbc636dce728df79ecabc2a89afa8cedf5deac1b +Author: ewt +Date: Sun Sep 29 02:26:24 1996 +0000 + + moved CPP, prefix, exec_prefix, libdir, LIBRPMRC_FILENAME defs here + added selectable i18n support + + CVS patchset: 1065 + CVS date: 1996/09/29 02:26:24 + +commit 451be6d0358dda54900997fd4b554c1999cd84b9 +Author: ewt +Date: Sun Sep 29 02:25:18 1996 +0000 + + 1) don't always build static version (Solaris is broken) + 2) remove old .tar.gz files for 'make archive' + 3) misc should be the first subdirectory built + 4) made i18n support optional + + CVS patchset: 1064 + CVS date: 1996/09/29 02:25:18 + +commit d3a6e501e88a49470d569c18dd104657ec905fd9 +Author: ewt +Date: Sun Sep 29 02:22:27 1996 +0000 + + cleaned up for Solaris + + CVS patchset: 1063 + CVS date: 1996/09/29 02:22:27 + +commit 7d94c814431fc8f8798a747b6a16025333a35b65 +Author: ewt +Date: Sun Sep 29 02:22:07 1996 +0000 + + removed definition of _() which gets set by configure + + CVS patchset: 1062 + CVS date: 1996/09/29 02:22:07 + +commit 267f88eb7b1842511810a8e6edbfb3cb88dbb406 +Author: ewt +Date: Sun Sep 29 02:20:51 1996 +0000 + + Initial revision + + CVS patchset: 1061 + CVS date: 1996/09/29 02:20:51 + +commit 09d70b98bf9c45209cb188f94ad8f4a3950d2ea6 +Author: ewt +Date: Fri Sep 27 15:49:19 1996 +0000 + + distclean should remove Makefile.inc + + CVS patchset: 1060 + CVS date: 1996/09/27 15:49:19 + +commit 4358dd0ab7e8465f7b694189c19fb2754797fe39 +Author: ewt +Date: Wed Sep 25 19:19:39 1996 +0000 + + use Makefile.inc + added distclean rule + + CVS patchset: 1059 + CVS date: 1996/09/25 19:19:39 + +commit aff4e65e7e026bdee26c899cd41617325ff904f4 +Author: ewt +Date: Wed Sep 25 19:18:16 1996 +0000 + + use $(INSTALL) for installs + use Makefile.inc + added distclean rule + + CVS patchset: 1058 + CVS date: 1996/09/25 19:18:16 + +commit ca40e9d0a8be7552278774bc03000329d1724c66 +Author: ewt +Date: Wed Sep 25 19:17:15 1996 +0000 + + use alloca(), not __allocaa() + use NAMLEN (and define it if it doesn't exist) + + CVS patchset: 1057 + CVS date: 1996/09/25 19:17:15 + +commit d9aea8c24422bc7eb9001c7f3eda8162d25cc2ec +Author: ewt +Date: Wed Sep 25 19:17:03 1996 +0000 + + changed index() calls to strchr() + + CVS patchset: 1056 + CVS date: 1996/09/25 19:17:03 + +commit e35bd4f4cfb71e28008257d5b1625b3255f30350 +Author: ewt +Date: Wed Sep 25 19:16:51 1996 +0000 + + 1) use Makefile.inc + 2) added distclean rule + + CVS patchset: 1055 + CVS date: 1996/09/25 19:16:51 + +commit 88926b82b97dfec0d56ee5dd21d0c20ddb9b56bb +Author: ewt +Date: Wed Sep 25 19:16:34 1996 +0000 + + conditionally include + + CVS patchset: 1054 + CVS date: 1996/09/25 19:16:34 + +commit 4d8b1b4f2f1abf3d2b0e31f8aa8b0b27fd4ebd98 +Author: ewt +Date: Wed Sep 25 19:16:05 1996 +0000 + + conditionally include + + CVS patchset: 1053 + CVS date: 1996/09/25 19:16:05 + +commit e79a00174fdcae4bc63b9c2a1df0b6932260e87d +Author: ewt +Date: Wed Sep 25 19:15:49 1996 +0000 + + conditionally include + + CVS patchset: 1052 + CVS date: 1996/09/25 19:15:49 + +commit 69f4363cf4eeee6b2021e62e2eeefe4fe612439d +Author: ewt +Date: Wed Sep 25 19:15:33 1996 +0000 + + doesn't do anything, as we never used it + + CVS patchset: 1051 + CVS date: 1996/09/25 19:15:33 + +commit a341f3d4d00a30aafb37a113d6e976eb24b6358f +Author: ewt +Date: Wed Sep 25 19:15:21 1996 +0000 + + typecase getpid() return to int + + CVS patchset: 1050 + CVS date: 1996/09/25 19:15:21 + +commit 14c5372f03317d05cfba8805b199c2c8ed6e617e +Author: ewt +Date: Wed Sep 25 19:14:52 1996 +0000 + + conditionally include , + + CVS patchset: 1049 + CVS date: 1996/09/25 19:14:52 + +commit 61ed6250e33d3ce26890af4ccce55e9924808a12 +Author: ewt +Date: Wed Sep 25 19:14:17 1996 +0000 + + 1) made some functions static + 2) changed enum fileStates DIR to XDIR to avoid conflicts with + 3) conditionally include alloca.h + + CVS patchset: 1048 + CVS date: 1996/09/25 19:14:17 + +commit e54b510c86a62c3ee5306c02fc0594a1f1ad9f89 +Author: ewt +Date: Wed Sep 25 19:13:59 1996 +0000 + + 1) conditionally include asm/byteorder.h + 2) include netinet/in.h + + CVS patchset: 1047 + CVS date: 1996/09/25 19:13:59 + +commit f853210bea092fc703ea2b602abb100645f19562 +Author: ewt +Date: Wed Sep 25 19:13:05 1996 +0000 + + conditionally includes alloca.h + + CVS patchset: 1046 + CVS date: 1996/09/25 19:13:05 + +commit da5e2434565d25f61710191f0816450827066901 +Author: ewt +Date: Wed Sep 25 19:12:53 1996 +0000 + + added distclean rule + uses Makefile.inc + + CVS patchset: 1045 + CVS date: 1996/09/25 19:12:53 + +commit 460c2ec61ccbe7b89b37b18b79889331b1719a01 +Author: ewt +Date: Wed Sep 25 19:12:17 1996 +0000 + + added rs6000, hppa archs + added m68k uname + added AmigaOS, AIX, HP-UX + + CVS patchset: 1044 + CVS date: 1996/09/25 19:12:17 + +commit e21f534fd1297908718cdeb4594fed5a396f2932 +Author: ewt +Date: Wed Sep 25 19:11:30 1996 +0000 + + typecast getpid() to (int) + + CVS patchset: 1043 + CVS date: 1996/09/25 19:11:30 + +commit bef32a6e22bf8c25026bd94bf6314319ae7722fd +Author: ewt +Date: Wed Sep 25 19:11:14 1996 +0000 + + small portability enhancements + + CVS patchset: 1042 + CVS date: 1996/09/25 19:11:14 + +commit cf30d4f8044f65d8bdf38bcc7069e975897d05c5 +Author: ewt +Date: Wed Sep 25 19:10:44 1996 +0000 + + added rules misc platforms + + CVS patchset: 1041 + CVS date: 1996/09/25 19:10:44 + +commit aefa633c1c901fc4af4509f497b399670da998eb +Author: ewt +Date: Wed Sep 25 19:09:34 1996 +0000 + + 1) moved MDEFINES stuff Makefile.inc + 2) added distclean, rcstag rules + + CVS patchset: 1040 + CVS date: 1996/09/25 19:09:34 + +commit 267ff1310c1279b1d926ef3885fc9cd72fe3c648 +Author: ewt +Date: Wed Sep 25 19:08:31 1996 +0000 + + Initial revision + + CVS patchset: 1039 + CVS date: 1996/09/25 19:08:31 + +commit 82d807605d71f5b4977ef619b287bf92c22df595 +Author: ewt +Date: Wed Sep 25 19:08:18 1996 +0000 + + added Jeff Johnson + + CVS patchset: 1038 + CVS date: 1996/09/25 19:08:18 + +commit 2431b082624beab81b763c07541807d569ea3090 +Author: ewt +Date: Wed Sep 25 18:21:08 1996 +0000 + + fixes some silly typos + + CVS patchset: 1037 + CVS date: 1996/09/25 18:21:08 + +commit 8f8e860eaf6658c1735535e475860c105b4e9d0c +Author: root +Date: Mon Sep 23 13:40:09 1996 +0000 + + bug in handling nosource/nopatch + + CVS patchset: 1036 + CVS date: 1996/09/23 13:40:09 + +commit 0c077a34c9da9696dd9444950f45bf40229cfab4 +Author: ewt +Date: Fri Sep 20 14:41:25 1996 +0000 + + *** empty log message *** + + CVS patchset: 1035 + CVS date: 1996/09/20 14:41:25 + +commit 85ad3cfc53ec5dddca293b4145660b744adab992 +Author: ewt +Date: Fri Sep 20 14:40:57 1996 +0000 + + fixed problem in group assignments + + CVS patchset: 1034 + CVS date: 1996/09/20 14:40:57 + +commit bdbf4ad072483e0ddf5ec3bf6efd9d17dc9fb558 +Author: root +Date: Wed Sep 18 13:28:50 1996 +0000 + + added message + + CVS patchset: 1033 + CVS date: 1996/09/18 13:28:50 + +commit 1bd2a89ad70d9d79fed81ed13c04835da588a483 +Author: root +Date: Tue Sep 17 19:17:02 1996 +0000 + + *** empty log message *** + + CVS patchset: 1032 + CVS date: 1996/09/17 19:17:02 + +commit d0f084b97fe598c1cfc936577b570fcb327d142f +Author: root +Date: Tue Sep 17 19:14:32 1996 +0000 + + close fp always + + CVS patchset: 1031 + CVS date: 1996/09/17 19:14:32 + +commit 3337feba2f121c753855070ff190263a9349197e +Author: root +Date: Tue Sep 17 19:14:00 1996 +0000 + + use TMPPATH var + + CVS patchset: 1030 + CVS date: 1996/09/17 19:14:00 + +commit 6cfe6184c42219bff3d60862dea7c3e41d50036b +Author: ewt +Date: Mon Sep 16 22:41:52 1996 +0000 + + document --rebuilddb supports --dbpath + + CVS patchset: 1029 + CVS date: 1996/09/16 22:41:52 + +commit 3c1ab2d3401fb9ca22426f2e79d2cf7f1d4b81d4 +Author: ewt +Date: Mon Sep 16 22:41:25 1996 +0000 + + --rebuilddb supports --root, say so in --help + + CVS patchset: 1028 + CVS date: 1996/09/16 22:41:25 + +commit 7760d03320966e3f564ba827760c0afa55dabe19 +Author: ewt +Date: Mon Sep 16 22:36:57 1996 +0000 + + updated man page for --rebuilddb + + CVS patchset: 1027 + CVS date: 1996/09/16 22:36:57 + +commit 2c459a7d9dfc892712f512eb59fb13dd486fff91 +Author: ewt +Date: Mon Sep 16 22:33:38 1996 +0000 + + changed version to 2.2.6 + + CVS patchset: 1026 + CVS date: 1996/09/16 22:33:38 + +commit c928b2798b5f45e685cba574594326c9d7705e35 +Author: ewt +Date: Mon Sep 16 22:33:29 1996 +0000 + + *** empty log message *** + + CVS patchset: 1025 + CVS date: 1996/09/16 22:33:29 + +commit 03361daed985303041832789a9aa7fa783e430a8 +Author: ewt +Date: Mon Sep 16 22:31:05 1996 +0000 + + added --rebuild + + CVS patchset: 1024 + CVS date: 1996/09/16 22:31:05 + +commit 991a3cf6ce73ebce8d9a29dad8da3daf8350eb9d +Author: ewt +Date: Mon Sep 16 22:29:46 1996 +0000 + + moved rpmdbRemove(), rpmdbAdd(), rpmdbUpdateRecord() to rpmdb.h + added rpmdbRebuild() + + CVS patchset: 1023 + CVS date: 1996/09/16 22:29:46 + +commit 79048cda3af6bfdbc3b59dce1b28b4d0811aff5b +Author: ewt +Date: Mon Sep 16 22:29:17 1996 +0000 + + 1) changed dbopen(), renamed it to openDatabase() + 2) added rpmdbMoveDatabase(), rpmdbRemoveDatabase() + + CVS patchset: 1022 + CVS date: 1996/09/16 22:29:17 + +commit e779ebb2172165a45bf689d1b534347ee54c2e12 +Author: ewt +Date: Mon Sep 16 22:28:56 1996 +0000 + + include "rpmdb.h" + + CVS patchset: 1021 + CVS date: 1996/09/16 22:28:56 + +commit da0ef2e35e5d802123bac6ce52d639a8db665d59 +Author: ewt +Date: Mon Sep 16 22:28:47 1996 +0000 + + Initial revision + + CVS patchset: 1020 + CVS date: 1996/09/16 22:28:47 + +commit fef4104e8ae0ac195737659dd2e20998e22917c4 +Author: ewt +Date: Mon Sep 16 22:28:39 1996 +0000 + + added rebuilddb.c + + CVS patchset: 1019 + CVS date: 1996/09/16 22:28:39 + +commit 885ac5d6bdc0e81d21e8a438dc6c3515e7f9833e +Author: ewt +Date: Thu Sep 5 19:58:41 1996 +0000 + + fixed --scripts output + + CVS patchset: 1018 + CVS date: 1996/09/05 19:58:41 + +commit 10a25c69b88bdd70ae56b3cfc065fd1982ec4651 +Author: ewt +Date: Thu Sep 5 19:58:04 1996 +0000 + + 1) fileCount of -1 makes installArchive() install all files (for installing + source packages) + 2) fixed silly bug in copyFile() + + CVS patchset: 1017 + CVS date: 1996/09/05 19:58:04 + +commit c60309f169fc6c0213ba7fe7236b0af09d498975 +Author: root +Date: Mon Sep 2 01:58:58 1996 +0000 + + *** empty log message *** + + CVS patchset: 1016 + CVS date: 1996/09/02 01:58:58 + +commit c3b58424648442e4e4ca29631f00c50811f464a2 +Author: root +Date: Mon Sep 2 01:58:13 1996 +0000 + + --test for building + + CVS patchset: 1015 + CVS date: 1996/09/02 01:58:13 + +commit d4f868b78020287b3b1dfb3fe82808d97c6ea63b +Author: ewt +Date: Sun Sep 1 16:56:10 1996 +0000 + + *** empty log message *** + + CVS patchset: 1014 + CVS date: 1996/09/01 16:56:10 + +commit 99f690279a31ad5b529cbe73c90df457094cd129 +Author: ewt +Date: Sun Sep 1 16:54:43 1996 +0000 + + added :fflags format + + CVS patchset: 1013 + CVS date: 1996/09/01 16:54:43 + +commit ac5a232084020d6551dbc626d25e67c12cb09cc4 +Author: ewt +Date: Sun Sep 1 16:54:16 1996 +0000 + + added --qf as an alias to --queryformat, but didn't document it as it + is easily confused with "-qf" + + CVS patchset: 1012 + CVS date: 1996/09/01 16:54:16 + +commit e28490df04968667ae0e3f55a70f6e8e7b67b204 +Author: ewt +Date: Sat Aug 31 18:37:25 1996 +0000 + + add RPMTAG_RPMVERSION to headers + + CVS patchset: 1011 + CVS date: 1996/08/31 18:37:25 + +commit d5378e6c93c4d2d6d5e8d578170d7d05bc2e4ced +Author: ewt +Date: Sat Aug 31 18:36:53 1996 +0000 + + changed MD5 sig type because of big-endian problems + + CVS patchset: 1010 + CVS date: 1996/08/31 18:36:53 + +commit b22c838a04ab744bf925df1e39ba92b70b0b92e4 +Author: ewt +Date: Sat Aug 31 18:36:28 1996 +0000 + + supports broken md5's that rpm used to generate on the SPARC + + CVS patchset: 1009 + CVS date: 1996/08/31 18:36:28 + +commit cea3897179b1bea7b95ce0738b8d25063f9ad726 +Author: ewt +Date: Sat Aug 31 18:36:18 1996 +0000 + + added RPMTAG_RPMVERSION + + CVS patchset: 1008 + CVS date: 1996/08/31 18:36:18 + +commit 886d64e0e0c4ada69e68c5a6207caf03e8e06d44 +Author: ewt +Date: Sat Aug 31 18:35:54 1996 +0000 + + works with old, broken MD5 sums RPM used to generate on big endian + machines + + CVS patchset: 1007 + CVS date: 1996/08/31 18:35:54 + +commit 3224eb87e60ae47a8ff6800074056a3d199ce453 +Author: ewt +Date: Sat Aug 31 18:35:40 1996 +0000 + + support old, broken md5sum on SPARC's + + CVS patchset: 1006 + CVS date: 1996/08/31 18:35:40 + +commit f8aac5ea33be8aaee4800a725e7352a9655f3c4f +Author: ewt +Date: Sat Aug 31 18:35:26 1996 +0000 + + getEntry() allows NULL pointers + + CVS patchset: 1005 + CVS date: 1996/08/31 18:35:26 + +commit 19d4dc1a8fe19c9d9fd0cf95e3441c5bdbec8e5f +Author: ewt +Date: Sat Aug 31 18:34:51 1996 +0000 + + supports broken md5sum's that used to be generated on SPARCs + + CVS patchset: 1004 + CVS date: 1996/08/31 18:34:51 + +commit f1457cd67d2d041cc47a83975b9b17e196d9a6c4 +Author: ewt +Date: Sat Aug 31 18:34:28 1996 +0000 + + supports SIGTAG_LITTLEENDIANMD5 + + CVS patchset: 1003 + CVS date: 1996/08/31 18:34:28 + +commit a56db46b5a6982f23dbc3d3fadebb38cfd08ac93 +Author: ewt +Date: Sat Aug 31 18:34:16 1996 +0000 + + pass the VERSION define to sub-makefiles + + CVS patchset: 1002 + CVS date: 1996/08/31 18:34:16 + +commit 630ac54a73b3ad7692bfdaad10f418b6f5ff5d86 +Author: ewt +Date: Sat Aug 31 14:59:27 1996 +0000 + + fixed error message + + CVS patchset: 1001 + CVS date: 1996/08/31 14:59:27 + +commit b72002c101140c2a72d031adc62f417286ba5dcf +Author: ewt +Date: Sat Aug 31 14:58:53 1996 +0000 + + pkReadHdr() shouldn't fail on minor number differences + + CVS patchset: 1000 + CVS date: 1996/08/31 14:58:53 + +commit 5153d3b436fb4a0fa8dbf758e126f64e04f59188 +Author: root +Date: Fri Aug 30 19:58:35 1996 +0000 + + added include of + + CVS patchset: 999 + CVS date: 1996/08/30 19:58:35 + +commit 6aad60201615b3802df88ea4e434f0aaa3449540 +Author: ewt +Date: Fri Aug 30 19:17:33 1996 +0000 + + 1) plugged some memory leaks + 2) call _exit(), not exit() from subprocess to prevent stdio buffers from + being flushed twice + + CVS patchset: 998 + CVS date: 1996/08/30 19:17:33 + +commit b9f14e914107dc1db2be8a77da646d3e1b2b6669 +Author: ewt +Date: Fri Aug 30 16:54:17 1996 +0000 + + removed rules that were hurting my head + + CVS patchset: 997 + CVS date: 1996/08/30 16:54:17 + +commit 65dc69e804a449700172272f4636bd4659c99f48 +Author: marc +Date: Thu Aug 29 18:33:17 1996 +0000 + + *** empty log message *** + + CVS patchset: 996 + CVS date: 1996/08/29 18:33:17 + +commit b669dad0f5175b1983cc1991dedca6a7a1182711 +Author: marc +Date: Thu Aug 29 18:32:01 1996 +0000 + + added AutoReqProv: logic + + CVS patchset: 995 + CVS date: 1996/08/29 18:32:01 + +commit 2576e61c082e5f5f93b6401987f9d8cfff62bba9 +Author: marc +Date: Thu Aug 29 18:25:35 1996 +0000 + + fixed AUTOREQDEP -> AUTOREQPROV + + CVS patchset: 994 + CVS date: 1996/08/29 18:25:35 + +commit 008093a2bd7c9a1df266b18ed8287edf24d35668 +Author: marc +Date: Thu Aug 29 18:01:00 1996 +0000 + + added RPMTAG_AUTOREQDEP + + CVS patchset: 993 + CVS date: 1996/08/29 18:01:00 + +commit 047724fccf3f42c5607c4d4a701fa7c57ecd0164 +Author: ewt +Date: Thu Aug 29 04:18:43 1996 +0000 + + changed version to 2.2.5 + + CVS patchset: 992 + CVS date: 1996/08/29 04:18:43 + +commit 1341d4d5ec83c2cc4094f545e2f092331078e3f1 +Author: ewt +Date: Thu Aug 29 04:16:07 1996 +0000 + + 1) take advantage of ARCHIVESIZE (if present) when displaying hash marks + 2) support notify functions and labelFormat for source packages >= V2 + 3) if rename() fails to move a file from SOURCE to SPECS try copying it + + CVS patchset: 991 + CVS date: 1996/08/29 04:16:07 + +commit 148c67febc0887a9cac23b40ca128e88c5111e13 +Author: ewt +Date: Thu Aug 29 04:15:54 1996 +0000 + + pkgReadHeader() optionally returns major/minor version of package + + CVS patchset: 990 + CVS date: 1996/08/29 04:15:54 + +commit 4fcb77bcbd10fd0c881b4c8446958220ec644bd2 +Author: ewt +Date: Thu Aug 29 04:15:25 1996 +0000 + + 1) pkgReadHeader() optionally returns major/minor version of package + 2) rpmInstallSourcePackage() takes notify function, label format + + CVS patchset: 989 + CVS date: 1996/08/29 04:15:25 + +commit ec675e5097de65eddce9221271f0838e952bc6a5 +Author: ewt +Date: Thu Aug 29 04:14:54 1996 +0000 + + 1) pass printFormat and notify function to rpmInstallSourcePackage() + 2) ignore major/minor number returned by pkgReadHeader() + + CVS patchset: 988 + CVS date: 1996/08/29 04:14:54 + +commit 0e2a5e3c5640dc41d5a55d436921430b97a0dbf3 +Author: ewt +Date: Thu Aug 29 04:14:38 1996 +0000 + + ignore major, minor from pkgReadHeader() + + CVS patchset: 987 + CVS date: 1996/08/29 04:14:38 + +commit 2de1986a1277fe31a2a36806881476a7bbf376d2 +Author: ewt +Date: Thu Aug 29 04:14:29 1996 +0000 + + *** empty log message *** + + CVS patchset: 986 + CVS date: 1996/08/29 04:14:29 + +commit d7d6fc4e4bd51a9b7f68cbaa29d9814f7c4b635f +Author: ewt +Date: Fri Aug 23 16:21:56 1996 +0000 + + added paths + + CVS patchset: 985 + CVS date: 1996/08/23 16:21:56 + +commit 59eb518440c5bf88b73c34324ffaf9814371f657 +Author: root +Date: Thu Aug 22 21:05:48 1996 +0000 + + *** empty log message *** + + CVS patchset: 984 + CVS date: 1996/08/22 21:05:48 + +commit ded3a0f8442be3b97eae95d23da77f6aaa96b6d9 +Author: root +Date: Thu Aug 22 21:04:33 1996 +0000 + + only rm -rf docdir if we've got a %doc + + CVS patchset: 983 + CVS date: 1996/08/22 21:04:33 + +commit 10e0cf40aa3ec9b7ee3f0e94eaf117784635db20 +Author: ewt +Date: Thu Aug 22 20:25:46 1996 +0000 + + only allow readConfigFiles() once + + CVS patchset: 982 + CVS date: 1996/08/22 20:25:46 + +commit 292f0fe1247c1e1ac34f767e2e7be5d467f60e6e +Author: root +Date: Tue Aug 20 20:57:33 1996 +0000 + + *** empty log message *** + + CVS patchset: 981 + CVS date: 1996/08/20 20:57:33 + +commit 9b9817967e455c8d145fcb7d9bd91571ea242be5 +Author: ewt +Date: Tue Aug 20 16:37:08 1996 +0000 + + *** empty log message *** + + CVS patchset: 980 + CVS date: 1996/08/20 16:37:08 + +commit 108d637d220d15a874849df25b3fe9fa4a34f983 +Author: ewt +Date: Tue Aug 20 16:29:19 1996 +0000 + + allows - in dependency version strings + + CVS patchset: 979 + CVS date: 1996/08/20 16:29:19 + +commit 836b47a1a3d3fab2fd6deb6923a1bc08605e8919 +Author: ewt +Date: Tue Aug 20 16:29:10 1996 +0000 + + added RPMVAR_TMPPATH + + CVS patchset: 978 + CVS date: 1996/08/20 16:29:10 + +commit dce342d096346f870380eea8d40edef2bde4f5e4 +Author: ewt +Date: Tue Aug 20 16:28:51 1996 +0000 + + 1) addded RPMVAR_TMPPATH + 2) use LIBRPMRC_FILENAME for base rc file name + + CVS patchset: 977 + CVS date: 1996/08/20 16:28:51 + +commit 4ed78096b767334b11d28f85de8beb4b32bc271d +Author: ewt +Date: Tue Aug 20 16:28:40 1996 +0000 + + uses RPMVAR_TMPPATH + + CVS patchset: 976 + CVS date: 1996/08/20 16:28:40 + +commit 226c40250a8095f152db5145a05f029b69b5c195 +Author: ewt +Date: Tue Aug 20 16:28:30 1996 +0000 + + don't use a default path for the database + + CVS patchset: 975 + CVS date: 1996/08/20 16:28:30 + +commit 1a71b56a0dee023b5a097a287eed28bdd09b88e3 +Author: ewt +Date: Tue Aug 20 16:25:02 1996 +0000 + + 1) added LIBRPMRC_FILENAME + 2) changed usr.lib.rpmrc to lib-rpmrc + 3) installs find-provides script + + CVS patchset: 974 + CVS date: 1996/08/20 16:25:02 + +commit 87b891ba3dfc83a211aa338f22cf19d103a3232c +Author: ewt +Date: Tue Aug 20 16:24:37 1996 +0000 + + 1) finds varprefix, tmppath + 2) filters lib-rpmrc + + CVS patchset: 973 + CVS date: 1996/08/20 16:24:37 + +commit f1180d90478f92ed729abdf9fbfb2bfdc724f642 +Author: ewt +Date: Tue Aug 20 15:44:08 1996 +0000 + + *** empty log message *** + + CVS patchset: 972 + CVS date: 1996/08/20 15:44:08 + +commit 52d79674c0b6fc263635c22706da66f9c3a82b87 +Author: root +Date: Tue Aug 20 14:30:32 1996 +0000 + + *** empty log message *** + + CVS patchset: 971 + CVS date: 1996/08/20 14:30:32 + +commit f574c657ece3e1794a65c8f7bc8028ee1a402f10 +Author: root +Date: Tue Aug 20 14:29:41 1996 +0000 + + complain if spec file is not a regular file + + CVS patchset: 970 + CVS date: 1996/08/20 14:29:41 + +commit 9c30ac18f9b9766df71f4c6d64b6b9e4a28c1325 +Author: root +Date: Tue Aug 20 14:19:10 1996 +0000 + + disallow - chars in version and release + + CVS patchset: 969 + CVS date: 1996/08/20 14:19:10 + +commit d25b955f3b29dd9ced56f68d9d2a50ea1c2ef6f0 +Author: ewt +Date: Mon Aug 19 17:47:46 1996 +0000 + + *** empty log message *** + + CVS patchset: 968 + CVS date: 1996/08/19 17:47:46 + +commit 7f47bebad797da7ce7a8f6f164fdcfa44e056a20 +Author: ewt +Date: Mon Aug 19 17:42:39 1996 +0000 + + *** empty log message *** + + CVS patchset: 967 + CVS date: 1996/08/19 17:42:39 + +commit 27d4e890b0799f0cfaad36e4405f9290eba231bc +Author: ewt +Date: Mon Aug 19 17:41:18 1996 +0000 + + added Kristof Depraetere + + CVS patchset: 966 + CVS date: 1996/08/19 17:41:18 + +commit cedc509fe594a224b94bcc47dfc5818b668ae0c2 +Author: ewt +Date: Mon Aug 19 17:40:18 1996 +0000 + + fixed make archive rule + + CVS patchset: 965 + CVS date: 1996/08/19 17:40:18 + +commit e5349bdf75186ea8baa9b486b663bd356ab87a13 +Author: root +Date: Mon Aug 19 17:23:26 1996 +0000 + + use -lintl conditionally + + CVS patchset: 964 + CVS date: 1996/08/19 17:23:26 + +commit 50d4e96930e1026f6258a4b4e9dfd6b12b868d25 +Author: root +Date: Mon Aug 19 17:23:07 1996 +0000 + + fallback to just libc of libintl dne + + CVS patchset: 963 + CVS date: 1996/08/19 17:23:07 + +commit 3fea92f2129355196f7288eb4db69afcf9639036 +Author: ewt +Date: Mon Aug 19 17:15:47 1996 +0000 + + Initial revision + + CVS patchset: 962 + CVS date: 1996/08/19 17:15:47 + +commit 22df06ef4cb9077ccd3e0afbbe421ec576c95a81 +Author: ewt +Date: Mon Aug 19 17:08:21 1996 +0000 + + Initial revision + + CVS patchset: 961 + CVS date: 1996/08/19 17:08:21 + +commit 22bf5cae6d3165e0601c42ffb66f5cad41c8e843 +Author: ewt +Date: Mon Aug 19 17:07:07 1996 +0000 + + changed to use autoconf + + CVS patchset: 960 + CVS date: 1996/08/19 17:07:07 + +commit 623fd34b9706ec8935393a5d71b75584211616a3 +Author: ewt +Date: Mon Aug 19 17:03:11 1996 +0000 + + changed to work w/ autoconf + + CVS patchset: 959 + CVS date: 1996/08/19 17:03:11 + +commit f28ea61ee42a4561f08c4c8ea62d3bda3558cef2 +Author: ewt +Date: Mon Aug 19 17:02:29 1996 +0000 + + converted to use autoconf + + CVS patchset: 958 + CVS date: 1996/08/19 17:02:29 + +commit 6cfcf867762810fd2703efe9f209134779add9d6 +Author: root +Date: Sun Aug 18 21:42:58 1996 +0000 + + spelling + + CVS patchset: 957 + CVS date: 1996/08/18 21:42:58 + +commit 04d5d9d6a603baaafb7c1dcf9650c95925d55672 +Author: root +Date: Thu Aug 15 13:46:51 1996 +0000 + + fix return code handling + + CVS patchset: 956 + CVS date: 1996/08/15 13:46:51 + +commit 315e01fd580192ff79ad8453e3432a1536825941 +Author: root +Date: Thu Aug 15 13:46:20 1996 +0000 + + tiny bug + + CVS patchset: 955 + CVS date: 1996/08/15 13:46:20 + +commit e6ad3d0cf9e51002acef1bf137c67e13a526fb60 +Author: root +Date: Wed Aug 14 21:02:54 1996 +0000 + + cleanup - make nice little function that runs programs and collects output + use and external find-provides script + + CVS patchset: 954 + CVS date: 1996/08/14 21:02:54 + +commit 9de35134298d3534ceb8e4a5982366d3d061fcba +Author: root +Date: Wed Aug 14 21:02:31 1996 +0000 + + Initial revision + + CVS patchset: 953 + CVS date: 1996/08/14 21:02:31 + +commit 9962520a26f21fc8d3db44b0a28c12e593070e0b +Author: root +Date: Wed Aug 14 19:56:41 1996 +0000 + + add find-provides + + CVS patchset: 952 + CVS date: 1996/08/14 19:56:41 + +commit bc1e6bd997a4b870dd8c6f12bf7b75eec8dfdb93 +Author: root +Date: Wed Aug 14 16:51:39 1996 +0000 + + *** empty log message *** + + CVS patchset: 951 + CVS date: 1996/08/14 16:51:39 + +commit 613fbe8a103f30f2f6228f41c9a6fd0fb18abe5d +Author: root +Date: Wed Aug 14 16:50:37 1996 +0000 + + allow -R to %patch + echo the patch number as it is patched + + CVS patchset: 950 + CVS date: 1996/08/14 16:50:37 + +commit dd4593d79cf005009e238cad47b6a83693f84cd1 +Author: ewt +Date: Thu Aug 8 17:34:14 1996 +0000 + + *** empty log message *** + + CVS patchset: 949 + CVS date: 1996/08/08 17:34:14 + +commit fd31424fd3bd5abff9d79b5f9a3638957a5ad6a1 +Author: ewt +Date: Thu Aug 8 17:34:05 1996 +0000 + + fixed sscanf() to use proper types + + CVS patchset: 948 + CVS date: 1996/08/08 17:34:05 + +commit 6768a41feb80cef1e1798775eb463abb7410fff0 +Author: root +Date: Thu Aug 8 16:46:50 1996 +0000 + + *** empty log message *** + + CVS patchset: 947 + CVS date: 1996/08/08 16:46:50 + +commit c3a1335f50088c94fa999b40afc1cfbffd2c03af +Author: root +Date: Thu Aug 8 16:46:15 1996 +0000 + + null terminate the result of readlink() + + CVS patchset: 946 + CVS date: 1996/08/08 16:46:15 + +commit cbdf4b5bba15e2e32ffd6941077e7a12818ccc92 +Author: root +Date: Thu Aug 8 13:25:57 1996 +0000 + + *** empty log message *** + + CVS patchset: 945 + CVS date: 1996/08/08 13:25:57 + +commit 845866dcc9b48dd0f7046a15126c96ec972a5e26 +Author: root +Date: Thu Aug 8 13:25:27 1996 +0000 + + strip leading directories from ldd output + + CVS patchset: 944 + CVS date: 1996/08/08 13:25:27 + +commit 4e972f25e1441d4708b8393b5b35d88dc79b711f +Author: ewt +Date: Wed Aug 7 15:47:04 1996 +0000 + + added rpmdepFreeConflicts() to fix bad core dump + + CVS patchset: 943 + CVS date: 1996/08/07 15:47:04 + +commit ef630d166ad469918078b9f44ef19f90b897ab47 +Author: ewt +Date: Wed Aug 7 15:46:57 1996 +0000 + + added rpmdepFreeConflicts() + + CVS patchset: 942 + CVS date: 1996/08/07 15:46:57 + +commit a91d2e03d41eea23f693ca00b8d07caa90176a66 +Author: ewt +Date: Wed Aug 7 15:46:22 1996 +0000 + + added support for rpmdepFreeConflicts() + + CVS patchset: 941 + CVS date: 1996/08/07 15:46:22 + +commit d5d07197fc0c6a3d913c5c75424e10b049f3820c +Author: ewt +Date: Wed Aug 7 15:45:38 1996 +0000 + + fixed --group query specifier + + CVS patchset: 940 + CVS date: 1996/08/07 15:45:38 + +commit 95b076fee2c0256ca3e3356430aa4268a6945c5a +Author: root +Date: Tue Aug 6 20:05:30 1996 +0000 + + changed version to 2.2.3 + + CVS patchset: 939 + CVS date: 1996/08/06 20:05:30 + +commit 82692083ddfc29438c4282b2dbf0e57418b91468 +Author: root +Date: Tue Aug 6 20:05:17 1996 +0000 + + *** empty log message *** + + CVS patchset: 938 + CVS date: 1996/08/06 20:05:17 + +commit 9ba82b190e0ab199e2112463de11c1b8f60d0dff +Author: ewt +Date: Wed Jul 31 18:45:22 1996 +0000 + + config file md5 sums were improperly calculated for root and prefixed + installs + + CVS patchset: 937 + CVS date: 1996/07/31 18:45:22 + +commit 712b32851038577ec9e9c2b0a8eb97adba9971ef +Author: ewt +Date: Mon Jul 29 19:29:47 1996 +0000 + + changed warning text + + CVS patchset: 936 + CVS date: 1996/07/29 19:29:47 + +commit 79e061d575bcd8fe07a92b921ea6e329ead9bc89 +Author: ewt +Date: Mon Jul 29 19:27:50 1996 +0000 + + changed warning for saved files to RPMMESS_BACKUP + + CVS patchset: 935 + CVS date: 1996/07/29 19:27:50 + +commit 57bef04d27950e9bb1fd093fdce4d28664d7fa08 +Author: ewt +Date: Mon Jul 29 19:20:22 1996 +0000 + + removed verbose messages + + CVS patchset: 934 + CVS date: 1996/07/29 19:20:22 + +commit c92b4f273c30a9c055254b32bba78461d0b987d4 +Author: root +Date: Sun Jul 28 22:58:02 1996 +0000 + + RPMVAR_FTPPROXY was using same number as PACKAGER + + CVS patchset: 933 + CVS date: 1996/07/28 22:58:02 + +commit 2e698f176f89bb9bf804755393c483223b14016b +Author: ewt +Date: Sat Jul 27 23:35:07 1996 +0000 + + check new file list for config files as well as the old ones + + CVS patchset: 932 + CVS date: 1996/07/27 23:35:07 + +commit e92f4e985adbe37d887ef960fbf85bc1140a8a06 +Author: ewt +Date: Fri Jul 26 20:11:08 1996 +0000 + + fixed another memory leak + + CVS patchset: 931 + CVS date: 1996/07/26 20:11:08 + +commit bc3582d686afacbb33369a166186e2f46f5c12b6 +Author: ewt +Date: Fri Jul 26 19:52:05 1996 +0000 + + fixed bigger memory leak + + CVS patchset: 930 + CVS date: 1996/07/26 19:52:05 + +commit 5b70645c5254f5e6594124f7ec6a782c9253ab4f +Author: ewt +Date: Fri Jul 26 19:24:02 1996 +0000 + + fixed minor leak + + CVS patchset: 929 + CVS date: 1996/07/26 19:24:02 + +commit 3a6dab5bb4c59997690010e31f4a294b6a3df589 +Author: ewt +Date: Thu Jul 25 16:39:01 1996 +0000 + + cpio filelists go in $ROOT/var/tmp + + CVS patchset: 928 + CVS date: 1996/07/25 16:39:01 + +commit 7d830c1c487a386c39d66dd042af47e7f612cb42 +Author: root +Date: Tue Jul 23 20:59:06 1996 +0000 + + *** empty log message *** + + CVS patchset: 927 + CVS date: 1996/07/23 20:59:06 + +commit 5c0e47c6bd20c6dd16cefb2f05b56a856dbc1d3d +Author: root +Date: Tue Jul 23 20:58:09 1996 +0000 + + do some sanity checking on the file list + - only one file listed per line + - barf on any files that don't start with "/" + + CVS patchset: 926 + CVS date: 1996/07/23 20:58:09 + +commit 4441898dd062d74e15e51c1314477fbf30ff6196 +Author: ewt +Date: Tue Jul 23 15:47:06 1996 +0000 + + removed unused variable + + CVS patchset: 925 + CVS date: 1996/07/23 15:47:06 + +commit d5d10546904c3f9cae3e93f08af6dd494dd08d1c +Author: marc +Date: Tue Jul 23 14:54:46 1996 +0000 + + change sleep(1) to sleep(5) so yo can read the spec file warnings + + CVS patchset: 924 + CVS date: 1996/07/23 14:54:46 + +commit 9509caccf3eeab56e22aadedd9f66d027e9c7bef +Author: marc +Date: Tue Jul 23 14:11:28 1996 +0000 + + *** empty log message *** + + CVS patchset: 923 + CVS date: 1996/07/23 14:11:28 + +commit 12c4bc76c697af65902c4e7b2758e60497398545 +Author: marc +Date: Tue Jul 23 14:11:02 1996 +0000 + + catch duplicate files + + CVS patchset: 922 + CVS date: 1996/07/23 14:11:02 + +commit beb6d2d6cc708995cfa6c4b7d40f1084373a9371 +Author: marc +Date: Tue Jul 23 03:40:10 1996 +0000 + + *** empty log message *** + + CVS patchset: 921 + CVS date: 1996/07/23 03:40:10 + +commit 7e46ec48ecbff19e794770fb200d6c2c647f51eb +Author: marc +Date: Tue Jul 23 03:33:20 1996 +0000 + + parse %prep even for list check + + CVS patchset: 920 + CVS date: 1996/07/23 03:33:20 + +commit ff49802b59137de912bdbd2fa551bf24c0732952 +Author: marc +Date: Tue Jul 23 03:30:44 1996 +0000 + + implement -bl + + CVS patchset: 919 + CVS date: 1996/07/23 03:30:44 + +commit 215309b156ab417d043791ee6a691e420c43f3a1 +Author: marc +Date: Tue Jul 23 02:58:13 1996 +0000 + + *** empty log message *** + + CVS patchset: 918 + CVS date: 1996/07/23 02:58:13 + +commit f70335292bb2f59d290cd75be7595de67ff0f6a3 +Author: marc +Date: Tue Jul 23 02:57:32 1996 +0000 + + --timecheck + + CVS patchset: 917 + CVS date: 1996/07/23 02:57:32 + +commit 113be81304b612e23b4ac923986a60d4fcf3bd10 +Author: marc +Date: Tue Jul 23 02:51:48 1996 +0000 + + implement --timecheck (used to be --time-check) + + CVS patchset: 916 + CVS date: 1996/07/23 02:51:48 + +commit 5af7615ceb20dd62ee9a7534539355a79d7d9dc4 +Author: marc +Date: Tue Jul 23 02:42:20 1996 +0000 + + do some checking on the timecheck value + + CVS patchset: 915 + CVS date: 1996/07/23 02:42:20 + +commit 5dd3a986d52556a7788c8845be101218d37a04be +Author: marc +Date: Tue Jul 23 02:41:54 1996 +0000 + + implement timecheck + + CVS patchset: 914 + CVS date: 1996/07/23 02:41:54 + +commit 74853f39dd16083d87d85cd00d7f7fa737fd9062 +Author: marc +Date: Mon Jul 22 18:32:03 1996 +0000 + + move ensureOlder() -> rpmEnsureOlder(), and make it public + + CVS patchset: 913 + CVS date: 1996/07/22 18:32:03 + +commit 8a8cb4599acff56ad91a679a388e5d865faec38d +Author: ewt +Date: Mon Jul 22 14:49:46 1996 +0000 + + *** empty log message *** + + CVS patchset: 912 + CVS date: 1996/07/22 14:49:46 + +commit 5badf2b83e82097bc81531f59a9b89d38c9cefea +Author: ewt +Date: Sat Jul 20 23:21:18 1996 +0000 + + added dependency verification + + CVS patchset: 911 + CVS date: 1996/07/20 23:21:18 + +commit bf60ec455312e67724a00c9f1a00e5088c04c963 +Author: ewt +Date: Sat Jul 20 23:20:56 1996 +0000 + + made printDepFlags() externally visible + + CVS patchset: 910 + CVS date: 1996/07/20 23:20:56 + +commit 314715470b0c5bd62e9bdf3cc0970d0007f7bcd5 +Author: ewt +Date: Sat Jul 20 23:20:45 1996 +0000 + + added --nofiles + added --nodpes to useage messages + + CVS patchset: 909 + CVS date: 1996/07/20 23:20:45 + +commit 7c82b89164ee1bd7836568c0cb6275e179e62c1d +Author: ewt +Date: Sat Jul 20 23:16:56 1996 +0000 + + added info on dependency verification + + CVS patchset: 908 + CVS date: 1996/07/20 23:16:56 + +commit 7f7a8ba10bb2a9aa024db5a52b511bf4328ddb28 +Author: marc +Date: Sat Jul 20 23:02:53 1996 +0000 + + *** empty log message *** + + CVS patchset: 907 + CVS date: 1996/07/20 23:02:53 + +commit 31ae65343a62d3c0d9eb71890b4d9f30445ea737 +Author: marc +Date: Sat Jul 20 23:00:33 1996 +0000 + + if objdump gets us "_end" then there is no embedded soname, + so we just provide the name of the file. + do not pass non-regular files to ldd. + don't pass leading "/" to ldd + + CVS patchset: 906 + CVS date: 1996/07/20 23:00:33 + +commit 0e47282edfe0f025ddd73ea7b6f23a4020445f0d +Author: marc +Date: Sat Jul 20 22:30:47 1996 +0000 + + *** empty log message *** + + CVS patchset: 905 + CVS date: 1996/07/20 22:30:47 + +commit 8dadbc32bc4cf2eb8aaf3e2074dd9e02e635ed95 +Author: marc +Date: Sat Jul 20 22:19:18 1996 +0000 + + skip blank lines and "_end" from objdump + skip lead "/" in filenames passed to ldd + + CVS patchset: 904 + CVS date: 1996/07/20 22:19:18 + +commit 970890e71e77a54f5b143b616cb7423b88fd03e5 +Author: marc +Date: Sat Jul 20 21:10:46 1996 +0000 + + *** empty log message *** + + CVS patchset: 903 + CVS date: 1996/07/20 21:10:46 + +commit 46018c47287035bf2b4252bd14b9d32b0890f5e1 +Author: ewt +Date: Sat Jul 20 21:09:48 1996 +0000 + + added info on the '=' operator + + CVS patchset: 902 + CVS date: 1996/07/20 21:09:48 + +commit 28f21c3c18e201d47bbf60e9de9cc26da018cef7 +Author: marc +Date: Sat Jul 20 21:09:00 1996 +0000 + + fix exclusiveos to match on os, not arch. duh. + + CVS patchset: 901 + CVS date: 1996/07/20 21:09:00 + +commit dd51d07c5031eca6be52175a9955689f72149e05 +Author: marc +Date: Sat Jul 20 20:46:25 1996 +0000 + + *** empty log message *** + + CVS patchset: 900 + CVS date: 1996/07/20 20:46:25 + +commit 0350cc811c296bcf4fb988743837b7bd12e53ab5 +Author: marc +Date: Sat Jul 20 20:45:43 1996 +0000 + + match shared libs on ".so" + + CVS patchset: 899 + CVS date: 1996/07/20 20:45:43 + +commit 5d1c48a5a09f4b33b496d8d4fb0f3386ab6df998 +Author: ewt +Date: Fri Jul 19 22:32:36 1996 +0000 + + fixed hashing for multiple packages + + CVS patchset: 898 + CVS date: 1996/07/19 22:32:36 + +commit d597761fe0c1d56c47a7ee73e9c6e730baae4704 +Author: ewt +Date: Fri Jul 19 22:31:37 1996 +0000 + + install v2 and v1 packages despite OS field, don't refuse to install all + of them + + CVS patchset: 897 + CVS date: 1996/07/19 22:31:37 + +commit d59b565f72f0538133ec1804796a74ce0577689a +Author: ewt +Date: Fri Jul 19 22:26:00 1996 +0000 + + don't core dump if we can't suggested a package that satisfies a dependency + + CVS patchset: 896 + CVS date: 1996/07/19 22:26:00 + +commit 45fcaa398e6f0c4add353954de49d8001be65180 +Author: marc +Date: Thu Jul 18 22:32:31 1996 +0000 + + newtree target makes docs dir + + CVS patchset: 895 + CVS date: 1996/07/18 22:32:31 + +commit e72b8606d3db151dad4ce76e5255b4702fcba416 +Author: marc +Date: Thu Jul 18 22:17:12 1996 +0000 + + 2.2.2 + + CVS patchset: 894 + CVS date: 1996/07/18 22:17:12 + +commit 4418c3bb4779bf59a98963d89c43f484b79f8421 +Author: ewt +Date: Thu Jul 18 21:42:59 1996 +0000 + + *** empty log message *** + + CVS patchset: 893 + CVS date: 1996/07/18 21:42:59 + +commit 57907afa36a6abd22ca371866dd36ae68455b647 +Author: ewt +Date: Thu Jul 18 21:42:12 1996 +0000 + + v2 packages included improper OS tags, so ignore them + + CVS patchset: 892 + CVS date: 1996/07/18 21:42:12 + +commit 4977f77e21abdc778f1d0f6a75878c6fe7f067b8 +Author: root +Date: Thu Jul 18 16:10:15 1996 +0000 + + *** empty log message *** + + CVS patchset: 891 + CVS date: 1996/07/18 16:10:15 + +commit 7c40614eb71b0803721086f16fba16b0906afb6c +Author: root +Date: Thu Jul 18 16:09:25 1996 +0000 + + fix nasty bug where pointers into the header were getting stale + /. + + CVS patchset: 890 + CVS date: 1996/07/18 16:09:25 + +commit 575b2504717ae0841a6aa2615588479da264075d +Author: root +Date: Thu Jul 18 16:07:33 1996 +0000 + + print prefix in error message + + CVS patchset: 889 + CVS date: 1996/07/18 16:07:33 + +commit f00ea40a2c01a0fd0a25578a47a9b04dc9bf7e46 +Author: root +Date: Thu Jul 18 03:01:16 1996 +0000 + + *** empty log message *** + + CVS patchset: 888 + CVS date: 1996/07/18 03:01:16 + +commit 4df21a982d2cf51b60f3ed0ad19ecdfb276b20c3 +Author: root +Date: Thu Jul 18 03:00:16 1996 +0000 + + fix stupid free(). + + CVS patchset: 887 + CVS date: 1996/07/18 03:00:16 + +commit ebf5952ce7c6cf92718a4a6ce4af265d26bc986a +Author: ewt +Date: Thu Jul 18 02:25:58 1996 +0000 + + *** empty log message *** + + CVS patchset: 886 + CVS date: 1996/07/18 02:25:58 + +commit aad9e68ff73abb9d9658f011220f5c03245d5c37 +Author: ewt +Date: Thu Jul 18 02:25:13 1996 +0000 + + added rpmdepAvailablePackage() and made rpmdepCheck() suggest fixes + for dependency problems if fixes are avaialble + + CVS patchset: 885 + CVS date: 1996/07/18 02:25:13 + +commit 56d7914e38ad31ecbfbb56cde1267b1e83a62f45 +Author: ewt +Date: Thu Jul 18 02:24:55 1996 +0000 + + 1) added suggestedPackage to dependency conflict structure + 2) added rpmdepAvailablePackage() + + CVS patchset: 884 + CVS date: 1996/07/18 02:24:55 + +commit 763b11d392f3983b25925ca98438f57726def275 +Author: root +Date: Wed Jul 17 21:33:51 1996 +0000 + + *** empty log message *** + + CVS patchset: 883 + CVS date: 1996/07/17 21:33:51 + +commit 473a7d887ece74323a9d2d38e6c43f3da5fdc562 +Author: root +Date: Wed Jul 17 21:33:01 1996 +0000 + + fixed bug where a long name was getting mapped to a long name + + CVS patchset: 882 + CVS date: 1996/07/17 21:33:01 + +commit 3a40404166fd69c0b0724304e1f5fa8fb6e3cff0 +Author: ewt +Date: Wed Jul 17 20:03:26 1996 +0000 + + changed version to 2.2.1 + + CVS patchset: 881 + CVS date: 1996/07/17 20:03:26 + +commit 02fd7b28a3e922c98ab9b9470f51917a2220e1ea +Author: ewt +Date: Wed Jul 17 20:03:04 1996 +0000 + + *** empty log message *** + + CVS patchset: 880 + CVS date: 1996/07/17 20:03:04 + +commit 165a40c8e7904c3dcac0c00d1b6666978c161fdb +Author: ewt +Date: Wed Jul 17 20:02:28 1996 +0000 + + generalize list of added packages, and fixed problem where packages + installed at the same time would verify against each other properly + + CVS patchset: 879 + CVS date: 1996/07/17 20:02:28 + +commit 85db57fe5d1965c7f44a0ec7097f0334ac579584 +Author: ewt +Date: Wed Jul 17 20:01:45 1996 +0000 + + 1) sets arch properly for v1 packages + 2) assumes all v1 packages were built for OS #1 (Linux) + + CVS patchset: 878 + CVS date: 1996/07/17 20:01:45 + +commit cf3c76c5aa1f8664a039f033ec1f4fd59f4e17a7 +Author: ewt +Date: Wed Jul 17 20:01:38 1996 +0000 + + added RPMVAR_FTPPROXY + + CVS patchset: 877 + CVS date: 1996/07/17 20:01:38 + +commit e1f76ba7a2804ea62f439bced9ef229c11efff3b +Author: ewt +Date: Wed Jul 17 20:01:29 1996 +0000 + + added ftpproxy + + CVS patchset: 876 + CVS date: 1996/07/17 20:01:29 + +commit fb9b0b92c164d8781468616ee97e8b1223f1e580 +Author: ewt +Date: Wed Jul 17 20:00:49 1996 +0000 + + 1) began adding support for proxy ftp, though it doesn't work yet + 2) fixed spacing annoyance in dependency conflict printout + + CVS patchset: 875 + CVS date: 1996/07/17 20:00:49 + +commit 56a9277121e87d207f0ecd56ddf8d8c2179cf8f7 +Author: ewt +Date: Wed Jul 17 20:00:31 1996 +0000 + + began adding support for proxy ftp, though it doesn't work yet + + CVS patchset: 874 + CVS date: 1996/07/17 20:00:31 + +commit aed3be5ee5f84eeca72a61f15f116ed62e58b5c9 +Author: ewt +Date: Wed Jul 17 20:00:21 1996 +0000 + + minor spelling/spacing fixes + + CVS patchset: 873 + CVS date: 1996/07/17 20:00:21 + +commit 120170226efd347573ddb0b9f7bcffbe50b2a920 +Author: ewt +Date: Wed Jul 17 14:38:55 1996 +0000 + + removed debugging message, fixed typo + + CVS patchset: 872 + CVS date: 1996/07/17 14:38:55 + +commit d825ec8d00371aca374cad98c23fb6b454e0e7f2 +Author: root +Date: Wed Jul 17 04:57:28 1996 +0000 + + remove warning + + CVS patchset: 871 + CVS date: 1996/07/17 04:57:28 + +commit 23f5f63cefc59104add9fd4f1fa1a4665f818f3e +Author: marc +Date: Wed Jul 17 01:38:19 1996 +0000 + + *** empty log message *** + + CVS patchset: 870 + CVS date: 1996/07/17 01:38:19 + +commit 31e5d186effafae9d122ca9be42ffb2064171b38 +Author: marc +Date: Wed Jul 17 01:36:13 1996 +0000 + + new tags: RPMTAG_EXCLUDEARCH RPMTAG_EXCLUDEOS RPMTAG_EXCLUSIVEARCH RPMTAG_EXCLUSIVEOS + + CVS patchset: 869 + CVS date: 1996/07/17 01:36:13 + +commit 517519682f193b99edd514fc9252aad1f7f84257 +Author: marc +Date: Wed Jul 17 01:35:08 1996 +0000 + + Put exclude/exclusive arch/os in header + depricate Exclude: and Exclusive:, now use ExcludeArch: ExclusiveArch:, + and same for OS. + + CVS patchset: 868 + CVS date: 1996/07/17 01:35:08 + +commit 7aaa507e70502c9ff39c1406362b7905535b698d +Author: ewt +Date: Tue Jul 16 21:07:16 1996 +0000 + + *** empty log message *** + + CVS patchset: 867 + CVS date: 1996/07/16 21:07:16 + +commit 5ef09eb03a6d1644e494139c61cf5096a9e1df8a +Author: ewt +Date: Tue Jul 16 21:06:08 1996 +0000 + + supports for ftp://user:pass@machiune/ URL's, with password prompting + when the password is missing + + CVS patchset: 866 + CVS date: 1996/07/16 21:06:08 + +commit 3ad2f39c0fdb52363d4e059247639be40b5cd11d +Author: ewt +Date: Tue Jul 16 20:22:09 1996 +0000 + + added message for verbose mode + + CVS patchset: 865 + CVS date: 1996/07/16 20:22:09 + +commit 4616cc81ba42ae7fcccb907ff60575d643ef8656 +Author: ewt +Date: Tue Jul 16 18:45:52 1996 +0000 + + added missing .br + + CVS patchset: 864 + CVS date: 1996/07/16 18:45:52 + +commit 302205cd6c9cabd2801db1d8f35251661bc566a6 +Author: ewt +Date: Tue Jul 16 18:38:21 1996 +0000 + + *** empty log message *** + + CVS patchset: 863 + CVS date: 1996/07/16 18:38:21 + +commit 71b5d067b4db6b4d95e69e7ddfa70645396acaa4 +Author: ewt +Date: Tue Jul 16 16:54:49 1996 +0000 + + *** empty log message *** + + CVS patchset: 862 + CVS date: 1996/07/16 16:54:49 + +commit 85650608a28da2528973cf42b62461434c0daec6 +Author: ewt +Date: Tue Jul 16 16:54:36 1996 +0000 + + changed version to 2.2 (2.1.3 was never publically released) + + CVS patchset: 861 + CVS date: 1996/07/16 16:54:36 + +commit 0382eab6a96bd6ea55eb1981c1f703e458f09552 +Author: ewt +Date: Tue Jul 16 16:37:15 1996 +0000 + + *** empty log message *** + + CVS patchset: 860 + CVS date: 1996/07/16 16:37:15 + +commit 13c9f2cfdf0d5d3e37369168dc8994f3cc649848 +Author: ewt +Date: Tue Jul 16 16:12:21 1996 +0000 + + *** empty log message *** + + CVS patchset: 859 + CVS date: 1996/07/16 16:12:21 + +commit 0a2a43aa4dbda884cc7db0f6338906667a036c76 +Author: ewt +Date: Tue Jul 16 16:11:37 1996 +0000 + + various changes from Joesph Hartmann + + CVS patchset: 858 + CVS date: 1996/07/16 16:11:37 + +commit 9b7b8f2743d2aba7335230afea4d8b8b8c4f1e88 +Author: ewt +Date: Tue Jul 16 15:57:16 1996 +0000 + + *** empty log message *** + + CVS patchset: 857 + CVS date: 1996/07/16 15:57:16 + +commit 8339f90a044336b7b95c0127519dfa01a2ebbf4f +Author: ewt +Date: Tue Jul 16 15:56:21 1996 +0000 + + improved error message when file is missing + + CVS patchset: 856 + CVS date: 1996/07/16 15:56:21 + +commit c2c19b6de7e47a6c662af5afeaef769cdc3d4e6d +Author: ewt +Date: Tue Jul 16 15:46:33 1996 +0000 + + reset hash count after a package is installed + + CVS patchset: 855 + CVS date: 1996/07/16 15:46:33 + +commit 67722f95de4c5e5a8d76c1d0c5cda85b2bd58f86 +Author: marc +Date: Tue Jul 16 15:20:52 1996 +0000 + + move arch_compat lines to usr.lib.rpmrc + add arch_compat lines for mklinux stuff + + CVS patchset: 854 + CVS date: 1996/07/16 15:20:52 + +commit ce9e54314573bf36870ea33b609fa60b96e7df58 +Author: ewt +Date: Tue Jul 16 03:52:27 1996 +0000 + + *** empty log message *** + + CVS patchset: 853 + CVS date: 1996/07/16 03:52:27 + +commit 6f38e76282384e866d59f567b6d34b21eeb0f998 +Author: ewt +Date: Tue Jul 16 03:46:36 1996 +0000 + + *** empty log message *** + + CVS patchset: 852 + CVS date: 1996/07/16 03:46:36 + +commit c54a7cf0867e3d1e731218e853a55f316a84133d +Author: ewt +Date: Tue Jul 16 03:46:20 1996 +0000 + + added --ignoreos + + CVS patchset: 851 + CVS date: 1996/07/16 03:46:20 + +commit 5a03def29400afc77690605e34cd453aa3632a2d +Author: ewt +Date: Tue Jul 16 03:43:33 1996 +0000 + + 1) returns score instead of distance into equivalences + + CVS patchset: 850 + CVS date: 1996/07/16 03:43:33 + +commit 7ac283b75aeb2baf9ff4c4482ef8454382a06c5f +Author: ewt +Date: Tue Jul 16 03:43:13 1996 +0000 + + 1) checks gzread() properly + 2) returns on bad arch/os + + CVS patchset: 849 + CVS date: 1996/07/16 03:43:13 + +commit 88a305a6ac03008c271b43ecf9b4439cad3a46ad +Author: ewt +Date: Tue Jul 16 03:37:28 1996 +0000 + + 1) added INSTALL_NOOS flag + 2) renamed showRc() rpmShowRC() + 3) added rpmOsScore() + + CVS patchset: 848 + CVS date: 1996/07/16 03:37:28 + +commit 2320fb3fc0fa977e62dc2b72cbf7182c34590a71 +Author: ewt +Date: Tue Jul 16 03:37:07 1996 +0000 + + 1) check OS's at install time + 2) checks return code from gzread() + + CVS patchset: 847 + CVS date: 1996/07/16 03:37:07 + +commit 078fc06412dc87eb34d768bf782e672732af19c9 +Author: ewt +Date: Tue Jul 16 03:36:23 1996 +0000 + + 1) renamed showRc() to rpmShowRC() + 2) added a true digraph for arch/os resolution at install time + 3) updates rpmShowRC() to list arch and os equivalences + + CVS patchset: 846 + CVS date: 1996/07/16 03:36:23 + +commit 885affddf5746c0d546cc3f6453a81e4ba0c9f86 +Author: ewt +Date: Tue Jul 16 03:36:10 1996 +0000 + + *** empty log message *** + + CVS patchset: 845 + CVS date: 1996/07/16 03:36:10 + +commit 46eed9fc1ec16c86b1a7692a18afbdb79256103c +Author: ewt +Date: Tue Jul 16 03:35:29 1996 +0000 + + changed showRc() to rpmShowRC() + made -u option exit with an error + + CVS patchset: 844 + CVS date: 1996/07/16 03:35:29 + +commit c2081bbe1e7fdd924bd570d9efa77caf92c6dca1 +Author: ewt +Date: Tue Jul 16 03:35:20 1996 +0000 + + *** empty log message *** + + CVS patchset: 843 + CVS date: 1996/07/16 03:35:20 + +commit b0d057d49bad2c804d24e548efda0886dbfa7322 +Author: marc +Date: Mon Jul 15 22:35:57 1996 +0000 + + change all the "data" things to "canon" things (arch and os) + For a given arch_canon: A B C, add an A B C, and a B B C entry + (same for os) + + CVS patchset: 842 + CVS date: 1996/07/15 22:35:57 + +commit f0c5b323d2951419d5d1e804168dc3b1d8881660 +Author: marc +Date: Mon Jul 15 22:35:47 1996 +0000 + + *** empty log message *** + + CVS patchset: 841 + CVS date: 1996/07/15 22:35:47 + +commit 4c1339ea0c269f886d6dfaae838db824f9898cf1 +Author: marc +Date: Mon Jul 15 22:34:44 1996 +0000 + + change to _canon + move osfmach* translations to buildarchtranslations + / + + CVS patchset: 840 + CVS date: 1996/07/15 22:34:44 + +commit 6f49f824c6709512805f9875433aacd85ac73b10 +Author: marc +Date: Mon Jul 15 18:35:34 1996 +0000 + + *** empty log message *** + + CVS patchset: 839 + CVS date: 1996/07/15 18:35:34 + +commit 1baa75ddb9d9514c99ec7b080cac0ea867e42507 +Author: marc +Date: Mon Jul 15 18:34:47 1996 +0000 + + make rpmrc case insensitive + + CVS patchset: 838 + CVS date: 1996/07/15 18:34:47 + +commit f68961d513c22953e3ccab04c845be771ba7a1bb +Author: marc +Date: Mon Jul 15 02:05:39 1996 +0000 + + *** empty log message *** + + CVS patchset: 837 + CVS date: 1996/07/15 02:05:39 + +commit e252e69b3e9773a48ab19b135e5329e1b8839125 +Author: marc +Date: Mon Jul 15 01:56:15 1996 +0000 + + heavy hackage: + added: getOsNum getArchNum getOsName getArchName + added: showRc() + remove from rpmrc: docdir, os, build_arch + add to rpmrc: packager + added os_data and arch_data to hold arch short_name and archnumber + (same for os) + always parse /usr/lib/rpmrc + added buildarchtranslate, and buildostranslate to rpmrc + to specify default build arch other than what uname() returns (and os) + + CVS patchset: 836 + CVS date: 1996/07/15 01:56:15 + +commit 7b947a2d232bb4fbb0bcdd93278f1529a159398f +Author: marc +Date: Mon Jul 15 01:55:38 1996 +0000 + + remove initArchOs getOsNum getArchNum getOsName getArchName + + CVS patchset: 835 + CVS date: 1996/07/15 01:55:38 + +commit d93466fa0b705dd3a693b7e8801590ac904040d6 +Author: marc +Date: Mon Jul 15 01:53:21 1996 +0000 + + remove RPMVAR_DOCDIR RPMVAR_PGP_SECRING RPMVAR_PGP_PUBRING RPMVAR_BUILDARCH + remove RPMVAR_BUILDOS + add RPMVAR_PACKAGER + moved from misc.h: getOsNum getArchNum getOsName getArchName + add showRc + + CVS patchset: 834 + CVS date: 1996/07/15 01:53:21 + +commit c5e21975d4e0aa78b60d8b4712a498ddcc956e3b +Author: marc +Date: Mon Jul 15 01:52:08 1996 +0000 + + change --arch and --os to --build and --buildos + add --showrc + + CVS patchset: 833 + CVS date: 1996/07/15 01:52:08 + +commit 02f27ca67a41ad349ac271c8082c433edbad16eb +Author: marc +Date: Mon Jul 15 01:50:58 1996 +0000 + + remove pgp cruft + install /usr/lib/rpmrc + + CVS patchset: 832 + CVS date: 1996/07/15 01:50:58 + +commit f552c9bc52e6478d3660633a6539b8eb52de56e8 +Author: marc +Date: Mon Jul 15 00:56:32 1996 +0000 + + Initial revision + + CVS patchset: 831 + CVS date: 1996/07/15 00:56:32 + +commit 7ae3268ff72e936ec87f9b7679335e017984c973 +Author: marc +Date: Mon Jul 15 00:54:18 1996 +0000 + + take packager from rpmrc + + CVS patchset: 830 + CVS date: 1996/07/15 00:54:18 + +commit c26b4691b02f92ba5d53f54c25c55d9339216f2b +Author: marc +Date: Sun Jul 14 23:36:09 1996 +0000 + + *** empty log message *** + + CVS patchset: 829 + CVS date: 1996/07/14 23:36:09 + +commit b3c486a7d6e41ffdf626a52b731aeb4a1f98402c +Author: marc +Date: Sun Jul 14 23:31:36 1996 +0000 + + remove DOCDIR + + CVS patchset: 828 + CVS date: 1996/07/14 23:31:36 + +commit 393cce24cddcf07aafa4fd1a9de0b955ce4411f9 +Author: marc +Date: Sun Jul 14 23:30:24 1996 +0000 + + remove DOCDIR + / + + CVS patchset: 827 + CVS date: 1996/07/14 23:30:24 + +commit 78382b8775a3d718b8b276f33a6de542bce42fb6 +Author: marc +Date: Sun Jul 14 22:59:41 1996 +0000 + + change message + + CVS patchset: 826 + CVS date: 1996/07/14 22:59:41 + +commit 2679755ef789d750dd012e42864d8423fee19326 +Author: root +Date: Sun Jul 14 16:40:02 1996 +0000 + + *** empty log message *** + + CVS patchset: 825 + CVS date: 1996/07/14 16:40:02 + +commit 6b5fe3f3fbcdfd9e114c77fe4b258721a8cf97dc +Author: root +Date: Sun Jul 14 16:38:57 1996 +0000 + + allow Prefix: (DEFAULTPREFIX) for sub packages + + CVS patchset: 824 + CVS date: 1996/07/14 16:38:57 + +commit 8cc5a4021be703b916915c7341cef774459fab34 +Author: root +Date: Sun Jul 14 16:21:27 1996 +0000 + + sub packges should have summaries + allow default prefixes for sub packages + + CVS patchset: 823 + CVS date: 1996/07/14 16:21:27 + +commit 9aa4a366406aa19d2efce95e533a6b9462627486 +Author: ewt +Date: Sun Jul 14 16:19:51 1996 +0000 + + changed version to 2.1.3 + + CVS patchset: 822 + CVS date: 1996/07/14 16:19:51 + +commit 3a8c88000f6003b4d45a513e46b76215cc1c08e0 +Author: ewt +Date: Sun Jul 14 16:19:32 1996 +0000 + + *** empty log message *** + + CVS patchset: 821 + CVS date: 1996/07/14 16:19:32 + +commit 373acfe46bf8fa1c87c851e2ea11fca6ce283f57 +Author: ewt +Date: Sun Jul 14 16:14:39 1996 +0000 + + 1) added Summary to -qi output + 2) made --requires and --provides not print (none) if the tags aren't present + + CVS patchset: 820 + CVS date: 1996/07/14 16:14:39 + +commit b67317e599105b4fe45fde2ec77c3c7730bcbcc2 +Author: ewt +Date: Sun Jul 14 16:14:24 1996 +0000 + + made -R work as a shortcut for --requires + + CVS patchset: 819 + CVS date: 1996/07/14 16:14:24 + +commit d302f506aaaf18674b10bee90dceba9a33b0308a +Author: root +Date: Sun Jul 14 16:14:01 1996 +0000 + + change "build prefix" to "build root" + + CVS patchset: 818 + CVS date: 1996/07/14 16:14:01 + +commit 1a0bc2056d1784ecb3caa3072c94ce1c9d3e8874 +Author: root +Date: Sun Jul 14 16:12:18 1996 +0000 + + Initial revision + + CVS patchset: 817 + CVS date: 1996/07/14 16:12:18 + +commit 19dbeeece09ae3dd59df98e4be19b8370d52d6df +Author: root +Date: Sun Jul 14 16:06:35 1996 +0000 + + buildprefix -> buildroot + + CVS patchset: 816 + CVS date: 1996/07/14 16:06:35 + +commit 0fe72e0e37b389d07e0be3e17b2ba0b9d0bfcb2a +Author: root +Date: Sun Jul 14 03:47:46 1996 +0000 + + arch sensitive always on + + CVS patchset: 815 + CVS date: 1996/07/14 03:47:46 + +commit af8ec8c659860d8a63b411e5843a02f25280e8b5 +Author: root +Date: Sun Jul 14 03:47:23 1996 +0000 + + removed arch sensitive -- always on + + CVS patchset: 814 + CVS date: 1996/07/14 03:47:23 + +commit 92150f2b387d7924f87834b83c5686689909d889 +Author: root +Date: Sun Jul 14 03:47:00 1996 +0000 + + *** empty log message *** + + CVS patchset: 813 + CVS date: 1996/07/14 03:47:00 + +commit cbadbc8206d6edfd3b55731e6c3358d5e64aa077 +Author: root +Date: Sun Jul 14 03:39:14 1996 +0000 + + *** empty log message *** + + CVS patchset: 812 + CVS date: 1996/07/14 03:39:14 + +commit ac3cfd4775b7132cf878ef83548c03e39822e153 +Author: root +Date: Sun Jul 14 03:38:29 1996 +0000 + + do not allow Prefix: or Buildprefix: in sub packages + + CVS patchset: 811 + CVS date: 1996/07/14 03:38:29 + +commit f5617dc32ab78fc2af68f2bff6ba97546a5827ac +Author: root +Date: Sun Jul 14 03:38:10 1996 +0000 + + *** empty log message *** + + CVS patchset: 810 + CVS date: 1996/07/14 03:38:10 + +commit b644f93374ee63f5c2b77843837046188453d2f5 +Author: root +Date: Sun Jul 14 03:37:18 1996 +0000 + + remove require_group. It will always be ON now. + + CVS patchset: 809 + CVS date: 1996/07/14 03:37:18 + +commit ce8b994704e1749c6bd0c067a6354ed92789683d +Author: root +Date: Sun Jul 14 00:45:34 1996 +0000 + + *** empty log message *** + + CVS patchset: 808 + CVS date: 1996/07/14 00:45:34 + +commit 3b23471795963368028a662790b38724f16d91ce +Author: root +Date: Sun Jul 14 00:43:39 1996 +0000 + + send stuff to xargs with null termination so that we can + handle weird file names with quotes and spaces + + CVS patchset: 807 + CVS date: 1996/07/14 00:43:39 + +commit d2028b29aa4e34000e24ba0a696c2a1ea3e20dd6 +Author: ewt +Date: Sat Jul 13 22:18:48 1996 +0000 + + fixed nasty bug w/ arg list passed to cpio wasn't getting NULL terminated + when a /tmp filelist was used + + CVS patchset: 806 + CVS date: 1996/07/13 22:18:48 + +commit cdd4c29192131e1b6a3369b10f324928336a63da +Author: root +Date: Sat Jul 13 20:03:55 1996 +0000 + + Initial revision + + CVS patchset: 805 + CVS date: 1996/07/13 20:03:55 + +commit a5edccd71c050c410abab4b5807289c501f74d7a +Author: ewt +Date: Sat Jul 13 14:53:33 1996 +0000 + + after successfull file transfer, read the "Transfer Completed" from the + server -- if we don't, we can't do another transfer w/o reconnecting + + CVS patchset: 804 + CVS date: 1996/07/13 14:53:33 + +commit 0b020614b25ee6a67013295271b8827e2b0d3bb9 +Author: ewt +Date: Fri Jul 12 20:28:43 1996 +0000 + + removed printf, fixed inet_aton() result check + + CVS patchset: 803 + CVS date: 1996/07/12 20:28:43 + +commit e837ec5148fc320288caecbae81144861450766c +Author: ewt +Date: Fri Jul 12 20:11:08 1996 +0000 + + removed message() calls to use code in install + + CVS patchset: 802 + CVS date: 1996/07/12 20:11:08 + +commit 54ba2f084059849768e641cc0b1254b3dd33b6df +Author: root +Date: Fri Jul 12 19:28:21 1996 +0000 + + *** empty log message *** + + CVS patchset: 801 + CVS date: 1996/07/12 19:28:21 + +commit 2e4837fb6d5bc329c1a0dda2f12d3f5049a6f6bd +Author: root +Date: Fri Jul 12 19:27:34 1996 +0000 + + add stuff for missing PGP keys + + CVS patchset: 800 + CVS date: 1996/07/12 19:27:34 + +commit ebc8ff6e5798965524ccee5e7de54ecb8ce7e974 +Author: root +Date: Fri Jul 12 19:26:31 1996 +0000 + + print message if couldn't find a PGP key + + CVS patchset: 799 + CVS date: 1996/07/12 19:26:31 + +commit 758eff8987f087d187ce534de87a5b8d0833c1fb +Author: root +Date: Fri Jul 12 17:06:33 1996 +0000 + + added some signatures + + CVS patchset: 798 + CVS date: 1996/07/12 17:06:33 + +commit c6012d1698d622a82973196466325ed67388b5d6 +Author: ewt +Date: Fri Jul 12 02:34:25 1996 +0000 + + 1) removed rpmconvert from Makefile + 2) fixed find line + 3) 'make co' checks out latest versions of docs + + CVS patchset: 797 + CVS date: 1996/07/12 02:34:25 + +commit d4a0fa43887d78e9a35c0658581f1aee30154d55 +Author: ewt +Date: Fri Jul 12 02:32:31 1996 +0000 + + removed extraneous ' ' + + CVS patchset: 796 + CVS date: 1996/07/12 02:32:31 + +commit 0d58d159910f488392205e18a0217d51f9ab837e +Author: ewt +Date: Fri Jul 12 02:31:16 1996 +0000 + + Initial revision + + CVS patchset: 795 + CVS date: 1996/07/12 02:31:16 + +commit 3d2adecc22106f77ead967354ce07a89369f25e1 +Author: root +Date: Fri Jul 12 01:36:42 1996 +0000 + + *** empty log message *** + + CVS patchset: 794 + CVS date: 1996/07/12 01:36:42 + +commit 9430e6139ce3d17565d6bb7b4bce2e1fc0a1b326 +Author: root +Date: Fri Jul 12 01:36:29 1996 +0000 + + fixed qsort() and bsearch() sizes for the provides table + + CVS patchset: 793 + CVS date: 1996/07/12 01:36:29 + +commit 397794d5c14c3bfbdac5ba51309b73c0e4570727 +Author: root +Date: Fri Jul 12 01:17:58 1996 +0000 + + cleans up core files in make clean + + CVS patchset: 792 + CVS date: 1996/07/12 01:17:58 + +commit 4c35337d4b85fca5511560703f477a42fb1acdd3 +Author: root +Date: Thu Jul 11 23:45:13 1996 +0000 + + *** empty log message *** + + CVS patchset: 791 + CVS date: 1996/07/11 23:45:13 + +commit f722281aa171f42165e5272bef05ce5136a93483 +Author: root +Date: Thu Jul 11 23:42:46 1996 +0000 + + clean up temp file + + CVS patchset: 790 + CVS date: 1996/07/11 23:42:46 + +commit 6f0ecdac88d12f3cde9688dd2f511e8daaf03778 +Author: ewt +Date: Thu Jul 11 18:13:12 1996 +0000 + + *** empty log message *** + + CVS patchset: 789 + CVS date: 1996/07/11 18:13:12 + +commit 05fc349ebd0ec609a6d78e5397d8ead7658042cf +Author: ewt +Date: Thu Jul 11 18:12:40 1996 +0000 + + don't free lists never allocated! + + CVS patchset: 788 + CVS date: 1996/07/11 18:12:40 + +commit 383f9cb337f9d8be5cc3d22b76ae958726d2020a +Author: root +Date: Thu Jul 11 16:32:10 1996 +0000 + + *** empty log message *** + + CVS patchset: 787 + CVS date: 1996/07/11 16:32:10 + +commit 8cbaab5fa0b27dde2921155f498f02df043fe122 +Author: ewt +Date: Thu Jul 11 15:49:53 1996 +0000 + + *** empty log message *** + + CVS patchset: 786 + CVS date: 1996/07/11 15:49:53 + +commit 09b573f5dc7f41d20b2fee90d2829fcb76268700 +Author: ewt +Date: Thu Jul 11 15:48:21 1996 +0000 + + fixed error message for packages which are not relocateable + + CVS patchset: 785 + CVS date: 1996/07/11 15:48:21 + +commit 2b298ad4c0267137e590c4e24849689418c92dbe +Author: root +Date: Thu Jul 11 15:17:03 1996 +0000 + + changed to version 2.1.2 + + CVS patchset: 784 + CVS date: 1996/07/11 15:17:03 + +commit 269881b8bfea6277d053d2fdf9fa84bd36ec1b3b +Author: root +Date: Thu Jul 11 15:11:49 1996 +0000 + + fix auto-provide stuff to use ROOT + + CVS patchset: 783 + CVS date: 1996/07/11 15:11:49 + +commit b4e0a62b6a2695fdf0f0e4fc9197c6160b103f52 +Author: ewt +Date: Thu Jul 11 02:15:30 1996 +0000 + + *** empty log message *** + + CVS patchset: 782 + CVS date: 1996/07/11 02:15:30 + +commit 13a43cc7c899f3c75794c38d531e693238a9d944 +Author: ewt +Date: Wed Jul 10 23:59:54 1996 +0000 + + changed version number to 2.1.1 + + CVS patchset: 781 + CVS date: 1996/07/10 23:59:54 + +commit 7f0a7733ea58ffd1bdc421acdbb9938377fbe8a1 +Author: ewt +Date: Wed Jul 10 23:59:37 1996 +0000 + + fixed default build string to not use '-' to print dates + + CVS patchset: 780 + CVS date: 1996/07/10 23:59:37 + +commit ba394876c166b16c728802a3c9b2b54e7a5733cf +Author: ewt +Date: Wed Jul 10 20:51:14 1996 +0000 + + Initial revision + + CVS patchset: 779 + CVS date: 1996/07/10 20:51:14 + +commit c8dbde3e87a07f589ec9b835522593547ae57c5c +Author: root +Date: Wed Jul 10 20:19:07 1996 +0000 + + use proper soname for automatic shared lib req/prov + + CVS patchset: 778 + CVS date: 1996/07/10 20:19:07 + +commit 229721a5ddd03c1d86311a309be87a5161c50f6d +Author: root +Date: Wed Jul 10 20:18:43 1996 +0000 + + warn if they use Root: + + CVS patchset: 777 + CVS date: 1996/07/10 20:18:43 + +commit 4ac3bcf8fd8ddd9a0c69e129ea602d30669b3a6f +Author: root +Date: Wed Jul 10 20:18:15 1996 +0000 + + clean up formatting + + CVS patchset: 776 + CVS date: 1996/07/10 20:18:15 + +commit 64fcd73d5738ffee0f05157c431220d489087803 +Author: ewt +Date: Wed Jul 10 19:50:46 1996 +0000 + + check package version numbers for source packages + + CVS patchset: 775 + CVS date: 1996/07/10 19:50:46 + +commit 11931fd81b0f2f0b0a549b7ec04d26b174dc8e1f +Author: ewt +Date: Wed Jul 10 16:29:44 1996 +0000 + + 1) added send to dependency conflict reporting + 2) added rpmdepUpgradePackage() + + CVS patchset: 774 + CVS date: 1996/07/10 16:29:44 + +commit 1178a102cc99479c2c16510bb6cc7c77f9095eb3 +Author: ewt +Date: Wed Jul 10 16:29:24 1996 +0000 + + 1) added version and serial number checking + 2) supports upgrades properly + + CVS patchset: 773 + CVS date: 1996/07/10 16:29:24 + +commit 98fe02908713e3560f2ace873bafe1d43c30601f +Author: ewt +Date: Wed Jul 10 16:28:50 1996 +0000 + + 1) improved printing of dependency conflics + 2) corrected dependency checking for upgrades + + CVS patchset: 772 + CVS date: 1996/07/10 16:28:50 + +commit 20cf048a8c501148e81cd5621044342adfad7bb6 +Author: ewt +Date: Wed Jul 10 16:28:24 1996 +0000 + + 1) changed a bunch of the queries to happen via query formats + 2) added :depflags query tag + + CVS patchset: 771 + CVS date: 1996/07/10 16:28:24 + +commit c7934684224f30e430203ee049c70b8925495123 +Author: ewt +Date: Wed Jul 10 16:28:10 1996 +0000 + + *** empty log message *** + + CVS patchset: 770 + CVS date: 1996/07/10 16:28:10 + +commit 0ea45f6a7442fa96461c8518ab94e80b96bbcfc5 +Author: ewt +Date: Wed Jul 10 16:16:05 1996 +0000 + + *** empty log message *** + + CVS patchset: 769 + CVS date: 1996/07/10 16:16:05 + +commit 3afd2294dc930c233eaf1ac56de73842b8c83ab5 +Author: root +Date: Wed Jul 10 15:47:33 1996 +0000 + + clean up message for release + + CVS patchset: 768 + CVS date: 1996/07/10 15:47:33 + +commit 1c0441f20f50578a20933c0e578b7f3c53bea496 +Author: root +Date: Wed Jul 10 15:42:48 1996 +0000 + + initialize res + + CVS patchset: 767 + CVS date: 1996/07/10 15:42:48 + +commit aa64e5b8e3dc0872b2f0ebcb489843916d877ec4 +Author: root +Date: Wed Jul 10 15:16:54 1996 +0000 + + fix uninitialized buildprefix + + CVS patchset: 766 + CVS date: 1996/07/10 15:16:54 + +commit 42f7afa1f75d4966c789c5befddad62cdcc1f696 +Author: ewt +Date: Wed Jul 10 14:11:19 1996 +0000 + + changes to set RPMTAG_INSTALLPREFIX correctly + + CVS patchset: 765 + CVS date: 1996/07/10 14:11:19 + +commit 3e26f1bd58b6b77a7c0f7c39549fb2f307af84d8 +Author: ewt +Date: Wed Jul 10 14:11:04 1996 +0000 + + set RPM_INSTALL_PREFIX environment variable in runScript() when appropriate + + CVS patchset: 764 + CVS date: 1996/07/10 14:11:04 + +commit b49226a7ed475a2262941c9173ad3280d7bfe53b +Author: ewt +Date: Wed Jul 10 02:35:31 1996 +0000 + + 1) reworked long arguments to eliminate strcmp()'s + 2) added --prefix option + 3) added --rpmdb option + + CVS patchset: 763 + CVS date: 1996/07/10 02:35:31 + +commit b4e42cbe892eea237c62ffb20c9978ad7875ce3a +Author: ewt +Date: Wed Jul 10 02:35:15 1996 +0000 + + added support for relocateable packages + + CVS patchset: 762 + CVS date: 1996/07/10 02:35:15 + +commit d5588e711c0485c76035a409afb8e2799f3a483e +Author: ewt +Date: Wed Jul 10 02:35:11 1996 +0000 + + *** empty log message *** + + CVS patchset: 761 + CVS date: 1996/07/10 02:35:11 + +commit 49f4b0fba00d5437e2bfadcba7f1a0f621e5b357 +Author: ewt +Date: Wed Jul 10 02:34:15 1996 +0000 + + aedded RPMTAG_INSTALLPREFIX, RPMVAR_DBPATH, and location parameter to + rpmInstallPackage() + + CVS patchset: 760 + CVS date: 1996/07/10 02:34:15 + +commit 3685015232cf8870ff32f30e1e446e52809651c0 +Author: ewt +Date: Wed Jul 10 02:33:54 1996 +0000 + + added stripTrailingSlashes() + + CVS patchset: 759 + CVS date: 1996/07/10 02:33:54 + +commit 5f0b82b4f575d3e23b541b68899cfb4db9ddc76a +Author: ewt +Date: Wed Jul 10 02:33:38 1996 +0000 + + supports relocateable packages + + CVS patchset: 758 + CVS date: 1996/07/10 02:33:38 + +commit abb42944a48ffd9ed05155dce7ddf8010f1192d3 +Author: ewt +Date: Wed Jul 10 02:33:26 1996 +0000 + + supports different database locations + + CVS patchset: 757 + CVS date: 1996/07/10 02:33:26 + +commit b59685851409130542fc370080483168959b9fd0 +Author: ewt +Date: Wed Jul 10 02:33:11 1996 +0000 + + cleaned up some misleading error messages + + CVS patchset: 756 + CVS date: 1996/07/10 02:33:11 + +commit 2cf5f7b52fdb24499a9edab285636f522c4df174 +Author: ewt +Date: Wed Jul 10 02:32:45 1996 +0000 + + added dbpath + + CVS patchset: 755 + CVS date: 1996/07/10 02:32:45 + +commit bd5fd3558502a4058969dac01c55f1f4f29b6c53 +Author: root +Date: Wed Jul 10 01:38:44 1996 +0000 + + initialize prefix and prefixLen + + CVS patchset: 754 + CVS date: 1996/07/10 01:38:44 + +commit dd646a2df914129c1f52fedf1b3485d72b3b9894 +Author: root +Date: Wed Jul 10 01:38:14 1996 +0000 + + additional check for running off end of string + + CVS patchset: 753 + CVS date: 1996/07/10 01:38:14 + +commit d671a6567a17140d823e42924f4fbf5ebb5e177e +Author: root +Date: Tue Jul 9 22:29:16 1996 +0000 + + BUILDPREFIX stuff + + CVS patchset: 752 + CVS date: 1996/07/09 22:29:16 + +commit 71ee0f2b24397a905023288165afe7b4ccc1a973 +Author: root +Date: Tue Jul 9 22:28:43 1996 +0000 + + handle --buildprefix + + CVS patchset: 751 + CVS date: 1996/07/09 22:28:43 + +commit c6a464e9fbf2782924af31db67ae4cf9f20d6968 +Author: root +Date: Tue Jul 9 22:28:22 1996 +0000 + + handle Build Prefix + + CVS patchset: 750 + CVS date: 1996/07/09 22:28:22 + +commit 8232554b3dc6c4f15d5ac7a0ae0d33fd7661a7d7 +Author: root +Date: Tue Jul 9 02:07:21 1996 +0000 + + *** empty log message *** + + CVS patchset: 749 + CVS date: 1996/07/09 02:07:21 + +commit e914b78e33143855c850e1cdb513a0103ee9f17e +Author: root +Date: Tue Jul 9 02:06:26 1996 +0000 + + logic for handling Prefix: + + CVS patchset: 748 + CVS date: 1996/07/09 02:06:26 + +commit 6a9e968b167a2d1b7177632ee07a7fa9f56b50b4 +Author: root +Date: Tue Jul 9 01:10:00 1996 +0000 + + added RPMTAG_DEFAULTPREFIX + + CVS patchset: 747 + CVS date: 1996/07/09 01:10:00 + +commit 83f2bed396792aa5298eee9e57da27379690f669 +Author: root +Date: Mon Jul 8 15:46:29 1996 +0000 + + fix Summary parsing + + CVS patchset: 746 + CVS date: 1996/07/08 15:46:29 + +commit 08370243546bae623966a927eafc9f2746b58d81 +Author: root +Date: Mon Jul 8 03:58:03 1996 +0000 + + make --nopgp work + + CVS patchset: 745 + CVS date: 1996/07/08 03:58:03 + +commit 2c9c29a23c88c62de0bb5d87c416884d1395ce1b +Author: root +Date: Mon Jul 8 03:54:26 1996 +0000 + + *** empty log message *** + + CVS patchset: 744 + CVS date: 1996/07/08 03:54:26 + +commit bc6d4246fc3b89b3cdf37fcb173b40909d05b540 +Author: root +Date: Mon Jul 8 03:27:05 1996 +0000 + + cleanup of verify stuff + + CVS patchset: 743 + CVS date: 1996/07/08 03:27:05 + +commit 95419b579038611bcbd84c9ec7099ff973738e0b +Author: root +Date: Mon Jul 8 03:26:34 1996 +0000 + + --addsign + + CVS patchset: 742 + CVS date: 1996/07/08 03:26:34 + +commit adfc74a3f02fa8eba172d8712a91ff56a1e00497 +Author: root +Date: Mon Jul 8 03:25:57 1996 +0000 + + handle --addsign and new Header-style signatures + somewhat cleaner -K output + + CVS patchset: 741 + CVS date: 1996/07/08 03:25:57 + +commit a5886c0e5c875d268f1c0d9c1ee0a3f1f320b24e +Author: root +Date: Mon Jul 8 03:25:36 1996 +0000 + + change soReSign() to handle addition of signatures + + CVS patchset: 740 + CVS date: 1996/07/08 03:25:36 + +commit 6d5274833811ae749e76a9690039b670faa9d494 +Author: root +Date: Sun Jul 7 22:38:57 1996 +0000 + + print architecture name if architecture error + + CVS patchset: 739 + CVS date: 1996/07/07 22:38:57 + +commit 42a5bd5280e63887373f1295ffe85a5e831712c1 +Author: root +Date: Sun Jul 7 22:26:31 1996 +0000 + + remove support for old-new style signatures (never released) + + CVS patchset: 738 + CVS date: 1996/07/07 22:26:31 + +commit 86dd8ab30438db4320d35d5f3abe7523b6afff7f +Author: root +Date: Sun Jul 7 22:19:32 1996 +0000 + + new Header-style signatures + + CVS patchset: 737 + CVS date: 1996/07/07 22:19:32 + +commit 3bd8fef246e9a33fd6260798a25df27dcec12042 +Author: root +Date: Sun Jul 7 22:18:56 1996 +0000 + + HEADER_MAGIC + + CVS patchset: 736 + CVS date: 1996/07/07 22:18:56 + +commit 1f5921a0461fb10eb23e5ec35b349e2e13de81e2 +Author: root +Date: Sun Jul 7 22:18:14 1996 +0000 + + new Header-style signatures, HEADER_MAGIC + + CVS patchset: 735 + CVS date: 1996/07/07 22:18:14 + +commit 5f8fc3c18a0b5a4940cc96079253af63f74a0e74 +Author: root +Date: Sun Jul 7 22:17:48 1996 +0000 + + cleanup - init_arch_os no longer used + + CVS patchset: 734 + CVS date: 1996/07/07 22:17:48 + +commit 6cff32b5162cf31f156126f33db188a35b8eabbd +Author: root +Date: Sun Jul 7 22:15:14 1996 +0000 + + HEADER_MAGIC, error checking in readHeader(), dump BIN_TYPEs, fix other + dump outputs + + CVS patchset: 733 + CVS date: 1996/07/07 22:15:14 + +commit 394d9b8acb4cc3e1d3aa6f984e50bcf52860cebb +Author: root +Date: Sun Jul 7 22:13:37 1996 +0000 + + mods for new Header-style signature and HEADER_MAGIC + + CVS patchset: 732 + CVS date: 1996/07/07 22:13:37 + +commit 9cd8b6196fd5afc99b2ffaed440edfbbd5c9741f +Author: root +Date: Sun Jul 7 22:12:06 1996 +0000 + + take stdin + mods for HEADER_MAGIC + + CVS patchset: 731 + CVS date: 1996/07/07 22:12:06 + +commit 13557192ec64c6b8f5cd149d7eb1a2c155e1ed36 +Author: root +Date: Sun Jul 7 22:11:43 1996 +0000 + + remove rpmchecksig + + CVS patchset: 730 + CVS date: 1996/07/07 22:11:43 + +commit e0878672e314f2b7080e26fac5676f2b77773c2c +Author: root +Date: Sun Jul 7 22:11:13 1996 +0000 + + mods for new Header-style signatures + + CVS patchset: 729 + CVS date: 1996/07/07 22:11:13 + +commit 650fae80bd3ba1918a707d98db5e6788c6ed4451 +Author: ewt +Date: Wed Jul 3 16:26:06 1996 +0000 + + uses passive mode now + + CVS patchset: 728 + CVS date: 1996/07/03 16:26:06 + +commit 480c4e66f347240bfa0cda224c404cfe2b2ada17 +Author: ewt +Date: Wed Jul 3 15:33:18 1996 +0000 + + O_CREAT should only be used with O_RDWR + + CVS patchset: 727 + CVS date: 1996/07/03 15:33:18 + +commit 814d4e6fa59d1edeafad934f324e0f24c3d56874 +Author: ewt +Date: Wed Jul 3 15:22:06 1996 +0000 + + changed to use rpmReadConfigFiles() instead of readConfigFiles() + + CVS patchset: 726 + CVS date: 1996/07/03 15:22:06 + +commit 0ee6477a896a07d15288809d0dfe119c51ae16bf +Author: ewt +Date: Wed Jul 3 02:55:56 1996 +0000 + + changed arch tag to build_arch + added arch_compat handling + + CVS patchset: 725 + CVS date: 1996/07/03 02:55:56 + +commit 47a43c115052d52c217ac2d6b6c9f7dae0f4df0e +Author: ewt +Date: Wed Jul 3 02:55:32 1996 +0000 + + changed RPMVAR_ARCH ro RPMVAR_BUILDARCH + added INSTALL_NOARCH flag + renamed readConfigFiles rpmReadConfigFiles + added rpmArchScore() + + CVS patchset: 724 + CVS date: 1996/07/03 02:55:32 + +commit 30b58fb9bdbd9848c946da2b86ea59dbc186aaaf +Author: ewt +Date: Wed Jul 3 02:55:03 1996 +0000 + + added handling for arch strings, INSTALL_NOARCH flag + + CVS patchset: 723 + CVS date: 1996/07/03 02:55:03 + +commit ece66fbc5cf60680a595feebc5c9e6cf0a58be9d +Author: ewt +Date: Wed Jul 3 02:54:53 1996 +0000 + + added --ignorearch + + CVS patchset: 722 + CVS date: 1996/07/03 02:54:53 + +commit e03da0c65640719a5468a895d5817fc359e134a3 +Author: ewt +Date: Wed Jul 3 02:54:49 1996 +0000 + + *** empty log message *** + + CVS patchset: 721 + CVS date: 1996/07/03 02:54:49 + +commit f69df4da5009e270582ba19be7a0d445ba355096 +Author: root +Date: Tue Jul 2 21:45:16 1996 +0000 + + temp hack to warn on spec file check errors + + CVS patchset: 720 + CVS date: 1996/07/02 21:45:16 + +commit 8fded05eba5ccb28ff56b7ca798a77860b092a13 +Author: root +Date: Tue Jul 2 21:40:10 1996 +0000 + + add some strict spec file checking + + CVS patchset: 719 + CVS date: 1996/07/02 21:40:10 + +commit 5a65d9a2bed49816838ea80a3053301f2aaad0db +Author: root +Date: Tue Jul 2 19:16:46 1996 +0000 + + added support for %description + + CVS patchset: 718 + CVS date: 1996/07/02 19:16:46 + +commit c8d10250d23495fefe7cd4dbd844bbcc9a4cb162 +Author: root +Date: Tue Jul 2 19:16:06 1996 +0000 + + added stripTrailingBlanksStringBuf() + + CVS patchset: 717 + CVS date: 1996/07/02 19:16:06 + +commit 9d020ce33522d4a16e3a2619ef7b5c0ef958188f +Author: root +Date: Tue Jul 2 18:44:09 1996 +0000 + + fix %changelog handling + start to add %description handling + + CVS patchset: 716 + CVS date: 1996/07/02 18:44:09 + +commit 1e7ab3dd3675cdcca45aa266eb186fbc8ab7c2cd +Author: root +Date: Mon Jul 1 21:47:55 1996 +0000 + + pass RPM_ARCH and RPM_OS to scripts + + CVS patchset: 715 + CVS date: 1996/07/01 21:47:55 + +commit 2303b5028911adfdb697b14732236345d6457016 +Author: root +Date: Mon Jul 1 21:44:39 1996 +0000 + + *** empty log message *** + + CVS patchset: 714 + CVS date: 1996/07/01 21:44:39 + +commit 566cd0c4dc7d791a7978b7194572f0a1ea14c7e8 +Author: root +Date: Mon Jul 1 21:40:22 1996 +0000 + + fix call to readCOnfigFiles + + CVS patchset: 713 + CVS date: 1996/07/01 21:40:22 + +commit b7fc7d8bf596c5dec7b654bd83c8345df180bdd5 +Author: root +Date: Mon Jul 1 21:39:34 1996 +0000 + + add proto for initArchOs + + CVS patchset: 712 + CVS date: 1996/07/01 21:39:34 + +commit 6c3baf24078c60f85c4f00d0fce606652ad9aa94 +Author: root +Date: Mon Jul 1 21:39:17 1996 +0000 + + stuff for new style arch and os handling + + CVS patchset: 711 + CVS date: 1996/07/01 21:39:17 + +commit f8933d7aa5a091007f9e61cd9deb6f432c90c7d0 +Author: root +Date: Mon Jul 1 21:38:34 1996 +0000 + + added stuff to parse config files arch specific and + non-arch specific + ., + + CVS patchset: 710 + CVS date: 1996/07/01 21:38:34 + +commit 891c24c444133be59b9e98bc9ebdc1b252ce24fb +Author: root +Date: Mon Jul 1 21:38:06 1996 +0000 + + add ARCH and OS vars + pass arch and os to readConfigFiles + + CVS patchset: 709 + CVS date: 1996/07/01 21:38:06 + +commit 0c947120d2d3ea6ce19adde8791998ea7c89cb39 +Author: root +Date: Mon Jul 1 21:37:18 1996 +0000 + + change OS and ARCH to strings + + CVS patchset: 708 + CVS date: 1996/07/01 21:37:18 + +commit 3fc67229c0e4b7613e15b743cae0eef1f3e9f5ae +Author: root +Date: Mon Jul 1 21:36:36 1996 +0000 + + added stuff to handle --arch and --os and + wacky new arch handling stuff + + CVS patchset: 707 + CVS date: 1996/07/01 21:36:36 + +commit d1f1f7375a2077493b5b4013c4fffb4fa78f9fa7 +Author: root +Date: Fri Jun 28 21:13:32 1996 +0000 + + strip out duplicate '/' in filenames + + CVS patchset: 706 + CVS date: 1996/06/28 21:13:32 + +commit 92ea12597b906cbe996c62621ad432c6bd7110fb +Author: root +Date: Fri Jun 28 21:13:13 1996 +0000 + + skip ALL leading slashes :-) + + CVS patchset: 705 + CVS date: 1996/06/28 21:13:13 + +commit dbb11ff0d3738a93fd8cdb4f7e1352289304b114 +Author: root +Date: Fri Jun 28 18:50:42 1996 +0000 + + *** empty log message *** + + CVS patchset: 704 + CVS date: 1996/06/28 18:50:42 + +commit 1e9ee9f5d530ef316d2758aea2348edba34440e2 +Author: root +Date: Fri Jun 28 18:48:34 1996 +0000 + + added stuff for "size" signature + + CVS patchset: 703 + CVS date: 1996/06/28 18:48:34 + +commit 484ad05247b48aecf689c57c1a0bae1fc97f20db +Author: ewt +Date: Fri Jun 28 14:38:23 1996 +0000 + + runScripts() doesn't take generic "upgrade" argument, but numeric one + instead + + CVS patchset: 702 + CVS date: 1996/06/28 14:38:23 + +commit 30fb5648595683677c0c78c1b931f7d30847d35b +Author: ewt +Date: Fri Jun 28 14:38:12 1996 +0000 + + added code to pass numeric arg to scripts + + CVS patchset: 701 + CVS date: 1996/06/28 14:38:12 + +commit 0a6c517b8b1c09e31165a1db87013f279958fc8e +Author: ewt +Date: Fri Jun 28 14:37:45 1996 +0000 + + 1) removed "upgrade" arg hack + 2) added code to uninstall to pass numeric arg + 3) handled numeric arg in runScripts() + + CVS patchset: 700 + CVS date: 1996/06/28 14:37:45 + +commit fb860c41c5729775dc62f004f2917571b1435d7a +Author: ewt +Date: Fri Jun 28 14:37:30 1996 +0000 + + removed upgrade flag from rpmRemovePackage() + + CVS patchset: 699 + CVS date: 1996/06/28 14:37:30 + +commit bd0459fcc050a79caf546f2c9b478a2e34a795ae +Author: ewt +Date: Fri Jun 28 14:37:01 1996 +0000 + + removed passing upgrade flag during package uninstall + + CVS patchset: 698 + CVS date: 1996/06/28 14:37:01 + +commit a6681aebd24a25336f0897913119bf8be92f4e22 +Author: ewt +Date: Thu Jun 27 20:52:29 1996 +0000 + + oops + + CVS patchset: 697 + CVS date: 1996/06/27 20:52:29 + +commit d2979e846d011743f391c6e0c0141f9a6c189027 +Author: ewt +Date: Thu Jun 27 20:48:53 1996 +0000 + + *** empty log message *** + + CVS patchset: 696 + CVS date: 1996/06/27 20:48:53 + +commit 47dec8713a3ea722bfe51961cfaac7fc7dde113a +Author: ewt +Date: Thu Jun 27 20:47:54 1996 +0000 + + added interation for queryformats and :date and :perms formats + + CVS patchset: 695 + CVS date: 1996/06/27 20:47:54 + +commit 6795c09522b25375fef3d5552af391e62c7c02e8 +Author: root +Date: Thu Jun 27 20:16:40 1996 +0000 + + added REQUIRE_CONFLICTS REQUIRE_SENSEMASK for conflicts: + + CVS patchset: 694 + CVS date: 1996/06/27 20:16:40 + +commit 8f908462dc995ff00ed5d56177864dd48cff30d0 +Author: root +Date: Thu Jun 27 20:16:20 1996 +0000 + + conflicts handling + + CVS patchset: 693 + CVS date: 1996/06/27 20:16:20 + +commit 93a5a6fd147882d797c61ef7f014fe966db8bffa +Author: root +Date: Thu Jun 27 20:15:53 1996 +0000 + + parsing for conflicts: + + CVS patchset: 692 + CVS date: 1996/06/27 20:15:53 + +commit b2ffaeb0dd3bdddc8e73d30e2bfffa12bcc4ed93 +Author: root +Date: Thu Jun 27 20:15:31 1996 +0000 + + add counter for conflicts + + CVS patchset: 691 + CVS date: 1996/06/27 20:15:31 + +commit 74c00d052d61ca20cf39cd24c02ebf8b61a4e93e +Author: root +Date: Thu Jun 27 20:15:15 1996 +0000 + + make tools depend on librpm.a + + CVS patchset: 690 + CVS date: 1996/06/27 20:15:15 + +commit a18157f3a98560131eebaad2f54fc20d20a9a172 +Author: root +Date: Thu Jun 27 20:10:16 1996 +0000 + + *** empty log message *** + + CVS patchset: 689 + CVS date: 1996/06/27 20:10:16 + +commit 926a1e909c0a73aa2e5a61ae1c9ea682ea3e2d66 +Author: root +Date: Thu Jun 27 20:06:53 1996 +0000 + + *** empty log message *** + + CVS patchset: 688 + CVS date: 1996/06/27 20:06:53 + +commit b211bddc8d74e65286de50571bceafeefcbd856b +Author: root +Date: Thu Jun 27 18:53:46 1996 +0000 + + add CONFLICT* tags + + CVS patchset: 687 + CVS date: 1996/06/27 18:53:46 + +commit 21a4aa3fd334b0d116a63ea6f74e0166f27e24f6 +Author: root +Date: Thu Jun 27 18:27:18 1996 +0000 + + set major number to 3 + + CVS patchset: 686 + CVS date: 1996/06/27 18:27:18 + +commit 94e9397435dece32e0f834e43d26d3649dc84d8f +Author: root +Date: Thu Jun 27 18:25:09 1996 +0000 + + handle staticly linked binaries + + CVS patchset: 685 + CVS date: 1996/06/27 18:25:09 + +commit d6d9d0fefdf007228c16d412f06a490deffa04f2 +Author: ewt +Date: Thu Jun 27 18:19:14 1996 +0000 + + *** empty log message *** + + CVS patchset: 684 + CVS date: 1996/06/27 18:19:14 + +commit 13b145e64b00e7f8cc696fb533c99e04aa15a8c5 +Author: ewt +Date: Thu Jun 27 18:18:15 1996 +0000 + + supports version 3 packages + + CVS patchset: 683 + CVS date: 1996/06/27 18:18:15 + +commit 5c1b4c03770cc549473df83aa37ba15eb9ef54fc +Author: ewt +Date: Thu Jun 27 18:14:45 1996 +0000 + + added support for INT8 types in query formats + + CVS patchset: 682 + CVS date: 1996/06/27 18:14:45 + +commit 1b11db2d4f98e38a8252811d820bd4bdf4e957ee +Author: root +Date: Thu Jun 27 17:22:18 1996 +0000 + + added stuff for nosrc packages + + CVS patchset: 681 + CVS date: 1996/06/27 17:22:18 + +commit 7f7e7bcae2cc0422ecf8d7055d1fcec75964afc5 +Author: root +Date: Thu Jun 27 17:21:31 1996 +0000 + + added stuff for nosrc + little better progress messages + + CVS patchset: 680 + CVS date: 1996/06/27 17:21:31 + +commit 533ca15f5568d3c244cf71a401c0e5f6582f193d +Author: root +Date: Thu Jun 27 17:20:56 1996 +0000 + + added stuff of nosrc packages + + CVS patchset: 679 + CVS date: 1996/06/27 17:20:56 + +commit 1fa24fb7cf2e8e7f5291c1ad1e65b1fa093b8dfc +Author: ewt +Date: Thu Jun 27 17:19:43 1996 +0000 + + added --initdb + + CVS patchset: 678 + CVS date: 1996/06/27 17:19:43 + +commit 882a311aef44cdb6870670a11fa738cbed90b34c +Author: ewt +Date: Thu Jun 27 17:19:25 1996 +0000 + + removed Provides: and Requires: tags from printouts + + CVS patchset: 677 + CVS date: 1996/06/27 17:19:25 + +commit cc72a55f6c008d59dc3826926d98900c9c5bd801 +Author: ewt +Date: Thu Jun 27 17:18:59 1996 +0000 + + *** empty log message *** + + CVS patchset: 676 + CVS date: 1996/06/27 17:18:59 + +commit 09522d7d0467300ed2683cb8545a65f8fd38629c +Author: ewt +Date: Thu Jun 27 17:18:07 1996 +0000 + + when installs are done with a --root, the getpwent() stuff needs to + happen in a chroot(). RPM forks itself to do so. + + CVS patchset: 675 + CVS date: 1996/06/27 17:18:07 + +commit 3b2aada6e223c60301bddd6c8156064e1e137809 +Author: ewt +Date: Thu Jun 27 17:17:32 1996 +0000 + + added rpmdbInit() call + + CVS patchset: 674 + CVS date: 1996/06/27 17:17:32 + +commit 90fb1d3e71a9ace0bb6d59d26e5e551cfd044cc4 +Author: root +Date: Thu Jun 27 16:45:09 1996 +0000 + + added RPMTAG_NOSOURCE RPMTAG_NOPATCH + + CVS patchset: 673 + CVS date: 1996/06/27 16:45:09 + +commit 573a3391b40bf51c8ffefc91abd7535ce99e6e6d +Author: ewt +Date: Thu Jun 27 16:37:28 1996 +0000 + + *** empty log message *** + + CVS patchset: 672 + CVS date: 1996/06/27 16:37:28 + +commit 6aff2ddf3d5ad0c12ccd9369e33ebc3309bec579 +Author: ewt +Date: Tue Jun 25 15:09:03 1996 +0000 + + more cleaning + + CVS patchset: 671 + CVS date: 1996/06/25 15:09:03 + +commit 01015bf25dd8f76ce94fb15f584c9785f4c32620 +Author: ewt +Date: Tue Jun 25 14:59:20 1996 +0000 + + general cleaning + + CVS patchset: 670 + CVS date: 1996/06/25 14:59:20 + +commit 48efe16be8d70895452a26a4c4a3964633097d3a +Author: root +Date: Mon Jun 24 22:06:04 1996 +0000 + + *** empty log message *** + + CVS patchset: 669 + CVS date: 1996/06/24 22:06:04 + +commit 71a118d40248324bd65e3ae3b921651a2871d348 +Author: root +Date: Mon Jun 24 22:04:49 1996 +0000 + + allow # comments in the %files section + + CVS patchset: 668 + CVS date: 1996/06/24 22:04:49 + +commit 8a0025607cc6dde1fc8480611b38d58ea87d8556 +Author: marc +Date: Fri Jun 21 18:43:07 1996 +0000 + + use RPM_OPT_FLAGS if there + + CVS patchset: 667 + CVS date: 1996/06/21 18:43:07 + +commit 358b8181c2c6702763d19dba9683caf0d20e9872 +Author: ewt +Date: Fri Jun 21 01:47:18 1996 +0000 + + added uint_16 type + + CVS patchset: 666 + CVS date: 1996/06/21 01:47:18 + +commit 5e700ad271d6e914190c51b9972a3a38b429c039 +Author: ewt +Date: Thu Jun 20 22:28:02 1996 +0000 + + got --whatrequires, --whatprovides, --requires, --provides, --dump + implemented + + CVS patchset: 665 + CVS date: 1996/06/20 22:28:02 + +commit a30d9b77a430554dc33fe560c585150045d3054a +Author: root +Date: Thu Jun 20 15:56:43 1996 +0000 + + handle new signature types + + CVS patchset: 664 + CVS date: 1996/06/20 15:56:43 + +commit 7617f677bf35c3a9c0620ec8b64b3ba02eaeeb8a +Author: root +Date: Thu Jun 20 15:55:35 1996 +0000 + + fixed up for new signature styles + + CVS patchset: 663 + CVS date: 1996/06/20 15:55:35 + +commit 612f9a2e2ec3af21310a38d3beb6605615653b24 +Author: root +Date: Thu Jun 20 15:55:14 1996 +0000 + + added --nopgp + + CVS patchset: 662 + CVS date: 1996/06/20 15:55:14 + +commit f3739ce23c940c9c6ee12be7d9c023d84ccee856 +Author: root +Date: Thu Jun 20 15:45:01 1996 +0000 + + *** empty log message *** + + CVS patchset: 661 + CVS date: 1996/06/20 15:45:01 + +commit 9000f3506ab3ae94578391589c41fa6e8f38364e +Author: root +Date: Thu Jun 20 15:40:55 1996 +0000 + + new arg + + CVS patchset: 660 + CVS date: 1996/06/20 15:40:55 + +commit 451c1558def1b526add7a096bde654e9ad5b5227 +Author: root +Date: Thu Jun 20 03:13:18 1996 +0000 + + *** empty log message *** + + CVS patchset: 659 + CVS date: 1996/06/20 03:13:18 + +commit dc2a236ff40590aed707ff007261befad7c929d5 +Author: root +Date: Thu Jun 20 03:10:44 1996 +0000 + + handle new sig types + always do at least a MD5 + + CVS patchset: 658 + CVS date: 1996/06/20 03:10:44 + +commit 4969fb4549ad1a5d3fd32ed36aa9feb37c8ba523 +Author: root +Date: Thu Jun 20 03:10:17 1996 +0000 + + new sig types + + CVS patchset: 657 + CVS date: 1996/06/20 03:10:17 + +commit 92d0e6456c5cf7c5279fccd7fa524eae8f953954 +Author: root +Date: Thu Jun 20 03:09:11 1996 +0000 + + only ask for passphrase for MD5_PGP sig types + + CVS patchset: 656 + CVS date: 1996/06/20 03:09:11 + +commit ee8093c3d24334fcd1db91e1d6ae9fa51ab6973c +Author: root +Date: Thu Jun 20 03:08:31 1996 +0000 + + add mdbinfile() which is like mdfile() but it returns a binary MD5 + + CVS patchset: 655 + CVS date: 1996/06/20 03:08:31 + +commit 4d101d220472a773a0d196baa1cfec984f8d959d +Author: root +Date: Thu Jun 20 02:19:00 1996 +0000 + + fix signedness + + CVS patchset: 654 + CVS date: 1996/06/20 02:19:00 + +commit 6e6482b60b97f2b5e9dfb8edd0d3fca6fe009f87 +Author: root +Date: Wed Jun 19 19:59:30 1996 +0000 + + handle new sig types + + CVS patchset: 653 + CVS date: 1996/06/19 19:59:30 + +commit 6f435ae1313835a6f14a11467f0fff8fc7ebbc96 +Author: root +Date: Wed Jun 19 18:18:04 1996 +0000 + + comment + + CVS patchset: 652 + CVS date: 1996/06/19 18:18:04 + +commit c334b7caf95ba39075cdee4668e22d6a34872e1c +Author: root +Date: Wed Jun 19 14:38:20 1996 +0000 + + hack for new pgp handling + + CVS patchset: 651 + CVS date: 1996/06/19 14:38:20 + +commit 4ce45208ee044c453caa0bd188707b47957a6513 +Author: root +Date: Wed Jun 19 14:31:59 1996 +0000 + + *** empty log message *** + + CVS patchset: 650 + CVS date: 1996/06/19 14:31:59 + +commit 7d2880e5fb67480b4b16112f31e9feb68879b599 +Author: root +Date: Wed Jun 19 14:30:19 1996 +0000 + + remove pub/sec ring stuff, set defaults properly + + CVS patchset: 649 + CVS date: 1996/06/19 14:30:19 + +commit eb5cf89443af8c3ad69b4058c81dcfae028c333a +Author: root +Date: Wed Jun 19 14:29:48 1996 +0000 + + remove pu/sec ring stuff, and use PGPPATH properly + + CVS patchset: 648 + CVS date: 1996/06/19 14:29:48 + +commit ae3f14f40a1c2dae120a3f8d99dd7bb1719974d9 +Author: root +Date: Tue Jun 18 20:05:43 1996 +0000 + + *** empty log message *** + + CVS patchset: 647 + CVS date: 1996/06/18 20:05:43 + +commit cda8cbaddd9ee56b1d8061e0a3fa5f3a24282975 +Author: root +Date: Tue Jun 18 18:50:28 1996 +0000 + + misc header + + CVS patchset: 646 + CVS date: 1996/06/18 18:50:28 + +commit 19323af58ffa7dbbeada1f56f49e1e7f22ef6d0b +Author: root +Date: Tue Jun 18 18:41:17 1996 +0000 + + misc header + + CVS patchset: 645 + CVS date: 1996/06/18 18:41:17 + +commit b79de33f1c004788d79b040dd8f2d35da908001b +Author: root +Date: Tue Jun 18 18:39:58 1996 +0000 + + misc headers + + CVS patchset: 644 + CVS date: 1996/06/18 18:39:58 + +commit 6d78907efe48d99231e61a2b629ca721637666c5 +Author: root +Date: Tue Jun 18 17:07:21 1996 +0000 + + add errno.h + + CVS patchset: 643 + CVS date: 1996/06/18 17:07:21 + +commit 4cd9f67a2a4766d77b93818e99e0d5e97636bf85 +Author: root +Date: Tue Jun 18 17:06:32 1996 +0000 + + clean up + + CVS patchset: 642 + CVS date: 1996/06/18 17:06:32 + +commit 571888e3a2800d20f53290ee6fd152387e81294d +Author: ewt +Date: Mon Jun 17 19:43:55 1996 +0000 + + merged rpmlib.h and package.h + + CVS patchset: 641 + CVS date: 1996/06/17 19:43:55 + +commit 04f3815a7c5e24ea362c7ecf66ba2da8ebb82646 +Author: root +Date: Sun Jun 16 22:45:47 1996 +0000 + + cleanup temp file stuff + + CVS patchset: 640 + CVS date: 1996/06/16 22:45:47 + +commit 89bc7540b7081662a9313660c1f66fe9019b12ac +Author: root +Date: Sun Jun 16 22:45:29 1996 +0000 + + header fix for glibc + + CVS patchset: 639 + CVS date: 1996/06/16 22:45:29 + +commit 689d37c54d56829a08163321676eae7102a96268 +Author: root +Date: Sun Jun 16 16:08:51 1996 +0000 + + use getBooleanVar() + + CVS patchset: 638 + CVS date: 1996/06/16 16:08:51 + +commit 744f6a80afb4144c788f12a9fc5f49afcbc24ed7 +Author: root +Date: Mon Jun 10 20:47:55 1996 +0000 + + more messages + + CVS patchset: 637 + CVS date: 1996/06/10 20:47:55 + +commit 83203543e52bb5b57b7f80a70a3bfcbfa6dd2d39 +Author: ewt +Date: Mon Jun 10 17:43:11 1996 +0000 + + added interface for dependency checking + + CVS patchset: 636 + CVS date: 1996/06/10 17:43:11 + +commit fa630a02d556c9f3f05c29ef3b7a4d82fce7601a +Author: ewt +Date: Mon Jun 10 17:42:57 1996 +0000 + + fixed bugs, added dependency checks for removed packages + + CVS patchset: 635 + CVS date: 1996/06/10 17:42:57 + +commit 20c3b8d652d45f0931de842804f9b3ebeacff785 +Author: ewt +Date: Mon Jun 10 17:42:51 1996 +0000 + + added depends.c + + CVS patchset: 634 + CVS date: 1996/06/10 17:42:51 + +commit 909fbdadede471a5406fd26039bc903e3adbf37b +Author: ewt +Date: Mon Jun 10 17:42:38 1996 +0000 + + documented flags for dependencies + + CVS patchset: 633 + CVS date: 1996/06/10 17:42:38 + +commit 494a10ca94afb8c3a58a5844cba0a9cc72c946d8 +Author: ewt +Date: Mon Jun 10 17:41:44 1996 +0000 + + *** empty log message *** + + CVS patchset: 632 + CVS date: 1996/06/10 17:41:44 + +commit 8c20f1d6dc869c453298903d9743a6f28270aec3 +Author: ewt +Date: Mon Jun 10 17:41:24 1996 +0000 + + 1) changed doInstall() and doUninstall() calls to pass all of the arguments + at once + 2) added dependency checking + + CVS patchset: 631 + CVS date: 1996/06/10 17:41:24 + +commit e573369c0e933d05bf46f7cff53af4639149441c +Author: ewt +Date: Mon Jun 10 17:40:40 1996 +0000 + + 1) added --nodeps for installs and uninstalls + 2) changed doInstall() and doUninstall() calls to pass all of the arguments + at once + 3) added --requiredby and --provides queries + + CVS patchset: 630 + CVS date: 1996/06/10 17:40:40 + +commit 6330070bc6cab90f89dc5e15b20daac9e756bfb8 +Author: ewt +Date: Mon Jun 10 17:39:26 1996 +0000 + + changed version to 2.1 + + CVS patchset: 629 + CVS date: 1996/06/10 17:39:26 + +commit a34ffc0e7df8ee72b5f79d40b8128ad72e646101 +Author: ewt +Date: Mon Jun 10 02:36:07 1996 +0000 + + Initial revision + + CVS patchset: 628 + CVS date: 1996/06/10 02:36:07 + +commit 792adcf00077ba232e2f518ce859b3b3897cf13b +Author: ewt +Date: Mon Jun 10 02:35:48 1996 +0000 + + *** empty log message *** + + CVS patchset: 627 + CVS date: 1996/06/10 02:35:48 + +commit e1ef49377f2820417ec0a6b04213e39744fb70a8 +Author: ewt +Date: Sun Jun 9 21:51:13 1996 +0000 + + handles providesIndex and requiredbyIndex + + CVS patchset: 626 + CVS date: 1996/06/09 21:51:13 + +commit 967ef34a058779058906075e7d6cb04060250fce +Author: ewt +Date: Sun Jun 9 21:50:44 1996 +0000 + + added rpmdbFindByProvides(), rpmdbFindByRequiredBy() + + CVS patchset: 625 + CVS date: 1996/06/09 21:50:44 + +commit db0e2d93fa8ce8f13fe2a10ef7ccdb69fe1576ce +Author: ewt +Date: Sun Jun 9 21:47:42 1996 +0000 + + added requiredby and provides querying + + CVS patchset: 624 + CVS date: 1996/06/09 21:47:42 + +commit 812468916a676676ebd948bbc4a645f05f6e7c1f +Author: ewt +Date: Sat Jun 8 17:27:10 1996 +0000 + + added dependency querying + + CVS patchset: 623 + CVS date: 1996/06/08 17:27:10 + +commit 250264495c9e46118b6cf9a769eb2df06d1d756b +Author: root +Date: Sat Jun 8 03:39:49 1996 +0000 + + provide lib.so IF lib.so.* + + CVS patchset: 622 + CVS date: 1996/06/08 03:39:49 + +commit adcdd689b083d8eff8151aaf9827b3b07a2d46bc +Author: root +Date: Fri Jun 7 18:50:22 1996 +0000 + + display cleanup + + CVS patchset: 621 + CVS date: 1996/06/07 18:50:22 + +commit ae24d0f4b120e04e33dfaa97744594170ce6d384 +Author: root +Date: Fri Jun 7 18:32:10 1996 +0000 + + Initial revision + + CVS patchset: 620 + CVS date: 1996/06/07 18:32:10 + +commit 1c2ce0164f29372af2dc4a6e23c2a08629e29f09 +Author: root +Date: Fri Jun 7 18:31:31 1996 +0000 + + move a lot of stuff to names.c and files.c + + CVS patchset: 619 + CVS date: 1996/06/07 18:31:31 + +commit cab11b049002d17022f64d03f55d1f1229cd4391 +Author: root +Date: Fri Jun 7 18:31:08 1996 +0000 + + wrap up req/dep + + CVS patchset: 618 + CVS date: 1996/06/07 18:31:08 + +commit 081d340a210fb263b19f9cd8df42f92eaf5043ab +Author: root +Date: Fri Jun 7 18:29:32 1996 +0000 + + new prototypes + + CVS patchset: 617 + CVS date: 1996/06/07 18:29:32 + +commit 0f3bd22def7d3b2eb728f1c6cdd2e24a91149296 +Author: root +Date: Fri Jun 7 18:29:21 1996 +0000 + + *** empty log message *** + + CVS patchset: 616 + CVS date: 1996/06/07 18:29:21 + +commit b0519bfdd2c6914d597ebe17ef4d3ac2594dd764 +Author: root +Date: Fri Jun 7 18:27:56 1996 +0000 + + move doRmSource() here + + CVS patchset: 615 + CVS date: 1996/06/07 18:27:56 + +commit b6b3ace3887070d9c6bdb76f0668698e14868559 +Author: root +Date: Fri Jun 7 18:27:14 1996 +0000 + + add files.o names.o reqprov.o + + CVS patchset: 614 + CVS date: 1996/06/07 18:27:14 + +commit 94e26c5b59c6064a4203576319903f13b3432ecc +Author: root +Date: Fri Jun 7 18:25:24 1996 +0000 + + use the new tagtable to dump the header + + CVS patchset: 613 + CVS date: 1996/06/07 18:25:24 + +commit 50f8edaeb3b5d3f958e2323fdf9bf9a2b07f5c15 +Author: root +Date: Fri Jun 7 15:22:15 1996 +0000 + + added REQUIRE_ANY (for no version dep) + + CVS patchset: 612 + CVS date: 1996/06/07 15:22:15 + +commit 05d93b0ba091866783dda28ffd7e34baf15f33cb +Author: root +Date: Wed Jun 5 18:30:51 1996 +0000 + + use on-disk file type to determine what tests to use + + CVS patchset: 611 + CVS date: 1996/06/05 18:30:51 + +commit def69da25b701d3fe0829cea15ccb957b53ac181 +Author: root +Date: Wed Jun 5 04:38:42 1996 +0000 + + *** empty log message *** + + CVS patchset: 610 + CVS date: 1996/06/05 04:38:42 + +commit 9d3a5c2aa8a49f4c1895981cfd08f35bea840ded +Author: root +Date: Wed Jun 5 02:05:19 1996 +0000 + + *** empty log message *** + + CVS patchset: 609 + CVS date: 1996/06/05 02:05:19 + +commit 047e96d7bb17ef6c672d140b3f96b08f81aa8b18 +Author: root +Date: Wed Jun 5 01:38:44 1996 +0000 + + *** empty log message *** + + CVS patchset: 608 + CVS date: 1996/06/05 01:38:44 + +commit 26d7b67e9c3b4aadcd8cbe745f73365634be9f7e +Author: root +Date: Wed Jun 5 01:33:17 1996 +0000 + + *** empty log message *** + + CVS patchset: 607 + CVS date: 1996/06/05 01:33:17 + +commit bd1b97e82c83545643b7659b0331db53adfcf580 +Author: root +Date: Tue Jun 4 22:54:17 1996 +0000 + + *** empty log message *** + + CVS patchset: 606 + CVS date: 1996/06/04 22:54:17 + +commit 2c31a7a90151487ef197a30a3fa12129d9b68d2f +Author: root +Date: Tue Jun 4 22:53:56 1996 +0000 + + fixed chmod(symlink) bug + + CVS patchset: 605 + CVS date: 1996/06/04 22:53:56 + +commit cb255f199f90521849a13448a4419e7f449c0736 +Author: root +Date: Tue Jun 4 19:34:50 1996 +0000 + + fix --root --verify + + CVS patchset: 604 + CVS date: 1996/06/04 19:34:50 + +commit b555ee90590a81e796477339bcd8d2df8aa23b8f +Author: root +Date: Tue Jun 4 19:33:46 1996 +0000 + + *** empty log message *** + + CVS patchset: 603 + CVS date: 1996/06/04 19:33:46 + +commit d3124e4b7cb4839342f70f3769d9acd42b11e599 +Author: root +Date: Sun Jun 2 18:25:37 1996 +0000 + + *** empty log message *** + + CVS patchset: 602 + CVS date: 1996/06/02 18:25:37 + +commit f7a945fa9115599bfabfe8a803f2ad313011a059 +Author: root +Date: Sun Jun 2 18:06:49 1996 +0000 + + *** empty log message *** + + CVS patchset: 601 + CVS date: 1996/06/02 18:06:49 + +commit 5f39cdec343debe1efe77e13abf58fc03f2a73dc +Author: root +Date: Sun Jun 2 18:06:00 1996 +0000 + + handle # comments in the preamble + + CVS patchset: 600 + CVS date: 1996/06/02 18:06:00 + +commit 2d7219af102c0c59136f96e3b0891b3c11eaedb0 +Author: root +Date: Sun Jun 2 18:05:36 1996 +0000 + + don't barf if we can't canonicalize the hostname + + CVS patchset: 599 + CVS date: 1996/06/02 18:05:36 + +commit 6e459f800208f04cbfb4e74434bc33545b592779 +Author: root +Date: Sun Jun 2 18:05:11 1996 +0000 + + make arch_sensitive the default + + CVS patchset: 598 + CVS date: 1996/06/02 18:05:11 + +commit 870b1ea849237faab38da0be44270cd5e812ff27 +Author: root +Date: Sun Jun 2 18:04:36 1996 +0000 + + add --querybynumber + + CVS patchset: 597 + CVS date: 1996/06/02 18:04:36 + +commit ceb25d98d5b80de86321e1f428e15a5b793f207f +Author: root +Date: Sun Jun 2 18:04:20 1996 +0000 + + *** empty log message *** + + CVS patchset: 596 + CVS date: 1996/06/02 18:04:20 + +commit af3f428bd252335e0b510fb1187f832e9d68069f +Author: root +Date: Thu May 23 03:11:57 1996 +0000 + + Initial revision + + CVS patchset: 595 + CVS date: 1996/05/23 03:11:57 + +commit 84a95a572a08e683d700d93bbcc14bac562489a8 +Author: root +Date: Thu May 23 03:05:34 1996 +0000 + + Initial revision + + CVS patchset: 594 + CVS date: 1996/05/23 03:05:34 + +commit abebd59dd6f049b71d50d3da9b0b3315217493cb +Author: root +Date: Thu May 23 03:00:47 1996 +0000 + + *** empty log message *** + + CVS patchset: 593 + CVS date: 1996/05/23 03:00:47 + +commit 196951db61970866cb2f10718123ea37955e47f3 +Author: root +Date: Thu May 23 02:42:51 1996 +0000 + + set the mode always when installing (for %attr() support) + + CVS patchset: 592 + CVS date: 1996/05/23 02:42:51 + +commit 4a5d9f080d5b7d4c36ebf9d1175529c06bb851f1 +Author: root +Date: Thu May 23 02:38:59 1996 +0000 + + *** empty log message *** + + CVS patchset: 591 + CVS date: 1996/05/23 02:38:59 + +commit e3872c8cf7d4d22a873d59144189c74adc934501 +Author: root +Date: Thu May 23 02:34:41 1996 +0000 + + fix dumb %verify() parse bug + add %attr() support + + CVS patchset: 590 + CVS date: 1996/05/23 02:34:41 + +commit 416ac7c33bf99de84d0ce75be02751a1387a44b5 +Author: root +Date: Thu May 23 00:15:27 1996 +0000 + + *** empty log message *** + + CVS patchset: 589 + CVS date: 1996/05/23 00:15:27 + +commit a22ba6af4a73c18891207b24d254a40c06f3fb8a +Author: root +Date: Wed May 22 20:39:47 1996 +0000 + + added sun4, mips, 68k, sgi, sunos, solaris + + CVS patchset: 588 + CVS date: 1996/05/22 20:39:47 + +commit fce5bd09af57607c2a7c5737f1a1e4b880baef97 +Author: root +Date: Wed May 22 20:39:33 1996 +0000 + + fixed + + CVS patchset: 587 + CVS date: 1996/05/22 20:39:33 + +commit a6b6d18e5ceb3b637ca5616740a97874d2b25f23 +Author: root +Date: Wed May 22 19:39:24 1996 +0000 + + use PATH to find cpio + + CVS patchset: 586 + CVS date: 1996/05/22 19:39:24 + +commit 4768c9cca20016256c129e1118e890615b09db9d +Author: root +Date: Wed May 22 19:30:48 1996 +0000 + + pass "upgrade" arg to pre/post when upgrading + + CVS patchset: 585 + CVS date: 1996/05/22 19:30:48 + +commit 43c3d744d5bf889cabaffab61fa695c950265674 +Author: root +Date: Wed May 22 19:30:04 1996 +0000 + + pass "upgrade" arg to pre/post scripts when upgrading + remove BASH-ism + + CVS patchset: 584 + CVS date: 1996/05/22 19:30:04 + +commit 901e34898402ef1eb33a68ce401c07670bc5bd76 +Author: root +Date: Wed May 22 19:27:16 1996 +0000 + + add code for scripts getting "upgrade" argument + + CVS patchset: 583 + CVS date: 1996/05/22 19:27:16 + +commit 71f749f517c3835be99a23f872e41e0349bf9265 +Author: root +Date: Wed May 22 17:42:35 1996 +0000 + + small oops + + CVS patchset: 582 + CVS date: 1996/05/22 17:42:35 + +commit 1118c8904a17ae929a324649ce20961dc1658093 +Author: root +Date: Wed May 22 17:38:46 1996 +0000 + + strip all trailing whitespace in the spec file + of course, this means you can't have files with a space at the end + + CVS patchset: 581 + CVS date: 1996/05/22 17:38:46 + +commit cb4b89886c1b3bb7911f7d12d70ba2c2f8d1f212 +Author: root +Date: Wed May 22 17:34:35 1996 +0000 + + don't use RPMS/ if not arch_sensitive + + CVS patchset: 580 + CVS date: 1996/05/22 17:34:35 + +commit 93ca0fdc2ade3e5274fab732df23fcaa81ca1d00 +Author: root +Date: Wed May 22 17:24:20 1996 +0000 + + Initial revision + + CVS patchset: 579 + CVS date: 1996/05/22 17:24:20 + +commit 67161fc989ce78d4b7bfc557111301fe131a7b3c +Author: root +Date: Wed May 22 17:23:51 1996 +0000 + + use myftw() istead of ftw() -- it uses lstat() instead of stat() + + CVS patchset: 578 + CVS date: 1996/05/22 17:23:51 + +commit 9e2a3ed366ae3caa37590fe2eae3be60e188cb57 +Author: root +Date: Wed May 22 17:09:32 1996 +0000 + + added myftw.c + + CVS patchset: 577 + CVS date: 1996/05/22 17:09:32 + +commit 567bcde1db5a6477d1e2ed2cc8945518b1e177f8 +Author: root +Date: Wed May 22 14:37:19 1996 +0000 + + handle rpm -q 4gl (invalid package) + + CVS patchset: 576 + CVS date: 1996/05/22 14:37:19 + +commit df1a2b2fa4bf07975f7dd92d5d77b065502f4036 +Author: root +Date: Fri May 17 18:47:11 1996 +0000 + + fix globbing bug when Root: is used + + CVS patchset: 575 + CVS date: 1996/05/17 18:47:11 + +commit 647d0794e12a7034560e78564099413fbee1e5a0 +Author: root +Date: Fri May 17 18:37:46 1996 +0000 + + call verifySpec() + + CVS patchset: 574 + CVS date: 1996/05/17 18:37:46 + +commit f28f51fc0258328844e7ccd50b407522e7bab442 +Author: root +Date: Fri May 17 18:35:55 1996 +0000 + + add verifySpec() + + CVS patchset: 573 + CVS date: 1996/05/17 18:35:55 + +commit 026db0c54251d35559d07448e7ae654544f684f3 +Author: root +Date: Fri May 17 18:35:06 1996 +0000 + + add LDFLAGS to rpmconvert link + + CVS patchset: 572 + CVS date: 1996/05/17 18:35:06 + +commit 98b9c3102bff03da71533d8da3daa24e351c34b0 +Author: root +Date: Thu May 16 15:23:39 1996 +0000 + + add vspec + + CVS patchset: 571 + CVS date: 1996/05/16 15:23:39 + +commit 40ee60b49c41c23349ecd15eb0524af334a35b45 +Author: root +Date: Fri May 10 16:24:05 1996 +0000 + + handle dot files + + CVS patchset: 570 + CVS date: 1996/05/10 16:24:05 + +commit a97ae7625c806f6ddcac01f3db7fc7b918f85f89 +Author: ewt +Date: Wed May 8 02:13:37 1996 +0000 + + changed version to 2.0.8 + + CVS patchset: 569 + CVS date: 1996/05/08 02:13:37 + +commit 90561990deb4dc2d5627bca4cda7d528a084e954 +Author: root +Date: Tue May 7 22:03:07 1996 +0000 + + new args + + CVS patchset: 568 + CVS date: 1996/05/07 22:03:07 + +commit 520e439a3142da997d3a2e6901bc176cbc267ae6 +Author: root +Date: Tue May 7 18:49:33 1996 +0000 + + prelim Req / Prov stuff + %files -f ... support + + CVS patchset: 567 + CVS date: 1996/05/07 18:49:33 + +commit e8d9a79e9f11209bd3c2aeff565fdbcfc3c0ae71 +Author: root +Date: Tue May 7 18:48:53 1996 +0000 + + make build_subdir visible + + CVS patchset: 566 + CVS date: 1996/05/07 18:48:53 + +commit 01b86a9918bad3e00915b48c2aa570b64cfdbd56 +Author: root +Date: Tue May 7 18:48:11 1996 +0000 + + prelim Req / Prov stuff + slot for %files -f ... + + CVS patchset: 565 + CVS date: 1996/05/07 18:48:11 + +commit fe38562decb1fd139fdb2f7ca49422b1e2bad6c4 +Author: ewt +Date: Tue May 7 03:26:53 1996 +0000 + + 1) undocumented --keep-temps, --search, and --where which aren't + implemented anyway + 2) added --rcfile option + + CVS patchset: 564 + CVS date: 1996/05/07 03:26:53 + +commit 68460fa19ba737cebba77108d22bb4065eeca22d +Author: ewt +Date: Tue May 7 03:26:30 1996 +0000 + + 1) undocumented --keep-temps, --search, and --where which aren't + implemented anyway + 2) documented --rcfile + + CVS patchset: 563 + CVS date: 1996/05/07 03:26:30 + +commit a640a789e79fa3a77177c52b698b87b5f442b695 +Author: ewt +Date: Tue May 7 03:26:27 1996 +0000 + + *** empty log message *** + + CVS patchset: 562 + CVS date: 1996/05/07 03:26:27 + +commit 67b9dec6682b623451775039bb15db6f48847eb8 +Author: ewt +Date: Tue May 7 03:22:31 1996 +0000 + + 1) fixed bug in reading $HOME/.rpmrc + 2) allows rpmrc file to be overridden + + CVS patchset: 561 + CVS date: 1996/05/07 03:22:31 + +commit b64d6eeecb0a8fbf397320e3a9f30e5c03f1ec10 +Author: ewt +Date: Tue May 7 03:22:16 1996 +0000 + + updated prototype of readConfigFiles() + + CVS patchset: 560 + CVS date: 1996/05/07 03:22:16 + +commit c1b755b88174a2e441e8309a209532143ed29a44 +Author: ewt +Date: Tue May 7 03:21:44 1996 +0000 + + uses a temp file to pass big file lists to cpio + + CVS patchset: 559 + CVS date: 1996/05/07 03:21:44 + +commit fc92f872116bd0abe4d4844207d0570742e36d6c +Author: ewt +Date: Tue May 7 01:49:06 1996 +0000 + + the norunScripts parameter to runScript() was implemented backwards :-( + + CVS patchset: 558 + CVS date: 1996/05/07 01:49:06 + +commit 015375b576fa1f612217667dd8c87632822a6541 +Author: root +Date: Mon May 6 19:57:41 1996 +0000 + + add PROVIDES define + + CVS patchset: 557 + CVS date: 1996/05/06 19:57:41 + +commit b5b503d43c81db056d436389ceceb5bf36ff1be1 +Author: root +Date: Mon May 6 19:14:52 1996 +0000 + + clean rpm.shared + + CVS patchset: 556 + CVS date: 1996/05/06 19:14:52 + +commit 938bce37bd971bf6cd6b776d00c473e9db3b3316 +Author: root +Date: Thu May 2 00:48:18 1996 +0000 + + started provide/require stuff + unknown field -> error + + CVS patchset: 555 + CVS date: 1996/05/02 00:48:18 + +commit 267fcf65d64cda7a55bdfd1afc7697c9de85b5fd +Author: root +Date: Wed May 1 21:14:53 1996 +0000 + + *** empty log message *** + + CVS patchset: 554 + CVS date: 1996/05/01 21:14:53 + +commit 41c262efdb9af54cb1327a28028026269fc2a2a3 +Author: root +Date: Mon Apr 29 14:26:59 1996 +0000 + + *** empty log message *** + + CVS patchset: 553 + CVS date: 1996/04/29 14:26:59 + +commit f0156ac74cc1e30c04b3c6429771b8b437bb4953 +Author: root +Date: Mon Apr 29 14:26:01 1996 +0000 + + turn off any default armor + + CVS patchset: 552 + CVS date: 1996/04/29 14:26:01 + +commit 7f4acbe43db5200e0cc7074c51938b4a1ad4f394 +Author: root +Date: Thu Apr 18 16:29:40 1996 +0000 + + added sigs + + CVS patchset: 551 + CVS date: 1996/04/18 16:29:40 + +commit e3ef22cfe88378bdbe1fbca784f43f1ecf0a54cd +Author: ewt +Date: Mon Apr 15 22:38:36 1996 +0000 + + *** empty log message *** + + CVS patchset: 550 + CVS date: 1996/04/15 22:38:36 + +commit 4d6d411489b30f00f656edd36eab0cc7e7b4d1cc +Author: ewt +Date: Mon Apr 15 22:23:46 1996 +0000 + + added support for INSTALL_NOSCRIPTS, UNINSTALL_NOSCRIPTS + changed test to use UNINSTALL_TEST flag + + CVS patchset: 549 + CVS date: 1996/04/15 22:23:46 + +commit 35cd57b45759ff913a38478e22489620f590ce41 +Author: ewt +Date: Mon Apr 15 22:23:34 1996 +0000 + + added INSTALL_NOSCRIPTS, UNINSTALL_TEST, UNINSTALL_NOSCRIPTS + + CVS patchset: 548 + CVS date: 1996/04/15 22:23:34 + +commit 9624dafc69d4050051f1ebc3f0fb95c480bc5b8c +Author: ewt +Date: Mon Apr 15 22:23:19 1996 +0000 + + packages with no group get added to "Unknown" group + + CVS patchset: 547 + CVS date: 1996/04/15 22:23:19 + +commit e6b5229f06ebfde5c669b9e5f7902ea629f329ed +Author: ewt +Date: Mon Apr 15 22:23:05 1996 +0000 + + runScript() runs scripts conditionally + + CVS patchset: 546 + CVS date: 1996/04/15 22:23:05 + +commit 6156911e0f116578b1c541dadf0fdd2e618fd7fe +Author: ewt +Date: Mon Apr 15 22:22:50 1996 +0000 + + added INSTALL_NOSCRIPTS + + CVS patchset: 545 + CVS date: 1996/04/15 22:22:50 + +commit f9718739d9c760ee3c3bf4f039db91d08a0da559 +Author: ewt +Date: Mon Apr 15 22:21:30 1996 +0000 + + added --script querying + + CVS patchset: 544 + CVS date: 1996/04/15 22:21:30 + +commit 6f60c4901fe7b7925c58a2742972c043d64e09da +Author: ewt +Date: Mon Apr 15 22:21:21 1996 +0000 + + changed uninstall code for new uninstall call + + CVS patchset: 543 + CVS date: 1996/04/15 22:21:21 + +commit d9c99fc4ef3dc3e7bd57a646faf87e0e6caa2b75 +Author: ewt +Date: Mon Apr 15 22:20:01 1996 +0000 + + 1) added --scripts query option + 2) added --noscripts option for installs and uninstalls + 3) changed uninstall code for new uninstall call + + CVS patchset: 542 + CVS date: 1996/04/15 22:20:01 + +commit 3966935d19254dad6128fefeb73a1bcea502f014 +Author: ewt +Date: Mon Apr 15 22:19:41 1996 +0000 + + changed version to 2.0.7 + + CVS patchset: 541 + CVS date: 1996/04/15 22:19:41 + +commit fb1f240dcb9f64a5e258454b5a7eccdbd109c631 +Author: ewt +Date: Mon Apr 15 22:19:30 1996 +0000 + + *** empty log message *** + + CVS patchset: 540 + CVS date: 1996/04/15 22:19:30 + +commit 31a3a231caeaf977de077160abf58d012188b3d9 +Author: ewt +Date: Mon Apr 15 22:16:27 1996 +0000 + + added info on --scripts, --noscripts + + CVS patchset: 539 + CVS date: 1996/04/15 22:16:27 + +commit b9fef275b7fccc0563a4f738105bb2cdf4b2cead +Author: root +Date: Mon Apr 15 21:29:01 1996 +0000 + + added REQUIRE/PROVIDE tags + added version dependency constants + + CVS patchset: 538 + CVS date: 1996/04/15 21:29:01 + +commit 434d04c5d700e42f870f53d621fe4de25756ad9d +Author: ewt +Date: Mon Apr 15 21:09:40 1996 +0000 + + fixed return codes + + CVS patchset: 537 + CVS date: 1996/04/15 21:09:40 + +commit c1eae68958bc7d9ccbf7f74fa0cf0d77527c9c57 +Author: ewt +Date: Mon Apr 15 21:08:12 1996 +0000 + + fixed new awk code which generated tagtable.c + + CVS patchset: 536 + CVS date: 1996/04/15 21:08:12 + +commit 29414279b610f56c8e1e491c6ebb0bdad6352a0c +Author: ewt +Date: Mon Apr 15 21:06:26 1996 +0000 + + queries relative paths correctly (thanks to Johnie Stafford) + + CVS patchset: 535 + CVS date: 1996/04/15 21:06:26 + +commit f6c4f0538ea3534ba0a61f578d22d98a293169a8 +Author: ewt +Date: Fri Apr 12 16:51:38 1996 +0000 + + use awk instead of perl to make tagtable.c + + CVS patchset: 534 + CVS date: 1996/04/12 16:51:38 + +commit a0b0ad43bf0bdc76e1a0d53151eff83f76282917 +Author: root +Date: Mon Apr 8 17:55:35 1996 +0000 + + *** empty log message *** + + CVS patchset: 533 + CVS date: 1996/04/08 17:55:35 + +commit 94eddeb66a6e1ca6b934b1da79c505673752fad5 +Author: root +Date: Mon Apr 8 17:53:21 1996 +0000 + + set umask on all script runs + + CVS patchset: 532 + CVS date: 1996/04/08 17:53:21 + +commit 7a677fce4600178304779ba3d4604afa6dc7cfd0 +Author: root +Date: Fri Apr 5 17:39:43 1996 +0000 + + made rpm2cpio get stripped during install + + CVS patchset: 531 + CVS date: 1996/04/05 17:39:43 + +commit 3a7bfad7bebaab8129e70ab25b9a930c643c3d35 +Author: root +Date: Fri Apr 5 17:37:06 1996 +0000 + + changed to version 2.0.6 + + CVS patchset: 530 + CVS date: 1996/04/05 17:37:06 + +commit a82bae4fa4144756cb04125144b09a34ac9d6541 +Author: root +Date: Fri Apr 5 17:36:11 1996 +0000 + + packages with bad headers shouldn't cause an error, just a differnet return + code + + CVS patchset: 529 + CVS date: 1996/04/05 17:36:11 + +commit 51c14bb24858aab6447b3a8631b445c388a2a6bc +Author: root +Date: Fri Apr 5 17:35:45 1996 +0000 + + added more intelligent error messages for bad magic + + CVS patchset: 528 + CVS date: 1996/04/05 17:35:45 + +commit 9b4667fe91e6ae08dbf44b59a411d61f507d7202 +Author: ewt +Date: Wed Apr 3 04:01:18 1996 +0000 + + changed version to 2.0.5 + + CVS patchset: 527 + CVS date: 1996/04/03 04:01:18 + +commit b713f99520fd49ea9ca02d424feb6daf3385fe21 +Author: ewt +Date: Wed Apr 3 03:47:25 1996 +0000 + + *** empty log message *** + + CVS patchset: 526 + CVS date: 1996/04/03 03:47:25 + +commit 65df4a10e9f542ef4d716219fb00203a5ad2afef +Author: ewt +Date: Wed Apr 3 03:46:41 1996 +0000 + + doInstall() now returns success or error + + CVS patchset: 525 + CVS date: 1996/04/03 03:46:41 + +commit 119be69b35be03cd27e5defe193eb93e56485117 +Author: ewt +Date: Wed Apr 3 03:46:35 1996 +0000 + + Initial revision + + CVS patchset: 524 + CVS date: 1996/04/03 03:46:35 + +commit ca716f386ed2e30c2a7683de1fd9624768df704e +Author: ewt +Date: Wed Apr 3 03:45:27 1996 +0000 + + wrote queryPrintTags() + made doQuery return something more reasonable + + CVS patchset: 523 + CVS date: 1996/04/03 03:45:27 + +commit 296a55b25b02f021ff2d5d98732ed20710dac354 +Author: ewt +Date: Wed Apr 3 03:45:17 1996 +0000 + + doQuery() should return an int + + CVS patchset: 522 + CVS date: 1996/04/03 03:45:17 + +commit a6e28f246fb6d3388d3f6ab44272eb1320ea0c6b +Author: ewt +Date: Wed Apr 3 03:44:38 1996 +0000 + + added --querytags, updated help/useage messages + made install and queries return better error codes + changed all exit(-1) to exit(1) + + CVS patchset: 521 + CVS date: 1996/04/03 03:44:38 + +commit 0b23836cdbe63d106b6358918e6612154d9c10c1 +Author: ewt +Date: Wed Apr 3 03:31:38 1996 +0000 + + added documentation of custom query formats + + CVS patchset: 520 + CVS date: 1996/04/03 03:31:38 + +commit 762cb127aa8834157776b6eae320325af1ba6c7b +Author: ewt +Date: Tue Apr 2 03:37:03 1996 +0000 + + added declarations for tag table + + CVS patchset: 519 + CVS date: 1996/04/02 03:37:03 + +commit bd9d21bd8cd5633b763bd66cf11dde2d2d650d9f +Author: ewt +Date: Tue Apr 2 03:36:54 1996 +0000 + + clean removes tagtable.c + + CVS patchset: 518 + CVS date: 1996/04/02 03:36:54 + +commit 4f94ee363c4ae295c4fcbe1fd2d10a5754055462 +Author: ewt +Date: Tue Apr 2 03:36:30 1996 +0000 + + creates tagtable.c now + + CVS patchset: 517 + CVS date: 1996/04/02 03:36:30 + +commit 7ac93a6cfb262a02c55e1cb8f7fc241eb311e0e9 +Author: ewt +Date: Tue Apr 2 03:36:00 1996 +0000 + + added support for user specified query formats + + CVS patchset: 516 + CVS date: 1996/04/02 03:36:00 + +commit 0fff3d855d88ea3f48006edbfcb08d0ec48d74a5 +Author: root +Date: Mon Apr 1 16:13:11 1996 +0000 + + fixed HOWTO URL + + CVS patchset: 515 + CVS date: 1996/04/01 16:13:11 + +commit 4d98255dea7df05979a96d82f2982e582f499bb0 +Author: root +Date: Sat Mar 30 19:44:29 1996 +0000 + + added --short-circuit + + CVS patchset: 514 + CVS date: 1996/03/30 19:44:29 + +commit 8efc2d3052ddc609abca3d143e661fcbc904f0ba +Author: root +Date: Sat Mar 30 04:01:36 1996 +0000 + + installs rpm2cpio man page + + CVS patchset: 513 + CVS date: 1996/03/30 04:01:36 + +commit 26cf99a9a9e48f3947b53cdb2ebb35173c1a42bb +Author: root +Date: Sat Mar 30 04:01:09 1996 +0000 + + documented --excludedocs and --includedocs + + CVS patchset: 512 + CVS date: 1996/03/30 04:01:09 + +commit 053d644aaf385badccb56d52e7586d9b915b0efd +Author: root +Date: Sat Mar 30 04:00:55 1996 +0000 + + Initial revision + + CVS patchset: 511 + CVS date: 1996/03/30 04:00:55 + +commit 2db2a25a6db5d99f691d7cb23ef15df0f00d9725 +Author: ewt +Date: Fri Mar 29 20:52:03 1996 +0000 + + added support for excluded documentation files + + CVS patchset: 510 + CVS date: 1996/03/29 20:52:03 + +commit ebcd159917c814a332f4ae06276533c4584e6358 +Author: ewt +Date: Fri Mar 29 20:51:54 1996 +0000 + + added excludedocs line to /etc/rpmrc + + CVS patchset: 509 + CVS date: 1996/03/29 20:51:54 + +commit 80037ff601a628d4950e6dd446e1b124cce7a038 +Author: ewt +Date: Fri Mar 29 20:51:40 1996 +0000 + + added RPMFILE_STATE_NOTINSTALLED, INSTALL_NODOCS, RPMVAR_EXCLUDEDOCS + + CVS patchset: 508 + CVS date: 1996/03/29 20:51:40 + +commit c17b5493c19628fe6af906f3a18264fef7252023 +Author: ewt +Date: Fri Mar 29 20:51:20 1996 +0000 + + doesn't remove files that were never installed (RPMFILE_STATE_NOTINSTALLED) + + CVS patchset: 507 + CVS date: 1996/03/29 20:51:20 + +commit 78b1ae4232406a317d8732523d147aeb1e1501bd +Author: ewt +Date: Fri Mar 29 20:51:12 1996 +0000 + + added getBooleanVar + + CVS patchset: 506 + CVS date: 1996/03/29 20:51:12 + +commit 82bf92cbb86877b26c3291cc20060f29fee2a8ed +Author: ewt +Date: Fri Mar 29 20:50:53 1996 +0000 + + recoginizes files that have intentionally not been installed + + CVS patchset: 505 + CVS date: 1996/03/29 20:50:53 + +commit 04bf634ef02e15502bf64a62f8296136264209b9 +Author: ewt +Date: Fri Mar 29 20:50:47 1996 +0000 + + handles --excludedocs + + CVS patchset: 504 + CVS date: 1996/03/29 20:50:47 + +commit 9563a5d9c10baf4c76d8399d0378f82350beef5e +Author: root +Date: Fri Mar 29 20:06:02 1996 +0000 + + added some better error messages + + CVS patchset: 503 + CVS date: 1996/03/29 20:06:02 + +commit 6f8bc1da13ea9530c8c92a6b2dd7ef4435fd9993 +Author: root +Date: Fri Mar 29 20:05:40 1996 +0000 + + fixed missing paren + + CVS patchset: 502 + CVS date: 1996/03/29 20:05:40 + +commit 1e344457e568f2a0903f4999ed506415f0e94176 +Author: root +Date: Fri Mar 29 19:57:19 1996 +0000 + + fix mklinux stuff + + CVS patchset: 501 + CVS date: 1996/03/29 19:57:19 + +commit c179616796ca3b23a00c1018833a8bcc47027b48 +Author: ewt +Date: Fri Mar 29 19:40:08 1996 +0000 + + frees source package headers (when available) + + CVS patchset: 500 + CVS date: 1996/03/29 19:40:08 + +commit db3e2a06f82647515beb3ec9a2aa1fb22d637ddf +Author: ewt +Date: Fri Mar 29 19:39:56 1996 +0000 + + returns a null header for old style source packages + + CVS patchset: 499 + CVS date: 1996/03/29 19:39:56 + +commit 29269c7429a9ff2dea3e5981023eca5bf83a0701 +Author: ewt +Date: Fri Mar 29 19:39:41 1996 +0000 + + refuses to query old format source packages + + CVS patchset: 498 + CVS date: 1996/03/29 19:39:41 + +commit 96e602e3bae05e1fdea172a2396730463fb4accf +Author: ewt +Date: Fri Mar 29 19:25:17 1996 +0000 + + fixed bug where a header was freed when it shouldn't have been + + CVS patchset: 497 + CVS date: 1996/03/29 19:25:17 + +commit 18db9bdc482630b85676fbcba8e35e23b4ec16ae +Author: ewt +Date: Fri Mar 29 19:24:52 1996 +0000 + + handles headers with no state properly + + CVS patchset: 496 + CVS date: 1996/03/29 19:24:52 + +commit 93efd0a7b8ffc48adafc9ba25e7cee42a8bef153 +Author: root +Date: Fri Mar 29 01:43:10 1996 +0000 + + don't overwrite an existing database + + CVS patchset: 495 + CVS date: 1996/03/29 01:43:10 + +commit 2aed2e1fa84cd6fab776af73a56b4fc3ae00bb34 +Author: root +Date: Fri Mar 29 01:35:33 1996 +0000 + + Initial revision + + CVS patchset: 494 + CVS date: 1996/03/29 01:35:33 + +commit 54ca5bf9543a74a10f0fbcf67cb34614754a72c2 +Author: root +Date: Fri Mar 29 01:35:05 1996 +0000 + + made default optimizations -O2 + builds shared version w/o GNU gettext (uses stubs) + + CVS patchset: 493 + CVS date: 1996/03/29 01:35:05 + +commit d4a59f62c7def30a70c966bf4f860a159ece4287 +Author: root +Date: Fri Mar 29 01:26:20 1996 +0000 + + use /var/tmp + + CVS patchset: 492 + CVS date: 1996/03/29 01:26:20 + +commit 1bd9ff15cc40281a2137336f2ef195f48dda5164 +Author: root +Date: Fri Mar 29 01:24:38 1996 +0000 + + added --rebuild and --recompile + + CVS patchset: 491 + CVS date: 1996/03/29 01:24:38 + +commit f28ce8f6943ade8f2a279d3906a589a711b0d3e4 +Author: root +Date: Fri Mar 29 01:22:14 1996 +0000 + + *** empty log message *** + + CVS patchset: 490 + CVS date: 1996/03/29 01:22:14 + +commit 9b25b89c15366309ff2c4e0a332169eb1f83386d +Author: root +Date: Fri Mar 29 01:19:49 1996 +0000 + + changed version to 2.0.4 + + CVS patchset: 489 + CVS date: 1996/03/29 01:19:49 + +commit 502e34e500e1ea7ecc33efd1c13848d934e51000 +Author: root +Date: Fri Mar 29 01:19:10 1996 +0000 + + added verbose error checking + + CVS patchset: 488 + CVS date: 1996/03/29 01:19:10 + +commit a1a51786da7672587e33562f1dc708dfacd20095 +Author: root +Date: Fri Mar 29 00:52:29 1996 +0000 + + added --recompile + + CVS patchset: 487 + CVS date: 1996/03/29 00:52:29 + +commit 8d9e9fbe8c3037fad9f65e37a2c835f1c12c61da +Author: root +Date: Thu Mar 28 23:57:37 1996 +0000 + + added --resign + + CVS patchset: 486 + CVS date: 1996/03/28 23:57:37 + +commit e587de6e8690a3036c34dcb92e606e81af3ddeee +Author: root +Date: Thu Mar 28 23:56:49 1996 +0000 + + added doReSign() + + CVS patchset: 485 + CVS date: 1996/03/28 23:56:49 + +commit 5e3b53f7afb02c5aac2373bb48287e4a37bd6b93 +Author: root +Date: Thu Mar 28 22:52:06 1996 +0000 + + added a few osfmach* archs + fail immediately on unknown arch/os + + CVS patchset: 484 + CVS date: 1996/03/28 22:52:06 + +commit 64ffda0cbba9c8093122e9a889243ab484b595a7 +Author: root +Date: Fri Mar 22 16:14:48 1996 +0000 + + changed version to 2.0.3 + + CVS patchset: 483 + CVS date: 1996/03/22 16:14:48 + +commit df2dfc15bebb86130a86afa775eda563e9874b8b +Author: root +Date: Fri Mar 22 16:14:25 1996 +0000 + + add support for 786, 886, 986 + + CVS patchset: 482 + CVS date: 1996/03/22 16:14:25 + +commit fcce3a625f56147c32cf23515ea2f1ce3269ffe0 +Author: root +Date: Fri Mar 22 15:10:41 1996 +0000 + + added i686 (Pentium Pro) + + CVS patchset: 481 + CVS date: 1996/03/22 15:10:41 + +commit 799ccf21dc42520a0e26c081feeaf11dd894bc40 +Author: root +Date: Tue Mar 19 21:47:10 1996 +0000 + + removed PGP install stuff - it tended to blow away anything already there + + CVS patchset: 480 + CVS date: 1996/03/19 21:47:10 + +commit ff2b86f319c2dd3c230725074803563b39c0bfdd +Author: root +Date: Mon Mar 18 17:11:46 1996 +0000 + + added url + + CVS patchset: 479 + CVS date: 1996/03/18 17:11:46 + +commit bf5337634726e66df668f4941fe6a56c32a60993 +Author: ewt +Date: Fri Mar 15 23:03:35 1996 +0000 + + added french catalog + + CVS patchset: 478 + CVS date: 1996/03/15 23:03:35 + +commit f753e724e6c1b8d19fbf3b5a90321dbd17abd1a1 +Author: ewt +Date: Fri Mar 15 23:02:44 1996 +0000 + + ftp's now returns an error code when it times out while getting a + package + + CVS patchset: 477 + CVS date: 1996/03/15 23:02:44 + +commit 998c552a7ea39b2d753413b5285469b488a0b254 +Author: ewt +Date: Fri Mar 15 23:00:55 1996 +0000 + + changed error message presented when an ftp fails + + CVS patchset: 476 + CVS date: 1996/03/15 23:00:55 + +commit 6a9763c47b147d07c740e9e2d26b9205c95bd587 +Author: ewt +Date: Thu Mar 14 20:01:41 1996 +0000 + + Initial revision + + CVS patchset: 475 + CVS date: 1996/03/14 20:01:41 + +commit c7b65d338cfcd242c3bb97690d095deecd62ef31 +Author: ewt +Date: Thu Mar 14 17:28:01 1996 +0000 + + added depend rule + + CVS patchset: 474 + CVS date: 1996/03/14 17:28:01 + +commit cbfbed5f56937a0b33dd3919a86c1fb2a22b0afc +Author: ewt +Date: Thu Mar 14 17:23:42 1996 +0000 + + added clean rule + + CVS patchset: 473 + CVS date: 1996/03/14 17:23:42 + +commit 5c34d42bd122a01f57c2f3a9c3c6669e086d9790 +Author: ewt +Date: Thu Mar 14 17:17:42 1996 +0000 + + changed to version 2.0.2 + + CVS patchset: 472 + CVS date: 1996/03/14 17:17:42 + +commit 39711f383a80c6daa64876877adc39b8b6c25b58 +Author: root +Date: Thu Mar 14 16:54:08 1996 +0000 + + Added NLS support + + CVS patchset: 471 + CVS date: 1996/03/14 16:54:08 + +commit 0a81a5cc41e2222339bb4dc50343ac870ecbe7b2 +Author: root +Date: Thu Mar 14 16:53:55 1996 +0000 + + added support for NLS catalogs + + CVS patchset: 470 + CVS date: 1996/03/14 16:53:55 + +commit 96e1e1d2e56a39ebe4639488ee0b5f14a7ae44b3 +Author: ewt +Date: Thu Mar 14 16:51:55 1996 +0000 + + Initial revision + + CVS patchset: 469 + CVS date: 1996/03/14 16:51:55 + +commit fede4fefc5d9246b10a90e0977c8b5e61cdbe450 +Author: ewt +Date: Wed Mar 13 03:58:59 1996 +0000 + + changed version number to 2.0.1 + + CVS patchset: 468 + CVS date: 1996/03/13 03:58:59 + +commit 1a00319bb9ba29e4445f9642d6cf9a0d169cefb8 +Author: ewt +Date: Wed Mar 13 03:51:56 1996 +0000 + + - hashing and percentages no longer SIGFPE on 0 byte packages + - when an ftp fails, install.c no longer tries to install the package + - ftps files to /var/tmp rather then /usr/tmp + + CVS patchset: 467 + CVS date: 1996/03/13 03:51:56 + +commit 9d5800fe34ed41ff011deb2984150840070eae58 +Author: ewt +Date: Wed Mar 13 03:48:48 1996 +0000 + + added message() calls for debugging info + + CVS patchset: 466 + CVS date: 1996/03/13 03:48:48 + +commit 6ad0ce0b6f524856e8ef1866e3dc180059f2f528 +Author: ewt +Date: Wed Mar 13 03:48:00 1996 +0000 + + fixed small minor typos + + CVS patchset: 465 + CVS date: 1996/03/13 03:48:00 + +commit 05a40f129f1f3a40bde47c3b62131f4438bd23b4 +Author: root +Date: Mon Mar 11 15:48:22 1996 +0000 + + added mdfile prototype + + CVS patchset: 464 + CVS date: 1996/03/11 15:48:22 + +commit 5203f9c5df1b5e2b2a49c2243c9215550f7b1f4e +Author: root +Date: Thu Mar 7 16:48:12 1996 +0000 + + fixed old lead struct for Alpha + + CVS patchset: 463 + CVS date: 1996/03/07 16:48:12 + +commit c8e2fe70aab91d87983f18c05c247de14fe3fb51 +Author: root +Date: Thu Mar 7 16:48:06 1996 +0000 + + added some debug messages + + CVS patchset: 462 + CVS date: 1996/03/07 16:48:06 + +commit 36fca13dffa4e76dc485555717d8aa3e25c6af1a +Author: root +Date: Thu Mar 7 05:36:15 1996 +0000 + + RPM 2.0 released + + CVS patchset: 461 + CVS date: 1996/03/07 05:36:15 + +commit 0f7eca08a63e7e765e4bbfbc71ecbed5488c7dc9 +Author: root +Date: Tue Mar 5 16:14:21 1996 +0000 + + added PGP stuff + + CVS patchset: 460 + CVS date: 1996/03/05 16:14:21 + +commit 9b993ba4b85c8abd395a309608434ed654bd159d +Author: root +Date: Tue Mar 5 15:45:13 1996 +0000 + + stuff. + + CVS patchset: 459 + CVS date: 1996/03/05 15:45:13 + +commit 35939888ffac617cbfc52c71cf2ea01f0f3a1115 +Author: root +Date: Tue Mar 5 15:44:50 1996 +0000 + + add verify and PGP stuff + + CVS patchset: 458 + CVS date: 1996/03/05 15:44:50 + +commit 3042da83c9ee6d720ee1e125efa273e93552c2f3 +Author: root +Date: Tue Mar 5 14:45:20 1996 +0000 + + Initial revision + + CVS patchset: 457 + CVS date: 1996/03/05 14:45:20 + +commit 214d48fbb4fd1a17b2e6cb513fe55cddf47f1908 +Author: ewt +Date: Mon Mar 4 22:52:34 1996 +0000 + + indicates config files for files that don't verify + + CVS patchset: 456 + CVS date: 1996/03/04 22:52:34 + +commit 618ad69371b15a8f6fb8c9b9575d24126562b785 +Author: ewt +Date: Mon Mar 4 22:47:35 1996 +0000 + + prints SUID, SGID, sticky bits + + CVS patchset: 455 + CVS date: 1996/03/04 22:47:35 + +commit 551f7b254077edf19667495344d9d3a3958b6085 +Author: ewt +Date: Sat Mar 2 17:37:23 1996 +0000 + + 1) added rpm2cpio rules + 2) changed to version 2.0 + + CVS patchset: 454 + CVS date: 1996/03/02 17:37:23 + +commit 851ccc022f09619c44acc71e7ce53bc46a8cd771 +Author: ewt +Date: Sat Mar 2 17:36:57 1996 +0000 + + Initial revision + + CVS patchset: 453 + CVS date: 1996/03/02 17:36:57 + +commit 51ace9888732d68de98d067d1ab4b9ba0f96f312 +Author: ewt +Date: Sat Mar 2 17:19:52 1996 +0000 + + exits when bad options are given + + CVS patchset: 452 + CVS date: 1996/03/02 17:19:52 + +commit f255f857aad576341b4f0da1c5f2eb74783b4270 +Author: ewt +Date: Fri Mar 1 17:44:02 1996 +0000 + + numerous bug fixes + + CVS patchset: 451 + CVS date: 1996/03/01 17:44:02 + +commit a2dcd3552f9f14e6c8f46a65100331649a21012f +Author: root +Date: Fri Mar 1 17:43:34 1996 +0000 + + changed to 2.0j + + CVS patchset: 450 + CVS date: 1996/03/01 17:43:34 + +commit e5d1cfe5e4554b92ba9d3b73485edbf10a5ca0e4 +Author: root +Date: Fri Mar 1 15:29:04 1996 +0000 + + add new -e and --erase options + warn about -u and --uninstall + + CVS patchset: 449 + CVS date: 1996/03/01 15:29:04 + +commit 1da80ad8a520398183455fedd57a490e41335484 +Author: ewt +Date: Fri Mar 1 03:29:18 1996 +0000 + + lets you query a package by record number + + CVS patchset: 448 + CVS date: 1996/03/01 03:29:18 + +commit 55134cf73729b8cc3018fe6ede25f3725a560ee4 +Author: ewt +Date: Fri Mar 1 03:28:55 1996 +0000 + + adds freed blocks to the free list + + CVS patchset: 447 + CVS date: 1996/03/01 03:28:55 + +commit 00377d6ae5b1b0af88b870c018e8dfae1cd6b5df +Author: ewt +Date: Fri Mar 1 03:28:33 1996 +0000 + + don't back up directories marked as config files, even if they already + exist + + CVS patchset: 446 + CVS date: 1996/03/01 03:28:33 + +commit cd07a9b0577864ea9d5e659cf826830109ad7f2c +Author: ewt +Date: Fri Mar 1 01:59:26 1996 +0000 + + switched the ordering in the decision process for how config files are + upgraded + + CVS patchset: 445 + CVS date: 1996/03/01 01:59:26 + +commit c0dae8e3cf5e0f8083e700167ee8ce8d1d6e0873 +Author: ewt +Date: Fri Mar 1 01:59:03 1996 +0000 + + creates a default path which is used for running scripts + + CVS patchset: 444 + CVS date: 1996/03/01 01:59:03 + +commit 32495fc761a135dd7449adff17717d9c38bd3867 +Author: ewt +Date: Fri Mar 1 01:58:27 1996 +0000 + + vercmp() returnd backwards results when one of the strings ran out + before the other + + CVS patchset: 443 + CVS date: 1996/03/01 01:58:27 + +commit 4ca3469b48d03ae60ba4afb737ade9bce2333ec5 +Author: ewt +Date: Fri Mar 1 01:57:52 1996 +0000 + + ftp installs should use temp space within the directory given by + --root if it was used + + CVS patchset: 442 + CVS date: 1996/03/01 01:57:52 + +commit 99d24b904cd43d8eb00124718398e10635bc48e5 +Author: ewt +Date: Thu Feb 29 18:55:19 1996 +0000 + + changed to version 2.0i + + CVS patchset: 441 + CVS date: 1996/02/29 18:55:19 + +commit 2313457459be3ebfc6ef0ab9d4fc61fecb28192d +Author: root +Date: Thu Feb 29 03:39:20 1996 +0000 + + turned off DEBUG + + CVS patchset: 440 + CVS date: 1996/02/29 03:39:20 + +commit 8d334d7ec632b2eed906a1e69a5a0e41137f4972 +Author: root +Date: Thu Feb 29 03:38:33 1996 +0000 + + made logic that for handling config files during installs much smarter + + CVS patchset: 439 + CVS date: 1996/02/29 03:38:33 + +commit 4cf0beea9fa01d84671291c8af7db311fa89409e +Author: root +Date: Thu Feb 29 02:07:47 1996 +0000 + + added basic checking of user and groups. this does it by [GU]ID only + + CVS patchset: 438 + CVS date: 1996/02/29 02:07:47 + +commit f5fcec5d5dab9fdf55e8e443a0ec9e9f0ac54208 +Author: root +Date: Thu Feb 29 00:55:31 1996 +0000 + + switch back to using a gzip process instead of gzlib :-(. + + CVS patchset: 437 + CVS date: 1996/02/29 00:55:31 + +commit 3ae84362c0741a20818a15487b6eec025c3b92ca +Author: root +Date: Wed Feb 28 17:16:47 1996 +0000 + + changed to version h + + CVS patchset: 436 + CVS date: 1996/02/28 17:16:47 + +commit 96ed778bc7265e7250ce894d4d39483fcb92eed3 +Author: root +Date: Tue Feb 27 23:40:44 1996 +0000 + + null terminate. duh. + + CVS patchset: 435 + CVS date: 1996/02/27 23:40:44 + +commit 6fade5096ae44f270926d31528eeb641e79e753e +Author: root +Date: Tue Feb 27 23:18:11 1996 +0000 + + added SPARC architecture + + CVS patchset: 434 + CVS date: 1996/02/27 23:18:11 + +commit ba1906fdfeccd0ceb87b63150b61e420cea7a446 +Author: root +Date: Tue Feb 27 22:50:55 1996 +0000 + + better reporting for v1.0 packages + + CVS patchset: 433 + CVS date: 1996/02/27 22:50:55 + +commit 6bada7decff3103bd7a7b6050d260a158d680e54 +Author: ewt +Date: Tue Feb 27 17:40:59 1996 +0000 + + fixed bug + + CVS patchset: 432 + CVS date: 1996/02/27 17:40:59 + +commit a6ad7dbfd3823476a9686ee989dff027bc0a6f56 +Author: ewt +Date: Tue Feb 27 17:40:34 1996 +0000 + + 1) added ftp.[ch] + 2) changed version to 2.0g + + CVS patchset: 431 + CVS date: 1996/02/27 17:40:34 + +commit 81f604b4cb466193d4f5f93867f6d6c6a96cb12b +Author: ewt +Date: Tue Feb 27 17:37:06 1996 +0000 + + added support for ftp style URL's on RPM command line + + CVS patchset: 430 + CVS date: 1996/02/27 17:37:06 + +commit f9c1e8d7281d369ac194a74505c9cb4eddea1d77 +Author: ewt +Date: Tue Feb 27 17:37:03 1996 +0000 + + Initial revision + + CVS patchset: 429 + CVS date: 1996/02/27 17:37:03 + +commit fbb56975fb19ddaf7bcf6553005b354dc8b3a6bc +Author: ewt +Date: Mon Feb 26 22:53:35 1996 +0000 + + fixes for some silly bugs + + CVS patchset: 428 + CVS date: 1996/02/26 22:53:35 + +commit fe37f884f1132b74693c591b25ea900c574e2a21 +Author: ewt +Date: Mon Feb 26 22:45:24 1996 +0000 + + checks the architecure before installing binary packages + + CVS patchset: 427 + CVS date: 1996/02/26 22:45:24 + +commit 88b48eddb105c87d487280a83e6376f8b1821552 +Author: ewt +Date: Mon Feb 26 22:45:10 1996 +0000 + + Adds RPMTAG_ARCH to header for old packages + + CVS patchset: 426 + CVS date: 1996/02/26 22:45:10 + +commit bbaba89807a4030b5c9151eae99437d71c1d7cfb +Author: ewt +Date: Sun Feb 25 22:27:43 1996 +0000 + + added include of checksig.h to eliminate warning + + CVS patchset: 425 + CVS date: 1996/02/25 22:27:43 + +commit ba70204bbf920e6146aed8e9591de9840ca5443b +Author: ewt +Date: Sun Feb 25 22:23:01 1996 +0000 + + changed --check-sig to --checksig for consistency + + CVS patchset: 424 + CVS date: 1996/02/25 22:23:01 + +commit 14c7c734521ba2e1b59b94c5aa08cdf4905fc027 +Author: ewt +Date: Sun Feb 25 22:22:58 1996 +0000 + + *** empty log message *** + + CVS patchset: 423 + CVS date: 1996/02/25 22:22:58 + +commit b0d4b33c9216f50fab4a64bbe02ce2f5ee1109a7 +Author: ewt +Date: Sun Feb 25 22:11:24 1996 +0000 + + added support for --oldpackage + + CVS patchset: 422 + CVS date: 1996/02/25 22:11:24 + +commit 45061be267a55c9a6062c406fcd1fb1772213bf3 +Author: ewt +Date: Sun Feb 25 22:11:00 1996 +0000 + + checks for upgrades to old versions of packages and gives an appropriate + error + + CVS patchset: 421 + CVS date: 1996/02/25 22:11:00 + +commit d91b0512d0b40bc87a420d832776ba3766cdb030 +Author: ewt +Date: Sun Feb 25 22:10:50 1996 +0000 + + added INSTALL_UPGRADETOOLD + + CVS patchset: 420 + CVS date: 1996/02/25 22:10:50 + +commit faa8bd69ac8e17e03d0ed4a6598095850bb69a07 +Author: ewt +Date: Sun Feb 25 22:10:25 1996 +0000 + + added vercmp() + + CVS patchset: 419 + CVS date: 1996/02/25 22:10:25 + +commit 8ecf043b19cda5c7c864aeeeb94d37becd7e4cda +Author: root +Date: Sun Feb 25 05:05:52 1996 +0000 + + check for 151 byte sig and try again + + CVS patchset: 418 + CVS date: 1996/02/25 05:05:52 + +commit 43f56d773ede8a7aa31a9382c8233b7af66a8c47 +Author: ewt +Date: Sat Feb 24 23:47:32 1996 +0000 + + VERSION=2.0f + + CVS patchset: 417 + CVS date: 1996/02/24 23:47:32 + +commit 0c8dc8f29e01b98a4ab13f72c6a1d26b54fa8c30 +Author: ewt +Date: Sat Feb 24 23:46:36 1996 +0000 + + got rid of INSTALL_PRINTLABEL, added labelFormat to rpmInstallPackage + + CVS patchset: 416 + CVS date: 1996/02/24 23:46:36 + +commit a923c3297fff02640714f69ebacc100326cfd2b9 +Author: ewt +Date: Sat Feb 24 23:46:09 1996 +0000 + + made --percent look like it did in RPM 1.x + + CVS patchset: 415 + CVS date: 1996/02/24 23:46:09 + +commit 7d1e36e5f72aac12e2d874732467f6240e89cd1c +Author: root +Date: Fri Feb 23 22:28:59 1996 +0000 + + fix return codes + + CVS patchset: 414 + CVS date: 1996/02/23 22:28:59 + +commit 68425333a052d1e7acc9404ee4ff7273c7565431 +Author: root +Date: Fri Feb 23 22:28:40 1996 +0000 + + add a few return codes + + CVS patchset: 413 + CVS date: 1996/02/23 22:28:40 + +commit 664ec3353e31df55078caaa8fab40ef26e8b80be +Author: root +Date: Fri Feb 23 22:28:19 1996 +0000 + + better reporting + + CVS patchset: 412 + CVS date: 1996/02/23 22:28:19 + +commit e7b8fd79a40644bc0735a51faa8323c4bb20bc5c +Author: ewt +Date: Fri Feb 23 19:32:29 1996 +0000 + + long_index needs to be set to 0 before calling getopt + + CVS patchset: 411 + CVS date: 1996/02/23 19:32:29 + +commit 42a026ec2211e91b12e6391f903d5b83e2f9f8cf +Author: root +Date: Fri Feb 23 16:21:06 1996 +0000 + + files with the same md5 shouldn't cause conflicts + + CVS patchset: 410 + CVS date: 1996/02/23 16:21:06 + +commit 115bc0e28833405a991117bac419f89ee4765b12 +Author: root +Date: Fri Feb 23 05:15:13 1996 +0000 + + add debug message + + CVS patchset: 409 + CVS date: 1996/02/23 05:15:13 + +commit 3eee5e7604321c1243d051782dc52982d580187e +Author: root +Date: Fri Feb 23 03:47:43 1996 +0000 + + pass subpackage name to process_filelist() for doc dir + + CVS patchset: 408 + CVS date: 1996/02/23 03:47:43 + +commit 211f35618e362d47c7df82d05519c93ab346bef8 +Author: root +Date: Fri Feb 23 02:22:18 1996 +0000 + + add a couple statics + move doc script generation after all parsing is done + this is necessary to allow each pacakge to have it's own docs + + CVS patchset: 407 + CVS date: 1996/02/23 02:22:18 + +commit 9ef003123c8ac8ed7af51c05e665bbeb3cd7987d +Author: root +Date: Fri Feb 23 02:21:26 1996 +0000 + + add doc StringBuf to package record for per-package doc stuff + + CVS patchset: 406 + CVS date: 1996/02/23 02:21:26 + +commit a571c501a9021dc4a02c986b18690efc1e7dd03f +Author: root +Date: Thu Feb 22 21:31:16 1996 +0000 + + use level 9 compression! + + CVS patchset: 405 + CVS date: 1996/02/22 21:31:16 + +commit e649ec37c1757d25cec6ff8568ac312920239880 +Author: root +Date: Thu Feb 22 21:11:22 1996 +0000 + + better error reporting + + CVS patchset: 404 + CVS date: 1996/02/22 21:11:22 + +commit e10aa661f3694c43142c9348053e8a34e5fcc1ec +Author: root +Date: Thu Feb 22 20:28:19 1996 +0000 + + fix last ':' checking patch - source and patch lines cna have #'s! + + CVS patchset: 403 + CVS date: 1996/02/22 20:28:19 + +commit 787d0ca1021ec049d1f928991624a58130ca324c +Author: root +Date: Thu Feb 22 20:01:56 1996 +0000 + + require ':' after preamble parts + warn user about unknown premable parts "Fields" + sanity check for internal error + + CVS patchset: 402 + CVS date: 1996/02/22 20:01:56 + +commit a6dfa42373ff40957bc1c842efcc836a3bef618d +Author: root +Date: Thu Feb 22 20:00:56 1996 +0000 + + add "all" dependency for "make install" + + CVS patchset: 401 + CVS date: 1996/02/22 20:00:56 + +commit 9599f0fa43edbe7745652ad4aa88c016aae5f259 +Author: root +Date: Thu Feb 22 19:33:08 1996 +0000 + + stop builds on error + + CVS patchset: 400 + CVS date: 1996/02/22 19:33:08 + +commit 23e9920a5fb09622b04cb9d0a4c954b6e4ad376c +Author: root +Date: Thu Feb 22 19:21:54 1996 +0000 + + toss trailing spaces on name, version, release + + CVS patchset: 399 + CVS date: 1996/02/22 19:21:54 + +commit 719100f0566f2e7578f26eb746987e49aa0c5165 +Author: root +Date: Thu Feb 22 18:52:05 1996 +0000 + + added checksig.o + + CVS patchset: 398 + CVS date: 1996/02/22 18:52:05 + +commit 4e60315c9290789a2b1a887c1db5ff68839f8e6b +Author: root +Date: Thu Feb 22 18:51:25 1996 +0000 + + add help for --sign and --check-sig + add --check0sig handling + + CVS patchset: 397 + CVS date: 1996/02/22 18:51:25 + +commit 6c23574bb9840ba7a69af29e4f73dba978def543 +Author: root +Date: Thu Feb 22 18:50:41 1996 +0000 + + Initial revision + + CVS patchset: 396 + CVS date: 1996/02/22 18:50:41 + +commit b21fa18aeccf5b6a23c885eb3fa804a94d14b5b5 +Author: root +Date: Thu Feb 22 15:46:54 1996 +0000 + + don't just exit on error, clean up and return + + CVS patchset: 395 + CVS date: 1996/02/22 15:46:54 + +commit e641ac922b4e4f63f8c93c1eaae4ea516724a548 +Author: root +Date: Thu Feb 22 15:34:27 1996 +0000 + + more error checking during package write + + CVS patchset: 394 + CVS date: 1996/02/22 15:34:27 + +commit 16ea7d2b258a6bd9f64f89411c7835a94befd41f +Author: root +Date: Thu Feb 22 02:50:56 1996 +0000 + + change message() call to fprintf(stderr, ...) + + CVS patchset: 393 + CVS date: 1996/02/22 02:50:56 + +commit a2f32ab422398091c1f2b1bc23f5d5dca70b203c +Author: root +Date: Thu Feb 22 02:49:12 1996 +0000 + + reset RPMVAR_ROOT in reset_spec() + + CVS patchset: 392 + CVS date: 1996/02/22 02:49:12 + +commit 694c6a3c8e52dfe95081170d33c10f98de3069ee +Author: root +Date: Thu Feb 22 02:29:38 1996 +0000 + + add pass phrase sucess message + + CVS patchset: 391 + CVS date: 1996/02/22 02:29:38 + +commit dfb5ed188b71bdbb4c8d091bad5c275d99f5f8a4 +Author: root +Date: Thu Feb 22 01:59:29 1996 +0000 + + fix return codes for makeSignature() + + CVS patchset: 390 + CVS date: 1996/02/22 01:59:29 + +commit 379473e17efa6cc4f6fe744524fcff5b2a586c4e +Author: root +Date: Thu Feb 22 01:35:34 1996 +0000 + + better error checking during builds + + CVS patchset: 389 + CVS date: 1996/02/22 01:35:34 + +commit 391abf9b9395ebe0b143b52b2ebc773a02f44849 +Author: root +Date: Thu Feb 22 01:35:00 1996 +0000 + + check for bad pass phrases + + CVS patchset: 388 + CVS date: 1996/02/22 01:35:00 + +commit 81e9d511e7f1b859d55b17e510acd37e17a53c48 +Author: root +Date: Thu Feb 22 01:34:20 1996 +0000 + + better pass phrase handling, check for bad pass phrase + + CVS patchset: 387 + CVS date: 1996/02/22 01:34:20 + +commit c3acfa7ab3e8be53de1e161bd9e28500bfa3fdb5 +Author: root +Date: Wed Feb 21 23:18:36 1996 +0000 + + don't sweep in build_subdir is "." + + CVS patchset: 386 + CVS date: 1996/02/21 23:18:36 + +commit 177488cb3b5b727d5a0c93ee94b5d8b39c17ae4c +Author: root +Date: Wed Feb 21 22:20:51 1996 +0000 + + read the signature + + CVS patchset: 385 + CVS date: 1996/02/21 22:20:51 + +commit d90c22d3e9706f53003130539835aa4d2ffc61e4 +Author: root +Date: Wed Feb 21 22:20:37 1996 +0000 + + check for bad read in readSignature() + + CVS patchset: 384 + CVS date: 1996/02/21 22:20:37 + +commit cfe18a3208dd233526da56bb2d09b044ce982ba5 +Author: ewt +Date: Wed Feb 21 18:24:15 1996 +0000 + + installs /etc/rpmrc, /usr/bin/gendiff + + CVS patchset: 383 + CVS date: 1996/02/21 18:24:15 + +commit d7bd6eaa4da603c7a93931a35a066bcc71fe1b46 +Author: ewt +Date: Wed Feb 21 18:09:31 1996 +0000 + + variable was initialized wrong - fixed + + CVS patchset: 382 + CVS date: 1996/02/21 18:09:31 + +commit 728102b6bdaba5fa113bd7083ae3db150d6489ff +Author: root +Date: Wed Feb 21 17:32:07 1996 +0000 + + fix doc/docdir handling + + CVS patchset: 381 + CVS date: 1996/02/21 17:32:07 + +commit bce4b08641faf9ac3a578ba22b5b161d3bea9378 +Author: root +Date: Wed Feb 21 17:31:56 1996 +0000 + + remove bogus comment + + CVS patchset: 380 + CVS date: 1996/02/21 17:31:56 + +commit 2076c0f2f6bfbd3c30de012caf4269ae605c662f +Author: root +Date: Wed Feb 21 17:19:52 1996 +0000 + + handle names properly! Can't figure 'em out until the entire + spec file is parsed. + + CVS patchset: 379 + CVS date: 1996/02/21 17:19:52 + +commit c50bf4d20ae591aca5750b12f1a9dd2a095afffc +Author: root +Date: Wed Feb 21 17:19:17 1996 +0000 + + just get the name from the header + + CVS patchset: 378 + CVS date: 1996/02/21 17:19:17 + +commit bc9746b005ab001c3e2ac22aee806aaf70c21724 +Author: root +Date: Wed Feb 21 17:17:58 1996 +0000 + + fix ROOT_DIR setting (for NULL) + + CVS patchset: 377 + CVS date: 1996/02/21 17:17:58 + +commit 6e76ca36c748d7a4438069ee9ee2a8ac07f8156b +Author: root +Date: Wed Feb 21 15:29:20 1996 +0000 + + fix extra %endif catching + better errors + + CVS patchset: 376 + CVS date: 1996/02/21 15:29:20 + +commit e11a0b13ee384e545cc9abcbc84a4c716e380147 +Author: root +Date: Wed Feb 21 15:28:47 1996 +0000 + + fix %doc %docdir contention + + CVS patchset: 375 + CVS date: 1996/02/21 15:28:47 + +commit e23939d83735236f3ebded9b268bf04abd61de23 +Author: root +Date: Wed Feb 21 15:11:54 1996 +0000 + + add root dir to doc dir + + CVS patchset: 374 + CVS date: 1996/02/21 15:11:54 + +commit 7da9a0568fb74f04cd435fd1e579ae3c0bf65f03 +Author: ewt +Date: Tue Feb 20 23:56:14 1996 +0000 + + added co rule + + CVS patchset: 373 + CVS date: 1996/02/20 23:56:14 + +commit 2fda53f1aa47ed318c00eee8b38a04923ef33cad +Author: ewt +Date: Tue Feb 20 23:55:15 1996 +0000 + + moved rpm to /bin + + CVS patchset: 372 + CVS date: 1996/02/20 23:55:15 + +commit 0bca0361024911942b2ad854196bda07d7f0167e +Author: root +Date: Tue Feb 20 23:31:59 1996 +0000 + + fix ugly race condition in cpio_gzip() + fix md5sum generation for package with root: + add some verbose messagin + + CVS patchset: 371 + CVS date: 1996/02/20 23:31:59 + +commit 31963f7978eeae9285bb433633c23a00816b42d4 +Author: root +Date: Tue Feb 20 22:25:21 1996 +0000 + + fix off by one error (to agree with comment, no less) + + CVS patchset: 370 + CVS date: 1996/02/20 22:25:21 + +commit c40c0b624cdca8eb912b27f66fd6d86044028fa9 +Author: ewt +Date: Tue Feb 20 22:18:36 1996 +0000 + + missing files are reported better + + CVS patchset: 369 + CVS date: 1996/02/20 22:18:36 + +commit cffbf3f1d004135a3926d589ace685291a9c18a8 +Author: ewt +Date: Tue Feb 20 21:54:19 1996 +0000 + + 1) added upgrade arg handling + 2) fixed verify of stdin handling + + CVS patchset: 368 + CVS date: 1996/02/20 21:54:19 + +commit 7f9577ed2d06910c2c052920405105afe340bb9a +Author: ewt +Date: Tue Feb 20 21:54:07 1996 +0000 + + added INSTALL_UPGRADE flag + + CVS patchset: 367 + CVS date: 1996/02/20 21:54:07 + +commit dc21c59ee61f93f11ae9b4e0db02fb317b055042 +Author: ewt +Date: Tue Feb 20 21:54:02 1996 +0000 + + added upgrading + + CVS patchset: 366 + CVS date: 1996/02/20 21:54:02 + +commit 822ff53ec90c4dee7dfeed4d0f113bf0d45477cf +Author: ewt +Date: Tue Feb 20 21:53:44 1996 +0000 + + fixed symlink verification + + CVS patchset: 365 + CVS date: 1996/02/20 21:53:44 + +commit 697c3e6d39a14cb9be758c2e03e14c78dc30e8c5 +Author: ewt +Date: Tue Feb 20 20:56:26 1996 +0000 + + removed dump, dumpdb + + CVS patchset: 364 + CVS date: 1996/02/20 20:56:26 + +commit c46c2ae2626754090ac18e9d72dd480ae10251d9 +Author: ewt +Date: Tue Feb 20 20:55:47 1996 +0000 + + added dump, dumpdb + + CVS patchset: 363 + CVS date: 1996/02/20 20:55:47 + +commit 6aac154e2c1a8a82f721b48580e23f8a9cc9c1af +Author: ewt +Date: Tue Feb 20 20:55:04 1996 +0000 + + Initial revision + + CVS patchset: 362 + CVS date: 1996/02/20 20:55:04 + +commit aa79548c2f662fa67f3f23fa7756e7344d3cfb54 +Author: root +Date: Tue Feb 20 20:10:12 1996 +0000 + + bump version + + CVS patchset: 361 + CVS date: 1996/02/20 20:10:12 + +commit fd29b68bcd4adbb0799a4bc4c2a324fd2f67ab09 +Author: ewt +Date: Tue Feb 20 19:42:47 1996 +0000 + + changed output of verification + + CVS patchset: 360 + CVS date: 1996/02/20 19:42:47 + +commit 4ae33f74b29bd84d66a967ab8d55c77eb6079148 +Author: ewt +Date: Tue Feb 20 17:58:41 1996 +0000 + + finished + + CVS patchset: 359 + CVS date: 1996/02/20 17:58:41 + +commit 4b525901c125da27db4894fb3e33fabc08f4bb80 +Author: ewt +Date: Tue Feb 20 17:58:31 1996 +0000 + + fixed to return correct sum :-) + + CVS patchset: 358 + CVS date: 1996/02/20 17:58:31 + +commit 0fe113d764c90be7ce35d2c682a819c720b1eb94 +Author: root +Date: Tue Feb 20 17:55:15 1996 +0000 + + add wacky subpackage version/release stuff + fix readlink non-null-termination problem + + CVS patchset: 357 + CVS date: 1996/02/20 17:55:15 + +commit 3e7309560893527e27e6b3a6067f0f7b1cc607eb +Author: root +Date: Tue Feb 20 16:00:04 1996 +0000 + + pass around the passPhrase + + CVS patchset: 356 + CVS date: 1996/02/20 16:00:04 + +commit 57b6582561af071081a3c1b553e44bdac2368516 +Author: root +Date: Tue Feb 20 15:59:34 1996 +0000 + + pass passPhrase to doBuild + + CVS patchset: 355 + CVS date: 1996/02/20 15:59:34 + +commit b3769faaa38f3b1ac72aaad442fc6a3466ed6469 +Author: root +Date: Tue Feb 20 15:59:10 1996 +0000 + + add passPhrase stuff and --sign + + CVS patchset: 354 + CVS date: 1996/02/20 15:59:10 + +commit 46a977012a04bebbf3661223e097783038063b4f +Author: root +Date: Tue Feb 20 15:07:02 1996 +0000 + + add simple getPassPhrase() + + CVS patchset: 353 + CVS date: 1996/02/20 15:07:02 + +commit 7ac23c2d72cc7a8cc9ecab131061af272468f5e8 +Author: root +Date: Tue Feb 20 15:06:47 1996 +0000 + + add getPassPhrase() + + CVS patchset: 352 + CVS date: 1996/02/20 15:06:47 + +commit db1590def9a1b6289d9e328e722417d0181f8c5d +Author: root +Date: Tue Feb 20 06:02:32 1996 +0000 + + passPhrase is passed as arg + start writing getPassPhrase() + + CVS patchset: 351 + CVS date: 1996/02/20 06:02:32 + +commit 68e87d3653bdd334afc2ff1b9e3a6ae0e09f75ee +Author: root +Date: Tue Feb 20 06:01:30 1996 +0000 + + passPhrase is arg to makeSignature() + + CVS patchset: 350 + CVS date: 1996/02/20 06:01:30 + +commit 019c209d1a61d1775c99add08a7fc387ff95ac20 +Author: marc +Date: Tue Feb 20 04:47:25 1996 +0000 + + Initial revision + + CVS patchset: 349 + CVS date: 1996/02/20 04:47:25 + +commit 09ba912bd2fe1428fa8c96e5ce13487fc3f44bd5 +Author: marc +Date: Tue Feb 20 04:40:53 1996 +0000 + + Initial revision + + CVS patchset: 348 + CVS date: 1996/02/20 04:40:53 + +commit 60adc4402ed727453b61b27fc0d9a1c47126450d +Author: marc +Date: Tue Feb 20 04:31:08 1996 +0000 + + Initial revision + + CVS patchset: 347 + CVS date: 1996/02/20 04:31:08 + +commit 6a0b1e775e317b256d845388d4679603ad735f49 +Author: ewt +Date: Tue Feb 20 03:54:01 1996 +0000 + + added parsing and calling for verification + + CVS patchset: 346 + CVS date: 1996/02/20 03:54:01 + +commit e8a560988d0dd67e587bb84eb91cfd7ea5ffb9ec +Author: ewt +Date: Tue Feb 20 03:52:58 1996 +0000 + + added prototypes for verification, changed VERIFY flags + + CVS patchset: 345 + CVS date: 1996/02/20 03:52:58 + +commit 7bd32a18d1e994aa6c2834684c650affbc442a8c +Author: ewt +Date: Tue Feb 20 03:52:37 1996 +0000 + + added verify.c + + CVS patchset: 344 + CVS date: 1996/02/20 03:52:37 + +commit 6a20b58b0b6d1b8465af978cfc048a864cef8199 +Author: marc +Date: Tue Feb 20 02:33:52 1996 +0000 + + use VERIFY_USER and VERIFY_GROUP, not by id + + CVS patchset: 343 + CVS date: 1996/02/20 02:33:52 + +commit dbd38e9ea434d81704c826ca5f9f716807cb0911 +Author: marc +Date: Tue Feb 20 02:27:51 1996 +0000 + + mv rpm* tools into tools + + CVS patchset: 342 + CVS date: 1996/02/20 02:27:51 + +commit 0e47fd42b895a5e8b60e9b945b964d4bc0903dea +Author: marc +Date: Tue Feb 20 01:35:04 1996 +0000 + + added "," as separator for %verify() + + CVS patchset: 341 + CVS date: 1996/02/20 01:35:04 + +commit 235bcd763919e6de545506dd65d6e694e4e6c635 +Author: ewt +Date: Tue Feb 20 00:25:34 1996 +0000 + + changed version + + CVS patchset: 340 + CVS date: 1996/02/20 00:25:34 + +commit 96493b6e68646a3fae5fc04704e844a1e1a2c64f +Author: ewt +Date: Tue Feb 20 00:24:43 1996 +0000 + + should flush after handling INSTALL_PRINTLABEL + + CVS patchset: 339 + CVS date: 1996/02/20 00:24:43 + +commit f6879cec2d6e64d2db6dd7643b3d9fd6790ef773 +Author: ewt +Date: Tue Feb 20 00:24:24 1996 +0000 + + -hiv is handled via INSTALL_PRINTLABEL + + CVS patchset: 338 + CVS date: 1996/02/20 00:24:24 + +commit c1adebc3e7ad755d9317505d042bf2bc08d746d7 +Author: ewt +Date: Tue Feb 20 00:18:23 1996 +0000 + + added INSTALL_PRINTLABEL support + + CVS patchset: 337 + CVS date: 1996/02/20 00:18:23 + +commit 76dc38a451a84f5832798a06c57320b7c4a69b73 +Author: ewt +Date: Tue Feb 20 00:17:51 1996 +0000 + + 1) added INSTALL_PRINTLABEL support + 2) shouldn't update header's we've freed + + CVS patchset: 336 + CVS date: 1996/02/20 00:17:51 + +commit d46f2806ee40dd112869eb69e4f7f8f6d837cead +Author: ewt +Date: Tue Feb 20 00:17:35 1996 +0000 + + marks free blocks, though faFree() still isn't quite right + + CVS patchset: 335 + CVS date: 1996/02/20 00:17:35 + +commit ad341d23a3dbfc4f094fff0f00407a6756be0b76 +Author: ewt +Date: Tue Feb 20 00:12:50 1996 +0000 + + fixed sorting of the shared file list + + CVS patchset: 334 + CVS date: 1996/02/20 00:12:50 + +commit 8748b30339e7bf9371d857b69df83d4c5e572f6d +Author: root +Date: Mon Feb 19 23:41:46 1996 +0000 + + add %verify() handling + + CVS patchset: 333 + CVS date: 1996/02/19 23:41:46 + +commit 6ff596b90a07350eb5896cc63a217e8bb7fec726 +Author: ewt +Date: Mon Feb 19 23:34:25 1996 +0000 + + 11) removed silly debug message + 2) fixed problem with unarchiving files containing shell globbing characters + + CVS patchset: 332 + CVS date: 1996/02/19 23:34:25 + +commit 89a31f02cd86dad6ac01b81b7506cee79ff85ddd +Author: ewt +Date: Mon Feb 19 23:34:02 1996 +0000 + + 1) added signal blocking and db syncing to help insure integrity + 2) added db locking + + CVS patchset: 331 + CVS date: 1996/02/19 23:34:02 + +commit 32b8c34d634cfcedb8435f9da53b280f20e0d1a5 +Author: ewt +Date: Mon Feb 19 23:33:56 1996 +0000 + + added sync function + + CVS patchset: 330 + CVS date: 1996/02/19 23:33:56 + +commit 6b86d4ce24cd82dd010a67e314370eeecda35b1e +Author: root +Date: Mon Feb 19 23:00:16 1996 +0000 + + use libz instead of gzip + put ARCHIVESIZE in the header + + CVS patchset: 329 + CVS date: 1996/02/19 23:00:16 + +commit b1d827e8d152790c1cc55d76e2e2310ba037ef0e +Author: root +Date: Mon Feb 19 22:52:39 1996 +0000 + + added RPMTAG_ARCHIVESIZE + + CVS patchset: 328 + CVS date: 1996/02/19 22:52:39 + +commit 3ca3620fe37d824a28781fa0562510e761a700ae +Author: root +Date: Mon Feb 19 22:18:30 1996 +0000 + + fix build shit + + CVS patchset: 327 + CVS date: 1996/02/19 22:18:30 + +commit dfc6cc33d24f19ac0477ea1680386e700faffcac +Author: root +Date: Mon Feb 19 22:15:38 1996 +0000 + + shouldn't reference variables pointing into a header after the header has + been freed + + CVS patchset: 326 + CVS date: 1996/02/19 22:15:38 + +commit 7147d0518c9beb434332022d59c969182053ffcc +Author: root +Date: Mon Feb 19 22:01:40 1996 +0000 + + added database locking + + CVS patchset: 325 + CVS date: 1996/02/19 22:01:40 + +commit bc9b266d6883652de9ced673b1527cda79c18ebe +Author: root +Date: Mon Feb 19 21:16:15 1996 +0000 + + catch unbalanced %endifs + + CVS patchset: 324 + CVS date: 1996/02/19 21:16:15 + +commit fd45e25ce9e5309eb8d826cd6bd2a92e1048f3dc +Author: root +Date: Mon Feb 19 17:03:29 1996 +0000 + + make serial number an int32 + + CVS patchset: 323 + CVS date: 1996/02/19 17:03:29 + +commit b581648217713662c57b565f390805c4557fe30e +Author: ewt +Date: Mon Feb 19 16:29:15 1996 +0000 + + shouldn't write to strings that are initialized + + CVS patchset: 322 + CVS date: 1996/02/19 16:29:15 + +commit 8961358412a8583f11161b3f2fa9c6386ebd7b36 +Author: ewt +Date: Mon Feb 19 15:17:56 1996 +0000 + + added verbose querying of links + + CVS patchset: 321 + CVS date: 1996/02/19 15:17:56 + +commit d34604145ceac5276d4a896d2127d8bb36c7f974 +Author: root +Date: Mon Feb 19 15:13:37 1996 +0000 + + added signature.o + + CVS patchset: 320 + CVS date: 1996/02/19 15:13:37 + +commit e3761e244dce3c98157f5d30bbeb4189570e04f4 +Author: ewt +Date: Mon Feb 19 04:52:09 1996 +0000 + + changed sense of a bunch of the functions to fit the rest of rpm + + CVS patchset: 319 + CVS date: 1996/02/19 04:52:09 + +commit c8c0165386a4ecd16d354847c673d7f7b3edba55 +Author: ewt +Date: Mon Feb 19 04:51:12 1996 +0000 + + started rewrite to allow fragment collection, free space reclamation. It + isn't done yet though, and this version is pretty broken + + CVS patchset: 318 + CVS date: 1996/02/19 04:51:12 + +commit 652efd55459bd8c78f5f3cbfac65495f0332e46b +Author: ewt +Date: Mon Feb 19 04:51:12 1996 +0000 + + changed faFree() to return void + + CVS patchset: 317 + CVS date: 1996/02/19 04:51:12 + +commit ca0f8fe5099eb5d5a98df9b488ccdb95a93741fb +Author: ewt +Date: Mon Feb 19 04:50:33 1996 +0000 + + 1) changed sense of rpmdbOpen() + 2) started implementing verbose querying of the file list + + CVS patchset: 316 + CVS date: 1996/02/19 04:50:33 + +commit 21eab129c6d972ec28f85af57c79225ea996be5b +Author: ewt +Date: Mon Feb 19 04:50:15 1996 +0000 + + changed sense of rpmdbOpen + + CVS patchset: 315 + CVS date: 1996/02/19 04:50:15 + +commit 6e136fedd057247b16fea607ef413865d709178b +Author: ewt +Date: Mon Feb 19 04:29:39 1996 +0000 + + no comment :-( + + CVS patchset: 314 + CVS date: 1996/02/19 04:29:39 + +commit 149130ecc155581ea2640cf235b0da512af8c5fe +Author: ewt +Date: Mon Feb 19 04:28:31 1996 +0000 + + 1) silly bug left over from getting rid of mutable flag + 2) getEntry should set pointer to NULL when it returns 0 + + CVS patchset: 313 + CVS date: 1996/02/19 04:28:31 + +commit 3a4c95f8d697616f2520844e46e3c12f0507cc57 +Author: marc +Date: Mon Feb 19 02:37:21 1996 +0000 + + removed signature type macros + + CVS patchset: 312 + CVS date: 1996/02/19 02:37:21 + +commit 6d602a76b25be6b4ee4bb55d1ab5f6e614ddc617 +Author: marc +Date: Mon Feb 19 02:35:29 1996 +0000 + + added pgp signature stuff + + CVS patchset: 311 + CVS date: 1996/02/19 02:35:29 + +commit bcfe51b9782681cdf430d3b7a603d7c57215ef76 +Author: marc +Date: Mon Feb 19 02:34:06 1996 +0000 + + added verify flags + added pgp vars + + CVS patchset: 310 + CVS date: 1996/02/19 02:34:06 + +commit 06cfb946332676c144f4b4444d29bf0d8ad48b6f +Author: marc +Date: Mon Feb 19 02:32:11 1996 +0000 + + Initial revision + + CVS patchset: 309 + CVS date: 1996/02/19 02:32:11 + +commit e6389c6dd5f9678ec3cfa9e3c7aae59be94aa28c +Author: marc +Date: Mon Feb 19 02:27:35 1996 +0000 + + pass a name to openScript() for display purposes + put set -x after setting of all the variable names + + CVS patchset: 308 + CVS date: 1996/02/19 02:27:35 + +commit 84025076e461f81f37c50f8412bace29861ea962 +Author: marc +Date: Mon Feb 19 02:26:47 1996 +0000 + + removed old SOURCE and PATCH macros + + CVS patchset: 307 + CVS date: 1996/02/19 02:26:47 + +commit 43966970f27a175eeccdcb053b96c376a78ac6de +Author: marc +Date: Mon Feb 19 02:24:47 1996 +0000 + + added signature handling + unified final packing stages + added vendor and distrbution to headers + free all those freakin lists in process_filelist()! + start working on %verify() stuff + + CVS patchset: 306 + CVS date: 1996/02/19 02:24:47 + +commit 0202dbf7f037d76c1459c2e7d767b1619c452150 +Author: marc +Date: Mon Feb 19 02:21:05 1996 +0000 + + added signature handling + + CVS patchset: 305 + CVS date: 1996/02/19 02:21:05 + +commit bbd778e9d8d66e0dd636c52e120476389fd8d18c +Author: marc +Date: Mon Feb 19 02:20:21 1996 +0000 + + added stuff for Serial and PGP signatures + + CVS patchset: 304 + CVS date: 1996/02/19 02:20:21 + +commit 6cad74bc6ee37f6aa93e99d774feba9eced2d602 +Author: marc +Date: Mon Feb 19 02:19:18 1996 +0000 + + Initial revision + + CVS patchset: 303 + CVS date: 1996/02/19 02:19:18 + +commit 5a64e734f5bb748af4a6f7234fb3eb5398bcb2f6 +Author: marc +Date: Mon Feb 19 02:18:35 1996 +0000 + + added rpmsignature rpmchecksig + + CVS patchset: 302 + CVS date: 1996/02/19 02:18:35 + +commit c7c8b5d0b36e411610701a5977b70229ca5d33f5 +Author: ewt +Date: Mon Feb 19 01:40:55 1996 +0000 + + tried to help header.c recover from Marc's recent mutilation of it :-) + + CVS patchset: 301 + CVS date: 1996/02/19 01:40:55 + +commit 0840162b4cbdc0e0a5d28580b4e6d4a8fbdc3fee +Author: root +Date: Fri Feb 16 17:37:53 1996 +0000 + + don't allocate 0 bytes! + + CVS patchset: 300 + CVS date: 1996/02/16 17:37:53 + +commit dad54fe3956428f416606e95b30e759fc73d418d +Author: root +Date: Fri Feb 16 17:26:43 1996 +0000 + + fix handling of NULL newname/subname in lookup_package() + + CVS patchset: 299 + CVS date: 1996/02/16 17:26:43 + +commit d0040747b059fa689774d5e8dee3cb09d1b856be +Author: root +Date: Fri Feb 16 17:26:05 1996 +0000 + + changed error handling in build() + + CVS patchset: 298 + CVS date: 1996/02/16 17:26:05 + +commit 7ac9bde7638d5fdc413adc69a1a69f31d9eb2718 +Author: root +Date: Fri Feb 16 05:55:17 1996 +0000 + + strip trailing whitespace off %part args + add handling for specfiles that start with "%package subname" + + CVS patchset: 297 + CVS date: 1996/02/16 05:55:17 + +commit b6c44dc2845a4b91b3c67401bd9b65a646032a9f +Author: root +Date: Fri Feb 16 05:37:08 1996 +0000 + + removed mmapHeader() + + CVS patchset: 296 + CVS date: 1996/02/16 05:37:08 + +commit f974adb86c16e42547054fe231b0269e92bdee2a +Author: root +Date: Fri Feb 16 05:35:53 1996 +0000 + + set verbosity properly for building + + CVS patchset: 295 + CVS date: 1996/02/16 05:35:53 + +commit 3f7ef2aa1f6356dd7b710c00fe20dc4da94d89dc +Author: root +Date: Fri Feb 16 05:34:22 1996 +0000 + + added getVerbosity() + + CVS patchset: 294 + CVS date: 1996/02/16 05:34:22 + +commit 4dbff32aece57dd3a48adbf6f20b13d6a5421bf6 +Author: root +Date: Thu Feb 15 23:22:49 1996 +0000 + + fixed the sizeofHeader() + fixed unloadHeader() + + CVS patchset: 293 + CVS date: 1996/02/15 23:22:49 + +commit d520eb7905baa0a6ea6279e549104a87cd9aefcf +Author: root +Date: Thu Feb 15 23:15:51 1996 +0000 + + fixed return from unloadHeader() + + CVS patchset: 292 + CVS date: 1996/02/15 23:15:51 + +commit 3e32f9e73a9f088f9513e71bd1335bbe8ebbb533 +Author: root +Date: Thu Feb 15 23:13:08 1996 +0000 + + make load/unload sort like read/write + fix type correction in getEntry() + + CVS patchset: 291 + CVS date: 1996/02/15 23:13:08 + +commit 67a5d89bbec226f70a71aeb7a0bc5ca33a96360a +Author: root +Date: Thu Feb 15 22:55:44 1996 +0000 + + copy specfile name + + CVS patchset: 290 + CVS date: 1996/02/15 22:55:44 + +commit d396a858d132b6099afd5a2a990bb8366aa352c4 +Author: root +Date: Thu Feb 15 22:44:46 1996 +0000 + + do not allow STRING_TYPE with count != 1 + move index/data sorting into copyHeader() + cause sizeofHeader() tp call copyHeader() to sort index/data + have writeHeader() call sizeofHeader() to sort index/data + The net effect is that if you call writeHeader() or sizeofHeader() + your Header is actually sorted and replaced with a new copy. + + CVS patchset: 289 + CVS date: 1996/02/15 22:44:46 + +commit 1efa980d28535a131268521f61851b09e98194f6 +Author: root +Date: Thu Feb 15 22:44:04 1996 +0000 + + change to test new copyHeader code + + CVS patchset: 288 + CVS date: 1996/02/15 22:44:04 + +commit c3f2ff17405a6c2953d0bf66043068d755e4f784 +Author: ewt +Date: Thu Feb 15 21:08:48 1996 +0000 + + marks replaced files during installs + + CVS patchset: 287 + CVS date: 1996/02/15 21:08:48 + +commit 77c2db950c16591f14d607170b755aec14d77869 +Author: ewt +Date: Thu Feb 15 21:08:41 1996 +0000 + + added rpmdbUpdateRecord() + + CVS patchset: 286 + CVS date: 1996/02/15 21:08:41 + +commit 512d9fb694e7d793027be106a418d599933d586b +Author: ewt +Date: Thu Feb 15 21:08:23 1996 +0000 + + 1) added rpmdbUpdate() + 2) changed sense of rpmdbRemove() + + CVS patchset: 285 + CVS date: 1996/02/15 21:08:23 + +commit 878cebe9470b0bfd8e4302e2cf304cc7d52f0e38 +Author: ewt +Date: Thu Feb 15 21:08:09 1996 +0000 + + fixed bug which resulted in shared files getting backed up + + CVS patchset: 284 + CVS date: 1996/02/15 21:08:09 + +commit 7d7fc550f78235cae0ba4f8dae98cd40e35dfb8a +Author: root +Date: Thu Feb 15 19:32:03 1996 +0000 + + fixed freSpec() call + + CVS patchset: 283 + CVS date: 1996/02/15 19:32:03 + +commit 2b4e37a993501d16ea94aa52817c45c20f46d5a5 +Author: root +Date: Thu Feb 15 19:21:01 1996 +0000 + + fixed dereference problem + + CVS patchset: 282 + CVS date: 1996/02/15 19:21:01 + +commit 042dc300f0727108a57c305ae2d46692475fde1e +Author: root +Date: Thu Feb 15 16:22:32 1996 +0000 + + remove a few stray statics + init build_subdir to . + + CVS patchset: 281 + CVS date: 1996/02/15 16:22:32 + +commit 4ffe1c93696296120d1536a77dcf8d6aabca42ca +Author: root +Date: Thu Feb 15 16:21:48 1996 +0000 + + free the spec file when done + + CVS patchset: 280 + CVS date: 1996/02/15 16:21:48 + +commit 030a88838a5c2ed2d4e0807edb3a01c96557deb5 +Author: ewt +Date: Thu Feb 15 00:10:29 1996 +0000 + + don't open the database O_EXCL - we need to use locking instead! + + CVS patchset: 279 + CVS date: 1996/02/15 00:10:29 + +commit ea3e7dcddb02ad07b57d1456480a9abd5c9f0f8c +Author: ewt +Date: Thu Feb 15 00:10:15 1996 +0000 + + don't open files O_EXCL + + CVS patchset: 278 + CVS date: 1996/02/15 00:10:15 + +commit 1ec84a6f6389f29d73c58b62e5b3e7a2d324cf15 +Author: ewt +Date: Wed Feb 14 23:21:02 1996 +0000 + + added flush after printing percentages + + CVS patchset: 277 + CVS date: 1996/02/14 23:21:02 + +commit 9297a2f698411e02ab587f4020a221af0fba3083 +Author: root +Date: Wed Feb 14 22:31:37 1996 +0000 + + doRmSource should return something + + CVS patchset: 276 + CVS date: 1996/02/14 22:31:37 + +commit 90f82529517f8db18d32cd6c2d8b2036613a54c1 +Author: ewt +Date: Wed Feb 14 22:20:08 1996 +0000 + + checks for directory existence before trying to create one + + CVS patchset: 275 + CVS date: 1996/02/14 22:20:08 + +commit 84b62fd459ba7456b02533c8156ab480e6342b88 +Author: ewt +Date: Wed Feb 14 21:56:29 1996 +0000 + + fixed to installArchive() + 1) detect dead child correctly + 2) handle all files when read() from pipe returns many of them + + CVS patchset: 274 + CVS date: 1996/02/14 21:56:29 + +commit 86e09a97bc60635f12fb92b60c47e6751a313480 +Author: ewt +Date: Wed Feb 14 21:26:21 1996 +0000 + + handles reinstallation of a binary package + + CVS patchset: 273 + CVS date: 1996/02/14 21:26:21 + +commit 6b7dcf1cd43381685f58ddb561150a0d9111d409 +Author: ewt +Date: Wed Feb 14 20:56:22 1996 +0000 + + accepts package specifications like name-version, name-version-release + + CVS patchset: 272 + CVS date: 1996/02/14 20:56:22 + +commit 865692e3c2c7e2833797c70732a47c8e818d4a5c +Author: root +Date: Wed Feb 14 20:18:41 1996 +0000 + + fixed -c in %setup + + CVS patchset: 271 + CVS date: 1996/02/14 20:18:41 + +commit 0bf5f03d1df678a43007e61d05a60fe74147a9c7 +Author: ewt +Date: Wed Feb 14 20:10:42 1996 +0000 + + added --rebuild + + CVS patchset: 270 + CVS date: 1996/02/14 20:10:42 + +commit 9b940881d1e6159fa28d58d1d039aafaed75f0c3 +Author: ewt +Date: Wed Feb 14 20:09:14 1996 +0000 + + added ability to install a source package and find the spec file name + + CVS patchset: 269 + CVS date: 1996/02/14 20:09:14 + +commit 51139caf7d74533530b391b78c6f66816c116ad7 +Author: root +Date: Wed Feb 14 20:07:23 1996 +0000 + + added RPMBUILD_RMSOURCE + , + + CVS patchset: 268 + CVS date: 1996/02/14 20:07:23 + +commit 4e85ef055e85ab2bb9ce0e63f51c3c5379a40988 +Author: root +Date: Wed Feb 14 20:07:09 1996 +0000 + + added doRmSource() + + CVS patchset: 267 + CVS date: 1996/02/14 20:07:09 + +commit b9c9a122863081e75decc53c90747512d7cc2d4f +Author: root +Date: Wed Feb 14 17:55:38 1996 +0000 + + changed wayward SPEC to SPECS + + CVS patchset: 266 + CVS date: 1996/02/14 17:55:38 + +commit ca4a7f8132ecb5444b0988c8c46e9dd8a8b4eeef +Author: root +Date: Wed Feb 14 17:55:28 1996 +0000 + + added support for old packages, lots of bug fixes + + CVS patchset: 265 + CVS date: 1996/02/14 17:55:28 + +commit 2a9f4dea652996196c6e83c0ed4d5cc645b36027 +Author: root +Date: Wed Feb 14 17:54:37 1996 +0000 + + Understands source packages + + CVS patchset: 264 + CVS date: 1996/02/14 17:54:37 + +commit 1ac992f934be5e3fc0aee78895a5283b7ec68be1 +Author: root +Date: Wed Feb 14 17:54:30 1996 +0000 + + installs rpmerr.h + + CVS patchset: 263 + CVS date: 1996/02/14 17:54:30 + +commit f0f7186677c445d1135d732854f18ac608c31d1c +Author: root +Date: Wed Feb 14 16:56:02 1996 +0000 + + error for unknown icon type + don't add empty entries for sources and patches + + CVS patchset: 262 + CVS date: 1996/02/14 16:56:02 + +commit 103d4fa9f0ada168a667b5172af80cd2de058538 +Author: root +Date: Wed Feb 14 16:32:46 1996 +0000 + + *** empty log message *** + + CVS patchset: 261 + CVS date: 1996/02/14 16:32:46 + +commit 5743df5fb6e6ad641b748f331f5e7fbd74e5ac57 +Author: root +Date: Wed Feb 14 16:22:50 1996 +0000 + + install rpmconvert, statically link with libc + + CVS patchset: 260 + CVS date: 1996/02/14 16:22:50 + +commit 80bf2608f24b007f17507e8ba93abbecc25d692a +Author: root +Date: Wed Feb 14 16:18:12 1996 +0000 + + added install rule + + CVS patchset: 259 + CVS date: 1996/02/14 16:18:12 + +commit 9da1bde9e6022eff490c3971b74d25129413e6bd +Author: root +Date: Wed Feb 14 16:12:32 1996 +0000 + + fixed for packages w/o any groups + + CVS patchset: 258 + CVS date: 1996/02/14 16:12:32 + +commit 0a1c831d2d0c8513b219c175d38f4d1923572dbf +Author: root +Date: Wed Feb 14 16:11:37 1996 +0000 + + turned on gif support during db conversion + + CVS patchset: 257 + CVS date: 1996/02/14 16:11:37 + +commit c1cc9bf1f2f66087193db55501cf97aa84416dc4 +Author: ewt +Date: Tue Jan 30 17:35:13 1996 +0000 + + won't leave 0.0 files around which are SUID if they're supposed to be + owned by someone else + + CVS patchset: 256 + CVS date: 1996/01/30 17:35:13 + +commit d952a38c432f5f5178a1658015ff8be37b9a6349 +Author: ewt +Date: Tue Jan 30 16:19:22 1996 +0000 + + Initial revision + + CVS patchset: 255 + CVS date: 1996/01/30 16:19:22 + +commit 6481fa6a78a06e39f44c6a6e49ab460814d11fb3 +Author: ewt +Date: Tue Jan 30 04:14:53 1996 +0000 + + changed where make clean happens when creating an archive + + CVS patchset: 254 + CVS date: 1996/01/30 04:14:53 + +commit 00a51932b9937970a4ef1c4aafdee90bc700f1a3 +Author: ewt +Date: Tue Jan 30 04:13:17 1996 +0000 + + fixed alpha arch detection + + CVS patchset: 253 + CVS date: 1996/01/30 04:13:17 + +commit 5764e29cdc5b7416c8b5f557ac69e945371fdbae +Author: ewt +Date: Tue Jan 30 04:12:58 1996 +0000 + + fixed problem which could result in strdup(NULL) + + CVS patchset: 252 + CVS date: 1996/01/30 04:12:58 + +commit 881145f547e490ee85dba04c2a57c3543a60f357 +Author: ewt +Date: Tue Jan 30 03:50:28 1996 +0000 + + reads in rpm rc files at startup + + CVS patchset: 251 + CVS date: 1996/01/30 03:50:28 + +commit b752738dddaa98353a6005b101a2b201af15b945 +Author: ewt +Date: Tue Jan 30 03:50:17 1996 +0000 + + made rpm depend on build/libbuild.a + + CVS patchset: 250 + CVS date: 1996/01/30 03:50:17 + +commit a7d5497818c81a5d30301293c9276289f9ddf8f4 +Author: ewt +Date: Tue Jan 30 03:49:37 1996 +0000 + + removed reference to var.h (which disappeared) + + CVS patchset: 249 + CVS date: 1996/01/30 03:49:37 + +commit e1c34e4c20f035dfd83ee7c5237b2c663ddc3949 +Author: ewt +Date: Tue Jan 30 03:49:00 1996 +0000 + + 1) removed reference to var.h (which disappeared) + 2) when source files aren't found, it prints the complete path it was + looking for + + CVS patchset: 248 + CVS date: 1996/01/30 03:49:00 + +commit de4eb379d83268b4713b9ebaaccfd96a41ce5fe0 +Author: ewt +Date: Tue Jan 30 03:47:30 1996 +0000 + + added RPMVAR entries and prototypes + + CVS patchset: 247 + CVS date: 1996/01/30 03:47:30 + +commit 403095d4027bf72f7e5e6e46db360edf18f33317 +Author: ewt +Date: Tue Jan 30 03:46:46 1996 +0000 + + completely rewritten for performance, ease of use + + CVS patchset: 246 + CVS date: 1996/01/30 03:46:46 + +commit a6b200db9947ab3d86be16c5739bf66e3d194116 +Author: ewt +Date: Tue Jan 30 03:46:32 1996 +0000 + + added rpmrc.o + + CVS patchset: 245 + CVS date: 1996/01/30 03:46:32 + +commit d8b2c60d4382f48bd76c79afa5294223e9099789 +Author: ewt +Date: Tue Jan 30 02:16:47 1996 +0000 + + 1) places new packages in RPM_RPM_DIR/arch/file.rpm + 2) cleaned up some warnings that were bugging me + + CVS patchset: 244 + CVS date: 1996/01/30 02:16:47 + +commit 37ee0cf5e2ff9c1be06628b22dfa1c13a4228cb0 +Author: ewt +Date: Mon Jan 29 23:27:12 1996 +0000 + + adjusted config file checking to adjust for the prefix + + CVS patchset: 243 + CVS date: 1996/01/29 23:27:12 + +commit 41f28319235dd4ad8d832afbf511b7b517249313 +Author: ewt +Date: Mon Jan 29 23:26:45 1996 +0000 + + fixed check of --root + + CVS patchset: 242 + CVS date: 1996/01/29 23:26:45 + +commit 6b561b5d1bf158d8bfe34bb3e5ddd956588c3b3d +Author: marc +Date: Mon Jan 29 20:09:49 1996 +0000 + + write rpms to proper directories (not arch sensitive though) + + CVS patchset: 241 + CVS date: 1996/01/29 20:09:49 + +commit f50ac27315c9929d002c881770dacfd0bb8e6ba2 +Author: marc +Date: Mon Jan 29 19:48:54 1996 +0000 + + added RPMVAR_RPMDIR, RPMVAR_SRPMDIR + + CVS patchset: 240 + CVS date: 1996/01/29 19:48:54 + +commit a8abed4bc4890502aed1443a77540f36ac489a0e +Author: marc +Date: Mon Jan 29 19:42:29 1996 +0000 + + change to use RPMBUILD_SWEEP + + CVS patchset: 239 + CVS date: 1996/01/29 19:42:29 + +commit ec5a833d250530bd8b3cde3ce3fdd9a66ea4551c +Author: marc +Date: Mon Jan 29 19:42:29 1996 +0000 + + add static to doSweep() + + CVS patchset: 238 + CVS date: 1996/01/29 19:42:29 + +commit efcea4901c0a1eafbc2f8ecd60eb54598f8c9a91 +Author: ewt +Date: Mon Jan 29 19:37:59 1996 +0000 + + 1) should handle config files well + 2) created directories should get umask independent permissions + 3) fixed notification handling + 4) creates file states list, install time + + CVS patchset: 237 + CVS date: 1996/01/29 19:37:59 + +commit d000ba9b49ab4e5c2a3feb946570f56efbd62aba +Author: ewt +Date: Mon Jan 29 19:37:28 1996 +0000 + + New packages have forward sorted file lists - uninstalls should traverse + such a list backwards to give rmdir() a fighting chance + + CVS patchset: 236 + CVS date: 1996/01/29 19:37:28 + +commit 313a9e8a30f425d5d392e074c82a367fc9f2a318 +Author: ewt +Date: Mon Jan 29 19:36:49 1996 +0000 + + prints install date, handles missing build date + + CVS patchset: 235 + CVS date: 1996/01/29 19:36:49 + +commit bdc12d835b0f0baeb69232bced62ae77804067fd +Author: ewt +Date: Mon Jan 29 19:34:58 1996 +0000 + + changed version to 2.0b + + CVS patchset: 234 + CVS date: 1996/01/29 19:34:58 + +commit e542d237153bdae116863cd94cdd47ece4296971 +Author: ewt +Date: Mon Jan 29 19:31:05 1996 +0000 + + reversed the order of the filelist during reading of old style packages + + CVS patchset: 233 + CVS date: 1996/01/29 19:31:05 + +commit ea7daa21f8fe86fdcb01a0c49ba421fd4333dec1 +Author: ewt +Date: Mon Jan 29 19:30:49 1996 +0000 + + reversed the order of the filelist during conversion + + CVS patchset: 232 + CVS date: 1996/01/29 19:30:49 + +commit 6cd793c2c23990712dd9373d04fda869aa773d34 +Author: marc +Date: Mon Jan 29 19:14:54 1996 +0000 + + add RPMBUILD_CLEAN support + + CVS patchset: 231 + CVS date: 1996/01/29 19:14:54 + +commit 71bad57b4dfad7a1014dff5e7f5a899b7eb112e5 +Author: marc +Date: Mon Jan 29 19:14:31 1996 +0000 + + use RPMBUILD_SWEEP + + CVS patchset: 230 + CVS date: 1996/01/29 19:14:31 + +commit 87fbb7842d38ba7b52290cf8d8dd619ba96bc5ad +Author: marc +Date: Mon Jan 29 19:06:33 1996 +0000 + + removed -m486 + + CVS patchset: 229 + CVS date: 1996/01/29 19:06:33 + +commit 208e413b0e2277225057a10ccc38d10d28d8b5af +Author: marc +Date: Mon Jan 29 03:33:06 1996 +0000 + + fix icon handling + remove spec file after source packaging + handle special %doc macro + + CVS patchset: 228 + CVS date: 1996/01/29 03:33:06 + +commit 82a0ba550fd5a494a7f3241c100610d2868d49a5 +Author: marc +Date: Mon Jan 29 03:32:22 1996 +0000 + + added RPM_PACKAGE_NAME var to all scripts + do special %doc install after %install + + CVS patchset: 227 + CVS date: 1996/01/29 03:32:22 + +commit 6e4421c23ff2f67f8ae527b7fe45088493a527e7 +Author: marc +Date: Mon Jan 29 03:31:39 1996 +0000 + + added parsing for special %doc macros + + CVS patchset: 226 + CVS date: 1996/01/29 03:31:39 + +commit 1836c915e8c2fba77c3ded8de4ec59ddaf4d143c +Author: marc +Date: Mon Jan 29 03:30:46 1996 +0000 + + added doc section to spec file for special %doc macro + + CVS patchset: 225 + CVS date: 1996/01/29 03:30:46 + +commit 9554a0f093fdbaad657fd19ab396aea2c6e90cc2 +Author: marc +Date: Mon Jan 29 03:30:25 1996 +0000 + + remove rpmbuild + + CVS patchset: 224 + CVS date: 1996/01/29 03:30:25 + +commit 8d2dea9accf22c91ba10c0d06f0e0c1fc260b202 +Author: ewt +Date: Sun Jan 28 21:38:43 1996 +0000 + + added building options to RPM, tightened error checking during argument + parsing a bit + + CVS patchset: 223 + CVS date: 1996/01/28 21:38:43 + +commit 769a70fab52cf894eb4ee28fa561d5d60c81ce17 +Author: ewt +Date: Sun Jan 28 19:42:04 1996 +0000 + + implemented --hash, --percent + + CVS patchset: 222 + CVS date: 1996/01/28 19:42:04 + +commit a8900dfbd022316a88888ffdd1b3882708bcc641 +Author: root +Date: Mon Jan 22 21:13:55 1996 +0000 + + fixed some bad frees + + CVS patchset: 221 + CVS date: 1996/01/22 21:13:55 + +commit ae492679ac7f4a612978bb6a8b648918636d35e7 +Author: root +Date: Mon Jan 22 21:13:27 1996 +0000 + + changed parameters to install.c to allow for a notification function + + CVS patchset: 220 + CVS date: 1996/01/22 21:13:27 + +commit e1922a0bb150f5fb9da63085ea0d2705f0c37faf +Author: root +Date: Mon Jan 22 21:13:12 1996 +0000 + + started work on file sharing, added --hash and --percent + + CVS patchset: 219 + CVS date: 1996/01/22 21:13:12 + +commit 5584fe2e7102e88465e442ffa0fd78c22d47535d +Author: root +Date: Mon Jan 22 21:12:55 1996 +0000 + + added --percent, --hash + + CVS patchset: 218 + CVS date: 1996/01/22 21:12:55 + +commit 1bed3119b0f95534e4d084ffb7c52a451e84766c +Author: marc +Date: Wed Jan 17 18:17:50 1996 +0000 + + fixed broken SOURCERPM entry + add sources and patches to source rpm header + + CVS patchset: 217 + CVS date: 1996/01/17 18:17:50 + +commit f269ab9be601b6aec5a4b3511f46a0ad72281633 +Author: marc +Date: Wed Jan 17 18:17:01 1996 +0000 + + keep a count of sources and patches + ., + + CVS patchset: 216 + CVS date: 1996/01/17 18:17:01 + +commit dd58084b7e4335a3f555ad9adbb072e764b25681 +Author: marc +Date: Wed Jan 17 18:16:46 1996 +0000 + + count sources and patches + + CVS patchset: 215 + CVS date: 1996/01/17 18:16:46 + +commit 155618b2fadc6cb52faa7146d5e6b240b14456f9 +Author: marc +Date: Wed Jan 17 17:47:28 1996 +0000 + + added globbing in file list + + CVS patchset: 214 + CVS date: 1996/01/17 17:47:28 + +commit 6d709dd98bf04dda9e982f855d9090d1316e5f61 +Author: ewt +Date: Mon Jan 15 00:03:16 1996 +0000 + + removed "test" target, removed convertdb.c from librpm.a + + CVS patchset: 213 + CVS date: 1996/01/15 00:03:16 + +commit 4dd52c744c55f752218fabae1d1bf514f0a8a4c5 +Author: ewt +Date: Mon Jan 15 00:02:17 1996 +0000 + + turned off efence as a default (we shouldn't require it for shipped versions) + + CVS patchset: 212 + CVS date: 1996/01/15 00:02:17 + +commit 4d395ecd187923f848eea7ee184e6330f2f5c0ac +Author: ewt +Date: Mon Jan 15 00:01:43 1996 +0000 + + moved version number to Makefile, added "archive" target + + CVS patchset: 211 + CVS date: 1996/01/15 00:01:43 + +commit c33544a8ef90abbcceb87603a3447a1ea8906cdc +Author: ewt +Date: Mon Jan 15 00:01:31 1996 +0000 + + changed to take VERSION field from the Makefile + + CVS patchset: 210 + CVS date: 1996/01/15 00:01:31 + +commit 530f9de331b410851e066f02b1a714c2037ef710 +Author: ewt +Date: Mon Jan 15 00:01:03 1996 +0000 + + fixed a typo + + CVS patchset: 209 + CVS date: 1996/01/15 00:01:03 + +commit a856972cc62dd84f7c6061625f2286d68bdadf6f +Author: ewt +Date: Sun Jan 14 23:07:54 1996 +0000 + + modified to be standalone program + + CVS patchset: 208 + CVS date: 1996/01/14 23:07:54 + +commit 42ecff8eb985edba41f114c11d1df89329779c59 +Author: ewt +Date: Sun Jan 14 19:32:17 1996 +0000 + + 1) checks for pacakges already installed, but doesn't handle overrides + correctly + 2) sets file ownderships by symbolic name when they are available + 3) creates directories when needed + + CVS patchset: 207 + CVS date: 1996/01/14 19:32:17 + +commit 6447dde417116b70f00150434a888b841c4e796f +Author: ewt +Date: Sun Jan 14 19:31:50 1996 +0000 + + fixed error generated for bad magic + + CVS patchset: 206 + CVS date: 1996/01/14 19:31:50 + +commit 749b978d8b9a7282b695c52cf8f34ae13c0c4963 +Author: ewt +Date: Sun Jan 14 19:31:10 1996 +0000 + + removed (mmapping isn't used anymore) + added strings for RPMTAG_FILEUSERNAME RPMTAG_FILEGROUPNAME RPMTAG_EXCLUDE + RPMTAG_EXCLUSIVE RPMTAG_ICON RPMTAG_SOURCERPM + + CVS patchset: 205 + CVS date: 1996/01/14 19:31:10 + +commit d60028fa99b78c901d269623eeed0ef91120197b +Author: ewt +Date: Sat Jan 13 22:02:24 1996 +0000 + + added installFlags, changed error message + + CVS patchset: 204 + CVS date: 1996/01/13 22:02:24 + +commit 521eef02d232229d1c3f847abf8ef020bea5a50d +Author: ewt +Date: Sat Jan 13 22:00:57 1996 +0000 + + fixed detection when packages aren't opened correctly, prints source + package names + + CVS patchset: 203 + CVS date: 1996/01/13 22:00:57 + +commit 29928e45703776a065cf9a88db0287fa727b7d2a +Author: ewt +Date: Sat Jan 13 22:00:11 1996 +0000 + + changed --force for installs, added --replacepkgs --replacefiles + + CVS patchset: 202 + CVS date: 1996/01/13 22:00:11 + +commit b18259e21dce0c137a6c2ff99a63ea739e82e10e +Author: marc +Date: Sat Jan 13 00:48:51 1996 +0000 + + added RPMFILE_STATE_REPLACED + + CVS patchset: 201 + CVS date: 1996/01/13 00:48:51 + +commit 1c02bb1d89aa530e68a8c8f81315428b7f7e880e +Author: ewt +Date: Sat Jan 13 00:18:06 1996 +0000 + + added installFlags to prototype of install function + + CVS patchset: 200 + CVS date: 1996/01/13 00:18:06 + +commit 0d9d12120ae9a6a851ade0c0b75a018989ff21b9 +Author: marc +Date: Fri Jan 12 23:46:47 1996 +0000 + + added RPMTAG_SOURCERPM to binary packages + + CVS patchset: 199 + CVS date: 1996/01/12 23:46:47 + +commit 2244ce669603172a844511be6c17c33bc7406129 +Author: marc +Date: Fri Jan 12 17:03:48 1996 +0000 + + . filelists are now sorted (as opposed to reverse-sorted) + + CVS patchset: 198 + CVS date: 1996/01/12 17:03:48 + +commit 0752fc3951cd41e75f086cca2f7615470fb1dcd0 +Author: marc +Date: Fri Jan 12 07:31:41 1996 +0000 + + added BUILDHOST + do %docdir, and default doc directories + + CVS patchset: 197 + CVS date: 1996/01/12 07:31:41 + +commit 76d811cc328f638fbe26e794904bc271c9b51769 +Author: marc +Date: Fri Jan 12 07:31:04 1996 +0000 + + add support for multi-line descriptions + + CVS patchset: 196 + CVS date: 1996/01/12 07:31:04 + +commit 104702f3f4cbe04081e1c6cf7d6ba4867e9948cb +Author: marc +Date: Fri Jan 12 02:48:35 1996 +0000 + + added RPMTAG_OS, RPMTAG_ARCH + reverse sort the file list + + CVS patchset: 195 + CVS date: 1996/01/12 02:48:35 + +commit 01d5bdc5955e2065bc7fabf94dc2cc982a1b5267 +Author: marc +Date: Wed Jan 10 17:05:40 1996 +0000 + + fixed RPM-HOWTO URL + + CVS patchset: 194 + CVS date: 1996/01/10 17:05:40 + +commit bda14ac0f4cb9753ba794e63337717b11018ceaa +Author: marc +Date: Wed Jan 10 17:03:08 1996 +0000 + + Initial revision + + CVS patchset: 193 + CVS date: 1996/01/10 17:03:08 + +commit 8b67cf70a34ce5e896bdc362fcf913febd897d3a +Author: marc +Date: Wed Jan 10 16:57:58 1996 +0000 + + added --replace* options + + CVS patchset: 192 + CVS date: 1996/01/10 16:57:58 + +commit a178727eb8c4f4d99be22dac376dcce37a3893a0 +Author: marc +Date: Tue Jan 9 23:54:35 1996 +0000 + + Initial revision + + CVS patchset: 191 + CVS date: 1996/01/09 23:54:35 + +commit 8d3a074f66cf2c72aca4649950dc3b41d431987d +Author: marc +Date: Tue Jan 9 23:41:35 1996 +0000 + + added SIZE tag + try to determine type of icon, and file in header under GIF, XPM, or ICON + + CVS patchset: 190 + CVS date: 1996/01/09 23:41:35 + +commit 0786ba9b7a3c35b579192924d71e7276ec9134bd +Author: ewt +Date: Tue Jan 9 21:51:53 1996 +0000 + + when a db doesn't exist, try to create it + + CVS patchset: 189 + CVS date: 1996/01/09 21:51:53 + +commit 5a289cef0c3e452296965e540dc12a941b038148 +Author: ewt +Date: Tue Jan 9 21:51:07 1996 +0000 + + removed extra error messages + + CVS patchset: 188 + CVS date: 1996/01/09 21:51:07 + +commit 15a0018629880ffd2677543f631e01f9a241c543 +Author: ewt +Date: Tue Jan 9 21:50:54 1996 +0000 + + fixed getScript() + + CVS patchset: 187 + CVS date: 1996/01/09 21:50:54 + +commit c6dfde414fb1bea071b6cc0b9d8dfeaaa1a6b995 +Author: ewt +Date: Tue Jan 9 21:50:43 1996 +0000 + + fixed detection of errors on open + + CVS patchset: 186 + CVS date: 1996/01/09 21:50:43 + +commit eb15ccd3be058f1dbb9653898e636ed23e4f8726 +Author: ewt +Date: Tue Jan 9 21:50:22 1996 +0000 + + added -lgz which marc seems to have removed + + CVS patchset: 185 + CVS date: 1996/01/09 21:50:22 + +commit a6c129e54e1e34f3a1019088f76fb06f3888f2de +Author: ewt +Date: Tue Jan 9 21:49:40 1996 +0000 + + removed extraneous error message + + CVS patchset: 184 + CVS date: 1996/01/09 21:49:40 + +commit b9b5ef9c331acd41b5e3d6048dd51154fe9ee9aa +Author: ewt +Date: Tue Jan 9 16:59:16 1996 +0000 + + removed extranous printf() (which happened to be causing a seg fault) + + CVS patchset: 183 + CVS date: 1996/01/09 16:59:16 + +commit 7e28f8ace3576f44eab94d462095db59a5a014c2 +Author: marc +Date: Tue Jan 9 16:28:15 1996 +0000 + + removed INSTALLTIME frmo rpms + added FILEUSERNAME, FILEGROUPNAME + + CVS patchset: 182 + CVS date: 1996/01/09 16:28:15 + +commit a9ec932bda7447c28fc69366ba0fc907de049c19 +Author: marc +Date: Mon Jan 8 23:46:08 1996 +0000 + + removed -lgdbm -lgz + + CVS patchset: 181 + CVS date: 1996/01/08 23:46:08 + +commit db89d2cbfda5620686343748175c0feb7d9f2f5a +Author: root +Date: Mon Jan 8 21:28:20 1996 +0000 + + fixed problems with --root + + CVS patchset: 180 + CVS date: 1996/01/08 21:28:20 + +commit 735ce6fc9971be392606504af22df5dc10dc4b5d +Author: ewt +Date: Mon Jan 8 20:21:22 1996 +0000 + + handles config files, directories correctly + + CVS patchset: 179 + CVS date: 1996/01/08 20:21:22 + +commit e0208694bdd21c6374243875079fb8a86a18d0e0 +Author: ewt +Date: Mon Jan 8 19:44:29 1996 +0000 + + Fixed handling of buildTime for 64 bit time_t + Don't open database when querying package files + + CVS patchset: 178 + CVS date: 1996/01/08 19:44:29 + +commit 6ca62ee7d0b168125738901b8c700d890e3e4135 +Author: ewt +Date: Mon Jan 8 19:31:44 1996 +0000 + + Initial revision + + CVS patchset: 177 + CVS date: 1996/01/08 19:31:44 + +commit bd01c5d1edef5d08625b7893136daf961d0dfce5 +Author: ewt +Date: Mon Jan 8 19:21:55 1996 +0000 + + wrote doInstall() + + CVS patchset: 176 + CVS date: 1996/01/08 19:21:55 + +commit 88b6fc3f3ab11da84f600b970bd7a13e154aee23 +Author: ewt +Date: Mon Jan 8 19:21:37 1996 +0000 + + added -lgz to libraries list + + CVS patchset: 175 + CVS date: 1996/01/08 19:21:37 + +commit 32a5b3bbc3189e3cfad8f2d29f9d8a65b26744a1 +Author: ewt +Date: Mon Jan 8 19:21:11 1996 +0000 + + changed default prefix to / rather then empty + added prefix to doInstall + + CVS patchset: 174 + CVS date: 1996/01/08 19:21:11 + +commit 423c649c6839c7848efca83a086241e20dd5458f +Author: ewt +Date: Mon Jan 8 19:20:45 1996 +0000 + + added install.o + + CVS patchset: 173 + CVS date: 1996/01/08 19:20:45 + +commit c16c83dffc37ba40dccf446417276f78a772af18 +Author: ewt +Date: Mon Jan 8 19:20:17 1996 +0000 + + Initial revision + + CVS patchset: 172 + CVS date: 1996/01/08 19:20:17 + +commit 077c3bb502fd66892dad9af0a6cb5d34e3f337f3 +Author: ewt +Date: Mon Jan 8 19:19:53 1996 +0000 + + handles shared files - doesn't handle config files correctly yet + + CVS patchset: 171 + CVS date: 1996/01/08 19:19:53 + +commit 35d9f6ca170c5ce371337048870d5454277b678e +Author: ewt +Date: Mon Jan 8 19:19:12 1996 +0000 + + added rpmdbAdd() + + CVS patchset: 170 + CVS date: 1996/01/08 19:19:12 + +commit 2717f7d97991fe5c4fa7ccd07e9c33b00429a240 +Author: ewt +Date: Mon Jan 8 19:18:50 1996 +0000 + + added a line of documentation + + CVS patchset: 169 + CVS date: 1996/01/08 19:18:50 + +commit dfffc8c9ef9c125aa9fa9f928454176d9cf1dc4a +Author: ewt +Date: Mon Jan 8 19:18:14 1996 +0000 + + uses rpmdbAdd function rather then duplicating it + converts pre/post uninstall scripts + + CVS patchset: 168 + CVS date: 1996/01/08 19:18:14 + +commit 65377cb3040638a9e0ac083a0bdbf90a3516d9ae +Author: ewt +Date: Mon Jan 8 19:17:43 1996 +0000 + + saves pre and post install and uninstall scripts from old style packages + + CVS patchset: 167 + CVS date: 1996/01/08 19:17:43 + +commit 6175e290ecbc138f89599f3eb9596caad1a4d75d +Author: ewt +Date: Mon Jan 8 19:17:22 1996 +0000 + + add isDebug() function + + CVS patchset: 166 + CVS date: 1996/01/08 19:17:22 + +commit b696bb30932f309838bc67f6bd22b755ef41af79 +Author: ewt +Date: Mon Jan 8 19:16:46 1996 +0000 + + added support for retrieving pre/post uninstalls from database + + CVS patchset: 165 + CVS date: 1996/01/08 19:16:46 + +commit 5dbd3e85b0af783997fffdfcfdd6405a8ed4cd08 +Author: ewt +Date: Mon Jan 8 19:15:54 1996 +0000 + + added support for pre/post install and uninstall scripts, fixed + extraction of buildDate from spec + + CVS patchset: 164 + CVS date: 1996/01/08 19:15:54 + +commit 89381ecafa8c3c79470169e51ac81126beb41d58 +Author: ewt +Date: Mon Jan 8 19:15:22 1996 +0000 + + If not error callback is registered, the error gets printed to stderr + + CVS patchset: 163 + CVS date: 1996/01/08 19:15:22 + +commit ab74a09ce50ea73e2004116eb8c1d05c8338ea5c +Author: marc +Date: Mon Jan 8 17:40:59 1996 +0000 + + added RPMTAG_EXCLUSIVE RPMTAG_EXCLUDE RPMTAG_ICON + + CVS patchset: 162 + CVS date: 1996/01/08 17:40:59 + +commit 12908c65ebbad32ef5240aa7e65fc43c68248fad +Author: ewt +Date: Mon Jan 8 17:02:35 1996 +0000 + + added rpmdbAdd() + + CVS patchset: 161 + CVS date: 1996/01/08 17:02:35 + +commit 97216a56c78e74092e3f5fe07dfd303e053a75fa +Author: marc +Date: Mon Jan 8 07:12:19 1996 +0000 + + fix comment + + CVS patchset: 160 + CVS date: 1996/01/08 07:12:19 + +commit a07f81442a27d2775cf9864d8719eefd76b2acae +Author: marc +Date: Mon Jan 8 07:10:32 1996 +0000 + + remove extraneous read() that was screwing things up + + CVS patchset: 159 + CVS date: 1996/01/08 07:10:32 + +commit 2d82745bc0574e340ed9a17234a5cb90da0ec385 +Author: marc +Date: Mon Jan 8 07:07:35 1996 +0000 + + modify cpio_gzip() and process_filelist() to handle source package filelists + wrote markBuildTime() and packageSource() + + CVS patchset: 158 + CVS date: 1996/01/08 07:07:35 + +commit 053153a3a0fb7429af0b4a48a31158ec3dd8d992 +Author: marc +Date: Mon Jan 8 07:06:16 1996 +0000 + + check for euid == 0 before doing chown -R on sources + add checkSources() to test access() on sources, patches, and icons + use markBuildTime() + + CVS patchset: 157 + CVS date: 1996/01/08 07:06:16 + +commit 83db46ec7bf2995d8e6da8fa333a44dac1a39e53 +Author: marc +Date: Mon Jan 8 07:04:24 1996 +0000 + + add markBuildTime() to time stamp builds + + CVS patchset: 156 + CVS date: 1996/01/08 07:04:24 + +commit ce8f72ea89e060f8a02a5c128de107a11cb87e6d +Author: marc +Date: Mon Jan 8 07:03:21 1996 +0000 + + added icon, exclude, exclusive handling + parseSpec now takes specfile name as argument + + CVS patchset: 155 + CVS date: 1996/01/08 07:03:21 + +commit a6401a1f4789cf1d5249398a5667591512df8272 +Author: marc +Date: Mon Jan 8 07:02:32 1996 +0000 + + spec struct now has specfile and icon elements + + CVS patchset: 154 + CVS date: 1996/01/08 07:02:32 + +commit 210ebc2ab7a877b18cca0cad43a661ec93bd5638 +Author: marc +Date: Mon Jan 8 07:01:36 1996 +0000 + + parseSpec() now takes a specfile name as argument + + CVS patchset: 153 + CVS date: 1996/01/08 07:01:36 + +commit 97aa9df6e9c1f32b6b52eb6c1c67b8a74201ca3c +Author: marc +Date: Mon Jan 8 07:00:41 1996 +0000 + + make progs depend on libobjects + specify LOADLIBES + + CVS patchset: 152 + CVS date: 1996/01/08 07:00:41 + +commit 719e577c5ac64175a7fa771de41a943ff2909bf4 +Author: marc +Date: Sat Jan 6 23:33:45 1996 +0000 + + reversed order of pre/preun post/postun checking + + CVS patchset: 151 + CVS date: 1996/01/06 23:33:45 + +commit d267993eac79d1f6ea8594975c4e14762b1ddd02 +Author: marc +Date: Sat Jan 6 21:23:03 1996 +0000 + + fixed prein -> pre and postin->post + + CVS patchset: 150 + CVS date: 1996/01/06 21:23:03 + +commit 405a63ffff840e33ece451781ca08d54480a8285 +Author: ewt +Date: Sat Jan 6 18:54:50 1996 +0000 + + Initial revision + + CVS patchset: 149 + CVS date: 1996/01/06 18:54:50 + +commit 02dfd12a92044e19ccae728104f495229765e154 +Author: ewt +Date: Sat Jan 6 00:07:50 1996 +0000 + + creates header for old style packages + + CVS patchset: 148 + CVS date: 1996/01/06 00:07:50 + +commit 874f4f9dbad8a924425ef573104eefe0771f56a5 +Author: ewt +Date: Sat Jan 6 00:07:13 1996 +0000 + + uses oldheader.[ch] instead of oldrpmfile.[ch] (which was removed) + + CVS patchset: 147 + CVS date: 1996/01/06 00:07:13 + +commit e808a695a82ed94c6a3a4a20a23abfd6fc14a8e7 +Author: ewt +Date: Sat Jan 6 00:06:52 1996 +0000 + + fixed traversal over freed spaces + + CVS patchset: 146 + CVS date: 1996/01/06 00:06:52 + +commit 2f5bde67eaff1e5a12f18e849e7b47a5eeeb5887 +Author: ewt +Date: Sat Jan 6 00:06:19 1996 +0000 + + removed oldrpmfile.o, added oldheader.o, made programs depend on librpm.a + + CVS patchset: 145 + CVS date: 1996/01/06 00:06:19 + +commit 31e9a1b7b602ee3ae056ff1426d0cbfd6673dc42 +Author: ewt +Date: Sat Jan 6 00:06:09 1996 +0000 + + fixed some messages + + CVS patchset: 144 + CVS date: 1996/01/06 00:06:09 + +commit 3d6e77e0b3d6c0bfe29375017ebb65de7ed0fe8f +Author: ewt +Date: Sat Jan 6 00:05:14 1996 +0000 + + fixed bug affecting removal of a pacakge which is installed multiple times + + CVS patchset: 143 + CVS date: 1996/01/06 00:05:14 + +commit 5131e75e19c562604f1f6abfbc9d218d82de69e9 +Author: ewt +Date: Sat Jan 6 00:05:02 1996 +0000 + + made rpm depend on lib/librpm.a + + CVS patchset: 142 + CVS date: 1996/01/06 00:05:02 + +commit 5ff8f1637838cb0edf4e1192b5301be9914f7c8d +Author: ewt +Date: Fri Jan 5 19:10:38 1996 +0000 + + added querying by group + + CVS patchset: 141 + CVS date: 1996/01/05 19:10:38 + +commit d9773ffe1172a5cfafde0c411e164733931572b1 +Author: ewt +Date: Fri Jan 5 19:10:25 1996 +0000 + + added uninstall.o + added package.o + + CVS patchset: 140 + CVS date: 1996/01/05 19:10:25 + +commit 8178facb46214f1ac36d901ede4b0250dd49d380 +Author: ewt +Date: Fri Jan 5 18:21:33 1996 +0000 + + added install.o + + CVS patchset: 139 + CVS date: 1996/01/05 18:21:33 + +commit 8d0f3b67e95fbe5077c94b99d061a363582e052e +Author: ewt +Date: Fri Jan 5 18:19:48 1996 +0000 + + added search and removal functions + + CVS patchset: 138 + CVS date: 1996/01/05 18:19:48 + +commit d2564d4aac1cea2cd9ea35382f703dd2e27b83b1 +Author: ewt +Date: Fri Jan 5 18:18:39 1996 +0000 + + changed magic and version numbers to unsigned + + CVS patchset: 137 + CVS date: 1996/01/05 18:18:39 + +commit 51a5bd695ddc4137260e720a350df41ff3389474 +Author: ewt +Date: Fri Jan 5 18:16:50 1996 +0000 + + added searching by group, started work on package removal + + CVS patchset: 136 + CVS date: 1996/01/05 18:16:50 + +commit 99a43e9240395e10e2b365bd35bdecad717bca37 +Author: ewt +Date: Fri Jan 5 18:15:57 1996 +0000 + + began to add faFree(), though it doesn't work yet + + CVS patchset: 135 + CVS date: 1996/01/05 18:15:57 + +commit 93b99ec96e3a24414971b980982432e4681f1315 +Author: ewt +Date: Fri Jan 5 18:14:52 1996 +0000 + + fixed bugs, added deletion + + CVS patchset: 134 + CVS date: 1996/01/05 18:14:52 + +commit 8555fba7bca118b28b1f9ed48d7450413f7a0b5d +Author: ewt +Date: Fri Jan 5 18:13:25 1996 +0000 + + added install, uninstall, and query by group + + CVS patchset: 133 + CVS date: 1996/01/05 18:13:25 + +commit fc3166e80dd0787b5a9e7d1ee0a58e198faf54af +Author: ewt +Date: Fri Jan 5 18:12:55 1996 +0000 + + Initial revision + + CVS patchset: 132 + CVS date: 1996/01/05 18:12:55 + +commit 7558c83bdb60fbbdb07a44462a1625ec51d53d17 +Author: ewt +Date: Fri Jan 5 18:12:17 1996 +0000 + + 1) fixed some bugs + 2) added querying by group + 3) added querying of binary packages + 4) added querying by name (though name-version-release doesn't work) + + CVS patchset: 131 + CVS date: 1996/01/05 18:12:17 + +commit 5caa05339e6971130b61dd2207f41fa8a7eb7719 +Author: marc +Date: Fri Jan 5 03:13:40 1996 +0000 + + use writeLead() from librpm + + CVS patchset: 130 + CVS date: 1996/01/05 03:13:40 + +commit e9293e83647b95c52f0cda65ccd56e5c3a01d261 +Author: marc +Date: Fri Jan 5 03:08:34 1996 +0000 + + get rid of some warnings + + CVS patchset: 129 + CVS date: 1996/01/05 03:08:34 + +commit 3bee9f51093983afbba3c6baad19e6b694f68d48 +Author: marc +Date: Fri Jan 5 03:05:34 1996 +0000 + + add readLead() and writeLead() + + CVS patchset: 128 + CVS date: 1996/01/05 03:05:34 + +commit fbdcf3e2d679263b8debef44411167beef32d659 +Author: marc +Date: Fri Jan 5 03:05:34 1996 +0000 + + Initial revision + + CVS patchset: 127 + CVS date: 1996/01/05 03:05:34 + +commit ceb04802f6afd68d877c0e45cb421d5b8981f2db +Author: marc +Date: Fri Jan 5 03:05:18 1996 +0000 + + added rpmlead.o + + CVS patchset: 126 + CVS date: 1996/01/05 03:05:18 + +commit c4658b4c11a3583173c72bfe96792b90cfe405c2 +Author: marc +Date: Fri Jan 5 03:04:32 1996 +0000 + + use readLead() and writeLead() from librpm.a + + CVS patchset: 125 + CVS date: 1996/01/05 03:04:32 + +commit ce54f1b8883baadb2589744010dd195d3fcdde6e +Author: marc +Date: Fri Jan 5 02:10:08 1996 +0000 + + added RPMLEAD_SIGNONE RPMLEAD_SIZE + added signature_type to the lead structure + pad lead structure to 96 bytes, 8 byte aligned + should be enough for just about forever. + + CVS patchset: 124 + CVS date: 1996/01/05 02:10:08 + +commit 2e74958d63adfc24c64427b59fe770817694db91 +Author: marc +Date: Fri Jan 5 02:08:51 1996 +0000 + + use rpmlead.h + + CVS patchset: 123 + CVS date: 1996/01/05 02:08:51 + +commit 56789aa7412566d156c39f374ff0f3478a922afb +Author: marc +Date: Fri Jan 5 02:04:26 1996 +0000 + + use RPMLEAD_SIZE from rpmlead.h + + CVS patchset: 122 + CVS date: 1996/01/05 02:04:26 + +commit ef6cf8e54b29f63f64cbd1913b01962f0b795655 +Author: marc +Date: Fri Jan 5 02:02:21 1996 +0000 + + removed RPM_LEAD_SIZE + + CVS patchset: 121 + CVS date: 1996/01/05 02:02:21 + +commit cfa399a5b9161e68a7faee7ba51241057cae7a0f +Author: marc +Date: Fri Jan 5 01:48:03 1996 +0000 + + added RPMTAG_FILEUSERNAME and RPMTAG_FILEGROUPNAME + + CVS patchset: 120 + CVS date: 1996/01/05 01:48:03 + +commit 3e4e12094a6a959ac90b4304937687af2b9cffa3 +Author: marc +Date: Fri Jan 5 01:44:52 1996 +0000 + + cleaned up, added many global varsiables that used to be in + secondary Makefiles + + CVS patchset: 119 + CVS date: 1996/01/05 01:44:52 + +commit 791596ff5191c65f603e40b8bde69e234bd785b3 +Author: marc +Date: Fri Jan 5 01:43:13 1996 +0000 + + Initial revision + + CVS patchset: 118 + CVS date: 1996/01/05 01:43:13 + +commit 300994017f88970692e8a7571662e5fe49d567fd +Author: marc +Date: Fri Jan 5 01:42:43 1996 +0000 + + cleaned up, moved most vars to top level Makefile + + CVS patchset: 117 + CVS date: 1996/01/05 01:42:43 + +commit fbc74f945d7967ac80fefce35d54488d2871cd6e +Author: ewt +Date: Sun Dec 31 02:43:53 1995 +0000 + + removed rpmbuild + + CVS patchset: 116 + CVS date: 1995/12/31 02:43:53 + +commit 09eb6916f3438c9fee1ee4b60a1576aca65ca934 +Author: marc +Date: Wed Dec 27 21:55:33 1995 +0000 + + added alignment code to addEntry() + + CVS patchset: 115 + CVS date: 1995/12/27 21:55:33 + +commit ca7d7895d58d8dec1d8395aeaad3c744d0f5b764 +Author: marc +Date: Wed Dec 27 21:08:05 1995 +0000 + + changed semantics so in-core data is in host order + and on-disk data is in network order + + CVS patchset: 114 + CVS date: 1995/12/27 21:08:05 + +commit 624b12f4ecbd88a471dfb81ed0b14a04b2efa2f3 +Author: marc +Date: Wed Dec 27 20:59:07 1995 +0000 + + fixed handling of build time + + CVS patchset: 113 + CVS date: 1995/12/27 20:59:07 + +commit 4a40d6b3687d6562a0837e691dc650177899a14e +Author: ewt +Date: Wed Dec 27 20:52:58 1995 +0000 + + removed ntohl() weirdness - header.c works better now + + CVS patchset: 112 + CVS date: 1995/12/27 20:52:58 + +commit 5939edd578ac857eba5dc45402208e2ceddaf46a +Author: marc +Date: Wed Dec 27 20:47:09 1995 +0000 + + added rule for rpmbuild + + CVS patchset: 111 + CVS date: 1995/12/27 20:47:09 + +commit b5ec54fbfa5dcf29408aeb8e0762c27d0b42a97c +Author: ewt +Date: Wed Dec 27 20:39:27 1995 +0000 + + Initial revision + + CVS patchset: 110 + CVS date: 1995/12/27 20:39:27 + +commit 61dc3a5b745636aa198abd941ec16c51339c4b21 +Author: ewt +Date: Wed Dec 27 20:09:59 1995 +0000 + + make depend should (and now does) recurse + + CVS patchset: 109 + CVS date: 1995/12/27 20:09:59 + +commit 626ff80c198c1be53ba9b9227a1628372b2f0315 +Author: ewt +Date: Wed Dec 27 20:08:35 1995 +0000 + + Initial revision + + CVS patchset: 108 + CVS date: 1995/12/27 20:08:35 + +commit 89b8b299c6391eb4e5e1dd924ad2ae37307d01b7 +Author: ewt +Date: Wed Dec 27 20:08:11 1995 +0000 + + basic querying works now, but building is broken + + CVS patchset: 107 + CVS date: 1995/12/27 20:08:11 + +commit fcf578890e222e6485fe372e06db63fff028cc0c +Author: ewt +Date: Wed Dec 27 20:05:14 1995 +0000 + + changed to use oldrpmdb names insteaed of rpmdb ones + + CVS patchset: 106 + CVS date: 1995/12/27 20:05:14 + +commit 574b4da356896d57f2820f4ad65a5aeb140e81d0 +Author: ewt +Date: Wed Dec 27 20:04:38 1995 +0000 + + made changes to allow include of "falloc.h" to be removed + + CVS patchset: 105 + CVS date: 1995/12/27 20:04:38 + +commit a49f40af8cf7b2bef6464eb9fcce73358fa6400b +Author: ewt +Date: Wed Dec 27 19:50:38 1995 +0000 + + Initial revision + + CVS patchset: 104 + CVS date: 1995/12/27 19:50:38 + +commit 29d08eac07783e68abed39cb32148d073b25f268 +Author: ewt +Date: Wed Dec 27 19:50:19 1995 +0000 + + changed to use lead structure from lib/rpmlead.h + + CVS patchset: 103 + CVS date: 1995/12/27 19:50:19 + +commit 49ae796d731ae3a8fb9ca172d3502f87a157f4ba +Author: ewt +Date: Wed Dec 27 19:45:36 1995 +0000 + + changed to use rpmlead.h + + CVS patchset: 102 + CVS date: 1995/12/27 19:45:36 + +commit c270cf15b5f2644fc8e5a558b1fd7afffd7f1195 +Author: marc +Date: Wed Dec 27 19:29:15 1995 +0000 + + added depend, -lefence, removed stringbuf.o + + CVS patchset: 101 + CVS date: 1995/12/27 19:29:15 + +commit c7ed768e790f8e3500d19d6da110a0af1a1fdcd9 +Author: marc +Date: Wed Dec 27 19:22:42 1995 +0000 + + added stringbuf.o + + CVS patchset: 100 + CVS date: 1995/12/27 19:22:42 + +commit 23ae3877ff35fb5e4cc52a57c339711227064b93 +Author: marc +Date: Wed Dec 27 19:21:25 1995 +0000 + + added RPMTAG_ROOT + + CVS patchset: 99 + CVS date: 1995/12/27 19:21:25 + +commit 92ebd71318e3d8225f66e270bc893c440e7af25b +Author: ewt +Date: Wed Dec 27 19:19:13 1995 +0000 + + added types for database access + + CVS patchset: 98 + CVS date: 1995/12/27 19:19:13 + +commit beecff06081dd480eda82274a351026511bbf119 +Author: ewt +Date: Wed Dec 27 19:18:56 1995 +0000 + + added "make depend", dbindex.o, rpmdb.o + + CVS patchset: 97 + CVS date: 1995/12/27 19:18:56 + +commit ffc5f383b89f7d5e1c929eec0f0d966e3f126cc0 +Author: ewt +Date: Wed Dec 27 19:18:16 1995 +0000 + + changed to support querying + + CVS patchset: 96 + CVS date: 1995/12/27 19:18:16 + +commit 9bba7f5a642f808c6f9f4eac6861cb2de7c95c07 +Author: marc +Date: Wed Dec 27 19:04:31 1995 +0000 + + added modifyEntry() + + CVS patchset: 95 + CVS date: 1995/12/27 19:04:31 + +commit e44542c280f21cec304f8645c44d6ef40bb88fd8 +Author: marc +Date: Wed Dec 27 18:05:01 1995 +0000 + + sort indexes on write, use bsearch to find tags + + CVS patchset: 94 + CVS date: 1995/12/27 18:05:01 + +commit 3fc78abda7bc175be93c6d3ee69d1d31fc6b62da +Author: marc +Date: Wed Dec 27 17:33:28 1995 +0000 + + allow 16 fd's for ftw() + + CVS patchset: 93 + CVS date: 1995/12/27 17:33:28 + +commit c0ca0abdc7d639d65853b04fe137e9944e4ecf9b +Author: root +Date: Wed Dec 27 17:04:12 1995 +0000 + + fixed bug in faAlloc() + + CVS patchset: 92 + CVS date: 1995/12/27 17:04:12 + +commit e48f33611071e8077f8ff8835ee9e93f7a44c355 +Author: marc +Date: Wed Dec 27 16:54:54 1995 +0000 + + add %setup and %patch handling + add "really_exec" flag to execPart() + + CVS patchset: 91 + CVS date: 1995/12/27 16:54:54 + +commit d2d67bdffbdc44a7164e69e8b627cca8ad8f3ed9 +Author: marc +Date: Wed Dec 27 16:52:14 1995 +0000 + + remove arch/os cruft and use stuff in librpm + add root handling + add %dir (and absense of) handling + don't md5sum non-regular files + + CVS patchset: 90 + CVS date: 1995/12/27 16:52:14 + +commit 116446973dbd97e1c7c9e8e61a1766184d2cfa5e +Author: marc +Date: Wed Dec 27 16:50:50 1995 +0000 + + added source/patch line handling + write real %ifarch %ifos stuff + handle root: header option + + CVS patchset: 89 + CVS date: 1995/12/27 16:50:50 + +commit 10d55540fd0fb0df31ebf12563e72d2177034920 +Author: marc +Date: Wed Dec 27 16:43:32 1995 +0000 + + added really_exec arg to execPrep() (so we can parse without exec-ing) + + CVS patchset: 88 + CVS date: 1995/12/27 16:43:32 + +commit 7a9d83aa7ff7b22c5aae0696a61e5a7b078bf23b +Author: marc +Date: Wed Dec 27 16:40:02 1995 +0000 + + added struct sources + + CVS patchset: 87 + CVS date: 1995/12/27 16:40:02 + +commit d1c9f0d66a99755cdb2ede34d42c88009acf128b +Author: marc +Date: Wed Dec 27 16:39:10 1995 +0000 + + added getSource() getFullSource() + + CVS patchset: 86 + CVS date: 1995/12/27 16:39:10 + +commit 02d2b3068b2cc864fc57bc6f2615007d38ea5f76 +Author: marc +Date: Wed Dec 27 16:32:19 1995 +0000 + + added setVar(), ROOT var + + CVS patchset: 85 + CVS date: 1995/12/27 16:32:19 + +commit d5addaa30bf2c9374eb45d648a287a1b435d3e03 +Author: marc +Date: Wed Dec 27 16:31:14 1995 +0000 + + fixed isVerbose() + + CVS patchset: 84 + CVS date: 1995/12/27 16:31:14 + +commit 761d71df82d538f2d53db5d8e088e386a1d04fb8 +Author: marc +Date: Wed Dec 27 16:29:55 1995 +0000 + + added get{Arch,Os}{Name,Num}() + + CVS patchset: 83 + CVS date: 1995/12/27 16:29:55 + +commit 61797fb2208af3c85f5bdd8913959a95edf05597 +Author: ewt +Date: Wed Dec 27 03:41:22 1995 +0000 + + Initial revision + + CVS patchset: 82 + CVS date: 1995/12/27 03:41:22 + +commit a80f6e743678230ae42295a37ce1e6788d0749a9 +Author: ewt +Date: Wed Dec 27 03:40:36 1995 +0000 + + fixed formatting + + CVS patchset: 81 + CVS date: 1995/12/27 03:40:36 + +commit bcc019d00072875887addb46a1e41bc51a77e8fb +Author: ewt +Date: Wed Dec 27 03:37:38 1995 +0000 + + 1) added indexing by name, group, file + 2) changed some STRING types to STRINGARRAY + + CVS patchset: 80 + CVS date: 1995/12/27 03:37:38 + +commit d099d941b5b9404a7f44f17db9ae020e635707fb +Author: root +Date: Tue Dec 26 23:07:41 1995 +0000 + + moved to rpm.c from rpmq to get basic command line handling + + CVS patchset: 79 + CVS date: 1995/12/26 23:07:41 + +commit 0f2ea3da00e8f9c733d31150a34714233099f358 +Author: marc +Date: Wed Dec 20 23:34:12 1995 +0000 + + move RPMBUILD_* to build.h + + CVS patchset: 78 + CVS date: 1995/12/20 23:34:12 + +commit 4738e299a36c1eb6c5a0f3d03fb21f8a4bea9dcd +Author: marc +Date: Wed Dec 20 23:33:55 1995 +0000 + + add RPMBUILD_* (used to be in build.c) + + CVS patchset: 77 + CVS date: 1995/12/20 23:33:55 + +commit d106b8bff32a5f087434a50711c4d21ac7816833 +Author: marc +Date: Wed Dec 20 23:32:38 1995 +0000 + + use STRING_ARRAY_TYPE for file, md5s, and linktos + + CVS patchset: 76 + CVS date: 1995/12/20 23:32:38 + +commit cb5270ad36ea2f6ebfe06fd42d6955ddf9ba357e +Author: marc +Date: Wed Dec 20 23:31:16 1995 +0000 + + use doBuild() instead of packageBinaries() + + CVS patchset: 75 + CVS date: 1995/12/20 23:31:16 + +commit ddfd47abbd1db5393084dcd47ab7c2b017296902 +Author: marc +Date: Wed Dec 20 23:30:46 1995 +0000 + + added %changelog + handle %package -n + + CVS patchset: 74 + CVS date: 1995/12/20 23:30:46 + +commit b4147692a584d5f50c6e4e49a472892a987ce3f9 +Author: marc +Date: Wed Dec 20 23:27:15 1995 +0000 + + added STRING_ARRAY_TYPE + + CVS patchset: 73 + CVS date: 1995/12/20 23:27:15 + +commit 81c82e7524ffd8463677c65950702b8b9a49a4ca +Author: marc +Date: Wed Dec 20 22:49:40 1995 +0000 + + Initial revision + + CVS patchset: 72 + CVS date: 1995/12/20 22:49:40 + +commit 849b058ec09ca01754d6e2d362843a09d319d0cf +Author: marc +Date: Wed Dec 20 22:48:08 1995 +0000 + + added freeIterator() copyHeader() isEntry() + + CVS patchset: 71 + CVS date: 1995/12/20 22:48:08 + +commit 78d1f4bc4d7a3121b11b6c902a572f9ca692dd0c +Author: marc +Date: Wed Dec 20 22:47:19 1995 +0000 + + added isEntry() freeIterator() and copyHeader() + + CVS patchset: 70 + CVS date: 1995/12/20 22:47:19 + +commit 68b72b0468aff6e416b833a9d58339a72211778c +Author: marc +Date: Tue Dec 19 21:08:18 1995 +0000 + + added dispatch code + + CVS patchset: 69 + CVS date: 1995/12/19 21:08:18 + +commit b74e71a16d0369bb8d4e33891673eaf88811ceed +Author: marc +Date: Tue Dec 19 21:06:39 1995 +0000 + + add debug messages + fixed subname entry stuff into the header + + CVS patchset: 68 + CVS date: 1995/12/19 21:06:39 + +commit f067ec7baea1e87751f71b26fd3839da0ea4fbd9 +Author: marc +Date: Tue Dec 19 21:05:39 1995 +0000 + + added error callback, call binary packaging + + CVS patchset: 67 + CVS date: 1995/12/19 21:05:39 + +commit 1efdf0b345af4f0bd8847ad944b96c572bc06492 +Author: root +Date: Tue Dec 19 20:57:18 1995 +0000 + + md5 bits were signed, which caused bad expansion + + CVS patchset: 66 + CVS date: 1995/12/19 20:57:18 + +commit 80a3c6d773d43644e5eab22d0213e43cb1ced278 +Author: marc +Date: Tue Dec 19 20:35:49 1995 +0000 + + added md5.o and md5sum.o + + CVS patchset: 65 + CVS date: 1995/12/19 20:35:49 + +commit 3cbd6cbe9cff44cffd46b495f1030d883107ea3a +Author: marc +Date: Tue Dec 19 20:33:51 1995 +0000 + + Initial revision + + CVS patchset: 64 + CVS date: 1995/12/19 20:33:51 + +commit 4a647b2bc3d4d3ddd4b810e7c66e2318d6e61985 +Author: marc +Date: Tue Dec 19 17:56:45 1995 +0000 + + added logic for empty %files section vs NO %files section + ,. + + CVS patchset: 63 + CVS date: 1995/12/19 17:56:45 + +commit 12226f6441503a80c5d7807e67dcd96cec20ff5c +Author: marc +Date: Tue Dec 19 17:17:37 1995 +0000 + + fixed bug in string array stuff in getEntry() + + CVS patchset: 62 + CVS date: 1995/12/19 17:17:37 + +commit b1cbf6a140ad5aef9fef465ade3a6b53da3e67d2 +Author: marc +Date: Tue Dec 19 16:57:12 1995 +0000 + + made rpm depend on lib/librpm.a + + CVS patchset: 61 + CVS date: 1995/12/19 16:57:12 + +commit fcc49648fd74a07c50a9b0f8eab0b4aa64bab6ed +Author: ewt +Date: Tue Dec 19 16:17:39 1995 +0000 + + Added routines for traversal + + CVS patchset: 60 + CVS date: 1995/12/19 16:17:39 + +commit fa82a7b7ba63165347229476dbff2de5b972789c +Author: ewt +Date: Tue Dec 19 16:17:21 1995 +0000 + + Added routines for retrieving GIFs + + CVS patchset: 59 + CVS date: 1995/12/19 16:17:21 + +commit 03df85e13db3208b779cdb531ef3be6bfcfd1260 +Author: ewt +Date: Tue Dec 19 16:09:38 1995 +0000 + + Changed RPMTAB_FILESTATES to INT8 from CHAR + Added GIF's + + CVS patchset: 58 + CVS date: 1995/12/19 16:09:38 + +commit a0caa9c79cfc7cd170b317a6eca3475c52af814c +Author: marc +Date: Mon Dec 18 20:31:09 1995 +0000 + + Initial revision + + CVS patchset: 57 + CVS date: 1995/12/18 20:31:09 + +commit d5b37d3e38a91a11f3a95da5fbc4154dbc643f5e +Author: marc +Date: Mon Dec 18 20:28:07 1995 +0000 + + added rpmlead rpmheader rpmarchive + + CVS patchset: 56 + CVS date: 1995/12/18 20:28:07 + +commit 3559014661b1ab9ee8f3e3f4f728c039342e8c44 +Author: marc +Date: Mon Dec 18 18:44:16 1995 +0000 + + fixed bug where every part was POSTUN + + CVS patchset: 55 + CVS date: 1995/12/18 18:44:16 + +commit 20679dba829440c68a07cac3f3c228bdc0649b27 +Author: marc +Date: Mon Dec 18 18:13:41 1995 +0000 + + fixed previous edit + , + + CVS patchset: 54 + CVS date: 1995/12/18 18:13:41 + +commit 304e100833b5ee3604bb1ec2cd5084fd7cbae2ca +Author: marc +Date: Mon Dec 18 18:08:30 1995 +0000 + + allow type to be NULL in getEntry() + + CVS patchset: 53 + CVS date: 1995/12/18 18:08:30 + +commit ba10e3d22e70bda01ece1752567f945c89c37159 +Author: marc +Date: Mon Dec 18 18:00:28 1995 +0000 + + allow NULL to be passed for count in getEntry() + + CVS patchset: 52 + CVS date: 1995/12/18 18:00:28 + +commit ec6594f3e44724dd523df9b67a31f6fe4a95f7b5 +Author: marc +Date: Mon Dec 18 17:43:06 1995 +0000 + + added pack.o + + CVS patchset: 51 + CVS date: 1995/12/18 17:43:06 + +commit af1d65286bdb9dfa22a45bf9203917387465161d +Author: marc +Date: Mon Dec 18 14:56:49 1995 +0000 + + cleaned up error() for new error scheme + relocated dump code + + CVS patchset: 50 + CVS date: 1995/12/18 14:56:49 + +commit c90196991c2384f4d1f4b057e4cb408c0432fb18 +Author: marc +Date: Mon Dec 18 14:53:29 1995 +0000 + + pulled out pack routines to pack.h + + CVS patchset: 49 + CVS date: 1995/12/18 14:53:29 + +commit d9a3f08d88220d9ebb16a8185381ea4161c3cdf7 +Author: marc +Date: Mon Dec 18 14:53:14 1995 +0000 + + unified script writing routines + + CVS patchset: 48 + CVS date: 1995/12/18 14:53:14 + +commit 8a0ef9fe18d69eb784f2c4c75f2347f0fd1d4229 +Author: marc +Date: Mon Dec 18 14:48:03 1995 +0000 + + made global error structure, and functions to read/write it + ,. + + CVS patchset: 47 + CVS date: 1995/12/18 14:48:03 + +commit 033609ea2d5c22c48329b2181dc82c4167fd41cc +Author: marc +Date: Thu Dec 14 16:44:32 1995 +0000 + + added var.o + + CVS patchset: 46 + CVS date: 1995/12/14 16:44:32 + +commit 1b6a9c93751802377ef23df97226e8fc5cc92b0e +Author: marc +Date: Thu Dec 14 16:42:39 1995 +0000 + + Initial revision + + CVS patchset: 45 + CVS date: 1995/12/14 16:42:39 + +commit 9780fddd5eb31d1b0c252015191549a802c877f2 +Author: ewt +Date: Thu Dec 14 16:38:52 1995 +0000 + + fixed make clean rule + + CVS patchset: 44 + CVS date: 1995/12/14 16:38:52 + +commit d39f2ac827c7bfddaa4518f23738ff189d693c8d +Author: marc +Date: Thu Dec 14 16:17:51 1995 +0000 + + fixed prototype warning + + CVS patchset: 43 + CVS date: 1995/12/14 16:17:51 + +commit 160f9371a8bd23203b47e458f68decb06f99864b +Author: marc +Date: Thu Dec 14 16:16:21 1995 +0000 + + added isVerbose() + + CVS patchset: 42 + CVS date: 1995/12/14 16:16:21 + +commit 473c3731099ae692d952efad97d60f119518cf48 +Author: marc +Date: Thu Dec 14 16:03:08 1995 +0000 + + added iterator stuff + + CVS patchset: 41 + CVS date: 1995/12/14 16:03:08 + +commit f3d821cea4dafe238d16a7e0a46942ec9c4b040f +Author: marc +Date: Thu Dec 14 15:56:10 1995 +0000 + + routines for building packages from parsed spec structs + + CVS patchset: 40 + CVS date: 1995/12/14 15:56:10 + +commit 32c194be7258f471677285e1d7cd6643e96528b8 +Author: marc +Date: Thu Dec 14 15:54:13 1995 +0000 + + Initial revision + + CVS patchset: 39 + CVS date: 1995/12/14 15:54:13 + +commit 241dc6a725f680198eb65edeff01f792c13e3011 +Author: marc +Date: Thu Dec 14 15:52:51 1995 +0000 + + added all parsing into spec and package structs + tons of stuff + + CVS patchset: 38 + CVS date: 1995/12/14 15:52:51 + +commit 6d9fa6ae7ceb3da33f81df881ea5ccb673eb9733 +Author: marc +Date: Thu Dec 14 15:50:00 1995 +0000 + + added dumpSpec() + + CVS patchset: 37 + CVS date: 1995/12/14 15:50:00 + +commit 5a0502350d637fc988af7279e03b49289dc24a6a +Author: root +Date: Thu Dec 14 15:47:55 1995 +0000 + + rpm progs, build.o + + CVS patchset: 36 + CVS date: 1995/12/14 15:47:55 + +commit 33bc84283e2650d4f97f2eb8bdafec4af075a10a +Author: root +Date: Thu Dec 14 15:46:09 1995 +0000 + + Initial revision + + CVS patchset: 35 + CVS date: 1995/12/14 15:46:09 + +commit e09146763c91d638204786532b999e5e40b357ad +Author: ewt +Date: Wed Dec 13 22:38:23 1995 +0000 + + Added BIN_TYPE + + CVS patchset: 34 + CVS date: 1995/12/13 22:38:23 + +commit 934076d1c1a29f487dc9e544aacf9915888aa61d +Author: marc +Date: Wed Dec 13 21:40:59 1995 +0000 + + changed error() to use varargs/vfprintf() + + CVS patchset: 33 + CVS date: 1995/12/13 21:40:59 + +commit 2eec922f7e9728a8a6cc069ee248774d81b4be65 +Author: ewt +Date: Wed Dec 13 20:20:14 1995 +0000 + + minor changes to get it compiling again + + CVS patchset: 32 + CVS date: 1995/12/13 20:20:14 + +commit 75ab7b91d4b03c9b6707197f1d9dce8f1e90686c +Author: ewt +Date: Wed Dec 13 20:13:49 1995 +0000 + + Initial revision + + CVS patchset: 31 + CVS date: 1995/12/13 20:13:49 + +commit b1df00c5617b65070bdbce2e794fabd995db05d0 +Author: ewt +Date: Wed Dec 13 20:13:17 1995 +0000 + + tests converDB() now + + CVS patchset: 30 + CVS date: 1995/12/13 20:13:17 + +commit 84f1a03dc196c312aa8eae2d22e5ca457e623339 +Author: ewt +Date: Wed Dec 13 20:13:06 1995 +0000 + + added sizeofHeader + + CVS patchset: 29 + CVS date: 1995/12/13 20:13:06 + +commit 3f1ada23986ba1e51a7baaa3314b6cf73a822f5d +Author: ewt +Date: Wed Dec 13 20:12:35 1995 +0000 + + 1) made dumpHeader use symbolic names + 2) fixed allocation loop + 3) changed indentation + 4) added sizeofHeader + + CVS patchset: 28 + CVS date: 1995/12/13 20:12:35 + +commit 58269e9aaea5345987e32b50c5e2862e0045521e +Author: ewt +Date: Wed Dec 13 20:11:46 1995 +0000 + + 1) added falloc.o convertdb.o oldrpmfile.o to librpm.a + 2) builds dumpdb + + CVS patchset: 27 + CVS date: 1995/12/13 20:11:46 + +commit 958dc058a48ed65070e09929a64cf04c3733402f +Author: ewt +Date: Wed Dec 13 20:11:31 1995 +0000 + + added exists() function + + CVS patchset: 26 + CVS date: 1995/12/13 20:11:31 + +commit 1fa608da506a58002a0b0ad553e6968bdca05b4f +Author: ewt +Date: Wed Dec 13 20:10:32 1995 +0000 + + 1) added copyright field for packages + 2) packages w/o groups are supported + 3) groups are returned correctly + 4) preamble parsing made case insensitive + + CVS patchset: 25 + CVS date: 1995/12/13 20:10:32 + +commit 85cff2274e66e265aa4b95e1424cd95ccd3b3b2d +Author: ewt +Date: Wed Dec 13 20:10:25 1995 +0000 + + added copyright field for packages + + CVS patchset: 24 + CVS date: 1995/12/13 20:10:25 + +commit 1223e1f8068fa6f0fbd65654e8e8b5dbff097d7b +Author: ewt +Date: Wed Dec 13 20:09:47 1995 +0000 + + Creates nearly complete packages.rpm - no indexing is done yet + + CVS patchset: 23 + CVS date: 1995/12/13 20:09:47 + +commit f9c02bf8cd4ce7f5eafac2c0cece04f3819a5fff +Author: ewt +Date: Wed Dec 13 20:08:33 1995 +0000 + + Added more RPMTAG's and the first RPMFILE class contants + + CVS patchset: 22 + CVS date: 1995/12/13 20:08:33 + +commit e70eb906e545cf267735db919aba7d212fdfd174 +Author: marc +Date: Wed Dec 13 17:47:15 1995 +0000 + + fixed dumb buffer extension bug + + CVS patchset: 21 + CVS date: 1995/12/13 17:47:15 + +commit 604a38ed5c2dbcd5e5448635ecd20021e55e6b98 +Author: root +Date: Wed Dec 13 16:04:49 1995 +0000 + + added tags for pre/post in/out + + CVS patchset: 20 + CVS date: 1995/12/13 16:04:49 + +commit bef5fd6745de40acaa4aca5847bfdbbfbd96027c +Author: root +Date: Wed Dec 13 16:01:36 1995 +0000 + + Initial revision + + CVS patchset: 19 + CVS date: 1995/12/13 16:01:36 + +commit fe029afbbe197b48922d7bfc5b49a22f12edbc2f +Author: root +Date: Wed Dec 13 16:01:10 1995 +0000 + + added stringbuf.o + + CVS patchset: 18 + CVS date: 1995/12/13 16:01:10 + +commit ee28a4d263bd8f089afe5ab600c1f48e8c38675f +Author: root +Date: Wed Dec 13 16:00:19 1995 +0000 + + modified to test spec.c 1.4 + + CVS patchset: 17 + CVS date: 1995/12/13 16:00:19 + +commit 4ca07d7be8f6cdc4c817d834399bb59a3d2ab8b1 +Author: root +Date: Wed Dec 13 15:57:59 1995 +0000 + + fleshed out parsing, incorporated stringbufs, cleaned up + the spec/package structures and relationships + + CVS patchset: 16 + CVS date: 1995/12/13 15:57:59 + +commit 2239fa559cc72de97d8bda3d3af357d07c27bf5b +Author: ewt +Date: Tue Dec 12 23:25:31 1995 +0000 + + Changed to use file descriptors instead of stdio + + CVS patchset: 15 + CVS date: 1995/12/12 23:25:31 + +commit e55cb9595488ae4423f336ef2078796b1c6fab5d +Author: ewt +Date: Tue Dec 12 23:23:37 1995 +0000 + + Added error number to messages + + CVS patchset: 14 + CVS date: 1995/12/12 23:23:37 + +commit 26efeda3f315f819dfaf4338dd84046295502f9f +Author: ewt +Date: Tue Dec 12 22:35:42 1995 +0000 + + added include of string.h to get rid of warning message + + CVS patchset: 13 + CVS date: 1995/12/12 22:35:42 + +commit b870ab911b8f8f2746d7d7b7408c6babcec6df07 +Author: root +Date: Tue Dec 12 17:53:17 1995 +0000 + + removed -lefence (just temporary) + + CVS patchset: 12 + CVS date: 1995/12/12 17:53:17 + +commit 171bf4e279c6972634b682fd963458d101332d16 +Author: root +Date: Tue Dec 12 17:53:17 1995 +0000 + + complete reorg of reading scheme + added %else handling + no regexp stuff + nice big table of tags and keywords :-) + + CVS patchset: 11 + CVS date: 1995/12/12 17:53:17 + +commit c0fce339bf5463a5ee6b07dcd870e7f3283901f5 +Author: root +Date: Tue Dec 12 17:51:07 1995 +0000 + + added rpmerr.o to LIBOBJECTS + + CVS patchset: 10 + CVS date: 1995/12/12 17:51:07 + +commit 173314bce5abf6f70ed428bb614d1d4fe80d8d2e +Author: root +Date: Tue Dec 12 17:49:04 1995 +0000 + + removed tag definitions (moved to rpmlib.h) + + CVS patchset: 9 + CVS date: 1995/12/12 17:49:04 + +commit 63b7e447d478af9d441bafd7549044a0cba49a7b +Author: root +Date: Tue Dec 12 17:49:04 1995 +0000 + + include rpmlib.h + + CVS patchset: 8 + CVS date: 1995/12/12 17:49:04 + +commit d1f254f84bc8b6a4d6b73bf7b16137e1a4dc7a0a +Author: root +Date: Tue Dec 12 17:49:04 1995 +0000 + + added some tags + + CVS patchset: 7 + CVS date: 1995/12/12 17:49:04 + +commit 8b02e113ece5e974695024cb7cedba86f956f2ba +Author: ewt +Date: Tue Dec 12 17:40:49 1995 +0000 + + added include of + + CVS patchset: 6 + CVS date: 1995/12/12 17:40:49 + +commit 1f6a1869809f0f0615ed789de16014d5d9515c5e +Author: ewt +Date: Mon Dec 11 23:42:31 1995 +0000 + + Initial revision + + CVS patchset: 5 + CVS date: 1995/12/11 23:42:31 + +commit 61514fde9461cddabcb65834c20fb5659eecc590 +Author: ewt +Date: Mon Dec 11 22:53:09 1995 +0000 + + Get DEBUG, WARNING, and EFENCE stuff from children + + CVS patchset: 4 + CVS date: 1995/12/11 22:53:09 + +commit 871c95922018f555a4369980011161120c2e4790 +Author: root +Date: Mon Dec 11 22:52:59 1995 +0000 + + started parsing + + CVS patchset: 3 + CVS date: 1995/12/11 22:52:59 + +commit 93db395636f89d00bcf16574d67c2baf57022096 +Author: ewt +Date: Mon Dec 11 22:52:36 1995 +0000 + + Passed warnings, efence flags to child makes + + CVS patchset: 2 + CVS date: 1995/12/11 22:52:36 + +commit 7153c160969d70a083f791bf75f9b4d09d2f2a45 +Author: root +Date: Mon Nov 27 22:31:21 1995 +0000 + + Initial revision + + CVS patchset: 1 + CVS date: 1995/11/27 22:31:21 diff --git a/GROUPS b/GROUPS new file mode 100644 index 0000000..b0612a7 --- /dev/null +++ b/GROUPS @@ -0,0 +1,29 @@ +Amusements/Games +Amusements/Graphics +Applications/Archiving +Applications/Communications +Applications/Databases +Applications/Editors +Applications/Emulators +Applications/Engineering +Applications/File +Applications/Internet +Applications/Multimedia +Applications/Productivity +Applications/Publishing +Applications/System +Applications/Text +Development/Debuggers +Development/Languages +Development/Libraries +Development/System +Development/Tools +Documentation +System Environment/Base +System Environment/Daemons +System Environment/Kernel +System Environment/Libraries +System Environment/Shells +User Interface/Desktops +User Interface/X +User Interface/X Hardware Support diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..bde9efa --- /dev/null +++ b/INSTALL @@ -0,0 +1,323 @@ +To build RPM you will need several other packages: +-------------------------------------------------- + +The zlib library for compression support. You might also need/want +the unzip executable for java jar dependency analysis. All available from + http://www.gzip.org/zlib/ + +The libmagic (aka file) library for file type detection (used by rpmbuild). +The source for the file utility + library is available from + ftp://ftp.astron.com/pub/file/ + +The NSS library for encryption, and NSPR library which NSS uses. +Both NSPR and NSS libraries and headers need to be installed during RPM +compilation. As NSPR and NSS typically install their headers outside +the regular include search path, you need to tell configure about this, +eg something like: + ./configure <......> CPPFLAGS="-I/usr/include/nspr -I/usr/include/nss" + +The NSPR and NSS libraries are available from + http://www.mozilla.org/projects/security/pki/nss/ + http://www.mozilla.org/projects/nspr/ + +The Berkeley DB >= 4.3.x (4.5.x or newer recommended) is required for the +default database backend. BDB can be downloaded from +http://www.oracle.com/technology/software/products/berkeley-db/index.html + +RPM supports two different ways to include it, both methods have their +distinct advantages and disadvantages: + +1) Building and using an internal copy of BDB + + This is the "safe" way: upgrades to system BDB can not affect your + rpmdb integrity and you have full control over how BDB is configured. + On the other hand, any updates (security or bugfix) to BDB will require + rebuilding RPM. + + To use this method, download a recent version of BDB from the URL above, + expand the tarball into rpm source directory root and create "db" symlink + to it, eg: + $ wget http://download.oracle.com/berkeley-db/db-4.5.20.tar.gz + $ tar xzf db-4.5.20.tar.gz + $ ln -s db-4.5.20 db + $ ./configure [other options...] + +2) Linking to external (system) BDB + + If you can control when and how system BDB is upgraded, this option + saves space, removes the need to rebuild RPM in case of security etc + updates to BDB and also makes build rpm itself much faster. On the other + hand, major BDB upgrades can be disruptive, especially if + the on-disk format changes somehow. + + To use this method, simply pass in --with-external-db to ./configure + script. If the system BDB is installed outside compiler + linker default + paths, you can use CPPFLAGS and LDFLAGS to tell configure where to look, + for example: + + $ ./configure --with-external-db CPPFLAGS=-I/usr/include/db45 + +Minimal instructions for building BDB are + cd build_unix + ../dist/configure --with-posixmutexes + make + make install + +For embedded Lua scripting support (recommended and enabled by default), +you'll need Lua >= 5.1 library + development environment installed. +Note that only the library is needed at runtime, RPM never calls external +Lua interpreter for anything. Lua is available from + http://www.lua.org + +If SELinux support is desired, it can be enabled with --with-selinux option +to configure and libselinux development environment installed. SELinux +is available from + http://www.nsa.gov/selinux/ + +It may be desired to install bzip2, gzip, and xz/lzma so that RPM can use these +formats. Gzip is necessary to build packages that contain compressed +tar balls, these are quite common on the Internet. +These are availible from + http://www.gzip.org + http://www.bzip.org + http://tukaani.org/xz/ + +If you want to build the Python bindings to RPM library, it can be enabled +with --enable-python option to configure. You'll need to have Python (>= 2.3) +runtime and C API development environment installed, this is available from + http://www.python.org/ + +To enable POSIX.1e draft 15 file capabilities support, configure with +--with-cap. You'll also need recent libcap, available from: + http://ftp.kernel.org/pub/linux/libs/security/linux-privs/libcap2/ + +To enable POSIX 1003.1e draft 17 ACL verification support, configure with +--with-acl. You'll also need the ACL library, available from: + ftp://oss.sgi.com/projects/xfs/cmd_tars/ + +For best results you should compile with GCC and GNU Make. Users have +reported difficulty with other build tools (any patches to lift these +dependencies are welcome). Both GCC and GNU Make available from + http://www.gnu.org/ + +If National Language Support (NLS) is desired you will need gnu +gettext (currently this is required to build rpm but we hope to +lift this requirement soon), available from + http://www.gnu.org/ + +If you are going to hack the sources (or compile from source repository) +you will need most of the GNU development tools including: +autoconf, automake, gettext, libtool, makeinfo, perl, GNU m4, GNU tar +available from + http://www.gnu.org/ + +RPM distribution tarballs come with doxygen generated HTML documentation +for the public RPM API, but if you want to generate documentation for +the entire source including internal API's, use --enable-hackingdocs +configure option. Doxygen is needed for this, it's available at + http://www.stack.nl/~dimitri/doxygen/ + +If you plan on using cryptographic signatures you will need a version +of GPG, available from + http://www.gnupg.org/ + +To compile RPM: +-------------- + +RPM uses a small shell script to run: libtool, autoconf, +automake. This step should not be necessary if you are running a +released version of rpm, however if you have gotten the rpm sources +directly from the source code repository, you need to generate +intermediate files by running the autogen.sh script. + +The autogen.sh script checks that the required tools are installed. +The autogen.sh script also runs configure for you and passes the command line +arguments to configure. To run it without configure type: + + ./autogen.sh --noconfigure + +If your libraries are not in a standard place you will need to change +configures environment. These options can be passed directly to +configure or to autogen.sh which will pass them through to configure. + +Here is an example: + LIBS='-L/opt/libz/ -L/opt/BerkeleyDB/lib/' \ + CPPFLAGS='-I/opt/libz/ -I/opt/BerkeleyDB/include' \ + ./configure + +If you have build tools stored in non standard places you should check +the resulting Makefile to be sure that the tools you wish to use have +been correctly identified. The configure script will modify your path +before looking for the build tools and it may find versions of these +tools that you do not want. It uses the following search path + + MYPATH="/bin:/usr/bin:/usr/local/bin:$PATH:/opt/gnu/bin" + +now build the system with: + + make + +and then install with: + + make install + +If you wish to make a tarfile of the binaries so that you may easily +install on machines with OS package managers other then rpm (ed note: +what about putting gzip and bzip2 in the tar, modifying the +/etc/rpmrc?): + + make tar + +when installing. If you do install from a tarball, you will need to do +something like + + mkdir /var/lib/rpm + rpm --initdb + +to initialize your rpm database. + +Finally, if you wish to prepare an rpm source tar ball, you should do + + make dist + +To package RPM: +-------------- + +After RPM has been installed you can run rpm to build an rpm package. +Edit the rpm.spec file to mirror any special steps you needed to +follow to make rpm compile and change the specfile to match your +taste. You will need to put the rpm source tar file into the +SOURCES directory and we suggest putting the specfile in the +SPECS directory, then run rpmbuild -ba rpm.spec. You will end up +with two rpms which can be found in RPMS and SRPMS. + +If you are going to install rpm on machines with OS package managers +other then rpm, you may choose to install the base rpm package via a +cpio instead of a tar file. Instead of running "make tar" during the +build process, as discribed above, use the base rpm packages to create +a cpio. After the rpms have been created run rpm2cpio on the base rpm +package, this will give you a cpio package which can then use to +install rpm on a new system. + + rpm2cpio rpm-4.0-1.solaris2.6-sparc.rpm > rpm-4.0-1.solaris2.6-sparc.cpio + + +Non Linux Configuration Issues: +------------------------------ + + +OS dependencies: +---------------- + +Under RPM based Linux distributions all libraries (in fact all files +distributed with the OS) are under RPM control and this section is not +an issue. + +RPM will need to be informed of all the dependencies which were +satisfied before RPM was installed. Typically this only refers to +libraries that are installed by the OS, but may include other +libraries and packages which are availible at the time RPM is +installed and will not under RPM control. Another common example of +libraries which may need dependency provisions are precompiled +libraries which are installed by the OS package manager during system +build time. The list of dependencies you will wish to load into RPM +will depend on exactly how you bootstrap RPM onto your system and what +parts of the sytem you put into packages as well as on the specific OS +you are using. + +The script vpkg-provides.sh can be used to generate a package which +will satisfy the dependencies on your system. To run it you will need +to create a specfile header for this empty package and run the progam +with: + + --spec_header '/path/to/os-base-header.spec + +and if you wish to ensure that some directories are not traversed you +can use the option: + + --ignore_dirs 'grep-E|pattern|of|paths|to|ignore + +By default the generated rpm will include a %verifyscript to verify +checksum of all files traversed has not changed. This additional +check can be surpressed with: + + --no_verify + +The result of running the script will be a specfile which will create +a package continging all the dependencies found on the system. There +will be one provides line for each depednecy. The package will contain +none of the actual OS library files as it is assumed they are already +on your system and managed by other means. Here is a example +(truncated) of the provides lines used by one user of Digital Unix. (I +have put several provides on the same line for brevity) + +provides: /bin/sh /usr/bin/ksh /usr/bin/csh +provides: libc.so.osf.1 libm.so.osf.1 libcurses.so.xpg4 libdb.so.osf.1 +provides: libX11.so libXaw.so.6.0 libXext.so libXm.so.motif1.2 libXmu.so +provides: libdnet_stub.so.osf.1 libsecurity.so.osf.1 libpthread.so.osf.1 +provides: libexc.so.osf.1 libmach.so.osf.1 libdps.so libdpstk.so + + +The script vpkg-provides2.sh is underdevelopment as a more advanced +version of vpkg-provides.sh which is aware of many different unix +vendor packaging schemes. It will create one "dependency package" for +each unix package your OS vendor installed. + + +rpmfilename: +----------- + +If you plan on packaging for more then one OS you may want to edit +/etc/macros or /usr/lib/rpm/macros and change the line which has +rpmfilename to something which include both the %{_target_os} and +%{_target_cpu}. This will cause the name of the generated rpm files +to the operating system name as well as the architecture which the rpm +runs under. The line to change looks like: + +%_rpmfilename %%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm + +you may wish to include both the %{_target_os} and %{_target_cpu} in +the final base name, so that it's easier to distinguish between what +package is appropriate for a particular arch-os-version combo. We +suggest: + +%_rpmfilename %%{_target_platform/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{_target_platform}.rpm + +There is no %{_target_os_version} tag, so if you need to also +distinguish between RPMs for certain versions of the OS, you can +hard-code the version in the rpmrc on the build machine, so that .rpm +files are generated with the version as part of the filename. + +For example when one user builds RPMs for Digital Unix 4.0b and 4.0d, +optimization is important and he will build one set of RPMs for the +EV4 processor and another set for the EV56 processor. He specifies +both the OS version (if it's important, as it is for a few packages) +and the processor version by default by setting a special rpmfilename: +on the particular build machine. + +The "rpmfilename: "tag on one machine (Digital Unix 4.0d, EV56 PWS 433) +looks like: + +rpmfilename: %{_target_os}/4.0d/%{_target_cpu}/%{name}-%{version}-%{release}.%{_target_os}-%{_target_cpu}ev56.rpm + +For package `foo-1.1', at build time that would translate into: + + osf1/4.0d/alpha/foo-1.1-1.osf1-alphaev56.rpm + +The hyphen between the %{_target_cpu} and ev56 is left out for compatibility +with GNU Config.guess and because `alphaev56' looks more "normal" to +people with an alpha than alpha-ev56 for someone on an Intel Pentium +Pro would want `i586pro' over `i586-pro', but it does make parsing +this filename by other programs a bit more difficult. + + +GPG/PGP/PGP5 +------------ + +To use the signing features of rpm, you will need to configure certain +rpm macros in ~/.rpmmacros: + + %_signature gpg + %_gpg_name + %_gpg_path %(echo $HOME)/.gnupg + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..2eba936 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,312 @@ +# Top level Makefile for rpm + +ACLOCAL_AMFLAGS = -I m4 + +DISTCHECK_CONFIGURE_FLAGS = --with-external-db + +include $(top_srcdir)/rpm.am + +CLEANFILES = +EXTRA_DIST = CHANGES ChangeLog CREDITS GROUPS INSTALL \ + autodeps autogen.sh \ + db3/configure installplatform platform.in +BUILT_SOURCES = + +SUBDIRS = po misc +if WITH_INTERNAL_DB +SUBDIRS += db3 +endif +if WITH_LUA +SUBDIRS += luaext +endif +SUBDIRS += rpmio lib sign build scripts fileattrs doc . tests + +if ENABLE_PYTHON +SUBDIRS += python +endif + +if ENABLE_PLUGINS +SUBDIRS += plugins +endif + +DIST_SUBDIRS = po misc luaext rpmio lib sign build python scripts fileattrs doc tests plugins + +pkgconfigdir = $(libdir)/pkgconfig + +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/ +AM_CPPFLAGS += -I$(top_srcdir)/build +AM_CPPFLAGS += -I$(top_srcdir)/lib +AM_CPPFLAGS += -I$(top_srcdir)/rpmio +AM_CPPFLAGS += @WITH_NSS_INCLUDE@ +AM_CPPFLAGS += @WITH_POPT_INCLUDE@ +AM_CPPFLAGS += -I$(top_srcdir)/misc +AM_CPPFLAGS += -DLOCALEDIR="\"$(localedir)\"" +AM_CPPFLAGS += -DLIBRPMALIAS_FILENAME="\"rpmpopt-${VERSION}\"" + +pkginclude_HEADERS = +nodist_pkginclude_HEADERS = + +pkginclude_HEADERS += rpmio/argv.h +pkginclude_HEADERS += rpmio/rpmio.h +pkginclude_HEADERS += rpmio/rpmurl.h +pkginclude_HEADERS += rpmio/rpmmacro.h +pkginclude_HEADERS += rpmio/rpmlog.h +pkginclude_HEADERS += rpmio/rpmpgp.h +pkginclude_HEADERS += rpmio/rpmsq.h +pkginclude_HEADERS += rpmio/rpmstring.h +pkginclude_HEADERS += rpmio/rpmsw.h +pkginclude_HEADERS += rpmio/rpmfileutil.h +pkginclude_HEADERS += rpmio/rpmutil.h +pkginclude_HEADERS += rpmio/rpmkeyring.h + +pkginclude_HEADERS += lib/header.h +pkginclude_HEADERS += lib/rpmdb.h +pkginclude_HEADERS += lib/rpmcallback.h +pkginclude_HEADERS += lib/rpmcli.h +pkginclude_HEADERS += lib/rpmlib.h +pkginclude_HEADERS += lib/rpmds.h +pkginclude_HEADERS += lib/rpmfi.h +pkginclude_HEADERS += lib/rpmlegacy.h +pkginclude_HEADERS += lib/rpmpol.h +pkginclude_HEADERS += lib/rpmps.h +pkginclude_HEADERS += lib/rpmprob.h +pkginclude_HEADERS += lib/rpmtag.h +pkginclude_HEADERS += lib/rpmtd.h +pkginclude_HEADERS += lib/rpmte.h +pkginclude_HEADERS += lib/rpmts.h +pkginclude_HEADERS += lib/rpmtypes.h +pkginclude_HEADERS += lib/rpmvf.h + +pkginclude_HEADERS += sign/rpmsign.h + +pkginclude_HEADERS += build/rpmbuild.h +pkginclude_HEADERS += build/rpmfc.h +pkginclude_HEADERS += build/rpmspec.h + + +rpmbindir = `echo $(bindir) | $(SED) -e s,usr/bin,bin,` +rpmbin_PROGRAMS = rpm + +bin_PROGRAMS = rpm2cpio rpmbuild rpmdb rpmkeys rpmsign rpmspec + +rpmlibexec_PROGRAMS = +rpmconfig_SCRIPTS = find-provides find-requires mkinstalldirs \ + config.guess config.sub +DISTCLEANFILES = find-provides +DISTCLEANFILES += find-requires + +noinst_LTLIBRARIES = libcliutils.la +libcliutils_la_SOURCES = cliutils.h cliutils.c +libcliutils_la_CPPFLAGS = $(AM_CPPFLAGS) +libcliutils_la_LIBADD = lib/librpm.la rpmio/librpmio.la +libcliutils_la_LIBADD += @WITH_POPT_LIB@ + +rpm_SOURCES = rpmqv.c debug.h system.h +rpm_CPPFLAGS = $(AM_CPPFLAGS) -DIAM_RPMEIU -DIAM_RPMQ -DIAM_RPMV +rpm_LDADD = libcliutils.la +rpm_LDADD += lib/librpm.la rpmio/librpmio.la +rpm_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ + +rpmdb_SOURCES = rpmdb.c debug.h system.h +rpmdb_CPPFLAGS = $(AM_CPPFLAGS) +rpmdb_LDADD = libcliutils.la +rpmdb_LDADD += lib/librpm.la rpmio/librpmio.la +rpmdb_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ + +rpmkeys_SOURCES = rpmkeys.c debug.h system.h +rpmkeys_CPPFLAGS = $(AM_CPPFLAGS) +rpmkeys_LDADD = libcliutils.la +rpmkeys_LDADD += lib/librpm.la rpmio/librpmio.la +rpmkeys_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ + +rpmsign_SOURCES = rpmsign.c debug.h system.h +rpmsign_CPPFLAGS = $(AM_CPPFLAGS) +rpmsign_LDADD = libcliutils.la +rpmsign_LDADD += sign/librpmsign.la lib/librpm.la rpmio/librpmio.la +rpmsign_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ + +rpmbuild_SOURCES = rpmbuild.c debug.h system.h +rpmbuild_CPPFLAGS = $(AM_CPPFLAGS) +rpmbuild_LDADD = libcliutils.la +rpmbuild_LDADD += build/librpmbuild.la lib/librpm.la rpmio/librpmio.la +rpmbuild_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ + +rpmspec_SOURCES = rpmspec.c debug.h system.h +rpmspec_CPPFLAGS = $(AM_CPPFLAGS) +rpmspec_LDADD = libcliutils.la +rpmspec_LDADD += build/librpmbuild.la lib/librpm.la rpmio/librpmio.la +rpmspec_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ + +rpm2cpio_SOURCES = rpm2cpio.c debug.h system.h +rpm2cpio_LDADD = lib/librpm.la rpmio/librpmio.la +rpm2cpio_LDADD += @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ + + +if LIBELF +if LIBDWARF +rpmconfig_SCRIPTS += scripts/find-debuginfo.sh + +rpmlibexec_PROGRAMS += debugedit +debugedit_SOURCES = tools/debugedit.c tools/hashtab.c tools/hashtab.h +debugedit_LDADD = rpmio/librpmio.la +debugedit_LDADD += @WITH_LIBELF_LIB@ @WITH_POPT_LIB@ + +rpmlibexec_PROGRAMS += elfdeps +elfdeps_SOURCES = tools/elfdeps.c +elfdeps_LDADD = rpmio/librpmio.la +elfdeps_LDADD += @WITH_LIBELF_LIB@ @WITH_POPT_LIB@ +endif +endif + +rpmlibexec_PROGRAMS += javadeps +javadeps_SOURCES = tools/javadeps.c +javadeps_LDADD = + +rpmlibexec_PROGRAMS += rpmdeps +rpmdeps_SOURCES = tools/rpmdeps.c +rpmdeps_LDADD = lib/librpm.la rpmio/librpmio.la build/librpmbuild.la @WITH_POPT_LIB@ + +bin_PROGRAMS += rpmgraph +rpmgraph_SOURCES = tools/rpmgraph.c +rpmgraph_LDADD = lib/librpm.la rpmio/librpmio.la @WITH_POPT_LIB@ + +dist_bin_SCRIPTS = scripts/gendiff + +rpmconfig_DATA = rpmrc +rpmrc: $(top_srcdir)/rpmrc.in + @$(SED) \ + -e "s,[@]SYSCONFIGDIR[@],$(sysconfdir)/rpm,g" \ + < $(top_srcdir)/rpmrc.in > rpmrc.tmp \ + && ( cd $(top_builddir) && ./config.status --file=${subdir}/rpmrc:${subdir}/rpmrc.tmp ) +CLEANFILES += rpmrc.tmp rpmrc +EXTRA_DIST += rpmrc.in + +rpmconfig_DATA += macros +macros: $(top_srcdir)/macros.in + ( cd $(top_builddir) && ./config.status --file=${subdir}/macros:${subdir}/macros.in ) +CLEANFILES += macros +EXTRA_DIST += macros.in + +noinst_DATA = platform +platform: $(top_srcdir)/platform.in + @$(SED) \ + -e "s,[@]RPMCONFIGDIR[@],$(rpmconfigdir),g" \ + < $(top_srcdir)/platform.in > platform.tmp \ + && ( cd $(top_builddir) && ./config.status --file=${subdir}/platform:${subdir}/platform.tmp ) +CLEANFILES += platform.tmp platform +EXTRA_DIST += platform.in + +pkgconfig_DATA = rpm.pc +rpm.pc: $(top_srcdir)/rpm.pc.in + @$(SED) \ + -e "s,[@]RPMCONFIGDIR[@],$(rpmconfigdir),g" \ + < $(top_srcdir)/rpm.pc.in > rpm.pc.tmp \ + && ( cd $(top_builddir) && ./config.status --file=${subdir}/rpm.pc:${subdir}/rpm.pc.tmp ) +CLEANFILES += rpm.pc.tmp rpm.pc +EXTRA_DIST += rpm.pc.in + +rpmconfig_DATA += rpmpopt-$(VERSION) +rpmpopt-@VERSION@: $(top_srcdir)/rpmpopt.in + @$(SED) \ + -e "s,[@]RPMCONFIGDIR[@],$(rpmconfigdir),g" \ + -e "s,[@]BINDIR[@],$(bindir),g" \ + < $(top_srcdir)/rpmpopt.in > rpmpopt-@VERSION@.tmp \ + && ( cd $(top_builddir) && ./config.status --file=${subdir}/rpmpopt-@VERSION@:${subdir}/rpmpopt-@VERSION@.tmp ) +CLEANFILES += rpmpopt-@VERSION@.tmp rpmpopt-@VERSION@ +EXTRA_DIST += rpmpopt.in + +usrsrcdir = $(prefix)/src + +rpmvardir = $(localstatedir)/lib/rpm +rpmvar_DATA = + +install-exec-hook: + @rm -f $(DESTDIR)$(bindir)/rpmquery + @LN_S@ ../../bin/rpm $(DESTDIR)$(bindir)/rpmquery + @rm -f $(DESTDIR)$(bindir)/rpmverify + @LN_S@ ../../bin/rpm $(DESTDIR)$(bindir)/rpmverify + +install-data-local: + @case "@host_os@" in \ + solaris*|linux*|darwin*) \ + DESTDIR="$(DESTDIR)" pkglibdir="$(rpmconfigdir)" $(SHELL) $(top_srcdir)/installplatform rpmrc macros platform ;; \ + esac + @$(MKDIR_P) $(DESTDIR)$(localstatedir)/tmp + +# XXX to appease distcheck we need to remove "stuff" here... +uninstall-local: + @rm -f $(DESTDIR)$(bindir)/rpmquery + @rm -f $(DESTDIR)$(bindir)/rpmverify + @rm -rf $(DESTDIR)$(rpmconfigdir)/platform/ + +MAINTAINERCLEANFILES = ChangeLog + +# Build hacking docs only on request +if HACKINGDOCS +if DOXYGEN +doc/hacking.doxy: doc/hacking.doxy.in doc/hacking/Doxyheader Makefile.am + $(SED) \ + -e "s,\@top_srcdir\@/,$(top_srcdir)/,g" \ + -e "s,[@]HAVE_DOT[@],$(HAVE_DOT)," \ + -e "s,[@]PACKAGE[@],$(PACKAGE)," \ + -e "s,[@]VERSION[@],$(VERSION)," \ + < $(top_srcdir)/doc/hacking.doxy.in > doc/hacking.doxy + +doc/hacking/html/index.html: doc/hacking.doxy rpmpopt-@VERSION@ + @DOXYGEN@ doc/hacking.doxy +noinst_DATA += doc/hacking/html/index.html +endif +endif +EXTRA_DIST += doc/hacking.doxy.in doc/hacking/Doxyheader + +# Always build librpm docs +if DOXYGEN +doc/librpm.doxy: doc/librpm.doxy.in doc/librpm/Doxyheader Makefile.am $(pkginclude_HEADERS) + files=`echo " $(HEADERS)" | $(SED) -e "s, , \@top_srcdir\@/,g"`; \ + $(SED) -e "s,[@]pkginclude_HEADERS[@],$$files," \ + -e "s,\@top_srcdir\@/,$(top_srcdir)/,g" \ + -e "s,[@]HAVE_DOT[@],$(HAVE_DOT)," \ + -e "s,[@]PACKAGE[@],$(PACKAGE)," \ + -e "s,[@]VERSION[@],$(VERSION)," \ + < $(top_srcdir)/doc/librpm.doxy.in > doc/librpm.doxy + +doc/librpm/html/index.html: doc/librpm.doxy + @DOXYGEN@ doc/librpm.doxy +noinst_DATA += doc/librpm/html/index.html +endif +EXTRA_DIST += doc/librpm.doxy.in doc/librpm/Doxyheader +EXTRA_DIST += doc/librpm/html + +if WITH_INTERNAL_DB +db.h: $(top_builddir)/db3/db.h + $(LN_S) $(top_builddir)/db3/db.h $@ +BUILT_SOURCES += db.h +endif +DISTCLEANFILES += db.h + +clean-local: + rm -rf doc/hacking/html + rm -rf include + +distclean-local: + rm -rf Doxytags + rm -f stamp-h.in db3/*.orig db3/db3lobjs + +maintainer-clean-local: + rm -rf doc/librpm/html + +$(top_srcdir)/preinstall.am: Makefile.am + rm -f $(top_srcdir)/preinstall.am + @for f in $(HEADERS); do \ + b=`basename $$f`; \ + echo 'include/rpm/'$$b': '$$f' include/rpm/$$(dirstamp)' >> $(top_srcdir)/preinstall.am;\ + echo ' $$(INSTALL_DATA) $$(top_srcdir)/'$$f' include/rpm/'$$b >> $(top_srcdir)/preinstall.am; \ + echo 'BUILT_SOURCES += include/rpm/'$$b >> $(top_srcdir)/preinstall.am; \ + echo 'CLEANFILES += include/rpm/'$$b >> $(top_srcdir)/preinstall.am; \ + done + +include/rpm/$(dirstamp): + @$(MKDIR_P) include/rpm + @: > include/rpm/$(dirstamp) + +include $(top_srcdir)/preinstall.am diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..9acc244 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,1792 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Top level Makefile for rpm + + + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(am__configure_deps) $(dist_bin_SCRIPTS) \ + $(pkginclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/configure $(top_srcdir)/preinstall.am \ + $(top_srcdir)/rpm.am ABOUT-NLS COPYING ChangeLog INSTALL \ + config.guess config.rpath config.sub depcomp install-sh \ + ltmain.sh missing mkinstalldirs +@WITH_INTERNAL_DB_TRUE@am__append_1 = db3 +@WITH_LUA_TRUE@am__append_2 = luaext +@ENABLE_PYTHON_TRUE@am__append_3 = python +@ENABLE_PLUGINS_TRUE@am__append_4 = plugins +rpmbin_PROGRAMS = rpm$(EXEEXT) +bin_PROGRAMS = rpm2cpio$(EXEEXT) rpmbuild$(EXEEXT) rpmdb$(EXEEXT) \ + rpmkeys$(EXEEXT) rpmsign$(EXEEXT) rpmspec$(EXEEXT) \ + rpmgraph$(EXEEXT) +rpmlibexec_PROGRAMS = $(am__EXEEXT_1) javadeps$(EXEEXT) \ + rpmdeps$(EXEEXT) +@LIBDWARF_TRUE@@LIBELF_TRUE@am__append_5 = scripts/find-debuginfo.sh +@LIBDWARF_TRUE@@LIBELF_TRUE@am__append_6 = debugedit elfdeps +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@am__append_7 = doc/hacking/html/index.html +@DOXYGEN_TRUE@am__append_8 = doc/librpm/html/index.html +@WITH_INTERNAL_DB_TRUE@am__append_9 = db.h +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libcliutils_la_DEPENDENCIES = lib/librpm.la rpmio/librpmio.la +am_libcliutils_la_OBJECTS = libcliutils_la-cliutils.lo +libcliutils_la_OBJECTS = $(am_libcliutils_la_OBJECTS) +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(rpmbindir)" \ + "$(DESTDIR)$(rpmlibexecdir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(rpmconfigdir)" "$(DESTDIR)$(pkgconfigdir)" \ + "$(DESTDIR)$(rpmconfigdir)" "$(DESTDIR)$(rpmvardir)" \ + "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)" +@LIBDWARF_TRUE@@LIBELF_TRUE@am__EXEEXT_1 = debugedit$(EXEEXT) \ +@LIBDWARF_TRUE@@LIBELF_TRUE@ elfdeps$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) $(rpmbin_PROGRAMS) $(rpmlibexec_PROGRAMS) +am__debugedit_SOURCES_DIST = tools/debugedit.c tools/hashtab.c \ + tools/hashtab.h +am__dirstamp = $(am__leading_dot)dirstamp +@LIBDWARF_TRUE@@LIBELF_TRUE@am_debugedit_OBJECTS = \ +@LIBDWARF_TRUE@@LIBELF_TRUE@ tools/debugedit.$(OBJEXT) \ +@LIBDWARF_TRUE@@LIBELF_TRUE@ tools/hashtab.$(OBJEXT) +debugedit_OBJECTS = $(am_debugedit_OBJECTS) +@LIBDWARF_TRUE@@LIBELF_TRUE@debugedit_DEPENDENCIES = \ +@LIBDWARF_TRUE@@LIBELF_TRUE@ rpmio/librpmio.la +am__elfdeps_SOURCES_DIST = tools/elfdeps.c +@LIBDWARF_TRUE@@LIBELF_TRUE@am_elfdeps_OBJECTS = \ +@LIBDWARF_TRUE@@LIBELF_TRUE@ tools/elfdeps.$(OBJEXT) +elfdeps_OBJECTS = $(am_elfdeps_OBJECTS) +@LIBDWARF_TRUE@@LIBELF_TRUE@elfdeps_DEPENDENCIES = rpmio/librpmio.la +am_javadeps_OBJECTS = tools/javadeps.$(OBJEXT) +javadeps_OBJECTS = $(am_javadeps_OBJECTS) +javadeps_DEPENDENCIES = +am_rpm_OBJECTS = rpm-rpmqv.$(OBJEXT) +rpm_OBJECTS = $(am_rpm_OBJECTS) +rpm_DEPENDENCIES = libcliutils.la lib/librpm.la rpmio/librpmio.la +am_rpm2cpio_OBJECTS = rpm2cpio.$(OBJEXT) +rpm2cpio_OBJECTS = $(am_rpm2cpio_OBJECTS) +rpm2cpio_DEPENDENCIES = lib/librpm.la rpmio/librpmio.la +am_rpmbuild_OBJECTS = rpmbuild-rpmbuild.$(OBJEXT) +rpmbuild_OBJECTS = $(am_rpmbuild_OBJECTS) +rpmbuild_DEPENDENCIES = libcliutils.la build/librpmbuild.la \ + lib/librpm.la rpmio/librpmio.la +am_rpmdb_OBJECTS = rpmdb-rpmdb.$(OBJEXT) +rpmdb_OBJECTS = $(am_rpmdb_OBJECTS) +rpmdb_DEPENDENCIES = libcliutils.la lib/librpm.la rpmio/librpmio.la +am_rpmdeps_OBJECTS = tools/rpmdeps.$(OBJEXT) +rpmdeps_OBJECTS = $(am_rpmdeps_OBJECTS) +rpmdeps_DEPENDENCIES = lib/librpm.la rpmio/librpmio.la \ + build/librpmbuild.la +am_rpmgraph_OBJECTS = tools/rpmgraph.$(OBJEXT) +rpmgraph_OBJECTS = $(am_rpmgraph_OBJECTS) +rpmgraph_DEPENDENCIES = lib/librpm.la rpmio/librpmio.la +am_rpmkeys_OBJECTS = rpmkeys-rpmkeys.$(OBJEXT) +rpmkeys_OBJECTS = $(am_rpmkeys_OBJECTS) +rpmkeys_DEPENDENCIES = libcliutils.la lib/librpm.la rpmio/librpmio.la +am_rpmsign_OBJECTS = rpmsign-rpmsign.$(OBJEXT) +rpmsign_OBJECTS = $(am_rpmsign_OBJECTS) +rpmsign_DEPENDENCIES = libcliutils.la sign/librpmsign.la lib/librpm.la \ + rpmio/librpmio.la +am_rpmspec_OBJECTS = rpmspec-rpmspec.$(OBJEXT) +rpmspec_OBJECTS = $(am_rpmspec_OBJECTS) +rpmspec_DEPENDENCIES = libcliutils.la build/librpmbuild.la \ + lib/librpm.la rpmio/librpmio.la +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +SCRIPTS = $(dist_bin_SCRIPTS) $(rpmconfig_SCRIPTS) +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libcliutils_la_SOURCES) $(debugedit_SOURCES) \ + $(elfdeps_SOURCES) $(javadeps_SOURCES) $(rpm_SOURCES) \ + $(rpm2cpio_SOURCES) $(rpmbuild_SOURCES) $(rpmdb_SOURCES) \ + $(rpmdeps_SOURCES) $(rpmgraph_SOURCES) $(rpmkeys_SOURCES) \ + $(rpmsign_SOURCES) $(rpmspec_SOURCES) +DIST_SOURCES = $(libcliutils_la_SOURCES) $(am__debugedit_SOURCES_DIST) \ + $(am__elfdeps_SOURCES_DIST) $(javadeps_SOURCES) $(rpm_SOURCES) \ + $(rpm2cpio_SOURCES) $(rpmbuild_SOURCES) $(rpmdb_SOURCES) \ + $(rpmdeps_SOURCES) $(rpmgraph_SOURCES) $(rpmkeys_SOURCES) \ + $(rpmsign_SOURCES) $(rpmspec_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +DATA = $(noinst_DATA) $(pkgconfig_DATA) $(rpmconfig_DATA) \ + $(rpmvar_DATA) +HEADERS = $(nodist_pkginclude_HEADERS) $(pkginclude_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I m4 +DISTCHECK_CONFIGURE_FLAGS = --with-external-db + +# Internal binaries +rpmlibexecdir = $(prefix)/lib/rpm + +# Host independent config files +rpmconfigdir = $(prefix)/lib/rpm +CLEANFILES = rpmrc.tmp rpmrc macros platform.tmp platform rpm.pc.tmp \ + rpm.pc rpmpopt-@VERSION@.tmp rpmpopt-@VERSION@ \ + include/rpm/argv.h include/rpm/rpmio.h include/rpm/rpmurl.h \ + include/rpm/rpmmacro.h include/rpm/rpmlog.h \ + include/rpm/rpmpgp.h include/rpm/rpmsq.h \ + include/rpm/rpmstring.h include/rpm/rpmsw.h \ + include/rpm/rpmfileutil.h include/rpm/rpmutil.h \ + include/rpm/rpmkeyring.h include/rpm/header.h \ + include/rpm/rpmdb.h include/rpm/rpmcallback.h \ + include/rpm/rpmcli.h include/rpm/rpmlib.h include/rpm/rpmds.h \ + include/rpm/rpmfi.h include/rpm/rpmlegacy.h \ + include/rpm/rpmpol.h include/rpm/rpmps.h include/rpm/rpmprob.h \ + include/rpm/rpmtag.h include/rpm/rpmtd.h include/rpm/rpmte.h \ + include/rpm/rpmts.h include/rpm/rpmtypes.h include/rpm/rpmvf.h \ + include/rpm/rpmsign.h include/rpm/rpmbuild.h \ + include/rpm/rpmfc.h include/rpm/rpmspec.h +EXTRA_DIST = CHANGES ChangeLog CREDITS GROUPS INSTALL autodeps \ + autogen.sh db3/configure installplatform platform.in rpmrc.in \ + macros.in platform.in rpm.pc.in rpmpopt.in doc/hacking.doxy.in \ + doc/hacking/Doxyheader doc/librpm.doxy.in \ + doc/librpm/Doxyheader doc/librpm/html +BUILT_SOURCES = $(am__append_9) include/rpm/argv.h include/rpm/rpmio.h \ + include/rpm/rpmurl.h include/rpm/rpmmacro.h \ + include/rpm/rpmlog.h include/rpm/rpmpgp.h include/rpm/rpmsq.h \ + include/rpm/rpmstring.h include/rpm/rpmsw.h \ + include/rpm/rpmfileutil.h include/rpm/rpmutil.h \ + include/rpm/rpmkeyring.h include/rpm/header.h \ + include/rpm/rpmdb.h include/rpm/rpmcallback.h \ + include/rpm/rpmcli.h include/rpm/rpmlib.h include/rpm/rpmds.h \ + include/rpm/rpmfi.h include/rpm/rpmlegacy.h \ + include/rpm/rpmpol.h include/rpm/rpmps.h include/rpm/rpmprob.h \ + include/rpm/rpmtag.h include/rpm/rpmtd.h include/rpm/rpmte.h \ + include/rpm/rpmts.h include/rpm/rpmtypes.h include/rpm/rpmvf.h \ + include/rpm/rpmsign.h include/rpm/rpmbuild.h \ + include/rpm/rpmfc.h include/rpm/rpmspec.h +SUBDIRS = po misc $(am__append_1) $(am__append_2) rpmio lib sign build \ + scripts fileattrs doc . tests $(am__append_3) $(am__append_4) +DIST_SUBDIRS = po misc luaext rpmio lib sign build python scripts fileattrs doc tests plugins +pkgconfigdir = $(libdir)/pkgconfig +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ + -I$(top_builddir)/include/ -I$(top_srcdir)/build \ + -I$(top_srcdir)/lib -I$(top_srcdir)/rpmio @WITH_NSS_INCLUDE@ \ + @WITH_POPT_INCLUDE@ -I$(top_srcdir)/misc \ + -DLOCALEDIR="\"$(localedir)\"" \ + -DLIBRPMALIAS_FILENAME="\"rpmpopt-${VERSION}\"" +pkginclude_HEADERS = rpmio/argv.h rpmio/rpmio.h rpmio/rpmurl.h \ + rpmio/rpmmacro.h rpmio/rpmlog.h rpmio/rpmpgp.h rpmio/rpmsq.h \ + rpmio/rpmstring.h rpmio/rpmsw.h rpmio/rpmfileutil.h \ + rpmio/rpmutil.h rpmio/rpmkeyring.h lib/header.h lib/rpmdb.h \ + lib/rpmcallback.h lib/rpmcli.h lib/rpmlib.h lib/rpmds.h \ + lib/rpmfi.h lib/rpmlegacy.h lib/rpmpol.h lib/rpmps.h \ + lib/rpmprob.h lib/rpmtag.h lib/rpmtd.h lib/rpmte.h lib/rpmts.h \ + lib/rpmtypes.h lib/rpmvf.h sign/rpmsign.h build/rpmbuild.h \ + build/rpmfc.h build/rpmspec.h +nodist_pkginclude_HEADERS = +rpmbindir = `echo $(bindir) | $(SED) -e s,usr/bin,bin,` +rpmconfig_SCRIPTS = find-provides find-requires mkinstalldirs \ + config.guess config.sub $(am__append_5) +DISTCLEANFILES = find-provides find-requires db.h +noinst_LTLIBRARIES = libcliutils.la +libcliutils_la_SOURCES = cliutils.h cliutils.c +libcliutils_la_CPPFLAGS = $(AM_CPPFLAGS) +libcliutils_la_LIBADD = lib/librpm.la rpmio/librpmio.la \ + @WITH_POPT_LIB@ $(am__empty) +rpm_SOURCES = rpmqv.c debug.h system.h +rpm_CPPFLAGS = $(AM_CPPFLAGS) -DIAM_RPMEIU -DIAM_RPMQ -DIAM_RPMV +rpm_LDADD = libcliutils.la lib/librpm.la rpmio/librpmio.la \ + @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ $(am__empty) +rpmdb_SOURCES = rpmdb.c debug.h system.h +rpmdb_CPPFLAGS = $(AM_CPPFLAGS) +rpmdb_LDADD = libcliutils.la lib/librpm.la rpmio/librpmio.la \ + @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ $(am__empty) +rpmkeys_SOURCES = rpmkeys.c debug.h system.h +rpmkeys_CPPFLAGS = $(AM_CPPFLAGS) +rpmkeys_LDADD = libcliutils.la lib/librpm.la rpmio/librpmio.la \ + @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ $(am__empty) +rpmsign_SOURCES = rpmsign.c debug.h system.h +rpmsign_CPPFLAGS = $(AM_CPPFLAGS) +rpmsign_LDADD = libcliutils.la sign/librpmsign.la lib/librpm.la \ + rpmio/librpmio.la @WITH_NSS_LIB@ @WITH_POPT_LIB@ \ + @WITH_ZLIB_LIB@ $(am__empty) +rpmbuild_SOURCES = rpmbuild.c debug.h system.h +rpmbuild_CPPFLAGS = $(AM_CPPFLAGS) +rpmbuild_LDADD = libcliutils.la build/librpmbuild.la lib/librpm.la \ + rpmio/librpmio.la @WITH_NSS_LIB@ @WITH_POPT_LIB@ \ + @WITH_ZLIB_LIB@ $(am__empty) +rpmspec_SOURCES = rpmspec.c debug.h system.h +rpmspec_CPPFLAGS = $(AM_CPPFLAGS) +rpmspec_LDADD = libcliutils.la build/librpmbuild.la lib/librpm.la \ + rpmio/librpmio.la @WITH_NSS_LIB@ @WITH_POPT_LIB@ \ + @WITH_ZLIB_LIB@ $(am__empty) +rpm2cpio_SOURCES = rpm2cpio.c debug.h system.h +rpm2cpio_LDADD = lib/librpm.la rpmio/librpmio.la @WITH_NSS_LIB@ \ + @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ $(am__empty) +@LIBDWARF_TRUE@@LIBELF_TRUE@debugedit_SOURCES = tools/debugedit.c tools/hashtab.c tools/hashtab.h +@LIBDWARF_TRUE@@LIBELF_TRUE@debugedit_LDADD = rpmio/librpmio.la \ +@LIBDWARF_TRUE@@LIBELF_TRUE@ @WITH_LIBELF_LIB@ @WITH_POPT_LIB@ \ +@LIBDWARF_TRUE@@LIBELF_TRUE@ $(am__empty) +@LIBDWARF_TRUE@@LIBELF_TRUE@elfdeps_SOURCES = tools/elfdeps.c +@LIBDWARF_TRUE@@LIBELF_TRUE@elfdeps_LDADD = rpmio/librpmio.la \ +@LIBDWARF_TRUE@@LIBELF_TRUE@ @WITH_LIBELF_LIB@ @WITH_POPT_LIB@ \ +@LIBDWARF_TRUE@@LIBELF_TRUE@ $(am__empty) +javadeps_SOURCES = tools/javadeps.c +javadeps_LDADD = +rpmdeps_SOURCES = tools/rpmdeps.c +rpmdeps_LDADD = lib/librpm.la rpmio/librpmio.la build/librpmbuild.la @WITH_POPT_LIB@ +rpmgraph_SOURCES = tools/rpmgraph.c +rpmgraph_LDADD = lib/librpm.la rpmio/librpmio.la @WITH_POPT_LIB@ +dist_bin_SCRIPTS = scripts/gendiff +rpmconfig_DATA = rpmrc macros rpmpopt-$(VERSION) +noinst_DATA = platform $(am__append_7) $(am__append_8) +pkgconfig_DATA = rpm.pc +usrsrcdir = $(prefix)/src +rpmvardir = $(localstatedir)/lib/rpm +rpmvar_DATA = +MAINTAINERCLEANFILES = ChangeLog +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/rpm.am $(top_srcdir)/preinstall.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libcliutils.la: $(libcliutils_la_OBJECTS) $(libcliutils_la_DEPENDENCIES) + $(LINK) $(libcliutils_la_OBJECTS) $(libcliutils_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +install-rpmbinPROGRAMS: $(rpmbin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(rpmbindir)" || $(MKDIR_P) "$(DESTDIR)$(rpmbindir)" + @list='$(rpmbin_PROGRAMS)'; test -n "$(rpmbindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(rpmbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(rpmbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-rpmbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(rpmbin_PROGRAMS)'; test -n "$(rpmbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(rpmbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(rpmbindir)" && rm -f $$files + +clean-rpmbinPROGRAMS: + @list='$(rpmbin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +install-rpmlibexecPROGRAMS: $(rpmlibexec_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(rpmlibexecdir)" || $(MKDIR_P) "$(DESTDIR)$(rpmlibexecdir)" + @list='$(rpmlibexec_PROGRAMS)'; test -n "$(rpmlibexecdir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(rpmlibexecdir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(rpmlibexecdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-rpmlibexecPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(rpmlibexec_PROGRAMS)'; test -n "$(rpmlibexecdir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(rpmlibexecdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(rpmlibexecdir)" && rm -f $$files + +clean-rpmlibexecPROGRAMS: + @list='$(rpmlibexec_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +tools/$(am__dirstamp): + @$(MKDIR_P) tools + @: > tools/$(am__dirstamp) +tools/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) tools/$(DEPDIR) + @: > tools/$(DEPDIR)/$(am__dirstamp) +tools/debugedit.$(OBJEXT): tools/$(am__dirstamp) \ + tools/$(DEPDIR)/$(am__dirstamp) +tools/hashtab.$(OBJEXT): tools/$(am__dirstamp) \ + tools/$(DEPDIR)/$(am__dirstamp) +debugedit$(EXEEXT): $(debugedit_OBJECTS) $(debugedit_DEPENDENCIES) + @rm -f debugedit$(EXEEXT) + $(LINK) $(debugedit_OBJECTS) $(debugedit_LDADD) $(LIBS) +tools/elfdeps.$(OBJEXT): tools/$(am__dirstamp) \ + tools/$(DEPDIR)/$(am__dirstamp) +elfdeps$(EXEEXT): $(elfdeps_OBJECTS) $(elfdeps_DEPENDENCIES) + @rm -f elfdeps$(EXEEXT) + $(LINK) $(elfdeps_OBJECTS) $(elfdeps_LDADD) $(LIBS) +tools/javadeps.$(OBJEXT): tools/$(am__dirstamp) \ + tools/$(DEPDIR)/$(am__dirstamp) +javadeps$(EXEEXT): $(javadeps_OBJECTS) $(javadeps_DEPENDENCIES) + @rm -f javadeps$(EXEEXT) + $(LINK) $(javadeps_OBJECTS) $(javadeps_LDADD) $(LIBS) +rpm$(EXEEXT): $(rpm_OBJECTS) $(rpm_DEPENDENCIES) + @rm -f rpm$(EXEEXT) + $(LINK) $(rpm_OBJECTS) $(rpm_LDADD) $(LIBS) +rpm2cpio$(EXEEXT): $(rpm2cpio_OBJECTS) $(rpm2cpio_DEPENDENCIES) + @rm -f rpm2cpio$(EXEEXT) + $(LINK) $(rpm2cpio_OBJECTS) $(rpm2cpio_LDADD) $(LIBS) +rpmbuild$(EXEEXT): $(rpmbuild_OBJECTS) $(rpmbuild_DEPENDENCIES) + @rm -f rpmbuild$(EXEEXT) + $(LINK) $(rpmbuild_OBJECTS) $(rpmbuild_LDADD) $(LIBS) +rpmdb$(EXEEXT): $(rpmdb_OBJECTS) $(rpmdb_DEPENDENCIES) + @rm -f rpmdb$(EXEEXT) + $(LINK) $(rpmdb_OBJECTS) $(rpmdb_LDADD) $(LIBS) +tools/rpmdeps.$(OBJEXT): tools/$(am__dirstamp) \ + tools/$(DEPDIR)/$(am__dirstamp) +rpmdeps$(EXEEXT): $(rpmdeps_OBJECTS) $(rpmdeps_DEPENDENCIES) + @rm -f rpmdeps$(EXEEXT) + $(LINK) $(rpmdeps_OBJECTS) $(rpmdeps_LDADD) $(LIBS) +tools/rpmgraph.$(OBJEXT): tools/$(am__dirstamp) \ + tools/$(DEPDIR)/$(am__dirstamp) +rpmgraph$(EXEEXT): $(rpmgraph_OBJECTS) $(rpmgraph_DEPENDENCIES) + @rm -f rpmgraph$(EXEEXT) + $(LINK) $(rpmgraph_OBJECTS) $(rpmgraph_LDADD) $(LIBS) +rpmkeys$(EXEEXT): $(rpmkeys_OBJECTS) $(rpmkeys_DEPENDENCIES) + @rm -f rpmkeys$(EXEEXT) + $(LINK) $(rpmkeys_OBJECTS) $(rpmkeys_LDADD) $(LIBS) +rpmsign$(EXEEXT): $(rpmsign_OBJECTS) $(rpmsign_DEPENDENCIES) + @rm -f rpmsign$(EXEEXT) + $(LINK) $(rpmsign_OBJECTS) $(rpmsign_LDADD) $(LIBS) +rpmspec$(EXEEXT): $(rpmspec_OBJECTS) $(rpmspec_DEPENDENCIES) + @rm -f rpmspec$(EXEEXT) + $(LINK) $(rpmspec_OBJECTS) $(rpmspec_LDADD) $(LIBS) +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-dist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files +install-rpmconfigSCRIPTS: $(rpmconfig_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(rpmconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(rpmconfigdir)" + @list='$(rpmconfig_SCRIPTS)'; test -n "$(rpmconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(rpmconfigdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(rpmconfigdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-rpmconfigSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(rpmconfig_SCRIPTS)'; test -n "$(rpmconfigdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(rpmconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(rpmconfigdir)" && rm -f $$files + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f tools/debugedit.$(OBJEXT) + -rm -f tools/elfdeps.$(OBJEXT) + -rm -f tools/hashtab.$(OBJEXT) + -rm -f tools/javadeps.$(OBJEXT) + -rm -f tools/rpmdeps.$(OBJEXT) + -rm -f tools/rpmgraph.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcliutils_la-cliutils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpm-rpmqv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpm2cpio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmbuild-rpmbuild.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmdb-rpmdb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmkeys-rpmkeys.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmsign-rpmsign.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmspec-rpmspec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/debugedit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/elfdeps.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/hashtab.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/javadeps.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/rpmdeps.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/rpmgraph.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libcliutils_la-cliutils.lo: cliutils.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcliutils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcliutils_la-cliutils.lo -MD -MP -MF $(DEPDIR)/libcliutils_la-cliutils.Tpo -c -o libcliutils_la-cliutils.lo `test -f 'cliutils.c' || echo '$(srcdir)/'`cliutils.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libcliutils_la-cliutils.Tpo $(DEPDIR)/libcliutils_la-cliutils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cliutils.c' object='libcliutils_la-cliutils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcliutils_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcliutils_la-cliutils.lo `test -f 'cliutils.c' || echo '$(srcdir)/'`cliutils.c + +rpm-rpmqv.o: rpmqv.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpm_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpm-rpmqv.o -MD -MP -MF $(DEPDIR)/rpm-rpmqv.Tpo -c -o rpm-rpmqv.o `test -f 'rpmqv.c' || echo '$(srcdir)/'`rpmqv.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpm-rpmqv.Tpo $(DEPDIR)/rpm-rpmqv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmqv.c' object='rpm-rpmqv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpm_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpm-rpmqv.o `test -f 'rpmqv.c' || echo '$(srcdir)/'`rpmqv.c + +rpm-rpmqv.obj: rpmqv.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpm_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpm-rpmqv.obj -MD -MP -MF $(DEPDIR)/rpm-rpmqv.Tpo -c -o rpm-rpmqv.obj `if test -f 'rpmqv.c'; then $(CYGPATH_W) 'rpmqv.c'; else $(CYGPATH_W) '$(srcdir)/rpmqv.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpm-rpmqv.Tpo $(DEPDIR)/rpm-rpmqv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmqv.c' object='rpm-rpmqv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpm_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpm-rpmqv.obj `if test -f 'rpmqv.c'; then $(CYGPATH_W) 'rpmqv.c'; else $(CYGPATH_W) '$(srcdir)/rpmqv.c'; fi` + +rpmbuild-rpmbuild.o: rpmbuild.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmbuild_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmbuild-rpmbuild.o -MD -MP -MF $(DEPDIR)/rpmbuild-rpmbuild.Tpo -c -o rpmbuild-rpmbuild.o `test -f 'rpmbuild.c' || echo '$(srcdir)/'`rpmbuild.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmbuild-rpmbuild.Tpo $(DEPDIR)/rpmbuild-rpmbuild.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmbuild.c' object='rpmbuild-rpmbuild.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmbuild_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmbuild-rpmbuild.o `test -f 'rpmbuild.c' || echo '$(srcdir)/'`rpmbuild.c + +rpmbuild-rpmbuild.obj: rpmbuild.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmbuild_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmbuild-rpmbuild.obj -MD -MP -MF $(DEPDIR)/rpmbuild-rpmbuild.Tpo -c -o rpmbuild-rpmbuild.obj `if test -f 'rpmbuild.c'; then $(CYGPATH_W) 'rpmbuild.c'; else $(CYGPATH_W) '$(srcdir)/rpmbuild.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmbuild-rpmbuild.Tpo $(DEPDIR)/rpmbuild-rpmbuild.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmbuild.c' object='rpmbuild-rpmbuild.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmbuild_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmbuild-rpmbuild.obj `if test -f 'rpmbuild.c'; then $(CYGPATH_W) 'rpmbuild.c'; else $(CYGPATH_W) '$(srcdir)/rpmbuild.c'; fi` + +rpmdb-rpmdb.o: rpmdb.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmdb_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmdb-rpmdb.o -MD -MP -MF $(DEPDIR)/rpmdb-rpmdb.Tpo -c -o rpmdb-rpmdb.o `test -f 'rpmdb.c' || echo '$(srcdir)/'`rpmdb.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmdb-rpmdb.Tpo $(DEPDIR)/rpmdb-rpmdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmdb.c' object='rpmdb-rpmdb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmdb_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmdb-rpmdb.o `test -f 'rpmdb.c' || echo '$(srcdir)/'`rpmdb.c + +rpmdb-rpmdb.obj: rpmdb.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmdb_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmdb-rpmdb.obj -MD -MP -MF $(DEPDIR)/rpmdb-rpmdb.Tpo -c -o rpmdb-rpmdb.obj `if test -f 'rpmdb.c'; then $(CYGPATH_W) 'rpmdb.c'; else $(CYGPATH_W) '$(srcdir)/rpmdb.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmdb-rpmdb.Tpo $(DEPDIR)/rpmdb-rpmdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmdb.c' object='rpmdb-rpmdb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmdb_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmdb-rpmdb.obj `if test -f 'rpmdb.c'; then $(CYGPATH_W) 'rpmdb.c'; else $(CYGPATH_W) '$(srcdir)/rpmdb.c'; fi` + +rpmkeys-rpmkeys.o: rpmkeys.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmkeys_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmkeys-rpmkeys.o -MD -MP -MF $(DEPDIR)/rpmkeys-rpmkeys.Tpo -c -o rpmkeys-rpmkeys.o `test -f 'rpmkeys.c' || echo '$(srcdir)/'`rpmkeys.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmkeys-rpmkeys.Tpo $(DEPDIR)/rpmkeys-rpmkeys.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmkeys.c' object='rpmkeys-rpmkeys.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmkeys_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmkeys-rpmkeys.o `test -f 'rpmkeys.c' || echo '$(srcdir)/'`rpmkeys.c + +rpmkeys-rpmkeys.obj: rpmkeys.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmkeys_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmkeys-rpmkeys.obj -MD -MP -MF $(DEPDIR)/rpmkeys-rpmkeys.Tpo -c -o rpmkeys-rpmkeys.obj `if test -f 'rpmkeys.c'; then $(CYGPATH_W) 'rpmkeys.c'; else $(CYGPATH_W) '$(srcdir)/rpmkeys.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmkeys-rpmkeys.Tpo $(DEPDIR)/rpmkeys-rpmkeys.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmkeys.c' object='rpmkeys-rpmkeys.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmkeys_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmkeys-rpmkeys.obj `if test -f 'rpmkeys.c'; then $(CYGPATH_W) 'rpmkeys.c'; else $(CYGPATH_W) '$(srcdir)/rpmkeys.c'; fi` + +rpmsign-rpmsign.o: rpmsign.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmsign_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmsign-rpmsign.o -MD -MP -MF $(DEPDIR)/rpmsign-rpmsign.Tpo -c -o rpmsign-rpmsign.o `test -f 'rpmsign.c' || echo '$(srcdir)/'`rpmsign.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmsign-rpmsign.Tpo $(DEPDIR)/rpmsign-rpmsign.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmsign.c' object='rpmsign-rpmsign.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmsign_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmsign-rpmsign.o `test -f 'rpmsign.c' || echo '$(srcdir)/'`rpmsign.c + +rpmsign-rpmsign.obj: rpmsign.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmsign_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmsign-rpmsign.obj -MD -MP -MF $(DEPDIR)/rpmsign-rpmsign.Tpo -c -o rpmsign-rpmsign.obj `if test -f 'rpmsign.c'; then $(CYGPATH_W) 'rpmsign.c'; else $(CYGPATH_W) '$(srcdir)/rpmsign.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmsign-rpmsign.Tpo $(DEPDIR)/rpmsign-rpmsign.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmsign.c' object='rpmsign-rpmsign.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmsign_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmsign-rpmsign.obj `if test -f 'rpmsign.c'; then $(CYGPATH_W) 'rpmsign.c'; else $(CYGPATH_W) '$(srcdir)/rpmsign.c'; fi` + +rpmspec-rpmspec.o: rpmspec.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmspec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmspec-rpmspec.o -MD -MP -MF $(DEPDIR)/rpmspec-rpmspec.Tpo -c -o rpmspec-rpmspec.o `test -f 'rpmspec.c' || echo '$(srcdir)/'`rpmspec.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmspec-rpmspec.Tpo $(DEPDIR)/rpmspec-rpmspec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmspec.c' object='rpmspec-rpmspec.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmspec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmspec-rpmspec.o `test -f 'rpmspec.c' || echo '$(srcdir)/'`rpmspec.c + +rpmspec-rpmspec.obj: rpmspec.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmspec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rpmspec-rpmspec.obj -MD -MP -MF $(DEPDIR)/rpmspec-rpmspec.Tpo -c -o rpmspec-rpmspec.obj `if test -f 'rpmspec.c'; then $(CYGPATH_W) 'rpmspec.c'; else $(CYGPATH_W) '$(srcdir)/rpmspec.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/rpmspec-rpmspec.Tpo $(DEPDIR)/rpmspec-rpmspec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rpmspec.c' object='rpmspec-rpmspec.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rpmspec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rpmspec-rpmspec.obj `if test -f 'rpmspec.c'; then $(CYGPATH_W) 'rpmspec.c'; else $(CYGPATH_W) '$(srcdir)/rpmspec.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files +install-rpmconfigDATA: $(rpmconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(rpmconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(rpmconfigdir)" + @list='$(rpmconfig_DATA)'; test -n "$(rpmconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(rpmconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(rpmconfigdir)" || exit $$?; \ + done + +uninstall-rpmconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(rpmconfig_DATA)'; test -n "$(rpmconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(rpmconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(rpmconfigdir)" && rm -f $$files +install-rpmvarDATA: $(rpmvar_DATA) + @$(NORMAL_INSTALL) + test -z "$(rpmvardir)" || $(MKDIR_P) "$(DESTDIR)$(rpmvardir)" + @list='$(rpmvar_DATA)'; test -n "$(rpmvardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(rpmvardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(rpmvardir)" || exit $$?; \ + done + +uninstall-rpmvarDATA: + @$(NORMAL_UNINSTALL) + @list='$(rpmvar_DATA)'; test -n "$(rpmvardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(rpmvardir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(rpmvardir)" && rm -f $$files +install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" + @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-nodist_pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \ + $(HEADERS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(rpmbindir)" "$(DESTDIR)$(rpmlibexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(rpmconfigdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(rpmconfigdir)" "$(DESTDIR)$(rpmvardir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f tools/$(DEPDIR)/$(am__dirstamp) + -rm -f tools/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \ + clean-noinstLTLIBRARIES clean-rpmbinPROGRAMS \ + clean-rpmlibexecPROGRAMS mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) tools/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-data-local install-nodist_pkgincludeHEADERS \ + install-pkgconfigDATA install-pkgincludeHEADERS \ + install-rpmbinPROGRAMS install-rpmconfigDATA \ + install-rpmconfigSCRIPTS install-rpmvarDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-dist_binSCRIPTS \ + install-rpmlibexecPROGRAMS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) tools/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-dist_binSCRIPTS \ + uninstall-local uninstall-nodist_pkgincludeHEADERS \ + uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS \ + uninstall-rpmbinPROGRAMS uninstall-rpmconfigDATA \ + uninstall-rpmconfigSCRIPTS uninstall-rpmlibexecPROGRAMS \ + uninstall-rpmvarDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-exec-am \ + install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool clean-local \ + clean-noinstLTLIBRARIES clean-rpmbinPROGRAMS \ + clean-rpmlibexecPROGRAMS ctags ctags-recursive dist dist-all \ + dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-local distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-data-local install-dist_binSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-exec-hook install-html install-html-am install-info \ + install-info-am install-man install-nodist_pkgincludeHEADERS \ + install-pdf install-pdf-am install-pkgconfigDATA \ + install-pkgincludeHEADERS install-ps install-ps-am \ + install-rpmbinPROGRAMS install-rpmconfigDATA \ + install-rpmconfigSCRIPTS install-rpmlibexecPROGRAMS \ + install-rpmvarDATA install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic maintainer-clean-local mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-dist_binSCRIPTS \ + uninstall-local uninstall-nodist_pkgincludeHEADERS \ + uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS \ + uninstall-rpmbinPROGRAMS uninstall-rpmconfigDATA \ + uninstall-rpmconfigSCRIPTS uninstall-rpmlibexecPROGRAMS \ + uninstall-rpmvarDATA + +rpmrc: $(top_srcdir)/rpmrc.in + @$(SED) \ + -e "s,[@]SYSCONFIGDIR[@],$(sysconfdir)/rpm,g" \ + < $(top_srcdir)/rpmrc.in > rpmrc.tmp \ + && ( cd $(top_builddir) && ./config.status --file=${subdir}/rpmrc:${subdir}/rpmrc.tmp ) +macros: $(top_srcdir)/macros.in + ( cd $(top_builddir) && ./config.status --file=${subdir}/macros:${subdir}/macros.in ) +platform: $(top_srcdir)/platform.in + @$(SED) \ + -e "s,[@]RPMCONFIGDIR[@],$(rpmconfigdir),g" \ + < $(top_srcdir)/platform.in > platform.tmp \ + && ( cd $(top_builddir) && ./config.status --file=${subdir}/platform:${subdir}/platform.tmp ) +rpm.pc: $(top_srcdir)/rpm.pc.in + @$(SED) \ + -e "s,[@]RPMCONFIGDIR[@],$(rpmconfigdir),g" \ + < $(top_srcdir)/rpm.pc.in > rpm.pc.tmp \ + && ( cd $(top_builddir) && ./config.status --file=${subdir}/rpm.pc:${subdir}/rpm.pc.tmp ) +rpmpopt-@VERSION@: $(top_srcdir)/rpmpopt.in + @$(SED) \ + -e "s,[@]RPMCONFIGDIR[@],$(rpmconfigdir),g" \ + -e "s,[@]BINDIR[@],$(bindir),g" \ + < $(top_srcdir)/rpmpopt.in > rpmpopt-@VERSION@.tmp \ + && ( cd $(top_builddir) && ./config.status --file=${subdir}/rpmpopt-@VERSION@:${subdir}/rpmpopt-@VERSION@.tmp ) + +install-exec-hook: + @rm -f $(DESTDIR)$(bindir)/rpmquery + @LN_S@ ../../bin/rpm $(DESTDIR)$(bindir)/rpmquery + @rm -f $(DESTDIR)$(bindir)/rpmverify + @LN_S@ ../../bin/rpm $(DESTDIR)$(bindir)/rpmverify + +install-data-local: + @case "@host_os@" in \ + solaris*|linux*|darwin*) \ + DESTDIR="$(DESTDIR)" pkglibdir="$(rpmconfigdir)" $(SHELL) $(top_srcdir)/installplatform rpmrc macros platform ;; \ + esac + @$(MKDIR_P) $(DESTDIR)$(localstatedir)/tmp + +# XXX to appease distcheck we need to remove "stuff" here... +uninstall-local: + @rm -f $(DESTDIR)$(bindir)/rpmquery + @rm -f $(DESTDIR)$(bindir)/rpmverify + @rm -rf $(DESTDIR)$(rpmconfigdir)/platform/ + +# Build hacking docs only on request +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@doc/hacking.doxy: doc/hacking.doxy.in doc/hacking/Doxyheader Makefile.am +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@ $(SED) \ +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@ -e "s,\@top_srcdir\@/,$(top_srcdir)/,g" \ +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@ -e "s,[@]HAVE_DOT[@],$(HAVE_DOT)," \ +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@ -e "s,[@]PACKAGE[@],$(PACKAGE)," \ +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@ -e "s,[@]VERSION[@],$(VERSION)," \ +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@ < $(top_srcdir)/doc/hacking.doxy.in > doc/hacking.doxy + +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@doc/hacking/html/index.html: doc/hacking.doxy rpmpopt-@VERSION@ +@DOXYGEN_TRUE@@HACKINGDOCS_TRUE@ @DOXYGEN@ doc/hacking.doxy + +# Always build librpm docs +@DOXYGEN_TRUE@doc/librpm.doxy: doc/librpm.doxy.in doc/librpm/Doxyheader Makefile.am $(pkginclude_HEADERS) +@DOXYGEN_TRUE@ files=`echo " $(HEADERS)" | $(SED) -e "s, , \@top_srcdir\@/,g"`; \ +@DOXYGEN_TRUE@ $(SED) -e "s,[@]pkginclude_HEADERS[@],$$files," \ +@DOXYGEN_TRUE@ -e "s,\@top_srcdir\@/,$(top_srcdir)/,g" \ +@DOXYGEN_TRUE@ -e "s,[@]HAVE_DOT[@],$(HAVE_DOT)," \ +@DOXYGEN_TRUE@ -e "s,[@]PACKAGE[@],$(PACKAGE)," \ +@DOXYGEN_TRUE@ -e "s,[@]VERSION[@],$(VERSION)," \ +@DOXYGEN_TRUE@ < $(top_srcdir)/doc/librpm.doxy.in > doc/librpm.doxy + +@DOXYGEN_TRUE@doc/librpm/html/index.html: doc/librpm.doxy +@DOXYGEN_TRUE@ @DOXYGEN@ doc/librpm.doxy + +@WITH_INTERNAL_DB_TRUE@db.h: $(top_builddir)/db3/db.h +@WITH_INTERNAL_DB_TRUE@ $(LN_S) $(top_builddir)/db3/db.h $@ + +clean-local: + rm -rf doc/hacking/html + rm -rf include + +distclean-local: + rm -rf Doxytags + rm -f stamp-h.in db3/*.orig db3/db3lobjs + +maintainer-clean-local: + rm -rf doc/librpm/html + +$(top_srcdir)/preinstall.am: Makefile.am + rm -f $(top_srcdir)/preinstall.am + @for f in $(HEADERS); do \ + b=`basename $$f`; \ + echo 'include/rpm/'$$b': '$$f' include/rpm/$$(dirstamp)' >> $(top_srcdir)/preinstall.am;\ + echo ' $$(INSTALL_DATA) $$(top_srcdir)/'$$f' include/rpm/'$$b >> $(top_srcdir)/preinstall.am; \ + echo 'BUILT_SOURCES += include/rpm/'$$b >> $(top_srcdir)/preinstall.am; \ + echo 'CLEANFILES += include/rpm/'$$b >> $(top_srcdir)/preinstall.am; \ + done + +include/rpm/$(dirstamp): + @$(MKDIR_P) include/rpm + @: > include/rpm/$(dirstamp) +include/rpm/argv.h: rpmio/argv.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/argv.h include/rpm/argv.h +include/rpm/rpmio.h: rpmio/rpmio.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmio.h include/rpm/rpmio.h +include/rpm/rpmurl.h: rpmio/rpmurl.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmurl.h include/rpm/rpmurl.h +include/rpm/rpmmacro.h: rpmio/rpmmacro.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmmacro.h include/rpm/rpmmacro.h +include/rpm/rpmlog.h: rpmio/rpmlog.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmlog.h include/rpm/rpmlog.h +include/rpm/rpmpgp.h: rpmio/rpmpgp.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmpgp.h include/rpm/rpmpgp.h +include/rpm/rpmsq.h: rpmio/rpmsq.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmsq.h include/rpm/rpmsq.h +include/rpm/rpmstring.h: rpmio/rpmstring.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmstring.h include/rpm/rpmstring.h +include/rpm/rpmsw.h: rpmio/rpmsw.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmsw.h include/rpm/rpmsw.h +include/rpm/rpmfileutil.h: rpmio/rpmfileutil.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmfileutil.h include/rpm/rpmfileutil.h +include/rpm/rpmutil.h: rpmio/rpmutil.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmutil.h include/rpm/rpmutil.h +include/rpm/rpmkeyring.h: rpmio/rpmkeyring.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmkeyring.h include/rpm/rpmkeyring.h +include/rpm/header.h: lib/header.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/header.h include/rpm/header.h +include/rpm/rpmdb.h: lib/rpmdb.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmdb.h include/rpm/rpmdb.h +include/rpm/rpmcallback.h: lib/rpmcallback.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmcallback.h include/rpm/rpmcallback.h +include/rpm/rpmcli.h: lib/rpmcli.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmcli.h include/rpm/rpmcli.h +include/rpm/rpmlib.h: lib/rpmlib.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmlib.h include/rpm/rpmlib.h +include/rpm/rpmds.h: lib/rpmds.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmds.h include/rpm/rpmds.h +include/rpm/rpmfi.h: lib/rpmfi.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmfi.h include/rpm/rpmfi.h +include/rpm/rpmlegacy.h: lib/rpmlegacy.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmlegacy.h include/rpm/rpmlegacy.h +include/rpm/rpmpol.h: lib/rpmpol.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmpol.h include/rpm/rpmpol.h +include/rpm/rpmps.h: lib/rpmps.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmps.h include/rpm/rpmps.h +include/rpm/rpmprob.h: lib/rpmprob.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmprob.h include/rpm/rpmprob.h +include/rpm/rpmtag.h: lib/rpmtag.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmtag.h include/rpm/rpmtag.h +include/rpm/rpmtd.h: lib/rpmtd.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmtd.h include/rpm/rpmtd.h +include/rpm/rpmte.h: lib/rpmte.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmte.h include/rpm/rpmte.h +include/rpm/rpmts.h: lib/rpmts.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmts.h include/rpm/rpmts.h +include/rpm/rpmtypes.h: lib/rpmtypes.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmtypes.h include/rpm/rpmtypes.h +include/rpm/rpmvf.h: lib/rpmvf.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmvf.h include/rpm/rpmvf.h +include/rpm/rpmsign.h: sign/rpmsign.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/sign/rpmsign.h include/rpm/rpmsign.h +include/rpm/rpmbuild.h: build/rpmbuild.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/build/rpmbuild.h include/rpm/rpmbuild.h +include/rpm/rpmfc.h: build/rpmfc.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/build/rpmfc.h include/rpm/rpmfc.h +include/rpm/rpmspec.h: build/rpmspec.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/build/rpmspec.h include/rpm/rpmspec.h + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/README b/README new file mode 100644 index 0000000..9b4f643 --- /dev/null +++ b/README @@ -0,0 +1,20 @@ +This is RPM, the RPM Package Manager. + +The latest releases are always available at: + + http://rpm.org/releases/ + +Additional RPM documentation (papers, slides, HOWTOs) can also be +found at the same site: http://rpm.org. + +http://rpm.org/wiki/Communicate lists all rpm releated mailing lists. + +RPM was originally written by: + + Erik Troan + Marc Ewing + +See the CREDITS file for a list of folks who have helped us out +tremendously. RPM is Copyright (c) 1998 by Red Hat Software, Inc., +and may be distributed under the terms of the GPL and LGPL (see the +file COPYING for details). diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..510f851 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1344 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT]) + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .]) + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], + [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl +python2.1 python2.0]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/gettext.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/po.m4]) +m4_include([m4/progtest.m4]) diff --git a/autodeps/aix.prov b/autodeps/aix.prov new file mode 100644 index 0000000..6f7c8bd --- /dev/null +++ b/autodeps/aix.prov @@ -0,0 +1,78 @@ +#! /usr/bin/ksh + +# Original Author: Ralph Goers(rgoer@Candle.Com) +# Borrowed heavily from Tim Mooney's HP version. +# This file is distributed under the terms of the GNU General Public License +# +# find-requires is part of RPM, the RedHat Package Manager. find-requires +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries the package requires to run correctly. +# + +find_prov_ia64() +{ + # On AIX for IA64, use the file command to find shared modules + # + # Example file output: + # + #$file /usr/lib/ia64l32/libc.so + #/usr/lib/ia64l32/libc.so: ELF 32-bit LSB version 1 AIX shared obj IA-64 + # + # + # + + # Search for shared objects - the file command on AIX for IA64 reports + # shared objects + sed -e "s/['\"]/\\\&/g" -e "s/$/\//g" | LANG=C xargs file | grep -e ":.*shared obj" | cut -d: -f1 | sed "s/\/$//g" | xargs -i basename {} | sort -u +} + +find_prov_power() +{ + # + # Example dump output: + # + #$dump -H /usr/bin/dump + # + #/usr/bin/dump: + # + # ***Loader Section*** + # Loader Header Information + #VERSION# #SYMtableENT #RELOCent LENidSTR + #0x00000001 0x00000021 0x0000006c 0x0000002f + # + ##IMPfilID OFFidSTR LENstrTBL OFFstrTBL + #0x00000002 0x00000848 0x00000049 0x00000877 + # + # + # ***Import File Strings*** + #INDEX PATH BASE MEMBER + #0 /usr/lib:/lib:/usr/lpp/xlC/lib + #1 libc.a shr.o + + # + # + + # Search executables, archives, and symlinks to those types for shared + # objects + sed -e "s/['\"]/\\\&/g" -e "s/$/\//g" | LANG=C xargs file | grep -e ":.*executable" -e ":.*archive" | cut -d: -f1 | sed "s/\/$//g" | + + # Use the verbose version of dump to find the sharable objects + while read f + do + LANG=C /usr/bin/dump -ov $f/ 2>/dev/null | grep -E "^Flags.*SHROBJ|:$" | + awk 'match($1,":$") { member=$1 } + !match($1,":$") {print member} ' + done | sed -e 's/:$//' -e 's/\/\[/\(/g' -e 's/\]/)/g' | xargs -i basename {} | + sort -u +} + +PATH=/usr/bin + +machinetype=`uname -m` +if [[ $machinetype = "ia64" ]] +then + find_prov_ia64 +else + find_prov_power +fi + diff --git a/autodeps/aix.req b/autodeps/aix.req new file mode 100755 index 0000000..e8503b3 --- /dev/null +++ b/autodeps/aix.req @@ -0,0 +1,171 @@ +#! /usr/bin/ksh + +# Original Author: Ralph Goers(rgoer@Candle.Com) +# Borrowed heavily from Tim Mooney's HP version. +# This file is distributed under the terms of the GNU General Public License +# +# find-requires is part of RPM, the RedHat Package Manager. find-requires +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries the package requires to run correctly. +# + +find_req_power () +{ + # On AIX Power, use `dump -H' to find the library dependencies + # for an executable + # + # Example dump output: + # + #$dump -H /usr/bin/dump + # + #/usr/bin/dump: + # + # ***Loader Section*** + # Loader Header Information + #VERSION# #SYMtableENT #RELOCent LENidSTR + #0x00000001 0x00000021 0x0000006c 0x0000002f + # + ##IMPfilID OFFidSTR LENstrTBL OFFstrTBL + #0x00000002 0x00000848 0x00000049 0x00000877 + # + # + # ***Import File Strings*** + #INDEX PATH BASE MEMBER + #0 /usr/lib:/lib:/usr/lpp/xlC/lib + #1 libc.a shr.o + + # + # + + while read f + do + # Find the required symbols in executables and the required shells in + # scripts + LANG=C /usr/bin/file $f | /usr/bin/grep -q -e ":.*shell script" + + if [ $? -ne 0 ] # Use dump to examine executables + then + LANG=C /usr/bin/dump -H $f 2>/dev/null | awk ' + + # + # Since this entire awk script is enclosed in single quotes, + # you need to be careful to not use single quotes, even in awk + # comments, if you modify this script. + # + + BEGIN { + in_shlib_list = 0; + in_file_strings = 0; + FS = " "; + RS = "\n"; + } + + in_shlib_list == 1 && /^$/ { + in_shlib_list = 0; + in_file_strings = 0; + } + + in_shlib_list == 1 { + pos = index($2, "/") + numfields = split($0, fields, " ") + + if (pos == 0) { + namevar = 2 + } + else { + namevar = 3 + } + if (namevar < numfields) { + printf("%s(%s)\n", fields[namevar], fields[namevar+1]) + } + else { + if ((fields[namevar] != ".") && (fields[namevar] != "..")) { + print fields[namevar] + } + } + } + + in_file_strings == 1 && $1 == "0" { + in_shlib_list = 1 + } + + /\*Import File Strings\*/ { + in_file_strings = 1 + } + ' # end of awk + else # shell scripts + if [ -x $f ]; then + /usr/bin/head -1 $f | /usr/bin/sed -e 's/^\#\![ ]*//' | /usr/bin/cut -d" " -f1 + fi + fi + done | sort -u +} + +find_req_ia64 () +{ + # On AIX IA64, use `dump -Lv' to find the library dependencies + # for an executable + # + # Example dump output: + # + #$dump -Lv /usr/bin/dump + # + # + #/usr/bin/dump: + # + # **** DYNAMIC SECTION INFORMATION **** + #[INDEX] Tag Value + # + #.dynamic: + #[1] NEEDED libC.so.1 + #[2] NEEDED libelf.so + #[3] NEEDED /usr/lib/ia64l32/libc.so.1 + #[4] INIT 0x1001d6c0 + #[5] FINI 0x1001d700 + #[6] HASH 0x1000011c + #[7] STRTAB 0x10000914 + #[8] SYMTAB 0x10000364 + #[9] STRSZ 0x3dd + #[10] SYMENT 0x10 + #[11] PLTGOT 0x20018994 + #[12] PLT_RESERVE 0x20018a00 + #[13] PLTSZ 0x1c0 + #[14] PLTREL REL + #[15] JMPREL 0x100024bc + #[16] REL 0x10000cf4 + #[17] RELSZ 0x17c8 + #[18] RELENT 0x8 + # + # + + while read f + do + # Find the required symbols in executables and the required shells in + # scripts + LANG=C /usr/bin/file $f | /usr/bin/grep -q -e ":.*shell script" + + if [ $? -ne 0 ] # Use dump to examine executables + then + LANG=C /usr/bin/dump -Lv $f 2>/dev/null | \ + awk '$2=="NEEDED" {print $3}' | xargs -i basename {} + + else # Extract the exec module from shell scripts + if [ -x $f ]; then + head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1 + fi + fi + done | sort -u +} + +machinetype=`uname -m` +if [[ $machinetype = "ia64" ]] +then + /usr/bin/sed "s/['\"]/\\\&/g" | LANG=C /usr/bin/xargs /usr/bin/file | \ + /usr/bin/grep -e ":.*executable" -e ":.*archive" -e ":.*shell script" | /usr/bin/cut -d: -f1 | + find_req_ia64 +else + /usr/bin/sed "s/['\"]/\\\&/g" | LANG=C /usr/bin/xargs /usr/bin/file | \ + /usr/bin/grep -e ":.*executable" -e ":.*archive" -e ":.*shell script" | /usr/bin/cut -d: -f1 | + find_req_power +fi + diff --git a/autodeps/aix4.prov b/autodeps/aix4.prov new file mode 100644 index 0000000..59637a7 --- /dev/null +++ b/autodeps/aix4.prov @@ -0,0 +1,189 @@ +#! /usr/bin/ksh + +# Current Maintainer: Tim Mooney +# +# Original Author: Ralph Goers(rgoer@Candle.Com) +# Borrowed heavily from H10 version created by Tim Mooney. +# This file is distributed under the terms of the GNU Public License +# +# find-provides is part of RPM, the RedHat Package Manager. find-provides +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries provided by (contained in) the package. +# +# On AIX, use `dump -o' to find what the library provides, if anything. +# +# +# Ralph's comments: +# +# Executables are skipped because, by convention, shared libraries +# which are not dynamically loaded are packaged as archives. Also, +# it is impossible to tell the difference between an executable +# program and a dynamically loaded shared library. +# +# Because archives can contain any number of things, including +# apparently, multiple shared libraries, dependencies in archives +# will be specified as file[member]. Any member in an archive which +# has a loader section will be listed as provided. +# +# Tim's (subsequent) comments: +# +# Based on discussions on the rpm-list in mid-March of 2000, I've modified +# the copy of find-provides that Ralph provided me to use `dump -o' instead +# of `dump -H', and I've followed Brandon S. Allbery's suggestions and modified +# the awk script to look for a modtype of `RE', which is what constitutes a +# shared member of a library. Just like everything else on AIX, libraries are +# weird. :-| +# +# I've followed Ralph's convention of generating provides in the form of +# `filebasename(member-object)' *if* there is a member object, or just +# `filebasename' if there isn't (such as in the case of certain perl modules, +# locally built shared libraries, etc.). +# +# Example dump output: +# +#$dump -o /usr/lpp/X11/lib/R6/libX11.a +# +#/usr/lpp/X11/lib/R6/libX11.a[shr4.o]: +# +# ***Object Module Header*** +## Sections Symbol Ptr # Symbols Opt Hdr Len Flags +# 4 0x00126c28 14557 72 0x3002 +#Timestamp = 920377624 +#Magic = 0x1df +# +# ***Optional Header*** +#Tsize Dsize Bsize Tstart Dstart +#0x000bcc20 0x00024bd4 0x00000e0c 0x00000000 0x00000000 +# +#SNloader SNentry SNtext SNtoc SNdata +#0x0004 0x0000 0x0001 0x0002 0x0002 +# +#TXTalign DATAalign TOC vstamp entry +#0x0005 0x0003 0x00023d74 0x0001 0xffffffff +# +#maxSTACK maxDATA SNbss magic modtype +#0x00000000 0x00000000 0x0003 0x010b RE +# +#/usr/lpp/X11/lib/R6/libX11.a[shr4net.o]: +# +# ***Object Module Header*** +## Sections Symbol Ptr # Symbols Opt Hdr Len Flags +# 7 0x000006fb 22 72 0x3002 +#Timestamp = 774732998 +#Magic = 0x1df +# +# ***Optional Header*** +#Tsize Dsize Bsize Tstart Dstart +#0x00000084 0x00000088 0x00000000 0x00000200 0x00000000 +# +#SNloader SNentry SNtext SNtoc SNdata +#0x0007 0x0000 0x0002 0x0004 0x0004 +# +#TXTalign DATAalign TOC vstamp entry +#0x0002 0x0003 0x00000080 0x0001 0xffffffff +# +#maxSTACK maxDATA SNbss magic modtype +#0x00000000 0x00000000 0x0005 0x010b RE + +PATH=/usr/bin:/usr/ccs/bin +export PATH + +# +# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things +# like `file', et. al. and expect the output to be what we see in the +# C/POSIX locale. Make sure it is so. +# +LANG=C +export LANG + +# +# TVM: Because AIX libraries don't have the equivalent of a SONAME, if you do +# +# ln -s /usr/lib/libc.a /tmp/libmy_libc_link.a +# +# and then link your program with `-L/tmp -lmy_libc_link', that's the name +# that will be recorded as the BASE in the Import File Strings area. +# This means we need to include "symbolic link" in the list of files to check +# out. +# +filelist=`sed "s/['\"]/\\\&/g" | xargs file \ + | grep -E 'archive|executable|symbolic link' | cut -d: -f1` + +for f in $filelist +do + # + # Uncomment the next line for some additional debugging info: + #echo "Checking $f" + dump -o $f 2>/dev/null | awk ' + + # TVM: be careful to not use any single quotes, even in comments, + # since this entire awk script is enclosed in single quotes. + + BEGIN { + FS = " "; + RS = "\n"; + # our flag to indicate we found a filename[membername] or + # filename. + found_file_or_member = 0 + # our flag to indicate we found the modtype tag. If so, + # we want to look for RE on the next line. + found_modtype = 0 + # + # number of times gsub substituted, used twice below + nsub = 0 + } + + # Uncomment the next line for some debugging info. + # { print NR , ":", $0 } + + found_modtype == 1 && found_file_or_member == 1 { + + if ( $0 ~ / RE/ ) { + # we have seen a filename, we have seen a modtype line, and now + # we know that the modtype is RE. Print out the member name. + # + # Note that member names generally look like foo[bar.o], and + # since the RPM standard has become to use parens, we will + # translate the [ and ] into ( and ) in the output stream. + # awk on AIX 4 has sub() and gsub(), so we can use them to do + # it. If this script is adapted for use on some other platform + # make sure that awk on that platform has sub/gsub. If not, + # you will need to postprocess the output stream (probably before + # the sort -u) with tr or sed. + nsub = gsub(/\[/, "(", member) + if ( nsub > 1 ) { + print "substituted too many times for [:", member | "cat 1>&2" + } + nsub = gsub(/\]/, ")", member) + if ( nsub > 1 ) { + print "substituted too many times for ]:", member | "cat 1>&2" + } + print member + } + # In any case, reset our flags to zero, to indicate we are done + # with this member, so we are ready to handle additional members + # if needed. + found_file_or_member = 0 + found_modtype = 0 + } + + found_file_or_member == 1 && /magic *modtype/ { + # we have seen a filename, and now we have seen the modtype + # line. Set the found_modtype flag. The next line of input + # will be caught by the rule above, and we will print out + # the member if the modtype is RE. + found_modtype = 1 + } + + /:$/ { + numfields = split($0,fields, "/") + # chop off the trailing colon + fieldlen = length(fields[numfields])-1 + member= substr(fields[numfields], 1, fieldlen) + # Set the flat to indicate we found a file or a file(member). + found_file_or_member = 1 + } + ' # end of awk +done | sort -u +#comment out the previous line and uncomment the next line when debugging +#done diff --git a/autodeps/aix4.req b/autodeps/aix4.req new file mode 100644 index 0000000..79e988b --- /dev/null +++ b/autodeps/aix4.req @@ -0,0 +1,99 @@ +#! /usr/bin/ksh +# +# Current Maintainer: Tim Mooney +# Original Author: Ralph Goers(rgoer@Candle.Com) +# +# This file is distributed under the terms of the GNU Public License +# +# find-requires is part of RPM, the RedHat Package Manager. find-requires +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries the package requires to run correctly. +# +# On AIX, use `dump -H' to find the library dependencies for an executable +# +# Example dump output: +# +#$dump -H /usr/bin/dump +# +#/usr/bin/dump: +# +# ***Loader Section*** +# Loader Header Information +#VERSION# #SYMtableENT #RELOCent LENidSTR +#0x00000001 0x00000021 0x0000006c 0x0000002f +# +##IMPfilID OFFidSTR LENstrTBL OFFstrTBL +#0x00000002 0x00000848 0x00000049 0x00000877 +# +# +# ***Import File Strings*** +#INDEX PATH BASE MEMBER +#0 /usr/lib:/lib:/usr/lpp/xlC/lib +#1 libc.a shr.o +# +# + +PATH=/usr/bin:/usr/ccs/bin +export PATH + +# +# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things +# like `file', et. al. and expect the output to be what we see in the +# C/POSIX locale. Make sure it is so. +# +LANG=C +export LANG + +filelist=`sed "s/['\"]/\\\&/g" | xargs file \ + | grep -E '^.*:.*(executable |archive )' | cut -d: -f1` + +for f in $filelist +do + dump -H $f 2>/dev/null | awk ' + + # + # Since this entire awk script is enclosed in single quotes, + # you need to be careful to not use single quotes, even in awk + # comments, if you modify this script. + # + + BEGIN { + in_shlib_list = 0; + in_file_strings = 0; + FS = " "; + RS = "\n"; + } + + in_shlib_list == 1 && /^$/ { + in_shlib_list = 0; + in_file_strings = 0; + } + + in_shlib_list == 1 { + pos = index($2, "/") + numfields = split($0, fields, " ") + + if (pos == 0) { + namevar = 2 + } + else { + namevar = 3 + } + if (namevar < numfields) { + printf("%s(%s)\n", fields[namevar], fields[namevar+1]) + } + else { + print fields[namevar] + } + } + + in_file_strings == 1 && $1 == "0" { + in_shlib_list = 1 + } + + /\*Import File Strings\*/ { + in_file_strings = 1 + } + + ' # end of awk +done | sort -u diff --git a/autodeps/amigaos.prov b/autodeps/amigaos.prov new file mode 100644 index 0000000..87ad08f --- /dev/null +++ b/autodeps/amigaos.prov @@ -0,0 +1,3 @@ +#!/bin/sh + +cat > /dev/null diff --git a/autodeps/amigaos.req b/autodeps/amigaos.req new file mode 100644 index 0000000..87ad08f --- /dev/null +++ b/autodeps/amigaos.req @@ -0,0 +1,3 @@ +#!/bin/sh + +cat > /dev/null diff --git a/autodeps/darwin.prov b/autodeps/darwin.prov new file mode 100644 index 0000000..b068912 --- /dev/null +++ b/autodeps/darwin.prov @@ -0,0 +1,21 @@ +#!/bin/bash +# ---------------------------------------------------------- +# find-provides for Darwin/MacOSX +# ---------------------------------------------------------- +# This script reads filenames from STDIN and outputs any relevant provides +# information that needs to be included in the package. + +filelist=$(sed -n -e '/\.dylib/p' -e '/\.so/p' -e '/\.bundle/p' | sort | uniq | xargs file -L 2>/dev/null | grep "Mach-O.*\(ppc\|i386\)" | cut -d: -f1) + +for f in $filelist; do + libname=$(basename $f | sed -e 's;\..*;;') + soname=$(otool -l $f | grep $libname | awk '/ name/ {print $2}') + + if [ "$soname" != "" ]; then + if [ ! -L $f ]; then + basename $soname + fi + else + echo ${f##*/} + fi +done | sort -u diff --git a/autodeps/darwin.req b/autodeps/darwin.req new file mode 100644 index 0000000..e571710 --- /dev/null +++ b/autodeps/darwin.req @@ -0,0 +1,26 @@ +#!/bin/sh +# ---------------------------------------------------------------- +# find-requires for Darwin/MacOSX +# ---------------------------------------------------------------- +ulimit -c 0 + +filelist=`sed "s/['\"]/\\\&/g"` +exelist=`echo $filelist | xargs file | grep -F Mach-O | cut -d: -f1 ` +scriptlist=`echo $filelist | xargs file | grep -E ":.* (commands|script) " | cut -d: -f1 ` + +for f in $exelist; do + if [ -x $f ]; then + otool -L $f \ + | awk '/^\t/ { print }' \ + | sed -n -e '/ (compatibility version .* current version .*)/p' \ + | sed -e 's/ (compatibility version .* current version .*)//' + fi +done | sort -u | sed "s/['\"]/\\\&/g" | xargs -n 1 basename | sort -u + +for f in $scriptlist; do + if [ -x $f ]; then + head -1 $f | sed -e 's/^\#\![ ]*//' \ + | sed -n -e '/^\/bin/!p' | sed -n -e '/^\/usr\/bin/!p' | uniq \ + | cut -d" " -f1 + fi +done diff --git a/autodeps/freebsd.prov b/autodeps/freebsd.prov new file mode 100644 index 0000000..cf00d4f --- /dev/null +++ b/autodeps/freebsd.prov @@ -0,0 +1,9 @@ +#!/bin/sh +# ---------------------------------------------------------- +# find-provides for FreeBSD-2.2.x +# ---------------------------------------------------------- +filelist=$(grep "\\.so" | grep -v "^/lib/ld.so" | xargs file -L 2>/dev/null | grep "FreeBSD.*shared" | cut -d: -f1) + +for f in $filelist; do + echo ${f##*/} +done | sort -u diff --git a/autodeps/freebsd.req b/autodeps/freebsd.req new file mode 100644 index 0000000..9a1e0f4 --- /dev/null +++ b/autodeps/freebsd.req @@ -0,0 +1,22 @@ +#!/bin/sh +# ---------------------------------------------------------------- +# find-requires for FreeBSD-2.2.x +# how do we know what is required by a.out shared libraries? +# ---------------------------------------------------------------- +ulimit -c 0 + +filelist=`sed "s/['\"]/\\\&/g"` +exelist=`echo $filelist | xargs file | grep -F executable | cut -d: -f1 ` +scriptlist=`echo $filelist | xargs file | grep -E ":.* (commands|script) " | cut -d: -f1 ` + +for f in $exelist; do + if [ -x $f ]; then + ldd $f | /usr/bin/awk '/=>/&&!/not found/ { print $3 }' + fi +done | sort -u | sed "s/['\"]/\\\&/g" | xargs -n 1 basename | sort -u + +for f in $scriptlist; do + if [ -x $f ]; then + head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1 + fi +done | sort -u diff --git a/autodeps/freebsdelf.prov b/autodeps/freebsdelf.prov new file mode 100644 index 0000000..df7d829 --- /dev/null +++ b/autodeps/freebsdelf.prov @@ -0,0 +1,9 @@ +#!/bin/sh +# ---------------------------------------------------------- +# find-provides for FreeBSD >= 3.3 +# ---------------------------------------------------------- +filelist=$(grep "\\.so" | grep -v "^/lib/ld.so" | xargs file -L 2>/dev/null | grep "ELF.*shared" | cut -d: -f1) + +for f in $filelist; do + echo ${f##*/} +done | sort -u diff --git a/autodeps/freebsdelf.req b/autodeps/freebsdelf.req new file mode 100644 index 0000000..dde04c5 --- /dev/null +++ b/autodeps/freebsdelf.req @@ -0,0 +1,46 @@ +#!/bin/sh + +# note this works for both a.out and ELF executables +# it also auto-generates requirment lines for shell scripts + +ulimit -c 0 + +filelist=`sed "s/['\"]/\\\&/g"` +exelist=`if test "x$filelist" != x; then echo $filelist | xargs file | grep ":.*executable" | cut -d: -f1; fi` +scriptlist=`if test "x$filelist" != x; then echo $filelist | xargs file | grep -E ":.* (commands|script) " | cut -d: -f1; fi` +liblist=`if test "x$filelist" != x; then echo $filelist | xargs file | grep ":.*shared object" | cut -d : -f1; fi` + +LDDLIST=`for f in $exelist; do + if [ -x $f ]; then + ldd $f | awk '/=>/ { print $1 }' + fi +done | sort -u | sed "s/['\"]/\\\&/g"` +if test "x$LDDLIST" != x; then + echo $LDDLIST | xargs -n 1 basename | grep -v 'libNoVersion.so' | sort -u +fi + +LDDLIST=`for f in $liblist; do + ldd $f | awk '/=>/ { print $1 }' +done | sort -u | sed "s/['\"]/\\\&/g"` +if test "x$LDDLIST" != x; then + echo $LDDLIST | xargs -n 1 basename | grep -v 'libNoVersion.so' | sort -u +fi + +for f in $scriptlist; do + if [ -x $f ]; then + head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1 + fi +done | sort -u + +for f in $liblist $exelist ; do + objdump -p $f | awk ' + BEGIN { START=0; LIBNAME=""; } + /Version References:/ { START=1; } + /required from/ && (START==1) { + sub(/:/, "", $3); + LIBNAME=$3; + } + (START==1) && (LIBNAME!="") && ($4~/^GLIBC_*/) { print LIBNAME "(" $4 ")"; } + /^$/ { START=0; } + ' +done | sort -u diff --git a/autodeps/hpux.prov b/autodeps/hpux.prov new file mode 100644 index 0000000..9fd4ce6 --- /dev/null +++ b/autodeps/hpux.prov @@ -0,0 +1,175 @@ +#! /usr/bin/ksh + +# Original Author: Tim Mooney +# $Id: hpux.prov,v 1.8 2001/09/15 13:49:11 jbj Exp $ +# +# This file is distributed under the terms of the GNU Public License +# +# find-provides is part of RPM, the Red Hat Package Manager. find-provides +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries provided by (contained in) the package. +# +# +# On HP-UX, use `chatr' to find what libraries a package provides +# +# Example chatr output: +# +#$chatr /usr/lib/libc.sl +# +#/usr/lib/libc.sl: +# shared library +# shared library dynamic path search: +# SHLIB_PATH disabled second +# embedded path disabled first Not Defined +# internal name: +# libc.1 +# shared library list: +# dynamic /usr/lib/libdld.1 +# static branch prediction disabled +# kernel assisted branch predictionenabled +# lazy swap allocationdisabled +# text segment lockingdisabled +# data segment lockingdisabled +# data page size: 4K +# instruction page size: 4K +# + +# +# Implementation notes: some of the system libraries are built without an +# `internal name' (HP-UX's equivalent to a SONAME), so I need to track what +# chatr outputs as its first line. We'll use the basename of that line in +# the event of no internal name. +# + +PATH=/usr/bin:/usr/sbin:/usr/ccs/bin +export PATH + +# +# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things +# like `file', et. al. and expect the output to be what we see in the +# C/POSIX locale. Make sure it is so. +# +LANG=C +export LANG + +# +# TVM: use `while read ...' instead of `for f in ...', because there may +# be too many files to stuff into one shell variable. +# +IFS="" +while read f +do + # It's possible that I should be testing to make sure that the file + # we're trying isn't a symlink, and skipping it if it is, because of + # the possible odd situation where we could have a link to a library + # with no internal name. This would need more investigation, though. + chatr $f 2>/dev/null \ + | awk ' + + BEGIN { + FS = " "; + RS = "\n"; + + # This flag signfies that we have seen the internal name: + # marker. Once we see that, we set the flag to 1. The next + # line we read should contain the library internal name, the + # SOM equivalent of an soname. At that point we set the flag + # found_internal_name to 1 and exit + # the main body of the awk script, going through the END + in_internal_name = 0; + + # + # We have seen the internal name: section (yet)? + # + found_internal_name = 0; + + # + # assume it is a shared library, until record 2 proves us wrong. + # + isa_shared_library = 1; + } + + # Uncomment the next line for some debugging info. + #{ print NR , ":", $0 } + + # + # save the first line in case there is no internal name built + # into this object. + # + NR == 1 { + my_name = $0 + opened_something = 1; + } + + # + # Check the second line (record). Clear the flag if it is not a + # shared library. + # + NR == 2 && $0 !~ /^[ ]+shared library[ ]*$/ { + # It is not a shared library. Bow out early + isa_shared_library = 0; + exit + } + + in_internal_name == 1 { + + # We found the library internal name. If it does not contain + # a path, print it. At least a couple of the system libraries + # have a full path as the internal name (this is probably a bug). + + if ( $0 ~ /\// ) { + numfields = split($0, internal_name, "/") + print internal_name[numfields] + } else { + print $1 + } + + # + # Set a flag for the EXIT section, to indicate that we found + # an internal name + # + found_internal_name = 1; + in_internal_name = 0 + exit + } + + # + # we have hit the internal name section. Set the flag. The next + # line should be what we are looking for. + # + /^ +internal name: *$/ { + in_internal_name = 1 + } + + END { + # Uncomment the next line for debugging info + #{ print "END: NR: ", NR } + if ( (isa_shared_library == 0) || (NR < 2) ) { + # both of these indicate error conditions, for which we + # should not generate any output. + exit; + } else { + if (found_internal_name == 1) { + exit; + } else { + # + # chop the : off the end of the line + # + colon = index(my_name, ":") + colon = colon - 1 + temp = substr(my_name, 1, colon) + # + # get the basename + # + numfields = split(temp, basename, "/") + # Uncomment the next line for debugging info + #print "In END:", numfields, ":", temp + print basename[numfields] + exit + } + } + } + ' # end of awk +done | sort -u +#comment out the previous line and uncomment the next line when debugging +#done diff --git a/autodeps/hpux.req b/autodeps/hpux.req new file mode 100644 index 0000000..ab72900 --- /dev/null +++ b/autodeps/hpux.req @@ -0,0 +1,126 @@ +#! /usr/bin/ksh + +# Original Author: Tim Mooney +# $Id: hpux.req,v 1.7 2001/09/15 13:49:11 jbj Exp $ +# +# This file is distributed under the terms of the GNU Public License +# +# find-requires is part of RPM, the Red Hat Package Manager. find-requires +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries the package requires to run correctly. +# +# On HP-UX, use `chatr' to find the library dependencies for an executable +# +# Example chatr output: +# +#$chatr /usr/bin/chatr +#/usr/bin/chatr: +# shared executable +# shared library dynamic path search: +# SHLIB_PATH disabled second +# embedded path disabled first Not Defined +# internal name: +# chatr +# shared library list: +# dynamic /usr/lib/libc.1 +# shared library binding: +# deferred +# static branch prediction disabled +# kernel assisted branch predictionenabled +# lazy swap allocationdisabled +# text segment lockingdisabled +# data segment lockingdisabled +# data page size: 4K +# instruction page size: 4K + +PATH=/usr/bin:/usr/sbin:/sbin:/usr/ccs/bin +export PATH + +# +# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things +# like `file', et. al. and expect the output to be what we see in the +# C/POSIX locale. Make sure it is so. +# +LANG=C +export LANG + +IFS="" +while read f +do + # uncomment the next line if debugging + # echo "### processing $f" + + # + # Only run the file command once per file: + # + file_output=`file $f` + + # + # First, check to see if it's a script, and try figure out what + # intpreter it requires. This is more work on HP-UX, since `file' + # doesn't tell us what interpreter the script uses, or even if it + # really is a script. + # + is_shell_script=`od -N 2 -t c $f 2>/dev/null | grep '0000000 # !'` + if test X"$is_shell_script" != X ; then + # + # it's a shell script. Now figure out what interpreter it needs + # Look at me! I'm good with sed. ;-) + interp=`head -1 $f | sed -e 's/^#! \{0,1\}\([^ ]*\).*$/\1/'` + if test X"$interp" != X ; then + echo "$interp" + # + # We've found what we need for this file. Skip back to the + # top of the loop. This saves me an `else' and another indent + # level! ;-) + continue + fi + fi + + # + # The `else' is implied here by the `continue' above + # + + # + # Is it a shared library? + # + maybe_shared_lib=`echo "$file_output" | grep -E '(executable|library)'` + if test X"$maybe_shared_lib" != X ; then + chatr $f 2>/dev/null \ + | awk ' + + # + # For you non-awk-ers, no single quotes in comments -- the shell + # sees them and things get hosed. + # + + BEGIN { + in_shlib_list = 0; + FS = " "; + RS = "\n"; + } + + # uncomment the next line for debugging information + #{ print NR, ": ", $0 } + + + in_shlib_list == 1 && /dynamic[ ]+[\/\.]/ { + + # split the line on "/" and print out the last element + numfields = split($0,fields,"/") + print fields[numfields] + + } + + /^ +shared library list: *$/ { + in_shlib_list = 1 + } + + /^ +shared library binding: *$/ { + exit + } + ' # end of awk + fi # end of shared library if. +done | sort -u +#comment out the previous line and uncomment the next one if debugging. +#done diff --git a/autodeps/irix6.prov b/autodeps/irix6.prov new file mode 100644 index 0000000..87ee4e1 --- /dev/null +++ b/autodeps/irix6.prov @@ -0,0 +1,201 @@ +#! /usr/bin/ksh + +# Original Author: Tim Mooney +# $Id: irix6.prov,v 1.7 2001/09/15 13:49:11 jbj Exp $ +# +# This file is distributed under the terms of the GNU Public License +# +# find-provides is part of RPM, the Red Hat Package Manager. find-provides +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries provided by (contained in) the package. +# +# NOTE: IRIX libraries (even system libraries) have "version information" +# in both the soname and the internal version field, so it's important to +# be able to separate the soname and internal version fields. As has +# become the case on other platforms, the soname/iversion delimiters have +# become the `(' and `)' characters. +# +# On IRIX, use `elfdump -L' to find what libraries a package provides +# +# Example `elfdump -L' output: +# +#$elfdump -L /usr/lib/libc.so +# +# +#/usr/lib/libc.so: +# +# **** DYNAMIC SECTION INFORMATION **** +#.dynamic : +#[INDEX] Tag Value +#[0] HASH 0xfa099d0 +#[1] STRTAB 0xfa0027c +#[2] SYMTAB 0xfa10e3c +#[3] STRSZ 0x9751 +#[4] SYMENT 0x10 +#[5] INIT 0 +#[6] FINI 0 +#[7] RLDVERS 0x1 +#[8] FLAGS 0x1411 +#[9] BASEADDR 0xfa00000 +#[10] LOCGOTNO 0x3c +#[11] PROTECT 0x3c +#[12] HIDDEN 0x12 +#[13] CNFLCTNO 0 +#[14] LBLISTNO 0 +#[15] SYMTABNO 0xd19 +#[16] UNREFEXT 0x8 +#[17] GOTSYM 0x8b3 +#[18] LOCAL 0x12 +#[19] LOCALPG 0x1 +#[20] LOCALPG 0x10 +#[21] PLTGOT 0xfb483b0 +#[22] RLDTXT_ADR0xfb6b580 +#[23] OPTIONS 0xfa000f4 +#[24] SONAME libc.so.1 +#[25] TIMSTAMP Jun 16 18:23:15 1997 +#[26] CHECKSUM 0x92321a0c +#[27] IVERSION sgi1.0 +#[28] REL 0xfa1dfcc +#[29] RELSZ 0x1988 +#[30] RELENT 0x8 +#[31] MSYM 0xfa1f954 +#[32] COMPCTSIZE0xc60c +#No Library List Section in /usr/lib/libc.so +# + +PATH=/usr/bin:/usr/sbin +export PATH + +# +# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things +# like `file', et. al. and expect the output to be what we see in the +# C/POSIX locale. Make sure it is so. +# +LANG=C +export LANG + +# +# Use `while read ...' instead of `for f in ...', because there may be too +# many files to stuff into one shell variable. +# +IFS="" +while read f +do + # + # If it's a shared library, run elfdump on it. + # + maybe_shared_lib=`file $f | grep -E 'ELF.*dynamic lib'` + if test X"$maybe_shared_lib" != X ; then + elfdump -L $f 2>/dev/null | awk ' + + # + # Since this entire awk script is enclosed in single quotes, + # you need to be careful to not use single quotes, even in awk + # comments, if you modify this script. + # + + BEGIN { + FS = " "; + RS = "\n"; + OFS = ""; + + found_soname = 0; + found_iversion = 0; + } + + # Uncomment the next line for some debugging info. + #{ print NR , ":", $0 } + + /[ ]+SONAME .*[ ]*$/ { + found_soname = 1; + numfields = split($0, internal_name) + if (numfields == 3) { + soname = $3 + } else { + # + # Should never be here. + # + print "Really odd looking soname:", $0 | "cat 1>&2" + exit + } + } + + /[ ]+IVERSION .*[ ]*$/ { + if (found_soname == 1) { + numfields = split($0, iversion) + if (numfields == 3) { + version = $3 + # + # handle libraries with multiple versions, like + # 1.1:1.2. Since they really provide both versions, + # we need to generate output for each version. + # + numfields = split(version, versions, ":") + if (numfields > 1) { + for (i = 1; i < numfields; i++) { + print soname, "(", versions[i], ")" + } + # + # let our END routine print out the *last* version + # provided + # + version = versions[numfields] + } + # + # stick a fork in us. + # + found_iversion = 1; + exit + } else { + # + # handle libraries with comments and other junk in + # the version field. IRIX has a number of system libraries + # with whitespace and other junk in the version field! + # + # we discard the whitespace and keep the identifier after + # the # sign. + # + version = iversion[numfields] + numfields = split(version, version_junk, "#") + if (numfields > 1) { + version = version_junk[numfields] + found_iversion = 1; + } + } + } else { + # + # found an iversion without an soname. Is that possible? + # + print "Found version but no soname:", $0 | "cat 1>&2" + exit + } + } + + # + # we could probably watch for some other token (like RELSZ) + # that *generally* occurs later in the input than the stuff we watch + # for, and exit if we see it, but it is just as easy to read all + # the output, even after we have seen what we are looking for. + # + + END { + # Uncomment the next line for debugging info + #{ print "END: NR: ", NR } + if ( (found_soname == 1) && (found_iversion == 1) ) { + print soname, "(", version, ")" + exit + } else if ( (found_soname == 1) && (found_iversion == 0) ) { + # + # no library version information *BUT* any programs linked + # against this library will pick up a dependency on version 0 + # of this library, so we output that. + # + print soname, "(", 0, ")" + } + # else do nothing + } + ' # end of awk + fi # end of the 'if test X"$maybe_shared_lib != X ; then' clause +done | sort -u +#comment out the previous line and uncomment the next line when debugging +#done diff --git a/autodeps/irix6.req b/autodeps/irix6.req new file mode 100644 index 0000000..72442ac --- /dev/null +++ b/autodeps/irix6.req @@ -0,0 +1,164 @@ +#! /usr/bin/ksh + +# Original Author: Tim Mooney +# $Id: irix6.req,v 1.7 2001/09/15 13:49:11 jbj Exp $ +# +# This file is distributed under the terms of the GNU Public License +# +# find-requires is part of RPM, the Red Hat Package Manager. find-requires +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries the package requires to execute. +# +# NOTE: IRIX libraries (even system libraries) have "version information" +# in both the soname and the internal version field, so it's important to +# be able to separate the soname and internal version fields. As has +# become the case on other platforms, the soname/iversion delimiters have +# become the `(' and `)' characters. +# +# On IRIX, use `elfdump -Dl' to find what libraries are required by +# an executable. `elfdump -L' does what we need too, but it gives us more +# than we really need. +# +# Example `elfdump -Dl' output: +# +#$elfdump -Dl /usr/bin/X11/xterm +# +# +# +#/usr/bin/X11/xterm: +# +# **** MIPS LIBLIST INFORMATION **** +#.liblist : +#[INDEX] Timestamp Checksum Flags Name Version +#[1] Nov 23 15:39:02 1997 0x4da65893 ----- libXaw.so.2 sgi2.0 +#[2] Nov 23 15:39:02 1997 0x414eece6 ----- libXmu.so sgi1.0 +#[3] Nov 23 15:39:02 1997 0x6f314e69 ----- libXt.so sgi1.0 +#[4] Nov 23 15:39:02 1997 0xcbe81fff ----- libXext.so sgi1.0 +#[5] Nov 23 15:39:02 1997 0x89ae8e98 ----- libX11.so.1 sgi1.0 +#[6] Oct 27 01:00:29 1997 0x99b27890 ----- libcurses.so sgi1.0 +#[7] Jun 16 18:23:15 1997 0x92321a0c ----- libc.so.1 sgi1.0 +# + +# +# TVM: it might be better to re-write this so that `file' isn't used, since +# it can all be done with `elfdump', but this works. +# + +PATH=/usr/bin:/usr/sbin +export PATH + +# +# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things +# like `file', et. al. and expect the output to be what we see in the +# C/POSIX locale. Make sure it is so. +# +LANG=C +export LANG + +# +# TVM: switch to using `while read ...' instead of `for f in ...', because +# packages with a large number of files could be too big for one shell +# variable to hold. +# +IFS="" +while read f +do + + # + # Uncomment the next line for additional debugging: + #echo "read ->$f<-" + + # + # Only run file once per file: + # + file_output=`file $f` + + # + # Handle scripts first + # + is_shell_script=`echo "$file_output" | grep 'script text' | \ + cut -d: -f 2 | awk '{ print $1 }'` + + # + # If it's a script... + # + if test X"$is_shell_script" != X ; then + echo "$is_shell_script" + # + # use `continue' to skip back up to the top of the loop. We've + # already done as much as we need to, and this saves me from having + # to have an else, and another indent level... ;-) + # + continue + fi + + # + # the `else' is implied here, since we used `continue' in the test above + # + + # + # It might be a shared library. + # + maybe_shared_lib=`echo "$file_output" | grep -E 'executable|lib'` + if test X"$maybe_shared_lib" != X ; then + + elfdump -Dl $f 2>/dev/null \ + | awk ' + + # + # Since this entire awk script is enclosed in single quotes, + # you need to be careful to not use single quotes, even in awk + # comments, if you modify this script. + # + + BEGIN { + found_column_headers = 0; + FS = " "; + RS = "\n"; + OFS=""; + } + + # uncomment the next line for debugging information + #{ print "Saw input:", $0 } + + found_column_headers == 1 && $0 !~ /^$/ { + + # get the library name (field 15) and the library version (field 16) + # if present. + numfields = split($0,fields) + if (numfields == 8) { + print fields[8] + } else if (numfields == 9) { + # + print fields[8], "(", fields[9], ")" + } else if (numfields > 9) { + # + # SGI has this annoying habit of putting comments, complete + # with whitespace, in their library IVERSION field. Yuck. + # + # Handle libraries like this gracefully. + # + verfields = split(fields[NF], junk, "#") + if (verfields == 2) { + print fields[8], "(", junk[2], ")" + } else if (verfields > 2) { + print fields[8], "(", junk[verfields], ")" + } else { + print "Cannot find version:", fields[numfields] | "cat 2>&1" + } + } + } + + /^\[INDEX\].Timestamp.*Checksum.*Flags.*Name.*Version$/ { + # we better start paying attention now. + found_column_headers = 1 + # + # uncomment the next line for debugging information + #print "found the column headers: ", $0 + } + + ' # end of awk + fi +done | sort -u +# comment out the previous line and uncomment the next when debugging +#done diff --git a/autodeps/linux.prov b/autodeps/linux.prov new file mode 100644 index 0000000..8547dc3 --- /dev/null +++ b/autodeps/linux.prov @@ -0,0 +1,61 @@ +#!/bin/bash + +# This script reads filenames from STDIN and outputs any relevant provides +# information that needs to be included in the package. + +filelist=`sed "s/['\"]/\\\&/g"` + +solist=$(echo $filelist | grep "\\.so" | grep -v "^/lib/ld.so" | \ + xargs file -L 2>/dev/null | grep "ELF.*shared object" | cut -d: -f1) +pythonlist= +tcllist= + +# +# --- Alpha does not mark 64bit dependencies +case `uname -m` in + alpha*) mark64="" ;; + *) mark64="()(64bit)" ;; +esac + +# +# --- Library sonames and weak symbol versions (from glibc). +for f in $solist; do + soname=$(objdump -p $f | awk '/SONAME/ {print $2}') + + lib64=`if file -L $f 2>/dev/null | \ + grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` + if [ "$soname" != "" ]; then + if [ ! -L $f ]; then + echo $soname$lib64 + objdump -p $f | awk ' + BEGIN { START=0 ; } + /Version definitions:/ { START=1; } + /^[0-9]/ && (START==1) { print $4; } + /^$/ { START=0; } + ' | \ + grep -v $soname | \ + while read symbol ; do + echo "$soname($symbol)`echo $lib64 | sed 's/()//'`" + done + fi + else + echo ${f##*/}$lib64 + fi +done | sort -u + +# +# --- Perl modules. +[ -x /usr/lib/rpm/perl.prov ] && + echo $filelist | tr '[:blank:]' \\n | grep '\.pm$' | /usr/lib/rpm/perl.prov | sort -u + +# +# --- Python modules. +[ -x /usr/lib/rpm/python.prov -a -n "$pythonlist" ] && + echo $pythonlist | tr '[:blank:]' \\n | /usr/lib/rpm/python.prov | sort -u + +# +# --- Tcl modules. +[ -x /usr/lib/rpm/tcl.prov -a -n "$tcllist" ] && + echo $tcllist | tr '[:blank:]' \\n | /usr/lib/rpm/tcl.prov | sort -u + +exit 0 diff --git a/autodeps/linux.req b/autodeps/linux.req new file mode 100644 index 0000000..b9a8f99 --- /dev/null +++ b/autodeps/linux.req @@ -0,0 +1,136 @@ +#!/bin/bash + +# +# Auto-generate requirements for executables (both ELF and a.out) and library +# sonames, script interpreters, and perl modules. +# + +ulimit -c 0 + +# +# --- Set needed to 0 for traditional find-requires behavior. +needed=1 +if [ X"$1" = Xldd ]; then + needed=0 +elif [ X"$1" = Xobjdump ]; then + needed=1 +fi + +# +# --- Grab the file manifest and classify files. +#filelist=`sed "s/['\"]/\\\&/g"` +filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"` +exelist=`echo $filelist | xargs -r file | \ + grep -Ev ":.* (commands|script)[, ]" | \ + grep ":.*executable" | cut -d: -f1` +scriptlist=`echo $filelist | xargs -r file | \ + grep -E ":.* (commands|script)[, ]" | cut -d: -f1` +liblist=`echo $filelist | xargs -r file | \ + grep ":.*shared object" | cut -d : -f1` + +interplist= +perllist= +pythonlist= +tcllist= + +# +# --- Alpha does not mark 64bit dependencies +case `uname -m` in + alpha*) mark64="" ;; + *) mark64="()(64bit)" ;; +esac + +if [ "$needed" -eq 0 ]; then +# +# --- Executable dependency sonames. + for f in $exelist; do + [ -r $f -a -x $f ] || continue + lib64=`if file -L $f 2>/dev/null | \ + grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` + ldd $f | awk '/=>/ { + if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) { + gsub(/'\''"/,"\\&",$1); + printf "%s'$lib64'\n", $1 + } + }' + done | xargs -r -n 1 basename | sort -u + +# +# --- Library dependency sonames. + for f in $liblist; do + [ -r $f ] || continue + lib64=`if file -L $f 2>/dev/null | \ + grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` + ldd $f | awk '/=>/ { + if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) { + gsub(/'\''"/,"\\&",$1); + printf "%s'$lib64'\n", $1 + } + }' + done | xargs -r -n 1 basename | sort -u +fi + +# +# --- Script interpreters. +for f in $scriptlist; do + [ -r $f -a -x $f ] || continue + interp=`head -n 1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1` + interplist="$interplist $interp" + case $interp in + */perl) perllist="$perllist $f" ;; + esac +done +[ -n "$interplist" ] && { echo "$interplist" | tr '[:blank:]' \\n | sort -u ; } + +# +# --- Add perl module files to perllist. +for f in $filelist; do + [ -r $f -a "${f%.pm}" != "${f}" ] && perllist="$perllist $f" +done + +# +# --- Weak symbol versions (from glibc). +[ -n "$mark64" ] && mark64="(64bit)" +for f in $liblist $exelist ; do + [ -r $f ] || continue + lib64=`if file -L $f 2>/dev/null | \ + grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` + objdump -p $f | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; } + /^$/ { START=0; } + /^Dynamic Section:$/ { START=1; } + (START==1) && /NEEDED/ { + if (needed) { + if ("'$lib64'" != "") { + sub(/$/, "()'$lib64'", $2) ; + } + print $2 ; + } + } + (START==2) && /^[A-Za-z]/ { START=3; } + /^Version References:$/ { START=2; } + (START==2) && /required from/ { + sub(/:/, "", $3); + LIBNAME=$3; + } + (START==2) && (LIBNAME!="") && ($4!="") && (($4~/^GLIBC_*/) || ($4~/^GCC_*/)) { + print LIBNAME "(" $4 ")'$lib64'"; + } + ' +done | sort -u + +# +# --- Perl modules. +[ -x /usr/lib/rpm/perl.req -a -n "$perllist" ] && \ + echo $perllist | tr '[:blank:]' \\n | /usr/lib/rpm/perl.req | sort -u + +# +# --- Python modules. +[ -x /usr/lib/rpm/python.req -a -n "$pythonlist" ] && \ + echo $pythonlist | tr '[:blank:]' \\n | /usr/lib/rpm/python.req | sort -u + +# +# --- Tcl modules. +[ -x /usr/lib/rpm/tcl.req -a -n "$tcllist" ] && \ + echo $tcllist | tr '[:blank:]' \\n | /usr/lib/rpm/tcl.req | sort -u + +exit 0 diff --git a/autodeps/mint.prov b/autodeps/mint.prov new file mode 100644 index 0000000..a752f8f --- /dev/null +++ b/autodeps/mint.prov @@ -0,0 +1,5 @@ +#!/bin/sh +# +# No shared libs on MiNT yet, sigh. + +echo > /dev/null diff --git a/autodeps/mint.req b/autodeps/mint.req new file mode 100644 index 0000000..a752f8f --- /dev/null +++ b/autodeps/mint.req @@ -0,0 +1,5 @@ +#!/bin/sh +# +# No shared libs on MiNT yet, sigh. + +echo > /dev/null diff --git a/autodeps/none b/autodeps/none new file mode 100644 index 0000000..87ad08f --- /dev/null +++ b/autodeps/none @@ -0,0 +1,3 @@ +#!/bin/sh + +cat > /dev/null diff --git a/autodeps/openbsd.prov b/autodeps/openbsd.prov new file mode 100644 index 0000000..1e7b06e --- /dev/null +++ b/autodeps/openbsd.prov @@ -0,0 +1,9 @@ +#!/bin/sh +# ---------------------------------------------------------- +# find-provides for OpenBSD-2.5 +# ---------------------------------------------------------- +filelist=$(grep "\\.so" | grep -v "^/lib/ld.so" | xargs file -L 2>/dev/null | grep "OpenBSD.*shared" | cut -d: -f1) + +for f in $filelist; do + echo ${f##*/} +done | sort -u diff --git a/autodeps/openbsd.req b/autodeps/openbsd.req new file mode 100644 index 0000000..ec3bac7 --- /dev/null +++ b/autodeps/openbsd.req @@ -0,0 +1,22 @@ +#!/bin/sh +# ---------------------------------------------------------------- +# find-requires for OpenBSD-2.2.x +# how do we know what is required by a.out shared libraries? +# ---------------------------------------------------------------- +ulimit -c 0 + +filelist=`sed "s/['\"]/\\\&/g"` +exelist=`echo $filelist | xargs file | grep -F executable | cut -d: -f1 ` +scriptlist=`echo $filelist | xargs file | grep -E ":.* (commands|script) " | cut -d: -f1 ` + +for f in $exelist; do + if [ -x $f ]; then + ldd $f | /usr/bin/awk '/\=\>/&&!/not found/ { print $3 }' + fi +done | sort -u | sed "s/['\"]/\\\&/g" | xargs -n 1 basename | sort -u + +for f in $scriptlist; do + if [ -x $f ]; then + head -1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1 + fi +done | sort -u diff --git a/autodeps/osf.prov b/autodeps/osf.prov new file mode 100644 index 0000000..6b54133 --- /dev/null +++ b/autodeps/osf.prov @@ -0,0 +1,188 @@ +#! /usr/bin/ksh + +# Original Author: Tim Mooney +# $Id: osf.prov,v 1.7 2000/10/31 20:47:23 mooney Exp $ +# +# This file is distributed under the terms of the GNU Public License +# +# find-provides is part of RPM, the Red Hat Package Manager. find-provides +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries provided by (contained in) the package. +# +# +# On Digital/Tru64 Unix (OSF1), use `odump -D' to find what libraries a +# package provides. Note that Tru64 Unix 5.x and later come with `ldd', +# but sticking with `odump' works with versions of the OS back to at least +# 3.x, so it's the preferred method. +# +# Example `odump -D' output: +# +#$odump -D /usr/shlib/libc.so +# +# +# +# +# ***DYNAMIC SECTION*** +# Tag Value +# +#/usr/shlib/libc.so: +# UNREFEXTNO: 14. +# LOCAL_GOTNO: 521. +# GOTSYM: 2205. +# LOCAL_GOTNO: 1606. +# GOTSYM: 3289. +# SONAME: libc.so +# TIME_STAMP: (0x34a82daa) Mon Dec 29 17:09:30 1997 +# +# ICHECKSUM: 0x5e955f9b +# IVERSION: osf.1 +# CONFLICTNO: 0. +# RLD_VERSION: 2. +# HASH: 0x000003ff800a82e0 +# STRTAB: 0x000003ff8008aad0 +# SYMTAB: 0x000003ff80094ab0 +# MSYM: 0x000003ff800842c0 +# STRSZ: 40922. +# SYMENT: 24. +# PLTGOT: 0x000003ffc008f240 +# SYMTABNO: 3330. +# BASE_ADDRESS: 0x000003ff80080000 +# HIPAGENO: 0. +# RELSZ: 15296. +# RELENT: 16. +# REL: 0x000003ff80080700 +# LIBLISTNO: 0. +# INIT: 0x000003ff8019c520 +# FINI: 0x000003ff8019c570 +# FLAGS: 0x00000001 +# + +PATH=/usr/bin:/usr/sbin:/sbin:/usr/ccs/bin +export PATH + +# +# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things +# like `file', et. al. and expect the output to be what we see in the +# C/POSIX locale. Make sure it is so. +# +LANG=C +export LANG + +# +# Use `while read ...' instead of a `for f in ...', because there may +# be too many files to stuff into one shell variable. +# +IFS="" +while read f +do + + # + # if it's a shared library, run odump on it. + # + maybe_shared_lib=`file $f | grep -E 'COFF.*shared library'` + if test X"$maybe_shared_lib" != X ; then + odump -D $f 2>/dev/null | awk ' + + BEGIN { + FS = " "; + RS = "\n"; + OFS = ""; + + found_soname = 0; + found_iversion = 0; + + } + + # Uncomment the next line for some debugging info. + #{ print NR , ":", $0 } + + /^[ ]+SONAME: .*[ ]*$/ { + found_soname = 1; + numfields = split($0, internal_name) + if (numfields == 2) { + soname = $2 + # + # we should probably check to see if the soname ends with + # a number (indicating that it contains versioning info, + # possibly in addition to the versioning info in the + # versions field) and generate a warning here. Shared + # libraries should not be built with version info in + # the soname on Digital/Tru64 Unix. + # + } else { + # + # Should never be here. + # + print "Really odd looking soname:", $0 | "cat 1>&2" + exit + } + } + + /^[ ]+IVERSION: .*[ ]*$/ { + if (found_soname == 1) { + numfields = split($0, iversion) + if (numfields == 2) { + version = $2 + # + # handle libraries with multiple versions, like + # 1.1:1.2. Since they really provide both versions, + # we need to generate output for each version. + # + numfields = split(version, versions, ":") + if (numfields > 1) { + for (i = 1; i < numfields; i++) { + print soname, "(", versions[i], ")" + } + # + # let our END routine print out the *last* version + # provided + # + version = versions[numfields] + } + # + # stick a fork in us. + # + found_iversion = 1; + exit + } else { + # + # Should never be here. + # + print "Odd looking library version:", $0 | "cat 1>&2" + exit + } + } else { + # + # found an iversion without an soname. Is that possible? + # + print "Found version but no soname:", $0 | "cat 1>&2" + exit + } + } + + # + # we could probably watch for some other token (like RLD_VERSION) + # that *generally* occurs later in the input than the stuff we watch + # for, and exit if we see it, but it is just as easy to read all + # the output, even after we have seen what we are looking for. + # + + END { + # Uncomment the next line for debugging info + #{ print "END: NR: ", NR } + if ( (found_soname == 1) && (found_iversion == 1) ) { + print soname, "(", version, ")" + exit + } else if (found_soname == 1) { + # + # no library version information + # + print soname + } + # else do nothing + } + ' # end of awk + fi +done | sort -u +#comment out the previous line and uncomment the next line when debugging +#done diff --git a/autodeps/osf.req b/autodeps/osf.req new file mode 100644 index 0000000..39d00c3 --- /dev/null +++ b/autodeps/osf.req @@ -0,0 +1,142 @@ +#! /usr/bin/ksh + +# Original Author: Tim Mooney +# $Id: osf.req,v 1.9 2001/09/15 13:49:11 jbj Exp $ +# +# This file is distributed under the terms of the GNU Public License +# +# find-requires is part of RPM, the Red Hat Package Manager. find-requires +# reads a list of full pathnames (in a package) on stdin, and outputs all +# shared libraries the package requires to execute. +# +# On Digital/Tru64 Unix (OSF1), use `odump -Dl' to find the library +# dependencies for an executable. `odump -D' does most of what we need, +# but it doesn't give us library version information, so you must use +# `odump -Dl'. Note that Tru64 5.x and on have `ldd', but this works just +# as well, and works on older versions of the OS. +# +# Example `odump -Dl' output: +# +#$odump -Dl /usr/bin/X11/xterm +# +# +# +# +# ***LIBRARY LIST SECTION*** +# Name Time-Stamp CheckSum Flags Version +#/usr/bin/X11/xterm: +# libXaw.so Dec 9 00:15:35 1997 0x285006d0 0 6.0 +# libXmu.so Dec 9 00:13:36 1997 0x3bf3a33d 0 +# libXt.so Dec 9 00:12:18 1997 0x10dd9a17 0 +# libSM.so Dec 9 00:08:11 1997 0xb64c7082 0 +# libICE.so Dec 9 00:07:52 1997 0x1199be32 0 +# libXext.so Dec 9 00:08:51 1997 0xafcb84d5 0 +# libX11.so Dec 9 00:06:05 1997 0xaa1bf091 0 +# libc.so Dec 8 18:41:11 1997 0x5e955f9b 0 osf.1 + +PATH=/usr/bin:/usr/sbin:/sbin:/usr/ccs/bin +export PATH + +# +# TVM: Marc Stephenson (marc@austin.ibm.com) points out we run things +# like `file', et. al. and expect the output to be what we see in the +# C/POSIX locale. Make sure it is so. +# +LANG=C +export LANG + +# +# TVM: switch to using `while read ...' instead of `for f in ...', because +# packages with a large number of files could be too big for one shell variable +# to hold. +# +IFS="" +while read f +do + + # + # Uncomment the next line for addtional debugging: + # echo "read ->$f<-" + + # + # Only run file once per file: + # + file_output=`file $f` + + # + # handle shell scripts first + # + is_shell_script=`echo "$file_output" | grep 'shell script' | \ + cut -d: -f 2 | awk '{ print $1 }'` + + # + # If it's a script... + # + if test X"$is_shell_script" != X ; then + echo "$is_shell_script" + # + # use `continue' to skip back up to the top of the loop. + # We have already done as much as we need to for this + # file, and this saves me from having to have an else, + # and another indent level... ;-) + # + continue + fi + + # + # The `else' here is implied by the `continue' above... + # + + # + # it might be a shared library. + # + + maybe_shared_lib=`echo "$file_output" | grep 'executable'` + if test X"$maybe_shared_lib" != X ; then + + odump -Dl $f 2>/dev/null \ + | awk ' + + # + # Since this entire awk script is enclosed in single quotes, + # you need to be careful to not use single quotes, even in awk + # comments, if you modify this script. + # + + BEGIN { + found_program_name = 0; + FS = " "; + RS = "\n"; + OFS=""; + } + + # uncomment the next line for debugging information + #{ print "Saw input:", $0 } + + found_program_name == 1 && $0 !~ /^$/ { + + # uncomment for debugging information + #print "found shared library: $0" + + # get the library name (field 1) and the library version + # (field 8) if present. + numfields = split($0,fields) + if (numfields == 7) { + print fields[1] + } else if (numfields == 8) { + print fields[1], "(", fields[8], ")" + } + } + + /^.*: *$/ { + found_program_name = 1 + # + # uncomment the next line for debugging information + #print "found the program name: ", $1 + } + + ' # end of awk + fi +done | sort -u +# comment out the previous line and uncomment the next when debugging +# done diff --git a/autodeps/solaris.prov b/autodeps/solaris.prov new file mode 100644 index 0000000..6e0fe9f --- /dev/null +++ b/autodeps/solaris.prov @@ -0,0 +1,14 @@ +#!/bin/sh + +# This script reads filenames from STDIN and outputs any relevant provides +# information that needs to be included in the package. + +PATH=/usr/bin:/usr/ccs/bin:/usr/sbin:/sbin +export PATH + +filelist=`grep "lib.*\\.so" | xargs /usr/ucb/file -L 2>/dev/null |\ + grep "ELF.*dynamic lib" | cut -d: -f1 | sort -u` +for I in $filelist; do + basename $I +done + diff --git a/autodeps/solaris.req b/autodeps/solaris.req new file mode 100644 index 0000000..05e4024 --- /dev/null +++ b/autodeps/solaris.req @@ -0,0 +1,16 @@ +#!/bin/sh + +# note this works for both a.out and ELF executables + +PATH=/usr/bin:/usr/ccs/bin:/usr/sbin:/sbin +export PATH + +ulimit -c 0 + +filelist=`sed "s/['\"]/\\\&/g"` +[ -z "$filelist" ] && exit #emulate -r option for xargs + +for f in `echo $filelist | xargs file | grep -F executable | cut -d: -f1`; do + ldd $f 2>/dev/null | awk '/\=\>/ { print $1 }' +done | sort -u | sed "s/['\"]/\\\&/g" | xargs -n 1 basename | sort -u + diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..f7ea2cf --- /dev/null +++ b/autogen.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +export CPPFLAGS +export CFLAGS +export LDFLAGS + +autoreconf -i + +case "$1" in + "--noconfigure") + exit 0; + ;; + "--rpmconfigure") + shift + eval "`rpm --eval %configure`" "$@" + ;; + *) + ./configure "$@" + ;; +esac diff --git a/build/Makefile.am b/build/Makefile.am new file mode 100644 index 0000000..8e6ca8f --- /dev/null +++ b/build/Makefile.am @@ -0,0 +1,25 @@ +# Makefile for rpmbuild library. + +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/ +AM_CPPFLAGS += @WITH_NSS_INCLUDE@ +AM_CPPFLAGS += @WITH_MAGIC_INCLUDE@ +AM_CPPFLAGS += @WITH_POPT_INCLUDE@ +AM_CPPFLAGS += -I$(top_srcdir)/misc + +usrlibdir = $(libdir) +usrlib_LTLIBRARIES = librpmbuild.la +librpmbuild_la_SOURCES = \ + build.c expression.c files.c misc.c pack.c \ + parseBuildInstallClean.c parseChangelog.c parseDescription.c \ + parseFiles.c parsePreamble.c parsePrep.c parseReqs.c parseScript.c \ + parseSpec.c reqprov.c rpmfc.c spec.c \ + parsePolicies.c policies.c \ + rpmbuild_internal.h rpmbuild_misc.h + +librpmbuild_la_LDFLAGS = -version-info 2:1:0 +librpmbuild_la_LIBADD = \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la \ + $(top_builddir)/misc/libmisc.la \ + @WITH_POPT_LIB@ \ + @WITH_MAGIC_LIB@ diff --git a/build/Makefile.in b/build/Makefile.in new file mode 100644 index 0000000..a2fd429 --- /dev/null +++ b/build/Makefile.in @@ -0,0 +1,678 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile for rpmbuild library. + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = build +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(usrlibdir)" +LTLIBRARIES = $(usrlib_LTLIBRARIES) +librpmbuild_la_DEPENDENCIES = $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la \ + $(top_builddir)/misc/libmisc.la +am_librpmbuild_la_OBJECTS = build.lo expression.lo files.lo misc.lo \ + pack.lo parseBuildInstallClean.lo parseChangelog.lo \ + parseDescription.lo parseFiles.lo parsePreamble.lo \ + parsePrep.lo parseReqs.lo parseScript.lo parseSpec.lo \ + reqprov.lo rpmfc.lo spec.lo parsePolicies.lo policies.lo +librpmbuild_la_OBJECTS = $(am_librpmbuild_la_OBJECTS) +librpmbuild_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(librpmbuild_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(librpmbuild_la_SOURCES) +DIST_SOURCES = $(librpmbuild_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ + -I$(top_builddir)/include/ @WITH_NSS_INCLUDE@ \ + @WITH_MAGIC_INCLUDE@ @WITH_POPT_INCLUDE@ -I$(top_srcdir)/misc +usrlibdir = $(libdir) +usrlib_LTLIBRARIES = librpmbuild.la +librpmbuild_la_SOURCES = \ + build.c expression.c files.c misc.c pack.c \ + parseBuildInstallClean.c parseChangelog.c parseDescription.c \ + parseFiles.c parsePreamble.c parsePrep.c parseReqs.c parseScript.c \ + parseSpec.c reqprov.c rpmfc.c spec.c \ + parsePolicies.c policies.c \ + rpmbuild_internal.h rpmbuild_misc.h + +librpmbuild_la_LDFLAGS = -version-info 2:1:0 +librpmbuild_la_LIBADD = \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la \ + $(top_builddir)/misc/libmisc.la \ + @WITH_POPT_LIB@ \ + @WITH_MAGIC_LIB@ + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign build/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign build/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-usrlibLTLIBRARIES: $(usrlib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(usrlibdir)" || $(MKDIR_P) "$(DESTDIR)$(usrlibdir)" + @list='$(usrlib_LTLIBRARIES)'; test -n "$(usrlibdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(usrlibdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(usrlibdir)"; \ + } + +uninstall-usrlibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(usrlib_LTLIBRARIES)'; test -n "$(usrlibdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(usrlibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(usrlibdir)/$$f"; \ + done + +clean-usrlibLTLIBRARIES: + -test -z "$(usrlib_LTLIBRARIES)" || rm -f $(usrlib_LTLIBRARIES) + @list='$(usrlib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +librpmbuild.la: $(librpmbuild_la_OBJECTS) $(librpmbuild_la_DEPENDENCIES) + $(librpmbuild_la_LINK) -rpath $(usrlibdir) $(librpmbuild_la_OBJECTS) $(librpmbuild_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/build.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expression.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/files.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseBuildInstallClean.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseChangelog.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseDescription.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseFiles.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parsePolicies.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parsePreamble.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parsePrep.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseReqs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseScript.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseSpec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/policies.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reqprov.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmfc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spec.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(usrlibdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-usrlibLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-usrlibLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-usrlibLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-usrlibLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-usrlibLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-usrlibLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/build/build.c b/build/build.c new file mode 100644 index 0000000..5924ec6 --- /dev/null +++ b/build/build.c @@ -0,0 +1,304 @@ +/** \ingroup rpmbuild + * \file build/build.c + * Top-level build dispatcher. + */ + +#include "system.h" + +#include +#include + +#include +#include +#include "build/rpmbuild_internal.h" +#include "build/rpmbuild_misc.h" +#include "lib/rpmug.h" + +#include "debug.h" + +/** + */ +static rpmRC doRmSource(rpmSpec spec) +{ + struct Source *p; + Package pkg; + int rc = 0; + + for (p = spec->sources; p != NULL; p = p->next) { + if (! (p->flags & RPMBUILD_ISNO)) { + char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL); + rc = unlink(fn); + fn = _free(fn); + if (rc) goto exit; + } + } + + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + for (p = pkg->icon; p != NULL; p = p->next) { + if (! (p->flags & RPMBUILD_ISNO)) { + char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL); + rc = unlink(fn); + fn = _free(fn); + if (rc) goto exit; + } + } + } +exit: + return !rc ? RPMRC_OK : RPMRC_FAIL; +} + +/* + * @todo Single use by %%doc in files.c prevents static. + */ +rpmRC doScript(rpmSpec spec, rpmBuildFlags what, const char *name, + const char *sb, int test) +{ + const char * rootDir = spec->rootDir; + char *scriptName = NULL; + char * buildDir = rpmGenPath(rootDir, "%{_builddir}", ""); + char * buildCmd = NULL; + char * buildTemplate = NULL; + char * buildPost = NULL; + const char * mTemplate = NULL; + const char * mCmd = NULL; + const char * mPost = NULL; + int argc = 0; + const char **argv = NULL; + FILE * fp = NULL; + + FD_t fd; + FD_t xfd; + pid_t pid; + pid_t child; + int status; + rpmRC rc; + + switch (what) { + case RPMBUILD_PREP: + mTemplate = "%{__spec_prep_template}"; + mPost = "%{__spec_prep_post}"; + mCmd = "%{__spec_prep_cmd}"; + break; + case RPMBUILD_BUILD: + mTemplate = "%{__spec_build_template}"; + mPost = "%{__spec_build_post}"; + mCmd = "%{__spec_build_cmd}"; + break; + case RPMBUILD_INSTALL: + mTemplate = "%{__spec_install_template}"; + mPost = "%{__spec_install_post}"; + mCmd = "%{__spec_install_cmd}"; + break; + case RPMBUILD_CHECK: + mTemplate = "%{__spec_check_template}"; + mPost = "%{__spec_check_post}"; + mCmd = "%{__spec_check_cmd}"; + break; + case RPMBUILD_CLEAN: + mTemplate = "%{__spec_clean_template}"; + mPost = "%{__spec_clean_post}"; + mCmd = "%{__spec_clean_cmd}"; + break; + case RPMBUILD_RMBUILD: + mTemplate = "%{__spec_clean_template}"; + mPost = "%{__spec_clean_post}"; + mCmd = "%{__spec_clean_cmd}"; + break; + case RPMBUILD_STRINGBUF: + default: + mTemplate = "%{___build_template}"; + mPost = "%{___build_post}"; + mCmd = "%{___build_cmd}"; + break; + } + + if ((what != RPMBUILD_RMBUILD) && sb == NULL) { + rc = RPMRC_OK; + goto exit; + } + + fd = rpmMkTempFile(rootDir, &scriptName); + if (fd == NULL || Ferror(fd)) { + rpmlog(RPMLOG_ERR, _("Unable to open temp file.\n")); + rc = RPMRC_FAIL; + goto exit; + } + + if (fdGetFILE(fd) == NULL) + xfd = Fdopen(fd, "w.fpio"); + else + xfd = fd; + + if ((fp = fdGetFILE(xfd)) == NULL) { + rc = RPMRC_FAIL; + goto exit; + } + + if (*rootDir == '\0') rootDir = "/"; + + buildTemplate = rpmExpand(mTemplate, NULL); + buildPost = rpmExpand(mPost, NULL); + + (void) fputs(buildTemplate, fp); + + if (what != RPMBUILD_PREP && what != RPMBUILD_RMBUILD && spec->buildSubdir) + fprintf(fp, "cd '%s'\n", spec->buildSubdir); + + if (what == RPMBUILD_RMBUILD) { + if (spec->buildSubdir) + fprintf(fp, "rm -rf '%s'\n", spec->buildSubdir); + } else if (sb != NULL) + fprintf(fp, "%s", sb); + + (void) fputs(buildPost, fp); + + (void) Fclose(xfd); + + if (test) { + rc = RPMRC_OK; + goto exit; + } + + if (buildDir && buildDir[0] != '/') { + rc = RPMRC_FAIL; + goto exit; + } + + buildCmd = rpmExpand(mCmd, " ", scriptName, NULL); + (void) poptParseArgvString(buildCmd, &argc, &argv); + + rpmlog(RPMLOG_NOTICE, _("Executing(%s): %s\n"), name, buildCmd); + if (!(child = fork())) { + /* NSPR messes with SIGPIPE, reset to default for the kids */ + signal(SIGPIPE, SIG_DFL); + errno = 0; + (void) execvp(argv[0], (char *const *)argv); + + rpmlog(RPMLOG_ERR, _("Exec of %s failed (%s): %s\n"), + scriptName, name, strerror(errno)); + + _exit(127); /* exit 127 for compatibility with bash(1) */ + } + + pid = waitpid(child, &status, 0); + + if (!WIFEXITED(status) || WEXITSTATUS(status)) { + rpmlog(RPMLOG_ERR, _("Bad exit status from %s (%s)\n"), + scriptName, name); + rc = RPMRC_FAIL; + } else + rc = RPMRC_OK; + +exit: + if (scriptName) { + if (rc == RPMRC_OK) + (void) unlink(scriptName); + scriptName = _free(scriptName); + } + argv = _free(argv); + buildCmd = _free(buildCmd); + buildTemplate = _free(buildTemplate); + buildPost = _free(buildPost); + buildDir = _free(buildDir); + + return rc; +} + +static rpmRC buildSpec(BTA_t buildArgs, rpmSpec spec, int what) +{ + rpmRC rc = RPMRC_OK; + int test = (what & RPMBUILD_NOBUILD); + char *cookie = buildArgs->cookie ? xstrdup(buildArgs->cookie) : NULL; + + /* XXX TODO: rootDir is only relevant during build, eliminate from spec */ + spec->rootDir = buildArgs->rootdir; + if (!spec->recursing && spec->BACount) { + int x; + /* When iterating over BANames, do the source */ + /* packaging on the first run, and skip RMSOURCE altogether */ + if (spec->BASpecs != NULL) + for (x = 0; x < spec->BACount; x++) { + if ((rc = buildSpec(buildArgs, spec->BASpecs[x], + (what & ~RPMBUILD_RMSOURCE) | + (x ? 0 : (what & RPMBUILD_PACKAGESOURCE))))) { + goto exit; + } + } + } else { + int didBuild = (what & (RPMBUILD_PREP|RPMBUILD_BUILD|RPMBUILD_INSTALL)); + + if ((what & RPMBUILD_PREP) && + (rc = doScript(spec, RPMBUILD_PREP, "%prep", + getStringBuf(spec->prep), test))) + goto exit; + + if ((what & RPMBUILD_BUILD) && + (rc = doScript(spec, RPMBUILD_BUILD, "%build", + getStringBuf(spec->build), test))) + goto exit; + + if ((what & RPMBUILD_INSTALL) && + (rc = doScript(spec, RPMBUILD_INSTALL, "%install", + getStringBuf(spec->install), test))) + goto exit; + + if ((what & RPMBUILD_CHECK) && + (rc = doScript(spec, RPMBUILD_CHECK, "%check", + getStringBuf(spec->check), test))) + goto exit; + + if ((what & RPMBUILD_PACKAGESOURCE) && + (rc = processSourceFiles(spec, buildArgs->pkgFlags))) + goto exit; + + if (((what & RPMBUILD_INSTALL) || (what & RPMBUILD_PACKAGEBINARY) || + (what & RPMBUILD_FILECHECK)) && + (rc = processBinaryFiles(spec, buildArgs->pkgFlags, + what & RPMBUILD_INSTALL, test))) + goto exit; + + if (((what & RPMBUILD_INSTALL) || (what & RPMBUILD_PACKAGEBINARY)) && + (rc = processBinaryPolicies(spec, test))) + goto exit; + + if (((what & RPMBUILD_PACKAGESOURCE) && !test) && + (rc = packageSources(spec, &cookie))) + return rc; + + if (((what & RPMBUILD_PACKAGEBINARY) && !test) && + (rc = packageBinaries(spec, cookie, (didBuild == 0)))) + goto exit; + + if ((what & RPMBUILD_CLEAN) && + (rc = doScript(spec, RPMBUILD_CLEAN, "%clean", + getStringBuf(spec->clean), test))) + goto exit; + + if ((what & RPMBUILD_RMBUILD) && + (rc = doScript(spec, RPMBUILD_RMBUILD, "--clean", NULL, test))) + goto exit; + } + + if (what & RPMBUILD_RMSOURCE) + doRmSource(spec); + + if (what & RPMBUILD_RMSPEC) + (void) unlink(spec->specFile); + +exit: + free(cookie); + spec->rootDir = NULL; + if (rc != RPMRC_OK && rpmlogGetNrecs() > 0) { + rpmlog(RPMLOG_NOTICE, _("\n\nRPM build errors:\n")); + rpmlogPrint(NULL); + } + rpmugFree(); + + return rc; +} + +rpmRC rpmSpecBuild(rpmSpec spec, BTA_t buildArgs) +{ + /* buildSpec() can recurse with different buildAmount, pass it separately */ + return buildSpec(buildArgs, spec, buildArgs->buildAmount); +} diff --git a/build/expression.c b/build/expression.c new file mode 100644 index 0000000..7217290 --- /dev/null +++ b/build/expression.c @@ -0,0 +1,692 @@ +/** \ingroup rpmbuild + * \file build/expression.c + * Simple logical expression parser. + * This module implements a basic expression parser with support for + * integer and string datatypes. For ease of programming, we use the + * top-down "recursive descent" method of parsing. While a + * table-driven bottom-up parser might be faster, it does not really + * matter for the expressions we will be parsing. + * + * Copyright (C) 1998 Tom Dyas + * This work is provided under the GPL or LGPL at your choice. + */ + +#include "system.h" + +#include +#include "build/rpmbuild_internal.h" +#include "debug.h" + +/* #define DEBUG_PARSER 1 */ + +#ifdef DEBUG_PARSER +#include +#define DEBUG(x) do { x ; } while (0) +#else +#define DEBUG(x) +#endif + +typedef enum { + VALUE_TYPE_INTEGER, + VALUE_TYPE_STRING, +} valueType; + +/** + * Encapsulation of a "value" + */ +typedef struct _value { + valueType type; + union { + char *s; + int i; + } data; +} *Value; + +/** + */ +static Value valueMakeInteger(int i) +{ + Value v; + + v = (Value) xmalloc(sizeof(*v)); + v->type = VALUE_TYPE_INTEGER; + v->data.i = i; + return v; +} + +/** + */ +static Value valueMakeString(char *s) +{ + Value v; + + v = (Value) xmalloc(sizeof(*v)); + v->type = VALUE_TYPE_STRING; + v->data.s = s; + return v; +} + +/** + */ +static void valueFree( Value v) +{ + if (v) { + if (v->type == VALUE_TYPE_STRING) + v->data.s = _free(v->data.s); + v = _free(v); + } +} + +#ifdef DEBUG_PARSER +static void valueDump(const char *msg, Value v, FILE *fp) +{ + if (msg) + fprintf(fp, "%s ", msg); + if (v) { + if (v->type == VALUE_TYPE_INTEGER) + fprintf(fp, "INTEGER %d\n", v->data.i); + else + fprintf(fp, "STRING '%s'\n", v->data.s); + } else + fprintf(fp, "NULL\n"); +} +#endif + +#define valueIsInteger(v) ((v)->type == VALUE_TYPE_INTEGER) +#define valueIsString(v) ((v)->type == VALUE_TYPE_STRING) +#define valueSameType(v1,v2) ((v1)->type == (v2)->type) + + +/** + * Parser state. + */ +typedef struct _parseState { + char *str; /*!< expression string */ + char *p; /*!< current position in expression string */ + int nextToken; /*!< current lookahead token */ + Value tokenValue; /*!< valid when TOK_INTEGER or TOK_STRING */ + rpmSpec spec; /*!< spec file that we are parsing inside of */ +} *ParseState; + + +/** + * \name Parser tokens + */ +#define TOK_EOF 1 +#define TOK_INTEGER 2 +#define TOK_STRING 3 +#define TOK_IDENTIFIER 4 +#define TOK_ADD 5 +#define TOK_MINUS 6 +#define TOK_MULTIPLY 7 +#define TOK_DIVIDE 8 +#define TOK_OPEN_P 9 +#define TOK_CLOSE_P 10 +#define TOK_EQ 11 +#define TOK_NEQ 12 +#define TOK_LT 13 +#define TOK_LE 14 +#define TOK_GT 15 +#define TOK_GE 16 +#define TOK_NOT 17 +#define TOK_LOGICAL_AND 18 +#define TOK_LOGICAL_OR 19 + +#if defined(DEBUG_PARSER) +typedef struct exprTokTableEntry { + const char *name; + int val; +} ETTE_t; + +ETTE_t exprTokTable[] = { + { "EOF", TOK_EOF }, + { "I", TOK_INTEGER }, + { "S", TOK_STRING }, + { "ID", TOK_IDENTIFIER }, + { "+", TOK_ADD }, + { "-", TOK_MINUS }, + { "*", TOK_MULTIPLY }, + { "/", TOK_DIVIDE }, + { "( ", TOK_OPEN_P }, + { " )", TOK_CLOSE_P }, + { "==", TOK_EQ }, + { "!=", TOK_NEQ }, + { "<", TOK_LT }, + { "<=", TOK_LE }, + { ">", TOK_GT }, + { ">=", TOK_GE }, + { "!", TOK_NOT }, + { "&&", TOK_LOGICAL_AND }, + { "||", TOK_LOGICAL_OR }, + { NULL, 0 } +}; + +static const char *prToken(int val) +{ + ETTE_t *et; + + for (et = exprTokTable; et->name != NULL; et++) { + if (val == et->val) + return et->name; + } + return "???"; +} +#endif /* DEBUG_PARSER */ + +/** + * @param state expression parser state + */ +static int rdToken(ParseState state) +{ + int token; + Value v = NULL; + char *p = state->p; + + /* Skip whitespace before the next token. */ + while (*p && risspace(*p)) p++; + + switch (*p) { + case '\0': + token = TOK_EOF; + p--; + break; + case '+': + token = TOK_ADD; + break; + case '-': + token = TOK_MINUS; + break; + case '*': + token = TOK_MULTIPLY; + break; + case '/': + token = TOK_DIVIDE; + break; + case '(': + token = TOK_OPEN_P; + break; + case ')': + token = TOK_CLOSE_P; + break; + case '=': + if (p[1] == '=') { + token = TOK_EQ; + p++; + } else { + rpmlog(RPMLOG_ERR, _("syntax error while parsing ==\n")); + return -1; + } + break; + case '!': + if (p[1] == '=') { + token = TOK_NEQ; + p++; + } else + token = TOK_NOT; + break; + case '<': + if (p[1] == '=') { + token = TOK_LE; + p++; + } else + token = TOK_LT; + break; + case '>': + if (p[1] == '=') { + token = TOK_GE; + p++; + } else + token = TOK_GT; + break; + case '&': + if (p[1] == '&') { + token = TOK_LOGICAL_AND; + p++; + } else { + rpmlog(RPMLOG_ERR, _("syntax error while parsing &&\n")); + return -1; + } + break; + case '|': + if (p[1] == '|') { + token = TOK_LOGICAL_OR; + p++; + } else { + rpmlog(RPMLOG_ERR, _("syntax error while parsing ||\n")); + return -1; + } + break; + + default: + if (risdigit(*p)) { + char *temp; + size_t ts; + + for (ts=1; p[ts] && risdigit(p[ts]); ts++); + temp = xmalloc(ts+1); + memcpy(temp, p, ts); + p += ts-1; + temp[ts] = '\0'; + + token = TOK_INTEGER; + v = valueMakeInteger(atoi(temp)); + free(temp); + + } else if (risalpha(*p)) { + char *temp; + size_t ts; + + for (ts=1; p[ts] && (risalnum(p[ts]) || p[ts] == '_'); ts++); + temp = xmalloc(ts+1); + memcpy(temp, p, ts); + p += ts-1; + temp[ts] = '\0'; + + token = TOK_IDENTIFIER; + v = valueMakeString(temp); + + } else if (*p == '\"') { + char *temp; + size_t ts; + + p++; + for (ts=0; p[ts] && p[ts] != '\"'; ts++); + temp = xmalloc(ts+1); + memcpy(temp, p, ts); + p += ts-1; + temp[ts] = '\0'; + p++; + + token = TOK_STRING; + v = valueMakeString( rpmExpand(temp, NULL) ); + free(temp); + + } else { + rpmlog(RPMLOG_ERR, _("parse error in expression\n")); + return -1; + } + } + + state->p = p + 1; + state->nextToken = token; + state->tokenValue = v; + + DEBUG(printf("rdToken: \"%s\" (%d)\n", prToken(token), token)); + DEBUG(valueDump("rdToken:", state->tokenValue, stdout)); + + return 0; +} + +static Value doLogical(ParseState state); + +/** + * @param state expression parser state + */ +static Value doPrimary(ParseState state) +{ + Value v; + + DEBUG(printf("doPrimary()\n")); + + switch (state->nextToken) { + case TOK_OPEN_P: + if (rdToken(state)) + return NULL; + v = doLogical(state); + if (state->nextToken != TOK_CLOSE_P) { + rpmlog(RPMLOG_ERR, _("unmatched (\n")); + return NULL; + } + if (rdToken(state)) + return NULL; + break; + + case TOK_INTEGER: + case TOK_STRING: + v = state->tokenValue; + if (rdToken(state)) + return NULL; + break; + + case TOK_IDENTIFIER: { + const char *name = state->tokenValue->data.s; + + v = valueMakeString( rpmExpand(name, NULL) ); + if (rdToken(state)) + return NULL; + break; + } + + case TOK_MINUS: + if (rdToken(state)) + return NULL; + + v = doPrimary(state); + if (v == NULL) + return NULL; + + if (! valueIsInteger(v)) { + rpmlog(RPMLOG_ERR, _("- only on numbers\n")); + return NULL; + } + + v = valueMakeInteger(- v->data.i); + break; + + case TOK_NOT: + if (rdToken(state)) + return NULL; + + v = doPrimary(state); + if (v == NULL) + return NULL; + + if (! valueIsInteger(v)) { + rpmlog(RPMLOG_ERR, _("! only on numbers\n")); + return NULL; + } + + v = valueMakeInteger(! v->data.i); + break; + default: + return NULL; + break; + } + + DEBUG(valueDump("doPrimary:", v, stdout)); + return v; +} + +/** + * @param state expression parser state + */ +static Value doMultiplyDivide(ParseState state) +{ + Value v1, v2 = NULL; + + DEBUG(printf("doMultiplyDivide()\n")); + + v1 = doPrimary(state); + if (v1 == NULL) + return NULL; + + while (state->nextToken == TOK_MULTIPLY + || state->nextToken == TOK_DIVIDE) { + int op = state->nextToken; + + if (rdToken(state)) + return NULL; + + if (v2) valueFree(v2); + + v2 = doPrimary(state); + if (v2 == NULL) + return NULL; + + if (! valueSameType(v1, v2)) { + rpmlog(RPMLOG_ERR, _("types must match\n")); + return NULL; + } + + if (valueIsInteger(v1)) { + int i1 = v1->data.i, i2 = v2->data.i; + + valueFree(v1); + if (op == TOK_MULTIPLY) + v1 = valueMakeInteger(i1 * i2); + else + v1 = valueMakeInteger(i1 / i2); + } else { + rpmlog(RPMLOG_ERR, _("* / not suported for strings\n")); + return NULL; + } + } + + if (v2) valueFree(v2); + return v1; +} + +/** + * @param state expression parser state + */ +static Value doAddSubtract(ParseState state) +{ + Value v1, v2 = NULL; + + DEBUG(printf("doAddSubtract()\n")); + + v1 = doMultiplyDivide(state); + if (v1 == NULL) + return NULL; + + while (state->nextToken == TOK_ADD || state->nextToken == TOK_MINUS) { + int op = state->nextToken; + + if (rdToken(state)) + return NULL; + + if (v2) valueFree(v2); + + v2 = doMultiplyDivide(state); + if (v2 == NULL) + return NULL; + + if (! valueSameType(v1, v2)) { + rpmlog(RPMLOG_ERR, _("types must match\n")); + return NULL; + } + + if (valueIsInteger(v1)) { + int i1 = v1->data.i, i2 = v2->data.i; + + valueFree(v1); + if (op == TOK_ADD) + v1 = valueMakeInteger(i1 + i2); + else + v1 = valueMakeInteger(i1 - i2); + } else { + char *copy; + + if (op == TOK_MINUS) { + rpmlog(RPMLOG_ERR, _("- not suported for strings\n")); + return NULL; + } + + copy = xmalloc(strlen(v1->data.s) + strlen(v2->data.s) + 1); + (void) stpcpy( stpcpy(copy, v1->data.s), v2->data.s); + + valueFree(v1); + v1 = valueMakeString(copy); + } + } + + if (v2) valueFree(v2); + return v1; +} + +/** + * @param state expression parser state + */ +static Value doRelational(ParseState state) +{ + Value v1, v2 = NULL; + + DEBUG(printf("doRelational()\n")); + + v1 = doAddSubtract(state); + if (v1 == NULL) + return NULL; + + while (state->nextToken >= TOK_EQ && state->nextToken <= TOK_GE) { + int op = state->nextToken; + + if (rdToken(state)) + return NULL; + + if (v2) valueFree(v2); + + v2 = doAddSubtract(state); + if (v2 == NULL) + return NULL; + + if (! valueSameType(v1, v2)) { + rpmlog(RPMLOG_ERR, _("types must match\n")); + return NULL; + } + + if (valueIsInteger(v1)) { + int i1 = v1->data.i, i2 = v2->data.i, r = 0; + switch (op) { + case TOK_EQ: + r = (i1 == i2); + break; + case TOK_NEQ: + r = (i1 != i2); + break; + case TOK_LT: + r = (i1 < i2); + break; + case TOK_LE: + r = (i1 <= i2); + break; + case TOK_GT: + r = (i1 > i2); + break; + case TOK_GE: + r = (i1 >= i2); + break; + default: + break; + } + valueFree(v1); + v1 = valueMakeInteger(r); + } else { + const char * s1 = v1->data.s; + const char * s2 = v2->data.s; + int r = 0; + switch (op) { + case TOK_EQ: + r = (strcmp(s1,s2) == 0); + break; + case TOK_NEQ: + r = (strcmp(s1,s2) != 0); + break; + case TOK_LT: + r = (strcmp(s1,s2) < 0); + break; + case TOK_LE: + r = (strcmp(s1,s2) <= 0); + break; + case TOK_GT: + r = (strcmp(s1,s2) > 0); + break; + case TOK_GE: + r = (strcmp(s1,s2) >= 0); + break; + default: + break; + } + valueFree(v1); + v1 = valueMakeInteger(r); + } + } + + if (v2) valueFree(v2); + return v1; +} + +/** + * @param state expression parser state + */ +static Value doLogical(ParseState state) +{ + Value v1, v2 = NULL; + + DEBUG(printf("doLogical()\n")); + + v1 = doRelational(state); + if (v1 == NULL) + return NULL; + + while (state->nextToken == TOK_LOGICAL_AND + || state->nextToken == TOK_LOGICAL_OR) { + int op = state->nextToken; + + if (rdToken(state)) + return NULL; + + if (v2) valueFree(v2); + + v2 = doRelational(state); + if (v2 == NULL) + return NULL; + + if (! valueSameType(v1, v2)) { + rpmlog(RPMLOG_ERR, _("types must match\n")); + return NULL; + } + + if (valueIsInteger(v1)) { + int i1 = v1->data.i, i2 = v2->data.i; + + valueFree(v1); + if (op == TOK_LOGICAL_AND) + v1 = valueMakeInteger(i1 && i2); + else + v1 = valueMakeInteger(i1 || i2); + } else { + rpmlog(RPMLOG_ERR, _("&& and || not suported for strings\n")); + return NULL; + } + } + + if (v2) valueFree(v2); + return v1; +} + +int parseExpressionBoolean(rpmSpec spec, const char *expr) +{ + struct _parseState state; + int result = -1; + Value v; + + DEBUG(printf("parseExprBoolean(?, '%s')\n", expr)); + + /* Initialize the expression parser state. */ + state.p = state.str = xstrdup(expr); + state.spec = spec; + state.nextToken = 0; + state.tokenValue = NULL; + (void) rdToken(&state); + + /* Parse the expression. */ + v = doLogical(&state); + if (!v) { + state.str = _free(state.str); + return -1; + } + + /* If the next token is not TOK_EOF, we have a syntax error. */ + if (state.nextToken != TOK_EOF) { + rpmlog(RPMLOG_ERR, _("syntax error in expression\n")); + state.str = _free(state.str); + return -1; + } + + DEBUG(valueDump("parseExprBoolean:", v, stdout)); + + switch (v->type) { + case VALUE_TYPE_INTEGER: + result = v->data.i != 0; + break; + case VALUE_TYPE_STRING: + result = v->data.s[0] != '\0'; + break; + default: + break; + } + + state.str = _free(state.str); + valueFree(v); + return result; +} diff --git a/build/files.c b/build/files.c new file mode 100644 index 0000000..b4b893a --- /dev/null +++ b/build/files.c @@ -0,0 +1,2171 @@ +/** \ingroup rpmbuild + * \file build/files.c + * The post-build, pre-packaging file tree walk to assemble the package + * manifest. + */ + +#include "system.h" + +#define MYALLPERMS 07777 + +#include +#include +#if WITH_CAP +#include +#endif + +#include +#include +#include +#include /* rpmDoDigest() */ +#include + +#include "rpmio/rpmio_internal.h" /* XXX rpmioSlurp */ +#include "rpmio/base64.h" +#include "misc/fts.h" +#include "lib/cpio.h" +#include "lib/rpmfi_internal.h" /* XXX fi->apath */ +#include "lib/rpmug.h" +#include "build/rpmbuild_internal.h" +#include "build/rpmbuild_misc.h" + +#include "debug.h" +#include + +#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; } +#define SKIPWHITE(_x) {while(*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;} +#define SKIPNONWHITE(_x){while(*(_x) &&!(risspace(*_x) || *(_x) == ',')) (_x)++;} + +/** + */ +enum specfFlags_e { + SPECD_DEFFILEMODE = (1 << 0), + SPECD_DEFDIRMODE = (1 << 1), + SPECD_DEFUID = (1 << 2), + SPECD_DEFGID = (1 << 3), + SPECD_DEFVERIFY = (1 << 4), + + SPECD_FILEMODE = (1 << 8), + SPECD_DIRMODE = (1 << 9), + SPECD_UID = (1 << 10), + SPECD_GID = (1 << 11), + SPECD_VERIFY = (1 << 12) +}; + +typedef rpmFlags specfFlags; + +/** + */ +typedef struct FileListRec_s { + struct stat fl_st; +#define fl_dev fl_st.st_dev +#define fl_ino fl_st.st_ino +#define fl_mode fl_st.st_mode +#define fl_nlink fl_st.st_nlink +#define fl_uid fl_st.st_uid +#define fl_gid fl_st.st_gid +#define fl_rdev fl_st.st_rdev +#define fl_size fl_st.st_size +#define fl_mtime fl_st.st_mtime + + char *diskPath; /* get file from here */ + char *cpioPath; /* filename in cpio archive */ + const char *uname; + const char *gname; + unsigned flags; + specfFlags specdFlags; /* which attributes have been explicitly specified. */ + rpmVerifyFlags verifyFlags; + char *langs; /* XXX locales separated with | */ + char *caps; +} * FileListRec; + +/** + */ +typedef struct AttrRec_s { + char *ar_fmodestr; + char *ar_dmodestr; + char *ar_user; + char *ar_group; + mode_t ar_fmode; + mode_t ar_dmode; +} * AttrRec; + +static struct AttrRec_s root_ar = { NULL, NULL, "root", "root", 0, 0 }; + +/* list of files */ +static StringBuf check_fileList = NULL; + +/** + * Package file tree walk data. + */ +typedef struct FileList_s { + char * buildRoot; + + int fileCount; + int processingFailed; + + int passedSpecialDoc; + int isSpecialDoc; + + int noGlob; + unsigned devtype; + unsigned devmajor; + int devminor; + + int isDir; + rpmBuildPkgFlags pkgFlags; + rpmfileAttrs currentFlags; + specfFlags currentSpecdFlags; + rpmVerifyFlags currentVerifyFlags; + struct AttrRec_s cur_ar; + struct AttrRec_s def_ar; + specfFlags defSpecdFlags; + rpmVerifyFlags defVerifyFlags; + int nLangs; + char ** currentLangs; + int haveCaps; + char *currentCaps; + ARGV_t docDirs; + + FileListRec fileList; + int fileListRecsAlloced; + int fileListRecsUsed; + int largeFiles; +} * FileList; + +/** + */ +static void nullAttrRec(AttrRec ar) +{ + ar->ar_fmodestr = NULL; + ar->ar_dmodestr = NULL; + ar->ar_user = NULL; + ar->ar_group = NULL; + ar->ar_fmode = 0; + ar->ar_dmode = 0; +} + +/** + */ +static void freeAttrRec(AttrRec ar) +{ + ar->ar_fmodestr = _free(ar->ar_fmodestr); + ar->ar_dmodestr = _free(ar->ar_dmodestr); + ar->ar_user = _free(ar->ar_user); + ar->ar_group = _free(ar->ar_group); + /* XXX doesn't free ar (yet) */ + return; +} + +/** + */ +static void dupAttrRec(const AttrRec oar, AttrRec nar) +{ + if (oar == nar) + return; + freeAttrRec(nar); + nar->ar_fmodestr = (oar->ar_fmodestr ? xstrdup(oar->ar_fmodestr) : NULL); + nar->ar_dmodestr = (oar->ar_dmodestr ? xstrdup(oar->ar_dmodestr) : NULL); + nar->ar_user = (oar->ar_user ? xstrdup(oar->ar_user) : NULL); + nar->ar_group = (oar->ar_group ? xstrdup(oar->ar_group) : NULL); + nar->ar_fmode = oar->ar_fmode; + nar->ar_dmode = oar->ar_dmode; +} + +#if 0 +/** + */ +static void dumpAttrRec(const char * msg, AttrRec ar) +{ + if (msg) + fprintf(stderr, "%s:\t", msg); + fprintf(stderr, "(%s, %s, %s, %s)\n", + ar->ar_fmodestr, + ar->ar_user, + ar->ar_group, + ar->ar_dmodestr); +} +#endif + +/** + * strtokWithQuotes. + * @param s + * @param delim + */ +static char *strtokWithQuotes(char *s, const char *delim) +{ + static char *olds = NULL; + char *token; + + if (s == NULL) + s = olds; + if (s == NULL) + return NULL; + + /* Skip leading delimiters */ + s += strspn(s, delim); + if (*s == '\0') + return NULL; + + /* Find the end of the token. */ + token = s; + if (*token == '"') { + token++; + /* Find next " char */ + s = strchr(token, '"'); + } else { + s = strpbrk(token, delim); + } + + /* Terminate it */ + if (s == NULL) { + /* This token finishes the string */ + olds = strchr(token, '\0'); + } else { + /* Terminate the token and make olds point past it */ + *s = '\0'; + olds = s+1; + } + + return token; +} + +/** + */ +typedef const struct VFA { + const char * attribute; + int neg; /* XXX unused */ + int flag; +} VFA_t; + +/** + */ +static VFA_t const verifyAttrs[] = { + { "md5", 0, RPMVERIFY_FILEDIGEST }, + { "filedigest", 0, RPMVERIFY_FILEDIGEST }, + { "size", 0, RPMVERIFY_FILESIZE }, + { "link", 0, RPMVERIFY_LINKTO }, + { "user", 0, RPMVERIFY_USER }, + { "group", 0, RPMVERIFY_GROUP }, + { "mtime", 0, RPMVERIFY_MTIME }, + { "mode", 0, RPMVERIFY_MODE }, + { "rdev", 0, RPMVERIFY_RDEV }, + { "caps", 0, RPMVERIFY_CAPS }, + { NULL, 0, 0 } +}; + +/** + * Parse %verify and %defverify from file manifest. + * @param buf current spec file line + * @param fl package file tree walk data + * @return RPMRC_OK on success + */ +static rpmRC parseForVerify(char * buf, FileList fl) +{ + char *p, *pe, *q = NULL; + const char *name; + rpmVerifyFlags *resultVerify; + int negated; + rpmVerifyFlags verifyFlags; + specfFlags * specdFlags; + rpmRC rc = RPMRC_FAIL; + + if ((p = strstr(buf, (name = "%verify"))) != NULL) { + resultVerify = &(fl->currentVerifyFlags); + specdFlags = &fl->currentSpecdFlags; + } else if ((p = strstr(buf, (name = "%defverify"))) != NULL) { + resultVerify = &(fl->defVerifyFlags); + specdFlags = &fl->defSpecdFlags; + } else + return RPMRC_OK; + + for (pe = p; (pe-p) < strlen(name); pe++) + *pe = ' '; + + SKIPSPACE(pe); + + if (*pe != '(') { + rpmlog(RPMLOG_ERR, _("Missing '(' in %s %s\n"), name, pe); + goto exit; + } + + /* Bracket %*verify args */ + *pe++ = ' '; + for (p = pe; *pe && *pe != ')'; pe++) + {}; + + if (*pe == '\0') { + rpmlog(RPMLOG_ERR, _("Missing ')' in %s(%s\n"), name, p); + goto exit; + } + + /* Localize. Erase parsed string */ + q = xmalloc((pe-p) + 1); + rstrlcpy(q, p, (pe-p) + 1); + while (p <= pe) + *p++ = ' '; + + negated = 0; + verifyFlags = RPMVERIFY_NONE; + + for (p = q; *p != '\0'; p = pe) { + SKIPWHITE(p); + if (*p == '\0') + break; + pe = p; + SKIPNONWHITE(pe); + if (*pe != '\0') + *pe++ = '\0'; + + { VFA_t *vfa; + for (vfa = verifyAttrs; vfa->attribute != NULL; vfa++) { + if (!rstreq(p, vfa->attribute)) + continue; + verifyFlags |= vfa->flag; + break; + } + if (vfa->attribute) + continue; + } + + if (rstreq(p, "not")) { + negated ^= 1; + } else { + rpmlog(RPMLOG_ERR, _("Invalid %s token: %s\n"), name, p); + goto exit; + } + } + + *resultVerify = negated ? ~(verifyFlags) : verifyFlags; + *specdFlags |= SPECD_VERIFY; + rc = RPMRC_OK; + +exit: + free(q); + if (rc != RPMRC_OK) { + fl->processingFailed = 1; + } + + return rc; +} + +#define isAttrDefault(_ars) ((_ars)[0] == '-' && (_ars)[1] == '\0') + +/** + * Parse %dev from file manifest. + * @param buf current spec file line + * @param fl package file tree walk data + * @return RPMRC_OK on success + */ +static rpmRC parseForDev(char * buf, FileList fl) +{ + const char * name; + const char * errstr = NULL; + char *p, *pe, *q = NULL; + rpmRC rc = RPMRC_FAIL; /* assume error */ + + if ((p = strstr(buf, (name = "%dev"))) == NULL) + return RPMRC_OK; + + for (pe = p; (pe-p) < strlen(name); pe++) + *pe = ' '; + SKIPSPACE(pe); + + if (*pe != '(') { + errstr = "'('"; + goto exit; + } + + /* Bracket %dev args */ + *pe++ = ' '; + for (p = pe; *pe && *pe != ')'; pe++) + {}; + if (*pe != ')') { + errstr = "')'"; + goto exit; + } + + /* Localize. Erase parsed string */ + q = xmalloc((pe-p) + 1); + rstrlcpy(q, p, (pe-p) + 1); + while (p <= pe) + *p++ = ' '; + + p = q; SKIPWHITE(p); + pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0'; + if (*p == 'b') + fl->devtype = 'b'; + else if (*p == 'c') + fl->devtype = 'c'; + else { + errstr = "devtype"; + goto exit; + } + + p = pe; SKIPWHITE(p); + pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0'; + for (pe = p; *pe && risdigit(*pe); pe++) + {} ; + if (*pe == '\0') { + fl->devmajor = atoi(p); + if (!(fl->devmajor >= 0 && fl->devmajor < 256)) { + errstr = "devmajor"; + goto exit; + } + pe++; + } else { + errstr = "devmajor"; + goto exit; + } + + p = pe; SKIPWHITE(p); + pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0'; + for (pe = p; *pe && risdigit(*pe); pe++) + {} ; + if (*pe == '\0') { + fl->devminor = atoi(p); + if (!(fl->devminor >= 0 && fl->devminor < 256)) { + errstr = "devminor"; + goto exit; + } + pe++; + } else { + errstr = "devminor"; + goto exit; + } + + fl->noGlob = 1; + + rc = RPMRC_OK; + +exit: + if (rc) { + rpmlog(RPMLOG_ERR, _("Missing %s in %s %s\n"), errstr, name, p); + fl->processingFailed = 1; + } + free(q); + return rc; +} + +/** + * Parse %attr and %defattr from file manifest. + * @param buf current spec file line + * @param fl package file tree walk data + * @return 0 on success + */ +static rpmRC parseForAttr(char * buf, FileList fl) +{ + const char *name; + char *p, *pe, *q = NULL; + int x; + struct AttrRec_s arbuf; + AttrRec ar = &arbuf, ret_ar; + specfFlags * specdFlags; + rpmRC rc = RPMRC_FAIL; + + if ((p = strstr(buf, (name = "%attr"))) != NULL) { + ret_ar = &(fl->cur_ar); + specdFlags = &fl->currentSpecdFlags; + } else if ((p = strstr(buf, (name = "%defattr"))) != NULL) { + ret_ar = &(fl->def_ar); + specdFlags = &fl->defSpecdFlags; + } else + return RPMRC_OK; + + for (pe = p; (pe-p) < strlen(name); pe++) + *pe = ' '; + + SKIPSPACE(pe); + + if (*pe != '(') { + rpmlog(RPMLOG_ERR, _("Missing '(' in %s %s\n"), name, pe); + goto exit; + } + + /* Bracket %*attr args */ + *pe++ = ' '; + for (p = pe; *pe && *pe != ')'; pe++) + {}; + + if (ret_ar == &(fl->def_ar)) { /* %defattr */ + char *r = pe; + r++; + SKIPSPACE(r); + if (*r != '\0') { + rpmlog(RPMLOG_ERR, + _("Non-white space follows %s(): %s\n"), name, r); + goto exit; + } + } + + /* Localize. Erase parsed string */ + q = xmalloc((pe-p) + 1); + rstrlcpy(q, p, (pe-p) + 1); + while (p <= pe) + *p++ = ' '; + + nullAttrRec(ar); + + p = q; SKIPWHITE(p); + if (*p != '\0') { + pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0'; + ar->ar_fmodestr = p; + p = pe; SKIPWHITE(p); + } + if (*p != '\0') { + pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0'; + ar->ar_user = p; + p = pe; SKIPWHITE(p); + } + if (*p != '\0') { + pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0'; + ar->ar_group = p; + p = pe; SKIPWHITE(p); + } + if (*p != '\0' && ret_ar == &(fl->def_ar)) { /* %defattr */ + pe = p; SKIPNONWHITE(pe); if (*pe != '\0') *pe++ = '\0'; + ar->ar_dmodestr = p; + p = pe; SKIPWHITE(p); + } + + if (!(ar->ar_fmodestr && ar->ar_user && ar->ar_group) || *p != '\0') { + rpmlog(RPMLOG_ERR, _("Bad syntax: %s(%s)\n"), name, q); + goto exit; + } + + /* Do a quick test on the mode argument and adjust for "-" */ + if (ar->ar_fmodestr && !isAttrDefault(ar->ar_fmodestr)) { + unsigned int ui; + x = sscanf(ar->ar_fmodestr, "%o", &ui); + if ((x == 0) || (ar->ar_fmode & ~MYALLPERMS)) { + rpmlog(RPMLOG_ERR, _("Bad mode spec: %s(%s)\n"), name, q); + goto exit; + } + ar->ar_fmode = ui; + } else { + ar->ar_fmodestr = NULL; + } + + if (ar->ar_dmodestr && !isAttrDefault(ar->ar_dmodestr)) { + unsigned int ui; + x = sscanf(ar->ar_dmodestr, "%o", &ui); + if ((x == 0) || (ar->ar_dmode & ~MYALLPERMS)) { + rpmlog(RPMLOG_ERR, _("Bad dirmode spec: %s(%s)\n"), name, q); + goto exit; + } + ar->ar_dmode = ui; + } else { + ar->ar_dmodestr = NULL; + } + + if (!(ar->ar_user && !isAttrDefault(ar->ar_user))) { + ar->ar_user = NULL; + } + + if (!(ar->ar_group && !isAttrDefault(ar->ar_group))) { + ar->ar_group = NULL; + } + + dupAttrRec(ar, ret_ar); + + /* XXX fix all this */ + *specdFlags |= SPECD_UID | SPECD_GID | SPECD_FILEMODE | SPECD_DIRMODE; + rc = RPMRC_OK; + +exit: + free(q); + if (rc != RPMRC_OK) { + fl->processingFailed = 1; + } + + return rc; +} + +/** + * Parse %config from file manifest. + * @param buf current spec file line + * @param fl package file tree walk data + * @return RPMRC_OK on success + */ +static rpmRC parseForConfig(char * buf, FileList fl) +{ + char *p, *pe, *q = NULL; + const char *name; + rpmRC rc = RPMRC_FAIL; + + if ((p = strstr(buf, (name = "%config"))) == NULL) + return RPMRC_OK; + + fl->currentFlags |= RPMFILE_CONFIG; + + /* Erase "%config" token. */ + for (pe = p; (pe-p) < strlen(name); pe++) + *pe = ' '; + SKIPSPACE(pe); + if (*pe != '(') + return RPMRC_OK; + + /* Bracket %config args */ + *pe++ = ' '; + for (p = pe; *pe && *pe != ')'; pe++) + {}; + + if (*pe == '\0') { + rpmlog(RPMLOG_ERR, _("Missing ')' in %s(%s\n"), name, p); + goto exit; + } + + /* Localize. Erase parsed string. */ + q = xmalloc((pe-p) + 1); + rstrlcpy(q, p, (pe-p) + 1); + while (p <= pe) + *p++ = ' '; + + for (p = q; *p != '\0'; p = pe) { + SKIPWHITE(p); + if (*p == '\0') + break; + pe = p; + SKIPNONWHITE(pe); + if (*pe != '\0') + *pe++ = '\0'; + if (rstreq(p, "missingok")) { + fl->currentFlags |= RPMFILE_MISSINGOK; + } else if (rstreq(p, "noreplace")) { + fl->currentFlags |= RPMFILE_NOREPLACE; + } else { + rpmlog(RPMLOG_ERR, _("Invalid %s token: %s\n"), name, p); + goto exit; + } + } + rc = RPMRC_OK; + +exit: + free(q); + if (rc != RPMRC_OK) { + fl->processingFailed = 1; + } + + return rc; +} + +/** + */ +static int langCmp(const void * ap, const void * bp) +{ + return strcmp(*(const char **)ap, *(const char **)bp); +} + +/** + * Parse %lang from file manifest. + * @param buf current spec file line + * @param fl package file tree walk data + * @return RPMRC_OK on success + */ +static rpmRC parseForLang(char * buf, FileList fl) +{ + char *p, *pe, *q = NULL; + const char *name; + rpmRC rc = RPMRC_FAIL; + + while ((p = strstr(buf, (name = "%lang"))) != NULL) { + + for (pe = p; (pe-p) < strlen(name); pe++) + *pe = ' '; + SKIPSPACE(pe); + + if (*pe != '(') { + rpmlog(RPMLOG_ERR, _("Missing '(' in %s %s\n"), name, pe); + goto exit; + } + + /* Bracket %lang args */ + *pe++ = ' '; + for (pe = p; *pe && *pe != ')'; pe++) + {}; + + if (*pe == '\0') { + rpmlog(RPMLOG_ERR, _("Missing ')' in %s(%s\n"), name, p); + goto exit; + } + + /* Localize. Erase parsed string. */ + q = xmalloc((pe-p) + 1); + rstrlcpy(q, p, (pe-p) + 1); + while (p <= pe) + *p++ = ' '; + + /* Parse multiple arguments from %lang */ + for (p = q; *p != '\0'; p = pe) { + char *newp; + size_t np; + int i; + + SKIPWHITE(p); + pe = p; + SKIPNONWHITE(pe); + + np = pe - p; + + /* Sanity check on locale lengths */ + if (np < 1 || (np == 1 && *p != 'C') || np >= 32) { + rpmlog(RPMLOG_ERR, + _("Unusual locale length: \"%.*s\" in %%lang(%s)\n"), + (int)np, p, q); + goto exit; + } + + /* Check for duplicate locales */ + if (fl->currentLangs != NULL) + for (i = 0; i < fl->nLangs; i++) { + if (!rstreqn(fl->currentLangs[i], p, np)) + continue; + rpmlog(RPMLOG_ERR, _("Duplicate locale %.*s in %%lang(%s)\n"), + (int)np, p, q); + goto exit; + } + + /* Add new locale */ + fl->currentLangs = xrealloc(fl->currentLangs, + (fl->nLangs + 1) * sizeof(*fl->currentLangs)); + newp = xmalloc( np+1 ); + rstrlcpy(newp, p, np + 1); + fl->currentLangs[fl->nLangs++] = newp; + if (*pe == ',') pe++; /* skip , if present */ + } + } + + /* Insure that locales are sorted. */ + if (fl->currentLangs) + qsort(fl->currentLangs, fl->nLangs, sizeof(*fl->currentLangs), langCmp); + rc = RPMRC_OK; + +exit: + free(q); + if (rc != RPMRC_OK) { + fl->processingFailed = 1; + } + + return rc; +} + +/** + * Parse %caps from file manifest. + * @param buf current spec file line + * @param fl package file tree walk data + * @return RPMRC_OK on success + */ +static rpmRC parseForCaps(char * buf, FileList fl) +{ + char *p, *pe, *q = NULL; + const char *name; + rpmRC rc = RPMRC_FAIL; + + if ((p = strstr(buf, (name = "%caps"))) == NULL) + return RPMRC_OK; + + /* Erase "%caps" token. */ + for (pe = p; (pe-p) < strlen(name); pe++) + *pe = ' '; + SKIPSPACE(pe); + if (*pe != '(') + return RPMRC_OK; + + /* Bracket %caps args */ + *pe++ = ' '; + for (p = pe; *pe && *pe != ')'; pe++) + {}; + + if (*pe == '\0') { + rpmlog(RPMLOG_ERR, _("Missing ')' in %s(%s\n"), name, p); + goto exit; + } + + /* Localize. Erase parsed string. */ + q = xmalloc((pe-p) + 1); + rstrlcpy(q, p, (pe-p) + 1); + while (p <= pe) + *p++ = ' '; + +#if WITH_CAP + { + char *captxt = NULL; + cap_t fcaps = cap_from_text(q); + if (fcaps == NULL) { + rpmlog(RPMLOG_ERR, _("Invalid capability: %s\n"), q); + goto exit; + } + /* run our string through cap_to_text() to get libcap presentation */ + captxt = cap_to_text(fcaps, NULL); + fl->currentCaps = xstrdup(captxt); + fl->haveCaps = 1; + cap_free(captxt); + cap_free(fcaps); + } +#else + rpmlog(RPMLOG_ERR, _("File capability support not built in\n")); + goto exit; +#endif + + rc = RPMRC_OK; + +exit: + free(q); + if (rc != RPMRC_OK) { + fl->processingFailed = 1; + } + + return rc; +} +/** + */ +static VFA_t virtualFileAttributes[] = { + { "%dir", 0, 0 }, /* XXX why not RPMFILE_DIR? */ + { "%doc", 0, RPMFILE_DOC }, + { "%ghost", 0, RPMFILE_GHOST }, + { "%exclude", 0, RPMFILE_EXCLUDE }, + { "%readme", 0, RPMFILE_README }, + { "%license", 0, RPMFILE_LICENSE }, + { "%pubkey", 0, RPMFILE_PUBKEY }, + { NULL, 0, 0 } +}; + +/** + * Parse simple attributes (e.g. %dir) from file manifest. + * @param spec + * @param pkg + * @param buf current spec file line + * @param fl package file tree walk data + * @retval *fileName file name + * @return RPMRC_OK on success + */ +static rpmRC parseForSimple(rpmSpec spec, Package pkg, char * buf, + FileList fl, const char ** fileName) +{ + char *s, *t; + rpmRC res; + char *specialDocBuf = NULL; + + *fileName = NULL; + res = RPMRC_OK; + + t = buf; + while ((s = strtokWithQuotes(t, " \t\n")) != NULL) { + VFA_t *vfa; + t = NULL; + if (rstreq(s, "%docdir")) { + s = strtokWithQuotes(NULL, " \t\n"); + + if (s == NULL || strtokWithQuotes(NULL, " \t\n")) { + rpmlog(RPMLOG_ERR, _("Only one arg for %%docdir\n")); + res = RPMRC_FAIL; + } else { + argvAdd(&(fl->docDirs), s); + } + break; + } + + /* Set flags for virtual file attributes */ + for (vfa = virtualFileAttributes; vfa->attribute != NULL; vfa++) { + if (!rstreq(s, vfa->attribute)) + continue; + if (!vfa->flag) { + if (rstreq(s, "%dir")) + fl->isDir = 1; /* XXX why not RPMFILE_DIR? */ + } else { + if (vfa->neg) + fl->currentFlags &= ~vfa->flag; + else + fl->currentFlags |= vfa->flag; + } + break; + } + /* if we got an attribute, continue with next token */ + if (vfa->attribute != NULL) + continue; + + if (*fileName) { + /* We already got a file -- error */ + rpmlog(RPMLOG_ERR, _("Two files on one line: %s\n"), *fileName); + res = RPMRC_FAIL; + } + + if (*s != '/') { + if (fl->currentFlags & RPMFILE_DOC) { + rstrscat(&specialDocBuf, " ", s, NULL); + } else + if (fl->currentFlags & RPMFILE_PUBKEY) + { + *fileName = s; + } else { + /* not in %doc, does not begin with / -- error */ + rpmlog(RPMLOG_ERR, _("File must begin with \"/\": %s\n"), s); + res = RPMRC_FAIL; + } + } else { + *fileName = s; + } + } + + if (specialDocBuf) { + if (*fileName || (fl->currentFlags & ~(RPMFILE_DOC))) { + rpmlog(RPMLOG_ERR, + _("Can't mix special %%doc with other forms: %s\n"), + (*fileName ? *fileName : "")); + res = RPMRC_FAIL; + } else { + /* XXX FIXME: this is easy to do as macro expansion */ + if (! fl->passedSpecialDoc) { + char *mkdocdir = rpmExpand("%{__mkdir_p} $DOCDIR", NULL); + pkg->specialDoc = newStringBuf(); + appendStringBuf(pkg->specialDoc, "DOCDIR=$RPM_BUILD_ROOT"); + appendLineStringBuf(pkg->specialDoc, pkg->specialDocDir); + appendLineStringBuf(pkg->specialDoc, "export DOCDIR"); + appendLineStringBuf(pkg->specialDoc, mkdocdir); + free(mkdocdir); + + *fileName = pkg->specialDocDir; + fl->passedSpecialDoc = 1; + fl->isSpecialDoc = 1; + } + + appendStringBuf(pkg->specialDoc, "cp -pr "); + appendStringBuf(pkg->specialDoc, specialDocBuf); + appendLineStringBuf(pkg->specialDoc, " $DOCDIR"); + } + free(specialDocBuf); + } + + if (res != RPMRC_OK) { + fl->processingFailed = 1; + } + + return res; +} + +/** + */ +static int compareFileListRecs(const void * ap, const void * bp) +{ + const char *a = ((FileListRec)ap)->cpioPath; + const char *b = ((FileListRec)bp)->cpioPath; + return strcmp(a, b); +} + +/** + * Test if file is located in a %docdir. + * @param fl package file tree walk data + * @param fileName file path + * @return 1 if doc file, 0 if not + */ +static int isDoc(FileList fl, const char * fileName) +{ + size_t k, l; + ARGV_const_t dd; + + k = strlen(fileName); + for (dd = fl->docDirs; *dd; dd++) { + l = strlen(*dd); + if (l < k && rstreqn(fileName, *dd, l) && fileName[l] == '/') + return 1; + } + return 0; +} + +static int isHardLink(FileListRec flp, FileListRec tlp) +{ + return ((S_ISREG(flp->fl_mode) && S_ISREG(tlp->fl_mode)) && + ((flp->fl_nlink > 1) && (flp->fl_nlink == tlp->fl_nlink)) && + (flp->fl_ino == tlp->fl_ino) && + (flp->fl_dev == tlp->fl_dev)); +} + +/** + * Verify that file attributes scope over hardlinks correctly. + * If partial hardlink sets are possible, then add tracking dependency. + * @param fl package file tree walk data + * @return 1 if partial hardlink sets can exist, 0 otherwise. + */ +static int checkHardLinks(FileList fl) +{ + FileListRec ilp, jlp; + int i, j; + + for (i = 0; i < fl->fileListRecsUsed; i++) { + ilp = fl->fileList + i; + if (!(S_ISREG(ilp->fl_mode) && ilp->fl_nlink > 1)) + continue; + + for (j = i + 1; j < fl->fileListRecsUsed; j++) { + jlp = fl->fileList + j; + if (isHardLink(ilp, jlp)) { + return 1; + } + } + } + return 0; +} + +static int seenHardLink(FileList fl, FileListRec flp) +{ + for (FileListRec ilp = fl->fileList; ilp < flp; ilp++) { + if (isHardLink(flp, ilp)) { + return 1; + } + } + return 0; +} + +/** + * Add file entries to header. + * @todo Should directories have %doc/%config attributes? (#14531) + * @todo Remove RPMTAG_OLDFILENAMES, add dirname/basename instead. + * @param fl package file tree walk data + * @retval *fip file info for package + * @param h + * @param isSrc + */ +static void genCpioListAndHeader(FileList fl, + rpmfi * fip, Header h, int isSrc) +{ + int _addDotSlash = !(isSrc || rpmExpandNumeric("%{_noPayloadPrefix}")); + size_t apathlen = 0; + size_t dpathlen = 0; + size_t skipLen = 0; + FileListRec flp; + char buf[BUFSIZ]; + int i; + uint32_t defaultalgo = PGPHASHALGO_MD5, digestalgo; + rpm_loff_t totalFileSize = 0; + + /* + * See if non-md5 file digest algorithm is requested. If not + * specified, quietly assume md5. Otherwise check if supported type. + */ + digestalgo = rpmExpandNumeric(isSrc ? "%{_source_filedigest_algorithm}" : + "%{_binary_filedigest_algorithm}"); + if (digestalgo == 0) { + digestalgo = defaultalgo; + } + + if (rpmDigestLength(digestalgo) == 0) { + rpmlog(RPMLOG_WARNING, + _("Unknown file digest algorithm %u, falling back to MD5\n"), + digestalgo); + digestalgo = defaultalgo; + } + + /* Sort the big list */ + qsort(fl->fileList, fl->fileListRecsUsed, + sizeof(*(fl->fileList)), compareFileListRecs); + + /* Generate the header. */ + if (! isSrc) { + skipLen = 1; + } + + for (i = 0, flp = fl->fileList; i < fl->fileListRecsUsed; i++, flp++) { + /* Merge duplicate entries. */ + while (i < (fl->fileListRecsUsed - 1) && + rstreq(flp->cpioPath, flp[1].cpioPath)) { + + /* Two entries for the same file found, merge the entries. */ + /* Note that an %exclude is a duplication of a file reference */ + + /* file flags */ + flp[1].flags |= flp->flags; + + if (!(flp[1].flags & RPMFILE_EXCLUDE)) + rpmlog(RPMLOG_WARNING, _("File listed twice: %s\n"), + flp->cpioPath); + + /* file mode */ + if (S_ISDIR(flp->fl_mode)) { + if ((flp[1].specdFlags & (SPECD_DIRMODE | SPECD_DEFDIRMODE)) < + (flp->specdFlags & (SPECD_DIRMODE | SPECD_DEFDIRMODE))) + flp[1].fl_mode = flp->fl_mode; + } else { + if ((flp[1].specdFlags & (SPECD_FILEMODE | SPECD_DEFFILEMODE)) < + (flp->specdFlags & (SPECD_FILEMODE | SPECD_DEFFILEMODE))) + flp[1].fl_mode = flp->fl_mode; + } + + /* uid */ + if ((flp[1].specdFlags & (SPECD_UID | SPECD_DEFUID)) < + (flp->specdFlags & (SPECD_UID | SPECD_DEFUID))) + { + flp[1].fl_uid = flp->fl_uid; + flp[1].uname = flp->uname; + } + + /* gid */ + if ((flp[1].specdFlags & (SPECD_GID | SPECD_DEFGID)) < + (flp->specdFlags & (SPECD_GID | SPECD_DEFGID))) + { + flp[1].fl_gid = flp->fl_gid; + flp[1].gname = flp->gname; + } + + /* verify flags */ + if ((flp[1].specdFlags & (SPECD_VERIFY | SPECD_DEFVERIFY)) < + (flp->specdFlags & (SPECD_VERIFY | SPECD_DEFVERIFY))) + flp[1].verifyFlags = flp->verifyFlags; + + /* XXX to-do: language */ + + flp++; i++; + } + + /* Skip files that were marked with %exclude. */ + if (flp->flags & RPMFILE_EXCLUDE) continue; + + /* Omit '/' and/or URL prefix, leave room for "./" prefix */ + apathlen += (strlen(flp->cpioPath) - skipLen + (_addDotSlash ? 3 : 1)); + + /* Leave room for both dirname and basename NUL's */ + dpathlen += (strlen(flp->diskPath) + 2); + + /* + * Make the header. Store the on-disk path to OLDFILENAMES for + * cpio list generation purposes for now, final path temporarily + * to ORIGFILENAMES, to be swapped later into OLDFILENAMES. + */ + headerPutString(h, RPMTAG_OLDFILENAMES, flp->diskPath); + headerPutString(h, RPMTAG_ORIGFILENAMES, flp->cpioPath); + headerPutString(h, RPMTAG_FILEUSERNAME, flp->uname); + headerPutString(h, RPMTAG_FILEGROUPNAME, flp->gname); + + /* + * Only use 64bit filesizes if file sizes require it. + * This is basically no-op for now as we error out in addFile() if + * any individual file size exceeds the cpio limit. + */ + if (fl->largeFiles) { + rpm_loff_t rsize64 = (rpm_loff_t)flp->fl_size; + headerPutUint64(h, RPMTAG_LONGFILESIZES, &rsize64, 1); + /* XXX TODO: add rpmlib() dependency for large files */ + } else { + rpm_off_t rsize32 = (rpm_off_t)flp->fl_size; + headerPutUint32(h, RPMTAG_FILESIZES, &rsize32, 1); + } + /* Excludes and dupes have been filtered out by now. */ + if (S_ISREG(flp->fl_mode)) { + if (flp->fl_nlink == 1 || !seenHardLink(fl, flp)) { + totalFileSize += flp->fl_size; + } + } + + /* + * For items whose size varies between systems, always explicitly + * cast to the header type before inserting. + * TODO: check and warn if header type overflows for each case. + */ + { rpm_time_t rtime = (rpm_time_t) flp->fl_mtime; + headerPutUint32(h, RPMTAG_FILEMTIMES, &rtime, 1); + } + + { rpm_mode_t rmode = (rpm_mode_t) flp->fl_mode; + headerPutUint16(h, RPMTAG_FILEMODES, &rmode, 1); + } + + { rpm_rdev_t rrdev = (rpm_rdev_t) flp->fl_rdev; + headerPutUint16(h, RPMTAG_FILERDEVS, &rrdev, 1); + } + + { rpm_dev_t rdev = (rpm_dev_t) flp->fl_dev; + headerPutUint32(h, RPMTAG_FILEDEVICES, &rdev, 1); + } + + { rpm_ino_t rino = (rpm_ino_t) flp->fl_ino; + headerPutUint32(h, RPMTAG_FILEINODES, &rino, 1); + } + + headerPutString(h, RPMTAG_FILELANGS, flp->langs); + + if (fl->haveCaps) { + headerPutString(h, RPMTAG_FILECAPS, flp->caps); + } + + buf[0] = '\0'; + if (S_ISREG(flp->fl_mode)) + (void) rpmDoDigest(digestalgo, flp->diskPath, 1, + (unsigned char *)buf, NULL); + headerPutString(h, RPMTAG_FILEDIGESTS, buf); + + buf[0] = '\0'; + if (S_ISLNK(flp->fl_mode)) { + ssize_t llen = readlink(flp->diskPath, buf, BUFSIZ-1); + if (llen == -1) { + rpmlog(RPMLOG_ERR, _("reading symlink %s failed: %s\n"), + flp->diskPath, strerror(errno)); + fl->processingFailed = 1; + } else { + buf[llen] = '\0'; + if (buf[0] == '/' && !rstreq(fl->buildRoot, "/") && + rstreqn(buf, fl->buildRoot, strlen(fl->buildRoot))) { + rpmlog(RPMLOG_ERR, + _("Symlink points to BuildRoot: %s -> %s\n"), + flp->cpioPath, buf); + fl->processingFailed = 1; + } + } + } + headerPutString(h, RPMTAG_FILELINKTOS, buf); + + if (flp->flags & RPMFILE_GHOST) { + flp->verifyFlags &= ~(RPMVERIFY_FILEDIGEST | RPMVERIFY_FILESIZE | + RPMVERIFY_LINKTO | RPMVERIFY_MTIME); + } + headerPutUint32(h, RPMTAG_FILEVERIFYFLAGS, &(flp->verifyFlags),1); + + if (!isSrc && isDoc(fl, flp->cpioPath)) + flp->flags |= RPMFILE_DOC; + /* XXX Should directories have %doc/%config attributes? (#14531) */ + if (S_ISDIR(flp->fl_mode)) + flp->flags &= ~(RPMFILE_CONFIG|RPMFILE_DOC); + + headerPutUint32(h, RPMTAG_FILEFLAGS, &(flp->flags) ,1); + } + + if (totalFileSize < UINT32_MAX) { + rpm_off_t totalsize = totalFileSize; + headerPutUint32(h, RPMTAG_SIZE, &totalsize, 1); + } else { + rpm_loff_t totalsize = totalFileSize; + headerPutUint64(h, RPMTAG_LONGSIZE, &totalsize, 1); + } + + if (digestalgo != defaultalgo) { + headerPutUint32(h, RPMTAG_FILEDIGESTALGO, &digestalgo, 1); + rpmlibNeedsFeature(h, "FileDigests", "4.6.0-1"); + } + + if (fl->haveCaps) { + rpmlibNeedsFeature(h, "FileCaps", "4.6.1-1"); + } + + if (_addDotSlash) + (void) rpmlibNeedsFeature(h, "PayloadFilesHavePrefix", "4.0-1"); + + { + struct rpmtd_s filenames; + rpmfiFlags flags = RPMFI_NOHEADER|RPMFI_NOFILEUSER|RPMFI_NOFILEGROUP; + rpmfi fi; + int fc; + const char *fn; + char *a, **apath; + + /* rpmfiNew() only groks compressed filelists */ + headerConvert(h, HEADERCONV_COMPRESSFILELIST); + fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, flags); + + /* + * Grab the real filenames from ORIGFILENAMES and put into OLDFILENAMES, + * remove temporary cruft and side-effects from filelist compression + * for rpmfiNew(). + */ + headerGet(h, RPMTAG_ORIGFILENAMES, &filenames, HEADERGET_ALLOC); + headerDel(h, RPMTAG_ORIGFILENAMES); + headerDel(h, RPMTAG_BASENAMES); + headerDel(h, RPMTAG_DIRNAMES); + headerDel(h, RPMTAG_DIRINDEXES); + rpmtdSetTag(&filenames, RPMTAG_OLDFILENAMES); + headerPut(h, &filenames, HEADERPUT_DEFAULT); + + /* Create hge-style archive path array, normally adding "./" */ + fc = rpmtdCount(&filenames); + apath = xmalloc(fc * sizeof(*apath) + apathlen + 1); + a = (char *)(apath + fc); + *a = '\0'; + rpmtdInit(&filenames); + for (int i = 0; (fn = rpmtdNextString(&filenames)); i++) { + apath[i] = a; + if (_addDotSlash) + a = stpcpy(a, "./"); + a = stpcpy(a, (fn + skipLen)); + a++; /* skip apath NUL */ + } + fi->apath = apath; + *fip = fi; + rpmtdFreeData(&filenames); + } + + /* Compress filelist unless legacy format requested */ + if (!(fl->pkgFlags & RPMBUILD_PKG_NODIRTOKENS)) { + headerConvert(h, HEADERCONV_COMPRESSFILELIST); + /* Binary packages with dirNames cannot be installed by legacy rpm. */ + (void) rpmlibNeedsFeature(h, "CompressedFileNames", "3.0.4-1"); + } +} + +/** + */ +static FileListRec freeFileList(FileListRec fileList, + int count) +{ + while (count--) { + fileList[count].diskPath = _free(fileList[count].diskPath); + fileList[count].cpioPath = _free(fileList[count].cpioPath); + fileList[count].langs = _free(fileList[count].langs); + fileList[count].caps = _free(fileList[count].caps); + } + fileList = _free(fileList); + return NULL; +} + +/* forward ref */ +static rpmRC recurseDir(FileList fl, const char * diskPath); + +/** + * Add a file to the package manifest. + * @param fl package file tree walk data + * @param diskPath path to file + * @param statp file stat (possibly NULL) + * @return RPMRC_OK on success + */ +static rpmRC addFile(FileList fl, const char * diskPath, + struct stat * statp) +{ + const char *cpioPath = diskPath; + struct stat statbuf; + mode_t fileMode; + uid_t fileUid; + gid_t fileGid; + const char *fileUname; + const char *fileGname; + + /* Path may have prepended buildRoot, so locate the original filename. */ + /* + * XXX There are 3 types of entry into addFile: + * + * From diskUrl statp + * ===================================================== + * processBinaryFile path NULL + * processBinaryFile glob result path NULL + * myftw path stat + * + */ + if (fl->buildRoot && !rstreq(fl->buildRoot, "/")) + cpioPath += strlen(fl->buildRoot); + + /* XXX make sure '/' can be packaged also */ + if (*cpioPath == '\0') + cpioPath = "/"; + + if (statp == NULL) { + time_t now = time(NULL); + statp = &statbuf; + memset(statp, 0, sizeof(*statp)); + if (fl->devtype) { + /* XXX hack up a stat structure for a %dev(...) directive. */ + statp->st_nlink = 1; + statp->st_rdev = + ((fl->devmajor & 0xff) << 8) | (fl->devminor & 0xff); + statp->st_dev = statp->st_rdev; + statp->st_mode = (fl->devtype == 'b' ? S_IFBLK : S_IFCHR); + statp->st_mode |= (fl->cur_ar.ar_fmode & 0777); + statp->st_atime = now; + statp->st_mtime = now; + statp->st_ctime = now; + } else { + int is_ghost = fl->currentFlags & RPMFILE_GHOST; + + if (lstat(diskPath, statp)) { + if (is_ghost) { /* the file is %ghost missing from build root, assume regular file */ + if (fl->cur_ar.ar_fmodestr != NULL) { + statp->st_mode = S_IFREG | (fl->cur_ar.ar_fmode & 0777); + } else { + rpmlog(RPMLOG_ERR, _("Explicit file attributes required in spec for: %s\n"), diskPath); + fl->processingFailed = 1; + return RPMRC_FAIL; + } + statp->st_atime = now; + statp->st_mtime = now; + statp->st_ctime = now; + } else { + const char *msg = fl->isDir ? + _("Directory not found: %s\n") : + _("File not found: %s\n"); + rpmlog(RPMLOG_ERR, msg, diskPath); + fl->processingFailed = 1; + return RPMRC_FAIL; + } + } + } + } + + if ((! fl->isDir) && S_ISDIR(statp->st_mode)) { +/* FIX: fl->buildRoot may be NULL */ + return recurseDir(fl, diskPath); + } + + fileMode = statp->st_mode; + fileUid = statp->st_uid; + fileGid = statp->st_gid; + + /* Explicit %attr() always wins */ + if (fl->cur_ar.ar_fmodestr != NULL) { + fileMode &= S_IFMT; + fileMode |= fl->cur_ar.ar_fmode; + } else { + /* ...but %defattr() for directories and files is different */ + if (S_ISDIR(fileMode)) { + if (fl->def_ar.ar_dmodestr) { + fileMode &= S_IFMT; + fileMode |= fl->def_ar.ar_dmode; + } + } else if (fl->def_ar.ar_fmodestr) { + fileMode &= S_IFMT; + fileMode |= fl->def_ar.ar_fmode; + } + } + if (fl->cur_ar.ar_user) { + fileUname = fl->cur_ar.ar_user; + } else if (fl->def_ar.ar_user) { + fileUname = fl->def_ar.ar_user; + } else { + fileUname = rpmugUname(fileUid); + } + if (fl->cur_ar.ar_group) { + fileGname = fl->cur_ar.ar_group; + } else if (fl->def_ar.ar_group) { + fileGname = fl->def_ar.ar_group; + } else { + fileGname = rpmugGname(fileGid); + } + + /* Default user/group to builder's user/group */ + if (fileUname == NULL) + fileUname = rpmugUname(getuid()); + if (fileGname == NULL) + fileGname = rpmugGname(getgid()); + + /* S_XXX macro must be consistent with type in find call at check-files script */ + if (check_fileList && (S_ISREG(fileMode) || S_ISLNK(fileMode))) { + appendStringBuf(check_fileList, diskPath); + appendStringBuf(check_fileList, "\n"); + } + + /* Add to the file list */ + if (fl->fileListRecsUsed == fl->fileListRecsAlloced) { + fl->fileListRecsAlloced += 128; + fl->fileList = xrealloc(fl->fileList, + fl->fileListRecsAlloced * sizeof(*(fl->fileList))); + } + + { FileListRec flp = &fl->fileList[fl->fileListRecsUsed]; + int i; + + flp->fl_st = *statp; /* structure assignment */ + flp->fl_mode = fileMode; + flp->fl_uid = fileUid; + flp->fl_gid = fileGid; + + flp->cpioPath = xstrdup(cpioPath); + flp->diskPath = xstrdup(diskPath); + flp->uname = rpmugStashStr(fileUname); + flp->gname = rpmugStashStr(fileGname); + + if (fl->currentLangs && fl->nLangs > 0) { + char * ncl; + size_t nl = 0; + + for (i = 0; i < fl->nLangs; i++) + nl += strlen(fl->currentLangs[i]) + 1; + + flp->langs = ncl = xmalloc(nl); + for (i = 0; i < fl->nLangs; i++) { + const char *ocl; + if (i) *ncl++ = '|'; + for (ocl = fl->currentLangs[i]; *ocl != '\0'; ocl++) + *ncl++ = *ocl; + *ncl = '\0'; + } + } else { + flp->langs = xstrdup(""); + } + + if (fl->currentCaps) { + flp->caps = fl->currentCaps; + } else { + flp->caps = xstrdup(""); + } + + flp->flags = fl->currentFlags; + flp->specdFlags = fl->currentSpecdFlags; + flp->verifyFlags = fl->currentVerifyFlags; + + if (!(flp->flags & RPMFILE_EXCLUDE) && S_ISREG(flp->fl_mode)) { + /* + * XXX Simple and stupid check for now, this needs to be per-payload + * format check once we have other payloads than good 'ole cpio. + */ + if ((rpm_loff_t) flp->fl_size >= CPIO_FILESIZE_MAX) { + fl->largeFiles = 1; + rpmlog(RPMLOG_ERR, _("File %s too large for payload\n"), + flp->diskPath); + return RPMRC_FAIL; + } + } + } + + fl->fileListRecsUsed++; + fl->fileCount++; + + return RPMRC_OK; +} + +/** + * Add directory (and all of its files) to the package manifest. + * @param fl package file tree walk data + * @param diskPath path to file + * @return RPMRC_OK on success + */ +static rpmRC recurseDir(FileList fl, const char * diskPath) +{ + char * ftsSet[2]; + FTS * ftsp; + FTSENT * fts; + int myFtsOpts = (FTS_COMFOLLOW | FTS_NOCHDIR | FTS_PHYSICAL); + rpmRC rc = RPMRC_FAIL; + + fl->isDir = 1; /* Keep it from following myftw() again */ + + ftsSet[0] = (char *) diskPath; + ftsSet[1] = NULL; + ftsp = Fts_open(ftsSet, myFtsOpts, NULL); + while ((fts = Fts_read(ftsp)) != NULL) { + switch (fts->fts_info) { + case FTS_D: /* preorder directory */ + case FTS_F: /* regular file */ + case FTS_SL: /* symbolic link */ + case FTS_SLNONE: /* symbolic link without target */ + case FTS_DEFAULT: /* none of the above */ + rc = addFile(fl, fts->fts_accpath, fts->fts_statp); + break; + case FTS_DOT: /* dot or dot-dot */ + case FTS_DP: /* postorder directory */ + rc = RPMRC_OK; + break; + case FTS_NS: /* stat(2) failed */ + case FTS_DNR: /* unreadable directory */ + case FTS_ERR: /* error; errno is set */ + case FTS_DC: /* directory that causes cycles */ + case FTS_NSOK: /* no stat(2) requested */ + case FTS_INIT: /* initialized only */ + case FTS_W: /* whiteout object */ + default: + rc = RPMRC_FAIL; + break; + } + if (rc) + break; + } + (void) Fts_close(ftsp); + + fl->isDir = 0; + + return rc; +} + +/** + * Add a pubkey/icon to a binary package. + * @param pkg + * @param fl package file tree walk data + * @param fileName path to file, relative is builddir, absolute buildroot. + * @param tag tag to add + * @return RPMRC_OK on success + */ +static rpmRC processMetadataFile(Package pkg, FileList fl, + const char * fileName, rpmTagVal tag) +{ + const char * buildDir = "%{_builddir}/%{?buildsubdir}/"; + char * fn = NULL; + char * apkt = NULL; + uint8_t * pkt = NULL; + ssize_t pktlen = 0; + int absolute = 0; + rpmRC rc = RPMRC_FAIL; + int xx; + + if (*fileName == '/') { + fn = rpmGenPath(fl->buildRoot, NULL, fileName); + absolute = 1; + } else + fn = rpmGenPath(buildDir, NULL, fileName); + + switch (tag) { + default: + rpmlog(RPMLOG_ERR, _("%s: can't load unknown tag (%d).\n"), + fn, tag); + goto exit; + break; + case RPMTAG_PUBKEYS: { + if ((xx = pgpReadPkts(fn, &pkt, (size_t *)&pktlen)) <= 0) { + rpmlog(RPMLOG_ERR, _("%s: public key read failed.\n"), fn); + goto exit; + } + if (xx != PGPARMOR_PUBKEY) { + rpmlog(RPMLOG_ERR, _("%s: not an armored public key.\n"), fn); + goto exit; + } + apkt = pgpArmorWrap(PGPARMOR_PUBKEY, pkt, pktlen); + break; + } + } + + if (!apkt) { + rpmlog(RPMLOG_ERR, _("%s: failed to encode\n"), fn); + goto exit; + } + + headerPutString(pkg->header, tag, apkt); + rc = RPMRC_OK; + + if (absolute) + rc = addFile(fl, fn, NULL); + +exit: + apkt = _free(apkt); + pkt = _free(pkt); + fn = _free(fn); + if (rc) { + fl->processingFailed = 1; + rc = RPMRC_FAIL; + } + return rc; +} + +/** + * Add a file to a binary package. + * @param pkg + * @param fl package file tree walk data + * @param fileName file to add + * @return RPMRC_OK on success + */ +static rpmRC processBinaryFile(Package pkg, FileList fl, const char * fileName) +{ + int quote = 1; /* XXX permit quoted glob characters. */ + int doGlob; + char *diskPath = NULL; + rpmRC rc = RPMRC_OK; + size_t fnlen = strlen(fileName); + int trailing_slash = (fnlen > 0 && fileName[fnlen-1] == '/'); + + /* XXX differentiate other directories from explicit %dir */ + if (trailing_slash && !fl->isDir) + fl->isDir = -1; + + doGlob = glob_pattern_p(fileName, quote); + + /* Check that file starts with leading "/" */ + if (*fileName != '/') { + rpmlog(RPMLOG_ERR, _("File needs leading \"/\": %s\n"), fileName); + rc = RPMRC_FAIL; + goto exit; + } + + /* Copy file name or glob pattern removing multiple "/" chars. */ + /* + * Note: rpmGetPath should guarantee a "canonical" path. That means + * that the following pathologies should be weeded out: + * //bin//sh + * //usr//bin/ + * /.././../usr/../bin//./sh + */ + diskPath = rpmGenPath(fl->buildRoot, NULL, fileName); + /* Arrange trailing slash on directories */ + if (fl->isDir) + diskPath = rstrcat(&diskPath, "/"); + + if (doGlob) { + ARGV_t argv = NULL; + int argc = 0; + int i; + + /* XXX for %dev marker in file manifest only */ + if (fl->noGlob) { + rpmlog(RPMLOG_ERR, _("Glob not permitted: %s\n"), diskPath); + rc = RPMRC_FAIL; + goto exit; + } + + if (rpmGlob(diskPath, &argc, &argv) == 0 && argc >= 1) { + for (i = 0; i < argc; i++) { + rc = addFile(fl, argv[i], NULL); + } + argvFree(argv); + } else { + const char *msg = (fl->isDir) ? + _("Directory not found by glob: %s\n") : + _("File not found by glob: %s\n"); + rpmlog(RPMLOG_ERR, msg, diskPath); + rc = RPMRC_FAIL; + goto exit; + } + } else { + rc = addFile(fl, diskPath, NULL); + } + +exit: + free(diskPath); + if (rc) { + fl->processingFailed = 1; + rc = RPMRC_FAIL; + } + return rc; +} + +/** + */ +static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags, + Package pkg, int installSpecialDoc, int test) +{ + struct FileList_s fl; + const char *fileName; + char buf[BUFSIZ]; + struct AttrRec_s arbuf; + AttrRec specialDocAttrRec = &arbuf; + char *specialDoc = NULL; + + nullAttrRec(specialDocAttrRec); + pkg->cpioList = NULL; + + if (pkg->fileFile) { + char *ffn; + FILE *fd; + + for (ARGV_const_t fp = pkg->fileFile; *fp != NULL; fp++) { + if (**fp == '/') { + ffn = rpmGetPath(*fp, NULL); + } else { + ffn = rpmGetPath("%{_builddir}/", + (spec->buildSubdir ? spec->buildSubdir : "") , + "/", *fp, NULL); + } + fd = fopen(ffn, "r"); + + if (fd == NULL || ferror(fd)) { + rpmlog(RPMLOG_ERR, _("Could not open %%files file %s: %m\n"), ffn); + return RPMRC_FAIL; + } + ffn = _free(ffn); + + while (fgets(buf, sizeof(buf), fd)) { + handleComments(buf); + if (expandMacros(spec, spec->macros, buf, sizeof(buf))) { + rpmlog(RPMLOG_ERR, _("line: %s\n"), buf); + fclose(fd); + return RPMRC_FAIL; + } + argvAdd(&(pkg->fileList), buf); + } + (void) fclose(fd); + } + } + + /* Init the file list structure */ + memset(&fl, 0, sizeof(fl)); + + /* XXX spec->buildRoot == NULL, then xstrdup("") is returned */ + fl.buildRoot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL); + + fl.fileCount = 0; + fl.processingFailed = 0; + + fl.passedSpecialDoc = 0; + fl.isSpecialDoc = 0; + + fl.isDir = 0; + fl.currentFlags = 0; + fl.currentVerifyFlags = 0; + + fl.noGlob = 0; + fl.devtype = 0; + fl.devmajor = 0; + fl.devminor = 0; + + nullAttrRec(&fl.cur_ar); + nullAttrRec(&fl.def_ar); + dupAttrRec(&root_ar, &fl.def_ar); /* XXX assume %defattr(-,root,root) */ + + fl.defVerifyFlags = RPMVERIFY_ALL; + fl.nLangs = 0; + fl.currentLangs = NULL; + fl.haveCaps = 0; + fl.currentCaps = NULL; + + fl.currentSpecdFlags = 0; + fl.defSpecdFlags = 0; + + fl.largeFiles = 0; + fl.pkgFlags = pkgFlags; + + fl.docDirs = NULL; + { char *docs = rpmGetPath("%{?__docdir_path}", NULL); + argvSplit(&fl.docDirs, docs, ":"); + free(docs); + } + + fl.fileList = NULL; + fl.fileListRecsAlloced = 0; + fl.fileListRecsUsed = 0; + + for (ARGV_const_t fp = pkg->fileList; *fp != NULL; fp++) { + const char *s = *fp; + SKIPSPACE(s); + if (*s == '\0') + continue; + fileName = NULL; + rstrlcpy(buf, s, sizeof(buf)); + + /* Reset for a new line in %files */ + fl.isDir = 0; + fl.currentFlags = 0; + /* turn explicit flags into %def'd ones (gosh this is hacky...) */ + fl.currentSpecdFlags = ((unsigned)fl.defSpecdFlags) >> 8; + fl.currentVerifyFlags = fl.defVerifyFlags; + fl.isSpecialDoc = 0; + + fl.noGlob = 0; + fl.devtype = 0; + fl.devmajor = 0; + fl.devminor = 0; + + /* XXX should reset to %deflang value */ + if (fl.currentLangs) { + int i; + for (i = 0; i < fl.nLangs; i++) + fl.currentLangs[i] = _free(fl.currentLangs[i]); + fl.currentLangs = _free(fl.currentLangs); + } + fl.nLangs = 0; + fl.currentCaps = NULL; + + freeAttrRec(&fl.cur_ar); + + if (parseForVerify(buf, &fl)) + continue; + if (parseForAttr(buf, &fl)) + continue; + if (parseForDev(buf, &fl)) + continue; + if (parseForConfig(buf, &fl)) + continue; + if (parseForLang(buf, &fl)) + continue; + if (parseForCaps(buf, &fl)) + continue; + if (parseForSimple(spec, pkg, buf, &fl, &fileName)) + continue; + if (fileName == NULL) + continue; + + if (fl.isSpecialDoc) { + /* Save this stuff for last */ + specialDoc = _free(specialDoc); + specialDoc = xstrdup(fileName); + dupAttrRec(&fl.cur_ar, specialDocAttrRec); + } else if (fl.currentFlags & RPMFILE_PUBKEY) { + (void) processMetadataFile(pkg, &fl, fileName, RPMTAG_PUBKEYS); + } else { + (void) processBinaryFile(pkg, &fl, fileName); + } + } + + /* Now process special doc, if there is one */ + if (specialDoc) { + if (installSpecialDoc) { + int _missing_doc_files_terminate_build = + rpmExpandNumeric("%{?_missing_doc_files_terminate_build}"); + rpmRC rc; + + rc = doScript(spec, RPMBUILD_STRINGBUF, "%doc", + getStringBuf(pkg->specialDoc), test); + if (rc != RPMRC_OK && _missing_doc_files_terminate_build) + fl.processingFailed = 1; + } + + /* Reset for %doc */ + fl.isDir = 0; + fl.currentFlags = 0; + fl.currentVerifyFlags = fl.defVerifyFlags; + + fl.noGlob = 0; + fl.devtype = 0; + fl.devmajor = 0; + fl.devminor = 0; + + /* XXX should reset to %deflang value */ + if (fl.currentLangs) { + int i; + for (i = 0; i < fl.nLangs; i++) + fl.currentLangs[i] = _free(fl.currentLangs[i]); + fl.currentLangs = _free(fl.currentLangs); + } + fl.nLangs = 0; + + dupAttrRec(specialDocAttrRec, &fl.cur_ar); + freeAttrRec(specialDocAttrRec); + + (void) processBinaryFile(pkg, &fl, specialDoc); + + specialDoc = _free(specialDoc); + } + + if (fl.processingFailed) + goto exit; + + /* Verify that file attributes scope over hardlinks correctly. */ + if (checkHardLinks(&fl)) + (void) rpmlibNeedsFeature(pkg->header, + "PartialHardlinkSets", "4.0.4-1"); + + genCpioListAndHeader(&fl, &pkg->cpioList, pkg->header, 0); + +exit: + fl.buildRoot = _free(fl.buildRoot); + + freeAttrRec(&fl.cur_ar); + freeAttrRec(&fl.def_ar); + + if (fl.currentLangs) { + int i; + for (i = 0; i < fl.nLangs; i++) + fl.currentLangs[i] = _free(fl.currentLangs[i]); + fl.currentLangs = _free(fl.currentLangs); + } + + fl.fileList = freeFileList(fl.fileList, fl.fileListRecsUsed); + argvFree(fl.docDirs); + return fl.processingFailed ? RPMRC_FAIL : RPMRC_OK; +} + +static void genSourceRpmName(rpmSpec spec) +{ + if (spec->sourceRpmName == NULL) { + char *nvr = headerGetAsString(spec->packages->header, RPMTAG_NVR); + rasprintf(&spec->sourceRpmName, "%s.%ssrc.rpm", nvr, + spec->noSource ? "no" : ""); + free(nvr); + } +} + +rpmRC processSourceFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags) +{ + struct Source *srcPtr; + int x, isSpec = 1; + struct FileList_s fl; + ARGV_t files = NULL; + Package pkg; + static char *_srcdefattr; + static int oneshot; + + if (!oneshot) { + _srcdefattr = rpmExpand("%{?_srcdefattr}", NULL); + if (_srcdefattr && !*_srcdefattr) + _srcdefattr = _free(_srcdefattr); + oneshot = 1; + } + + genSourceRpmName(spec); + /* Construct the file list and source entries */ + argvAdd(&files, spec->specFile); + for (srcPtr = spec->sources; srcPtr != NULL; srcPtr = srcPtr->next) { + char * sfn = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""), + "%{_sourcedir}/", srcPtr->source, NULL); + argvAdd(&files, sfn); + sfn = _free(sfn); + } + + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + for (srcPtr = pkg->icon; srcPtr != NULL; srcPtr = srcPtr->next) { + char * sfn; + sfn = rpmGetPath( ((srcPtr->flags & RPMBUILD_ISNO) ? "!" : ""), + "%{_sourcedir}/", srcPtr->source, NULL); + argvAdd(&files, sfn); + sfn = _free(sfn); + } + } + + spec->sourceCpioList = NULL; + + /* Init the file list structure */ + memset(&fl, 0, sizeof(fl)); + if (_srcdefattr) { + char *a = rstrscat(NULL, "%defattr ", _srcdefattr, NULL); + parseForAttr(a, &fl); + free(a); + } + fl.fileList = xcalloc((spec->numSources + 1), sizeof(*fl.fileList)); + fl.processingFailed = 0; + fl.fileListRecsUsed = 0; + fl.pkgFlags = pkgFlags; + fl.buildRoot = NULL; + + /* The first source file is the spec file */ + x = 0; + for (ARGV_const_t fp = files; *fp != NULL; fp++) { + const char *diskPath = *fp; + char *tmp; + FileListRec flp; + + SKIPSPACE(diskPath); + if (! *diskPath) + continue; + + flp = &fl.fileList[x]; + + flp->flags = isSpec ? RPMFILE_SPECFILE : 0; + /* files with leading ! are no source files */ + if (*diskPath == '!') { + flp->flags |= RPMFILE_GHOST; + diskPath++; + } + + tmp = xstrdup(diskPath); /* basename() might modify */ + flp->diskPath = xstrdup(diskPath); + flp->cpioPath = xstrdup(basename(tmp)); + flp->verifyFlags = RPMVERIFY_ALL; + free(tmp); + + if (stat(diskPath, &flp->fl_st)) { + rpmlog(RPMLOG_ERR, _("Bad file: %s: %s\n"), + diskPath, strerror(errno)); + fl.processingFailed = 1; + } + + if (fl.def_ar.ar_fmodestr) { + flp->fl_mode &= S_IFMT; + flp->fl_mode |= fl.def_ar.ar_fmode; + } + if (fl.def_ar.ar_user) { + flp->uname = rpmugStashStr(fl.def_ar.ar_user); + } else { + flp->uname = rpmugStashStr(rpmugUname(flp->fl_uid)); + } + if (fl.def_ar.ar_group) { + flp->gname = rpmugStashStr(fl.def_ar.ar_group); + } else { + flp->gname = rpmugStashStr(rpmugGname(flp->fl_gid)); + } + flp->langs = xstrdup(""); + + if (! (flp->uname && flp->gname)) { + rpmlog(RPMLOG_ERR, _("Bad owner/group: %s\n"), diskPath); + fl.processingFailed = 1; + } + + isSpec = 0; + x++; + } + fl.fileListRecsUsed = x; + argvFree(files); + + if (! fl.processingFailed) { + if (spec->sourceHeader != NULL) + genCpioListAndHeader(&fl, &spec->sourceCpioList, + spec->sourceHeader, 1); + } + + fl.fileList = freeFileList(fl.fileList, fl.fileListRecsUsed); + freeAttrRec(&fl.def_ar); + return fl.processingFailed ? RPMRC_FAIL : RPMRC_OK; +} + +/** + * Check packaged file list against what's in the build root. + * @param fileList packaged file list + * @return -1 if skipped, 0 on OK, 1 on error + */ +static int checkFiles(const char *buildRoot, StringBuf fileList) +{ + static char * const av_ckfile[] = { "%{?__check_files}", NULL }; + StringBuf sb_stdout = NULL; + char * s; + int rc; + + s = rpmExpand(av_ckfile[0], NULL); + if (!(s && *s)) { + rc = -1; + goto exit; + } + rc = 0; + + rpmlog(RPMLOG_NOTICE, _("Checking for unpackaged file(s): %s\n"), s); + + rc = rpmfcExec(av_ckfile, fileList, &sb_stdout, 0, buildRoot); + if (rc < 0) + goto exit; + + if (sb_stdout) { + int _unpackaged_files_terminate_build = + rpmExpandNumeric("%{?_unpackaged_files_terminate_build}"); + const char * t; + + t = getStringBuf(sb_stdout); + if ((*t != '\0') && (*t != '\n')) { + rc = (_unpackaged_files_terminate_build) ? 1 : 0; + rpmlog((rc ? RPMLOG_ERR : RPMLOG_WARNING), + _("Installed (but unpackaged) file(s) found:\n%s"), t); + } + } + +exit: + sb_stdout = freeStringBuf(sb_stdout); + s = _free(s); + return rc; +} + +rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags, + int installSpecialDoc, int test) +{ + Package pkg; + rpmRC rc = RPMRC_OK; + + check_fileList = newStringBuf(); + genSourceRpmName(spec); + + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + char *nvr; + const char *a; + + if (pkg->fileList == NULL) + continue; + + headerPutString(pkg->header, RPMTAG_SOURCERPM, spec->sourceRpmName); + + nvr = headerGetAsString(pkg->header, RPMTAG_NVRA); + rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr); + free(nvr); + + if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK || + (rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK) + goto exit; + + a = headerGetString(pkg->header, RPMTAG_ARCH); + if (rstreq(a, "noarch") && headerGetNumber(pkg->header, RPMTAG_HEADERCOLOR) != 0) { + int terminate = rpmExpandNumeric("%{?_binaries_in_noarch_packages_terminate_build}"); + rpmlog(terminate ? RPMLOG_ERR : RPMLOG_WARNING, + _("Arch dependent binaries in noarch package\n")); + if (terminate) { + rc = RPMRC_FAIL; + goto exit; + } + } + } + + /* Now we have in fileList list of files from all packages. + * We pass it to a script which does the work of finding missing + * and duplicated files. + */ + + + if (checkFiles(spec->buildRoot, check_fileList) > 0) { + rc = RPMRC_FAIL; + } +exit: + check_fileList = freeStringBuf(check_fileList); + + return rc; +} diff --git a/build/misc.c b/build/misc.c new file mode 100644 index 0000000..06fd110 --- /dev/null +++ b/build/misc.c @@ -0,0 +1,103 @@ +/** \ingroup rpmbuild + * \file build/misc.c + */ +#include "system.h" + +#include +#include +#include +#include "build/rpmbuild_misc.h" +#include "debug.h" + +#define BUF_CHUNK 1024 + +struct StringBufRec { + char *buf; + char *tail; /* Points to first "free" char */ + int allocated; + int free; +}; + +StringBuf newStringBuf(void) +{ + StringBuf sb = xmalloc(sizeof(*sb)); + + sb->free = sb->allocated = BUF_CHUNK; + sb->buf = xcalloc(sb->allocated, sizeof(*sb->buf)); + sb->buf[0] = '\0'; + sb->tail = sb->buf; + + return sb; +} + +StringBuf freeStringBuf(StringBuf sb) +{ + if (sb) { + sb->buf = _free(sb->buf); + sb = _free(sb); + } + return sb; +} + +void stripTrailingBlanksStringBuf(StringBuf sb) +{ + while (sb->free != sb->allocated) { + if (! risspace(*(sb->tail - 1))) + break; + sb->free++; + sb->tail--; + } + sb->tail[0] = '\0'; +} + +const char * getStringBuf(StringBuf sb) +{ + return (sb != NULL) ? sb->buf : NULL; +} + +void appendStringBufAux(StringBuf sb, const char *s, int nl) +{ + int l; + + l = strlen(s); + /* If free == l there is no room for NULL terminator! */ + while ((l + nl + 1) > sb->free) { + sb->allocated += BUF_CHUNK; + sb->free += BUF_CHUNK; + sb->buf = xrealloc(sb->buf, sb->allocated); + sb->tail = sb->buf + (sb->allocated - sb->free); + } + + /* FIX: shrug */ + strcpy(sb->tail, s); + sb->tail += l; + sb->free -= l; + if (nl) { + sb->tail[0] = '\n'; + sb->tail[1] = '\0'; + sb->tail++; + sb->free--; + } +} + +uint32_t parseUnsignedNum(const char * line, uint32_t * res) +{ + char * s1 = NULL; + unsigned long rc; + uint32_t result; + + if (line == NULL) return 1; + + while (isspace(*line)) line++; + if (!isdigit(*line)) return 1; + + rc = strtoul(line, &s1, 10); + + if (*s1 || s1 == line || rc == ULONG_MAX || rc > UINT_MAX) + return 1; + + result = (uint32_t)rc; + if (res) *res = result; + + return 0; +} diff --git a/build/pack.c b/build/pack.c new file mode 100644 index 0000000..981a03e --- /dev/null +++ b/build/pack.c @@ -0,0 +1,822 @@ +/** \ingroup rpmbuild + * \file build/pack.c + * Assemble components of an RPM package. + */ + +#include "system.h" + +#include +#include +#include + +#include /* RPMSIGTAG*, rpmReadPackageFile */ +#include +#include +#include + +#include "rpmio/rpmio_internal.h" /* fdInitDigest, fdFiniDigest */ +#include "lib/cpio.h" +#include "lib/fsm.h" +#include "lib/rpmfi_internal.h" /* rpmfiFSM() */ +#include "lib/rpmte_internal.h" /* rpmfs */ +#include "lib/signature.h" +#include "lib/rpmlead.h" +#include "build/rpmbuild_internal.h" +#include "build/rpmbuild_misc.h" + +#include "debug.h" + +typedef struct cpioSourceArchive_s { + rpm_loff_t cpioArchiveSize; + FD_t cpioFdIn; + rpmfi cpioList; +} * CSA_t; + +/** + * @todo Create transaction set *much* earlier. + */ +static rpmRC cpio_doio(FD_t fdo, Header h, CSA_t csa, + const char * fmodeMacro) +{ + rpmts ts = rpmtsCreate(); + rpmfi fi = csa->cpioList; + rpmte te = NULL; + rpmfs fs = NULL; + char *failedFile = NULL; + FD_t cfd; + rpmRC rc = RPMRC_OK; + int xx, i; + + { char *fmode = rpmExpand(fmodeMacro, NULL); + if (!(fmode && fmode[0] == 'w')) + fmode = xstrdup("w9.gzdio"); + (void) Fflush(fdo); + cfd = Fdopen(fdDup(Fileno(fdo)), fmode); + fmode = _free(fmode); + } + if (cfd == NULL) + return RPMRC_FAIL; + + /* make up a transaction element for passing to fsm */ + rpmtsAddInstallElement(ts, h, NULL, 0, NULL); + te = rpmtsElement(ts, 0); + fs = rpmteGetFileStates(te); + + fi = rpmfiInit(fi, 0); + while ((i = rpmfiNext(fi)) >= 0) { + if (rpmfiFFlags(fi) & RPMFILE_GHOST) + rpmfsSetAction(fs, i, FA_SKIP); + else + rpmfsSetAction(fs, i, FA_COPYOUT); + } + + xx = fsmSetup(rpmfiFSM(fi), FSM_PKGBUILD, ts, te, fi, cfd, + &csa->cpioArchiveSize, &failedFile); + if (xx) + rc = RPMRC_FAIL; + (void) Fclose(cfd); + xx = fsmTeardown(rpmfiFSM(fi)); + if (rc == RPMRC_OK && xx) rc = RPMRC_FAIL; + + if (rc) { + if (failedFile) + rpmlog(RPMLOG_ERR, _("create archive failed on file %s: %s\n"), + failedFile, cpioStrerror(rc)); + else + rpmlog(RPMLOG_ERR, _("create archive failed: %s\n"), + cpioStrerror(rc)); + rc = RPMRC_FAIL; + } + rpmtsEmpty(ts); + + failedFile = _free(failedFile); + ts = rpmtsFree(ts); + + return rc; +} + +/** + */ +static rpmRC cpio_copy(FD_t fdo, CSA_t csa) +{ + char buf[BUFSIZ]; + size_t nb; + + while((nb = Fread(buf, sizeof(buf[0]), sizeof(buf), csa->cpioFdIn)) > 0) { + if (Fwrite(buf, sizeof(buf[0]), nb, fdo) != nb) { + rpmlog(RPMLOG_ERR, _("cpio_copy write failed: %s\n"), + Fstrerror(fdo)); + return RPMRC_FAIL; + } + csa->cpioArchiveSize += nb; + } + if (Ferror(csa->cpioFdIn)) { + rpmlog(RPMLOG_ERR, _("cpio_copy read failed: %s\n"), + Fstrerror(csa->cpioFdIn)); + return RPMRC_FAIL; + } + return RPMRC_OK; +} + +/** + */ +static StringBuf addFileToTagAux(rpmSpec spec, + const char * file, StringBuf sb) +{ + char buf[BUFSIZ]; + char * fn; + FILE * f; + + fn = rpmGetPath("%{_builddir}/%{?buildsubdir:%{buildsubdir}/}", file, NULL); + + f = fopen(fn, "r"); + if (f == NULL || ferror(f)) { + sb = freeStringBuf(sb); + goto exit; + } + while (fgets(buf, sizeof(buf), f)) { + if (expandMacros(spec, spec->macros, buf, sizeof(buf))) { + rpmlog(RPMLOG_ERR, _("%s: line: %s\n"), fn, buf); + sb = freeStringBuf(sb); + break; + } + appendStringBuf(sb, buf); + } + (void) fclose(f); + +exit: + free(fn); + + return sb; +} + +static rpm_time_t * getBuildTime(void) +{ + static rpm_time_t buildTime[1]; + + if (buildTime[0] == 0) + buildTime[0] = (int32_t) time(NULL); + return buildTime; +} + +static const char * buildHost(void) +{ + static char hostname[1024]; + static int oneshot = 0; + struct hostent *hbn; + + if (! oneshot) { + (void) gethostname(hostname, sizeof(hostname)); + hbn = gethostbyname(hostname); + if (hbn) + strcpy(hostname, hbn->h_name); + else + rpmlog(RPMLOG_WARNING, + _("Could not canonicalize hostname: %s\n"), hostname); + oneshot = 1; + } + return(hostname); +} +/** + */ +static int addFileToTag(rpmSpec spec, const char * file, Header h, rpmTagVal tag) +{ + StringBuf sb = newStringBuf(); + const char *s = headerGetString(h, tag); + + if (s) { + appendLineStringBuf(sb, s); + (void) headerDel(h, tag); + } + + if ((sb = addFileToTagAux(spec, file, sb)) == NULL) + return 1; + + headerPutString(h, tag, getStringBuf(sb)); + + sb = freeStringBuf(sb); + return 0; +} + +/** + */ +static int addFileToArrayTag(rpmSpec spec, const char *file, Header h, rpmTagVal tag) +{ + StringBuf sb = newStringBuf(); + const char *s; + + if ((sb = addFileToTagAux(spec, file, sb)) == NULL) + return 1; + + s = getStringBuf(sb); + headerPutString(h, tag, s); + + sb = freeStringBuf(sb); + return 0; +} + +/** + */ +static rpmRC processScriptFiles(rpmSpec spec, Package pkg) +{ + struct TriggerFileEntry *p; + int addflags = 0; + + if (pkg->preInFile) { + if (addFileToTag(spec, pkg->preInFile, pkg->header, RPMTAG_PREIN)) { + rpmlog(RPMLOG_ERR, + _("Could not open PreIn file: %s\n"), pkg->preInFile); + return RPMRC_FAIL; + } + } + if (pkg->preUnFile) { + if (addFileToTag(spec, pkg->preUnFile, pkg->header, RPMTAG_PREUN)) { + rpmlog(RPMLOG_ERR, + _("Could not open PreUn file: %s\n"), pkg->preUnFile); + return RPMRC_FAIL; + } + } + if (pkg->preTransFile) { + if (addFileToTag(spec, pkg->preTransFile, pkg->header, RPMTAG_PRETRANS)) { + rpmlog(RPMLOG_ERR, + _("Could not open PreTrans file: %s\n"), pkg->preTransFile); + return RPMRC_FAIL; + } + } + if (pkg->postInFile) { + if (addFileToTag(spec, pkg->postInFile, pkg->header, RPMTAG_POSTIN)) { + rpmlog(RPMLOG_ERR, + _("Could not open PostIn file: %s\n"), pkg->postInFile); + return RPMRC_FAIL; + } + } + if (pkg->postUnFile) { + if (addFileToTag(spec, pkg->postUnFile, pkg->header, RPMTAG_POSTUN)) { + rpmlog(RPMLOG_ERR, + _("Could not open PostUn file: %s\n"), pkg->postUnFile); + return RPMRC_FAIL; + } + } + if (pkg->postTransFile) { + if (addFileToTag(spec, pkg->postTransFile, pkg->header, RPMTAG_POSTTRANS)) { + rpmlog(RPMLOG_ERR, + _("Could not open PostTrans file: %s\n"), pkg->postTransFile); + return RPMRC_FAIL; + } + } + if (pkg->verifyFile) { + if (addFileToTag(spec, pkg->verifyFile, pkg->header, + RPMTAG_VERIFYSCRIPT)) { + rpmlog(RPMLOG_ERR, + _("Could not open VerifyScript file: %s\n"), pkg->verifyFile); + return RPMRC_FAIL; + } + } + + /* if any trigger has flags, we need to add flags entry for all of them */ + for (p = pkg->triggerFiles; p != NULL; p = p->next) { + if (p->flags) { + addflags = 1; + break; + } + } + + for (p = pkg->triggerFiles; p != NULL; p = p->next) { + headerPutString(pkg->header, RPMTAG_TRIGGERSCRIPTPROG, p->prog); + if (addflags) { + headerPutUint32(pkg->header, RPMTAG_TRIGGERSCRIPTFLAGS, + &p->flags, 1); + } + + if (p->script) { + headerPutString(pkg->header, RPMTAG_TRIGGERSCRIPTS, p->script); + } else if (p->fileName) { + if (addFileToArrayTag(spec, p->fileName, pkg->header, + RPMTAG_TRIGGERSCRIPTS)) { + rpmlog(RPMLOG_ERR, + _("Could not open Trigger script file: %s\n"), + p->fileName); + return RPMRC_FAIL; + } + } else { + /* This is dumb. When the header supports NULL string */ + /* this will go away. */ + headerPutString(pkg->header, RPMTAG_TRIGGERSCRIPTS, ""); + } + } + + return RPMRC_OK; +} + +static rpmRC writeRPM(Header *hdrp, unsigned char ** pkgidp, const char *fileName, + CSA_t csa, char **cookie) +{ + FD_t fd = NULL; + FD_t ifd = NULL; + ssize_t count; + char * sigtarget = NULL;; + char * rpmio_flags = NULL; + char * SHA1 = NULL; + const char *s; + char *buf = NULL; + Header h; + Header sig = NULL; + int xx; + rpmRC rc = RPMRC_OK; + struct rpmtd_s td; + rpmTagVal sizetag; + rpmTagVal payloadtag; + + /* Transfer header reference form *hdrp to h. */ + h = headerLink(*hdrp); + *hdrp = headerFree(*hdrp); + + if (pkgidp) + *pkgidp = NULL; + + /* Save payload information */ + if (headerIsSource(h)) + rpmio_flags = rpmExpand("%{?_source_payload}", NULL); + else + rpmio_flags = rpmExpand("%{?_binary_payload}", NULL); + + if (!(rpmio_flags && *rpmio_flags)) { + rpmio_flags = _free(rpmio_flags); + rpmio_flags = xstrdup("w9.gzdio"); + } + s = strchr(rpmio_flags, '.'); + if (s) { + const char *compr = NULL; + headerPutString(h, RPMTAG_PAYLOADFORMAT, "cpio"); + + if (rstreq(s+1, "ufdio")) { + compr = NULL; + } else if (rstreq(s+1, "gzdio")) { + compr = "gzip"; +#if HAVE_BZLIB_H + } else if (rstreq(s+1, "bzdio")) { + compr = "bzip2"; + /* Add prereq on rpm version that understands bzip2 payloads */ + (void) rpmlibNeedsFeature(h, "PayloadIsBzip2", "3.0.5-1"); +#endif +#if HAVE_LZMA_H + } else if (rstreq(s+1, "xzdio")) { + compr = "xz"; + (void) rpmlibNeedsFeature(h, "PayloadIsXz", "5.2-1"); + } else if (rstreq(s+1, "lzdio")) { + compr = "lzma"; + (void) rpmlibNeedsFeature(h, "PayloadIsLzma", "4.4.6-1"); +#endif + } else { + rpmlog(RPMLOG_ERR, _("Unknown payload compression: %s\n"), + rpmio_flags); + rc = RPMRC_FAIL; + goto exit; + } + + if (compr) + headerPutString(h, RPMTAG_PAYLOADCOMPRESSOR, compr); + buf = xstrdup(rpmio_flags); + buf[s - rpmio_flags] = '\0'; + headerPutString(h, RPMTAG_PAYLOADFLAGS, buf+1); + free(buf); + } + + /* Create and add the cookie */ + if (cookie) { + rasprintf(cookie, "%s %d", buildHost(), (int) (*getBuildTime())); + headerPutString(h, RPMTAG_COOKIE, *cookie); + } + + /* Reallocate the header into one contiguous region. */ + h = headerReload(h, RPMTAG_HEADERIMMUTABLE); + if (h == NULL) { /* XXX can't happen */ + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to create immutable header region.\n")); + goto exit; + } + /* Re-reference reallocated header. */ + *hdrp = headerLink(h); + + /* + * Write the header+archive into a temp file so that the size of + * archive (after compression) can be added to the header. + */ + fd = rpmMkTempFile(NULL, &sigtarget); + if (fd == NULL || Ferror(fd)) { + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to open temp file.\n")); + goto exit; + } + + fdInitDigest(fd, PGPHASHALGO_SHA1, 0); + if (headerWrite(fd, h, HEADER_MAGIC_YES)) { + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to write temp header\n")); + } else { /* Write the archive and get the size */ + (void) Fflush(fd); + fdFiniDigest(fd, PGPHASHALGO_SHA1, (void **)&SHA1, NULL, 1); + if (csa->cpioList != NULL) { + rc = cpio_doio(fd, h, csa, rpmio_flags); + } else if (Fileno(csa->cpioFdIn) >= 0) { + rc = cpio_copy(fd, csa); + } else { + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Bad CSA data\n")); + } + } + + if (rc != RPMRC_OK) + goto exit; + + (void) Fclose(fd); + fd = NULL; + (void) unlink(fileName); + + /* Generate the signature */ + (void) fflush(stdout); + sig = rpmNewSignature(); + + /* + * There should be rpmlib() dependency on this, but that doesn't + * really do much good as these are signature tags that get read + * way before dependency checking has a chance to figure out anything. + * On the positive side, not inserting the 32bit tag at all means + * older rpm will just bail out with error message on attempt to read + * such a package. + */ + if (csa->cpioArchiveSize < UINT32_MAX) { + sizetag = RPMSIGTAG_SIZE; + payloadtag = RPMSIGTAG_PAYLOADSIZE; + } else { + sizetag = RPMSIGTAG_LONGSIZE; + payloadtag = RPMSIGTAG_LONGARCHIVESIZE; + } + (void) rpmGenDigest(sig, sigtarget, sizetag); + (void) rpmGenDigest(sig, sigtarget, RPMSIGTAG_MD5); + + if (SHA1) { + /* XXX can't use rpmtdFromFoo() on RPMSIGTAG_* items */ + rpmtdReset(&td); + td.tag = RPMSIGTAG_SHA1; + td.type = RPM_STRING_TYPE; + td.data = SHA1; + td.count = 1; + headerPut(sig, &td, HEADERPUT_DEFAULT); + SHA1 = _free(SHA1); + } + + { + /* XXX can't use headerPutType() on legacy RPMSIGTAG_* items */ + rpmtdReset(&td); + td.tag = payloadtag; + td.count = 1; + if (payloadtag == RPMSIGTAG_PAYLOADSIZE) { + rpm_off_t asize = csa->cpioArchiveSize; + td.type = RPM_INT32_TYPE; + td.data = &asize; + headerPut(sig, &td, HEADERPUT_DEFAULT); + } else { + rpm_loff_t asize = csa->cpioArchiveSize; + td.type = RPM_INT64_TYPE; + td.data = &asize; + headerPut(sig, &td, HEADERPUT_DEFAULT); + } + } + + /* Reallocate the signature into one contiguous region. */ + sig = headerReload(sig, RPMTAG_HEADERSIGNATURES); + if (sig == NULL) { /* XXX can't happen */ + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to reload signature header.\n")); + goto exit; + } + + /* Open the output file */ + fd = Fopen(fileName, "w.ufdio"); + if (fd == NULL || Ferror(fd)) { + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Could not open %s: %s\n"), + fileName, Fstrerror(fd)); + goto exit; + } + + /* Write the lead section into the package. */ + { + rpmlead lead = rpmLeadFromHeader(h); + rc = rpmLeadWrite(fd, lead); + lead = rpmLeadFree(lead); + if (rc != RPMRC_OK) { + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to write package: %s\n"), + Fstrerror(fd)); + goto exit; + } + } + + /* Write the signature section into the package. */ + if (rpmWriteSignature(fd, sig)) { + rc = RPMRC_FAIL; + goto exit; + } + + /* Append the header and archive */ + ifd = Fopen(sigtarget, "r.ufdio"); + if (ifd == NULL || Ferror(ifd)) { + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to open sigtarget %s: %s\n"), + sigtarget, Fstrerror(ifd)); + goto exit; + } + + /* Add signatures to header, and write header into the package. */ + /* XXX header+payload digests/signatures might be checked again here. */ + { Header nh = headerRead(ifd, HEADER_MAGIC_YES); + + if (nh == NULL) { + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to read header from %s: %s\n"), + sigtarget, Fstrerror(ifd)); + goto exit; + } + +#ifdef NOTYET + (void) headerMergeLegacySigs(nh, sig); +#endif + + xx = headerWrite(fd, nh, HEADER_MAGIC_YES); + nh = headerFree(nh); + + if (xx) { + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to write header to %s: %s\n"), + fileName, Fstrerror(fd)); + goto exit; + } + } + + /* Write the payload into the package. */ + buf = xmalloc(BUFSIZ); + while ((count = Fread(buf, 1, BUFSIZ, ifd)) > 0) { + if (count == -1) { + free(buf); + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to read payload from %s: %s\n"), + sigtarget, Fstrerror(ifd)); + goto exit; + } + if (Fwrite(buf, sizeof(buf[0]), count, fd) != count) { + free(buf); + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Unable to write payload to %s: %s\n"), + fileName, Fstrerror(fd)); + goto exit; + } + } + free(buf); + rc = RPMRC_OK; + +exit: + rpmio_flags = _free(rpmio_flags); + SHA1 = _free(SHA1); + h = headerFree(h); + + /* XXX Fish the pkgid out of the signature header. */ + if (sig != NULL && pkgidp != NULL) { + struct rpmtd_s md5tag; + headerGet(sig, RPMSIGTAG_MD5, &md5tag, HEADERGET_DEFAULT); + if (rpmtdType(&md5tag) == RPM_BIN_TYPE && + md5tag.count == 16 && md5tag.data != NULL) { + *pkgidp = md5tag.data; + } + } + + sig = rpmFreeSignature(sig); + if (ifd) { + (void) Fclose(ifd); + ifd = NULL; + } + if (fd) { + (void) Fclose(fd); + fd = NULL; + } + if (sigtarget) { + (void) unlink(sigtarget); + sigtarget = _free(sigtarget); + } + + if (rc == RPMRC_OK) + rpmlog(RPMLOG_NOTICE, _("Wrote: %s\n"), fileName); + else + (void) unlink(fileName); + + return rc; +} + +static const rpmTagVal copyTags[] = { + RPMTAG_CHANGELOGTIME, + RPMTAG_CHANGELOGNAME, + RPMTAG_CHANGELOGTEXT, + 0 +}; + +/* + * Add extra provides to package. + */ +static void addPackageProvides(Header h) +{ + const char *arch, *name; + char *evr, *isaprov; + rpmsenseFlags pflags = RPMSENSE_EQUAL; + + /* = provide */ + name = headerGetString(h, RPMTAG_NAME); + arch = headerGetString(h, RPMTAG_ARCH); + evr = headerGetAsString(h, RPMTAG_EVR); + headerPutString(h, RPMTAG_PROVIDENAME, name); + headerPutString(h, RPMTAG_PROVIDEVERSION, evr); + headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pflags, 1); + + /* + * () = provide + * FIXME: noarch needs special casing for now as BuildArch: noarch doesn't + * cause reading in the noarch macros :-/ + */ + isaprov = rpmExpand(name, "%{?_isa}", NULL); + if (!rstreq(arch, "noarch") && !rstreq(name, isaprov)) { + headerPutString(h, RPMTAG_PROVIDENAME, isaprov); + headerPutString(h, RPMTAG_PROVIDEVERSION, evr); + headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pflags, 1); + } + free(isaprov); + free(evr); +} + +static rpmRC checkPackages(char *pkgcheck) +{ + int fail = rpmExpandNumeric("%{?_nonzero_exit_pkgcheck_terminate_build}"); + int xx; + + rpmlog(RPMLOG_NOTICE, _("Executing \"%s\":\n"), pkgcheck); + xx = system(pkgcheck); + if (WEXITSTATUS(xx) == -1 || WEXITSTATUS(xx) == 127) { + rpmlog(RPMLOG_ERR, _("Execution of \"%s\" failed.\n"), pkgcheck); + if (fail) return RPMRC_NOTFOUND; + } + if (WEXITSTATUS(xx) != 0) { + rpmlog(RPMLOG_ERR, _("Package check \"%s\" failed.\n"), pkgcheck); + if (fail) return RPMRC_FAIL; + } + + return RPMRC_OK; +} + +rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating) +{ + struct cpioSourceArchive_s csabuf; + CSA_t csa = &csabuf; + rpmRC rc; + const char *errorString; + Package pkg; + char *pkglist = NULL; + + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + char *fn; + + if (pkg->fileList == NULL) + continue; + + if ((rc = processScriptFiles(spec, pkg))) + return rc; + + if (cookie) { + headerPutString(pkg->header, RPMTAG_COOKIE, cookie); + } + + /* Copy changelog from src rpm */ + headerCopyTags(spec->packages->header, pkg->header, copyTags); + + headerPutString(pkg->header, RPMTAG_RPMVERSION, VERSION); + headerPutString(pkg->header, RPMTAG_BUILDHOST, buildHost()); + headerPutUint32(pkg->header, RPMTAG_BUILDTIME, getBuildTime(), 1); + + addPackageProvides(pkg->header); + + { char * optflags = rpmExpand("%{optflags}", NULL); + headerPutString(pkg->header, RPMTAG_OPTFLAGS, optflags); + optflags = _free(optflags); + } + + if (spec->sourcePkgId != NULL) { + headerPutBin(pkg->header, RPMTAG_SOURCEPKGID, spec->sourcePkgId,16); + } + + if (cheating) { + (void) rpmlibNeedsFeature(pkg->header, "ShortCircuited", "4.9.0-1"); + } + + { char *binFormat = rpmGetPath("%{_rpmfilename}", NULL); + char *binRpm, *binDir; + binRpm = headerFormat(pkg->header, binFormat, &errorString); + binFormat = _free(binFormat); + if (binRpm == NULL) { + rpmlog(RPMLOG_ERR, _("Could not generate output " + "filename for package %s: %s\n"), + headerGetString(pkg->header, RPMTAG_NAME), errorString); + return RPMRC_FAIL; + } + fn = rpmGetPath("%{_rpmdir}/", binRpm, NULL); + if ((binDir = strchr(binRpm, '/')) != NULL) { + struct stat st; + char *dn; + *binDir = '\0'; + dn = rpmGetPath("%{_rpmdir}/", binRpm, NULL); + if (stat(dn, &st) < 0) { + switch(errno) { + case ENOENT: + if (mkdir(dn, 0755) == 0) + break; + default: + rpmlog(RPMLOG_ERR,_("cannot create %s: %s\n"), + dn, strerror(errno)); + break; + } + } + dn = _free(dn); + } + binRpm = _free(binRpm); + } + + memset(csa, 0, sizeof(*csa)); + csa->cpioArchiveSize = 0; + csa->cpioFdIn = fdNew(); + csa->cpioList = rpmfiLink(pkg->cpioList); + + rc = writeRPM(&pkg->header, NULL, fn, csa, NULL); + csa->cpioList = rpmfiFree(csa->cpioList); + csa->cpioFdIn = fdFree(csa->cpioFdIn); + if (rc == RPMRC_OK) { + /* Do check each written package if enabled */ + char *pkgcheck = rpmExpand("%{?_build_pkgcheck} ", fn, NULL); + if (pkgcheck[0] != ' ') { + rc = checkPackages(pkgcheck); + } + pkgcheck = _free(pkgcheck); + rstrcat(&pkglist, fn); + rstrcat(&pkglist, " "); + } + fn = _free(fn); + if (rc != RPMRC_OK) { + pkglist = _free(pkglist); + return rc; + } + } + + /* Now check the package set if enabled */ + if (pkglist != NULL) { + char *pkgcheck_set = rpmExpand("%{?_build_pkgcheck_set} ", pkglist, NULL); + if (pkgcheck_set[0] != ' ') { /* run only if _build_pkgcheck_set is defined */ + checkPackages(pkgcheck_set); + } + pkgcheck_set = _free(pkgcheck_set); + pkglist = _free(pkglist); + } + + return RPMRC_OK; +} + +rpmRC packageSources(rpmSpec spec, char **cookie) +{ + struct cpioSourceArchive_s csabuf; + CSA_t csa = &csabuf; + rpmRC rc; + + /* Add some cruft */ + headerPutString(spec->sourceHeader, RPMTAG_RPMVERSION, VERSION); + headerPutString(spec->sourceHeader, RPMTAG_BUILDHOST, buildHost()); + headerPutUint32(spec->sourceHeader, RPMTAG_BUILDTIME, getBuildTime(), 1); + + /* XXX this should be %_srpmdir */ + { char *fn = rpmGetPath("%{_srcrpmdir}/", spec->sourceRpmName,NULL); + char *pkgcheck = rpmExpand("%{?_build_pkgcheck_srpm} ", fn, NULL); + + memset(csa, 0, sizeof(*csa)); + csa->cpioArchiveSize = 0; + csa->cpioFdIn = fdNew(); + csa->cpioList = rpmfiLink(spec->sourceCpioList); + + spec->sourcePkgId = NULL; + rc = writeRPM(&spec->sourceHeader, &spec->sourcePkgId, fn, csa, cookie); + + /* Do check SRPM package if enabled */ + if (rc == RPMRC_OK && pkgcheck[0] != ' ') { + rc = checkPackages(pkgcheck); + } + + csa->cpioList = rpmfiFree(csa->cpioList); + csa->cpioFdIn = fdFree(csa->cpioFdIn); + pkgcheck = _free(pkgcheck); + fn = _free(fn); + } + return rc; +} diff --git a/build/parseBuildInstallClean.c b/build/parseBuildInstallClean.c new file mode 100644 index 0000000..6386c23 --- /dev/null +++ b/build/parseBuildInstallClean.c @@ -0,0 +1,64 @@ +/** \ingroup rpmbuild + * \file build/parseBuildInstallClean.c + * Parse %build/%install/%clean section from spec file. + */ +#include "system.h" + +#include +#include "build/rpmbuild_internal.h" +#include "debug.h" + + +int parseBuildInstallClean(rpmSpec spec, int parsePart) +{ + int nextPart, rc, res = PART_ERROR; + StringBuf *sbp = NULL; + const char *name = NULL; + + if (parsePart == PART_BUILD) { + sbp = &(spec->build); + name = "%build"; + } else if (parsePart == PART_INSTALL) { + sbp = &(spec->install); + name = "%install"; + } else if (parsePart == PART_CHECK) { + sbp = &(spec->check); + name = "%check"; + } else if (parsePart == PART_CLEAN) { + sbp = &(spec->clean); + name = "%clean"; + } else { + goto exit; /* programmer error */ + } + + if (*sbp != NULL) { + rpmlog(RPMLOG_ERR, _("line %d: second %s\n"), + spec->lineNum, name); + goto exit; + } + + *sbp = newStringBuf(); + + /* There are no options to %build, %install, %check, or %clean */ + if ((rc = readLine(spec, STRIP_NOTHING)) > 0) { + res = PART_NONE; + goto exit; + } else if (rc < 0) { + goto exit; + } + + while (! (nextPart = isPart(spec->line))) { + appendStringBuf(*sbp, spec->line); + if ((rc = readLine(spec, STRIP_NOTHING)) > 0) { + nextPart = PART_NONE; + break; + } else if (rc < 0) { + goto exit; + } + } + res = nextPart; + +exit: + + return res; +} diff --git a/build/parseChangelog.c b/build/parseChangelog.c new file mode 100644 index 0000000..d4681cb --- /dev/null +++ b/build/parseChangelog.c @@ -0,0 +1,245 @@ +/** \ingroup rpmbuild + * \file build/parseChangelog.c + * Parse %changelog section from spec file. + */ + +#include "system.h" + +#include +#include +#include "build/rpmbuild_internal.h" +#include "debug.h" + +#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; } +#define SKIPNONSPACE(s) { while (*(s) && !risspace(*(s))) (s)++; } + +static void addChangelogEntry(Header h, time_t time, const char *name, const char *text) +{ + rpm_time_t mytime = time; /* XXX convert to header representation */ + + headerPutUint32(h, RPMTAG_CHANGELOGTIME, &mytime, 1); + headerPutString(h, RPMTAG_CHANGELOGNAME, name); + headerPutString(h, RPMTAG_CHANGELOGTEXT, text); +} + +/** + * Parse date string to seconds. + * @param datestr date string (e.g. 'Wed Jan 1 1997') + * @retval secs secs since the unix epoch + * @return 0 on success, -1 on error + */ +static int dateToTimet(const char * datestr, time_t * secs) +{ + int rc = -1; /* assume failure */ + struct tm time; + const char * const * idx; + char *p, *pe, *q, *date, *tz; + + static const char * const days[] = + { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", NULL }; + static const char * const months[] = + { "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL }; + static const char lengths[] = + { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + + memset(&time, 0, sizeof(time)); + + date = xstrdup(datestr); + pe = date; + + /* day of week */ + p = pe; SKIPSPACE(p); + if (*p == '\0') goto exit; + pe = p; SKIPNONSPACE(pe); if (*pe != '\0') *pe++ = '\0'; + for (idx = days; *idx && !rstreq(*idx, p); idx++) + {}; + if (*idx == NULL) goto exit; + + /* month */ + p = pe; SKIPSPACE(p); + if (*p == '\0') goto exit; + pe = p; SKIPNONSPACE(pe); if (*pe != '\0') *pe++ = '\0'; + for (idx = months; *idx && !rstreq(*idx, p); idx++) + {}; + if (*idx == NULL) goto exit; + time.tm_mon = idx - months; + + /* day */ + p = pe; SKIPSPACE(p); + if (*p == '\0') goto exit; + pe = p; SKIPNONSPACE(pe); if (*pe != '\0') *pe++ = '\0'; + + /* make this noon so the day is always right (as we make this UTC) */ + time.tm_hour = 12; + + time.tm_mday = strtol(p, &q, 10); + if (!(q && *q == '\0')) goto exit; + if (time.tm_mday < 0 || time.tm_mday > lengths[time.tm_mon]) goto exit; + + /* year */ + p = pe; SKIPSPACE(p); + if (*p == '\0') goto exit; + pe = p; SKIPNONSPACE(pe); if (*pe != '\0') *pe++ = '\0'; + time.tm_year = strtol(p, &q, 10); + if (!(q && *q == '\0')) goto exit; + if (time.tm_year < 1990 || time.tm_year >= 3000) goto exit; + time.tm_year -= 1900; + + /* chnagelog date is always in UTC */ + tz = getenv("TZ"); + if (tz) tz = xstrdup(tz); + setenv("TZ", "UTC", 1); + *secs = mktime(&time); + unsetenv("TZ"); + if (tz) { + setenv("TZ", tz, 1); + free(tz); + } + if (*secs == -1) goto exit; + + rc = 0; + +exit: + free(date); + return rc; +} + +/** + * Add %changelog section to header. + * @param h header + * @param sb changelog strings + * @return RPMRC_OK on success + */ +static rpmRC addChangelog(Header h, ARGV_const_t sb) +{ + char *s, *sp; + int i; + time_t time; + time_t lastTime = 0; + time_t trimtime = rpmExpandNumeric("%{?_changelog_trimtime}"); + char *date, *name, *text, *next; + + s = sp = argvJoin(sb, ""); + + /* skip space */ + SKIPSPACE(s); + + while (*s != '\0') { + if (*s != '*') { + rpmlog(RPMLOG_ERR, + _("%%changelog entries must start with *\n")); + return RPMRC_FAIL; + } + + /* find end of line */ + date = s; + while(*s && *s != '\n') s++; + if (! *s) { + rpmlog(RPMLOG_ERR, _("incomplete %%changelog entry\n")); + return RPMRC_FAIL; + } + *s = '\0'; + text = s + 1; + + /* 4 fields of date */ + date++; + s = date; + for (i = 0; i < 4; i++) { + SKIPSPACE(s); + SKIPNONSPACE(s); + } + SKIPSPACE(date); + if (dateToTimet(date, &time)) { + rpmlog(RPMLOG_ERR, _("bad date in %%changelog: %s\n"), date); + return RPMRC_FAIL; + } + if (lastTime && lastTime < time) { + rpmlog(RPMLOG_ERR, + _("%%changelog not in descending chronological order\n")); + return RPMRC_FAIL; + } + lastTime = time; + + /* skip space to the name */ + SKIPSPACE(s); + if (! *s) { + rpmlog(RPMLOG_ERR, _("missing name in %%changelog\n")); + return RPMRC_FAIL; + } + + /* name */ + name = s; + while (*s != '\0') s++; + while (s > name && risspace(*s)) { + *s-- = '\0'; + } + if (s == name) { + rpmlog(RPMLOG_ERR, _("missing name in %%changelog\n")); + return RPMRC_FAIL; + } + + /* text */ + SKIPSPACE(text); + if (! *text) { + rpmlog(RPMLOG_ERR, _("no description in %%changelog\n")); + return RPMRC_FAIL; + } + + /* find the next leading '*' (or eos) */ + s = text; + do { + s++; + } while (*s && (*(s-1) != '\n' || *s != '*')); + next = s; + s--; + + /* backup to end of description */ + while ((s > text) && risspace(*s)) { + *s-- = '\0'; + } + + if ( !trimtime || time >= trimtime ) { + addChangelogEntry(h, time, name, text); + } else break; + + s = next; + } + free(sp); + + return RPMRC_OK; +} + +int parseChangelog(rpmSpec spec) +{ + int nextPart, rc, res = PART_ERROR; + ARGV_t sb = NULL; + + /* There are no options to %changelog */ + if ((rc = readLine(spec, STRIP_COMMENTS)) > 0) { + res = PART_NONE; + goto exit; + } else if (rc < 0) { + goto exit; + } + + while (! (nextPart = isPart(spec->line))) { + argvAdd(&sb, spec->line); + if ((rc = readLine(spec, STRIP_COMMENTS)) > 0) { + nextPart = PART_NONE; + break; + } else if (rc < 0) { + goto exit; + } + } + + if (sb && addChangelog(spec->packages->header, sb)) { + goto exit; + } + res = nextPart; + +exit: + argvFree(sb); + + return res; +} diff --git a/build/parseDescription.c b/build/parseDescription.c new file mode 100644 index 0000000..f233d8d --- /dev/null +++ b/build/parseDescription.c @@ -0,0 +1,113 @@ +/** \ingroup rpmbuild + * \file build/parseDescription.c + * Parse %description section from spec file. + */ + +#include "system.h" + +#include +#include +#include "build/rpmbuild_internal.h" +#include "debug.h" + +int parseDescription(rpmSpec spec) +{ + int nextPart = PART_ERROR; /* assume error */ + StringBuf sb = NULL; + int flag = PART_SUBNAME; + Package pkg; + int rc, argc; + int arg; + const char **argv = NULL; + const char *name = NULL; + const char *lang = RPMBUILD_DEFAULT_LANG; + poptContext optCon = NULL; + struct poptOption optionsTable[] = { + { NULL, 'n', POPT_ARG_STRING, &name, 'n', NULL, NULL}, + { NULL, 'l', POPT_ARG_STRING, &lang, 'l', NULL, NULL}, + { 0, 0, 0, 0, 0, NULL, NULL} + }; + + if ((rc = poptParseArgvString(spec->line, &argc, &argv))) { + rpmlog(RPMLOG_ERR, _("line %d: Error parsing %%description: %s\n"), + spec->lineNum, poptStrerror(rc)); + return PART_ERROR; + } + + optCon = poptGetContext(NULL, argc, argv, optionsTable, 0); + while ((arg = poptGetNextOpt(optCon)) > 0) { + if (arg == 'n') { + flag = PART_NAME; + } + } + + if (arg < -1) { + rpmlog(RPMLOG_ERR, _("line %d: Bad option %s: %s\n"), + spec->lineNum, + poptBadOption(optCon, POPT_BADOPTION_NOALIAS), + spec->line); + goto exit; + } + + if (poptPeekArg(optCon)) { + if (name == NULL) + name = poptGetArg(optCon); + if (poptPeekArg(optCon)) { + rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"), + spec->lineNum, + spec->line); + goto exit; + } + } + + if (lookupPackage(spec, name, flag, &pkg)) { + rpmlog(RPMLOG_ERR, _("line %d: Package does not exist: %s\n"), + spec->lineNum, spec->line); + goto exit; + } + + + /******************/ + +#if 0 + if (headerIsEntry(pkg->header, RPMTAG_DESCRIPTION)) { + rpmlog(RPMLOG_ERR, _("line %d: Second description\n"), + spec->lineNum); + goto exit; + } +#endif + + sb = newStringBuf(); + + if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) { + nextPart = PART_NONE; + } else if (rc < 0) { + nextPart = PART_ERROR; + goto exit; + } else { + while (! (nextPart = isPart(spec->line))) { + appendLineStringBuf(sb, spec->line); + if ((rc = + readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) { + nextPart = PART_NONE; + break; + } else if (rc < 0) { + nextPart = PART_ERROR; + goto exit; + } + } + } + + stripTrailingBlanksStringBuf(sb); + if (!((spec->flags & RPMSPEC_NOLANG) && !rstreq(lang, RPMBUILD_DEFAULT_LANG))) { + (void) headerAddI18NString(pkg->header, RPMTAG_DESCRIPTION, + getStringBuf(sb), lang); + } + + +exit: + freeStringBuf(sb); + free(argv); + poptFreeContext(optCon); + return nextPart; +} diff --git a/build/parseFiles.c b/build/parseFiles.c new file mode 100644 index 0000000..7c51c3a --- /dev/null +++ b/build/parseFiles.c @@ -0,0 +1,99 @@ +/** \ingroup rpmbuild + * \file build/parseFiles.c + * Parse %files section from spec file. + */ + +#include "system.h" + +#include +#include +#include "build/rpmbuild_internal.h" +#include "debug.h" + +int parseFiles(rpmSpec spec) +{ + int nextPart, res = PART_ERROR; + Package pkg; + int rc, argc; + int arg; + const char ** argv = NULL; + const char *name = NULL; + int flag = PART_SUBNAME; + poptContext optCon = NULL; + struct poptOption optionsTable[] = { + { NULL, 'n', POPT_ARG_STRING, &name, 'n', NULL, NULL}, + { NULL, 'f', POPT_ARG_STRING, NULL, 'f', NULL, NULL}, + { 0, 0, 0, 0, 0, NULL, NULL} + }; + + if ((rc = poptParseArgvString(spec->line, &argc, &argv))) { + rpmlog(RPMLOG_ERR, _("line %d: Error parsing %%files: %s\n"), + spec->lineNum, poptStrerror(rc)); + goto exit; + } + + optCon = poptGetContext(NULL, argc, argv, optionsTable, 0); + while ((arg = poptGetNextOpt(optCon)) > 0) { + if (arg == 'n') { + flag = PART_NAME; + } + } + + if (arg < -1) { + rpmlog(RPMLOG_ERR, _("line %d: Bad option %s: %s\n"), + spec->lineNum, + poptBadOption(optCon, POPT_BADOPTION_NOALIAS), + spec->line); + goto exit; + } + + if (poptPeekArg(optCon)) { + if (name == NULL) + name = poptGetArg(optCon); + if (poptPeekArg(optCon)) { + rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"), + spec->lineNum, + spec->line); + goto exit; + } + } + + if (lookupPackage(spec, name, flag, &pkg)) { + rpmlog(RPMLOG_ERR, _("line %d: Package does not exist: %s\n"), + spec->lineNum, spec->line); + goto exit; + } + + for (arg=1; argfileFile), file); + free(file); + } + } + + pkg->fileList = argvNew(); + + if ((rc = readLine(spec, STRIP_COMMENTS)) > 0) { + nextPart = PART_NONE; + } else if (rc < 0) { + goto exit; + } else { + while (! (nextPart = isPart(spec->line))) { + argvAdd(&(pkg->fileList), spec->line); + if ((rc = readLine(spec, STRIP_COMMENTS)) > 0) { + nextPart = PART_NONE; + break; + } else if (rc < 0) { + goto exit; + } + } + } + res = nextPart; + +exit: + argv = _free(argv); + optCon = poptFreeContext(optCon); + + return res; +} diff --git a/build/parsePolicies.c b/build/parsePolicies.c new file mode 100644 index 0000000..2abc00c --- /dev/null +++ b/build/parsePolicies.c @@ -0,0 +1,89 @@ +/** \ingroup rpmbuild + * \file build/parsePolicies.c + * Parse %policies section from spec file. + */ + +#include "system.h" + +#include +#include +#include +#include +#include "build/rpmbuild_internal.h" +#include "debug.h" + +int parsePolicies(rpmSpec spec) +{ + int nextPart, res = PART_ERROR; + Package pkg; + int rc, argc; + int arg; + const char **argv = NULL; + const char *name = NULL; + int flag = PART_SUBNAME; + poptContext optCon = NULL; + + struct poptOption optionsTable[] = { + {NULL, 'n', POPT_ARG_STRING, &name, 'n', NULL, NULL}, + {0, 0, 0, 0, 0, NULL, NULL} + }; + + if ((rc = poptParseArgvString(spec->line, &argc, &argv))) { + rpmlog(RPMLOG_ERR, _("line %d: Error parsing %%policies: %s\n"), + spec->lineNum, poptStrerror(rc)); + goto exit; + } + + optCon = poptGetContext(NULL, argc, argv, optionsTable, 0); + while ((arg = poptGetNextOpt(optCon)) > 0) { + if (arg == 'n') { + flag = PART_NAME; + } + } + + if (arg < -1) { + rpmlog(RPMLOG_ERR, _("line %d: Bad option %s: %s\n"), + spec->lineNum, + poptBadOption(optCon, POPT_BADOPTION_NOALIAS), spec->line); + goto exit; + } + + if (poptPeekArg(optCon)) { + if (name == NULL) + name = poptGetArg(optCon); + if (poptPeekArg(optCon)) { + rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"), + spec->lineNum, spec->line); + goto exit; + } + } + + if (lookupPackage(spec, name, flag, &pkg)) { + rpmlog(RPMLOG_ERR, _("line %d: Package does not exist: %s\n"), + spec->lineNum, spec->line); + goto exit; + } + + if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) { + nextPart = PART_NONE; + } else if (rc < 0) { + goto exit; + } else { + while (!(nextPart = isPart(spec->line))) { + argvAdd(&(pkg->policyList), spec->line); + if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) { + nextPart = PART_NONE; + break; + } else if (rc < 0) { + goto exit; + } + } + } + res = nextPart; + + exit: + argv = _free(argv); + optCon = poptFreeContext(optCon); + + return res; +} diff --git a/build/parsePreamble.c b/build/parsePreamble.c new file mode 100644 index 0000000..e8e3133 --- /dev/null +++ b/build/parsePreamble.c @@ -0,0 +1,1090 @@ +/** \ingroup rpmbuild + * \file build/parsePreamble.c + * Parse tags in global section from spec file. + */ + +#include "system.h" + +#include + +#include +#include +#include +#include "rpmio/rpmlua.h" +#include "build/rpmbuild_internal.h" +#include "build/rpmbuild_misc.h" +#include "debug.h" + +#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; } +#define SKIPNONSPACE(s) { while (*(s) && !risspace(*(s))) (s)++; } +#define SKIPWHITE(_x) {while(*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;} +#define SKIPNONWHITE(_x){while(*(_x) &&!(risspace(*_x) || *(_x) == ',')) (_x)++;} + +/** + */ +static const rpmTagVal copyTagsDuringParse[] = { + RPMTAG_EPOCH, + RPMTAG_VERSION, + RPMTAG_RELEASE, + RPMTAG_LICENSE, + RPMTAG_PACKAGER, + RPMTAG_DISTRIBUTION, + RPMTAG_DISTURL, + RPMTAG_VENDOR, + RPMTAG_ICON, + RPMTAG_URL, + RPMTAG_VCS, + RPMTAG_CHANGELOGTIME, + RPMTAG_CHANGELOGNAME, + RPMTAG_CHANGELOGTEXT, + RPMTAG_PREFIXES, + RPMTAG_DISTTAG, + RPMTAG_BUGURL, + RPMTAG_GROUP, + 0 +}; + +/** + */ +static const rpmTagVal requiredTags[] = { + RPMTAG_NAME, + RPMTAG_VERSION, + RPMTAG_RELEASE, + RPMTAG_SUMMARY, + RPMTAG_LICENSE, + 0 +}; + +/** + */ +static void addOrAppendListEntry(Header h, rpmTagVal tag, const char * line) +{ + int xx; + int argc; + const char **argv; + + xx = poptParseArgvString(line, &argc, &argv); + if (argc) + headerPutStringArray(h, tag, argv, argc); + argv = _free(argv); +} + +/* Parse a simple part line that only take -n or */ +/* is returned in name as a pointer into a dynamic buffer */ + +/** + */ +static int parseSimplePart(const char *line, char **name, int *flag) +{ + char *tok; + char *linebuf = xstrdup(line); + int rc; + + /* Throw away the first token (the %xxxx) */ + (void)strtok(linebuf, " \t\n"); + *name = NULL; + + if (!(tok = strtok(NULL, " \t\n"))) { + rc = 0; + goto exit; + } + + if (rstreq(tok, "-n")) { + if (!(tok = strtok(NULL, " \t\n"))) { + rc = 1; + goto exit; + } + *flag = PART_NAME; + } else { + *flag = PART_SUBNAME; + } + *name = xstrdup(tok); + rc = strtok(NULL, " \t\n") ? 1 : 0; + +exit: + free(linebuf); + return rc; +} + +/** + */ +static inline int parseYesNo(const char * s) +{ + return ((!s || (s[0] == 'n' || s[0] == 'N' || s[0] == '0') || + !rstrcasecmp(s, "false") || !rstrcasecmp(s, "off")) + ? 0 : 1); +} + +static struct Source *findSource(rpmSpec spec, uint32_t num, int flag) +{ + struct Source *p; + + for (p = spec->sources; p != NULL; p = p->next) + if ((num == p->num) && (p->flags & flag)) return p; + + return NULL; +} + +static int parseNoSource(rpmSpec spec, const char * field, rpmTagVal tag) +{ + const char *f, *fe; + const char *name; + int flag; + uint32_t num; + + if (tag == RPMTAG_NOSOURCE) { + flag = RPMBUILD_ISSOURCE; + name = "source"; + } else { + flag = RPMBUILD_ISPATCH; + name = "patch"; + } + + fe = field; + for (f = fe; *f != '\0'; f = fe) { + struct Source *p; + + SKIPWHITE(f); + if (*f == '\0') + break; + fe = f; + SKIPNONWHITE(fe); + if (*fe != '\0') fe++; + + if (parseUnsignedNum(f, &num)) { + rpmlog(RPMLOG_ERR, _("line %d: Bad number: %s\n"), + spec->lineNum, f); + return RPMRC_FAIL; + } + + if (! (p = findSource(spec, num, flag))) { + rpmlog(RPMLOG_ERR, _("line %d: Bad no%s number: %u\n"), + spec->lineNum, name, num); + return RPMRC_FAIL; + } + + p->flags |= RPMBUILD_ISNO; + + } + + return 0; +} + +static int addSource(rpmSpec spec, Package pkg, const char *field, rpmTagVal tag) +{ + struct Source *p; + int flag = 0; + const char *name = NULL; + char *nump; + char *fieldp = NULL; + char *buf = NULL; + uint32_t num = 0; + + switch (tag) { + case RPMTAG_SOURCE: + flag = RPMBUILD_ISSOURCE; + name = "source"; + fieldp = spec->line + 6; + break; + case RPMTAG_PATCH: + flag = RPMBUILD_ISPATCH; + name = "patch"; + fieldp = spec->line + 5; + break; + case RPMTAG_ICON: + flag = RPMBUILD_ISICON; + fieldp = NULL; + break; + default: + return -1; + break; + } + + /* Get the number */ + if (tag != RPMTAG_ICON) { + /* We already know that a ':' exists, and that there */ + /* are no spaces before it. */ + /* This also now allows for spaces and tabs between */ + /* the number and the ':' */ + char ch; + char *fieldp_backup = fieldp; + + while ((*fieldp != ':') && (*fieldp != ' ') && (*fieldp != '\t')) { + fieldp++; + } + ch = *fieldp; + *fieldp = '\0'; + + nump = fieldp_backup; + SKIPSPACE(nump); + if (nump == NULL || *nump == '\0') { + num = flag == RPMBUILD_ISSOURCE ? 0 : INT_MAX; + } else { + if (parseUnsignedNum(fieldp_backup, &num)) { + rpmlog(RPMLOG_ERR, _("line %d: Bad %s number: %s\n"), + spec->lineNum, name, spec->line); + *fieldp = ch; + return RPMRC_FAIL; + } + } + *fieldp = ch; + } + + /* Check whether tags of the same number haven't already been defined */ + for (p = spec->sources; p != NULL; p = p->next) { + if ( p->num != num ) continue; + if ((tag == RPMTAG_SOURCE && p->flags == RPMBUILD_ISSOURCE) || + (tag == RPMTAG_PATCH && p->flags == RPMBUILD_ISPATCH)) { + rpmlog(RPMLOG_ERR, _("%s %d defined multiple times\n"), name, num); + return RPMRC_FAIL; + } + } + + /* Create the entry and link it in */ + p = xmalloc(sizeof(*p)); + p->num = num; + p->fullSource = xstrdup(field); + p->flags = flag; + p->source = strrchr(p->fullSource, '/'); + if (p->source) { + p->source++; + } else { + p->source = p->fullSource; + } + + if (tag != RPMTAG_ICON) { + p->next = spec->sources; + spec->sources = p; + } else { + p->next = pkg->icon; + pkg->icon = p; + } + + spec->numSources++; + + if (tag != RPMTAG_ICON) { + char *body = rpmGetPath("%{_sourcedir}/", p->source, NULL); + + rasprintf(&buf, "%s%d", + (flag & RPMBUILD_ISPATCH) ? "PATCH" : "SOURCE", num); + addMacro(spec->macros, buf, NULL, body, RMIL_SPEC); + free(buf); + rasprintf(&buf, "%sURL%d", + (flag & RPMBUILD_ISPATCH) ? "PATCH" : "SOURCE", num); + addMacro(spec->macros, buf, NULL, p->fullSource, RMIL_SPEC); + free(buf); +#ifdef WITH_LUA + if (!spec->recursing) { + rpmlua lua = NULL; /* global state */ + const char * what = (flag & RPMBUILD_ISPATCH) ? "patches" : "sources"; + rpmluaPushTable(lua, what); + rpmluav var = rpmluavNew(); + rpmluavSetListMode(var, 1); + rpmluavSetValue(var, RPMLUAV_STRING, body); + rpmluaSetVar(lua, var); + var = rpmluavFree(var); + rpmluaPop(lua); + } +#endif + body = _free(body); + } + + return 0; +} + +typedef const struct tokenBits_s { + const char * name; + rpmsenseFlags bits; +} * tokenBits; + +/** + */ +static struct tokenBits_s const installScriptBits[] = { + { "interp", RPMSENSE_INTERP }, + { "prereq", RPMSENSE_PREREQ }, + { "preun", RPMSENSE_SCRIPT_PREUN }, + { "pre", RPMSENSE_SCRIPT_PRE }, + { "postun", RPMSENSE_SCRIPT_POSTUN }, + { "post", RPMSENSE_SCRIPT_POST }, + { "rpmlib", RPMSENSE_RPMLIB }, + { "verify", RPMSENSE_SCRIPT_VERIFY }, + { "pretrans", RPMSENSE_PRETRANS }, + { "posttrans", RPMSENSE_POSTTRANS }, + { NULL, 0 } +}; + +/** + */ +static int parseBits(const char * s, const tokenBits tokbits, + rpmsenseFlags * bp) +{ + tokenBits tb; + const char * se; + rpmsenseFlags bits = RPMSENSE_ANY; + int c = 0; + int rc = RPMRC_OK; + + if (s) { + while (*s != '\0') { + while ((c = *s) && risspace(c)) s++; + se = s; + while ((c = *se) && risalpha(c)) se++; + if (s == se) + break; + for (tb = tokbits; tb->name; tb++) { + if (tb->name != NULL && + strlen(tb->name) == (se-s) && rstreqn(tb->name, s, (se-s))) + break; + } + if (tb->name == NULL) { + rc = RPMRC_FAIL; + break; + } + bits |= tb->bits; + while ((c = *se) && risspace(c)) se++; + if (c != ',') + break; + s = ++se; + } + } + *bp |= bits; + return rc; +} + +/** + */ +static inline char * findLastChar(char * s) +{ + char *res = s; + + while (*s != '\0') { + if (! risspace(*s)) + res = s; + s++; + } + + return res; +} + +/** + */ +static int isMemberInEntry(Header h, const char *name, rpmTagVal tag) +{ + struct rpmtd_s td; + int found = 0; + const char *str; + + if (!headerGet(h, tag, &td, HEADERGET_MINMEM)) + return -1; + + while ((str = rpmtdNextString(&td))) { + if (!rstrcasecmp(str, name)) { + found = 1; + break; + } + } + rpmtdFreeData(&td); + + return found; +} + +/** + */ +static rpmRC checkForValidArchitectures(rpmSpec spec) +{ + char *arch = rpmExpand("%{_target_cpu}", NULL); + char *os = rpmExpand("%{_target_os}", NULL); + rpmRC rc = RPMRC_FAIL; /* assume failure */ + + if (isMemberInEntry(spec->buildRestrictions, + arch, RPMTAG_EXCLUDEARCH) == 1) { + rpmlog(RPMLOG_ERR, _("Architecture is excluded: %s\n"), arch); + goto exit; + } + if (isMemberInEntry(spec->buildRestrictions, + arch, RPMTAG_EXCLUSIVEARCH) == 0) { + rpmlog(RPMLOG_ERR, _("Architecture is not included: %s\n"), arch); + goto exit; + } + if (isMemberInEntry(spec->buildRestrictions, + os, RPMTAG_EXCLUDEOS) == 1) { + rpmlog(RPMLOG_ERR, _("OS is excluded: %s\n"), os); + goto exit; + } + if (isMemberInEntry(spec->buildRestrictions, + os, RPMTAG_EXCLUSIVEOS) == 0) { + rpmlog(RPMLOG_ERR, _("OS is not included: %s\n"), os); + goto exit; + } + rc = RPMRC_OK; + +exit: + arch = _free(arch); + os = _free(os); + + return rc; +} + +/** + * Check that required tags are present in header. + * @param h header + * @param NVR package name-version-release + * @return RPMRC_OK if OK + */ +static int checkForRequired(Header h, const char * NVR) +{ + int res = RPMRC_OK; + const rpmTagVal * p; + + for (p = requiredTags; *p != 0; p++) { + if (!headerIsEntry(h, *p)) { + rpmlog(RPMLOG_ERR, + _("%s field must be present in package: %s\n"), + rpmTagGetName(*p), NVR); + res = RPMRC_FAIL; + } + } + + return res; +} + +/** + * Check that no duplicate tags are present in header. + * @param h header + * @param NVR package name-version-release + * @return RPMRC_OK if OK + */ +static int checkForDuplicates(Header h, const char * NVR) +{ + int res = RPMRC_OK; + rpmTagVal tag, lastTag = RPMTAG_NOT_FOUND; + HeaderIterator hi = headerInitIterator(h); + + while ((tag = headerNextTag(hi)) != RPMTAG_NOT_FOUND) { + if (tag == lastTag) { + rpmlog(RPMLOG_ERR, _("Duplicate %s entries in package: %s\n"), + rpmTagGetName(tag), NVR); + res = RPMRC_FAIL; + } + lastTag = tag; + } + hi = headerFreeIterator(hi); + + return res; +} + +/** + */ +static struct optionalTag { + rpmTagVal ot_tag; + const char * ot_mac; +} const optionalTags[] = { + { RPMTAG_VENDOR, "%{vendor}" }, + { RPMTAG_PACKAGER, "%{packager}" }, + { RPMTAG_DISTRIBUTION, "%{distribution}" }, + { RPMTAG_DISTURL, "%{disturl}" }, + { RPMTAG_BUGURL, "%{bugurl}" }, + { -1, NULL } +}; + +/** + */ +static void fillOutMainPackage(Header h) +{ + const struct optionalTag *ot; + + for (ot = optionalTags; ot->ot_mac != NULL; ot++) { + if (!headerIsEntry(h, ot->ot_tag)) { + char *val = rpmExpand(ot->ot_mac, NULL); + if (val && *val != '%') { + headerPutString(h, ot->ot_tag, val); + } + val = _free(val); + } + } +} + +static int getSpecialDocDir(Package pkg) +{ + const char *errstr, *docdir_fmt = "%{NAME}-%{VERSION}"; + char *fmt_macro, *fmt; + int rc = -1; + + fmt_macro = rpmExpand("%{?_docdir_fmt}", NULL); + if (fmt_macro && strlen(fmt_macro) > 0) { + docdir_fmt = fmt_macro; + } + fmt = headerFormat(pkg->header, docdir_fmt, &errstr); + if (!fmt) { + rpmlog(RPMLOG_ERR, _("illegal _docdir_fmt: %s\n"), errstr); + goto exit; + } + pkg->specialDocDir = rpmGetPath("%{_docdir}/", fmt, NULL); + rc = 0; + +exit: + free(fmt); + free(fmt_macro); + return rc; +} + +/** + */ +static rpmRC readIcon(Header h, const char * file) +{ + char *fn = NULL; + uint8_t *icon = NULL; + FD_t fd = NULL; + rpmRC rc = RPMRC_FAIL; /* assume failure */ + off_t size; + size_t nb, iconsize; + + /* XXX use rpmGenPath(rootdir, "%{_sourcedir}/", file) for icon path. */ + fn = rpmGetPath("%{_sourcedir}/", file, NULL); + + fd = Fopen(fn, "r.ufdio"); + if (fd == NULL) { + rpmlog(RPMLOG_ERR, _("Unable to open icon %s: %s\n"), + fn, Fstrerror(fd)); + goto exit; + } + size = fdSize(fd); + iconsize = (size >= 0 ? size : (8 * BUFSIZ)); + if (iconsize == 0) { + rc = RPMRC_OK; /* XXX Eh? */ + goto exit; + } + + icon = xmalloc(iconsize + 1); + *icon = '\0'; + + nb = Fread(icon, sizeof(icon[0]), iconsize, fd); + if (Ferror(fd) || (size >= 0 && nb != size)) { + rpmlog(RPMLOG_ERR, _("Unable to read icon %s: %s\n"), + fn, Fstrerror(fd)); + goto exit; + } + + if (rstreqn((char*)icon, "GIF", sizeof("GIF")-1)) { + headerPutBin(h, RPMTAG_GIF, icon, iconsize); + } else if (rstreqn((char*)icon, "/* XPM", sizeof("/* XPM")-1)) { + headerPutBin(h, RPMTAG_XPM, icon, iconsize); + } else { + rpmlog(RPMLOG_ERR, _("Unknown icon type: %s\n"), file); + goto exit; + } + rc = RPMRC_OK; + +exit: + Fclose(fd); + free(fn); + free(icon); + return rc; +} + +#define SINGLE_TOKEN_ONLY \ +if (multiToken) { \ + rpmlog(RPMLOG_ERR, _("line %d: Tag takes single token only: %s\n"), \ + spec->lineNum, spec->line); \ + return RPMRC_FAIL; \ +} + +/** + * Check for inappropriate characters. All alphanums are considered sane. + * @param spec spec + * @param field string to check + * @param fsize size of string to check + * @param whitelist string of permitted characters + * @return RPMRC_OK if OK + */ +rpmRC rpmCharCheck(rpmSpec spec, const char *field, size_t fsize, const char *whitelist) +{ + const char *ch, *stop = &field[fsize]; + + for (ch=field; *ch && ch < stop; ch++) { + if (risalnum(*ch) || strchr(whitelist, *ch)) continue; + if (isprint(*ch)) { + rpmlog(RPMLOG_ERR, _("line %d: Illegal char '%c' in: %s\n"), + spec->lineNum, *ch, spec->line); + } else { + rpmlog(RPMLOG_ERR, _("line %d: Illegal char in: %s\n"), + spec->lineNum, spec->line); + } + return RPMRC_FAIL; + } + if (strstr(field, "..") != NULL) { + rpmlog(RPMLOG_ERR, _("line %d: Illegal sequence \"..\" in: %s\n"), + spec->lineNum, spec->line); + return RPMRC_FAIL; + } + + return RPMRC_OK; +} + +/** + */ +static int handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag, + const char *macro, const char *lang) +{ + char * field = spec->line; + char * end; + int multiToken = 0; + rpmsenseFlags tagflags = RPMSENSE_ANY; + int rc; + int xx; + + if (field == NULL) return RPMRC_FAIL; /* XXX can't happen */ + /* Find the start of the "field" and strip trailing space */ + while ((*field) && (*field != ':')) + field++; + if (*field != ':') { + rpmlog(RPMLOG_ERR, _("line %d: Malformed tag: %s\n"), + spec->lineNum, spec->line); + return RPMRC_FAIL; + } + field++; + SKIPSPACE(field); + if (!*field) { + /* Empty field */ + rpmlog(RPMLOG_ERR, _("line %d: Empty tag: %s\n"), + spec->lineNum, spec->line); + return RPMRC_FAIL; + } + end = findLastChar(field); + *(end+1) = '\0'; + + /* See if this is multi-token */ + end = field; + SKIPNONSPACE(end); + if (*end != '\0') + multiToken = 1; + + switch (tag) { + case RPMTAG_NAME: + SINGLE_TOKEN_ONLY; + if (rpmCharCheck(spec, field, strlen(field), ".-_+%{}") != RPMRC_OK) return RPMRC_FAIL; + headerPutString(pkg->header, tag, field); + break; + case RPMTAG_VERSION: + case RPMTAG_RELEASE: + SINGLE_TOKEN_ONLY; + if (rpmCharCheck(spec, field, strlen(field), "._+%{}") != RPMRC_OK) return RPMRC_FAIL; + headerPutString(pkg->header, tag, field); + break; + case RPMTAG_URL: + case RPMTAG_DISTTAG: + case RPMTAG_BUGURL: + /* XXX TODO: validate format somehow */ + case RPMTAG_VCS: + SINGLE_TOKEN_ONLY; + headerPutString(pkg->header, tag, field); + break; + case RPMTAG_GROUP: + case RPMTAG_SUMMARY: + case RPMTAG_DISTRIBUTION: + case RPMTAG_VENDOR: + case RPMTAG_LICENSE: + case RPMTAG_PACKAGER: + if (!*lang) { + headerPutString(pkg->header, tag, field); + } else if (!((spec->flags & RPMSPEC_NOLANG) && !rstreq(lang, RPMBUILD_DEFAULT_LANG))) + (void) headerAddI18NString(pkg->header, tag, field, lang); + break; + case RPMTAG_BUILDROOT: + /* just silently ignore BuildRoot */ + macro = NULL; + break; + case RPMTAG_PREFIXES: { + struct rpmtd_s td; + const char *str; + addOrAppendListEntry(pkg->header, tag, field); + xx = headerGet(pkg->header, tag, &td, HEADERGET_MINMEM); + while ((str = rpmtdNextString(&td))) { + size_t len = strlen(str); + if (len > 1 && str[len-1] == '/') { + rpmlog(RPMLOG_ERR, + _("line %d: Prefixes must not end with \"/\": %s\n"), + spec->lineNum, spec->line); + rpmtdFreeData(&td); + return RPMRC_FAIL; + } + } + rpmtdFreeData(&td); + break; + } + case RPMTAG_DOCDIR: + SINGLE_TOKEN_ONLY; + if (field[0] != '/') { + rpmlog(RPMLOG_ERR, + _("line %d: Docdir must begin with '/': %s\n"), + spec->lineNum, spec->line); + return RPMRC_FAIL; + } + macro = NULL; + delMacro(NULL, "_docdir"); + addMacro(NULL, "_docdir", NULL, field, RMIL_SPEC); + break; + case RPMTAG_EPOCH: { + SINGLE_TOKEN_ONLY; + uint32_t epoch; + if (parseUnsignedNum(field, &epoch)) { + rpmlog(RPMLOG_ERR, + _("line %d: Epoch field must be an unsigned number: %s\n"), + spec->lineNum, spec->line); + return RPMRC_FAIL; + } + headerPutUint32(pkg->header, tag, &epoch, 1); + break; + } + case RPMTAG_AUTOREQPROV: + pkg->autoReq = parseYesNo(field); + pkg->autoProv = pkg->autoReq; + break; + case RPMTAG_AUTOREQ: + pkg->autoReq = parseYesNo(field); + break; + case RPMTAG_AUTOPROV: + pkg->autoProv = parseYesNo(field); + break; + case RPMTAG_SOURCE: + case RPMTAG_PATCH: + macro = NULL; + if ((rc = addSource(spec, pkg, field, tag))) + return rc; + break; + case RPMTAG_ICON: + SINGLE_TOKEN_ONLY; + if ((rc = addSource(spec, pkg, field, tag))) + return rc; + if ((rc = readIcon(pkg->header, field))) + return RPMRC_FAIL; + break; + case RPMTAG_NOSOURCE: + case RPMTAG_NOPATCH: + spec->noSource = 1; + if ((rc = parseNoSource(spec, field, tag))) + return rc; + break; + case RPMTAG_ORDERFLAGS: + case RPMTAG_REQUIREFLAGS: + case RPMTAG_PREREQ: + if ((rc = parseBits(lang, installScriptBits, &tagflags))) { + rpmlog(RPMLOG_ERR, + _("line %d: Bad %s: qualifiers: %s\n"), + spec->lineNum, rpmTagGetName(tag), spec->line); + return rc; + } + if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags))) + return rc; + break; + case RPMTAG_BUILDPREREQ: + case RPMTAG_BUILDREQUIRES: + case RPMTAG_BUILDCONFLICTS: + case RPMTAG_CONFLICTFLAGS: + case RPMTAG_OBSOLETEFLAGS: + case RPMTAG_PROVIDEFLAGS: + if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags))) + return rc; + break; + case RPMTAG_EXCLUDEARCH: + case RPMTAG_EXCLUSIVEARCH: + case RPMTAG_EXCLUDEOS: + case RPMTAG_EXCLUSIVEOS: + addOrAppendListEntry(spec->buildRestrictions, tag, field); + break; + case RPMTAG_BUILDARCHS: { + int BACount; + const char **BANames = NULL; + if ((rc = poptParseArgvString(field, &BACount, &BANames))) { + rpmlog(RPMLOG_ERR, + _("line %d: Bad BuildArchitecture format: %s\n"), + spec->lineNum, spec->line); + return RPMRC_FAIL; + } + if (spec->packages == pkg) { + spec->BACount = BACount; + spec->BANames = BANames; + } else { + if (BACount != 1 || !rstreq(BANames[0], "noarch")) { + rpmlog(RPMLOG_ERR, + _("line %d: Only noarch subpackages are supported: %s\n"), + spec->lineNum, spec->line); + BANames = _free(BANames); + return RPMRC_FAIL; + } + headerPutString(pkg->header, RPMTAG_ARCH, "noarch"); + } + if (!BACount) + spec->BANames = _free(spec->BANames); + break; + } + case RPMTAG_COLLECTIONS: + addOrAppendListEntry(pkg->header, tag, field); + break; + default: + rpmlog(RPMLOG_ERR, _("Internal error: Bogus tag %d\n"), tag); + return RPMRC_FAIL; + } + + if (macro) + addMacro(spec->macros, macro, NULL, field, RMIL_SPEC); + + return RPMRC_OK; +} + +/* This table has to be in a peculiar order. If one tag is the */ +/* same as another, plus a few letters, it must come first. */ + +/** + */ +typedef const struct PreambleRec_s { + rpmTagVal tag; + int type; + int deprecated; + size_t len; + const char * token; +} * PreambleRec; + +#define LEN_AND_STR(_tag) (sizeof(_tag)-1), _tag + +static struct PreambleRec_s const preambleList[] = { + {RPMTAG_NAME, 0, 0, LEN_AND_STR("name")}, + {RPMTAG_VERSION, 0, 0, LEN_AND_STR("version")}, + {RPMTAG_RELEASE, 0, 0, LEN_AND_STR("release")}, + {RPMTAG_EPOCH, 0, 0, LEN_AND_STR("epoch")}, + {RPMTAG_SUMMARY, 1, 0, LEN_AND_STR("summary")}, + {RPMTAG_LICENSE, 0, 0, LEN_AND_STR("license")}, + {RPMTAG_DISTRIBUTION, 0, 0, LEN_AND_STR("distribution")}, + {RPMTAG_DISTURL, 0, 0, LEN_AND_STR("disturl")}, + {RPMTAG_VENDOR, 0, 0, LEN_AND_STR("vendor")}, + {RPMTAG_GROUP, 1, 0, LEN_AND_STR("group")}, + {RPMTAG_PACKAGER, 0, 0, LEN_AND_STR("packager")}, + {RPMTAG_URL, 0, 0, LEN_AND_STR("url")}, + {RPMTAG_VCS, 0, 0, LEN_AND_STR("vcs")}, + {RPMTAG_SOURCE, 0, 0, LEN_AND_STR("source")}, + {RPMTAG_PATCH, 0, 0, LEN_AND_STR("patch")}, + {RPMTAG_NOSOURCE, 0, 0, LEN_AND_STR("nosource")}, + {RPMTAG_NOPATCH, 0, 0, LEN_AND_STR("nopatch")}, + {RPMTAG_EXCLUDEARCH, 0, 0, LEN_AND_STR("excludearch")}, + {RPMTAG_EXCLUSIVEARCH, 0, 0, LEN_AND_STR("exclusivearch")}, + {RPMTAG_EXCLUDEOS, 0, 0, LEN_AND_STR("excludeos")}, + {RPMTAG_EXCLUSIVEOS, 0, 0, LEN_AND_STR("exclusiveos")}, + {RPMTAG_ICON, 0, 0, LEN_AND_STR("icon")}, + {RPMTAG_PROVIDEFLAGS, 0, 0, LEN_AND_STR("provides")}, + {RPMTAG_REQUIREFLAGS, 2, 0, LEN_AND_STR("requires")}, + {RPMTAG_PREREQ, 2, 1, LEN_AND_STR("prereq")}, + {RPMTAG_CONFLICTFLAGS, 0, 0, LEN_AND_STR("conflicts")}, + {RPMTAG_OBSOLETEFLAGS, 0, 0, LEN_AND_STR("obsoletes")}, + {RPMTAG_PREFIXES, 0, 0, LEN_AND_STR("prefixes")}, + {RPMTAG_PREFIXES, 0, 0, LEN_AND_STR("prefix")}, + {RPMTAG_BUILDROOT, 0, 0, LEN_AND_STR("buildroot")}, + {RPMTAG_BUILDARCHS, 0, 0, LEN_AND_STR("buildarchitectures")}, + {RPMTAG_BUILDARCHS, 0, 0, LEN_AND_STR("buildarch")}, + {RPMTAG_BUILDCONFLICTS, 0, 0, LEN_AND_STR("buildconflicts")}, + {RPMTAG_BUILDPREREQ, 0, 1, LEN_AND_STR("buildprereq")}, + {RPMTAG_BUILDREQUIRES, 0, 0, LEN_AND_STR("buildrequires")}, + {RPMTAG_AUTOREQPROV, 0, 0, LEN_AND_STR("autoreqprov")}, + {RPMTAG_AUTOREQ, 0, 0, LEN_AND_STR("autoreq")}, + {RPMTAG_AUTOPROV, 0, 0, LEN_AND_STR("autoprov")}, + {RPMTAG_DOCDIR, 0, 0, LEN_AND_STR("docdir")}, + {RPMTAG_DISTTAG, 0, 0, LEN_AND_STR("disttag")}, + {RPMTAG_BUGURL, 0, 0, LEN_AND_STR("bugurl")}, + {RPMTAG_COLLECTIONS, 0, 0, LEN_AND_STR("collections")}, + {RPMTAG_ORDERFLAGS, 2, 0, LEN_AND_STR("orderwithrequires")}, + {0, 0, 0, 0} +}; + +/** + */ +static int findPreambleTag(rpmSpec spec,rpmTagVal * tag, + const char ** macro, char * lang) +{ + PreambleRec p; + char *s; + + for (p = preambleList; p->token != NULL; p++) { + if (!(p->token && !rstrncasecmp(spec->line, p->token, p->len))) + continue; + if (p->deprecated) { + rpmlog(RPMLOG_WARNING, _("line %d: %s is deprecated: %s\n"), + spec->lineNum, p->token, spec->line); + } + break; + } + if (p == NULL || p->token == NULL) + return 1; + + s = spec->line + p->len; + SKIPSPACE(s); + + switch (p->type) { + default: + case 0: + /* Unless this is a source or a patch, a ':' better be next */ + if (p->tag != RPMTAG_SOURCE && p->tag != RPMTAG_PATCH) { + if (*s != ':') return 1; + } + *lang = '\0'; + break; + case 1: /* Parse optional ( ). */ + case 2: + if (*s == ':') { + /* Type 1 is multilang, 2 is qualifiers with no defaults */ + strcpy(lang, (p->type == 1) ? RPMBUILD_DEFAULT_LANG : ""); + break; + } + if (*s != '(') return 1; + s++; + SKIPSPACE(s); + while (!risspace(*s) && *s != ')') + *lang++ = *s++; + *lang = '\0'; + SKIPSPACE(s); + if (*s != ')') return 1; + s++; + SKIPSPACE(s); + if (*s != ':') return 1; + break; + } + + *tag = p->tag; + if (macro) + *macro = p->token; + return 0; +} + +int parsePreamble(rpmSpec spec, int initialPackage) +{ + int nextPart = PART_ERROR; + int res = PART_ERROR; /* assume failure */ + int rc; + char *name, *linep; + int flag = 0; + Package pkg; + char *NVR = NULL; + char lang[BUFSIZ]; + + pkg = newPackage(spec); + + if (! initialPackage) { + /* There is one option to %package: or -n */ + if (parseSimplePart(spec->line, &name, &flag)) { + rpmlog(RPMLOG_ERR, _("Bad package specification: %s\n"), + spec->line); + goto exit; + } + + if (!lookupPackage(spec, name, flag, NULL)) { + rpmlog(RPMLOG_ERR, _("Package already exists: %s\n"), spec->line); + free(name); + goto exit; + } + + /* Construct the package */ + if (flag == PART_SUBNAME) { + rasprintf(&NVR, "%s-%s", + headerGetString(spec->packages->header, RPMTAG_NAME), name); + } else + NVR = xstrdup(name); + free(name); + headerPutString(pkg->header, RPMTAG_NAME, NVR); + } else { + NVR = xstrdup("(main package)"); + } + + if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) { + nextPart = PART_NONE; + } else if (rc < 0) { + goto exit; + } else { + while (! (nextPart = isPart(spec->line))) { + const char * macro; + rpmTagVal tag; + + /* Skip blank lines */ + linep = spec->line; + SKIPSPACE(linep); + if (*linep != '\0') { + if (findPreambleTag(spec, &tag, ¯o, lang)) { + rpmlog(RPMLOG_ERR, _("line %d: Unknown tag: %s\n"), + spec->lineNum, spec->line); + goto exit; + } + if (handlePreambleTag(spec, pkg, tag, macro, lang)) { + goto exit; + } + if (spec->BANames && !spec->recursing) { + res = PART_BUILDARCHITECTURES; + goto exit; + } + } + if ((rc = + readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) { + nextPart = PART_NONE; + break; + } + if (rc) { + goto exit; + } + } + } + + /* + * Expand buildroot one more time to get %{version} and the like + * from the main package, validate sanity. The spec->buildRoot could + * still contain unexpanded macros but it cannot be empty or '/', and it + * can't be messed with by anything spec does beyond this point. + */ + if (initialPackage) { + char *buildRoot = rpmGetPath(spec->buildRoot, NULL); + if (*buildRoot == '\0') { + rpmlog(RPMLOG_ERR, _("%%{buildroot} couldn't be empty\n")); + goto exit; + } + if (rstreq(buildRoot, "/")) { + rpmlog(RPMLOG_ERR, _("%%{buildroot} can not be \"/\"\n")); + goto exit; + } + free(spec->buildRoot); + spec->buildRoot = buildRoot; + addMacro(spec->macros, "buildroot", NULL, spec->buildRoot, RMIL_SPEC); + } + + /* XXX Skip valid arch check if not building binary package */ + if (!(spec->flags & RPMSPEC_ANYARCH) && checkForValidArchitectures(spec)) { + goto exit; + } + + /* It is the main package */ + if (pkg == spec->packages) { + fillOutMainPackage(pkg->header); + /* Define group tag to something when group is undefined in main package*/ + if (!headerIsEntry(pkg->header, RPMTAG_GROUP)) { + headerPutString(pkg->header, RPMTAG_GROUP, "Unspecified"); + } + } + + if (checkForDuplicates(pkg->header, NVR)) { + goto exit; + } + + if (pkg != spec->packages) { + headerCopyTags(spec->packages->header, pkg->header, + (rpmTagVal *)copyTagsDuringParse); + } + + if (checkForRequired(pkg->header, NVR)) { + goto exit; + } + + if (getSpecialDocDir(pkg)) { + goto exit; + } + + /* if we get down here nextPart has been set to non-error */ + res = nextPart; + +exit: + free(NVR); + return res; +} diff --git a/build/parsePrep.c b/build/parsePrep.c new file mode 100644 index 0000000..3dab37f --- /dev/null +++ b/build/parsePrep.c @@ -0,0 +1,546 @@ +/** \ingroup rpmbuild + * \file build/parsePrep.c + * Parse %prep section from spec file. + */ + +#include "system.h" + +#include + +#include +#include +#include +#include "build/rpmbuild_internal.h" +#include "build/rpmbuild_misc.h" +#include "lib/rpmug.h" +#include "debug.h" + +/** + * Check that file owner and group are known. + * @param urlfn file url + * @return RPMRC_OK on success + */ +static rpmRC checkOwners(const char * urlfn) +{ + struct stat sb; + + if (lstat(urlfn, &sb)) { + rpmlog(RPMLOG_ERR, _("Bad source: %s: %s\n"), + urlfn, strerror(errno)); + return RPMRC_FAIL; + } + if (!rpmugUname(sb.st_uid) || !rpmugGname(sb.st_gid)) { + rpmlog(RPMLOG_ERR, _("Bad owner/group: %s\n"), urlfn); + return RPMRC_FAIL; + } + + return RPMRC_OK; +} + +/** + * Expand %patchN macro into %prep scriptlet. + * @param spec build info + * @param c patch index + * @param strip patch level (i.e. patch -p argument) + * @param db saved file suffix (i.e. patch --suffix argument) + * @param reverse include -R? + * @param removeEmpties include -E? + * @param fuzz fuzz factor, fuzz<0 means no fuzz set + * @param dir dir to change to (i.e. patch -d argument) + * @return expanded %patch macro (NULL on error) + */ + +static char *doPatch(rpmSpec spec, uint32_t c, int strip, const char *db, + int reverse, int removeEmpties, int fuzz, const char *dir) +{ + char *fn = NULL; + char *buf = NULL; + char *arg_backup = NULL; + char *arg_fuzz = NULL; + char *arg_dir = NULL; + char *args = NULL; + char *arg_patch_flags = rpmExpand("%{?_default_patch_flags}", NULL); + struct Source *sp; + char *patchcmd; + + for (sp = spec->sources; sp != NULL; sp = sp->next) { + if ((sp->flags & RPMBUILD_ISPATCH) && (sp->num == c)) { + break; + } + } + if (sp == NULL) { + if (c != INT_MAX) { + rpmlog(RPMLOG_ERR, _("No patch number %u\n"), c); + } else { + rpmlog(RPMLOG_ERR, _("%%patch without corresponding \"Patch:\" tag\n")); + } + goto exit; + } + + fn = rpmGetPath("%{_sourcedir}/", sp->source, NULL); + + /* On non-build parse's, file cannot be stat'd or read. */ + if ((spec->flags & RPMSPEC_FORCE) || checkOwners(fn)) goto exit; + + if (db) { + rasprintf(&arg_backup, +#if HAVE_OLDPATCH_21 == 0 + "-b " +#endif + "--suffix %s", db); + } else arg_backup = xstrdup(""); + + if (dir) { + rasprintf(&arg_dir, " -d %s", dir); + } else arg_dir = xstrdup(""); + + if (fuzz >= 0) { + rasprintf(&arg_fuzz, " --fuzz=%d", fuzz); + } else arg_fuzz = xstrdup(""); + + rasprintf(&args, "%s -p%d %s%s%s%s%s", arg_patch_flags, strip, arg_backup, arg_fuzz, arg_dir, + reverse ? " -R" : "", + removeEmpties ? " -E" : ""); + + patchcmd = rpmExpand("%{uncompress: ", fn, "} | %{__patch} ", args, NULL); + + free(arg_fuzz); + free(arg_dir); + free(arg_backup); + free(args); + + if (c != INT_MAX) { + rasprintf(&buf, "echo \"Patch #%u (%s):\"\n" + "%s\n", + c, basename(fn), patchcmd); + } else { + rasprintf(&buf, "echo \"Patch (%s):\"\n" + "%s\n", + basename(fn), patchcmd); + } + free(patchcmd); + +exit: + free(arg_patch_flags); + free(fn); + return buf; +} + +/** + * Expand %setup macro into %prep scriptlet. + * @param spec build info + * @param c source index + * @param quietly should -vv be omitted from tar? + * @return expanded %setup macro (NULL on error) + */ +static char *doUntar(rpmSpec spec, uint32_t c, int quietly) +{ + char *fn; + char *buf = NULL; + char *tar; + const char *taropts = ((rpmIsVerbose() && !quietly) ? "-xvvf" : "-xf"); + struct Source *sp; + rpmCompressedMagic compressed = COMPRESSED_NOT; + + for (sp = spec->sources; sp != NULL; sp = sp->next) { + if ((sp->flags & RPMBUILD_ISSOURCE) && (sp->num == c)) { + break; + } + } + if (sp == NULL) { + if (c) { + rpmlog(RPMLOG_ERR, _("No source number %u\n"), c); + } else { + rpmlog(RPMLOG_ERR, _("No \"Source:\" tag in the spec file\n")); + } + return NULL; + } + + fn = rpmGetPath("%{_sourcedir}/", sp->source, NULL); + +#ifdef AUTOFETCH_NOT /* XXX don't expect this code to be enabled */ + /* XXX + * XXX If nosource file doesn't exist, try to fetch from url. + * XXX TODO: add a "--fetch" enabler. + */ + if (sp->flags & RPMTAG_NOSOURCE && autofetchnosource) { + struct stat st; + int rc; + if (lstat(fn, &st) != 0 && errno == ENOENT && + urlIsUrl(sp->fullSource) != URL_IS_UNKNOWN) { + if ((rc = urlGetFile(sp->fullSource, fn)) != 0) { + rpmlog(RPMLOG_ERR, + _("Couldn't download nosource %s: %s\n"), + sp->fullSource); + return NULL; + } + } + } +#endif + + /* XXX On non-build parse's, file cannot be stat'd or read */ + if (!(spec->flags & RPMSPEC_FORCE) && (rpmFileIsCompressed(fn, &compressed) || checkOwners(fn))) { + fn = _free(fn); + return NULL; + } + + tar = rpmGetPath("%{__tar}", NULL); + if (compressed != COMPRESSED_NOT) { + char *zipper, *t = NULL; + int needtar = 1; + + switch (compressed) { + case COMPRESSED_NOT: /* XXX can't happen */ + case COMPRESSED_OTHER: + t = "%{__gzip} -dc"; + break; + case COMPRESSED_BZIP2: + t = "%{__bzip2} -dc"; + break; + case COMPRESSED_ZIP: + if (rpmIsVerbose() && !quietly) + t = "%{__unzip}"; + else + t = "%{__unzip} -qq"; + needtar = 0; + break; + case COMPRESSED_LZMA: + case COMPRESSED_XZ: + t = "%{__xz} -dc"; + break; + case COMPRESSED_LZIP: + t = "%{__lzip} -dc"; + break; + case COMPRESSED_LRZIP: + t = "%{__lrzip} -dqo-"; + break; + } + zipper = rpmGetPath(t, NULL); + if (needtar) { + rasprintf(&buf, "%s '%s' | %s %s - \n" + "STATUS=$?\n" + "if [ $STATUS -ne 0 ]; then\n" + " exit $STATUS\n" + "fi", zipper, fn, tar, taropts); + } else { + rasprintf(&buf, "%s '%s'\n" + "STATUS=$?\n" + "if [ $STATUS -ne 0 ]; then\n" + " exit $STATUS\n" + "fi", zipper, fn); + } + zipper = _free(zipper); + } else { + rasprintf(&buf, "%s %s %s", tar, taropts, fn); + } + + fn = _free(fn); + tar = _free(tar); + return buf; +} + +/** + * Parse %setup macro. + * @todo FIXME: Option -q broken when not immediately after %setup. + * @param spec build info + * @param line current line from spec file + * @return RPMRC_OK on success + */ +static int doSetupMacro(rpmSpec spec, const char *line) +{ + char *buf = NULL; + StringBuf before = newStringBuf(); + StringBuf after = newStringBuf(); + poptContext optCon = NULL; + int argc; + const char ** argv = NULL; + int arg; + const char * optArg; + int xx; + rpmRC rc = RPMRC_FAIL; + uint32_t num; + int leaveDirs = 0, skipDefaultAction = 0; + int createDir = 0, quietly = 0; + const char * dirName = NULL; + struct poptOption optionsTable[] = { + { NULL, 'a', POPT_ARG_STRING, NULL, 'a', NULL, NULL}, + { NULL, 'b', POPT_ARG_STRING, NULL, 'b', NULL, NULL}, + { NULL, 'c', 0, &createDir, 0, NULL, NULL}, + { NULL, 'D', 0, &leaveDirs, 0, NULL, NULL}, + { NULL, 'n', POPT_ARG_STRING, &dirName, 0, NULL, NULL}, + { NULL, 'T', 0, &skipDefaultAction, 0, NULL, NULL}, + { NULL, 'q', 0, &quietly, 0, NULL, NULL}, + { 0, 0, 0, 0, 0, NULL, NULL} + }; + + if ((xx = poptParseArgvString(line, &argc, &argv))) { + rpmlog(RPMLOG_ERR, _("Error parsing %%setup: %s\n"), poptStrerror(xx)); + goto exit; + } + + optCon = poptGetContext(NULL, argc, argv, optionsTable, 0); + while ((arg = poptGetNextOpt(optCon)) > 0) { + optArg = poptGetOptArg(optCon); + + /* We only parse -a and -b here */ + + if (parseUnsignedNum(optArg, &num)) { + rpmlog(RPMLOG_ERR, _("line %d: Bad arg to %%setup: %s\n"), + spec->lineNum, (optArg ? optArg : "???")); + goto exit; + } + + { char *chptr = doUntar(spec, num, quietly); + if (chptr == NULL) + goto exit; + + appendLineStringBuf((arg == 'a' ? after : before), chptr); + free(chptr); + } + } + + if (arg < -1) { + rpmlog(RPMLOG_ERR, _("line %d: Bad %%setup option %s: %s\n"), + spec->lineNum, + poptBadOption(optCon, POPT_BADOPTION_NOALIAS), + poptStrerror(arg)); + goto exit; + } + + if (dirName) { + spec->buildSubdir = xstrdup(dirName); + } else { + rasprintf(&spec->buildSubdir, "%s-%s", + headerGetString(spec->packages->header, RPMTAG_NAME), + headerGetString(spec->packages->header, RPMTAG_VERSION)); + } + addMacro(spec->macros, "buildsubdir", NULL, spec->buildSubdir, RMIL_SPEC); + + /* cd to the build dir */ + { char * buildDir = rpmGenPath(spec->rootDir, "%{_builddir}", ""); + + rasprintf(&buf, "cd '%s'", buildDir); + appendLineStringBuf(spec->prep, buf); + free(buf); + free(buildDir); + } + + /* delete any old sources */ + if (!leaveDirs) { + rasprintf(&buf, "rm -rf '%s'", spec->buildSubdir); + appendLineStringBuf(spec->prep, buf); + free(buf); + } + + /* if necessary, create and cd into the proper dir */ + if (createDir) { + buf = rpmExpand("%{__mkdir_p} ", spec->buildSubdir, "\n", + "cd '", spec->buildSubdir, "'", NULL); + appendLineStringBuf(spec->prep, buf); + free(buf); + } + + /* do the default action */ + if (!createDir && !skipDefaultAction) { + char *chptr = doUntar(spec, 0, quietly); + if (!chptr) + goto exit; + appendLineStringBuf(spec->prep, chptr); + free(chptr); + } + + appendStringBuf(spec->prep, getStringBuf(before)); + + if (!createDir) { + rasprintf(&buf, "cd '%s'", spec->buildSubdir); + appendLineStringBuf(spec->prep, buf); + free(buf); + } + + if (createDir && !skipDefaultAction) { + char *chptr = doUntar(spec, 0, quietly); + if (chptr == NULL) + goto exit; + appendLineStringBuf(spec->prep, chptr); + free(chptr); + } + + appendStringBuf(spec->prep, getStringBuf(after)); + + /* Fix the permissions of the setup build tree */ + { char *fix = rpmExpand("%{_fixperms} .", NULL); + if (fix && *fix != '%') { + appendLineStringBuf(spec->prep, fix); + } + free(fix); + } + rc = RPMRC_OK; + +exit: + freeStringBuf(before); + freeStringBuf(after); + poptFreeContext(optCon); + free(argv); + + return rc; +} + +/** + * Parse %patch line. + * This supports too many crazy syntaxes: + * - %patchN is equal to %patch -P + * - -P -P... can be used to apply several patch on a single line + * - Any trailing arguments are treated as patch numbers + * - Any combination of the above, except unless at least one -P is specified, + * %patch is treated as %patch -P0 so that "%patch 1" is actually + * equal to "%patch -P0 -P1". + * + * @param spec build info + * @param line current line from spec file + * @return RPMRC_OK on success + */ +static rpmRC doPatchMacro(rpmSpec spec, const char *line) +{ + char *opt_b, *opt_P, *opt_d; + char *buf = NULL; + int opt_p, opt_R, opt_E, opt_F; + int argc, c; + const char **argv = NULL; + ARGV_t patch, patchnums = NULL; + rpmRC rc = RPMRC_FAIL; /* assume failure */ + + struct poptOption const patchOpts[] = { + { NULL, 'P', POPT_ARG_STRING, &opt_P, 'P', NULL, NULL }, + { NULL, 'p', POPT_ARG_INT, &opt_p, 'p', NULL, NULL }, + { NULL, 'R', POPT_ARG_NONE, &opt_R, 'R', NULL, NULL }, + { NULL, 'E', POPT_ARG_NONE, &opt_E, 'E', NULL, NULL }, + { NULL, 'b', POPT_ARG_STRING, &opt_b, 'b', NULL, NULL }, + { NULL, 'z', POPT_ARG_STRING, &opt_b, 'z', NULL, NULL }, + { NULL, 'F', POPT_ARG_INT, &opt_F, 'F', NULL, NULL }, + { NULL, 'd', POPT_ARG_STRING, &opt_d, 'd', NULL, NULL }, + { NULL, 0, 0, NULL, 0, NULL, NULL } + }; + poptContext optCon = NULL; + + opt_p = opt_R = opt_E = 0; + opt_F = rpmExpandNumeric("%{_default_patch_fuzz}"); /* get default fuzz factor for %patch */ + opt_b = opt_d = NULL; + + /* Convert %patchN to %patch -PN to simplify further processing */ + if (! strchr(" \t\n", line[6])) { + rasprintf(&buf, "%%patch -P %s", line + 6); + } else { + if (strstr(line+6, " -P") == NULL) + rasprintf(&buf, "%%patch -P %d %s", INT_MAX, line + 6); /* INT_MAX denotes not numbered %patch */ + else + buf = xstrdup(line); /* it is not numberless patch because -P is present */ + } + poptParseArgvString(buf, &argc, &argv); + free(buf); + + /* + * Grab all -P numbers for later processing. Stored as strings + * at this point so we only have to worry about conversion in one place. + */ + optCon = poptGetContext(NULL, argc, argv, patchOpts, 0); + while ((c = poptGetNextOpt(optCon)) > 0) { + switch (c) { + case 'P': { + char *arg = poptGetOptArg(optCon); + if (arg) { + argvAdd(&patchnums, arg); + free(arg); + } + break; + } + default: + break; + } + } + + if (c < -1) { + rpmlog(RPMLOG_ERR, _("%s: %s: %s\n"), poptStrerror(c), + poptBadOption(optCon, POPT_BADOPTION_NOALIAS), line); + goto exit; + } + + /* Any trailing arguments are treated as patch numbers */ + argvAppend(&patchnums, (ARGV_const_t) poptGetArgs(optCon)); + + /* Convert to number, generate patch command and append to %prep script */ + for (patch = patchnums; *patch; patch++) { + uint32_t pnum; + char *s; + if (parseUnsignedNum(*patch, &pnum)) { + rpmlog(RPMLOG_ERR, _("Invalid patch number %s: %s\n"), + *patch, line); + goto exit; + } + s = doPatch(spec, pnum, opt_p, opt_b, opt_R, opt_E, opt_F, opt_d); + if (s == NULL) { + goto exit; + } + appendLineStringBuf(spec->prep, s); + free(s); + } + + rc = RPMRC_OK; + +exit: + argvFree(patchnums); + free(argv); + poptFreeContext(optCon); + return rc; +} + +int parsePrep(rpmSpec spec) +{ + int nextPart, rc, res = PART_ERROR; + ARGV_t saveLines = NULL; + + if (spec->prep != NULL) { + rpmlog(RPMLOG_ERR, _("line %d: second %%prep\n"), spec->lineNum); + return PART_ERROR; + } + + spec->prep = newStringBuf(); + + /* There are no options to %prep */ + if ((rc = readLine(spec, STRIP_NOTHING)) > 0) { + return PART_NONE; + } else if (rc < 0) { + return PART_ERROR; + } + + while (! (nextPart = isPart(spec->line))) { + /* Need to expand the macros inline. That way we */ + /* can give good line number information on error. */ + argvAdd(&saveLines, spec->line); + if ((rc = readLine(spec, STRIP_NOTHING)) > 0) { + nextPart = PART_NONE; + break; + } else if (rc < 0) { + goto exit; + } + } + + for (ARGV_const_t lines = saveLines; lines && *lines; lines++) { + rc = RPMRC_OK; + if (rstreqn(*lines, "%setup", sizeof("%setup")-1)) { + rc = doSetupMacro(spec, *lines); + } else if (rstreqn(*lines, "%patch", sizeof("%patch")-1)) { + rc = doPatchMacro(spec, *lines); + } else { + appendStringBuf(spec->prep, *lines); + } + if (rc != RPMRC_OK && !(spec->flags & RPMSPEC_FORCE)) { + goto exit; + } + } + res = nextPart; + +exit: + argvFree(saveLines); + + return res; +} diff --git a/build/parseReqs.c b/build/parseReqs.c new file mode 100644 index 0000000..de2680c --- /dev/null +++ b/build/parseReqs.c @@ -0,0 +1,189 @@ +/** \ingroup rpmbuild + * \file build/parseReqs.c + * Parse dependency tag from spec file or from auto-dependency generator. + */ + +#include "system.h" + +#include +#include +#include +#include "build/rpmbuild_internal.h" +#include "build/rpmbuild_misc.h" +#include "debug.h" + +/** + */ +static struct ReqComp { +const char * token; + rpmsenseFlags sense; +} const ReqComparisons[] = { + { "<=", RPMSENSE_LESS | RPMSENSE_EQUAL}, + { "=<", RPMSENSE_LESS | RPMSENSE_EQUAL}, + { "<", RPMSENSE_LESS}, + + { "==", RPMSENSE_EQUAL}, + { "=", RPMSENSE_EQUAL}, + + { ">=", RPMSENSE_GREATER | RPMSENSE_EQUAL}, + { "=>", RPMSENSE_GREATER | RPMSENSE_EQUAL}, + { ">", RPMSENSE_GREATER}, + + { NULL, 0 }, +}; + +#define SKIPWHITE(_x) {while(*(_x) && (risspace(*_x) || *(_x) == ',')) (_x)++;} +#define SKIPNONWHITE(_x){while(*(_x) &&!(risspace(*_x) || *(_x) == ',')) (_x)++;} + +rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char *field, rpmTagVal tagN, + int index, rpmsenseFlags tagflags) +{ + const char *r, *re, *v, *ve; + const char *emsg = NULL; + char * N = NULL, * EVR = NULL; + rpmTagVal nametag = RPMTAG_NOT_FOUND; + rpmsenseFlags Flags; + Header h = pkg->header; /* everything except buildrequires go here */ + rpmRC rc = RPMRC_FAIL; /* assume failure */ + + switch (tagN) { + default: + case RPMTAG_REQUIREFLAGS: + nametag = RPMTAG_REQUIRENAME; + tagflags |= RPMSENSE_ANY; + break; + case RPMTAG_PROVIDEFLAGS: + nametag = RPMTAG_PROVIDENAME; + break; + case RPMTAG_OBSOLETEFLAGS: + nametag = RPMTAG_OBSOLETENAME; + break; + case RPMTAG_CONFLICTFLAGS: + nametag = RPMTAG_CONFLICTNAME; + break; + case RPMTAG_ORDERFLAGS: + nametag = RPMTAG_ORDERNAME; + break; + case RPMTAG_PREREQ: + /* XXX map legacy PreReq into Requires(pre,preun) */ + nametag = RPMTAG_REQUIRENAME; + tagflags |= (RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_PREUN); + break; + case RPMTAG_TRIGGERPREIN: + nametag = RPMTAG_TRIGGERNAME; + tagflags |= RPMSENSE_TRIGGERPREIN; + break; + case RPMTAG_TRIGGERIN: + nametag = RPMTAG_TRIGGERNAME; + tagflags |= RPMSENSE_TRIGGERIN; + break; + case RPMTAG_TRIGGERPOSTUN: + nametag = RPMTAG_TRIGGERNAME; + tagflags |= RPMSENSE_TRIGGERPOSTUN; + break; + case RPMTAG_TRIGGERUN: + nametag = RPMTAG_TRIGGERNAME; + tagflags |= RPMSENSE_TRIGGERUN; + break; + case RPMTAG_BUILDPREREQ: + case RPMTAG_BUILDREQUIRES: + nametag = RPMTAG_REQUIRENAME; + tagflags |= RPMSENSE_ANY; + h = spec->buildRestrictions; + break; + case RPMTAG_BUILDCONFLICTS: + nametag = RPMTAG_CONFLICTNAME; + h = spec->buildRestrictions; + break; + } + + for (r = field; *r != '\0'; r = re) { + SKIPWHITE(r); + if (*r == '\0') + break; + + Flags = (tagflags & ~RPMSENSE_SENSEMASK); + + /* + * Tokens must begin with alphanumeric, _, or /, but we don't know + * the spec's encoding so we only check what we can: plain ascii. + */ + if (isascii(r[0]) && !(risalnum(r[0]) || r[0] == '_' || r[0] == '/')) { + emsg = _("Dependency tokens must begin with alpha-numeric, '_' or '/'"); + goto exit; + } + + re = r; + SKIPNONWHITE(re); + N = xmalloc((re-r) + 1); + rstrlcpy(N, r, (re-r) + 1); + + /* Parse EVR */ + v = re; + SKIPWHITE(v); + ve = v; + SKIPNONWHITE(ve); + + re = v; /* ==> next token (if no EVR found) starts here */ + + /* Check for possible logical operator */ + if (ve > v) { + const struct ReqComp *rc; + for (rc = ReqComparisons; rc->token != NULL; rc++) { + if ((ve-v) != strlen(rc->token) || !rstreqn(v, rc->token, (ve-v))) + continue; + + if (r[0] == '/') { + emsg = _("Versioned file name not permitted"); + goto exit; + } + + Flags |= rc->sense; + + /* now parse EVR */ + v = ve; + SKIPWHITE(v); + ve = v; + SKIPNONWHITE(ve); + break; + } + } + + if (Flags & RPMSENSE_SENSEMASK) { + if (*v == '\0' || ve == v) { + emsg = _("Version required"); + goto exit; + } + EVR = xmalloc((ve-v) + 1); + rstrlcpy(EVR, v, (ve-v) + 1); + if (rpmCharCheck(spec, EVR, ve-v, ".-_+:%{}")) goto exit; + re = ve; /* ==> next token after EVR string starts here */ + } else + EVR = NULL; + + if (addReqProv(h, nametag, N, EVR, Flags, index)) { + emsg = _("invalid dependency"); + goto exit; + } + + N = _free(N); + EVR = _free(EVR); + + } + rc = RPMRC_OK; + +exit: + if (emsg) { + /* Automatic dependencies don't relate to spec lines */ + if (tagflags & (RPMSENSE_FIND_REQUIRES|RPMSENSE_FIND_PROVIDES)) { + rpmlog(RPMLOG_ERR, "%s: %s\n", emsg, r); + } else { + rpmlog(RPMLOG_ERR, _("line %d: %s: %s\n"), + spec->lineNum, emsg, spec->line); + } + } + free(N); + free(EVR); + + return rc; +} diff --git a/build/parseScript.c b/build/parseScript.c new file mode 100644 index 0000000..87b3d58 --- /dev/null +++ b/build/parseScript.c @@ -0,0 +1,389 @@ +/** \ingroup rpmbuild + * \file build/parseScript.c + * Parse install-time script section from spec file. + */ + +#include "system.h" + +#include +#include + +#include "rpmio/rpmlua.h" +#include "lib/rpmscript.h" /* script flags */ +#include "build/rpmbuild_internal.h" +#include "build/rpmbuild_misc.h" + +#include "debug.h" + + +/** + */ +static int addTriggerIndex(Package pkg, const char *file, + const char *script, const char *prog, rpmscriptFlags flags) +{ + struct TriggerFileEntry *tfe; + struct TriggerFileEntry *list = pkg->triggerFiles; + struct TriggerFileEntry *last = NULL; + int index = 0; + + while (list) { + last = list; + list = list->next; + } + + if (last) + index = last->index + 1; + + tfe = xcalloc(1, sizeof(*tfe)); + + tfe->fileName = (file) ? xstrdup(file) : NULL; + tfe->script = (script && *script != '\0') ? xstrdup(script) : NULL; + tfe->prog = xstrdup(prog); + tfe->flags = flags; + tfe->index = index; + tfe->next = NULL; + + if (last) + last->next = tfe; + else + pkg->triggerFiles = tfe; + + return index; +} + +/* %trigger is a strange combination of %pre and Requires: behavior */ +/* We can handle it by parsing the args before "--" in parseScript. */ +/* We then pass the remaining arguments to parseRCPOT, along with */ +/* an index we just determined. */ + +int parseScript(rpmSpec spec, int parsePart) +{ + /* There are a few options to scripts: */ + /* */ + /* -n */ + /* -p */ + /* -p " ..." */ + /* -f */ + + const char *p; + const char **progArgv = NULL; + int progArgc; + const char *partname = NULL; + rpmTagVal reqtag = 0; + rpmTagVal tag = 0; + rpmsenseFlags tagflags = 0; + rpmTagVal progtag = 0; + rpmTagVal flagtag = 0; + rpmscriptFlags scriptFlags = 0; + int flag = PART_SUBNAME; + Package pkg; + StringBuf sb = NULL; + int nextPart; + int index; + char * reqargs = NULL; + + int res = PART_ERROR; /* assume failure */ + int rc, argc; + int arg; + const char **argv = NULL; + poptContext optCon = NULL; + const char *name = NULL; + const char *prog = "/bin/sh"; + const char *file = NULL; + int expand = 0; + int qformat = 0; + struct poptOption optionsTable[] = { + { NULL, 'p', POPT_ARG_STRING, &prog, 'p', NULL, NULL}, + { NULL, 'n', POPT_ARG_STRING, &name, 'n', NULL, NULL}, + { NULL, 'f', POPT_ARG_STRING, &file, 'f', NULL, NULL}, + { NULL, 'e', POPT_ARG_NONE, &expand, 'e', NULL, NULL}, + { NULL, 'q', POPT_ARG_NONE, &qformat, 'q', NULL, NULL}, + { 0, 0, 0, 0, 0, NULL, NULL} + }; + + switch (parsePart) { + case PART_PRE: + tag = RPMTAG_PREIN; + tagflags = RPMSENSE_SCRIPT_PRE; + progtag = RPMTAG_PREINPROG; + flagtag = RPMTAG_PREINFLAGS; + partname = "%pre"; + break; + case PART_POST: + tag = RPMTAG_POSTIN; + tagflags = RPMSENSE_SCRIPT_POST; + progtag = RPMTAG_POSTINPROG; + flagtag = RPMTAG_POSTINFLAGS; + partname = "%post"; + break; + case PART_PREUN: + tag = RPMTAG_PREUN; + tagflags = RPMSENSE_SCRIPT_PREUN; + progtag = RPMTAG_PREUNPROG; + flagtag = RPMTAG_PREUNFLAGS; + partname = "%preun"; + break; + case PART_POSTUN: + tag = RPMTAG_POSTUN; + tagflags = RPMSENSE_SCRIPT_POSTUN; + progtag = RPMTAG_POSTUNPROG; + flagtag = RPMTAG_POSTUNFLAGS; + partname = "%postun"; + break; + case PART_PRETRANS: + tag = RPMTAG_PRETRANS; + tagflags = RPMSENSE_PRETRANS; + progtag = RPMTAG_PRETRANSPROG; + flagtag = RPMTAG_PRETRANSFLAGS; + partname = "%pretrans"; + break; + case PART_POSTTRANS: + tag = RPMTAG_POSTTRANS; + tagflags = RPMSENSE_POSTTRANS; + progtag = RPMTAG_POSTTRANSPROG; + flagtag = RPMTAG_POSTTRANSFLAGS; + partname = "%posttrans"; + break; + case PART_VERIFYSCRIPT: + tag = RPMTAG_VERIFYSCRIPT; + tagflags = RPMSENSE_SCRIPT_VERIFY; + progtag = RPMTAG_VERIFYSCRIPTPROG; + flagtag = RPMTAG_VERIFYSCRIPTFLAGS; + partname = "%verifyscript"; + break; + case PART_TRIGGERPREIN: + tag = RPMTAG_TRIGGERSCRIPTS; + tagflags = 0; + reqtag = RPMTAG_TRIGGERPREIN; + progtag = RPMTAG_TRIGGERSCRIPTPROG; + flagtag = RPMTAG_TRIGGERSCRIPTFLAGS; + partname = "%triggerprein"; + break; + case PART_TRIGGERIN: + tag = RPMTAG_TRIGGERSCRIPTS; + tagflags = 0; + reqtag = RPMTAG_TRIGGERIN; + progtag = RPMTAG_TRIGGERSCRIPTPROG; + flagtag = RPMTAG_TRIGGERSCRIPTFLAGS; + partname = "%triggerin"; + break; + case PART_TRIGGERUN: + tag = RPMTAG_TRIGGERSCRIPTS; + tagflags = 0; + reqtag = RPMTAG_TRIGGERUN; + progtag = RPMTAG_TRIGGERSCRIPTPROG; + flagtag = RPMTAG_TRIGGERSCRIPTFLAGS; + partname = "%triggerun"; + break; + case PART_TRIGGERPOSTUN: + tag = RPMTAG_TRIGGERSCRIPTS; + tagflags = 0; + reqtag = RPMTAG_TRIGGERPOSTUN; + progtag = RPMTAG_TRIGGERSCRIPTPROG; + flagtag = RPMTAG_TRIGGERSCRIPTFLAGS; + partname = "%triggerpostun"; + break; + } + + if (tag == RPMTAG_TRIGGERSCRIPTS) { + /* break line into two */ + char *s = strstr(spec->line, "--"); + if (!s) { + rpmlog(RPMLOG_ERR, _("line %d: triggers must have --: %s\n"), + spec->lineNum, spec->line); + return PART_ERROR; + } + + *s = '\0'; + reqargs = xstrdup(s + 2); + } + + if ((rc = poptParseArgvString(spec->line, &argc, &argv))) { + rpmlog(RPMLOG_ERR, _("line %d: Error parsing %s: %s\n"), + spec->lineNum, partname, poptStrerror(rc)); + goto exit; + } + + optCon = poptGetContext(NULL, argc, argv, optionsTable, 0); + while ((arg = poptGetNextOpt(optCon)) > 0) { + switch (arg) { + case 'p': + if (prog[0] == '<') { + if (prog[strlen(prog)-1] != '>') { + rpmlog(RPMLOG_ERR, + _("line %d: internal script must end " + "with \'>\': %s\n"), spec->lineNum, prog); + goto exit; + } + } else if (prog[0] != '/') { + rpmlog(RPMLOG_ERR, + _("line %d: script program must begin " + "with \'/\': %s\n"), spec->lineNum, prog); + goto exit; + } + break; + case 'n': + flag = PART_NAME; + break; + } + } + + if (arg < -1) { + rpmlog(RPMLOG_ERR, _("line %d: Bad option %s: %s\n"), + spec->lineNum, + poptBadOption(optCon, POPT_BADOPTION_NOALIAS), + spec->line); + goto exit; + } + + if (poptPeekArg(optCon)) { + if (name == NULL) + name = poptGetArg(optCon); + if (poptPeekArg(optCon)) { + rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"), + spec->lineNum, + spec->line); + goto exit; + } + } + + if (lookupPackage(spec, name, flag, &pkg)) { + rpmlog(RPMLOG_ERR, _("line %d: Package does not exist: %s\n"), + spec->lineNum, spec->line); + goto exit; + } + + if (tag != RPMTAG_TRIGGERSCRIPTS) { + if (headerIsEntry(pkg->header, progtag)) { + rpmlog(RPMLOG_ERR, _("line %d: Second %s\n"), + spec->lineNum, partname); + goto exit; + } + } + + if ((rc = poptParseArgvString(prog, &progArgc, &progArgv))) { + rpmlog(RPMLOG_ERR, _("line %d: Error parsing %s: %s\n"), + spec->lineNum, partname, poptStrerror(rc)); + goto exit; + } + + scriptFlags |= expand ? RPMSCRIPT_EXPAND : 0; + scriptFlags |= qformat ? RPMSCRIPT_QFORMAT : 0; + + sb = newStringBuf(); + if ((rc = readLine(spec, STRIP_NOTHING)) > 0) { + nextPart = PART_NONE; + } else if (rc < 0) { + goto exit; + } else { + while (! (nextPart = isPart(spec->line))) { + appendStringBuf(sb, spec->line); + if ((rc = readLine(spec, STRIP_NOTHING)) > 0) { + nextPart = PART_NONE; + break; + } else if (rc < 0) { + goto exit; + } + } + } + stripTrailingBlanksStringBuf(sb); + p = getStringBuf(sb); + +#ifdef WITH_LUA + if (rstreq(progArgv[0], "")) { + rpmlua lua = NULL; /* Global state. */ + if (rpmluaCheckScript(lua, p, partname) != RPMRC_OK) { + goto exit; + } + (void) rpmlibNeedsFeature(pkg->header, + "BuiltinLuaScripts", "4.2.2-1"); + } else +#endif + if (progArgv[0][0] == '<') { + rpmlog(RPMLOG_ERR, + _("line %d: unsupported internal script: %s\n"), + spec->lineNum, progArgv[0]); + goto exit; + } else { + (void) addReqProv(pkg->header, RPMTAG_REQUIRENAME, + progArgv[0], NULL, (tagflags | RPMSENSE_INTERP), 0); + } + + if (scriptFlags) { + rpmlibNeedsFeature(pkg->header, "ScriptletExpansion", "4.9.0-1"); + } + + /* Trigger script insertion is always delayed in order to */ + /* get the index right. */ + if (tag == RPMTAG_TRIGGERSCRIPTS) { + /* Add file/index/prog triple to the trigger file list */ + index = addTriggerIndex(pkg, file, p, progArgv[0], scriptFlags); + + /* Generate the trigger tags */ + if ((rc = parseRCPOT(spec, pkg, reqargs, reqtag, index, tagflags))) + goto exit; + } else { + struct rpmtd_s td; + + /* + * XXX Ancient rpm uses STRING, not STRING_ARRAY type here. Construct + * the td manually and preserve legacy compat for now... + */ + rpmtdReset(&td); + td.tag = progtag; + td.count = progArgc; + if (progArgc == 1) { + td.data = (void *) *progArgv; + td.type = RPM_STRING_TYPE; + } else { + (void) rpmlibNeedsFeature(pkg->header, + "ScriptletInterpreterArgs", "4.0.3-1"); + td.data = progArgv; + td.type = RPM_STRING_ARRAY_TYPE; + } + headerPut(pkg->header, &td, HEADERPUT_DEFAULT); + + if (*p != '\0') { + headerPutString(pkg->header, tag, p); + } + if (scriptFlags) { + headerPutUint32(pkg->header, flagtag, &scriptFlags, 1); + } + + if (file) { + switch (parsePart) { + case PART_PRE: + pkg->preInFile = xstrdup(file); + break; + case PART_POST: + pkg->postInFile = xstrdup(file); + break; + case PART_PREUN: + pkg->preUnFile = xstrdup(file); + break; + case PART_POSTUN: + pkg->postUnFile = xstrdup(file); + break; + case PART_PRETRANS: + pkg->preTransFile = xstrdup(file); + break; + case PART_POSTTRANS: + pkg->postTransFile = xstrdup(file); + break; + case PART_VERIFYSCRIPT: + pkg->verifyFile = xstrdup(file); + break; + } + } + } + res = nextPart; + +exit: + free(reqargs); + sb = freeStringBuf(sb); + progArgv = _free(progArgv); + argv = _free(argv); + optCon = poptFreeContext(optCon); + + return res; +} diff --git a/build/parseSpec.c b/build/parseSpec.c new file mode 100644 index 0000000..01620bd --- /dev/null +++ b/build/parseSpec.c @@ -0,0 +1,698 @@ +/** \ingroup rpmbuild + * \file build/parseSpec.c + * Top level dispatcher for spec file parsing. + */ + +#include "system.h" + +#include + +#include +#include /* RPM_MACHTABLE & related */ +#include +#include +#include +#include +#include "build/rpmbuild_internal.h" +#include "build/rpmbuild_misc.h" +#include "debug.h" + +#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; } +#define SKIPNONSPACE(s) { while (*(s) && !risspace(*(s))) (s)++; } + +#define LEN_AND_STR(_tag) (sizeof(_tag)-1), (_tag) + +typedef struct OpenFileInfo { + char * fileName; + FILE *fp; + int lineNum; + char readBuf[BUFSIZ]; + char * readPtr; + struct OpenFileInfo * next; +} OFI_t; + +static const struct PartRec { + int part; + size_t len; + const char * token; +} partList[] = { + { PART_PREAMBLE, LEN_AND_STR("%package")}, + { PART_PREP, LEN_AND_STR("%prep")}, + { PART_BUILD, LEN_AND_STR("%build")}, + { PART_INSTALL, LEN_AND_STR("%install")}, + { PART_CHECK, LEN_AND_STR("%check")}, + { PART_CLEAN, LEN_AND_STR("%clean")}, + { PART_PREUN, LEN_AND_STR("%preun")}, + { PART_POSTUN, LEN_AND_STR("%postun")}, + { PART_PRETRANS, LEN_AND_STR("%pretrans")}, + { PART_POSTTRANS, LEN_AND_STR("%posttrans")}, + { PART_PRE, LEN_AND_STR("%pre")}, + { PART_POST, LEN_AND_STR("%post")}, + { PART_FILES, LEN_AND_STR("%files")}, + { PART_CHANGELOG, LEN_AND_STR("%changelog")}, + { PART_DESCRIPTION, LEN_AND_STR("%description")}, + { PART_TRIGGERPOSTUN, LEN_AND_STR("%triggerpostun")}, + { PART_TRIGGERPREIN, LEN_AND_STR("%triggerprein")}, + { PART_TRIGGERUN, LEN_AND_STR("%triggerun")}, + { PART_TRIGGERIN, LEN_AND_STR("%triggerin")}, + { PART_TRIGGERIN, LEN_AND_STR("%trigger")}, + { PART_VERIFYSCRIPT, LEN_AND_STR("%verifyscript")}, + { PART_POLICIES, LEN_AND_STR("%sepolicy")}, + {0, 0, 0} +}; + +int isPart(const char *line) +{ + const struct PartRec *p; + + for (p = partList; p->token != NULL; p++) { + char c; + if (rstrncasecmp(line, p->token, p->len)) + continue; + c = *(line + p->len); + if (c == '\0' || risspace(c)) + break; + } + + return (p->token ? p->part : PART_NONE); +} + +/** + */ +static int matchTok(const char *token, const char *line) +{ + const char *b, *be = line; + size_t toklen = strlen(token); + int rc = 0; + + while ( *(b = be) != '\0' ) { + SKIPSPACE(b); + be = b; + SKIPNONSPACE(be); + if (be == b) + break; + if (toklen != (be-b) || rstrncasecmp(token, b, (be-b))) + continue; + rc = 1; + break; + } + + return rc; +} + +void handleComments(char *s) +{ + SKIPSPACE(s); + if (*s == '#') + *s = '\0'; +} + +static struct OpenFileInfo * newOpenFileInfo(void) +{ + struct OpenFileInfo *ofi; + + ofi = xmalloc(sizeof(*ofi)); + ofi->fp = NULL; + ofi->fileName = NULL; + ofi->lineNum = 0; + ofi->readBuf[0] = '\0'; + ofi->readPtr = NULL; + ofi->next = NULL; + + return ofi; +} + +/** + */ +static void forceIncludeFile(rpmSpec spec, const char * fileName) +{ + OFI_t * ofi; + + ofi = newOpenFileInfo(); + ofi->fileName = xstrdup(fileName); + ofi->next = spec->fileStack; + spec->fileStack = ofi; +} + +static int restoreFirstChar(rpmSpec spec) +{ + /* Restore 1st char in (possible) next line */ + if (spec->nextline != NULL && spec->nextpeekc != '\0') { + *spec->nextline = spec->nextpeekc; + spec->nextpeekc = '\0'; + return 1; + } + return 0; +} + +/* Return zero on success, 1 if we need to read more and -1 on errors. */ +static int copyNextLineFromOFI(rpmSpec spec, OFI_t *ofi) +{ + char ch; + + /* Expand next line from file into line buffer */ + if (!(spec->nextline && *spec->nextline)) { + int pc = 0, bc = 0, nc = 0; + char *from, *to, *p; + to = spec->lbufPtr ? spec->lbufPtr : spec->lbuf; + from = ofi->readPtr; + ch = ' '; + while (from && *from && ch != '\n') + ch = *to++ = *from++; + spec->lbufPtr = to; + *to++ = '\0'; + ofi->readPtr = from; + + /* Check if we need another line before expanding the buffer. */ + for (p = spec->lbuf; *p; p++) { + switch (*p) { + case '\\': + switch (*(p+1)) { + case '\n': p++, nc = 1; break; + case '\0': break; + default: p++; break; + } + break; + case '\n': nc = 0; break; + case '%': + switch (*(p+1)) { + case '{': p++, bc++; break; + case '(': p++, pc++; break; + case '%': p++; break; + } + break; + case '{': if (bc > 0) bc++; break; + case '}': if (bc > 0) bc--; break; + case '(': if (pc > 0) pc++; break; + case ')': if (pc > 0) pc--; break; + } + } + + /* If it doesn't, ask for one more line. */ + if (pc || bc || nc ) { + spec->nextline = ""; + return 1; + } + spec->lbufPtr = spec->lbuf; + + /* Don't expand macros (eg. %define) in false branch of %if clause */ + if (spec->readStack->reading && + expandMacros(spec, spec->macros, spec->lbuf, sizeof(spec->lbuf))) { + rpmlog(RPMLOG_ERR, _("line %d: %s\n"), + spec->lineNum, spec->lbuf); + return -1; + } + spec->nextline = spec->lbuf; + } + return 0; +} + +static void copyNextLineFinish(rpmSpec spec, int strip) +{ + char *last; + char ch; + + /* Find next line in expanded line buffer */ + spec->line = last = spec->nextline; + ch = ' '; + while (*spec->nextline && ch != '\n') { + ch = *spec->nextline++; + if (!risspace(ch)) + last = spec->nextline; + } + + /* Save 1st char of next line in order to terminate current line. */ + if (*spec->nextline != '\0') { + spec->nextpeekc = *spec->nextline; + *spec->nextline = '\0'; + } + + if (strip & STRIP_COMMENTS) + handleComments(spec->line); + + if (strip & STRIP_TRAILINGSPACE) + *last = '\0'; +} + +static int readLineFromOFI(rpmSpec spec, OFI_t *ofi) +{ +retry: + /* Make sure the current file is open */ + if (ofi->fp == NULL) { + ofi->fp = fopen(ofi->fileName, "r"); + if (ofi->fp == NULL || ferror(ofi->fp)) { + /* XXX Fstrerror */ + rpmlog(RPMLOG_ERR, _("Unable to open %s: %s\n"), + ofi->fileName, strerror(errno)); + return PART_ERROR; + } + spec->lineNum = ofi->lineNum = 0; + } + + /* Make sure we have something in the read buffer */ + if (!(ofi->readPtr && *(ofi->readPtr))) { + if (!fgets(ofi->readBuf, BUFSIZ, ofi->fp)) { + /* EOF */ + if (spec->readStack->next) { + rpmlog(RPMLOG_ERR, _("Unclosed %%if\n")); + return PART_ERROR; + } + + /* remove this file from the stack */ + spec->fileStack = ofi->next; + fclose(ofi->fp); + ofi->fileName = _free(ofi->fileName); + ofi = _free(ofi); + + /* only on last file do we signal EOF to caller */ + ofi = spec->fileStack; + if (ofi == NULL) + return 1; + + /* otherwise, go back and try the read again. */ + goto retry; + } + ofi->readPtr = ofi->readBuf; + ofi->lineNum++; + spec->lineNum = ofi->lineNum; + } + return 0; +} + +int readLine(rpmSpec spec, int strip) +{ + char *s; + int match; + struct ReadLevelEntry *rl; + OFI_t *ofi = spec->fileStack; + int rc; + int startLine = 0; + + if (!restoreFirstChar(spec)) { + retry: + if ((rc = readLineFromOFI(spec, ofi)) != 0) { + if (startLine > 0) { + rpmlog(RPMLOG_ERR, + _("line %d: unclosed macro or bad line continuation\n"), + startLine); + rc = PART_ERROR; + } + return rc; + } + ofi = spec->fileStack; + + /* Copy next file line into the spec line buffer */ + rc = copyNextLineFromOFI(spec, ofi); + if (rc > 0) { + if (startLine == 0) + startLine = spec->lineNum; + goto retry; + } else if (rc < 0) { + return PART_ERROR; + } + } + + copyNextLineFinish(spec, strip); + + s = spec->line; + SKIPSPACE(s); + + match = -1; + if (!spec->readStack->reading && rstreqn("%if", s, sizeof("%if")-1)) { + match = 0; + } else if (rstreqn("%ifarch", s, sizeof("%ifarch")-1)) { + char *arch = rpmExpand("%{_target_cpu}", NULL); + s += 7; + match = matchTok(arch, s); + arch = _free(arch); + } else if (rstreqn("%ifnarch", s, sizeof("%ifnarch")-1)) { + char *arch = rpmExpand("%{_target_cpu}", NULL); + s += 8; + match = !matchTok(arch, s); + arch = _free(arch); + } else if (rstreqn("%ifos", s, sizeof("%ifos")-1)) { + char *os = rpmExpand("%{_target_os}", NULL); + s += 5; + match = matchTok(os, s); + os = _free(os); + } else if (rstreqn("%ifnos", s, sizeof("%ifnos")-1)) { + char *os = rpmExpand("%{_target_os}", NULL); + s += 6; + match = !matchTok(os, s); + os = _free(os); + } else if (rstreqn("%if", s, sizeof("%if")-1)) { + s += 3; + match = parseExpressionBoolean(spec, s); + if (match < 0) { + rpmlog(RPMLOG_ERR, + _("%s:%d: parseExpressionBoolean returns %d\n"), + ofi->fileName, ofi->lineNum, match); + return PART_ERROR; + } + } else if (rstreqn("%else", s, sizeof("%else")-1)) { + s += 5; + if (! spec->readStack->next) { + /* Got an else with no %if ! */ + rpmlog(RPMLOG_ERR, + _("%s:%d: Got a %%else with no %%if\n"), + ofi->fileName, ofi->lineNum); + return PART_ERROR; + } + spec->readStack->reading = + spec->readStack->next->reading && ! spec->readStack->reading; + spec->line[0] = '\0'; + } else if (rstreqn("%endif", s, sizeof("%endif")-1)) { + s += 6; + if (! spec->readStack->next) { + /* Got an end with no %if ! */ + rpmlog(RPMLOG_ERR, + _("%s:%d: Got a %%endif with no %%if\n"), + ofi->fileName, ofi->lineNum); + return PART_ERROR; + } + rl = spec->readStack; + spec->readStack = spec->readStack->next; + free(rl); + spec->line[0] = '\0'; + } else if (rstreqn("%include", s, sizeof("%include")-1)) { + char *fileName, *endFileName, *p; + + s += 8; + fileName = s; + if (! risspace(*fileName)) { + rpmlog(RPMLOG_ERR, _("malformed %%include statement\n")); + return PART_ERROR; + } + SKIPSPACE(fileName); + endFileName = fileName; + SKIPNONSPACE(endFileName); + p = endFileName; + SKIPSPACE(p); + if (*p != '\0') { + rpmlog(RPMLOG_ERR, _("malformed %%include statement\n")); + return PART_ERROR; + } + *endFileName = '\0'; + + forceIncludeFile(spec, fileName); + + ofi = spec->fileStack; + goto retry; + } + + if (match != -1) { + rl = xmalloc(sizeof(*rl)); + rl->reading = spec->readStack->reading && match; + rl->next = spec->readStack; + spec->readStack = rl; + spec->line[0] = '\0'; + } + + if (! spec->readStack->reading) { + spec->line[0] = '\0'; + } + + /* Collect parsed line */ + if (spec->parsed == NULL) + spec->parsed = newStringBuf(); + appendStringBufAux(spec->parsed, spec->line,(strip & STRIP_TRAILINGSPACE)); + + /* FIX: spec->readStack->next should be dependent */ + return 0; +} + +void closeSpec(rpmSpec spec) +{ + OFI_t *ofi; + + while (spec->fileStack) { + ofi = spec->fileStack; + spec->fileStack = spec->fileStack->next; + if (ofi->fp) (void) fclose(ofi->fp); + ofi->fileName = _free(ofi->fileName); + ofi = _free(ofi); + } +} + +static const rpmTagVal sourceTags[] = { + RPMTAG_NAME, + RPMTAG_VERSION, + RPMTAG_RELEASE, + RPMTAG_EPOCH, + RPMTAG_SUMMARY, + RPMTAG_DESCRIPTION, + RPMTAG_PACKAGER, + RPMTAG_DISTRIBUTION, + RPMTAG_DISTURL, + RPMTAG_VENDOR, + RPMTAG_LICENSE, + RPMTAG_GROUP, + RPMTAG_OS, + RPMTAG_ARCH, + RPMTAG_CHANGELOGTIME, + RPMTAG_CHANGELOGNAME, + RPMTAG_CHANGELOGTEXT, + RPMTAG_URL, + RPMTAG_BUGURL, + RPMTAG_HEADERI18NTABLE, + 0 +}; + +static void initSourceHeader(rpmSpec spec) +{ + HeaderIterator hi; + struct rpmtd_s td; + struct Source *srcPtr; + + spec->sourceHeader = headerNew(); + /* Only specific tags are added to the source package header */ + headerCopyTags(spec->packages->header, spec->sourceHeader, sourceTags); + + /* Add the build restrictions */ + hi = headerInitIterator(spec->buildRestrictions); + while (headerNext(hi, &td)) { + if (rpmtdCount(&td) > 0) { + (void) headerPut(spec->sourceHeader, &td, HEADERPUT_DEFAULT); + } + rpmtdFreeData(&td); + } + hi = headerFreeIterator(hi); + + if (spec->BANames && spec->BACount > 0) { + headerPutStringArray(spec->sourceHeader, RPMTAG_BUILDARCHS, + spec->BANames, spec->BACount); + } + + /* Add tags for sources and patches */ + for (srcPtr = spec->sources; srcPtr != NULL; srcPtr = srcPtr->next) { + if (srcPtr->flags & RPMBUILD_ISSOURCE) { + headerPutString(spec->sourceHeader, RPMTAG_SOURCE, srcPtr->source); + if (srcPtr->flags & RPMBUILD_ISNO) { + headerPutUint32(spec->sourceHeader, RPMTAG_NOSOURCE, + &srcPtr->num, 1); + } + } + if (srcPtr->flags & RPMBUILD_ISPATCH) { + headerPutString(spec->sourceHeader, RPMTAG_PATCH, srcPtr->source); + if (srcPtr->flags & RPMBUILD_ISNO) { + headerPutUint32(spec->sourceHeader, RPMTAG_NOPATCH, + &srcPtr->num, 1); + } + } + } +} + +static void addTargets(Package Pkgs) +{ + char *platform = rpmExpand("%{_target_platform}", NULL); + char *arch = rpmExpand("%{_target_cpu}", NULL); + char *os = rpmExpand("%{_target_os}", NULL); + + for (Package pkg = Pkgs; pkg != NULL; pkg = pkg->next) { + headerPutString(pkg->header, RPMTAG_OS, os); + /* noarch subpackages already have arch set here, leave it alone */ + if (!headerIsEntry(pkg->header, RPMTAG_ARCH)) { + headerPutString(pkg->header, RPMTAG_ARCH, arch); + } + headerPutString(pkg->header, RPMTAG_PLATFORM, platform); + + pkg->ds = rpmdsThis(pkg->header, RPMTAG_REQUIRENAME, RPMSENSE_EQUAL); + } + free(platform); + free(arch); + free(os); +} + +static rpmSpec parseSpec(const char *specFile, rpmSpecFlags flags, + const char *buildRoot, int recursing) +{ + int parsePart = PART_PREAMBLE; + int initialPackage = 1; + rpmSpec spec; + + /* Set up a new Spec structure with no packages. */ + spec = newSpec(); + + spec->specFile = rpmGetPath(specFile, NULL); + spec->fileStack = newOpenFileInfo(); + spec->fileStack->fileName = xstrdup(spec->specFile); + /* If buildRoot not specified, use default %{buildroot} */ + if (buildRoot) { + spec->buildRoot = xstrdup(buildRoot); + } else { + spec->buildRoot = rpmGetPath("%{?buildroot:%{buildroot}}", NULL); + } + addMacro(NULL, "_docdir", NULL, "%{_defaultdocdir}", RMIL_SPEC); + spec->recursing = recursing; + spec->flags = flags; + + /* All the parse*() functions expect to have a line pre-read */ + /* in the spec's line buffer. Except for parsePreamble(), */ + /* which handles the initial entry into a spec file. */ + + while (parsePart != PART_NONE) { + int goterror = 0; + switch (parsePart) { + case PART_ERROR: /* fallthrough */ + default: + goterror = 1; + break; + case PART_PREAMBLE: + parsePart = parsePreamble(spec, initialPackage); + initialPackage = 0; + break; + case PART_PREP: + parsePart = parsePrep(spec); + break; + case PART_BUILD: + case PART_INSTALL: + case PART_CHECK: + case PART_CLEAN: + parsePart = parseBuildInstallClean(spec, parsePart); + break; + case PART_CHANGELOG: + parsePart = parseChangelog(spec); + break; + case PART_DESCRIPTION: + parsePart = parseDescription(spec); + break; + + case PART_PRE: + case PART_POST: + case PART_PREUN: + case PART_POSTUN: + case PART_PRETRANS: + case PART_POSTTRANS: + case PART_VERIFYSCRIPT: + case PART_TRIGGERPREIN: + case PART_TRIGGERIN: + case PART_TRIGGERUN: + case PART_TRIGGERPOSTUN: + parsePart = parseScript(spec, parsePart); + break; + + case PART_FILES: + parsePart = parseFiles(spec); + break; + + case PART_POLICIES: + parsePart = parsePolicies(spec); + break; + + case PART_NONE: /* XXX avoid gcc whining */ + case PART_LAST: + case PART_BUILDARCHITECTURES: + break; + } + + if (goterror || parsePart >= PART_LAST) { + goto errxit; + } + + if (parsePart == PART_BUILDARCHITECTURES) { + int index; + int x; + + closeSpec(spec); + + spec->BASpecs = xcalloc(spec->BACount, sizeof(*spec->BASpecs)); + index = 0; + if (spec->BANames != NULL) + for (x = 0; x < spec->BACount; x++) { + + /* Skip if not arch is not compatible. */ + if (!rpmMachineScore(RPM_MACHTABLE_BUILDARCH, spec->BANames[x])) + continue; + addMacro(NULL, "_target_cpu", NULL, spec->BANames[x], RMIL_RPMRC); + spec->BASpecs[index] = parseSpec(specFile, flags, buildRoot, 1); + if (spec->BASpecs[index] == NULL) { + spec->BACount = index; + goto errxit; + } + delMacro(NULL, "_target_cpu"); + index++; + } + + spec->BACount = index; + if (! index) { + rpmlog(RPMLOG_ERR, + _("No compatible architectures found for build\n")); + goto errxit; + } + + /* + * Return the 1st child's fully parsed Spec structure. + * The restart of the parse when encountering BuildArch + * causes problems for "rpm -q --specfile". This is + * still a hack because there may be more than 1 arch + * specified (unlikely but possible.) There's also the + * further problem that the macro context, particularly + * %{_target_cpu}, disagrees with the info in the header. + */ + if (spec->BACount >= 1) { + rpmSpec nspec = spec->BASpecs[0]; + spec->BASpecs = _free(spec->BASpecs); + spec = rpmSpecFree(spec); + spec = nspec; + } + + goto exit; + } + } + + if (spec->clean == NULL) { + char *body = rpmExpand("%{?buildroot: %{__rm} -rf %{buildroot}}", NULL); + spec->clean = newStringBuf(); + appendLineStringBuf(spec->clean, body); + free(body); + } + + /* Check for description in each package */ + for (Package pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + if (!headerIsEntry(pkg->header, RPMTAG_DESCRIPTION)) { + rpmlog(RPMLOG_ERR, _("Package has no %%description: %s\n"), + headerGetString(pkg->header, RPMTAG_NAME)); + goto errxit; + } + } + + /* Add arch, os and platform for each package */ + addTargets(spec->packages); + + closeSpec(spec); +exit: + /* Assemble source header from parsed components */ + initSourceHeader(spec); + + return spec; + +errxit: + spec = rpmSpecFree(spec); + return NULL; +} + +rpmSpec rpmSpecParse(const char *specFile, rpmSpecFlags flags, + const char *buildRoot) +{ + return parseSpec(specFile, flags, buildRoot, 0); +} diff --git a/build/policies.c b/build/policies.c new file mode 100644 index 0000000..f8bb0c4 --- /dev/null +++ b/build/policies.c @@ -0,0 +1,316 @@ +/** \ingroup rpmbuild + * \file build/policies.c + * The post-build, packaging of policies + */ + +#include "system.h" + +#include +#include +#include +#include + +#include "rpmio/rpmio_internal.h" +#include "build/rpmbuild_internal.h" +#include "rpmio/base64.h" + +#include "debug.h" + +typedef struct ModuleRec_s { + char *path; + char *data; + char *name; + ARGV_t types; + uint32_t flags; +} *ModuleRec; + +static rpmRC writeModuleToHeader(ModuleRec mod, Package pkg) +{ + rpmRC rc = RPMRC_FAIL; + ARGV_t av; + uint32_t count; + struct rpmtd_s policies; + struct rpmtd_s policynames; + struct rpmtd_s policyflags; + struct rpmtd_s policytypes; + struct rpmtd_s policytypesidx; + rpmtdReset(&policies); + rpmtdReset(&policynames); + rpmtdReset(&policyflags); + rpmtdReset(&policytypes); + rpmtdReset(&policytypesidx); + + if (!mod || !pkg) { + goto exit; + } + + /* check for duplicates */ + if (headerIsEntry(pkg->header, RPMTAG_POLICYNAMES)) { + int typeCount; + const char *name; + char *type; + int i; + int idx; + + headerGet(pkg->header, RPMTAG_POLICYNAMES, &policynames, HEADERGET_MINMEM); + headerGet(pkg->header, RPMTAG_POLICYFLAGS, &policyflags, HEADERGET_ARGV | HEADERGET_MINMEM); + headerGet(pkg->header, RPMTAG_POLICYTYPES, &policytypes, HEADERGET_ARGV | HEADERGET_MINMEM); + headerGet(pkg->header, RPMTAG_POLICYTYPESINDEXES, &policytypesidx, HEADERGET_ARGV | HEADERGET_MINMEM); + typeCount = rpmtdCount(&policytypes); + + while ((name = rpmtdNextString(&policynames))) { + int overlappingtypes = 0; + + idx = rpmtdGetIndex(&policynames); + + for (i = 0; i < typeCount; i++) { + if (((int *) policytypesidx.data)[i] != idx) { + continue; + } + + type = ((char **) policytypes.data)[i]; + + if (rstreq(type, RPMPOL_TYPE_DEFAULT) || + argvSearch(mod->types, type, NULL) || + argvSearch(mod->types, RPMPOL_TYPE_DEFAULT, NULL)) { + overlappingtypes = 1; + break; + } + } + + if (!overlappingtypes) { + continue; + } + + if (rstreq(mod->name, name)) { + rpmlog(RPMLOG_ERR, _("Policy module '%s' duplicated with overlapping types\n"), name); + goto exit; + } + + if ((mod->flags && RPMPOL_FLAG_BASE) && + (((int *) policyflags.data)[idx] & RPMPOL_FLAG_BASE)) { + rpmlog(RPMLOG_ERR, _("Base modules '%s' and '%s' have overlapping types\n"), mod->name, name); + goto exit; + } + } + } + + if (headerIsEntry(pkg->header, RPMTAG_POLICIES)) { + if (!headerGet(pkg->header, RPMTAG_POLICIES, &policies, HEADERGET_MINMEM)) { + rpmlog(RPMLOG_ERR, _("Failed to get policies from header\n")); + goto exit; + } + count = rpmtdCount(&policies); + } else { + count = 0; + } + + /* save everything to the header */ + headerPutString(pkg->header, RPMTAG_POLICIES, mod->data); + headerPutString(pkg->header, RPMTAG_POLICYNAMES, mod->name); + headerPutUint32(pkg->header, RPMTAG_POLICYFLAGS, &mod->flags, 1); + + for (av = mod->types; av && *av; av++) { + headerPutString(pkg->header, RPMTAG_POLICYTYPES, *av); + headerPutUint32(pkg->header, RPMTAG_POLICYTYPESINDEXES, &count, 1); + } + + rc = RPMRC_OK; + + exit: + + rpmtdFreeData(&policies); + rpmtdFreeData(&policynames); + rpmtdFreeData(&policyflags); + rpmtdFreeData(&policytypes); + rpmtdFreeData(&policytypesidx); + + return rc; +} + +static ModuleRec freeModule(ModuleRec mod) +{ + if (mod) { + _free(mod->path); + _free(mod->data); + _free(mod->name); + argvFree(mod->types); + _free(mod); + } + + return NULL; +} + +static ModuleRec newModule(const char *path, const char *name, + const char *types, uint32_t flags) +{ + ModuleRec mod; + uint8_t *raw = NULL; + ssize_t rawlen = 0; + const char *buildDir = "%{_builddir}/%{?buildsubdir}/"; + + if (!path) { + rpmlog(RPMLOG_ERR, _("%%semodule requires a file path\n")); + return NULL; + } + + mod = xcalloc(1, sizeof(*mod)); + + mod->path = rpmGenPath(buildDir, NULL, path); + + if ((rpmioSlurp(mod->path, &raw, &rawlen)) != 0 || raw == NULL) { + rpmlog(RPMLOG_ERR, _("Failed to read policy file: %s\n"), + mod->path); + goto err; + } + + mod->data = b64encode(raw, rawlen, -1); + if (!mod->data) { + rpmlog(RPMLOG_ERR, _("Failed to encode policy file: %s\n"), + mod->path); + goto err; + } + + if (name) { + mod->name = xstrdup(name); + } else { + /* assume base name (minus extension) if name is not given */ + char *tmp = xstrdup(mod->path); + char *bname = basename(tmp); + char *end = strchr(bname, '.'); + if (end) + *end = '\0'; + if (strlen(bname) > 0) { + mod->name = xstrdup(bname); + } else { + rpmlog(RPMLOG_ERR, _("Failed to determine a policy name: %s\n"), + mod->path); + _free(tmp); + goto err; + } + _free(tmp); + } + + if (types) { + mod->types = argvSplitString(types, ",", ARGV_SKIPEMPTY); + argvSort(mod->types, NULL); + if (argvSearch(mod->types, RPMPOL_TYPE_DEFAULT, NULL) && argvCount(mod->types) > 1) { + rpmlog(RPMLOG_WARNING, _("'%s' type given with other types in %%semodule %s. Compacting types to '%s'.\n"), + RPMPOL_TYPE_DEFAULT, mod->path, RPMPOL_TYPE_DEFAULT); + mod->types = argvFree(mod->types); + argvAdd(&mod->types, RPMPOL_TYPE_DEFAULT); + } + } else { + argvAdd(&mod->types, RPMPOL_TYPE_DEFAULT); + } + + mod->flags = flags; + + return mod; + + err: + freeModule(mod); + return NULL; +} + +static rpmRC processPolicies(rpmSpec spec, Package pkg, int test) +{ + const char *path = NULL; + char *name = NULL; + char *types = NULL; + uint32_t flags = 0; + poptContext optCon = NULL; + + rpmRC rc = RPMRC_FAIL; + + struct poptOption optionsTable[] = { + {"name", 'n', POPT_ARG_STRING, &name, 'n', NULL, NULL}, + {"types", 't', POPT_ARG_STRING, &types, 't', NULL, NULL}, + {"base", 'b', POPT_ARGFLAG_OR, &flags, RPMPOL_FLAG_BASE, NULL, NULL}, + POPT_TABLEEND + }; + + if (!spec || !pkg) { + goto exit; + } + + for (ARGV_const_t pol = pkg->policyList; *pol != NULL; pol++) { + ModuleRec mod; + const char *line = *pol; + const char **argv = NULL; + int argc = 0; + int err; + + if ((err = poptParseArgvString(line, &argc, &argv))) { + rpmlog(RPMLOG_ERR, _("Error parsing %s: %s\n"), + line, poptStrerror(err)); + goto exit; + } + + if (!rstreq(argv[0], "%semodule")) { + rpmlog(RPMLOG_ERR, _("Expecting %%semodule tag: %s\n"), line); + goto exit; + } + + optCon = poptGetContext(NULL, argc, argv, optionsTable, 0); + while (poptGetNextOpt(optCon) > 0) { + } + + path = poptGetArg(optCon); + if (!path) { + rpmlog(RPMLOG_ERR, _("Missing module path in line: %s\n"), + line); + goto exit; + } + + if (poptPeekArg(optCon)) { + rpmlog(RPMLOG_ERR, _("Too many arguments in line: %s\n"), + line); + goto exit; + } + + mod = newModule(path, name, types, flags); + if (!mod) { + goto exit; + } + + if (writeModuleToHeader(mod, pkg) != RPMRC_OK) { + freeModule(mod); + goto exit; + } + + freeModule(mod); + } + + rc = RPMRC_OK; + + exit: + + return rc; +} + +rpmRC processBinaryPolicies(rpmSpec spec, int test) +{ + Package pkg; + rpmRC rc = RPMRC_OK; + char *nvr; + +#if WITH_SELINUX + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + if (pkg->policyList == NULL) { + continue; + } + + nvr = headerGetAsString(pkg->header, RPMTAG_NVRA); + rpmlog(RPMLOG_NOTICE, _("Processing policies: %s\n"), nvr); + free(nvr); + + if (processPolicies(spec, pkg, test) != RPMRC_OK) { + rc = RPMRC_FAIL; + break; + } + } +#endif + + return rc; +} diff --git a/build/reqprov.c b/build/reqprov.c new file mode 100644 index 0000000..f2cdb5c --- /dev/null +++ b/build/reqprov.c @@ -0,0 +1,123 @@ +/** \ingroup rpmbuild + * \file build/reqprov.c + * Add dependency tags to package header(s). + */ + +#include "system.h" + +#include +#include +#include "build/rpmbuild_misc.h" +#include "debug.h" + +static int isNewDep(Header h, rpmTagVal nametag, + const char *N, const char *EVR, rpmsenseFlags Flags, + rpmTagVal indextag, uint32_t index) +{ + int isnew = 1; + struct rpmtd_s idx; + rpmds ads = rpmdsNew(h, nametag, 0); + rpmds bds = rpmdsSingle(nametag, N, EVR, Flags); + + if (indextag) { + headerGet(h, indextag, &idx, HEADERGET_MINMEM); + } + + /* XXX there's no guarantee the ds is sorted here so rpmdsFind() wont do */ + rpmdsInit(ads); + while (isnew && rpmdsNext(ads) >= 0) { + if (!rstreq(rpmdsN(ads), rpmdsN(bds))) continue; + if (!rstreq(rpmdsEVR(ads), rpmdsEVR(bds))) continue; + if (rpmdsFlags(ads) != rpmdsFlags(bds)) continue; + if (indextag && rpmtdSetIndex(&idx, rpmdsIx(ads)) >= 0 && + rpmtdGetNumber(&idx) != index) continue; + isnew = 0; + } + + if (indextag) { + rpmtdFreeData(&idx); + } + rpmdsFree(ads); + rpmdsFree(bds); + return isnew; +} + +int addReqProv(Header h, rpmTagVal tagN, + const char * N, const char * EVR, rpmsenseFlags Flags, + uint32_t index) +{ + rpmTagVal versiontag = 0; + rpmTagVal flagtag = 0; + rpmTagVal indextag = 0; + rpmsenseFlags extra = RPMSENSE_ANY; + + switch (tagN) { + case RPMTAG_PROVIDENAME: + versiontag = RPMTAG_PROVIDEVERSION; + flagtag = RPMTAG_PROVIDEFLAGS; + extra = Flags & RPMSENSE_FIND_PROVIDES; + break; + case RPMTAG_OBSOLETENAME: + versiontag = RPMTAG_OBSOLETEVERSION; + flagtag = RPMTAG_OBSOLETEFLAGS; + break; + case RPMTAG_CONFLICTNAME: + versiontag = RPMTAG_CONFLICTVERSION; + flagtag = RPMTAG_CONFLICTFLAGS; + break; + case RPMTAG_ORDERNAME: + versiontag = RPMTAG_ORDERVERSION; + flagtag = RPMTAG_ORDERFLAGS; + break; + case RPMTAG_TRIGGERNAME: + versiontag = RPMTAG_TRIGGERVERSION; + flagtag = RPMTAG_TRIGGERFLAGS; + indextag = RPMTAG_TRIGGERINDEX; + extra = Flags & RPMSENSE_TRIGGER; + break; + case RPMTAG_REQUIRENAME: + default: + tagN = RPMTAG_REQUIRENAME; + versiontag = RPMTAG_REQUIREVERSION; + flagtag = RPMTAG_REQUIREFLAGS; + extra = Flags & _ALL_REQUIRES_MASK; + } + + /* rpmlib() dependency sanity: only requires permitted, ensure sense bit */ + if (rstreqn(N, "rpmlib(", sizeof("rpmlib(")-1)) { + if (tagN != RPMTAG_REQUIRENAME) return 1; + extra |= RPMSENSE_RPMLIB; + } + + Flags = (Flags & RPMSENSE_SENSEMASK) | extra; + + if (EVR == NULL) + EVR = ""; + + /* Avoid adding duplicate dependencies. */ + if (isNewDep(h, tagN, N, EVR, Flags, indextag, index)) { + headerPutString(h, tagN, N); + headerPutString(h, versiontag, EVR); + headerPutUint32(h, flagtag, &Flags, 1); + if (indextag) { + headerPutUint32(h, indextag, &index, 1); + } + } + + return 0; +} + +int rpmlibNeedsFeature(Header h, const char * feature, const char * featureEVR) +{ + char *reqname = NULL; + int res; + + rasprintf(&reqname, "rpmlib(%s)", feature); + + res = addReqProv(h, RPMTAG_REQUIRENAME, reqname, featureEVR, + RPMSENSE_RPMLIB|(RPMSENSE_LESS|RPMSENSE_EQUAL), 0); + + free(reqname); + + return res; +} diff --git a/build/rpmbuild.h b/build/rpmbuild.h new file mode 100644 index 0000000..51a735d --- /dev/null +++ b/build/rpmbuild.h @@ -0,0 +1,112 @@ +#ifndef _H_RPMBUILD_ +#define _H_RPMBUILD_ + +/** \ingroup rpmbuild + * \file build/rpmbuild.h + * This is the *only* module users of librpmbuild should need to include. + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmbuild + * Bit(s) to control rpmSpecBuild() operation. + */ +enum rpmBuildFlags_e { + RPMBUILD_NONE = 0, + RPMBUILD_PREP = (1 << 0), /*!< Execute %%prep. */ + RPMBUILD_BUILD = (1 << 1), /*!< Execute %%build. */ + RPMBUILD_INSTALL = (1 << 2), /*!< Execute %%install. */ + RPMBUILD_CHECK = (1 << 3), /*!< Execute %%check. */ + RPMBUILD_CLEAN = (1 << 4), /*!< Execute %%clean. */ + RPMBUILD_FILECHECK = (1 << 5), /*!< Check %%files manifest. */ + RPMBUILD_PACKAGESOURCE = (1 << 6), /*!< Create source package. */ + RPMBUILD_PACKAGEBINARY = (1 << 7), /*!< Create binary package(s). */ + RPMBUILD_RMSOURCE = (1 << 8), /*!< Remove source(s) and patch(s). */ + RPMBUILD_RMBUILD = (1 << 9), /*!< Remove build sub-tree. */ + RPMBUILD_STRINGBUF = (1 << 10), /*!< Internal use only */ + RPMBUILD_RMSPEC = (1 << 11), /*!< Remove spec file. */ + + RPMBUILD_NOBUILD = (1 << 31) /*!< Don't execute or package. */ +}; + +typedef rpmFlags rpmBuildFlags; + +/** \ingroup rpmbuild + * Bit(s) to control package generation + */ +enum rpmBuildPkgFlags_e { + RPMBUILD_PKG_NONE = 0, + RPMBUILD_PKG_NODIRTOKENS = (1 << 0), /*!< Legacy filename layout */ +}; + +typedef rpmFlags rpmBuildPkgFlags; + +/** \ingroup rpmbuild + * Describe build request. + */ +struct rpmBuildArguments_s { + rpmBuildPkgFlags pkgFlags; /*!< Bit(s) to control package generation. */ + rpmBuildFlags buildAmount; /*!< Bit(s) to control build execution. */ + char * buildRootOverride; /*!< from --buildroot */ + char * cookie; /*!< NULL for binary, ??? for source, rpm's */ + const char * rootdir; +}; + +/** \ingroup rpmbuild + */ +typedef struct rpmBuildArguments_s * BTA_t; + +/** \ingroup rpmbuild + * Parse spec file into spec control structure. + * @todo Eliminate buildRoot from here, its a build, not spec property + * + * @param specFile path to spec file + * @param flags flags to control operation + * @param buildRoot buildRoot override or NULL for default + * @return new spec control structure + */ +rpmSpec rpmSpecParse(const char *specFile, rpmSpecFlags flags, + const char *buildRoot); + +/** \ingroup rpmbuild + * Return the headers of the SRPM that would be built from the spec file + * @param spec path to spec file + * @return Header + */ +Header rpmSpecSourceHeader(rpmSpec spec); + +/** \ingroup rpmbuild + * Verify build depencies of a spec against. + * @param ts (empty) transaction set + * @param spec parsed spec control structure + * @return rpm problem set or NULL on no problems + */ +rpmps rpmSpecCheckDeps(rpmts ts, rpmSpec spec); + +/** \ingroup rpmbuild + * Retrieve build dependency set from spec. + * @param spec parsed spec control structure + * @param tag dependency tag + * @return dependency set of tag (or NULL) + */ +rpmds rpmSpecDS(rpmSpec spec, rpmTagVal tag); + +/** \ingroup rpmbuild + * Spec build stages state machine driver. + * @param spec spec file control structure + * @param buildArgs build arguments + * @return RPMRC_OK on success + */ +rpmRC rpmSpecBuild(rpmSpec spec, BTA_t buildArgs); + +#ifdef __cplusplus +} +#endif + +#endif /* _H_RPMBUILD_ */ diff --git a/build/rpmbuild_internal.h b/build/rpmbuild_internal.h new file mode 100644 index 0000000..5f963a3 --- /dev/null +++ b/build/rpmbuild_internal.h @@ -0,0 +1,401 @@ +#ifndef _RPMBUILD_INTERNAL_H +#define _RPMBUILD_INTERNAL_H + +#include +#include +#include "build/rpmbuild_misc.h" + +struct TriggerFileEntry { + int index; + char * fileName; + char * script; + char * prog; + uint32_t flags; + struct TriggerFileEntry * next; +}; + +typedef struct ReadLevelEntry { + int reading; + struct ReadLevelEntry * next; +} RLE_t; + +/** \ingroup rpmbuild + */ +struct Source { + char * fullSource; + const char * source; /* Pointer into fullSource */ + int flags; + uint32_t num; +struct Source * next; +}; + +typedef struct Package_s * Package; + +/** \ingroup rpmbuild + * The structure used to store values parsed from a spec file. + */ +struct rpmSpec_s { + char * specFile; /*!< Name of the spec file. */ + char * buildRoot; + char * buildSubdir; + const char * rootDir; + + struct OpenFileInfo * fileStack; + char lbuf[10*BUFSIZ]; + char *lbufPtr; + char nextpeekc; + char * nextline; + char * line; + int lineNum; + + struct ReadLevelEntry * readStack; + + Header buildRestrictions; + rpmSpec * BASpecs; + const char ** BANames; + int BACount; + int recursing; /*!< parse is recursive? */ + + rpmSpecFlags flags; + + struct Source * sources; + int numSources; + int noSource; + + char * sourceRpmName; + unsigned char * sourcePkgId; + Header sourceHeader; + rpmfi sourceCpioList; + + rpmMacroContext macros; + + StringBuf prep; /*!< %prep scriptlet. */ + StringBuf build; /*!< %build scriptlet. */ + StringBuf install; /*!< %install scriptlet. */ + StringBuf check; /*!< %check scriptlet. */ + StringBuf clean; /*!< %clean scriptlet. */ + + StringBuf parsed; /*!< parsed spec contents */ + + Package packages; /*!< Package list. */ +}; + +/** \ingroup rpmbuild + * The structure used to store values for a package. + */ +struct Package_s { + Header header; + rpmds ds; /*!< Requires: N = EVR */ + rpmfi cpioList; + + struct Source * icon; + + int autoReq; + int autoProv; + + char * preInFile; /*!< %pre scriptlet. */ + char * postInFile; /*!< %post scriptlet. */ + char * preUnFile; /*!< %preun scriptlet. */ + char * postUnFile; /*!< %postun scriptlet. */ + char * preTransFile; /*!< %pretrans scriptlet. */ + char * postTransFile; /*!< %posttrans scriptlet. */ + char * verifyFile; /*!< %verifyscript scriptlet. */ + + StringBuf specialDoc; + char *specialDocDir; + + struct TriggerFileEntry * triggerFiles; + + ARGV_t fileFile; + ARGV_t fileList; /* If NULL, package will not be written */ + ARGV_t policyList; + + Package next; +}; + +#define PART_SUBNAME 0 +#define PART_NAME 1 + +/** \ingroup rpmbuild + * rpmSpec file parser states. + */ +#define PART_BASE 0 +typedef enum rpmParseState_e { + PART_ERROR = -1, /*!< */ + PART_NONE = 0+PART_BASE, /*!< */ + /* leave room for RPMRC_NOTFOUND returns. */ + PART_PREAMBLE = 11+PART_BASE, /*!< */ + PART_PREP = 12+PART_BASE, /*!< */ + PART_BUILD = 13+PART_BASE, /*!< */ + PART_INSTALL = 14+PART_BASE, /*!< */ + PART_CHECK = 15+PART_BASE, /*!< */ + PART_CLEAN = 16+PART_BASE, /*!< */ + PART_FILES = 17+PART_BASE, /*!< */ + PART_PRE = 18+PART_BASE, /*!< */ + PART_POST = 19+PART_BASE, /*!< */ + PART_PREUN = 20+PART_BASE, /*!< */ + PART_POSTUN = 21+PART_BASE, /*!< */ + PART_PRETRANS = 22+PART_BASE, /*!< */ + PART_POSTTRANS = 23+PART_BASE, /*!< */ + PART_DESCRIPTION = 24+PART_BASE, /*!< */ + PART_CHANGELOG = 25+PART_BASE, /*!< */ + PART_TRIGGERIN = 26+PART_BASE, /*!< */ + PART_TRIGGERUN = 27+PART_BASE, /*!< */ + PART_VERIFYSCRIPT = 28+PART_BASE, /*!< */ + PART_BUILDARCHITECTURES= 29+PART_BASE,/*!< */ + PART_TRIGGERPOSTUN = 30+PART_BASE, /*!< */ + PART_TRIGGERPREIN = 31+PART_BASE, /*!< */ + PART_POLICIES = 32+PART_BASE, /*!< */ + PART_LAST = 33+PART_BASE /*!< */ +} rpmParseState; + + +#define STRIP_NOTHING 0 +#define STRIP_TRAILINGSPACE (1 << 0) +#define STRIP_COMMENTS (1 << 1) + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmbuild + * Create and initialize rpmSpec structure. + * @return spec spec file control structure + */ +RPM_GNUC_INTERNAL +rpmSpec newSpec(void); + +/** \ingroup rpmbuild + * Stop reading from spec file, freeing resources. + * @param spec spec file control structure + */ +RPM_GNUC_INTERNAL +void closeSpec(rpmSpec spec); + +/** \ingroup rpmbuild + * Read next line from spec file. + * @param spec spec file control structure + * @param strip truncate comments? + * @return 0 on success, 1 on EOF, <0 on error + */ +RPM_GNUC_INTERNAL +int readLine(rpmSpec spec, int strip); + +/** \ingroup rpmbuild + * Check line for section separator, return next parser state. + * @param line from spec file + * @return next parser state + */ +RPM_GNUC_INTERNAL +int isPart(const char * line) ; + +/** \ingroup rpmbuild + * Parse %%build/%%install/%%clean section(s) of a spec file. + * @param spec spec file control structure + * @param parsePart current rpmParseState + * @return >= 0 next rpmParseState, < 0 on error + */ +RPM_GNUC_INTERNAL +int parseBuildInstallClean(rpmSpec spec, int parsePart); + +/** \ingroup rpmbuild + * Parse %%changelog section of a spec file. + * @param spec spec file control structure + * @return >= 0 next rpmParseState, < 0 on error + */ +RPM_GNUC_INTERNAL +int parseChangelog(rpmSpec spec); + +/** \ingroup rpmbuild + * Parse %%description section of a spec file. + * @param spec spec file control structure + * @return >= 0 next rpmParseState, < 0 on error + */ +RPM_GNUC_INTERNAL +int parseDescription(rpmSpec spec); + +/** \ingroup rpmbuild + * Parse %%files section of a spec file. + * @param spec spec file control structure + * @return >= 0 next rpmParseState, < 0 on error + */ +RPM_GNUC_INTERNAL +int parseFiles(rpmSpec spec); + +/** \ingroup rpmbuild + * Parse %%sepolicy section of a spec file. + * @param spec spec file control structure + * @return >= 0 next rpmParseState, < 0 on error + */ +RPM_GNUC_INTERNAL +int parsePolicies(rpmSpec spec); + +/** \ingroup rpmbuild + * Parse tags from preamble of a spec file. + * @param spec spec file control structure + * @param initialPackage + * @return >= 0 next rpmParseState, < 0 on error + */ +RPM_GNUC_INTERNAL +int parsePreamble(rpmSpec spec, int initialPackage); + +/** \ingroup rpmbuild + * Parse %%prep section of a spec file. + * @param spec spec file control structure + * @return >= 0 next rpmParseState, < 0 on error + */ +RPM_GNUC_INTERNAL +int parsePrep(rpmSpec spec); + +/** \ingroup rpmbuild + * Parse %%pre et al scriptlets from a spec file. + * @param spec spec file control structure + * @param parsePart current rpmParseState + * @return >= 0 next rpmParseState, < 0 on error + */ +RPM_GNUC_INTERNAL +int parseScript(rpmSpec spec, int parsePart); + +/** \ingroup rpmbuild + * Check for inappropriate characters. All alphanums are considered sane. + * @param spec spec + * @param field string to check + * @param fsize size of string to check + * @param whitelist string of permitted characters + * @return RPMRC_OK if OK + */ +RPM_GNUC_INTERNAL +rpmRC rpmCharCheck(rpmSpec spec, const char *field, size_t fsize, const char *whitelist); + +/** \ingroup rpmbuild + * Parse dependency relations from spec file and/or autogenerated output buffer. + * @param spec spec file control structure + * @param pkg package control structure + * @param field text to parse (e.g. "foo < 0:1.2-3, bar = 5:6.7") + * @param tagN tag, identifies type of dependency + * @param index (0 always) + * @param tagflags dependency flags already known from context + * @return RPMRC_OK on success, RPMRC_FAIL on failure + */ +RPM_GNUC_INTERNAL +rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char * field, rpmTagVal tagN, + int index, rpmsenseFlags tagflags); + +/** \ingroup rpmbuild + * Evaluate boolean expression. + * @param spec spec file control structure + * @param expr expression to parse + * @return + */ +RPM_GNUC_INTERNAL +int parseExpressionBoolean(rpmSpec spec, const char * expr); + +/** \ingroup rpmbuild + * Run a build script, assembled from spec file scriptlet section. + * + * @param spec spec file control structure + * @param what type of script + * @param name name of scriptlet section + * @param sb lines that compose script body + * @param test don't execute scripts or package if testing + * @return RPMRC_OK on success + */ +RPM_GNUC_INTERNAL +rpmRC doScript(rpmSpec spec, rpmBuildFlags what, const char * name, + const char * sb, int test); + +/** \ingroup rpmbuild + * Find sub-package control structure by name. + * @param spec spec file control structure + * @param name (sub-)package name + * @param flag if PART_SUBNAME, then 1st package name is prepended + * @retval pkg package control structure + * @return 0 on success, 1 on failure + */ +RPM_GNUC_INTERNAL +rpmRC lookupPackage(rpmSpec spec, const char * name, int flag, + Package * pkg); + +/** \ingroup rpmbuild + * Create and initialize package control structure. + * @param spec spec file control structure + * @return package control structure + */ +RPM_GNUC_INTERNAL +Package newPackage(rpmSpec spec); + +/** \ingroup rpmbuild + * Post-build processing for binary package(s). + * @param spec spec file control structure + * @param pkgFlags bit(s) to control package generation + * @param installSpecialDoc + * @param test don't execute scripts or package if testing + * @return 0 on success + */ +RPM_GNUC_INTERNAL +rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags, + int installSpecialDoc, int test); + +/** \ingroup rpmfc + * Generate package dependencies. + * @param spec spec file control + * @param pkg package control + * @return RPMRC_OK on success + */ +RPM_GNUC_INTERNAL +rpmRC rpmfcGenerateDepends(const rpmSpec spec, Package pkg); + +/** \ingroup rpmfc + * Return helper output. + * @param av helper argv (with possible macros) + * @param sb_stdin helper input + * @retval *sb_stdoutp helper output + * @param failnonzero IS non-zero helper exit status a failure? + * @param buildRoot buildRoot directory (or NULL) + */ +RPM_GNUC_INTERNAL +int rpmfcExec(ARGV_const_t av, StringBuf sb_stdin, StringBuf * sb_stdoutp, + int failnonzero, const char *buildRoot); + +/** \ingroup rpmbuild + * Post-build processing for policies in binary package(s). + * @param spec spec file control structure + * @param test don't execute scripts or package if testing + * @return 0 on success + */ +RPM_GNUC_INTERNAL +rpmRC processBinaryPolicies(rpmSpec spec, int test); + +/** \ingroup rpmbuild + * Post-build processing for source package. + * @param spec spec file control structure + * @param pkgFlags bit(s) to control package generation + * @return 0 on success + */ +RPM_GNUC_INTERNAL +rpmRC processSourceFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags); + +/** \ingroup rpmbuild + * Generate binary package(s). + * @param spec spec file control structure + * @param cookie build identifier "cookie" or NULL + * @param cheating was build shortcircuited? + * @return RPMRC_OK on success + */ +RPM_GNUC_INTERNAL +rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating); + +/** \ingroup rpmbuild + * Generate source package. + * @param spec spec file control structure + * @retval cookie build identifier "cookie" or NULL + * @return RPMRC_OK on success + */ +RPM_GNUC_INTERNAL +rpmRC packageSources(rpmSpec spec, char **cookie); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMBUILD_INTERNAL_H */ diff --git a/build/rpmbuild_misc.h b/build/rpmbuild_misc.h new file mode 100644 index 0000000..9665c97 --- /dev/null +++ b/build/rpmbuild_misc.h @@ -0,0 +1,94 @@ +#ifndef _RPMBUILD_MISC_H +#define _RPMBUILD_MISC_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmbuild + * Truncate comment lines. + * @param s skip white space, truncate line at '#' + */ +RPM_GNUC_INTERNAL +void handleComments(char * s); + +/** \ingroup rpmstring + */ +typedef struct StringBufRec *StringBuf; + +/** \ingroup rpmstring + */ +RPM_GNUC_INTERNAL +StringBuf newStringBuf(void); + +/** \ingroup rpmstring + */ +RPM_GNUC_INTERNAL +StringBuf freeStringBuf( StringBuf sb); + +/** \ingroup rpmstring + */ +RPM_GNUC_INTERNAL +const char * getStringBuf(StringBuf sb); + +/** \ingroup rpmstring + */ +RPM_GNUC_INTERNAL +void stripTrailingBlanksStringBuf(StringBuf sb); + +/** \ingroup rpmstring + */ +#define appendStringBuf(sb, s) appendStringBufAux(sb, s, 0) + +/** \ingroup rpmstring + */ +#define appendLineStringBuf(sb, s) appendStringBufAux(sb, s, 1) + +/** \ingroup rpmstring + */ +RPM_GNUC_INTERNAL +void appendStringBufAux(StringBuf sb, const char * s, int nl); + +/** \ingroup rpmbuild + * Parse an unsigned number. + * @param line from spec file + * @retval res pointer to uint32_t + * @return 0 on success, 1 on failure + */ +RPM_GNUC_INTERNAL +uint32_t parseUnsignedNum(const char * line, uint32_t * res); + +/** \ingroup rpmbuild + * Add dependency to header, filtering duplicates. + * @param h header + * @param tagN tag, identifies type of dependency + * @param N (e.g. Requires: foo < 0:1.2-3, "foo") + * @param EVR (e.g. Requires: foo < 0:1.2-3, "0:1.2-3") + * @param Flags (e.g. Requires: foo < 0:1.2-3, both "Requires:" and "<") + * @param index (0 always) + * @return 0 on success, 1 on error + */ +RPM_GNUC_INTERNAL +int addReqProv(Header h, rpmTagVal tagN, + const char * N, const char * EVR, rpmsenseFlags Flags, + uint32_t index); + +/** \ingroup rpmbuild + * Add rpmlib feature dependency. + * @param h header + * @param feature rpm feature name (i.e. "rpmlib(Foo)" for feature Foo) + * @param featureEVR rpm feature epoch/version/release + * @return 0 always + */ +RPM_GNUC_INTERNAL +int rpmlibNeedsFeature(Header h, const char * feature, const char * featureEVR); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMBUILD_MISC_H */ diff --git a/build/rpmfc.c b/build/rpmfc.c new file mode 100644 index 0000000..a779b6a --- /dev/null +++ b/build/rpmfc.c @@ -0,0 +1,1405 @@ +#include "system.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "build/rpmbuild_internal.h" + +#include "debug.h" + +struct matchRule { + regex_t *path; + regex_t *magic; + ARGV_t flags; +}; + +typedef struct rpmfcAttr_s { + char *name; + struct matchRule incl; + struct matchRule excl; +} * rpmfcAttr; + +/** + */ +struct rpmfc_s { + int nfiles; /*!< no. of files */ + int fknown; /*!< no. of classified files */ + int fwhite; /*!< no. of "white" files */ + int ix; /*!< current file index */ + int skipProv; /*!< Don't auto-generate Provides:? */ + int skipReq; /*!< Don't auto-generate Requires:? */ + char *buildRoot; /*!< (Build) root dir */ + size_t brlen; /*!< rootDir length */ + + rpmfcAttr *atypes; /*!< known file attribute types */ + + ARGV_t fn; /*!< (no. files) file names */ + ARGV_t *fattrs; /*!< (no. files) file attribute tokens */ + ARGI_t fcolor; /*!< (no. files) file colors */ + ARGI_t fcdictx; /*!< (no. files) file class dictionary indices */ + ARGI_t fddictx; /*!< (no. files) file depends dictionary start */ + ARGI_t fddictn; /*!< (no. files) file depends dictionary no. entries */ + ARGV_t cdict; /*!< (no. classes) file class dictionary */ + ARGV_t ddict; /*!< (no. dependencies) file depends dictionary */ + ARGI_t ddictx; /*!< (no. dependencies) file->dependency mapping */ + + rpmds provides; /*!< (no. provides) package provides */ + rpmds requires; /*!< (no. requires) package requires */ +}; + +struct rpmfcTokens_s { + const char * token; + rpm_color_t colors; +}; + +static int regMatch(regex_t *reg, const char *val) +{ + return (reg && regexec(reg, val, 0, NULL, 0) == 0); +} + +static regex_t * regFree(regex_t *reg) +{ + if (reg) { + regfree(reg); + free(reg); + } + return NULL; +} + +static void ruleFree(struct matchRule *rule) +{ + regFree(rule->path); + regFree(rule->magic); + argvFree(rule->flags); +} + +static char *rpmfcAttrMacro(const char *name, + const char *attr_prefix, const char *attr) +{ + char *ret; + if (attr_prefix && attr_prefix[0] != '\0') + ret = rpmExpand("%{?__", name, "_", attr_prefix, "_", attr, "}", NULL); + else + ret = rpmExpand("%{?__", name, "_", attr, "}", NULL); + return rstreq(ret, "") ? _free(ret) : ret; +} + +static regex_t *rpmfcAttrReg(const char *name, + const char *attr_prefix, const char *attr) +{ + regex_t *reg = NULL; + char *pattern = rpmfcAttrMacro(name, attr_prefix, attr); + if (pattern) { + reg = xcalloc(1, sizeof(*reg)); + if (regcomp(reg, pattern, REG_EXTENDED) != 0) { + rpmlog(RPMLOG_WARNING, _("Ignoring invalid regex %s\n"), pattern); + reg = _free(reg); + } + rfree(pattern); + } + return reg; +} + +static rpmfcAttr rpmfcAttrNew(const char *name) +{ + rpmfcAttr attr = xcalloc(1, sizeof(*attr)); + struct matchRule *rules[] = { &attr->incl, &attr->excl, NULL }; + + attr->name = xstrdup(name); + for (struct matchRule **rule = rules; rule && *rule; rule++) { + const char *prefix = (*rule == &attr->incl) ? NULL : "exclude"; + char *flags = rpmfcAttrMacro(name, prefix, "flags"); + + (*rule)->path = rpmfcAttrReg(name, prefix, "path"); + (*rule)->magic = rpmfcAttrReg(name, prefix, "magic"); + (*rule)->flags = argvSplitString(flags, ",", ARGV_SKIPEMPTY); + argvSort((*rule)->flags, NULL); + + free(flags); + } + + return attr; +} + +static rpmfcAttr rpmfcAttrFree(rpmfcAttr attr) +{ + if (attr) { + ruleFree(&attr->incl); + ruleFree(&attr->excl); + rfree(attr->name); + rfree(attr); + } + return NULL; +} + +/** + */ +static int rpmfcExpandAppend(ARGV_t * argvp, ARGV_const_t av) +{ + ARGV_t argv = *argvp; + int argc = argvCount(argv); + int ac = argvCount(av); + int i; + + argv = xrealloc(argv, (argc + ac + 1) * sizeof(*argv)); + for (i = 0; i < ac; i++) + argv[argc + i] = rpmExpand(av[i], NULL); + argv[argc + ac] = NULL; + *argvp = argv; + return 0; +} + +static int _sigpipe[2] = { -1, -1 }; + +static void sigpipe_handler(int sig) +{ + char sigc = sig; + int xx; /* shut up gcc, we can't handle an error here */ + xx = write(_sigpipe[1], &sigc, 1); +} + +static int sigpipe_init(void) +{ + if (pipe(_sigpipe) < 0) + return -1; + /* Set close on exec and non-blocking (must not get stuck in sighandler) */ + fcntl(_sigpipe[0], F_SETFL, (fcntl(_sigpipe[0], F_GETFL)|O_NONBLOCK)); + fcntl(_sigpipe[0], F_SETFD, (fcntl(_sigpipe[0], F_GETFD)|FD_CLOEXEC)); + fcntl(_sigpipe[1], F_SETFL, (fcntl(_sigpipe[1], F_GETFL)|O_NONBLOCK)); + fcntl(_sigpipe[1], F_SETFD, (fcntl(_sigpipe[1], F_GETFD)|FD_CLOEXEC)); + /* XXX SIGPIPE too, but NSPR disables it already, dont mess with it */ + signal(SIGCHLD, sigpipe_handler); + return _sigpipe[0]; +} + +static void sigpipe_finish(void) +{ + signal(SIGCHLD, SIG_DFL); + close(_sigpipe[0]); + close(_sigpipe[1]); + _sigpipe[0] = -1; + _sigpipe[1] = -1; +} + +#define max(x,y) ((x) > (y) ? (x) : (y)) + +/** \ingroup rpmbuild + * Return output from helper script. + * @todo Use poll(2) rather than select(2), if available. + * @param argv program and arguments to run + * @param writePtr bytes to feed to script on stdin (or NULL) + * @param writeBytesLeft no. of bytes to feed to script on stdin + * @param failNonZero is script failure an error? + * @param buildRoot buildRoot directory (or NULL) + * @return buffered stdout from script, NULL on error + */ +static StringBuf getOutputFrom(ARGV_t argv, + const char * writePtr, size_t writeBytesLeft, + int failNonZero, const char *buildRoot) +{ + pid_t child, reaped; + int toProg[2] = { -1, -1 }; + int fromProg[2] = { -1, -1 }; + int status; + StringBuf readBuff; + int myerrno = 0; + int sigpipe = sigpipe_init(); + int ret = 1; /* assume failure */ + + if (sigpipe < 0 || pipe(toProg) < 0 || pipe(fromProg) < 0) { + rpmlog(RPMLOG_ERR, _("Couldn't create pipe for %s: %m\n"), argv[0]); + return NULL; + } + + child = fork(); + if (child == 0) { + /* NSPR messes with SIGPIPE, reset to default for the kids */ + signal(SIGPIPE, SIG_DFL); + close(toProg[1]); + close(fromProg[0]); + + dup2(toProg[0], STDIN_FILENO); /* Make stdin the in pipe */ + close(toProg[0]); + + dup2(fromProg[1], STDOUT_FILENO); /* Make stdout the out pipe */ + close(fromProg[1]); + + rpmlog(RPMLOG_DEBUG, "\texecv(%s) pid %d\n", + argv[0], (unsigned)getpid()); + + if (buildRoot) + setenv("RPM_BUILD_ROOT", buildRoot, 1); + + unsetenv("MALLOC_CHECK_"); + execvp(argv[0], (char *const *)argv); + rpmlog(RPMLOG_ERR, _("Couldn't exec %s: %s\n"), + argv[0], strerror(errno)); + _exit(EXIT_FAILURE); + } + if (child < 0) { + rpmlog(RPMLOG_ERR, _("Couldn't fork %s: %s\n"), + argv[0], strerror(errno)); + return NULL; + } + + close(toProg[0]); + close(fromProg[1]); + + readBuff = newStringBuf(); + + while (1) { + fd_set ibits, obits; + int nfd = 0; + ssize_t iorc; + char buf[BUFSIZ+1]; + + FD_ZERO(&ibits); + FD_ZERO(&obits); + + FD_SET(sigpipe, &ibits); + nfd = max(nfd, sigpipe); + FD_SET(fromProg[0], &ibits); + nfd = max(nfd, fromProg[0]); + + if (writeBytesLeft > 0) { + FD_SET(toProg[1], &obits); + nfd = max(nfd, toProg[1]); + } else if (toProg[1] >= 0) { + /* Close write-side pipe to notify child on EOF */ + close(toProg[1]); + toProg[1] = -1; + } + + do { + iorc = select(nfd + 1, &ibits, &obits, NULL, NULL); + } while (iorc == -1 && errno == EINTR); + + if (iorc < 0) { + myerrno = errno; + break; + } + + /* Write data to child */ + if (writeBytesLeft > 0 && FD_ISSET(toProg[1], &obits)) { + size_t nb = (1024 < writeBytesLeft) ? 1024 : writeBytesLeft; + do { + iorc = write(toProg[1], writePtr, nb); + } while (iorc == -1 && errno == EINTR); + + if (iorc < 0) { + myerrno = errno; + break; + } + writeBytesLeft -= iorc; + writePtr += iorc; + } + + /* Read when we get data back from the child */ + if (FD_ISSET(fromProg[0], &ibits)) { + do { + iorc = read(fromProg[0], buf, sizeof(buf)-1); + } while (iorc == -1 && errno == EINTR); + + if (iorc == 0) break; /* EOF, we're done */ + if (iorc < 0) { + myerrno = errno; + break; + } + buf[iorc] = '\0'; + appendStringBuf(readBuff, buf); + } + + /* Child exited */ + if (FD_ISSET(sigpipe, &ibits)) { + while (read(sigpipe, buf, sizeof(buf)) > 0) {}; + } + } + + /* Clean up */ + if (toProg[1] >= 0) + close(toProg[1]); + if (fromProg[0] >= 0) + close(fromProg[0]); + + /* Collect status from prog */ + reaped = waitpid(child, &status, 0); + rpmlog(RPMLOG_DEBUG, "\twaitpid(%d) rc %d status %x\n", + (unsigned)child, (unsigned)reaped, status); + + sigpipe_finish(); + if (failNonZero && (!WIFEXITED(status) || WEXITSTATUS(status))) { + rpmlog(RPMLOG_ERR, _("%s failed: %x\n"), argv[0], status); + goto exit; + } + if (writeBytesLeft || myerrno) { + rpmlog(RPMLOG_ERR, _("failed to write all data to %s: %s\n"), + argv[0], strerror(myerrno)); + goto exit; + } + ret = 0; + +exit: + if (ret) { + readBuff = freeStringBuf(readBuff); + } + + return readBuff; +} + +int rpmfcExec(ARGV_const_t av, StringBuf sb_stdin, StringBuf * sb_stdoutp, + int failnonzero, const char *buildRoot) +{ + char * s = NULL; + ARGV_t xav = NULL; + ARGV_t pav = NULL; + int pac = 0; + int ec = -1; + StringBuf sb = NULL; + const char * buf_stdin = NULL; + size_t buf_stdin_len = 0; + int xx; + + if (sb_stdoutp) + *sb_stdoutp = NULL; + if (!(av && *av)) + goto exit; + + /* Find path to executable with (possible) args. */ + s = rpmExpand(av[0], NULL); + if (!(s && *s)) + goto exit; + + /* Parse args buried within expanded exacutable. */ + pac = 0; + xx = poptParseArgvString(s, &pac, (const char ***)&pav); + if (!(xx == 0 && pac > 0 && pav != NULL)) + goto exit; + + /* Build argv, appending args to the executable args. */ + xav = NULL; + xx = argvAppend(&xav, pav); + if (av[1]) + xx = rpmfcExpandAppend(&xav, av + 1); + + if (sb_stdin != NULL) { + buf_stdin = getStringBuf(sb_stdin); + buf_stdin_len = strlen(buf_stdin); + } + + /* Read output from exec'd helper. */ + sb = getOutputFrom(xav, buf_stdin, buf_stdin_len, failnonzero, buildRoot); + + if (sb_stdoutp != NULL) { + *sb_stdoutp = sb; + sb = NULL; /* XXX don't free */ + } + + ec = 0; + +exit: + sb = freeStringBuf(sb); + xav = argvFree(xav); + pav = _free(pav); /* XXX popt mallocs in single blob. */ + s = _free(s); + return ec; +} + +static void argvAddUniq(ARGV_t * argvp, const char * key) +{ + if (argvSearch(*argvp, key, NULL) == NULL) { + argvAdd(argvp, key); + argvSort(*argvp, NULL); + } +} + +#define hasAttr(_a, _n) (argvSearch((_a), (_n), NULL) != NULL) + +static void rpmfcAddFileDep(ARGV_t * argvp, int ix, rpmds ds, char deptype) +{ + if (ds) { + char *key = NULL; + rasprintf(&key, "%08d%c %s %s 0x%08x", ix, deptype, + rpmdsN(ds), rpmdsEVR(ds), rpmdsFlags(ds)); + argvAddUniq(argvp, key); + free(key); + } +} + +static ARGV_t runCmd(const char *nsdep, const char *depname, + const char *buildRoot, const char *fn) +{ + ARGV_t output = NULL; + char *buf = NULL; + char *mname = rstrscat(NULL, "__", nsdep, "_", depname, NULL); + + rasprintf(&buf, "%%{?%s:%%{%s} %%{?%s_opts}}", mname, mname, mname); + if (!rstreq(buf, "")) { + ARGV_t av = NULL; + StringBuf sb_stdout = NULL; + StringBuf sb_stdin = newStringBuf(); + argvAdd(&av, buf); + + appendLineStringBuf(sb_stdin, fn); + if (rpmfcExec(av, sb_stdin, &sb_stdout, 0, buildRoot) == 0) { + argvSplit(&output, getStringBuf(sb_stdout), " \t\n\r"); + } + + argvFree(av); + freeStringBuf(sb_stdin); + freeStringBuf(sb_stdout); + } + free(buf); + free(mname); + return output; +} + +/** + * Run per-interpreter dependency helper. + * @param fc file classifier + * @param deptype 'P' == Provides:, 'R' == Requires:, helper + * @param nsdep class name for interpreter (e.g. "perl") + * @return 0 on success + */ +static int rpmfcHelper(rpmfc fc, unsigned char deptype, const char * nsdep) +{ + ARGV_t pav = NULL; + const char * fn = fc->fn[fc->ix]; + const char * depname = NULL; + rpmds * depsp; + rpmsenseFlags dsContext; + rpmTagVal tagN; + int pac; + regex_t *exclude = NULL; + regex_t *exclude_from = NULL; + + switch (deptype) { + default: + return -1; + break; + case 'P': + if (fc->skipProv) + return 0; + depname = "provides"; + depsp = &fc->provides; + dsContext = RPMSENSE_FIND_PROVIDES; + tagN = RPMTAG_PROVIDENAME; + break; + case 'R': + if (fc->skipReq) + return 0; + depname = "requires"; + depsp = &fc->requires; + dsContext = RPMSENSE_FIND_REQUIRES; + tagN = RPMTAG_REQUIRENAME; + break; + } + + /* If the entire path is filtered out, there's nothing more to do */ + exclude_from = rpmfcAttrReg(depname, "exclude", "from"); + if (regMatch(exclude_from, fn+fc->brlen)) + goto exit; + + pav = runCmd(nsdep, depname, fc->buildRoot, fn); + pac = argvCount(pav); + + if (pav) + exclude = rpmfcAttrReg(depname, NULL, "exclude"); + + for (int i = 0; i < pac; i++) { + rpmds ds = NULL; + const char *N = pav[i]; + const char *EVR = ""; + rpmsenseFlags Flags = dsContext; + if (pav[i+1] && strchr("=<>", *pav[i+1])) { + i++; + for (const char *s = pav[i]; *s; s++) { + switch(*s) { + default: + break; + case '=': + Flags |= RPMSENSE_EQUAL; + break; + case '<': + Flags |= RPMSENSE_LESS; + break; + case '>': + Flags |= RPMSENSE_GREATER; + break; + } + } + i++; + EVR = pav[i]; + } + + ds = rpmdsSingle(tagN, N, EVR, Flags); + + /* Add to package and file dependencies unless filtered */ + if (regMatch(exclude, rpmdsDNEVR(ds)+2) == 0) { + (void) rpmdsMerge(depsp, ds); + rpmfcAddFileDep(&fc->ddict, fc->ix, ds, deptype); + } + + ds = rpmdsFree(ds); + } + + argvFree(pav); + +exit: + regFree(exclude); + regFree(exclude_from); + return 0; +} + +/* Only used for elf coloring and controlling RPMTAG_FILECLASS inclusion now */ +static const struct rpmfcTokens_s rpmfcTokens[] = { + { "directory", RPMFC_INCLUDE }, + + { "ELF 32-bit", RPMFC_ELF32|RPMFC_INCLUDE }, + { "ELF 64-bit", RPMFC_ELF64|RPMFC_INCLUDE }, + + { "troff or preprocessor input", RPMFC_INCLUDE }, + { "GNU Info", RPMFC_INCLUDE }, + + { "perl ", RPMFC_INCLUDE }, + { "Perl5 module source text", RPMFC_INCLUDE }, + { "python ", RPMFC_INCLUDE }, + + { "libtool library ", RPMFC_INCLUDE }, + { "pkgconfig ", RPMFC_INCLUDE }, + + { "Objective caml ", RPMFC_INCLUDE }, + { "Mono/.Net assembly", RPMFC_INCLUDE }, + + { "current ar archive", RPMFC_INCLUDE }, + { "Zip archive data", RPMFC_INCLUDE }, + { "tar archive", RPMFC_INCLUDE }, + { "cpio archive", RPMFC_INCLUDE }, + { "RPM v3", RPMFC_INCLUDE }, + { "RPM v4", RPMFC_INCLUDE }, + + { " image", RPMFC_INCLUDE }, + { " font", RPMFC_INCLUDE }, + { " Font", RPMFC_INCLUDE }, + + { " commands", RPMFC_INCLUDE }, + { " script", RPMFC_INCLUDE }, + + { "empty", RPMFC_INCLUDE }, + + { "HTML", RPMFC_INCLUDE }, + { "SGML", RPMFC_INCLUDE }, + { "XML", RPMFC_INCLUDE }, + + { " source", RPMFC_INCLUDE }, + { "GLS_BINARY_LSB_FIRST", RPMFC_INCLUDE }, + { " DB ", RPMFC_INCLUDE }, + + { " text", RPMFC_INCLUDE }, + + { NULL, RPMFC_BLACK } +}; + +static void argvAddTokens(ARGV_t *argv, const char *tnames) +{ + if (tnames) { + ARGV_t tokens = NULL; + argvSplit(&tokens, tnames, ","); + for (ARGV_t token = tokens; token && *token; token++) + argvAddUniq(argv, *token); + argvFree(tokens); + } +} + +static int matches(const struct matchRule *rule, + const char *ftype, const char *path, int executable) +{ + if (!executable && hasAttr(rule->flags, "exeonly")) + return 0; + if (rule->magic && rule->path && hasAttr(rule->flags, "magic_and_path")) { + return (regMatch(rule->magic, ftype) && regMatch(rule->path, path)); + } else { + return (regMatch(rule->magic, ftype) || regMatch(rule->path, path)); + } +} + +static void rpmfcAttributes(rpmfc fc, const char *ftype, const char *fullpath) +{ + const char *path = fullpath + fc->brlen; + int is_executable = 0; + struct stat st; + if (stat(fullpath, &st) == 0) { + is_executable = (S_ISREG(st.st_mode)) && + (st.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)); + } + + for (rpmfcAttr *attr = fc->atypes; attr && *attr; attr++) { + /* Filter out excludes */ + if (matches(&(*attr)->excl, ftype, path, is_executable)) + continue; + + /* Add attributes on libmagic type & path pattern matches */ + if (matches(&(*attr)->incl, ftype, path, is_executable)) + argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name); + } +} + +/* Return color for a given libmagic classification string */ +static rpm_color_t rpmfcColor(const char * fmstr) +{ + rpmfcToken fct; + rpm_color_t fcolor = RPMFC_BLACK; + + for (fct = rpmfcTokens; fct->token != NULL; fct++) { + if (strstr(fmstr, fct->token) == NULL) + continue; + + fcolor |= fct->colors; + if (fcolor & RPMFC_INCLUDE) + break; + } + + return fcolor; +} + +void rpmfcPrint(const char * msg, rpmfc fc, FILE * fp) +{ + rpm_color_t fcolor; + int ndx; + int cx; + int dx; + int fx; + +int nprovides; +int nrequires; + + if (fp == NULL) fp = stderr; + + if (msg) + fprintf(fp, "===================================== %s\n", msg); + +nprovides = rpmdsCount(fc->provides); +nrequires = rpmdsCount(fc->requires); + + if (fc) + for (fx = 0; fx < fc->nfiles; fx++) { +assert(fx < fc->fcdictx->nvals); + cx = fc->fcdictx->vals[fx]; +assert(fx < fc->fcolor->nvals); + fcolor = fc->fcolor->vals[fx]; + ARGV_t fattrs = fc->fattrs[fx]; + + fprintf(fp, "%3d %s", fx, fc->fn[fx]); + if (fcolor != RPMFC_BLACK) + fprintf(fp, "\t0x%x", fc->fcolor->vals[fx]); + else + fprintf(fp, "\t%s", fc->cdict[cx]); + if (fattrs) { + char *attrs = argvJoin(fattrs, ","); + fprintf(fp, " [%s]", attrs); + free(attrs); + } else { + fprintf(fp, " [none]"); + } + fprintf(fp, "\n"); + + if (fc->fddictx == NULL || fc->fddictn == NULL) + continue; + +assert(fx < fc->fddictx->nvals); + dx = fc->fddictx->vals[fx]; +assert(fx < fc->fddictn->nvals); + ndx = fc->fddictn->vals[fx]; + + while (ndx-- > 0) { + const char * depval; + unsigned char deptype; + unsigned ix; + + ix = fc->ddictx->vals[dx++]; + deptype = ((ix >> 24) & 0xff); + ix &= 0x00ffffff; + depval = NULL; + switch (deptype) { + default: +assert(depval != NULL); + break; + case 'P': + if (nprovides > 0) { +assert(ix < nprovides); + (void) rpmdsSetIx(fc->provides, ix-1); + if (rpmdsNext(fc->provides) >= 0) + depval = rpmdsDNEVR(fc->provides); + } + break; + case 'R': + if (nrequires > 0) { +assert(ix < nrequires); + (void) rpmdsSetIx(fc->requires, ix-1); + if (rpmdsNext(fc->requires) >= 0) + depval = rpmdsDNEVR(fc->requires); + } + break; + } + if (depval) + fprintf(fp, "\t%s\n", depval); + } + } +} + +rpmfc rpmfcFree(rpmfc fc) +{ + if (fc) { + for (rpmfcAttr *attr = fc->atypes; attr && *attr; attr++) + rpmfcAttrFree(*attr); + rfree(fc->atypes); + rfree(fc->buildRoot); + fc->fn = argvFree(fc->fn); + for (int i = 0; i < fc->nfiles; i++) + argvFree(fc->fattrs[i]); + fc->fattrs = _free(fc->fattrs); + fc->fcolor = argiFree(fc->fcolor); + fc->fcdictx = argiFree(fc->fcdictx); + fc->fddictx = argiFree(fc->fddictx); + fc->fddictn = argiFree(fc->fddictn); + fc->cdict = argvFree(fc->cdict); + fc->ddict = argvFree(fc->ddict); + fc->ddictx = argiFree(fc->ddictx); + + fc->provides = rpmdsFree(fc->provides); + fc->requires = rpmdsFree(fc->requires); + } + fc = _free(fc); + return NULL; +} + +rpmfc rpmfcCreate(const char *buildRoot, rpmFlags flags) +{ + rpmfc fc = xcalloc(1, sizeof(*fc)); + if (buildRoot) { + fc->buildRoot = xstrdup(buildRoot); + fc->brlen = strlen(buildRoot); + } + return fc; +} + +rpmfc rpmfcNew(void) +{ + return rpmfcCreate(NULL, 0); +} + +rpmds rpmfcProvides(rpmfc fc) +{ + return (fc != NULL ? fc->provides : NULL); +} + +rpmds rpmfcRequires(rpmfc fc) +{ + return (fc != NULL ? fc->requires : NULL); +} + +rpmRC rpmfcApply(rpmfc fc) +{ + const char * s; + char * se; + rpmds ds; + const char * N; + const char * EVR; + rpmsenseFlags Flags; + unsigned char deptype; + int nddict; + int previx; + unsigned int val; + int dix; + int ix; + int i; + int xx = 0; + + /* Generate package and per-file dependencies. */ + for (fc->ix = 0; fc->fn != NULL && fc->fn[fc->ix] != NULL; fc->ix++) { + for (ARGV_t fattr = fc->fattrs[fc->ix]; fattr && *fattr; fattr++) { + xx += rpmfcHelper(fc, 'P', *fattr); + xx += rpmfcHelper(fc, 'R', *fattr); + } + } + + /* Generate per-file indices into package dependencies. */ + nddict = argvCount(fc->ddict); + previx = -1; + for (i = 0; i < nddict; i++) { + s = fc->ddict[i]; + + /* Parse out (file#,deptype,N,EVR,Flags) */ + ix = strtol(s, &se, 10); + if ( se == NULL ) { + rpmlog(RPMLOG_ERR, _("Conversion of %s to long integer failed.\n"), s); + return RPMRC_FAIL; + } + + deptype = *se++; + se++; + N = se; + while (*se && *se != ' ') + se++; + *se++ = '\0'; + EVR = se; + while (*se && *se != ' ') + se++; + *se++ = '\0'; + Flags = strtol(se, NULL, 16); + + dix = -1; + switch (deptype) { + default: + break; + case 'P': + ds = rpmdsSingle(RPMTAG_PROVIDENAME, N, EVR, Flags); + dix = rpmdsFind(fc->provides, ds); + ds = rpmdsFree(ds); + break; + case 'R': + ds = rpmdsSingle(RPMTAG_REQUIRENAME, N, EVR, Flags); + dix = rpmdsFind(fc->requires, ds); + ds = rpmdsFree(ds); + break; + } + +/* XXX assertion incorrect while generating -debuginfo deps. */ +#if 0 +assert(dix >= 0); +#else + if (dix < 0) + continue; +#endif + + val = (deptype << 24) | (dix & 0x00ffffff); + xx = argiAdd(&fc->ddictx, -1, val); + + if (previx != ix) { + previx = ix; + xx = argiAdd(&fc->fddictx, ix, argiCount(fc->ddictx)-1); + } + if (fc->fddictn && fc->fddictn->vals) + fc->fddictn->vals[ix]++; + } + + return RPMRC_OK; +} + +static int initAttrs(rpmfc fc) +{ + ARGV_t files = NULL; + char * attrPath = rpmExpand("%{_fileattrsdir}/*.attr", NULL); + int nattrs = 0; + + /* Discover known attributes from pathnames + initialize them */ + if (rpmGlob(attrPath, NULL, &files) == 0) { + nattrs = argvCount(files); + fc->atypes = xcalloc(nattrs + 1, sizeof(*fc->atypes)); + for (int i = 0; i < nattrs; i++) { + char *bn = basename(files[i]); + bn[strlen(bn)-strlen(".attr")] = '\0'; + fc->atypes[i] = rpmfcAttrNew(bn); + } + fc->atypes[nattrs] = NULL; + argvFree(files); + } + free(attrPath); + return nattrs; +} + +rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode) +{ + ARGV_t fcav = NULL; + int xx; + int msflags = MAGIC_CHECK | MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS; + magic_t ms = NULL; + rpmRC rc = RPMRC_FAIL; + + if (fc == NULL || argv == NULL) + return RPMRC_OK; /* XXX looks very wrong */ + + if (initAttrs(fc) < 1) { + rpmlog(RPMLOG_ERR, _("No file attributes configured\n")); + goto exit; + } + + fc->nfiles = argvCount(argv); + fc->fattrs = xcalloc(fc->nfiles, sizeof(*fc->fattrs)); + + /* Initialize the per-file dictionary indices. */ + xx = argiAdd(&fc->fddictx, fc->nfiles-1, 0); + xx = argiAdd(&fc->fddictn, fc->nfiles-1, 0); + + /* Build (sorted) file class dictionary. */ + xx = argvAdd(&fc->cdict, ""); + xx = argvAdd(&fc->cdict, "directory"); + + ms = magic_open(msflags); + if (ms == NULL) { + rpmlog(RPMLOG_ERR, _("magic_open(0x%x) failed: %s\n"), + msflags, strerror(errno)); + goto exit; + } + + xx = magic_load(ms, NULL); + if (xx == -1) { + rpmlog(RPMLOG_ERR, _("magic_load failed: %s\n"), magic_error(ms)); + goto exit; + } + + for (fc->ix = 0; fc->ix < fc->nfiles; fc->ix++) { + const char * ftype; + const char * s = argv[fc->ix]; + size_t slen = strlen(s); + int fcolor = RPMFC_BLACK; + rpm_mode_t mode = (fmode ? fmode[fc->ix] : 0); + int is_executable = (mode & (S_IXUSR|S_IXGRP|S_IXOTH)); + + switch (mode & S_IFMT) { + case S_IFCHR: ftype = "character special"; break; + case S_IFBLK: ftype = "block special"; break; + case S_IFIFO: ftype = "fifo (named pipe)"; break; + case S_IFSOCK: ftype = "socket"; break; + case S_IFDIR: + case S_IFLNK: + case S_IFREG: + default: + /* XXX all files with extension ".pm" are perl modules for now. */ + if (rpmFileHasSuffix(s, ".pm")) + ftype = "Perl5 module source text"; + + /* XXX all files with extension ".la" are libtool for now. */ + else if (rpmFileHasSuffix(s, ".la")) + ftype = "libtool library file"; + + /* XXX all files with extension ".pc" are pkgconfig for now. */ + else if (rpmFileHasSuffix(s, ".pc")) + ftype = "pkgconfig file"; + + /* XXX skip all files in /dev/ which are (or should be) %dev dummies. */ + else if (slen >= fc->brlen+sizeof("/dev/") && rstreqn(s+fc->brlen, "/dev/", sizeof("/dev/")-1)) + ftype = ""; + else + ftype = magic_file(ms, s); + + if (ftype == NULL) { + rpmlog(is_executable ? RPMLOG_ERR : RPMLOG_WARNING, + _("Recognition of file \"%s\" failed: mode %06o %s\n"), + s, mode, magic_error(ms)); + /* only executable files are critical to dep extraction */ + if (is_executable) { + goto exit; + } + /* unrecognized non-executables get treated as "data" */ + ftype = "data"; + } + } + + rpmlog(RPMLOG_DEBUG, "%s: %s\n", s, ftype); + + /* Save the path. */ + xx = argvAdd(&fc->fn, s); + + /* Save the file type string. */ + xx = argvAdd(&fcav, ftype); + + /* Add (filtered) file coloring */ + fcolor |= rpmfcColor(ftype); + + /* Add attributes based on file type and/or path */ + rpmfcAttributes(fc, ftype, s); + + xx = argiAdd(&fc->fcolor, fc->ix, fcolor); + + if (fcolor != RPMFC_WHITE && (fcolor & RPMFC_INCLUDE)) + argvAddUniq(&fc->cdict, ftype); + } + + /* Build per-file class index array. */ + fc->fknown = 0; + for (fc->ix = 0; fc->ix < fc->nfiles; fc->ix++) { + const char *se = fcav[fc->ix]; + ARGV_t dav = argvSearch(fc->cdict, se, NULL); + if (dav) { + xx = argiAdd(&fc->fcdictx, fc->ix, (dav - fc->cdict)); + fc->fknown++; + } else { + xx = argiAdd(&fc->fcdictx, fc->ix, 0); + fc->fwhite++; + } + } + rc = RPMRC_OK; + +exit: + fcav = argvFree(fcav); + if (ms != NULL) + magic_close(ms); + + return rc; +} + +/** + */ +typedef struct DepMsg_s * DepMsg_t; + +/** + */ +struct DepMsg_s { + const char * msg; + char * const argv[4]; + rpmTagVal ntag; + rpmTagVal vtag; + rpmTagVal ftag; + int mask; + int xormask; +}; + +/** + */ +static struct DepMsg_s depMsgs[] = { + { "Provides", { "%{?__find_provides}", NULL, NULL, NULL }, + RPMTAG_PROVIDENAME, RPMTAG_PROVIDEVERSION, RPMTAG_PROVIDEFLAGS, + 0, -1 }, + { "Requires(interp)", { NULL, "interp", NULL, NULL }, + RPMTAG_REQUIRENAME, RPMTAG_REQUIREVERSION, RPMTAG_REQUIREFLAGS, + RPMSENSE_INTERP, 0 }, + { "Requires(rpmlib)", { NULL, "rpmlib", NULL, NULL }, + -1, -1, RPMTAG_REQUIREFLAGS, + RPMSENSE_RPMLIB, 0 }, + { "Requires(verify)", { NULL, "verify", NULL, NULL }, + -1, -1, RPMTAG_REQUIREFLAGS, + RPMSENSE_SCRIPT_VERIFY, 0 }, + { "Requires(pre)", { NULL, "pre", NULL, NULL }, + -1, -1, RPMTAG_REQUIREFLAGS, + RPMSENSE_SCRIPT_PRE, 0 }, + { "Requires(post)", { NULL, "post", NULL, NULL }, + -1, -1, RPMTAG_REQUIREFLAGS, + RPMSENSE_SCRIPT_POST, 0 }, + { "Requires(preun)", { NULL, "preun", NULL, NULL }, + -1, -1, RPMTAG_REQUIREFLAGS, + RPMSENSE_SCRIPT_PREUN, 0 }, + { "Requires(postun)", { NULL, "postun", NULL, NULL }, + -1, -1, RPMTAG_REQUIREFLAGS, + RPMSENSE_SCRIPT_POSTUN, 0 }, + { "Requires", { "%{?__find_requires}", NULL, NULL, NULL }, + -1, -1, RPMTAG_REQUIREFLAGS, /* XXX inherit name/version arrays */ + RPMSENSE_FIND_REQUIRES|RPMSENSE_TRIGGERIN|RPMSENSE_TRIGGERUN|RPMSENSE_TRIGGERPOSTUN|RPMSENSE_TRIGGERPREIN, 0 }, + { "Conflicts", { "%{?__find_conflicts}", NULL, NULL, NULL }, + RPMTAG_CONFLICTNAME, RPMTAG_CONFLICTVERSION, RPMTAG_CONFLICTFLAGS, + 0, -1 }, + { "Obsoletes", { "%{?__find_obsoletes}", NULL, NULL, NULL }, + RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS, + 0, -1 }, + { NULL, { NULL, NULL, NULL, NULL }, 0, 0, 0, 0, 0 } +}; + +static DepMsg_t DepMsgs = depMsgs; + +/** + */ +static void printDeps(Header h) +{ + DepMsg_t dm; + rpmds ds = NULL; + const char * DNEVR; + rpmsenseFlags Flags; + int bingo = 0; + + for (dm = DepMsgs; dm->msg != NULL; dm++) { + if (dm->ntag != -1) { + ds = rpmdsFree(ds); + ds = rpmdsNew(h, dm->ntag, 0); + } + if (dm->ftag == 0) + continue; + + ds = rpmdsInit(ds); + if (ds == NULL) + continue; /* XXX can't happen */ + + bingo = 0; + while (rpmdsNext(ds) >= 0) { + + Flags = rpmdsFlags(ds); + + if (!((Flags & dm->mask) ^ dm->xormask)) + continue; + if (bingo == 0) { + rpmlog(RPMLOG_NOTICE, "%s:", (dm->msg ? dm->msg : "")); + bingo = 1; + } + if ((DNEVR = rpmdsDNEVR(ds)) == NULL) + continue; /* XXX can't happen */ + rpmlog(RPMLOG_NOTICE, " %s", DNEVR+2); + } + if (bingo) + rpmlog(RPMLOG_NOTICE, "\n"); + } + ds = rpmdsFree(ds); +} + +/** + */ +static rpmRC rpmfcGenerateDependsHelper(const rpmSpec spec, Package pkg, rpmfi fi) +{ + StringBuf sb_stdin; + StringBuf sb_stdout; + DepMsg_t dm; + int failnonzero = 0; + rpmRC rc = RPMRC_OK; + + /* + * Create file manifest buffer to deliver to dependency finder. + */ + sb_stdin = newStringBuf(); + fi = rpmfiInit(fi, 0); + if (fi != NULL) + while (rpmfiNext(fi) >= 0) + appendLineStringBuf(sb_stdin, rpmfiFN(fi)); + + for (dm = DepMsgs; dm->msg != NULL; dm++) { + rpmTagVal tag = (dm->ftag > 0) ? dm->ftag : dm->ntag; + rpmsenseFlags tagflags; + char * s = NULL; + + switch(tag) { + case RPMTAG_PROVIDEFLAGS: + if (!pkg->autoProv) + continue; + failnonzero = 1; + tagflags = RPMSENSE_FIND_PROVIDES; + break; + case RPMTAG_REQUIREFLAGS: + if (!pkg->autoReq) + continue; + failnonzero = 0; + tagflags = RPMSENSE_FIND_REQUIRES; + break; + default: + continue; + break; + } + + if (rpmfcExec(dm->argv, sb_stdin, &sb_stdout, + failnonzero, spec->buildRoot) == -1) + continue; + + s = rpmExpand(dm->argv[0], NULL); + rpmlog(RPMLOG_NOTICE, _("Finding %s: %s\n"), dm->msg, (s ? s : "")); + free(s); + + if (sb_stdout == NULL) { + rc = RPMRC_FAIL; + rpmlog(RPMLOG_ERR, _("Failed to find %s:\n"), dm->msg); + break; + } + + /* Parse dependencies into header */ + rc = parseRCPOT(spec, pkg, getStringBuf(sb_stdout), tag, 0, tagflags); + sb_stdout = freeStringBuf(sb_stdout); + + if (rc) { + rpmlog(RPMLOG_ERR, _("Failed to find %s:\n"), dm->msg); + break; + } + } + + sb_stdin = freeStringBuf(sb_stdin); + + return rc; +} + +rpmRC rpmfcGenerateDepends(const rpmSpec spec, Package pkg) +{ + rpmfi fi = pkg->cpioList; + rpmfc fc = NULL; + rpmds ds; + ARGV_t av; + rpm_mode_t * fmode; + int ac = rpmfiFC(fi); + char *buf = NULL; + int genConfigDeps; + rpmRC rc = RPMRC_OK; + int xx; + int idx; + struct rpmtd_s td; + + /* Skip packages with no files. */ + if (ac <= 0) + return rc; + + /* Skip packages that have dependency generation disabled. */ + if (! (pkg->autoReq || pkg->autoProv)) + return rc; + + /* If new-fangled dependency generation is disabled ... */ + if (!rpmExpandNumeric("%{?_use_internal_dependency_generator}")) { + /* ... then generate dependencies using %{__find_requires} et al. */ + rc = rpmfcGenerateDependsHelper(spec, pkg, fi); + printDeps(pkg->header); + return rc; + } + + /* Extract absolute file paths in argv format. */ + av = xcalloc(ac+1, sizeof(*av)); + fmode = xcalloc(ac+1, sizeof(*fmode)); + + genConfigDeps = 0; + fi = rpmfiInit(fi, 0); + if (fi != NULL) + while ((idx = rpmfiNext(fi)) >= 0) { + rpmfileAttrs fileAttrs; + + /* Does package have any %config files? */ + fileAttrs = rpmfiFFlags(fi); + genConfigDeps |= (fileAttrs & RPMFILE_CONFIG); + + av[idx] = xstrdup(rpmfiFN(fi)); + fmode[idx] = rpmfiFMode(fi); + } + av[ac] = NULL; + + fc = rpmfcCreate(spec->buildRoot, 0); + fc->skipProv = !pkg->autoProv; + fc->skipReq = !pkg->autoReq; + + /* Copy (and delete) manually generated dependencies to dictionary. */ + if (!fc->skipProv) { + ds = rpmdsNew(pkg->header, RPMTAG_PROVIDENAME, 0); + xx = rpmdsMerge(&fc->provides, ds); + ds = rpmdsFree(ds); + xx = headerDel(pkg->header, RPMTAG_PROVIDENAME); + xx = headerDel(pkg->header, RPMTAG_PROVIDEVERSION); + xx = headerDel(pkg->header, RPMTAG_PROVIDEFLAGS); + + /* Add config dependency, Provides: config(N) = EVR */ + if (genConfigDeps) { + rasprintf(&buf, "config(%s)", rpmdsN(pkg->ds)); + ds = rpmdsSingle(RPMTAG_PROVIDENAME, buf, rpmdsEVR(pkg->ds), + (RPMSENSE_EQUAL|RPMSENSE_CONFIG)); + free(buf); + xx = rpmdsMerge(&fc->provides, ds); + ds = rpmdsFree(ds); + } + } + + if (!fc->skipReq) { + ds = rpmdsNew(pkg->header, RPMTAG_REQUIRENAME, 0); + xx = rpmdsMerge(&fc->requires, ds); + ds = rpmdsFree(ds); + xx = headerDel(pkg->header, RPMTAG_REQUIRENAME); + xx = headerDel(pkg->header, RPMTAG_REQUIREVERSION); + xx = headerDel(pkg->header, RPMTAG_REQUIREFLAGS); + + /* Add config dependency, Requires: config(N) = EVR */ + if (genConfigDeps) { + rasprintf(&buf, "config(%s)", rpmdsN(pkg->ds)); + ds = rpmdsSingle(RPMTAG_REQUIRENAME, buf, rpmdsEVR(pkg->ds), + (RPMSENSE_EQUAL|RPMSENSE_CONFIG)); + free(buf); + xx = rpmdsMerge(&fc->requires, ds); + ds = rpmdsFree(ds); + } + } + + /* Build file class dictionary. */ + rc = rpmfcClassify(fc, av, fmode); + if ( rc != RPMRC_OK ) + goto exit; + + /* Build file/package dependency dictionary. */ + rc = rpmfcApply(fc); + if ( rc != RPMRC_OK ) + goto exit; + + /* Add per-file colors(#files) */ + if (rpmtdFromArgi(&td, RPMTAG_FILECOLORS, fc->fcolor)) { + rpm_color_t *fcolor; + assert(rpmtdType(&td) == RPM_INT32_TYPE); + /* XXX Make sure only primary (i.e. Elf32/Elf64) colors are added. */ + while ((fcolor = rpmtdNextUint32(&td))) { + *fcolor &= 0x0f; + } + headerPut(pkg->header, &td, HEADERPUT_DEFAULT); + } + + /* Add classes(#classes) */ + if (rpmtdFromArgv(&td, RPMTAG_CLASSDICT, fc->cdict)) { + headerPut(pkg->header, &td, HEADERPUT_DEFAULT); + } + + /* Add per-file classes(#files) */ + if (rpmtdFromArgi(&td, RPMTAG_FILECLASS, fc->fcdictx)) { + assert(rpmtdType(&td) == RPM_INT32_TYPE); + headerPut(pkg->header, &td, HEADERPUT_DEFAULT); + } + + /* Add Provides: */ + if (fc->provides != NULL && rpmdsCount(fc->provides) > 0 && !fc->skipProv) { + rpmds pi = rpmdsInit(fc->provides); + while (rpmdsNext(pi) >= 0) { + rpmsenseFlags flags = rpmdsFlags(pi); + + headerPutString(pkg->header, RPMTAG_PROVIDENAME, rpmdsN(pi)); + headerPutString(pkg->header, RPMTAG_PROVIDEVERSION, rpmdsEVR(pi)); + headerPutUint32(pkg->header, RPMTAG_PROVIDEFLAGS, &flags, 1); + } + } + + /* Add Requires: */ + if (fc->requires != NULL && rpmdsCount(fc->requires) > 0 && !fc->skipReq) { + rpmds pi = rpmdsInit(fc->requires); + while (rpmdsNext(pi) >= 0) { + rpmsenseFlags flags = rpmdsFlags(pi); + + headerPutString(pkg->header, RPMTAG_REQUIRENAME, rpmdsN(pi)); + headerPutString(pkg->header, RPMTAG_REQUIREVERSION, rpmdsEVR(pi)); + headerPutUint32(pkg->header, RPMTAG_REQUIREFLAGS, &flags, 1); + } + } + + /* Add dependency dictionary(#dependencies) */ + if (rpmtdFromArgi(&td, RPMTAG_DEPENDSDICT, fc->ddictx)) { + assert(rpmtdType(&td) == RPM_INT32_TYPE); + headerPut(pkg->header, &td, HEADERPUT_DEFAULT); + } + + /* Add per-file dependency (start,number) pairs (#files) */ + if (rpmtdFromArgi(&td, RPMTAG_FILEDEPENDSX, fc->fddictx)) { + assert(rpmtdType(&td) == RPM_INT32_TYPE); + headerPut(pkg->header, &td, HEADERPUT_DEFAULT); + } + + if (rpmtdFromArgi(&td, RPMTAG_FILEDEPENDSN, fc->fddictn)) { + assert(rpmtdType(&td) == RPM_INT32_TYPE); + headerPut(pkg->header, &td, HEADERPUT_DEFAULT); + } + + printDeps(pkg->header); + +if (fc != NULL && _rpmfc_debug) { +char *msg = NULL; +rasprintf(&msg, "final: files %d cdict[%d] %d%% ddictx[%d]", fc->nfiles, argvCount(fc->cdict), ((100 * fc->fknown)/fc->nfiles), argiCount(fc->ddictx)); +rpmfcPrint(msg, fc, NULL); +free(msg); +} +exit: + /* Clean up. */ + fmode = _free(fmode); + fc = rpmfcFree(fc); + av = argvFree(av); + + return rc; +} diff --git a/build/rpmfc.h b/build/rpmfc.h new file mode 100644 index 0000000..f3d3e66 --- /dev/null +++ b/build/rpmfc.h @@ -0,0 +1,113 @@ +#ifndef _H_RPMFC_ +#define _H_RPMFC_ + +/** \ingroup rpmfc rpmbuild + * \file build/rpmfc.h + * Structures and methods for build-time file classification. + */ + +#include +#include /* for ARGV_t */ +#include /* for Package */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern int _rpmfc_debug; + +/** \ingroup rpmfc + */ +typedef struct rpmfc_s * rpmfc; + +/** \ingroup rpmfc + */ +enum FCOLOR_e { + RPMFC_BLACK = 0, + RPMFC_ELF32 = (1 << 0), + RPMFC_ELF64 = (1 << 1), + RPMFC_ELFMIPSN32 = (1 << 2), +#define RPMFC_ELF (RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFMIPSN32) + /* (1 << 3) leaks into package headers, reserved */ + + RPMFC_WHITE = (1 << 29), + RPMFC_INCLUDE = (1 << 30), + RPMFC_ERROR = (1 << 31) +}; + +/** \ingroup rpmfc + */ +typedef rpmFlags FCOLOR_t; + +/** \ingroup rpmfc + */ +typedef const struct rpmfcTokens_s * rpmfcToken; + +/** \ingroup rpmfc + * Print results of file classification. + * @todo Remove debugging routine. + * @param msg message prefix (NULL for none) + * @param fc file classifier + * @param fp output file handle (NULL for stderr) + */ +void rpmfcPrint(const char * msg, rpmfc fc, FILE * fp); + +/** \ingroup rpmfc + * Destroy a file classifier. + * @param fc file classifier + * @return NULL always + */ +rpmfc rpmfcFree(rpmfc fc); + +/** \ingroup rpmfc + * Create a file classifier. + * @param rootDir (build) root directory + * @param flags (unused) + * @return new file classifier + */ +rpmfc rpmfcCreate(const char *rootDir, rpmFlags flags); + +/** \ingroup rpmfc + * @deprecated + * Create a file classifier. + * @return new file classifier + */ +RPM_GNUC_DEPRECATED +rpmfc rpmfcNew(void); + + +/** \ingroup rpmfc + * Build file class dictionary and mappings. + * @param fc file classifier + * @param argv files to classify + * @param fmode files mode_t array (or NULL) + * @return RPMRC_OK on success + */ +rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode); + +/** \ingroup rpmfc + * Build file/package dependency dictionary and mappings. + * @param fc file classifier + * @return RPMRC_OK on success + */ +rpmRC rpmfcApply(rpmfc fc); + +/** \ingroup rpmfc + * Retrieve file classification provides + * @param fc file classifier + * @return rpmds dependency set of fc provides + */ +rpmds rpmfcProvides(rpmfc fc); + +/** \ingroup rpmfc + * Retrieve file classification requires + * @param fc file classifier + * @return rpmds dependency set of fc requires + */ +rpmds rpmfcRequires(rpmfc fc); + +#ifdef __cplusplus +} +#endif + +#endif /* _H_RPMFC_ */ diff --git a/build/rpmspec.h b/build/rpmspec.h new file mode 100644 index 0000000..195fc72 --- /dev/null +++ b/build/rpmspec.h @@ -0,0 +1,88 @@ +#ifndef _H_SPEC_ +#define _H_SPEC_ + +/** \ingroup rpmbuild + * \file build/rpmspec.h + * The rpmSpec and Package data structures used during build. + */ + +#include /* StringBuf */ +#include /* for QVA_t */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmbuild + */ +typedef struct Package_s * rpmSpecPkg; +typedef struct Source * rpmSpecSrc; +typedef struct rpmSpecIter_s * rpmSpecPkgIter; +typedef struct rpmSpecIter_s * rpmSpecSrcIter; + +enum rpmSourceFlags_e { + RPMBUILD_ISSOURCE = (1 << 0), + RPMBUILD_ISPATCH = (1 << 1), + RPMBUILD_ISICON = (1 << 2), + RPMBUILD_ISNO = (1 << 3), +}; + +typedef rpmFlags rpmSourceFlags; + +#define RPMBUILD_DEFAULT_LANG "C" + +enum rpmSpecFlags_e { + RPMSPEC_NONE = 0, + RPMSPEC_ANYARCH = (1 << 0), + RPMSPEC_FORCE = (1 << 1), + RPMSPEC_NOLANG = (1 << 2), +}; + +typedef rpmFlags rpmSpecFlags; + +/** \ingroup rpmbuild + * Destroy Spec structure. + * @param spec spec file control structure + * @return NULL always + */ +rpmSpec rpmSpecFree(rpmSpec spec); + +/* Iterator for spec packages */ +rpmSpecPkgIter rpmSpecPkgIterInit(rpmSpec spec); +rpmSpecPkg rpmSpecPkgIterNext(rpmSpecPkgIter iter); +rpmSpecPkgIter rpmSpecPkgIterFree(rpmSpecPkgIter iter); + +/* Getters for spec package attributes */ +Header rpmSpecPkgHeader(rpmSpecPkg pkg); + +/* Iterator for spec sources */ +rpmSpecSrcIter rpmSpecSrcIterInit(rpmSpec spec); +rpmSpecSrc rpmSpecSrcIterNext(rpmSpecSrcIter iter); +rpmSpecSrcIter rpmSpecSrcIterFree(rpmSpecSrcIter iter); + +/* Getters for spec source attributes */ +rpmSourceFlags rpmSpecSrcFlags(rpmSpecSrc src); +int rpmSpecSrcNum(rpmSpecSrc src); +const char * rpmSpecSrcFilename(rpmSpecSrc src, int full); + +/* + * Retrieve parsed spec script section (RPMBUILD_PREP, RPMBUILD_BUILD etc). + * As a special case, RPMBUILD_NONE as section returns the entire spec in + * preprocessed (macros expanded etc) format. + */ +const char * rpmSpecGetSection(rpmSpec spec, int section); + +/** \ingroup rpmbuild + * Function to query spec file(s). + * @param ts transaction set + * @param qva parsed query/verify options + * @param arg query argument + * @return 0 on success, else no. of failures + */ +int rpmspecQuery(rpmts ts, QVA_t qva, const char * arg); + +#ifdef __cplusplus +} +#endif + +#endif /* _H_SPEC_ */ diff --git a/build/spec.c b/build/spec.c new file mode 100644 index 0000000..a4a321f --- /dev/null +++ b/build/spec.c @@ -0,0 +1,428 @@ +/** \ingroup rpmbuild + * \file build/spec.c + * Handle spec data structure. + */ + +#include "system.h" + +#include +#include +#include +#include +#include +#include + +#include "rpmio/rpmlua.h" +#include "build/rpmbuild_internal.h" + +#include "debug.h" + +#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; } + +/** + * @param p trigger entry chain + * @return NULL always + */ +static inline +struct TriggerFileEntry * freeTriggerFiles(struct TriggerFileEntry * p) +{ + struct TriggerFileEntry *o, *q = p; + + while (q != NULL) { + o = q; + q = q->next; + o->fileName = _free(o->fileName); + o->script = _free(o->script); + o->prog = _free(o->prog); + o = _free(o); + } + return NULL; +} + +/** + * Destroy source component chain. + * @param s source component chain + * @return NULL always + */ +static inline +struct Source * freeSources(struct Source * s) +{ + struct Source *r, *t = s; + + while (t != NULL) { + r = t; + t = t->next; + r->fullSource = _free(r->fullSource); + r = _free(r); + } + return NULL; +} + +rpmRC lookupPackage(rpmSpec spec, const char *name, int flag,Package *pkg) +{ + const char *pname; + char *fullName = NULL; + Package p; + + /* "main" package */ + if (name == NULL) { + if (pkg) + *pkg = spec->packages; + return RPMRC_OK; + } + + /* Construct package name */ + if (flag == PART_SUBNAME) { + pname = headerGetString(spec->packages->header, RPMTAG_NAME); + rasprintf(&fullName, "%s-%s", pname, name); + } else { + fullName = xstrdup(name); + } + + /* Locate package with fullName */ + for (p = spec->packages; p != NULL; p = p->next) { + pname = headerGetString(p->header, RPMTAG_NAME); + if (pname && (rstreq(fullName, pname))) { + break; + } + } + free(fullName); + + if (pkg) + *pkg = p; + return ((p == NULL) ? RPMRC_FAIL : RPMRC_OK); +} + +Package newPackage(rpmSpec spec) +{ + Package p = xcalloc(1, sizeof(*p)); + p->header = headerNew(); + p->autoProv = 1; + p->autoReq = 1; + p->fileList = NULL; + p->fileFile = NULL; + p->policyList = NULL; + + if (spec->packages == NULL) { + spec->packages = p; + } else { + Package pp; + /* Always add package to end of list */ + for (pp = spec->packages; pp->next != NULL; pp = pp->next) + {}; + pp->next = p; + } + p->next = NULL; + + return p; +} + +static Package freePackage(Package pkg) +{ + if (pkg == NULL) return NULL; + + pkg->preInFile = _free(pkg->preInFile); + pkg->postInFile = _free(pkg->postInFile); + pkg->preUnFile = _free(pkg->preUnFile); + pkg->postUnFile = _free(pkg->postUnFile); + pkg->verifyFile = _free(pkg->verifyFile); + + pkg->header = headerFree(pkg->header); + pkg->ds = rpmdsFree(pkg->ds); + pkg->fileList = argvFree(pkg->fileList); + pkg->fileFile = argvFree(pkg->fileFile); + pkg->policyList = argvFree(pkg->policyList); + if (pkg->cpioList) { + rpmfi fi = pkg->cpioList; + pkg->cpioList = NULL; + fi = rpmfiFree(fi); + } + + pkg->specialDoc = freeStringBuf(pkg->specialDoc); + pkg->specialDocDir = _free(pkg->specialDocDir); + pkg->icon = freeSources(pkg->icon); + pkg->triggerFiles = freeTriggerFiles(pkg->triggerFiles); + + pkg = _free(pkg); + return NULL; +} + +static Package freePackages(Package packages) +{ + Package p; + + while ((p = packages) != NULL) { + packages = p->next; + p->next = NULL; + p = freePackage(p); + } + return NULL; +} + +rpmSpec newSpec(void) +{ + rpmSpec spec = xcalloc(1, sizeof(*spec)); + + spec->specFile = NULL; + + spec->fileStack = NULL; + spec->lbuf[0] = '\0'; + spec->line = spec->lbuf; + spec->nextline = NULL; + spec->nextpeekc = '\0'; + spec->lineNum = 0; + spec->readStack = xcalloc(1, sizeof(*spec->readStack)); + spec->readStack->next = NULL; + spec->readStack->reading = 1; + + spec->rootDir = NULL; + spec->prep = NULL; + spec->build = NULL; + spec->install = NULL; + spec->check = NULL; + spec->clean = NULL; + spec->parsed = NULL; + + spec->sources = NULL; + spec->packages = NULL; + spec->noSource = 0; + spec->numSources = 0; + + spec->sourceRpmName = NULL; + spec->sourcePkgId = NULL; + spec->sourceHeader = NULL; + spec->sourceCpioList = NULL; + + spec->buildRoot = NULL; + spec->buildSubdir = NULL; + + spec->buildRestrictions = headerNew(); + spec->BANames = NULL; + spec->BACount = 0; + spec->recursing = 0; + spec->BASpecs = NULL; + + spec->flags = RPMSPEC_NONE; + + spec->macros = rpmGlobalMacroContext; + +#ifdef WITH_LUA + { + /* make sure patches and sources tables always exist */ + rpmlua lua = NULL; /* global state */ + rpmluaPushTable(lua, "patches"); + rpmluaPushTable(lua, "sources"); + rpmluaPop(lua); + rpmluaPop(lua); + } +#endif + return spec; +} + +rpmSpec rpmSpecFree(rpmSpec spec) +{ + + if (spec == NULL) return NULL; + + spec->prep = freeStringBuf(spec->prep); + spec->build = freeStringBuf(spec->build); + spec->install = freeStringBuf(spec->install); + spec->check = freeStringBuf(spec->check); + spec->clean = freeStringBuf(spec->clean); + spec->parsed = freeStringBuf(spec->parsed); + + spec->buildRoot = _free(spec->buildRoot); + spec->buildSubdir = _free(spec->buildSubdir); + spec->specFile = _free(spec->specFile); + + closeSpec(spec); + + while (spec->readStack) { + struct ReadLevelEntry *rl = spec->readStack; + spec->readStack = rl->next; + rl->next = NULL; + free(rl); + } + + spec->sourceRpmName = _free(spec->sourceRpmName); + spec->sourcePkgId = _free(spec->sourcePkgId); + spec->sourceHeader = headerFree(spec->sourceHeader); + + if (spec->sourceCpioList) { + rpmfi fi = spec->sourceCpioList; + spec->sourceCpioList = NULL; + fi = rpmfiFree(fi); + } + + spec->buildRestrictions = headerFree(spec->buildRestrictions); + + if (!spec->recursing) { + if (spec->BASpecs != NULL) + while (spec->BACount--) { + spec->BASpecs[spec->BACount] = + rpmSpecFree(spec->BASpecs[spec->BACount]); + } + spec->BASpecs = _free(spec->BASpecs); + } + spec->BANames = _free(spec->BANames); + +#ifdef WITH_LUA + rpmlua lua = NULL; /* global state */ + rpmluaDelVar(lua, "patches"); + rpmluaDelVar(lua, "sources"); +#endif + + spec->sources = freeSources(spec->sources); + spec->packages = freePackages(spec->packages); + + spec = _free(spec); + + return spec; +} + +Header rpmSpecSourceHeader(rpmSpec spec) +{ + return spec->sourceHeader; +} + +rpmds rpmSpecDS(rpmSpec spec, rpmTagVal tag) +{ + return (spec != NULL) ? rpmdsNew(spec->buildRestrictions, tag, 0) : NULL; +} + +rpmps rpmSpecCheckDeps(rpmts ts, rpmSpec spec) +{ + rpmps probs = NULL; + + rpmtsEmpty(ts); + + rpmtsAddInstallElement(ts, rpmSpecSourceHeader(spec), NULL, 0, NULL); + rpmtsCheck(ts); + probs = rpmtsProblems(ts); + + rpmtsEmpty(ts); + return probs; +} + +struct rpmSpecIter_s { + void *next; +}; + +#define SPEC_LISTITER_INIT(_itertype, _iteritem) \ + _itertype iter = NULL; \ + if (spec) { \ + iter = xcalloc(1, sizeof(*iter)); \ + iter->next = spec->_iteritem; \ + } \ + return iter + +#define SPEC_LISTITER_NEXT(_valuetype) \ + _valuetype item = NULL; \ + if (iter) { \ + item = iter->next; \ + iter->next = (item) ? item->next : NULL; \ + } \ + return item + +#define SPEC_LISTITER_FREE() \ + free(iter); \ + return NULL + + +rpmSpecPkgIter rpmSpecPkgIterInit(rpmSpec spec) +{ + SPEC_LISTITER_INIT(rpmSpecPkgIter, packages); +} + +rpmSpecPkgIter rpmSpecPkgIterFree(rpmSpecPkgIter iter) +{ + SPEC_LISTITER_FREE(); +} + +rpmSpecPkg rpmSpecPkgIterNext(rpmSpecPkgIter iter) +{ + SPEC_LISTITER_NEXT(rpmSpecPkg); +} + +Header rpmSpecPkgHeader(rpmSpecPkg pkg) +{ + return (pkg != NULL) ? pkg->header : NULL; +} + +rpmSpecSrcIter rpmSpecSrcIterInit(rpmSpec spec) +{ + SPEC_LISTITER_INIT(rpmSpecSrcIter, sources); +} + +rpmSpecSrcIter rpmSpecSrcIterFree(rpmSpecSrcIter iter) +{ + SPEC_LISTITER_FREE(); +} + +rpmSpecSrc rpmSpecSrcIterNext(rpmSpecSrcIter iter) +{ + SPEC_LISTITER_NEXT(rpmSpecSrc); +} + +rpmSourceFlags rpmSpecSrcFlags(rpmSpecSrc src) +{ + return (src != NULL) ? src->flags : 0; +} + +int rpmSpecSrcNum(rpmSpecSrc src) +{ + return (src != NULL) ? src->num : -1; +} + +const char * rpmSpecSrcFilename(rpmSpecSrc src, int full) +{ + const char *source = NULL; + if (src) { + source = full ? src->fullSource : src->source; + } + return source; +} + +const char * rpmSpecGetSection(rpmSpec spec, int section) +{ + if (spec) { + switch (section) { + case RPMBUILD_NONE: return getStringBuf(spec->parsed); + case RPMBUILD_PREP: return getStringBuf(spec->prep); + case RPMBUILD_BUILD: return getStringBuf(spec->build); + case RPMBUILD_INSTALL: return getStringBuf(spec->install); + case RPMBUILD_CHECK: return getStringBuf(spec->check); + case RPMBUILD_CLEAN: return getStringBuf(spec->clean); + } + } + return NULL; +} + +int rpmspecQuery(rpmts ts, QVA_t qva, const char * arg) +{ + rpmSpec spec = NULL; + int res = 1; + int xx; + + if (qva->qva_showPackage == NULL) + goto exit; + + spec = rpmSpecParse(arg, (RPMSPEC_ANYARCH|RPMSPEC_FORCE), NULL); + if (spec == NULL) { + rpmlog(RPMLOG_ERR, + _("query of specfile %s failed, can't parse\n"), arg); + goto exit; + } + + res = 0; + if (qva->qva_source == RPMQV_SPECRPMS) { + for (Package pkg = spec->packages; pkg != NULL; pkg = pkg->next) + xx = qva->qva_showPackage(qva, ts, pkg->header); + } else { + xx = qva->qva_showPackage(qva, ts, spec->sourceHeader); + } + +exit: + spec = rpmSpecFree(spec); + return res; +} diff --git a/cliutils.c b/cliutils.c new file mode 100644 index 0000000..cbbc7fe --- /dev/null +++ b/cliutils.c @@ -0,0 +1,79 @@ +#include "system.h" +#if HAVE_MCHECK_H +#include +#endif +#include + +#include +#include +#include +#include +#include +#include "cliutils.h" +#include "debug.h" + +static pid_t pipeChild = 0; + +RPM_GNUC_NORETURN +void argerror(const char * desc) +{ + fprintf(stderr, _("%s: %s\n"), __progname, desc); + exit(EXIT_FAILURE); +} + +static void printVersion(FILE * fp) +{ + fprintf(fp, _("RPM version %s\n"), rpmEVR); +} + +static void printBanner(FILE * fp) +{ + fprintf(fp, _("Copyright (C) 1998-2002 - Red Hat, Inc.\n")); + fprintf(fp, _("This program may be freely redistributed under the terms of the GNU GPL\n")); +} + +void printUsage(poptContext con, FILE * fp, int flags) +{ + printVersion(fp); + printBanner(fp); + fprintf(fp, "\n"); + + if (rpmIsVerbose()) + poptPrintHelp(con, fp, flags); + else + poptPrintUsage(con, fp, flags); +} + +int initPipe(void) +{ + int p[2]; + + if (pipe(p) < 0) { + fprintf(stderr, _("creating a pipe for --pipe failed: %m\n")); + return -1; + } + + if (!(pipeChild = fork())) { + (void) signal(SIGPIPE, SIG_DFL); + (void) close(p[1]); + (void) dup2(p[0], STDIN_FILENO); + (void) close(p[0]); + (void) execl("/bin/sh", "/bin/sh", "-c", rpmcliPipeOutput, NULL); + fprintf(stderr, _("exec failed\n")); + exit(EXIT_FAILURE); + } + + (void) close(p[0]); + (void) dup2(p[1], STDOUT_FILENO); + (void) close(p[1]); + return 0; +} + +void finishPipe(void) +{ + int status; + if (pipeChild) { + (void) fclose(stdout); + (void) waitpid(pipeChild, &status, 0); + } +} diff --git a/cliutils.h b/cliutils.h new file mode 100644 index 0000000..875b950 --- /dev/null +++ b/cliutils.h @@ -0,0 +1,20 @@ +#ifndef _CLIUTIL_H +#define _CLIUTIL_H + +#include +#include +#include + +/* "normalized" exit: avoid overflowing and xargs special value 255 */ +#define RETVAL(rc) (((rc) > 254) ? 254 : (rc)) + +RPM_GNUC_NORETURN +void argerror(const char * desc); + +void printUsage(poptContext con, FILE * fp, int flags); + +int initPipe(void); + +void finishPipe(void); + +#endif /* _CLIUTIL_H */ diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..dc84c68 --- /dev/null +++ b/config.guess @@ -0,0 +1,1501 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-11-20' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..40c6734 --- /dev/null +++ b/config.h.in @@ -0,0 +1,353 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Build with dmalloc support? */ +#undef DMALLOC + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Build with plugin support? */ +#undef ENABLE_PLUGINS + +/* Define to 1 if you have the `basename' function. */ +#undef HAVE_BASENAME + +/* Define as 1 if you bzip2 1.0 */ +#undef HAVE_BZ2_1_0 + +/* Define to 1 if you have the header file. */ +#undef HAVE_BZLIB_H + +/* Have cap_compare function? */ +#undef HAVE_CAP_COMPARE + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define if you have the header file */ +#undef HAVE_DB_H + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_DIRENT_H + +/* Define to 1 if you have the `dirname' function. */ +#undef HAVE_DIRNAME + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_DWARF_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_GELF_H + +/* Define to 1 if you have the `getcwd' function. */ +#undef HAVE_GETCWD + +/* Define to 1 if you have the header file. */ +#undef HAVE_GETOPT_H + +/* Define to 1 if you have the `getpagesize' function. */ +#undef HAVE_GETPAGESIZE + +/* Define to 1 if you have the `getpassphrase' function. */ +#undef HAVE_GETPASSPHRASE + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define to 1 if you have the header file. */ +#undef HAVE_GLOB_H + +/* Define as 1 if your zlib has gzseek() */ +#undef HAVE_GZSEEK + +/* Define if you have the iconv() function. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `lchown' function. */ +#undef HAVE_LCHOWN + +/* Define to 1 if you have the 'elf' library (-lelf). */ +#undef HAVE_LIBELF + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBIO_H + +/* Define to 1 if you have the `nsl' library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define to 1 if you have the `port' library (-lport). */ +#undef HAVE_LIBPORT + +/* Define to 1 if you have the `pthread' library (-lpthread). */ +#undef HAVE_LIBPTHREAD + +/* Define to 1 if you have the `selinux' library (-lselinux). */ +#undef HAVE_LIBSELINUX + +/* Define to 1 if you have the `semanage' library (-lsemanage). */ +#undef HAVE_LIBSEMANAGE + +/* Define to 1 if you have the `thread' library (-lthread). */ +#undef HAVE_LIBTHREAD + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LZMA_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MCHECK_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mkstemp' function. */ +#undef HAVE_MKSTEMP + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the `mtrace' function. */ +#undef HAVE_MTRACE + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +#undef HAVE_NDIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NSPR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NSS_H + +/* Define if the patch call you'll be using is 2.1 or older */ +#undef HAVE_OLDPATCH_21 + +/* Define to 1 if you have the header file. */ +#undef HAVE_POLL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_PTHREAD_H + +/* Define to 1 if you have the `putenv' function. */ +#undef HAVE_PUTENV + +/* Define to 1 if you have the `realpath' function. */ +#undef HAVE_REALPATH + +/* Define to 1 if you have the `regcomp' function. */ +#undef HAVE_REGCOMP + +/* Define to 1 if you have the header file. */ +#undef HAVE_SECHASH_H + +/* Define to 1 if you have the `setenv' function. */ +#undef HAVE_SETENV + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `stpcpy' function. */ +#undef HAVE_STPCPY + +/* Define to 1 if you have the `stpncpy' function. */ +#undef HAVE_STPNCPY + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if `d_type' is a member of `struct dirent'. */ +#undef HAVE_STRUCT_DIRENT_D_TYPE + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_DIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_IPC_H + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_NDIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SYSTEMCFG_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_UTSNAME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `unsetenv' function. */ +#undef HAVE_UNSETENV + +/* Define to 1 if you have the header file. */ +#undef HAVE_ZLIB_H + +/* Define to 1 if you have the `__secure_getenv' function. */ +#undef HAVE___SECURE_GETENV + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if `major', `minor', and `makedev' are declared in . + */ +#undef MAJOR_IN_MKDEV + +/* Define to 1 if `major', `minor', and `makedev' are declared in + . */ +#undef MAJOR_IN_SYSMACROS + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* canonical vendor */ +#undef RPMCANONVENDOR + +/* Define if struct statfs has the f_bavail member */ +#undef STATFS_HAS_F_BAVAIL + +/* statfs in (for Digital Unix 4.0D systems) */ +#undef STATFS_IN_SYS_MOUNT + +/* statfs in (for Irix 6.4 systems) */ +#undef STATFS_IN_SYS_STATFS + +/* statfs in (for solaris 2.6+ systems) */ +#undef STATFS_IN_SYS_STATVFS + +/* statfs in (for linux systems) */ +#undef STATFS_IN_SYS_VFS + +/* Define if the statfs() call takes 4 arguments */ +#undef STAT_STATFS4 + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Use the included glob.c? */ +#undef USE_GNU_GLOB + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Version number of package */ +#undef VERSION + +/* Build with acl support? */ +#undef WITH_ACL + +/* Build with capability support? */ +#undef WITH_CAP + +/* Build with lua support? */ +#undef WITH_LUA + +/* Build with selinux support? */ +#undef WITH_SELINUX + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* A full path to a program, possibly with arguments, that will create a + directory and all necessary parent directories, ala 'mkdir -p' */ +#undef __MKDIR_P + +/* Define to `int' if does not define. */ +#undef mode_t + +/* Define to `long int' if does not define. */ +#undef off_t + +/* Define to `int' if does not define. */ +#undef pid_t + +/* Define to `unsigned int' if does not define. */ +#undef size_t diff --git a/config.rpath b/config.rpath new file mode 100755 index 0000000..c492a93 --- /dev/null +++ b/config.rpath @@ -0,0 +1,614 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2006 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + darwin*) + case $cc_basename in + xlc*) + wl='-Wl,' + ;; + esac + ;; + mingw* | pw32* | os2*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux*) + case $cc_basename in + icc* | ecc*) + wl='-Wl,' + ;; + pgcc | pgf77 | pgf90) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + sco3.2v5*) + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we cannot use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + interix3*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if test "$GCC" = yes ; then + : + else + case $cc_basename in + xlc*) + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | kfreebsd*-gnu | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + openbsd*) + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. +libname_spec='lib$name' +case "$host_os" in + aix3*) + ;; + aix4* | aix5*) + ;; + amigaos*) + ;; + beos*) + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32*) + shrext=.dll + ;; + darwin* | rhapsody*) + shrext=.dylib + ;; + dgux*) + ;; + freebsd1*) + ;; + kfreebsd*-gnu) + ;; + freebsd* | dragonfly*) + ;; + gnu*) + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + ;; + interix3*) + ;; + irix5* | irix6* | nonstopux*) + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux*) + ;; + knetbsd*-gnu) + ;; + netbsd*) + ;; + newsos6) + ;; + nto-qnx*) + ;; + openbsd*) + ;; + os2*) + libname_spec='$name' + shrext=.dll + ;; + osf3* | osf4* | osf5*) + ;; + solaris*) + ;; + sunos4*) + ;; + sysv4 | sysv4.3*) + ;; + sysv4*MP*) + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + ;; + uts4*) + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..c6bae0c --- /dev/null +++ b/configure @@ -0,0 +1,27357 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for rpm 4.9.1. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: rpm-maint@lists.rpm.org about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='rpm' +PACKAGE_TARNAME='rpm' +PACKAGE_VERSION='4.9.1' +PACKAGE_STRING='rpm 4.9.1' +PACKAGE_BUGREPORT='rpm-maint@lists.rpm.org' +PACKAGE_URL='' + +ac_unique_file="rpmqv.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +gt_needs= +ac_header_list= +enable_option_checking=no +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +dirstamp +AUTOM4TE +HACKINGDOCS_FALSE +HACKINGDOCS_TRUE +DOXYGEN_FALSE +DOXYGEN_TRUE +WITH_INTERNAL_DB_FALSE +WITH_INTERNAL_DB_TRUE +subdirs +RPMCONFIGDIR +RPMCANONGNU +RPMCANONOS +RPMCANONVENDOR +RPMCANONARCH +RPMCANONCOLOR +ENABLE_PLUGINS_FALSE +ENABLE_PLUGINS_TRUE +WITH_LUA_FALSE +WITH_LUA_TRUE +LUA_LIBS +LUA_CFLAGS +ACL_FALSE +ACL_TRUE +WITH_ACL_LIB +CAP_FALSE +CAP_TRUE +WITH_CAP_LIB +SELINUX_FALSE +SELINUX_TRUE +WITH_SEMANAGE_LIB +WITH_SELINUX_LIB +HAVE_DOT +DOXYGEN +ENABLE_PYTHON_FALSE +ENABLE_PYTHON_TRUE +WITH_PYTHON_LIB +WITH_PYTHON_INCLUDE +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +LIBOBJS +POSUB +LTLIBINTL +LIBINTL +INTLLIBS +LTLIBICONV +LIBICONV +INTL_MACOSX_LIBS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +USE_NLS +WITH_DB_LIB +WITH_POPT_LIB +WITH_POPT_INCLUDE +WITH_MAGIC_LIB +WITH_MAGIC_INCLUDE +WITH_NSS_LIB +WITH_NSS_INCLUDE +LIBDWARF_FALSE +LIBDWARF_TRUE +LIBELF_FALSE +LIBELF_TRUE +WITH_LIBELF_LIB +WITH_LZMA_LIB +WITH_BZ2_LIB +WITH_ZLIB_LIB +WITH_ZLIB_INCLUDE +__MKDIR_P +__FAKECHROOT +__STRIP +__OBJDUMP +__OBJCOPY +__NM +__LD +__TAR +__SSH +__SEMODULE +__SED +__RSH +__RM +__PYTHON +__PGP +__PERL +__RESTORECON +__PATCH +__MV +__MKDIR +__MAKE +__XZ +__LZIP +__LRZIP +__INSTALL +__ID +__UNZIP +__GZIP +__GREP +__GPG +__FILE +__CURL +__CPIO +__CP +__CHOWN +__CHMOD +__CHGRP +__CAT +__BZIP2 +FIXPERMS +AS +__CC +YFLAGS +YACC +CXXCPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +LN_S +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +EGREP +GREP +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_static +enable_shared +with_pic +enable_fast_install +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_largefile +with_external_db +enable_nls +enable_rpath +with_libiconv_prefix +with_libintl_prefix +enable_python +with_hackingdocs +with_selinux +with_cap +with_acl +with_lua +enable_plugins +with_dmalloc +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +CXX +CXXFLAGS +CCC +CXXCPP +YACC +YFLAGS +LUA_CFLAGS +LUA_LIBS' +ac_subdirs_all='db3' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures rpm 4.9.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/rpm] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of rpm 4.9.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-largefile omit support for large files + --disable-nls do not use Native Language Support + --disable-rpath do not hardcode runtime library paths + --enable-python build rpm python bindings + --disable-plugins build without plugin support + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + --with-external-db build against an external Berkeley db + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + --with-hackingdocs build rpm hacking docs + --with-selinux build with selinux support + --with-cap build with capability support + --with-acl build with acl support + --with-lua build with lua support + --with-dmalloc build with dmalloc debugging support + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + YACC The `Yet Another Compiler Compiler' implementation to use. + Defaults to the first program found out of: `bison -y', `byacc', + `yacc'. + YFLAGS The list of arguments that will be passed by default to $YACC. + This script will default YFLAGS to the empty string to avoid a + default value of `-d' given by some make applications. + LUA_CFLAGS C compiler flags for LUA, overriding pkg-config + LUA_LIBS linker flags for LUA, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +rpm configure 4.9.1 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## -------------------------------------- ## +## Report this to rpm-maint@lists.rpm.org ## +## -------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by rpm $as_me 4.9.1, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +gt_needs="$gt_needs " +as_fn_append ac_header_list " stdlib.h" +as_fn_append ac_header_list " unistd.h" +as_fn_append ac_header_list " sys/param.h" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +ac_config_headers="$ac_config_headers config.h" + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='rpm' + VERSION='4.9.1' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 +$as_echo_n "checking how to create a ustar tar archive... " >&6; } +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar plaintar pax cpio none' +_am_tools=${am_cv_prog_tar_ustar-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + { echo "$as_me:$LINENO: $_am_tar --version" >&5 + ($_am_tar --version) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && break + done + am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x ustar -w "$$tardir"' + am__tar_='pax -L -x ustar -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H ustar -L' + am__tar_='find "$tardir" -print | cpio -o -H ustar -L' + am__untar='cpio -i -H ustar -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_ustar}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 + (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + rm -rf conftest.dir + if test -s conftest.tar; then + { echo "$as_me:$LINENO: $am__untar &5 + ($am__untar &5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +if ${am_cv_prog_tar_ustar+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_prog_tar_ustar=$_am_tool +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 +$as_echo "$am_cv_prog_tar_ustar" >&6; } + + + + + + +ac_config_commands="$ac_config_commands tests/atconfig" + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=no +fi + + + + + + + + + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4' +macro_revision='1.3293' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + lt_prog_compiler_pic='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +for ac_prog in 'bison -y' byacc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_YACC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$YACC"; then + ac_cv_prog_YACC="$YACC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_YACC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +YACC=$ac_cv_prog_YACC +if test -n "$YACC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 +$as_echo "$YACC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$YACC" && break +done +test -n "$YACC" || YACC="yacc" + + +__CC=$CC + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + +fi + + +if test "$ac_cv_prog_cc_c99" = no; then + as_fn_error $? "ISO C99 capable compiler required" "$LINENO" 5 +fi + +AS=${AS-as} + +if test "$GCC" = yes; then + CFLAGS="$CFLAGS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wno-char-subscripts" + # XXX disabled for now due to noise from NSPR headers + # CFLAGS="$CFLAGS -Wstrict-prototypes" + cflags_to_try="-fno-strict-aliasing -fstack-protector -Wempty-body -Wno-unused-but-set-variable" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking supported compiler flags" >&5 +$as_echo_n "checking supported compiler flags... " >&6; } + old_cflags=$CFLAGS + echo + for flag in $cflags_to_try; do + CFLAGS="$CFLAGS $flag" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + echo " $flag" + RPMCFLAGS="$RPMCFLAGS $flag" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS=$old_cflags + done + CFLAGS="$CFLAGS $RPMCFLAGS" +fi +export CFLAGS + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking POSIX chmod" >&5 +$as_echo_n "checking POSIX chmod... " >&6; } +touch foo.chmodtest +chmod 744 foo.chmodtest +chmod +X foo.chmodtest 2>/dev/null +a=`ls -l foo.chmodtest | awk '{print substr($1,1,10)}'` +rm -f foo.chmodtest +if test "$a" = "-rwxr-xr-x"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + FIXPERMS=a+rX,u+w,g-w,o-w +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (tell your OS vendor about GNU fileutils)" >&5 +$as_echo "no (tell your OS vendor about GNU fileutils)" >&6; } + FIXPERMS=a+r,u+w,g-w,o-w +fi + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + +if test "$cross_compiling" = "yes"; then + MYPATH=":" +else + MYPATH=$PATH +fi + +# Extract the first word of "bzip2", so it can be a program name with args. +set dummy bzip2; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___BZIP2+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__BZIP2 in + [\\/]* | ?:[\\/]*) + ac_cv_path___BZIP2="$__BZIP2" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___BZIP2="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___BZIP2" && ac_cv_path___BZIP2="/usr/bin/bzip2" + ;; +esac +fi +__BZIP2=$ac_cv_path___BZIP2 +if test -n "$__BZIP2"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__BZIP2" >&5 +$as_echo "$__BZIP2" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "cat", so it can be a program name with args. +set dummy cat; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___CAT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__CAT in + [\\/]* | ?:[\\/]*) + ac_cv_path___CAT="$__CAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___CAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___CAT" && ac_cv_path___CAT="/bin/cat" + ;; +esac +fi +__CAT=$ac_cv_path___CAT +if test -n "$__CAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__CAT" >&5 +$as_echo "$__CAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "chgrp", so it can be a program name with args. +set dummy chgrp; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___CHGRP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__CHGRP in + [\\/]* | ?:[\\/]*) + ac_cv_path___CHGRP="$__CHGRP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___CHGRP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___CHGRP" && ac_cv_path___CHGRP="/bin/chgrp" + ;; +esac +fi +__CHGRP=$ac_cv_path___CHGRP +if test -n "$__CHGRP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__CHGRP" >&5 +$as_echo "$__CHGRP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "chmod", so it can be a program name with args. +set dummy chmod; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___CHMOD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__CHMOD in + [\\/]* | ?:[\\/]*) + ac_cv_path___CHMOD="$__CHMOD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___CHMOD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___CHMOD" && ac_cv_path___CHMOD="/bin/chmod" + ;; +esac +fi +__CHMOD=$ac_cv_path___CHMOD +if test -n "$__CHMOD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__CHMOD" >&5 +$as_echo "$__CHMOD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "chown", so it can be a program name with args. +set dummy chown; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___CHOWN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__CHOWN in + [\\/]* | ?:[\\/]*) + ac_cv_path___CHOWN="$__CHOWN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___CHOWN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___CHOWN" && ac_cv_path___CHOWN="/bin/chown" + ;; +esac +fi +__CHOWN=$ac_cv_path___CHOWN +if test -n "$__CHOWN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__CHOWN" >&5 +$as_echo "$__CHOWN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "cp", so it can be a program name with args. +set dummy cp; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___CP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__CP in + [\\/]* | ?:[\\/]*) + ac_cv_path___CP="$__CP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___CP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___CP" && ac_cv_path___CP="/bin/cp" + ;; +esac +fi +__CP=$ac_cv_path___CP +if test -n "$__CP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__CP" >&5 +$as_echo "$__CP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "cpio", so it can be a program name with args. +set dummy cpio; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___CPIO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__CPIO in + [\\/]* | ?:[\\/]*) + ac_cv_path___CPIO="$__CPIO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___CPIO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___CPIO" && ac_cv_path___CPIO="/bin/cpio" + ;; +esac +fi +__CPIO=$ac_cv_path___CPIO +if test -n "$__CPIO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__CPIO" >&5 +$as_echo "$__CPIO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "curl", so it can be a program name with args. +set dummy curl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___CURL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__CURL in + [\\/]* | ?:[\\/]*) + ac_cv_path___CURL="$__CURL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___CURL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___CURL" && ac_cv_path___CURL="/usr/bin/curl" + ;; +esac +fi +__CURL=$ac_cv_path___CURL +if test -n "$__CURL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__CURL" >&5 +$as_echo "$__CURL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "file", so it can be a program name with args. +set dummy file; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___FILE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__FILE in + [\\/]* | ?:[\\/]*) + ac_cv_path___FILE="$__FILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___FILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___FILE" && ac_cv_path___FILE="/usr/bin/file" + ;; +esac +fi +__FILE=$ac_cv_path___FILE +if test -n "$__FILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__FILE" >&5 +$as_echo "$__FILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "gpg", so it can be a program name with args. +set dummy gpg; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___GPG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__GPG in + [\\/]* | ?:[\\/]*) + ac_cv_path___GPG="$__GPG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___GPG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___GPG" && ac_cv_path___GPG="/usr/bin/gpg" + ;; +esac +fi +__GPG=$ac_cv_path___GPG +if test -n "$__GPG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__GPG" >&5 +$as_echo "$__GPG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "grep", so it can be a program name with args. +set dummy grep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__GREP in + [\\/]* | ?:[\\/]*) + ac_cv_path___GREP="$__GREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___GREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___GREP" && ac_cv_path___GREP="/bin/grep" + ;; +esac +fi +__GREP=$ac_cv_path___GREP +if test -n "$__GREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__GREP" >&5 +$as_echo "$__GREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "gzip", so it can be a program name with args. +set dummy gzip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___GZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__GZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path___GZIP="$__GZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___GZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___GZIP" && ac_cv_path___GZIP="/bin/gzip" + ;; +esac +fi +__GZIP=$ac_cv_path___GZIP +if test -n "$__GZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__GZIP" >&5 +$as_echo "$__GZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "unzip", so it can be a program name with args. +set dummy unzip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___UNZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path___UNZIP="$__UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___UNZIP" && ac_cv_path___UNZIP="/usr/bin/unzip" + ;; +esac +fi +__UNZIP=$ac_cv_path___UNZIP +if test -n "$__UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__UNZIP" >&5 +$as_echo "$__UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "id", so it can be a program name with args. +set dummy id; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___ID+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__ID in + [\\/]* | ?:[\\/]*) + ac_cv_path___ID="$__ID" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___ID="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___ID" && ac_cv_path___ID="/usr/bin/id" + ;; +esac +fi +__ID=$ac_cv_path___ID +if test -n "$__ID"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__ID" >&5 +$as_echo "$__ID" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "install", so it can be a program name with args. +set dummy install; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___INSTALL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__INSTALL in + [\\/]* | ?:[\\/]*) + ac_cv_path___INSTALL="$__INSTALL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___INSTALL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___INSTALL" && ac_cv_path___INSTALL="/usr/bin/install" + ;; +esac +fi +__INSTALL=$ac_cv_path___INSTALL +if test -n "$__INSTALL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__INSTALL" >&5 +$as_echo "$__INSTALL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "lrzip", so it can be a program name with args. +set dummy lrzip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___LRZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__LRZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path___LRZIP="$__LRZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___LRZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___LRZIP" && ac_cv_path___LRZIP="/usr/bin/lrzip" + ;; +esac +fi +__LRZIP=$ac_cv_path___LRZIP +if test -n "$__LRZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__LRZIP" >&5 +$as_echo "$__LRZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "lzip", so it can be a program name with args. +set dummy lzip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___LZIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__LZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path___LZIP="$__LZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___LZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___LZIP" && ac_cv_path___LZIP="/usr/bin/lzip" + ;; +esac +fi +__LZIP=$ac_cv_path___LZIP +if test -n "$__LZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__LZIP" >&5 +$as_echo "$__LZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "xz", so it can be a program name with args. +set dummy xz; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___XZ+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__XZ in + [\\/]* | ?:[\\/]*) + ac_cv_path___XZ="$__XZ" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___XZ="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___XZ" && ac_cv_path___XZ="/usr/bin/xz" + ;; +esac +fi +__XZ=$ac_cv_path___XZ +if test -n "$__XZ"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__XZ" >&5 +$as_echo "$__XZ" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "make", so it can be a program name with args. +set dummy make; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___MAKE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__MAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path___MAKE="$__MAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___MAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___MAKE" && ac_cv_path___MAKE="/usr/bin/make" + ;; +esac +fi +__MAKE=$ac_cv_path___MAKE +if test -n "$__MAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__MAKE" >&5 +$as_echo "$__MAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "mkdir", so it can be a program name with args. +set dummy mkdir; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___MKDIR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__MKDIR in + [\\/]* | ?:[\\/]*) + ac_cv_path___MKDIR="$__MKDIR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___MKDIR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___MKDIR" && ac_cv_path___MKDIR="/bin/mkdir" + ;; +esac +fi +__MKDIR=$ac_cv_path___MKDIR +if test -n "$__MKDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__MKDIR" >&5 +$as_echo "$__MKDIR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "mv", so it can be a program name with args. +set dummy mv; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___MV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__MV in + [\\/]* | ?:[\\/]*) + ac_cv_path___MV="$__MV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___MV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___MV" && ac_cv_path___MV="/bin/mv" + ;; +esac +fi +__MV=$ac_cv_path___MV +if test -n "$__MV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__MV" >&5 +$as_echo "$__MV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "patch", so it can be a program name with args. +set dummy patch; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___PATCH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__PATCH in + [\\/]* | ?:[\\/]*) + ac_cv_path___PATCH="$__PATCH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___PATCH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___PATCH" && ac_cv_path___PATCH="/usr/bin/patch" + ;; +esac +fi +__PATCH=$ac_cv_path___PATCH +if test -n "$__PATCH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__PATCH" >&5 +$as_echo "$__PATCH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "restorecon", so it can be a program name with args. +set dummy restorecon; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___RESTORECON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__RESTORECON in + [\\/]* | ?:[\\/]*) + ac_cv_path___RESTORECON="$__RESTORECON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___RESTORECON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___RESTORECON" && ac_cv_path___RESTORECON="/sbin/restorecon" + ;; +esac +fi +__RESTORECON=$ac_cv_path___RESTORECON +if test -n "$__RESTORECON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__RESTORECON" >&5 +$as_echo "$__RESTORECON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking old version of patch" >&5 +$as_echo_n "checking old version of patch... " >&6; } + PATCHVERSION=`patch --version 2>&1` + + if test "$PATCHVERSION" = "Patch version 2.1"; then + +$as_echo "#define HAVE_OLDPATCH_21 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: patch older then 2.2 found" >&5 +$as_echo "patch older then 2.2 found" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: patch later then 2.2 found" >&5 +$as_echo "patch later then 2.2 found" >&6; } + fi + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path___PERL="$__PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___PERL" && ac_cv_path___PERL="/usr/bin/perl" + ;; +esac +fi +__PERL=$ac_cv_path___PERL +if test -n "$__PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__PERL" >&5 +$as_echo "$__PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "pgp", so it can be a program name with args. +set dummy pgp; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___PGP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__PGP in + [\\/]* | ?:[\\/]*) + ac_cv_path___PGP="$__PGP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___PGP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___PGP" && ac_cv_path___PGP="/usr/bin/pgp" + ;; +esac +fi +__PGP=$ac_cv_path___PGP +if test -n "$__PGP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__PGP" >&5 +$as_echo "$__PGP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path___PYTHON="$__PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___PYTHON" && ac_cv_path___PYTHON="/usr/bin/python" + ;; +esac +fi +__PYTHON=$ac_cv_path___PYTHON +if test -n "$__PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__PYTHON" >&5 +$as_echo "$__PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "rm", so it can be a program name with args. +set dummy rm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___RM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__RM in + [\\/]* | ?:[\\/]*) + ac_cv_path___RM="$__RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___RM" && ac_cv_path___RM="/bin/rm" + ;; +esac +fi +__RM=$ac_cv_path___RM +if test -n "$__RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__RM" >&5 +$as_echo "$__RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "rsh", so it can be a program name with args. +set dummy rsh; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___RSH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__RSH in + [\\/]* | ?:[\\/]*) + ac_cv_path___RSH="$__RSH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___RSH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___RSH" && ac_cv_path___RSH="/usr/bin/rsh" + ;; +esac +fi +__RSH=$ac_cv_path___RSH +if test -n "$__RSH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__RSH" >&5 +$as_echo "$__RSH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "sed", so it can be a program name with args. +set dummy sed; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__SED in + [\\/]* | ?:[\\/]*) + ac_cv_path___SED="$__SED" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___SED="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___SED" && ac_cv_path___SED="/bin/sed" + ;; +esac +fi +__SED=$ac_cv_path___SED +if test -n "$__SED"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__SED" >&5 +$as_echo "$__SED" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "semodule", so it can be a program name with args. +set dummy semodule; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___SEMODULE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__SEMODULE in + [\\/]* | ?:[\\/]*) + ac_cv_path___SEMODULE="$__SEMODULE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___SEMODULE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___SEMODULE" && ac_cv_path___SEMODULE="/usr/bin/semodule" + ;; +esac +fi +__SEMODULE=$ac_cv_path___SEMODULE +if test -n "$__SEMODULE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__SEMODULE" >&5 +$as_echo "$__SEMODULE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "ssh", so it can be a program name with args. +set dummy ssh; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___SSH+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__SSH in + [\\/]* | ?:[\\/]*) + ac_cv_path___SSH="$__SSH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___SSH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___SSH" && ac_cv_path___SSH="/usr/bin/ssh" + ;; +esac +fi +__SSH=$ac_cv_path___SSH +if test -n "$__SSH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__SSH" >&5 +$as_echo "$__SSH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "tar", so it can be a program name with args. +set dummy tar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___TAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__TAR in + [\\/]* | ?:[\\/]*) + ac_cv_path___TAR="$__TAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___TAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___TAR" && ac_cv_path___TAR="/bin/tar" + ;; +esac +fi +__TAR=$ac_cv_path___TAR +if test -n "$__TAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__TAR" >&5 +$as_echo "$__TAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +# Extract the first word of "ld", so it can be a program name with args. +set dummy ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__LD in + [\\/]* | ?:[\\/]*) + ac_cv_path___LD="$__LD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___LD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___LD" && ac_cv_path___LD="/usr/bin/ld" + ;; +esac +fi +__LD=$ac_cv_path___LD +if test -n "$__LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__LD" >&5 +$as_echo "$__LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__NM in + [\\/]* | ?:[\\/]*) + ac_cv_path___NM="$__NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___NM" && ac_cv_path___NM="/usr/bin/nm" + ;; +esac +fi +__NM=$ac_cv_path___NM +if test -n "$__NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__NM" >&5 +$as_echo "$__NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "objcopy", so it can be a program name with args. +set dummy objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path___OBJCOPY="$__OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___OBJCOPY" && ac_cv_path___OBJCOPY="/usr/bin/objcopy" + ;; +esac +fi +__OBJCOPY=$ac_cv_path___OBJCOPY +if test -n "$__OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__OBJCOPY" >&5 +$as_echo "$__OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__OBJDUMP in + [\\/]* | ?:[\\/]*) + ac_cv_path___OBJDUMP="$__OBJDUMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___OBJDUMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___OBJDUMP" && ac_cv_path___OBJDUMP="/usr/bin/objdump" + ;; +esac +fi +__OBJDUMP=$ac_cv_path___OBJDUMP +if test -n "$__OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__OBJDUMP" >&5 +$as_echo "$__OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path___STRIP="$__STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___STRIP" && ac_cv_path___STRIP="/usr/bin/strip" + ;; +esac +fi +__STRIP=$ac_cv_path___STRIP +if test -n "$__STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__STRIP" >&5 +$as_echo "$__STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "fakechroot", so it can be a program name with args. +set dummy fakechroot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path___FAKECHROOT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $__FAKECHROOT in + [\\/]* | ?:[\\/]*) + ac_cv_path___FAKECHROOT="$__FAKECHROOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $MYPATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path___FAKECHROOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path___FAKECHROOT" && ac_cv_path___FAKECHROOT="/usr/bin/fakechroot" + ;; +esac +fi +__FAKECHROOT=$ac_cv_path___FAKECHROOT +if test -n "$__FAKECHROOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $__FAKECHROOT" >&5 +$as_echo "$__FAKECHROOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + +if ! echo $MKDIR_P | grep -q mkdir; then + __MKDIR_P="`echo ${prefix}/lib/rpm/mkinstalldirs`" +else + __MKDIR_P=$MKDIR_P +fi + +cat >>confdefs.h <<_ACEOF +#define __MKDIR_P "${__MKDIR_P}" +_ACEOF + + + +#================= +# Check for zlib library. + +WITH_ZLIB_INCLUDE= +WITH_ZLIB_LIB= + +for ac_header in zlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ZLIB_H 1 +_ACEOF + + if test -z "${WITH_ZLIB_LIB}"; then : + + for zlib in z gz ; do + as_ac_Lib=`$as_echo "ac_cv_lib_${zlib}''_gzread" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzread in -l${zlib}" >&5 +$as_echo_n "checking for gzread in -l${zlib}... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${zlib} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gzread (); +int +main () +{ +return gzread (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + WITH_ZLIB_LIB="-l${zlib}"; break +fi + + done + + as_ac_Lib=`$as_echo "ac_cv_lib_${zlib}''_gzseek" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzseek in -l${zlib}" >&5 +$as_echo_n "checking for gzseek in -l${zlib}... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${zlib} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gzseek (); +int +main () +{ +return gzseek (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + +$as_echo "#define HAVE_GZSEEK 1" >>confdefs.h + +fi + + +fi + +else + + as_fn_error $? "missing required header zlib.h" "$LINENO" 5 + +fi + +done + + + + + +#================= +# Check for bzip2 library. + +for ac_header in bzlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "$ac_includes_default" +if test "x$ac_cv_header_bzlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BZLIB_H 1 +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bzread in -lbz2" >&5 +$as_echo_n "checking for bzread in -lbz2... " >&6; } +if ${ac_cv_lib_bz2_bzread+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbz2 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char bzread (); +int +main () +{ +return bzread (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bz2_bzread=yes +else + ac_cv_lib_bz2_bzread=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_bzread" >&5 +$as_echo "$ac_cv_lib_bz2_bzread" >&6; } +if test "x$ac_cv_lib_bz2_bzread" = xyes; then : + WITH_BZ2_LIB=-lbz2 +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzread in -lbz2" >&5 +$as_echo_n "checking for BZ2_bzread in -lbz2... " >&6; } +if ${ac_cv_lib_bz2_BZ2_bzread+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbz2 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char BZ2_bzread (); +int +main () +{ +return BZ2_bzread (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bz2_BZ2_bzread=yes +else + ac_cv_lib_bz2_BZ2_bzread=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzread" >&5 +$as_echo "$ac_cv_lib_bz2_BZ2_bzread" >&6; } +if test "x$ac_cv_lib_bz2_BZ2_bzread" = xyes; then : + + WITH_BZ2_LIB="-lbz2" + +$as_echo "#define HAVE_BZ2_1_0 1" >>confdefs.h + + +fi + + +fi + + +fi + +done + + + +#================= +# Check for lzma library. + +for ac_header in lzma.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default" +if test "x$ac_cv_header_lzma_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LZMA_H 1 +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzma_easy_encoder in -llzma" >&5 +$as_echo_n "checking for lzma_easy_encoder in -llzma... " >&6; } +if ${ac_cv_lib_lzma_lzma_easy_encoder+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llzma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char lzma_easy_encoder (); +int +main () +{ +return lzma_easy_encoder (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lzma_lzma_easy_encoder=yes +else + ac_cv_lib_lzma_lzma_easy_encoder=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_easy_encoder" >&5 +$as_echo "$ac_cv_lib_lzma_lzma_easy_encoder" >&6; } +if test "x$ac_cv_lib_lzma_lzma_easy_encoder" = xyes; then : + WITH_LZMA_LIB=-llzma +fi + + +fi + +done + + + +#================= + + + +ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname" +if test "x$ac_cv_func_gethostname" = xyes; then : + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostname in -lnsl" >&5 +$as_echo_n "checking for gethostname in -lnsl... " >&6; } +if ${ac_cv_lib_nsl_gethostname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostname (); +int +main () +{ +return gethostname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostname=yes +else + ac_cv_lib_nsl_gethostname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostname" >&6; } +if test "x$ac_cv_lib_nsl_gethostname" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBNSL 1 +_ACEOF + + LIBS="-lnsl $LIBS" + +fi + + +fi + + +for ac_header in poll.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default" +if test "x$ac_cv_header_poll_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_POLL_H 1 +_ACEOF + +fi + +done + + +for ac_header in pthread.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PTHREAD_H 1 +_ACEOF + +fi + +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_trylock in -lpthread" >&5 +$as_echo_n "checking for pthread_mutex_trylock in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_mutex_trylock+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_mutex_trylock (); +int +main () +{ +return pthread_mutex_trylock (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_mutex_trylock=yes +else + ac_cv_lib_pthread_pthread_mutex_trylock=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_mutex_trylock" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_mutex_trylock" >&6; } +if test "x$ac_cv_lib_pthread_pthread_mutex_trylock" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_mutex_trylock in -lpthread" >&5 +$as_echo_n "checking for __pthread_mutex_trylock in -lpthread... " >&6; } +if ${ac_cv_lib_pthread___pthread_mutex_trylock+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char __pthread_mutex_trylock (); +int +main () +{ +return __pthread_mutex_trylock (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread___pthread_mutex_trylock=yes +else + ac_cv_lib_pthread___pthread_mutex_trylock=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_mutex_trylock" >&5 +$as_echo "$ac_cv_lib_pthread___pthread_mutex_trylock" >&6; } +if test "x$ac_cv_lib_pthread___pthread_mutex_trylock" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mutex_lock in -lthread" >&5 +$as_echo_n "checking for mutex_lock in -lthread... " >&6; } +if ${ac_cv_lib_thread_mutex_lock+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char mutex_lock (); +int +main () +{ +return mutex_lock (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_thread_mutex_lock=yes +else + ac_cv_lib_thread_mutex_lock=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_thread_mutex_lock" >&5 +$as_echo "$ac_cv_lib_thread_mutex_lock" >&6; } +if test "x$ac_cv_lib_thread_mutex_lock" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBTHREAD 1 +_ACEOF + + LIBS="-lthread $LIBS" + +fi + + +fi + + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing aio_read" >&5 +$as_echo_n "checking for library containing aio_read... " >&6; } +if ${ac_cv_search_aio_read+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char aio_read (); +int +main () +{ +return aio_read (); + ; + return 0; +} +_ACEOF +for ac_lib in '' c rt aio posix4; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_aio_read=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_aio_read+:} false; then : + break +fi +done +if ${ac_cv_search_aio_read+:} false; then : + +else + ac_cv_search_aio_read=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_aio_read" >&5 +$as_echo "$ac_cv_search_aio_read" >&6; } +ac_res=$ac_cv_search_aio_read +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 +$as_echo_n "checking for library containing dlopen... " >&6; } +if ${ac_cv_search_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_dlopen=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dlopen+:} false; then : + break +fi +done +if ${ac_cv_search_dlopen+:} false; then : + +else + ac_cv_search_dlopen=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 +$as_echo "$ac_cv_search_dlopen" >&6; } +ac_res=$ac_cv_search_dlopen +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for writev in -lport" >&5 +$as_echo_n "checking for writev in -lport... " >&6; } +if ${ac_cv_lib_port_writev+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lport $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char writev (); +int +main () +{ +return writev (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_port_writev=yes +else + ac_cv_lib_port_writev=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_port_writev" >&5 +$as_echo "$ac_cv_lib_port_writev" >&6; } +if test "x$ac_cv_lib_port_writev" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPORT 1 +_ACEOF + + LIBS="-lport $LIBS" + +fi + + +#================= +# Check for libelf library. Prefer external, otherwise none. +WITH_LIBELF_LIB= +ac_fn_c_check_header_mongrel "$LINENO" "libelf.h" "ac_cv_header_libelf_h" "$ac_includes_default" +if test "x$ac_cv_header_libelf_h" = xyes; then : + +fi + + +for ac_header in gelf.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "gelf.h" "ac_cv_header_gelf_h" "$ac_includes_default" +if test "x$ac_cv_header_gelf_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GELF_H 1 +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gelf_getvernaux in -lelf" >&5 +$as_echo_n "checking for gelf_getvernaux in -lelf... " >&6; } +if ${ac_cv_lib_elf_gelf_getvernaux+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lelf $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gelf_getvernaux (); +int +main () +{ +return gelf_getvernaux (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_elf_gelf_getvernaux=yes +else + ac_cv_lib_elf_gelf_getvernaux=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_gelf_getvernaux" >&5 +$as_echo "$ac_cv_lib_elf_gelf_getvernaux" >&6; } +if test "x$ac_cv_lib_elf_gelf_getvernaux" = xyes; then : + + +$as_echo "#define HAVE_LIBELF 1" >>confdefs.h + + WITH_LIBELF_LIB="-lelf" + WITH_LIBELF=yes + +fi + + +fi + +done + + + if test "$WITH_LIBELF" = yes; then + LIBELF_TRUE= + LIBELF_FALSE='#' +else + LIBELF_TRUE='#' + LIBELF_FALSE= +fi + + +for ac_header in dwarf.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "dwarf.h" "ac_cv_header_dwarf_h" "$ac_includes_default" +if test "x$ac_cv_header_dwarf_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DWARF_H 1 +_ACEOF + + WITH_LIBDWARF=yes + +fi + +done + + if test "$WITH_LIBDWARF" = yes; then + LIBDWARF_TRUE= + LIBDWARF_FALSE='#' +else + LIBDWARF_TRUE='#' + LIBDWARF_FALSE= +fi + + +#================= +# Check for NSS library. +# We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS +# have a header named nss.h... so make extra check for NSS's sechash.h +# which we use too and hopefully is slightly more unique to NSS. +WITH_NSS_INCLUDE= +WITH_NSS_LIB= +for ac_header in nspr.h nss.h sechash.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + + as_fn_error $? "missing required NSPR / NSS header" "$LINENO" 5 + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NSS_NoDB_Init in -lnss3" >&5 +$as_echo_n "checking for NSS_NoDB_Init in -lnss3... " >&6; } +if ${ac_cv_lib_nss3_NSS_NoDB_Init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnss3 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char NSS_NoDB_Init (); +int +main () +{ +return NSS_NoDB_Init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nss3_NSS_NoDB_Init=yes +else + ac_cv_lib_nss3_NSS_NoDB_Init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nss3_NSS_NoDB_Init" >&5 +$as_echo "$ac_cv_lib_nss3_NSS_NoDB_Init" >&6; } +if test "x$ac_cv_lib_nss3_NSS_NoDB_Init" = xyes; then : + + WITH_NSS_LIB=-lnss3 + +else + + as_fn_error $? "missing required NSS library 'nss3'" "$LINENO" 5 + +fi + + + + +#================= +# Check for magic library. +WITH_MAGIC_INCLUDE= +WITH_MAGIC_LIB= + +ac_fn_c_check_header_mongrel "$LINENO" "magic.h" "ac_cv_header_magic_h" "$ac_includes_default" +if test "x$ac_cv_header_magic_h" = xyes; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for magic_open in -lmagic" >&5 +$as_echo_n "checking for magic_open in -lmagic... " >&6; } +if ${ac_cv_lib_magic_magic_open+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmagic $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char magic_open (); +int +main () +{ +return magic_open (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_magic_magic_open=yes +else + ac_cv_lib_magic_magic_open=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_magic_magic_open" >&5 +$as_echo "$ac_cv_lib_magic_magic_open" >&6; } +if test "x$ac_cv_lib_magic_magic_open" = xyes; then : + + WITH_MAGIC_INCLUDE= + WITH_MAGIC_LIB="-lmagic" + +else + + as_fn_error $? "missing required library 'libmagic'" "$LINENO" 5 + +fi + + +else + + as_fn_error $? "missing required header magic.h" "$LINENO" 5 + +fi + + + + + + +#================= +# Check for popt library. +WITH_POPT_INCLUDE= +WITH_POPT_LIB= + +ac_fn_c_check_header_mongrel "$LINENO" "popt.h" "ac_cv_header_popt_h" "$ac_includes_default" +if test "x$ac_cv_header_popt_h" = xyes; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for poptGetContext in -lpopt" >&5 +$as_echo_n "checking for poptGetContext in -lpopt... " >&6; } +if ${ac_cv_lib_popt_poptGetContext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpopt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char poptGetContext (); +int +main () +{ +return poptGetContext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_popt_poptGetContext=yes +else + ac_cv_lib_popt_poptGetContext=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_popt_poptGetContext" >&5 +$as_echo "$ac_cv_lib_popt_poptGetContext" >&6; } +if test "x$ac_cv_lib_popt_poptGetContext" = xyes; then : + + WITH_POPT_INCLUDE= + WITH_POPT_LIB="-lpopt" + +else + + as_fn_error $? "missing required library popt" "$LINENO" 5 + +fi + + +else + + as_fn_error $? "missing required header popt.h" "$LINENO" 5 + +fi + + + + + + +#================= +# Process --with/without-external-db + +# Check whether --with-external_db was given. +if test "${with_external_db+set}" = set; then : + withval=$with_external_db; case "$with_external_db" in +yes|no) ;; +*) as_fn_error $? "invalid argument to --with-external-db" "$LINENO" 5 ;; +esac +else + with_external_db=no +fi + + +case "$with_external_db" in +yes ) + for ac_header in db.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "db.h" "ac_cv_header_db_h" "$ac_includes_default" +if test "x$ac_cv_header_db_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DB_H 1 +_ACEOF + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #if ((DB_VERSION_MAJOR < 4) || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 5)) + #error Berkeley DB too old + #endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + WITH_DB_LIB=-ldb +else + as_fn_error $? "Berkeley DB version >= 4.5 required" "$LINENO" 5 + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +else + + as_fn_error $? "missing required header db.h" "$LINENO" 5 + +fi + +done + + ;; +* ) # Fall back to internal db if available + if test -x db/dist/configure ; then + +$as_echo "#define HAVE_DB_H 1" >>confdefs.h + + else + as_fn_error $? "internal Berkeley DB directory not present, see INSTALL" "$LINENO" 5 + fi + ;; +esac + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval +else + USE_NLS=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + + + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$localedir" || localedir='${datadir}/locale' + + + ac_config_commands="$ac_config_commands po-directories" + + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + acl_libdirstem=lib + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" \ + && { test -f "$additional_libdir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$additional_libdir/lib$name.dll.a"; }; }; then + found_dir="$additional_libdir" + if test -f "$additional_libdir/lib$name.$shlibext"; then + found_so="$additional_libdir/lib$name.$shlibext" + else + found_so="$additional_libdir/lib$name.dll.a" + fi + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" \ + && { test -f "$dir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$dir/lib$name.dll.a"; }; }; then + found_dir="$dir" + if test -f "$dir/lib$name.$shlibext"; then + found_so="$dir/lib$name.$shlibext" + else + found_so="$dir/lib$name.dll.a" + fi + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFPreferencesCopyAppValue=yes +else + gt_cv_func_CFPreferencesCopyAppValue=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFLocaleCopyCurrent=yes +else + gt_cv_func_CFLocaleCopyCurrent=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + + + LIBINTL= + LTLIBINTL= + POSUB= + + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if eval \${$gt_func_gnugettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libc=yes" +else + eval "$gt_func_gnugettext_libc=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$gt_func_gnugettext_libc + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if ${am_cv_func_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + +$as_echo "#define HAVE_ICONV 1" >>confdefs.h + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then : + withval=$with_libintl_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi + +fi + + LIBINTL= + LTLIBINTL= + INCINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" \ + && { test -f "$additional_libdir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$additional_libdir/lib$name.dll.a"; }; }; then + found_dir="$additional_libdir" + if test -f "$additional_libdir/lib$name.$shlibext"; then + found_so="$additional_libdir/lib$name.$shlibext" + else + found_so="$additional_libdir/lib$name.dll.a" + fi + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" \ + && { test -f "$dir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$dir/lib$name.dll.a"; }; }; then + found_dir="$dir" + if test -f "$dir/lib$name.$shlibext"; then + found_so="$dir/lib$name.$shlibext" + else + found_so="$dir/lib$name.dll.a" + fi + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if eval \${$gt_func_gnugettext_libintl+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libintl=yes" +else + eval "$gt_func_gnugettext_libintl=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +eval ac_res=\$$gt_func_gnugettext_libintl + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + fi + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + else + USE_NLS=no + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + if test "$USE_NLS" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h + + +$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h + + fi + + POSUB=po + fi + + + + INTLLIBS="$LIBINTL" + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5 +$as_echo_n "checking whether sys/types.h defines makedev... " >&6; } +if ${ac_cv_header_sys_types_h_makedev+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +return makedev(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_header_sys_types_h_makedev=yes +else + ac_cv_header_sys_types_h_makedev=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5 +$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } + +if test $ac_cv_header_sys_types_h_makedev = no; then +ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mkdev_h" = xyes; then : + +$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h + +fi + + + + if test $ac_cv_header_sys_mkdev_h = no; then + ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then : + +$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h + +fi + + + fi +fi + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if eval \${$as_ac_Header+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include <$ac_hdr> + +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_ac_Header=yes" +else + eval "$as_ac_Header=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + + + + ac_fn_c_check_member "$LINENO" "struct dirent" "d_type" "ac_cv_member_struct_dirent_d_type" " +#include +#ifdef HAVE_DIRENT_H +# include +#else +# define dirent direct +# ifdef HAVE_SYS_NDIR_H +# include +# endif +# ifdef HAVE_SYS_DIR_H +# include +# endif +# ifdef HAVE_NDIR_H +# include +# endif +#endif + +" +if test "x$ac_cv_member_struct_dirent_d_type" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_DIRENT_D_TYPE 1 +_ACEOF + + +fi + + + +for ac_header in limits.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" +if test "x$ac_cv_header_limits_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIMITS_H 1 +_ACEOF + +fi + +done + +for ac_header in fcntl.h getopt.h memory.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in sys/ipc.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ipc_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_IPC_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/utsname.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_utsname_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_UTSNAME_H 1 +_ACEOF + +fi + +done + + +for ac_header in sys/systemcfg.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/systemcfg.h" "ac_cv_header_sys_systemcfg_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_systemcfg_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_SYSTEMCFG_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/param.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_param_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_PARAM_H 1 +_ACEOF + +fi + +done + +for ac_header in libio.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "libio.h" "ac_cv_header_libio_h" "$ac_includes_default" +if test "x$ac_cv_header_libio_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBIO_H 1 +_ACEOF + +fi + +done + +for ac_header in mcheck.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "mcheck.h" "ac_cv_header_mcheck_h" "$ac_includes_default" +if test "x$ac_cv_header_mcheck_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MCHECK_H 1 +_ACEOF + +fi + +done + + +for ac_header in glob.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "glob.h" "ac_cv_header_glob_h" "$ac_includes_default" +if test "x$ac_cv_header_glob_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GLOB_H 1 +_ACEOF + +fi + +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct statfs" >&5 +$as_echo_n "checking for struct statfs... " >&6; } + +found_struct_statfs=no + +if test X$found_struct_statfs = Xno ; then +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include +int +main () +{ +struct statvfs sfs; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: in sys/statvfs.h" >&5 +$as_echo "in sys/statvfs.h" >&6; } + +$as_echo "#define STATFS_IN_SYS_STATVFS 1" >>confdefs.h + + found_struct_statfs=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +if test X$found_struct_statfs = Xno ; then +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include +int +main () +{ +struct statfs sfs; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: in sys/vfs.h" >&5 +$as_echo "in sys/vfs.h" >&6; } + +$as_echo "#define STATFS_IN_SYS_VFS 1" >>confdefs.h + + found_struct_statfs=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +if test X$found_struct_statfs = Xno ; then +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_PARAM_H +#include +#endif +#include +int +main () +{ +struct statfs sfs; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: in sys/mount.h" >&5 +$as_echo "in sys/mount.h" >&6; } + +$as_echo "#define STATFS_IN_SYS_MOUNT 1" >>confdefs.h + + found_struct_statfs=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +if test X$found_struct_statfs = Xno ; then +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include +int +main () +{ +struct statfs sfs; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: in sys/statfs.h" >&5 +$as_echo "in sys/statfs.h" >&6; } + +$as_echo "#define STATFS_IN_SYS_STATFS 1" >>confdefs.h + + found_struct_statfs=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +if test X$found_struct_statfs = Xno ; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: not found" >&5 +$as_echo "$as_me: WARNING: not found" >&2;} +fi + +if test X$found_struct_statfs = Xyes ; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for f_bavail member in struct statfs" >&5 +$as_echo_n "checking for f_bavail member in struct statfs... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#if STATFS_IN_SYS_STATVFS +# include + typedef struct statvfs STATFS_t; +#else + typedef struct statfs STATFS_t; +# if STATFS_IN_SYS_VFS +# include +# elif STATFS_IN_SYS_MOUNT +# include +# elif STATFS_IN_SYS_STATFS +# include +# endif +#endif +int +main () +{ +STATFS_t sfs; + sfs.f_bavail = 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define STATFS_HAS_F_BAVAIL 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +if test X$found_struct_statfs = Xyes ; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if statfs() requires 4 arguments" >&5 +$as_echo_n "checking if statfs() requires 4 arguments... " >&6; } +if test "$cross_compiling" = yes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef STATFS_IN_SYS_VFS +#include +#elif STATFS_IN_SYS_MOUNT +#include +#elif STATFS_IN_SYS_STATFS +#include +#endif +main() { + struct statfs sfs; + exit (statfs(".", &sfs, sizeof(sfs), 0)); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define STAT_STATFS4 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi + + +ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" +if test "x$ac_cv_type_mode_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define off_t long int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + + + + + + for ac_header in $ac_header_list +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + +for ac_func in getpagesize +do : + ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" +if test "x$ac_cv_func_getpagesize" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETPAGESIZE 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 +$as_echo_n "checking for working mmap... " >&6; } +if ${ac_cv_func_mmap_fixed_mapped+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_mmap_fixed_mapped=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include +#include + +#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + const char *cdata2; + int i, pagesize; + int fd, fd2; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + return 2; + if (write (fd, data, pagesize) != pagesize) + return 3; + close (fd); + + /* Next, check that the tail of a page is zero-filled. File must have + non-zero length, otherwise we risk SIGBUS for entire page. */ + fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); + if (fd2 < 0) + return 4; + cdata2 = ""; + if (write (fd2, cdata2, 1) != 1) + return 5; + data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); + if (data2 == MAP_FAILED) + return 6; + for (i = 0; i < pagesize; ++i) + if (*(data2 + i)) + return 7; + close (fd2); + if (munmap (data2, pagesize)) + return 8; + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + return 9; + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + return 10; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + return 11; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + return 12; + if (read (fd, data3, pagesize) != pagesize) + return 13; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + return 14; + close (fd); + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_mmap_fixed_mapped=yes +else + ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 +$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +$as_echo "#define HAVE_MMAP 1" >>confdefs.h + +fi +rm -f conftest.mmap conftest.txt + + +for ac_func in mtrace +do : + ac_fn_c_check_func "$LINENO" "mtrace" "ac_cv_func_mtrace" +if test "x$ac_cv_func_mtrace" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MTRACE 1 +_ACEOF + +fi +done + +for ac_func in putenv +do : + ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" +if test "x$ac_cv_func_putenv" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PUTENV 1 +_ACEOF + +fi +done + + +ac_fn_c_check_func "$LINENO" "stpcpy" "ac_cv_func_stpcpy" +if test "x$ac_cv_func_stpcpy" = xyes; then : + $as_echo "#define HAVE_STPCPY 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" stpcpy.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS stpcpy.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "stpncpy" "ac_cv_func_stpncpy" +if test "x$ac_cv_func_stpncpy" = xyes; then : + $as_echo "#define HAVE_STPNCPY 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" stpncpy.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS stpncpy.$ac_objext" + ;; +esac + +fi + + + +for ac_func in __secure_getenv +do : + ac_fn_c_check_func "$LINENO" "__secure_getenv" "ac_cv_func___secure_getenv" +if test "x$ac_cv_func___secure_getenv" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE___SECURE_GETENV 1 +_ACEOF + +fi +done + + +for ac_func in mkstemp getcwd basename dirname realpath setenv unsetenv regcomp lchown +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else + as_fn_error $? "function required by rpm" "$LINENO" 5 +fi +done + + + +$as_echo "#define USE_GNU_GLOB 1" >>confdefs.h + +case " $LIBOBJS " in + *" glob.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS glob.$ac_objext" + ;; +esac + +case " $LIBOBJS " in + *" fnmatch.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS fnmatch.$ac_objext" + ;; +esac + + +# Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; case "$enable_python" in +yes|no) ;; +*) as_fn_error $? "invalid argument to --enable-python" "$LINENO" 5 + ;; +esac +else + enable_python=no +fi + + +if test "$enable_python" = yes; then : + + + + + + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version >= 2.6" >&5 +$as_echo_n "checking whether $PYTHON version >= 2.6... " >&6; } + prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '2.6'.split('.'))) + [0, 0, 0] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +sys.exit(sys.hexversion < minverhex)" + if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 + ($PYTHON -c "$prog") >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + as_fn_error $? "too old" "$LINENO" 5 +fi + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.6" >&5 +$as_echo_n "checking for a Python interpreter with version >= 2.6... " >&6; } +if ${am_cv_pathless_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + + for am_cv_pathless_PYTHON in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do + test "$am_cv_pathless_PYTHON" = none && break + prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '2.6'.split('.'))) + [0, 0, 0] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +sys.exit(sys.hexversion < minverhex)" + if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5 + ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + break +fi + done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 +$as_echo "$am_cv_pathless_PYTHON" >&6; } + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args. +set dummy $am_cv_pathless_PYTHON; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + + + if test "$PYTHON" = :; then + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if ${am_cv_python_platform+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if ${am_cv_python_pythondir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if ${am_cv_python_pyexecdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + WITH_PYTHON_INCLUDE=`${PYTHON} -c 'from distutils.sysconfig import *; import sys; sys.stdout.write(get_python_inc())'` + WITH_PYTHON_SUBPACKAGE=1 + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -I$WITH_PYTHON_INCLUDE" + ac_fn_c_check_header_mongrel "$LINENO" "Python.h" "ac_cv_header_Python_h" "$ac_includes_default" +if test "x$ac_cv_header_Python_h" = xyes; then : + +else + as_fn_error $? "missing Python.h" "$LINENO" 5 + +fi + + + CPPFLAGS="$save_CPPFLAGS" + save_LIBS="$LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing Py_Main" >&5 +$as_echo_n "checking for library containing Py_Main... " >&6; } +if ${ac_cv_search_Py_Main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char Py_Main (); +int +main () +{ +return Py_Main (); + ; + return 0; +} +_ACEOF +for ac_lib in '' python${PYTHON_VERSION} python; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_Py_Main=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_Py_Main+:} false; then : + break +fi +done +if ${ac_cv_search_Py_Main+:} false; then : + +else + ac_cv_search_Py_Main=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_Py_Main" >&5 +$as_echo "$ac_cv_search_Py_Main" >&6; } +ac_res=$ac_cv_search_Py_Main +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + WITH_PYTHON_LIB="$ac_res" + +else + as_fn_error $? "missing python library" "$LINENO" 5 + +fi + + LIBS="$save_LIBS" + + fi + + + +else + + WITH_PYTHON_INCLUDE= + WITH_PYTHON_LIB= + WITH_PYTHON_SUBPACKAGE=0 + +fi + + + + + if test "$WITH_PYTHON_SUBPACKAGE" = 1; then + ENABLE_PYTHON_TRUE= + ENABLE_PYTHON_FALSE='#' +else + ENABLE_PYTHON_TRUE='#' + ENABLE_PYTHON_FALSE= +fi + + +# Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_DOXYGEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DOXYGEN" && ac_cv_path_DOXYGEN="no" + ;; +esac +fi +DOXYGEN=$ac_cv_path_DOXYGEN +if test -n "$DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 +$as_echo "$DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +# Check whether --with-hackingdocs was given. +if test "${with_hackingdocs+set}" = set; then : + withval=$with_hackingdocs; +else + with_hackingdocs=no +fi + + +case "$with_hackingdocs" in +auto) + if test "$DOXYGEN" = no; then : + with_hackingdocs=no +else + with_hackingdocs=no +fi + ;; +yes) + if test "$DOXYGEN" = no; then : + as_fn_error $? "rpm hacking docs eeds doxygen in PATH" "$LINENO" 5 +fi + ;; +esac +# Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_HAVE_DOT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$HAVE_DOT"; then + ac_cv_prog_HAVE_DOT="$HAVE_DOT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_HAVE_DOT="YES" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_HAVE_DOT" && ac_cv_prog_HAVE_DOT="NO" +fi +fi +HAVE_DOT=$ac_cv_prog_HAVE_DOT +if test -n "$HAVE_DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_DOT" >&5 +$as_echo "$HAVE_DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +WITH_SELINUX_LIB= + +# Check whether --with-selinux was given. +if test "${with_selinux+set}" = set; then : + withval=$with_selinux; case "$with_selinux" in +yes|no) ;; +*) as_fn_error $? "invalid argument to --with-selinux" "$LINENO" 5 + ;; +esac +else + with_selinux=no +fi + + +if test "$with_selinux" = yes; then : + + ac_fn_c_check_header_mongrel "$LINENO" "selinux/selinux.h" "ac_cv_header_selinux_selinux_h" "$ac_includes_default" +if test "x$ac_cv_header_selinux_selinux_h" = xyes; then : + + save_LIBS="$LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5 +$as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; } +if ${ac_cv_lib_selinux_is_selinux_enabled+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char is_selinux_enabled (); +int +main () +{ +return is_selinux_enabled (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_is_selinux_enabled=yes +else + ac_cv_lib_selinux_is_selinux_enabled=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5 +$as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; } +if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +else + + as_fn_error $? "--with-selinux given, but is_selinux_enabled not found in libselinux" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for selinux_getpolicytype in -lselinux" >&5 +$as_echo_n "checking for selinux_getpolicytype in -lselinux... " >&6; } +if ${ac_cv_lib_selinux_selinux_getpolicytype+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char selinux_getpolicytype (); +int +main () +{ +return selinux_getpolicytype (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_selinux_getpolicytype=yes +else + ac_cv_lib_selinux_selinux_getpolicytype=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_selinux_getpolicytype" >&5 +$as_echo "$ac_cv_lib_selinux_selinux_getpolicytype" >&6; } +if test "x$ac_cv_lib_selinux_selinux_getpolicytype" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +else + + as_fn_error $? "--with-selinux given, but selinux_getpolicytype not found in libselinux" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for selinux_reset_config in -lselinux" >&5 +$as_echo_n "checking for selinux_reset_config in -lselinux... " >&6; } +if ${ac_cv_lib_selinux_selinux_reset_config+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char selinux_reset_config (); +int +main () +{ +return selinux_reset_config (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_selinux_reset_config=yes +else + ac_cv_lib_selinux_selinux_reset_config=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_selinux_reset_config" >&5 +$as_echo "$ac_cv_lib_selinux_selinux_reset_config" >&6; } +if test "x$ac_cv_lib_selinux_selinux_reset_config" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +else + + as_fn_error $? "--with-selinux given, but selinux_reset_config not found in libselinux" "$LINENO" 5 +fi + + LIBS="$save_LIBS" + +else + + as_fn_error $? "--with-selinux given, but selinux/selinux.h not found" "$LINENO" 5 + +fi + + + + ac_fn_c_check_header_mongrel "$LINENO" "selinux/label.h" "ac_cv_header_selinux_label_h" "$ac_includes_default" +if test "x$ac_cv_header_selinux_label_h" = xyes; then : + + save_LIBS="$LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for selabel_close in -lselinux" >&5 +$as_echo_n "checking for selabel_close in -lselinux... " >&6; } +if ${ac_cv_lib_selinux_selabel_close+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char selabel_close (); +int +main () +{ +return selabel_close (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_selabel_close=yes +else + ac_cv_lib_selinux_selabel_close=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_selabel_close" >&5 +$as_echo "$ac_cv_lib_selinux_selabel_close" >&6; } +if test "x$ac_cv_lib_selinux_selabel_close" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +else + + as_fn_error $? "--with-selinux given, but selabel_close not found in libselinux" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for selabel_lookup_raw in -lselinux" >&5 +$as_echo_n "checking for selabel_lookup_raw in -lselinux... " >&6; } +if ${ac_cv_lib_selinux_selabel_lookup_raw+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char selabel_lookup_raw (); +int +main () +{ +return selabel_lookup_raw (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_selabel_lookup_raw=yes +else + ac_cv_lib_selinux_selabel_lookup_raw=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_selabel_lookup_raw" >&5 +$as_echo "$ac_cv_lib_selinux_selabel_lookup_raw" >&6; } +if test "x$ac_cv_lib_selinux_selabel_lookup_raw" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +else + + as_fn_error $? "--with-selinux given, but selabel_lookup_raw not found in libselinux" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for selabel_open in -lselinux" >&5 +$as_echo_n "checking for selabel_open in -lselinux... " >&6; } +if ${ac_cv_lib_selinux_selabel_open+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char selabel_open (); +int +main () +{ +return selabel_open (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_selabel_open=yes +else + ac_cv_lib_selinux_selabel_open=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_selabel_open" >&5 +$as_echo "$ac_cv_lib_selinux_selabel_open" >&6; } +if test "x$ac_cv_lib_selinux_selabel_open" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +else + + as_fn_error $? "--with-selinux given, but selabel_open not found in libselinux" "$LINENO" 5 +fi + + LIBS="$save_LIBS" + +else + + as_fn_error $? "--with-selinux given, but selinux/label.h not found" "$LINENO" 5 + +fi + + + + ac_fn_c_check_header_mongrel "$LINENO" "semanage/semanage.h" "ac_cv_header_semanage_semanage_h" "$ac_includes_default" +if test "x$ac_cv_header_semanage_semanage_h" = xyes; then : + + save_LIBS="$LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_begin_transaction in -lsemanage" >&5 +$as_echo_n "checking for semanage_begin_transaction in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_begin_transaction+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_begin_transaction (); +int +main () +{ +return semanage_begin_transaction (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_begin_transaction=yes +else + ac_cv_lib_semanage_semanage_begin_transaction=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_begin_transaction" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_begin_transaction" >&6; } +if test "x$ac_cv_lib_semanage_semanage_begin_transaction" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_begin_transaction missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_commit in -lsemanage" >&5 +$as_echo_n "checking for semanage_commit in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_commit+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_commit (); +int +main () +{ +return semanage_commit (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_commit=yes +else + ac_cv_lib_semanage_semanage_commit=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_commit" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_commit" >&6; } +if test "x$ac_cv_lib_semanage_semanage_commit" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_commit missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_connect in -lsemanage" >&5 +$as_echo_n "checking for semanage_connect in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_connect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_connect (); +int +main () +{ +return semanage_connect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_connect=yes +else + ac_cv_lib_semanage_semanage_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_connect" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_connect" >&6; } +if test "x$ac_cv_lib_semanage_semanage_connect" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_connect missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_disconnect in -lsemanage" >&5 +$as_echo_n "checking for semanage_disconnect in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_disconnect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_disconnect (); +int +main () +{ +return semanage_disconnect (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_disconnect=yes +else + ac_cv_lib_semanage_semanage_disconnect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_disconnect" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_disconnect" >&6; } +if test "x$ac_cv_lib_semanage_semanage_disconnect" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_disconnect missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_handle_create in -lsemanage" >&5 +$as_echo_n "checking for semanage_handle_create in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_handle_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_handle_create (); +int +main () +{ +return semanage_handle_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_handle_create=yes +else + ac_cv_lib_semanage_semanage_handle_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_handle_create" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_handle_create" >&6; } +if test "x$ac_cv_lib_semanage_semanage_handle_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_handle_create missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_handle_destroy in -lsemanage" >&5 +$as_echo_n "checking for semanage_handle_destroy in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_handle_destroy+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_handle_destroy (); +int +main () +{ +return semanage_handle_destroy (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_handle_destroy=yes +else + ac_cv_lib_semanage_semanage_handle_destroy=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_handle_destroy" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_handle_destroy" >&6; } +if test "x$ac_cv_lib_semanage_semanage_handle_destroy" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_handle_destroy missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_is_connected in -lsemanage" >&5 +$as_echo_n "checking for semanage_is_connected in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_is_connected+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_is_connected (); +int +main () +{ +return semanage_is_connected (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_is_connected=yes +else + ac_cv_lib_semanage_semanage_is_connected=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_is_connected" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_is_connected" >&6; } +if test "x$ac_cv_lib_semanage_semanage_is_connected" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_is_connected missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_module_install_base_file in -lsemanage" >&5 +$as_echo_n "checking for semanage_module_install_base_file in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_module_install_base_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_module_install_base_file (); +int +main () +{ +return semanage_module_install_base_file (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_module_install_base_file=yes +else + ac_cv_lib_semanage_semanage_module_install_base_file=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_module_install_base_file" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_module_install_base_file" >&6; } +if test "x$ac_cv_lib_semanage_semanage_module_install_base_file" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_module_install_base_file missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_module_install_file in -lsemanage" >&5 +$as_echo_n "checking for semanage_module_install_file in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_module_install_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_module_install_file (); +int +main () +{ +return semanage_module_install_file (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_module_install_file=yes +else + ac_cv_lib_semanage_semanage_module_install_file=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_module_install_file" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_module_install_file" >&6; } +if test "x$ac_cv_lib_semanage_semanage_module_install_file" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_module_install_file missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_module_remove in -lsemanage" >&5 +$as_echo_n "checking for semanage_module_remove in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_module_remove+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_module_remove (); +int +main () +{ +return semanage_module_remove (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_module_remove=yes +else + ac_cv_lib_semanage_semanage_module_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_module_remove" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_module_remove" >&6; } +if test "x$ac_cv_lib_semanage_semanage_module_remove" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_module_remove missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_select_store in -lsemanage" >&5 +$as_echo_n "checking for semanage_select_store in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_select_store+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_select_store (); +int +main () +{ +return semanage_select_store (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_select_store=yes +else + ac_cv_lib_semanage_semanage_select_store=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_select_store" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_select_store" >&6; } +if test "x$ac_cv_lib_semanage_semanage_select_store" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_select_store missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_set_check_contexts in -lsemanage" >&5 +$as_echo_n "checking for semanage_set_check_contexts in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_set_check_contexts+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_set_check_contexts (); +int +main () +{ +return semanage_set_check_contexts (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_set_check_contexts=yes +else + ac_cv_lib_semanage_semanage_set_check_contexts=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_set_check_contexts" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_set_check_contexts" >&6; } +if test "x$ac_cv_lib_semanage_semanage_set_check_contexts" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_set_check_contexts missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_set_create_store in -lsemanage" >&5 +$as_echo_n "checking for semanage_set_create_store in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_set_create_store+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_set_create_store (); +int +main () +{ +return semanage_set_create_store (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_set_create_store=yes +else + ac_cv_lib_semanage_semanage_set_create_store=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_set_create_store" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_set_create_store" >&6; } +if test "x$ac_cv_lib_semanage_semanage_set_create_store" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_set_create_store missing in libsemanage" "$LINENO" 5 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_set_reload in -lsemanage" >&5 +$as_echo_n "checking for semanage_set_reload in -lsemanage... " >&6; } +if ${ac_cv_lib_semanage_semanage_set_reload+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsemanage $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char semanage_set_reload (); +int +main () +{ +return semanage_set_reload (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_semanage_semanage_set_reload=yes +else + ac_cv_lib_semanage_semanage_set_reload=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_set_reload" >&5 +$as_echo "$ac_cv_lib_semanage_semanage_set_reload" >&6; } +if test "x$ac_cv_lib_semanage_semanage_set_reload" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSEMANAGE 1 +_ACEOF + + LIBS="-lsemanage $LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage_set_reload missing in libsemanage" "$LINENO" 5 +fi + + LIBS="$save_LIBS" + +else + + as_fn_error $? "--with-selinux given, but semanage/semanage.h not found" "$LINENO" 5 + +fi + + + +fi + +if test "$with_selinux" = yes; then : + + +$as_echo "#define WITH_SELINUX 1" >>confdefs.h + + WITH_SELINUX_LIB="-lselinux" + WITH_SEMANAGE_LIB="-lsemanage" + +fi + + + if test "$with_selinux" = yes; then + SELINUX_TRUE= + SELINUX_FALSE='#' +else + SELINUX_TRUE='#' + SELINUX_FALSE= +fi + + +# libcap +WITH_CAP_LIB= + +# Check whether --with-cap was given. +if test "${with_cap+set}" = set; then : + withval=$with_cap; case "$with_cap" in +yes|no) ;; +*) as_fn_error $? "invalid argument to --with-cap" "$LINENO" 5 + ;; +esac +else + with_cap=no +fi + + +if test "$with_cap" = yes; then : + + ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_capability_h" = xyes; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_get_file in -lcap" >&5 +$as_echo_n "checking for cap_get_file in -lcap... " >&6; } +if ${ac_cv_lib_cap_cap_get_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcap $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cap_get_file (); +int +main () +{ +return cap_get_file (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_cap_cap_get_file=yes +else + ac_cv_lib_cap_cap_get_file=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_cap_get_file" >&5 +$as_echo "$ac_cv_lib_cap_cap_get_file" >&6; } +if test "x$ac_cv_lib_cap_cap_get_file" = xyes; then : + + with_cap=yes + save_LIBS="$LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_compare in -lcap" >&5 +$as_echo_n "checking for cap_compare in -lcap... " >&6; } +if ${ac_cv_lib_cap_cap_compare+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcap $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cap_compare (); +int +main () +{ +return cap_compare (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_cap_cap_compare=yes +else + ac_cv_lib_cap_cap_compare=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_cap_compare" >&5 +$as_echo "$ac_cv_lib_cap_cap_compare" >&6; } +if test "x$ac_cv_lib_cap_cap_compare" = xyes; then : + + +$as_echo "#define HAVE_CAP_COMPARE 1" >>confdefs.h + + +fi + + LIBS="$save_LIBS" + +else + + as_fn_error $? "--with-cap given, but libcap not found" "$LINENO" 5 +fi + + +else + + as_fn_error $? "--with-cap given, but sys/capability.h not found" "$LINENO" 5 + +fi + + + +fi + +if test "$with_cap" = yes; then : + + +$as_echo "#define WITH_CAP 1" >>confdefs.h + + WITH_CAP_LIB="-lcap" + +fi + + if test "$with_cap" = yes; then + CAP_TRUE= + CAP_FALSE='#' +else + CAP_TRUE='#' + CAP_FALSE= +fi + + +WITH_ACL_LIB= + +# Check whether --with-acl was given. +if test "${with_acl+set}" = set; then : + withval=$with_acl; case "$with_acl" in +yes|no) ;; +*) as_fn_error $? "invalid argument to --with-acl" "$LINENO" 5 + ;; +esac +else + with_acl=no +fi + + +if test "$with_acl" = yes; then : + + ac_fn_c_check_header_mongrel "$LINENO" "acl/libacl.h" "ac_cv_header_acl_libacl_h" "$ac_includes_default" +if test "x$ac_cv_header_acl_libacl_h" = xyes; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_equiv_mode in -lacl" >&5 +$as_echo_n "checking for acl_equiv_mode in -lacl... " >&6; } +if ${ac_cv_lib_acl_acl_equiv_mode+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lacl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char acl_equiv_mode (); +int +main () +{ +return acl_equiv_mode (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_acl_acl_equiv_mode=yes +else + ac_cv_lib_acl_acl_equiv_mode=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_acl_acl_equiv_mode" >&5 +$as_echo "$ac_cv_lib_acl_acl_equiv_mode" >&6; } +if test "x$ac_cv_lib_acl_acl_equiv_mode" = xyes; then : + with_acl=yes +else + + as_fn_error $? "--with-acl given, but libacl not found or not suitable" "$LINENO" 5 +fi + + +else + + as_fn_error $? "--with-acl given, but acl/libacl.h not found" "$LINENO" 5 + +fi + + + +fi + +if test "$with_acl" = yes; then : + + +$as_echo "#define WITH_ACL 1" >>confdefs.h + + WITH_ACL_LIB="-lacl" + +fi + + if test "$with_acl" = yes; then + ACL_TRUE= + ACL_FALSE='#' +else + ACL_TRUE='#' + ACL_FALSE= +fi + + + +# Check whether --with-lua was given. +if test "${with_lua+set}" = set; then : + withval=$with_lua; +else + with_lua=yes +fi + + +if test "$with_lua" != no; then : + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LUA" >&5 +$as_echo_n "checking for LUA... " >&6; } + +if test -n "$LUA_CFLAGS"; then + pkg_cv_LUA_CFLAGS="$LUA_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua >= 5.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lua >= 5.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LUA_CFLAGS=`$PKG_CONFIG --cflags "lua >= 5.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LUA_LIBS"; then + pkg_cv_LUA_LIBS="$LUA_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua >= 5.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "lua >= 5.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LUA_LIBS=`$PKG_CONFIG --libs "lua >= 5.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LUA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "lua >= 5.1" 2>&1` + else + LUA_PKG_ERRORS=`$PKG_CONFIG --print-errors "lua >= 5.1" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LUA_PKG_ERRORS" >&5 + + as_fn_error $? "lua not present (--without-lua to disable)" "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "lua not present (--without-lua to disable)" "$LINENO" 5 +else + LUA_CFLAGS=$pkg_cv_LUA_CFLAGS + LUA_LIBS=$pkg_cv_LUA_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define WITH_LUA 1" >>confdefs.h + +fi + + + +fi + if test "$with_lua" = yes; then + WITH_LUA_TRUE= + WITH_LUA_FALSE='#' +else + WITH_LUA_TRUE='#' + WITH_LUA_FALSE= +fi + + +# Check whether --enable-plugins was given. +if test "${enable_plugins+set}" = set; then : + enableval=$enable_plugins; +else + enable_plugins=yes +fi + +if test "$enable_plugins" = yes; then : + + +$as_echo "#define ENABLE_PLUGINS 1" >>confdefs.h + + +fi + if test "$enable_plugins" = yes; then + ENABLE_PLUGINS_TRUE= + ENABLE_PLUGINS_FALSE='#' +else + ENABLE_PLUGINS_TRUE='#' + ENABLE_PLUGINS_FALSE= +fi + + + +with_dmalloc=no + +# Check whether --with-dmalloc was given. +if test "${with_dmalloc+set}" = set; then : + withval=$with_dmalloc; +fi + +if test "$with_dmalloc" = yes ; then + +$as_echo "#define DMALLOC 1" >>confdefs.h + + LIBS="$LIBS -ldmalloc" +fi + +for ac_func in getpassphrase +do : + ac_fn_c_check_func "$LINENO" "getpassphrase" "ac_cv_func_getpassphrase" +if test "x$ac_cv_func_getpassphrase" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETPASSPHRASE 1 +_ACEOF + +fi +done + + +# +# get rid of the 4-th tuple, if config.guess returned "linux-gnu" for host_os +# +host_os_gnu=-gnu +if echo "$host_os" | grep '.*-gnulibc1' > /dev/null ; then + host_os=`echo "${host_os}" | sed 's/-gnulibc1$//'` +fi +if echo "$host_os" | grep '.*-gnueabi' > /dev/null ; then + host_os=`echo "${host_os}" | sed 's/-gnueabi$//'` + host_os_gnu=-gnueabi +fi +if echo "$host_os" | grep '.*-gnu' > /dev/null ; then + host_os=`echo "${host_os}" | sed 's/-gnu$//'` +fi + + +host_os_exact="${host_os}" +host_os_major=`echo "${host_os}" | sed 's/\..*$//'` +host_os_noversion=`echo "${host_os}" | sed 's/[0-9]*\..*$//'` + + +rm -f ./find-provides +if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ; then + echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov for automatic provides generation" + ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ./find-provides +elif test -f ${srcdir}/autodeps/${host_os_exact}.prov ; then + echo "using ${srcdir}/autodeps/${host_os_exact}.prov for automatic provides generation" + ln -s ${srcdir}/autodeps/${host_os_exact}.prov ./find-provides +elif test -f ${srcdir}/autodeps/${host_os_major}.prov ; then + echo "using ${srcdir}/autodeps/${host_os_major}.prov for automatic provides generation" + ln -s ${srcdir}/autodeps/${host_os_major}.prov ./find-provides +elif test -f ${srcdir}/autodeps/${host_os_noversion}.prov ; then + echo "using ${srcdir}/autodeps/${host_os_noversion}.prov for automatic provides generation" + ln -s ${srcdir}/autodeps/${host_os_noversion}.prov ./find-provides +else + echo "*** no default provides information is available for ${host_os_noversion}" + ln -s ${srcdir}/autodeps/none ./find-provides +fi + +rm -f ./find-requires +if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ; then + echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req for automatic requires generation" + ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ./find-requires +elif test -f ${srcdir}/autodeps/${host_os_exact}.req ; then + echo "using ${srcdir}/autodeps/${host_os_exact}.req for automatic requires generation" + ln -s ${srcdir}/autodeps/${host_os_exact}.req ./find-requires +elif test -f ${srcdir}/autodeps/${host_os_major}.req ; then + echo "using ${srcdir}/autodeps/${host_os_major}.req for automatic requires generation" + ln -s ${srcdir}/autodeps/${host_os_major}.req ./find-requires +elif test -f ${srcdir}/autodeps/${host_os_noversion}.req ; then + echo "using ${srcdir}/autodeps/${host_os_noversion}.req for automatic requires generation" + ln -s ${srcdir}/autodeps/${host_os_noversion}.req ./find-requires +else + echo "*** no default requires information is available for ${host_os_noversion}" + ln -s ${srcdir}/autodeps/none ./find-requires +fi + +case "${host_cpu}" in +*86) RPMCANONCOLOR=0; RPMCANONARCH=i386 ;; +ia32e*) RPMCANONCOLOR=3; RPMCANONARCH=ia32e ;; +amd64*) RPMCANONCOLOR=3; RPMCANONARCH=amd64 ;; +x86_64*) RPMCANONCOLOR=3; RPMCANONARCH=x86_64 ;; +alpha*) RPMCANONCOLOR=0; RPMCANONARCH=alpha ;; +sparc64*) RPMCANONCOLOR=3; RPMCANONARCH=sparc64 ;; +sparc*) RPMCANONCOLOR=3; RPMCANONARCH=sparc ;; +ia64*) RPMCANONCOLOR=2; RPMCANONARCH=ia64 ;; +s390x*) RPMCANONCOLOR=3; RPMCANONARCH=s390x ;; +s390*) RPMCANONCOLOR=0; RPMCANONARCH=s390 ;; +powerpc64*|ppc64*) RPMCANONCOLOR=3; RPMCANONARCH=ppc64 ;; +powerpc*|ppc*) RPMCANONCOLOR=0; RPMCANONARCH=ppc ;; +arm*) RPMCANONCOLOR=0; RPMCANONARCH=arm ;; +mipsel*) RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;; +mips*) RPMCANONCOLOR=0; RPMCANONARCH=mips ;; +m68k*) RPMCANONCOLOR=0; RPMCANONARCH=m68k ;; +sh3*) RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;; +sh4*) RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;; +*) RPMCANONCOLOR=0; RPMCANONARCH=unknown ;; +esac +case "${host_os_noversion}" in +mint) RPMCANONARCH=m68kmint ;; +esac +RPMCANONVENDOR="$build_vendor" +case "${build_vendor}" in +unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse) + test -f /etc/redhat-release && RPMCANONVENDOR=redhat + test -f /etc/SuSE-release && RPMCANONVENDOR=suse + test -f /etc/pld-release && RPMCANONVENDOR=pld + test -f /etc/mandrake-release && RPMCANONVENDOR=mandrake + test -f /etc/conectiva-release && RPMCANONVENDOR=conectiva + test -f /etc/lvr-release && RPMCANONVENDOR=lvr + test -f /etc/yellowdog-release && RPMCANONVENDOR=yellowdog + test -f /etc/caos-release && RPMCANONVENDOR=caos + ;; +esac +RPMCANONOS="$host_os_noversion" +RPMCANONGNU="$host_os_gnu" + + + + + + +cat >>confdefs.h <<_ACEOF +#define RPMCANONVENDOR "${RPMCANONVENDOR}" +_ACEOF + + +if test X"$prefix" = XNONE ; then + usrprefix="$ac_default_prefix" +else + usrprefix=$prefix +fi + +RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`" + + + + +if test "$with_external_db" = no; then + + +subdirs="$subdirs db3" + +fi + + if test "$with_external_db" = no; then + WITH_INTERNAL_DB_TRUE= + WITH_INTERNAL_DB_FALSE='#' +else + WITH_INTERNAL_DB_TRUE='#' + WITH_INTERNAL_DB_FALSE= +fi + + if test "$DOXYGEN" != no; then + DOXYGEN_TRUE= + DOXYGEN_FALSE='#' +else + DOXYGEN_TRUE='#' + DOXYGEN_FALSE= +fi + + if test "$with_hackingdocs" = yes; then + HACKINGDOCS_TRUE= + HACKINGDOCS_FALSE='#' +else + HACKINGDOCS_TRUE='#' + HACKINGDOCS_FALSE= +fi + + +# Extract the first word of "autom4te", so it can be a program name with args. +set dummy autom4te; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_AUTOM4TE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $AUTOM4TE in + [\\/]* | ?:[\\/]*) + ac_cv_path_AUTOM4TE="$AUTOM4TE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_AUTOM4TE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_AUTOM4TE" && ac_cv_path_AUTOM4TE=":" + ;; +esac +fi +AUTOM4TE=$ac_cv_path_AUTOM4TE +if test -n "$AUTOM4TE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AUTOM4TE" >&5 +$as_echo "$AUTOM4TE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +dirstamp=\${am__leading_dot}dirstamp + + +ac_config_files="$ac_config_files Makefile rpmio/Makefile lib/Makefile build/Makefile sign/Makefile po/Makefile.in scripts/Makefile fileattrs/Makefile misc/Makefile doc/Makefile python/Makefile luaext/Makefile tests/Makefile plugins/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${LIBELF_TRUE}" && test -z "${LIBELF_FALSE}"; then + as_fn_error $? "conditional \"LIBELF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${LIBDWARF_TRUE}" && test -z "${LIBDWARF_FALSE}"; then + as_fn_error $? "conditional \"LIBDWARF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_PYTHON_TRUE}" && test -z "${ENABLE_PYTHON_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SELINUX_TRUE}" && test -z "${SELINUX_FALSE}"; then + as_fn_error $? "conditional \"SELINUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CAP_TRUE}" && test -z "${CAP_FALSE}"; then + as_fn_error $? "conditional \"CAP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ACL_TRUE}" && test -z "${ACL_FALSE}"; then + as_fn_error $? "conditional \"ACL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_LUA_TRUE}" && test -z "${WITH_LUA_FALSE}"; then + as_fn_error $? "conditional \"WITH_LUA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_PLUGINS_TRUE}" && test -z "${ENABLE_PLUGINS_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_PLUGINS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_INTERNAL_DB_TRUE}" && test -z "${WITH_INTERNAL_DB_FALSE}"; then + as_fn_error $? "conditional \"WITH_INTERNAL_DB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DOXYGEN_TRUE}" && test -z "${DOXYGEN_FALSE}"; then + as_fn_error $? "conditional \"DOXYGEN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HACKINGDOCS_TRUE}" && test -z "${HACKINGDOCS_FALSE}"; then + as_fn_error $? "conditional \"HACKINGDOCS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by rpm $as_me 4.9.1, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +rpm config.status 4.9.1 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# + +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "tests/atconfig") CONFIG_COMMANDS="$CONFIG_COMMANDS tests/atconfig" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "rpmio/Makefile") CONFIG_FILES="$CONFIG_FILES rpmio/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "build/Makefile") CONFIG_FILES="$CONFIG_FILES build/Makefile" ;; + "sign/Makefile") CONFIG_FILES="$CONFIG_FILES sign/Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; + "fileattrs/Makefile") CONFIG_FILES="$CONFIG_FILES fileattrs/Makefile" ;; + "misc/Makefile") CONFIG_FILES="$CONFIG_FILES misc/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; + "luaext/Makefile") CONFIG_FILES="$CONFIG_FILES luaext/Makefile" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "plugins/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "tests/atconfig":C) cat >tests/atconfig </dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi + +# +# CONFIG_SUBDIRS section. +# +if test "$no_recursion" != yes; then + + # Remove --cache-file, --srcdir, and --disable-option-checking arguments + # so they do not pile up. + ac_sub_configure_args= + ac_prev= + eval "set x $ac_configure_args" + shift + for ac_arg + do + if test -n "$ac_prev"; then + ac_prev= + continue + fi + case $ac_arg in + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ + | --c=*) + ;; + --config-cache | -C) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + ;; + --disable-option-checking) + ;; + *) + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_sub_configure_args " '$ac_arg'" ;; + esac + done + + # Always prepend --prefix to ensure using the same prefix + # in subdir configurations. + ac_arg="--prefix=$prefix" + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" + + # Pass --silent + if test "$silent" = yes; then + ac_sub_configure_args="--silent $ac_sub_configure_args" + fi + + # Always prepend --disable-option-checking to silence warnings, since + # different subdirs can have different --enable and --with options. + ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" + + ac_popdir=`pwd` + for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue + + # Do not complain, so a configure script can configure whichever + # parts of a large source tree are present. + test -d "$srcdir/$ac_dir" || continue + + ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" + $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 + $as_echo "$ac_msg" >&6 + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + cd "$ac_dir" + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f "$ac_srcdir/configure.gnu"; then + ac_sub_configure=$ac_srcdir/configure.gnu + elif test -f "$ac_srcdir/configure"; then + ac_sub_configure=$ac_srcdir/configure + elif test -f "$ac_srcdir/configure.in"; then + # This should be Cygnus configure. + ac_sub_configure=$ac_aux_dir/configure + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 +$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} + ac_sub_configure= + fi + + # The recursion is here. + if test -n "$ac_sub_configure"; then + # Make the cache file name correct relative to the subdirectory. + case $cache_file in + [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; + *) # Relative name. + ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 +$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} + # The eval makes quoting arguments work. + eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ + --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || + as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 + fi + + cd "$ac_popdir" + done +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..37dd525 --- /dev/null +++ b/configure.ac @@ -0,0 +1,882 @@ +AC_PREREQ(2.61) +AC_INIT(rpm, 4.9.1, rpm-maint@lists.rpm.org) + +AC_CONFIG_SRCDIR([rpmqv.c]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) + +AM_INIT_AUTOMAKE([1.10 foreign tar-ustar dist-bzip2 subdir-objects nostdinc]) + +AC_CONFIG_TESTDIR(tests) + +AC_USE_SYSTEM_EXTENSIONS + +AC_DISABLE_STATIC + +PKG_PROG_PKG_CONFIG + +dnl Checks for programs. +AC_PROG_CXX +AC_PROG_AWK +AC_PROG_CC +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AC_PROG_LIBTOOL +AC_PROG_YACC + +AC_SUBST(__CC, $CC) +AC_PROG_CC_C99 +if test "$ac_cv_prog_cc_c99" = no; then + AC_MSG_ERROR([ISO C99 capable compiler required]) +fi + +AS=${AS-as} +AC_SUBST(AS) +if test "$GCC" = yes; then + CFLAGS="$CFLAGS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wno-char-subscripts" + # XXX disabled for now due to noise from NSPR headers + # CFLAGS="$CFLAGS -Wstrict-prototypes" + cflags_to_try="-fno-strict-aliasing -fstack-protector -Wempty-body -Wno-unused-but-set-variable" + AC_MSG_CHECKING([supported compiler flags]) + old_cflags=$CFLAGS + echo + for flag in $cflags_to_try; do + CFLAGS="$CFLAGS $flag" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[ + echo " $flag" + RPMCFLAGS="$RPMCFLAGS $flag" + ],[]) + CFLAGS=$old_cflags + done + CFLAGS="$CFLAGS $RPMCFLAGS" +fi +export CFLAGS + +AC_SYS_LARGEFILE + +dnl +dnl look for POSIX chmod attributes +dnl +AC_MSG_CHECKING(POSIX chmod) +touch foo.chmodtest +chmod 744 foo.chmodtest +chmod +X foo.chmodtest 2>/dev/null +a=`ls -l foo.chmodtest | awk '{print substr($1,1,10)}'` +rm -f foo.chmodtest +if test "$a" = "-rwxr-xr-x"; then + AC_MSG_RESULT(yes) + FIXPERMS=a+rX,u+w,g-w,o-w +else + AC_MSG_RESULT(no (tell your OS vendor about GNU fileutils)) + FIXPERMS=a+r,u+w,g-w,o-w +fi +AC_SUBST(FIXPERMS) + +dnl AM_DISABLE_SHARED +AM_PROG_LIBTOOL + +AC_CHECK_TOOL(AR, ar, :) + +dnl +dnl use defaults if cross-compiling, otherwise use the default path. +dnl +if test "$cross_compiling" = "yes"; then + MYPATH=":" +else + MYPATH=$PATH +fi + +dnl +dnl Find some common programs +dnl +AC_PATH_PROG(__BZIP2, bzip2, /usr/bin/bzip2, $MYPATH) +AC_PATH_PROG(__CAT, cat, /bin/cat, $MYPATH) +AC_PATH_PROG(__CHGRP, chgrp, /bin/chgrp, $MYPATH) +AC_PATH_PROG(__CHMOD, chmod, /bin/chmod, $MYPATH) +AC_PATH_PROG(__CHOWN, chown, /bin/chown, $MYPATH) +AC_PATH_PROG(__CP, cp, /bin/cp, $MYPATH) +AC_PATH_PROG(__CPIO, cpio, /bin/cpio, $MYPATH) +AC_PATH_PROG(__CURL, curl, /usr/bin/curl, $MYPATH) +AC_PATH_PROG(__FILE, file, /usr/bin/file, $MYPATH) +AC_PATH_PROG(__GPG, gpg, /usr/bin/gpg, $MYPATH) +AC_PATH_PROG(__GREP, grep, /bin/grep, $MYPATH) +AC_PATH_PROG(__GZIP, gzip, /bin/gzip, $MYPATH) +AC_PATH_PROG(__UNZIP, unzip, /usr/bin/unzip, $MYPATH) +AC_PATH_PROG(__ID, id, /usr/bin/id, $MYPATH) +AC_PATH_PROG(__INSTALL, install, /usr/bin/install, $MYPATH) +AC_PATH_PROG(__LRZIP, lrzip, /usr/bin/lrzip, $MYPATH) +AC_PATH_PROG(__LZIP, lzip, /usr/bin/lzip, $MYPATH) +AC_PATH_PROG(__XZ, xz, /usr/bin/xz, $MYPATH) +AC_PATH_PROG(__MAKE, make, /usr/bin/make, $MYPATH) +AC_PATH_PROG(__MKDIR, mkdir, /bin/mkdir, $MYPATH) +AC_PATH_PROG(__MV, mv, /bin/mv, $MYPATH) +AC_PATH_PROG(__PATCH, patch, /usr/bin/patch, $MYPATH) +AC_PATH_PROG(__RESTORECON, restorecon, /sbin/restorecon, $MYPATH) +AC_MSG_CHECKING(old version of patch) + PATCHVERSION=`patch --version 2>&1` + + if test "$PATCHVERSION" = "Patch version 2.1"; then + AC_DEFINE(HAVE_OLDPATCH_21, 1, + [Define if the patch call you'll be using is 2.1 or older]) + AC_MSG_RESULT(patch older then 2.2 found) + else + AC_MSG_RESULT(patch later then 2.2 found) + fi + +AC_PATH_PROG(__PERL, perl, /usr/bin/perl, $MYPATH) +AC_PATH_PROG(__PGP, pgp, /usr/bin/pgp, $MYPATH) +AC_PATH_PROG(__PYTHON, python, /usr/bin/python, $MYPATH) +AC_PATH_PROG(__RM, rm, /bin/rm, $MYPATH) +AC_PATH_PROG(__RSH, rsh, /usr/bin/rsh, $MYPATH) +AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH) +AC_PATH_PROG(__SEMODULE, semodule, /usr/bin/semodule, $MYPATH) +AC_PATH_PROG(__SSH, ssh, /usr/bin/ssh, $MYPATH) +AC_PATH_PROG(__TAR, tar, /bin/tar, $MYPATH) + +AC_PATH_PROG(__LD, ld, /usr/bin/ld, $MYPATH) +AC_PATH_PROG(__NM, nm, /usr/bin/nm, $MYPATH) +AC_PATH_PROG(__OBJCOPY, objcopy, /usr/bin/objcopy, $MYPATH) +AC_PATH_PROG(__OBJDUMP, objdump, /usr/bin/objdump, $MYPATH) +AC_PATH_PROG(__STRIP, strip, /usr/bin/strip, $MYPATH) +AC_PATH_PROG(__FAKECHROOT, fakechroot, /usr/bin/fakechroot, $MYPATH) + +dnl see if we have a mkdir that supports `-p' for rpmbuild's purposes +AC_PROG_MKDIR_P +if ! echo $MKDIR_P | grep -q mkdir; then + __MKDIR_P="`echo ${prefix}/lib/rpm/mkinstalldirs`" +else + __MKDIR_P=$MKDIR_P +fi +AC_DEFINE_UNQUOTED(__MKDIR_P, "${__MKDIR_P}", +[A full path to a program, possibly with arguments, that will create a + directory and all necessary parent directories, ala 'mkdir -p']) +AC_SUBST(__MKDIR_P) + +#================= +# Check for zlib library. + +WITH_ZLIB_INCLUDE= +WITH_ZLIB_LIB= + +AC_CHECK_HEADERS([zlib.h],[ + AS_IF([test -z "${WITH_ZLIB_LIB}"],[ + for zlib in z gz ; do + AC_CHECK_LIB(${zlib}, gzread, + [WITH_ZLIB_LIB="-l${zlib}"; break]) + done + +dnl zlib-1.0.4 has not gzseek + AC_CHECK_LIB(${zlib}, gzseek, [AC_DEFINE(HAVE_GZSEEK, 1, [Define as 1 if your zlib has gzseek()])]) + ]) +],[ + AC_MSG_ERROR([missing required header zlib.h]) +]) + +AC_SUBST(WITH_ZLIB_INCLUDE) +AC_SUBST(WITH_ZLIB_LIB) + +#================= +# Check for bzip2 library. + +AC_CHECK_HEADERS([bzlib.h],[ + AC_CHECK_LIB(bz2, bzread, [WITH_BZ2_LIB=-lbz2], + [ + AC_CHECK_LIB(bz2, BZ2_bzread,[ + WITH_BZ2_LIB="-lbz2" + AC_DEFINE(HAVE_BZ2_1_0, 1, [Define as 1 if you bzip2 1.0]) + ]) + ]) +]) +AC_SUBST(WITH_BZ2_LIB) + +#================= +# Check for lzma library. + +AC_CHECK_HEADERS([lzma.h],[ + AC_CHECK_LIB(lzma, lzma_easy_encoder, [WITH_LZMA_LIB=-llzma]) +]) +AC_SUBST(WITH_LZMA_LIB) + +#================= + +dnl +dnl Check for features +dnl + +dnl Checks for libraries. + +AC_CHECK_FUNC(gethostname, [], [ + AC_CHECK_LIB(nsl, gethostname) +]) + +AC_CHECK_HEADERS(poll.h) + +AC_CHECK_HEADERS(pthread.h) + +AC_CHECK_LIB(pthread, pthread_mutex_trylock, [], [ + dnl OSF 5.0 has the the symbols prefixed with __ in libpthread. + AC_CHECK_LIB(pthread, __pthread_mutex_trylock, [], [ + AC_CHECK_LIB(thread, mutex_lock) + ]) +]) + +AC_SEARCH_LIBS(aio_read, [c rt aio posix4]) +AC_SEARCH_LIBS(dlopen, [dl]) + +dnl Temporary hack for MiNT. Some functions (writev, snprintf) are +dnl not in the libc but in libport (for political reasons). This check +dnl can hopefully be removed soon. Please use the default action +dnl for this macro (not LIBS=...), otherwise the check for dbopen +dnl will fail. +AC_CHECK_LIB(port, writev) + +#================= +# Check for libelf library. Prefer external, otherwise none. +WITH_LIBELF_LIB= +AC_CHECK_HEADER([libelf.h]) +AC_CHECK_HEADERS([gelf.h], [ + AC_CHECK_LIB(elf, gelf_getvernaux, [ + AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).]) + WITH_LIBELF_LIB="-lelf" + WITH_LIBELF=yes + ]) +]) +AC_SUBST(WITH_LIBELF_LIB) +AM_CONDITIONAL(LIBELF,[test "$WITH_LIBELF" = yes]) + +AC_CHECK_HEADERS([dwarf.h], [ + WITH_LIBDWARF=yes +]) +AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes]) + +#================= +# Check for NSS library. +# We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS +# have a header named nss.h... so make extra check for NSS's sechash.h +# which we use too and hopefully is slightly more unique to NSS. +WITH_NSS_INCLUDE= +WITH_NSS_LIB= +AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [ + AC_MSG_ERROR([missing required NSPR / NSS header]) +]) +AC_CHECK_LIB(nss3, NSS_NoDB_Init, [ + WITH_NSS_LIB=-lnss3 +], [ + AC_MSG_ERROR([missing required NSS library 'nss3']) +]) +AC_SUBST(WITH_NSS_INCLUDE) +AC_SUBST(WITH_NSS_LIB) + +#================= +# Check for magic library. +WITH_MAGIC_INCLUDE= +WITH_MAGIC_LIB= + +AC_CHECK_HEADER([magic.h], [ + AC_CHECK_LIB(magic, magic_open, [ + WITH_MAGIC_INCLUDE= + WITH_MAGIC_LIB="-lmagic" + ],[ + AC_MSG_ERROR([missing required library 'libmagic']) + ]) +],[ + AC_MSG_ERROR([missing required header magic.h]) +]) + +AC_SUBST(WITH_MAGIC_INCLUDE) +AC_SUBST(WITH_MAGIC_LIB) + +#================= +# Check for popt library. +WITH_POPT_INCLUDE= +WITH_POPT_LIB= + +AC_CHECK_HEADER([popt.h], [ + AC_CHECK_LIB(popt, poptGetContext, [ + WITH_POPT_INCLUDE= + WITH_POPT_LIB="-lpopt" + ],[ + AC_MSG_ERROR([missing required library popt]) + ]) +],[ + AC_MSG_ERROR([missing required header popt.h]) +]) + +AC_SUBST(WITH_POPT_INCLUDE) +AC_SUBST(WITH_POPT_LIB) + +#================= +# Process --with/without-external-db +AC_ARG_WITH(external_db, [AS_HELP_STRING([--with-external-db],[build against an external Berkeley db])], +[case "$with_external_db" in +yes|no) ;; +*) AC_MSG_ERROR([invalid argument to --with-external-db]) ;; +esac], +[with_external_db=no]) + +case "$with_external_db" in +yes ) + AC_CHECK_HEADERS([db.h],[ + AC_PREPROC_IFELSE([ + AC_LANG_SOURCE([ + #include + #if ((DB_VERSION_MAJOR < 4) || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 5)) + #error Berkeley DB too old + #endif + ]) + ],[ WITH_DB_LIB=-ldb ], + [ AC_MSG_ERROR([Berkeley DB version >= 4.5 required]) + ]) + ],[ + AC_MSG_ERROR([missing required header db.h]) + ]) + ;; +* ) # Fall back to internal db if available + if [ test -x db/dist/configure ]; then + AC_DEFINE(HAVE_DB_H, 1, [Define if you have the header file]) + else + AC_MSG_ERROR([internal Berkeley DB directory not present, see INSTALL]) + fi + ;; +esac + +AC_SUBST([WITH_DB_LIB]) + +AM_GNU_GETTEXT_VERSION([0.16.1]) +AM_GNU_GETTEXT([external]) + +dnl Checks for header files we can live without. +AC_HEADER_STDC +AC_HEADER_MAJOR +AC_STRUCT_DIRENT_D_TYPE + +AC_CHECK_HEADERS(limits.h) +AC_CHECK_HEADERS(fcntl.h getopt.h memory.h) + +AC_CHECK_HEADERS(sys/ipc.h) +AC_CHECK_HEADERS(sys/utsname.h) + +AC_CHECK_HEADERS(sys/systemcfg.h) +AC_CHECK_HEADERS(sys/param.h) +AC_CHECK_HEADERS(libio.h) +AC_CHECK_HEADERS(mcheck.h) + +AC_CHECK_HEADERS(glob.h) + +dnl statfs portability fiddles. +dnl +dnl We should really emulate/steal sections of the statfs and struct statfs +dnl checks from GNU fileutils. +dnl +AC_MSG_CHECKING(for struct statfs) + +dnl +dnl this is easier than nesting AC_TRY_COMPILEs... +dnl +found_struct_statfs=no + +if test X$found_struct_statfs = Xno ; then +dnl Solaris 2.6+ wants to use statvfs +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h) + AC_DEFINE(STATFS_IN_SYS_STATVFS, 1, + [statfs in (for solaris 2.6+ systems)]) + found_struct_statfs=yes],[]) +fi + +if test X$found_struct_statfs = Xno ; then +dnl first try including sys/vfs.h +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h) + AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in (for linux systems)]) + found_struct_statfs=yes],[]) +fi + +if test X$found_struct_statfs = Xno ; then +dnl ...next try including sys/mount.h +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_PARAM_H +#include +#endif +#include ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/mount.h) + AC_DEFINE(STATFS_IN_SYS_MOUNT, 1, [statfs in (for Digital Unix 4.0D systems)]) + found_struct_statfs=yes],[]) +fi + +if test X$found_struct_statfs = Xno ; then +dnl ...still no joy. Try sys/statfs.h +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/statfs.h) + AC_DEFINE(STATFS_IN_SYS_STATFS, 1, [statfs in (for Irix 6.4 systems)]) + found_struct_statfs=yes],[]) +fi + +if test X$found_struct_statfs = Xno ; then +dnl ...no luck. Warn the user of impending doom. +AC_MSG_WARN(not found) +fi + +dnl +dnl if we found the struct, see if it has the f_bavail member. Some OSes +dnl don't, including IRIX 6.5+ +dnl +if test X$found_struct_statfs = Xyes ; then +AC_MSG_CHECKING(for f_bavail member in struct statfs) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#if STATFS_IN_SYS_STATVFS +# include + typedef struct statvfs STATFS_t; +#else + typedef struct statfs STATFS_t; +# if STATFS_IN_SYS_VFS +# include +# elif STATFS_IN_SYS_MOUNT +# include +# elif STATFS_IN_SYS_STATFS +# include +# endif +#endif ]], [[STATFS_t sfs; + sfs.f_bavail = 0;]])],[AC_MSG_RESULT(yes) + AC_DEFINE(STATFS_HAS_F_BAVAIL, 1, [Define if struct statfs has the f_bavail member])],[AC_MSG_RESULT(no) +]) +fi + +if test X$found_struct_statfs = Xyes ; then +dnl +dnl now check to see if we have the 4-argument variant of statfs() +dnl this pretty much requires AC_RUN_IFELSE([AC_LANG_SOURCE([[]])],[],[],[]) +dnl +AC_MSG_CHECKING([if statfs() requires 4 arguments]) +AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef STATFS_IN_SYS_VFS +#include +#elif STATFS_IN_SYS_MOUNT +#include +#elif STATFS_IN_SYS_STATFS +#include +#endif +main() { + struct statfs sfs; + exit (statfs(".", &sfs, sizeof(sfs), 0)); +} +]])],[AC_MSG_RESULT(yes) + AC_DEFINE(STAT_STATFS4, 1, [Define if the statfs() call takes 4 arguments])],[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no) +]) +fi + +dnl look for libc features + +dnl Check for missing typedefs +AC_TYPE_MODE_T +AC_TYPE_OFF_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T + +dnl Checks for library functions. +AC_FUNC_MMAP + +AC_CHECK_FUNCS(mtrace) +AC_CHECK_FUNCS(putenv) + +AC_REPLACE_FUNCS(stpcpy stpncpy) + +AC_CHECK_FUNCS(__secure_getenv) + +AC_CHECK_FUNCS( + [mkstemp getcwd basename dirname realpath setenv unsetenv regcomp lchown], + [], [AC_MSG_ERROR([function required by rpm])]) + +dnl XXX Glob *is* broken on linux with libc5, solaris and possibly aix when +dnl %files gets something like +dnl /usr/*/locale/*/LC_MESSAGES/*.mo +dnl (Note: more than one asterisk in glob pattern.) +dnl +dnl XXX Glob is "fixed" in glibc-2.3.3-61, but the cost is that +dnl dangling symlinks are no longer globbed. Always use the internal glob. +AC_DEFINE(USE_GNU_GLOB, 1, [Use the included glob.c?]) +AC_LIBOBJ(glob) +AC_LIBOBJ(fnmatch) + +dnl check if python is requested +AC_ARG_ENABLE(python, [AS_HELP_STRING([--enable-python],[build rpm python bindings])], +[case "$enable_python" in +yes|no) ;; +*) AC_MSG_ERROR([invalid argument to --enable-python]) + ;; +esac], +[enable_python=no]) + +AS_IF([test "$enable_python" = yes],[ + AM_PATH_PYTHON([2.6],[ + WITH_PYTHON_INCLUDE=`${PYTHON} -c 'from distutils.sysconfig import *; import sys; sys.stdout.write(get_python_inc())'` + WITH_PYTHON_SUBPACKAGE=1 + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -I$WITH_PYTHON_INCLUDE" + AC_CHECK_HEADER([Python.h],[], + [AC_MSG_ERROR([missing Python.h]) + ]) + CPPFLAGS="$save_CPPFLAGS" + save_LIBS="$LIBS" + AC_SEARCH_LIBS([Py_Main],[python${PYTHON_VERSION} python],[ + WITH_PYTHON_LIB="$ac_res" + ],[AC_MSG_ERROR([missing python library]) + ]) + LIBS="$save_LIBS" + ]) +],[ + WITH_PYTHON_INCLUDE= + WITH_PYTHON_LIB= + WITH_PYTHON_SUBPACKAGE=0 +]) + +AC_SUBST(WITH_PYTHON_INCLUDE) +AC_SUBST(WITH_PYTHON_LIB) + +AM_CONDITIONAL(ENABLE_PYTHON,[test "$WITH_PYTHON_SUBPACKAGE" = 1]) + +AC_PATH_PROG(DOXYGEN, doxygen, no) +dnl +dnl Only build internal API + source hacking docs on request +dnl +AC_ARG_WITH(hackingdocs, [AS_HELP_STRING([--with-hackingdocs],[build rpm hacking docs])],,[with_hackingdocs=no]) + +case "$with_hackingdocs" in +auto) + AS_IF([test "$DOXYGEN" = no],[with_hackingdocs=no],[with_hackingdocs=no]) + ;; +yes) + AS_IF([test "$DOXYGEN" = no], + [AC_MSG_ERROR([rpm hacking docs eeds doxygen in PATH])]) + ;; +esac +AC_CHECK_PROG(HAVE_DOT,[dot],[YES],[NO]) + +WITH_SELINUX_LIB= +AC_ARG_WITH(selinux, [AS_HELP_STRING([--with-selinux],[build with selinux support])], +[case "$with_selinux" in +yes|no) ;; +*) AC_MSG_ERROR([invalid argument to --with-selinux]) + ;; +esac], +[with_selinux=no]) + +AS_IF([test "$with_selinux" = yes],[ + AC_CHECK_HEADER([selinux/selinux.h],[ + save_LIBS="$LIBS" + AC_CHECK_LIB([selinux],[is_selinux_enabled],[],[ + AC_MSG_ERROR([--with-selinux given, but is_selinux_enabled not found in libselinux])]) + AC_CHECK_LIB([selinux],[selinux_getpolicytype],[],[ + AC_MSG_ERROR([--with-selinux given, but selinux_getpolicytype not found in libselinux])]) + AC_CHECK_LIB([selinux],[selinux_reset_config],[],[ + AC_MSG_ERROR([--with-selinux given, but selinux_reset_config not found in libselinux])]) + LIBS="$save_LIBS" + ],[ + AC_MSG_ERROR([--with-selinux given, but selinux/selinux.h not found]) + ]) + + AC_CHECK_HEADER([selinux/label.h],[ + save_LIBS="$LIBS" + AC_CHECK_LIB([selinux],[selabel_close],[],[ + AC_MSG_ERROR([--with-selinux given, but selabel_close not found in libselinux])]) + AC_CHECK_LIB([selinux],[selabel_lookup_raw],[],[ + AC_MSG_ERROR([--with-selinux given, but selabel_lookup_raw not found in libselinux])]) + AC_CHECK_LIB([selinux],[selabel_open],[],[ + AC_MSG_ERROR([--with-selinux given, but selabel_open not found in libselinux])]) + LIBS="$save_LIBS" + ],[ + AC_MSG_ERROR([--with-selinux given, but selinux/label.h not found]) + ]) + + dnl FIXME: semanage is only needed for the sepolicy plugin + AC_CHECK_HEADER([semanage/semanage.h],[ + save_LIBS="$LIBS" + AC_CHECK_LIB([semanage],[semanage_begin_transaction],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_begin_transaction missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_commit],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_commit missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_connect],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_connect missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_disconnect],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_disconnect missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_handle_create],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_handle_create missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_handle_destroy],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_handle_destroy missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_is_connected],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_is_connected missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_module_install_base_file],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_module_install_base_file missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_module_install_file],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_module_install_file missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_module_remove],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_module_remove missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_select_store],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_select_store missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_set_check_contexts],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_set_check_contexts missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_set_create_store],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_set_create_store missing in libsemanage])]) + AC_CHECK_LIB([semanage],[semanage_set_reload],[],[ + AC_MSG_ERROR([--with-selinux given, but semanage_set_reload missing in libsemanage])]) + LIBS="$save_LIBS" + ],[ + AC_MSG_ERROR([--with-selinux given, but semanage/semanage.h not found]) + ]) +]) + +AS_IF([test "$with_selinux" = yes],[ + AC_DEFINE(WITH_SELINUX, 1, [Build with selinux support?]) + WITH_SELINUX_LIB="-lselinux" + WITH_SEMANAGE_LIB="-lsemanage" +]) +AC_SUBST(WITH_SELINUX_LIB) +AC_SUBST(WITH_SEMANAGE_LIB) +AM_CONDITIONAL(SELINUX,[test "$with_selinux" = yes]) + +# libcap +WITH_CAP_LIB= +AC_ARG_WITH(cap, [AS_HELP_STRING([--with-cap],[build with capability support])], +[case "$with_cap" in +yes|no) ;; +*) AC_MSG_ERROR([invalid argument to --with-cap]) + ;; +esac], +[with_cap=no]) + +AS_IF([test "$with_cap" = yes],[ + AC_CHECK_HEADER([sys/capability.h],[ + AC_CHECK_LIB(cap,[cap_get_file], [ + with_cap=yes + save_LIBS="$LIBS" + AC_CHECK_LIB(cap,[cap_compare], [ + AC_DEFINE(HAVE_CAP_COMPARE, 1, [Have cap_compare function?]) + ]) + LIBS="$save_LIBS" + ],[ + AC_MSG_ERROR([--with-cap given, but libcap not found])]) + ],[ + AC_MSG_ERROR([--with-cap given, but sys/capability.h not found]) + ]) +]) + +AS_IF([test "$with_cap" = yes],[ + AC_DEFINE(WITH_CAP, 1, [Build with capability support?]) + WITH_CAP_LIB="-lcap" +]) +AC_SUBST(WITH_CAP_LIB) +AM_CONDITIONAL(CAP,[test "$with_cap" = yes]) + +WITH_ACL_LIB= +AC_ARG_WITH(acl, [AS_HELP_STRING([--with-acl],[build with acl support])], +[case "$with_acl" in +yes|no) ;; +*) AC_MSG_ERROR([invalid argument to --with-acl]) + ;; +esac], +[with_acl=no]) + +AS_IF([test "$with_acl" = yes],[ + dnl verification uses non-portable acl_equiv_mode() + AC_CHECK_HEADER([acl/libacl.h],[ + AC_CHECK_LIB(acl,[acl_equiv_mode],[with_acl=yes],[ + AC_MSG_ERROR([--with-acl given, but libacl not found or not suitable])]) + ],[ + AC_MSG_ERROR([--with-acl given, but acl/libacl.h not found]) + ]) +]) + +AS_IF([test "$with_acl" = yes],[ + AC_DEFINE(WITH_ACL, 1, [Build with acl support?]) + WITH_ACL_LIB="-lacl" +]) +AC_SUBST(WITH_ACL_LIB) +AM_CONDITIONAL(ACL,[test "$with_acl" = yes]) + +AC_ARG_WITH([lua], [AS_HELP_STRING([--with-lua], [build with lua support])], + [], + [with_lua=yes]) + +AS_IF([test "$with_lua" != no],[ + PKG_CHECK_MODULES([LUA], + [lua >= 5.1], + [AC_DEFINE(WITH_LUA, 1, [Build with lua support?])], + [AC_MSG_ERROR([lua not present (--without-lua to disable)])]) + AC_SUBST(LUA_CFLAGS) + AC_SUBST(LUA_LIBS) +]) +AM_CONDITIONAL(WITH_LUA,[test "$with_lua" = yes]) + +AC_ARG_ENABLE(plugins, [AS_HELP_STRING([--disable-plugins],[build without plugin support])],,[enable_plugins=yes]) +AS_IF([test "$enable_plugins" = yes],[ + AC_DEFINE(ENABLE_PLUGINS, 1, [Build with plugin support?]) +]) +AM_CONDITIONAL(ENABLE_PLUGINS,[test "$enable_plugins" = yes]) + + +with_dmalloc=no +AC_ARG_WITH(dmalloc, [AS_HELP_STRING([--with-dmalloc],[build with dmalloc debugging support])]) +if test "$with_dmalloc" = yes ; then + AC_DEFINE(DMALLOC, 1, [Build with dmalloc support?]) + LIBS="$LIBS -ldmalloc" +fi + +AC_CHECK_FUNCS(getpassphrase) + +# +# get rid of the 4-th tuple, if config.guess returned "linux-gnu" for host_os +# +host_os_gnu=-gnu +if echo "$host_os" | grep '.*-gnulibc1' > /dev/null ; then + host_os=`echo "${host_os}" | sed 's/-gnulibc1$//'` +fi +if echo "$host_os" | grep '.*-gnueabi' > /dev/null ; then + host_os=`echo "${host_os}" | sed 's/-gnueabi$//'` + host_os_gnu=-gnueabi +fi +if echo "$host_os" | grep '.*-gnu' > /dev/null ; then + host_os=`echo "${host_os}" | sed 's/-gnu$//'` +fi + +changequote(<, >) +host_os_exact="${host_os}" +host_os_major=`echo "${host_os}" | sed 's/\..*$//'` +host_os_noversion=`echo "${host_os}" | sed 's/[0-9]*\..*$//'` +changequote([, ]) + +rm -f ./find-provides +if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ; then + echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov for automatic provides generation" + ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ./find-provides +elif test -f ${srcdir}/autodeps/${host_os_exact}.prov ; then + echo "using ${srcdir}/autodeps/${host_os_exact}.prov for automatic provides generation" + ln -s ${srcdir}/autodeps/${host_os_exact}.prov ./find-provides +elif test -f ${srcdir}/autodeps/${host_os_major}.prov ; then + echo "using ${srcdir}/autodeps/${host_os_major}.prov for automatic provides generation" + ln -s ${srcdir}/autodeps/${host_os_major}.prov ./find-provides +elif test -f ${srcdir}/autodeps/${host_os_noversion}.prov ; then + echo "using ${srcdir}/autodeps/${host_os_noversion}.prov for automatic provides generation" + ln -s ${srcdir}/autodeps/${host_os_noversion}.prov ./find-provides +else + echo "*** no default provides information is available for ${host_os_noversion}" + ln -s ${srcdir}/autodeps/none ./find-provides +fi + +rm -f ./find-requires +if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ; then + echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req for automatic requires generation" + ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ./find-requires +elif test -f ${srcdir}/autodeps/${host_os_exact}.req ; then + echo "using ${srcdir}/autodeps/${host_os_exact}.req for automatic requires generation" + ln -s ${srcdir}/autodeps/${host_os_exact}.req ./find-requires +elif test -f ${srcdir}/autodeps/${host_os_major}.req ; then + echo "using ${srcdir}/autodeps/${host_os_major}.req for automatic requires generation" + ln -s ${srcdir}/autodeps/${host_os_major}.req ./find-requires +elif test -f ${srcdir}/autodeps/${host_os_noversion}.req ; then + echo "using ${srcdir}/autodeps/${host_os_noversion}.req for automatic requires generation" + ln -s ${srcdir}/autodeps/${host_os_noversion}.req ./find-requires +else + echo "*** no default requires information is available for ${host_os_noversion}" + ln -s ${srcdir}/autodeps/none ./find-requires +fi + +dnl Determine the canonical arch-vendor-os for the host machine +case "${host_cpu}" in +*86) RPMCANONCOLOR=0; RPMCANONARCH=i386 ;; +ia32e*) RPMCANONCOLOR=3; RPMCANONARCH=ia32e ;; +amd64*) RPMCANONCOLOR=3; RPMCANONARCH=amd64 ;; +x86_64*) RPMCANONCOLOR=3; RPMCANONARCH=x86_64 ;; +alpha*) RPMCANONCOLOR=0; RPMCANONARCH=alpha ;; +sparc64*) RPMCANONCOLOR=3; RPMCANONARCH=sparc64 ;; +sparc*) RPMCANONCOLOR=3; RPMCANONARCH=sparc ;; +ia64*) RPMCANONCOLOR=2; RPMCANONARCH=ia64 ;; +s390x*) RPMCANONCOLOR=3; RPMCANONARCH=s390x ;; +s390*) RPMCANONCOLOR=0; RPMCANONARCH=s390 ;; +powerpc64*|ppc64*) RPMCANONCOLOR=3; RPMCANONARCH=ppc64 ;; +powerpc*|ppc*) RPMCANONCOLOR=0; RPMCANONARCH=ppc ;; +arm*) RPMCANONCOLOR=0; RPMCANONARCH=arm ;; +mipsel*) RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;; +mips*) RPMCANONCOLOR=0; RPMCANONARCH=mips ;; +m68k*) RPMCANONCOLOR=0; RPMCANONARCH=m68k ;; +sh3*) RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;; +sh4*) RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;; +*) RPMCANONCOLOR=0; RPMCANONARCH=unknown ;; +esac +case "${host_os_noversion}" in +mint) RPMCANONARCH=m68kmint ;; +esac +RPMCANONVENDOR="$build_vendor" +case "${build_vendor}" in +unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse) + test -f /etc/redhat-release && RPMCANONVENDOR=redhat + test -f /etc/SuSE-release && RPMCANONVENDOR=suse + test -f /etc/pld-release && RPMCANONVENDOR=pld + test -f /etc/mandrake-release && RPMCANONVENDOR=mandrake + test -f /etc/conectiva-release && RPMCANONVENDOR=conectiva + test -f /etc/lvr-release && RPMCANONVENDOR=lvr + test -f /etc/yellowdog-release && RPMCANONVENDOR=yellowdog + test -f /etc/caos-release && RPMCANONVENDOR=caos + ;; +esac +RPMCANONOS="$host_os_noversion" +RPMCANONGNU="$host_os_gnu" +AC_SUBST(RPMCANONCOLOR) +AC_SUBST(RPMCANONARCH) +AC_SUBST(RPMCANONVENDOR) +AC_SUBST(RPMCANONOS) +AC_SUBST(RPMCANONGNU) +AC_DEFINE_UNQUOTED([RPMCANONVENDOR],["${RPMCANONVENDOR}"],[canonical vendor]) + +if test X"$prefix" = XNONE ; then + usrprefix="$ac_default_prefix" +else + usrprefix=$prefix +fi + +RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`" +AC_SUBST(RPMCONFIGDIR) + +AC_SUBST(OBJDUMP) + +if test "$with_external_db" = no; then + AC_CONFIG_SUBDIRS(db3) +fi + +AM_CONDITIONAL([WITH_INTERNAL_DB],[test "$with_external_db" = no]) +AM_CONDITIONAL([DOXYGEN],[test "$DOXYGEN" != no]) +AM_CONDITIONAL([HACKINGDOCS],[test "$with_hackingdocs" = yes]) + +AC_PATH_PROG(AUTOM4TE,autom4te,:) + +AC_SUBST([dirstamp],[\${am__leading_dot}dirstamp]) + +AC_CONFIG_FILES([Makefile + rpmio/Makefile lib/Makefile build/Makefile sign/Makefile + po/Makefile.in scripts/Makefile fileattrs/Makefile + misc/Makefile + doc/Makefile + python/Makefile + luaext/Makefile + tests/Makefile + plugins/Makefile + ]) +AC_OUTPUT diff --git a/db3/configure b/db3/configure new file mode 100755 index 0000000..160b8e8 --- /dev/null +++ b/db3/configure @@ -0,0 +1,34 @@ +#!/bin/sh +#set -x +base_name=`basename $0` +base_path=`echo $0 | sed s,$base_name,,` + +db_dist="${base_path}../db/dist" + +rm -f config.cache + +# XXX edit CFLAGS= ... out of invocation args ??? +ARGS="`echo $* | sed -e 's% [^ ]*CFLAGS=[^ ]*%%' -e 's% -[^-][^ ]*%%g' -e 's% --param=[^ ]*%%g' -e 's%--cache-file=.*$%%'`" + +CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure $ARGS \ + --enable-shared --enable-static \ + --with-uniquename=_rpmdb --srcdir=$db_dist + +mv Makefile Makefile.orig +cat Makefile.orig | sed -e '/^install[:-]/c\ +.PHONY: listobjs\ +listobjs:\ +\ @echo $(OBJS) $(C_OBJS) \ +\ +distdir install check installcheck:\ +\ +db4_install: all install_setip' \ +-e '/^uninstall[:-]/c\ +uninstall:' \ +-e 's/^check depend/\ +check: all\ +depend/' \ + > Makefile + +# Generate manifest for rpmdb. +make -s listobjs > db3lobjs diff --git a/debug.h b/debug.h new file mode 100644 index 0000000..3d34ea0 --- /dev/null +++ b/debug.h @@ -0,0 +1,22 @@ +/** + * To be included after all other includes. + */ +#ifndef H_DEBUG +#define H_DEBUG + +#include + +#ifdef DMALLOC +#include +#endif + +#define RPMDBG_TOSTR(a) RPMDBG_TOSTR_ARG(a) +#define RPMDBG_TOSTR_ARG(a) #a + +#define RPMDBG() "at: " __FILE__ ":" RPMDBG_TOSTR (__LINE__) +#define RPMDBG_M_DEBUG(msg) msg " " RPMDBG() +#define RPMDBG_M_NODEBUG(msg) NULL + +#define RPMDBG_M(msg) RPMDBG_M_DEBUG(msg) + +#endif /* H_DEBUG */ diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..df8eea7 --- /dev/null +++ b/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..5f3dbf1 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,55 @@ +## Process this file with automake to produce Makefile.in + +EXTRA_DIST = + +man_man1dir = $(mandir)/man1 +man_man1_DATA = gendiff.1 +EXTRA_DIST += $(man_man1_DATA) + +man_man8dir = $(mandir)/man8 +man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 +man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 +EXTRA_DIST += $(man_man8_DATA) + +man_fr_man8dir = $(mandir)/fr/man8 +man_fr_man8_DATA = fr/rpm.8 +EXTRA_DIST += $(man_fr_man8_DATA) + +man_ja_man8dir = $(mandir)/ja/man8 +man_ja_man8_DATA = ja/rpm.8 ja/rpm2cpio.8 ja/rpmbuild.8 ja/rpmgraph.8 +EXTRA_DIST += $(man_ja_man8_DATA) + +man_ko_man8dir = $(mandir)/ko/man8 +man_ko_man8_DATA = ko/rpm.8 ko/rpm2cpio.8 +EXTRA_DIST += $(man_ko_man8_DATA) + +man_pl_man1dir = $(mandir)/pl/man1 +man_pl_man1_DATA = pl/gendiff.1 +man_pl_man8dir = $(mandir)/pl/man8 +man_pl_man8_DATA = pl/rpm.8 pl/rpm2cpio.8 pl/rpmbuild.8 pl/rpmdeps.8 pl/rpmgraph.8 +EXTRA_DIST += $(man_pl_man1_DATA) $(man_pl_man8_DATA) + +man_ru_man8dir = $(mandir)/ru/man8 +man_ru_man8_DATA = ru/rpm.8 ru/rpm2cpio.8 +EXTRA_DIST += $(man_ru_man8_DATA) + +man_sk_man8dir = $(mandir)/sk/man8 +man_sk_man8_DATA = sk/rpm.8 +EXTRA_DIST += $(man_sk_man8_DATA) + + +EXTRA_DIST += \ +manual/builddependencies \ +manual/buildroot \ +manual/conditionalbuilds \ +manual/dependencies \ +manual/format \ +manual/hregions \ +manual/macros \ +manual/multiplebuilds \ +manual/queryformat \ +manual/relocatable \ +manual/signatures \ +manual/spec \ +manual/triggers \ +manual/tsort diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..9b38305 --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,720 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(man_fr_man8dir)" \ + "$(DESTDIR)$(man_ja_man8dir)" "$(DESTDIR)$(man_ko_man8dir)" \ + "$(DESTDIR)$(man_man1dir)" "$(DESTDIR)$(man_man8dir)" \ + "$(DESTDIR)$(man_pl_man1dir)" "$(DESTDIR)$(man_pl_man8dir)" \ + "$(DESTDIR)$(man_ru_man8dir)" "$(DESTDIR)$(man_sk_man8dir)" +DATA = $(man_fr_man8_DATA) $(man_ja_man8_DATA) $(man_ko_man8_DATA) \ + $(man_man1_DATA) $(man_man8_DATA) $(man_pl_man1_DATA) \ + $(man_pl_man8_DATA) $(man_ru_man8_DATA) $(man_sk_man8_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = $(man_man1_DATA) $(man_man8_DATA) $(man_fr_man8_DATA) \ + $(man_ja_man8_DATA) $(man_ko_man8_DATA) $(man_pl_man1_DATA) \ + $(man_pl_man8_DATA) $(man_ru_man8_DATA) $(man_sk_man8_DATA) \ + manual/builddependencies manual/buildroot \ + manual/conditionalbuilds manual/dependencies manual/format \ + manual/hregions manual/macros manual/multiplebuilds \ + manual/queryformat manual/relocatable manual/signatures \ + manual/spec manual/triggers manual/tsort +man_man1dir = $(mandir)/man1 +man_man1_DATA = gendiff.1 +man_man8dir = $(mandir)/man8 +man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 \ + rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 +man_fr_man8dir = $(mandir)/fr/man8 +man_fr_man8_DATA = fr/rpm.8 +man_ja_man8dir = $(mandir)/ja/man8 +man_ja_man8_DATA = ja/rpm.8 ja/rpm2cpio.8 ja/rpmbuild.8 ja/rpmgraph.8 +man_ko_man8dir = $(mandir)/ko/man8 +man_ko_man8_DATA = ko/rpm.8 ko/rpm2cpio.8 +man_pl_man1dir = $(mandir)/pl/man1 +man_pl_man1_DATA = pl/gendiff.1 +man_pl_man8dir = $(mandir)/pl/man8 +man_pl_man8_DATA = pl/rpm.8 pl/rpm2cpio.8 pl/rpmbuild.8 pl/rpmdeps.8 pl/rpmgraph.8 +man_ru_man8dir = $(mandir)/ru/man8 +man_ru_man8_DATA = ru/rpm.8 ru/rpm2cpio.8 +man_sk_man8dir = $(mandir)/sk/man8 +man_sk_man8_DATA = sk/rpm.8 +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man_fr_man8DATA: $(man_fr_man8_DATA) + @$(NORMAL_INSTALL) + test -z "$(man_fr_man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man_fr_man8dir)" + @list='$(man_fr_man8_DATA)'; test -n "$(man_fr_man8dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man_fr_man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man_fr_man8dir)" || exit $$?; \ + done + +uninstall-man_fr_man8DATA: + @$(NORMAL_UNINSTALL) + @list='$(man_fr_man8_DATA)'; test -n "$(man_fr_man8dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man_fr_man8dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man_fr_man8dir)" && rm -f $$files +install-man_ja_man8DATA: $(man_ja_man8_DATA) + @$(NORMAL_INSTALL) + test -z "$(man_ja_man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man_ja_man8dir)" + @list='$(man_ja_man8_DATA)'; test -n "$(man_ja_man8dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man_ja_man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man_ja_man8dir)" || exit $$?; \ + done + +uninstall-man_ja_man8DATA: + @$(NORMAL_UNINSTALL) + @list='$(man_ja_man8_DATA)'; test -n "$(man_ja_man8dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man_ja_man8dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man_ja_man8dir)" && rm -f $$files +install-man_ko_man8DATA: $(man_ko_man8_DATA) + @$(NORMAL_INSTALL) + test -z "$(man_ko_man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man_ko_man8dir)" + @list='$(man_ko_man8_DATA)'; test -n "$(man_ko_man8dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man_ko_man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man_ko_man8dir)" || exit $$?; \ + done + +uninstall-man_ko_man8DATA: + @$(NORMAL_UNINSTALL) + @list='$(man_ko_man8_DATA)'; test -n "$(man_ko_man8dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man_ko_man8dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man_ko_man8dir)" && rm -f $$files +install-man_man1DATA: $(man_man1_DATA) + @$(NORMAL_INSTALL) + test -z "$(man_man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man_man1dir)" + @list='$(man_man1_DATA)'; test -n "$(man_man1dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man_man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man_man1dir)" || exit $$?; \ + done + +uninstall-man_man1DATA: + @$(NORMAL_UNINSTALL) + @list='$(man_man1_DATA)'; test -n "$(man_man1dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man_man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man_man1dir)" && rm -f $$files +install-man_man8DATA: $(man_man8_DATA) + @$(NORMAL_INSTALL) + test -z "$(man_man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man_man8dir)" + @list='$(man_man8_DATA)'; test -n "$(man_man8dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man_man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man_man8dir)" || exit $$?; \ + done + +uninstall-man_man8DATA: + @$(NORMAL_UNINSTALL) + @list='$(man_man8_DATA)'; test -n "$(man_man8dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man_man8dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man_man8dir)" && rm -f $$files +install-man_pl_man1DATA: $(man_pl_man1_DATA) + @$(NORMAL_INSTALL) + test -z "$(man_pl_man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man_pl_man1dir)" + @list='$(man_pl_man1_DATA)'; test -n "$(man_pl_man1dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man_pl_man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man_pl_man1dir)" || exit $$?; \ + done + +uninstall-man_pl_man1DATA: + @$(NORMAL_UNINSTALL) + @list='$(man_pl_man1_DATA)'; test -n "$(man_pl_man1dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man_pl_man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man_pl_man1dir)" && rm -f $$files +install-man_pl_man8DATA: $(man_pl_man8_DATA) + @$(NORMAL_INSTALL) + test -z "$(man_pl_man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man_pl_man8dir)" + @list='$(man_pl_man8_DATA)'; test -n "$(man_pl_man8dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man_pl_man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man_pl_man8dir)" || exit $$?; \ + done + +uninstall-man_pl_man8DATA: + @$(NORMAL_UNINSTALL) + @list='$(man_pl_man8_DATA)'; test -n "$(man_pl_man8dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man_pl_man8dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man_pl_man8dir)" && rm -f $$files +install-man_ru_man8DATA: $(man_ru_man8_DATA) + @$(NORMAL_INSTALL) + test -z "$(man_ru_man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man_ru_man8dir)" + @list='$(man_ru_man8_DATA)'; test -n "$(man_ru_man8dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man_ru_man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man_ru_man8dir)" || exit $$?; \ + done + +uninstall-man_ru_man8DATA: + @$(NORMAL_UNINSTALL) + @list='$(man_ru_man8_DATA)'; test -n "$(man_ru_man8dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man_ru_man8dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man_ru_man8dir)" && rm -f $$files +install-man_sk_man8DATA: $(man_sk_man8_DATA) + @$(NORMAL_INSTALL) + test -z "$(man_sk_man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man_sk_man8dir)" + @list='$(man_sk_man8_DATA)'; test -n "$(man_sk_man8dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man_sk_man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man_sk_man8dir)" || exit $$?; \ + done + +uninstall-man_sk_man8DATA: + @$(NORMAL_UNINSTALL) + @list='$(man_sk_man8_DATA)'; test -n "$(man_sk_man8dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man_sk_man8dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man_sk_man8dir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(man_fr_man8dir)" "$(DESTDIR)$(man_ja_man8dir)" "$(DESTDIR)$(man_ko_man8dir)" "$(DESTDIR)$(man_man1dir)" "$(DESTDIR)$(man_man8dir)" "$(DESTDIR)$(man_pl_man1dir)" "$(DESTDIR)$(man_pl_man8dir)" "$(DESTDIR)$(man_ru_man8dir)" "$(DESTDIR)$(man_sk_man8dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man_fr_man8DATA install-man_ja_man8DATA \ + install-man_ko_man8DATA install-man_man1DATA \ + install-man_man8DATA install-man_pl_man1DATA \ + install-man_pl_man8DATA install-man_ru_man8DATA \ + install-man_sk_man8DATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man_fr_man8DATA uninstall-man_ja_man8DATA \ + uninstall-man_ko_man8DATA uninstall-man_man1DATA \ + uninstall-man_man8DATA uninstall-man_pl_man1DATA \ + uninstall-man_pl_man8DATA uninstall-man_ru_man8DATA \ + uninstall-man_sk_man8DATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man \ + install-man_fr_man8DATA install-man_ja_man8DATA \ + install-man_ko_man8DATA install-man_man1DATA \ + install-man_man8DATA install-man_pl_man1DATA \ + install-man_pl_man8DATA install-man_ru_man8DATA \ + install-man_sk_man8DATA install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-man_fr_man8DATA \ + uninstall-man_ja_man8DATA uninstall-man_ko_man8DATA \ + uninstall-man_man1DATA uninstall-man_man8DATA \ + uninstall-man_pl_man1DATA uninstall-man_pl_man8DATA \ + uninstall-man_ru_man8DATA uninstall-man_sk_man8DATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/fr/rpm.8 b/doc/fr/rpm.8 new file mode 100644 index 0000000..f8415dc --- /dev/null +++ b/doc/fr/rpm.8 @@ -0,0 +1,844 @@ +.\" Traduction 06/08/2000 par Frédéric Delanoy (delanoy_f@yahoo.com) +.\" Mise à jour 06/09/2002 (rpm v4.0.4) +.\" +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.\" +.TH "RPM" "8" "06 juin 2001" "Red Hat, Inc." +.SH NOM +rpm \- Gestionnaire de Paquetages Red Hat +.SH SYNOPSIS +.SS "INTERROGER ET VÉRIFIER DES PAQUETAGES\ :" +.PP + +\fBrpm\fR {\fB-q|--query\fR} [\fBoptions-sélection\fR] [\fBoptions-interrogation\fR] + +\fBrpm\fR {\fB-V|--verify\fR} [\fBoptions-sélection\fR] +[\fB--nodeps\fR] [\fB--nofiles\fR] [\fB--nomd5\fR] [\fB--noscripts\fR] + +\fBrpm\fR {\fB-K|--checksig\fR} [\fB--nogpg\fR] [\fB--nopgp\fR] +[\fB--nomd5\fR] \fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR +.SS "INSTALLER, METTRE À NIVEAU ET DÉSINSTALLER DES PAQUETAGES\ :" +.PP + +\fBrpm\fR {\fB-i|--install\fR} [\fBoptions-installation\fR] \fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR + +\fBrpm\fR {\fB-U|--upgrade\fR} [\fBoptions-installation\fR] \fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR + +\fBrpm\fR {\fB-F|--freshen\fR} [\fBoptions-installation\fR] \fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR + +\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] +[\fB--noscripts\fR] [\fB--notriggers\fR] +[\fB--test\fR] \fB\fINOM_PAQUETAGE\fB\fR\fI ...\fR +.SS "CONSTRUIRE DES PAQUETAGES\ :" +.PP + +\fBrpm\fR {\fB-ba|-bb|-bp|-bc|-bi|-bl|-bs\fR} +[\fBoptions-construction\fR] \fB\fIFICHIER_SPECS\fB\fR\fI ...\fR + +\fBrpm\fR {\fB-ta|-tb|-tp|-tc|-ti|-tl|-ts\fR} +[\fBoptions-construction\fR] \fB\fITARBALL\fB\fR\fI ...\fR + +\fBrpm\fR {\fB--rebuild|--recompile\fR} \fB\fIPAQUETAGE_SOURCE\fB\fR\fI ...\fR + +.SS "DIVERS\ :" +.PP + +\fBrpm\fR {\fB--initdb|--rebuilddb\fR} + +\fBrpm\fR {\fB--addsign|--resign\fR} \fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR + +\fBrpm\fR {\fB--querytags|--showrc\fR} + +\fBrpm\fR {\fB--setperms|--setugids\fR} \fB\fINOM_PAQUETAGE\fB\fR\fI ...\fR +.SS "OPTIONS DE SÉLECTION" +.PP + +\fB[\fINOM_PAQUETAGE\fB] [-a,--all] [-f,--file\ \fIFICHIER\fB] +[-g,--group\ \fIGROUPE\fB] [-p,--package\ \fIFICHIER_PAQUETAGE\fB] +[--querybynumber\ \fINOMBRE\fB] [--triggeredby\ \fINOM_PAQUETAGE\fB] +[--whatprovides\ \fICAPACITÉ\fB] [--whatrequires\ \fICAPACITÉ\fB]\fR +.SS "OPTIONS D'INTERROGATION" +.PP + +\fB[--changelog] [-c,--configfiles] [-d,--docfiles] [--dump] [--filesbypkg] +[-i,--info] [--last] [-l,--list] [--provides] +[--qf,--queryformat\ \fIFORMAT_REQUÊTE\fB] [-R,--requires] [--scripts] +[-s,--state] [--triggers,--triggerscripts]\fR +.SS "OPTIONS D'INSTALLATION" +.PP + +\fB[--allfiles] [--badreloc] [--excludepath\ \fIANCIEN_CHEMIN\fB] +[--excludedocs] [--force] [-h,--hash] [--ignoresize] [--ignorearch] +[--ignoreos] [--includedocs] [--justdb] [--nodeps] [--noorder] +[--noscripts] [--notriggers] [--oldpackage] [--percent] +[--prefix \fINOUVEAU_CHEMIN\fB] [--relocate\ \fIANCIEN_CHEMIN\fB=\fINOUVEAU_CHEMIN\fB] +[--replacefiles] [--replacepkgs] [--test]\fR +.SS "OPTIONS DE CONSTRUCTION" +.PP + +\fB[--buildroot \fIRÉPERTOIRE\fB] [--clean] [--nobuild] [--rmsource] [--rmspec] +[--short-circuit] [--sign] [--target\ \fIPLATE-FORME\fB]\fR + +.SH "DESCRIPTION" +.PP +\fBrpm\fR est un puissant \fIgestionnaire de paquetages\fR, qui peut être +utilisé pour construire, installer, interroger, vérifier, mettre à jour, et +désinstaller des paquetages de logiciels individuels. Un \fIpaquetage\fR +est constitué d'une archive de fichiers, et de méta-données utilisées pour +installer et supprimer les fichiers de l'archive. Les méta-données incluent +les scripts assistants, les attributs des fichiers, et des informations +décrivant le paquetage. Il y a deux types de \fBpaquetages\fR\ : les +paquetages binaires, utilisés pour encapsuler des logiciels à installer, et +les paquetages de sources, qui contiennent le code et la recette permettant +de produire des paquetages binaires. +.PP +Un des modes de base suivants doit être sélectionné\ : +\fBInterroger\fR, +\fBVérifier\fR, +\fBVérifier Signature\fR, +\fBInstaller/Mettre à niveau/Rafraîchir\fR, +\fBDésinstaller\fR, +\fBConstruire Paquetage\fR, +\fBConstruire Paquetage à partir d'un Tarball\fR (NdT\ : sources au +format .tar.xx), +\fBRecompiler Paquetage\fR, +\fBInitialiser Base de Données\fR, +\fBReconstruire Base de Données\fR, +\fBResigner\fR, +\fBAjouter Signature\fR, +\fBFixer Propriétaires/Groupes\fR, +\fBMontrer les Options d'Interrogation\fR, et +\fBMontrer Configuration\fR. +.SS "OPTIONS GÉNÉRALES" +.PP +Ces options peuvent être utilisées dans tous les modes. +.TP +\fB-?, --help\fR +Afficher un message d'utilisation plus long que de coutume. +.TP +\fB--version\fR +Afficher une ligne unique contenant le numéro de version du \fBrpm\fR +utilisé. +.TP +\fB--quiet\fR +Afficher le moins possible - normalement, seuls les messages d'erreur +seront affichés. +.TP +\fB-v\fR +Afficher des informations verbeuses - les messages de progression des +routines seront normalement affichés +.TP +\fB-vv\fR +Afficher un tas d'horribles informations de débogage. +.TP +\fB--rcfile \fILISTE_FICHIERS\fB\fR +Chacun des fichiers de \fILISTE_FICHIERS\fR (qui sont séparés par des +deux-points) est lu séquentiellement par \fBrpm\fR pour obtenir des +informations de configuration. Seul le premier fichier de la liste doit +exister, et les tildes seront développés en \fB$HOME\fR. La +\fILISTE_FICHIERS\fR par défaut est +\fI/usr/lib/rpm/rpmrc\fR:\fI/etc/rpmrc\fR:\fI~/.rpmrc\fR. +.TP +\fB--pipe \fICOMMANDE\fB\fR +Envoyer la sortie de \fBrpm\fR à la \fICOMMANDE\fR par l'intermédiaire d'un +tube. +.TP +\fB--dbpath \fIRÉPERTOIRE\fB\fR +Utiliser la base de données située dans \fIRÉPERTOIRE\fR au lieu du +chemin par défaut \fI/var/lib/rpm\fR. +.TP +\fB--root \fIRÉPERTOIRE\fB\fR +Utiliser le système ayant \fIRÉPERTOIRE\fR comme racine pour toutes les +opérations. Notez que cela signifie que la base de données sera lue ou +modifiée dans \fIRÉPERTOIRE\fR et que chacun des scriptlets (petits +scripts) \fB%pre\fR et/ou \fB%post\fR sera exécuté après un chroot(2) vers +\fIRÉPERTOIRE\fR. +.SS "OPTIONS D'INSTALLATION ET DE MISE À NIVEAU" +.PP +La forme générale d'une commande d'installation rpm est +.PP +\fBrpm\fR {\fB-i|--install\fR} [\fBoptions-installation\fR] +\fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR +.PP +Cela installe un nouveau paquetage. +.PP +La forme générale d'une commande de mise à niveau rpm est +.PP +\fBrpm\fR {\fB-U|--upgrade\fR} [\fBoptions-installation\fR] +\fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR +.PP +Cela met à niveau ou installe le paquetage actuellement installé vers une +version plus récente. C'est similaire à l'installation, sauf que toutes les +anciennes versions du paquetage sont désinstallées après que le nouveau +paquetage ait été installé. +.PP +\fBrpm\fR {\fB-F|--freshen\fR} [\fBoptions-installation\fR] +\fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR +.PP +Cela mettra à niveau les paquetages, mais seulement si une version plus +ancienne existe à cet instant. Le \fIFICHIER_PAQUETAGE\fR peut être +spécifié en tant qu'URL \fBftp\fR ou \fBhttp\fR, auquel cas le paquetage +sera téléchargé avant d'être installé. Voyez \fBOPTIONS FTP/HTTP\fR pour +des informations sur le support interne d'un client \fBftp\fR et \fBhttp\fR +par \fBrpm\fR. +.PP +.TP +\fB--allfiles\fR +Installer ou mettre à niveau tous les fichiers manquants du paquetage, même +s'ils existent déjà. +.TP +\fB--badreloc\fR +Utilisé avec \fB--relocate\fR, permet des relogements dans tous les chemins +de fichiers, et pas seulement dans les \fIANCIEN_CHEMIN\fR inclus dans les +indications de relogement du paquetage binaire. +.TP +\fB--excludepath \fIANCIEN_CHEMIN\fB\fR +Ne pas installer de fichier dont le nom commence par \fIANCIEN_CHEMIN\fR. +.TP +\fB--excludedocs\fR +Ne pas installer de fichier marqué comme faisant partie de la documentation +(ce qui inclut les pages de manuel et les documents texinfo). +.TP +\fB--force\fR +Similaire à l'utilisation de \fB--replacepkgs\fR, +\fB--replacefiles\fR, et \fB--oldpackage\fR. +.TP +\fB-h, --hash\fR +Afficher 50 marques de hachage quand l'archive du paquetage est déballée. +À\ utiliser avec \fB\-v|--verbose\fR pour un plus bel affichage. +.TP +\fB--ignoresize\fR +Ne pas vérifier s'il y a un espace disque suffisant sur les systèmes +de fichiers montés avant d'installer ce paquetage. +.TP +\fB--ignorearch\fR +Permettre l'installation ou la mise à niveau même si les architectures du +paquetage binaire et de l'hôte ne correspondent pas. +.TP +\fB--ignoreos\fR +Permettre l'installation ou la mise à niveau même si les systèmes +d'exploitation du paquetage binaire et de l'hôte ne concordent pas. +.TP +\fB--includedocs\fR +Installer les fichiers de documentation. C'est le comportement par défaut. +.TP +\fB--justdb\fR +Ne mettre à jour que la base de données, et pas le système de fichiers. +.TP +\fB--nodeps\fR +Ne pas effectuer de vérification des dépendances avant d'installer ou de +mettre à niveau un paquetage. +.TP +\fB--noorder\fR +Ne pas réordonner les paquetages lors d'une installation. La liste des +paquetages devrait normalement être réordonnée pour satisfaire aux +dépendances. +.TP +\fB--noscripts\fR +.TP +\fB--nopre\fR +.TP +\fB--nopost\fR +.TP +\fB--nopreun\fR +.TP +\fB--nopostun\fR +Ne pas exécuter le scriptlet de même nom. L'option +\fB--noscripts\fR est équivalente à + +\fB--nopre\fR +\fB--nopost\fR +\fB--nopreun\fR +\fB--nopostun\fR + +et désactive l'exécution des scriptlets correspondants +\fB%pre\fR, +\fB%post\fR, +\fB%preun\fR, et +\fB%postun\fR. +.TP +\fB--notriggers\fR +.TP +\fB--notriggerin\fR +.TP +\fB--notriggerun\fR +.TP +\fB--notriggerpostun\fR +Ne pas exécuter de scriptlet déclenché du type spécifié. L'option +\fB--notriggers\fR est équivalente à + +\fB--notriggerin\fR +\fB--notriggerun\fR +\fB--notriggerpostun\fR + +et désactive l'exécution des scriptlets correspondants +\fB%triggerin\fR, +\fB%triggerun\fR, et +\fB%triggerpostun\fR. +.TP +\fB--oldpackage\fR +Permettre qu'une mise à niveau remplace un paquetage par un paquetage plus +ancien. +.TP +\fB--percent\fR +Afficher le pourcentage de progression de l'extraction des fichiers de +l'archive du paquetage, afin de faciliter l'exécution de \fBrpm\fR depuis +d'autres outils. +.TP +\fB--prefix \fINOUVEAU_CHEMIN\fB\fR +Pour les paquetages binaires relogeables, traduire tous les chemins de +fichiers présents dans les indications de relogement du paquetage, et +débutant par le préfixe d'installation, par \fINOUVEAU_CHEMIN\fR. +.TP +\fB--relocate \fIANCIEN_CHEMIN\fB=\fINOUVEAU_CHEMIN\fB\fR +Pour les paquetages binaires relogeables, traduire tous les chemins de +fichiers présents dans les indications de relogement du paquetage et +débutant par \fIANCIEN_CHEMIN\fR par \fINOUVEAU_CHEMIN\fR. Cette option +peut être utilisée de façon répétitive si plusieurs \fIANCIEN_CHEMIN\fR du +paquetage doivent être relogés. +.TP +\fB--replacefiles\fR +Installer les paquetages même s'ils remplacent des fichiers d'autres +paquetages déjà installés. +.TP +\fB--replacepkgs\fR +Installer les paquetages même si certains d'entre eux sont déjà installés +sur ce système. +.TP +\fB--nobuild\fR +Ne pas installer le paquetage, mais uniquement rechercher et rapporter des +conflits potentiels. +.SS "OPTIONS D'INTERROGATION" +.PP +La forme générale d'une commande d'interrogation rpm est +.PP +\fBrpm\fR {\fB-q|--query\fR} [\fBoptions-sélection\fR] +[\fBoptions-interrogation\fR] +.PP +Vous pouvez spécifier le format dans lequel les informations sur le +paquetage doivent être affichées. Pour ce faire, utilisez l'option +{\fB--qf|--queryformat\fR}, suivie par la chaîne de format +\fIFORMAT_REQUÊTE\fR. Les chaînes de format sont des versions modifiées de +celles du \fBprintf(3)\fR standard. Le format est constitué de chaînes de +caractères statiques (qui peuvent inclure les séquences d'échappement de +caractère C standard pour les sauts de lignes, tabulations et autres +caractères spéciaux) et de formateurs de type \fBprintf(3)\fR. Comme +\fBrpm\fR connaît déjà le type à afficher, le spécificateur de type doit +néanmoins être omis, et être remplacé par le nom de l'étiquette d'en-tête à +afficher, enfermé dans des caractères \fB{}\fR. Les noms d'étiquettes sont +insensibles à la casse, et la partie \fBRPMTAG_\fR du nom de l'étiquette +peut également être omise. +.PP +Des formats de sortie alternatifs peuvent être requis en faisant suivre +l'étiquette par \fB:\fItypetag\fB\fR. Actuellement, les types suivants sont +supportés\ : +\fBoctal\fR, +\fBdate\fR, +\fBshescape\fR, +\fBperms\fR, +\fBfflags\fR, and +\fBdepflags\fR. +Par exemple, pour n'afficher que le nom des paquetages interrogés, vous +pourriez utiliser \fB%{NAME}\fR comme chaîne de format. Pour afficher les +noms de paquetages et les informations de distribution en deux colonnes, +vous pourriez utiliser \fB%-30{NAME}%{DISTRIBUTION}\fR. \fBrpm\fR affichera +une liste de tous les étiquettes qu'il connaît quand il est invoqué avec +l'argument \fB--querytags\fR. +.PP +Il y a deux sous-ensembles d'options d'interrogation\ : la sélection de +paquetage, et la sélection d'informations. +.SS "OPTIONS DE SÉLECTION DE PAQUETAGES\ :" +.PP +.TP +\fB\fINOM_PAQUETAGE\fB\fR +Interroger le paquetage installé nommé \fINOM_PAQUETAGE\fR. +.TP +\fB-a, --all\fR +Interroger tous les paquetages installés. +.TP +\fB-f, --file \fIFICHIER\fB\fR +Interroger le paquetage possédant le \fIFICHIER\fR. +.TP +\fB-g, --group \fIGROUPE\fB\fR +Interroger le paquetage de groupe \fIGROUPE\fR. +.TP +\fB-p, --package \fIFICHIER_PAQUETAGE\fB\fR +Interroger un paquetage (non installé) \fIFICHIER_PAQUETAGE\fR. Le +\fIFICHIER_PAQUETAGE\fR peut être spécifié en tant qu'URL de style +\fBftp\fR ou \fBhttp\fR, auquel cas l'en-tête du paquetage sera téléchargé +et interrogé. Voyez \fBOPTIONS FTP/HTTP\fR pour obtenir des informations +sur le support interne d'un client ftp et http par RPM. Le ou les arguments +\fIFICHIER_PAQUETAGE\fR, s'ils ne sont pas des paquetages binaires, seront +interprétés comme étant un manifeste ascii de paquetage. Les commentaires +sont autorisés\ ; ils débutent par un «\ #\ », et chaque ligne d'un fichier +de manifeste de paquetage peut inclure des motifs génériques (y compris +ceux spécifiant des URLs distantes) séparés par des espaces, qui seront +développés en chemins qui remplacent le manifeste du paquetage par les +arguments \fIFICHIER_PAQUETAGE\fR additionnels ajoutés à la requête. +.TP +\fB--querybynumber \fINOMBRE\fB\fR +Interroger directement la \fINOMBRE\fR-ième entrée de la base de données\ ; +n'est utile que pour le débogage. +.TP +\fB--specfile \fIFICHIER_SPECS\fB\fR +Analyse syntaxiquement et interroge le \fIFICHIER_SPECS\fR (NdT\ : fichier +de spécifications) comme s'il s'agissait d'un paquetage. Bien que toutes +les informations (p.ex. les listes de fichiers) ne soient pas disponibles, +ce type d'interrogation permet à rpm d'être utilisé pour extraire des +informations de fichiers specs sans devoir écrire un analyseur syntaxique +de fichiers de spécifications. +.TP +\fB--triggeredby \fINOM_PAQUETAGE\fB\fR +Interroger les paquetages qui sont déclenchés par le(s) paquetage(s) +\fINOM_PAQUETAGE\fR. +.TP +\fB--whatprovides \fICAPACITÉ\fB\fR +Interroger tous les paquetages qui fournissent la capacité \fICAPACITÉ\fR. +.TP +\fB--whatrequires \fICAPACITÉ\fB\fR +Interroger tous les paquetages qui requièrent \fICAPACITÉ\fR pour un +fonctionnement correct. +.SS "OPTIONS D'INTERROGATION DE PAQUETAGE\ :" +.PP +.TP +\fB--changelog\fR +Afficher les informations concernant les changements dans ce paquetage. +.TP +\fB-c, --configfiles\fR +Lister uniquement les fichiers de configuration (implique \fB-l\fR). +.TP +\fB-d, --docfiles\fR +Lister uniquement les fichiers de documentation (implique \fB-l\fR). +.TP +\fB--dump\fR +Afficher les informations sur le fichier comme suit\ : +.sp +.RS + +.nf + chemin taille date_modif somme_md5 mode propriétaire + groupe isconfig isdoc rdev symlink + +.fi +.RE + + +Cette option doit être utilisée avec au moins une option parmi +\fB-l\fR, +\fB-c\fR, +\fB-d\fR. +.TP +\fB--filesbypkg\fR +Lister tous les fichiers de chaque paquetage sélectionné. +.TP +\fB-i, --info\fR +Afficher des informations sur le paquetage, incluant son nom, sa version et +sa description. Utilise l'option \fB--queryformat\fR si elle a été +spécifiée. +.TP +\fB--last\fR +Ordonner le listing des paquetages par date d'installation de sorte que les +derniers paquetages installés apparaissent en premier lieu. +.TP +\fB-l, --list\fR +Lister les fichiers du paquetage. +.TP +\fB--provides\fR +Lister les capacités que fournit ce paquetage. +.TP +\fB-R, --requires\fR +Lister les paquetages desquels dépend ce paquetage. +.TP +\fB--scripts\fR +Lister les scriplets spécifiques au paquetage qui sont utilisés comme +partie intégrante des processus d'installation et de désinstallation. +.TP +\fB-s, --state\fR +Afficher les \fIétats\fR des fichiers du paquetage (implique \fB\-l\fR). +L'état de chaque fichier est \fInormal\fR, \fInon installé\fR ou +\fIremplacé\fR. +.TP +\fB--triggers, --triggerscripts\fR +Afficher les scripts déclenchés qui sont contenus dans le paquetage (s'il y +en a). +.SS "OPTIONS DE VÉRIFICATION" +.PP +La forme générale d'une commande de vérification rpm est +.PP +\fBrpm\fR {\fB-V|--verify\fR} [\fBoptions-sélection\fR] +[\fB--nodeps\fR] [\fB--nofiles\fR] [\fB--nomd5\fR] [\fB--noscripts\fR] +.PP +La vérification d'un paquetage compare les informations sur les fichiers +installés dans le paquetage avec les informations sur les fichiers obtenues +à partir des méta-données du paquetage original conservées dans la base de +données rpm. Entre autres choses, la vérification compare la taille, la +somme MD5, les permissions, le propriétaire et le groupe de chaque fichier. +Toutes les discordances sont affichées. Les fichiers qui n'avaient pas été +installés à partir du paquetage (p.ex. les fichiers de documentation exclus +lors de l'installation en utilisant l'option «\ \fB--excludedocs\fR\ », +seront ignorés silencieusement. +.PP +Les options de sélection de paquetage sont les mêmes que celles relatives à +l'interrogation de paquetages (ce qui inclut les fichiers de manifeste de +paquetage comme arguments). Les autres options ne pouvant être utilisées +qu'en mode vérification sont\ : +.TP +\fB--nodeps\fR +Ne pas vérifier les dépendances. +.TP +\fB--nofiles\fR +Ne pas vérifier les fichiers. +.TP +\fB--nomd5\fR +Ne pas vérifier les sommes de contrôle MD5. +.TP +\fB--noscripts\fR +Ne pas exécuter le scriptlet \fB%verifyscript\fR (s'il y en a un). +.PP +Le format de sortie est une chaîne de 8 caractères, un «\ \fBc\fR\ » +éventuel dénotant un fichier de configuration, et ensuite le nom du +fichier. Chacun des 8 caractères indique le résultat d'une comparaison +d'attribut(s) du fichier avec la valeur du (des) attribut(s) enregistré(s) +dans la base de données. Un «\ \fB.\fR\ » (point) seul signifie que le test +s'est bien passé, alors qu'un «\ \fB?\fR\ » seul indique que le test n'a +pas pu être effectué (p.ex. quand les permissions d'accès aux fichier +empêchent la lecture). Sinon, le caractère mnémonique affiché en \fBG\fRras +dénote l'échec du test \fB--verify\fR correspondant\ : + +\fBS\fR +la taille (\fBS\fRize) du fichier diffère + +\fBM\fR +le \fBM\fRode diffère (inclut les permissions et le type du fichier) + +\fB5\fR +la somme MD\fB5\fR diffère + +\fBD\fR +Le numéro de périphérique (\fBD\fRevice) majeur/mineur diffère + +\fBL\fR +Le chemin renvoyé par read\fBL\fRink(2) diffère + +\fBU\fR +L'\fBU\fRtilisateur propriétaire diffère + +\fBG\fR +Le \fBG\fRroupe propriétaire diffère + +\fBT\fR +La date de dernière modification (m\fBT\fRime) diffère +.SS "VÉRIFICATION DE SIGNATURE" +.PP +La forme générale d'une commande de vérification de signature rpm est +.PP +\fBrpm\fR \fB--checksig\fR [\fB--nogpg\fR] [\fB--nopgp\fR] [\fB--nomd5\fR] \fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR +.PP +Ceci vérifie la signature PGP du paquetage \fI\fR pour +s'assurer de son intégrité et de son origine. Les informations de +configuration PGP sont lues à partir des fichiers de configuration. Voyez +la section sur les SIGNATURES PGP pour les détails. +.SS "OPTIONS DE DÉSINSTALLATION" +.PP +La forme générale d'une commande de désinstalltion rpm est +.PP +\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] [\fB--noscripts\fR] [\fB--notriggers\fR] [\fB--test\fR] \fB\fINOM_PAQUETAGE\fB\fR\fI ...\fR +.PP +Les options suivantes peuvent également être utilisées\ : +.TP +\fB--allmatches\fR +Désinstaller toutes les versions du paquetage correspondant à +\fINOM_PAQUETAGE\fR. Normalement, une erreur se produit si +\fINOM_PAQUETAGE\fR correspond à plusieurs paquetages. +.TP +\fB--nodeps\fR +Ne pas effectuer de vérification des dépendances avant de désinstaller les +paquetages. +.TP +\fB--noscripts\fR +.TP +\fB--nopreun\fR +.TP +\fB--nopostun\fR +Ne pas exécuter le scriptlet de même nom. L'option \fB--noscripts\fR lors +de la désinstallation du paquetage est équivalente à + +\fB--nopreun\fR +\fB--nopostun\fR + +et désactive l'exécution du ou des scriptlets +\fB%preun\fR et +\fB%postun\fR +correspondants. +.TP +\fB--notriggers\fR +.TP +\fB--notriggerun\fR +.TP +\fB--notriggerpostun\fR +Ne pas exécuter de scriptlet déclenché du type spécifié. L'option +\fB--notriggers\fR est équivalente à + +\fB--notriggerun\fR +\fB--notriggerpostun\fR + +et désactive l'exécution du ou des scriptlets +\fB%triggerun\fR et +\fB%triggerpostun\fR +correspondants. +.TP +\fB--test\fR +Ne pas réellement désinstaller quoi que ce soit, simplement effectuer un +test pour voir si c'est possible. Utile conjointement avec l'option +\fB\-vv\fR pour le débogage. +.SS "OPTIONS DE CONSTRUCTION" +La forme générale d'une commande de construction rpm est +.PP +\fBrpm\fR {\fB-b\fIÉTAPE\fB|-t\fIÉTAPE\fB\fR} +[\fBoptions-construction\fR] \fB\fIFICHIER\fB\fR\fI ...\fR +.PP +L'argument utilisé est \fB-b\fR si un fichier spec est utilisé pour +construire le paquetage et \fB-t\fR si \fBrpm\fR devrait examiner le +contenu d'un fichier tar (éventuellement compressé) pour obtenir le fichier +de spécifications à utiliser. Après le premier argument, le caractère +suivant (\fIÉTAPE\fR) spécifie les étapes de construction et d'empaquetage +à effectuer, et peut être\ : +.TP +\fB-ba\fR +Construire les paquetages binaires et sources (après avoir effectué les +étapes %prep, %build et %install). +.TP +\fB-bb\fR +Construire un paquetage binaire (après avoir effectué les étapes %prep, +%build et %install). +.TP +\fB\-bp\fR +Exécuter l'étape «\ %prep\ » du fichier de spécifications. Normalement, +ceci implique de dépaqueter les sources et d'appliquer tous les patches. +.TP +\fB-bc\fR +Effectuer l'étape «\ %build\ » du fichier de spécifications (après avoir +effectué l'étape %prep). Cela implique en général l'équivalent d'un +«\ make\ ». +.TP +\fB-bi\fR +Effectuer l'étape «\ %install\ » du fichier de spécifications (après avoir +effectué les étapes %prep et %build). Cela implique généralement +l'équivalent d'un «\ make install\ ». +.TP +\fB-bl\fR +Accomplir une «\ vérification de liste\ ». La section «\ %files\ » du +fichier de spécifications subit le développement des macros, et des +vérifications sont effectuées pour vérifier que chaque fichier existe. +.TP +\fB-bs\fR +Construire uniquement le paquetage de sources. +.PP +Les options suivantes peuvent également être utilisées\ : +.TP +\fB--buildroot \fIRÉPERTOIRE\fB\fR +Lors de la construction du paquetage, surcharger l'étiquette BuildRoot +(Construire Racine) avec le répertoire \fIRÉPERTOIRE\fR. +.TP +\fB--clean\fR +Supprimer l'arbre de construction après que les paquetages aient été créés. +.TP +\fB--nobuild\fR +N'exécuter aucune étape de construction. Utile pour le test de fichiers +spec. +.TP +\fB--rmsource\fR +Supprimer les sources après la construction (cette option peut également +être utilisée seule\ ; exemple\ : «\ \fBrpm --rmsource foo.spec\fR\ »). +.TP +\fB--rmspec\fR +Supprimer le fichier spec après la construction (peut également être +utilisé seul, p.ex. «\ \fBrpm --rmspec foo.spec\fR\ »). +.TP +\fB--short-circuit\fR +Aller directement à l'étape spécifiée (c.-à-d. éviter toutes les étapes +intermédiaires). Uniquement valide avec \fB-bc\fR et \fB-bi\fR. +.TP +\fB--sign\fR +Incorporer une signature PGP dans le paquetage. Cette signature peut être +utilisée pour vérifier l'intégrité et l'origine du paquetage. Voyez la +section sur les SIGNATURES PGP pour les détails de configuration. +.TP +\fB--target \fIPLATE-FORME\fB\fR +Pendant la construction du paquetage, interpréter \fIPLATE-FORME\fR comme +étant la valeur de \fBarch-vendor-os\fR et fixer les macros \fB%_target\fR, +\fB%_target_arch\fR et \fB%_target_os\fR en conséquence. +.SS "OPTIONS DE RECONSTRUCTION ET DE RECOMPILATION" +.PP +Il y a deux autres façons d'invoquer une construction avec rpm\ : +.PP +\fBrpm\fR {\fB--rebuild|--recompile\fR} \fB\fIPAQUETAGE_SOURCE\fB\fR\fI ...\fR +.PP +Quand il est invoqué de cette façon, \fBrpm\fR installe le paquetage de +sources désigné, et effectue une préparation, une compilation et une +installation. \fB--rebuild\fR construit en outre un nouveau paquetage +binaire. Quand la construction est terminée, le répertoire de construction +est supprimé (comme avec \fB--clean\fR) et les sources ainsi que le fichier +de spécifications du paquetage sont supprimés. +.SS "SIGNER UN PAQUETAGE" +.PP +\fBrpm\fR {\fB--addsign|--resign\fR} \fB\fIFICHIER_PAQUETAGE\fB\fR\fI ...\fR +.PP +L'option \fB--addsign\fR génère et insère de nouvelles signatures pour +chaque paquetage. Toute signature existante sera supprimée. +.PP +L'option \fB--resign\fR génère et ajoute les nouvelles signatures pour les +paquetages spécifiés tous en conservant celles existant déjà. +.SS "SIGNATURES GPG" +.PP +Pour utiliser la fonctionnalité de signature, \fBrpm\fR doit être configuré +pour exécuter GPG, et doit être capable de trouver un porte-clés public +(keyring) comportant les clés publiques de Red Hat (ou d'un autre vendeur). +Par défaut, \fBrpm\fR utilise les mêmes conventions que GPG pour trouver +les porte-clés, à savoir la variable d'environnement \fB$GPGPATH\fR). Si +vos porte-clés ne sont pas situés là où GPG les attend, vous devrez fixer +la valeur de la macro \fB%_gpg_path\fR à l'endroit où se situent les +porte-clés GPG à utiliser. +.PP +Si vous voulez pouvoir signer les paquetages que vous avez créés +vous\-même, vous devrez également créer votre propre paire clé publique/clé +secrète (voir le manuel GPG). Vous devrez également configurer les macros +suivantes\ : +.TP +\fB%_gpg_name\fR +Le nom de l'«\ utilisateur\ » dont vous voulez utiliser la clé pour +signer vos paquetages. +.PP +Lors de la construction de paquetages, vous ajouterez ensuite \fB--sign\fR +sur la ligne de commandes. On vous demandera votre phrase de passe, et +votre paquetage sera construit et signé. Par exemple, pour pouvoir utiliser +GPG pour signer les paquetages en tant qu'utilisateur \fI«\ John Doe +\ »\fR à partir des porte-clés situés dans +\fB/etc/rpm/.gpg\fR en utilisant l'exécutable \fB/usr/bin/gpg\fR, vous +devriez inclure +.PP + +.nf +%_gpg_path /etc/rpm/.gpg +%_gpg_name John Doe +%_gpgbin /usr/bin/gpg +.fi +.PP +dans un fichier de configuration de macros. Utilisez \fB/etc/rpm/macros\fR +pour une configuration par système et \fB~/.rpmmacros\fR pour une +configuration par utilisateur. +.SS "OPTIONS DE RECONSTRUCTION DE BASE DE DONNÉES" +.PP +La forme générale d'une commande de reconstruction d'une base de données +rpm est +.PP +\fBrpm\fR {\fB--initdb|--rebuilddb\fR} [\fB-v\fR] [\fB--dbpath\ \fIRÉPERTOIRE\fB\fR] [\fB--root\ \fIRÉPERTOIRE\fB\fR] +.PP +Utilisez \fB--initdb\fR pour reconstruire une nouvelle base de données\ ; +utilisez \fB--rebuilddb\fR pour reconstruire les index de la base de +données à partir des en-têtes des paquetages installés. +.SS "SHOWRC" +.PP +La commande +.PP +\fBrpm\fR \fB--showrc\fR +.PP +affiche les valeurs que \fBrpm\fR va utiliser pour toutes les options qui +sont actuellement définies dans le(s) fichier(s) de configuration +\fIrpmrc\fR et \fImacros\fR. +.SS "OPTIONS FTP/HTTP" +.PP +\fBrpm\fR peut agir comme un client FTP et/ou HTTP afin que les paquetages +puissent être interrogés et installés à partir d'Internet. Les fichiers de +paquetage pour les opérations d'installation, de mise à niveau et +d'interrogation peuvent être spécifiés dans une URL de style \fBftp\fR ou +\fBhttp\fR\ : +.PP +ftp://UTILISATEUR:MOT-PASSE@HÔTE:PORT/chemin/vers/paquetage.rpm +.PP +Si la partie \fB:MOT-PASSE\fR est omise, le mot de passe sera demandé (une +seule fois par paire utilisateur/nom_hôte). Si tant l'utilisateur que le +mot de passe est omis, le \fBftp\fR anonyme est utilisé. Dans tous les cas, +des transferts \fBftp\fR passifs (PASV) sont effectués. +.PP +\fBrpm\fR permet d'utiliser les options suivantes avec les URLs ftp\ : +.TP +\fB--ftpproxy \fIHÔTE\fB\fR +L'hôte \fIHÔTE\fR sera utilisé comme serveur proxy pour tous les transferts +ftp, ce qui permet aux utilisateurs d'effectuer des connexions ftp au +travers de firewalls (gardes-barrières) qui utilisent des proxys. Cette +option peut également être spécifiée en configurant la macro +\fB%_ftpproxy\fR. +.TP +\fB--ftpport \fIPORT\fB\fR +Le numéro de \fIPORT\fR TCP à utiliser pour la connexion ftp sur le serveur +proxy ftp au lieu du port par défaut. Cette option peut également être +spécifiée en configurant la macro \fB%_ftpport\fR. +.PP +\fBrpm\fR permet d'utiliser les options suivantes avec les URL \fBhttp\fR\ : +.TP +\fB--httpproxy \fIHÔTE\fB\fR +L'hôte \fIHÔTE\fR sera utilisé comme un serveur délégué (proxy) pour tous +les transferts \fBhttp\fR. Cette option peut également être spécifiée en +configurant la macro \fB%_httpproxy\fR. +.TP +\fB--httpport \fIPORT\fB\fR +Le numéro de \fIPORT\fR TCP à utiliser pour la connexion \fBhttp\fR sur le +serveur proxy http au lieu du port par défaut. Cette option peut également +être spécifiée en configurant la macro \fB%_httpport\fR. +.SH "FICHIERS" +.PP +\fI/usr/lib/rpm/rpmrc\fR + +\fI/etc/rpmrc\fR + +\fI~/.rpmrc\fR + +\fI/usr/lib/rpm/macros\fR + +\fI/etc/rpm/macros\fR + +\fI~/.rpmmacros\fR + +\fI/var/lib/rpm/Conflictname\fR + +\fI/var/lib/rpm/Basenames\fR + +\fI/var/lib/rpm/Group\fR + +\fI/var/lib/rpm/Name\fR + +\fI/var/lib/rpm/Packages\fR + +\fI/var/lib/rpm/Providename\fR + +\fI/var/lib/rpm/Requirename\fR + +\fI/var/lib/rpm/Triggername\fR + +\fI/var/tmp/rpm*\fR +.SH "VOIR AUSSI" + +\fBpopt\fR(3), + +\fBrpm2cpio\fR(8), + +\fBrpmbuild\fR(8), + +\fBhttp://www.rpm.org/\fR +.SH "AUTEURS" + +Marc Ewing + +Jeff Johnson + +Erik Troan + +.SH "TRADUCTION" +Frédéric Delanoy <\fIdelanoy_f at yahoo.com\fR>, 2002. + + diff --git a/doc/gendiff.1 b/doc/gendiff.1 new file mode 100644 index 0000000..fd49943 --- /dev/null +++ b/doc/gendiff.1 @@ -0,0 +1,45 @@ +.TH GENDIFF 1 "Mon Jan 10 2000" +.UC 4 +.SH NAME +gendiff \- utility to aid in error-free diff file generation +.SH SYNOPSIS +\fBgendiff\fR +.SH DESCRIPTION +\fBgendiff\fR is a rather simple script which aids in generating a +diff file from a single directory. It takes a directory name and a +"diff-extension" as its only arguments. The diff extension should be +a unique sequence of characters added to the end of all original, +unmodified files. The output of the program is a diff file which may +be applied with the \fBpatch\fR program to recreate the changes. +.PP +The usual sequence of events for creating a diff is to create two +identical directories, make changes in one directory, and then use the +\fBdiff\fR utility to create a list of differences between the two. +Using gendiff eliminates the need for the extra, original and +unmodified directory copy. Instead, only the individual files that +are modified need to be saved. +.PP +Before editing a file, copy the file, appending the extension you have chosen +to the filename. I.e. if you were going to edit somefile.cpp and have chosen +the extension "fix", copy it to somefile.cpp.fix before editing it. +Then edit the first copy (somefile.cpp). +.PP +After editing all the files you need to edit in this fashion, enter the +directory one level above where your source code resides, and then type +.sp +.nf + $ gendiff somedirectory .fix > mydiff-fix.patch +.fi +.PP +You should redirect the output to a file (as illustrated) unless you want to +see the results on stdout. + +.PD +.SH "SEE ALSO" +.BR diff (1), +.BR patch (1) + +.SH AUTHOR +.nf +Marc Ewing +.fi diff --git a/doc/hacking.doxy.in b/doc/hacking.doxy.in new file mode 100644 index 0000000..257aae6 --- /dev/null +++ b/doc/hacking.doxy.in @@ -0,0 +1,1282 @@ +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = @PACKAGE@ + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc/hacking + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = @top_srcdir@/ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @top_srcdir@/doc/hacking/Doxyheader \ + @top_srcdir@/build.c \ + @top_srcdir@/build.h \ + @top_srcdir@/config.h \ + @top_srcdir@/debug.h \ + @top_srcdir@/macros \ + @top_srcdir@/rpmqv.c \ + @top_srcdir@/rpmpopt-@VERSION@ \ + @top_srcdir@/rpmrc \ + @top_srcdir@/rpm2cpio.c \ + @top_srcdir@/system.h \ + @top_srcdir@/build/ \ + @top_srcdir@/doc/manual/builddependencies \ + @top_srcdir@/doc/manual/buildroot \ + @top_srcdir@/doc/manual/conditionalbuilds \ + @top_srcdir@/doc/manual/dependencies \ + @top_srcdir@/doc/manual/format \ + @top_srcdir@/doc/manual/hregions \ + @top_srcdir@/doc/manual/macros \ + @top_srcdir@/doc/manual/multiplebuilds \ + @top_srcdir@/doc/manual/queryformat \ + @top_srcdir@/doc/manual/signatures \ + @top_srcdir@/doc/manual/relocatable \ + @top_srcdir@/doc/manual/spec \ + @top_srcdir@/doc/manual/triggers \ + @top_srcdir@/doc/manual/tsort \ + @top_srcdir@/lib/ \ + @top_srcdir@/lua/ \ + @top_srcdir@/rpmdb/ \ + @top_srcdir@/rpmio/ \ + @top_srcdir@/python/ \ + @top_srcdir@/tools/ + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.c \ + *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = @top_srcdir@/db @top_srcdir@/db.h + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = @top_srcdir@/doc/manual + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = letter + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = Doxytags + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = @HAVE_DOT@ + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/doc/hacking/Doxyheader b/doc/hacking/Doxyheader new file mode 100644 index 0000000..0b254d0 --- /dev/null +++ b/doc/hacking/Doxyheader @@ -0,0 +1,70 @@ +/*! \mainpage RPM Annotated Source Code. + */ +/** \defgroup python PYTHON API. + */ +/** \defgroup py_c PYTHON-C Language Bindings. + */ +/** \defgroup rpmcli Command Line API. + */ +/** \defgroup rpmbuild Build API. + */ +/** \defgroup rpmrc RPMRC. + */ +/** \defgroup rpmtypes RPM data types. + */ +/** \defgroup rpmts Transaction Set API. + */ +/** \defgroup rpmte Transaction Element API. + */ +/** \defgroup rpmds Dependency Set API. + */ +/** \defgroup rpmfi File Info API. + */ +/** \defgroup rpmfc File Classification API. + */ +/** \defgroup rpmps Problem Set API. + */ +/** \defgroup rpmkeyring RPM keyring API. + */ +/** \defgroup rpmgi Generalized Iterator API. + */ +/** \defgroup rpmmacro Macro API. + */ +/** \defgroup rpmlog Logging API. + */ +/** \defgroup rpmpgp OpenPGP API. + */ +/** \defgroup rpmsq Signal Queue API. + */ +/** \defgroup rpmsw Statistics API. + */ +/** \defgroup lead Lead API. + */ +/** \defgroup signature Signature API. + */ +/** \defgroup header Header API. + */ +/** \defgroup rpmtag RPM Tag API. + */ +/** \defgroup rpmtd RPM Tag Data Container API. + */ +/** \defgroup payload Payload API. + */ +/** \defgroup rpmdb Database API. + */ +/** \defgroup dbi DataBase Index Element API. + */ +/** \defgroup db3 Berkeley DB API. + */ +/** \defgroup rpmlua Embedded Lua. + */ +/** \defgroup rpmio RPM IO API. + */ +/** \defgroup rpmfileutil File and Path Manipulation API. + */ +/** \defgroup rpmurl URL Manipulation API. + */ +/** \defgroup rpmstring String Manipulation API. + */ +/** \defgroup rpmargv Argument Manipulation API. + */ diff --git a/doc/ja/rpm.8 b/doc/ja/rpm.8 new file mode 100644 index 0000000..5b5f35e --- /dev/null +++ b/doc/ja/rpm.8 @@ -0,0 +1,1193 @@ +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2, or (at your option) +.\" any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program; if not, write to the Free Software +.\" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +.\" USA. +.\" +.\" Japanese Version Copyright (C) 2003 System Design and Research +.\" Institute Co.,Ltd. All rights reserved. +.\" +.\" Translated 14 March 2003 by +.\" System Design and Research Institute Co.,Ltd. +.\" +.\"WORD: verify 検査 +.\"WORD: upgrade アップグレード +.\"WORD: freshen æ›´æ–° +.\"WORD: resign å†ç½²å +.\"WORD: querytag 検索タグ +.\"WORD: relocation å†é…ç½® +.\"WORD: format string 書å¼æ–‡å­—列 +.\"WORD: identifier è­˜åˆ¥å­ +.\"WORD: glob expression パスåå±•é–‹å¼ +.\"WORD: capability 能力 +.\"WORD: key ring éµãƒªãƒ³ã‚° +.\"WORD: firewall ファイアウォール +.\"subsubsction start +.de SSS +.SS " \\$1" +.RS 0.5i +.. +.TH "RPM" "8" "09 June 2002" "Red Hat, Inc." +.SH åå‰ +rpm \- RPM パッケージマãƒãƒ¼ã‚¸ãƒ£ +.SH æ›¸å¼ +.SS パッケージã®æ¤œç´¢ã¨æ¤œæŸ»: +.BR rpm " {" \-q|\-\-query "} [" select-options "] [" query-options ] + +.BR rpm " {" \-V|\-\-verify "} [" select-options "] [" verify-options ] + +.BI "rpm \-\-import " "PUBKEY ..." + +.BR rpm " {" \-K|\-\-checksig "} [" \-\-nogpg "] [" \-\-nopgp "] [" \-\-nomd5 "]" +.br +.I " PACKAGE_FILE" ... +.SS パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ»ã‚¢ãƒƒãƒ—グレード・削除: +.BR rpm " {" \-i|\-\-install "} [" install-options ] +.I PACKAGE_FILE ... + +.BR rpm " {" \-U|\-\-upgrade "} [" install-options ] +.I PACKAGE_FILE ... + +.BR rpm " {" \-F|\-\-freshen "} [" install-options ] +.I PACKAGE_FILE ... + +.BR rpm " {" \-e|\-\-erase "} [" \-\-allmatches "] [" \-\-nodeps "] [" \-\-noscripts ] +.br +.RB " [" \-\-notriggers "] [" \-\-test ] +.I PACKAGE_NAME ... +.SS ãã®ä»–: +.BR rpm " {" \-\-initdb|\-\-rebuilddb } + +.BR rpm " {" \-\-addsign|\-\-resign } +.I PACKAGE_FILE ... + +.BR rpm " {" \-\-querytags|\-\-showrc } + +.BR rpm " {" \-\-setperms|\-\-setugids } +.I PACKAGE_NAME ... +.SS select-options(é¸æŠžã‚ªãƒ—ション) +.RI [ PACKAGE_NAME ] +.RB [ \-a , \-\-all ] +.RB [ \-f , \-\-file " " "\fIFILE" ] +.br +.RB [ \-g , \-\-group " " "\fIGROUP" ] +.RB [ \-p , \-\-package " " "\fIPACKAGE_FILE" ] +.br +.RB [ \-\-hdrid " " "\fISHA1" ] +.RB [ \-\-pkgid " " "\fIMD5" ] +.RB [ \-\-tid " " "\fITID" ] +.br +.RB [ \-\-querybynumber " " "\fIHDRNUM" ] +.RB [ \-\-triggerdby " " "\fIPACKAGE_NAME" ] +.br +.RB [ \-\-whatprovies " " "\fICAPABILITY" ] +.RB [ \-\-whatrequires " " "\fICAPABILITY" ] +.SS query-options(検索オプション) +.RB [ \-\-changelog ] +.RB [ \-c , \-\-configfiles ] +.RB [ \-d , \-\-docfiles ] +.RB [ \-\-dump ] +.br +.RB [ \-\-filesbypkg ] +.RB [ \-i , \-\-info ] +.RB [ \-\-last ] +.RB [ \-l , \-\-list ] +.br +.RB [ \-\-provides ] +.RB [ \-\-qf , \-\-queryformat " " "\fIQUERYFMT" ] +.RB [ \-R , \-\-requires ] +.br +.RB [ \-\-scripts ] +.RB [ \-s , \-\-state ] +.RB [ \-\-triggers , \-\-triggerscripts ] +.SS verify-options(検査オプション) +.RB [ \-\-nodeps ] +.RB [ \-\-nofiles ] +.RB [ \-\-noscripts ] +.RB [ \-\-nodigest ] +.br +.RB [ \-\-nosignature ] +.RB [ \-\-nolinkto ] +.RB [ \-\-nomd5 ] +.RB [ \-\-nosize ] +.br +.RB [ \-\-nouser ] +.RB [ \-\-nogroup ] +.RB [ \-\-nomtime ] +.RB [ \-\-nomode ] +.RB [ \-\-nordev ] +.SS install-options(インストールオプション) +.RB [ \-\-aid ] +.RB [ \-\-allfiles ] +.RB [ \-\-badreloc ] +.RB [ \-\-excludepath " " "\fIOLDPATH" ] +.br +.RB [ \-\-excludedocs ] +.RB [ \-\-force ] +.RB [ \-h , \-\-hash ] +.RB [ \-\-ignoresize ] +.br +.RB [ \-\-ignorearch ] +.RB [ \-\-ignoreos ] +.RB [ \-\-includedocs ] +.RB [ \-\-justdb ] +.br +.RB [ \-\-nodeps ] +.RB [ \-\-nodigest ] +.RB [ \-\-nosignature ] +.RB [ \-\-nosuggest ] +.br +.RB [ \-\-noorder ] +.RB [ \-\-noscripts ] +.RB [ \-\-notriggers ] +.br +.RB [ \-\-oldpackage ] +.RB [ \-\-percent ] +.RB [ \-\-prefix " " "\fINEWPATH" ] +.br +.RB [ \-\-relocate " " "\fIOLDPATH" = "\fINEWPATH" ] +.br +.RB [ \-\-replacefiles ] +.RB [ \-\-replacepkgs ] +.RB [ \-\-test ] +.SH 説明 +.B rpm +ã¯å¼·åŠ›ãª +.B パッケージマãƒãƒ¼ã‚¸ãƒ£ +ã§ã‚ã‚Šã€å€‹ã€…ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãƒ‘ッケージを +ビルド・インストール・検索・検査・更新・削除ã™ã‚‹ã®ã«ä½¿ã†ã“ã¨ãŒã§ãる。 +.B パッケージ +ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¨ã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã® +インストール・アンインストールã«ä½¿ã‚れるメタデータã‹ã‚‰ãªã‚‹ã€‚ +メタデータã¯è£œåŠ©ã‚¹ã‚¯ãƒªãƒ—トã€ãƒ•ã‚¡ã‚¤ãƒ«å±žæ€§ã€ +ãã—ã¦ãƒ‘ッケージã®èª¬æ˜Žã«é–¢ã™ã‚‹æƒ…å ±ã‹ã‚‰ãªã‚‹ã€‚ +.B パッケージ +ã«ã¯ 2 種類ã‚る。 +インストールã™ã‚‹ãŸã‚ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’カプセル化ã™ã‚‹ã®ã«ä½¿ã‚れるãƒã‚¤ãƒŠãƒª +パッケージã¨ã€ãƒã‚¤ãƒŠãƒªãƒ‘ッケージを生æˆã™ã‚‹ã®ã«å¿…è¦ãªãƒ¬ã‚·ãƒ”ã¨ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ +ã‹ã‚‰ãªã‚‹ã‚½ãƒ¼ã‚¹ãƒ‘ッケージã§ã‚る。 +.PP +以下ã®åŸºæœ¬ãƒ¢ãƒ¼ãƒ‰ã®ã„ãšã‚Œã‹ãŒé¸æŠžã•ã‚Œãªã‘ã‚Œã°ãªã‚‰ãªã„: +\fB検索\fR〠+\fB検査\fR〠+\fBç½²åã®æ¤œæŸ»\fR〠+\fBインストール/アップグレード/æ›´æ–°\fR〠+\fBアンインストール\fR〠+\fBデータベースã®åˆæœŸåŒ–\fR〠+\fBデータベースã®å†ä½œæˆ\fR〠+\fBå†ç½²å\fR〠+\fBç½²åã®è¿½åŠ \fR〠+\fB所有者/グループã®è¨­å®š\fR〠+\fB検索タグã®è¡¨ç¤º\fR〠+\fB設定ã®è¡¨ç¤º\fR。 +.SS 共通ã®ã‚ªãƒ—ション +次ã®ã‚ªãƒ—ションã¯ã™ã¹ã¦ã®ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãる。 +.TP +.BR \-? ", " \-\-help +使ã„方を通常ã®ã‚‚ã®ã‚ˆã‚Šã‚‚é•·ã表示ã™ã‚‹ã€‚ +.TP +.B \-\-version +使用ã•ã‚Œã‚‹ +.B rpm +ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‹ã‚‰ãªã‚‹ 1 行を表示ã™ã‚‹ã€‚ +.TP +.B \-\-quiet +ã§ãã‚‹ã ã‘å°‘ãªã表示ã™ã‚‹ã€‚ +通常ã¯ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã ã‘ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã€‚ +.TP +.B \-v +より多ãã®æƒ…報を表示ã™ã‚‹ã€‚ +通常ã¯ã€ãƒ«ãƒ¼ãƒãƒ³ã®é€²æ—メッセージãŒè¡¨ç¤ºã•ã‚Œã‚‹ã€‚ +.TP +.B \-vv +沢山ã®æ±šã„デãƒãƒƒã‚°æƒ…報を表示ã™ã‚‹ã€‚ +.TP +.BI "\-\-rcfile " FILELIST +コロン(`:')ã§åŒºåˆ‡ã‚‰ã‚ŒãŸ +.I FILELIST +ã®å„ファイルã¯ã€è¨­å®šæƒ…å ±ã¨ã—㦠+.B rpm +ã«ã‚ˆã£ã¦é †ç•ªã«èª­ã¿è¾¼ã¾ã‚Œã‚‹ã€‚ +.I FILELIST +ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯ +.IR /usr/lib/rpm/rpmrc : /usr/lib/rpm/redhat/rpmrc : ~/.rpmrc +ã§ã‚る。 +.TP +.BI "\-\-pipe " CMD +.B rpm +コマンドã®å‡ºåŠ›ã‚’ +.I CMD +ã¸ãƒ‘イプã™ã‚‹ã€‚ +.TP +.BI "\-\-dbpath " DIRECTORY +データベースã®ãƒ‘スã«ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã® +.I /var/lib/rpm +ã§ã¯ãªã +.I DIRECTORY +を使ã†ã€‚ +.TP +.BI "\-\-root " DIRECTORY +ã™ã¹ã¦ã®ã‚ªãƒ—ションã«å¯¾ã—〠+.I DIRECTORY +をルートã¨ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã‚’使ã†ã€‚ +ã“ã‚Œã¯ã€ +ä¾å­˜æ€§ã®ãƒã‚§ãƒƒã‚¯ã¨ã™ã¹ã¦ã®ã‚¹ã‚¯ãƒªãƒ—ト(群) +(例ãˆã°ã€ãƒ‘ッケージインストール時㮠+.B %post +ã‚„ã€ãƒ‘ッケージビルド時㮠+.B %prep +ãªã©)㌠+.I DIRECTORY +ã« chroot(2) ã—ãŸå¾Œã§ã€ +.I DIRECTORY +内ã«ã‚るデータベースãŒä½¿ç”¨ã•ã‚Œã‚‹ã“ã¨ã‚’æ„味ã™ã‚‹ã€‚ +.SS インストールã¨ã‚¢ãƒƒãƒ—グレードã®ã‚ªãƒ—ション +rpm をインストールã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã®ä¸€èˆ¬çš„ãªå½¢å¼ã¯: +.PP +.BR rpm " {" \-i|\-\-install "} [" install-options ] +.I PACKAGE_FILE ... +.PP +ã“ã‚Œã¯æ–°ã—ã„パッケージをインストールã™ã‚‹ã€‚ +.br +アップグレードã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã®ä¸€èˆ¬çš„ãªå½¢å¼ã¯: +.PP +.BR rpm " {" \-U|\-\-upgrade "} [" install-options ] +.I PACKAGE_FILE ... +.PP +ã“ã‚Œã¯ç¾åœ¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„るパッケージを新ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã« +アップグレードã™ã‚‹ã‹ã€ãƒ‘ッケージをインストールã™ã‚‹ã€‚ +æ–°ã—ã„パッケージãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚ŒãŸã‚‰ä»–ã®ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚‚ã®ãŒ +削除ã•ã‚Œã‚‹ã“ã¨ã‚’除ã‘ã°ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¨åŒã˜ã§ã‚る。 +.PP +.BR rpm " {" \-F|\-\-freshen "} [" install-options ] +.I PACKAGE_FILE ... +.PP +ã“ã‚Œã¯ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã€ç¾åœ¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã‚‹å ´åˆã«ã®ã¿ +パッケージを更新ã™ã‚‹ã€‚ +.PP +.I PACKAGE_FILE +ã«ã¯ +.B ftp +ã¾ãŸã¯ +.B http +ã® URL を指定ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã€ãã®å ´åˆã«ã¯ãƒ‘ッケージをインストールã™ã‚‹å‰ã« +ダウンロードã™ã‚‹ã€‚ +.B rpm +内部ã§ã® +.B ftp +㨠+.B http +ã®ã‚µãƒãƒ¼ãƒˆã«ã¤ã„ã¦ã®æƒ…報㯠+.B FTP/HTTP オプション +ã®ç¯€ã‚’å‚ç…§ã®ã“ã¨ã€‚ +.TP +.B \-\-aid +指定ã•ã‚ŒãŸãƒ‘ッケージをã€å¿…è¦ãŒã‚ã‚Œã°ãƒˆãƒ©ãƒ³ã‚¶ãƒ³ã‚¯ã‚·ãƒ§ãƒ³ã«åŠ ãˆã‚‹ã€‚ +.TP +\fB\-\-allfiles +パッケージ内㮠missingok ファイルをã€å­˜åœ¨ã™ã‚‹/ã—ãªã„ã«ã‹ã‹ã‚ら㚠+インストールã¾ãŸã¯ã‚¢ãƒƒãƒ—グレードã™ã‚‹ã€‚ +.TP +.B \-\-badreloc +.B \-\-relocate +ã¨ä¸€ç·’ã«ä½¿ã‚れるã¨ã€ãƒ‘ッケージå†é…ç½®ã®ãƒ’ント(群)ã®ä¸­ã«ãã® +.I OLDPATH +ãŒå«ã¾ã‚Œã¦ã„ãªãã¦ã‚‚ã€ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘スã®å†é…置を許å¯ã™ã‚‹ã€‚ +.TP +.BI "\-\-excludepath " OLDPATH +パスã®åå‰ãŒ +.I OLDPATH +ã§å§‹ã¾ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’インストールã—ãªã„。 +.TP +.B \-\-excludedocs +(man ページã€tenxinfo 文書をå«ã‚ãŸ)文書ã§ã‚ã‚‹ã¨ãƒžãƒ¼ã‚¯ä»˜ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’ +インストールã—ãªã„。 +.TP +.B \-\-force +.BR \-\-replacepkgs ", " \-\-replacefiles ", " \-\-oldpackage +ã®çµ„ã¿åˆã‚ã›ã«åŒã˜ã€‚ +.TP +.BR \-h ", " \-\-hash +パッケージアーカイブã‹ã‚‰å–り出ã•ã‚Œã‚‹ã«ã¤ã‚Œã€50個ã®ãƒãƒƒã‚·ãƒ¥ãƒžãƒ¼ã‚¯("#") +を表示ã™ã‚‹ã€‚ +.B \-v|\-\-verbose +ã¨ä¸€ç·’ã«ä½¿ãˆã°ã€ã‚ˆã‚Šã‚ˆã„表示ãŒå¾—られる。 +.TP +.B \-\-ignoresize +パッケージをインストールã™ã‚‹å‰ã«ã€ãƒ‡ã‚£ã‚¹ã‚¯ã«å分ãªç©ºããŒã‚ã‚‹ã‹ã® +ãƒã‚§ãƒƒã‚¯ã‚’ファイルシステムã«å¯¾ã—ã¦è¡Œã‚ãªã„。 +.TP +.B \-\-ignorearch +ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã¨ã€ãã®ãƒ›ã‚¹ãƒˆã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãŒ +一致ã—ãªãã¦ã‚‚ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚„アップグレードを行ã†ã€‚ +.TP +.B \-\-ignoreos +ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã®OSã¨ã€ãã®ãƒ›ã‚¹ãƒˆã®OSãŒä¸€è‡´ã—ãªãã¦ã‚‚〠+インストールやアップグレードを行ã†ã€‚ +.TP +.B \-\-includedocs +文書ファイルをインストールã™ã‚‹ã€‚ã“ã‚Œã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®å‹•ä½œã§ã‚る。 +.TP +.B \-\-justdb +データベースã ã‘ã‚’æ›´æ–°ã—ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã‚’æ›´æ–°ã—ãªã„。 +.TP +.B \-\-nodigest +読ã¿è¾¼ã¿æ™‚ã«ãƒ‘ッケージã¾ãŸã¯ã¸ãƒƒãƒ€ã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã‚’検査ã—ãªã„。 +.TP +.B \-\-nosignature +読ã¿è¾¼ã¿æ™‚ã«ãƒ‘ッケージã¾ãŸã¯ã¸ãƒƒãƒ€ã®ç½²åを検査ã—ãªã„。 +.TP +.B \-\-nodeps +パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚„アップグレードã®å‰ã«ã€ä¾å­˜æ€§ã®ãƒã‚§ãƒƒã‚¯ã‚’ã—ãªã„。 +.TP +.B \-\-nosuggest +ä¸æ˜Žãªä¾å­˜æ€§ã‚’解消ã™ã‚‹ãƒ‘ッケージ(群)ã‚’æ案ã—ãªã„。 +.TP +.B \-\-noorder +パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«é †ã‚’変更ã—ãªã„。 +通常ã¯ä¾å­˜æ€§ã‚’満ãŸã™ãŸã‚ã«ã€ãƒ‘ッケージã®ãƒªã‚¹ãƒˆã¯ä¸¦ã³æ›¿ãˆã‚‰ã‚Œã‚‹ã€‚ +.TP +.B \-\-noscriopts +.PD 0 +.TP +.B \-\-nopre +.TP +.B \-\-nopost +.TP +.B \-\-nopreun +.TP +.B \-\-nopostun +.PD +ãã‚Œãžã‚ŒåŒã˜åå‰ã‚’æŒã£ãŸã‚¹ã‚¯ãƒªãƒ—トを実行ã—ãªã„。 +.B \-\-noscripts +オプション㯠+ +.B "\-\-nopre \-\-nopost \-\-nopreun \-\-nopostun" + +ã«ç­‰ã—ãã€å¯¾å¿œã™ã‚‹ +.BR %pre ", " +.BR %post ", " +.BR %preun ", " +.BR %postun +スクリプト(群)を実行ã—ãªã„。 +.TP +.B \-\-notriggers +.PD 0 +.TP +.B \-\-notriggerin +.TP +.B \-\-notriggerun +.TP +.B \-\-notriggerpostun +.PD +指定ã•ã‚ŒãŸç¨®é¡žã®ãƒˆãƒªã‚¬ãƒ¼ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ãªã„。 +.B \-\-notriggers +オプション㯠+ +.B "\-\-notriggerin \-\-notriggerun \-\-notriggerpostun" + +ã«ç­‰ã—ãã€å¯¾å¿œã™ã‚‹ +.BR %triggerin , +.BR %triggerun , +.BR %triggerpostun +スクリプト(群)を実行ã—ãªã„。 +.TP +.B \-\-oldpackage +æ–°ã—ã„パッケージをãれよりå¤ã„パッケージã§ã‚¢ãƒƒãƒ—グレードã§ãるよã†ã«ã™ã‚‹ã€‚ +.TP +.B \-\-percent +パッケージアーカイブã‹ã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ãŒå–り出ã•ã‚Œã‚‹ã«ã¤ã‚Œã¦ã€ +ãã®å‰²åˆã‚’を表示ã™ã‚‹ã€‚ +ã“れ㯠+.B rpm +ãŒä»–ã®ãƒ„ールã‹ã‚‰å®Ÿè¡Œã•ã‚Œã‚‹ã®ã‚’容易ã«ã™ã‚‹ã“ã¨ã‚’æ„図ã—ã¦ã„る。 +.TP +.BI "\-\-prefix " NEWPATH +å†é…ç½®å¯èƒ½ãªãƒã‚¤ãƒŠãƒªãƒ‘ッケージã«ãŠã„ã¦ã€ãƒ‘ッケージã®å†é…置ヒント(群)ã«ã‚ã‚‹ +インストールプレフィックスã§å§‹ã¾ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ‘スを〠+.I NEWPATH +ã«ç½®ãæ›ãˆã‚‹ã€‚ +.TP +.BI "\-\-reloacte " OLDPATH = NEWPATH +å†é…ç½®å¯èƒ½ãªãƒã‚¤ãƒŠãƒªãƒ‘ッケージã«ãŠã„ã¦ã€ãƒ‘ッケージã®å†é…置ヒント(群)ã«ã‚ã‚‹ +.I OLDPATH +ã§å§‹ã¾ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ‘ス㨠+.I NEWPATH +ã§ç½®ãæ›ãˆã‚‹ã€‚ +パッケージ内ã§ã€è¤‡æ•°ã® +.I OLDPATH +ãŒå†é…ç½®ã•ã‚Œãªã‘ã‚Œã°ãªã‚‰ãªã„ã®ãªã‚‰ã€ +ã“ã®ã‚ªãƒ—ションを繰り返ã—指定ã™ã‚‹ã“ã¨ãŒã§ãる。 +.TP +.B \-\-replacefiles +æ—¢ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚ŒãŸä»–ã®ãƒ‘ッケージã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç½®ãæ›ãˆã¦ã—ã¾ã†å ´åˆã§ã‚‚〠+パッケージをインストールã™ã‚‹ã€‚ +.TP +.B \-\-replacepkgs +指定ã•ã‚ŒãŸãƒ‘ッケージã®ã†ã¡ã®ã„ãã¤ã‹ãŒã‚·ã‚¹ãƒ†ãƒ ã«æ—¢ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« +ã•ã‚Œã¦ã„ã¦ã‚‚ã€ãƒ‘ッケージをインストールã™ã‚‹ã€‚ +.TP +.B \-\-test +パッケージをインストールã›ãšã€å˜ã«ãƒã‚§ãƒƒã‚¯ã¨ã€ +潜在的ãªè¡çªã®å ±å‘Šã‚’è¡Œã†ã€‚ +.SS 削除ã®ã‚ªãƒ—ション +rpm を削除ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã®ä¸€èˆ¬çš„ãªå½¢å¼ã¯: +.PP +.BR rpm " {" \-e|\-\-erase "} [" \-\-allmatches "] [" \-\-nodeps "] [" \-\-noscripts ] +.br +.RB " [" \-\-notriggers "] [" \-\-test ] +.I "PACKAGE_NAME ..." +.PP +以下ã®ã‚ªãƒ—ションãŒä½¿ç”¨ã§ãã‚‹: +.TP +.B \-\-allmatces +.I PACKAGE_NAME +ã«ä¸€è‡´ã™ã‚‹ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ‘ッケージを削除ã™ã‚‹ã€‚ +.TP +.B \-\-nodeps +パッケージをアンインストールã™ã‚‹å‰ã«ä¾å­˜æ€§ã®ãƒã‚§ãƒƒã‚¯ã‚’ã—ãªã„。 +.TP +.B \-\-noscripts +.PD 0 +.TP +.B \-\-nopreun +.TP +.B \-\-nopostun +.PD +ãã‚Œãžã‚ŒåŒã˜åå‰ã‚’æŒã£ãŸã‚¹ã‚¯ãƒªãƒ—トを実行ã—ãªã„。 +.B \-\-noscripts +オプション㯠+ +.B "\-\-nopreun \-\-nopostun" + +ã«ç­‰ã—ãã€å¯¾å¿œã™ã‚‹ +.B %preun +㨠+.B %postun +スクリプト(群)を実行ã—ãªã„。 +.TP +.B \-\-notriggers +.PD 0 +.TP +.B \-\-notriggerun +.TP +.B \-\-notriggerpostun +.PD +指定ã•ã‚ŒãŸç¨®é¡žã®ãƒˆãƒªã‚¬ãƒ¼ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ãªã„。 +オプション +.B \-\-notriggers +㯠+ +.B "\-\-notriggerun \-\-notriggerpostun" + +ã«ç­‰ã—ãã€å¯¾å¿œã™ã‚‹ +.B %triggerun +㨠+.B %triggerpostun +スクリプト(群)を実行ã—ãªã„。 +.TP +.B \-\-test +実際ã«ã¯ä½•ã‚‚アンインストールã›ãšæŒ™å‹•ã ã‘を見ã›ã‚‹ã€‚ +オプション +.B \-vv +ã¨å…±ã«ä½¿ãˆã°ãƒ‡ãƒãƒƒã‚°ã«æœ‰åŠ¹ã§ã‚る。 +.\"TSEKINE ã“ã“ã®è¨³ãŒã¤ã‚‰ã„ã§ã™ +.SS 検索オプション +rpm 検索ã®ä¸€èˆ¬çš„ãªå½¢å¼ã¯: +.PP +.BR rpm " {" \-q|\-\-query "} [" select-options "] [" query-options ] +.PP +表示ã•ã‚Œã‚‹ãƒ‘ッケージ情報ã®æ›¸å¼ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãる。 +ãã†ã™ã‚‹ãŸã‚ã«ã¯ã€ +.RS 0.2i +.PP +.BI "\-\-qf|\-\-queryformat " QUERYFMT +.RE +.PP +オプションを使ã†ã€‚ +.I QUERYFMT +ãŒæ›¸å¼æ–‡å­—列ã§ã‚る。検索ã®æ›¸å¼ã¯ã€æ¨™æº–的㪠+.B printf(3) +ã®æ›¸å¼ã®ä¿®æ­£ã§ã‚る。書å¼ã¯é™çš„ãªæ–‡å­—列 +(改行・タブ・ãã®ä»–ã®ç‰¹æ®Šæ–‡å­—ã®ã€C 言語ã®æ¨™æº–çš„ãªæ–‡å­—エスケープをå«ã‚€)ã¨ã€ +.B printf(3) +åž‹ã®æ›¸å¼æ–‡å­—列ã‹ã‚‰ãªã‚‹ã€‚ +ã—ã‹ã— +.B rpm +ã¯è¡¨ç¤ºã™ã‚‹åž‹ã‚’æ—¢ã«çŸ¥ã£ã¦ã„ã‚‹ã®ã§ã€åž‹æŒ‡å®šã¯çœç•¥ã•ã‚Œã‚‹ã¹ãã§ã‚る。 +代ã‚ã‚Šã« +.B {} +ã§å›²ã¾ã‚ŒãŸã€è¡¨ç¤ºã•ã‚Œã‚‹ã¸ãƒƒãƒ€ãƒ¼ã®ã‚¿ã‚°åãŒä½¿ç”¨ã•ã‚Œã‚‹ã€‚ +ã‚¿ã‚°åã«å¤§æ–‡å­—/å°æ–‡å­—ã®åŒºåˆ¥ã¯ãªãã€ã‚¿ã‚°åã®å…ˆé ­ã® +.B RPMTAG_ +部分もçœç•¥ã™ã‚‹ã“ã¨ãŒã§ãる。 +.PP +以下㮠+.BI : typetag +を付加ã—ãŸã‚¿ã‚°ã«ã‚ˆã£ã¦ã€ä»£æ›¿ã®å‡ºåŠ›æ›¸å¼ã‚’è¦æ±‚ã§ãる。 +ç¾åœ¨ã€ä»¥ä¸‹ã®ç¨®åˆ¥ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹: +.TP +.B :armor +公開éµã‚’ASCII文字ã§è¡¨ç¤ºã™ã‚‹ã€‚ +.\"TSEKINE PGP ç­‰ã§ã® armor ã£ã¦ã©ã†è¨³ã™ã®ãŒã„ã„ã‚“ã§ã—ょã†? +.TP +.B :base64 +ãƒã‚¤ãƒŠãƒªãƒ‡ãƒ¼ã‚¿ã‚’ base64 ã§ç¬¦å·åŒ–ã™ã‚‹ã€‚ +.TP +.B :date +strftime(3)ã® "%c" 書å¼ã‚’使ã†ã€‚ +.TP +.B :day +strftime(3)ã® "%a %b %d %Y" 書å¼ã‚’使ã†ã€‚ +.TP +.B :depflags +ä¾å­˜ãƒ•ãƒ©ã‚°ã§è¡¨ç¤ºã€‚ +.TP +.B :fflags +ファイルフラグã§è¡¨ç¤ºã€‚ +.TP +.B :hex +16進数ã§è¡¨ç¤ºã€‚ +.TP +.B :octal +8進数ã§è¡¨ç¤ºã€‚ +.TP +.B :perms +ファイルã®è¨±å¯å±žæ€§ã§è¡¨ç¤ºã€‚ +.TP +.B :shescape +スクリプト内ã§ä½¿ãˆã‚‹ã‚ˆã†ã«ã‚·ãƒ³ã‚°ãƒ«ã‚¯ã‚©ãƒ¼ãƒˆ(')ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹ã€‚ +.TP +.B :triggertype +トリガーã®ç¨®é¡žã‚’表示。 +.PP +例ãˆã°ã€æ¤œç´¢çµæžœã®ãƒ‘ッケージåã ã‘を表示ã—ãŸã‘ã‚Œã°ã€æ›¸å¼æ–‡å­—列ã¨ã—㦠+.B %{NAME} +を使ãˆã°ã‚ˆã„。 +2 カラムã§ãƒ‘ッケージåã¨ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューション情報を表示ã—ãŸã‘れ㰠+.B %-30{NAME}%{DISTRIBUTUIN} +を使ãˆã°ã‚ˆã„。 +(訳注: 端末ã«ã‚ˆã£ã¦ã¯æœ«å°¾ã« \\n ãŒå¿…è¦ã§ã‚ã‚‹)。 +引数 +.B \-\-querytags +ã‚’ã¤ã‘㦠+.B rpm +を実行ã™ã‚Œã°ã€ä½¿ç”¨ã§ãã‚‹ã‚¿ã‚°ã™ã¹ã¦ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãる。 +.PP +検索ã®ãŸã‚ã®ã‚ªãƒ—ションã¯2種類ã«åˆ†ã‘られる。 +パッケージã®é¸æŠžã¨ã€(訳注: 表示ã™ã‚‹ãŸã‚ã®)情報ã®é¸æŠžã§ã‚る。 +.SSS "パッケージé¸æŠžã‚ªãƒ—ション:" +.TP +.I PACKAGE_NAME +インストールã•ã‚Œã¦ã„ã‚‹ +.I PACKAGE_NAME +ã¨ã„ã†åå‰ã®ãƒ‘ッケージを検索ã™ã‚‹ã€‚ +.TP +.BR \-a ", " \-\-all +インストールã•ã‚Œã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ‘ッケージを検索ã™ã‚‹ã€‚ +.TP +.BR \-f ", " \-\-file " \fIFILE" +.I FILE +を所有ã™ã‚‹ãƒ‘ッケージを検索ã™ã‚‹ã€‚ +.TP +.BR \-g ", " \-\-group " \fIGROUP" +グループ㌠+.I GROUP +ã§ã‚るパッケージを検索ã™ã‚‹ã€‚ +.TP +.BI \-\-hdrid " SHA1" +与ãˆã‚‰ã‚ŒãŸã¸ãƒƒãƒ€ãƒ¼è­˜åˆ¥å­ã€ +ã™ãªã‚ã¡æ›¸ãæ›ãˆä¸å¯èƒ½ãªã¸ãƒƒãƒ€é ˜åŸŸã« +.I SHA1 +ダイジェストををもã¤ãƒ‘ッケージを検索ã™ã‚‹ã€‚ +.TP +.BR \-p ", " \-\-package " \fIPACKAGE_FILE" +(インストールã•ã‚Œã¦ã„ãªã„)パッケージ +.I PACKAGE_FILE +を検索ã™ã‚‹ã€‚ +.I PACKAGE_FILE +ã«ã¯ +.B ftp +ã¾ãŸã¯ +.B http +ã® URL å½¢å¼ã§æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ã〠+ãã®å ´åˆã«ã¯ãƒ‘ッケージã¸ãƒƒãƒ€ãƒ¼ãŒãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¦æ¤œç´¢ã•ã‚Œã‚‹ã€‚ +.B ftp +㨠+.B http +ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«é–¢ã™ã‚‹ +.B rpm +内部ã§ã®ã‚µãƒãƒ¼ãƒˆã«ã¤ã„ã¦ã¯ +.B "FTP/HTTP OPTIONS" +ã‚’å‚ç…§ã®ã“ã¨ã€‚ +.I PACKAGE_FILE +引数(群)ãŒãƒã‚¤ãƒŠãƒªãƒ‘ッケージã§ãªã‘ã‚Œã°ã€ãれ㌠ASCII å½¢å¼ã® +パッケージã®ãƒªã‚¹ãƒˆã‚’表ã‚ã™ã‚‚ã®ã¨è§£é‡ˆã•ã‚Œã‚‹ã€‚ +パッケージã®ãƒªã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã€'#' ã§å§‹ã¾ã‚‹è¡Œã¯ã‚³ãƒ¡ãƒ³ãƒˆã§ã‚る。 +å„è¡Œã«ã¯ç©ºç™½ã§åŒºåˆ‡ã£ãŸãƒ‘スå展開å¼ãŒæŒ‡å®šå¯èƒ½ã§ã€ +展開ã•ã‚ŒãŸãƒ‘スã¯ã€æ¤œç´¢ã™ã‚‹ +.I PACKAGE_FILE +引数ã¸ã®è¿½åŠ ã¨ã—ã¦ç½®æ›ã•ã‚Œã‚‹ã€‚ +パスå展開å¼ã«ã¯ URL ã®ãƒªãƒ¢ãƒ¼ãƒˆã®ãƒ‘スå展開も使ã†ã“ã¨ãŒã§ãる。 +.\"TSEKINE よãã‚ã‹ã‚Šã¾ã›ã‚“。フォロー求む +.TP +.BI \-\-pkgid " \fIMD5" +与ãˆã‚‰ã‚ŒãŸãƒ‘ッケージ識別å­ã€ +ã™ãªã‚ã¡ã¸ãƒƒãƒ€ãƒ¼ã¨å†…容物ã¨ã®çµ„ã¿åˆã‚ã›ãŒ +.I MD5 +ダイジェストををもã¤ãƒ‘ッケージを検索ã™ã‚‹ã€‚ +.TP +.BI \-\-querybynumber " \fIHDRNUM" +データベース㮠+.I HDRNUM +番目ã®ã‚¨ãƒ³ãƒˆãƒªã‚’直接検索ã™ã‚‹ã€‚ +デãƒãƒƒã‚°ã«ã®ã¿æœ‰åŠ¹ã§ã‚る。 +.TP +.BI \-\-specfile " \fISPECFILE" +.I SPECFILE +ã‚’ãã‚ŒãŒãƒ‘ッケージã§ã‚ã‚‹ã‹ã®ã‚ˆã†ã«è§£æžã—ã€æ¤œç´¢ã™ã‚‹ã€‚ +ã™ã¹ã¦ã®æƒ…å ±ãŒåˆ©ç”¨ã§ãã‚‹ã‚ã‘ã§ã¯ãªã„(ãŸã¨ãˆã°ãƒ•ã‚¡ã‚¤ãƒ«ä¸€è¦§)ã«ã‚‚ã‹ã‹ã‚らãšã€ +spec ファイルã®è§£æžå™¨ã‚’書ãã“ã¨ç„¡ã—ã« spec ファイルã‹ã‚‰æƒ…報をå–り出ã™ã“ã¨ãŒ +ã“ã®ç¨®ã®æ¤œç´¢ã§å¯èƒ½ã§ã‚る。 +.TP +.BI \-\-tid " \fITID" +与ãˆã‚‰ã‚ŒãŸãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³è­˜åˆ¥å­ +.I TID +ã‚’æŒã¤ãƒ‘ッケージ(群)を検索ã™ã‚‹ã€‚ +ç¾åœ¨ã®ã¨ã“ã‚ã€unix 時間ãŒãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³è­˜åˆ¥å­ã¨ã—ã¦ä½¿ã‚ã‚Œã¦ã„る。 +一ã¤ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ»å‰Šé™¤ã•ã‚ŒãŸãƒ‘ッケージ(群)ã¯ã€ +ã™ã¹ã¦å…±é€šã®è­˜åˆ¥å­ã‚’æŒã¤ã€‚ +.TP +.BI \-\-triggerdby " \fIPACKAGE_NAME" +パッケージ(群) +.I PACKAGE_NAME +ã«ã‚ˆã£ã¦ãƒˆãƒªã‚¬ãƒ¼ã•ã‚Œã‚‹ãƒ‘ッケージを検索ã™ã‚‹ã€‚ +.TP +.BI \-\-whatprovides " \fICAPABILITY" +.I CAPABILITY +能力をæä¾›ã™ã‚‹ãƒ‘ッケージを検索ã™ã‚‹ã€‚ +.TP +.BI \-\-whatrequires " \fICAPABILITY" +é©åˆ‡ã«æ©Ÿèƒ½ã™ã‚‹ãŸã‚ã« +.I CAPABILITY +ã‚’å¿…è¦ã¨ã™ã‚‹ãƒ‘ッケージを検索ã™ã‚‹ã€‚ +.SSS "パッケージ検索オプション:" +.TP +.B \-\-changelog +パッケージã®æ›´æ–°æƒ…報を表示ã™ã‚‹ã€‚ +.TP +.BR \-c ", " \-\-configfiles +設定ファイルã®ã¿ã‚’表示ã™ã‚‹ +.RB ( \-l +を指定ã—ãŸã‚‚ã®ã¨ã¿ãªã™)。 +.TP +.BR \-d ", " \-\-docfiles +文書ファイルã®ã¿ã‚’表示ã™ã‚‹ +.RB ( \-l +を指定ã—ãŸã‚‚ã®ã¨ã¿ãªã™)。 +.TP +.B \-\-dump +以下ã®å½¢å¼ã§ãƒ•ã‚¡ã‚¤ãƒ«æƒ…報をダンプã™ã‚‹ +.RB ( \-l +を指定ã—ãŸã‚‚ã®ã¨ã¿ãªã™)。 +.sp +.nf +パス サイズ 修正時刻 md5ダイジェスト モード \\ +所有者 グループ 設定ファイル 文書ファイル \\ +ルートデãƒã‚¤ã‚¹ シンボリックリンク +.fi +.TP +.B \-\-filesbypkg +é¸æŠžã•ã‚ŒãŸãƒ‘ッケージã”ã¨ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示ã™ã‚‹ã€‚ +.TP +.BR \-i ", " \-\-info +åå‰ã€ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€èª¬æ˜Žã‚’å«ã‚ãŸãƒ‘ッケージ情報を表示ã™ã‚‹ã€‚ +ã“れ㯠+.B \-\-queryformat +を内部ã§ä½¿ç”¨ã—ã¦ã„る。 +.\"TSEKINE 言ã„ãŸã„ã“ã¨ãŒã‚ˆã分ã‹ã‚Šã¾ã›ã‚“。実際㯠popt 㧠aliasing +.\"TSEKINE ã•ã‚Œã¦ã‚‹ã®ã§ã€ãã®ã“ã¨ãŒè¨€ã„ãŸã„ã®ã§ã—ょã†ã‹? +.TP +.B \-\-last +パッケージをインストール時刻順ã«ã€ +最新ã®ãƒ‘ッケージãŒå…ˆé ­ã«ãªã‚‹ã‚ˆã†ãªé †ã§ä¸¦ã¹ã‚‹ã€‚ +.TP +.BR \-l ", " \-\-list +パッケージ内ã«ã‚るファイルを表示ã™ã‚‹ã€‚ +.TP +.B \-\-provides +ãã®ãƒ‘ッケージãŒæä¾›ã™ã‚‹èƒ½åŠ›ã‚’表示ã™ã‚‹ã€‚ +.TP +.BR \-R ", " \-\-requires +ãã®ãƒ‘ッケージãŒä¾å­˜ã™ã‚‹ãƒ‘ッケージを表示ã™ã‚‹ã€‚ +.TP +.B \-\-scripts +インストール・アンインストールã®éŽç¨‹ã§ä½¿ç”¨ã•ã‚Œã‚‹ã€ +パッケージ固有ã®ã‚¹ã‚¯ãƒªãƒ—トを表示ã™ã‚‹ã€‚ +.TP +.B \-s ", " \-\-state +パッケージ内ã®ãƒ•ã‚¡ã‚¤ãƒ«ã® +.I 状態 +を表示ã™ã‚‹ +.RB ( \-l +を指定ã—ãŸã‚‚ã®ã¨ã¿ãªã™)。 +å„ファイルã®çŠ¶æ…‹ã¯ +.IR "normal(正常)" , +.IR "not installed(インストールã•ã‚Œã¦ã„ãªã„)" , +.I "replaced(ç½®ãæ›ãˆã‚‰ã‚ŒãŸ)" +ã®ã„ãšã‚Œã‹ã§ã‚る。 +.TP +.BR \-\-triggers ", " \-\-triggerscripts +パッケージã«ãƒˆãƒªã‚¬ãƒ¼ã‚¹ã‚¯ãƒªãƒ—トãŒå«ã¾ã‚Œã‚Œã°è¡¨ç¤ºã™ã‚‹ã€‚ +.SS 検査オプション +rpm を検査ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã®ä¸€èˆ¬çš„ãªå½¢å¼ã¯: +.PP +.BR rpm " {" \-V|\-\-verify "} [" select-options "] [" verify-options ] +.PP +パッケージã®æ¤œæŸ»ã§ã¯ã€ +パッケージ内ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã«é–¢ã™ã‚‹æƒ…å ±ã¨ã€ +rpm データベースã«æ ¼ç´ã•ã‚Œã¦ã„るパッケージã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰å¾—られ㟠+ファイルã«é–¢ã™ã‚‹æƒ…å ±ã¨ã‚’比較ã™ã‚‹ã€‚ +ã¨ã‚Šã‚ã‘ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚µã‚¤ã‚ºã€MD5 ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã€è¨±å¯å±žæ€§ã€ã‚¿ã‚¤ãƒ—〠+所有者ã€ã‚°ãƒ«ãƒ¼ãƒ—を比較ã™ã‚‹ã€‚ +インストール時㫠+.B \-\-excludedocs +オプションを使ã£ãŸãŸã‚ã«é™¤å¤–ã•ã‚ŒãŸæ–‡æ›¸ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚ˆã†ã«ã€ +パッケージã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ãªã„ファイルã¯é™ã‹ã«ç„¡è¦–ã•ã‚Œã‚‹ã€‚ +.PP +パッケージé¸æŠžã‚ªãƒ—ションã¯ã€ãƒ‘ッケージ検索ã®ãŸã‚ã®ã‚‚ã®ã¨ +(パッケージã®ãƒªã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’引数ã«æŒ‡å®šã§ãã‚‹ã“ã¨ã‚‚å«ã‚) +一緒ã§ã‚る。 +ãã®ä»–ã®ã€æ¤œæŸ»ãƒ¢ãƒ¼ãƒ‰å›ºæœ‰ã®ã‚ªãƒ—ションã¯: +.TP +.B \-\-nodeps +パッケージã®ä¾å­˜æ€§ã«ã¤ã„ã¦æ¤œæŸ»ã—ãªã„。 +.TP +.B \-\-nodigest +読ã¿è¾¼ã¿æ™‚ã«ãƒ‘ッケージやã¸ãƒƒãƒ€ãƒ¼ã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆå€¤ã‚’検査ã—ãªã„。 +.TP +.B \-\-nofiles +パッケージ内ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã„ã‹ãªã‚‹å±žæ€§ã‚‚検査ã—ãªã„。 +.TP +.B \-\-noscripts +.B %verifyscript +ãŒã‚‚ã—存在ã—ã¦ã‚‚実行ã—ãªã„。 +.TP +.B \-\-nosignature +読ã¿è¾¼ã¿æ™‚ã«ãƒ‘ッケージやã¸ãƒƒãƒ€ãƒ¼ã®ç½²åを検査ã—ãªã„。 +.TP +.B \-\-nolinkto +.PD 0 +.TP +.B \-\-nomd5 +.TP +.B \-\-nosize +.TP +.B \-\-nouser +.TP +.B \-\-nogroup +.TP +.B \-\-nomtime +.TP +.B \-\-nomode +.TP +.B \-\-nordev +.PD +ãã‚Œãžã‚Œé–¢é€£ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«å±žæ€§ã‚’検査ã—ãªã„。 +.PP +出力ã®å½¢å¼ã¯ 8 個ã®æ–‡å­—ã¨å±žæ€§ãƒžãƒ¼ã‚¯ã€ãã®å¾Œã‚ã«ãƒ•ã‚¡ã‚¤ãƒ«åã§ã‚る。 +パッケージã®ã¸ãƒƒãƒ€ãƒ¼ã‹ã‚‰å¾—られる属性マークã¯: + +.PD 0 +.TP .2i +.B c +.B %config +設定ファイル。 +.TP +.B d +.B %doc +文書ファイル。 +.TP +.B g +.B %ghost +ファイル(ã™ãªã‚ã¡ã€ãƒ‘ッケージã®å†…容物ã¨ã—ã¦ã¯å«ã¾ã‚Œã¦ã„ãªã„ファイル)。 +.TP +.B l +.B %license +ライセンスファイル。 +.TP +.B r +.B %readme +readme ファイル。 +.PD +.PP +å„ 8 個ã®æ–‡å­—ã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®å±žæ€§ã¨ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«è¨˜éŒ²ã•ã‚Œã¦ã„ã‚‹ãã®å±žæ€§ã® +値ã¨ã®æ¯”較ã®çµæžœã‚’æ„味ã—ã¦ã„る。 +一ã¤ã® +.B "." +(ピリオド) ã¯ãƒ†ã‚¹ãƒˆã‚’通éŽã—ãŸã“ã¨æ„味ã—ã€ä¸€ã¤ã® +.B "?" +(クエスãƒãƒ§ãƒ³ãƒžãƒ¼ã‚¯) ã¯ãƒ†ã‚¹ãƒˆãŒå®Ÿæ–½ã•ã‚Œãªã‹ã£ãŸ +(ã™ãªã‚ã¡ã€ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ーミッションã«ã‚ˆã‚Šèª­ã¿è¾¼ã‚ãªã‹ã£ãŸ) +ã“ã¨ã‚’æ„味ã™ã‚‹ã€‚ã§ãªã‹ã‚Œã°ã€ +(記憶を助ã‘ã‚‹ãŸã‚ã«ã€ãƒœãƒ¼ãƒ«ãƒ‰åŒ– +.RB (em "B" oldened) +ã•ã‚Œã¦ã„ã‚‹)文字ã¯é–¢é€£ã™ã‚‹ +.B \-\-verify +テストã«å¤±æ•—ã—ãŸã“ã¨ã‚’æ„味ã™ã‚‹: +.PP +.PD 0 +.TP 0.2i +.B S +ファイルã®ã‚µã‚¤ã‚º +.RB ( S ize) +ãŒç•°ãªã‚‹ +.TP +.B M +モード +.RB ( M ode; +許å¯å±žæ€§ã¨ãƒ•ã‚¡ã‚¤ãƒ«ã®ç¨®é¡ž) +ãŒç•°ãªã‚‹ +.TP +.B 5 +.RB MD 5 +ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒç•°ãªã‚‹ +.TP +.B D +デãƒã‚¤ã‚¹ +.RB ( D evice) +ã®ãƒ¡ã‚¸ãƒ£ãƒ¼/マイナー番å·ãŒä¸€è‡´ã—ãªã„ +.TP +.B L +.RB read L ink(2) +ã—ãŸãƒ‘スãŒä¸€è‡´ã—ãªã„ +.TP +.B U +所有者 +.RB ( U ser) +ãŒç•°ãªã‚‹ +.TP +.B G +グループ +.RB ( G roup) +ãŒç•°ãªã‚‹ +.TP +.B T +修正時刻 +.RB (m T ime) +ãŒç•°ãªã‚‹ +.PD +.SS é›»å­ç½²åã¨ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã®æ¤œæŸ» +rpm ã®é›»å­æ›¸åã®ä¸€èˆ¬çš„ãªå½¢å¼ã¯: +.PP +.BI "rpm \-\-import " "PUBKEY ..." + +.BR rpm " {" \-K|\-\-checksig "} [" \-\-nogpg "] [" \-\-nopgp "] [" \-\-nomd5 "]" +.br +.I " PACKAGE_FILE ..." +.PP +.B \-\-checksig +オプションã¯ã€ +パッケージã®å®Œå…¨æ€§ã¨å‡ºæ‰€ã‚’確èªã™ã‚‹ãŸã‚ã« +.I PACKAGE_FILE +ã«å«ã¾ã‚Œã‚‹ã™ã¹ã¦ã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆå€¤ã¨ç½²åã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã€‚ +ç¾åœ¨ã§ã¯ãƒ‘ッケージãŒèª­ã¿è¾¼ã¾ã‚ŒãŸã¨ãã¯ã„ã¤ã§ã‚‚ç½²åãŒæ¤œæŸ»ã•ã‚Œã‚‹ã€‚ +.B \-\-checksig +ã®æ–¹ã¯ãƒ‘ッケージã«ä»˜éšã™ã‚‹ã™ã¹ã¦ã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆå€¤ã¨ç½²åã‚’ +検査ã™ã‚‹ã®ã«æœ‰åŠ¹ã§ã‚る。 +.PP +公開éµãŒãªã‘ã‚Œã°é›»å­ç½²åã®æ¤œæŸ»ã¯ã§ããªã„。 +.B \-\-import +を使ãˆã° +.B rpm +データベース㫠ASCII å½¢å¼ã§ã®å…¬é–‹éµã‚’追加ã§ãる。 +å–ã‚Šè¾¼ã¾ã‚ŒãŸå…¬é–‹éµã¯ã‚ã‚‹ã¸ãƒƒãƒ€ãƒ¼ã¸ã¨é‹ã°ã‚Œã€ +パッケージ管ç†ã®ã‚ˆã†ã«åŽ³å¯†ãªéµãƒªãƒ³ã‚°ç®¡ç†ãŒå®Ÿè¡Œã•ã‚Œã‚‹ã€‚ +例ã¨ã—ã¦ã€ãã®æ™‚点ã§å–ã‚Šè¾¼ã¾ã‚Œã¦ã„ã‚‹ã™ã¹ã¦ã®å…¬é–‹éµã¯ä»¥ä¸‹ã‚’実行ã™ã‚‹ã“ã¨ã§ +表示ã§ãる。 +.PP +.nf +.B "rpm \-qa gpg-publey*" +.fi +(訳注: 多ãã®å ´åˆ "*" ã¯ã‚·ã‚§ãƒ«ã«ã‚ˆã£ã¦ãƒ¡ã‚¿æ–‡å­—ã¨ã—ã¦è§£é‡ˆã•ã‚Œã‚‹ã®ã§ã€ +実際ã«ã¯ rpm \-qa "gpg-publey*" ã®ã‚ˆã†ã«ã‚¯ã‚©ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã™ã‚‹å¿…è¦ãŒã‚ã‚‹) +.PP +å–り込んã ã€ç‰¹å®šã®å…¬é–‹éµã«é–¢ã™ã‚‹è©³ç´°ã¯æ¤œç´¢ã«ã‚ˆã£ã¦è¡¨ç¤ºã™ã‚‹ã“ã¨ãŒã§ãる。 +Red Hat ã® GPG/DSA éµã«é–¢ã™ã‚‹æƒ…å ±ã¯: +.PP +.B "rpm \-qi gpg-publey-db42a60e" +.PP +最後ã«ã€ãƒ‘ッケージã§ãã†ã§ãるよã†ã«ã€å–り込んã å…¬é–‹éµã‚’削除ã™ã‚‹ã“ã¨ãŒã§ãる。 +以下㯠Red Hat ã® GPG/DSA éµã‚’削除ã™ã‚‹ã€‚ +.PP +.B "rpm \-e gpg-pubkey-db42a60e" +.SS パッケージã¸ã®ç½²å +.BR rpm " {" \-\-addsign|\-\-resign } +.I PACKAGE_FILE ... +.PP +オプション +.B \-\-addsign +㨠+.B \-\-resign +ã®ä¸¡æ–¹ã¨ã‚‚ã€ä¸Žãˆã‚‰ã‚ŒãŸå„パッケージ +.I PACKAGE_FILE +ã«å¯¾ã™ã‚‹æ–°ãŸãªç½²åを生æˆãƒ»æŒ¿å…¥ã—ã€æ—¢ã«å­˜åœ¨ã™ã‚‹ç½²åãŒã‚ã‚Œã°ç½®ãæ›ãˆã‚‹ã€‚ +æ­´å²çš„ãªç†ç”±ã«ã‚ˆã‚ŠäºŒã¤ã®ã‚ªãƒ—ションãŒå­˜åœ¨ã™ã‚‹ãŒã€ +ç¾åœ¨ã§ã¯ãã®å‹•ä½œã«é•ã„ã¯ãªã„。 +.SS "パッケージã¸ã®ç½²åã« GPG を使用ã™ã‚‹" +GPG を使ã£ã¦ãƒ‘ッケージã«ç½²åã™ã‚‹ãŸã‚ã«ã¯ã€ +.B rpm +㌠GPG を実行ã™ã‚‹ã‚ˆã†ã«è¨­å®šã•ã‚Œã¦ã„ãªã‘ã‚Œã°ãªã‚‰ãšã€ã¾ãŸã€ +é©åˆ‡ãªéµã§éµãƒªãƒ³ã‚°ã‚’探ã™ã“ã¨ãŒã§ããªã‘ã‚Œã°ãªã‚‰ãªã„。 +.B rpm +ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã€ +GPG ãŒéµã®ç’°ã‚’探ã™ã®ã¨åŒã˜è¦å‰‡ã€ã™ãªã‚ã¡ç’°å¢ƒå¤‰æ•° +.B $GPGPATH +を使用ã™ã‚‹ã€‚ +GPG ãŒæœŸå¾…ã™ã‚‹å ´æ‰€ã«éµãƒªãƒ³ã‚°ãŒç„¡ã„å ´åˆã«ã¯ã€ +使用ã™ã‚‹ GPG éµãƒªãƒ³ã‚°ã®å ´æ‰€ã‚’ +.B %_gpg_path +マクロã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚る。 +.PP +éŽåŽ»ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® GPG, PGP, rpm ã¨ã®äº’æ›æ€§ã®ãŸã‚ã«ã€ +V3 OpenPGP ç½²åパケットã®ã¿ãŒè¨­å®šã•ã‚Œãªã‘ã‚Œã°ãªã‚‰ãªã„。 +.\"TSEKINE 何ã«å¯¾ã—㦠configured ã•ã‚Œãªã‘ã‚Œã°ãªã‚‰ãªã„ã®ã§ã—ょã†? +DSA 㨠RSA ã®æ¤œæŸ»ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã®ã©ã¡ã‚‰ã‚‚使ã†ã“ã¨ãŒã§ãã‚‹ãŒã€ +DSA ã®æ–¹ãŒå¥½ã¾ã—ã„。 +.PP +作æˆã—ãŸãƒ‘ッケージã«è‡ªåˆ†è‡ªèº«ã§ç½²åã§ãるよã†ã«ã—ãŸã‘ã‚Œã°ã€ +公開éµã¨ç§˜å¯†éµã®ãƒšã‚¢ã‚’作æˆã—ã¦ãŠãã“ã¨ã‚‚å¿…è¦ã§ã‚ã‚‹ +(GPG ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’見るã“ã¨)。 +ã¾ãŸã€ä»¥ä¸‹ã® +.B rpm +マクロを設定ã™ã‚‹ã“ã¨ã‚‚å¿…è¦ã§ã‚ã‚ã†ã€‚ +.TP +\fB%_gpg_name\fR +パッケージã«ç½²åã™ã‚‹ã®ã«ä½¿ç”¨ã—ãŸã„éµã®ãƒ¦ãƒ¼ã‚¶å。 +.PP +例ãˆã°ã€å®Ÿè¡Œãƒ•ã‚¡ã‚¤ãƒ«ãŒ +.I /usr/bin/gpg +ã§ã€éµãƒªãƒ³ã‚°ãŒ +.I /etc/rpm/.gpg +ã«ã‚ã‚Šã€ãã®ä¸­ã®ãƒ¦ãƒ¼ã‚¶ +.I """John Doe """ +ã¨ã—ã¦ãƒ‘ッケージ㫠GPG を使ã£ã¦ç½²åã™ã‚‹å ´åˆã«ã¯ +.PP +.nf +%_gpg_path /etc/rpm/.gpg +%_gpg_name John Doe +%_gpgbin /usr/bin/gpg +.fi +.PP +をマクロã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«å«ã‚ã‚Œã°è‰¯ã„。 +システム全体ã®è¨­å®šã«ã¯ +.I /etc/rpm/macros +ã‚’ã€ãƒ¦ãƒ¼ã‚¶ã”ã¨ã®è¨­å®šã«ã¯ +.I ~/.rpmmacros +を使用ã™ã‚‹ã€‚ +.SS データベースå†ä½œæˆã‚ªãƒ—ション +データベースをå†ä½œæˆã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã®ä¸€èˆ¬çš„ãªå½¢å¼ã¯: +.PP +.BR rpm " {" \-\-initdb|\-\-rebuilddb "} [" \-v "] [" "\-\-dbpath \fIDIRECTORY" ] +.br +.RB " [" "\-\-root \fIDIRECTORY" ] +.PP +æ–°ãŸãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’作æˆã™ã‚‹å ´åˆã«ã¯ +.B \-\-initdb +を使ã„ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„るパッケージã®ã¸ãƒƒãƒ€ãƒ¼ã‹ã‚‰ +データベースã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’å†ä½œæˆã™ã‚‹ã«ã¯ +.B \-\-rebuilddb +を使用ã™ã‚‹ã€‚ +.SS "SHOWRC" +コマンド +.PP +.B "rpm \-\-showrc" +.PP +ã¯ã€ +.B rpm +ãŒä½¿ç”¨ã™ã‚‹ã™ã¹ã¦ã®ã‚ªãƒ—ションã®å€¤ã‚’表示ã™ã‚‹ã€‚ +値ã¯ãƒ•ã‚¡ã‚¤ãƒ« +.I rpmrc +㨠+.I macros +ã§è¨­å®šã•ã‚Œã‚‹ã€‚ +.SS "FTP/HTTP オプション" +インターãƒãƒƒãƒˆã‹ã‚‰ãƒ‘ッケージを検索ã—ãŸã‚Šã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã«ã€ +.B rpm +㯠FTP 㨠HTTP ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã—ã¦å‹•ä½œã™ã‚‹ã“ã¨ãŒã§ãる。 +インストールã€ã‚¢ãƒƒãƒ—グレードã€æ¤œç´¢ã™ã‚‹ãƒ‘ッケージファイル㯠+以下㮠ftp ã¾ãŸã¯ http スタイル㮠URL ã§æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãる。 +.PP +ftp://USER:PASSWORD@HOST:PORT/path/to/package.rpm +.PP +ã‚‚ã— +.B :PASSWORD +ã®éƒ¨åˆ†ãŒçœç•¥ã•ã‚ŒãŸå ´åˆã«ã¯ã€ãƒ‘スワード㌠+(ユーザ/ホストåã®çµ„åˆã‚ã›ã”ã¨ã«)å°‹ã­ã‚‰ã‚Œã‚‹ã€‚ +ユーザã¨ãƒ‘スワードã®ä¸¡æ–¹ãŒçœç•¥ã•ã‚ŒãŸå ´åˆã«ã¯ã€ +anonymous(匿å) +.B ftp +ãŒä½¿ç”¨ã•ã‚Œã‚‹ã€‚ã™ã¹ã¦ã®å ´åˆã«ãŠã„㦠+パッシブ (PASV) +.B ftp +転é€ãŒåˆ©ç”¨ã•ã‚Œã‚‹ã€‚ +.PP +ftp URL ã«ãŠã„ã¦ã€ +.B rpm +ã§ã¯æ¬¡ã®ã‚ªãƒ—ションãŒå¯èƒ½ã§ã‚る。 +.TP +.BI \-\-ftpproxy " HOST" +プロキシを用ã„ãŸãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã‚’通ã—ã¦ãƒ¦ãƒ¼ã‚¶ãŒ ftp ã§ãるよã†ã«ã€ +ã™ã¹ã¦ã® ftp 転é€ã«ãƒ›ã‚¹ãƒˆ +.I HOST +ã¯ãƒ—ロキシサーãƒãƒ¼ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã‚‹ã€‚ +マクロ +.B %_ftpproxy +ã®è¨­å®šã§ã‚‚ã€ã“ã®ã‚ªãƒ—ションを指定ã™ã‚‹ã“ã¨ãŒã§ãる。 +.TP +.BI \-\-ftpport " PORT" +.\"TSEKINE 多分ã€åŽŸæ–‡ã®æ–¹ãŒé–“é•ã£ã¦ã‚‹ +デフォルトã®ãƒãƒ¼ãƒˆã®ä»£ã‚ã‚Šã«ã€ãƒ—ロキシ ftp サーãƒã® ftp 接続ã«ä½¿ç”¨ã™ã‚‹ +TCP +.I PORT +(ãƒãƒ¼ãƒˆ)番å·ã€‚ +マクロ +.B %_ftpport +ã®è¨­å®šã§ã‚‚ã€ã“ã®ã‚ªãƒ—ションを指定ã™ã‚‹ã“ã¨ãŒã§ãる。 +.PP +.B http +URL ã«ãŠã„ã¦ã€ +.B rpm +ã§ã¯æ¬¡ã®ã‚ªãƒ—ションãŒå¯èƒ½ã§ã‚る。 +.TP +.BI \-\-httpproxy " HOST" +ã™ã¹ã¦ã® http 転é€ã«ãƒ›ã‚¹ãƒˆ +.I HOST +ã¯ãƒ—ロキシサーãƒãƒ¼ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã‚‹ã€‚ +マクロ +.B %_httpproxy +ã®è¨­å®šã§ã‚‚ã€ã“ã®ã‚ªãƒ—ションを指定ã™ã‚‹ã“ã¨ãŒã§ãる。 +.TP +.BI \-\-httpport " PORT" +デフォルトã®ãƒãƒ¼ãƒˆã®ä»£ã‚ã‚Šã«ã€http プロキシサーãƒã®æŽ¥ç¶šã§ä½¿ç”¨ã™ã‚‹ +TCP +.B PORT +(ãƒãƒ¼ãƒˆ)番å·ã€‚ +.SH éŽåŽ»ã®éºç”£ +.SS "rpmbuild ã®å®Ÿè¡Œ" +rpm ã®ãƒ“ルドモードã¯ã€ç¾åœ¨ã§ã¯ +.I /usr/bin/rpmbuild +ã«å«ã¾ã‚Œã‚‹ã€‚ +éŽåŽ»ã¨ã®äº’æ›æ€§ã¯ä»¥ä¸‹ã® popt ã«ã‚ˆã‚‹ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã«ã‚ˆã£ã¦æä¾›ã•ã‚Œã€ +ãã‚Œã¯ã¾ãšã¾ãšã§ã¯ã‚ã‚‹ãŒå®Œå…¨ã§ã¯ãªã„。 +よã£ã¦ popt ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã‚’使ã£ãŸãƒ“ルドモードã®äº’æ›æ€§ã¯ã€ +rpm ã‹ã‚‰å–り除ã‹ã‚Œã¤ã¤ã‚る。 +以å‰ã® +.BR rpm (8) +ã«è¨˜è¿°ã•ã‚Œã¦ã„㟠+.B rpm +ビルドモードã«ã¤ã„ã¦ã®ã™ã¹ã¦ã®æ–‡æ›¸ã¯ã€ +.B rpmbuld +パッケージをインストール㗠+.BR rpmbuild (8) +ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã€‚ +.PP +ã“ã‚Œã‹ã‚‰ã‚‚ +.B rpm +ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰ +.B rpmbuild +を呼ã³å‡ºã—ãŸã‘ã‚Œã°ã€ä»¥ä¸‹ã®è¡Œã‚’ +.I /etc/popt +ã«åŠ ãˆã‚Œã°ã‚ˆã„。 +.PP +.nf +rpm exec \-\-bp rpmb \-bp +rpm exec \-\-bc rpmb \-bc +rpm exec \-\-bi rpmb \-bi +rpm exec \-\-bl rpmb \-bl +rpm exec \-\-ba rpmb \-ba +rpm exec \-\-bb rpmb \-bb +rpm exec \-\-bs rpmb \-bs +rpm exec \-\-tp rpmb \-tp +rpm exec \-\-tc rpmb \-tc +rpm exec \-\-ti rpmb \-ti +rpm exec \-\-tl rpmb \-tl +rpm exec \-\-ta rpmb \-ta +rpm exec \-\-tb rpmb \-tb +rpm exec \-\-ts rpmb \-ts +rpm exec \-\-rebuild rpmb \-\-rebuild +rpm exec \-\-recompile rpmb \-\-recompile +rpm exec \-\-clean rpmb \-\-clean +rpm exec \-\-rmsource rpmb \-\-rmsource +rpm exec \-\-rmspec rpmb \-\-rmspec +rpm exec \-\-target rpmb \-\-target +rpm exec \-\-short\-circuit rpmb \-\-short\-circuit +.fi +.SH ファイル +.SS "rpmrc 設定" +.PP +.nf +\fI/usr/lib/rpm/rpmrc\fR +\fI/usr/lib/rpm/redhat/rpmrc\fR +\fI/etc/rpmrc\fR +\fI~/.rpmrc\fR +.fi +.SS マクロ設定 +.nf +\fI/usr/lib/rpm/macros\fR +\fI/usr/lib/rpm/redhat/macros\fR +\fI/etc/rpm/macros\fR +\fI~/.rpmmacros\fR +.fi +.SS データベース +.nf +\fI/var/lib/rpm/Basenames\fR +\fI/var/lib/rpm/Conflictname\fR +\fI/var/lib/rpm/Dirnames\fR +\fI/var/lib/rpm/Filemd5s\fR +\fI/var/lib/rpm/Group\fR +\fI/var/lib/rpm/Installtid\fR +\fI/var/lib/rpm/Name\fR +\fI/var/lib/rpm/Packages\fR +\fI/var/lib/rpm/Providename\fR +\fI/var/lib/rpm/Provideversion\fR +\fI/var/lib/rpm/Pubkeys\fR +\fI/var/lib/rpm/Removed\fR +\fI/var/lib/rpm/Requirename\fR +\fI/var/lib/rpm/Requireversion\fR +\fI/var/lib/rpm/Sha1header\fR +\fI/var/lib/rpm/Sigmd5\fR +\fI/var/lib/rpm/Triggername\fR +.fi +.SS 一時ファイル +\fI/var/tmp/rpm*\fR +.SH 関連項目 +.BR popt (3), +.BR rpm2cpio (8), +.BR rpmbuild (8), +.nf +.UR http://www.rpm.org/ +.B http://www.rpm.org/ +.UE +.fi +.SH 著者 +.nf +Marc Ewing +Jeff Johnson +Erik Troan +.fi diff --git a/doc/ja/rpm2cpio.8 b/doc/ja/rpm2cpio.8 new file mode 100644 index 0000000..cf91dca --- /dev/null +++ b/doc/ja/rpm2cpio.8 @@ -0,0 +1,47 @@ +.\" rpm2cpio - Converts Red Hat Package (RPM) to cpio archive +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2, or (at your option) +.\" any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program; if not, write to the Free Software +.\" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +.\" USA. +.\" +.\" Japanese Version Copyright (C) 2003 System Design and Research +.\" Institute Co.,Ltd. All rights reserved. +.\" +.\" Translated 14 March 2003 by +.\" System Design and Research Institute Co.,Ltd. +.\" +.TH rpm2cpio 8 "11 January 2001" "Red Hat, Inc." +.SH åå‰ +rpm2cpio \- RPM (RPM Package Manager)パッケージã‹ã‚‰ cpio アーカイブを +抽出ã™ã‚‹ +.SH æ›¸å¼ +\fBrpm2cpio\fP [filename] +.SH 説明 +.B rpm2cpio +ã¯å¼•æ•°ã§æŒ‡å®šã•ã‚Œã‚‹ä¸€ã¤ã® .rpm ファイルを cpio アーカイブ形å¼ã«å¤‰æ›ã—〠+標準出力ã«å‡ºåŠ›ã™ã‚‹ã€‚ +引数㫠'\-' ãŒæŒ‡å®šã•ã‚ŒãŸå ´åˆã«ã¯ã€æ¨™æº–入力ã‹ã‚‰ rpm を読ã¿è¾¼ã‚€ã€‚ +.PP +.br +.B "rpm2cpio rpm-1.1-1.i386.rpm" +.br +.B "rpm2cpio \- < glint-1.0-1.i386.rpm" +.br +.B "rpm2cpio glint-1.0-1.i386.rpm | cpio -dium" +.SH 関連項目 +.IR rpm (8) +.SH 著者 +.nf +Erik Troan +.fi diff --git a/doc/ja/rpmbuild.8 b/doc/ja/rpmbuild.8 new file mode 100644 index 0000000..94b01e6 --- /dev/null +++ b/doc/ja/rpmbuild.8 @@ -0,0 +1,315 @@ +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2, or (at your option) +.\" any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program; if not, write to the Free Software +.\" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +.\" USA. +.\" +.\" Japanese Version Copyright (C) 2003 System Design and Research +.\" Institute Co.,Ltd. All rights reserved. +.\" +.\" Translated 14 March 2003 by +.\" System Design and Research Institute Co.,Ltd. +.\" +.TH "RPMBUILD" "8" "09 June 2002" "Red Hat, Inc." +.SH åå‰ +rpmbuils \- RPM パッケージã®ãƒ“ルド +.SH æ›¸å¼ +.SS パッケージã®ãƒ“ルド: +\fBrpmbuild\fR {\fB-ba|-bb|-bp|-bc|-bi|-bl|-bs\fR} [\fBrpmbuild-options\fR] \fB\fISPECFILE\fB\fR\fI ...\fR + +\fBrpmbuild\fR {\fB-ta|-tb|-tp|-tc|-ti|-tl|-ts\fR} [\fBrpmbuild-options\fR] \fB\fITARBALL\fB\fR\fI ...\fR + +\fBrpmbuild\fR {\fB--rebuild|--recompile\fR} \fB\fISOURCEPKG\fB\fR\fI ...\fR +.SS ãã®ä»–: +\fBrpmbuild\fR \fB--showrc\fR +.SS rpmbuild ã®ã‚ªãƒ—ション + [\fB--buildroot \fIDIRECTORY\fB\fR] [\fB--clean\fR] [\fB--nobuild\fR] + [\fB--rmsource\fR] [\fB--rmspec\fR] [\fB--short-circuit\fR] [\fB--sign\fR] + [\fB--target \fIPLATFORM\fB\fR] +.SH 説明 +.B rpmbuild +ã¯ã€ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã¨ã‚½ãƒ¼ã‚¹ãƒ‘ッケージã®ä¸¡æ–¹ã®ãƒ“ルド(作æˆ)ã«åˆ©ç”¨ã•ã‚Œã‚‹ã€‚ +.B パッケージ +ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã¨ã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã® +インストール・アンインストールã«ä½¿ã‚れるメタデータã‹ã‚‰æ§‹æˆã•ã‚Œã‚‹ã€‚ +メタデータã¯è£œåŠ©ã‚¹ã‚¯ãƒªãƒ—トã€ãƒ•ã‚¡ã‚¤ãƒ«å±žæ€§ã€ +パッケージã®èª¬æ˜Žã«é–¢ã™ã‚‹æƒ…å ±ã‹ã‚‰ãªã‚‹ã€‚ +.B パッケージ +ã«ã¯ 2 種類ã‚り〠+インストールã™ã‚‹ãŸã‚ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’カプセル化ã™ã‚‹ã®ã«ä½¿ã‚れるãƒã‚¤ãƒŠãƒª +パッケージã¨ã€ãƒã‚¤ãƒŠãƒªãƒ‘ッケージを作æˆã™ã‚‹ã®ã«å¿…è¦ãªãƒ¬ã‚·ãƒ”ã¨ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ +ã‹ã‚‰ãªã‚‹ã‚½ãƒ¼ã‚¹ãƒ‘ッケージã¨ãŒã‚る。 +.PP +次ã®åŸºæœ¬ãƒ¢ãƒ¼ãƒ‰ã‹ã‚‰ã„ãšã‚Œã‹ä¸€ã¤ã‚’é¸æŠžã—ãªã‘ã‚Œã°ãªã‚‰ãªã„: +.BR パッケージã®ãƒ“ルド 〠"tar アーカイブã‹ã‚‰ã®ãƒ‘ッケージã®ãƒ“ルド" 〠+.BR パッケージã®å†ã‚³ãƒ³ãƒ‘イル 〠設定ã®è¡¨ç¤º 。 +.SS 一般的ãªã‚ªãƒ—ション +以下ã®ã‚ªãƒ—ションã¯ã™ã¹ã¦ã®ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ç”¨å¯èƒ½ã§ã‚る。 +.TP +.BR \-? ", " \-\-help +使ã„方を通常よりも詳ã—ã表示ã™ã‚‹ã€‚ +.TP +\fB\-\-version\fR +使用中㮠+.B rpm +ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’ 1 è¡Œã§è¡¨ç¤ºã™ã‚‹ã€‚ +.TP +\fB\-\-quiet\fR +表示をã§ãã‚‹ã ã‘å°‘ãªãã™ã‚‹ã€‚ +通常ã¯ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã ã‘ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã€‚ +.TP +\fB\-v\fR +より多ãã®æƒ…報を表示ã™ã‚‹ã€‚ +通常ã¯ã€ãƒ«ãƒ¼ãƒãƒ³ã®é€²æ—メッセージãŒè¡¨ç¤ºã•ã‚Œã‚‹ã€‚ +.TP +\fB\-vv\fR +沢山ã®æ±šã„デãƒãƒƒã‚°æƒ…報を表示ã™ã‚‹ã€‚ +.TP +.BI \-\-rcfile " FILELIST" +.B rpm +ã¯ã€ã‚³ãƒ­ãƒ³(`:')ã§åŒºåˆ‡ã‚‰ã‚ŒãŸ +.I FILELIST +ã®å„ファイルを設定情報ã¨ã—ã¦èª­ã¿è¾¼ã‚€ã€‚ +読ã¿è¾¼ã¿ã¯ +.I FILELIST +ã«æŒ‡å®šã•ã‚ŒãŸé †ç•ªã§è¡Œã‚れる。 +.I FILELIST +ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯ +.IR /usr/lib/rpm/rpmrc : /usr/lib/rpm/redhat/rpmrc : ~/.rpmrc +ã§ã‚る。 +.TP +.BI \-\-pipe " CMD" +.B rpm +コマンドã®å‡ºåŠ›ã‚’ +.I CMD +ã¸ãƒ‘イプã™ã‚‹ã€‚ +.TP +.BI \-\-dbpath " DIRECTORY" +データベースã®ãƒ‘スã¨ã—ã¦ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã® +.I /var/lib/rpm +ã§ã¯ãªã +.I DIRECTORY +を使ã†ã€‚ +.TP +.BI \-\-root " DIRECTORY" +.\" motoki: after 以下㌠will be used for 〜 ã«ã‹ã‹ã‚‹ã®ã‹ãŒä¸æ˜Žã€‚ +.\" motoki: will be run ã«ã ã‘ã‹ã‹ã‚‹ã®ã ã¨æ€ã„ã¾ã™ãŒãƒ»ãƒ»ãƒ» +ã™ã¹ã¦ã®æ“作ã«ãŠã„ã¦ã€ +.I DIRECTORY +をルートã¨ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã‚’使ã†ã€‚ +ã¤ã¾ã‚Šã€ +.I DIRECTORY +内ã«ã‚るデータベースãŒä¾å­˜æ€§ã®ãƒã‚§ãƒƒã‚¯ã«ä½¿ç”¨ã•ã‚Œã€ +.I DIRECTORY +ã« chroot(2) ã—ãŸå¾Œã§ã€ã™ã¹ã¦ã®ã‚¹ã‚¯ãƒªãƒ—ト +(例ãˆã°ã€ãƒ‘ッケージインストール時㮠+.B %post +ã‚„ã€ãƒ‘ッケージビルド時㮠+.B %prep +ãªã©) ãŒå®Ÿè¡Œã•ã‚Œã‚‹ã€‚ +.SS ビルドオプション +rpm ã®ãƒ“ルド・コマンドã®ä¸€èˆ¬çš„ãªå½¢å¼ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã‚ã‚‹: +.RS 0.2i +.PP +.B rpmbuild +.BI \-b STAGE |\-t STAGE +.RB "[ " rpmbuild\-options " ]" +.I "FILE ..." +.RE +.PP +パッケージã®ãƒ“ルド㫠spec ファイルを使用ã™ã‚‹ã®ã§ã‚れ㰠+.B \-b +を〠+.B rpmbuild +㌠spec ファイルを使ã†ãŸã‚ã« (圧縮ã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚‚ã‚ã‚‹) tar ファイル㮠+内部ã‹ã‚‰ä½¿ç”¨ã™ã‚‹ spec ファイルを探ã™ã®ã§ã‚れ㰠+.B \-t +ã‚’ã€ãã‚Œãžã‚Œå¼•æ•°ã«æŒ‡å®šã™ã‚‹ã€‚ +最åˆã®å¼•æ•°ã®å¾Œã‚ã«ã‚ã‚‹ã€æ¬¡ã®æ–‡å­— +.RI ( STAGE ) +ã¯ãƒ“ルドã¨ãƒ‘ッケージ化ã®æ®µéšŽã‚’指定ã™ã‚‹ã®ã«ä½¿ã‚れ〠+以下ã®ã„ãšã‚Œã‹ãŒæŒ‡å®šã•ã‚Œã‚‹ +(訳注: 以下ã®ã‚‚ã®ã¯ spec ファイルã€ã™ãªã‚ã¡ \-b ãŒæŒ‡å®šã•ã‚ŒãŸå ´åˆã§ã‚り〠+tar ファイルã‹ã‚‰ãƒ“ルドã™ã‚‹å ´åˆã¯ \-ta, \-tb, ... ã¨ãªã‚‹)。 +.TP +\fB\-ba\fR +(%prep, %build, %install を実行ã—ãŸå¾Œã«) +ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã¨ã‚½ãƒ¼ã‚¹ãƒ‘ッケージをビルドã™ã‚‹ã€‚ +.TP +\fB\-bb\fR +(%prep, %build, %install を実行ã—ãŸå¾Œã«) +ãƒã‚¤ãƒŠãƒªãƒ‘ッケージをビルドã™ã‚‹ã€‚ +.TP +\fB\-bp\fR +spec ファイルã‹ã‚‰ "%prep" 段階を実行ã™ã‚‹ã€‚ +通常ã€ã‚½ãƒ¼ã‚¹ã‚’展開ã—パッãƒã‚’é©ç”¨ã™ã‚‹ã“ã¨ã‚’æ„味ã™ã‚‹ã€‚ +.TP +\fB\-bc\fR +(%prep を実行ã—ãŸå¾Œã«) +spec ファイルã‹ã‚‰ "%build" 段階を実行ã™ã‚‹ã€‚ +一般的ã«ã¯ "make" ã¨ç­‰ä¾¡ã§ã‚る。 +.TP +\fB\-bi\fR +(%prep, %build を実行ã—ãŸå¾Œã«) +spec ファイルã‹ã‚‰ "%install" 段階を実行ã™ã‚‹ã€‚ +一般的ã«ã¯ "make install" ã¨ç­‰ä¾¡ã§ã‚る。 +.TP +\fB\-bl\fR +"list check" を実行ã™ã‚‹ã€‚ +spec ファイル㮠"%files" セクションã®ãƒžã‚¯ãƒ­ãŒå±•é–‹ã•ã‚Œã€ +å„ファイルãŒå­˜åœ¨ã™ã‚‹ã‹ã®æ¤œè¨¼ã‚’ã™ã‚‹ãŸã‚ã®ãƒã‚§ãƒƒã‚¯ãŒè¡Œã‚れる。 +.TP +\fB\-bs\fR +ソースパッケージã ã‘をビルドã™ã‚‹ã€‚ +.PP +ã•ã‚‰ã«ã€ä»¥ä¸‹ã®ã‚ªãƒ—ションãŒåˆ©ç”¨å¯èƒ½ã§ã‚ã‚‹: +.TP +.BI \-\-buildroot " DIRECTORY" +パッケージビルド時㫠BuildRoot ã‚¿ã‚°ã‚’ +.I DIRECTORY +ディレクトリã«ä¸Šæ›¸ãã™ã‚‹ã€‚ +.TP +\fB\-\-clean\fR +パッケージãŒä½œæˆã•ã‚ŒãŸå¾Œã«ãƒ“ルドツリーを削除ã™ã‚‹ã€‚ +.TP +\fB\-\-nobuild\fR +何ã®ãƒ“ルドも実行ã—ãªã„。spec ファイルã®æ¤œæŸ»ã‚’è¡Œã†å ´åˆã«ä¾¿åˆ©ã§ã‚る。 +.TP +\fB\-\-rmsource\fR +ビルド後ã«ã‚½ãƒ¼ã‚¹ã‚’削除ã™ã‚‹ +(å˜ç‹¬ã§ä½¿ç”¨ã—ã¦ã‚‚よã„。例: "\fBrpmbuild \-\-rmsource foo.spec\fR")。 +.TP +\fB\-\-rmspec\fR +ビルド後㫠spec ファイルを削除ã™ã‚‹ã€‚ +(å˜ç‹¬ã§ä½¿ç”¨ã—ã¦ã‚‚よã„。例: "\fBrpmbuild \-\-rmspec foo.spec\fR")。 +.TP +\fB\-\-short\-circuit\fR +指定ã•ã‚ŒãŸæ®µéšŽã¸ç›´æŽ¥ã™ã™ã‚€(ã™ãªã‚ã¡ã€æŒ‡å®šã•ã‚ŒãŸæ®µéšŽã¾ã§ã®å…¨ã¦ã®æ®µéšŽãŒ +飛ã°ã•ã‚Œã‚‹)。 +.B \-bc +㨠+.B \-bi +(訳注: +.B \-tc +㨠+.BR \-ti ã‚‚) +ã§ã®ã¿ä½¿ç”¨ã§ãる。 +.TP +\fB\-\-sign\fR +パッケージ㫠GPG ç½²åを埋ã‚込む。 +ã“ã®ç½²åã¯ã€ãƒ‘ッケージã®å‡ºæ‰€ã¨å®Œå…¨æ€§ã‚’検証ã™ã‚‹ã®ã«ç”¨ã„ã‚‹ã“ã¨ãŒã§ãる。 +設定ã®è©³ç´°ã«ã¤ã„ã¦ã¯ +.BR rpm (8) +ã®ã€ŒGPG ç½²åã€ã®ç¯€ã‚’å‚ç…§ã®ã“ã¨ã€‚ +.TP +.BI \-\-target " PLATFORM" +パッケージビルド時㫠+.I PLATFORM +ã‚’ +.B arch-vendor-os +ã¨è§£é‡ˆã—ã€ãã‚Œã«å¿œã˜ã¦ãƒžã‚¯ãƒ­ +.BR %_target , +.BR %_target_arch , +.B %_target_os +を設定ã™ã‚‹ã€‚ +.SS ビルドã¨å†ã‚³ãƒ³ãƒ‘イルã®ã‚ªãƒ—ション +rpm を使ã£ã¦ãƒ“ルドã™ã‚‹ã«ã¯ã€ä»–ã«ã‚‚ 2 ã¤ã®ã‚„ã‚Šæ–¹ãŒã‚る。 +.RS 0.2i +.PP +.BI "rpmbuild \-\-rebuild|\-\-recompile" " SOURCEPKG ..." +.RE +.PP +ã“ã®æ–¹æ³•ã§èµ·å‹•ã•ã‚ŒãŸå ´åˆã€ +.B rpmbuild +ã¯æŒ‡å®šã•ã‚ŒãŸã‚½ãƒ¼ã‚¹ãƒ‘ッケージをインストールã—〠+準備ã€ã‚³ãƒ³ãƒ‘イルã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’è¡Œã†ã€‚ +ã•ã‚‰ã«ã€ +.B \-\-rebuild +ã®å ´åˆã€æ–°ãŸãªãƒã‚¤ãƒŠãƒªãƒ‘ッケージをビルドã™ã‚‹ã€‚ビルドã‹å®Œäº†ã—ãŸã‚‰ +ビルドディレクトリ㯠+.RB ( \-\-clean +を指定ã—ãŸå ´åˆã¨åŒæ§˜ã«)削除ã•ã‚Œã€ +パッケージã®ã‚½ãƒ¼ã‚¹ã¨ spec ファイルも削除ã•ã‚Œã‚‹ã€‚ +.SS "SHOWRC" +コマンド +.RS .02i +.PP +.B "rpmbuild \-\-showrc" +.RE +.PP +㯠+.B rpmbuild +ãŒä½¿ã†è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã€ +.I rpmrc +㨠+.I macros +ã§ç¾åœ¨ã‚»ãƒƒãƒˆã•ã‚Œã¦ã„るオプションã™ã¹ã¦ã®å€¤ã‚’表示ã™ã‚‹ã€‚ +.SH ファイル +.SS "rpmrc ã®è¨­å®š" +.nf +\fI/usr/lib/rpm/rpmrc\fR +\fI/usr/lib/rpm/redhat/rpmrc\fR +\fI/etc/rpmrc\fR +\fI~/.rpmrc\fR +.fi +.SS マクロã®è¨­å®š +.nf +\fI/usr/lib/rpm/macros\fR +\fI/usr/lib/rpm/redhat/macros\fR +\fI/etc/rpm/macros\fR +\fI~/.rpmmacros\fR +.fi +.SS データベース +.nf +\fI/var/lib/rpm/Basenames\fR +\fI/var/lib/rpm/Conflictname\fR +\fI/var/lib/rpm/Dirnames\fR +\fI/var/lib/rpm/Filemd5s\fR +\fI/var/lib/rpm/Group\fR +\fI/var/lib/rpm/Installtid\fR +\fI/var/lib/rpm/Name\fR +\fI/var/lib/rpm/Packages\fR +\fI/var/lib/rpm/Providename\fR +\fI/var/lib/rpm/Provideversion\fR +\fI/var/lib/rpm/Pubkeys\fR +\fI/var/lib/rpm/Removed\fR +\fI/var/lib/rpm/Requirename\fR +\fI/var/lib/rpm/Requireversion\fR +\fI/var/lib/rpm/Sha1header\fR +\fI/var/lib/rpm/Sigmd5\fR +\fI/var/lib/rpm/Triggername\fR +.fi +.SS 一時ファイル +\fI/var/tmp/rpm*\fR +.SH 関連項目 +.BR popt (3), +.BR rpm2cpio (8), +.BR gendiff (1), +.BR rpm (8), +.nf + +.UR http://www.rpm.org/ +.B http://www.rpm.org/ +.UE +.fi +.SH 著者 +.nf +Marc Ewing +Jeff Johnson +Erik Troan +.fi diff --git a/doc/ja/rpmgraph.8 b/doc/ja/rpmgraph.8 new file mode 100644 index 0000000..9b29642 --- /dev/null +++ b/doc/ja/rpmgraph.8 @@ -0,0 +1,74 @@ +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2, or (at your option) +.\" any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program; if not, write to the Free Software +.\" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +.\" USA. +.\" +.\" Japanese Version Copyright (C) 2003 System Design and Research +.\" Institute Co.,Ltd. All rights reserved. +.\" +.\" Translated 14 March 2003 by +.\" System Design and Research Institute Co.,Ltd. +.\" +.\"WORD: directed graph 有å‘グラフ +.\"WORD: patrial order åŠé †åº +.\"WORD: topological sort トãƒãƒ­ã‚¸ã‚«ãƒ«ãƒ»ã‚½ãƒ¼ãƒˆ +.\" +.TH "RPMGRAPH" "8" "30 June 2002" "Red Hat, Inc." +.SH åå‰ +rpmgraph \- RPM パッケージã®ä¾å­˜ã‚°ãƒ©ãƒ•ã®è¡¨ç¤º +.SH æ›¸å¼ +.B rpmgraph +.I "PACKAGE_FILE ..." +.SH 説明 +.B rpmgraph +ã¯ãƒ‘ッケージã®ä¾å­˜ã‚°ãƒ©ãƒ•ã‚’生æˆã™ã‚‹ãŸã‚ã« +.I PACKAGE_FILE +を使用ã™ã‚‹ã€‚引数 +.I PACKAGE_FILE +ã®ãã‚Œãžã‚ŒãŒèª­ã¿è¾¼ã¾ã‚Œã€rpm ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¸ã¨è¿½åŠ ã•ã‚Œã‚‹ã€‚ +トランザクションã®è¦ç´ ã¯ãƒˆãƒãƒ­ã‚¸ã‚«ãƒ«ãƒ»ã‚½ãƒ¼ãƒˆã‚’使ã£ã¦åŠé †åºé–¢ä¿‚ã‚’æŒã¤ã€‚ +åŠé †åºã§é †åºä»˜ã‘ã•ã‚ŒãŸè¦ç´ ã¯æ¨™æº–出力ã«è¡¨ç¤ºã•ã‚Œã‚‹ã€‚ +.PP +ä¾å­˜ã‚°ãƒ©ãƒ•ã®ãƒŽãƒ¼ãƒ‰ã¯ãƒ‘ッケージåã§ã€æœ‰å‘グラフã®è¾ºã¯å„ノードã®è¦ªã‚’示ã™ã€‚ +親ノードã®å®šç¾©ã¯ã€ãƒ‘ッケージã®ä¾å­˜é–¢ä¿‚を使ã£ã¦åŠé †åºé–¢ä¿‚ã§é †åºä»˜ã‘ã•ã‚ŒãŸ +パッケージã®æœ€å¾Œã®å…ˆç¥–ã§ã‚る。 +ã“ã‚Œã¯ã€ä¸Žãˆã‚‰ã‚ŒãŸãƒ‘ッケージã®è¦ªãŒã€ãã®ãƒ‘ッケージã®æœ€å¾Œã®å¿…è¦æ¡ä»¶ã¨ãªã‚‹ +ã“ã¨ã‚’æ„味ã™ã‚‹ã€‚ +.PP +出力㯠+.BR dot (1) +ã®æœ‰å‘グラフフォーマットã§ã€ +.B graphviz +パッケージã«å«ã¾ã‚Œã‚‹ã‚°ãƒ©ãƒ•ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ +.B dotty +を使ã£ã¦è¡¨ç¤ºã—ãŸã‚Šå°åˆ·ã—ãŸã‚Šã§ãる。 +.B rpmgraph +固有ã®ã‚ªãƒ—ションã¯ãªã〠+.B rpm +関連ツールã§å…±é€šã®ã‚ªãƒ—ションã ã‘ã§ã‚る。 +ç¾æ™‚点ã§ä½•ãŒå®Ÿè£…ã•ã‚Œã¦ã„ã‚‹ã‹ã«ã¤ã„ã¦ã¯ã€ +.B rpmgraph +ã®ä½¿ç”¨æ–¹æ³•ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸(訳注: "rpmgraph \-\-help")ã‚’å‚ç…§ã®ã“ã¨ã€‚ +.SH 関連項目 +.BR dot "(1), " dotty "(1)," +.UR http://www.graphviz.org/ +.B http://www.graphviz.org/ +.UE +.SH 著者 +Jeff Johnson diff --git a/doc/ko/rpm.8 b/doc/ko/rpm.8 new file mode 100644 index 0000000..03152d1 --- /dev/null +++ b/doc/ko/rpm.8 @@ -0,0 +1,355 @@ +.\" rpm - Red Hat Package Manager +.TH rpm 8 "1996ë…„ 7ì›” 15ì¼" "레드햇 소프트웨어" "레드햇 리눅스" +.SH ì´ë¦„ +rpm \- 레드햇 패키지 ê´€ë¦¬ìž +.SH 개요 +\fBrpm\fP [옵션들] +.SH 설명 +\fBrpm\fP ì€ ê°•ë ¥í•œ \fI패키지 관리ìž\fP 로서 +ê°ê°ì˜ 소프트웨어 패키지를 만들고 설치하고 질문하고 ê²€ì¦í•˜ê³  갱신하며 +제거할 수 있다. +\fI패키지\fP 란 설치할 í™”ì¼ë“¤ê³¼ ì´ë¦„, 버전, 설명 ë“±ì„ +í¬í•¨í•˜ëŠ” 패키지 정보를 지닌 저장 í™”ì¼ì´ë‹¤. + +기본ì ì¸ 7 가지 ë™ìž‘ 모드가 있으며 ê°ê° 다른 ì˜µì…˜ë“¤ì„ ê°–ëŠ”ë‹¤. +\fI설치\fP, \fI질문\fP, +\fIê²€ì¦\fP, \fI서명 확ì¸\fP, \fI제거\fP, \fI제작\fP, +그리고 \fIë°ì´í„°ë² ì´ìŠ¤ 재건설\fP ì´ ë°”ë¡œ 그것ì´ë‹¤. + +설치 모드: +.br +.I "\fB rpm \-i [설치옵션] <패키지 í™”ì¼>+\fP" +.br +질문 모드: +.br +.I "\fB rpm \-q [질문옵션]\fP" +.br +ê²€ì¦ ëª¨ë“œ: +.br +.I "\fB rpm \-V|\-y|\-\-verify [ê²€ì¦ì˜µì…˜]\fP" +.br +서명 í™•ì¸ ëª¨ë“œ: +.br +.I "\fB rpm \-\-checksig <패키지화ì¼>+\fP" +.br +제거 모드: +.br +.I "\fB rpm \-e <패키지명>+\fP" +.br +제작 모드: +.br +.I "\fB rpm \-b\fIO\fB [제작옵션] <패키지스펙>+\fP" +.br + +.SH ì¼ë°˜ì  옵션 +ë‹¤ìŒ ì˜µì…˜ë“¤ì€ ê°ê¸° 다른 모드ì—ì„œë„ ì‚¬ìš©ê°€ëŠ¥í•˜ë‹¤. +.IP "\fB\-vv\fP" +아주 ìžì„¸í•˜ê²Œ 디버깅 정보를 출력한다. +.IP "\fB\-\-keep\-temps\fP" +ìž„ì‹œ í™”ì¼ì„ 지우지 않는다. (/tmp/rpm\-*). rpm ì„ ë””ë²„ê¹…í•  때만 +주로 사용한다. +.IP "\fB\-\-quiet\fP" +최대한 ì¶œë ¥ì„ ìžì œí•˜ë©° 오로지 ì—러 메세지만 출력한다. +.IP "\fB\-\-help\fP" +좀 ë” ê¸´ 사용법 설명서를 출력한다. +.IP "\fB\-\-version\fP" +사용 ì¤‘ì¸ rpm ì˜ ë²„ì „ì„ í•œ 줄로 표시한다. +.IP "\fB\-\-rcfile <í™”ì¼>\fP" +\fB/etc/rpmrc\fP ë˜ëŠ” \fB$HOME/.rpmrc\fP ì„ ì‚¬ìš©í•˜ì§€ ì•Šê³  +\fB\fP ì„ ì‚¬ìš©í•˜ë„ë¡ í•œë‹¤. +.IP "\fB\-\-root \fP" +모든 ë™ìž‘ì— ëŒ€í•˜ì—¬ 최ìƒìœ„ 디렉토리를 주어진 디렉토리로 설정하고 작업한다. +예를 들어 설치시 주어진 디렉토리를 / ë¼ê³  ìƒê°í•˜ê³  ê·¸ê²ƒì„ ê¸°ì¤€ìœ¼ë¡œ +설치해나간다. + +.SH 설치 옵션 +rpm 설치 ëª…ë ¹ì˜ ì¼ë°˜ì ì¸ 형태는 다ìŒê³¼ 같다. +.PP + \fBrpm \-i [설치옵션들] <패키지화ì¼>+\fP +.PP +.IP "\fB\-\-force\fP" +\-\-replacepkgs, \-\-replacefiles, \-\-oldpackage 를 ëª¨ë‘ ì‚¬ìš©í•œ 것과 +같다. +.IP "\fB\-h, \-\-hash\fP" +패키지를 í’€ ë•Œ 해쉬마í¬(#)를 표시한다. ì´ ê°¯ìˆ˜ëŠ” 50 ê°œì´ë‹¤. +좀 ë” ë‚˜ì€ ì¶œë ¥ì„ ìœ„í•´ì„œëŠ” \fB\-v\fP 를 함께 사용하ë¼. +.IP "\fB\-\-oldpackage\fP" +새로운 패키지를 지우고 ë” ì˜ˆì „ 패키지로 êµì²´í•  ë•Œ 사용한다. +.IP "\fB\-\-percent\fP" +패키지 í™”ì¼ì„ í’€ ë•Œ í¼ì„¼íŠ¸ 표시를 한다. 다른 ë„구로부터 rpm ì„ ì´ìš©í•  ë•Œ +사용할 목ì ìœ¼ë¡œ 만들어졌다. +.IP "\fB\-\-replacefiles\fP" +ì´ë¯¸ ì„¤ì¹˜ëœ ë‹¤ë¥¸ íŒ¨í‚¤ì§€ì˜ í™”ì¼ì„ ë®ì–´ì“°ë©´ì„œë¼ë„ 패키지를 강제로 설치한다. +.IP "\fB\-\-replacepkgs\fP" +패키지가 ì´ë¯¸ 설치ë˜ì–´ 있다 하ë”ë¼ë„ 다시 설치한다. +.IP "\fB\-\-root \fI<디렉토리>\fP" +\fI<디렉토리>\fP를 루트로 하는 ì‹œìŠ¤í…œì— ì„¤ì¹˜ë¥¼ 수행한다. +ë°ì´í„°ë² ì´ìŠ¤ëŠ” \fI<디렉토리>\fP ë°‘ì—ì„œ 갱신ë˜ê³  \fIpre\fP ë˜ëŠ” \fIpost\fP +스í¬ë¦½íŠ¸ëŠ” \fI<디렉토리>\fPë¡œ chroot() í•œ 후 실행ë¨ì„ ì˜ë¯¸í•œë‹¤. +.IP "\fB\-\-noscripts\fP" +preinstall, postinstall 스í¬ë¦½íŠ¸ë¥¼ 실행하지 않는다. +.IP "\fB\-\-excludedocs\fP" +문서ë¼ê³  표시ë˜ì–´ 있는 í™”ì¼(맨페ì´ì§€ì™€ texinfo 문서)ì€ ì„¤ì¹˜í•˜ì§€ 않는다. +.IP "\fB\-\-includedocs\fP" +문서 í™”ì¼ì„ í¬í•¨í•œë‹¤. ì´ ì˜µì…˜ì€ rpmrc í™”ì¼ì— \fIexcludedocs: 1\fP ì´ë¼ëŠ” +ê²ƒì´ ëª…ì‹œë˜ì–´ ìžˆì„ ë•Œë§Œ 필요하다. +.IP "\fB\-\-nodeps\fP" +패키지를 설치하기 ì „ì— ì˜ì¡´ì„±ì„ 검사하지 않는다. +.IP "\fB\-\-test\fP" +패키지를 실제로 설치하지는 ì•Šê³  ì¶©ëŒ ì‚¬í•­ì´ ìžˆëŠ”ì§€ ì ê²€í•˜ê³  보고한다. +.IP "\fB\-U, \-\-upgrade\fP" +현재 설치ë˜ì–´ 있는 패키지를 새로운 ë²„ì „ì˜ RPM으로 업그레ì´ë“œí•˜ë¼. +ì¸ìŠ¤í†¨ê³¼ 같지만 예전 ë²„ì „ì˜ ê²ƒì´ ìžë™ìœ¼ë¡œ 지워진다는 ê²ƒì´ ë‹¤ë¥´ë‹¤. + + + +.SH 질문 옵션 +rpm 질문 ì˜µì…˜ì˜ ì¼ë°˜ì ì¸ 형ì‹ì€ 다ìŒê³¼ 같다. +.PP + \fBrpm \-q [질문옵션]\fP +.PP +ì—¬ëŸ¬ë¶„ì€ íŒ¨í‚¤ì§€ ì •ë³´ê°€ í‘œì‹œë  í˜•ì‹ì„ 결정해주어야 한다. +\fB\-\-queryformat\fP 옵션 ë’¤ì— í˜•ì‹ ë¬¸ìžì—´ì„ ì ì–´ì£¼ë©´ ëœë‹¤. + +질문 형ì‹ì€ 표준 \fBprintf(3)\fP 형ì‹ì„ 약간 변형한 것ì´ë‹¤. +형ì‹ì€ ì •ì  ë¬¸ìžì—´ê³¼( 개행문ìž, 탭, 그리고 다른 특수문ìžì— +대한 표준 C ë¬¸ìž ì´ìŠ¤ì¼€ì´í”„ 표기) \fBprintf(3)\fP 형ì‹ì§€ì •ìžë¡œ 구성ë˜ì–´ +있다. +\fBrpm\fPì€ ì´ë¯¸ 출력 형태를 알고 있으므로 타입 지정ìžëŠ” ìƒëžµí•˜ê³  +\fB{}\fP 문ìžë¡œ 묶어서 í—¤ë” íƒœê·¸ì˜ ì´ë¦„으로 바꾸어 주어야 한다. +태그명 중 \fBRPMTAG_\fP ë¶€ë¶„ì€ ìƒëžµí•´ì•¼ 하며 태그명 ì•žì—는 \fB\-\fP 문ìžë¥¼ +ì ì–´ì£¼ì–´ì•¼ 한다. + +예를 들어 질문 ëŒ€ìƒ íŒ¨í‚¤ì§€ì˜ ì´ë¦„만 ì¶œë ¥í•˜ê³ ìž í•˜ëŠ” 경우 ì—¬ëŸ¬ë¶„ì€ +\fB%{NAME}\fP ì„ í˜•ì‹ ë¬¸ìžì—´ë¡œ 사용해야 한다. 패키지명과 ë°°í¬íŒ 정보를 +ë‘ ê°œì˜ ì¹¼ëŸ¼ìœ¼ë¡œ í‘œì‹œí•˜ê³ ìž í•  때는 \fB%\-30{NAME}%{DISTRIBUTION}\fP ë¼ê³  +ì ëŠ”다. + +\fBrpm\fP ì€ \fB\-\-querytags\fP ì˜µì…˜ì„ ì£¼ë©´ ì¸ì‹í•˜ê³  있는 모든 íƒœê·¸ì˜ +목ë¡ì„ 보여준다. + +질문 옵션ì—는 2 가지 세트가 있다: 패키지 ì„ íƒê³¼ ì •ë³´ ì„ íƒ + +패키지 ì„ íƒ ì˜µì…˜: +.br +.IP "\fB\fI<패키지명>\fP" +\fB\fI\fPë¼ëŠ” ì´ë¦„ì˜ íŒ¨í‚¤ì§€ì— ëŒ€í•œ 질문를 수행한다. +.IP "\fB\-a\fP" +모든 íŒ¨í‚¤ì§€ì— ëŒ€í•˜ì—¬ 질문를 수행한다. +.IP "\fB\-whatrequires \fI<기능>\fP" +제대로 ìž‘ë™í•˜ê¸° 위해서는 \fI<기능>\fP ì„ í•„ìš”ë¡œ 하는 모든 íŒ¨í‚¤ì§€ì— ëŒ€í•˜ì—¬ +ì§ˆë¬¸ì„ ìˆ˜í–‰í•œë‹¤. +.IP "\fB\-whatprovides \fI<ê°€ìƒ>\fP" +\fI\fP ê¸°ëŠ¥ì„ ì œê³µí•˜ëŠ” 모든 íŒ¨í‚¤ì§€ì— ëŒ€í•˜ì—¬ ì§ˆë¬¸ì„ ìˆ˜í–‰í•œë‹¤. +.IP "\fB\-f \fI<í™”ì¼>\fP" +\fI<í™”ì¼>\fP를 í¬í•¨í•˜ëŠ” íŒ¨í‚¤ì§€ì— ëŒ€í•˜ì—¬ ì§ˆë¬¸ì„ ìˆ˜í–‰í•œë‹¤. +.IP "\fB\-F\fP" +\fB\-f\fP 와 같지만 í™”ì¼ëª…ì„ í‘œì¤€ ìž…ë ¥ì—ì„œ ì½ëŠ”다. +.IP "\fB\-p \fI<패키지화ì¼>\fP" +ì„¤ì¹˜ëœ ë˜ëŠ” 설치ë˜ì§€ ì•Šì€ \fI<패키지화ì¼>\fP ì— ëŒ€í•˜ì—¬ ì§ˆë¬¸ì„ ìˆ˜í–‰í•œë‹¤. +.IP "\fB\-P\fP" +\fB\-p\fP 와 같지만 패키지 í™”ì¼ëª…ì„ í‘œì¤€ ìž…ë ¥ì—ì„œ ì½ëŠ”다. + +.P +ì •ë³´ ì„ íƒ ì˜µì…˜: +.br +.IP "\fB\-i\fP" +패키지 ì´ë¦„, 버전, 설명 ë“±ì˜ ì •ë³´ë¥¼ 출력한다. +만약 \fB\-\-queryformat\fP ì´ ì£¼ì–´ì ¸ 있다면 ê·¸ê²ƒì„ ì´ìš©í•˜ì—¬ 출력한다. +.IP "\fB\-R\fP" +현재 패키지지가 ì˜ì¡´í•˜ê³  있는 패키지 목ë¡ì„ 보여준다. +(\fB\-\-requires\fP ê³¼ ê°™ìŒ) +.IP "\fB\-\-provides\fP" +패키지가 제공하는 ê¸°ëŠ¥ì„ ë³´ì—¬ì¤€ë‹¤. +.IP "\fB\-l\fP" +패키지 ì•ˆì˜ í™”ì¼ì„ 보여준다. +.IP "\fB\-s\fP" +패키지 ì•ˆì— ë“  í™”ì¼ì˜ \fIìƒíƒœ\fP를 보여준다.(\fB\-l\fPì€ í¬í•¨) +ê° í™”ì¼ì˜ ìƒíƒœëŠ” \fInormal\fP(ì •ìƒ), \fInot installed\fP(설치ë˜ì§€ ì•ŠìŒ), +\fIreplaced\f(다른 것으로 êµì²´ë¨)ì˜ ê°’ì„ ê°–ëŠ”ë‹¤. +.IP "\fB\-d\fP" +문서 í™”ì¼ë§Œ 보여준다.(\fB\-l\fPì€ í¬í•¨) +.IP "\fB\-c\fP" +설정 í™”ì¼ë§Œ 보여준다.(\fB\-l\fPì€ í¬í•¨) +.IP "\fB\-\-scripts\fP" +설치, 제거 ê³¼ì •ì— ì‚¬ìš©ë˜ëŠ” 쉘 스í¬ë¦½íŠ¸ê°€ 있다면 ê·¸ ë‚´ìš©ì„ ì¶œë ¥í•œë‹¤. +.IP "\fB\-\-dump\fP" +다ìŒê³¼ ê°™ì€ í™”ì¼ ì •ë³´ë¥¼ ë¤í”„한다: 경로 í¬ê¸° 수정ì¼, MD5 ì²´í¬ì„¬, 모드, +소유ìž, 그룹, 설정 í™”ì¼ ì—¬ë¶€, 문서 í™”ì¼ ì—¬ë¶€, rdev, 심볼릭 ë§í¬ 여부. +최소한 \fB\-l\fP, \fB\-c\fP, \fB\-d\fP ì´ë“¤ 옵션 중 하나가 사용ë˜ì–´ì•¼ +한다. + +.SH ê²€ì¦ ì˜µì…˜ +rpm ê²€ì¦ ì˜µì…˜ì˜ ì¼ë°˜ì ì¸ 형태는 다ìŒê³¼ 같다. +.PP + \fBrpm \-V|\-y|\-\-verify [ê²€ì¦ì˜µì…˜]\fP +.PP +설치ë˜ì–´ 있는 í™”ì¼ë“¤ì— 대하여 rpm ë°ì´í„°ë² ì´ìŠ¤ì— ì €ìž¥ëœ ë‚´ìš©ê³¼ ì˜¤ë¦¬ì§€ë„ +íŒ¨í‚¤ì§€ì˜ ë‚´ìš©ì„ ë¹„êµí•œë‹¤. ê²€ì¦ ë‚´ìš©ì€ í¬ê¸°, MD5 ì²´í¬ì„¬, í¼ë¯¸ì…˜, 타입, 소유ìž, +그룹 등ì´ë‹¤. ì°¨ì´ì ì´ 발견ë˜ë©´ 출력한다. 패키지 지시 ì˜µì…˜ì€ íŒ¨í‚¤ì§€ 질문 +옵션ì—서와 같다. + +출력 형ì‹ì€ 8 ìžì˜ 문ìžì—´ì´ë‹¤. "\fBc\fP"ì€ ì„¤ì • í™”ì¼ì„ ì˜ë¯¸í•˜ë©° 그리고 +í™”ì¼ëª…ì´ ë‚˜íƒ€ë‚œë‹¤. ê°ê°ì˜ 8 ê°œ 문ìžëŠ” RPM ë°ì´í„°ë² ì´ìŠ¤ì— ì €ìž¥ëœ ì†ì„±ê³¼ 비êµí•œ +결과를 나타낸다. "." (피리어드) 문ìžëŠ” ì´ìƒì—†ìŒì„ 나타낸다. ë¹„êµ ê²°ê³¼ 문제ì ì´ +발견ë˜ë©´ 다ìŒê³¼ ê°™ì€ ë¬¸ìžê°€ 나타난다. + +.IP "\fB5\fP" +MD5 ì²´í¬ì„¬ +.IP "\fBS\fP" +í™”ì¼ í¬ê¸° +.IP "\fBL\fP" +심볼릭 ë§í¬ +.IP "\fBT\fP" +ê°±ì‹ ì¼ +.IP "\fBD\fP" +장치 +.IP "\fBU\fP" +ì‚¬ìš©ìž +.IP "\fBG\fP" +그룹 +.IP "\fBM\fP" +í¼ë¯¸ì…˜ê³¼ í™”ì¼ íƒ€ìž…ì„ í¬í•¨í•œ 모드 + +.SH 서명 í™•ì¸ +rpm 서명 í™•ì¸ ëª…ë ¹ì€ ë‹¤ìŒê³¼ 같다. +.PP + \fBrpm \-\-checksig <패키지화ì¼>+\fP +.PP +íŒ¨í‚¤ì§€ì˜ ì˜¤ë¦¬ì§€ë„ ì—¬ë¶€ë¥¼ 가려내기 위하여 패키지 ì•ˆì— ë“  PGP ì„œëª…ì„ ì ê²€í•œë‹¤. +PGP 설정 정보는 /etc/rpmrc ì—ì„œ ì½ì–´ì˜¨ë‹¤. +ì„¸ë¶€ì‚¬í•­ì€ "PGP 서명" ì„¹ì…˜ì„ ë³´ê¸° 바란다. + +.SH 제거 옵션 +rpm 제거 ëª…ë ¹ì˜ ì¼ë°˜ì ì¸ 형태는 다ìŒê³¼ 같다. +.PP + \fB rpm \-e <패키지화ì¼>+\fP +.PP +.IP "\fB\-\-noscripts\fP" +preunistall, postuninstall 스í¬ë¦½íŠ¸ë¥¼ 실행하지 않는다. +.IP "\fB\-\-nodeps\fP" +패키지 제거시 ì˜ì¡´ì„±ì„ 검사하지 않는다. +.IP "\fB\-\-test\fP" +실제로 패키지를 제거하는 ê²ƒì€ ì•„ë‹ˆê³  테스트해본다. +\fB\-vv\fP 옵션. + +.SH 제작 옵션 +rpm 제작 ëª…ë ¹ì˜ ì¼ë°˜ì  형ì‹ì€ 다ìŒê³¼ 같다. +.PP + \fBrpm \-b\fIO\fP [제작옵션] <패키지 스펙>+\fP +.PP +\fB\-b\fIO\fR ì€ ì œìž‘ 단계와 제작할 패키지를 나타내는 것으로서 ë‹¤ìŒ ì¤‘ +í•˜ë‚˜ì˜ ê°’ì„ ê°–ëŠ”ë‹¤: + +.IP "\fB\-bp\fP" +스펙 í™”ì¼ì˜ "%prep" 단계를 실행한다. 보통 소스를 풀고 패치를 가하는 ìž‘ì—…ì´ë‹¤. +.IP "\fB\-bl\fP" +"ëª©ë¡ ì ê²€"ì„ í•œë‹¤. "%files" ì„¹ì…˜ì€ í™•ìž¥ 매í¬ë¡œì´ë‹¤. ì´ í™”ì¼ë“¤ì´ 존재하는지 +여부를 알아본다. +.IP "\fB\-bc\fP" +"%build" 단계를 수행한다.( prep 단계를 í•œ 후 ) +보통 make ì— í•´ë‹¹í•˜ëŠ” ì¼ì„ 해낸다. +.IP "\fB\-bi\fP" +"%install" 단계를 수행한다.( prep, build 단계를 거친 후 ) +보통 make install ì— í•´ë‹¹í•˜ëŠ” ì¼ì„ 한다. +.IP "\fB\-bb\fP" +ë°”ì´ë„ˆë¦¬ 패키지를 만든다.( prep, build, install 단계를 수행한 후 ) +.IP "\fB\-ba\fP" +ë°”ì´ë„ˆë¦¬ì™€ 소스 패키지를 만든다.( prep, build, install 단계를 수행한 후 ) +.PP +ë‹¤ìŒ ì˜µì…˜ë„ ì‚¬ìš©ê°€ëŠ¥í•˜ë‹¤: +.IP "\fB\-\-short\-circuit\fP" +중간 단계를 거치지 ì•Šê³  지정한 단계로 ì§ì ‘ ì´ë™í•œë‹¤. +\fB\-bc\fP 와 \fB\-bi\fP하고만 쓸 수 있다. +.IP "\fB\-\-timecheck\fP" +"시간ì ê²€"ì„ 0 ( 불가능 )으로 설정한다. ì´ ê°’ì€ rpmrc ì—ì„œ "timecheck:" ë¡œ +설정할 수 있다. 시간ì ê²€ê°’ì€ ì´ˆë¡œ 표시ë˜ëŠ”ë° í™”ì¼ì´ 패키징ë˜ëŠ” 걸리는 최대 +ì‹œê°„ì„ ì •í•œë‹¤. ì‹œê°„ì„ ì´ˆê³¼í•˜ëŠ” í™”ì¼ë“¤ì— 대하여 경고 메시지가 출력ëœë‹¤. +.IP "\fB\-\-clean\fP" +패키지를 만든 후 build 디렉토리를 지운다. +.IP "\fB\-\-test\fP" +ì–´ë– í•œ build 단계를 거치지 않는다. +스펙 í™”ì¼ì„ 테스트할 ë•Œ 유용하다. +.IP "\fB\-\-sign\fP" +패키지 ì•ˆì— PGP ì„œëª…ì„ ë„£ëŠ”ë‹¤. 패키지를 누가 만들었는지 확ì¸í•  수 있다. +/etc/rpmrc ì— ëŒ€í•œ ì„¤ëª…ì€ PGP 서명 ì„¹ì…˜ì„ ì½ì–´ë³´ë¼. + +.SH 재제작, ìž¬ì»´íŒŒì¼ ì˜µì…˜ + +단 ë‘ ê°€ì§€ë§Œ ìžˆì„ ë¿ì´ë‹¤: + +.I "\fBrpm \-\-recompile <소스패키지화ì¼>+\fP" + +.I "\fBrpm \-\-rebuild <소스패키지화ì¼>+\fP" + +rpm ì€ ì£¼ì–´ì§„ 소스 패키지를 설치하고 prep, 컴파ì¼, 설치를 해준다. +\fB\-\-rebuild\fP는 새로운 ë°”ì´ë„ˆë¦¬ íŒ¨í‚¤ì§€ë„ ë§Œë“¤ì–´ì¤€ë‹¤. +ì œìž‘ì„ ë§ˆì¹˜ë©´ build 디렉토리는 \fB\-\-clean\fP 옵션ì—서와 마찬가지로 +지워진다. 패키지로부터 나온 소스와 스펙화ì¼ì€ ì‚­ì œëœë‹¤. + +.SH ê¸°ì¡´ì˜ RPMì— ì„œëª…í•˜ê¸° + +.I "\fBrpm \-\-resign <ë°”ì´ë„ˆë¦¬íŒ¨í‚¤ì§€í™”ì¼>+\fP" + +패키지 í™”ì¼ì— 새로운 ì„œëª…ì„ í•œë‹¤. ê¸°ì¡´ì˜ ì„œëª…ì€ ì‚­ì œëœë‹¤. + +.SH PGP 서명 + +서명 ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ê¸° 위해서는 PGP 를 사용할 수 있어야 한다.( ì—¬ëŸ¬ë¶„ì˜ íŒ¨ìŠ¤ +걸린 디렉토리 설치ë˜ì–´ 있어야 한다 ) 그리고 RPM 공개키를 í¬í•¨í•˜ëŠ” 공개키 ë§ì„ +ì°¾ì„ ìˆ˜ 있어야 한다. 기본ì ìœ¼ë¡œ RPMì€ PGPPATHì—ì„œ 지시하는 PGP 기본 ì„¤ì •ì„ +사용한다. PGPê°€ 기본ì ìœ¼ë¡œ 사용하는 키ë§ì„ ê°–ê³  있지 ì•Šì„ ë•ŒëŠ” /etc/rpmrc +í™”ì¼ì— 다ìŒê³¼ ê°™ì´ ì„¤ì •í•´ë‘어야 한다. + +.IP "\fBpgp_path\fP" +/usr/lib/rpm 대신 ì“°ì¼ ê²½ë¡œëª…. ì—¬ëŸ¬ë¶„ì˜ í‚¤ë§ì„ í¬í•¨í•´ì•¼ 한다. +.PP + +ì—¬ëŸ¬ë¶„ì´ ë§Œë“  íŒ¨í‚¤ì§€ì— ì„œëª…ì„ í•˜ë ¤ë©´, ì—¬ëŸ¬ë¶„ì€ ìžì‹ ì˜ 공개키와 비밀키 í•œ ìŒì„ +만들어ë‘어야 한다.( PGP 매뉴얼 참고 ) +/etc/rpmrc ì— ì ëŠ” 것 ë§ê³ ë„ ë‹¤ìŒ ì‚¬í•­ì„ ì¶”ê°€í•´ì•¼ 한다: + +.IP "\fBsignature\fP" +서명 유형. 현재로서는 pgp 만 지ì›ëœë‹¤. +.IP "\fBpgp_name\fP" +ì—¬ëŸ¬ë¶„ì˜ íŒ¨í‚¤ì§€ì— ì„œëª…í•  user ëª…ì„ ì ëŠ”다. +.PP + +패키지 제작시 \-\-sign ì˜µì…˜ì„ ì¶”ê°€í•œë‹¤. +ì—¬ëŸ¬ë¶„ì˜ ìž…ë ¥ì„ ë°›ê³  나면 패키지가 만들어지고 ë™ì‹œì— 서명ëœë‹¤. + +.SH ë°ì´í„°ë² ì´ìŠ¤ 재ìƒì„± 옵션 + +rpm ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 다시 만드는 ëª…ë ¹ì€ ë‹¤ìŒê³¼ 같다. +.PP + \fBrpm \-\-rebuilddb\fP +.PP + +ì´ ëª¨ë“œì™€ 사용ë˜ëŠ” 옵션으로는 \fB-\-dbpath\fP 와 \fB-\-root\fP 둘 ë¿ì´ë‹¤. + +.SH 관련 í™”ì¼ +.nf +/etc/rpmrc +~/.rpmrc +/var/lib/rpm/packages +/var/lib/rpm/pathidx +/var/lib/rpm/nameidx +/tmp/rpm* +.fi +.SH 참고 +.IR glint (8) , +.IR rpm2cpio (8) , +.B http://www.redhat.com/rpm +.nf +.SH ì €ìž +.nf +Marc Ewing +Erik Troan +.fi +.SH ë²ˆì—­ìž +.br +ì´ ë§Œ ìš© +.B +.br +.B " " + diff --git a/doc/ko/rpm2cpio.8 b/doc/ko/rpm2cpio.8 new file mode 100644 index 0000000..76b223b --- /dev/null +++ b/doc/ko/rpm2cpio.8 @@ -0,0 +1,33 @@ +.\" rpm2cpio - Converts Red Hat Package (RPM) to cpio archive +.TH rpm 8 "1995ë…„ 9ì›” 15ì¼" "레드햇 소프트웨어" "레드햇 ìƒìš© 리눅스" +.SH ì´ë¦„ +rpm2cpio \- 레드햇 (RPM) 패키지를 cpio í™”ì¼ë¡œ 변환 +.SH 개요 +\fBrpm2cpio\fP [filename] +.SH 설명 +\fBrpm2cpio\fP 는 .rpm í™”ì¼ëª…ì„ í•˜ë‚˜ 받아들여서 표준출력으로 cpio 저장화ì¼ì„ +출력한다. 만약 아무런 전달ì¸ìˆ˜ê°€ 없다면 표준입력으로부터 rpm í™”ì¼ì„ +받아들ì¸ë‹¤. + +.br +.I "\fBrpm2cpio rpm-1.1-1.i386.rpm\fP" +.br +.I "\fBrpm2cpio < glint-1.0-1.i386.rpm\fP" +.br +.I "\fBrpm2cpio glint-1.0-1.i386.rpm | cpio -dium\fP" + +.SH 참고 +.IR glint (8) , +.IR rpm (8) +.SH ì €ìž +.nf +Erik Troan +.fi + +.SH ë²ˆì—­ìž +.br +ì´ ë§Œ ìš© +.B +.br +.B " " + diff --git a/doc/librpm.doxy.in b/doc/librpm.doxy.in new file mode 100644 index 0000000..440e826 --- /dev/null +++ b/doc/librpm.doxy.in @@ -0,0 +1,1255 @@ +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = @PACKAGE@ + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc/librpm + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +# FULL_PATH_NAMES = YES +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +# STRIP_FROM_PATH = @top_srcdir@/ +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = \ + @top_srcdir@/doc/librpm/Doxyheader \ + @pkginclude_HEADERS@ + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.c \ + *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = @top_srcdir@/doc/manual + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = letter + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = Doxytags + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = @HAVE_DOT@ + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/doc/librpm/Doxyheader b/doc/librpm/Doxyheader new file mode 100644 index 0000000..0401e73 --- /dev/null +++ b/doc/librpm/Doxyheader @@ -0,0 +1,56 @@ +/*! \mainpage librpm API Documentation. + */ +/** \defgroup rpmcli Command Line API. + */ +/** \defgroup rpmbuild Build API. + */ +/** \defgroup rpmrc RPMRC. + */ +/** \defgroup rpmtypes RPM data types. + */ +/** \defgroup rpmts Transaction Set API. + */ +/** \defgroup rpmte Transaction Element API. + */ +/** \defgroup rpmds Dependency Set API. + */ +/** \defgroup rpmfi File Info API. + */ +/** \defgroup rpmfc File Classification API. + */ +/** \defgroup rpmps Problem Set API. + */ +/** \defgroup rpmprob Problem Element API. + */ +/** \defgroup rpmkeyring RPM keyring API. + */ +/** \defgroup rpmmacro Macro API. + */ +/** \defgroup rpmlog Logging API. + */ +/** \defgroup rpmpgp OpenPGP API. + */ +/** \defgroup rpmsq Signal Queue API. + */ +/** \defgroup rpmsw Statistics API. + */ +/** \defgroup signature Signature API. + */ +/** \defgroup header Header API. + */ +/** \defgroup rpmtag RPM Tag API. + */ +/** \defgroup rpmtd RPM Tag Data Container API. + */ +/** \defgroup rpmdb Database API. + */ +/** \defgroup rpmio RPM IO API. + */ +/** \defgroup rpmfileutil File and Path Manipulation API. + */ +/** \defgroup rpmurl URL Manipulation API. + */ +/** \defgroup rpmstring String Manipulation API. + */ +/** \defgroup rpmargv Argument Manipulation API. + */ diff --git a/doc/librpm/html/Doxyheader.html b/doc/librpm/html/Doxyheader.html new file mode 100644 index 0000000..2d1b862 --- /dev/null +++ b/doc/librpm/html/Doxyheader.html @@ -0,0 +1,53 @@ + + + + +rpm: Doxyheader File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
+
Doxyheader File Reference
+
+ + + + diff --git a/doc/librpm/html/Doxyheader_source.html b/doc/librpm/html/Doxyheader_source.html new file mode 100644 index 0000000..0ba66dc --- /dev/null +++ b/doc/librpm/html/Doxyheader_source.html @@ -0,0 +1,50 @@ + + + + +rpm: Doxyheader Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
Doxyheader
+
+ +
+ + + diff --git a/doc/librpm/html/annotated.html b/doc/librpm/html/annotated.html new file mode 100644 index 0000000..56b004b --- /dev/null +++ b/doc/librpm/html/annotated.html @@ -0,0 +1,75 @@ + + + + +rpm: Data Structures + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+ + + + + + + + + + + + + + + + + + + + + + + + +
ARGI_s
pgpPktCdata_s
pgpPktEdata_s
pgpPktKey_u5.5.3
pgpPktKeyV3_s5.5.1
pgpPktKeyV4_sThe version 4 format is similar to the version 3 format except for the absence of a validity period
pgpPktLdata_s
pgpPktOnepass_s5.4
pgpPktPre_u
pgpPktPubkey_s5.1
pgpPktSig_u5.2
pgpPktSigV3_s5.2.2
pgpPktSigV4_s5.2.3
pgpPktSymkey_s5.3
pgpPktTrust_s
pgpPktUid_s
rpmBuildArguments_sDescribe build request
rpmInstallArguments_sDescribe database command line requests
rpmop_sCumulative statistics for an operation
rpmQVKArguments_sDescribe query/verify/signature command line operation
rpmRelocation_sWe pass these around as an array with a sentinel
rpmSignArgs
rpmsw_s
rpmtd_sContainer for rpm tag data (from headers or extensions)
+
+ + + diff --git a/doc/librpm/html/argv_8h.html b/doc/librpm/html/argv_8h.html new file mode 100644 index 0000000..41de9f0 --- /dev/null +++ b/doc/librpm/html/argv_8h.html @@ -0,0 +1,237 @@ + + + + +rpm: argv.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+ +
+
#include <stdio.h>
+#include <rpm/rpmtypes.h>
+
+Include dependency graph for argv.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  ARGI_s

+Typedefs

typedef char ** ARGV_t
typedef char *const ARGV_const_t
typedef int * ARGint_t
typedef struct ARGI_sARGI_t
typedef struct ARGI_s const *const ARGI_const_t
typedef rpmFlags argvFlags

+Enumerations

enum  argvFlags_e { ARGV_NONE = 0, +ARGV_SKIPEMPTY = (1 << 0) + }

+Functions

void argvPrint (const char *msg, ARGV_const_t argv, FILE *fp)
 Print argv array elements.
ARGI_t argiFree (ARGI_t argi)
 Destroy an argi array.
ARGV_t argvNew (void)
 Create an empty argv array.
ARGV_t argvFree (ARGV_t argv)
 Destroy an argv array.
int argiCount (ARGI_const_t argi)
 Return no.
ARGint_t argiData (ARGI_const_t argi)
 Return data from argi array.
int argvCount (ARGV_const_t argv)
 Return no.
ARGV_t argvData (ARGV_t argv)
 Return data from argv array.
int argvCmp (const void *a, const void *b)
 Compare argv arrays (qsort/bsearch).
int argvSort (ARGV_t argv, int(*compar)(const void *, const void *))
 Sort an argv array.
ARGV_t argvSearch (ARGV_const_t argv, const char *val, int(*compar)(const void *, const void *))
 Find an element in an argv array.
int argiAdd (ARGI_t *argip, int ix, int val)
 Add an int to an argi array.
int argvAdd (ARGV_t *argvp, const char *val)
 Add a string to an argv array.
int argvAddNum (ARGV_t *argvp, int val)
 Add a number to an argv array (converting to a string).
int argvAppend (ARGV_t *argvp, ARGV_const_t av)
 Append one argv array to another.
ARGV_t argvSplitString (const char *str, const char *seps, argvFlags flags)
 Split a string into an argv array.
int argvSplit (ARGV_t *argvp, const char *str, const char *seps)
 Split a string into an argv array.
char * argvJoin (ARGV_const_t argv, const char *sep)
 Join an argv array into a string.
+

Detailed Description

+
+

Definition in file argv.h.

+

Typedef Documentation

+ +
+
+ + + + +
typedef struct ARGI_s const* const ARGI_const_t
+
+
+ +

Definition at line 24 of file argv.h.

+ +
+
+ +
+
+ + + + +
typedef struct ARGI_s* ARGI_t
+
+
+ +

Definition at line 23 of file argv.h.

+ +
+
+ +
+
+ + + + +
typedef int* ARGint_t
+
+
+ +

Definition at line 18 of file argv.h.

+ +
+
+ +
+
+ + + + +
typedef char* const ARGV_const_t
+
+
+ +

Definition at line 16 of file argv.h.

+ +
+
+ +
+
+ + + + +
typedef char** ARGV_t
+
+
+ +

Definition at line 15 of file argv.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags argvFlags
+
+
+ +

Definition at line 147 of file argv.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum argvFlags_e
+
+
+
Enumerator:
+ + +
ARGV_NONE  +
ARGV_SKIPEMPTY  +
+
+
+ +

Definition at line 142 of file argv.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/argv_8h__incl.map b/doc/librpm/html/argv_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/argv_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/argv_8h__incl.md5 b/doc/librpm/html/argv_8h__incl.md5 new file mode 100644 index 0000000..59bd137 --- /dev/null +++ b/doc/librpm/html/argv_8h__incl.md5 @@ -0,0 +1 @@ +5fb7c12b5d485f4357157782cc300ca6 \ No newline at end of file diff --git a/doc/librpm/html/argv_8h__incl.png b/doc/librpm/html/argv_8h__incl.png new file mode 100644 index 0000000..a8d064d Binary files /dev/null and b/doc/librpm/html/argv_8h__incl.png differ diff --git a/doc/librpm/html/argv_8h_source.html b/doc/librpm/html/argv_8h_source.html new file mode 100644 index 0000000..28b8aea --- /dev/null +++ b/doc/librpm/html/argv_8h_source.html @@ -0,0 +1,120 @@ + + + + +rpm: argv.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
argv.h
+
+
+Go to the documentation of this file.
00001 #ifndef _H_ARGV_
+00002 #define _H_ARGV_
+00003 
+00008 #include <stdio.h>
+00009 #include <rpm/rpmtypes.h>
+00010 
+00011 #ifdef __cplusplus
+00012 extern "C" {
+00013 #endif
+00014 
+00015 typedef char ** ARGV_t;
+00016 typedef char * const *ARGV_const_t;
+00017 
+00018 typedef int * ARGint_t;
+00019 struct ARGI_s {
+00020     unsigned nvals;
+00021     ARGint_t vals;
+00022 };
+00023 typedef struct ARGI_s * ARGI_t;
+00024 typedef struct ARGI_s const * const ARGI_const_t;
+00025 
+00032 void argvPrint(const char * msg, ARGV_const_t argv, FILE * fp);
+00033 
+00039 ARGI_t argiFree(ARGI_t argi);
+00040 
+00041 
+00046 ARGV_t argvNew(void);
+00047 
+00053 ARGV_t argvFree(ARGV_t argv);
+00054 
+00060 int argiCount(ARGI_const_t argi);
+00061 
+00067 ARGint_t argiData(ARGI_const_t argi);
+00068 
+00074 int argvCount(ARGV_const_t argv);
+00075 
+00081 ARGV_t argvData(ARGV_t argv);
+00082 
+00089 int argvCmp(const void * a, const void * b);
+00090 
+00097 int argvSort(ARGV_t argv, int (*compar)(const void *, const void *));
+00098 
+00106 ARGV_t argvSearch(ARGV_const_t argv, const char *val,
+00107                 int (*compar)(const void *, const void *));
+00108 
+00116 int argiAdd(ARGI_t * argip, int ix, int val);
+00117 
+00124 int argvAdd(ARGV_t * argvp, const char *val);
+00125 
+00132 int argvAddNum(ARGV_t * argvp, int val);
+00133 
+00140 int argvAppend(ARGV_t * argvp, ARGV_const_t av);
+00141 
+00142 enum argvFlags_e {
+00143     ARGV_NONE           = 0,
+00144     ARGV_SKIPEMPTY      = (1 << 0),     /* omit empty strings from result */
+00145 };
+00146 
+00147 typedef rpmFlags argvFlags;
+00148 
+00156 ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags);
+00157 
+00165 int argvSplit(ARGV_t * argvp, const char * str, const char * seps);
+00166 
+00173 char *argvJoin(ARGV_const_t argv, const char *sep);
+00174 
+00175 #ifdef __cplusplus
+00176 }
+00177 #endif
+00178 
+00179 #endif /* _H_ARGV_ */
+
+
+ + + diff --git a/doc/librpm/html/bc_s.png b/doc/librpm/html/bc_s.png new file mode 100644 index 0000000..e401862 Binary files /dev/null and b/doc/librpm/html/bc_s.png differ diff --git a/doc/librpm/html/classes.html b/doc/librpm/html/classes.html new file mode 100644 index 0000000..f0dfe5c --- /dev/null +++ b/doc/librpm/html/classes.html @@ -0,0 +1,55 @@ + + + + +rpm: Data Structure Index + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
+
Data Structure Index
+
+
+
A | P | R
+ +
  A  
+
pgpPktKeyV3_s   pgpPktSig_u   pgpPktUid_s   rpmQVKArguments_s   
ARGI_s   pgpPktKeyV4_s   pgpPktSigV3_s   
  R  
+
rpmRelocation_s   
  P  
+
pgpPktLdata_s   pgpPktSigV4_s   rpmBuildArguments_s   rpmSignArgs   
pgpPktCdata_s   pgpPktOnepass_s   pgpPktSymkey_s   rpmInstallArguments_s   rpmsw_s   
pgpPktEdata_s   pgpPktPre_u   pgpPktTrust_s   rpmop_s   rpmtd_s   
pgpPktKey_u   pgpPktPubkey_s   
A | P | R
+
+ + + diff --git a/doc/librpm/html/cliutils_8c.html b/doc/librpm/html/cliutils_8c.html new file mode 100644 index 0000000..7dca5eb --- /dev/null +++ b/doc/librpm/html/cliutils_8c.html @@ -0,0 +1,256 @@ + + + + +rpm: cliutils.c File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
cliutils.c File Reference
+
+
+
#include "system.h"
+#include <sys/wait.h>
+#include <rpm/rpmlog.h>
+#include <rpm/rpmlib.h>
+#include <rpm/rpmfileutil.h>
+#include <rpm/rpmmacro.h>
+#include <rpm/rpmcli.h>
+#include "cliutils.h"
+#include "debug.h"
+
+Include dependency graph for cliutils.c:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + + +

+Functions

void argerror (const char *desc)
static void printVersion (FILE *fp)
static void printBanner (FILE *fp)
void printUsage (poptContext con, FILE *fp, int flags)
int initPipe (void)
void finishPipe (void)

+Variables

static pid_t pipeChild = 0
+

Function Documentation

+ +
+
+ + + + + + + + +
void argerror (const char * desc)
+
+
+ +

Definition at line 18 of file cliutils.c.

+ +

References _, and __progname.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
void finishPipe (void )
+
+
+ +

Definition at line 72 of file cliutils.c.

+ +

References pipeChild.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
int initPipe (void )
+
+
+ +

Definition at line 47 of file cliutils.c.

+ +

References _, pipeChild, and rpmcliPipeOutput.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
static void printBanner (FILE * fp) [static]
+
+
+ +

Definition at line 29 of file cliutils.c.

+ +

References _.

+ +

Referenced by printUsage().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void printUsage (poptContext con,
FILE * fp,
int flags 
)
+
+
+ +

Definition at line 35 of file cliutils.c.

+ +

References printBanner(), printVersion(), and rpmIsVerbose.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
static void printVersion (FILE * fp) [static]
+
+
+ +

Definition at line 24 of file cliutils.c.

+ +

References _, and rpmEVR.

+ +

Referenced by printUsage().

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
pid_t pipeChild = 0 [static]
+
+
+ +

Definition at line 15 of file cliutils.c.

+ +

Referenced by finishPipe(), and initPipe().

+ +
+
+
+ + + diff --git a/doc/librpm/html/cliutils_8c__incl.map b/doc/librpm/html/cliutils_8c__incl.map new file mode 100644 index 0000000..2661c11 --- /dev/null +++ b/doc/librpm/html/cliutils_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/cliutils_8c__incl.md5 b/doc/librpm/html/cliutils_8c__incl.md5 new file mode 100644 index 0000000..52b28f0 --- /dev/null +++ b/doc/librpm/html/cliutils_8c__incl.md5 @@ -0,0 +1 @@ +1b79694eb0fbc0c8e08ced4ae0d664cf \ No newline at end of file diff --git a/doc/librpm/html/cliutils_8c__incl.png b/doc/librpm/html/cliutils_8c__incl.png new file mode 100644 index 0000000..fe7e111 Binary files /dev/null and b/doc/librpm/html/cliutils_8c__incl.png differ diff --git a/doc/librpm/html/cliutils_8c_source.html b/doc/librpm/html/cliutils_8c_source.html new file mode 100644 index 0000000..afdba7e --- /dev/null +++ b/doc/librpm/html/cliutils_8c_source.html @@ -0,0 +1,128 @@ + + + + +rpm: cliutils.c Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
cliutils.c
+
+
+Go to the documentation of this file.
00001 #include "system.h"
+00002 #if HAVE_MCHECK_H
+00003 #include <mcheck.h>
+00004 #endif
+00005 #include <sys/wait.h>
+00006 
+00007 #include <rpm/rpmlog.h>
+00008 #include <rpm/rpmlib.h>
+00009 #include <rpm/rpmfileutil.h>
+00010 #include <rpm/rpmmacro.h>
+00011 #include <rpm/rpmcli.h>
+00012 #include "cliutils.h"
+00013 #include "debug.h"
+00014 
+00015 static pid_t pipeChild = 0;
+00016 
+00017 RPM_GNUC_NORETURN
+00018 void argerror(const char * desc)
+00019 {
+00020     fprintf(stderr, _("%s: %s\n"), __progname, desc);
+00021     exit(EXIT_FAILURE);
+00022 }
+00023 
+00024 static void printVersion(FILE * fp)
+00025 {
+00026     fprintf(fp, _("RPM version %s\n"), rpmEVR);
+00027 }
+00028 
+00029 static void printBanner(FILE * fp)
+00030 {
+00031     fprintf(fp, _("Copyright (C) 1998-2002 - Red Hat, Inc.\n"));
+00032     fprintf(fp, _("This program may be freely redistributed under the terms of the GNU GPL\n"));
+00033 }
+00034 
+00035 void printUsage(poptContext con, FILE * fp, int flags)
+00036 {
+00037     printVersion(fp);
+00038     printBanner(fp);
+00039     fprintf(fp, "\n");
+00040 
+00041     if (rpmIsVerbose())
+00042         poptPrintHelp(con, fp, flags);
+00043     else
+00044         poptPrintUsage(con, fp, flags);
+00045 }
+00046 
+00047 int initPipe(void)
+00048 {
+00049     int p[2];
+00050 
+00051     if (pipe(p) < 0) {
+00052         fprintf(stderr, _("creating a pipe for --pipe failed: %m\n"));
+00053         return -1;
+00054     }
+00055 
+00056     if (!(pipeChild = fork())) {
+00057         (void) signal(SIGPIPE, SIG_DFL);
+00058         (void) close(p[1]);
+00059         (void) dup2(p[0], STDIN_FILENO);
+00060         (void) close(p[0]);
+00061         (void) execl("/bin/sh", "/bin/sh", "-c", rpmcliPipeOutput, NULL);
+00062         fprintf(stderr, _("exec failed\n"));
+00063         exit(EXIT_FAILURE);
+00064     }
+00065 
+00066     (void) close(p[0]);
+00067     (void) dup2(p[1], STDOUT_FILENO);
+00068     (void) close(p[1]);
+00069     return 0;
+00070 }
+00071 
+00072 void finishPipe(void)
+00073 {
+00074     int status;
+00075     if (pipeChild) {
+00076         (void) fclose(stdout);
+00077         (void) waitpid(pipeChild, &status, 0);
+00078     }
+00079 }
+
+
+ + + diff --git a/doc/librpm/html/cliutils_8h.html b/doc/librpm/html/cliutils_8h.html new file mode 100644 index 0000000..9012627 --- /dev/null +++ b/doc/librpm/html/cliutils_8h.html @@ -0,0 +1,211 @@ + + + + +rpm: cliutils.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
cliutils.h File Reference
+
+
+
#include <stdio.h>
+#include <popt.h>
+#include <rpm/rpmutil.h>
+
+Include dependency graph for cliutils.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + +

+Defines

#define RETVAL(rc)   (((rc) > 254) ? 254 : (rc))

+Functions

RPM_GNUC_NORETURN void argerror (const char *desc)
void printUsage (poptContext con, FILE *fp, int flags)
int initPipe (void)
void finishPipe (void)
+

Define Documentation

+ +
+
+ + + + + + + + +
#define RETVAL( rc)   (((rc) > 254) ? 254 : (rc))
+
+
+ +

Definition at line 9 of file cliutils.h.

+ +

Referenced by main().

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
RPM_GNUC_NORETURN void argerror (const char * desc)
+
+
+ +

Definition at line 18 of file cliutils.c.

+ +

References _, and __progname.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
void finishPipe (void )
+
+
+ +

Definition at line 72 of file cliutils.c.

+ +

References pipeChild.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
int initPipe (void )
+
+
+ +

Definition at line 47 of file cliutils.c.

+ +

References _, pipeChild, and rpmcliPipeOutput.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void printUsage (poptContext con,
FILE * fp,
int flags 
)
+
+
+ +

Definition at line 35 of file cliutils.c.

+ +

References printBanner(), printVersion(), and rpmIsVerbose.

+ +

Referenced by main().

+ +
+
+
+ + + diff --git a/doc/librpm/html/cliutils_8h__dep__incl.map b/doc/librpm/html/cliutils_8h__dep__incl.map new file mode 100644 index 0000000..c36a8a8 --- /dev/null +++ b/doc/librpm/html/cliutils_8h__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doc/librpm/html/cliutils_8h__dep__incl.md5 b/doc/librpm/html/cliutils_8h__dep__incl.md5 new file mode 100644 index 0000000..adea024 --- /dev/null +++ b/doc/librpm/html/cliutils_8h__dep__incl.md5 @@ -0,0 +1 @@ +25f874d5a6cc81340c4380f909be1073 \ No newline at end of file diff --git a/doc/librpm/html/cliutils_8h__dep__incl.png b/doc/librpm/html/cliutils_8h__dep__incl.png new file mode 100644 index 0000000..4e7b654 Binary files /dev/null and b/doc/librpm/html/cliutils_8h__dep__incl.png differ diff --git a/doc/librpm/html/cliutils_8h__incl.map b/doc/librpm/html/cliutils_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/cliutils_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/cliutils_8h__incl.md5 b/doc/librpm/html/cliutils_8h__incl.md5 new file mode 100644 index 0000000..d79dd01 --- /dev/null +++ b/doc/librpm/html/cliutils_8h__incl.md5 @@ -0,0 +1 @@ +ee1b541b03a446ab5a0c3de4d0a2c435 \ No newline at end of file diff --git a/doc/librpm/html/cliutils_8h__incl.png b/doc/librpm/html/cliutils_8h__incl.png new file mode 100644 index 0000000..2c6f3db Binary files /dev/null and b/doc/librpm/html/cliutils_8h__incl.png differ diff --git a/doc/librpm/html/cliutils_8h_source.html b/doc/librpm/html/cliutils_8h_source.html new file mode 100644 index 0000000..8e8ff1a --- /dev/null +++ b/doc/librpm/html/cliutils_8h_source.html @@ -0,0 +1,69 @@ + + + + +rpm: cliutils.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
cliutils.h
+
+
+Go to the documentation of this file.
00001 #ifndef _CLIUTIL_H
+00002 #define _CLIUTIL_H
+00003 
+00004 #include <stdio.h>
+00005 #include <popt.h>
+00006 #include <rpm/rpmutil.h>
+00007 
+00008 /* "normalized" exit: avoid overflowing and xargs special value 255 */
+00009 #define RETVAL(rc) (((rc) > 254) ? 254 : (rc))
+00010 
+00011 RPM_GNUC_NORETURN
+00012 void argerror(const char * desc);
+00013 
+00014 void printUsage(poptContext con, FILE * fp, int flags);
+00015 
+00016 int initPipe(void);
+00017 
+00018 void finishPipe(void);
+00019 
+00020 #endif /* _CLIUTIL_H */
+
+
+ + + diff --git a/doc/librpm/html/closed.png b/doc/librpm/html/closed.png new file mode 100644 index 0000000..b7d4bd9 Binary files /dev/null and b/doc/librpm/html/closed.png differ diff --git a/doc/librpm/html/config_8h.html b/doc/librpm/html/config_8h.html new file mode 100644 index 0000000..2f256fc --- /dev/null +++ b/doc/librpm/html/config_8h.html @@ -0,0 +1,1290 @@ + + + + +rpm: config.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
config.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define ENABLE_NLS   1
#define ENABLE_PLUGINS   1
#define HAVE_BASENAME   1
#define HAVE_BZ2_1_0   1
#define HAVE_BZLIB_H   1
#define HAVE_CAP_COMPARE   1
#define HAVE_DB_H   1
#define HAVE_DCGETTEXT   1
#define HAVE_DIRENT_H   1
#define HAVE_DIRNAME   1
#define HAVE_DLFCN_H   1
#define HAVE_DWARF_H   1
#define HAVE_FCNTL_H   1
#define HAVE_GELF_H   1
#define HAVE_GETCWD   1
#define HAVE_GETOPT_H   1
#define HAVE_GETPAGESIZE   1
#define HAVE_GETTEXT   1
#define HAVE_GLOB_H   1
#define HAVE_GZSEEK   1
#define HAVE_INTTYPES_H   1
#define HAVE_LCHOWN   1
#define HAVE_LIBELF   1
#define HAVE_LIBIO_H   1
#define HAVE_LIBPTHREAD   1
#define HAVE_LIBSELINUX   1
#define HAVE_LIBSEMANAGE   1
#define HAVE_LIMITS_H   1
#define HAVE_LZMA_H   1
#define HAVE_MCHECK_H   1
#define HAVE_MEMORY_H   1
#define HAVE_MKSTEMP   1
#define HAVE_MMAP   1
#define HAVE_MTRACE   1
#define HAVE_NSPR_H   1
#define HAVE_NSS_H   1
#define HAVE_POLL_H   1
#define HAVE_PTHREAD_H   1
#define HAVE_PUTENV   1
#define HAVE_REALPATH   1
#define HAVE_REGCOMP   1
#define HAVE_SECHASH_H   1
#define HAVE_SETENV   1
#define HAVE_STDINT_H   1
#define HAVE_STDLIB_H   1
#define HAVE_STPCPY   1
#define HAVE_STPNCPY   1
#define HAVE_STRINGS_H   1
#define HAVE_STRING_H   1
#define HAVE_STRUCT_DIRENT_D_TYPE   1
#define HAVE_SYS_IPC_H   1
#define HAVE_SYS_PARAM_H   1
#define HAVE_SYS_STAT_H   1
#define HAVE_SYS_TYPES_H   1
#define HAVE_SYS_UTSNAME_H   1
#define HAVE_UNISTD_H   1
#define HAVE_UNSETENV   1
#define HAVE_ZLIB_H   1
#define HAVE___SECURE_GETENV   1
#define LT_OBJDIR   ".libs/"
#define PACKAGE   "rpm"
#define PACKAGE_BUGREPORT   "rpm-maint@lists.rpm.org"
#define PACKAGE_NAME   "rpm"
#define PACKAGE_STRING   "rpm 4.9.1"
#define PACKAGE_TARNAME   "rpm"
#define PACKAGE_URL   ""
#define PACKAGE_VERSION   "4.9.1"
#define RPMCANONVENDOR   "redhat"
#define STATFS_HAS_F_BAVAIL   1
#define STATFS_IN_SYS_STATVFS   1
#define STDC_HEADERS   1
#define USE_GNU_GLOB   1
#define VERSION   "4.9.1"
#define WITH_CAP   1
#define WITH_LUA   1
#define WITH_SELINUX   1
#define __MKDIR_P   "/bin/mkdir -p"
+

Define Documentation

+ +
+
+ + + + +
#define __MKDIR_P   "/bin/mkdir -p"
+
+
+ +

Definition at line 342 of file config.h.

+ +
+
+ +
+
+ + + + +
#define ENABLE_NLS   1
+
+
+ +

Definition at line 9 of file config.h.

+ +
+
+ +
+
+ + + + +
#define ENABLE_PLUGINS   1
+
+
+ +

Definition at line 12 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE___SECURE_GETENV   1
+
+
+ +

Definition at line 225 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_BASENAME   1
+
+
+ +

Definition at line 15 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_BZ2_1_0   1
+
+
+ +

Definition at line 18 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_BZLIB_H   1
+
+
+ +

Definition at line 21 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_CAP_COMPARE   1
+
+
+ +

Definition at line 24 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_DB_H   1
+
+
+ +

Definition at line 35 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_DCGETTEXT   1
+
+
+ +

Definition at line 39 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_DIRENT_H   1
+
+
+ +

Definition at line 43 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_DIRNAME   1
+
+
+ +

Definition at line 46 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_DLFCN_H   1
+
+
+ +

Definition at line 49 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_DWARF_H   1
+
+
+ +

Definition at line 52 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_FCNTL_H   1
+
+
+ +

Definition at line 55 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_GELF_H   1
+
+
+ +

Definition at line 58 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_GETCWD   1
+
+
+ +

Definition at line 61 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_GETOPT_H   1
+
+
+ +

Definition at line 64 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_GETPAGESIZE   1
+
+
+ +

Definition at line 67 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_GETTEXT   1
+
+
+ +

Definition at line 73 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_GLOB_H   1
+
+
+ +

Definition at line 76 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_GZSEEK   1
+
+
+ +

Definition at line 79 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_INTTYPES_H   1
+
+
+ +

Definition at line 85 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_LCHOWN   1
+
+
+ +

Definition at line 88 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_LIBELF   1
+
+
+ +

Definition at line 91 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_LIBIO_H   1
+
+
+ +

Definition at line 94 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_LIBPTHREAD   1
+
+
+ +

Definition at line 103 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_LIBSELINUX   1
+
+
+ +

Definition at line 106 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_LIBSEMANAGE   1
+
+
+ +

Definition at line 109 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_LIMITS_H   1
+
+
+ +

Definition at line 115 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_LZMA_H   1
+
+
+ +

Definition at line 118 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_MCHECK_H   1
+
+
+ +

Definition at line 121 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_MEMORY_H   1
+
+
+ +

Definition at line 124 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_MKSTEMP   1
+
+
+ +

Definition at line 127 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_MMAP   1
+
+
+ +

Definition at line 130 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_MTRACE   1
+
+
+ +

Definition at line 133 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_NSPR_H   1
+
+
+ +

Definition at line 139 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_NSS_H   1
+
+
+ +

Definition at line 142 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_POLL_H   1
+
+
+ +

Definition at line 148 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_PTHREAD_H   1
+
+
+ +

Definition at line 151 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_PUTENV   1
+
+
+ +

Definition at line 154 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_REALPATH   1
+
+
+ +

Definition at line 157 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_REGCOMP   1
+
+
+ +

Definition at line 160 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_SECHASH_H   1
+
+
+ +

Definition at line 163 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_SETENV   1
+
+
+ +

Definition at line 166 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_STDINT_H   1
+
+
+ +

Definition at line 169 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_STDLIB_H   1
+
+
+ +

Definition at line 172 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_STPCPY   1
+
+
+ +

Definition at line 175 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_STPNCPY   1
+
+
+ +

Definition at line 178 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_STRING_H   1
+
+
+ +

Definition at line 184 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_STRINGS_H   1
+
+
+ +

Definition at line 181 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_STRUCT_DIRENT_D_TYPE   1
+
+
+ +

Definition at line 187 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_SYS_IPC_H   1
+
+
+ +

Definition at line 194 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_SYS_PARAM_H   1
+
+
+ +

Definition at line 201 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_SYS_STAT_H   1
+
+
+ +

Definition at line 204 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_SYS_TYPES_H   1
+
+
+ +

Definition at line 210 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_SYS_UTSNAME_H   1
+
+
+ +

Definition at line 213 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_UNISTD_H   1
+
+
+ +

Definition at line 216 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_UNSETENV   1
+
+
+ +

Definition at line 219 of file config.h.

+ +
+
+ +
+
+ + + + +
#define HAVE_ZLIB_H   1
+
+
+ +

Definition at line 222 of file config.h.

+ +
+
+ +
+
+ + + + +
#define LT_OBJDIR   ".libs/"
+
+
+ +

Definition at line 229 of file config.h.

+ +
+
+ +
+
+ + + + +
#define PACKAGE   "rpm"
+
+
+ +

Definition at line 240 of file config.h.

+ +
+
+ +
+
+ + + + +
#define PACKAGE_BUGREPORT   "rpm-maint@lists.rpm.org"
+
+
+ +

Definition at line 243 of file config.h.

+ +
+
+ +
+
+ + + + +
#define PACKAGE_NAME   "rpm"
+
+
+ +

Definition at line 246 of file config.h.

+ +
+
+ +
+
+ + + + +
#define PACKAGE_STRING   "rpm 4.9.1"
+
+
+ +

Definition at line 249 of file config.h.

+ +
+
+ +
+
+ + + + +
#define PACKAGE_TARNAME   "rpm"
+
+
+ +

Definition at line 252 of file config.h.

+ +
+
+ +
+
+ + + + +
#define PACKAGE_URL   ""
+
+
+ +

Definition at line 255 of file config.h.

+ +
+
+ +
+
+ + + + +
#define PACKAGE_VERSION   "4.9.1"
+
+
+ +

Definition at line 258 of file config.h.

+ +
+
+ +
+
+ + + + +
#define RPMCANONVENDOR   "redhat"
+
+
+ +

Definition at line 261 of file config.h.

+ +
+
+ +
+
+ + + + +
#define STATFS_HAS_F_BAVAIL   1
+
+
+ +

Definition at line 264 of file config.h.

+ +
+
+ +
+
+ + + + +
#define STATFS_IN_SYS_STATVFS   1
+
+
+ +

Definition at line 273 of file config.h.

+ +
+
+ +
+
+ + + + +
#define STDC_HEADERS   1
+
+
+ +

Definition at line 282 of file config.h.

+ +
+
+ +
+
+ + + + +
#define USE_GNU_GLOB   1
+
+
+ +

Definition at line 285 of file config.h.

+ +
+
+ +
+
+ + + + +
#define VERSION   "4.9.1"
+
+
+ +

Definition at line 310 of file config.h.

+ +
+
+ +
+
+ + + + +
#define WITH_CAP   1
+
+
+ +

Definition at line 316 of file config.h.

+ +
+
+ +
+
+ + + + +
#define WITH_LUA   1
+
+
+ +

Definition at line 319 of file config.h.

+ +
+
+ +
+
+ + + + +
#define WITH_SELINUX   1
+
+
+ +

Definition at line 322 of file config.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/config_8h_source.html b/doc/librpm/html/config_8h_source.html new file mode 100644 index 0000000..55ccd49 --- /dev/null +++ b/doc/librpm/html/config_8h_source.html @@ -0,0 +1,403 @@ + + + + +rpm: config.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
config.h
+
+
+Go to the documentation of this file.
00001 /* config.h.  Generated from config.h.in by configure.  */
+00002 /* config.h.in.  Generated from configure.ac by autoheader.  */
+00003 
+00004 /* Build with dmalloc support? */
+00005 /* #undef DMALLOC */
+00006 
+00007 /* Define to 1 if translation of program messages to the user's native
+00008    language is requested. */
+00009 #define ENABLE_NLS 1
+00010 
+00011 /* Build with plugin support? */
+00012 #define ENABLE_PLUGINS 1
+00013 
+00014 /* Define to 1 if you have the `basename' function. */
+00015 #define HAVE_BASENAME 1
+00016 
+00017 /* Define as 1 if you bzip2 1.0 */
+00018 #define HAVE_BZ2_1_0 1
+00019 
+00020 /* Define to 1 if you have the <bzlib.h> header file. */
+00021 #define HAVE_BZLIB_H 1
+00022 
+00023 /* Have cap_compare function? */
+00024 #define HAVE_CAP_COMPARE 1
+00025 
+00026 /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+00027    CoreFoundation framework. */
+00028 /* #undef HAVE_CFLOCALECOPYCURRENT */
+00029 
+00030 /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+00031    the CoreFoundation framework. */
+00032 /* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */
+00033 
+00034 /* Define if you have the <db3/db.h> header file */
+00035 #define HAVE_DB_H 1
+00036 
+00037 /* Define if the GNU dcgettext() function is already present or preinstalled.
+00038    */
+00039 #define HAVE_DCGETTEXT 1
+00040 
+00041 /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+00042    */
+00043 #define HAVE_DIRENT_H 1
+00044 
+00045 /* Define to 1 if you have the `dirname' function. */
+00046 #define HAVE_DIRNAME 1
+00047 
+00048 /* Define to 1 if you have the <dlfcn.h> header file. */
+00049 #define HAVE_DLFCN_H 1
+00050 
+00051 /* Define to 1 if you have the <dwarf.h> header file. */
+00052 #define HAVE_DWARF_H 1
+00053 
+00054 /* Define to 1 if you have the <fcntl.h> header file. */
+00055 #define HAVE_FCNTL_H 1
+00056 
+00057 /* Define to 1 if you have the <gelf.h> header file. */
+00058 #define HAVE_GELF_H 1
+00059 
+00060 /* Define to 1 if you have the `getcwd' function. */
+00061 #define HAVE_GETCWD 1
+00062 
+00063 /* Define to 1 if you have the <getopt.h> header file. */
+00064 #define HAVE_GETOPT_H 1
+00065 
+00066 /* Define to 1 if you have the `getpagesize' function. */
+00067 #define HAVE_GETPAGESIZE 1
+00068 
+00069 /* Define to 1 if you have the `getpassphrase' function. */
+00070 /* #undef HAVE_GETPASSPHRASE */
+00071 
+00072 /* Define if the GNU gettext() function is already present or preinstalled. */
+00073 #define HAVE_GETTEXT 1
+00074 
+00075 /* Define to 1 if you have the <glob.h> header file. */
+00076 #define HAVE_GLOB_H 1
+00077 
+00078 /* Define as 1 if your zlib has gzseek() */
+00079 #define HAVE_GZSEEK 1
+00080 
+00081 /* Define if you have the iconv() function. */
+00082 /* #undef HAVE_ICONV */
+00083 
+00084 /* Define to 1 if you have the <inttypes.h> header file. */
+00085 #define HAVE_INTTYPES_H 1
+00086 
+00087 /* Define to 1 if you have the `lchown' function. */
+00088 #define HAVE_LCHOWN 1
+00089 
+00090 /* Define to 1 if you have the 'elf' library (-lelf). */
+00091 #define HAVE_LIBELF 1
+00092 
+00093 /* Define to 1 if you have the <libio.h> header file. */
+00094 #define HAVE_LIBIO_H 1
+00095 
+00096 /* Define to 1 if you have the `nsl' library (-lnsl). */
+00097 /* #undef HAVE_LIBNSL */
+00098 
+00099 /* Define to 1 if you have the `port' library (-lport). */
+00100 /* #undef HAVE_LIBPORT */
+00101 
+00102 /* Define to 1 if you have the `pthread' library (-lpthread). */
+00103 #define HAVE_LIBPTHREAD 1
+00104 
+00105 /* Define to 1 if you have the `selinux' library (-lselinux). */
+00106 #define HAVE_LIBSELINUX 1
+00107 
+00108 /* Define to 1 if you have the `semanage' library (-lsemanage). */
+00109 #define HAVE_LIBSEMANAGE 1
+00110 
+00111 /* Define to 1 if you have the `thread' library (-lthread). */
+00112 /* #undef HAVE_LIBTHREAD */
+00113 
+00114 /* Define to 1 if you have the <limits.h> header file. */
+00115 #define HAVE_LIMITS_H 1
+00116 
+00117 /* Define to 1 if you have the <lzma.h> header file. */
+00118 #define HAVE_LZMA_H 1
+00119 
+00120 /* Define to 1 if you have the <mcheck.h> header file. */
+00121 #define HAVE_MCHECK_H 1
+00122 
+00123 /* Define to 1 if you have the <memory.h> header file. */
+00124 #define HAVE_MEMORY_H 1
+00125 
+00126 /* Define to 1 if you have the `mkstemp' function. */
+00127 #define HAVE_MKSTEMP 1
+00128 
+00129 /* Define to 1 if you have a working `mmap' system call. */
+00130 #define HAVE_MMAP 1
+00131 
+00132 /* Define to 1 if you have the `mtrace' function. */
+00133 #define HAVE_MTRACE 1
+00134 
+00135 /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+00136 /* #undef HAVE_NDIR_H */
+00137 
+00138 /* Define to 1 if you have the <nspr.h> header file. */
+00139 #define HAVE_NSPR_H 1
+00140 
+00141 /* Define to 1 if you have the <nss.h> header file. */
+00142 #define HAVE_NSS_H 1
+00143 
+00144 /* Define if the patch call you'll be using is 2.1 or older */
+00145 /* #undef HAVE_OLDPATCH_21 */
+00146 
+00147 /* Define to 1 if you have the <poll.h> header file. */
+00148 #define HAVE_POLL_H 1
+00149 
+00150 /* Define to 1 if you have the <pthread.h> header file. */
+00151 #define HAVE_PTHREAD_H 1
+00152 
+00153 /* Define to 1 if you have the `putenv' function. */
+00154 #define HAVE_PUTENV 1
+00155 
+00156 /* Define to 1 if you have the `realpath' function. */
+00157 #define HAVE_REALPATH 1
+00158 
+00159 /* Define to 1 if you have the `regcomp' function. */
+00160 #define HAVE_REGCOMP 1
+00161 
+00162 /* Define to 1 if you have the <sechash.h> header file. */
+00163 #define HAVE_SECHASH_H 1
+00164 
+00165 /* Define to 1 if you have the `setenv' function. */
+00166 #define HAVE_SETENV 1
+00167 
+00168 /* Define to 1 if you have the <stdint.h> header file. */
+00169 #define HAVE_STDINT_H 1
+00170 
+00171 /* Define to 1 if you have the <stdlib.h> header file. */
+00172 #define HAVE_STDLIB_H 1
+00173 
+00174 /* Define to 1 if you have the `stpcpy' function. */
+00175 #define HAVE_STPCPY 1
+00176 
+00177 /* Define to 1 if you have the `stpncpy' function. */
+00178 #define HAVE_STPNCPY 1
+00179 
+00180 /* Define to 1 if you have the <strings.h> header file. */
+00181 #define HAVE_STRINGS_H 1
+00182 
+00183 /* Define to 1 if you have the <string.h> header file. */
+00184 #define HAVE_STRING_H 1
+00185 
+00186 /* Define to 1 if `d_type' is a member of `struct dirent'. */
+00187 #define HAVE_STRUCT_DIRENT_D_TYPE 1
+00188 
+00189 /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+00190    */
+00191 /* #undef HAVE_SYS_DIR_H */
+00192 
+00193 /* Define to 1 if you have the <sys/ipc.h> header file. */
+00194 #define HAVE_SYS_IPC_H 1
+00195 
+00196 /* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+00197    */
+00198 /* #undef HAVE_SYS_NDIR_H */
+00199 
+00200 /* Define to 1 if you have the <sys/param.h> header file. */
+00201 #define HAVE_SYS_PARAM_H 1
+00202 
+00203 /* Define to 1 if you have the <sys/stat.h> header file. */
+00204 #define HAVE_SYS_STAT_H 1
+00205 
+00206 /* Define to 1 if you have the <sys/systemcfg.h> header file. */
+00207 /* #undef HAVE_SYS_SYSTEMCFG_H */
+00208 
+00209 /* Define to 1 if you have the <sys/types.h> header file. */
+00210 #define HAVE_SYS_TYPES_H 1
+00211 
+00212 /* Define to 1 if you have the <sys/utsname.h> header file. */
+00213 #define HAVE_SYS_UTSNAME_H 1
+00214 
+00215 /* Define to 1 if you have the <unistd.h> header file. */
+00216 #define HAVE_UNISTD_H 1
+00217 
+00218 /* Define to 1 if you have the `unsetenv' function. */
+00219 #define HAVE_UNSETENV 1
+00220 
+00221 /* Define to 1 if you have the <zlib.h> header file. */
+00222 #define HAVE_ZLIB_H 1
+00223 
+00224 /* Define to 1 if you have the `__secure_getenv' function. */
+00225 #define HAVE___SECURE_GETENV 1
+00226 
+00227 /* Define to the sub-directory in which libtool stores uninstalled libraries.
+00228    */
+00229 #define LT_OBJDIR ".libs/"
+00230 
+00231 /* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.
+00232    */
+00233 /* #undef MAJOR_IN_MKDEV */
+00234 
+00235 /* Define to 1 if `major', `minor', and `makedev' are declared in
+00236    <sysmacros.h>. */
+00237 /* #undef MAJOR_IN_SYSMACROS */
+00238 
+00239 /* Name of package */
+00240 #define PACKAGE "rpm"
+00241 
+00242 /* Define to the address where bug reports for this package should be sent. */
+00243 #define PACKAGE_BUGREPORT "rpm-maint@lists.rpm.org"
+00244 
+00245 /* Define to the full name of this package. */
+00246 #define PACKAGE_NAME "rpm"
+00247 
+00248 /* Define to the full name and version of this package. */
+00249 #define PACKAGE_STRING "rpm 4.9.1"
+00250 
+00251 /* Define to the one symbol short name of this package. */
+00252 #define PACKAGE_TARNAME "rpm"
+00253 
+00254 /* Define to the home page for this package. */
+00255 #define PACKAGE_URL ""
+00256 
+00257 /* Define to the version of this package. */
+00258 #define PACKAGE_VERSION "4.9.1"
+00259 
+00260 /* canonical vendor */
+00261 #define RPMCANONVENDOR "redhat"
+00262 
+00263 /* Define if struct statfs has the f_bavail member */
+00264 #define STATFS_HAS_F_BAVAIL 1
+00265 
+00266 /* statfs in <sys/mount.h> (for Digital Unix 4.0D systems) */
+00267 /* #undef STATFS_IN_SYS_MOUNT */
+00268 
+00269 /* statfs in <sys/statfs.h> (for Irix 6.4 systems) */
+00270 /* #undef STATFS_IN_SYS_STATFS */
+00271 
+00272 /* statfs in <sys/statvfs.h> (for solaris 2.6+ systems) */
+00273 #define STATFS_IN_SYS_STATVFS 1
+00274 
+00275 /* statfs in <sys/vfs.h> (for linux systems) */
+00276 /* #undef STATFS_IN_SYS_VFS */
+00277 
+00278 /* Define if the statfs() call takes 4 arguments */
+00279 /* #undef STAT_STATFS4 */
+00280 
+00281 /* Define to 1 if you have the ANSI C header files. */
+00282 #define STDC_HEADERS 1
+00283 
+00284 /* Use the included glob.c? */
+00285 #define USE_GNU_GLOB 1
+00286 
+00287 /* Enable extensions on AIX 3, Interix.  */
+00288 #ifndef _ALL_SOURCE
+00289 # define _ALL_SOURCE 1
+00290 #endif
+00291 /* Enable GNU extensions on systems that have them.  */
+00292 #ifndef _GNU_SOURCE
+00293 # define _GNU_SOURCE 1
+00294 #endif
+00295 /* Enable threading extensions on Solaris.  */
+00296 #ifndef _POSIX_PTHREAD_SEMANTICS
+00297 # define _POSIX_PTHREAD_SEMANTICS 1
+00298 #endif
+00299 /* Enable extensions on HP NonStop.  */
+00300 #ifndef _TANDEM_SOURCE
+00301 # define _TANDEM_SOURCE 1
+00302 #endif
+00303 /* Enable general extensions on Solaris.  */
+00304 #ifndef __EXTENSIONS__
+00305 # define __EXTENSIONS__ 1
+00306 #endif
+00307 
+00308 
+00309 /* Version number of package */
+00310 #define VERSION "4.9.1"
+00311 
+00312 /* Build with acl support? */
+00313 /* #undef WITH_ACL */
+00314 
+00315 /* Build with capability support? */
+00316 #define WITH_CAP 1
+00317 
+00318 /* Build with lua support? */
+00319 #define WITH_LUA 1
+00320 
+00321 /* Build with selinux support? */
+00322 #define WITH_SELINUX 1
+00323 
+00324 /* Number of bits in a file offset, on hosts where this is settable. */
+00325 /* #undef _FILE_OFFSET_BITS */
+00326 
+00327 /* Define for large files, on AIX-style hosts. */
+00328 /* #undef _LARGE_FILES */
+00329 
+00330 /* Define to 1 if on MINIX. */
+00331 /* #undef _MINIX */
+00332 
+00333 /* Define to 2 if the system does not provide POSIX.1 features except with
+00334    this defined. */
+00335 /* #undef _POSIX_1_SOURCE */
+00336 
+00337 /* Define to 1 if you need to in order for `stat' and other things to work. */
+00338 /* #undef _POSIX_SOURCE */
+00339 
+00340 /* A full path to a program, possibly with arguments, that will create a
+00341    directory and all necessary parent directories, ala 'mkdir -p' */
+00342 #define __MKDIR_P "/bin/mkdir -p"
+00343 
+00344 /* Define to `int' if <sys/types.h> does not define. */
+00345 /* #undef mode_t */
+00346 
+00347 /* Define to `long int' if <sys/types.h> does not define. */
+00348 /* #undef off_t */
+00349 
+00350 /* Define to `int' if <sys/types.h> does not define. */
+00351 /* #undef pid_t */
+00352 
+00353 /* Define to `unsigned int' if <sys/types.h> does not define. */
+00354 /* #undef size_t */
+
+
+ + + diff --git a/doc/librpm/html/debug_8h.html b/doc/librpm/html/debug_8h.html new file mode 100644 index 0000000..47b6b44 --- /dev/null +++ b/doc/librpm/html/debug_8h.html @@ -0,0 +1,193 @@ + + + + +rpm: debug.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
debug.h File Reference
+
+
+
#include <assert.h>
+
+Include dependency graph for debug.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + +

+Defines

#define RPMDBG_TOSTR(a)   RPMDBG_TOSTR_ARG(a)
 To be included after all other includes.
#define RPMDBG_TOSTR_ARG(a)   #a
#define RPMDBG()   "at: " __FILE__ ":" RPMDBG_TOSTR (__LINE__)
#define RPMDBG_M_DEBUG(msg)   msg " " RPMDBG()
#define RPMDBG_M_NODEBUG(msg)   NULL
#define RPMDBG_M(msg)   RPMDBG_M_DEBUG(msg)
+

Define Documentation

+ +
+
+ + + + + + + +
#define RPMDBG()   "at: " __FILE__ ":" RPMDBG_TOSTR (__LINE__)
+
+
+ +

Definition at line 16 of file debug.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPMDBG_M( msg)   RPMDBG_M_DEBUG(msg)
+
+
+ +

Definition at line 20 of file debug.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPMDBG_M_DEBUG( msg)   msg " " RPMDBG()
+
+
+ +

Definition at line 17 of file debug.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPMDBG_M_NODEBUG( msg)   NULL
+
+
+ +

Definition at line 18 of file debug.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPMDBG_TOSTR( a)   RPMDBG_TOSTR_ARG(a)
+
+
+ +

To be included after all other includes.

+ +

Definition at line 13 of file debug.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPMDBG_TOSTR_ARG( a)   #a
+
+
+ +

Definition at line 14 of file debug.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/debug_8h__dep__incl.map b/doc/librpm/html/debug_8h__dep__incl.map new file mode 100644 index 0000000..c9a4801 --- /dev/null +++ b/doc/librpm/html/debug_8h__dep__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/doc/librpm/html/debug_8h__dep__incl.md5 b/doc/librpm/html/debug_8h__dep__incl.md5 new file mode 100644 index 0000000..aca8b62 --- /dev/null +++ b/doc/librpm/html/debug_8h__dep__incl.md5 @@ -0,0 +1 @@ +d7fd920e831a7aed84b5fdc49ee8714c \ No newline at end of file diff --git a/doc/librpm/html/debug_8h__dep__incl.png b/doc/librpm/html/debug_8h__dep__incl.png new file mode 100644 index 0000000..c32a2de Binary files /dev/null and b/doc/librpm/html/debug_8h__dep__incl.png differ diff --git a/doc/librpm/html/debug_8h__incl.map b/doc/librpm/html/debug_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/debug_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/debug_8h__incl.md5 b/doc/librpm/html/debug_8h__incl.md5 new file mode 100644 index 0000000..eb62a39 --- /dev/null +++ b/doc/librpm/html/debug_8h__incl.md5 @@ -0,0 +1 @@ +362ef9e0a21dbd869f1d4f2f7b28bb29 \ No newline at end of file diff --git a/doc/librpm/html/debug_8h__incl.png b/doc/librpm/html/debug_8h__incl.png new file mode 100644 index 0000000..65ef2a8 Binary files /dev/null and b/doc/librpm/html/debug_8h__incl.png differ diff --git a/doc/librpm/html/debug_8h_source.html b/doc/librpm/html/debug_8h_source.html new file mode 100644 index 0000000..b4fdfae --- /dev/null +++ b/doc/librpm/html/debug_8h_source.html @@ -0,0 +1,69 @@ + + + + +rpm: debug.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
debug.h
+
+
+Go to the documentation of this file.
00001 
+00004 #ifndef H_DEBUG
+00005 #define H_DEBUG
+00006 
+00007 #include <assert.h>
+00008 
+00009 #ifdef  DMALLOC
+00010 #include <dmalloc.h>
+00011 #endif
+00012 
+00013 #define RPMDBG_TOSTR(a)         RPMDBG_TOSTR_ARG(a)
+00014 #define RPMDBG_TOSTR_ARG(a)     #a
+00015 
+00016 #define RPMDBG()                "at: " __FILE__ ":" RPMDBG_TOSTR (__LINE__)
+00017 #define RPMDBG_M_DEBUG(msg)     msg " " RPMDBG()
+00018 #define RPMDBG_M_NODEBUG(msg)   NULL
+00019 
+00020 #define RPMDBG_M(msg)           RPMDBG_M_DEBUG(msg)
+00021 
+00022 #endif  /* H_DEBUG */
+
+
+ + + diff --git a/doc/librpm/html/deprecated.html b/doc/librpm/html/deprecated.html new file mode 100644 index 0000000..ccb1caa --- /dev/null +++ b/doc/librpm/html/deprecated.html @@ -0,0 +1,98 @@ + + + + +rpm: Deprecated List + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+
+
Deprecated List
+
+
+

+
+
Global addMacro (rpmMacroContext mc, const char *n, const char *o, const char *b, int level)
+
Use rpmDefineMacro().
+
+

+
+
Global expandMacros (void *spec, rpmMacroContext mc, char *sbuf, size_t slen)
+
Use rpmExpand().
+
+

+
+
Global rpmfcNew (void)
+
Create a file classifier.
+
+

+
+
Global rpmfiMD5 (rpmfi fi) RPM_GNUC_DEPRECATED
+
Use rpmfiFDigest() instead
+
+

+
+
Global rpmlogCode (void)
+
Perl-RPM needs, what's really needed is predictable, non-i18n encumbered, error text that can be retrieved through rpmlogMessage() and parsed IMHO.
+
+

+
+
Global rpmSetTables (int archTable, int osTable)
+
Use addMacro to set _target_* macros.
+
+

+
+
Global rpmShowProgress (const void *arg, const rpmCallbackType what, const rpm_loff_t amount, const rpm_loff_t total, fnpyKey key, void *data)
+
Transaction callback arguments need to change, so don't rely on this routine in the rpmcli API.
+
+

+
+
Global RPMSIGTAG_LEMD5_1
+
legacy.
+
+

+
+
Global RPMSIGTAG_LEMD5_2
+
legacy.
+
+

+
+
Global RPMSIGTAG_PGP5
+
legacy.
+
+

+
+
Global rpmtsInitDB (rpmts ts, int dbmode)
+
An explicit rpmdbInit() is almost never needed.
+
+
+ + + diff --git a/doc/librpm/html/doxygen.css b/doc/librpm/html/doxygen.css new file mode 100644 index 0000000..74445fe --- /dev/null +++ b/doc/librpm/html/doxygen.css @@ -0,0 +1,835 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 12px; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code { + color: #4665A2; +} + +a.codeRef { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 5px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #C4CFE5; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; +} + +.memname { + white-space: nowrap; + font-weight: bold; + margin-left: 6px; +} + +.memproto { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 8px; + border-top-left-radius: 8px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 8px; + -moz-border-radius-topleft: 8px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 8px; + -webkit-border-top-left-radius: 8px; + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + +} + +.memdoc { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 2px 5px; + background-color: #FBFCFD; + border-top-width: 0; + /* opera specific markup */ + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + border-spacing: 6px 2px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + + + + +/* @end */ + +/* @group Directory (tree) */ + +/* for the tree view */ + +.ftvtree { + font-family: sans-serif; + margin: 0px; +} + +/* these are for tree view when used as main index */ + +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* +The following two styles can be used to replace the root node title +with an image of your choice. Simply uncomment the next two styles, +specify the name of your image and be sure to set 'height' to the +proper pixel height of your image. +*/ + +/* +.directory h3.swap { + height: 61px; + background-repeat: no-repeat; + background-image: url("yourimage.gif"); +} +.directory h3.swap span { + display: none; +} +*/ + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0px; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0px; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ + +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0px; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0px; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; +} + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug +{ + border-left:4px solid; + padding: 0 0 0 6px; +} + +dl.note +{ + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + border-color: #00D000; +} + +dl.deprecated +{ + border-color: #505050; +} + +dl.todo +{ + border-color: #00C0E0; +} + +dl.test +{ + border-color: #3030E0; +} + +dl.bug +{ + border-color: #C08050; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + diff --git a/doc/librpm/html/doxygen.png b/doc/librpm/html/doxygen.png new file mode 100644 index 0000000..635ed52 Binary files /dev/null and b/doc/librpm/html/doxygen.png differ diff --git a/doc/librpm/html/files.html b/doc/librpm/html/files.html new file mode 100644 index 0000000..c38b156 --- /dev/null +++ b/doc/librpm/html/files.html @@ -0,0 +1,97 @@ + + + + +rpm: File List + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
argv.h [code]
cliutils.c [code]
cliutils.h [code]
config.h [code]
debug.h [code]
Doxyheader [code]
header.h [code]An rpm header carries all information about a package
rpm2cpio.c [code]
rpmbuild.c [code]
rpmbuild.h [code]This is the *only* module users of librpmbuild should need to include
rpmcallback.h [code]
rpmcli.h [code]
rpmdb.c [code]
rpmdb.h [code]Access RPM indices using Berkeley DB interface(s)
rpmds.h [code]Structure(s) used for dependency tag sets
rpmfc.h [code]Structures and methods for build-time file classification
rpmfi.h [code]Structure(s) used for file info tag sets
rpmfileutil.h [code]File and path manipulation helper functions
rpmio.h [code]
rpmkeyring.h [code]
rpmkeys.c [code]
rpmlegacy.h [code]
rpmlib.h [code]In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not
rpmlog.h [code]Yet Another syslog(3) API clone
rpmmacro.h [code]
rpmpgp.h [code]OpenPGP constants and structures from RFC-2440
rpmpol.h [code]Structure(s) used for policy sets
rpmprob.h [code]Structures and prototypes used for an rpm problem item
rpmps.h [code]Structures and prototypes used for an "rpmps" problem set
rpmqv.c [code]
rpmsign.c [code]
rpmsign.h [code]
rpmspec.c [code]
rpmspec.h [code]The rpmSpec and Package data structures used during build
rpmsq.h [code]
rpmstring.h [code]String manipulation helper functions
rpmsw.h [code]
rpmtag.h [code]
rpmtd.h [code]
rpmte.h [code]Structures used for an "rpmte" transaction element
rpmts.h [code]Structures and prototypes used for an "rpmts" transaction set
rpmtypes.h [code]Typedefs for RPM abstract data types
rpmurl.h [code]
rpmutil.h [code]
rpmvf.h [code]
system.h [code]
+
+ + + diff --git a/doc/librpm/html/functions.html b/doc/librpm/html/functions.html new file mode 100644 index 0000000..598d40a --- /dev/null +++ b/doc/librpm/html/functions.html @@ -0,0 +1,387 @@ + + + + +rpm: Data Fields + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all struct and union fields with links to the structures/unions they belong to:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+
+ + + diff --git a/doc/librpm/html/functions_vars.html b/doc/librpm/html/functions_vars.html new file mode 100644 index 0000000..a94f2c5 --- /dev/null +++ b/doc/librpm/html/functions_vars.html @@ -0,0 +1,387 @@ + + + + +rpm: Data Fields - Variables + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+
+ + + diff --git a/doc/librpm/html/globals.html b/doc/librpm/html/globals.html new file mode 100644 index 0000000..9ab24f8 --- /dev/null +++ b/doc/librpm/html/globals.html @@ -0,0 +1,154 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- _ -

+
+ + + diff --git a/doc/librpm/html/globals_0x61.html b/doc/librpm/html/globals_0x61.html new file mode 100644 index 0000000..fcf6ddd --- /dev/null +++ b/doc/librpm/html/globals_0x61.html @@ -0,0 +1,176 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- a -

+
+ + + diff --git a/doc/librpm/html/globals_0x62.html b/doc/librpm/html/globals_0x62.html new file mode 100644 index 0000000..4a05bb7 --- /dev/null +++ b/doc/librpm/html/globals_0x62.html @@ -0,0 +1,115 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- b -

+
+ + + diff --git a/doc/librpm/html/globals_0x63.html b/doc/librpm/html/globals_0x63.html new file mode 100644 index 0000000..a181564 --- /dev/null +++ b/doc/librpm/html/globals_0x63.html @@ -0,0 +1,121 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- c -

+
+ + + diff --git a/doc/librpm/html/globals_0x64.html b/doc/librpm/html/globals_0x64.html new file mode 100644 index 0000000..0a210aa --- /dev/null +++ b/doc/librpm/html/globals_0x64.html @@ -0,0 +1,103 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- d -

+
+ + + diff --git a/doc/librpm/html/globals_0x65.html b/doc/librpm/html/globals_0x65.html new file mode 100644 index 0000000..6c19c0c --- /dev/null +++ b/doc/librpm/html/globals_0x65.html @@ -0,0 +1,105 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- e -

+
+ + + diff --git a/doc/librpm/html/globals_0x66.html b/doc/librpm/html/globals_0x66.html new file mode 100644 index 0000000..9792691 --- /dev/null +++ b/doc/librpm/html/globals_0x66.html @@ -0,0 +1,227 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- f -

+
+ + + diff --git a/doc/librpm/html/globals_0x67.html b/doc/librpm/html/globals_0x67.html new file mode 100644 index 0000000..4bae44e --- /dev/null +++ b/doc/librpm/html/globals_0x67.html @@ -0,0 +1,91 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- g -

+
+ + + diff --git a/doc/librpm/html/globals_0x68.html b/doc/librpm/html/globals_0x68.html new file mode 100644 index 0000000..2eaccc3 --- /dev/null +++ b/doc/librpm/html/globals_0x68.html @@ -0,0 +1,496 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- h -

+
+ + + diff --git a/doc/librpm/html/globals_0x69.html b/doc/librpm/html/globals_0x69.html new file mode 100644 index 0000000..0a10524 --- /dev/null +++ b/doc/librpm/html/globals_0x69.html @@ -0,0 +1,140 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- i -

+
+ + + diff --git a/doc/librpm/html/globals_0x6b.html b/doc/librpm/html/globals_0x6b.html new file mode 100644 index 0000000..349489a --- /dev/null +++ b/doc/librpm/html/globals_0x6b.html @@ -0,0 +1,91 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- k -

+
+ + + diff --git a/doc/librpm/html/globals_0x6c.html b/doc/librpm/html/globals_0x6c.html new file mode 100644 index 0000000..d46d87e --- /dev/null +++ b/doc/librpm/html/globals_0x6c.html @@ -0,0 +1,97 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- l -

+
+ + + diff --git a/doc/librpm/html/globals_0x6d.html b/doc/librpm/html/globals_0x6d.html new file mode 100644 index 0000000..91f8e09 --- /dev/null +++ b/doc/librpm/html/globals_0x6d.html @@ -0,0 +1,190 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- m -

+
+ + + diff --git a/doc/librpm/html/globals_0x6e.html b/doc/librpm/html/globals_0x6e.html new file mode 100644 index 0000000..17a0181 --- /dev/null +++ b/doc/librpm/html/globals_0x6e.html @@ -0,0 +1,97 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- n -

+
+ + + diff --git a/doc/librpm/html/globals_0x6f.html b/doc/librpm/html/globals_0x6f.html new file mode 100644 index 0000000..e688fd2 --- /dev/null +++ b/doc/librpm/html/globals_0x6f.html @@ -0,0 +1,96 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- o -

+
+ + + diff --git a/doc/librpm/html/globals_0x70.html b/doc/librpm/html/globals_0x70.html new file mode 100644 index 0000000..5c809eb --- /dev/null +++ b/doc/librpm/html/globals_0x70.html @@ -0,0 +1,756 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- p -

+
+ + + diff --git a/doc/librpm/html/globals_0x71.html b/doc/librpm/html/globals_0x71.html new file mode 100644 index 0000000..e69bb0f --- /dev/null +++ b/doc/librpm/html/globals_0x71.html @@ -0,0 +1,173 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- q -

+
+ + + diff --git a/doc/librpm/html/globals_0x72.html b/doc/librpm/html/globals_0x72.html new file mode 100644 index 0000000..7eccf20 --- /dev/null +++ b/doc/librpm/html/globals_0x72.html @@ -0,0 +1,3099 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- r -

+
+ + + diff --git a/doc/librpm/html/globals_0x73.html b/doc/librpm/html/globals_0x73.html new file mode 100644 index 0000000..22c3a1d --- /dev/null +++ b/doc/librpm/html/globals_0x73.html @@ -0,0 +1,142 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- s -

+
+ + + diff --git a/doc/librpm/html/globals_0x74.html b/doc/librpm/html/globals_0x74.html new file mode 100644 index 0000000..8e3bf5c --- /dev/null +++ b/doc/librpm/html/globals_0x74.html @@ -0,0 +1,100 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- t -

+
+ + + diff --git a/doc/librpm/html/globals_0x75.html b/doc/librpm/html/globals_0x75.html new file mode 100644 index 0000000..9b7a773 --- /dev/null +++ b/doc/librpm/html/globals_0x75.html @@ -0,0 +1,139 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- u -

+
+ + + diff --git a/doc/librpm/html/globals_0x76.html b/doc/librpm/html/globals_0x76.html new file mode 100644 index 0000000..f43b5f7 --- /dev/null +++ b/doc/librpm/html/globals_0x76.html @@ -0,0 +1,169 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- v -

+
+ + + diff --git a/doc/librpm/html/globals_0x77.html b/doc/librpm/html/globals_0x77.html new file mode 100644 index 0000000..f8662be --- /dev/null +++ b/doc/librpm/html/globals_0x77.html @@ -0,0 +1,97 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- w -

+
+ + + diff --git a/doc/librpm/html/globals_0x78.html b/doc/librpm/html/globals_0x78.html new file mode 100644 index 0000000..1923a28 --- /dev/null +++ b/doc/librpm/html/globals_0x78.html @@ -0,0 +1,106 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- x -

+
+ + + diff --git a/doc/librpm/html/globals_defs.html b/doc/librpm/html/globals_defs.html new file mode 100644 index 0000000..4ce8edd --- /dev/null +++ b/doc/librpm/html/globals_defs.html @@ -0,0 +1,129 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- _ -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x62.html b/doc/librpm/html/globals_defs_0x62.html new file mode 100644 index 0000000..95e9601 --- /dev/null +++ b/doc/librpm/html/globals_defs_0x62.html @@ -0,0 +1,84 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- b -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x64.html b/doc/librpm/html/globals_defs_0x64.html new file mode 100644 index 0000000..f4c75eb --- /dev/null +++ b/doc/librpm/html/globals_defs_0x64.html @@ -0,0 +1,84 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- d -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x65.html b/doc/librpm/html/globals_defs_0x65.html new file mode 100644 index 0000000..55a0f71 --- /dev/null +++ b/doc/librpm/html/globals_defs_0x65.html @@ -0,0 +1,87 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- e -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x66.html b/doc/librpm/html/globals_defs_0x66.html new file mode 100644 index 0000000..a94af47 --- /dev/null +++ b/doc/librpm/html/globals_defs_0x66.html @@ -0,0 +1,84 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- f -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x68.html b/doc/librpm/html/globals_defs_0x68.html new file mode 100644 index 0000000..e3b25d7 --- /dev/null +++ b/doc/librpm/html/globals_defs_0x68.html @@ -0,0 +1,273 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- h -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x69.html b/doc/librpm/html/globals_defs_0x69.html new file mode 100644 index 0000000..b58a43e --- /dev/null +++ b/doc/librpm/html/globals_defs_0x69.html @@ -0,0 +1,93 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- i -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x6c.html b/doc/librpm/html/globals_defs_0x6c.html new file mode 100644 index 0000000..1015b3c --- /dev/null +++ b/doc/librpm/html/globals_defs_0x6c.html @@ -0,0 +1,87 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- l -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x6d.html b/doc/librpm/html/globals_defs_0x6d.html new file mode 100644 index 0000000..1b7d40b --- /dev/null +++ b/doc/librpm/html/globals_defs_0x6d.html @@ -0,0 +1,102 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- m -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x6e.html b/doc/librpm/html/globals_defs_0x6e.html new file mode 100644 index 0000000..9dc2802 --- /dev/null +++ b/doc/librpm/html/globals_defs_0x6e.html @@ -0,0 +1,87 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- n -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x70.html b/doc/librpm/html/globals_defs_0x70.html new file mode 100644 index 0000000..8f916ec --- /dev/null +++ b/doc/librpm/html/globals_defs_0x70.html @@ -0,0 +1,180 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- p -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x72.html b/doc/librpm/html/globals_defs_0x72.html new file mode 100644 index 0000000..191f18b --- /dev/null +++ b/doc/librpm/html/globals_defs_0x72.html @@ -0,0 +1,426 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- r -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x73.html b/doc/librpm/html/globals_defs_0x73.html new file mode 100644 index 0000000..d557d2c --- /dev/null +++ b/doc/librpm/html/globals_defs_0x73.html @@ -0,0 +1,102 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- s -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x75.html b/doc/librpm/html/globals_defs_0x75.html new file mode 100644 index 0000000..64624a2 --- /dev/null +++ b/doc/librpm/html/globals_defs_0x75.html @@ -0,0 +1,93 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- u -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x76.html b/doc/librpm/html/globals_defs_0x76.html new file mode 100644 index 0000000..48b4176 --- /dev/null +++ b/doc/librpm/html/globals_defs_0x76.html @@ -0,0 +1,90 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- v -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x77.html b/doc/librpm/html/globals_defs_0x77.html new file mode 100644 index 0000000..c034fbc --- /dev/null +++ b/doc/librpm/html/globals_defs_0x77.html @@ -0,0 +1,90 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- w -

+
+ + + diff --git a/doc/librpm/html/globals_defs_0x78.html b/doc/librpm/html/globals_defs_0x78.html new file mode 100644 index 0000000..3575307 --- /dev/null +++ b/doc/librpm/html/globals_defs_0x78.html @@ -0,0 +1,96 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- x -

+
+ + + diff --git a/doc/librpm/html/globals_enum.html b/doc/librpm/html/globals_enum.html new file mode 100644 index 0000000..9743f5d --- /dev/null +++ b/doc/librpm/html/globals_enum.html @@ -0,0 +1,277 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- a -

+ + +

- f -

+ + +

- h -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+ + +

- u -

+
+ + + diff --git a/doc/librpm/html/globals_eval.html b/doc/librpm/html/globals_eval.html new file mode 100644 index 0000000..50fb2a7 --- /dev/null +++ b/doc/librpm/html/globals_eval.html @@ -0,0 +1,86 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- a -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x62.html b/doc/librpm/html/globals_eval_0x62.html new file mode 100644 index 0000000..9521668 --- /dev/null +++ b/doc/librpm/html/globals_eval_0x62.html @@ -0,0 +1,83 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- b -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x63.html b/doc/librpm/html/globals_eval_0x63.html new file mode 100644 index 0000000..004680a --- /dev/null +++ b/doc/librpm/html/globals_eval_0x63.html @@ -0,0 +1,107 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- c -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x66.html b/doc/librpm/html/globals_eval_0x66.html new file mode 100644 index 0000000..9f3de24 --- /dev/null +++ b/doc/librpm/html/globals_eval_0x66.html @@ -0,0 +1,134 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- f -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x68.html b/doc/librpm/html/globals_eval_0x68.html new file mode 100644 index 0000000..2e6349c --- /dev/null +++ b/doc/librpm/html/globals_eval_0x68.html @@ -0,0 +1,119 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- h -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x69.html b/doc/librpm/html/globals_eval_0x69.html new file mode 100644 index 0000000..162cf7e --- /dev/null +++ b/doc/librpm/html/globals_eval_0x69.html @@ -0,0 +1,113 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- i -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x6c.html b/doc/librpm/html/globals_eval_0x6c.html new file mode 100644 index 0000000..7a726a6 --- /dev/null +++ b/doc/librpm/html/globals_eval_0x6c.html @@ -0,0 +1,83 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- l -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x6d.html b/doc/librpm/html/globals_eval_0x6d.html new file mode 100644 index 0000000..17b896d --- /dev/null +++ b/doc/librpm/html/globals_eval_0x6d.html @@ -0,0 +1,135 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- m -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x70.html b/doc/librpm/html/globals_eval_0x70.html new file mode 100644 index 0000000..e65ca23 --- /dev/null +++ b/doc/librpm/html/globals_eval_0x70.html @@ -0,0 +1,470 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- p -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x71.html b/doc/librpm/html/globals_eval_0x71.html new file mode 100644 index 0000000..53d9d7d --- /dev/null +++ b/doc/librpm/html/globals_eval_0x71.html @@ -0,0 +1,149 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- q -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x72.html b/doc/librpm/html/globals_eval_0x72.html new file mode 100644 index 0000000..8b33ccb --- /dev/null +++ b/doc/librpm/html/globals_eval_0x72.html @@ -0,0 +1,1094 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- r -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x73.html b/doc/librpm/html/globals_eval_0x73.html new file mode 100644 index 0000000..77b5bb4 --- /dev/null +++ b/doc/librpm/html/globals_eval_0x73.html @@ -0,0 +1,83 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- s -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x74.html b/doc/librpm/html/globals_eval_0x74.html new file mode 100644 index 0000000..8b6fcf3 --- /dev/null +++ b/doc/librpm/html/globals_eval_0x74.html @@ -0,0 +1,86 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- t -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x75.html b/doc/librpm/html/globals_eval_0x75.html new file mode 100644 index 0000000..cd807ec --- /dev/null +++ b/doc/librpm/html/globals_eval_0x75.html @@ -0,0 +1,101 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- u -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x76.html b/doc/librpm/html/globals_eval_0x76.html new file mode 100644 index 0000000..300cf14 --- /dev/null +++ b/doc/librpm/html/globals_eval_0x76.html @@ -0,0 +1,152 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- v -

+
+ + + diff --git a/doc/librpm/html/globals_eval_0x78.html b/doc/librpm/html/globals_eval_0x78.html new file mode 100644 index 0000000..c102c1e --- /dev/null +++ b/doc/librpm/html/globals_eval_0x78.html @@ -0,0 +1,83 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- x -

+
+ + + diff --git a/doc/librpm/html/globals_func.html b/doc/librpm/html/globals_func.html new file mode 100644 index 0000000..36f383d --- /dev/null +++ b/doc/librpm/html/globals_func.html @@ -0,0 +1,140 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- a -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x62.html b/doc/librpm/html/globals_func_0x62.html new file mode 100644 index 0000000..3750aa2 --- /dev/null +++ b/doc/librpm/html/globals_func_0x62.html @@ -0,0 +1,88 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- b -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x63.html b/doc/librpm/html/globals_func_0x63.html new file mode 100644 index 0000000..0396c21 --- /dev/null +++ b/doc/librpm/html/globals_func_0x63.html @@ -0,0 +1,85 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- c -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x64.html b/doc/librpm/html/globals_func_0x64.html new file mode 100644 index 0000000..8701475 --- /dev/null +++ b/doc/librpm/html/globals_func_0x64.html @@ -0,0 +1,85 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- d -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x65.html b/doc/librpm/html/globals_func_0x65.html new file mode 100644 index 0000000..5a7c58a --- /dev/null +++ b/doc/librpm/html/globals_func_0x65.html @@ -0,0 +1,82 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- e -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x66.html b/doc/librpm/html/globals_func_0x66.html new file mode 100644 index 0000000..7056478 --- /dev/null +++ b/doc/librpm/html/globals_func_0x66.html @@ -0,0 +1,140 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- f -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x67.html b/doc/librpm/html/globals_func_0x67.html new file mode 100644 index 0000000..2c11107 --- /dev/null +++ b/doc/librpm/html/globals_func_0x67.html @@ -0,0 +1,82 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- g -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x68.html b/doc/librpm/html/globals_func_0x68.html new file mode 100644 index 0000000..38a90e0 --- /dev/null +++ b/doc/librpm/html/globals_func_0x68.html @@ -0,0 +1,229 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- h -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x69.html b/doc/librpm/html/globals_func_0x69.html new file mode 100644 index 0000000..9a8e6dd --- /dev/null +++ b/doc/librpm/html/globals_func_0x69.html @@ -0,0 +1,86 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- i -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x6d.html b/doc/librpm/html/globals_func_0x6d.html new file mode 100644 index 0000000..8f195eb --- /dev/null +++ b/doc/librpm/html/globals_func_0x6d.html @@ -0,0 +1,88 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- m -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x70.html b/doc/librpm/html/globals_func_0x70.html new file mode 100644 index 0000000..17e55e4 --- /dev/null +++ b/doc/librpm/html/globals_func_0x70.html @@ -0,0 +1,134 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- p -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x72.html b/doc/librpm/html/globals_func_0x72.html new file mode 100644 index 0000000..b282bd0 --- /dev/null +++ b/doc/librpm/html/globals_func_0x72.html @@ -0,0 +1,1243 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- r -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x73.html b/doc/librpm/html/globals_func_0x73.html new file mode 100644 index 0000000..1d1a903 --- /dev/null +++ b/doc/librpm/html/globals_func_0x73.html @@ -0,0 +1,91 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- s -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x74.html b/doc/librpm/html/globals_func_0x74.html new file mode 100644 index 0000000..eb08154 --- /dev/null +++ b/doc/librpm/html/globals_func_0x74.html @@ -0,0 +1,82 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- t -

+
+ + + diff --git a/doc/librpm/html/globals_func_0x75.html b/doc/librpm/html/globals_func_0x75.html new file mode 100644 index 0000000..8882bab --- /dev/null +++ b/doc/librpm/html/globals_func_0x75.html @@ -0,0 +1,91 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- u -

+
+ + + diff --git a/doc/librpm/html/globals_type.html b/doc/librpm/html/globals_type.html new file mode 100644 index 0000000..f6540f6 --- /dev/null +++ b/doc/librpm/html/globals_type.html @@ -0,0 +1,573 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- _ -

+ + +

- a -

+ + +

- b -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- u -

+
+ + + diff --git a/doc/librpm/html/globals_vars.html b/doc/librpm/html/globals_vars.html new file mode 100644 index 0000000..6fdd6de --- /dev/null +++ b/doc/librpm/html/globals_vars.html @@ -0,0 +1,289 @@ + + + + +rpm: Globals + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + + + +
+
+  + +

- _ -

+ + +

- b -

+ + +

- d -

+ + +

- e -

+ + +

- k -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+
+ + + diff --git a/doc/librpm/html/graph_legend.html b/doc/librpm/html/graph_legend.html new file mode 100644 index 0000000..5a700b9 --- /dev/null +++ b/doc/librpm/html/graph_legend.html @@ -0,0 +1,107 @@ + + + + +rpm: Graph Legend + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

+
/*! Invisible class because of truncation */
+class Invisible { };
+
+/*! Truncated class, inheritance relation is hidden */
+class Truncated : public Invisible { };
+
+/* Class not documented with doxygen comments */
+class Undocumented { };
+
+/*! Class that is inherited using public inheritance */
+class PublicBase : public Truncated { };
+
+/*! A template class */
+template<class T> class Templ { };
+
+/*! Class that is inherited using protected inheritance */
+class ProtectedBase { };
+
+/*! Class that is inherited using private inheritance */
+class PrivateBase { };
+
+/*! Class that is used by the Inherited class */
+class Used { };
+
+/*! Super class that inherits a number of other classes */
+class Inherited : public PublicBase,
+                  protected ProtectedBase,
+                  private PrivateBase,
+                  public Undocumented,
+                  public Templ<int>
+{
+  private:
+    Used *m_usedClass;
+};
+

This will result in the following graph:

+
+graph_legend.png +
+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a grey border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • +
+
+ + + diff --git a/doc/librpm/html/graph_legend.md5 b/doc/librpm/html/graph_legend.md5 new file mode 100644 index 0000000..9d509f3 --- /dev/null +++ b/doc/librpm/html/graph_legend.md5 @@ -0,0 +1 @@ +9fbb782f23f919c0064b8f454a56ede8 \ No newline at end of file diff --git a/doc/librpm/html/graph_legend.png b/doc/librpm/html/graph_legend.png new file mode 100644 index 0000000..a67a7ca Binary files /dev/null and b/doc/librpm/html/graph_legend.png differ diff --git a/doc/librpm/html/group__header.html b/doc/librpm/html/group__header.html new file mode 100644 index 0000000..f82f243 --- /dev/null +++ b/doc/librpm/html/group__header.html @@ -0,0 +1,2325 @@ + + + + +rpm: Header API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Header API.
+
+
+
+Collaboration diagram for Header API.:
+
+
+ + +
+
+ + + + +

+

+ + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  header.h
 

An rpm header carries all information about a package.

+
file  rpmlib.h
 

In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.

+

+Typedefs

typedef enum rpmTagType_e rpmTagType
 The basic types of data in tags from headers.
typedef enum rpmSubTagType_e rpmSubTagType
 New rpm data types under consideration/development.

+Enumerations

enum  hMagic { HEADER_MAGIC_NO = 0, +HEADER_MAGIC_YES = 1 + }
 Include calculation for 8 bytes of (magic, 0)? More...
enum  headerGetFlags_e {
+  HEADERGET_DEFAULT = 0, +HEADERGET_MINMEM = (1 << 0), +HEADERGET_EXT = (1 << 1), +HEADERGET_RAW = (1 << 2), +
+  HEADERGET_ALLOC = (1 << 3), +HEADERGET_ARGV = (1 << 4) +
+ }
 Modifier flags for headerGet() operation. More...
enum  rpmTagType_e
 The basic types of data in tags from headers. More...
enum  rpmSubTagType_e { RPM_REGION_TYPE = -10, +RPM_BIN_ARRAY_TYPE = -11, +RPM_XREF_TYPE = -12 + }
 New rpm data types under consideration/development. More...
enum  rpmTagReturnType_e {
+  RPM_ANY_RETURN_TYPE = 0, +RPM_SCALAR_RETURN_TYPE = 0x00010000, +RPM_ARRAY_RETURN_TYPE = 0x00020000, +RPM_MAPPING_RETURN_TYPE = 0x00040000, +
+  RPM_MASK_RETURN_TYPE = 0xffff0000 +
+ }
 * Identify how to return the header data type. More...

+Functions

Header headerNew (void)
 Create new (empty) header instance.
Header headerFree (Header h)
 Dereference a header instance.
Header headerLink (Header h)
 Reference a header instance.
void headerSort (Header h)
 Sort tags in header.
void headerUnsort (Header h)
 Restore tags in header to original ordering.
unsigned int headerSizeof (Header h, int magicp)
 Return size of on-disk header representation in bytes.
int headerVerifyInfo (int il, int dl, const void *pev, void *iv, int negate)
 Perform simple sanity and range checks on header tag(s).
void * headerUnload (Header h)
 Convert header to on-disk representation.
Header headerReload (Header h, rpmTagVal tag)
 Convert header to on-disk representation, and then reload.
Header headerCopy (Header h)
 Duplicate a header.
Header headerLoad (void *uh)
 Convert header to in-memory representation.
Header headerCopyLoad (const void *uh)
 Make a copy and convert header to in-memory representation.
Header headerRead (FD_t fd, int magicp)
 Read (and load) header from file handle.
int headerWrite (FD_t fd, Header h, int magicp)
 Write (with unload) header to file handle.
int headerIsEntry (Header h, rpmTagVal tag)
 Check if tag is in header.
int headerGet (Header h, rpmTagVal tag, rpmtd td, headerGetFlags flags)
 Retrieve tag value.
int headerPut (Header h, rpmtd td, headerPutFlags flags)
 Add or append tag to header.
int headerAddI18NString (Header h, rpmTagVal tag, const char *string, const char *lang)
 Add locale specific tag to header.
int headerMod (Header h, rpmtd td)
 Modify tag in header.
int headerDel (Header h, rpmTagVal tag)
 Delete tag in header.
char * headerFormat (Header h, const char *fmt, errmsg_t *errmsg)
 Return formatted output string from header tags.
void headerCopyTags (Header headerFrom, Header headerTo, const rpmTagVal *tagstocopy)
 Duplicate tag values from one header into another.
HeaderIterator headerFreeIterator (HeaderIterator hi)
 Destroy header tag iterator.
HeaderIterator headerInitIterator (Header h)
 Create header tag iterator.
int headerNext (HeaderIterator hi, rpmtd td)
 Return next tag contents from header.
rpmTagVal headerNextTag (HeaderIterator hi)
 Return next tag number from header.
RPM_GNUC_DEPRECATED int headerNVR (Header h, const char **np, const char **vp, const char **rp)
 Return name, version, release strings from header.
RPM_GNUC_DEPRECATED int headerNEVRA (Header h, const char **np, uint32_t **ep, const char **vp, const char **rp, const char **ap)
 Return name, epoch, version, release, arch strings from header.
RPM_GNUC_DEPRECATED char * headerGetNEVR (Header h, const char **np)
 Return (malloc'd) header name-version-release string.
RPM_GNUC_DEPRECATED char * headerGetNEVRA (Header h, const char **np)
 Return (malloc'd) header name-version-release.arch string.
char * headerGetAsString (Header h, rpmTagVal tag)
 Return any non-array tag from header, converted to string.
const char * headerGetString (Header h, rpmTagVal tag)
 Return a simple string tag from header.
RPM_GNUC_DEPRECATED rpm_color_t headerGetColor (Header h)
 Return header color.
int headerIsSource (Header h)
 Check if header is a source or binary package header.
unsigned int headerGetInstance (Header h)
 Return header instance, ie is the header from rpmdb.
int headerConvert (Header h, int op)
 Convert header to/from (legacy) data presentation.
void headerMergeLegacySigs (Header h, const Header sigh)
 Translate and merge legacy signature tags into header.
Header headerRegenSigHeader (const Header h, int noArchiveSize)
 Regenerate signature header.

+Variables

const unsigned char rpm_header_magic [8]
 Header magic value.
int headerPutString (Header h, rpmTagVal tag, const char *val)
 Type-safe methods for inserting tag data to header.
int headerPutStringArray (Header h, rpmTagVal tag, const char **val, rpm_count_t size)
int headerPutBin (Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size)
int headerPutChar (Header h, rpmTagVal tag, const char *val, rpm_count_t size)
int headerPutUint8 (Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size)
int headerPutUint16 (Header h, rpmTagVal tag, const uint16_t *val, rpm_count_t size)
int headerPutUint32 (Header h, rpmTagVal tag, const uint32_t *val, rpm_count_t size)
int headerPutUint64 (Header h, rpmTagVal tag, const uint64_t *val, rpm_count_t size)

+RPMRC

rpmRC headerCheckPayloadFormat (Header h)
 Check for supported payload format in header.
rpmRC headerCheck (rpmts ts, const void *uh, size_t uc, char **msg)
 Check header consistency, performing headerGetEntry() the hard way.
rpmRC rpmReadHeader (rpmts ts, FD_t fd, Header *hdrp, char **msg)
 Return checked and loaded header.
rpmRC rpmReadPackageFile (rpmts ts, FD_t fd, const char *fn, Header *hdrp)
 Return package header from file handle, verifying digests/signatures.
+

Typedef Documentation

+ +
+
+ + + + +
typedef enum rpmSubTagType_e rpmSubTagType
+
+
+ +

New rpm data types under consideration/development.

+

These data types may (or may not) be added to rpm at some point. In order to avoid incompatibility with legacy versions of rpm, these data (sub-)types are introduced into the header by overloading RPM_BIN_TYPE, with the binary value of the tag a 16 byte image of what should/will be in the header index, followed by per-tag private data.

+ +
+
+ +
+
+ + + + +
typedef enum rpmTagType_e rpmTagType
+
+
+ +

The basic types of data in tags from headers.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum headerGetFlags_e
+
+
+ +

Modifier flags for headerGet() operation.

+

For consistent behavior you'll probably want to use ALLOC to ensure the caller owns the data, but MINMEM is useful for avoiding extra copy of data when you are sure the header wont go away. Most of the time you'll probably want EXT too, but note that extensions tags don't generally honor the other flags, MINMEM, RAW, ALLOC and ARGV are only relevant for non-extension data.

+
Enumerator:
+ + + + + + +
HEADERGET_DEFAULT  +
HEADERGET_MINMEM  +
HEADERGET_EXT  +
HEADERGET_RAW  +
HEADERGET_ALLOC  +
HEADERGET_ARGV  +
+
+
+ +

Definition at line 159 of file header.h.

+ +
+
+ +
+
+ + + + +
enum hMagic
+
+
+ +

Include calculation for 8 bytes of (magic, 0)?

+
Enumerator:
+ + +
HEADER_MAGIC_NO  +
HEADER_MAGIC_YES  +
+
+
+ +

Definition at line 32 of file header.h.

+ +
+
+ +
+
+ + + + +
enum rpmSubTagType_e
+
+
+ +

New rpm data types under consideration/development.

+

These data types may (or may not) be added to rpm at some point. In order to avoid incompatibility with legacy versions of rpm, these data (sub-)types are introduced into the header by overloading RPM_BIN_TYPE, with the binary value of the tag a 16 byte image of what should/will be in the header index, followed by per-tag private data.

+
Enumerator:
+ + + +
RPM_REGION_TYPE  +
RPM_BIN_ARRAY_TYPE  +
Todo:
Implement, kinda like RPM_STRING_ARRAY_TYPE for known (but variable) length binary data.
+
RPM_XREF_TYPE  +
Todo:
Implement, intent is to to carry a (???,tagNum,valNum) cross reference to retrieve data from other tags.
+
+
+
+ +

Definition at line 388 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
enum rpmTagReturnType_e
+
+
+ +

* Identify how to return the header data type.

+
Enumerator:
+ + + + + +
RPM_ANY_RETURN_TYPE  +
RPM_SCALAR_RETURN_TYPE  +
RPM_ARRAY_RETURN_TYPE  +
RPM_MAPPING_RETURN_TYPE  +
RPM_MASK_RETURN_TYPE  +
+
+
+ +

Definition at line 401 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
enum rpmTagType_e
+
+
+ +

The basic types of data in tags from headers.

+ +

Definition at line 353 of file rpmtag.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerAddI18NString (Header h,
rpmTagVal tag,
const char * string,
const char * lang 
)
+
+
+ +

Add locale specific tag to header.

+

A NULL lang is interpreted as the C locale. Here are the rules:

+
+ *	- If the tag isn't in the header, it's added with the passed string
+ *	   as new value.
+ *	- If the tag occurs multiple times in entry, which tag is affected
+ *	   by the operation is undefined.
+ *	- If the tag is in the header w/ this language, the entry is
+ *	   *replaced* (like headerMod()).
+ * 

This function is intended to just "do the right thing". If you need more fine grained control use headerPut() and headerMod().

+
Parameters:
+ + + + + +
hheader
tagtag
stringtag value
langlocale
+
+
+
Returns:
1 on success, 0 on failure
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rpmRC headerCheck (rpmts ts,
const void * uh,
size_t uc,
char ** msg 
)
+
+
+ +

Check header consistency, performing headerGetEntry() the hard way.

+

Sanity checks on the header are performed while looking for a header-only digest or signature to verify the blob. If found, the digest or signature is verified.

+
Parameters:
+ + + + +
tstransaction set
uhunloaded header blob
ucno. of bytes in blob (or 0 to disable)
+
+
+
Return values:
+ + +
*msgverification error message (or NULL)
+
+
+
Returns:
RPMRC_OK on success
+ +
+
+ +
+
+ + + + + + + + +
rpmRC headerCheckPayloadFormat (Header h)
+
+
+ +

Check for supported payload format in header.

+
Parameters:
+ + +
hheader to check
+
+
+
Returns:
RPMRC_OK if supported, RPMRC_FAIL otherwise
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int headerConvert (Header h,
int op 
)
+
+
+ +

Convert header to/from (legacy) data presentation.

+
Parameters:
+ + + +
hheader
opone of headerConvOps operations
+
+
+
Returns:
1 on success, 0 on failure
+ +
+
+ +
+
+ + + + + + + + +
Header headerCopy (Header h)
+
+
+ +

Duplicate a header.

+
Parameters:
+ + +
hheader
+
+
+
Returns:
new header instance
+ +
+
+ +
+
+ + + + + + + + +
Header headerCopyLoad (const void * uh)
+
+
+ +

Make a copy and convert header to in-memory representation.

+
Parameters:
+ + +
uhon-disk header blob (i.e. with offsets)
+
+
+
Returns:
header
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void headerCopyTags (Header headerFrom,
Header headerTo,
const rpmTagValtagstocopy 
)
+
+
+ +

Duplicate tag values from one header into another.

+
Parameters:
+ + + + +
headerFromsource header
headerTodestination header
tagstocopyarray of tags that are copied
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int headerDel (Header h,
rpmTagVal tag 
)
+
+
+ +

Delete tag in header.

+

Removes all entries of type tag from the header, returns 1 if none were found.

+
Parameters:
+ + + +
hheader
tagtag
+
+
+
Returns:
0 on success, 1 on failure (INCONSISTENT)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
char* headerFormat (Header h,
const char * fmt,
errmsg_terrmsg 
)
+
+
+ +

Return formatted output string from header tags.

+

The returned string must be free()d.

+
Parameters:
+ + + +
hheader
fmtformat to use
+
+
+
Return values:
+ + +
errmsgerror message (if any)
+
+
+
Returns:
formatted output string (malloc'ed)
+ +
+
+ +
+
+ + + + + + + + +
Header headerFree (Header h)
+
+
+ +

Dereference a header instance.

+
Parameters:
+ + +
hheader
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
HeaderIterator headerFreeIterator (HeaderIterator hi)
+
+
+ +

Destroy header tag iterator.

+
Parameters:
+ + +
hiheader tag iterator
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerGet (Header h,
rpmTagVal tag,
rpmtd td,
headerGetFlags flags 
)
+
+
+ +

Retrieve tag value.

+
Parameters:
+ + + +
hheader
tagtag
+
+
+
Return values:
+ + +
tdtag data container
+
+
+
Parameters:
+ + +
flagsretrieval modifier flags
+
+
+
Returns:
1 on success, 0 on failure
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
char* headerGetAsString (Header h,
rpmTagVal tag 
)
+
+
+ +

Return any non-array tag from header, converted to string.

+
Parameters:
+ + + +
hheader
tagtag to retrieve
+
+
+
Returns:
string pointer (malloced) or NULL on failure
+ +
+
+ +
+
+ + + + + + + + +
RPM_GNUC_DEPRECATED rpm_color_t headerGetColor (Header h)
+
+
+ +

Return header color.

+
Parameters:
+ + +
hheader
+
+
+
Returns:
header color
+ +
+
+ +
+
+ + + + + + + + +
unsigned int headerGetInstance (Header h)
+
+
+ +

Return header instance, ie is the header from rpmdb.

+
Parameters:
+ + +
hheader
+
+
+
Returns:
rpmdb record number or 0
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
RPM_GNUC_DEPRECATED char* headerGetNEVR (Header h,
const char ** np 
)
+
+
+ +

Return (malloc'd) header name-version-release string.

+
Parameters:
+ + +
hheader
+
+
+
Return values:
+ + +
npname tag value
+
+
+
Returns:
name-version-release string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
RPM_GNUC_DEPRECATED char* headerGetNEVRA (Header h,
const char ** np 
)
+
+
+ +

Return (malloc'd) header name-version-release.arch string.

+
Parameters:
+ + +
hheader
+
+
+
Return values:
+ + +
npname tag value
+
+
+
Returns:
name-version-release string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
const char* headerGetString (Header h,
rpmTagVal tag 
)
+
+
+ +

Return a simple string tag from header.

+
Parameters:
+ + + +
hheader
tagtag to retrieve
+
+
+
Returns:
string pointer (to header memory) or NULL on failure
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
HeaderIterator headerInitIterator (Header h)
+
+
+ +

Create header tag iterator.

+
Parameters:
+ + +
hheader
+
+
+
Returns:
header tag iterator
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int headerIsEntry (Header h,
rpmTagVal tag 
)
+
+
+ +

Check if tag is in header.

+
Parameters:
+ + + +
hheader
tagtag
+
+
+
Returns:
1 on success, 0 on failure
+ +
+
+ +
+
+ + + + + + + + +
int headerIsSource (Header h)
+
+
+ +

Check if header is a source or binary package header.

+
Parameters:
+ + +
hheader
+
+
+
Returns:
0 == binary, 1 == source
+ +
+
+ +
+
+ + + + + + + + +
Header headerLink (Header h)
+
+
+ +

Reference a header instance.

+
Parameters:
+ + +
hheader
+
+
+
Returns:
new header reference
+ +
+
+ +
+
+ + + + + + + + +
Header headerLoad (void * uh)
+
+
+ +

Convert header to in-memory representation.

+
Parameters:
+ + +
uhon-disk header blob (i.e. with offsets)
+
+
+
Returns:
header
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void headerMergeLegacySigs (Header h,
const Header sigh 
)
+
+
+ +

Translate and merge legacy signature tags into header.

+
Todo:
Remove headerSort() through headerInitIterator() modifies sig.
+
Parameters:
+ + + +
hheader
sighsignature header
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int headerMod (Header h,
rpmtd td 
)
+
+
+ +

Modify tag in header.

+

If there are multiple entries with this tag, the first one gets replaced.

+
Parameters:
+ + + +
hheader
tdtag data container
+
+
+
Returns:
1 on success, 0 on failure
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RPM_GNUC_DEPRECATED int headerNEVRA (Header h,
const char ** np,
uint32_t ** ep,
const char ** vp,
const char ** rp,
const char ** ap 
)
+
+
+ +

Return name, epoch, version, release, arch strings from header.

+
Parameters:
+ + +
hheader
+
+
+
Return values:
+ + + + + + +
*npname pointer (or NULL)
*epepoch pointer (or NULL)
*vpversion pointer (or NULL)
*rprelease pointer (or NULL)
*aparch pointer (or NULL)
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + +
Header headerNew (void )
+
+
+ +

Create new (empty) header instance.

+
Returns:
header
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int headerNext (HeaderIterator hi,
rpmtd td 
)
+
+
+ +

Return next tag contents from header.

+
Parameters:
+ + +
hiheader tag iterator
+
+
+
Return values:
+ + +
tdtag data container
+
+
+
Returns:
1 on success, 0 on failure
+ +
+
+ +
+
+ + + + + + + + +
rpmTagVal headerNextTag (HeaderIterator hi)
+
+
+ +

Return next tag number from header.

+
Parameters:
+ + +
hiheader tag iterator
+
+
+
Returns:
next tag, RPMTAG_NOT_FOUND to stop iteration
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RPM_GNUC_DEPRECATED int headerNVR (Header h,
const char ** np,
const char ** vp,
const char ** rp 
)
+
+
+ +

Return name, version, release strings from header.

+
Parameters:
+ + +
hheader
+
+
+
Return values:
+ + + + +
*npname pointer (or NULL)
*vpversion pointer (or NULL)
*rprelease pointer (or NULL)
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int headerPut (Header h,
rpmtd td,
headerPutFlags flags 
)
+
+
+ +

Add or append tag to header.

+
Parameters:
+ + + + +
hheader
tdtag data container
flagsflags to control operation
+
+
+
Returns:
1 on success, 0 on failure
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerPutBin (Header h,
rpmTagVal tag,
const uint8_t * val,
rpm_count_t size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerPutChar (Header h,
rpmTagVal tag,
const char * val,
rpm_count_t size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int headerPutString (Header h,
rpmTagVal tag,
const char * val 
)
+
+
+ +

Type-safe methods for inserting tag data to header.

+

Tag data type is validated to match the function type, ie things like headerPutUint32(h, RPMTAG_NAME, ...) will return failure. For non-array types size must equal 1, and data is checked to be non-NULL. For array types, add-or-append mode is always used.

+

headerPutString() can be used on both RPM_STRING_TYPE and RPM_STRING_ARRAY_TYPE (to add a single string into the array) tags, for others the type must match exactly.

+

These are intended to "do the right thing" in the common case, if you need more fine grained control use headerPut() & friends instead.

+
Todo:
Make doxygen group these meaningfully.
+
Parameters:
+ + + + + +
hheader
tagtag to insert
valpointer to value(s)
sizenumber of items in array (1 or larger)
+
+
+
Returns:
1 on success, 0 on failure
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerPutStringArray (Header h,
rpmTagVal tag,
const char ** val,
rpm_count_t size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerPutUint16 (Header h,
rpmTagVal tag,
const uint16_t * val,
rpm_count_t size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerPutUint32 (Header h,
rpmTagVal tag,
const uint32_t * val,
rpm_count_t size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerPutUint64 (Header h,
rpmTagVal tag,
const uint64_t * val,
rpm_count_t size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerPutUint8 (Header h,
rpmTagVal tag,
const uint8_t * val,
rpm_count_t size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Header headerRead (FD_t fd,
int magicp 
)
+
+
+ +

Read (and load) header from file handle.

+
Parameters:
+ + + +
fdfile handle
magicpread (and verify) 8 bytes of (magic, 0)?
+
+
+
Returns:
header (or NULL on error)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Header headerRegenSigHeader (const Header h,
int noArchiveSize 
)
+
+
+ +

Regenerate signature header.

+
Todo:
Remove headerSort() through headerInitIterator() modifies h.
+
Parameters:
+ + + +
hheader
noArchiveSizedon't copy archive size tag (pre rpm-4.1)
+
+
+
Returns:
regenerated signature header
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Header headerReload (Header h,
rpmTagVal tag 
)
+
+
+ +

Convert header to on-disk representation, and then reload.

+

This is used to insure that all header data is in one chunk.

+
Parameters:
+ + + +
hheader (with pointers)
tagregion tag
+
+
+
Returns:
on-disk header (with offsets)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
unsigned int headerSizeof (Header h,
int magicp 
)
+
+
+ +

Return size of on-disk header representation in bytes.

+
Parameters:
+ + + +
hheader
magicpinclude size of 8 bytes for (magic, 0)?
+
+
+
Returns:
size of on-disk header
+ +
+
+ +
+
+ + + + + + + + +
void headerSort (Header h)
+
+
+ +

Sort tags in header.

+
Parameters:
+ + +
hheader
+
+
+ +
+
+ +
+
+ + + + + + + + +
void* headerUnload (Header h)
+
+
+ +

Convert header to on-disk representation.

+
Parameters:
+ + +
hheader (with pointers)
+
+
+
Returns:
on-disk header blob (i.e. with offsets)
+ +
+
+ +
+
+ + + + + + + + +
void headerUnsort (Header h)
+
+
+ +

Restore tags in header to original ordering.

+
Parameters:
+ + +
hheader
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int headerVerifyInfo (int il,
int dl,
const void * pev,
void * iv,
int negate 
)
+
+
+ +

Perform simple sanity and range checks on header tag(s).

+
Parameters:
+ + + + + + +
ilno. of tags in header
dlno. of bytes in header data.
pev1st element in tag array, big-endian
ivfailing (or last) tag element, host-endian
negatenegative offset expected?
+
+
+
Returns:
-1 on success, otherwise failing tag element index
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int headerWrite (FD_t fd,
Header h,
int magicp 
)
+
+
+ +

Write (with unload) header to file handle.

+
Parameters:
+ + + + +
fdfile handle
hheader
magicpprefix write with 8 bytes of (magic, 0)?
+
+
+
Returns:
0 on success, 1 on error
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rpmRC rpmReadHeader (rpmts ts,
FD_t fd,
Headerhdrp,
char ** msg 
)
+
+
+ +

Return checked and loaded header.

+
Parameters:
+ + + +
tstransaction set
fdfile handle
+
+
+
Return values:
+ + + +
hdrpaddress of header (or NULL)
*msgverification error message (or NULL)
+
+
+
Returns:
RPMRC_OK on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rpmRC rpmReadPackageFile (rpmts ts,
FD_t fd,
const char * fn,
Headerhdrp 
)
+
+
+ +

Return package header from file handle, verifying digests/signatures.

+
Parameters:
+ + + + +
tstransaction set
fdfile handle
fnfile name
+
+
+
Return values:
+ + +
hdrpaddress of header (or NULL)
+
+
+
Returns:
RPMRC_OK on success
+ +

Referenced by main().

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
const unsigned char rpm_header_magic[8]
+
+
+ +

Header magic value.

+ +
+
+
+ + + diff --git a/doc/librpm/html/group__header.map b/doc/librpm/html/group__header.map new file mode 100644 index 0000000..e3ba8f7 --- /dev/null +++ b/doc/librpm/html/group__header.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/group__header.md5 b/doc/librpm/html/group__header.md5 new file mode 100644 index 0000000..a7975a2 --- /dev/null +++ b/doc/librpm/html/group__header.md5 @@ -0,0 +1 @@ +278f072b8cede386f2a4f536d4dc0a7d \ No newline at end of file diff --git a/doc/librpm/html/group__header.png b/doc/librpm/html/group__header.png new file mode 100644 index 0000000..d17dcc0 Binary files /dev/null and b/doc/librpm/html/group__header.png differ diff --git a/doc/librpm/html/group__rpmargv.html b/doc/librpm/html/group__rpmargv.html new file mode 100644 index 0000000..956d0ce --- /dev/null +++ b/doc/librpm/html/group__rpmargv.html @@ -0,0 +1,740 @@ + + + + +rpm: Argument Manipulation API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Argument Manipulation API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  argv.h

+Functions

void argvPrint (const char *msg, ARGV_const_t argv, FILE *fp)
 Print argv array elements.
ARGI_t argiFree (ARGI_t argi)
 Destroy an argi array.
ARGV_t argvNew (void)
 Create an empty argv array.
ARGV_t argvFree (ARGV_t argv)
 Destroy an argv array.
int argiCount (ARGI_const_t argi)
 Return no.
ARGint_t argiData (ARGI_const_t argi)
 Return data from argi array.
int argvCount (ARGV_const_t argv)
 Return no.
ARGV_t argvData (ARGV_t argv)
 Return data from argv array.
int argvCmp (const void *a, const void *b)
 Compare argv arrays (qsort/bsearch).
int argvSort (ARGV_t argv, int(*compar)(const void *, const void *))
 Sort an argv array.
ARGV_t argvSearch (ARGV_const_t argv, const char *val, int(*compar)(const void *, const void *))
 Find an element in an argv array.
int argiAdd (ARGI_t *argip, int ix, int val)
 Add an int to an argi array.
int argvAdd (ARGV_t *argvp, const char *val)
 Add a string to an argv array.
int argvAddNum (ARGV_t *argvp, int val)
 Add a number to an argv array (converting to a string).
int argvAppend (ARGV_t *argvp, ARGV_const_t av)
 Append one argv array to another.
ARGV_t argvSplitString (const char *str, const char *seps, argvFlags flags)
 Split a string into an argv array.
int argvSplit (ARGV_t *argvp, const char *str, const char *seps)
 Split a string into an argv array.
char * argvJoin (ARGV_const_t argv, const char *sep)
 Join an argv array into a string.
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int argiAdd (ARGI_targip,
int ix,
int val 
)
+
+
+ +

Add an int to an argi array.

+
Return values:
+ + +
*argipargi array
+
+
+
Parameters:
+ + + +
ixargi array index (or -1 to append)
valint arg to add
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + +
int argiCount (ARGI_const_t argi)
+
+
+ +

Return no.

+

of elements in argi array.

+
Parameters:
+ + +
argiargi array
+
+
+
Returns:
no. of elements
+ +
+
+ +
+
+ + + + + + + + +
ARGint_t argiData (ARGI_const_t argi)
+
+
+ +

Return data from argi array.

+
Parameters:
+ + +
argiargi array
+
+
+
Returns:
argi array data address
+ +
+
+ +
+
+ + + + + + + + +
ARGI_t argiFree (ARGI_t argi)
+
+
+ +

Destroy an argi array.

+
Parameters:
+ + +
argiargi array
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int argvAdd (ARGV_targvp,
const char * val 
)
+
+
+ +

Add a string to an argv array.

+
Return values:
+ + +
*argvpargv array
+
+
+
Parameters:
+ + +
valstring arg to append
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int argvAddNum (ARGV_targvp,
int val 
)
+
+
+ +

Add a number to an argv array (converting to a string).

+
Return values:
+ + +
*argvpargv array
+
+
+
Parameters:
+ + +
valnumeric arg to append
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int argvAppend (ARGV_targvp,
ARGV_const_t av 
)
+
+
+ +

Append one argv array to another.

+
Return values:
+ + +
*argvpargv array
+
+
+
Parameters:
+ + +
avargv array to append
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int argvCmp (const void * a,
const void * b 
)
+
+
+ +

Compare argv arrays (qsort/bsearch).

+
Parameters:
+ + + +
a1st instance address
b2nd instance address
+
+
+
Returns:
result of comparison
+ +
+
+ +
+
+ + + + + + + + +
int argvCount (ARGV_const_t argv)
+
+
+ +

Return no.

+

of elements in argv array.

+
Parameters:
+ + +
argvargv array
+
+
+
Returns:
no. of elements
+ +
+
+ +
+
+ + + + + + + + +
ARGV_t argvData (ARGV_t argv)
+
+
+ +

Return data from argv array.

+
Parameters:
+ + +
argvargv array
+
+
+
Returns:
argv array data address
+ +
+
+ +
+
+ + + + + + + + +
ARGV_t argvFree (ARGV_t argv)
+
+
+ +

Destroy an argv array.

+
Parameters:
+ + +
argvargv array
+
+
+
Returns:
NULL always
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
char* argvJoin (ARGV_const_t argv,
const char * sep 
)
+
+
+ +

Join an argv array into a string.

+
Parameters:
+ + + +
*argvargv array to join
sepseperator string to use
+
+
+
Returns:
malloc'ed string
+ +

Referenced by build().

+ +
+
+ +
+
+ + + + + + + + +
ARGV_t argvNew (void )
+
+
+ +

Create an empty argv array.

+
Returns:
pointer to empty argv
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void argvPrint (const char * msg,
ARGV_const_t argv,
FILE * fp 
)
+
+
+ +

Print argv array elements.

+
Parameters:
+ + + + +
msgoutput message prefix (or NULL)
argvargv array
fpoutput file handle (NULL uses stderr)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
ARGV_t argvSearch (ARGV_const_t argv,
const char * val,
int(*)(const void *, const void *) compar 
)
+
+
+ +

Find an element in an argv array.

+
Parameters:
+ + + + +
argvargv array
valstring to find
comparstrcmp-like comparison function, or NULL for argvCmp()
+
+
+
Returns:
found string (NULL on failure)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int argvSort (ARGV_t argv,
int(*)(const void *, const void *) compar 
)
+
+
+ +

Sort an argv array.

+
Parameters:
+ + + +
argvargv array
comparstrcmp-like comparison function, or NULL for argvCmp()
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int argvSplit (ARGV_targvp,
const char * str,
const char * seps 
)
+
+
+ +

Split a string into an argv array.

+
Return values:
+ + +
*argvpargv array
+
+
+
Parameters:
+ + + +
strstring arg to split
sepsseperator characters
+
+
+
Returns:
0 always
+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
ARGV_t argvSplitString (const char * str,
const char * seps,
argvFlags flags 
)
+
+
+ +

Split a string into an argv array.

+
Parameters:
+ + + + +
strstring arg to split
sepsseperator characters
flagsflags to control behavior
+
+
+
Returns:
argv array
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmbuild.html b/doc/librpm/html/group__rpmbuild.html new file mode 100644 index 0000000..8ddc541 --- /dev/null +++ b/doc/librpm/html/group__rpmbuild.html @@ -0,0 +1,512 @@ + + + + +rpm: Build API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Build API.
+
+
+
+Collaboration diagram for Build API.:
+
+
+ + +
+
+ + + + + + + + +

+

+ + +

+

+ + +

+

+ + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  rpmBuildArguments_s
 Describe build request. More...

+Files

file  rpmcli.h
file  rpmbuild.h
 

This is the *only* module users of librpmbuild should need to include.

+
file  rpmfc.h
 

Structures and methods for build-time file classification.

+
file  rpmspec.h
 

The rpmSpec and Package data structures used during build.

+

+Typedefs

typedef struct
+rpmBuildArguments_s
BTA_t
typedef struct Package_s * rpmSpecPkg

+Enumerations

enum  rpmBuildFlags_e {
+  RPMBUILD_NONE = 0, +RPMBUILD_PREP = (1 << 0), +RPMBUILD_BUILD = (1 << 1), +RPMBUILD_INSTALL = (1 << 2), +
+  RPMBUILD_CHECK = (1 << 3), +RPMBUILD_CLEAN = (1 << 4), +RPMBUILD_FILECHECK = (1 << 5), +RPMBUILD_PACKAGESOURCE = (1 << 6), +
+  RPMBUILD_PACKAGEBINARY = (1 << 7), +RPMBUILD_RMSOURCE = (1 << 8), +RPMBUILD_RMBUILD = (1 << 9), +RPMBUILD_STRINGBUF = (1 << 10), +
+  RPMBUILD_RMSPEC = (1 << 11), +RPMBUILD_NOBUILD = (1 << 31) +
+ }
 Bit(s) to control rpmSpecBuild() operation. More...
enum  rpmBuildPkgFlags_e { RPMBUILD_PKG_NONE = 0, +RPMBUILD_PKG_NODIRTOKENS = (1 << 0) + }
 Bit(s) to control package generation. More...

+Functions

rpmSpec rpmSpecParse (const char *specFile, rpmSpecFlags flags, const char *buildRoot)
 Parse spec file into spec control structure.
Header rpmSpecSourceHeader (rpmSpec spec)
 Return the headers of the SRPM that would be built from the spec file.
rpmps rpmSpecCheckDeps (rpmts ts, rpmSpec spec)
 Verify build depencies of a spec against.
rpmds rpmSpecDS (rpmSpec spec, rpmTagVal tag)
 Retrieve build dependency set from spec.
rpmRC rpmSpecBuild (rpmSpec spec, BTA_t buildArgs)
 Spec build stages state machine driver.
rpmSpec rpmSpecFree (rpmSpec spec)
 Destroy Spec structure.
int rpmspecQuery (rpmts ts, QVA_t qva, const char *arg)
 Function to query spec file(s).
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct rpmBuildArguments_s* BTA_t
+
+
+ +

Definition at line 63 of file rpmbuild.h.

+ +
+
+ +
+
+ + + + +
typedef struct Package_s* rpmSpecPkg
+
+
+ +

Definition at line 18 of file rpmspec.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmBuildFlags_e
+
+
+ +

Bit(s) to control rpmSpecBuild() operation.

+
Enumerator:
+ + + + + + + + + + + + + + +
RPMBUILD_NONE  +
RPMBUILD_PREP  +

Execute %prep.

+
RPMBUILD_BUILD  +

Execute %build.

+
RPMBUILD_INSTALL  +

Execute %install.

+
RPMBUILD_CHECK  +

Execute %check.

+
RPMBUILD_CLEAN  +

Execute %clean.

+
RPMBUILD_FILECHECK  +

Check %files manifest.

+
RPMBUILD_PACKAGESOURCE  +

Create source package.

+
RPMBUILD_PACKAGEBINARY  +

Create binary package(s).

+
RPMBUILD_RMSOURCE  +

Remove source(s) and patch(s).

+
RPMBUILD_RMBUILD  +

Remove build sub-tree.

+
RPMBUILD_STRINGBUF  +

Internal use only

+
RPMBUILD_RMSPEC  +

Remove spec file.

+
RPMBUILD_NOBUILD  +

Don't execute or package.

+
+
+
+ +

Definition at line 20 of file rpmbuild.h.

+ +
+
+ +
+
+ + + + +
enum rpmBuildPkgFlags_e
+
+
+ +

Bit(s) to control package generation.

+
Enumerator:
+ + +
RPMBUILD_PKG_NONE  +
RPMBUILD_PKG_NODIRTOKENS  +

Legacy filename layout

+
+
+
+ +

Definition at line 43 of file rpmbuild.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmRC rpmSpecBuild (rpmSpec spec,
BTA_t buildArgs 
)
+
+
+ +

Spec build stages state machine driver.

+
Parameters:
+ + + +
specspec file control structure
buildArgsbuild arguments
+
+
+
Returns:
RPMRC_OK on success
+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmps rpmSpecCheckDeps (rpmts ts,
rpmSpec spec 
)
+
+
+ +

Verify build depencies of a spec against.

+
Parameters:
+ + + +
ts(empty) transaction set
specparsed spec control structure
+
+
+
Returns:
rpm problem set or NULL on no problems
+ +

Referenced by checkSpec().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmds rpmSpecDS (rpmSpec spec,
rpmTagVal tag 
)
+
+
+ +

Retrieve build dependency set from spec.

+
Parameters:
+ + + +
specparsed spec control structure
tagdependency tag
+
+
+
Returns:
dependency set of tag (or NULL)
+ +
+
+ +
+
+ + + + + + + + +
rpmSpec rpmSpecFree (rpmSpec spec)
+
+
+ +

Destroy Spec structure.

+
Parameters:
+ + +
specspec file control structure
+
+
+
Returns:
NULL always
+ +

Referenced by buildForTarget(), and main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rpmSpec rpmSpecParse (const char * specFile,
rpmSpecFlags flags,
const char * buildRoot 
)
+
+
+ +

Parse spec file into spec control structure.

+
Todo:
Eliminate buildRoot from here, its a build, not spec property
+
Parameters:
+ + + + +
specFilepath to spec file
flagsflags to control operation
buildRootbuildRoot override or NULL for default
+
+
+
Returns:
new spec control structure
+ +

Referenced by buildForTarget(), and main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmspecQuery (rpmts ts,
QVA_t qva,
const char * arg 
)
+
+
+ +

Function to query spec file(s).

+
Parameters:
+ + + + +
tstransaction set
qvaparsed query/verify options
argquery argument
+
+
+
Returns:
0 on success, else no. of failures
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
Header rpmSpecSourceHeader (rpmSpec spec)
+
+
+ +

Return the headers of the SRPM that would be built from the spec file.

+
Parameters:
+ + +
specpath to spec file
+
+
+
Returns:
Header
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmbuild.map b/doc/librpm/html/group__rpmbuild.map new file mode 100644 index 0000000..2675ec2 --- /dev/null +++ b/doc/librpm/html/group__rpmbuild.map @@ -0,0 +1,4 @@ + + + + diff --git a/doc/librpm/html/group__rpmbuild.md5 b/doc/librpm/html/group__rpmbuild.md5 new file mode 100644 index 0000000..4d7cbeb --- /dev/null +++ b/doc/librpm/html/group__rpmbuild.md5 @@ -0,0 +1 @@ +3901df789f5c6cd7aeac19514c28a4ae \ No newline at end of file diff --git a/doc/librpm/html/group__rpmbuild.png b/doc/librpm/html/group__rpmbuild.png new file mode 100644 index 0000000..8a01583 Binary files /dev/null and b/doc/librpm/html/group__rpmbuild.png differ diff --git a/doc/librpm/html/group__rpmcli.html b/doc/librpm/html/group__rpmcli.html new file mode 100644 index 0000000..1b931bd --- /dev/null +++ b/doc/librpm/html/group__rpmcli.html @@ -0,0 +1,1336 @@ + + + + +rpm: Command Line API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Command Line API.
+
+
+
+Collaboration diagram for Command Line API.:
+
+
+ + +
+
+ + + + + + + + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  rpmQVKArguments_s
 Describe query/verify/signature command line operation. More...
struct  rpmInstallArguments_s
 Describe database command line requests. More...

+Files

file  rpmcli.h
file  rpmlib.h
 

In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.

+

+Functions

poptContext rpmcliInit (int argc, char *const argv[], struct poptOption *optionsTable)
 Initialize most everything needed by an rpm CLI executable context.
void rpmcliConfigured (void)
 Make sure that rpm configuration has been read.
poptContext rpmcliFini (poptContext optCon)
 Destroy most everything needed by an rpm CLI executable context.

+Variables

struct poptOption rpmcliAllPoptTable []
 Popt option table for options shared by all modes and executables.

+RPMQV

enum  rpmQVSources_e {
+  RPMQV_PACKAGE = 0, +RPMQV_PATH, +RPMQV_ALL, +RPMQV_RPM, +
+  RPMQV_GROUP, +RPMQV_WHATPROVIDES, +RPMQV_WHATREQUIRES, +RPMQV_TRIGGEREDBY, +
+  RPMQV_DBOFFSET, +RPMQV_SPECRPMS, +RPMQV_SPECFILE = RPMQV_SPECRPMS, +RPMQV_PKGID, +
+  RPMQV_HDRID, +RPMQV_TID, +RPMQV_SPECSRPM +
+ }
 Query/Verify argument qualifiers. More...
enum  rpmQueryFlags_e {
+  QUERY_FOR_DEFAULT = 0, +QUERY_MD5 = (1 << 0), +QUERY_FILEDIGEST = (1 << 0), +QUERY_SIZE = (1 << 1), +
+  QUERY_LINKTO = (1 << 2), +QUERY_USER = (1 << 3), +QUERY_GROUP = (1 << 4), +QUERY_MTIME = (1 << 5), +
+  QUERY_MODE = (1 << 6), +QUERY_RDEV = (1 << 7), +QUERY_CONTEXTS = (1 << 15), +QUERY_FILES = (1 << 16), +
+  QUERY_DEPS = (1 << 17), +QUERY_SCRIPT = (1 << 18), +QUERY_DIGEST = (1 << 19), +QUERY_SIGNATURE = (1 << 20), +
+  QUERY_PATCHES = (1 << 21), +QUERY_HDRCHK = (1 << 22), +QUERY_FOR_LIST = (1 << 23), +QUERY_FOR_STATE = (1 << 24), +
+  QUERY_FOR_DOCS = (1 << 25), +QUERY_FOR_CONFIG = (1 << 26), +QUERY_FOR_DUMPFILES = (1 << 27) +
+ }
 Bit(s) to control rpmQuery() operation, stored in qva_flags. More...
typedef struct rpmQVKArguments_sQVA_t
typedef int(* QVF_t )(QVA_t qva, rpmts ts, Header h)
 Function to display iterator matches.
typedef int(* QSpecF_t )(rpmts ts, QVA_t qva, const char *arg)
 Function to query spec file.
rpmQueryFlags rpmcliQueryFlags
 Bit(s) from common command line options.
struct rpmQVKArguments_s rpmQVKArgs
struct poptOption rpmQVSourcePoptTable []
struct poptOption rpmQueryPoptTable []
struct poptOption rpmVerifyPoptTable []
void rpmDisplayQueryTags (FILE *fp)
 Display list of tags that can be used in --queryformat.
int showQueryPackage (QVA_t qva, rpmts ts, Header h)
 Display results of package query.
int rpmcliArgIter (rpmts ts, QVA_t qva, ARGV_const_t argv)
 Iterate over query/verify arg list.
int rpmcliQuery (rpmts ts, QVA_t qva, ARGV_const_t argv)
 Display package information.
int showVerifyPackage (QVA_t qva, rpmts ts, Header h)
 Display results of package verify.
int rpmcliVerify (rpmts ts, QVA_t qva, ARGV_const_t argv)
 Verify package install.

+RPMEIU

enum  rpmInstallFlags_e {
+  INSTALL_NONE = 0, +INSTALL_PERCENT = (1 << 0), +INSTALL_HASH = (1 << 1), +INSTALL_NODEPS = (1 << 2), +
+  INSTALL_NOORDER = (1 << 3), +INSTALL_LABEL = (1 << 4), +INSTALL_UPGRADE = (1 << 5), +INSTALL_FRESHEN = (1 << 6), +
+  INSTALL_INSTALL = (1 << 7), +INSTALL_ERASE = (1 << 8), +INSTALL_ALLMATCHES = (1 << 9) +
+ }
 Bit(s) to control rpmInstall() operation. More...
typedef rpmFlags rpmInstallFlags
struct rpmInstallArguments_s rpmIArgs
struct poptOption rpmInstallPoptTable []
int rpmcliPackagesTotal
int rpmcliHashesCurrent
int rpmcliHashesTotal
int rpmcliProgressCurrent
int rpmcliProgressTotal
void * rpmShowProgress (const void *arg, const rpmCallbackType what, const rpm_loff_t amount, const rpm_loff_t total, fnpyKey key, void *data)
 The rpm CLI generic transaction callback handler.
int rpmInstallSource (rpmts ts, const char *arg, char **specFilePtr, char **cookie)
 Install source rpm package.
int rpmInstall (rpmts ts, struct rpmInstallArguments_s *ia, ARGV_t fileArgv)
 Install/upgrade/freshen binary rpm package.
int rpmErase (rpmts ts, struct rpmInstallArguments_s *ia, ARGV_const_t argv)
 Erase binary rpm package.
#define UNINSTALL_NONE   INSTALL_NONE
 Bit(s) to control rpmErase() operation.
#define UNINSTALL_NODEPS   INSTALL_NODEPS
#define UNINSTALL_ALLMATCHES   INSTALL_ALLMATCHES

+RPMK

int rpmcliVerifySignatures (rpmts ts, ARGV_const_t argv)
 Verify package signatures.
+

Define Documentation

+ +
+
+ + + + +
#define UNINSTALL_ALLMATCHES   INSTALL_ALLMATCHES
+
+
+ +

Definition at line 294 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
#define UNINSTALL_NODEPS   INSTALL_NODEPS
+
+
+ +

Definition at line 293 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
#define UNINSTALL_NONE   INSTALL_NONE
+
+
+ +

Bit(s) to control rpmErase() operation.

+ +

Definition at line 292 of file rpmcli.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef int(* QSpecF_t)(rpmts ts, QVA_t qva, const char *arg)
+
+
+ +

Function to query spec file.

+
Parameters:
+ + + + +
tstransaction set
qvaparsed query/verify options
argquery argument
+
+
+
Returns:
0 on success
+ +

Definition at line 162 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmQVKArguments_s* QVA_t
+
+
+ +

Definition at line 142 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
typedef int(* QVF_t)(QVA_t qva, rpmts ts, Header h)
+
+
+ +

Function to display iterator matches.

+
Parameters:
+ + + + +
qvaparsed query/verify options
tstransaction set
hheader to use for query/verify
+
+
+
Returns:
0 on success
+ +

Definition at line 152 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags rpmInstallFlags
+
+
+ +

Definition at line 287 of file rpmcli.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmInstallFlags_e
+
+
+ +

Bit(s) to control rpmInstall() operation.

+
Enumerator:
+ + + + + + + + + + + +
INSTALL_NONE  +
INSTALL_PERCENT  +

from --percent

+
INSTALL_HASH  +

from --hash

+
INSTALL_NODEPS  +

from --nodeps

+
INSTALL_NOORDER  +

from --noorder

+
INSTALL_LABEL  +

from --verbose (notify)

+
INSTALL_UPGRADE  +

from --upgrade

+
INSTALL_FRESHEN  +

from --freshen

+
INSTALL_INSTALL  +

from --install

+
INSTALL_ERASE  +

from --erase

+
INSTALL_ALLMATCHES  +

from --allmatches

+
+
+
+ +

Definition at line 273 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
enum rpmQueryFlags_e
+
+
+ +

Bit(s) to control rpmQuery() operation, stored in qva_flags.

+
Todo:
Merge rpmQueryFlags, rpmVerifyFlags, and rpmVerifyAttrs?.
+
Enumerator:
+ + + + + + + + + + + + + + + + + + + + + + + +
QUERY_FOR_DEFAULT  +
QUERY_MD5  +

from --nomd5

+
QUERY_FILEDIGEST  +

from --nofiledigest, same as --nomd5

+
QUERY_SIZE  +

from --nosize

+
QUERY_LINKTO  +

from --nolink

+
QUERY_USER  +

from --nouser)

+
QUERY_GROUP  +

from --nogroup)

+
QUERY_MTIME  +

from --nomtime)

+
QUERY_MODE  +

from --nomode)

+
QUERY_RDEV  +

from --nodev

+
QUERY_CONTEXTS  +

verify: from --nocontexts

+
QUERY_FILES  +

verify: from --nofiles

+
QUERY_DEPS  +

verify: from --nodeps

+
QUERY_SCRIPT  +

verify: from --noscripts

+
QUERY_DIGEST  +

verify: from --nodigest

+
QUERY_SIGNATURE  +

verify: from --nosignature

+
QUERY_PATCHES  +

verify: from --nopatches

+
QUERY_HDRCHK  +

verify: from --nohdrchk

+
QUERY_FOR_LIST  +

query: from --list

+
QUERY_FOR_STATE  +

query: from --state

+
QUERY_FOR_DOCS  +

query: from --docfiles

+
QUERY_FOR_CONFIG  +

query: from --configfiles

+
QUERY_FOR_DUMPFILES  +

query: from --dump

+
+
+
+ +

Definition at line 102 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
enum rpmQVSources_e
+
+
+ +

Query/Verify argument qualifiers.

+
Todo:
Reassign to tag values.
+
Enumerator:
+ + + + + + + + + + + + + + + +
RPMQV_PACKAGE  +

... from package name db search.

+
RPMQV_PATH  +

... from file path db search.

+
RPMQV_ALL  +

... from each installed package.

+
RPMQV_RPM  +

... from reading binary rpm package.

+
RPMQV_GROUP  +

... from group db search.

+
RPMQV_WHATPROVIDES  +

... from provides db search.

+
RPMQV_WHATREQUIRES  +

... from requires db search.

+
RPMQV_TRIGGEREDBY  +

... from trigger db search.

+
RPMQV_DBOFFSET  +

... from database header instance.

+
RPMQV_SPECRPMS  +

... from spec file binaries (query only).

+
RPMQV_SPECFILE  +

... backwards compatibility

+
RPMQV_PKGID  +

... from package id (header+payload MD5).

+
RPMQV_HDRID  +

... from header id (immutable header SHA1).

+
RPMQV_TID  +

... from install transaction id (time stamp).

+
RPMQV_SPECSRPM  +

... from spec file source (query only).

+
+
+
+ +

Definition at line 78 of file rpmcli.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmcliArgIter (rpmts ts,
QVA_t qva,
ARGV_const_t argv 
)
+
+
+ +

Iterate over query/verify arg list.

+
Parameters:
+ + + + +
tstransaction set
qvaparsed query/verify options
argvquery argument(s) (or NULL)
+
+
+
Returns:
0 on success, else no. of failures
+ +
+
+ +
+
+ + + + + + + + +
void rpmcliConfigured (void )
+
+
+ +

Make sure that rpm configuration has been read.

+
Warning:
Options like --rcfile and --verbose must precede callers option.
+ +
+
+ +
+
+ + + + + + + + +
poptContext rpmcliFini (poptContext optCon)
+
+
+ +

Destroy most everything needed by an rpm CLI executable context.

+
Parameters:
+ + +
optConpopt context
+
+
+
Returns:
NULL always
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
poptContext rpmcliInit (int argc,
char *const argv[],
struct poptOption * optionsTable 
)
+
+
+ +

Initialize most everything needed by an rpm CLI executable context.

+
Parameters:
+ + + + +
argcno. of args
argvarg array
optionsTablepopt option table
+
+
+
Returns:
popt context (or NULL)
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmcliQuery (rpmts ts,
QVA_t qva,
ARGV_const_t argv 
)
+
+
+ +

Display package information.

+
Todo:
hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union?
+
Parameters:
+ + + + +
tstransaction set
qvaparsed query/verify options
argvquery argument(s) (or NULL)
+
+
+
Returns:
0 on success, else no. of failures
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmcliVerify (rpmts ts,
QVA_t qva,
ARGV_const_t argv 
)
+
+
+ +

Verify package install.

+
Todo:
hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union?
+
Parameters:
+ + + + +
tstransaction set
qvaparsed query/verify options
argvverify argument(s) (or NULL)
+
+
+
Returns:
0 on success, else no. of failures
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmcliVerifySignatures (rpmts ts,
ARGV_const_t argv 
)
+
+
+ +

Verify package signatures.

+
Parameters:
+ + + +
tstransaction set
argvarray of package path arguments (NULL terminated)
+
+
+
Returns:
0 on success
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
void rpmDisplayQueryTags (FILE * fp)
+
+
+ +

Display list of tags that can be used in --queryformat.

+
Parameters:
+ + +
fpfile handle to use for display
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmErase (rpmts ts,
struct rpmInstallArguments_sia,
ARGV_const_t argv 
)
+
+
+ +

Erase binary rpm package.

+
Parameters:
+ + + + +
tstransaction set
iacontrol args/bits
argvarray of package file names (NULL terminated)
+
+
+
Returns:
0 on success
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmInstall (rpmts ts,
struct rpmInstallArguments_sia,
ARGV_t fileArgv 
)
+
+
+ +

Install/upgrade/freshen binary rpm package.

+
Parameters:
+ + + + +
tstransaction set
iamode flags and parameters
fileArgvarray of package file names (NULL terminated)
+
+
+
Returns:
0 on success
+
Todo:
fileArgv is modified on errors, should be ARGV_const_t
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmInstallSource (rpmts ts,
const char * arg,
char ** specFilePtr,
char ** cookie 
)
+
+
+ +

Install source rpm package.

+
Parameters:
+ + + +
tstransaction set
argsource rpm file name
+
+
+
Return values:
+ + + +
*specFilePtr(installed) spec file name
*cookie
+
+
+
Returns:
0 on success
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void* rpmShowProgress (const void * arg,
const rpmCallbackType what,
const rpm_loff_t amount,
const rpm_loff_t total,
fnpyKey key,
void * data 
)
+
+
+ +

The rpm CLI generic transaction callback handler.

+
Todo:
Remove headerFormat() from the progress callback.
+
Deprecated:
Transaction callback arguments need to change, so don't rely on this routine in the rpmcli API.
+
Parameters:
+ + + + + + + +
argper-callback private data (e.g. an rpm header)
whatcallback identifier
amountper-callback progress info
totalper-callback progress info
keyopaque header key (e.g. file name or PyObject)
dataprivate data (e.g. rpmInstallInterfaceFlags)
+
+
+
Returns:
per-callback data (e.g. an opened FD_t)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int showQueryPackage (QVA_t qva,
rpmts ts,
Header h 
)
+
+
+ +

Display results of package query.

+
Todo:
Devise a meaningful return code.
+
Parameters:
+ + + + +
qvaparsed query/verify options
tstransaction set
hheader to use for query
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int showVerifyPackage (QVA_t qva,
rpmts ts,
Header h 
)
+
+
+ +

Display results of package verify.

+
Parameters:
+ + + + +
qvaparsed query/verify options
tstransaction set
hheader to use for verify
+
+
+
Returns:
result of last non-zero verify return
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
struct poptOption rpmcliAllPoptTable[]
+
+
+ +

Popt option table for options shared by all modes and executables.

+ +
+
+ +
+
+ + + + +
int rpmcliHashesCurrent
+
+
+ +
+
+ +
+
+ + + + +
int rpmcliHashesTotal
+
+
+ +
+
+ +
+
+ + + + +
int rpmcliPackagesTotal
+
+
+ +
+
+ +
+
+ + + + +
int rpmcliProgressCurrent
+
+
+ +
+
+ +
+
+ + + + +
int rpmcliProgressTotal
+
+
+ +
+
+ +
+ +
+ +

Bit(s) from common command line options.

+ +

Referenced by build().

+ +
+
+ +
+
+ + + + +
struct rpmInstallArguments_s rpmIArgs
+
+
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
struct poptOption rpmInstallPoptTable[]
+
+
+ +
+
+ +
+
+ + + + +
struct poptOption rpmQueryPoptTable[]
+
+
+ +
+
+ +
+
+ + + + +
struct rpmQVKArguments_s rpmQVKArgs
+
+
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
struct poptOption rpmQVSourcePoptTable[]
+
+
+ +
+
+ +
+
+ + + + +
struct poptOption rpmVerifyPoptTable[]
+
+
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmcli.map b/doc/librpm/html/group__rpmcli.map new file mode 100644 index 0000000..ff54998 --- /dev/null +++ b/doc/librpm/html/group__rpmcli.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doc/librpm/html/group__rpmcli.md5 b/doc/librpm/html/group__rpmcli.md5 new file mode 100644 index 0000000..5a9f4c6 --- /dev/null +++ b/doc/librpm/html/group__rpmcli.md5 @@ -0,0 +1 @@ +a83753b498fd97cc15cacadbe86654b1 \ No newline at end of file diff --git a/doc/librpm/html/group__rpmcli.png b/doc/librpm/html/group__rpmcli.png new file mode 100644 index 0000000..1bc5f8c Binary files /dev/null and b/doc/librpm/html/group__rpmcli.png differ diff --git a/doc/librpm/html/group__rpmdb.html b/doc/librpm/html/group__rpmdb.html new file mode 100644 index 0000000..8d825d7 --- /dev/null +++ b/doc/librpm/html/group__rpmdb.html @@ -0,0 +1,852 @@ + + + + +rpm: Database API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Database API.
+
+
+
+Collaboration diagram for Database API.:
+
+
+ + +
+
+ + + + +

+

+ + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmdb.h
 

Access RPM indices using Berkeley DB interface(s).

+
file  rpmlib.h
 

In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.

+

+Functions

rpmop rpmdbOp (rpmdb db, rpmdbOpX opx)
 Retrieve operation timestamp from rpm database.
int rpmdbOpenAll (rpmdb db)
 Open all database indices.
int rpmdbCountPackages (rpmdb db, const char *name)
 Return number of instances of package in rpm database.
unsigned int rpmdbGetIteratorOffset (rpmdbMatchIterator mi)
 Return header join key for current position of rpm database iterator.
int rpmdbGetIteratorCount (rpmdbMatchIterator mi)
 Return number of elements in rpm database iterator.
unsigned int rpmdbGetIteratorFileNum (rpmdbMatchIterator mi)
int rpmdbAppendIterator (rpmdbMatchIterator mi, const int *hdrNums, int nHdrNums)
 Append items to set of package instances to iterate.
int rpmdbSetIteratorRE (rpmdbMatchIterator mi, rpmTagVal tag, rpmMireMode mode, const char *pattern)
 Add pattern to iterator selector.
int rpmdbSetIteratorRewrite (rpmdbMatchIterator mi, int rewrite)
 Prepare iterator for lazy writes.
int rpmdbSetIteratorModified (rpmdbMatchIterator mi, int modified)
 Modify iterator to mark header for lazy write on release.
int rpmdbSetHdrChk (rpmdbMatchIterator mi, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, char **msg))
 Modify iterator to verify retrieved header blobs.
rpmdbMatchIterator rpmdbInitIterator (rpmdb db, rpmDbiTagVal rpmtag, const void *keyp, size_t keylen)
 Return database iterator.
Header rpmdbNextIterator (rpmdbMatchIterator mi)
 Return next package header from iteration.
int rpmdbCheckSignals (void)
 Check for and exit on termination signals.
int rpmdbCheckTerminate (int terminate)
 Check rpmdb signal handler for trapped signal and/or requested exit, clean up any open iterators and databases on termination condition.
rpmdbMatchIterator rpmdbFreeIterator (rpmdbMatchIterator mi)
 Destroy rpm database iterator.
rpmdbIndexIterator rpmdbIndexIteratorInit (rpmdb db, rpmDbiTag rpmtag)
 Get an iterator for an index.
int rpmdbIndexIteratorNext (rpmdbIndexIterator ii, const void **key, size_t *keylen)
 Get the next key - Warning! Keys are not zero terminated! Binary tags may even contain zero bytes.
unsigned int rpmdbIndexIteratorNumPkgs (rpmdbIndexIterator ii)
 Get number of entries for current key.
unsigned int rpmdbIndexIteratorPkgOffset (rpmdbIndexIterator ii, unsigned int nr)
 Get package offset of entry.
unsigned int rpmdbIndexIteratorTagNum (rpmdbIndexIterator ii, unsigned int nr)
 Get tag number of entry.
rpmdbIndexIterator rpmdbIndexIteratorFree (rpmdbIndexIterator ii)
 Free index iterator.
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmdbAppendIterator (rpmdbMatchIterator mi,
const int * hdrNums,
int nHdrNums 
)
+
+
+ +

Append items to set of package instances to iterate.

+
Parameters:
+ + + + +
mirpm database iterator
hdrNumsarray of package instances
nHdrNumsnumber of elements in array
+
+
+
Returns:
0 on success, 1 on failure (bad args)
+ +
+
+ +
+
+ + + + + + + + +
int rpmdbCheckSignals (void )
+
+
+ +

Check for and exit on termination signals.

+ +
+
+ +
+
+ + + + + + + + +
int rpmdbCheckTerminate (int terminate)
+
+
+ +

Check rpmdb signal handler for trapped signal and/or requested exit, clean up any open iterators and databases on termination condition.

+

On non-zero exit any open references to rpmdb are invalid and cannot be accessed anymore, calling process should terminate immediately.

+
Parameters:
+ + +
terminate0 to only check for signals, 1 to terminate anyway
+
+
+
Returns:
0 to continue, 1 if termination cleanup was done.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdbCountPackages (rpmdb db,
const char * name 
)
+
+
+ +

Return number of instances of package in rpm database.

+
Parameters:
+ + + +
dbrpm database
namerpm package name
+
+
+
Returns:
number of instances
+ +
+
+ +
+
+ + + + + + + + +
rpmdbMatchIterator rpmdbFreeIterator (rpmdbMatchIterator mi)
+
+
+ +

Destroy rpm database iterator.

+
Parameters:
+ + +
mirpm database iterator
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
int rpmdbGetIteratorCount (rpmdbMatchIterator mi)
+
+
+ +

Return number of elements in rpm database iterator.

+
Parameters:
+ + +
mirpm database iterator
+
+
+
Returns:
number of elements
+ +
+
+ +
+
+ + + + + + + + +
unsigned int rpmdbGetIteratorFileNum (rpmdbMatchIterator mi)
+
+
+ +
+
+ +
+
+ + + + + + + + +
unsigned int rpmdbGetIteratorOffset (rpmdbMatchIterator mi)
+
+
+ +

Return header join key for current position of rpm database iterator.

+
Parameters:
+ + +
mirpm database iterator
+
+
+
Returns:
current header join key
+ +
+
+ +
+
+ + + + + + + + +
rpmdbIndexIterator rpmdbIndexIteratorFree (rpmdbIndexIterator ii)
+
+
+ +

Free index iterator.

+
Parameters:
+ + +
iiindex iterator return NULL
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmdbIndexIterator rpmdbIndexIteratorInit (rpmdb db,
rpmDbiTag rpmtag 
)
+
+
+ +

Get an iterator for an index.

+
Parameters:
+ + + +
dbrpm database
rpmtagthe index to iterate over
+
+
+
Returns:
the index iterator
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmdbIndexIteratorNext (rpmdbIndexIterator ii,
const void ** key,
size_t * keylen 
)
+
+
+ +

Get the next key - Warning! Keys are not zero terminated! Binary tags may even contain zero bytes.

+
Parameters:
+ + + + +
iiindex iterator
keyadress to save the pointer to the key
keylenadress to save the length of the key to
+
+
+
Returns:
0 on success; != 0 on error or end of index
+ +
+
+ +
+
+ + + + + + + + +
unsigned int rpmdbIndexIteratorNumPkgs (rpmdbIndexIterator ii)
+
+
+ +

Get number of entries for current key.

+
Parameters:
+ + +
iiindex iterator
+
+
+
Returns:
number of entries. 0 on error.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
unsigned int rpmdbIndexIteratorPkgOffset (rpmdbIndexIterator ii,
unsigned int nr 
)
+
+
+ +

Get package offset of entry.

+
Parameters:
+ + + +
iiindex iterator
nrnumber of the entry
+
+
+
Returns:
db offset of pkg
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
unsigned int rpmdbIndexIteratorTagNum (rpmdbIndexIterator ii,
unsigned int nr 
)
+
+
+ +

Get tag number of entry.

+
Parameters:
+ + + +
iiindex iterator
nrnumber of the entry
+
+
+
Returns:
number of tag within the package
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rpmdbMatchIterator rpmdbInitIterator (rpmdb db,
rpmDbiTagVal rpmtag,
const void * keyp,
size_t keylen 
)
+
+
+ +

Return database iterator.

+
Parameters:
+ + + + + +
dbrpm database
rpmtagdatabase index tag
keypkey data (NULL for sequential access)
keylenkey data length (0 will use strlen(keyp))
+
+
+
Returns:
NULL on failure
+ +
+
+ +
+
+ + + + + + + + +
Header rpmdbNextIterator (rpmdbMatchIterator mi)
+
+
+ +

Return next package header from iteration.

+
Parameters:
+ + +
mirpm database iterator
+
+
+
Returns:
NULL on end of iteration.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmop rpmdbOp (rpmdb db,
rpmdbOpX opx 
)
+
+
+ +

Retrieve operation timestamp from rpm database.

+
Parameters:
+ + + +
dbrpm database
opxoperation timestamp index
+
+
+
Returns:
pointer to operation timestamp.
+ +
+
+ +
+
+ + + + + + + + +
int rpmdbOpenAll (rpmdb db)
+
+
+ +

Open all database indices.

+
Parameters:
+ + +
dbrpm database
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmdbSetHdrChk (rpmdbMatchIterator mi,
rpmts ts,
rpmRC(*)(rpmts ts, const void *uh, size_t uc, char **msg) hdrchk 
)
+
+
+ +

Modify iterator to verify retrieved header blobs.

+
Parameters:
+ + + + +
mirpm database iterator
tstransaction set
(*hdrchk)headerCheck() vector
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdbSetIteratorModified (rpmdbMatchIterator mi,
int modified 
)
+
+
+ +

Modify iterator to mark header for lazy write on release.

+
Parameters:
+ + + +
mirpm database iterator
modifiednew value of modified
+
+
+
Returns:
previous value
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmdbSetIteratorRE (rpmdbMatchIterator mi,
rpmTagVal tag,
rpmMireMode mode,
const char * pattern 
)
+
+
+ +

Add pattern to iterator selector.

+
Parameters:
+ + + + + +
mirpm database iterator
tagrpm tag
modetype of pattern match
patternpattern to match
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdbSetIteratorRewrite (rpmdbMatchIterator mi,
int rewrite 
)
+
+
+ +

Prepare iterator for lazy writes.

+
Note:
Must be called before rpmdbNextIterator() with CDB model database.
+
Parameters:
+ + + +
mirpm database iterator
rewritenew value of rewrite
+
+
+
Returns:
previous value
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmdb.map b/doc/librpm/html/group__rpmdb.map new file mode 100644 index 0000000..4b673ac --- /dev/null +++ b/doc/librpm/html/group__rpmdb.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/group__rpmdb.md5 b/doc/librpm/html/group__rpmdb.md5 new file mode 100644 index 0000000..04a9e87 --- /dev/null +++ b/doc/librpm/html/group__rpmdb.md5 @@ -0,0 +1 @@ +2041e6f4bf7617d41f57ab42b42c52c0 \ No newline at end of file diff --git a/doc/librpm/html/group__rpmdb.png b/doc/librpm/html/group__rpmdb.png new file mode 100644 index 0000000..02628a3 Binary files /dev/null and b/doc/librpm/html/group__rpmdb.png differ diff --git a/doc/librpm/html/group__rpmds.html b/doc/librpm/html/group__rpmds.html new file mode 100644 index 0000000..46a2db7 --- /dev/null +++ b/doc/librpm/html/group__rpmds.html @@ -0,0 +1,1190 @@ + + + + +rpm: Dependency Set API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Dependency Set API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Enumerations

enum  rpmsenseFlags_e {
+  RPMSENSE_ANY = 0, +RPMSENSE_LESS = (1 << 1), +RPMSENSE_GREATER = (1 << 2), +RPMSENSE_EQUAL = (1 << 3), +
+  RPMSENSE_POSTTRANS = (1 << 5), +RPMSENSE_PREREQ = (1 << 6), +RPMSENSE_PRETRANS = (1 << 7), +RPMSENSE_INTERP = (1 << 8), +
+  RPMSENSE_SCRIPT_PRE = (1 << 9), +RPMSENSE_SCRIPT_POST = (1 << 10), +RPMSENSE_SCRIPT_PREUN = (1 << 11), +RPMSENSE_SCRIPT_POSTUN = (1 << 12), +
+  RPMSENSE_SCRIPT_VERIFY = (1 << 13), +RPMSENSE_FIND_REQUIRES = (1 << 14), +RPMSENSE_FIND_PROVIDES = (1 << 15), +RPMSENSE_TRIGGERIN = (1 << 16), +
+  RPMSENSE_TRIGGERUN = (1 << 17), +RPMSENSE_TRIGGERPOSTUN = (1 << 18), +RPMSENSE_MISSINGOK = (1 << 19), +RPMSENSE_RPMLIB = (1 << 24), +
+  RPMSENSE_TRIGGERPREIN = (1 << 25), +RPMSENSE_KEYRING = (1 << 26), +RPMSENSE_CONFIG = (1 << 28) +
+ }
 Dependency Attributes. More...

+Functions

rpmds rpmdsLink (rpmds ds)
 Reference a dependency set instance.
rpmds rpmdsFree (rpmds ds)
 Destroy a dependency set.
rpmds rpmdsNew (Header h, rpmTagVal tagN, int flags)
 Create and load a dependency set.
char * rpmdsNewDNEVR (const char *dspfx, const rpmds ds)
 Return new formatted dependency string.
rpmds rpmdsThis (Header h, rpmTagVal tagN, rpmsenseFlags Flags)
 Create, load and initialize a dependency for this header.
rpmds rpmdsSingle (rpmTagVal tagN, const char *N, const char *EVR, rpmsenseFlags Flags)
 Create, load and initialize a dependency set of size 1.
rpmds rpmdsCurrent (rpmds ds)
 Return a new dependency set of size 1 from the current iteration index.
int rpmdsCount (const rpmds ds)
 Return dependency set count.
int rpmdsIx (const rpmds ds)
 Return dependency set index.
int rpmdsSetIx (rpmds ds, int ix)
 Set dependency set index.
const char * rpmdsDNEVR (const rpmds ds)
 Return current formatted dependency string.
const char * rpmdsN (const rpmds ds)
 Return current dependency name.
const char * rpmdsEVR (const rpmds ds)
 Return current dependency epoch-version-release.
rpmsenseFlags rpmdsFlags (const rpmds ds)
 Return current dependency flags.
rpmTagVal rpmdsTagN (const rpmds ds)
 Return current dependency type.
unsigned int rpmdsInstance (rpmds ds)
 Return dependency header instance, ie whether the dependency comes from an installed header or not.
int rpmdsNoPromote (const rpmds ds)
 Return current "Don't promote Epoch:" flag.
int rpmdsSetNoPromote (rpmds ds, int nopromote)
 Set "Don't promote Epoch:" flag.
rpm_color_t rpmdsColor (const rpmds ds)
 Return current dependency color.
rpm_color_t rpmdsSetColor (const rpmds ds, rpm_color_t color)
 Return current dependency color.
void rpmdsNotify (rpmds ds, const char *where, int rc)
 Notify of results of dependency match.
int rpmdsNext (rpmds ds)
 Return next dependency set iterator index.
rpmds rpmdsInit (rpmds ds)
 Initialize dependency set iterator.
int rpmdsFind (rpmds ds, const rpmds ods)
 Find a dependency set element using binary search.
int rpmdsMerge (rpmds *dsp, rpmds ods)
 Merge a dependency set maintaining (N,EVR,Flags) sorted order.
int rpmdsSearch (rpmds ds, rpmds ods)
 Search a sorted dependency set for an element that overlaps.
int rpmdsCompare (const rpmds A, const rpmds B)
 Compare two versioned dependency ranges, looking for overlap.
int rpmdsAnyMatchesDep (const Header h, const rpmds req, int nopromote)
 Compare package provides dependencies from header with a single dependency.
int rpmdsNVRMatchesDep (const Header h, const rpmds req, int nopromote)
 Compare package name-version-release from header with a single dependency.
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmsenseFlags_e
+
+
+ +

Dependency Attributes.

+
Enumerator:
+ + + + + + + + + + + + + + + + + + + + + + + +
RPMSENSE_ANY  +
RPMSENSE_LESS  +
RPMSENSE_GREATER  +
RPMSENSE_EQUAL  +
RPMSENSE_POSTTRANS  +

posttrans dependency

+
RPMSENSE_PREREQ  +
RPMSENSE_PRETRANS  +

Pre-transaction dependency.

+
RPMSENSE_INTERP  +

Interpreter used by scriptlet.

+
RPMSENSE_SCRIPT_PRE  +

pre dependency.

+
RPMSENSE_SCRIPT_POST  +

post dependency.

+
RPMSENSE_SCRIPT_PREUN  +

preun dependency.

+
RPMSENSE_SCRIPT_POSTUN  +

postun dependency.

+
RPMSENSE_SCRIPT_VERIFY  +

verify dependency.

+
RPMSENSE_FIND_REQUIRES  +

find-requires generated dependency.

+
RPMSENSE_FIND_PROVIDES  +

find-provides generated dependency.

+
RPMSENSE_TRIGGERIN  +

triggerin dependency.

+
RPMSENSE_TRIGGERUN  +

triggerun dependency.

+
RPMSENSE_TRIGGERPOSTUN  +

triggerpostun dependency.

+
RPMSENSE_MISSINGOK  +

suggests/enhances hint.

+
RPMSENSE_RPMLIB  +

rpmlib(feature) dependency.

+
RPMSENSE_TRIGGERPREIN  +

triggerprein dependency.

+
RPMSENSE_KEYRING  +
RPMSENSE_CONFIG  +
+
+
+ +

Definition at line 25 of file rpmds.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmdsAnyMatchesDep (const Header h,
const rpmds req,
int nopromote 
)
+
+
+ +

Compare package provides dependencies from header with a single dependency.

+
Parameters:
+ + + + +
hheader
reqdependency set
nopromoteDon't promote Epoch: in comparison?
+
+
+
Returns:
1 if any dependency overlaps, 0 otherwise
+ +
+
+ +
+
+ + + + + + + + +
rpm_color_t rpmdsColor (const rpmds ds)
+
+
+ +

Return current dependency color.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
current dependency color
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdsCompare (const rpmds A,
const rpmds B 
)
+
+
+ +

Compare two versioned dependency ranges, looking for overlap.

+
Parameters:
+ + + +
A1st dependency
B2nd dependency
+
+
+
Returns:
1 if dependencies overlap, 0 otherwise
+ +
+
+ +
+
+ + + + + + + + +
int rpmdsCount (const rpmds ds)
+
+
+ +

Return dependency set count.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
current count
+ +
+
+ +
+
+ + + + + + + + +
rpmds rpmdsCurrent (rpmds ds)
+
+
+ +

Return a new dependency set of size 1 from the current iteration index.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
new dependency set
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmdsDNEVR (const rpmds ds)
+
+
+ +

Return current formatted dependency string.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
current dependency DNEVR, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmdsEVR (const rpmds ds)
+
+
+ +

Return current dependency epoch-version-release.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
current dependency EVR, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdsFind (rpmds ds,
const rpmds ods 
)
+
+
+ +

Find a dependency set element using binary search.

+
Parameters:
+ + + +
dsdependency set to search
odsdependency set element to find.
+
+
+
Returns:
dependency index (or -1 if not found)
+ +
+
+ +
+
+ + + + + + + + +
rpmsenseFlags rpmdsFlags (const rpmds ds)
+
+
+ +

Return current dependency flags.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
current dependency flags, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpmds rpmdsFree (rpmds ds)
+
+
+ +

Destroy a dependency set.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
rpmds rpmdsInit (rpmds ds)
+
+
+ +

Initialize dependency set iterator.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
dependency set
+ +
+
+ +
+
+ + + + + + + + +
unsigned int rpmdsInstance (rpmds ds)
+
+
+ +

Return dependency header instance, ie whether the dependency comes from an installed header or not.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
header instance of dependency (0 for not installed)
+ +
+
+ +
+
+ + + + + + + + +
int rpmdsIx (const rpmds ds)
+
+
+ +

Return dependency set index.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
current index
+ +
+
+ +
+
+ + + + + + + + +
rpmds rpmdsLink (rpmds ds)
+
+
+ +

Reference a dependency set instance.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
new dependency set reference
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdsMerge (rpmdsdsp,
rpmds ods 
)
+
+
+ +

Merge a dependency set maintaining (N,EVR,Flags) sorted order.

+
Return values:
+ + +
*dsp(merged) dependency set
+
+
+
Parameters:
+ + +
odsdependency set to merge
+
+
+
Returns:
(merged) dependency index
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmdsN (const rpmds ds)
+
+
+ +

Return current dependency name.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
current dependency name, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rpmds rpmdsNew (Header h,
rpmTagVal tagN,
int flags 
)
+
+
+ +

Create and load a dependency set.

+
Parameters:
+ + + + +
hheader
tagNtype of dependency
flagsunused
+
+
+
Returns:
new dependency set
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
char* rpmdsNewDNEVR (const char * dspfx,
const rpmds ds 
)
+
+
+ +

Return new formatted dependency string.

+
Parameters:
+ + + +
dspfxformatted dependency string prefix
dsdependency set
+
+
+
Returns:
new formatted dependency (malloc'ed)
+ +
+
+ +
+
+ + + + + + + + +
int rpmdsNext (rpmds ds)
+
+
+ +

Return next dependency set iterator index.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
dependency set iterator index, -1 on termination
+ +
+
+ +
+
+ + + + + + + + +
int rpmdsNoPromote (const rpmds ds)
+
+
+ +

Return current "Don't promote Epoch:" flag.

+

This flag controls for Epoch: promotion when a dependency set is compared. If the flag is set (for already installed packages), then an unspecified value will be treated as Epoch: 0. Otherwise (for added packages), the Epoch: portion of the comparison is skipped if the value is not specified, i.e. an unspecified Epoch: is assumed to be equal in dependency comparisons.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
current "Don't promote Epoch:" flag
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rpmdsNotify (rpmds ds,
const char * where,
int rc 
)
+
+
+ +

Notify of results of dependency match.

+
Parameters:
+ + + + +
dsdependency set
wherewhere dependency was resolved (or NULL)
rc0 == YES, otherwise NO
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmdsNVRMatchesDep (const Header h,
const rpmds req,
int nopromote 
)
+
+
+ +

Compare package name-version-release from header with a single dependency.

+
Parameters:
+ + + + +
hheader
reqdependency set
nopromoteDon't promote Epoch: in comparison?
+
+
+
Returns:
1 if dependency overlaps, 0 otherwise
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdsSearch (rpmds ds,
rpmds ods 
)
+
+
+ +

Search a sorted dependency set for an element that overlaps.

+

A boolean result is saved (if allocated) and accessible through rpmdsResult(ods) afterwards.

+
Parameters:
+ + + +
dsdependency set to search
odsdependency set element to find.
+
+
+
Returns:
dependency index (or -1 if not found)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpm_color_t rpmdsSetColor (const rpmds ds,
rpm_color_t color 
)
+
+
+ +

Return current dependency color.

+
Parameters:
+ + + +
dsdependency set
colornew dependency color
+
+
+
Returns:
previous dependency color
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdsSetIx (rpmds ds,
int ix 
)
+
+
+ +

Set dependency set index.

+
Parameters:
+ + + +
dsdependency set
ixnew index
+
+
+
Returns:
current index
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdsSetNoPromote (rpmds ds,
int nopromote 
)
+
+
+ +

Set "Don't promote Epoch:" flag.

+
Parameters:
+ + + +
dsdependency set
nopromoteShould an unspecified Epoch: be treated as Epoch: 0?
+
+
+
Returns:
previous "Don't promote Epoch:" flag
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rpmds rpmdsSingle (rpmTagVal tagN,
const char * N,
const char * EVR,
rpmsenseFlags Flags 
)
+
+
+ +

Create, load and initialize a dependency set of size 1.

+
Parameters:
+ + + + + +
tagNtype of dependency
Nname
EVRepoch:version-release
Flagscomparison flags
+
+
+
Returns:
new dependency set
+ +
+
+ +
+
+ + + + + + + + +
rpmTagVal rpmdsTagN (const rpmds ds)
+
+
+ +

Return current dependency type.

+
Parameters:
+ + +
dsdependency set
+
+
+
Returns:
current dependency type, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rpmds rpmdsThis (Header h,
rpmTagVal tagN,
rpmsenseFlags Flags 
)
+
+
+ +

Create, load and initialize a dependency for this header.

+
Parameters:
+ + + + +
hheader
tagNtype of dependency
Flagscomparison flags
+
+
+
Returns:
new dependency set
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmfc.html b/doc/librpm/html/group__rpmfc.html new file mode 100644 index 0000000..863f0e6 --- /dev/null +++ b/doc/librpm/html/group__rpmfc.html @@ -0,0 +1,417 @@ + + + + +rpm: File Classification API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
File Classification API.
+
+
+
+Collaboration diagram for File Classification API.:
+
+
+ + +
+
+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmfc.h
 

Structures and methods for build-time file classification.

+

+Typedefs

typedef struct rpmfc_s * rpmfc
typedef rpmFlags FCOLOR_t
typedef struct rpmfcTokens_s * rpmfcToken

+Enumerations

enum  FCOLOR_e { RPMFC_BLACK = 0, +RPMFC_ELF32 = (1 << 0), +RPMFC_ELF64 = (1 << 1), +RPMFC_ELFMIPSN32 = (1 << 2) + }

+Functions

void rpmfcPrint (const char *msg, rpmfc fc, FILE *fp)
 Print results of file classification.
rpmfc rpmfcFree (rpmfc fc)
 Destroy a file classifier.
rpmfc rpmfcCreate (const char *rootDir, rpmFlags flags)
 Create a file classifier.
RPM_GNUC_DEPRECATED rpmfc rpmfcNew (void)
rpmRC rpmfcClassify (rpmfc fc, ARGV_t argv, rpm_mode_t *fmode)
 Build file class dictionary and mappings.
rpmRC rpmfcApply (rpmfc fc)
 Build file/package dependency dictionary and mappings.
rpmds rpmfcProvides (rpmfc fc)
 Retrieve file classification provides.
rpmds rpmfcRequires (rpmfc fc)
 Retrieve file classification requires.
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags FCOLOR_t
+
+
+ +

Definition at line 40 of file rpmfc.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmfc_s* rpmfc
+
+
+ +

Definition at line 21 of file rpmfc.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmfcTokens_s* rpmfcToken
+
+
+ +

Definition at line 44 of file rpmfc.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum FCOLOR_e
+
+
+
Enumerator:
+ + + + +
RPMFC_BLACK  +
RPMFC_ELF32  +
RPMFC_ELF64  +
RPMFC_ELFMIPSN32  +
+
+
+ +

Definition at line 25 of file rpmfc.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
rpmRC rpmfcApply (rpmfc fc)
+
+
+ +

Build file/package dependency dictionary and mappings.

+
Parameters:
+ + +
fcfile classifier
+
+
+
Returns:
RPMRC_OK on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rpmRC rpmfcClassify (rpmfc fc,
ARGV_t argv,
rpm_mode_tfmode 
)
+
+
+ +

Build file class dictionary and mappings.

+
Parameters:
+ + + + +
fcfile classifier
argvfiles to classify
fmodefiles mode_t array (or NULL)
+
+
+
Returns:
RPMRC_OK on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmfc rpmfcCreate (const char * rootDir,
rpmFlags flags 
)
+
+
+ +

Create a file classifier.

+
Parameters:
+ + + +
rootDir(build) root directory
flags(unused)
+
+
+
Returns:
new file classifier
+ +
+
+ +
+
+ + + + + + + + +
rpmfc rpmfcFree (rpmfc fc)
+
+
+ +

Destroy a file classifier.

+
Parameters:
+ + +
fcfile classifier
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
RPM_GNUC_DEPRECATED rpmfc rpmfcNew (void )
+
+
+
Deprecated:
Create a file classifier.
+
Returns:
new file classifier
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rpmfcPrint (const char * msg,
rpmfc fc,
FILE * fp 
)
+
+
+ +

Print results of file classification.

+
Todo:
Remove debugging routine.
+
Parameters:
+ + + + +
msgmessage prefix (NULL for none)
fcfile classifier
fpoutput file handle (NULL for stderr)
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmds rpmfcProvides (rpmfc fc)
+
+
+ +

Retrieve file classification provides.

+
Parameters:
+ + +
fcfile classifier
+
+
+
Returns:
rpmds dependency set of fc provides
+ +
+
+ +
+
+ + + + + + + + +
rpmds rpmfcRequires (rpmfc fc)
+
+
+ +

Retrieve file classification requires.

+
Parameters:
+ + +
fcfile classifier
+
+
+
Returns:
rpmds dependency set of fc requires
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmfc.map b/doc/librpm/html/group__rpmfc.map new file mode 100644 index 0000000..e1cfbd1 --- /dev/null +++ b/doc/librpm/html/group__rpmfc.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/librpm/html/group__rpmfc.md5 b/doc/librpm/html/group__rpmfc.md5 new file mode 100644 index 0000000..fd7d786 --- /dev/null +++ b/doc/librpm/html/group__rpmfc.md5 @@ -0,0 +1 @@ +43c1f29bda75c2b714de062093ebddb1 \ No newline at end of file diff --git a/doc/librpm/html/group__rpmfc.png b/doc/librpm/html/group__rpmfc.png new file mode 100644 index 0000000..36a5401 Binary files /dev/null and b/doc/librpm/html/group__rpmfc.png differ diff --git a/doc/librpm/html/group__rpmfi.html b/doc/librpm/html/group__rpmfi.html new file mode 100644 index 0000000..a5e8832 --- /dev/null +++ b/doc/librpm/html/group__rpmfi.html @@ -0,0 +1,1556 @@ + + + + +rpm: File Info API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
File Info API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef enum rpmFileTypes_e rpmFileTypes
 File types.
typedef enum rpmFileAction_e rpmFileAction
 File disposition(s) during package install/erase transaction.

+Enumerations

enum  rpmFileTypes_e {
+  PIPE = 1, +CDEV = 2, +XDIR = 4, +BDEV = 6, +
+  REG = 8, +LINK = 10, +SOCK = 12 +
+ }
 File types. More...
enum  rpmFileAction_e {
+  FA_UNKNOWN = 0, +FA_CREATE, +FA_COPYIN, +FA_COPYOUT, +
+  FA_BACKUP, +FA_SAVE, +FA_SKIP, +FA_ALTNAME, +
+  FA_ERASE, +FA_SKIPNSTATE, +FA_SKIPNETSHARED, +FA_SKIPCOLOR +
+ }
 File disposition(s) during package install/erase transaction. More...

+Functions

rpmfi rpmfiLink (rpmfi fi)
 Reference a file info set instance.
rpm_count_t rpmfiFC (rpmfi fi)
 Return file count from file info set.
int rpmfiFX (rpmfi fi)
 Return current file index from file info set.
int rpmfiSetFX (rpmfi fi, int fx)
 Set current file index in file info set.
rpm_count_t rpmfiDC (rpmfi fi)
 Return directory count from file info set.
int rpmfiDX (rpmfi fi)
 Return current directory index from file info set.
int rpmfiSetDX (rpmfi fi, int dx)
 Set current directory index in file info set.
const char * rpmfiBN (rpmfi fi)
 Return current base name from file info set.
const char * rpmfiDN (rpmfi fi)
 Return current directory name from file info set.
const char * rpmfiFN (rpmfi fi)
 Return current file name from file info set.
rpmfileAttrs rpmfiFFlags (rpmfi fi)
 Return current file flags from file info set.
rpmVerifyAttrs rpmfiVFlags (rpmfi fi)
 Return current file verify flags from file info set.
rpm_mode_t rpmfiFMode (rpmfi fi)
 Return current file mode from file info set.
rpmfileState rpmfiFState (rpmfi fi)
 Return current file state from file info set.
int rpmfiDigestAlgo (rpmfi fi)
 Return digest algorithm of a file info set.
const unsigned char * rpmfiFDigest (rpmfi fi, int *algo, size_t *diglen)
 Return current file (binary) digest of file info set.
char * rpmfiFDigestHex (rpmfi fi, int *algo)
 Return current file (hex) digest of file info set.
const unsigned char * rpmfiMD5 (rpmfi fi) RPM_GNUC_DEPRECATED
 Return current file (binary) md5 digest from file info set.
const char * rpmfiFLink (rpmfi fi)
 Return current file linkto (i.e.
rpm_loff_t rpmfiFSize (rpmfi fi)
 Return current file size from file info set.
rpm_rdev_t rpmfiFRdev (rpmfi fi)
 Return current file rdev from file info set.
rpm_ino_t rpmfiFInode (rpmfi fi)
 Return current file inode from file info set.
rpm_color_t rpmfiColor (rpmfi fi)
 Return union of all file color bits from file info set.
rpm_color_t rpmfiFColor (rpmfi fi)
 Return current file color bits from file info set.
const char * rpmfiFClass (rpmfi fi)
 Return current file class from file info set.
uint32_t rpmfiFDepends (rpmfi fi, const uint32_t **fddictp)
 Return current file depends dictionary from file info set.
uint32_t rpmfiFNlink (rpmfi fi)
 Return (calculated) current file nlink count from file info set.
rpm_time_t rpmfiFMtime (rpmfi fi)
 Return current file modify time from file info set.
const char * rpmfiFUser (rpmfi fi)
 Return current file owner from file info set.
const char * rpmfiFGroup (rpmfi fi)
 Return current file group from file info set.
const char * rpmfiFCaps (rpmfi fi)
 Return textual representation of current file capabilities from file info set.
const char * rpmfiFLangs (rpmfi fi)
 Return current file language(s) from file info set.
int rpmfiNext (rpmfi fi)
 Return next file iterator index.
rpmfi rpmfiInit (rpmfi fi, int fx)
 Initialize file iterator index.
int rpmfiNextD (rpmfi fi)
 Return next directory iterator index.
rpmfi rpmfiInitD (rpmfi fi, int dx)
 Initialize directory iterator index.
rpmfi rpmfiFree (rpmfi fi)
 Destroy a file info set.
rpmfi rpmfiNew (const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags)
 Create and load a file info set.
rpmFileTypes rpmfiWhatis (rpm_mode_t mode)
 Return file type from mode_t.
int rpmfiCompare (const rpmfi afi, const rpmfi bfi)
 Return file info comparison.
rpmFileAction rpmfiDecideFate (const rpmfi ofi, rpmfi nfi, int skipMissing)
 Return file disposition.
int rpmfiConfigConflict (const rpmfi fi)
 Return whether file is conflicting config.
+

Typedef Documentation

+ +
+
+ + + + +
typedef enum rpmFileAction_e rpmFileAction
+
+
+ +

File disposition(s) during package install/erase transaction.

+ +
+
+ +
+
+ + + + +
typedef enum rpmFileTypes_e rpmFileTypes
+
+
+ +

File types.

+

These are the file types used internally by rpm. The file type is determined by applying stat(2) macros like S_ISDIR to the file mode tag from a header. The values are arbitrary, but are identical to the linux stat(2) file types.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmFileAction_e
+
+
+ +

File disposition(s) during package install/erase transaction.

+
Enumerator:
+ + + + + + + + + + + + +
FA_UNKNOWN  +

initial action for file ...

+
FA_CREATE  +

... copy in from payload.

+
FA_COPYIN  +

... copy in from payload.

+
FA_COPYOUT  +

... copy out to payload.

+
FA_BACKUP  +

... renamed with ".rpmorig" extension.

+
FA_SAVE  +

... renamed with ".rpmsave" extension.

+
FA_SKIP  +

... already replaced, don't remove.

+
FA_ALTNAME  +

... create with ".rpmnew" extension.

+
FA_ERASE  +

... to be removed.

+
FA_SKIPNSTATE  +

... untouched, state "not installed".

+
FA_SKIPNETSHARED  +

... untouched, state "netshared".

+
FA_SKIPCOLOR  +

... untouched, state "wrong color".

+
+
+
+ +

Definition at line 72 of file rpmfi.h.

+ +
+
+ +
+
+ + + + +
enum rpmFileTypes_e
+
+
+ +

File types.

+

These are the file types used internally by rpm. The file type is determined by applying stat(2) macros like S_ISDIR to the file mode tag from a header. The values are arbitrary, but are identical to the linux stat(2) file types.

+
Enumerator:
+ + + + + + + +
PIPE  +

pipe/fifo

+
CDEV  +

character device

+
XDIR  +

directory

+
BDEV  +

block device

+
REG  +

regular file

+
LINK  +

hard link

+
SOCK  +

socket

+
+
+
+ +

Definition at line 24 of file rpmfi.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
const char* rpmfiBN (rpmfi fi)
+
+
+ +

Return current base name from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current base name, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpm_color_t rpmfiColor (rpmfi fi)
+
+
+ +

Return union of all file color bits from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current color
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmfiCompare (const rpmfi afi,
const rpmfi bfi 
)
+
+
+ +

Return file info comparison.

+
Parameters:
+ + + +
afi1st file info
bfi2nd file info
+
+
+
Returns:
0 if identical
+ +
+
+ +
+
+ + + + + + + + +
int rpmfiConfigConflict (const rpmfi fi)
+
+
+ +

Return whether file is conflicting config.

+
Parameters:
+ + +
fifile info
+
+
+
Returns:
1 if config file and file on disk conflicts
+ +
+
+ +
+
+ + + + + + + + +
rpm_count_t rpmfiDC (rpmfi fi)
+
+
+ +

Return directory count from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current directory count
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rpmFileAction rpmfiDecideFate (const rpmfi ofi,
rpmfi nfi,
int skipMissing 
)
+
+
+ +

Return file disposition.

+
Parameters:
+ + + + +
ofiold file info
nfinew file info
skipMissingOK to skip missing files?
+
+
+
Returns:
file dispostion
+ +
+
+ +
+
+ + + + + + + + +
int rpmfiDigestAlgo (rpmfi fi)
+
+
+ +

Return digest algorithm of a file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
digest algorithm of file info set, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmfiDN (rpmfi fi)
+
+
+ +

Return current directory name from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current directory, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + +
int rpmfiDX (rpmfi fi)
+
+
+ +

Return current directory index from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current directory index
+ +
+
+ +
+
+ + + + + + + + +
rpm_count_t rpmfiFC (rpmfi fi)
+
+
+ +

Return file count from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file count
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmfiFCaps (rpmfi fi)
+
+
+ +

Return textual representation of current file capabilities from file info set.

+

See cap_from_text(3) for details.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
file capability description, "" for no capabilities and NULL on invalid
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmfiFClass (rpmfi fi)
+
+
+ +

Return current file class from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file class, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpm_color_t rpmfiFColor (rpmfi fi)
+
+
+ +

Return current file color bits from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file color
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
uint32_t rpmfiFDepends (rpmfi fi,
const uint32_t ** fddictp 
)
+
+
+ +

Return current file depends dictionary from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Return values:
+ + +
*fddictpfile depends dictionary array (or NULL)
+
+
+
Returns:
no. of file depends entries, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
const unsigned char* rpmfiFDigest (rpmfi fi,
int * algo,
size_t * diglen 
)
+
+
+ +

Return current file (binary) digest of file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Return values:
+ + + +
algodigest hash algoritm used (pass NULL to ignore)
diglendigest hash length (pass NULL to ignore)
+
+
+
Returns:
current file digest, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
char* rpmfiFDigestHex (rpmfi fi,
int * algo 
)
+
+
+ +

Return current file (hex) digest of file info set.

+

The file info set stores file digests in binary format to conserve memory, this converts the binary data back to hex presentation used in headers.

+
Parameters:
+ + +
fifile info set
+
+
+
Return values:
+ + +
algodigest hash algoritm used (pass NULL to ignore)
+
+
+
Returns:
current file digest (malloc'ed), NULL on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpmfileAttrs rpmfiFFlags (rpmfi fi)
+
+
+ +

Return current file flags from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file flags, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmfiFGroup (rpmfi fi)
+
+
+ +

Return current file group from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file group, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpm_ino_t rpmfiFInode (rpmfi fi)
+
+
+ +

Return current file inode from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file inode, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmfiFLangs (rpmfi fi)
+
+
+ +

Return current file language(s) from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file language(s), NULL on invalid
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmfiFLink (rpmfi fi)
+
+
+ +

Return current file linkto (i.e.

+

symlink(2) target) from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file linkto, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpm_mode_t rpmfiFMode (rpmfi fi)
+
+
+ +

Return current file mode from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file mode, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpm_time_t rpmfiFMtime (rpmfi fi)
+
+
+ +

Return current file modify time from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file modify time, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmfiFN (rpmfi fi)
+
+
+ +

Return current file name from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file name
+ +
+
+ +
+
+ + + + + + + + +
uint32_t rpmfiFNlink (rpmfi fi)
+
+
+ +

Return (calculated) current file nlink count from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file nlink count, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpm_rdev_t rpmfiFRdev (rpmfi fi)
+
+
+ +

Return current file rdev from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file rdev, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpmfi rpmfiFree (rpmfi fi)
+
+
+ +

Destroy a file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
rpm_loff_t rpmfiFSize (rpmfi fi)
+
+
+ +

Return current file size from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file size, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpmfileState rpmfiFState (rpmfi fi)
+
+
+ +

Return current file state from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file state, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmfiFUser (rpmfi fi)
+
+
+ +

Return current file owner from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file owner, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + +
int rpmfiFX (rpmfi fi)
+
+
+ +

Return current file index from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file index
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmfi rpmfiInit (rpmfi fi,
int fx 
)
+
+
+ +

Initialize file iterator index.

+
Parameters:
+ + + +
fifile info set
fxfile iterator index
+
+
+
Returns:
file info set
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmfi rpmfiInitD (rpmfi fi,
int dx 
)
+
+
+ +

Initialize directory iterator index.

+
Parameters:
+ + + +
fifile info set
dxdirectory iterator index
+
+
+
Returns:
file info set, NULL if dx is out of range
+ +
+
+ +
+
+ + + + + + + + +
rpmfi rpmfiLink (rpmfi fi)
+
+
+ +

Reference a file info set instance.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
new file info set reference
+ +
+
+ +
+
+ + + + + + + + +
const unsigned char* rpmfiMD5 (rpmfi fi)
+
+
+ +

Return current file (binary) md5 digest from file info set.

+
Deprecated:
Use rpmfiFDigest() instead
+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file md5 digest, NULL on invalid
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rpmfi rpmfiNew (const rpmts ts,
Header h,
rpmTagVal tagN,
rpmfiFlags flags 
)
+
+
+ +

Create and load a file info set.

+
Parameters:
+ + + + + +
tsunused
hheader
tagNunused
flagsFlags to control what information is loaded.
+
+
+
Returns:
new file info set
+ +
+
+ +
+
+ + + + + + + + +
int rpmfiNext (rpmfi fi)
+
+
+ +

Return next file iterator index.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
file iterator index, -1 on termination
+ +
+
+ +
+
+ + + + + + + + +
int rpmfiNextD (rpmfi fi)
+
+
+ +

Return next directory iterator index.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
directory iterator index, -1 on termination
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmfiSetDX (rpmfi fi,
int dx 
)
+
+
+ +

Set current directory index in file info set.

+
Parameters:
+ + + +
fifile info set
dxnew directory index
+
+
+
Returns:
current directory index
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmfiSetFX (rpmfi fi,
int fx 
)
+
+
+ +

Set current file index in file info set.

+
Parameters:
+ + + +
fifile info set
fxnew file index
+
+
+
Returns:
current file index
+ +
+
+ +
+
+ + + + + + + + +
rpmVerifyAttrs rpmfiVFlags (rpmfi fi)
+
+
+ +

Return current file verify flags from file info set.

+
Parameters:
+ + +
fifile info set
+
+
+
Returns:
current file verify flags, 0 on invalid
+ +
+
+ +
+
+ + + + + + + + +
rpmFileTypes rpmfiWhatis (rpm_mode_t mode)
+
+
+ +

Return file type from mode_t.

+
Parameters:
+ + +
modefile mode bits (from header)
+
+
+
Returns:
file type
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmfileutil.html b/doc/librpm/html/group__rpmfileutil.html new file mode 100644 index 0000000..530628d --- /dev/null +++ b/doc/librpm/html/group__rpmfileutil.html @@ -0,0 +1,679 @@ + + + + +rpm: File and Path Manipulation API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
File and Path Manipulation API.
+
+
+
+Collaboration diagram for File and Path Manipulation API.:
+
+
+ + +
+
+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmfileutil.h
 

File and path manipulation helper functions.

+

+Typedefs

typedef enum rpmCompressedMagic_e rpmCompressedMagic

+Enumerations

enum  rpmCompressedMagic_e {
+  COMPRESSED_NOT = 0, +COMPRESSED_OTHER = 1, +COMPRESSED_BZIP2 = 2, +COMPRESSED_ZIP = 3, +
+  COMPRESSED_LZMA = 4, +COMPRESSED_XZ = 5, +COMPRESSED_LZIP = 6, +COMPRESSED_LRZIP = 7 +
+ }

+Functions

int rpmDoDigest (int algo, const char *fn, int asAscii, unsigned char *digest, rpm_loff_t *fsizep)
 Calculate a file digest and size.
FD_t rpmMkTemp (char *templ)
 Thin wrapper for mkstemp(3).
FD_t rpmMkTempFile (const char *prefix, char **fn)
 Return file handle for a temporaray file.
int rpmioMkpath (const char *path, mode_t mode, uid_t uid, gid_t gid)
 Insure that directories in path exist, creating as needed.
int rpmMkdirs (const char *root, const char *pathstr)
 Create several directories (including parents if needed) in one go.
char * rpmCleanPath (char *path)
 Canonicalize file path.
char * rpmGenPath (const char *urlroot, const char *urlmdir, const char *urlfile)
 Merge 3 args into path, any or all of which may be a url.
char * rpmGetPath (const char *path,...) RPM_GNUC_NULL_TERMINATED
 Return (malloc'ed) expanded, canonicalized, file path.
int rpmGlob (const char *patterns, int *argcPtr, ARGV_t *argvPtr)
 Return URL path(s) from a (URL prefixed) pattern glob.
char * rpmEscapeSpaces (const char *s)
 Escape isspace(3) characters in string.
int rpmFileIsCompressed (const char *file, rpmCompressedMagic *compressed)
 Return type of compression used in file.
int rpmFileHasSuffix (const char *path, const char *suffix)
 Check if path (string) ends with given suffix.
char * rpmGetCwd (void)
 Like getcwd() but the result is malloced.
+

Typedef Documentation

+ +
+
+ + + + +
typedef enum rpmCompressedMagic_e rpmCompressedMagic
+
+
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmCompressedMagic_e
+
+
+
Enumerator:
+ + + + + + + + +
COMPRESSED_NOT  +

not compressed

+
COMPRESSED_OTHER  +

gzip can handle

+
COMPRESSED_BZIP2  +

bzip2 can handle

+
COMPRESSED_ZIP  +

unzip can handle

+
COMPRESSED_LZMA  +

lzma can handle

+
COMPRESSED_XZ  +

xz can handle

+
COMPRESSED_LZIP  +

lzip can handle

+
COMPRESSED_LRZIP  +

lrzip can handle

+
+
+
+ +

Definition at line 20 of file rpmfileutil.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
char* rpmCleanPath (char * path)
+
+
+ +

Canonicalize file path.

+
Parameters:
+ + +
pathpath to canonicalize (in-place)
+
+
+
Returns:
pointer to path
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmDoDigest (int algo,
const char * fn,
int asAscii,
unsigned char * digest,
rpm_loff_tfsizep 
)
+
+
+ +

Calculate a file digest and size.

+
Parameters:
+ + + + +
algodigest algorithm
fnfile name
asAsciireturn digest as ascii string?
+
+
+
Return values:
+ + + +
digestaddress of calculated digest
*fsizepfile size pointer (or NULL)
+
+
+
Returns:
0 on success, 1 on error
+ +
+
+ +
+
+ + + + + + + + +
char* rpmEscapeSpaces (const char * s)
+
+
+ +

Escape isspace(3) characters in string.

+
Parameters:
+ + +
sstring
+
+
+
Returns:
escaped string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmFileHasSuffix (const char * path,
const char * suffix 
)
+
+
+ +

Check if path (string) ends with given suffix.

+
Parameters:
+ + + +
path(path) string
suffixsuffix string to check for
+
+
+
Returns:
1 if true, 0 otherwise
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmFileIsCompressed (const char * file,
rpmCompressedMagiccompressed 
)
+
+
+ +

Return type of compression used in file.

+
Parameters:
+ + +
filename of file
+
+
+
Return values:
+ + +
compressedaddress of compression type
+
+
+
Returns:
0 on success, 1 on I/O error
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
char* rpmGenPath (const char * urlroot,
const char * urlmdir,
const char * urlfile 
)
+
+
+ +

Merge 3 args into path, any or all of which may be a url.

+

The leading part of the first URL encountered is used for the result, other URL prefixes are discarded, permitting a primitive form of URL inheiritance.

+
Parameters:
+ + + + +
urlrootroot URL (often path to chroot, or NULL)
urlmdirdirectory URL (often a directory, or NULL)
urlfilefile URL (often a file, or NULL)
+
+
+
Returns:
expanded, merged, canonicalized path (malloc'ed)
+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + + + + + +
char* rpmGetCwd (void )
+
+
+ +

Like getcwd() but the result is malloced.

+
Returns:
current working directory (malloc'ed)
+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
char* rpmGetPath (const char * path,
 ... 
)
+
+
+ +

Return (malloc'ed) expanded, canonicalized, file path.

+
Parameters:
+ + +
pathmacro(s) to expand (NULL terminates list)
+
+
+
Returns:
canonicalized path (malloc'ed)
+ +

Referenced by getTarSpec().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmGlob (const char * patterns,
int * argcPtr,
ARGV_targvPtr 
)
+
+
+ +

Return URL path(s) from a (URL prefixed) pattern glob.

+
Parameters:
+ + +
patternsglob pattern
+
+
+
Return values:
+ + + +
*argcPtrno. of paths
*argvPtrARGV_t array of paths
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmioMkpath (const char * path,
mode_t mode,
uid_t uid,
gid_t gid 
)
+
+
+ +

Insure that directories in path exist, creating as needed.

+
Parameters:
+ + + + + +
pathdirectory path
modedirectory mode (if created)
uiddirectory uid (if created), or -1 to skip
giddirectory uid (if created), or -1 to skip
+
+
+
Returns:
0 on success, errno (or -1) on error
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmMkdirs (const char * root,
const char * pathstr 
)
+
+
+ +

Create several directories (including parents if needed) in one go.

+

Macros in pathstr will be expanded in the process.

+
Parameters:
+ + + +
rootleading root directory (or NULL for none)
pathstrlist of directories separated with :
+
+
+
Returns:
0 if all directories were successfully created (or already existed), non-zero otherwise
+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + + + + + +
FD_t rpmMkTemp (char * templ)
+
+
+ +

Thin wrapper for mkstemp(3).

+
Parameters:
+ + +
templtemplate for temporary filename
+
+
+
Returns:
file handle or NULL on error
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
FD_t rpmMkTempFile (const char * prefix,
char ** fn 
)
+
+
+ +

Return file handle for a temporaray file.

+

A unique temporaray file path will be created in [prefix/]%{_tmppath} directory. The file name and the open file handle are returned.

+
Parameters:
+ + +
prefixleading part of temp file path
+
+
+
Return values:
+ + +
fntemp file name (or NULL)
+
+
+
Returns:
fdptr open file handle or NULL on error
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmfileutil.map b/doc/librpm/html/group__rpmfileutil.map new file mode 100644 index 0000000..7df1b3f --- /dev/null +++ b/doc/librpm/html/group__rpmfileutil.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/librpm/html/group__rpmfileutil.md5 b/doc/librpm/html/group__rpmfileutil.md5 new file mode 100644 index 0000000..72ec411 --- /dev/null +++ b/doc/librpm/html/group__rpmfileutil.md5 @@ -0,0 +1 @@ +671b62ea507400d2312003413cb2e1e7 \ No newline at end of file diff --git a/doc/librpm/html/group__rpmfileutil.png b/doc/librpm/html/group__rpmfileutil.png new file mode 100644 index 0000000..bd6c605 Binary files /dev/null and b/doc/librpm/html/group__rpmfileutil.png differ diff --git a/doc/librpm/html/group__rpmgi.html b/doc/librpm/html/group__rpmgi.html new file mode 100644 index 0000000..ee0d0cc --- /dev/null +++ b/doc/librpm/html/group__rpmgi.html @@ -0,0 +1,45 @@ + + + + +rpm: Generalized Iterator API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.0
+
+
+ +
+
+
+
Generalized Iterator API.
+
+
+ +
+
+ + + diff --git a/doc/librpm/html/group__rpmio.html b/doc/librpm/html/group__rpmio.html new file mode 100644 index 0000000..9dc9bcd --- /dev/null +++ b/doc/librpm/html/group__rpmio.html @@ -0,0 +1,748 @@ + + + + +rpm: RPM IO API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
RPM IO API.
+
+
+
+Collaboration diagram for RPM IO API.:
+
+
+ + +
+
+ + + + + + + +

+

+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmio.h
file  rpmurl.h
file  rpmmacro.h
file  rpmlog.h
 

Yet Another syslog(3) API clone.

+
file  rpmsq.h
file  rpmsw.h
file  rpmfileutil.h
 

File and path manipulation helper functions.

+

+Typedefs

typedef off_t _libio_off_t
 Hide libio API lossage.
typedef struct FDIO_s * FDIO_t

+RPMIO Interface.

const char * Fstrerror (FD_t fd)
 strerror(3) clone.
ssize_t Fread (void *buf, size_t size, size_t nmemb, FD_t fd)
 fread(3) clone.
ssize_t Fwrite (const void *buf, size_t size, size_t nmemb, FD_t fd)
 fwrite(3) clone.
int Fseek (FD_t fd, _libio_off_t offset, int whence)
 fseek(3) clone.
off_t Ftell (FD_t fd)
 ftell(3) clone.
int Fclose (FD_t fd)
 fclose(3) clone.
FD_t Fdopen (FD_t ofd, const char *fmode)
FD_t Fopen (const char *path, const char *fmode)
 fopen(3) clone.
int Fflush (FD_t fd)
 fflush(3) clone.
int Ferror (FD_t fd)
 ferror(3) clone.
int Fileno (FD_t fd)
 fileno(3) clone.
int Fcntl (FD_t fd, int op, void *lip)
 fcntl(2) clone.

+RPMIO Utilities.

enum  fdOpX_e {
+  FDSTAT_READ = 0, +FDSTAT_WRITE = 1, +FDSTAT_SEEK = 2, +FDSTAT_CLOSE = 3, +
+  FDSTAT_DIGEST = 4, +FDSTAT_MAX = 5 +
+ }
 Identify per-desciptor I/O operation statistics. More...
typedef enum fdOpX_e fdOpX
 Identify per-desciptor I/O operation statistics.
off_t fdSize (FD_t fd)
FD_t fdDup (int fdno)
FILE * fdGetFILE (FD_t fd)
 Get associated FILE stream from fd (if any)
FD_t fdLink (void *cookie)
FD_t fdFree (FD_t fd)
FD_t fdNew (void)
rpmop fdOp (FD_t fd, fdOpX opx)
int ufdCopy (FD_t sfd, FD_t tfd)
ssize_t timedRead (FD_t fd, void *bufptr, size_t length)
 XXX the name is misleading, this is a legacy wrapper that ensures only S_ISREG() files are read, nothing to do with timed...
+

Typedef Documentation

+ +
+
+ + + + +
typedef off_t _libio_off_t
+
+
+ +

Hide libio API lossage.

+

The libio interface changed after glibc-2.1.3 to pass the seek offset argument as a pointer rather than as an off_t. The snarl below defines typedefs to isolate the lossage.

+ +

Definition at line 34 of file rpmio.h.

+ +
+
+ +
+
+ + + + +
typedef struct FDIO_s* FDIO_t
+
+
+ +

Definition at line 40 of file rpmio.h.

+ +
+
+ +
+
+ + + + +
typedef enum fdOpX_e fdOpX
+
+
+ +

Identify per-desciptor I/O operation statistics.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum fdOpX_e
+
+
+ +

Identify per-desciptor I/O operation statistics.

+
Enumerator:
+ + + + + + +
FDSTAT_READ  +

Read statistics index.

+
FDSTAT_WRITE  +

Write statistics index.

+
FDSTAT_SEEK  +

Seek statistics index.

+
FDSTAT_CLOSE  +

Close statistics index

+
FDSTAT_DIGEST  +

Digest statistics index.

+
FDSTAT_MAX  +
+
+
+ +

Definition at line 151 of file rpmio.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
int Fclose (FD_t fd)
+
+
+ +

fclose(3) clone.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int Fcntl (FD_t fd,
int op,
void * lip 
)
+
+
+ +

fcntl(2) clone.

+ +
+
+ +
+
+ + + + + + + + +
FD_t fdDup (int fdno)
+
+
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
FD_t fdFree (FD_t fd)
+
+
+ +
+
+ +
+
+ + + + + + + + +
FILE* fdGetFILE (FD_t fd)
+
+
+ +

Get associated FILE stream from fd (if any)

+ +
+
+ +
+
+ + + + + + + + +
FD_t fdLink (void * cookie)
+
+
+ +
+
+ +
+
+ + + + + + + + +
FD_t fdNew (void )
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmop fdOp (FD_t fd,
fdOpX opx 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
FD_t Fdopen (FD_t ofd,
const char * fmode 
)
+
+
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
off_t fdSize (FD_t fd)
+
+
+ +
+
+ +
+
+ + + + + + + + +
int Ferror (FD_t fd)
+
+
+ +

ferror(3) clone.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
int Fflush (FD_t fd)
+
+
+ +

fflush(3) clone.

+ +
+
+ +
+
+ + + + + + + + +
int Fileno (FD_t fd)
+
+
+ +

fileno(3) clone.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
FD_t Fopen (const char * path,
const char * fmode 
)
+
+
+ +

fopen(3) clone.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ssize_t Fread (void * buf,
size_t size,
size_t nmemb,
FD_t fd 
)
+
+
+ +

fread(3) clone.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int Fseek (FD_t fd,
_libio_off_t offset,
int whence 
)
+
+
+ +

fseek(3) clone.

+ +
+
+ +
+
+ + + + + + + + +
const char* Fstrerror (FD_t fd)
+
+
+ +

strerror(3) clone.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
off_t Ftell (FD_t fd)
+
+
+ +

ftell(3) clone.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ssize_t Fwrite (const void * buf,
size_t size,
size_t nmemb,
FD_t fd 
)
+
+
+ +

fwrite(3) clone.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
ssize_t timedRead (FD_t fd,
void * bufptr,
size_t length 
)
+
+
+ +

XXX the name is misleading, this is a legacy wrapper that ensures only S_ISREG() files are read, nothing to do with timed...

+

TODO: get this out of the API

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int ufdCopy (FD_t sfd,
FD_t tfd 
)
+
+
+ +

Referenced by main().

+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmio.map b/doc/librpm/html/group__rpmio.map new file mode 100644 index 0000000..712b9c9 --- /dev/null +++ b/doc/librpm/html/group__rpmio.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/librpm/html/group__rpmio.md5 b/doc/librpm/html/group__rpmio.md5 new file mode 100644 index 0000000..ed1daae --- /dev/null +++ b/doc/librpm/html/group__rpmio.md5 @@ -0,0 +1 @@ +5941283794fae50594602162c2a0a2af \ No newline at end of file diff --git a/doc/librpm/html/group__rpmio.png b/doc/librpm/html/group__rpmio.png new file mode 100644 index 0000000..943dc06 Binary files /dev/null and b/doc/librpm/html/group__rpmio.png differ diff --git a/doc/librpm/html/group__rpmkeyring.html b/doc/librpm/html/group__rpmkeyring.html new file mode 100644 index 0000000..f6e3216 --- /dev/null +++ b/doc/librpm/html/group__rpmkeyring.html @@ -0,0 +1,383 @@ + + + + +rpm: RPM keyring API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
RPM keyring API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmkeyring.h

+Functions

rpmKeyring rpmKeyringNew (void)
 Create a new, empty keyring.
rpmKeyring rpmKeyringFree (rpmKeyring keyring)
 Free keyring and the keys within it.
int rpmKeyringAddKey (rpmKeyring keyring, rpmPubkey key)
 Add a public key to keyring.
rpmRC rpmKeyringLookup (rpmKeyring keyring, pgpDig sig)
 Perform keyring lookup for a key matching a signature.
rpmKeyring rpmKeyringLink (rpmKeyring keyring)
 Reference a keyring.
rpmPubkey rpmPubkeyNew (const uint8_t *pkt, size_t pktlen)
 Create a new rpmPubkey from OpenPGP packet.
rpmPubkey rpmPubkeyRead (const char *filename)
 Create a new rpmPubkey from ASCII-armored pubkey file.
rpmPubkey rpmPubkeyFree (rpmPubkey key)
 Free a pubkey.
rpmPubkey rpmPubkeyLink (rpmPubkey key)
 Reference a pubkey.
pgpDig rpmPubkeyDig (rpmPubkey key)
 Parse OpenPGP pubkey parameters.
char * rpmPubkeyBase64 (rpmPubkey key)
 Return base64 encoding of pubkey.
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmKeyringAddKey (rpmKeyring keyring,
rpmPubkey key 
)
+
+
+ +

Add a public key to keyring.

+
Parameters:
+ + + +
keyringkeyring handle
keypubkey handle
+
+
+
Returns:
0 on success, -1 on error, 1 if key already present
+ +
+
+ +
+
+ + + + + + + + +
rpmKeyring rpmKeyringFree (rpmKeyring keyring)
+
+
+ +

Free keyring and the keys within it.

+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
rpmKeyring rpmKeyringLink (rpmKeyring keyring)
+
+
+ +

Reference a keyring.

+
Parameters:
+ + +
keyringkeyring handle
+
+
+
Returns:
new keyring reference
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmRC rpmKeyringLookup (rpmKeyring keyring,
pgpDig sig 
)
+
+
+ +

Perform keyring lookup for a key matching a signature.

+
Parameters:
+ + + +
keyringkeyring handle
sigOpenPGP packet container of signature
+
+
+
Returns:
RPMRC_OK if found, RPMRC_NOKEY otherwise
+ +
+
+ +
+
+ + + + + + + + +
rpmKeyring rpmKeyringNew (void )
+
+
+ +

Create a new, empty keyring.

+
Returns:
new keyring handle
+ +
+
+ +
+
+ + + + + + + + +
char* rpmPubkeyBase64 (rpmPubkey key)
+
+
+ +

Return base64 encoding of pubkey.

+
Parameters:
+ + +
keyPubkey
+
+
+
Returns:
base64 encoded pubkey (malloced), NULL on error
+ +
+
+ +
+
+ + + + + + + + +
pgpDig rpmPubkeyDig (rpmPubkey key)
+
+
+ +

Parse OpenPGP pubkey parameters.

+
Parameters:
+ + +
keyPubkey
+
+
+
Returns:
parsed output of pubkey packet parameters
+ +
+
+ +
+
+ + + + + + + + +
rpmPubkey rpmPubkeyFree (rpmPubkey key)
+
+
+ +

Free a pubkey.

+
Parameters:
+ + +
keyPubkey to free
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
rpmPubkey rpmPubkeyLink (rpmPubkey key)
+
+
+ +

Reference a pubkey.

+
Parameters:
+ + +
keyPubkey
+
+
+
Returns:
new pubkey reference
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmPubkey rpmPubkeyNew (const uint8_t * pkt,
size_t pktlen 
)
+
+
+ +

Create a new rpmPubkey from OpenPGP packet.

+
Parameters:
+ + + +
pktOpenPGP packet data
pktlenData length
+
+
+
Returns:
new pubkey handle
+ +
+
+ +
+
+ + + + + + + + +
rpmPubkey rpmPubkeyRead (const char * filename)
+
+
+ +

Create a new rpmPubkey from ASCII-armored pubkey file.

+
Parameters:
+ + +
filenamePath to pubkey file
+
+
+
Returns:
new pubkey handle
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmlog.html b/doc/librpm/html/group__rpmlog.html new file mode 100644 index 0000000..0a803cc --- /dev/null +++ b/doc/librpm/html/group__rpmlog.html @@ -0,0 +1,675 @@ + + + + +rpm: Logging API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Logging API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef enum rpmlogLvl_e rpmlogLvl
 RPM Log levels.
typedef enum rpmlogFac_e rpmlogFac
 facility codes
typedef struct rpmlogRec_s * rpmlogRec
typedef int(* rpmlogCallback )(rpmlogRec rec, rpmlogCallbackData data)

+Enumerations

enum  rpmlogLvl_e {
+  RPMLOG_EMERG = 0, +RPMLOG_ALERT = 1, +RPMLOG_CRIT = 2, +RPMLOG_ERR = 3, +
+  RPMLOG_WARNING = 4, +RPMLOG_NOTICE = 5, +RPMLOG_INFO = 6, +RPMLOG_DEBUG = 7 +
+ }
 RPM Log levels. More...
enum  rpmlogFac_e {
+  RPMLOG_KERN = (0<<3), +RPMLOG_USER = (1<<3), +RPMLOG_MAIL = (2<<3), +RPMLOG_DAEMON = (3<<3), +
+  RPMLOG_AUTH = (4<<3), +RPMLOG_SYSLOG = (5<<3), +RPMLOG_LPR = (6<<3), +RPMLOG_NEWS = (7<<3), +
+  RPMLOG_UUCP = (8<<3), +RPMLOG_CRON = (9<<3), +RPMLOG_AUTHPRIV = (10<<3), +RPMLOG_FTP = (11<<3), +
+  RPMLOG_LOCAL0 = (16<<3), +RPMLOG_LOCAL1 = (17<<3), +RPMLOG_LOCAL2 = (18<<3), +RPMLOG_LOCAL3 = (19<<3), +
+  RPMLOG_LOCAL4 = (20<<3), +RPMLOG_LOCAL5 = (21<<3), +RPMLOG_LOCAL6 = (22<<3), +RPMLOG_LOCAL7 = (23<<3) +
+ }
 facility codes More...

+Functions

const char * rpmlogRecMessage (rpmlogRec rec)
 Retrieve log message string from rpmlog record.
rpmlogLvl rpmlogRecPriority (rpmlogRec rec)
 Retrieve log priority from rpmlog record.
int rpmlogGetNrecs (void)
 Return number of rpmError() ressages.
void rpmlogPrint (FILE *f)
 Print all rpmError() messages.
void rpmlogClose (void)
 Close desriptor used to write to system logger.
void rpmlogOpen (const char *ident, int option, int facility)
 Open connection to system logger.
int rpmlogSetMask (int mask)
 Set the log mask level.
void rpmlog (int code, const char *fmt,...) RPM_GNUC_PRINTF(2
 Generate a log message using FMT string and option arguments.
void const char * rpmlogMessage (void)
 Return text of last rpmError() message.
int rpmlogCode (void)
 Return error code from last rpmError() message.
const char * rpmlogLevelPrefix (rpmlogLvl pri)
 Return translated prefix string (if any) given log level.
rpmlogCallback rpmlogSetCallback (rpmlogCallback cb, rpmlogCallbackData data)
 Set rpmlog callback function.
FILE * rpmlogSetFile (FILE *fp)
 Set rpmlog file handle.
+

Typedef Documentation

+ +
+
+ + + + +
typedef int(* rpmlogCallback)(rpmlogRec rec, rpmlogCallbackData data)
+
+
+
Parameters:
+ + + +
recrpmlog record
dataprivate callback data
+
+
+
Returns:
flags to define further behavior: RPMLOG_DEFAULT to perform default logging, RPMLOG_EXIT to exit after processing, 0 to return after callback
+ +

Definition at line 189 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
typedef enum rpmlogFac_e rpmlogFac
+
+
+ +

facility codes

+ +
+
+ +
+
+ + + + +
typedef enum rpmlogLvl_e rpmlogLvl
+
+
+ +

RPM Log levels.

+

priorities/facilities are encoded into a single 32-bit quantity, where the bottom 3 bits are the priority (0-7) and the top 28 bits are the facility (0-big number). Both the priorities and the facilities map roughly one-to-one to strings in the syslogd(8) source code. This mapping is included in this file.

+

priorities (these are ordered)

+ +
+
+ +
+
+ + + + +
typedef struct rpmlogRec_s* rpmlogRec
+
+
+ +

Definition at line 163 of file rpmlog.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmlogFac_e
+
+
+ +

facility codes

+
Enumerator:
+ + + + + + + + + + + + + + + + + + + + +
RPMLOG_KERN  +

kernel messages

+
RPMLOG_USER  +

random user-level messages

+
RPMLOG_MAIL  +

mail system

+
RPMLOG_DAEMON  +

system daemons

+
RPMLOG_AUTH  +

security/authorization messages

+
RPMLOG_SYSLOG  +

messages generated internally by syslogd

+
RPMLOG_LPR  +

line printer subsystem

+
RPMLOG_NEWS  +

network news subsystem

+
RPMLOG_UUCP  +

UUCP subsystem

+
RPMLOG_CRON  +

clock daemon

+
RPMLOG_AUTHPRIV  +

security/authorization messages (private)

+
RPMLOG_FTP  +

ftp daemon

+
RPMLOG_LOCAL0  +

reserved for local use

+
RPMLOG_LOCAL1  +

reserved for local use

+
RPMLOG_LOCAL2  +

reserved for local use

+
RPMLOG_LOCAL3  +

reserved for local use

+
RPMLOG_LOCAL4  +

reserved for local use

+
RPMLOG_LOCAL5  +

reserved for local use

+
RPMLOG_LOCAL6  +

reserved for local use

+
RPMLOG_LOCAL7  +

reserved for local use

+
+
+
+ +

Definition at line 75 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
enum rpmlogLvl_e
+
+
+ +

RPM Log levels.

+

priorities/facilities are encoded into a single 32-bit quantity, where the bottom 3 bits are the priority (0-7) and the top 28 bits are the facility (0-big number). Both the priorities and the facilities map roughly one-to-one to strings in the syslogd(8) source code. This mapping is included in this file.

+

priorities (these are ordered)

+
Enumerator:
+ + + + + + + + +
RPMLOG_EMERG  +

system is unusable

+
RPMLOG_ALERT  +

action must be taken immediately

+
RPMLOG_CRIT  +

critical conditions

+
RPMLOG_ERR  +

error conditions

+
RPMLOG_WARNING  +

warning conditions

+
RPMLOG_NOTICE  +

normal but significant condition

+
RPMLOG_INFO  +

informational

+
RPMLOG_DEBUG  +

debug-level messages

+
+
+
+ +

Definition at line 29 of file rpmlog.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rpmlog (int code,
const char * fmt,
 ... 
)
+
+
+ +

Generate a log message using FMT string and option arguments.

+ +

Referenced by buildArgCallback(), buildForTarget(), checkSpec(), getTarSpec(), and isSpecFile().

+ +
+
+ +
+
+ + + + + + + + +
void rpmlogClose (void )
+
+
+ +

Close desriptor used to write to system logger.

+
Todo:
Implement.
+ +
+
+ +
+
+ + + + + + + + +
int rpmlogCode (void )
+
+
+ +

Return error code from last rpmError() message.

+
Deprecated:
Perl-RPM needs, what's really needed is predictable, non-i18n encumbered, error text that can be retrieved through rpmlogMessage() and parsed IMHO.
+
Returns:
code from last message
+ +
+
+ +
+
+ + + + + + + + +
int rpmlogGetNrecs (void )
+
+
+ +

Return number of rpmError() ressages.

+
Returns:
number of messages
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmlogLevelPrefix (rpmlogLvl pri)
+
+
+ +

Return translated prefix string (if any) given log level.

+
Parameters:
+ + +
prilog priority
+
+
+
Returns:
message prefix (or "" for none)
+ +
+
+ +
+
+ + + + + + + + +
void const char* rpmlogMessage (void )
+
+
+ +

Return text of last rpmError() message.

+
Returns:
text of last message
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rpmlogOpen (const char * ident,
int option,
int facility 
)
+
+
+ +

Open connection to system logger.

+
Todo:
Implement.
+ +
+
+ +
+
+ + + + + + + + +
void rpmlogPrint (FILE * f)
+
+
+ +

Print all rpmError() messages.

+
Parameters:
+ + +
ffile handle (NULL uses stderr)
+
+
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmlogRecMessage (rpmlogRec rec)
+
+
+ +

Retrieve log message string from rpmlog record.

+
Parameters:
+ + +
recrpmlog record
+
+
+
Returns:
log message
+ +
+
+ +
+
+ + + + + + + + +
rpmlogLvl rpmlogRecPriority (rpmlogRec rec)
+
+
+ +

Retrieve log priority from rpmlog record.

+
Parameters:
+ + +
recrpmlog record
+
+
+
Returns:
log priority
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmlogCallback rpmlogSetCallback (rpmlogCallback cb,
rpmlogCallbackData data 
)
+
+
+ +

Set rpmlog callback function.

+
Parameters:
+ + + +
cbrpmlog callback function
datacallback private (user) data
+
+
+
Returns:
previous rpmlog callback function
+ +
+
+ +
+
+ + + + + + + + +
FILE* rpmlogSetFile (FILE * fp)
+
+
+ +

Set rpmlog file handle.

+
Parameters:
+ + +
fprpmlog file handle (NULL uses stdout/stderr)
+
+
+
Returns:
previous rpmlog file handle
+ +
+
+ +
+
+ + + + + + + + +
int rpmlogSetMask (int mask)
+
+
+ +

Set the log mask level.

+
Parameters:
+ + +
masklog mask (0 is no operation)
+
+
+
Returns:
previous log mask
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmmacro.html b/doc/librpm/html/group__rpmmacro.html new file mode 100644 index 0000000..13f6b34 --- /dev/null +++ b/doc/librpm/html/group__rpmmacro.html @@ -0,0 +1,536 @@ + + + + +rpm: Macro API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Macro API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void rpmDumpMacroTable (rpmMacroContext mc, FILE *fp)
 Print macros to file stream.
int expandMacros (void *spec, rpmMacroContext mc, char *sbuf, size_t slen)
 Expand macro into buffer.
void addMacro (rpmMacroContext mc, const char *n, const char *o, const char *b, int level)
 Add macro to context.
void delMacro (rpmMacroContext mc, const char *n)
 Delete macro from context.
int rpmDefineMacro (rpmMacroContext mc, const char *macro, int level)
 Define macro in context.
void rpmLoadMacros (rpmMacroContext mc, int level)
 Load macros from specific context into global context.
int rpmLoadMacroFile (rpmMacroContext mc, const char *fn)
 Load macro context from a macro file.
void rpmInitMacros (rpmMacroContext mc, const char *macrofiles)
 Initialize macro context from set of macrofile(s).
void rpmFreeMacros (rpmMacroContext mc)
 Destroy macro context.
char * rpmExpand (const char *arg,...) RPM_GNUC_NULL_TERMINATED
 Return (malloc'ed) concatenated macro expansion(s).
int rpmExpandNumeric (const char *arg)
 Return macro expansion as a numeric value.
const char * rpmConfigDir (void)
 Return rpm configuration base directory.
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void addMacro (rpmMacroContext mc,
const char * n,
const char * o,
const char * b,
int level 
)
+
+
+ +

Add macro to context.

+
Deprecated:
Use rpmDefineMacro().
+
Parameters:
+ + + + + + +
mcmacro context (NULL uses global context).
nmacro name
omacro paramaters
bmacro body
levelmacro recursion level (0 is entry API)
+
+
+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void delMacro (rpmMacroContext mc,
const char * n 
)
+
+
+ +

Delete macro from context.

+
Parameters:
+ + + +
mcmacro context (NULL uses global context).
nmacro name
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int expandMacros (void * spec,
rpmMacroContext mc,
char * sbuf,
size_t slen 
)
+
+
+ +

Expand macro into buffer.

+
Deprecated:
Use rpmExpand().
+
Todo:
Eliminate from API.
+
Parameters:
+ + + +
speccookie (unused)
mcmacro context (NULL uses global context).
+
+
+
Return values:
+ + +
sbufinput macro to expand, output expansion
+
+
+
Parameters:
+ + +
slensize of buffer
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmConfigDir (void )
+
+
+ +

Return rpm configuration base directory.

+

If RPM_CONFIGDIR environment variable is set, it's value will be used. Otherwise the configuration directory is the one set at build time, typically /usr/lib/rpm. The value of rpmConfigDir() is determined on first call to this function and is guaranteed to remain the same on subsequent calls.

+
Returns:
rpm configuration directory name
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmDefineMacro (rpmMacroContext mc,
const char * macro,
int level 
)
+
+
+ +

Define macro in context.

+
Parameters:
+ + + + +
mcmacro context (NULL uses global context).
macromacro name, options, body
levelmacro recursion level (0 is entry API)
+
+
+
Returns:
0 on success (always)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmDumpMacroTable (rpmMacroContext mc,
FILE * fp 
)
+
+
+ +

Print macros to file stream.

+
Parameters:
+ + + +
mcmacro context (NULL uses global context).
fpfile stream (NULL uses stderr).
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
char* rpmExpand (const char * arg,
 ... 
)
+
+
+ +

Return (malloc'ed) concatenated macro expansion(s).

+
Parameters:
+ + +
argmacro(s) to expand (NULL terminates list)
+
+
+
Returns:
macro expansion (malloc'ed)
+ +

Referenced by checkPassPhrase(), doSign(), and getTarSpec().

+ +
+
+ +
+
+ + + + + + + + +
int rpmExpandNumeric (const char * arg)
+
+
+ +

Return macro expansion as a numeric value.

+

Boolean values ('Y' or 'y' returns 1, 'N' or 'n' returns 0) are permitted as well. An undefined macro returns 0.

+
Parameters:
+ + +
argmacro to expand
+
+
+
Returns:
numeric value
+ +

Referenced by build(), and main().

+ +
+
+ +
+
+ + + + + + + + +
void rpmFreeMacros (rpmMacroContext mc)
+
+
+ +

Destroy macro context.

+
Parameters:
+ + +
mcmacro context (NULL uses global context).
+
+
+ +

Referenced by build(), and main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmInitMacros (rpmMacroContext mc,
const char * macrofiles 
)
+
+
+ +

Initialize macro context from set of macrofile(s).

+
Parameters:
+ + + +
mcmacro context
macrofilescolon separated list of macro files (NULL does nothing)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmLoadMacroFile (rpmMacroContext mc,
const char * fn 
)
+
+
+ +

Load macro context from a macro file.

+
Parameters:
+ + + +
mc(unused)
fnmacro file name
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmLoadMacros (rpmMacroContext mc,
int level 
)
+
+
+ +

Load macros from specific context into global context.

+
Parameters:
+ + + +
mcmacro context (NULL does nothing).
levelmacro recursion level (0 is entry API)
+
+
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmpgp.html b/doc/librpm/html/group__rpmpgp.html new file mode 100644 index 0000000..d6a5487 --- /dev/null +++ b/doc/librpm/html/group__rpmpgp.html @@ -0,0 +1,2646 @@ + + + + +rpm: OpenPGP API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
OpenPGP API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  pgpPktPubkey_s
 5.1. More...
struct  pgpPktSigV3_s
 5.2.2. More...
struct  pgpPktSigV4_s
 5.2.3. More...
union  pgpPktSig_u
 5.2. More...
struct  pgpPktOnepass_s
 5.4. More...
struct  pgpPktKeyV3_s
 5.5.1. More...
struct  pgpPktKeyV4_s
 The version 4 format is similar to the version 3 format except for the absence of a validity period. More...
union  pgpPktKey_u
 5.5.3. More...
union  pgpPktPre_u

+Files

file  rpmpgp.h
 

OpenPGP constants and structures from RFC-2440.

+

+Typedefs

typedef struct DIGEST_CTX_s * DIGEST_CTX
typedef struct pgpDig_s * pgpDig
typedef struct pgpDigParams_s * pgpDigParams
typedef enum pgpTag_e pgpTag
 4.3.
typedef struct pgpPktPubkey_s pgpPktPubkey
 5.1.
typedef enum pgpSigType_e pgpSigType
 5.2.1.
typedef enum pgpPubkeyAlgo_e pgpPubkeyAlgo
 9.1.
typedef enum pgpSymkeyAlgo_e pgpSymkeyAlgo
 9.2.
typedef enum pgpCompressAlgo_e pgpCompressAlgo
 9.3.
typedef enum pgpHashAlgo_e pgpHashAlgo
 9.4.
typedef struct pgpPktSigV3_spgpPktSigV3
 5.2.2.
typedef struct pgpPktSigV4_spgpPktSigV4
 5.2.3.
typedef enum pgpSubType_e pgpSubType
 5.2.3.1.
typedef union pgpPktSig_upgpPktSig
 5.2.
typedef struct pgpPktOnepass_spgpPktOnepass
 5.4.
typedef struct pgpPktKeyV3_spgpPktKeyV3
 5.5.1.
typedef struct pgpPktKeyV4_spgpPktKeyV4
 The version 4 format is similar to the version 3 format except for the absence of a validity period.
typedef union pgpPktKey_u pgpPktKey
 5.5.3.
typedef enum pgpArmor_e pgpArmor
typedef enum pgpArmorKey_e pgpArmorKey

+Enumerations

enum  pgpTag_e {
+  PGPTAG_RESERVED = 0, +PGPTAG_PUBLIC_SESSION_KEY = 1, +PGPTAG_SIGNATURE = 2, +PGPTAG_SYMMETRIC_SESSION_KEY = 3, +
+  PGPTAG_ONEPASS_SIGNATURE = 4, +PGPTAG_SECRET_KEY = 5, +PGPTAG_PUBLIC_KEY = 6, +PGPTAG_SECRET_SUBKEY = 7, +
+  PGPTAG_COMPRESSED_DATA = 8, +PGPTAG_SYMMETRIC_DATA = 9, +PGPTAG_MARKER = 10, +PGPTAG_LITERAL_DATA = 11, +
+  PGPTAG_TRUST = 12, +PGPTAG_USER_ID = 13, +PGPTAG_PUBLIC_SUBKEY = 14, +PGPTAG_COMMENT_OLD = 16, +
+  PGPTAG_PHOTOID = 17, +PGPTAG_ENCRYPTED_MDC = 18, +PGPTAG_MDC = 19, +PGPTAG_PRIVATE_60 = 60, +
+  PGPTAG_COMMENT = 61, +PGPTAG_PRIVATE_62 = 62, +PGPTAG_CONTROL = 63 +
+ }
 4.3. More...
enum  pgpSigType_e {
+  PGPSIGTYPE_BINARY = 0x00, +PGPSIGTYPE_TEXT = 0x01, +PGPSIGTYPE_STANDALONE = 0x02, +PGPSIGTYPE_GENERIC_CERT = 0x10, +
+  PGPSIGTYPE_PERSONA_CERT = 0x11, +PGPSIGTYPE_CASUAL_CERT = 0x12, +PGPSIGTYPE_POSITIVE_CERT = 0x13, +PGPSIGTYPE_SUBKEY_BINDING = 0x18, +
+  PGPSIGTYPE_SIGNED_KEY = 0x1F, +PGPSIGTYPE_KEY_REVOKE = 0x20, +PGPSIGTYPE_SUBKEY_REVOKE = 0x28, +PGPSIGTYPE_CERT_REVOKE = 0x30, +
+  PGPSIGTYPE_TIMESTAMP = 0x40 +
+ }
 5.2.1. More...
enum  pgpPubkeyAlgo_e {
+  PGPPUBKEYALGO_RSA = 1, +PGPPUBKEYALGO_RSA_ENCRYPT = 2, +PGPPUBKEYALGO_RSA_SIGN = 3, +PGPPUBKEYALGO_ELGAMAL_ENCRYPT = 16, +
+  PGPPUBKEYALGO_DSA = 17, +PGPPUBKEYALGO_EC = 18, +PGPPUBKEYALGO_ECDSA = 19, +PGPPUBKEYALGO_ELGAMAL = 20, +
+  PGPPUBKEYALGO_DH = 21 +
+ }
 9.1. More...
enum  pgpSymkeyAlgo_e {
+  PGPSYMKEYALGO_PLAINTEXT = 0, +PGPSYMKEYALGO_IDEA = 1, +PGPSYMKEYALGO_TRIPLE_DES = 2, +PGPSYMKEYALGO_CAST5 = 3, +
+  PGPSYMKEYALGO_BLOWFISH = 4, +PGPSYMKEYALGO_SAFER = 5, +PGPSYMKEYALGO_DES_SK = 6, +PGPSYMKEYALGO_AES_128 = 7, +
+  PGPSYMKEYALGO_AES_192 = 8, +PGPSYMKEYALGO_AES_256 = 9, +PGPSYMKEYALGO_TWOFISH = 10, +PGPSYMKEYALGO_NOENCRYPT = 110 +
+ }
 9.2. More...
enum  pgpCompressAlgo_e { PGPCOMPRESSALGO_NONE = 0, +PGPCOMPRESSALGO_ZIP = 1, +PGPCOMPRESSALGO_ZLIB = 2, +PGPCOMPRESSALGO_BZIP2 = 3 + }
 9.3. More...
enum  pgpHashAlgo_e {
+  PGPHASHALGO_MD5 = 1, +PGPHASHALGO_SHA1 = 2, +PGPHASHALGO_RIPEMD160 = 3, +PGPHASHALGO_MD2 = 5, +
+  PGPHASHALGO_TIGER192 = 6, +PGPHASHALGO_HAVAL_5_160 = 7, +PGPHASHALGO_SHA256 = 8, +PGPHASHALGO_SHA384 = 9, +
+  PGPHASHALGO_SHA512 = 10, +PGPHASHALGO_SHA224 = 11 +
+ }
 9.4. More...
enum  pgpSubType_e {
+  PGPSUBTYPE_NONE = 0, +PGPSUBTYPE_SIG_CREATE_TIME = 2, +PGPSUBTYPE_SIG_EXPIRE_TIME = 3, +PGPSUBTYPE_EXPORTABLE_CERT = 4, +
+  PGPSUBTYPE_TRUST_SIG = 5, +PGPSUBTYPE_REGEX = 6, +PGPSUBTYPE_REVOCABLE = 7, +PGPSUBTYPE_KEY_EXPIRE_TIME = 9, +
+  PGPSUBTYPE_ARR = 10, +PGPSUBTYPE_PREFER_SYMKEY = 11, +PGPSUBTYPE_REVOKE_KEY = 12, +PGPSUBTYPE_ISSUER_KEYID = 16, +
+  PGPSUBTYPE_NOTATION = 20, +PGPSUBTYPE_PREFER_HASH = 21, +PGPSUBTYPE_PREFER_COMPRESS = 22, +PGPSUBTYPE_KEYSERVER_PREFERS = 23, +
+  PGPSUBTYPE_PREFER_KEYSERVER = 24, +PGPSUBTYPE_PRIMARY_USERID = 25, +PGPSUBTYPE_POLICY_URL = 26, +PGPSUBTYPE_KEY_FLAGS = 27, +
+  PGPSUBTYPE_SIGNER_USERID = 28, +PGPSUBTYPE_REVOKE_REASON = 29, +PGPSUBTYPE_FEATURES = 30, +PGPSUBTYPE_EMBEDDED_SIG = 32, +
+  PGPSUBTYPE_INTERNAL_100 = 100, +PGPSUBTYPE_INTERNAL_101 = 101, +PGPSUBTYPE_INTERNAL_102 = 102, +PGPSUBTYPE_INTERNAL_103 = 103, +
+  PGPSUBTYPE_INTERNAL_104 = 104, +PGPSUBTYPE_INTERNAL_105 = 105, +PGPSUBTYPE_INTERNAL_106 = 106, +PGPSUBTYPE_INTERNAL_107 = 107, +
+  PGPSUBTYPE_INTERNAL_108 = 108, +PGPSUBTYPE_INTERNAL_109 = 109, +PGPSUBTYPE_INTERNAL_110 = 110, +PGPSUBTYPE_CRITICAL = 128 +
+ }
 5.2.3.1. More...
enum  pgpArmor_e {
+  PGPARMOR_ERR_CRC_CHECK = -7, +PGPARMOR_ERR_BODY_DECODE = -6, +PGPARMOR_ERR_CRC_DECODE = -5, +PGPARMOR_ERR_NO_END_PGP = -4, +
+  PGPARMOR_ERR_UNKNOWN_PREAMBLE_TAG = -3, +PGPARMOR_ERR_UNKNOWN_ARMOR_TYPE = -2, +PGPARMOR_ERR_NO_BEGIN_PGP = -1 +
+ }
enum  pgpArmorKey_e {
+  PGPARMORKEY_VERSION = 1, +PGPARMORKEY_COMMENT = 2, +PGPARMORKEY_MESSAGEID = 3, +PGPARMORKEY_HASH = 4, +
+  PGPARMORKEY_CHARSET = 5 +
+ }
enum  rpmDigestFlags_e { RPMDIGEST_NONE = 0 + }
 Bit(s) to control digest operation. More...

+Functions

const char * pgpValString (pgpValType type, uint8_t val)
 Return string representation of am OpenPGP value.
static unsigned int pgpGrab (const uint8_t *s, size_t nbytes)
 Return (native-endian) integer from big-endian representation.
static size_t pgpLen (const uint8_t *s, size_t *lenp)
 Return length of an OpenPGP packet.
char * pgpHexStr (const uint8_t *p, size_t plen)
 Return hex formatted representation of bytes.
int pgpPubkeyFingerprint (const uint8_t *pkt, size_t pktlen, pgpKeyID_t keyid)
 Calculate OpenPGP public key fingerprint.
int pgpExtractPubkeyFingerprint (const char *b64pkt, pgpKeyID_t keyid)
 Extract OpenPGP public key fingerprint from base64 encoded packet.
int pgpPrtPkts (const uint8_t *pkts, size_t pktlen, pgpDig dig, int printing)
 Print/parse a OpenPGP packet(s).
pgpArmor pgpReadPkts (const char *fn, uint8_t **pkt, size_t *pktlen)
 Parse armored OpenPGP packets from a file.
pgpArmor pgpParsePkts (const char *armor, uint8_t **pkt, size_t *pktlen)
 Parse armored OpenPGP packets from memory.
char * pgpArmorWrap (int atype, const unsigned char *s, size_t ns)
 Wrap a OpenPGP packets in ascii armor for transport.
pgpDig pgpNewDig (void)
 Create a container for parsed OpenPGP packet(s).
void pgpCleanDig (pgpDig dig)
 Release (malloc'd) data from container.
pgpDig pgpFreeDig (pgpDig dig)
 Destroy a container for parsed OpenPGP packet(s).
rpmRC pgpVerifySig (pgpDig dig, DIGEST_CTX hashctx)
 Verify a PGP signature.
char * pgpIdentItem (pgpDigParams digp)
 Return a string identification of a PGP signature/pubkey.
int rpmInitCrypto (void)
 Perform cryptography initialization.
int rpmFreeCrypto (void)
 Shutdown cryptography.
DIGEST_CTX rpmDigestDup (DIGEST_CTX octx)
 Duplicate a digest context.
size_t rpmDigestLength (int hashalgo)
 Obtain digest length in bytes.
DIGEST_CTX rpmDigestInit (int hashalgo, rpmDigestFlags flags)
 Initialize digest.
int rpmDigestUpdate (DIGEST_CTX ctx, const void *data, size_t len)
 Update context with next plain text buffer.
int rpmDigestFinal (DIGEST_CTX ctx, void **datap, size_t *lenp, int asAscii)
 Return digest and destroy context.
rpmDigestBundle rpmDigestBundleNew (void)
 Create a new digest bundle.
rpmDigestBundle rpmDigestBundleFree (rpmDigestBundle bundle)
 Free a digest bundle and all contained digest contexts.
int rpmDigestBundleAdd (rpmDigestBundle bundle, int algo, rpmDigestFlags flags)
 Add a new type of digest to a bundle.
int rpmDigestBundleUpdate (rpmDigestBundle bundle, const void *data, size_t len)
 Update contexts within bundle with next plain text buffer.
int rpmDigestBundleFinal (rpmDigestBundle bundle, int algo, void **datap, size_t *lenp, int asAscii)
 Return digest from a bundle and destroy context, see rpmDigestFinal().
DIGEST_CTX rpmDigestBundleDupCtx (rpmDigestBundle bundle, int algo)
 Duplicate a digest context from a bundle.
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct DIGEST_CTX_s* DIGEST_CTX
+
+
+ +

Definition at line 25 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
typedef enum pgpArmor_e pgpArmor
+
+
+ +
+
+ +
+
+ + + + +
typedef enum pgpArmorKey_e pgpArmorKey
+
+
+ +
+
+ +
+
+ + + + +
typedef enum pgpCompressAlgo_e pgpCompressAlgo
+
+
+ +

9.3.

+

Compression Algorithms

+
+       ID           Algorithm
+       --           ---------
+       0          - Uncompressed
+       1          - ZIP (RFC 1951)
+       2          - ZLIB (RFC 1950)
+       100 to 110 - Private/Experimental algorithm.
+

Implementations MUST implement uncompressed data. Implementations SHOULD implement ZIP. Implementations MAY implement ZLIB.

+ +
+
+ +
+
+ + + + +
typedef struct pgpDig_s* pgpDig
+
+
+ +

Definition at line 30 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
typedef struct pgpDigParams_s* pgpDigParams
+
+
+ +

Definition at line 34 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
typedef enum pgpHashAlgo_e pgpHashAlgo
+
+
+ +

9.4.

+

Hash Algorithms

+
+       ID           Algorithm                              Text Name
+       --           ---------                              ---- ----
+       1          - MD5                                    "MD5"
+       2          - SHA-1                                  "SHA1"
+       3          - RIPE-MD/160                            "RIPEMD160"
+       4          - Reserved for double-width SHA (experimental)
+       5          - MD2                                    "MD2"
+       6          - Reserved for TIGER/192                 "TIGER192"
+       7          - Reserved for HAVAL (5 pass, 160-bit)
+       "HAVAL-5-160"
+       100 to 110 - Private/Experimental algorithm.
+

Implementations MUST implement SHA-1. Implementations SHOULD implement MD5.

+
Todo:
Add SHA256.
+ +
+
+ +
+
+ + + + +
typedef union pgpPktKey_u pgpPktKey
+
+
+ +

5.5.3.

+

Secret Key Packet Formats

+

The Secret Key and Secret Subkey packets contain all the data of the Public Key and Public Subkey packets, with additional algorithm- specific secret key data appended, in encrypted form.

+

The packet contains:

+
    +
  • A Public Key or Public Subkey packet, as described above
  • +
  • One octet indicating string-to-key usage conventions. 0 indicates that the secret key data is not encrypted. 255 indicates that a string-to-key specifier is being given. Any other value is a symmetric-key encryption algorithm specifier.
  • +
  • [Optional] If string-to-key usage octet was 255, a one-octet symmetric encryption algorithm.
  • +
  • [Optional] If string-to-key usage octet was 255, a string-to-key specifier. The length of the string-to-key specifier is implied by its type, as described above.
  • +
  • [Optional] If secret data is encrypted, eight-octet Initial Vector (IV).
  • +
  • Encrypted multi-precision integers comprising the secret key data. These algorithm-specific fields are as described below.
  • +
  • Two-octet checksum of the plaintext of the algorithm-specific portion (sum of all octets, mod 65536).
  • +
+

Algorithm Specific Fields for RSA secret keys:

+
    +
  • multiprecision integer (MPI) of RSA secret exponent d.
  • +
  • MPI of RSA secret prime value p.
  • +
  • MPI of RSA secret prime value q (p < q).
  • +
  • MPI of u, the multiplicative inverse of p, mod q.
  • +
+

Algorithm Specific Fields for DSA secret keys:

+
    +
  • MPI of DSA secret exponent x.
  • +
+

Algorithm Specific Fields for Elgamal secret keys:

+
    +
  • MPI of Elgamal secret exponent x.
  • +
+

Secret MPI values can be encrypted using a passphrase. If a string- to-key specifier is given, that describes the algorithm for converting the passphrase to a key, else a simple MD5 hash of the passphrase is used. Implementations SHOULD use a string-to-key specifier; the simple hash is for backward compatibility. The cipher for encrypting the MPIs is specified in the secret key packet.

+

Encryption/decryption of the secret data is done in CFB mode using the key created from the passphrase and the Initial Vector from the packet. A different mode is used with V3 keys (which are only RSA) than with other key formats. With V3 keys, the MPI bit count prefix (i.e., the first two octets) is not encrypted. Only the MPI non- prefix data is encrypted. Furthermore, the CFB state is resynchronized at the beginning of each new MPI value, so that the CFB block boundary is aligned with the start of the MPI data.

+

With V4 keys, a simpler method is used. All secret MPI values are encrypted in CFB mode, including the MPI bitcount prefix.

+

The 16-bit checksum that follows the algorithm-specific portion is the algebraic sum, mod 65536, of the plaintext of all the algorithm- specific octets (including MPI prefix and data). With V3 keys, the checksum is stored in the clear. With V4 keys, the checksum is encrypted like the algorithm-specific data. This value is used to check that the passphrase was correct.

+ +
+
+ +
+
+ + + + +
typedef struct pgpPktKeyV3_s * pgpPktKeyV3
+
+
+ +

5.5.1.

+

Key Packet Variants

+

5.5.1.1. Public Key Packet (Tag 6)

+

A Public Key packet starts a series of packets that forms an OpenPGP key (sometimes called an OpenPGP certificate).

+

5.5.1.2. Public Subkey Packet (Tag 14)

+

A Public Subkey packet (tag 14) has exactly the same format as a Public Key packet, but denotes a subkey. One or more subkeys may be associated with a top-level key. By convention, the top-level key provides signature services, and the subkeys provide encryption services.

+

Note: in PGP 2.6.x, tag 14 was intended to indicate a comment packet. This tag was selected for reuse because no previous version of PGP ever emitted comment packets but they did properly ignore them. Public Subkey packets are ignored by PGP 2.6.x and do not cause it to fail, providing a limited degree of backward compatibility.

+

5.5.1.3. Secret Key Packet (Tag 5)

+

A Secret Key packet contains all the information that is found in a Public Key packet, including the public key material, but also includes the secret key material after all the public key fields.

+

5.5.1.4. Secret Subkey Packet (Tag 7)

+

A Secret Subkey packet (tag 7) is the subkey analog of the Secret Key packet, and has exactly the same format.

+

5.5.2. Public Key Packet Formats

+

There are two versions of key-material packets. Version 3 packets were first generated by PGP 2.6. Version 2 packets are identical in format to Version 3 packets, but are generated by PGP 2.5 or before. V2 packets are deprecated and they MUST NOT be generated. PGP 5.0 introduced version 4 packets, with new fields and semantics. PGP 2.6.x will not accept key-material packets with versions greater than 3.

+

OpenPGP implementations SHOULD create keys with version 4 format. An implementation MAY generate a V3 key to ensure interoperability with old software; note, however, that V4 keys correct some security deficiencies in V3 keys. These deficiencies are described below. An implementation MUST NOT create a V3 key with a public key algorithm other than RSA.

+

A version 3 public key or public subkey packet contains:

+
    +
  • A one-octet version number (3).
  • +
  • A four-octet number denoting the time that the key was created.
  • +
  • A two-octet number denoting the time in days that this key is valid. If this number is zero, then it does not expire.
  • +
  • A one-octet number denoting the public key algorithm of this key
  • +
  • A series of multi-precision integers comprising the key material:
      +
    • a multiprecision integer (MPI) of RSA public modulus n;
    • +
    • an MPI of RSA public encryption exponent e.
    • +
    +
  • +
+

V3 keys SHOULD only be used for backward compatibility because of three weaknesses in them. First, it is relatively easy to construct a V3 key that has the same key ID as any other key because the key ID is simply the low 64 bits of the public modulus. Secondly, because the fingerprint of a V3 key hashes the key material, but not its length, which increases the opportunity for fingerprint collisions. Third, there are minor weaknesses in the MD5 hash algorithm that make developers prefer other algorithms. See below for a fuller discussion of key IDs and fingerprints.

+ +
+
+ +
+
+ + + + +
typedef struct pgpPktKeyV4_s * pgpPktKeyV4
+
+
+ +

The version 4 format is similar to the version 3 format except for the absence of a validity period.

+

This has been moved to the signature packet. In addition, fingerprints of version 4 keys are calculated differently from version 3 keys, as described in section "Enhanced Key Formats."

+

A version 4 packet contains:

+
    +
  • A one-octet version number (4).
  • +
  • A four-octet number denoting the time that the key was created.
  • +
  • A one-octet number denoting the public key algorithm of this key
  • +
  • A series of multi-precision integers comprising the key material. This algorithm-specific portion is:
  • +
+

Algorithm Specific Fields for RSA public keys:

+
    +
  • multiprecision integer (MPI) of RSA public modulus n;
  • +
  • MPI of RSA public encryption exponent e.
  • +
+

Algorithm Specific Fields for DSA public keys:

+
    +
  • MPI of DSA prime p;
  • +
  • MPI of DSA group order q (q is a prime divisor of p-1);
  • +
  • MPI of DSA group generator g;
  • +
  • MPI of DSA public key value y (= g**x where x is secret).
  • +
+

Algorithm Specific Fields for Elgamal public keys:

+
    +
  • MPI of Elgamal prime p;
  • +
  • MPI of Elgamal group generator g;
  • +
  • MPI of Elgamal public key value y (= g**x where x is secret).
  • +
+ +
+
+ +
+
+ + + + +
typedef struct pgpPktOnepass_s * pgpPktOnepass
+
+
+ +

5.4.

+

One-Pass Signature Packets (Tag 4)

+

The One-Pass Signature packet precedes the signed data and contains enough information to allow the receiver to begin calculating any hashes needed to verify the signature. It allows the Signature Packet to be placed at the end of the message, so that the signer can compute the entire signed message in one pass.

+

A One-Pass Signature does not interoperate with PGP 2.6.x or earlier.

+

The body of this packet consists of:

+
    +
  • A one-octet version number. The current version is 3.
  • +
  • A one-octet signature type. Signature types are described in section 5.2.1.
  • +
  • A one-octet number describing the hash algorithm used.
  • +
  • A one-octet number describing the public key algorithm used.
  • +
  • An eight-octet number holding the key ID of the signing key.
  • +
  • A one-octet number holding a flag showing whether the signature is nested. A zero value indicates that the next packet is another One-Pass Signature packet that describes another signature to be applied to the same message data.
  • +
+

Note that if a message contains more than one one-pass signature, then the signature packets bracket the message; that is, the first signature packet after the message corresponds to the last one-pass packet and the final signature packet corresponds to the first one- pass packet.

+ +
+
+ +
+
+ + + + +
typedef struct pgpPktPubkey_s pgpPktPubkey
+
+
+ +

5.1.

+

Public-Key Encrypted Session Key Packets (Tag 1)

+

A Public-Key Encrypted Session Key packet holds the session key used to encrypt a message. Zero or more Encrypted Session Key packets (either Public-Key or Symmetric-Key) may precede a Symmetrically Encrypted Data Packet, which holds an encrypted message. The message is encrypted with the session key, and the session key is itself encrypted and stored in the Encrypted Session Key packet(s). The Symmetrically Encrypted Data Packet is preceded by one Public-Key Encrypted Session Key packet for each OpenPGP key to which the message is encrypted. The recipient of the message finds a session key that is encrypted to their public key, decrypts the session key, and then uses the session key to decrypt the message.

+

The body of this packet consists of:

+
    +
  • A one-octet number giving the version number of the packet type. The currently defined value for packet version is 3. An implementation should accept, but not generate a version of 2, which is equivalent to V3 in all other respects.
  • +
  • An eight-octet number that gives the key ID of the public key that the session key is encrypted to.
  • +
  • A one-octet number giving the public key algorithm used.
  • +
  • A string of octets that is the encrypted session key. This string takes up the remainder of the packet, and its contents are dependent on the public key algorithm used.
  • +
+

Algorithm Specific Fields for RSA encryption

+
    +
  • multiprecision integer (MPI) of RSA encrypted value m**e mod n.
  • +
+

Algorithm Specific Fields for Elgamal encryption:

+
    +
  • MPI of Elgamal (Diffie-Hellman) value g**k mod p.
  • +
  • MPI of Elgamal (Diffie-Hellman) value m * y**k mod p.
  • +
+ +
+
+ +
+
+ + + + +
typedef union pgpPktSig_u * pgpPktSig
+
+
+ +

5.2.

+

Signature Packet (Tag 2)

+

A signature packet describes a binding between some public key and some data. The most common signatures are a signature of a file or a block of text, and a signature that is a certification of a user ID.

+

Two versions of signature packets are defined. Version 3 provides basic signature information, while version 4 provides an expandable format with subpackets that can specify more information about the signature. PGP 2.6.x only accepts version 3 signatures.

+

Implementations MUST accept V3 signatures. Implementations SHOULD generate V4 signatures. Implementations MAY generate a V3 signature that can be verified by PGP 2.6.x.

+

Note that if an implementation is creating an encrypted and signed message that is encrypted to a V3 key, it is reasonable to create a V3 signature.

+ +
+
+ +
+
+ + + + +
typedef struct pgpPktSigV3_s * pgpPktSigV3
+
+
+ +

5.2.2.

+

Version 3 Signature Packet Format

+

The body of a version 3 Signature Packet contains:

+
    +
  • One-octet version number (3).
  • +
  • One-octet length of following hashed material. MUST be 5.
      +
    • One-octet signature type.
    • +
    • Four-octet creation time.
    • +
    +
  • +
  • Eight-octet key ID of signer.
  • +
  • One-octet public key algorithm.
  • +
  • One-octet hash algorithm.
  • +
  • Two-octet field holding left 16 bits of signed hash value.
  • +
  • One or more multi-precision integers comprising the signature.
  • +
+

Algorithm Specific Fields for RSA signatures:

+
    +
  • multiprecision integer (MPI) of RSA signature value m**d.
  • +
+

Algorithm Specific Fields for DSA signatures:

+
    +
  • MPI of DSA value r.
  • +
  • MPI of DSA value s.
  • +
+ +
+
+ +
+
+ + + + +
typedef struct pgpPktSigV4_s * pgpPktSigV4
+
+
+ +

5.2.3.

+

Version 4 Signature Packet Format

+

The body of a version 4 Signature Packet contains:

+
    +
  • One-octet version number (4).
  • +
  • One-octet signature type.
  • +
  • One-octet public key algorithm.
  • +
  • One-octet hash algorithm.
  • +
  • Two-octet scalar octet count for following hashed subpacket data. Note that this is the length in octets of all of the hashed subpackets; a pointer incremented by this number will skip over the hashed subpackets.
  • +
  • Hashed subpacket data. (zero or more subpackets)
  • +
  • Two-octet scalar octet count for following unhashed subpacket data. Note that this is the length in octets of all of the unhashed subpackets; a pointer incremented by this number will skip over the unhashed subpackets.
  • +
  • Unhashed subpacket data. (zero or more subpackets)
  • +
  • Two-octet field holding left 16 bits of signed hash value.
  • +
  • One or more multi-precision integers comprising the signature.
  • +
+ +
+
+ +
+
+ + + + +
typedef enum pgpPubkeyAlgo_e pgpPubkeyAlgo
+
+
+ +

9.1.

+

Public Key Algorithms

+
+       ID           Algorithm
+       --           ---------
+       1          - RSA (Encrypt or Sign)
+       2          - RSA Encrypt-Only
+       3          - RSA Sign-Only
+       16         - Elgamal (Encrypt-Only), see [ELGAMAL]
+       17         - DSA (Digital Signature Standard)
+       18         - Reserved for Elliptic Curve
+       19         - Reserved for ECDSA
+       20         - Elgamal (Encrypt or Sign)
+       21         - Reserved for Diffie-Hellman (X9.42,
+                    as defined for IETF-S/MIME)
+       100 to 110 - Private/Experimental algorithm.
+

Implementations MUST implement DSA for signatures, and Elgamal for encryption. Implementations SHOULD implement RSA keys. Implementations MAY implement any other algorithm.

+ +
+
+ +
+
+ + + + +
typedef enum pgpSigType_e pgpSigType
+
+
+ +

5.2.1.

+

Signature Types

+

There are a number of possible meanings for a signature, which are specified in a signature type octet in any given signature.

+ +
+
+ +
+
+ + + + +
typedef enum pgpSubType_e pgpSubType
+
+
+ +

5.2.3.1.

+

Signature Subpacket Specification

+

The subpacket fields consist of zero or more signature subpackets. Each set of subpackets is preceded by a two-octet scalar count of the length of the set of subpackets.

+

Each subpacket consists of a subpacket header and a body. The header consists of:

+
    +
  • the subpacket length (1, 2, or 5 octets)
  • +
  • the subpacket type (1 octet) and is followed by the subpacket specific data.
  • +
+

The length includes the type octet but not this length. Its format is similar to the "new" format packet header lengths, but cannot have partial body lengths. That is:

+
+       if the 1st octet <  192, then
+           lengthOfLength = 1
+           subpacketLen = 1st_octet
+
+       if the 1st octet >= 192 and < 255, then
+           lengthOfLength = 2
+           subpacketLen = ((1st_octet - 192) << 8) + (2nd_octet) + 192
+
+       if the 1st octet = 255, then
+           lengthOfLength = 5
+           subpacket length = [four-octet scalar starting at 2nd_octet]
+

The value of the subpacket type octet may be:

+
+       2 = signature creation time
+       3 = signature expiration time
+       4 = exportable certification
+       5 = trust signature
+       6 = regular expression
+       7 = revocable
+       9 = key expiration time
+       10 = placeholder for backward compatibility
+       11 = preferred symmetric algorithms
+       12 = revocation key
+       16 = issuer key ID
+       20 = notation data
+       21 = preferred hash algorithms
+       22 = preferred compression algorithms
+       23 = key server preferences
+       24 = preferred key server
+       25 = primary user id
+       26 = policy URL
+       27 = key flags
+       28 = signer's user id
+       29 = reason for revocation
+       100 to 110 = internal or user-defined
+

An implementation SHOULD ignore any subpacket of a type that it does not recognize.

+

Bit 7 of the subpacket type is the "critical" bit. If set, it denotes that the subpacket is one that is critical for the evaluator of the signature to recognize. If a subpacket is encountered that is marked critical but is unknown to the evaluating software, the evaluator SHOULD consider the signature to be in error.

+ +
+
+ +
+
+ + + + +
typedef enum pgpSymkeyAlgo_e pgpSymkeyAlgo
+
+
+ +

9.2.

+

Symmetric Key Algorithms

+
+       ID           Algorithm
+       --           ---------
+       0          - Plaintext or unencrypted data
+       1          - IDEA [IDEA]
+       2          - Triple-DES (DES-EDE, as per spec -
+                    168 bit key derived from 192)
+       3          - CAST5 (128 bit key, as per RFC 2144)
+       4          - Blowfish (128 bit key, 16 rounds) [BLOWFISH]
+       5          - SAFER-SK128 (13 rounds) [SAFER]
+       6          - Reserved for DES/SK
+       7          - Reserved for AES with 128-bit key
+       8          - Reserved for AES with 192-bit key
+       9          - Reserved for AES with 256-bit key
+       100 to 110 - Private/Experimental algorithm.
+

Implementations MUST implement Triple-DES. Implementations SHOULD implement IDEA and CAST5. Implementations MAY implement any other algorithm.

+ +
+
+ +
+
+ + + + +
typedef enum pgpTag_e pgpTag
+
+
+ +

4.3.

+

Packet Tags

+

The packet tag denotes what type of packet the body holds. Note that old format headers can only have tags less than 16, whereas new format headers can have tags as great as 63.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum pgpArmor_e
+
+
+
Enumerator:
+ + + + + + + +
PGPARMOR_ERR_CRC_CHECK  +
PGPARMOR_ERR_BODY_DECODE  +
PGPARMOR_ERR_CRC_DECODE  +
PGPARMOR_ERR_NO_END_PGP  +
PGPARMOR_ERR_UNKNOWN_PREAMBLE_TAG  +
PGPARMOR_ERR_UNKNOWN_ARMOR_TYPE  +
PGPARMOR_ERR_NO_BEGIN_PGP  +
+
+
+ +

Definition at line 888 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
enum pgpArmorKey_e
+
+
+
Enumerator:
+ + + + + +
PGPARMORKEY_VERSION  +

Version:

+
PGPARMORKEY_COMMENT  +

Comment:

+
PGPARMORKEY_MESSAGEID  +

MessageID:

+
PGPARMORKEY_HASH  +

Hash:

+
PGPARMORKEY_CHARSET  +

Charset:

+
+
+
+ +

Definition at line 909 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
enum pgpCompressAlgo_e
+
+
+ +

9.3.

+

Compression Algorithms

+
+       ID           Algorithm
+       --           ---------
+       0          - Uncompressed
+       1          - ZIP (RFC 1951)
+       2          - ZLIB (RFC 1950)
+       100 to 110 - Private/Experimental algorithm.
+

Implementations MUST implement uncompressed data. Implementations SHOULD implement ZIP. Implementations MAY implement ZLIB.

+
Enumerator:
+ + + + +
PGPCOMPRESSALGO_NONE  +

Uncompressed

+
PGPCOMPRESSALGO_ZIP  +

ZIP

+
PGPCOMPRESSALGO_ZLIB  +

ZLIB

+
PGPCOMPRESSALGO_BZIP2  +

BZIP2

+
+
+
+ +

Definition at line 228 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
enum pgpHashAlgo_e
+
+
+ +

9.4.

+

Hash Algorithms

+
+       ID           Algorithm                              Text Name
+       --           ---------                              ---- ----
+       1          - MD5                                    "MD5"
+       2          - SHA-1                                  "SHA1"
+       3          - RIPE-MD/160                            "RIPEMD160"
+       4          - Reserved for double-width SHA (experimental)
+       5          - MD2                                    "MD2"
+       6          - Reserved for TIGER/192                 "TIGER192"
+       7          - Reserved for HAVAL (5 pass, 160-bit)
+       "HAVAL-5-160"
+       100 to 110 - Private/Experimental algorithm.
+

Implementations MUST implement SHA-1. Implementations SHOULD implement MD5.

+
Todo:
Add SHA256.
+
Enumerator:
+ + + + + + + + + + +
PGPHASHALGO_MD5  +

MD5

+
PGPHASHALGO_SHA1  +

SHA1

+
PGPHASHALGO_RIPEMD160  +

RIPEMD160

+
PGPHASHALGO_MD2  +

MD2

+
PGPHASHALGO_TIGER192  +

TIGER192

+
PGPHASHALGO_HAVAL_5_160  +

HAVAL-5-160

+
PGPHASHALGO_SHA256  +

SHA256

+
PGPHASHALGO_SHA384  +

SHA384

+
PGPHASHALGO_SHA512  +

SHA512

+
PGPHASHALGO_SHA224  +

SHA224

+
+
+
+ +

Definition at line 256 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
enum pgpPubkeyAlgo_e
+
+
+ +

9.1.

+

Public Key Algorithms

+
+       ID           Algorithm
+       --           ---------
+       1          - RSA (Encrypt or Sign)
+       2          - RSA Encrypt-Only
+       3          - RSA Sign-Only
+       16         - Elgamal (Encrypt-Only), see [ELGAMAL]
+       17         - DSA (Digital Signature Standard)
+       18         - Reserved for Elliptic Curve
+       19         - Reserved for ECDSA
+       20         - Elgamal (Encrypt or Sign)
+       21         - Reserved for Diffie-Hellman (X9.42,
+                    as defined for IETF-S/MIME)
+       100 to 110 - Private/Experimental algorithm.
+

Implementations MUST implement DSA for signatures, and Elgamal for encryption. Implementations SHOULD implement RSA keys. Implementations MAY implement any other algorithm.

+
Enumerator:
+ + + + + + + + + +
PGPPUBKEYALGO_RSA  +

RSA

+
PGPPUBKEYALGO_RSA_ENCRYPT  +

RSA(Encrypt-Only)

+
PGPPUBKEYALGO_RSA_SIGN  +

RSA(Sign-Only)

+
PGPPUBKEYALGO_ELGAMAL_ENCRYPT  +

Elgamal(Encrypt-Only)

+
PGPPUBKEYALGO_DSA  +

DSA

+
PGPPUBKEYALGO_EC  +

Elliptic Curve

+
PGPPUBKEYALGO_ECDSA  +

ECDSA

+
PGPPUBKEYALGO_ELGAMAL  +

Elgamal

+
PGPPUBKEYALGO_DH  +

Diffie-Hellman (X9.42)

+
+
+
+ +

Definition at line 162 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
enum pgpSigType_e
+
+
+ +

5.2.1.

+

Signature Types

+

There are a number of possible meanings for a signature, which are specified in a signature type octet in any given signature.

+
Enumerator:
+ + + + + + + + + + + + + +
PGPSIGTYPE_BINARY  +

Binary document

+
PGPSIGTYPE_TEXT  +

Canonical text document

+
PGPSIGTYPE_STANDALONE  +

Standalone

+
PGPSIGTYPE_GENERIC_CERT  +

Generic certification of a User ID & Public Key

+
PGPSIGTYPE_PERSONA_CERT  +

Persona certification of a User ID & Public Key

+
PGPSIGTYPE_CASUAL_CERT  +

Casual certification of a User ID & Public Key

+
PGPSIGTYPE_POSITIVE_CERT  +

Positive certification of a User ID & Public Key

+
PGPSIGTYPE_SUBKEY_BINDING  +

Subkey Binding

+
PGPSIGTYPE_SIGNED_KEY  +

Signature directly on a key

+
PGPSIGTYPE_KEY_REVOKE  +

Key revocation

+
PGPSIGTYPE_SUBKEY_REVOKE  +

Subkey revocation

+
PGPSIGTYPE_CERT_REVOKE  +

Certification revocation

+
PGPSIGTYPE_TIMESTAMP  +

Timestamp

+
+
+
+ +

Definition at line 119 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
enum pgpSubType_e
+
+
+ +

5.2.3.1.

+

Signature Subpacket Specification

+

The subpacket fields consist of zero or more signature subpackets. Each set of subpackets is preceded by a two-octet scalar count of the length of the set of subpackets.

+

Each subpacket consists of a subpacket header and a body. The header consists of:

+
    +
  • the subpacket length (1, 2, or 5 octets)
  • +
  • the subpacket type (1 octet) and is followed by the subpacket specific data.
  • +
+

The length includes the type octet but not this length. Its format is similar to the "new" format packet header lengths, but cannot have partial body lengths. That is:

+
+       if the 1st octet <  192, then
+           lengthOfLength = 1
+           subpacketLen = 1st_octet
+
+       if the 1st octet >= 192 and < 255, then
+           lengthOfLength = 2
+           subpacketLen = ((1st_octet - 192) << 8) + (2nd_octet) + 192
+
+       if the 1st octet = 255, then
+           lengthOfLength = 5
+           subpacket length = [four-octet scalar starting at 2nd_octet]
+

The value of the subpacket type octet may be:

+
+       2 = signature creation time
+       3 = signature expiration time
+       4 = exportable certification
+       5 = trust signature
+       6 = regular expression
+       7 = revocable
+       9 = key expiration time
+       10 = placeholder for backward compatibility
+       11 = preferred symmetric algorithms
+       12 = revocation key
+       16 = issuer key ID
+       20 = notation data
+       21 = preferred hash algorithms
+       22 = preferred compression algorithms
+       23 = key server preferences
+       24 = preferred key server
+       25 = primary user id
+       26 = policy URL
+       27 = key flags
+       28 = signer's user id
+       29 = reason for revocation
+       100 to 110 = internal or user-defined
+

An implementation SHOULD ignore any subpacket of a type that it does not recognize.

+

Bit 7 of the subpacket type is the "critical" bit. If set, it denotes that the subpacket is one that is critical for the evaluator of the signature to recognize. If a subpacket is encountered that is marked critical but is unknown to the evaluating software, the evaluator SHOULD consider the signature to be in error.

+
Enumerator:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PGPSUBTYPE_NONE  +

none

+
PGPSUBTYPE_SIG_CREATE_TIME  +

signature creation time

+
PGPSUBTYPE_SIG_EXPIRE_TIME  +

signature expiration time

+
PGPSUBTYPE_EXPORTABLE_CERT  +

exportable certification

+
PGPSUBTYPE_TRUST_SIG  +

trust signature

+
PGPSUBTYPE_REGEX  +

regular expression

+
PGPSUBTYPE_REVOCABLE  +

revocable

+
PGPSUBTYPE_KEY_EXPIRE_TIME  +

key expiration time

+
PGPSUBTYPE_ARR  +

additional recipient request

+
PGPSUBTYPE_PREFER_SYMKEY  +

preferred symmetric algorithms

+
PGPSUBTYPE_REVOKE_KEY  +

revocation key

+
PGPSUBTYPE_ISSUER_KEYID  +

issuer key ID

+
PGPSUBTYPE_NOTATION  +

notation data

+
PGPSUBTYPE_PREFER_HASH  +

preferred hash algorithms

+
PGPSUBTYPE_PREFER_COMPRESS  +

preferred compression algorithms

+
PGPSUBTYPE_KEYSERVER_PREFERS  +

key server preferences

+
PGPSUBTYPE_PREFER_KEYSERVER  +

preferred key server

+
PGPSUBTYPE_PRIMARY_USERID  +

primary user id

+
PGPSUBTYPE_POLICY_URL  +

policy URL

+
PGPSUBTYPE_KEY_FLAGS  +

key flags

+
PGPSUBTYPE_SIGNER_USERID  +

signer's user id

+
PGPSUBTYPE_REVOKE_REASON  +

reason for revocation

+
PGPSUBTYPE_FEATURES  +

feature flags (gpg)

+
PGPSUBTYPE_EMBEDDED_SIG  +

embedded signature (gpg)

+
PGPSUBTYPE_INTERNAL_100  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_101  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_102  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_103  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_104  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_105  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_106  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_107  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_108  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_109  +

internal or user-defined

+
PGPSUBTYPE_INTERNAL_110  +

internal or user-defined

+
PGPSUBTYPE_CRITICAL  +

critical subpacket marker

+
+
+
+ +

Definition at line 396 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
enum pgpSymkeyAlgo_e
+
+
+ +

9.2.

+

Symmetric Key Algorithms

+
+       ID           Algorithm
+       --           ---------
+       0          - Plaintext or unencrypted data
+       1          - IDEA [IDEA]
+       2          - Triple-DES (DES-EDE, as per spec -
+                    168 bit key derived from 192)
+       3          - CAST5 (128 bit key, as per RFC 2144)
+       4          - Blowfish (128 bit key, 16 rounds) [BLOWFISH]
+       5          - SAFER-SK128 (13 rounds) [SAFER]
+       6          - Reserved for DES/SK
+       7          - Reserved for AES with 128-bit key
+       8          - Reserved for AES with 192-bit key
+       9          - Reserved for AES with 256-bit key
+       100 to 110 - Private/Experimental algorithm.
+

Implementations MUST implement Triple-DES. Implementations SHOULD implement IDEA and CAST5. Implementations MAY implement any other algorithm.

+
Enumerator:
+ + + + + + + + + + + + +
PGPSYMKEYALGO_PLAINTEXT  +

Plaintext

+
PGPSYMKEYALGO_IDEA  +

IDEA

+
PGPSYMKEYALGO_TRIPLE_DES  +

3DES

+
PGPSYMKEYALGO_CAST5  +

CAST5

+
PGPSYMKEYALGO_BLOWFISH  +

BLOWFISH

+
PGPSYMKEYALGO_SAFER  +

SAFER

+
PGPSYMKEYALGO_DES_SK  +

DES/SK

+
PGPSYMKEYALGO_AES_128  +

AES(128-bit key)

+
PGPSYMKEYALGO_AES_192  +

AES(192-bit key)

+
PGPSYMKEYALGO_AES_256  +

AES(256-bit key)

+
PGPSYMKEYALGO_TWOFISH  +

TWOFISH(256-bit key)

+
PGPSYMKEYALGO_NOENCRYPT  +

no encryption

+
+
+
+ +

Definition at line 198 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
enum pgpTag_e
+
+
+ +

4.3.

+

Packet Tags

+

The packet tag denotes what type of packet the body holds. Note that old format headers can only have tags less than 16, whereas new format headers can have tags as great as 63.

+
Enumerator:
+ + + + + + + + + + + + + + + + + + + + + + + +
PGPTAG_RESERVED  +

Reserved/Invalid

+
PGPTAG_PUBLIC_SESSION_KEY  +

Public-Key Encrypted Session Key

+
PGPTAG_SIGNATURE  +

Signature

+
PGPTAG_SYMMETRIC_SESSION_KEY  +

Symmetric-Key Encrypted Session Key

+
PGPTAG_ONEPASS_SIGNATURE  +

One-Pass Signature

+
PGPTAG_SECRET_KEY  +

Secret Key

+
PGPTAG_PUBLIC_KEY  +

Public Key

+
PGPTAG_SECRET_SUBKEY  +

Secret Subkey

+
PGPTAG_COMPRESSED_DATA  +

Compressed Data

+
PGPTAG_SYMMETRIC_DATA  +

Symmetrically Encrypted Data

+
PGPTAG_MARKER  +

Marker

+
PGPTAG_LITERAL_DATA  +

Literal Data

+
PGPTAG_TRUST  +

Trust

+
PGPTAG_USER_ID  +

User ID

+
PGPTAG_PUBLIC_SUBKEY  +

Public Subkey

+
PGPTAG_COMMENT_OLD  +

Comment (from OpenPGP draft)

+
PGPTAG_PHOTOID  +

PGP's photo ID

+
PGPTAG_ENCRYPTED_MDC  +

Integrity protected encrypted data

+
PGPTAG_MDC  +

Manipulaion detection code packet

+
PGPTAG_PRIVATE_60  +

Private or Experimental Values

+
PGPTAG_COMMENT  +

Comment

+
PGPTAG_PRIVATE_62  +

Private or Experimental Values

+
PGPTAG_CONTROL  +

Control (GPG)

+
+
+
+ +

Definition at line 46 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
enum rpmDigestFlags_e
+
+
+ +

Bit(s) to control digest operation.

+
Enumerator:
+ +
RPMDIGEST_NONE  +
+
+
+ +

Definition at line 933 of file rpmpgp.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
char* pgpArmorWrap (int atype,
const unsigned char * s,
size_t ns 
)
+
+
+ +

Wrap a OpenPGP packets in ascii armor for transport.

+
Parameters:
+ + + + +
atypetype of armor
sbinary pkt data
nsbinary pkt data length
+
+
+
Returns:
formatted string
+ +
+
+ +
+
+ + + + + + + + +
void pgpCleanDig (pgpDig dig)
+
+
+ +

Release (malloc'd) data from container.

+
Parameters:
+ + +
digcontainer
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int pgpExtractPubkeyFingerprint (const char * b64pkt,
pgpKeyID_t keyid 
)
+
+
+ +

Extract OpenPGP public key fingerprint from base64 encoded packet.

+
Todo:
V3 non-RSA public keys not implemented.
+
Parameters:
+ + +
b64pktbase64 encoded openpgp packet
+
+
+
Return values:
+ + +
keyidpublic key fingerprint
+
+
+
Returns:
8 (no. of bytes) on success, < 0 on error
+ +
+
+ +
+
+ + + + + + + + +
pgpDig pgpFreeDig (pgpDig dig)
+
+
+ +

Destroy a container for parsed OpenPGP packet(s).

+
Parameters:
+ + +
digcontainer
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
static unsigned int pgpGrab (const uint8_t * s,
size_t nbytes 
) [inline, static]
+
+
+ +

Return (native-endian) integer from big-endian representation.

+
Parameters:
+ + + +
spointer to big-endian integer
nbytesno. of bytes
+
+
+
Returns:
native-endian integer
+ +

Definition at line 954 of file rpmpgp.h.

+ +

Referenced by pgpLen().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
char* pgpHexStr (const uint8_t * p,
size_t plen 
)
+
+
+ +

Return hex formatted representation of bytes.

+
Parameters:
+ + + +
pbytes
plenno. of bytes
+
+
+
Returns:
hex formatted string (malloc'ed)
+ +
+
+ +
+
+ + + + + + + + +
char* pgpIdentItem (pgpDigParams digp)
+
+
+ +

Return a string identification of a PGP signature/pubkey.

+
Parameters:
+ + +
digpsignature/pubkey container
+
+
+
Returns:
string describing the item and parameters
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
static size_t pgpLen (const uint8_t * s,
size_t * lenp 
) [inline, static]
+
+
+ +

Return length of an OpenPGP packet.

+
Parameters:
+ + +
spointer to packet
+
+
+
Return values:
+ + +
*lenpno. of bytes in packet
+
+
+
Returns:
no. of bytes in length prefix
+ +

Definition at line 970 of file rpmpgp.h.

+ +

References pgpGrab().

+ +
+
+ +
+
+ + + + + + + + +
pgpDig pgpNewDig (void )
+
+
+ +

Create a container for parsed OpenPGP packet(s).

+
Returns:
container
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
pgpArmor pgpParsePkts (const char * armor,
uint8_t ** pkt,
size_t * pktlen 
)
+
+
+ +

Parse armored OpenPGP packets from memory.

+
Parameters:
+ + +
armorarmored OpenPGP packet string
+
+
+
Return values:
+ + + +
pktdearmored OpenPGP packet(s) (malloced)
pktlendearmored OpenPGP packet(s) length in bytes
+
+
+
Returns:
type of armor found
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int pgpPrtPkts (const uint8_t * pkts,
size_t pktlen,
pgpDig dig,
int printing 
)
+
+
+ +

Print/parse a OpenPGP packet(s).

+
Parameters:
+ + + +
pktsOpenPGP packet(s)
pktlenOpenPGP packet(s) length (no. of bytes)
+
+
+
Return values:
+ + +
digparsed output of signature/pubkey packet parameters
+
+
+
Parameters:
+ + +
printingshould packets be printed?
+
+
+
Returns:
-1 on error, 0 on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int pgpPubkeyFingerprint (const uint8_t * pkt,
size_t pktlen,
pgpKeyID_t keyid 
)
+
+
+ +

Calculate OpenPGP public key fingerprint.

+
Todo:
V3 non-RSA public keys not implemented.
+
Parameters:
+ + + +
pktOpenPGP packet (i.e. PGPTAG_PUBLIC_KEY)
pktlenOpenPGP packet length (no. of bytes)
+
+
+
Return values:
+ + +
keyidpublic key fingerprint
+
+
+
Returns:
0 on sucess, else -1
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
pgpArmor pgpReadPkts (const char * fn,
uint8_t ** pkt,
size_t * pktlen 
)
+
+
+ +

Parse armored OpenPGP packets from a file.

+
Parameters:
+ + +
fnfile name
+
+
+
Return values:
+ + + +
pktdearmored OpenPGP packet(s) (malloced)
pktlendearmored OpenPGP packet(s) length in bytes
+
+
+
Returns:
type of armor found
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
const char* pgpValString (pgpValType type,
uint8_t val 
)
+
+
+ +

Return string representation of am OpenPGP value.

+
Parameters:
+ + + +
typetype of value
valbyte value to lookup
+
+
+
Returns:
string value of byte
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmRC pgpVerifySig (pgpDig dig,
DIGEST_CTX hashctx 
)
+
+
+ +

Verify a PGP signature.

+
Parameters:
+ + + +
digcontainer
hashctxdigest context
+
+
+
Returns:
RPMRC_OK on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmDigestBundleAdd (rpmDigestBundle bundle,
int algo,
rpmDigestFlags flags 
)
+
+
+ +

Add a new type of digest to a bundle.

+
Parameters:
+ + + + +
bundledigest bundle
algotype of digest
flagsbit(s) to control digest operation
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DIGEST_CTX rpmDigestBundleDupCtx (rpmDigestBundle bundle,
int algo 
)
+
+
+ +

Duplicate a digest context from a bundle.

+
Parameters:
+ + + +
bundledigest bundle
algotype of digest to dup
+
+
+
Returns:
duplicated digest context
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmDigestBundleFinal (rpmDigestBundle bundle,
int algo,
void ** datap,
size_t * lenp,
int asAscii 
)
+
+
+ +

Return digest from a bundle and destroy context, see rpmDigestFinal().

+
Parameters:
+ + + +
bundledigest bundle
algotype of digest to return
+
+
+
Return values:
+ + + +
datapaddress of returned digest
lenpaddress of digest length
+
+
+
Parameters:
+ + +
asAsciireturn digest as ascii string?
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + +
rpmDigestBundle rpmDigestBundleFree (rpmDigestBundle bundle)
+
+
+ +

Free a digest bundle and all contained digest contexts.

+
Parameters:
+ + +
bundledigest bundle
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
rpmDigestBundle rpmDigestBundleNew (void )
+
+
+ +

Create a new digest bundle.

+
Returns:
New digest bundle
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmDigestBundleUpdate (rpmDigestBundle bundle,
const void * data,
size_t len 
)
+
+
+ +

Update contexts within bundle with next plain text buffer.

+
Parameters:
+ + + + +
bundledigest bundle
datanext data buffer
lenno. bytes of data
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + +
DIGEST_CTX rpmDigestDup (DIGEST_CTX octx)
+
+
+ +

Duplicate a digest context.

+
Parameters:
+ + +
octxexisting digest context
+
+
+
Returns:
duplicated digest context
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmDigestFinal (DIGEST_CTX ctx,
void ** datap,
size_t * lenp,
int asAscii 
)
+
+
+ +

Return digest and destroy context.

+

Final wrapup - pad to 64-byte boundary with the bit pattern 1 0* (64-bit count of bits processed, MSB-first)

+
Parameters:
+ + +
ctxdigest context
+
+
+
Return values:
+ + + +
datapaddress of returned digest
lenpaddress of digest length
+
+
+
Parameters:
+ + +
asAsciireturn digest as ascii string?
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DIGEST_CTX rpmDigestInit (int hashalgo,
rpmDigestFlags flags 
)
+
+
+ +

Initialize digest.

+

Set bit count to 0 and buffer to mysterious initialization constants.

+
Parameters:
+ + + +
hashalgotype of digest
flagsbit(s) to control digest operation
+
+
+
Returns:
digest context
+ +
+
+ +
+
+ + + + + + + + +
size_t rpmDigestLength (int hashalgo)
+
+
+ +

Obtain digest length in bytes.

+
Parameters:
+ + +
hashalgotype of digest
+
+
+
Returns:
digest length, zero on invalid algorithm
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmDigestUpdate (DIGEST_CTX ctx,
const void * data,
size_t len 
)
+
+
+ +

Update context with next plain text buffer.

+
Parameters:
+ + + + +
ctxdigest context
datanext data buffer
lenno. bytes of data
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + +
int rpmFreeCrypto (void )
+
+
+ +

Shutdown cryptography.

+ +
+
+ +
+
+ + + + + + + + +
int rpmInitCrypto (void )
+
+
+ +

Perform cryptography initialization.

+

It must be called before any cryptography can be used within rpm. It's not normally necessary to call it directly as it's called in general rpm initialization routines.

+
Returns:
0 on success, -1 on failure
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmprob.html b/doc/librpm/html/group__rpmprob.html new file mode 100644 index 0000000..932fad0 --- /dev/null +++ b/doc/librpm/html/group__rpmprob.html @@ -0,0 +1,583 @@ + + + + +rpm: Problem Element API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Problem Element API.
+
+
+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmprob.h
 

Structures and prototypes used for an rpm problem item.

+

+Typedefs

typedef enum rpmProblemType_e rpmProblemType
 Enumerate transaction set problem types.

+Enumerations

enum  rpmprobFilterFlags_e {
+  RPMPROB_FILTER_NONE = 0, +RPMPROB_FILTER_IGNOREOS = (1 << 0), +RPMPROB_FILTER_IGNOREARCH = (1 << 1), +RPMPROB_FILTER_REPLACEPKG = (1 << 2), +
+  RPMPROB_FILTER_FORCERELOCATE = (1 << 3), +RPMPROB_FILTER_REPLACENEWFILES = (1 << 4), +RPMPROB_FILTER_REPLACEOLDFILES = (1 << 5), +RPMPROB_FILTER_OLDPACKAGE = (1 << 6), +
+  RPMPROB_FILTER_DISKSPACE = (1 << 7), +RPMPROB_FILTER_DISKNODES = (1 << 8) +
+ }
enum  rpmProblemType_e {
+  RPMPROB_BADARCH, +RPMPROB_BADOS, +RPMPROB_PKG_INSTALLED, +RPMPROB_BADRELOCATE, +
+  RPMPROB_REQUIRES, +RPMPROB_CONFLICT, +RPMPROB_NEW_FILE_CONFLICT, +RPMPROB_FILE_CONFLICT, +
+  RPMPROB_OLDPACKAGE, +RPMPROB_DISKSPACE, +RPMPROB_DISKNODES, +RPMPROB_OBSOLETES +
+ }
 Enumerate transaction set problem types. More...

+Functions

rpmProblem rpmProblemCreate (rpmProblemType type, const char *pkgNEVR, fnpyKey key, const char *altNEVR, const char *str, uint64_t number)
 Create a problem item.
rpmProblem rpmProblemFree (rpmProblem prob)
 Destroy a problem item.
rpmProblem rpmProblemLink (rpmProblem prob)
 Reference an rpmProblem instance.
int rpmProblemCompare (rpmProblem ap, rpmProblem bp)
 Compare two problems for equality.
const char * rpmProblemGetPkgNEVR (rpmProblem prob)
 Return package NEVR.
const char * rpmProblemGetAltNEVR (rpmProblem prob)
 Return related (e.g.
rpmProblemType rpmProblemGetType (rpmProblem prob)
 Return type of problem (dependency, diskpace etc)
fnpyKey rpmProblemGetKey (rpmProblem prob)
 Return filename or python object address of a problem.
const char * rpmProblemGetStr (rpmProblem prob)
 Return a generic data string from a problem.
rpm_loff_t rpmProblemGetDiskNeed (rpmProblem prob)
 Return disk requirement (needed disk space / number of inodes) depending on problem type.
char * rpmProblemString (rpmProblem prob)
 Return formatted string representation of a problem.
+

Typedef Documentation

+ +
+
+ + + + +
typedef enum rpmProblemType_e rpmProblemType
+
+
+ +

Enumerate transaction set problem types.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmprobFilterFlags_e
+
+
+
Todo:
Generalize filter mechanism.
+
Enumerator:
+ + + + + + + + + + +
RPMPROB_FILTER_NONE  +
RPMPROB_FILTER_IGNOREOS  +

from --ignoreos

+
RPMPROB_FILTER_IGNOREARCH  +

from --ignorearch

+
RPMPROB_FILTER_REPLACEPKG  +

from --replacepkgs

+
RPMPROB_FILTER_FORCERELOCATE  +

from --badreloc

+
RPMPROB_FILTER_REPLACENEWFILES  +

from --replacefiles

+
RPMPROB_FILTER_REPLACEOLDFILES  +

from --replacefiles

+
RPMPROB_FILTER_OLDPACKAGE  +

from --oldpackage

+
RPMPROB_FILTER_DISKSPACE  +

from --ignoresize

+
RPMPROB_FILTER_DISKNODES  +

from --ignoresize

+
+
+
+ +

Definition at line 21 of file rpmprob.h.

+ +
+
+ +
+
+ + + + +
enum rpmProblemType_e
+
+
+ +

Enumerate transaction set problem types.

+
Enumerator:
+ + + + + + + + + + + + +
RPMPROB_BADARCH  +

package ... is for a different architecture

+
RPMPROB_BADOS  +

package ... is for a different operating system

+
RPMPROB_PKG_INSTALLED  +

package ... is already installed

+
RPMPROB_BADRELOCATE  +

path ... is not relocatable for package ...

+
RPMPROB_REQUIRES  +

package ... has unsatisfied Requires: ...

+
RPMPROB_CONFLICT  +

package ... has unsatisfied Conflicts: ...

+
RPMPROB_NEW_FILE_CONFLICT  +

file ... conflicts between attemped installs of ...

+
RPMPROB_FILE_CONFLICT  +

file ... from install of ... conflicts with file from package ...

+
RPMPROB_OLDPACKAGE  +

package ... (which is newer than ...) is already installed

+
RPMPROB_DISKSPACE  +

installing package ... needs ... on the ... filesystem

+
RPMPROB_DISKNODES  +

installing package ... needs ... on the ... filesystem

+
RPMPROB_OBSOLETES  +

package ... is obsoleted by ...

+
+
+
+ +

Definition at line 39 of file rpmprob.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmProblemCompare (rpmProblem ap,
rpmProblem bp 
)
+
+
+ +

Compare two problems for equality.

+
Parameters:
+ + + +
ap1st problem
bp2nd problem
+
+
+
Returns:
1 if the problems differ, 0 otherwise
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rpmProblem rpmProblemCreate (rpmProblemType type,
const char * pkgNEVR,
fnpyKey key,
const char * altNEVR,
const char * str,
uint64_t number 
)
+
+
+ +

Create a problem item.

+
Parameters:
+ + + + + + + +
typetype of problem
pkgNEVRpackage name
keyfilename or python object address
altNEVRrelated (e.g. through a dependency) package name
strgeneric string attribute
numbergeneric number attribute
+
+
+
Returns:
rpmProblem
+ +
+
+ +
+
+ + + + + + + + +
rpmProblem rpmProblemFree (rpmProblem prob)
+
+
+ +

Destroy a problem item.

+
Parameters:
+ + +
probrpm problem
+
+
+
Returns:
rpm problem (NULL)
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmProblemGetAltNEVR (rpmProblem prob)
+
+
+ +

Return related (e.g.

+

through a dependency) package NEVR

+
Parameters:
+ + +
probrpm problem
+
+
+
Returns:
related (e.g. through a dependency) package NEVR
+ +
+
+ +
+
+ + + + + + + + +
rpm_loff_t rpmProblemGetDiskNeed (rpmProblem prob)
+
+
+ +

Return disk requirement (needed disk space / number of inodes) depending on problem type.

+

On problem types other than RPMPROB_DISKSPACE and RPMPROB_DISKNODES return value is undefined.

+
Parameters:
+ + +
probrpm problem
+
+
+
Returns:
disk requirement
+ +
+
+ +
+
+ + + + + + + + +
fnpyKey rpmProblemGetKey (rpmProblem prob)
+
+
+ +

Return filename or python object address of a problem.

+
Parameters:
+ + +
probrpm problem
+
+
+
Returns:
filename or python object address
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmProblemGetPkgNEVR (rpmProblem prob)
+
+
+ +

Return package NEVR.

+
Parameters:
+ + +
probrpm problem
+
+
+
Returns:
package NEVR
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmProblemGetStr (rpmProblem prob)
+
+
+ +

Return a generic data string from a problem.

+
Parameters:
+ + +
probrpm problem
+
+
+
Returns:
a generic data string
+
Todo:
needs a better name
+ +
+
+ +
+
+ + + + + + + + +
rpmProblemType rpmProblemGetType (rpmProblem prob)
+
+
+ +

Return type of problem (dependency, diskpace etc)

+
Parameters:
+ + +
probrpm problem
+
+
+
Returns:
type of problem
+ +
+
+ +
+
+ + + + + + + + +
rpmProblem rpmProblemLink (rpmProblem prob)
+
+
+ +

Reference an rpmProblem instance.

+
Parameters:
+ + +
probrpm problem
+
+
+
Returns:
rpm problem
+ +
+
+ +
+
+ + + + + + + + +
char* rpmProblemString (rpmProblem prob)
+
+
+ +

Return formatted string representation of a problem.

+
Parameters:
+ + +
probrpm problem
+
+
+
Returns:
formatted string (malloc'd)
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmps.html b/doc/librpm/html/group__rpmps.html new file mode 100644 index 0000000..6b2c55c --- /dev/null +++ b/doc/librpm/html/group__rpmps.html @@ -0,0 +1,446 @@ + + + + +rpm: Problem Set API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Problem Set API.
+
+
+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmps.h
 

Structures and prototypes used for an "rpmps" problem set.

+

+Typedefs

typedef struct rpmpsi_s * rpmpsi
 Problem set iterator.

+Functions

rpmps rpmpsLink (rpmps ps)
 Reference a problem set instance.
int rpmpsNumProblems (rpmps ps)
 Return number of problems in set.
rpmpsi rpmpsInitIterator (rpmps ps)
 Initialize problem set iterator.
rpmpsi rpmpsFreeIterator (rpmpsi psi)
 Destroy problem set iterator.
rpmProblem rpmpsiNext (rpmpsi psi)
 Return next problem from iterator.
int rpmpsNextIterator (rpmpsi psi)
 Return next problem set iterator index.
rpmProblem rpmpsGetProblem (rpmpsi psi)
 Return current problem from problem set.
rpmps rpmpsCreate (void)
 Create a problem set.
rpmps rpmpsFree (rpmps ps)
 Destroy a problem set.
void rpmpsPrint (FILE *fp, rpmps ps)
 Print problems to file handle.
void rpmpsAppendProblem (rpmps ps, rpmProblem prob)
 Append a problem to current set of problems.
int rpmpsMerge (rpmps dest, rpmps src)
 Merge problem set into another.
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct rpmpsi_s* rpmpsi
+
+
+ +

Problem set iterator.

+ +

Definition at line 20 of file rpmps.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmpsAppendProblem (rpmps ps,
rpmProblem prob 
)
+
+
+ +

Append a problem to current set of problems.

+
Parameters:
+ + + +
psproblem set
probrpmProblem
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmps rpmpsCreate (void )
+
+
+ +

Create a problem set.

+
Returns:
new problem set
+ +
+
+ +
+
+ + + + + + + + +
rpmps rpmpsFree (rpmps ps)
+
+
+ +

Destroy a problem set.

+
Parameters:
+ + +
psproblem set
+
+
+
Returns:
NULL always
+ +

Referenced by checkSpec().

+ +
+
+ +
+
+ + + + + + + + +
rpmpsi rpmpsFreeIterator (rpmpsi psi)
+
+
+ +

Destroy problem set iterator.

+
Parameters:
+ + +
psiproblem set iterator
+
+
+
Returns:
problem set iterator (NULL)
+ +
+
+ +
+
+ + + + + + + + +
rpmProblem rpmpsGetProblem (rpmpsi psi)
+
+
+ +

Return current problem from problem set.

+
Parameters:
+ + +
psiproblem set iterator
+
+
+
Returns:
current rpmProblem
+ +
+
+ +
+
+ + + + + + + + +
rpmProblem rpmpsiNext (rpmpsi psi)
+
+
+ +

Return next problem from iterator.

+
Parameters:
+ + +
psiproblem set iterator
+
+
+
Returns:
next problem (weak ref), NULL on termination
+ +
+
+ +
+
+ + + + + + + + +
rpmpsi rpmpsInitIterator (rpmps ps)
+
+
+ +

Initialize problem set iterator.

+
Parameters:
+ + +
psproblem set
+
+
+
Returns:
problem set iterator
+ +
+
+ +
+
+ + + + + + + + +
rpmps rpmpsLink (rpmps ps)
+
+
+ +

Reference a problem set instance.

+
Parameters:
+ + +
pstransaction set
+
+
+
Returns:
new transaction set reference
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmpsMerge (rpmps dest,
rpmps src 
)
+
+
+ +

Merge problem set into another.

+
Parameters:
+ + + +
destdestination problem set
srcsource problem set
+
+
+
Returns:
number of problems merged
+ +
+
+ +
+
+ + + + + + + + +
int rpmpsNextIterator (rpmpsi psi)
+
+
+ +

Return next problem set iterator index.

+
Parameters:
+ + +
psiproblem set iterator
+
+
+
Returns:
iterator index, -1 on termination
+ +
+
+ +
+
+ + + + + + + + +
int rpmpsNumProblems (rpmps ps)
+
+
+ +

Return number of problems in set.

+
Parameters:
+ + +
psproblem set
+
+
+
Returns:
number of problems
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmpsPrint (FILE * fp,
rpmps ps 
)
+
+
+ +

Print problems to file handle.

+
Parameters:
+ + + +
fpfile handle (NULL uses stderr)
psproblem set
+
+
+ +

Referenced by checkSpec().

+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmrc.html b/doc/librpm/html/group__rpmrc.html new file mode 100644 index 0000000..00a4ead --- /dev/null +++ b/doc/librpm/html/group__rpmrc.html @@ -0,0 +1,380 @@ + + + + +rpm: RPMRC. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
RPMRC.
+
+
+
+Collaboration diagram for RPMRC.:
+
+
+ + +
+
+ + + + +

+

+ + + + + + + + + + + + + + + + + + + +

+Files

file  rpmlib.h
 

In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.

+

+Variables

const char * macrofiles
 List of macro files to read when configuring rpm.

+RPMRC

enum  rpm_machtable_e { RPM_MACHTABLE_INSTARCH = 0, +RPM_MACHTABLE_INSTOS = 1, +RPM_MACHTABLE_BUILDARCH = 2, +RPM_MACHTABLE_BUILDOS = 3 + }
 Build and install arch/os table identifiers. More...
int rpmReadConfigFiles (const char *file, const char *target)
 Read macro configuration file(s) for a target.
void rpmGetArchInfo (const char **name, int *num)
 Return current arch name and/or number.
void rpmGetOsInfo (const char **name, int *num)
 Return current os name and/or number.
int rpmMachineScore (int type, const char *name)
 Return arch/os score of a name.
int rpmShowRC (FILE *fp)
 Display current rpmrc (and macro) configuration.
void rpmSetTables (int archTable, int osTable)
void rpmFreeRpmrc (void)
 Destroy rpmrc arch/os compatibility tables.
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpm_machtable_e
+
+
+ +

Build and install arch/os table identifiers.

+
Todo:
Eliminate from API.
+
Enumerator:
+ + + + +
RPM_MACHTABLE_INSTARCH  +

Install platform architecture.

+
RPM_MACHTABLE_INSTOS  +

Install platform operating system.

+
RPM_MACHTABLE_BUILDARCH  +

Build platform architecture.

+
RPM_MACHTABLE_BUILDOS  +

Build platform operating system.

+
+
+
+ +

Definition at line 62 of file rpmlib.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
void rpmFreeRpmrc (void )
+
+
+ +

Destroy rpmrc arch/os compatibility tables.

+
Todo:
Eliminate from API.
+ +

Referenced by build(), and main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmGetArchInfo (const char ** name,
int * num 
)
+
+
+ +

Return current arch name and/or number.

+
Todo:
Generalize to extract arch component from target_platform macro.
+
Return values:
+ + + +
nameaddress of arch name (or NULL)
numaddress of arch number (or NULL)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmGetOsInfo (const char ** name,
int * num 
)
+
+
+ +

Return current os name and/or number.

+
Todo:
Generalize to extract os component from target_platform macro.
+
Return values:
+ + + +
nameaddress of os name (or NULL)
numaddress of os number (or NULL)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmMachineScore (int type,
const char * name 
)
+
+
+ +

Return arch/os score of a name.

+

An arch/os score measures the "nearness" of a name to the currently running (or defined) platform arch/os. For example, the score of arch "i586" on an i686 platform is (usually) 2. The arch/os score is used to select one of several otherwise identical packages using the arch/os tags from the header as hints of the intended platform for the package.

+
Todo:
Rewrite to use RE's against config.guess target platform output.
+
Parameters:
+ + + +
typeany of the RPM_MACHTABLE_* constants
namename
+
+
+
Returns:
arch score (0 is no match, lower is preferred)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmReadConfigFiles (const char * file,
const char * target 
)
+
+
+ +

Read macro configuration file(s) for a target.

+
Parameters:
+ + + +
filecolon separated files to read (NULL uses default)
targettarget platform (NULL uses default)
+
+
+
Returns:
0 on success, -1 on error
+ +

Referenced by build(), and main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmSetTables (int archTable,
int osTable 
)
+
+
+
Deprecated:
Use addMacro to set _target_* macros.
+
Todo:
Eliminate from API. #
+
Note:
Only used by build code.
+
Parameters:
+ + + +
archTable
osTable
+
+
+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + + + + + +
int rpmShowRC (FILE * fp)
+
+
+ +

Display current rpmrc (and macro) configuration.

+
Parameters:
+ + +
fpoutput file handle
+
+
+
Returns:
0 always
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
const char* macrofiles
+
+
+ +

List of macro files to read when configuring rpm.

+

This is a colon separated list of files. URI's are permitted as well, identified by the token '://', so file paths must not begin with '//'.

+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmrc.map b/doc/librpm/html/group__rpmrc.map new file mode 100644 index 0000000..d0e7a3d --- /dev/null +++ b/doc/librpm/html/group__rpmrc.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/group__rpmrc.md5 b/doc/librpm/html/group__rpmrc.md5 new file mode 100644 index 0000000..a5aa6e7 --- /dev/null +++ b/doc/librpm/html/group__rpmrc.md5 @@ -0,0 +1 @@ +a969dd71ecb11ad9d1b951d9f96f9788 \ No newline at end of file diff --git a/doc/librpm/html/group__rpmrc.png b/doc/librpm/html/group__rpmrc.png new file mode 100644 index 0000000..c7217bd Binary files /dev/null and b/doc/librpm/html/group__rpmrc.png differ diff --git a/doc/librpm/html/group__rpmsq.html b/doc/librpm/html/group__rpmsq.html new file mode 100644 index 0000000..236eb17 --- /dev/null +++ b/doc/librpm/html/group__rpmsq.html @@ -0,0 +1,266 @@ + + + + +rpm: Signal Queue API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Signal Queue API.
+
+
+ + + + + + + + + + + + + + + + + +

+Typedefs

typedef struct rpmsig_s * rpmsig
typedef struct rpmsqElem * rpmsq
typedef void(* rpmsqAction_t )(int signum)
 Default signal handler prototype.

+Functions

int rpmsqIsCaught (int signum)
 Test if given signal has been caught (while signals blocked).
void rpmsqAction (int signum)
 Default signal handler.
int rpmsqEnable (int signum, rpmsqAction_t handler)
 Enable or disable a signal handler.
pid_t rpmsqFork (rpmsq sq)
 Fork a child process.
pid_t rpmsqWait (rpmsq sq)
 Wait for child process to be reaped.
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct rpmsig_s* rpmsig
+
+
+ +

Definition at line 21 of file rpmsq.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmsqElem* rpmsq
+
+
+ +

Definition at line 25 of file rpmsq.h.

+ +
+
+ +
+
+ + + + +
typedef void(* rpmsqAction_t)(int signum)
+
+
+ +

Default signal handler prototype.

+
Parameters:
+ + + + +
signumsignal number
info(siginfo_t) signal info
contextsignal context
+
+
+ +

Definition at line 36 of file rpmsq.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
void rpmsqAction (int signum)
+
+
+ +

Default signal handler.

+
Parameters:
+ + + + +
signumsignal number
info(siginfo_t) signal info
contextsignal context
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmsqEnable (int signum,
rpmsqAction_t handler 
)
+
+
+ +

Enable or disable a signal handler.

+
Parameters:
+ + + +
signumsignal to enable (or disable if negative)
handlersa_sigaction handler (or NULL to use rpmsqHandler())
+
+
+
Returns:
no. of refs, -1 on error
+ +
+
+ +
+
+ + + + + + + + +
pid_t rpmsqFork (rpmsq sq)
+
+
+ +

Fork a child process.

+
Parameters:
+ + +
sqscriptlet queue element
+
+
+
Returns:
fork(2) pid
+ +
+
+ +
+
+ + + + + + + + +
int rpmsqIsCaught (int signum)
+
+
+ +

Test if given signal has been caught (while signals blocked).

+

Similar to sigismember() but operates on internal signal queue.

+
Parameters:
+ + +
signumsignal to test for
+
+
+
Returns:
1 if caught, 0 if not and -1 on error
+ +
+
+ +
+
+ + + + + + + + +
pid_t rpmsqWait (rpmsq sq)
+
+
+ +

Wait for child process to be reaped.

+
Parameters:
+ + +
sqscriptlet queue element
+
+
+
Returns:
reaped child pid
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmstring.html b/doc/librpm/html/group__rpmstring.html new file mode 100644 index 0000000..d15f2ef --- /dev/null +++ b/doc/librpm/html/group__rpmstring.html @@ -0,0 +1,525 @@ + + + + +rpm: String Manipulation API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
String Manipulation API.
+
+
+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmstring.h
 

String manipulation helper functions.

+

+Functions

static RPM_GNUC_CONST int rislower (int c)
 Locale insensitive islower(3)
static RPM_GNUC_CONST int risupper (int c)
 Locale insensitive isupper(3)
static RPM_GNUC_CONST int risalpha (int c)
 Locale insensitive isalpha(3)
static RPM_GNUC_CONST int risdigit (int c)
 Locale insensitive isdigit(3)
static RPM_GNUC_CONST int risalnum (int c)
 Locale insensitive isalnum(3)
static RPM_GNUC_CONST int risblank (int c)
 Locale insensitive isblank(3)
static RPM_GNUC_CONST int risspace (int c)
 Locale insensitive isspace(3)
static RPM_GNUC_CONST int rtolower (int c)
 Locale insensitive tolower(3)
static RPM_GNUC_CONST int rtoupper (int c)
 Locale insensitive toupper(3)
RPM_GNUC_PURE int rstrcasecmp (const char *s1, const char *s2)
 Locale insensitive strcasecmp(3).
RPM_GNUC_PURE int rstrncasecmp (const char *s1, const char *s2, size_t n)
 Locale insensitive strncasecmp(3).
int rasprintf (char **strp, const char *fmt,...) RPM_GNUC_PRINTF(2
 asprintf() clone
int char * rstrcat (char **dest, const char *src)
 Concatenate two strings with dynamically (re)allocated memory.
char * rstrscat (char **dest, const char *arg,...) RPM_GNUC_NULL_TERMINATED
 Concatenate multiple strings with dynamically (re)allocated memory.
size_t rstrlcpy (char *dest, const char *src, size_t n)
 strlcpy() clone: Copy src to string dest of size n.
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rasprintf (char ** strp,
const char * fmt,
 ... 
)
+
+
+ +

asprintf() clone

+ +

Referenced by buildForTarget(), and getTarSpec().

+ +
+
+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST int risalnum (int c) [inline, static]
+
+
+ +

Locale insensitive isalnum(3)

+ +

Definition at line 54 of file rpmstring.h.

+ +

References risalpha(), and risdigit().

+ +
+
+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST int risalpha (int c) [inline, static]
+
+
+ +

Locale insensitive isalpha(3)

+ +

Definition at line 38 of file rpmstring.h.

+ +

References rislower(), and risupper().

+ +

Referenced by risalnum().

+ +
+
+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST int risblank (int c) [inline, static]
+
+
+ +

Locale insensitive isblank(3)

+ +

Definition at line 62 of file rpmstring.h.

+ +

Referenced by risspace().

+ +
+
+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST int risdigit (int c) [inline, static]
+
+
+ +

Locale insensitive isdigit(3)

+ +

Definition at line 46 of file rpmstring.h.

+ +

Referenced by risalnum().

+ +
+
+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST int rislower (int c) [inline, static]
+
+
+ +

Locale insensitive islower(3)

+ +

Definition at line 22 of file rpmstring.h.

+ +

Referenced by risalpha(), and rtoupper().

+ +
+
+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST int risspace (int c) [inline, static]
+
+
+ +

Locale insensitive isspace(3)

+ +

Definition at line 70 of file rpmstring.h.

+ +

References risblank().

+ +
+
+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST int risupper (int c) [inline, static]
+
+
+ +

Locale insensitive isupper(3)

+ +

Definition at line 30 of file rpmstring.h.

+ +

Referenced by risalpha(), and rtolower().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
RPM_GNUC_PURE int rstrcasecmp (const char * s1,
const char * s2 
)
+
+
+ +

Locale insensitive strcasecmp(3).

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int char* rstrcat (char ** dest,
const char * src 
)
+
+
+ +

Concatenate two strings with dynamically (re)allocated memory.

+
Parameters:
+ + + +
destpointer to destination string
srcsource string
+
+
+
Returns:
realloc'd dest with src appended
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
size_t rstrlcpy (char * dest,
const char * src,
size_t n 
)
+
+
+ +

strlcpy() clone: Copy src to string dest of size n.

+

At most n-1 characters will be copied. Always zero-terminates (unless n == 0). Length of src is returned; if retval >= n, truncation occurred.

+
Parameters:
+ + + + +
destdestination buffer
srcstring to copy
ndestination buffer size
+
+
+
Returns:
length of src string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
RPM_GNUC_PURE int rstrncasecmp (const char * s1,
const char * s2,
size_t n 
)
+
+
+ +

Locale insensitive strncasecmp(3).

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
char* rstrscat (char ** dest,
const char * arg,
 ... 
)
+
+
+ +

Concatenate multiple strings with dynamically (re)allocated memory.

+
Parameters:
+ + + +
destpointer to destination string
argNULL terminated list of strings to concatenate
+
+
+
Returns:
realloc'd dest with strings appended
+ +

Referenced by buildForTarget(), and main().

+ +
+
+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST int rtolower (int c) [inline, static]
+
+
+ +

Locale insensitive tolower(3)

+ +

Definition at line 78 of file rpmstring.h.

+ +

References risupper().

+ +
+
+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST int rtoupper (int c) [inline, static]
+
+
+ +

Locale insensitive toupper(3)

+ +

Definition at line 86 of file rpmstring.h.

+ +

References rislower().

+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmsw.html b/doc/librpm/html/group__rpmsw.html new file mode 100644 index 0000000..03c01f4 --- /dev/null +++ b/doc/librpm/html/group__rpmsw.html @@ -0,0 +1,353 @@ + + + + +rpm: Statistics API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Statistics API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  rpmsw_s
struct  rpmop_s
 Cumulative statistics for an operation. More...

+Typedefs

typedef unsigned long int rpmtime_t
typedef struct rpmsw_srpmsw
typedef struct rpmop_srpmop

+Functions

rpmsw rpmswNow (rpmsw sw)
 Return benchmark time stamp.
rpmtime_t rpmswDiff (rpmsw end, rpmsw begin)
 Return benchmark time stamp difference.
rpmtime_t rpmswInit (void)
 Return benchmark time stamp overhead.
int rpmswEnter (rpmop op, ssize_t rc)
 Enter timed operation.
rpmtime_t rpmswExit (rpmop op, ssize_t rc)
 Exit timed operation.
rpmtime_t rpmswAdd (rpmop to, rpmop from)
 Sum statistic counters.
rpmtime_t rpmswSub (rpmop to, rpmop from)
 Subtract statistic counters.
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct rpmop_s* rpmop
+
+
+ +

Definition at line 25 of file rpmsw.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmsw_s* rpmsw
+
+
+ +

Definition at line 21 of file rpmsw.h.

+ +
+
+ +
+
+ + + + +
typedef unsigned long int rpmtime_t
+
+
+ +

Definition at line 17 of file rpmsw.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmtime_t rpmswAdd (rpmop to,
rpmop from 
)
+
+
+ +

Sum statistic counters.

+
Parameters:
+ + + +
toresult statistics
fromoperation statistics
+
+
+
Returns:
cumulative usecs for operation
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmtime_t rpmswDiff (rpmsw end,
rpmsw begin 
)
+
+
+ +

Return benchmark time stamp difference.

+
Parameters:
+ + + +
*endend time stamp
*beginbegin time stamp
+
+
+
Returns:
difference in micro-seconds
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmswEnter (rpmop op,
ssize_t rc 
)
+
+
+ +

Enter timed operation.

+
Parameters:
+ + + +
opoperation statistics
rc-1 clears usec counter
+
+
+
Returns:
0 always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmtime_t rpmswExit (rpmop op,
ssize_t rc 
)
+
+
+ +

Exit timed operation.

+
Parameters:
+ + + +
opoperation statistics
rcper-operation data (e.g. bytes transferred)
+
+
+
Returns:
cumulative usecs for operation
+ +
+
+ +
+
+ + + + + + + + +
rpmtime_t rpmswInit (void )
+
+
+ +

Return benchmark time stamp overhead.

+
Returns:
overhead in micro-seconds
+ +
+
+ +
+
+ + + + + + + + +
rpmsw rpmswNow (rpmsw sw)
+
+
+ +

Return benchmark time stamp.

+
Parameters:
+ + +
*swtime stamp
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmtime_t rpmswSub (rpmop to,
rpmop from 
)
+
+
+ +

Subtract statistic counters.

+
Parameters:
+ + + +
toresult statistics
fromoperation statistics
+
+
+
Returns:
cumulative usecs for operation
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmtag.html b/doc/librpm/html/group__rpmtag.html new file mode 100644 index 0000000..3b98710 --- /dev/null +++ b/doc/librpm/html/group__rpmtag.html @@ -0,0 +1,530 @@ + + + + +rpm: RPM Tag API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
RPM Tag API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef enum rpmTag_e rpmTag
 Tags identify data in package headers.
typedef enum rpmDbiTag_e rpmDbiTag
 Rpm database index tags.
typedef enum rpmTagClass_e rpmTagClass
 The classes of data in tags from headers.

+Enumerations

enum  rpmTag_e {
+  RPMTAG_NOT_FOUND = -1, +RPMTAG_HEADERIMAGE = 61, +RPMTAG_HEADERSIGNATURES = 62, +RPMTAG_HEADERIMMUTABLE = 63, +
+  RPMTAG_HEADERREGIONS = 64, +RPMTAG_HEADERI18NTABLE = 100, +RPMTAG_SIG_BASE = 256, +RPMTAG_SIGSIZE = RPMTAG_SIG_BASE+1, +
+  RPMTAG_SIGLEMD5_1 = RPMTAG_SIG_BASE+2, +RPMTAG_SIGPGP = RPMTAG_SIG_BASE+3, +RPMTAG_SIGLEMD5_2 = RPMTAG_SIG_BASE+4, +RPMTAG_SIGMD5 = RPMTAG_SIG_BASE+5 +
+ }
 Tags identify data in package headers. More...
enum  rpmDbiTag_e {
+  RPMDBI_PACKAGES = 0, +RPMDBI_LABEL = 2, +RPMDBI_NAME = RPMTAG_NAME, +RPMDBI_BASENAMES = RPMTAG_BASENAMES, +
+  RPMDBI_GROUP = RPMTAG_GROUP, +RPMDBI_REQUIRENAME = RPMTAG_REQUIRENAME, +RPMDBI_PROVIDENAME = RPMTAG_PROVIDENAME, +RPMDBI_CONFLICTNAME = RPMTAG_CONFLICTNAME, +
+  RPMDBI_OBSOLETENAME = RPMTAG_OBSOLETENAME, +RPMDBI_TRIGGERNAME = RPMTAG_TRIGGERNAME, +RPMDBI_DIRNAMES = RPMTAG_DIRNAMES, +RPMDBI_INSTALLTID = RPMTAG_INSTALLTID, +
+  RPMDBI_SIGMD5 = RPMTAG_SIGMD5, +RPMDBI_SHA1HEADER = RPMTAG_SHA1HEADER +
+ }
 Rpm database index tags. More...
enum  rpmTagClass_e { RPM_NULL_CLASS = 0, +RPM_NUMERIC_CLASS = 1, +RPM_STRING_CLASS = 2, +RPM_BINARY_CLASS = 3 + }
 The classes of data in tags from headers. More...

+Functions

const char * rpmTagGetName (rpmTagVal tag)
 Return tag name from value.
rpmTagType rpmTagGetType (rpmTagVal tag)
 Return tag data type from value.
rpmTagType rpmTagGetTagType (rpmTagVal tag)
 Return tag data type from value.
rpmTagReturnType rpmTagGetReturnType (rpmTagVal tag)
 Return tag data type from value.
rpmTagClass rpmTagGetClass (rpmTagVal tag)
 Return tag data class from value.
rpmTagVal rpmTagGetValue (const char *tagstr)
 Return tag value from name.
rpmTagClass rpmTagTypeGetClass (rpmTagType type)
 Return data class of type.
int rpmTagGetNames (rpmtd tagnames, int fullname)
 Return known rpm tag names, sorted by name.
+

Typedef Documentation

+ +
+
+ + + + +
typedef enum rpmDbiTag_e rpmDbiTag
+
+
+ +

Rpm database index tags.

+ +
+
+ +
+
+ + + + +
typedef enum rpmTag_e rpmTag
+
+
+ +

Tags identify data in package headers.

+
Note:
tags should not have value 0!
+
+all new tags should be added above 5000
+
Todo:
: Somehow supply type
+ +
+
+ +
+
+ + + + +
typedef enum rpmTagClass_e rpmTagClass
+
+
+ +

The classes of data in tags from headers.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmDbiTag_e
+
+
+ +

Rpm database index tags.

+
Enumerator:
+ + + + + + + + + + + + + + +
RPMDBI_PACKAGES  +
RPMDBI_LABEL  +
RPMDBI_NAME  +
RPMDBI_BASENAMES  +
RPMDBI_GROUP  +
RPMDBI_REQUIRENAME  +
RPMDBI_PROVIDENAME  +
RPMDBI_CONFLICTNAME  +
RPMDBI_OBSOLETENAME  +
RPMDBI_TRIGGERNAME  +
RPMDBI_DIRNAMES  +
RPMDBI_INSTALLTID  +
RPMDBI_SIGMD5  +
RPMDBI_SHA1HEADER  +
+
+
+ +

Definition at line 311 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
enum rpmTag_e
+
+
+ +

Tags identify data in package headers.

+
Note:
tags should not have value 0!
+
+all new tags should be added above 5000
+
Todo:
: Somehow supply type
+
Enumerator:
+ + + + + + + + + + + + +
RPMTAG_NOT_FOUND  +

Unknown tag

+
RPMTAG_HEADERIMAGE  +

Current image.

+
RPMTAG_HEADERSIGNATURES  +

Signatures.

+
RPMTAG_HEADERIMMUTABLE  +

Original image.

+
RPMTAG_HEADERREGIONS  +

Regions.

+
RPMTAG_HEADERI18NTABLE  +
RPMTAG_SIG_BASE  +
RPMTAG_SIGSIZE  +
RPMTAG_SIGLEMD5_1  +
RPMTAG_SIGPGP  +
RPMTAG_SIGLEMD5_2  +
RPMTAG_SIGMD5  +
+
+
+ +

Definition at line 28 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
enum rpmTagClass_e
+
+
+ +

The classes of data in tags from headers.

+
Enumerator:
+ + + + +
RPM_NULL_CLASS  +
RPM_NUMERIC_CLASS  +
RPM_STRING_CLASS  +
RPM_BINARY_CLASS  +
+
+
+ +

Definition at line 373 of file rpmtag.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
rpmTagClass rpmTagGetClass (rpmTagVal tag)
+
+
+ +

Return tag data class from value.

+
Parameters:
+ + +
tagtag value
+
+
+
Returns:
tag data class, RPM_NULL_CLASS on not found.
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmTagGetName (rpmTagVal tag)
+
+
+ +

Return tag name from value.

+
Parameters:
+ + +
tagtag value
+
+
+
Returns:
tag name, "(unknown)" on not found
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmTagGetNames (rpmtd tagnames,
int fullname 
)
+
+
+ +

Return known rpm tag names, sorted by name.

+
Return values:
+ + +
tagnamestag container of string array type
+
+
+
Parameters:
+ + +
fullnamereturn short or full name
+
+
+
Returns:
number of tag names, 0 on error
+ +
+
+ +
+
+ + + + + + + + +
rpmTagReturnType rpmTagGetReturnType (rpmTagVal tag)
+
+
+ +

Return tag data type from value.

+
Parameters:
+ + +
tagtag value
+
+
+
Returns:
tag data return type, RPM_NULL_TYPE on not found.
+ +
+
+ +
+
+ + + + + + + + +
rpmTagType rpmTagGetTagType (rpmTagVal tag)
+
+
+ +

Return tag data type from value.

+
Parameters:
+ + +
tagtag value
+
+
+
Returns:
tag data type, RPM_NULL_TYPE on not found.
+ +
+
+ +
+
+ + + + + + + + +
rpmTagType rpmTagGetType (rpmTagVal tag)
+
+
+ +

Return tag data type from value.

+
Parameters:
+ + +
tagtag value
+
+
+
Returns:
tag data type + return type, RPM_NULL_TYPE on not found.
+ +
+
+ +
+
+ + + + + + + + +
rpmTagVal rpmTagGetValue (const char * tagstr)
+
+
+ +

Return tag value from name.

+
Parameters:
+ + +
tagstrname of tag
+
+
+
Returns:
tag value, -1 on not found
+ +
+
+ +
+
+ + + + + + + + +
rpmTagClass rpmTagTypeGetClass (rpmTagType type)
+
+
+ +

Return data class of type.

+
Parameters:
+ + +
typetag type
+
+
+
Returns:
data class, RPM_NULL_CLASS on unknown.
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmtd.html b/doc/librpm/html/group__rpmtd.html new file mode 100644 index 0000000..4cb3c87 --- /dev/null +++ b/doc/librpm/html/group__rpmtd.html @@ -0,0 +1,1154 @@ + + + + +rpm: RPM Tag Data Container API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
RPM Tag Data Container API.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  rpmtd_s
 Container for rpm tag data (from headers or extensions). More...

+Functions

rpmtd rpmtdNew (void)
 Create new tag data container.
rpmtd rpmtdFree (rpmtd td)
 Destroy tag data container.
void rpmtdReset (rpmtd td)
 (Re-)initialize tag data container.
void rpmtdFreeData (rpmtd td)
 Free contained data.
rpm_count_t rpmtdCount (rpmtd td)
 Retrieve array size of the container.
rpmTagVal rpmtdTag (rpmtd td)
 Retrieve tag of the container.
rpmTagType rpmtdType (rpmtd td)
 Retrieve type of the container.
rpmTagClass rpmtdClass (rpmtd td)
 Retrieve class of the container.
int rpmtdGetIndex (rpmtd td)
 Retrieve current iteration index of the container.
int rpmtdSetIndex (rpmtd td, int index)
 Set iteration index of the container.
int rpmtdInit (rpmtd td)
 Initialize tag container for iteration.
int rpmtdNext (rpmtd td)
 Iterate over tag data container.
uint32_t * rpmtdNextUint32 (rpmtd td)
 Iterate over uint32_t type tag data container.
uint64_t * rpmtdNextUint64 (rpmtd td)
 Iterate over uint64_t type tag data container.
const char * rpmtdNextString (rpmtd td)
 Iterate over string / string array type tag data container.
char * rpmtdGetChar (rpmtd td)
 Return char data from tag container.
uint16_t * rpmtdGetUint16 (rpmtd td)
 Return uint16_t data from tag container.
uint32_t * rpmtdGetUint32 (rpmtd td)
 Return uint32_t data from tag container.
uint64_t * rpmtdGetUint64 (rpmtd td)
 Return uint64_t data from tag container.
const char * rpmtdGetString (rpmtd td)
 Return string data from tag container.
uint64_t rpmtdGetNumber (rpmtd td)
 Return numeric value from tag container.
char * rpmtdFormat (rpmtd td, rpmtdFormats fmt, const char *errmsg)
 Format data from tag container to string presentation of given format.
int rpmtdSetTag (rpmtd td, rpmTagVal tag)
 Set container tag and type.
int rpmtdFromUint8 (rpmtd td, rpmTagVal tag, uint8_t *data, rpm_count_t count)
 Construct tag container from uint8_t pointer.
int rpmtdFromUint16 (rpmtd td, rpmTagVal tag, uint16_t *data, rpm_count_t count)
 Construct tag container from uint16_t pointer.
int rpmtdFromUint32 (rpmtd td, rpmTagVal tag, uint32_t *data, rpm_count_t count)
 Construct tag container from uint32_t pointer.
int rpmtdFromUint64 (rpmtd td, rpmTagVal tag, uint64_t *data, rpm_count_t count)
 Construct tag container from uint64_t pointer.
int rpmtdFromString (rpmtd td, rpmTagVal tag, const char *data)
 Construct tag container from a string.
int rpmtdFromStringArray (rpmtd td, rpmTagVal tag, const char **data, rpm_count_t count)
 Construct tag container from a string array.
int rpmtdFromArgv (rpmtd td, rpmTagVal tag, ARGV_t argv)
 Construct tag container from ARGV_t array.
int rpmtdFromArgi (rpmtd td, rpmTagVal tag, ARGI_t argi)
 Construct tag container from ARGI_t array.
+

Function Documentation

+ +
+
+ + + + + + + + +
rpmTagClass rpmtdClass (rpmtd td)
+
+
+ +

Retrieve class of the container.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Rpm tag class
+ +
+
+ +
+
+ + + + + + + + +
rpm_count_t rpmtdCount (rpmtd td)
+
+
+ +

Retrieve array size of the container.

+

For non-array types this is always 1.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Number of entries in contained data.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
char* rpmtdFormat (rpmtd td,
rpmtdFormats fmt,
const char * errmsg 
)
+
+
+ +

Format data from tag container to string presentation of given format.

+

Return malloced string presentation of current data in container, converting from integers etc as necessary. On array types, data from current iteration index is used for formatting.

+
Parameters:
+ + + + +
tdTag data container
fmtFormat to apply
errmsgError message from conversion (or NULL)
+
+
+
Returns:
String representation of current data (malloc'ed), NULL on error
+ +
+
+ +
+
+ + + + + + + + +
rpmtd rpmtdFree (rpmtd td)
+
+
+ +

Destroy tag data container.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
void rpmtdFreeData (rpmtd td)
+
+
+ +

Free contained data.

+

This is always safe to call as the container knows if data was malloc'ed or not. Container is reinitialized.

+
Parameters:
+ + +
tdTag data container
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtdFromArgi (rpmtd td,
rpmTagVal tag,
ARGI_t argi 
)
+
+
+ +

Construct tag container from ARGI_t array.

+

Tag type is checked to be of integer array type and array is checked to be non-empty.

+
Parameters:
+ + + + +
tdTag data container
tagRpm tag to construct
argiARGI array
+
+
+
Returns:
1 on success, 0 on error (eg wrong type)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtdFromArgv (rpmtd td,
rpmTagVal tag,
ARGV_t argv 
)
+
+
+ +

Construct tag container from ARGV_t array.

+

Tag type is checked to be of string array type and array is checked to be non-empty.

+
Parameters:
+ + + + +
tdTag data container
tagRpm tag to construct
argvARGV array
+
+
+
Returns:
1 on success, 0 on error (eg wrong type)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtdFromString (rpmtd td,
rpmTagVal tag,
const char * data 
)
+
+
+ +

Construct tag container from a string.

+

Tag type is checked to be of string type.

+
Parameters:
+ + + + +
tdTag data container
tagRpm tag to construct
dataString to use
+
+
+
Returns:
1 on success, 0 on error (eg wrong type)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtdFromStringArray (rpmtd td,
rpmTagVal tag,
const char ** data,
rpm_count_t count 
)
+
+
+ +

Construct tag container from a string array.

+

Tag type is checked to be of string or string array type. For non-array types count must be exactly 1.

+
Parameters:
+ + + + + +
tdTag data container
tagRpm tag to construct
dataPointer to string array
countNumber of entries
+
+
+
Returns:
1 on success, 0 on error (eg wrong type)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtdFromUint16 (rpmtd td,
rpmTagVal tag,
uint16_t * data,
rpm_count_t count 
)
+
+
+ +

Construct tag container from uint16_t pointer.

+

Tag type is checked to be of INT16 type. For non-array types count must be exactly 1.

+
Parameters:
+ + + + + +
tdTag data container
tagRpm tag to construct
dataPointer to uint16_t (value or array)
countNumber of entries
+
+
+
Returns:
1 on success, 0 on error (eg wrong type)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtdFromUint32 (rpmtd td,
rpmTagVal tag,
uint32_t * data,
rpm_count_t count 
)
+
+
+ +

Construct tag container from uint32_t pointer.

+

Tag type is checked to be of INT32 type. For non-array types count must be exactly 1.

+
Parameters:
+ + + + + +
tdTag data container
tagRpm tag to construct
dataPointer to uint32_t (value or array)
countNumber of entries
+
+
+
Returns:
1 on success, 0 on error (eg wrong type)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtdFromUint64 (rpmtd td,
rpmTagVal tag,
uint64_t * data,
rpm_count_t count 
)
+
+
+ +

Construct tag container from uint64_t pointer.

+

Tag type is checked to be of INT64 type. For non-array types count must be exactly 1.

+
Parameters:
+ + + + + +
tdTag data container
tagRpm tag to construct
dataPointer to uint64_t (value or array)
countNumber of entries
+
+
+
Returns:
1 on success, 0 on error (eg wrong type)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtdFromUint8 (rpmtd td,
rpmTagVal tag,
uint8_t * data,
rpm_count_t count 
)
+
+
+ +

Construct tag container from uint8_t pointer.

+

Tag type is checked to be of compatible type (CHAR, INT8 or BIN). For non-array types (BIN is a special case of INT8 array) count must be exactly 1.

+
Parameters:
+ + + + + +
tdTag data container
tagRpm tag to construct
dataPointer to uint8_t (value or array)
countNumber of entries
+
+
+
Returns:
1 on success, 0 on error (eg wrong type)
+ +
+
+ +
+
+ + + + + + + + +
char* rpmtdGetChar (rpmtd td)
+
+
+ +

Return char data from tag container.

+

For scalar return type, just return pointer to the integer. On array types, return pointer to current iteration index. If the tag container is not for char type, NULL is returned.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Pointer to uint16_t, NULL on error
+ +
+
+ +
+
+ + + + + + + + +
int rpmtdGetIndex (rpmtd td)
+
+
+ +

Retrieve current iteration index of the container.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Iteration index (or -1 if not iterating)
+ +
+
+ +
+
+ + + + + + + + +
uint64_t rpmtdGetNumber (rpmtd td)
+
+
+ +

Return numeric value from tag container.

+

Returns the value of numeric container (RPM_NUMERIC_CLASS) from current iteration index as uint64_t regardless of its internal presentation (8/16/32/64-bit integer).

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Value of current iteration item as uint64_t, 0 for non-numeric types (error)
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmtdGetString (rpmtd td)
+
+
+ +

Return string data from tag container.

+

For string types, just return the string. On string array types, return the string from current iteration index. If the tag container is not for a string type, NULL is returned.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
String constant from container, NULL on error
+ +
+
+ +
+
+ + + + + + + + +
uint16_t* rpmtdGetUint16 (rpmtd td)
+
+
+ +

Return uint16_t data from tag container.

+

For scalar return type, just return pointer to the integer. On array types, return pointer to current iteration index. If the tag container is not for int16 type, NULL is returned.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Pointer to uint16_t, NULL on error
+ +
+
+ +
+
+ + + + + + + + +
uint32_t* rpmtdGetUint32 (rpmtd td)
+
+
+ +

Return uint32_t data from tag container.

+

For scalar return type, just return pointer to the integer. On array types, return pointer to current iteration index. If the tag container is not for int32 type, NULL is returned.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Pointer to uint32_t, NULL on error
+ +
+
+ +
+
+ + + + + + + + +
uint64_t* rpmtdGetUint64 (rpmtd td)
+
+
+ +

Return uint64_t data from tag container.

+

For scalar return type, just return pointer to the integer. On array types, return pointer to current iteration index. If the tag container is not for int64 type, NULL is returned.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Pointer to uint64_t, NULL on error
+ +
+
+ +
+
+ + + + + + + + +
int rpmtdInit (rpmtd td)
+
+
+ +

Initialize tag container for iteration.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + +
rpmtd rpmtdNew (void )
+
+
+ +

Create new tag data container.

+
Returns:
New, initialized tag data container.
+ +
+
+ +
+
+ + + + + + + + +
int rpmtdNext (rpmtd td)
+
+
+ +

Iterate over tag data container.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Tag data container iterator index, -1 on termination
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmtdNextString (rpmtd td)
+
+
+ +

Iterate over string / string array type tag data container.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Pointer to next value, NULL on termination or error
+ +
+
+ +
+
+ + + + + + + + +
uint32_t* rpmtdNextUint32 (rpmtd td)
+
+
+ +

Iterate over uint32_t type tag data container.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Pointer to next value, NULL on termination or error
+ +
+
+ +
+
+ + + + + + + + +
uint64_t* rpmtdNextUint64 (rpmtd td)
+
+
+ +

Iterate over uint64_t type tag data container.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Pointer to next value, NULL on termination or error
+ +
+
+ +
+
+ + + + + + + + +
void rpmtdReset (rpmtd td)
+
+
+ +

(Re-)initialize tag data container.

+

Contents will be zeroed out and iteration index reset.

+
Parameters:
+ + +
tdTag data container
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmtdSetIndex (rpmtd td,
int index 
)
+
+
+ +

Set iteration index of the container.

+

If new index is out of bounds for the container, -1 is returned and iteration index is left untouched.

+
Parameters:
+ + + +
tdTag data container
indexNew index
+
+
+
Returns:
New index, or -1 if index out of bounds
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmtdSetTag (rpmtd td,
rpmTagVal tag 
)
+
+
+ +

Set container tag and type.

+

For empty container, any valid tag can be set. If the container has data, changing is only permitted to tag of same type.

+
Parameters:
+ + + +
tdTag data container
tagNew tag
+
+
+
Returns:
1 on success, 0 on error
+ +
+
+ +
+
+ + + + + + + + +
rpmTagVal rpmtdTag (rpmtd td)
+
+
+ +

Retrieve tag of the container.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Rpm tag.
+ +
+
+ +
+
+ + + + + + + + +
rpmTagType rpmtdType (rpmtd td)
+
+
+ +

Retrieve type of the container.

+
Parameters:
+ + +
tdTag data container
+
+
+
Returns:
Rpm tag type.
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmte.html b/doc/librpm/html/group__rpmte.html new file mode 100644 index 0000000..8ca08f9 --- /dev/null +++ b/doc/librpm/html/group__rpmte.html @@ -0,0 +1,1189 @@ + + + + +rpm: Transaction Element API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Transaction Element API.
+
+
+
+Collaboration diagram for Transaction Element API.:
+
+
+ + +
+
+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmte.h
 

Structures used for an "rpmte" transaction element.

+

+Typedefs

typedef enum rpmElementType_e rpmElementType
 Transaction element type.

+Enumerations

enum  rpmElementType_e { TR_ADDED = (1 << 0), +TR_REMOVED = (1 << 1) + }
 Transaction element type. More...

+Functions

Header rpmteHeader (rpmte te)
 Retrieve header from transaction element.
Header rpmteSetHeader (rpmte te, Header h)
 Save header into transaction element.
rpmElementType rpmteType (rpmte te)
 Retrieve type of transaction element.
const char * rpmteN (rpmte te)
 Retrieve name string of transaction element.
const char * rpmteE (rpmte te)
 Retrieve epoch string of transaction element.
const char * rpmteV (rpmte te)
 Retrieve version string of transaction element.
const char * rpmteR (rpmte te)
 Retrieve release string of transaction element.
const char * rpmteA (rpmte te)
 Retrieve arch string of transaction element.
const char * rpmteO (rpmte te)
 Retrieve os string of transaction element.
int rpmteIsSource (rpmte te)
 Retrieve isSource attribute of transaction element.
rpm_color_t rpmteColor (rpmte te)
 Retrieve color bits of transaction element.
rpm_color_t rpmteSetColor (rpmte te, rpm_color_t color)
 Set color bits of transaction element.
unsigned int rpmteDBInstance (rpmte te)
 Retrieve last instance installed to the database.
void rpmteSetDBInstance (rpmte te, unsigned int instance)
 Set last instance installed to the database.
rpm_loff_t rpmtePkgFileSize (rpmte te)
 Retrieve size in bytes of package file.
rpmte rpmteParent (rpmte te)
 Retrieve parent transaction element.
rpmte rpmteSetParent (rpmte te, rpmte pte)
 Set parent transaction element.
rpmps rpmteProblems (rpmte te)
 Return problem set info of transaction element.
void rpmteCleanProblems (rpmte te)
 Destroy problem set info of transaction element.
void rpmteCleanDS (rpmte te)
 Destroy dependency set info of transaction element.
void rpmteSetDependsOn (rpmte te, rpmte depends)
 Set dependent element of TR_REMOVED transaction element.
rpmte rpmteDependsOn (rpmte te)
 Retrieve dependent element of TR_REMOVED transaction element.
int rpmteDBOffset (rpmte te)
 Retrieve rpmdb instance of TR_REMOVED transaction element.
const char * rpmteEVR (rpmte te)
 Retrieve [epoch:]version-release string from transaction element.
const char * rpmteNEVR (rpmte te)
 Retrieve name-[epoch:]version-release string from transaction element.
const char * rpmteNEVRA (rpmte te)
 Retrieve name-[epoch:]version-release.arch string from transaction element.
fnpyKey rpmteKey (rpmte te)
 Retrieve key from transaction element.
int rpmteFailed (rpmte te)
 Return failure status of transaction element.
rpmds rpmteDS (rpmte te, rpmTagVal tag)
 Retrieve dependency tag set from transaction element.
rpmfi rpmteFI (rpmte te)
 Retrieve file info tag set from transaction element.
ARGV_const_t rpmteCollections (rpmte te)
 Retrieve list of collections.
int rpmteHasCollection (rpmte te, const char *collname)
 Determine a transaction element is part of a collection.
rpmtsi rpmtsiFree (rpmtsi tsi)
 Destroy transaction element iterator.
rpmtsi rpmtsiInit (rpmts ts)
 Create transaction element iterator.
rpmte rpmtsiNext (rpmtsi tsi, rpmElementTypes types)
 Return next transaction element of type.
+

Typedef Documentation

+ +
+
+ + + + +
typedef enum rpmElementType_e rpmElementType
+
+
+ +

Transaction element type.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmElementType_e
+
+
+ +

Transaction element type.

+
Enumerator:
+ + +
TR_ADDED  +

Package will be installed.

+
TR_REMOVED  +

Package will be removed.

+
+
+
+ +

Definition at line 19 of file rpmte.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
const char* rpmteA (rpmte te)
+
+
+ +

Retrieve arch string of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
arch string
+ +
+
+ +
+
+ + + + + + + + +
void rpmteCleanDS (rpmte te)
+
+
+ +

Destroy dependency set info of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+ +
+
+ +
+
+ + + + + + + + +
void rpmteCleanProblems (rpmte te)
+
+
+ +

Destroy problem set info of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+ +
+
+ +
+
+ + + + + + + + +
ARGV_const_t rpmteCollections (rpmte te)
+
+
+ +

Retrieve list of collections.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
list of collections
+ +
+
+ +
+
+ + + + + + + + +
rpm_color_t rpmteColor (rpmte te)
+
+
+ +

Retrieve color bits of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
color bits
+ +
+
+ +
+
+ + + + + + + + +
unsigned int rpmteDBInstance (rpmte te)
+
+
+ +

Retrieve last instance installed to the database.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
last install instance.
+ +
+
+ +
+
+ + + + + + + + +
int rpmteDBOffset (rpmte te)
+
+
+ +

Retrieve rpmdb instance of TR_REMOVED transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
rpmdb instance
+ +
+
+ +
+
+ + + + + + + + +
rpmte rpmteDependsOn (rpmte te)
+
+
+ +

Retrieve dependent element of TR_REMOVED transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
dependent transaction element
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmds rpmteDS (rpmte te,
rpmTagVal tag 
)
+
+
+ +

Retrieve dependency tag set from transaction element.

+
Parameters:
+ + + +
tetransaction element
tagdependency tag
+
+
+
Returns:
dependency tag set
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmteE (rpmte te)
+
+
+ +

Retrieve epoch string of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
epoch string
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmteEVR (rpmte te)
+
+
+ +

Retrieve [epoch:]version-release string from transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
[epoch:]version-release string
+ +
+
+ +
+
+ + + + + + + + +
int rpmteFailed (rpmte te)
+
+
+ +

Return failure status of transaction element.

+

If the element itself failed, this is 1, larger count means one of it's parents failed.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
number of failures for this transaction element
+ +
+
+ +
+
+ + + + + + + + +
rpmfi rpmteFI (rpmte te)
+
+
+ +

Retrieve file info tag set from transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
file info tag set
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmteHasCollection (rpmte te,
const char * collname 
)
+
+
+ +

Determine a transaction element is part of a collection.

+
Parameters:
+ + + +
tetransaction element
collnamecollection name
+
+
+
Returns:
1 if collname is part of a collection, 0 if not
+ +
+
+ +
+
+ + + + + + + + +
Header rpmteHeader (rpmte te)
+
+
+ +

Retrieve header from transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
header (new reference)
+ +
+
+ +
+
+ + + + + + + + +
int rpmteIsSource (rpmte te)
+
+
+ +

Retrieve isSource attribute of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
isSource attribute
+ +
+
+ +
+
+ + + + + + + + +
fnpyKey rpmteKey (rpmte te)
+
+
+ +

Retrieve key from transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
key
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmteN (rpmte te)
+
+
+ +

Retrieve name string of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
name string
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmteNEVR (rpmte te)
+
+
+ +

Retrieve name-[epoch:]version-release string from transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
name-[epoch:]version-release string
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmteNEVRA (rpmte te)
+
+
+ +

Retrieve name-[epoch:]version-release.arch string from transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
name-[epoch:]version-release.arch string
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmteO (rpmte te)
+
+
+ +

Retrieve os string of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
os string
+ +
+
+ +
+
+ + + + + + + + +
rpmte rpmteParent (rpmte te)
+
+
+ +

Retrieve parent transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
parent transaction element
+ +
+
+ +
+
+ + + + + + + + +
rpm_loff_t rpmtePkgFileSize (rpmte te)
+
+
+ +

Retrieve size in bytes of package file.

+
Todo:
Signature header is estimated at 256b.
+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
size in bytes of package file.
+ +
+
+ +
+
+ + + + + + + + +
rpmps rpmteProblems (rpmte te)
+
+
+ +

Return problem set info of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
problem set (or NULL if none)
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmteR (rpmte te)
+
+
+ +

Retrieve release string of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
release string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpm_color_t rpmteSetColor (rpmte te,
rpm_color_t color 
)
+
+
+ +

Set color bits of transaction element.

+
Parameters:
+ + + +
tetransaction element
colornew color bits
+
+
+
Returns:
previous color bits
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmteSetDBInstance (rpmte te,
unsigned int instance 
)
+
+
+ +

Set last instance installed to the database.

+
Parameters:
+ + + +
tetransaction element
instanceDatabase instance of last install element.
+
+
+
Returns:
last install instance.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmteSetDependsOn (rpmte te,
rpmte depends 
)
+
+
+ +

Set dependent element of TR_REMOVED transaction element.

+
Parameters:
+ + + +
tetransaction element
dependsdependent transaction element
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Header rpmteSetHeader (rpmte te,
Header h 
)
+
+
+ +

Save header into transaction element.

+
Parameters:
+ + + +
tetransaction element
hheader
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmte rpmteSetParent (rpmte te,
rpmte pte 
)
+
+
+ +

Set parent transaction element.

+
Parameters:
+ + + +
tetransaction element
ptenew parent transaction element
+
+
+
Returns:
previous parent transaction element
+ +
+
+ +
+
+ + + + + + + + +
rpmElementType rpmteType (rpmte te)
+
+
+ +

Retrieve type of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
type
+ +
+
+ +
+
+ + + + + + + + +
const char* rpmteV (rpmte te)
+
+
+ +

Retrieve version string of transaction element.

+
Parameters:
+ + +
tetransaction element
+
+
+
Returns:
version string
+ +
+
+ +
+
+ + + + + + + + +
rpmtsi rpmtsiFree (rpmtsi tsi)
+
+
+ +

Destroy transaction element iterator.

+
Parameters:
+ + +
tsitransaction element iterator
+
+
+
Returns:
NULL always
+ +
+
+ +
+
+ + + + + + + + +
rpmtsi rpmtsiInit (rpmts ts)
+
+
+ +

Create transaction element iterator.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
transaction element iterator
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmte rpmtsiNext (rpmtsi tsi,
rpmElementTypes types 
)
+
+
+ +

Return next transaction element of type.

+
Parameters:
+ + + +
tsitransaction element iterator
typestransaction element type selector (0 for any)
+
+
+
Returns:
next transaction element of type, NULL on termination
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmte.map b/doc/librpm/html/group__rpmte.map new file mode 100644 index 0000000..b47b6cd --- /dev/null +++ b/doc/librpm/html/group__rpmte.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/librpm/html/group__rpmte.md5 b/doc/librpm/html/group__rpmte.md5 new file mode 100644 index 0000000..c514d87 --- /dev/null +++ b/doc/librpm/html/group__rpmte.md5 @@ -0,0 +1 @@ +f319a7b941e183968b1b58da0fe1bff6 \ No newline at end of file diff --git a/doc/librpm/html/group__rpmte.png b/doc/librpm/html/group__rpmte.png new file mode 100644 index 0000000..f026110 Binary files /dev/null and b/doc/librpm/html/group__rpmte.png differ diff --git a/doc/librpm/html/group__rpmts.html b/doc/librpm/html/group__rpmts.html new file mode 100644 index 0000000..815f030 --- /dev/null +++ b/doc/librpm/html/group__rpmts.html @@ -0,0 +1,2008 @@ + + + + +rpm: Transaction Set API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Transaction Set API.
+
+
+
+Collaboration diagram for Transaction Set API.:
+
+
+ + +
+
+ + + + +

+

+ + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmte.h
 

Structures used for an "rpmte" transaction element.

+
file  rpmts.h
 

Structures and prototypes used for an "rpmts" transaction set.

+

+Typedefs

typedef enum rpmtsOpX_e rpmtsOpX
 Indices for timestamps.

+Enumerations

enum  rpmtransFlags_e {
+  RPMTRANS_FLAG_NONE = 0, +RPMTRANS_FLAG_TEST = (1 << 0), +RPMTRANS_FLAG_BUILD_PROBS = (1 << 1), +RPMTRANS_FLAG_NOSCRIPTS = (1 << 2), +
+  RPMTRANS_FLAG_JUSTDB = (1 << 3), +RPMTRANS_FLAG_NOTRIGGERS = (1 << 4), +RPMTRANS_FLAG_NODOCS = (1 << 5), +RPMTRANS_FLAG_ALLFILES = (1 << 6), +
+  RPMTRANS_FLAG_NOCONTEXTS = (1 << 8), +RPMTRANS_FLAG_NOTRIGGERPREIN = (1 << 16), +RPMTRANS_FLAG_NOPRE = (1 << 17), +RPMTRANS_FLAG_NOPOST = (1 << 18), +
+  RPMTRANS_FLAG_NOTRIGGERIN = (1 << 19), +RPMTRANS_FLAG_NOTRIGGERUN = (1 << 20), +RPMTRANS_FLAG_NOPREUN = (1 << 21), +RPMTRANS_FLAG_NOPOSTUN = (1 << 22), +
+  RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23), +RPMTRANS_FLAG_NOCOLLECTIONS = (1 << 26), +RPMTRANS_FLAG_NOMD5 = (1 << 27), +RPMTRANS_FLAG_NOFILEDIGEST = (1 << 27), +
+  RPMTRANS_FLAG_NOCONFIGS = (1 << 30), +RPMTRANS_FLAG_DEPLOOPS = (1 << 31) +
+ }
 Bit(s) to control rpmtsRun() operation. More...
enum  rpmVSFlags_e {
+  RPMVSF_DEFAULT = 0, +RPMVSF_NOHDRCHK = (1 << 0), +RPMVSF_NEEDPAYLOAD = (1 << 1), +RPMVSF_NOSHA1HEADER = (1 << 8), +
+  RPMVSF_NOMD5HEADER = (1 << 9), +RPMVSF_NODSAHEADER = (1 << 10), +RPMVSF_NORSAHEADER = (1 << 11), +RPMVSF_NOSHA1 = (1 << 16), +
+  RPMVSF_NOMD5 = (1 << 17), +RPMVSF_NODSA = (1 << 18), +RPMVSF_NORSA = (1 << 19) +
+ }
 Bit(s) to control digest and signature verification. More...
enum  rpmtsOpX_e {
+  RPMTS_OP_TOTAL = 0, +RPMTS_OP_CHECK = 1, +RPMTS_OP_ORDER = 2, +RPMTS_OP_FINGERPRINT = 3, +
+  RPMTS_OP_INSTALL = 5, +RPMTS_OP_ERASE = 6, +RPMTS_OP_SCRIPTLETS = 7, +RPMTS_OP_COMPRESS = 8, +
+  RPMTS_OP_UNCOMPRESS = 9, +RPMTS_OP_DIGEST = 10, +RPMTS_OP_SIGNATURE = 11, +RPMTS_OP_DBADD = 12, +
+  RPMTS_OP_DBREMOVE = 13, +RPMTS_OP_DBGET = 14, +RPMTS_OP_DBPUT = 15, +RPMTS_OP_DBDEL = 16, +
+  RPMTS_OP_MAX = 17 +
+ }
 Indices for timestamps. More...

+Functions

int rpmtsCheck (rpmts ts)
 Perform dependency resolution on the transaction set.
int rpmtsOrder (rpmts ts)
 Determine package order in a transaction set according to dependencies.
int rpmtsRun (rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
 Process all package elements in a transaction set.
rpmts rpmtsLink (rpmts ts)
 Reference a transaction set instance.
int rpmtsCloseDB (rpmts ts)
 Close the database used by the transaction.
int rpmtsOpenDB (rpmts ts, int dbmode)
 Open the database used by the transaction.
int rpmtsInitDB (rpmts ts, int dbmode)
 Initialize the database used by the transaction.
int rpmtsGetDBMode (rpmts ts)
 Return the transaction database mode.
int rpmtsSetDBMode (rpmts ts, int dbmode)
 Set the transaction database mode.
int rpmtsRebuildDB (rpmts ts)
 Rebuild the database used by the transaction.
int rpmtsVerifyDB (rpmts ts)
 Verify the database used by the transaction.
rpmdbMatchIterator rpmtsInitIterator (const rpmts ts, rpmDbiTagVal rpmtag, const void *keyp, size_t keylen)
 Return transaction database iterator.
rpmRC rpmtsImportPubkey (rpmts ts, const unsigned char *pkt, size_t pktlen)
 Import public key packet(s).
rpmKeyring rpmtsGetKeyring (rpmts ts, int autoload)
 Retrieve handle for keyring used for this transaction set.
int rpmtsSetKeyring (rpmts ts, rpmKeyring keyring)
 Set keyring to use for this transaction set.
int rpmtsSetSolveCallback (rpmts ts, int(*solve)(rpmts ts, rpmds ds, const void *data), const void *solveData)
 Set dependency solver callback.
rpmps rpmtsProblems (rpmts ts)
 Return current transaction set problems.
void rpmtsCleanProblems (rpmts ts)
 Clean current transaction problem set.
void rpmtsClean (rpmts ts)
 Free memory needed only for dependency checks and ordering.
void rpmtsEmpty (rpmts ts)
 Re-create an empty transaction set.
rpmts rpmtsFree (rpmts ts)
 Destroy transaction set, closing the database as well.
rpmVSFlags rpmtsVSFlags (rpmts ts)
 Get verify signatures flag(s).
rpmVSFlags rpmtsSetVSFlags (rpmts ts, rpmVSFlags vsflags)
 Set verify signatures flag(s).
const char * rpmtsRootDir (rpmts ts)
 Get transaction rootDir, i.e.
int rpmtsSetRootDir (rpmts ts, const char *rootDir)
 Set transaction rootDir, i.e.
FD_t rpmtsScriptFd (rpmts ts)
 Get transaction script file handle, i.e.
void rpmtsSetScriptFd (rpmts ts, FD_t scriptFd)
 Set transaction script file handle, i.e.
rpm_tid_t rpmtsGetTid (rpmts ts)
 Get transaction id, i.e.
rpm_tid_t rpmtsSetTid (rpmts ts, rpm_tid_t tid)
 Set transaction id, i.e.
rpmdb rpmtsGetRdb (rpmts ts)
 Get transaction set database handle.
void * rpmtsNotify (rpmts ts, rpmte te, rpmCallbackType what, rpm_loff_t amount, rpm_loff_t total)
 Perform transaction progress notify callback.
int rpmtsNElements (rpmts ts)
 Return number of (ordered) transaction set elements.
rpmte rpmtsElement (rpmts ts, int ix)
 Return (ordered) transaction set element.
rpmprobFilterFlags rpmtsFilterFlags (rpmts ts)
 Get problem ignore bit mask, i.e.
rpmtransFlags rpmtsFlags (rpmts ts)
 Get transaction flags, i.e.
rpmtransFlags rpmtsSetFlags (rpmts ts, rpmtransFlags transFlags)
 Set transaction flags, i.e.
rpm_color_t rpmtsColor (rpmts ts)
 Retrieve color bits of transaction set.
rpm_color_t rpmtsPrefColor (rpmts ts)
 Retrieve prefered file color.
rpm_color_t rpmtsSetColor (rpmts ts, rpm_color_t color)
 Set color bits of transaction set.
rpm_color_t rpmtsSetPrefColor (rpmts ts, rpm_color_t color)
 Set prefered file color.
rpmop rpmtsOp (rpmts ts, rpmtsOpX opx)
 Retrieve operation timestamp from a transaction set.
rpmPlugins rpmtsPlugins (rpmts ts)
 Get the plugins associated with a transaction set.
int rpmtsSetNotifyCallback (rpmts ts, rpmCallbackFunction notify, rpmCallbackData notifyData)
 Set transaction notify callback function and argument.
rpmts rpmtsCreate (void)
 Create an empty transaction set.
int rpmtsAddInstallElement (rpmts ts, Header h, const fnpyKey key, int upgrade, rpmRelocation *relocs)
 Add package to be installed to transaction set.
int rpmtsAddEraseElement (rpmts ts, Header h, int dboffset)
 Add package to be erased to transaction set.
+

Typedef Documentation

+ +
+
+ + + + +
typedef enum rpmtsOpX_e rpmtsOpX
+
+
+ +

Indices for timestamps.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmtransFlags_e
+
+
+ +

Bit(s) to control rpmtsRun() operation.

+
Enumerator:
+ + + + + + + + + + + + + + + + + + + + + + +
RPMTRANS_FLAG_NONE  +
RPMTRANS_FLAG_TEST  +

from --test

+
RPMTRANS_FLAG_BUILD_PROBS  +

don't process payload

+
RPMTRANS_FLAG_NOSCRIPTS  +

from --noscripts

+
RPMTRANS_FLAG_JUSTDB  +

from --justdb

+
RPMTRANS_FLAG_NOTRIGGERS  +

from --notriggers

+
RPMTRANS_FLAG_NODOCS  +

from --excludedocs

+
RPMTRANS_FLAG_ALLFILES  +

from --allfiles

+
RPMTRANS_FLAG_NOCONTEXTS  +

from --nocontexts

+
RPMTRANS_FLAG_NOTRIGGERPREIN  +

from --notriggerprein

+
RPMTRANS_FLAG_NOPRE  +

from --nopre

+
RPMTRANS_FLAG_NOPOST  +

from --nopost

+
RPMTRANS_FLAG_NOTRIGGERIN  +

from --notriggerin

+
RPMTRANS_FLAG_NOTRIGGERUN  +

from --notriggerun

+
RPMTRANS_FLAG_NOPREUN  +

from --nopreun

+
RPMTRANS_FLAG_NOPOSTUN  +

from --nopostun

+
RPMTRANS_FLAG_NOTRIGGERPOSTUN  +

from --notriggerpostun

+
RPMTRANS_FLAG_NOCOLLECTIONS  +

from --nocollections

+
RPMTRANS_FLAG_NOMD5  +

from --nomd5

+
RPMTRANS_FLAG_NOFILEDIGEST  +

from --nofiledigest (alias to --nomd5)

+
RPMTRANS_FLAG_NOCONFIGS  +

from --noconfigs

+
RPMTRANS_FLAG_DEPLOOPS  +

from --deploops

+
+
+
+ +

Definition at line 28 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
enum rpmtsOpX_e
+
+
+ +

Indices for timestamps.

+
Enumerator:
+ + + + + + + + + + + + + + + + + +
RPMTS_OP_TOTAL  +
RPMTS_OP_CHECK  +
RPMTS_OP_ORDER  +
RPMTS_OP_FINGERPRINT  +
RPMTS_OP_INSTALL  +
RPMTS_OP_ERASE  +
RPMTS_OP_SCRIPTLETS  +
RPMTS_OP_COMPRESS  +
RPMTS_OP_UNCOMPRESS  +
RPMTS_OP_DIGEST  +
RPMTS_OP_SIGNATURE  +
RPMTS_OP_DBADD  +
RPMTS_OP_DBREMOVE  +
RPMTS_OP_DBGET  +
RPMTS_OP_DBPUT  +
RPMTS_OP_DBDEL  +
RPMTS_OP_MAX  +
+
+
+ +

Definition at line 136 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
enum rpmVSFlags_e
+
+
+ +

Bit(s) to control digest and signature verification.

+
Enumerator:
+ + + + + + + + + + + +
RPMVSF_DEFAULT  +
RPMVSF_NOHDRCHK  +
RPMVSF_NEEDPAYLOAD  +
RPMVSF_NOSHA1HEADER  +
RPMVSF_NOMD5HEADER  +
RPMVSF_NODSAHEADER  +
RPMVSF_NORSAHEADER  +
RPMVSF_NOSHA1  +
RPMVSF_NOMD5  +
RPMVSF_NODSA  +
RPMVSF_NORSA  +
+
+
+ +

Definition at line 90 of file rpmts.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtsAddEraseElement (rpmts ts,
Header h,
int dboffset 
)
+
+
+ +

Add package to be erased to transaction set.

+
Parameters:
+ + + + +
tstransaction set
hheader
dboffsetununsed
+
+
+
Returns:
0 on success, 1 on error (not installed)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtsAddInstallElement (rpmts ts,
Header h,
const fnpyKey key,
int upgrade,
rpmRelocationrelocs 
)
+
+
+ +

Add package to be installed to transaction set.

+

The transaction set is checked for duplicate package names. If found, the package with the "newest" EVR will be replaced.

+
Parameters:
+ + + + + + +
tstransaction set
hheader
keypackage retrieval key (e.g. file name)
upgradeis package being upgraded?
relocspackage file relocations
+
+
+
Returns:
0 on success, 1 on I/O error, 2 needs capabilities
+ +
+
+ +
+
+ + + + + + + + +
int rpmtsCheck (rpmts ts)
+
+
+ +

Perform dependency resolution on the transaction set.

+

Any problems found by rpmtsCheck() can be examined by retrieving the problem set with rpmtsProblems(), success here only means that the resolution was successfully attempted for all packages in the set.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + +
void rpmtsClean (rpmts ts)
+
+
+ +

Free memory needed only for dependency checks and ordering.

+
Parameters:
+ + +
tstransaction set
+
+
+ +
+
+ +
+
+ + + + + + + + +
void rpmtsCleanProblems (rpmts ts)
+
+
+ +

Clean current transaction problem set.

+
Parameters:
+ + +
tstransaction set
+
+
+ +
+
+ +
+
+ + + + + + + + +
int rpmtsCloseDB (rpmts ts)
+
+
+ +

Close the database used by the transaction.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + +
rpm_color_t rpmtsColor (rpmts ts)
+
+
+ +

Retrieve color bits of transaction set.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
color bits
+ +
+
+ +
+
+ + + + + + + + +
rpmts rpmtsCreate (void )
+
+
+ +

Create an empty transaction set.

+
Returns:
new transaction set
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmte rpmtsElement (rpmts ts,
int ix 
)
+
+
+ +

Return (ordered) transaction set element.

+
Parameters:
+ + + +
tstransaction set
ixtransaction element index
+
+
+
Returns:
transaction element (or NULL)
+ +
+
+ +
+
+ + + + + + + + +
void rpmtsEmpty (rpmts ts)
+
+
+ +

Re-create an empty transaction set.

+
Parameters:
+ + +
tstransaction set
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmprobFilterFlags rpmtsFilterFlags (rpmts ts)
+
+
+ +

Get problem ignore bit mask, i.e.

+

bits to filter encountered problems.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
ignore bit mask
+ +
+
+ +
+
+ + + + + + + + +
rpmtransFlags rpmtsFlags (rpmts ts)
+
+
+ +

Get transaction flags, i.e.

+

bits that control rpmtsRun().

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
transaction flags
+ +
+
+ +
+
+ + + + + + + + +
rpmts rpmtsFree (rpmts ts)
+
+
+ +

Destroy transaction set, closing the database as well.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
NULL always
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
int rpmtsGetDBMode (rpmts ts)
+
+
+ +

Return the transaction database mode.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
O_RDONLY, O_RDWR or -1 (lazy opens disabled)
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmKeyring rpmtsGetKeyring (rpmts ts,
int autoload 
)
+
+
+ +

Retrieve handle for keyring used for this transaction set.

+
Parameters:
+ + + +
tstransaction set
autoloadload default keyring if keyring is not set
+
+
+
Returns:
keyring handle (or NULL)
+ +
+
+ +
+
+ + + + + + + + +
rpmdb rpmtsGetRdb (rpmts ts)
+
+
+ +

Get transaction set database handle.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
transaction database handle
+ +
+
+ +
+
+ + + + + + + + +
rpm_tid_t rpmtsGetTid (rpmts ts)
+
+
+ +

Get transaction id, i.e.

+

transaction time stamp.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
transaction id
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rpmRC rpmtsImportPubkey (rpmts ts,
const unsigned char * pkt,
size_t pktlen 
)
+
+
+ +

Import public key packet(s).

+
Todo:
Implicit --update policy for gpg-pubkey headers.
+
Parameters:
+ + + + +
tstransaction set
pktpgp pubkey packet(s)
pktlenpgp pubkey length
+
+
+
Returns:
RPMRC_OK/RPMRC_FAIL
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmtsInitDB (rpmts ts,
int dbmode 
)
+
+
+ +

Initialize the database used by the transaction.

+
Deprecated:
An explicit rpmdbInit() is almost never needed.
+
Parameters:
+ + + +
tstransaction set
dbmodeO_RDONLY or O_RDWR
+
+
+
Returns:
0 on success
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rpmdbMatchIterator rpmtsInitIterator (const rpmts ts,
rpmDbiTagVal rpmtag,
const void * keyp,
size_t keylen 
)
+
+
+ +

Return transaction database iterator.

+
Parameters:
+ + + + + +
tstransaction set
rpmtagdatabase index tag
keypkey data (NULL for sequential access)
keylenkey data length (0 will use strlen(keyp))
+
+
+
Returns:
NULL on failure
+ +
+
+ +
+
+ + + + + + + + +
rpmts rpmtsLink (rpmts ts)
+
+
+ +

Reference a transaction set instance.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
new transaction set reference
+ +
+
+ +
+
+ + + + + + + + +
int rpmtsNElements (rpmts ts)
+
+
+ +

Return number of (ordered) transaction set elements.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
no. of transaction set elements
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void* rpmtsNotify (rpmts ts,
rpmte te,
rpmCallbackType what,
rpm_loff_t amount,
rpm_loff_t total 
)
+
+
+ +

Perform transaction progress notify callback.

+
Parameters:
+ + + + + + +
tstransaction set
tecurrent transaction element
whattype of call back
amountcurrent value
totalfinal value
+
+
+
Returns:
callback dependent pointer
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmop rpmtsOp (rpmts ts,
rpmtsOpX opx 
)
+
+
+ +

Retrieve operation timestamp from a transaction set.

+
Parameters:
+ + + +
tstransaction set
opxoperation timestamp index
+
+
+
Returns:
pointer to operation timestamp.
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmtsOpenDB (rpmts ts,
int dbmode 
)
+
+
+ +

Open the database used by the transaction.

+
Parameters:
+ + + +
tstransaction set
dbmodeO_RDONLY or O_RDWR
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + +
int rpmtsOrder (rpmts ts)
+
+
+ +

Determine package order in a transaction set according to dependencies.

+

Order packages, returning error if circular dependencies cannot be eliminated by removing Requires's from the loop(s). Only dependencies from added or removed packages are used to determine ordering using a topological sort (Knuth vol. 1, p. 262). Use rpmtsCheck() to verify that all dependencies can be resolved.

+

The final order ends up as installed packages followed by removed packages, with packages removed for upgrades immediately following the new package to be installed.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
no. of (added) packages that could not be ordered
+ +
+
+ +
+
+ + + + + + + + +
rpmPlugins rpmtsPlugins (rpmts ts)
+
+
+ +

Get the plugins associated with a transaction set.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
plugins
+ +
+
+ +
+
+ + + + + + + + +
rpm_color_t rpmtsPrefColor (rpmts ts)
+
+
+ +

Retrieve prefered file color.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
color bits
+ +
+
+ +
+
+ + + + + + + + +
rpmps rpmtsProblems (rpmts ts)
+
+
+ +

Return current transaction set problems.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
current problem set (or NULL if no problems)
+ +
+
+ +
+
+ + + + + + + + +
int rpmtsRebuildDB (rpmts ts)
+
+
+ +

Rebuild the database used by the transaction.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
0 on success
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
const char* rpmtsRootDir (rpmts ts)
+
+
+ +

Get transaction rootDir, i.e.

+

path to chroot(2).

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
transaction rootDir
+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtsRun (rpmts ts,
rpmps okProbs,
rpmprobFilterFlags ignoreSet 
)
+
+
+ +

Process all package elements in a transaction set.

+

Before calling rpmtsRun be sure to have:

+ +

Additionally, though not required you may want to:

+ +
Parameters:
+ + + + +
tstransaction set
okProbsunused
ignoreSetbits to filter problem types
+
+
+
Returns:
0 on success, -1 on error, >0 with newProbs set
+ +
+
+ +
+
+ + + + + + + + +
FD_t rpmtsScriptFd (rpmts ts)
+
+
+ +

Get transaction script file handle, i.e.

+

stdout/stderr on scriptlet execution

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
transaction script file handle
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpm_color_t rpmtsSetColor (rpmts ts,
rpm_color_t color 
)
+
+
+ +

Set color bits of transaction set.

+
Parameters:
+ + + +
tstransaction set
colornew color bits
+
+
+
Returns:
previous color bits
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmtsSetDBMode (rpmts ts,
int dbmode 
)
+
+
+ +

Set the transaction database mode.

+

Only permitted when when backing database hasn't been opened yet (ie rpmtsGetRdb(ts) == NULL)

+
Parameters:
+ + + +
tstransaction set
dbmodeO_RDONLY, O_RDWR or -1 (disable lazy opens)
+
+
+
Returns:
0 on success, 1 on error
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmtransFlags rpmtsSetFlags (rpmts ts,
rpmtransFlags transFlags 
)
+
+
+ +

Set transaction flags, i.e.

+

bits that control rpmtsRun().

+
Parameters:
+ + + +
tstransaction set
transFlagsnew transaction flags
+
+
+
Returns:
previous transaction flags
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmtsSetKeyring (rpmts ts,
rpmKeyring keyring 
)
+
+
+ +

Set keyring to use for this transaction set.

+

Keyring can be only changed while the underlying rpm database is not yet open.

+
Parameters:
+ + + +
tstransaction set
keyringkeyring handle (NULL to free current keyring)
+
+
+
Returns:
0 on success, -1 on error
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtsSetNotifyCallback (rpmts ts,
rpmCallbackFunction notify,
rpmCallbackData notifyData 
)
+
+
+ +

Set transaction notify callback function and argument.

+
Warning:
This call must be made before rpmtsRun() for install/upgrade/freshen to function correctly.
+
Parameters:
+ + + + +
tstransaction set
notifyprogress callback
notifyDataprogress callback private data
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpm_color_t rpmtsSetPrefColor (rpmts ts,
rpm_color_t color 
)
+
+
+ +

Set prefered file color.

+
Parameters:
+ + + +
tstransaction set
colornew color bits
+
+
+
Returns:
previous color bits
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmtsSetRootDir (rpmts ts,
const char * rootDir 
)
+
+
+ +

Set transaction rootDir, i.e.

+

path to chroot(2).

+
Parameters:
+ + + +
tstransaction set
rootDirnew transaction rootDir (or NULL)
+
+
+
Returns:
0 on success, -1 on error (invalid rootDir)
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void rpmtsSetScriptFd (rpmts ts,
FD_t scriptFd 
)
+
+
+ +

Set transaction script file handle, i.e.

+

stdout/stderr on scriptlet execution

+
Parameters:
+ + + +
tstransaction set
scriptFdnew script file handle (or NULL)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmtsSetSolveCallback (rpmts ts,
int(*)(rpmts ts, rpmds ds, const void *data) solve,
const void * solveData 
)
+
+
+ +

Set dependency solver callback.

+
Parameters:
+ + + + +
tstransaction set
(*solve)dependency solver callback
solveDatadependency solver callback data (opaque)
+
+
+
Returns:
0 on success
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpm_tid_t rpmtsSetTid (rpmts ts,
rpm_tid_t tid 
)
+
+
+ +

Set transaction id, i.e.

+

transaction time stamp.

+
Parameters:
+ + + +
tstransaction set
tidnew transaction id
+
+
+
Returns:
previous transaction id
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmVSFlags rpmtsSetVSFlags (rpmts ts,
rpmVSFlags vsflags 
)
+
+
+ +

Set verify signatures flag(s).

+
Parameters:
+ + + +
tstransaction set
vsflagsnew verify signatures flags
+
+
+
Returns:
previous value
+ +

Referenced by build(), and main().

+ +
+
+ +
+
+ + + + + + + + +
int rpmtsVerifyDB (rpmts ts)
+
+
+ +

Verify the database used by the transaction.

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
0 on success
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
rpmVSFlags rpmtsVSFlags (rpmts ts)
+
+
+ +

Get verify signatures flag(s).

+
Parameters:
+ + +
tstransaction set
+
+
+
Returns:
verify signatures flags
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmts.map b/doc/librpm/html/group__rpmts.map new file mode 100644 index 0000000..20d4ddc --- /dev/null +++ b/doc/librpm/html/group__rpmts.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/librpm/html/group__rpmts.md5 b/doc/librpm/html/group__rpmts.md5 new file mode 100644 index 0000000..d4f5761 --- /dev/null +++ b/doc/librpm/html/group__rpmts.md5 @@ -0,0 +1 @@ +adc8b1d1c1753ce8175fdadbb237c954 \ No newline at end of file diff --git a/doc/librpm/html/group__rpmts.png b/doc/librpm/html/group__rpmts.png new file mode 100644 index 0000000..1ca6f3e Binary files /dev/null and b/doc/librpm/html/group__rpmts.png differ diff --git a/doc/librpm/html/group__rpmtypes.html b/doc/librpm/html/group__rpmtypes.html new file mode 100644 index 0000000..724cf2e --- /dev/null +++ b/doc/librpm/html/group__rpmtypes.html @@ -0,0 +1,667 @@ + + + + +rpm: RPM data types. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
RPM data types.
+
+
+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  rpmtypes.h
 

Typedefs for RPM abstract data types.

+

+Typedefs

typedef struct _FD_s * FD_t
 RPM IO file descriptor type.
typedef enum rpmRC_e rpmRC
 Package read return codes.

+Enumerations

enum  rpmRC_e {
+  RPMRC_OK = 0, +RPMRC_NOTFOUND = 1, +RPMRC_FAIL = 2, +RPMRC_NOTTRUSTED = 3, +
+  RPMRC_NOKEY = 4 +
+ }
 Package read return codes. More...
typedef struct headerToken_s * Header
 RPM header and data retrieval types.
typedef struct headerIterator_s * HeaderIterator
typedef int32_t rpm_tag_t
typedef uint32_t rpm_tagtype_t
typedef uint32_t rpm_count_t
typedef rpm_tag_t rpmTagVal
typedef rpm_tag_t rpmDbiTagVal
typedef void * rpm_data_t
typedef const void * rpm_constdata_t
typedef struct rpmtd_srpmtd
typedef uint32_t rpm_color_t
typedef uint32_t rpm_flag_t
typedef uint32_t rpm_tid_t
typedef uint32_t rpmFlags
typedef uint32_t rpm_off_t
 In-header hardcoded sizes for various POSIXy types.
typedef uint64_t rpm_loff_t
typedef uint32_t rpm_time_t
typedef uint16_t rpm_mode_t
typedef uint16_t rpm_rdev_t
typedef uint32_t rpm_dev_t
typedef uint32_t rpm_ino_t
typedef struct rpmts_s * rpmts
 The main types involved in transaction manipulation.
typedef struct rpmte_s * rpmte
typedef struct rpmds_s * rpmds
typedef struct rpmfi_s * rpmfi
typedef struct rpmdb_s * rpmdb
typedef struct
+rpmdbMatchIterator_s * 
rpmdbMatchIterator
typedef struct rpmtsi_s * rpmtsi
typedef struct rpmps_s * rpmps
typedef struct
+rpmdbIndexIterator_s * 
rpmdbIndexIterator
typedef const void * fnpyKey
typedef void * rpmCallbackData
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct _FD_s* FD_t
+
+
+ +

RPM IO file descriptor type.

+ +

Definition at line 92 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef const void* fnpyKey
+
+
+ +

Definition at line 73 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct headerToken_s* Header
+
+
+ +

RPM header and data retrieval types.

+ +

Definition at line 24 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct headerIterator_s* HeaderIterator
+
+
+ +

Definition at line 25 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpm_color_t
+
+
+ +

Definition at line 38 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef const void* rpm_constdata_t
+
+
+ +

Definition at line 34 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpm_count_t
+
+
+ +

Definition at line 29 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef void* rpm_data_t
+
+
+ +

Definition at line 33 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpm_dev_t
+
+
+ +

Definition at line 55 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpm_flag_t
+
+
+ +

Definition at line 39 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpm_ino_t
+
+
+ +

Definition at line 56 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint64_t rpm_loff_t
+
+
+ +

Definition at line 51 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint16_t rpm_mode_t
+
+
+ +

Definition at line 53 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpm_off_t
+
+
+ +

In-header hardcoded sizes for various POSIXy types.

+ +

Definition at line 50 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint16_t rpm_rdev_t
+
+
+ +

Definition at line 54 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef int32_t rpm_tag_t
+
+
+ +

Definition at line 27 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpm_tagtype_t
+
+
+ +

Definition at line 28 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpm_tid_t
+
+
+ +

Definition at line 40 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpm_time_t
+
+
+ +

Definition at line 52 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef void* rpmCallbackData
+
+
+ +

Definition at line 74 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmdb_s* rpmdb
+
+
+ +

Definition at line 67 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmdbIndexIterator_s* rpmdbIndexIterator
+
+
+ +

Definition at line 72 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef rpm_tag_t rpmDbiTagVal
+
+
+ +

Definition at line 31 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmdbMatchIterator_s* rpmdbMatchIterator
+
+
+ +

Definition at line 68 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmds_s* rpmds
+
+
+ +

Definition at line 65 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmfi_s* rpmfi
+
+
+ +

Definition at line 66 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef uint32_t rpmFlags
+
+
+ +

Definition at line 42 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmps_s* rpmps
+
+
+ +

Definition at line 70 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef enum rpmRC_e rpmRC
+
+
+ +

Package read return codes.

+ +
+
+ +
+
+ + + + +
typedef rpm_tag_t rpmTagVal
+
+
+ +

Definition at line 30 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmtd_s* rpmtd
+
+
+ +

Definition at line 36 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmte_s* rpmte
+
+
+ +

Definition at line 64 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmts_s* rpmts
+
+
+ +

The main types involved in transaction manipulation.

+ +

Definition at line 63 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmtsi_s* rpmtsi
+
+
+ +

Definition at line 69 of file rpmtypes.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmRC_e
+
+
+ +

Package read return codes.

+
Enumerator:
+ + + + + +
RPMRC_OK  +

Generic success code

+
RPMRC_NOTFOUND  +

Generic not found code.

+
RPMRC_FAIL  +

Generic failure code.

+
RPMRC_NOTTRUSTED  +

Signature is OK, but key is not trusted.

+
RPMRC_NOKEY  +

Public key is unavailable.

+
+
+
+ +

Definition at line 97 of file rpmtypes.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/group__rpmurl.html b/doc/librpm/html/group__rpmurl.html new file mode 100644 index 0000000..f6ca706 --- /dev/null +++ b/doc/librpm/html/group__rpmurl.html @@ -0,0 +1,240 @@ + + + + +rpm: URL Manipulation API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
URL Manipulation API.
+
+
+ + + + + + + + + + + + + + +

+Typedefs

typedef enum urltype_e urltype
 Supported URL types.

+Enumerations

enum  urltype_e {
+  URL_IS_UNKNOWN = 0, +URL_IS_DASH = 1, +URL_IS_PATH = 2, +URL_IS_FTP = 3, +
+  URL_IS_HTTP = 4, +URL_IS_HTTPS = 5, +URL_IS_HKP = 6 +
+ }
 Supported URL types. More...

+Functions

urltype urlIsURL (const char *url)
 Return type of URL.
urltype urlPath (const char *url, const char **pathp)
 Return path component of URL.
int urlGetFile (const char *url, const char *dest)
 Copy data from URL to local file.
+

Typedef Documentation

+ +
+
+ + + + +
typedef enum urltype_e urltype
+
+
+ +

Supported URL types.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum urltype_e
+
+
+ +

Supported URL types.

+
Enumerator:
+ + + + + + + +
URL_IS_UNKNOWN  +

unknown (aka a file)

+
URL_IS_DASH  +

stdin/stdout

+
URL_IS_PATH  +

file://...

+
URL_IS_FTP  +

ftp://...

+
URL_IS_HTTP  +

http://...

+
URL_IS_HTTPS  +

https://...

+
URL_IS_HKP  +

hkp://...

+
+
+
+ +

Definition at line 15 of file rpmurl.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int urlGetFile (const char * url,
const char * dest 
)
+
+
+ +

Copy data from URL to local file.

+
Parameters:
+ + + +
urlurl string of source
destfile name of destination
+
+
+
Returns:
0 on success, otherwise FTPERR_* code
+ +
+
+ +
+
+ + + + + + + + +
urltype urlIsURL (const char * url)
+
+
+ +

Return type of URL.

+
Parameters:
+ + +
urlurl string
+
+
+
Returns:
type of url
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
urltype urlPath (const char * url,
const char ** pathp 
)
+
+
+ +

Return path component of URL.

+
Parameters:
+ + +
urlurl string
+
+
+
Return values:
+ + +
pathppointer to path component of url
+
+
+
Returns:
type of url
+ +
+
+
+ + + diff --git a/doc/librpm/html/group__signature.html b/doc/librpm/html/group__signature.html new file mode 100644 index 0000000..5003181 --- /dev/null +++ b/doc/librpm/html/group__signature.html @@ -0,0 +1,178 @@ + + + + +rpm: Signature API. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+ +
+
Signature API.
+
+
+
+Collaboration diagram for Signature API.:
+
+
+ + +
+
+ + + + +

+

+ + + + + + +

+Files

file  rpmlib.h
 

In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.

+

+Typedefs

typedef enum rpmSigTag_e rpmSigTag
 Tags found in signature header from package.

+Enumerations

enum  rpmSigTag_e {
+  RPMSIGTAG_SIZE = 1000, +RPMSIGTAG_LEMD5_1 = 1001, +RPMSIGTAG_PGP = 1002, +RPMSIGTAG_LEMD5_2 = 1003, +
+  RPMSIGTAG_MD5 = 1004, +RPMSIGTAG_GPG = 1005, +RPMSIGTAG_PGP5 = 1006, +RPMSIGTAG_PAYLOADSIZE = 1007, +
+  RPMSIGTAG_BADSHA1_1 = RPMTAG_BADSHA1_1, +RPMSIGTAG_BADSHA1_2 = RPMTAG_BADSHA1_2, +RPMSIGTAG_SHA1 = RPMTAG_SHA1HEADER, +RPMSIGTAG_DSA = RPMTAG_DSAHEADER, +
+  RPMSIGTAG_RSA = RPMTAG_RSAHEADER, +RPMSIGTAG_LONGSIZE = RPMTAG_LONGSIGSIZE, +RPMSIGTAG_LONGARCHIVESIZE = RPMTAG_LONGARCHIVESIZE +
+ }
 Tags found in signature header from package. More...
+

Typedef Documentation

+ +
+
+ + + + +
typedef enum rpmSigTag_e rpmSigTag
+
+
+ +

Tags found in signature header from package.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmSigTag_e
+
+
+ +

Tags found in signature header from package.

+
Enumerator:
+ + + + + + + + + + + + + + + +
RPMSIGTAG_SIZE  +

internal Header+Payload size (32bit) in bytes.

+
RPMSIGTAG_LEMD5_1  +

internal Broken MD5, take 1

+
Deprecated:
legacy.
+
RPMSIGTAG_PGP  +

internal PGP 2.6.3 signature.

+
RPMSIGTAG_LEMD5_2  +

internal Broken MD5, take 2

+
Deprecated:
legacy.
+
RPMSIGTAG_MD5  +

internal MD5 signature.

+
RPMSIGTAG_GPG  +

internal GnuPG signature.

+
RPMSIGTAG_PGP5  +

internal PGP5 signature

+
Deprecated:
legacy.
+
RPMSIGTAG_PAYLOADSIZE  +

internal uncompressed payload size (32bit) in bytes.

+
RPMSIGTAG_BADSHA1_1  +

internal Broken SHA1, take 1.

+
RPMSIGTAG_BADSHA1_2  +

internal Broken SHA1, take 2.

+
RPMSIGTAG_SHA1  +

internal sha1 header digest.

+
RPMSIGTAG_DSA  +

internal DSA header signature.

+
RPMSIGTAG_RSA  +

internal RSA header signature.

+
RPMSIGTAG_LONGSIZE  +

internal Header+Payload size (64bit) in bytes.

+
RPMSIGTAG_LONGARCHIVESIZE  +

internal uncompressed payload size (64bit) in bytes.

+
+
+
+ +

Definition at line 331 of file rpmtag.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/group__signature.map b/doc/librpm/html/group__signature.map new file mode 100644 index 0000000..5e3fa41 --- /dev/null +++ b/doc/librpm/html/group__signature.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/group__signature.md5 b/doc/librpm/html/group__signature.md5 new file mode 100644 index 0000000..262aec3 --- /dev/null +++ b/doc/librpm/html/group__signature.md5 @@ -0,0 +1 @@ +6f0615e282eafb151f7495465fddd714 \ No newline at end of file diff --git a/doc/librpm/html/group__signature.png b/doc/librpm/html/group__signature.png new file mode 100644 index 0000000..5e4a36e Binary files /dev/null and b/doc/librpm/html/group__signature.png differ diff --git a/doc/librpm/html/header_8h.html b/doc/librpm/html/header_8h.html new file mode 100644 index 0000000..4106209 --- /dev/null +++ b/doc/librpm/html/header_8h.html @@ -0,0 +1,342 @@ + + + + +rpm: header.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
header.h File Reference
+
+
+ +

An rpm header carries all information about a package. +More...

+
#include <rpm/rpmio.h>
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmtd.h>
+#include <rpm/rpmutil.h>
+
+Include dependency graph for header.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef rpmFlags headerGetFlags
typedef rpmFlags headerPutFlags
typedef enum headerConvOps_e headerConvOps

+Enumerations

enum  hMagic { HEADER_MAGIC_NO = 0, +HEADER_MAGIC_YES = 1 + }
 Include calculation for 8 bytes of (magic, 0)? More...
enum  headerGetFlags_e {
+  HEADERGET_DEFAULT = 0, +HEADERGET_MINMEM = (1 << 0), +HEADERGET_EXT = (1 << 1), +HEADERGET_RAW = (1 << 2), +
+  HEADERGET_ALLOC = (1 << 3), +HEADERGET_ARGV = (1 << 4) +
+ }
 Modifier flags for headerGet() operation. More...
enum  headerPutFlags_e { HEADERPUT_DEFAULT = 0, +HEADERPUT_APPEND = (1 << 0) + }
enum  headerConvOps_e { HEADERCONV_EXPANDFILELIST = 0, +HEADERCONV_COMPRESSFILELIST = 1, +HEADERCONV_RETROFIT_V3 = 2 + }

+Functions

Header headerNew (void)
 Create new (empty) header instance.
Header headerFree (Header h)
 Dereference a header instance.
Header headerLink (Header h)
 Reference a header instance.
void headerSort (Header h)
 Sort tags in header.
void headerUnsort (Header h)
 Restore tags in header to original ordering.
unsigned int headerSizeof (Header h, int magicp)
 Return size of on-disk header representation in bytes.
int headerVerifyInfo (int il, int dl, const void *pev, void *iv, int negate)
 Perform simple sanity and range checks on header tag(s).
void * headerUnload (Header h)
 Convert header to on-disk representation.
Header headerReload (Header h, rpmTagVal tag)
 Convert header to on-disk representation, and then reload.
Header headerCopy (Header h)
 Duplicate a header.
Header headerLoad (void *uh)
 Convert header to in-memory representation.
Header headerCopyLoad (const void *uh)
 Make a copy and convert header to in-memory representation.
Header headerRead (FD_t fd, int magicp)
 Read (and load) header from file handle.
int headerWrite (FD_t fd, Header h, int magicp)
 Write (with unload) header to file handle.
int headerIsEntry (Header h, rpmTagVal tag)
 Check if tag is in header.
int headerGet (Header h, rpmTagVal tag, rpmtd td, headerGetFlags flags)
 Retrieve tag value.
int headerPut (Header h, rpmtd td, headerPutFlags flags)
 Add or append tag to header.
int headerAddI18NString (Header h, rpmTagVal tag, const char *string, const char *lang)
 Add locale specific tag to header.
int headerMod (Header h, rpmtd td)
 Modify tag in header.
int headerDel (Header h, rpmTagVal tag)
 Delete tag in header.
char * headerFormat (Header h, const char *fmt, errmsg_t *errmsg)
 Return formatted output string from header tags.
void headerCopyTags (Header headerFrom, Header headerTo, const rpmTagVal *tagstocopy)
 Duplicate tag values from one header into another.
HeaderIterator headerFreeIterator (HeaderIterator hi)
 Destroy header tag iterator.
HeaderIterator headerInitIterator (Header h)
 Create header tag iterator.
int headerNext (HeaderIterator hi, rpmtd td)
 Return next tag contents from header.
rpmTagVal headerNextTag (HeaderIterator hi)
 Return next tag number from header.
RPM_GNUC_DEPRECATED int headerNVR (Header h, const char **np, const char **vp, const char **rp)
 Return name, version, release strings from header.
RPM_GNUC_DEPRECATED int headerNEVRA (Header h, const char **np, uint32_t **ep, const char **vp, const char **rp, const char **ap)
 Return name, epoch, version, release, arch strings from header.
RPM_GNUC_DEPRECATED char * headerGetNEVR (Header h, const char **np)
 Return (malloc'd) header name-version-release string.
RPM_GNUC_DEPRECATED char * headerGetNEVRA (Header h, const char **np)
 Return (malloc'd) header name-version-release.arch string.
RPM_GNUC_DEPRECATED char * headerGetEVR (Header h, const char **np)
char * headerGetAsString (Header h, rpmTagVal tag)
 Return any non-array tag from header, converted to string.
const char * headerGetString (Header h, rpmTagVal tag)
 Return a simple string tag from header.
uint64_t headerGetNumber (Header h, rpmTagVal tag)
RPM_GNUC_DEPRECATED rpm_color_t headerGetColor (Header h)
 Return header color.
int headerIsSource (Header h)
 Check if header is a source or binary package header.
unsigned int headerGetInstance (Header h)
 Return header instance, ie is the header from rpmdb.
int headerConvert (Header h, int op)
 Convert header to/from (legacy) data presentation.
int headerPutString (Header h, rpmTagVal tag, const char *val)
 Type-safe methods for inserting tag data to header.
int headerPutStringArray (Header h, rpmTagVal tag, const char **val, rpm_count_t size)
int headerPutBin (Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size)
int headerPutChar (Header h, rpmTagVal tag, const char *val, rpm_count_t size)
int headerPutUint8 (Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size)
int headerPutUint16 (Header h, rpmTagVal tag, const uint16_t *val, rpm_count_t size)
int headerPutUint32 (Header h, rpmTagVal tag, const uint32_t *val, rpm_count_t size)
int headerPutUint64 (Header h, rpmTagVal tag, const uint64_t *val, rpm_count_t size)

+Variables

const unsigned char rpm_header_magic [8]
 Header magic value.
+

Detailed Description

+

An rpm header carries all information about a package.

+

A header is a collection of data elements called tags. Each tag has a data type, and includes 1 or more values.

+ +

Definition in file header.h.

+

Typedef Documentation

+ +
+
+ + + + +
typedef enum headerConvOps_e headerConvOps
+
+
+ +
+
+ +
+
+ + + + +
typedef rpmFlags headerGetFlags
+
+
+ +

Definition at line 168 of file header.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags headerPutFlags
+
+
+ +

Definition at line 186 of file header.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum headerConvOps_e
+
+
+
Enumerator:
+ + + +
HEADERCONV_EXPANDFILELIST  +
HEADERCONV_COMPRESSFILELIST  +
HEADERCONV_RETROFIT_V3  +
+
+
+ +

Definition at line 428 of file header.h.

+ +
+
+ +
+
+ + + + +
enum headerPutFlags_e
+
+
+
Enumerator:
+ + +
HEADERPUT_DEFAULT  +
HEADERPUT_APPEND  +
+
+
+ +

Definition at line 181 of file header.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
RPM_GNUC_DEPRECATED char* headerGetEVR (Header h,
const char ** np 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
uint64_t headerGetNumber (Header h,
rpmTagVal tag 
)
+
+
+ +
+
+
+ + + diff --git a/doc/librpm/html/header_8h__incl.map b/doc/librpm/html/header_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/header_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/header_8h__incl.md5 b/doc/librpm/html/header_8h__incl.md5 new file mode 100644 index 0000000..ce5ce57 --- /dev/null +++ b/doc/librpm/html/header_8h__incl.md5 @@ -0,0 +1 @@ +f9db959b56fcc3ea95087a6e270adc84 \ No newline at end of file diff --git a/doc/librpm/html/header_8h__incl.png b/doc/librpm/html/header_8h__incl.png new file mode 100644 index 0000000..a613665 Binary files /dev/null and b/doc/librpm/html/header_8h__incl.png differ diff --git a/doc/librpm/html/header_8h_source.html b/doc/librpm/html/header_8h_source.html new file mode 100644 index 0000000..d556d7f --- /dev/null +++ b/doc/librpm/html/header_8h_source.html @@ -0,0 +1,212 @@ + + + + +rpm: header.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
header.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_HEADER
+00002 #define H_HEADER
+00003 
+00013 /* RPM - Copyright (C) 1995-2001 Red Hat Software */
+00014 
+00015 #include <rpm/rpmio.h>
+00016 #include <rpm/rpmtypes.h>
+00017 #include <rpm/rpmtd.h>
+00018 #include <rpm/rpmutil.h>
+00019 
+00020 #ifdef __cplusplus
+00021 extern "C" {
+00022 #endif
+00023 
+00027 extern const unsigned char rpm_header_magic[8];
+00028 
+00032 enum hMagic {
+00033     HEADER_MAGIC_NO             = 0,
+00034     HEADER_MAGIC_YES            = 1
+00035 };
+00036 
+00041 Header headerNew(void);
+00042 
+00048 Header headerFree( Header h);
+00049 
+00055 Header headerLink(Header h);
+00056 
+00061 void headerSort(Header h);
+00062 
+00067 void headerUnsort(Header h);
+00068 
+00075 unsigned int headerSizeof(Header h, int magicp);
+00076 
+00086 int headerVerifyInfo(int il, int dl, const void * pev, void * iv, int negate);
+00087 
+00093 void * headerUnload(Header h);
+00094 
+00102 Header headerReload(Header h, rpmTagVal tag);
+00103 
+00109 Header headerCopy(Header h);
+00110 
+00116 Header headerLoad(void * uh);
+00117 
+00123 Header headerCopyLoad(const void * uh);
+00124 
+00131 Header headerRead(FD_t fd, int magicp);
+00132 
+00140 int headerWrite(FD_t fd, Header h, int magicp);
+00141 
+00148 int headerIsEntry(Header h, rpmTagVal tag);
+00149 
+00159 enum headerGetFlags_e {
+00160     HEADERGET_DEFAULT   = 0,        /* legacy headerGetEntry() behavior */
+00161     HEADERGET_MINMEM    = (1 << 0), /* pointers can refer to header memory */
+00162     HEADERGET_EXT       = (1 << 1), /* lookup extension types too */
+00163     HEADERGET_RAW       = (1 << 2), /* return raw contents (no i18n lookups) */
+00164     HEADERGET_ALLOC     = (1 << 3), /* always allocate memory for all data */
+00165     HEADERGET_ARGV      = (1 << 4), /* return string arrays NULL-terminated */
+00166 };
+00167 
+00168 typedef rpmFlags headerGetFlags;
+00169 
+00178 int headerGet(Header h, rpmTagVal tag, rpmtd td, headerGetFlags flags);
+00179 
+00180 
+00181 enum headerPutFlags_e {
+00182     HEADERPUT_DEFAULT   = 0,
+00183     HEADERPUT_APPEND    = (1 << 0),
+00184 };
+00185 
+00186 typedef rpmFlags headerPutFlags;
+00187 
+00196 int headerPut(Header h, rpmtd td, headerPutFlags flags);
+00197 
+00221 int headerPutString(Header h, rpmTagVal tag, const char *val);
+00222 int headerPutStringArray(Header h, rpmTagVal tag, const char **val, rpm_count_t size);
+00223 int headerPutBin(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size);
+00224 int headerPutChar(Header h, rpmTagVal tag, const char *val, rpm_count_t size);
+00225 int headerPutUint8(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size);
+00226 int headerPutUint16(Header h, rpmTagVal tag, const uint16_t *val, rpm_count_t size);
+00227 int headerPutUint32(Header h, rpmTagVal tag, const uint32_t *val, rpm_count_t size);
+00228 int headerPutUint64(Header h, rpmTagVal tag, const uint64_t *val, rpm_count_t size);
+00251 int headerAddI18NString(Header h, rpmTagVal tag, const char * string,
+00252                 const char * lang);
+00253 
+00261 int headerMod(Header h, rpmtd td);
+00262 
+00272 int headerDel(Header h, rpmTagVal tag);
+00273 
+00283 char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg);
+00284 
+00291 void headerCopyTags(Header headerFrom, Header headerTo, 
+00292                     const rpmTagVal * tagstocopy);
+00293 
+00299 HeaderIterator headerFreeIterator(HeaderIterator hi);
+00300 
+00306 HeaderIterator headerInitIterator(Header h);
+00307 
+00314 int headerNext(HeaderIterator hi, rpmtd td);
+00315 
+00321 rpmTagVal headerNextTag(HeaderIterator hi);
+00322 
+00331 RPM_GNUC_DEPRECATED
+00332 int headerNVR(Header h,
+00333                 const char ** np,
+00334                 const char ** vp,
+00335                 const char ** rp);
+00336 
+00347 RPM_GNUC_DEPRECATED
+00348 int headerNEVRA(Header h,
+00349                 const char ** np,
+00350                 uint32_t ** ep,
+00351                 const char ** vp,
+00352                 const char ** rp,
+00353                 const char ** ap);
+00354 
+00361 RPM_GNUC_DEPRECATED
+00362 char * headerGetNEVR(Header h, const char ** np );
+00363 
+00370 RPM_GNUC_DEPRECATED
+00371 char * headerGetNEVRA(Header h, const char ** np );
+00372 
+00373 /* \ingroup header
+00374  * Return (malloc'd) header (epoch:)version-release string.
+00375  * @param h             header
+00376  * @retval np           name tag value (or NULL)
+00377  * @return             (epoch:)version-release string
+00378  */
+00379 RPM_GNUC_DEPRECATED
+00380 char * headerGetEVR(Header h, const char **np);
+00381 
+00388 char * headerGetAsString(Header h, rpmTagVal tag);
+00389 
+00396 const char * headerGetString(Header h, rpmTagVal tag);
+00397 
+00398 /* \ingroup header
+00399  * Return a simple number tag (or extension) from header
+00400  * @param h             header
+00401  * @param tag           tag to retrieve
+00402  * @return              numeric tag value or 0 on failure
+00403  */
+00404 uint64_t headerGetNumber(Header h, rpmTagVal tag);
+00405 
+00411 RPM_GNUC_DEPRECATED
+00412 rpm_color_t headerGetColor(Header h);
+00413 
+00419 int headerIsSource(Header h);
+00420 
+00426 unsigned int headerGetInstance(Header h);
+00427 
+00428 typedef enum headerConvOps_e {
+00429     HEADERCONV_EXPANDFILELIST   = 0,
+00430     HEADERCONV_COMPRESSFILELIST = 1,
+00431     HEADERCONV_RETROFIT_V3      = 2,
+00432 } headerConvOps;
+00433 
+00440 int headerConvert(Header h, int op);
+00441 
+00442 #ifdef __cplusplus
+00443 }
+00444 #endif
+00445 
+00446 #endif  /* H_HEADER */
+
+
+ + + diff --git a/doc/librpm/html/index.html b/doc/librpm/html/index.html new file mode 100644 index 0000000..e18219e --- /dev/null +++ b/doc/librpm/html/index.html @@ -0,0 +1,43 @@ + + + + +rpm: librpm API Documentation. + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+
+
librpm API Documentation.
+
+
+
+ + + diff --git a/doc/librpm/html/jquery.js b/doc/librpm/html/jquery.js new file mode 100644 index 0000000..c052173 --- /dev/null +++ b/doc/librpm/html/jquery.js @@ -0,0 +1,54 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0) +{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function() +{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); +/* + * jQuery UI 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ +jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Resizables + * + * Depends: + * ui.core.js + */ +(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f
');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidthk.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)) +{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);; +/** + * jQuery.ScrollTo - Easy element scrolling using jQuery. + * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com + * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php). + * Date: 2/8/2008 + * @author Ariel Flesler + * @version 1.3.2 + */ +;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); + diff --git a/doc/librpm/html/modules.html b/doc/librpm/html/modules.html new file mode 100644 index 0000000..fa48f50 --- /dev/null +++ b/doc/librpm/html/modules.html @@ -0,0 +1,72 @@ + + + + +rpm: Modules + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+
+
Modules
+
+ + + + diff --git a/doc/librpm/html/nav_f.png b/doc/librpm/html/nav_f.png new file mode 100644 index 0000000..1b07a16 Binary files /dev/null and b/doc/librpm/html/nav_f.png differ diff --git a/doc/librpm/html/nav_h.png b/doc/librpm/html/nav_h.png new file mode 100644 index 0000000..01f5fa6 Binary files /dev/null and b/doc/librpm/html/nav_h.png differ diff --git a/doc/librpm/html/open.png b/doc/librpm/html/open.png new file mode 100644 index 0000000..7b35d2c Binary files /dev/null and b/doc/librpm/html/open.png differ diff --git a/doc/librpm/html/pages.html b/doc/librpm/html/pages.html new file mode 100644 index 0000000..960d95d --- /dev/null +++ b/doc/librpm/html/pages.html @@ -0,0 +1,49 @@ + + + + +rpm: Related Pages + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+
+ + + diff --git a/doc/librpm/html/rpm2cpio_8c.html b/doc/librpm/html/rpm2cpio_8c.html new file mode 100644 index 0000000..8575331 --- /dev/null +++ b/doc/librpm/html/rpm2cpio_8c.html @@ -0,0 +1,124 @@ + + + + +rpm: rpm2cpio.c File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpm2cpio.c File Reference
+
+
+
#include "system.h"
+#include <rpm/rpmlib.h>
+#include <rpm/rpmtag.h>
+#include <rpm/rpmio.h>
+#include <rpm/rpmpgp.h>
+#include <rpm/rpmts.h>
+#include "debug.h"
+
+Include dependency graph for rpm2cpio.c:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + +

+Functions

int main (int argc, char *argv[])

+Variables

const char * program_name
+

Function Documentation

+ + +

Variable Documentation

+ +
+
+ + + + +
const char* program_name
+
+
+ +

Definition at line 4 of file rpm2cpio.c.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpm2cpio_8c__incl.map b/doc/librpm/html/rpm2cpio_8c__incl.map new file mode 100644 index 0000000..05478b6 --- /dev/null +++ b/doc/librpm/html/rpm2cpio_8c__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doc/librpm/html/rpm2cpio_8c__incl.md5 b/doc/librpm/html/rpm2cpio_8c__incl.md5 new file mode 100644 index 0000000..8b36279 --- /dev/null +++ b/doc/librpm/html/rpm2cpio_8c__incl.md5 @@ -0,0 +1 @@ +cd6052a820f9df5703a771076b37b067 \ No newline at end of file diff --git a/doc/librpm/html/rpm2cpio_8c__incl.png b/doc/librpm/html/rpm2cpio_8c__incl.png new file mode 100644 index 0000000..cf3af03 Binary files /dev/null and b/doc/librpm/html/rpm2cpio_8c__incl.png differ diff --git a/doc/librpm/html/rpm2cpio_8c_source.html b/doc/librpm/html/rpm2cpio_8c_source.html new file mode 100644 index 0000000..79aaada --- /dev/null +++ b/doc/librpm/html/rpm2cpio_8c_source.html @@ -0,0 +1,141 @@ + + + + +rpm: rpm2cpio.c Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpm2cpio.c
+
+
+Go to the documentation of this file.
00001 /* rpmarchive: spit out the main archive portion of a package */
+00002 
+00003 #include "system.h"
+00004 const char *__progname;
+00005 
+00006 #include <rpm/rpmlib.h>         /* rpmReadPackageFile .. */
+00007 #include <rpm/rpmtag.h>
+00008 #include <rpm/rpmio.h>
+00009 #include <rpm/rpmpgp.h>
+00010 
+00011 #include <rpm/rpmts.h>
+00012 
+00013 #include "debug.h"
+00014 
+00015 int main(int argc, char *argv[])
+00016 {
+00017     FD_t fdi, fdo;
+00018     Header h;
+00019     char * rpmio_flags = NULL;
+00020     int rc;
+00021     FD_t gzdi;
+00022     
+00023     setprogname(argv[0]);       /* Retrofit glibc __progname */
+00024     rpmReadConfigFiles(NULL, NULL);
+00025     if (argc == 1)
+00026         fdi = fdDup(STDIN_FILENO);
+00027     else {
+00028         if (rstreq(argv[1], "-h") || rstreq(argv[1], "--help")) {
+00029             fprintf(stderr, "Usage: rpm2cpio file.rpm\n");
+00030             exit(EXIT_FAILURE);
+00031         }
+00032         fdi = Fopen(argv[1], "r.ufdio");
+00033     }
+00034 
+00035     if (Ferror(fdi)) {
+00036         fprintf(stderr, "%s: %s: %s\n", argv[0],
+00037                 (argc == 1 ? "<stdin>" : argv[1]), Fstrerror(fdi));
+00038         exit(EXIT_FAILURE);
+00039     }
+00040     fdo = fdDup(STDOUT_FILENO);
+00041 
+00042     {   rpmts ts = rpmtsCreate();
+00043         rpmVSFlags vsflags = 0;
+00044 
+00045         /* XXX retain the ageless behavior of rpm2cpio */
+00046         vsflags |= _RPMVSF_NODIGESTS;
+00047         vsflags |= _RPMVSF_NOSIGNATURES;
+00048         vsflags |= RPMVSF_NOHDRCHK;
+00049         (void) rpmtsSetVSFlags(ts, vsflags);
+00050 
+00051         rc = rpmReadPackageFile(ts, fdi, "rpm2cpio", &h);
+00052 
+00053         ts = rpmtsFree(ts);
+00054     }
+00055 
+00056     switch (rc) {
+00057     case RPMRC_OK:
+00058     case RPMRC_NOKEY:
+00059     case RPMRC_NOTTRUSTED:
+00060         break;
+00061     case RPMRC_NOTFOUND:
+00062         fprintf(stderr, _("argument is not an RPM package\n"));
+00063         exit(EXIT_FAILURE);
+00064         break;
+00065     case RPMRC_FAIL:
+00066     default:
+00067         fprintf(stderr, _("error reading header from package\n"));
+00068         exit(EXIT_FAILURE);
+00069         break;
+00070     }
+00071 
+00072     /* Retrieve type of payload compression. */
+00073     {   const char *compr = headerGetString(h, RPMTAG_PAYLOADCOMPRESSOR);
+00074         rpmio_flags = rstrscat(NULL, "r.", compr ? compr : "gzip", NULL);
+00075     }
+00076 
+00077     gzdi = Fdopen(fdi, rpmio_flags);    /* XXX gzdi == fdi */
+00078     free(rpmio_flags);
+00079 
+00080     if (gzdi == NULL) {
+00081         fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi));
+00082         exit(EXIT_FAILURE);
+00083     }
+00084 
+00085     rc = ufdCopy(gzdi, fdo);
+00086     rc = (rc <= 0) ? EXIT_FAILURE : EXIT_SUCCESS;
+00087     Fclose(fdo);
+00088 
+00089     Fclose(gzdi);       /* XXX gzdi == fdi */
+00090 
+00091     return rc;
+00092 }
+
+
+ + + diff --git a/doc/librpm/html/rpmbuild_8c.html b/doc/librpm/html/rpmbuild_8c.html new file mode 100644 index 0000000..c26d360 --- /dev/null +++ b/doc/librpm/html/rpmbuild_8c.html @@ -0,0 +1,1119 @@ + + + + +rpm: rpmbuild.c File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmbuild.c File Reference
+
+
+
#include "system.h"
+#include <errno.h>
+#include <libgen.h>
+#include <ctype.h>
+#include <rpm/rpmcli.h>
+#include <rpm/rpmlib.h>
+#include <rpm/rpmbuild.h>
+#include <rpm/rpmlog.h>
+#include <rpm/rpmfileutil.h>
+#include <rpm/rpmdb.h>
+#include <rpm/rpmps.h>
+#include <rpm/rpmts.h>
+#include "lib/signature.h"
+#include "cliutils.h"
+#include "debug.h"
+
+Include dependency graph for rpmbuild.c:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define POPT_NOLANG   -1012
#define POPT_RMSOURCE   -1013
#define POPT_RMBUILD   -1014
#define POPT_BUILDROOT   -1015
#define POPT_TARGETPLATFORM   -1016
#define POPT_NOBUILD   -1017
#define POPT_RMSPEC   -1019
#define POPT_NODIRTOKENS   -1020
#define POPT_REBUILD   0x4220
#define POPT_RECOMPILE   0x4320
#define POPT_BA   0x6261
#define POPT_BB   0x6262
#define POPT_BC   0x6263
#define POPT_BI   0x6269
#define POPT_BL   0x626c
#define POPT_BP   0x6270
#define POPT_BS   0x6273
#define POPT_TA   0x7461
#define POPT_TB   0x7462
#define POPT_TC   0x7463
#define POPT_TI   0x7469
#define POPT_TL   0x746c
#define POPT_TP   0x7470
#define POPT_TS   0x7473
#define _anyarch(_f)   (((_f)&(RPMBUILD_PREP|RPMBUILD_BUILD|RPMBUILD_INSTALL|RPMBUILD_PACKAGEBINARY)) == 0)
#define buildCleanMask   (RPMBUILD_RMSOURCE|RPMBUILD_RMSPEC)

+Enumerations

enum  modes {
+  MODE_BUILD = (1 << 4), +MODE_REBUILD = (1 << 5), +MODE_RECOMPILE = (1 << 8), +MODE_TARBUILD = (1 << 11), +
+  MODE_INITDB = (1 << 0), +MODE_REBUILDDB = (1 << 1), +MODE_VERIFYDB = (1 << 2), +MODE_CHECKSIG = (1 << 0), +
+  MODE_IMPORTKEY = (1 << 1), +MODE_DELKEY = (1 << 2), +MODE_LISTKEY = (1 << 3), +MODE_QUERY = (1 << 0), +
+  MODE_VERIFY = (1 << 3), +MODE_ADDSIGN = (1 << 0), +MODE_RESIGN = (1 << 1), +MODE_DELSIGN = (1 << 2), +
+  MODE_UNKNOWN = 0, +MODE_QUERY = (1 << 0), +MODE_PARSE = (1 << 1) +
+ }

+Functions

static void buildArgCallback (poptContext con, enum poptCallbackReason reason, const struct poptOption *opt, const char *arg, const void *data)
static int checkSpec (rpmts ts, rpmSpec spec)
static int isSpecFile (const char *specfile)
static char * getTarSpec (const char *arg)
static int buildForTarget (rpmts ts, const char *arg, BTA_t ba)
static int build (rpmts ts, const char *arg, BTA_t ba, const char *rcfile)
int main (int argc, char *argv[])

+Variables

const char * program_name
static struct rpmBuildArguments_s rpmBTArgs
int _fsm_debug
static rpmSpecFlags spec_flags = 0
static int noDeps = 0
static int shortCircuit = 0
static char buildMode = 0
static char buildChar = 0
static ARGV_t build_targets = NULL
static struct poptOption rpmBuildPoptTable []
static int quiet
static struct poptOption optionsTable []
+

Define Documentation

+ +
+
+ + + + + + + + +
#define _anyarch( _f)   (((_f)&(RPMBUILD_PREP|RPMBUILD_BUILD|RPMBUILD_INSTALL|RPMBUILD_PACKAGEBINARY)) == 0)
+
+
+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + +
#define buildCleanMask   (RPMBUILD_RMSOURCE|RPMBUILD_RMSPEC)
+
+
+ +

Referenced by build().

+ +
+
+ +
+
+ + + + +
#define POPT_BA   0x6261
+
+
+ +

Definition at line 34 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_BB   0x6262
+
+
+ +

Definition at line 35 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_BC   0x6263
+
+
+ +

Definition at line 36 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_BI   0x6269
+
+
+ +

Definition at line 37 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_BL   0x626c
+
+
+ +

Definition at line 38 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_BP   0x6270
+
+
+ +

Definition at line 39 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_BS   0x6273
+
+
+ +

Definition at line 40 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_BUILDROOT   -1015
+
+
+ +

Definition at line 26 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_NOBUILD   -1017
+
+
+ +

Definition at line 28 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_NODIRTOKENS   -1020
+
+
+ +

Definition at line 30 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_NOLANG   -1012
+
+
+ +

Definition at line 23 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_REBUILD   0x4220
+
+
+ +

Definition at line 32 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_RECOMPILE   0x4320
+
+
+ +

Definition at line 33 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_RMBUILD   -1014
+
+
+ +

Definition at line 25 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_RMSOURCE   -1013
+
+
+ +

Definition at line 24 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_RMSPEC   -1019
+
+
+ +

Definition at line 29 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_TA   0x7461
+
+
+ +

Definition at line 41 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_TARGETPLATFORM   -1016
+
+
+ +

Definition at line 27 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_TB   0x7462
+
+
+ +

Definition at line 42 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_TC   0x7463
+
+
+ +

Definition at line 43 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_TI   0x7469
+
+
+ +

Definition at line 44 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_TL   0x746c
+
+
+ +

Definition at line 45 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_TP   0x7470
+
+
+ +

Definition at line 46 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define POPT_TS   0x7473
+
+
+ +

Definition at line 47 of file rpmbuild.c.

+ +

Referenced by buildArgCallback().

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum modes
+
+
+
Enumerator:
+ + + + + + + + + + + + + + + + + + + +
MODE_BUILD  +
MODE_REBUILD  +
MODE_RECOMPILE  +
MODE_TARBUILD  +
MODE_INITDB  +
MODE_REBUILDDB  +
MODE_VERIFYDB  +
MODE_CHECKSIG  +
MODE_IMPORTKEY  +
MODE_DELKEY  +
MODE_LISTKEY  +
MODE_QUERY  +
MODE_VERIFY  +
MODE_ADDSIGN  +
MODE_RESIGN  +
MODE_DELSIGN  +
MODE_UNKNOWN  +
MODE_QUERY  +
MODE_PARSE  +
+
+
+ +

Definition at line 198 of file rpmbuild.c.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static int build (rpmts ts,
const char * arg,
BTA_t ba,
const char * rcfile 
) [static]
+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static void buildArgCallback (poptContext con,
enum poptCallbackReason reason,
const struct poptOption * opt,
const char * arg,
const void * data 
) [static]
+
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + +
static int checkSpec (rpmts ts,
rpmSpec spec 
) [static]
+
+
+ +

Definition at line 225 of file rpmbuild.c.

+ +

References _, rpmlog(), RPMLOG_ERR, rpmpsFree(), rpmpsPrint(), and rpmSpecCheckDeps().

+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + + + + + +
static char* getTarSpec (const char * arg) [static]
+
+
+ +

Definition at line 286 of file rpmbuild.c.

+ +

References _, isSpecFile(), rasprintf(), rpmExpand(), rpmGetPath(), rpmlog(), and RPMLOG_ERR.

+ +

Referenced by buildForTarget().

+ +
+
+ +
+
+ + + + + + + + +
static int isSpecFile (const char * specfile) [static]
+
+
+ +

Definition at line 239 of file rpmbuild.c.

+ +

References _, rpmlog(), and RPMLOG_ERR.

+ +

Referenced by buildForTarget(), and getTarSpec().

+ +
+
+ + +

Variable Documentation

+ +
+
+ + + + +
int _fsm_debug
+
+
+ +
+
+ +
+
+ + + + +
ARGV_t build_targets = NULL [static]
+
+
+

Target platform(s)

+ +

Definition at line 56 of file rpmbuild.c.

+ +

Referenced by build(), buildArgCallback(), and main().

+ +
+
+ +
+
+ + + + +
char buildChar = 0 [static]
+
+
+

Build stage (one of "abcilps ")

+ +

Definition at line 55 of file rpmbuild.c.

+ +

Referenced by buildArgCallback(), and main().

+ +
+
+ +
+
+ + + + +
char buildMode = 0 [static]
+
+
+

Build mode (one of "btBC")

+ +

Definition at line 54 of file rpmbuild.c.

+ +

Referenced by buildArgCallback(), buildForTarget(), and main().

+ +
+
+ +
+
+ + + + +
int noDeps = 0 [static]
+
+
+

from --nodeps

+ +

Definition at line 52 of file rpmbuild.c.

+ +

Referenced by buildArgCallback(), and buildForTarget().

+ +
+
+ +
+
+ + + + +
struct poptOption optionsTable[] [static]
+
+
+Initial value:
 {
+
+ { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmBuildPoptTable, 0,
+         "Build options with [ <specfile> | <tarball> | <source package> ]:" ,
+        NULL },
+
+ { "quiet", '\0', POPT_ARGFLAG_DOC_HIDDEN, &quiet, 0, NULL, NULL},
+
+ { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+         "Common options for all rpm modes and executables:" ,
+        NULL },
+
+   POPT_AUTOALIAS
+   POPT_AUTOHELP
+   POPT_TABLEEND
+}
+
+

Definition at line 208 of file rpmbuild.c.

+ +
+
+ +
+
+ + + + +
const char* program_name
+
+
+ +

Definition at line 2 of file rpmbuild.c.

+ +
+
+ +
+
+ + + + +
int quiet [static]
+
+
+ +

Definition at line 205 of file rpmbuild.c.

+ +
+
+ +
+
+ + + + +
struct rpmBuildArguments_s rpmBTArgs [static]
+
+
+ +

Definition at line 21 of file rpmbuild.c.

+ +

Referenced by buildArgCallback(), and main().

+ +
+
+ +
+
+ + + + +
struct poptOption rpmBuildPoptTable[] [static]
+
+
+ +

Definition at line 114 of file rpmbuild.c.

+ +
+
+ +
+
+ + + + +
int shortCircuit = 0 [static]
+
+
+

from --short-circuit

+ +

Definition at line 53 of file rpmbuild.c.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
rpmSpecFlags spec_flags = 0 [static]
+
+
+

Bit(s) to control spec parsing.

+ +

Definition at line 51 of file rpmbuild.c.

+ +

Referenced by buildArgCallback(), and buildForTarget().

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmbuild_8c__incl.map b/doc/librpm/html/rpmbuild_8c__incl.map new file mode 100644 index 0000000..03a9276 --- /dev/null +++ b/doc/librpm/html/rpmbuild_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/rpmbuild_8c__incl.md5 b/doc/librpm/html/rpmbuild_8c__incl.md5 new file mode 100644 index 0000000..d0dc995 --- /dev/null +++ b/doc/librpm/html/rpmbuild_8c__incl.md5 @@ -0,0 +1 @@ +496ea86a8158f4bc45c25d877cc507d5 \ No newline at end of file diff --git a/doc/librpm/html/rpmbuild_8c__incl.png b/doc/librpm/html/rpmbuild_8c__incl.png new file mode 100644 index 0000000..195d41a Binary files /dev/null and b/doc/librpm/html/rpmbuild_8c__incl.png differ diff --git a/doc/librpm/html/rpmbuild_8c_source.html b/doc/librpm/html/rpmbuild_8c_source.html new file mode 100644 index 0000000..5e003f6 --- /dev/null +++ b/doc/librpm/html/rpmbuild_8c_source.html @@ -0,0 +1,686 @@ + + + + +rpm: rpmbuild.c Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmbuild.c
+
+
+Go to the documentation of this file.
00001 #include "system.h"
+00002 const char *__progname;
+00003 
+00004 #include <errno.h>
+00005 #include <libgen.h>
+00006 #include <ctype.h>
+00007 
+00008 #include <rpm/rpmcli.h>
+00009 #include <rpm/rpmlib.h>                 /* RPMSIGTAG, rpmReadPackageFile .. */
+00010 #include <rpm/rpmbuild.h>
+00011 #include <rpm/rpmlog.h>
+00012 #include <rpm/rpmfileutil.h>
+00013 #include <rpm/rpmdb.h>
+00014 #include <rpm/rpmps.h>
+00015 #include <rpm/rpmts.h>
+00016 #include "lib/signature.h"
+00017 #include "cliutils.h"
+00018 
+00019 #include "debug.h"
+00020 
+00021 static struct rpmBuildArguments_s rpmBTArgs;
+00022 
+00023 #define POPT_NOLANG             -1012
+00024 #define POPT_RMSOURCE           -1013
+00025 #define POPT_RMBUILD            -1014
+00026 #define POPT_BUILDROOT          -1015
+00027 #define POPT_TARGETPLATFORM     -1016
+00028 #define POPT_NOBUILD            -1017
+00029 #define POPT_RMSPEC             -1019
+00030 #define POPT_NODIRTOKENS        -1020
+00031 
+00032 #define POPT_REBUILD            0x4220
+00033 #define POPT_RECOMPILE          0x4320
+00034 #define POPT_BA                 0x6261
+00035 #define POPT_BB                 0x6262
+00036 #define POPT_BC                 0x6263
+00037 #define POPT_BI                 0x6269
+00038 #define POPT_BL                 0x626c
+00039 #define POPT_BP                 0x6270
+00040 #define POPT_BS                 0x6273
+00041 #define POPT_TA                 0x7461
+00042 #define POPT_TB                 0x7462
+00043 #define POPT_TC                 0x7463
+00044 #define POPT_TI                 0x7469
+00045 #define POPT_TL                 0x746c
+00046 #define POPT_TP                 0x7470
+00047 #define POPT_TS                 0x7473
+00048 
+00049 extern int _fsm_debug;
+00050 
+00051 static rpmSpecFlags spec_flags = 0;     
+00052 static int noDeps = 0;                  
+00053 static int shortCircuit = 0;            
+00054 static char buildMode = 0;              
+00055 static char buildChar = 0;              
+00056 static ARGV_t build_targets = NULL;     
+00058 static void buildArgCallback( poptContext con,
+00059         enum poptCallbackReason reason,
+00060         const struct poptOption * opt, const char * arg,
+00061         const void * data)
+00062 {
+00063     BTA_t rba = &rpmBTArgs;
+00064 
+00065     switch (opt->val) {
+00066     case POPT_REBUILD:
+00067     case POPT_RECOMPILE:
+00068     case POPT_BA:
+00069     case POPT_BB:
+00070     case POPT_BC:
+00071     case POPT_BI:
+00072     case POPT_BL:
+00073     case POPT_BP:
+00074     case POPT_BS:
+00075     case POPT_TA:
+00076     case POPT_TB:
+00077     case POPT_TC:
+00078     case POPT_TI:
+00079     case POPT_TL:
+00080     case POPT_TP:
+00081     case POPT_TS:
+00082         if (opt->val == POPT_BS || opt->val == POPT_TS)
+00083             noDeps = 1;
+00084         if (buildMode == '\0' && buildChar == '\0') {
+00085             buildMode = (((unsigned)opt->val) >> 8) & 0xff;
+00086             buildChar = (opt->val     ) & 0xff;
+00087         }
+00088         break;
+00089 
+00090     case POPT_NODIRTOKENS: rba->pkgFlags |= RPMBUILD_PKG_NODIRTOKENS; break;
+00091     case POPT_NOBUILD: rba->buildAmount |= RPMBUILD_NOBUILD; break;
+00092     case POPT_NOLANG: spec_flags |= RPMSPEC_NOLANG; break;
+00093     case POPT_RMSOURCE: rba->buildAmount |= RPMBUILD_RMSOURCE; break;
+00094     case POPT_RMSPEC: rba->buildAmount |= RPMBUILD_RMSPEC; break;
+00095     case POPT_RMBUILD: rba->buildAmount |= RPMBUILD_RMBUILD; break;
+00096     case POPT_BUILDROOT:
+00097         if (rba->buildRootOverride) {
+00098             rpmlog(RPMLOG_ERR, _("buildroot already specified, ignoring %s\n"), arg);
+00099             break;
+00100         }
+00101         rba->buildRootOverride = xstrdup(arg);
+00102         break;
+00103     case POPT_TARGETPLATFORM:
+00104         argvSplit(&build_targets, arg, ",");
+00105         break;
+00106 
+00107     case RPMCLI_POPT_FORCE:
+00108         spec_flags |= RPMSPEC_FORCE;
+00109         break;
+00110 
+00111     }
+00112 }
+00113 
+00114 static struct poptOption rpmBuildPoptTable[] = {
+00115  { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE,
+00116         buildArgCallback, 0, NULL, NULL },
+00117 
+00118  { "bp", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BP,
+00119         N_("build through %prep (unpack sources and apply patches) from <specfile>"),
+00120         N_("<specfile>") },
+00121  { "bc", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BC,
+00122         N_("build through %build (%prep, then compile) from <specfile>"),
+00123         N_("<specfile>") },
+00124  { "bi", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BI,
+00125         N_("build through %install (%prep, %build, then install) from <specfile>"),
+00126         N_("<specfile>") },
+00127  { "bl", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BL,
+00128         N_("verify %files section from <specfile>"),
+00129         N_("<specfile>") },
+00130  { "ba", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BA,
+00131         N_("build source and binary packages from <specfile>"),
+00132         N_("<specfile>") },
+00133  { "bb", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BB,
+00134         N_("build binary package only from <specfile>"),
+00135         N_("<specfile>") },
+00136  { "bs", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BS,
+00137         N_("build source package only from <specfile>"),
+00138         N_("<specfile>") },
+00139 
+00140  { "tp", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TP,
+00141         N_("build through %prep (unpack sources and apply patches) from <tarball>"),
+00142         N_("<tarball>") },
+00143  { "tc", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TC,
+00144         N_("build through %build (%prep, then compile) from <tarball>"),
+00145         N_("<tarball>") },
+00146  { "ti", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TI,
+00147         N_("build through %install (%prep, %build, then install) from <tarball>"),
+00148         N_("<tarball>") },
+00149  { "tl", 0, POPT_ARGFLAG_ONEDASH|POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_TL,
+00150         N_("verify %files section from <tarball>"),
+00151         N_("<tarball>") },
+00152  { "ta", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TA,
+00153         N_("build source and binary packages from <tarball>"),
+00154         N_("<tarball>") },
+00155  { "tb", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TB,
+00156         N_("build binary package only from <tarball>"),
+00157         N_("<tarball>") },
+00158  { "ts", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TS,
+00159         N_("build source package only from <tarball>"),
+00160         N_("<tarball>") },
+00161 
+00162  { "rebuild", '\0', 0, 0, POPT_REBUILD,
+00163         N_("build binary package from <source package>"),
+00164         N_("<source package>") },
+00165  { "recompile", '\0', 0, 0, POPT_RECOMPILE,
+00166         N_("build through %install (%prep, %build, then install) from <source package>"),
+00167         N_("<source package>") },
+00168 
+00169  { "buildroot", '\0', POPT_ARG_STRING, 0,  POPT_BUILDROOT,
+00170         N_("override build root"), "DIRECTORY" },
+00171  { "clean", '\0', 0, 0, POPT_RMBUILD,
+00172         N_("remove build tree when done"), NULL},
+00173  { "force", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_FORCE,
+00174         N_("ignore ExcludeArch: directives from spec file"), NULL},
+00175  { "fsmdebug", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN), &_fsm_debug, -1,
+00176         N_("debug file state machine"), NULL},
+00177  { "nobuild", '\0', 0, 0,  POPT_NOBUILD,
+00178         N_("do not execute any stages of the build"), NULL },
+00179  { "nodeps", '\0', POPT_ARG_VAL, &noDeps, 1,
+00180         N_("do not verify build dependencies"), NULL },
+00181  { "nodirtokens", '\0', 0, 0, POPT_NODIRTOKENS,
+00182         N_("generate package header(s) compatible with (legacy) rpm v3 packaging"),
+00183         NULL},
+00184 
+00185  { "nolang", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_NOLANG,
+00186         N_("do not accept i18N msgstr's from specfile"), NULL},
+00187  { "rmsource", '\0', 0, 0, POPT_RMSOURCE,
+00188         N_("remove sources when done"), NULL},
+00189  { "rmspec", '\0', 0, 0, POPT_RMSPEC,
+00190         N_("remove specfile when done"), NULL},
+00191  { "short-circuit", '\0', POPT_ARG_VAL, &shortCircuit,  1,
+00192         N_("skip straight to specified stage (only for c,i)"), NULL },
+00193  { "target", '\0', POPT_ARG_STRING, 0,  POPT_TARGETPLATFORM,
+00194         N_("override target platform"), "CPU-VENDOR-OS" },
+00195    POPT_TABLEEND
+00196 };
+00197 
+00198 enum modes {
+00199     MODE_BUILD          = (1 <<  4),
+00200     MODE_REBUILD        = (1 <<  5),
+00201     MODE_RECOMPILE      = (1 <<  8),
+00202     MODE_TARBUILD       = (1 << 11),
+00203 };
+00204 
+00205 static int quiet;
+00206 
+00207 /* the structure describing the options we take and the defaults */
+00208 static struct poptOption optionsTable[] = {
+00209 
+00210  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmBuildPoptTable, 0,
+00211         N_("Build options with [ <specfile> | <tarball> | <source package> ]:"),
+00212         NULL },
+00213 
+00214  { "quiet", '\0', POPT_ARGFLAG_DOC_HIDDEN, &quiet, 0, NULL, NULL},
+00215 
+00216  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+00217         N_("Common options for all rpm modes and executables:"),
+00218         NULL },
+00219 
+00220    POPT_AUTOALIAS
+00221    POPT_AUTOHELP
+00222    POPT_TABLEEND
+00223 };
+00224 
+00225 static int checkSpec(rpmts ts, rpmSpec spec)
+00226 {
+00227     int rc;
+00228     rpmps ps = rpmSpecCheckDeps(ts, spec);
+00229 
+00230     if (ps) {
+00231         rpmlog(RPMLOG_ERR, _("Failed build dependencies:\n"));
+00232         rpmpsPrint(NULL, ps);
+00233     }
+00234     rc = (ps != NULL);
+00235     ps = rpmpsFree(ps);
+00236     return rc;
+00237 }
+00238 
+00239 static int isSpecFile(const char * specfile)
+00240 {
+00241     char buf[256];
+00242     const char * s;
+00243     FILE * f;
+00244     int count;
+00245     int checking;
+00246 
+00247     f = fopen(specfile, "r");
+00248     if (f == NULL || ferror(f)) {
+00249         rpmlog(RPMLOG_ERR, _("Unable to open spec file %s: %s\n"),
+00250                 specfile, strerror(errno));
+00251         return 0;
+00252     }
+00253     count = fread(buf, sizeof(buf[0]), sizeof(buf), f);
+00254     (void) fclose(f);
+00255 
+00256     if (count == 0)
+00257         return 0;
+00258 
+00259     checking = 1;
+00260     for (s = buf; count--; s++) {
+00261         switch (*s) {
+00262         case '\r':
+00263         case '\n':
+00264             checking = 1;
+00265             break;
+00266         case ':':
+00267             checking = 0;
+00268             break;
+00269         default:
+00270 #if 0
+00271             if (checking && !(isprint(*s) || isspace(*s))) return 0;
+00272             break;
+00273 #else
+00274             if (checking && !(isprint(*s) || isspace(*s)) && *(unsigned char *)s < 32) return 0;
+00275             break;
+00276 #endif
+00277         }
+00278     }
+00279     return 1;
+00280 }
+00281 
+00282 /* 
+00283  * Try to find a spec from a tarball pointed to by arg. 
+00284  * Return absolute path to spec name on success, otherwise NULL.
+00285  */
+00286 static char * getTarSpec(const char *arg)
+00287 {
+00288     char *specFile = NULL;
+00289     char *specDir;
+00290     char *specBase;
+00291     char *tmpSpecFile;
+00292     const char **spec;
+00293     char tarbuf[BUFSIZ];
+00294     int gotspec = 0, res;
+00295     static const char *tryspec[] = { "Specfile", "\\*.spec", NULL };
+00296 
+00297     specDir = rpmGetPath("%{_specdir}", NULL);
+00298     tmpSpecFile = rpmGetPath("%{_specdir}/", "rpm-spec.XXXXXX", NULL);
+00299 
+00300     (void) close(mkstemp(tmpSpecFile));
+00301 
+00302     for (spec = tryspec; *spec != NULL; spec++) {
+00303         FILE *fp;
+00304         char *cmd;
+00305 
+00306         cmd = rpmExpand("%{uncompress: ", arg, "} | ",
+00307                         "%{__tar} xOvf - --wildcards ", *spec,
+00308                         " 2>&1 > ", tmpSpecFile, NULL);
+00309 
+00310         if (!(fp = popen(cmd, "r"))) {
+00311             rpmlog(RPMLOG_ERR, _("Failed to open tar pipe: %m\n"));
+00312         } else {
+00313             char *fok;
+00314             for (;;) {
+00315                 fok = fgets(tarbuf, sizeof(tarbuf) - 1, fp);
+00316                 /* tar sometimes prints "tar: Record size = 16" messages */
+00317                 if (!fok || strncmp(fok, "tar: ", 5) != 0)
+00318                     break;
+00319             }
+00320             pclose(fp);
+00321             gotspec = (fok != NULL) && isSpecFile(tmpSpecFile);
+00322         }
+00323 
+00324         if (!gotspec) 
+00325             unlink(tmpSpecFile);
+00326         free(cmd);
+00327     }
+00328 
+00329     if (!gotspec) {
+00330         rpmlog(RPMLOG_ERR, _("Failed to read spec file from %s\n"), arg);
+00331         goto exit;
+00332     }
+00333 
+00334     specBase = basename(tarbuf);
+00335     /* remove trailing \n */
+00336     specBase[strlen(specBase)-1] = '\0';
+00337 
+00338     rasprintf(&specFile, "%s/%s", specDir, specBase);
+00339     res = rename(tmpSpecFile, specFile);
+00340 
+00341     if (res) {
+00342         rpmlog(RPMLOG_ERR, _("Failed to rename %s to %s: %m\n"),
+00343                 tmpSpecFile, specFile);
+00344         free(specFile);
+00345         specFile = NULL;
+00346     } else {
+00347         /* mkstemp() can give unnecessarily strict permissions, fixup */
+00348         mode_t mask;
+00349         umask(mask = umask(0));
+00350         (void) chmod(specFile, 0666 & ~mask);
+00351     }
+00352 
+00353 exit:
+00354     (void) unlink(tmpSpecFile);
+00355     free(tmpSpecFile);
+00356     free(specDir);
+00357     return specFile;
+00358 }
+00359 
+00360 static int buildForTarget(rpmts ts, const char * arg, BTA_t ba)
+00361 {
+00362     int buildAmount = ba->buildAmount;
+00363     char * buildRootURL = NULL;
+00364     char * specFile = NULL;
+00365     rpmSpec spec = NULL;
+00366     int rc = 1; /* assume failure */
+00367     int justRm = ((buildAmount & ~(RPMBUILD_RMSOURCE|RPMBUILD_RMSPEC)) == 0);
+00368     rpmSpecFlags specFlags = spec_flags;
+00369 
+00370 #ifndef DYING
+00371     rpmSetTables(RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS);
+00372 #endif
+00373 
+00374     if (ba->buildRootOverride)
+00375         buildRootURL = rpmGenPath(NULL, ba->buildRootOverride, NULL);
+00376 
+00377     /* Create build tree if necessary */
+00378     const char * buildtree = "%{_topdir}:%{_specdir}:%{_sourcedir}:%{_builddir}:%{_rpmdir}:%{_srcrpmdir}:%{_buildrootdir}";
+00379     const char * rootdir = rpmtsRootDir(ts);
+00380     if (rpmMkdirs(!rstreq(rootdir, "/") ? rootdir : NULL , buildtree)) {
+00381         goto exit;
+00382     }
+00383 
+00384     if (buildMode == 't') {
+00385         char *srcdir = NULL, *dir;
+00386 
+00387         specFile = getTarSpec(arg);
+00388         if (!specFile)
+00389             goto exit;
+00390 
+00391         /* Make the directory of the tarball %_sourcedir for this run */
+00392         /* dirname() may modify contents so extra hoops needed. */
+00393         if (*arg != '/') {
+00394             dir = rpmGetCwd();
+00395             rstrscat(&dir, "/", arg, NULL);
+00396         } else {
+00397             dir = xstrdup(arg);
+00398         }
+00399         srcdir = dirname(dir);
+00400         addMacro(NULL, "_sourcedir", NULL, srcdir, RMIL_TARBALL);
+00401         free(dir);
+00402     } else {
+00403         specFile = xstrdup(arg);
+00404     }
+00405 
+00406     if (*specFile != '/') {
+00407         char *cwd = rpmGetCwd();
+00408         char *s = NULL;
+00409         rasprintf(&s, "%s/%s", cwd, specFile);
+00410         free(cwd);
+00411         free(specFile);
+00412         specFile = s;
+00413     }
+00414 
+00415     struct stat st;
+00416     if (stat(specFile, &st) < 0) {
+00417         rpmlog(RPMLOG_ERR, _("failed to stat %s: %m\n"), specFile);
+00418         goto exit;
+00419     }
+00420     if (! S_ISREG(st.st_mode)) {
+00421         rpmlog(RPMLOG_ERR, _("File %s is not a regular file.\n"), specFile);
+00422         goto exit;
+00423     }
+00424 
+00425     /* Try to verify that the file is actually a specfile */
+00426     if (!isSpecFile(specFile)) {
+00427         rpmlog(RPMLOG_ERR,
+00428                 _("File %s does not appear to be a specfile.\n"), specFile);
+00429         goto exit;
+00430     }
+00431     
+00432     /* Don't parse spec if only its removal is requested */
+00433     if (ba->buildAmount == RPMBUILD_RMSPEC) {
+00434         rc = unlink(specFile);
+00435         goto exit;
+00436     }
+00437 
+00438     /* Parse the spec file */
+00439 #define _anyarch(_f)    \
+00440 (((_f)&(RPMBUILD_PREP|RPMBUILD_BUILD|RPMBUILD_INSTALL|RPMBUILD_PACKAGEBINARY)) == 0)
+00441     if (_anyarch(buildAmount))
+00442         specFlags |= RPMSPEC_ANYARCH;
+00443 #undef  _anyarch
+00444     
+00445     spec = rpmSpecParse(specFile, specFlags, buildRootURL);
+00446     if (spec == NULL) {
+00447         goto exit;
+00448     }
+00449 
+00450     /* Check build prerequisites if necessary, unless disabled */
+00451     if (!justRm && !noDeps && checkSpec(ts, spec)) {
+00452         goto exit;
+00453     }
+00454 
+00455     if (rpmSpecBuild(spec, ba)) {
+00456         goto exit;
+00457     }
+00458     
+00459     if (buildMode == 't')
+00460         (void) unlink(specFile);
+00461     rc = 0;
+00462 
+00463 exit:
+00464     free(specFile);
+00465     rpmSpecFree(spec);
+00466     free(buildRootURL);
+00467     return rc;
+00468 }
+00469 
+00470 static int build(rpmts ts, const char * arg, BTA_t ba, const char * rcfile)
+00471 {
+00472     int rc = 0;
+00473     char * targets = argvJoin(build_targets, ",");
+00474 #define buildCleanMask  (RPMBUILD_RMSOURCE|RPMBUILD_RMSPEC)
+00475     int cleanFlags = ba->buildAmount & buildCleanMask;
+00476     rpmVSFlags vsflags, ovsflags;
+00477 
+00478     vsflags = rpmExpandNumeric("%{_vsflags_build}");
+00479     if (rpmcliQueryFlags & VERIFY_DIGEST)
+00480         vsflags |= _RPMVSF_NODIGESTS;
+00481     if (rpmcliQueryFlags & VERIFY_SIGNATURE)
+00482         vsflags |= _RPMVSF_NOSIGNATURES;
+00483     if (rpmcliQueryFlags & VERIFY_HDRCHK)
+00484         vsflags |= RPMVSF_NOHDRCHK;
+00485     ovsflags = rpmtsSetVSFlags(ts, vsflags);
+00486 
+00487     if (build_targets == NULL) {
+00488         rc =  buildForTarget(ts, arg, ba);
+00489         goto exit;
+00490     }
+00491 
+00492     /* parse up the build operators */
+00493 
+00494     printf(_("Building target platforms: %s\n"), targets);
+00495 
+00496     ba->buildAmount &= ~buildCleanMask;
+00497     for (ARGV_const_t target = build_targets; target && *target; target++) {
+00498         /* Perform clean-up after last target build. */
+00499         if (*(target + 1) == NULL)
+00500             ba->buildAmount |= cleanFlags;
+00501 
+00502         printf(_("Building for target %s\n"), *target);
+00503 
+00504         /* Read in configuration for target. */
+00505         rpmFreeMacros(NULL);
+00506         rpmFreeRpmrc();
+00507         (void) rpmReadConfigFiles(rcfile, *target);
+00508         rc = buildForTarget(ts, arg, ba);
+00509         if (rc)
+00510             break;
+00511     }
+00512 
+00513 exit:
+00514     vsflags = rpmtsSetVSFlags(ts, ovsflags);
+00515     /* Restore original configuration. */
+00516     rpmFreeMacros(NULL);
+00517     rpmFreeRpmrc();
+00518     (void) rpmReadConfigFiles(rcfile, NULL);
+00519     free(targets);
+00520 
+00521     return rc;
+00522 }
+00523 
+00524 int main(int argc, char *argv[])
+00525 {
+00526     rpmts ts = NULL;
+00527     enum modes bigMode = MODE_BUILD;
+00528     BTA_t ba = &rpmBTArgs;
+00529 
+00530     const char *pkg = NULL;
+00531     int ec = 0;
+00532     poptContext optCon = rpmcliInit(argc, argv, optionsTable);
+00533 
+00534     if (argc <= 1 || poptPeekArg(optCon) == NULL) {
+00535         printUsage(optCon, stderr, 0);
+00536         exit(EXIT_FAILURE);
+00537     }
+00538 
+00539     switch (buildMode) {
+00540     case 'b':   bigMode = MODE_BUILD;           break;
+00541     case 't':   bigMode = MODE_TARBUILD;        break;
+00542     case 'B':   bigMode = MODE_REBUILD;         break;
+00543     case 'C':   bigMode = MODE_RECOMPILE;       break;
+00544     }
+00545 
+00546     if (rpmcliRootDir && rpmcliRootDir[0] != '/') {
+00547         argerror(_("arguments to --root (-r) must begin with a /"));
+00548     }
+00549 
+00550     /* rpmbuild is rather chatty by default */
+00551     rpmSetVerbosity(quiet ? RPMLOG_WARNING : RPMLOG_INFO);
+00552 
+00553     if (rpmcliPipeOutput && initPipe())
+00554         exit(EXIT_FAILURE);
+00555         
+00556     ts = rpmtsCreate();
+00557     (void) rpmtsSetRootDir(ts, rpmcliRootDir);
+00558     switch (bigMode) {
+00559     case MODE_REBUILD:
+00560     case MODE_RECOMPILE:
+00561         ba->buildAmount =
+00562             RPMBUILD_PREP | RPMBUILD_BUILD | RPMBUILD_INSTALL | RPMBUILD_CHECK;
+00563         if (bigMode == MODE_REBUILD) {
+00564             ba->buildAmount |= RPMBUILD_PACKAGEBINARY;
+00565             ba->buildAmount |= RPMBUILD_RMSOURCE;
+00566             ba->buildAmount |= RPMBUILD_RMSPEC;
+00567             ba->buildAmount |= RPMBUILD_CLEAN;
+00568             ba->buildAmount |= RPMBUILD_RMBUILD;
+00569         }
+00570 
+00571         while ((pkg = poptGetArg(optCon))) {
+00572             char * specFile = NULL;
+00573 
+00574             ba->cookie = NULL;
+00575             ec = rpmInstallSource(ts, pkg, &specFile, &ba->cookie);
+00576             if (ec == 0) {
+00577                 ba->rootdir = rpmcliRootDir;
+00578                 ec = build(ts, specFile, ba, rpmcliRcfile);
+00579             }
+00580             ba->cookie = _free(ba->cookie);
+00581             specFile = _free(specFile);
+00582 
+00583             if (ec)
+00584                 break;
+00585         }
+00586         break;
+00587     case MODE_BUILD:
+00588     case MODE_TARBUILD:
+00589         switch (buildChar) {
+00590         case 'a':
+00591             ba->buildAmount |= RPMBUILD_PACKAGESOURCE;
+00592         case 'b':
+00593             ba->buildAmount |= RPMBUILD_PACKAGEBINARY;
+00594             ba->buildAmount |= RPMBUILD_CLEAN;
+00595             if ((buildChar == 'b') && shortCircuit)
+00596                 break;
+00597         case 'i':
+00598             ba->buildAmount |= RPMBUILD_INSTALL;
+00599             ba->buildAmount |= RPMBUILD_CHECK;
+00600             if ((buildChar == 'i') && shortCircuit)
+00601                 break;
+00602         case 'c':
+00603             ba->buildAmount |= RPMBUILD_BUILD;
+00604             if ((buildChar == 'c') && shortCircuit)
+00605                 break;
+00606         case 'p':
+00607             ba->buildAmount |= RPMBUILD_PREP;
+00608             break;
+00609             
+00610         case 'l':
+00611             ba->buildAmount |= RPMBUILD_FILECHECK;
+00612             break;
+00613         case 's':
+00614             ba->buildAmount |= RPMBUILD_PACKAGESOURCE;
+00615             break;
+00616         }
+00617 
+00618         while ((pkg = poptGetArg(optCon))) {
+00619             ba->rootdir = rpmcliRootDir;
+00620             ba->cookie = NULL;
+00621             ec = build(ts, pkg, ba, rpmcliRcfile);
+00622             if (ec)
+00623                 break;
+00624             rpmFreeMacros(NULL);
+00625             (void) rpmReadConfigFiles(rpmcliRcfile, NULL);
+00626         }
+00627         break;
+00628     }
+00629 
+00630     ts = rpmtsFree(ts);
+00631     finishPipe();
+00632     ba->buildRootOverride = _free(ba->buildRootOverride);
+00633     build_targets = argvFree(build_targets);
+00634 
+00635     rpmcliFini(optCon);
+00636 
+00637     return RETVAL(ec);
+00638 }
+
+
+ + + diff --git a/doc/librpm/html/rpmbuild_8h.html b/doc/librpm/html/rpmbuild_8h.html new file mode 100644 index 0000000..ca3fb92 --- /dev/null +++ b/doc/librpm/html/rpmbuild_8h.html @@ -0,0 +1,153 @@ + + + + +rpm: rpmbuild.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmbuild.h File Reference
+
+
+ +

This is the *only* module users of librpmbuild should need to include. +More...

+
#include <rpm/rpmcli.h>
+#include <rpm/rpmds.h>
+#include <rpm/rpmspec.h>
+
+Include dependency graph for rpmbuild.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  rpmBuildArguments_s
 Describe build request. More...

+Typedefs

typedef rpmFlags rpmBuildFlags
typedef rpmFlags rpmBuildPkgFlags
typedef struct
+rpmBuildArguments_s
BTA_t

+Enumerations

enum  rpmBuildFlags_e {
+  RPMBUILD_NONE = 0, +RPMBUILD_PREP = (1 << 0), +RPMBUILD_BUILD = (1 << 1), +RPMBUILD_INSTALL = (1 << 2), +
+  RPMBUILD_CHECK = (1 << 3), +RPMBUILD_CLEAN = (1 << 4), +RPMBUILD_FILECHECK = (1 << 5), +RPMBUILD_PACKAGESOURCE = (1 << 6), +
+  RPMBUILD_PACKAGEBINARY = (1 << 7), +RPMBUILD_RMSOURCE = (1 << 8), +RPMBUILD_RMBUILD = (1 << 9), +RPMBUILD_STRINGBUF = (1 << 10), +
+  RPMBUILD_RMSPEC = (1 << 11), +RPMBUILD_NOBUILD = (1 << 31) +
+ }
 Bit(s) to control rpmSpecBuild() operation. More...
enum  rpmBuildPkgFlags_e { RPMBUILD_PKG_NONE = 0, +RPMBUILD_PKG_NODIRTOKENS = (1 << 0) + }
 Bit(s) to control package generation. More...

+Functions

rpmSpec rpmSpecParse (const char *specFile, rpmSpecFlags flags, const char *buildRoot)
 Parse spec file into spec control structure.
Header rpmSpecSourceHeader (rpmSpec spec)
 Return the headers of the SRPM that would be built from the spec file.
rpmps rpmSpecCheckDeps (rpmts ts, rpmSpec spec)
 Verify build depencies of a spec against.
rpmds rpmSpecDS (rpmSpec spec, rpmTagVal tag)
 Retrieve build dependency set from spec.
rpmRC rpmSpecBuild (rpmSpec spec, BTA_t buildArgs)
 Spec build stages state machine driver.
+

Detailed Description

+

This is the *only* module users of librpmbuild should need to include.

+ +

Definition in file rpmbuild.h.

+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmBuildFlags
+
+
+ +

Definition at line 38 of file rpmbuild.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags rpmBuildPkgFlags
+
+
+ +

Definition at line 48 of file rpmbuild.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmbuild_8h__incl.map b/doc/librpm/html/rpmbuild_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmbuild_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmbuild_8h__incl.md5 b/doc/librpm/html/rpmbuild_8h__incl.md5 new file mode 100644 index 0000000..e303e8a --- /dev/null +++ b/doc/librpm/html/rpmbuild_8h__incl.md5 @@ -0,0 +1 @@ +c3fde270638d1ab3fe7286fdcf3df76c \ No newline at end of file diff --git a/doc/librpm/html/rpmbuild_8h__incl.png b/doc/librpm/html/rpmbuild_8h__incl.png new file mode 100644 index 0000000..48e0013 Binary files /dev/null and b/doc/librpm/html/rpmbuild_8h__incl.png differ diff --git a/doc/librpm/html/rpmbuild_8h_source.html b/doc/librpm/html/rpmbuild_8h_source.html new file mode 100644 index 0000000..fb32544 --- /dev/null +++ b/doc/librpm/html/rpmbuild_8h_source.html @@ -0,0 +1,112 @@ + + + + +rpm: rpmbuild.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmbuild.h
+
+
+Go to the documentation of this file.
00001 #ifndef _H_RPMBUILD_
+00002 #define _H_RPMBUILD_
+00003 
+00009 #include <rpm/rpmcli.h>
+00010 #include <rpm/rpmds.h>
+00011 #include <rpm/rpmspec.h>
+00012 
+00013 #ifdef __cplusplus
+00014 extern "C" {
+00015 #endif
+00016 
+00020 enum rpmBuildFlags_e {
+00021     RPMBUILD_NONE       = 0,
+00022     RPMBUILD_PREP       = (1 <<  0),    
+00023     RPMBUILD_BUILD      = (1 <<  1),    
+00024     RPMBUILD_INSTALL    = (1 <<  2),    
+00025     RPMBUILD_CHECK      = (1 <<  3),    
+00026     RPMBUILD_CLEAN      = (1 <<  4),    
+00027     RPMBUILD_FILECHECK  = (1 <<  5),    
+00028     RPMBUILD_PACKAGESOURCE = (1 <<  6), 
+00029     RPMBUILD_PACKAGEBINARY = (1 <<  7), 
+00030     RPMBUILD_RMSOURCE   = (1 <<  8),    
+00031     RPMBUILD_RMBUILD    = (1 <<  9),    
+00032     RPMBUILD_STRINGBUF  = (1 << 10),    
+00033     RPMBUILD_RMSPEC     = (1 << 11),    
+00035     RPMBUILD_NOBUILD    = (1 << 31)     
+00036 };
+00037 
+00038 typedef rpmFlags rpmBuildFlags;
+00039 
+00043 enum rpmBuildPkgFlags_e {
+00044     RPMBUILD_PKG_NONE           = 0,
+00045     RPMBUILD_PKG_NODIRTOKENS    = (1 << 0), 
+00046 };
+00047 
+00048 typedef rpmFlags rpmBuildPkgFlags;
+00049 
+00053 struct rpmBuildArguments_s {
+00054     rpmBuildPkgFlags pkgFlags;  
+00055     rpmBuildFlags buildAmount;  
+00056     char * buildRootOverride;   
+00057     char * cookie;              
+00058     const char * rootdir;
+00059 };
+00060 
+00063 typedef struct rpmBuildArguments_s *    BTA_t;
+00064 
+00074 rpmSpec rpmSpecParse(const char *specFile, rpmSpecFlags flags,
+00075                      const char *buildRoot);
+00076 
+00082 Header rpmSpecSourceHeader(rpmSpec spec);
+00083 
+00090 rpmps rpmSpecCheckDeps(rpmts ts, rpmSpec spec);
+00091 
+00098 rpmds rpmSpecDS(rpmSpec spec, rpmTagVal tag);
+00099 
+00106 rpmRC rpmSpecBuild(rpmSpec spec, BTA_t buildArgs);
+00107 
+00108 #ifdef __cplusplus
+00109 }
+00110 #endif
+00111 
+00112 #endif  /* _H_RPMBUILD_ */
+
+
+ + + diff --git a/doc/librpm/html/rpmcallback_8h.html b/doc/librpm/html/rpmcallback_8h.html new file mode 100644 index 0000000..3f37eba --- /dev/null +++ b/doc/librpm/html/rpmcallback_8h.html @@ -0,0 +1,181 @@ + + + + +rpm: rpmcallback.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmcallback.h File Reference
+
+
+
#include <rpm/rpmtypes.h>
+
+Include dependency graph for rpmcallback.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + +

+Typedefs

typedef enum rpmCallbackType_e rpmCallbackType
 Bit(s) to identify progress callbacks.
typedef void *(* rpmCallbackFunction )(const void *h, const rpmCallbackType what, const rpm_loff_t amount, const rpm_loff_t total, fnpyKey key, rpmCallbackData data)

+Enumerations

enum  rpmCallbackType_e {
+  RPMCALLBACK_UNKNOWN = 0, +RPMCALLBACK_INST_PROGRESS = (1 << 0), +RPMCALLBACK_INST_START = (1 << 1), +RPMCALLBACK_INST_OPEN_FILE = (1 << 2), +
+  RPMCALLBACK_INST_CLOSE_FILE = (1 << 3), +RPMCALLBACK_TRANS_PROGRESS = (1 << 4), +RPMCALLBACK_TRANS_START = (1 << 5), +RPMCALLBACK_TRANS_STOP = (1 << 6), +
+  RPMCALLBACK_UNINST_PROGRESS = (1 << 7), +RPMCALLBACK_UNINST_START = (1 << 8), +RPMCALLBACK_UNINST_STOP = (1 << 9), +RPMCALLBACK_REPACKAGE_PROGRESS = (1 << 10), +
+  RPMCALLBACK_REPACKAGE_START = (1 << 11), +RPMCALLBACK_REPACKAGE_STOP = (1 << 12), +RPMCALLBACK_UNPACK_ERROR = (1 << 13), +RPMCALLBACK_CPIO_ERROR = (1 << 14), +
+  RPMCALLBACK_SCRIPT_ERROR = (1 << 15) +
+ }
 Bit(s) to identify progress callbacks. More...
+

Typedef Documentation

+ +
+
+ + + + +
typedef void*(* rpmCallbackFunction)(const void *h, const rpmCallbackType what, const rpm_loff_t amount, const rpm_loff_t total, fnpyKey key, rpmCallbackData data)
+
+
+ +

Definition at line 36 of file rpmcallback.h.

+ +
+
+ +
+
+ + + + +
typedef enum rpmCallbackType_e rpmCallbackType
+
+
+ +

Bit(s) to identify progress callbacks.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmCallbackType_e
+
+
+ +

Bit(s) to identify progress callbacks.

+
Enumerator:
+ + + + + + + + + + + + + + + + + +
RPMCALLBACK_UNKNOWN  +
RPMCALLBACK_INST_PROGRESS  +
RPMCALLBACK_INST_START  +
RPMCALLBACK_INST_OPEN_FILE  +
RPMCALLBACK_INST_CLOSE_FILE  +
RPMCALLBACK_TRANS_PROGRESS  +
RPMCALLBACK_TRANS_START  +
RPMCALLBACK_TRANS_STOP  +
RPMCALLBACK_UNINST_PROGRESS  +
RPMCALLBACK_UNINST_START  +
RPMCALLBACK_UNINST_STOP  +
RPMCALLBACK_REPACKAGE_PROGRESS  +
RPMCALLBACK_REPACKAGE_START  +
RPMCALLBACK_REPACKAGE_STOP  +
RPMCALLBACK_UNPACK_ERROR  +
RPMCALLBACK_CPIO_ERROR  +
RPMCALLBACK_SCRIPT_ERROR  +
+
+
+ +

Definition at line 13 of file rpmcallback.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmcallback_8h__incl.map b/doc/librpm/html/rpmcallback_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmcallback_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmcallback_8h__incl.md5 b/doc/librpm/html/rpmcallback_8h__incl.md5 new file mode 100644 index 0000000..6bb3890 --- /dev/null +++ b/doc/librpm/html/rpmcallback_8h__incl.md5 @@ -0,0 +1 @@ +8fd2bff6dfb5de200c0f021fd981b6a6 \ No newline at end of file diff --git a/doc/librpm/html/rpmcallback_8h__incl.png b/doc/librpm/html/rpmcallback_8h__incl.png new file mode 100644 index 0000000..08f8586 Binary files /dev/null and b/doc/librpm/html/rpmcallback_8h__incl.png differ diff --git a/doc/librpm/html/rpmcallback_8h_source.html b/doc/librpm/html/rpmcallback_8h_source.html new file mode 100644 index 0000000..a608567 --- /dev/null +++ b/doc/librpm/html/rpmcallback_8h_source.html @@ -0,0 +1,91 @@ + + + + +rpm: rpmcallback.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmcallback.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMCALLBACK_H
+00002 #define _RPMCALLBACK_H
+00003 
+00004 #include <rpm/rpmtypes.h>
+00005 
+00006 #ifdef __cplusplus
+00007 extern "C" {
+00008 #endif
+00009 
+00013 typedef enum rpmCallbackType_e {
+00014     RPMCALLBACK_UNKNOWN         = 0,
+00015     RPMCALLBACK_INST_PROGRESS   = (1 <<  0),
+00016     RPMCALLBACK_INST_START      = (1 <<  1),
+00017     RPMCALLBACK_INST_OPEN_FILE  = (1 <<  2),
+00018     RPMCALLBACK_INST_CLOSE_FILE = (1 <<  3),
+00019     RPMCALLBACK_TRANS_PROGRESS  = (1 <<  4),
+00020     RPMCALLBACK_TRANS_START     = (1 <<  5),
+00021     RPMCALLBACK_TRANS_STOP      = (1 <<  6),
+00022     RPMCALLBACK_UNINST_PROGRESS = (1 <<  7),
+00023     RPMCALLBACK_UNINST_START    = (1 <<  8),
+00024     RPMCALLBACK_UNINST_STOP     = (1 <<  9),
+00025     RPMCALLBACK_REPACKAGE_PROGRESS = (1 << 10), /* obsolete, unused */
+00026     RPMCALLBACK_REPACKAGE_START = (1 << 11),    /* obsolete, unused */
+00027     RPMCALLBACK_REPACKAGE_STOP  = (1 << 12),    /* obsolete, unused */
+00028     RPMCALLBACK_UNPACK_ERROR    = (1 << 13),
+00029     RPMCALLBACK_CPIO_ERROR      = (1 << 14),
+00030     RPMCALLBACK_SCRIPT_ERROR    = (1 << 15)
+00031 } rpmCallbackType;
+00032 
+00035 typedef void * (*rpmCallbackFunction)
+00036                 (const void * h, 
+00037                 const rpmCallbackType what, 
+00038                 const rpm_loff_t amount, 
+00039                 const rpm_loff_t total,
+00040                 fnpyKey key,
+00041                 rpmCallbackData data);
+00042 
+00043 #ifdef __cplusplus
+00044 }
+00045 #endif
+00046 
+00047 #endif /* _RPMCALLBACK_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmcli_8h.html b/doc/librpm/html/rpmcli_8h.html new file mode 100644 index 0000000..8457bab --- /dev/null +++ b/doc/librpm/html/rpmcli_8h.html @@ -0,0 +1,561 @@ + + + + +rpm: rpmcli.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmcli.h File Reference
+
+
+
#include <popt.h>
+#include <rpm/rpmlib.h>
+#include <rpm/rpmurl.h>
+#include <rpm/rpmmacro.h>
+#include <rpm/rpmcallback.h>
+#include <rpm/rpmts.h>
+#include <rpm/rpmfi.h>
+#include <rpm/rpmvf.h>
+#include <rpm/argv.h>
+
+Include dependency graph for rpmcli.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  rpmQVKArguments_s
 Describe query/verify/signature command line operation. More...
struct  rpmInstallArguments_s
 Describe database command line requests. More...

+Defines

#define RPMCLI_POPT_NODEPS   -1025
 Common/global popt tokens used for command line option tables.
#define RPMCLI_POPT_FORCE   -1026
#define RPMCLI_POPT_NOMD5   -1027
#define RPMCLI_POPT_NOFILEDIGEST   -1027
#define RPMCLI_POPT_NOSCRIPTS   -1028
#define RPMCLI_POPT_NOSIGNATURE   -1029
#define RPMCLI_POPT_NODIGEST   -1030
#define RPMCLI_POPT_NOHDRCHK   -1031
#define RPMCLI_POPT_NOCONTEXTS   -1032

+Functions

poptContext rpmcliInit (int argc, char *const argv[], struct poptOption *optionsTable)
 Initialize most everything needed by an rpm CLI executable context.
void rpmcliConfigured (void)
 Make sure that rpm configuration has been read.
poptContext rpmcliFini (poptContext optCon)
 Destroy most everything needed by an rpm CLI executable context.
RPMK
int rpmcliImportPubkeys (rpmts ts, ARGV_const_t argv)
 Import public key(s) to rpm keyring.
int rpmcliVerifySignatures (rpmts ts, ARGV_const_t argv)
 Verify package signatures.

+Variables

struct poptOption rpmcliAllPoptTable []
 Popt option table for options shared by all modes and executables.
const char * rpmcliPipeOutput
const char * rpmcliRcfile
const char * rpmcliRootDir

+RPMQV

#define _QUERY_FOR_BITS
enum  rpmQVSources_e {
+  RPMQV_PACKAGE = 0, +RPMQV_PATH, +RPMQV_ALL, +RPMQV_RPM, +
+  RPMQV_GROUP, +RPMQV_WHATPROVIDES, +RPMQV_WHATREQUIRES, +RPMQV_TRIGGEREDBY, +
+  RPMQV_DBOFFSET, +RPMQV_SPECRPMS, +RPMQV_SPECFILE = RPMQV_SPECRPMS, +RPMQV_PKGID, +
+  RPMQV_HDRID, +RPMQV_TID, +RPMQV_SPECSRPM +
+ }
 Query/Verify argument qualifiers. More...
enum  rpmQueryFlags_e {
+  QUERY_FOR_DEFAULT = 0, +QUERY_MD5 = (1 << 0), +QUERY_FILEDIGEST = (1 << 0), +QUERY_SIZE = (1 << 1), +
+  QUERY_LINKTO = (1 << 2), +QUERY_USER = (1 << 3), +QUERY_GROUP = (1 << 4), +QUERY_MTIME = (1 << 5), +
+  QUERY_MODE = (1 << 6), +QUERY_RDEV = (1 << 7), +QUERY_CONTEXTS = (1 << 15), +QUERY_FILES = (1 << 16), +
+  QUERY_DEPS = (1 << 17), +QUERY_SCRIPT = (1 << 18), +QUERY_DIGEST = (1 << 19), +QUERY_SIGNATURE = (1 << 20), +
+  QUERY_PATCHES = (1 << 21), +QUERY_HDRCHK = (1 << 22), +QUERY_FOR_LIST = (1 << 23), +QUERY_FOR_STATE = (1 << 24), +
+  QUERY_FOR_DOCS = (1 << 25), +QUERY_FOR_CONFIG = (1 << 26), +QUERY_FOR_DUMPFILES = (1 << 27) +
+ }
 Bit(s) to control rpmQuery() operation, stored in qva_flags. More...
typedef rpmFlags rpmQVSources
typedef rpmFlags rpmQueryFlags
typedef struct rpmQVKArguments_sQVA_t
typedef int(* QVF_t )(QVA_t qva, rpmts ts, Header h)
 Function to display iterator matches.
typedef int(* QSpecF_t )(rpmts ts, QVA_t qva, const char *arg)
 Function to query spec file.
rpmQueryFlags rpmcliQueryFlags
 Bit(s) from common command line options.
struct rpmQVKArguments_s rpmQVKArgs
struct poptOption rpmQVSourcePoptTable []
struct poptOption rpmQueryPoptTable []
struct poptOption rpmVerifyPoptTable []
void rpmDisplayQueryTags (FILE *fp)
 Display list of tags that can be used in --queryformat.
int showQueryPackage (QVA_t qva, rpmts ts, Header h)
 Display results of package query.
int rpmcliArgIter (rpmts ts, QVA_t qva, ARGV_const_t argv)
 Iterate over query/verify arg list.
int rpmcliQuery (rpmts ts, QVA_t qva, ARGV_const_t argv)
 Display package information.
int showVerifyPackage (QVA_t qva, rpmts ts, Header h)
 Display results of package verify.
int rpmVerifySignatures (QVA_t qva, rpmts ts, FD_t fd, const char *fn)
 Check package and header signatures.
int rpmcliVerify (rpmts ts, QVA_t qva, ARGV_const_t argv)
 Verify package install.

+RPMEIU

#define UNINSTALL_NONE   INSTALL_NONE
 Bit(s) to control rpmErase() operation.
#define UNINSTALL_NODEPS   INSTALL_NODEPS
#define UNINSTALL_ALLMATCHES   INSTALL_ALLMATCHES
enum  rpmInstallFlags_e {
+  INSTALL_NONE = 0, +INSTALL_PERCENT = (1 << 0), +INSTALL_HASH = (1 << 1), +INSTALL_NODEPS = (1 << 2), +
+  INSTALL_NOORDER = (1 << 3), +INSTALL_LABEL = (1 << 4), +INSTALL_UPGRADE = (1 << 5), +INSTALL_FRESHEN = (1 << 6), +
+  INSTALL_INSTALL = (1 << 7), +INSTALL_ERASE = (1 << 8), +INSTALL_ALLMATCHES = (1 << 9) +
+ }
 Bit(s) to control rpmInstall() operation. More...
typedef rpmFlags rpmInstallFlags
int rpmcliPackagesTotal
int rpmcliHashesCurrent
int rpmcliHashesTotal
int rpmcliProgressCurrent
int rpmcliProgressTotal
struct rpmInstallArguments_s rpmIArgs
struct poptOption rpmInstallPoptTable []
void * rpmShowProgress (const void *arg, const rpmCallbackType what, const rpm_loff_t amount, const rpm_loff_t total, fnpyKey key, void *data)
 The rpm CLI generic transaction callback handler.
int rpmInstallSource (rpmts ts, const char *arg, char **specFilePtr, char **cookie)
 Install source rpm package.
int rpmInstall (rpmts ts, struct rpmInstallArguments_s *ia, ARGV_t fileArgv)
 Install/upgrade/freshen binary rpm package.
int rpmErase (rpmts ts, struct rpmInstallArguments_s *ia, ARGV_const_t argv)
 Erase binary rpm package.
+

Detailed Description

+
+

Definition in file rpmcli.h.

+

Define Documentation

+ +
+
+ + + + +
#define _QUERY_FOR_BITS
+
+ +
+ +
+
+ + + + +
#define RPMCLI_POPT_FORCE   -1026
+
+
+ +

Definition at line 62 of file rpmcli.h.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
#define RPMCLI_POPT_NOCONTEXTS   -1032
+
+
+ +

Definition at line 69 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
#define RPMCLI_POPT_NODEPS   -1025
+
+
+ +

Common/global popt tokens used for command line option tables.

+ +

Definition at line 61 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
#define RPMCLI_POPT_NODIGEST   -1030
+
+
+ +

Definition at line 67 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
#define RPMCLI_POPT_NOFILEDIGEST   -1027
+
+
+ +

Definition at line 64 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
#define RPMCLI_POPT_NOHDRCHK   -1031
+
+
+ +

Definition at line 68 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
#define RPMCLI_POPT_NOMD5   -1027
+
+
+ +

Definition at line 63 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
#define RPMCLI_POPT_NOSCRIPTS   -1028
+
+
+ +

Definition at line 65 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
#define RPMCLI_POPT_NOSIGNATURE   -1029
+
+
+ +

Definition at line 66 of file rpmcli.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmQueryFlags
+
+
+ +

Definition at line 129 of file rpmcli.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags rpmQVSources
+
+
+ +

Definition at line 96 of file rpmcli.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmcliImportPubkeys (rpmts ts,
ARGV_const_t argv 
)
+
+
+ +

Import public key(s) to rpm keyring.

+
Parameters:
+ + + +
tstransaction set
argvarray of pubkey path arguments (NULL terminated)
+
+
+
Returns:
0 on success
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmVerifySignatures (QVA_t qva,
rpmts ts,
FD_t fd,
const char * fn 
)
+
+
+ +

Check package and header signatures.

+
Parameters:
+ + + + + +
qvaparsed query/verify options
tstransaction set
fdpackage file handle
fnpackage file name
+
+
+
Returns:
0 on success, 1 on failure
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
const char* rpmcliPipeOutput
+
+
+ +

Referenced by initPipe(), and main().

+ +
+
+ +
+
+ + + + +
const char* rpmcliRcfile
+
+
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
const char* rpmcliRootDir
+
+
+ +

Referenced by main().

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmcli_8h__incl.map b/doc/librpm/html/rpmcli_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmcli_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmcli_8h__incl.md5 b/doc/librpm/html/rpmcli_8h__incl.md5 new file mode 100644 index 0000000..c3ea3c7 --- /dev/null +++ b/doc/librpm/html/rpmcli_8h__incl.md5 @@ -0,0 +1 @@ +c7cfa3d5cbec29f812ae732ca90f0543 \ No newline at end of file diff --git a/doc/librpm/html/rpmcli_8h__incl.png b/doc/librpm/html/rpmcli_8h__incl.png new file mode 100644 index 0000000..7fce666 Binary files /dev/null and b/doc/librpm/html/rpmcli_8h__incl.png differ diff --git a/doc/librpm/html/rpmcli_8h_source.html b/doc/librpm/html/rpmcli_8h_source.html new file mode 100644 index 0000000..f8f0cd3 --- /dev/null +++ b/doc/librpm/html/rpmcli_8h_source.html @@ -0,0 +1,258 @@ + + + + +rpm: rpmcli.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmcli.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMCLI
+00002 #define H_RPMCLI
+00003 
+00008 #include <popt.h>
+00009 
+00010 #include <rpm/rpmlib.h>
+00011 #include <rpm/rpmurl.h>
+00012 #include <rpm/rpmmacro.h>
+00013 #include <rpm/rpmcallback.h>
+00014 #include <rpm/rpmts.h>
+00015 #include <rpm/rpmfi.h>
+00016 #include <rpm/rpmvf.h>
+00017 #include <rpm/argv.h>
+00018 
+00019 #ifdef __cplusplus
+00020 extern "C" {
+00021 #endif
+00022 
+00026 extern struct poptOption                rpmcliAllPoptTable[];
+00027 
+00028 extern const char * rpmcliPipeOutput;
+00029 
+00030 extern const char * rpmcliRcfile;
+00031 
+00032 extern const char * rpmcliRootDir;
+00033 
+00041 poptContext
+00042 rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable);
+00043 
+00048 void rpmcliConfigured(void);
+00049 
+00055 poptContext
+00056 rpmcliFini(poptContext optCon);
+00057 
+00061 #define RPMCLI_POPT_NODEPS              -1025
+00062 #define RPMCLI_POPT_FORCE               -1026
+00063 #define RPMCLI_POPT_NOMD5               -1027
+00064 #define RPMCLI_POPT_NOFILEDIGEST        -1027   /* same as obsolete RPMCLI_POPT_NOMD5 */
+00065 #define RPMCLI_POPT_NOSCRIPTS           -1028
+00066 #define RPMCLI_POPT_NOSIGNATURE         -1029
+00067 #define RPMCLI_POPT_NODIGEST            -1030
+00068 #define RPMCLI_POPT_NOHDRCHK            -1031
+00069 #define RPMCLI_POPT_NOCONTEXTS          -1032
+00070 
+00071 /* ==================================================================== */
+00078 enum rpmQVSources_e {
+00079     RPMQV_PACKAGE = 0,  
+00080     RPMQV_PATH,         
+00081     RPMQV_ALL,          
+00082     RPMQV_RPM,          
+00083     RPMQV_GROUP,        
+00084     RPMQV_WHATPROVIDES, 
+00085     RPMQV_WHATREQUIRES, 
+00086     RPMQV_TRIGGEREDBY,  
+00087     RPMQV_DBOFFSET,     
+00088     RPMQV_SPECRPMS,     
+00089     RPMQV_SPECFILE = RPMQV_SPECRPMS, 
+00090     RPMQV_PKGID,        
+00091     RPMQV_HDRID,        
+00092     RPMQV_TID,          
+00093     RPMQV_SPECSRPM,     
+00094 };
+00095 
+00096 typedef rpmFlags rpmQVSources;
+00097 
+00102 enum rpmQueryFlags_e {
+00103     QUERY_FOR_DEFAULT   = 0,            
+00104     QUERY_MD5           = (1 << 0),     
+00105     QUERY_FILEDIGEST    = (1 << 0),     
+00106     QUERY_SIZE          = (1 << 1),     
+00107     QUERY_LINKTO        = (1 << 2),     
+00108     QUERY_USER          = (1 << 3),     
+00109     QUERY_GROUP         = (1 << 4),     
+00110     QUERY_MTIME         = (1 << 5),     
+00111     QUERY_MODE          = (1 << 6),     
+00112     QUERY_RDEV          = (1 << 7),     
+00113         /* bits 8-14 unused, reserved for rpmVerifyAttrs */
+00114     QUERY_CONTEXTS      = (1 << 15),    
+00115     QUERY_FILES         = (1 << 16),    
+00116     QUERY_DEPS          = (1 << 17),    
+00117     QUERY_SCRIPT        = (1 << 18),    
+00118     QUERY_DIGEST        = (1 << 19),    
+00119     QUERY_SIGNATURE     = (1 << 20),    
+00120     QUERY_PATCHES       = (1 << 21),    
+00121     QUERY_HDRCHK        = (1 << 22),    
+00122     QUERY_FOR_LIST      = (1 << 23),    
+00123     QUERY_FOR_STATE     = (1 << 24),    
+00124     QUERY_FOR_DOCS      = (1 << 25),    
+00125     QUERY_FOR_CONFIG    = (1 << 26),    
+00126     QUERY_FOR_DUMPFILES = (1 << 27)     
+00127 };
+00128 
+00129 typedef rpmFlags rpmQueryFlags;
+00130 
+00131 #define _QUERY_FOR_BITS \
+00132    (QUERY_FOR_LIST|QUERY_FOR_STATE|QUERY_FOR_DOCS|QUERY_FOR_CONFIG|\
+00133     QUERY_FOR_DUMPFILES)
+00134 
+00138 extern rpmQueryFlags rpmcliQueryFlags;
+00139 
+00142 typedef struct rpmQVKArguments_s * QVA_t;
+00143 
+00152 typedef int (*QVF_t) (QVA_t qva, rpmts ts, Header h);
+00153 
+00162 typedef int (*QSpecF_t) (rpmts ts, QVA_t qva, const char * arg);
+00163 
+00167 struct rpmQVKArguments_s {
+00168     rpmQVSources qva_source;    
+00169     int         qva_sourceCount;
+00170     rpmQueryFlags qva_flags;    
+00171     rpmfileAttrs qva_fflags;    
+00173     QVF_t qva_showPackage;      
+00174     QSpecF_t qva_specQuery;     
+00175     char * qva_queryFormat;     
+00176     char        qva_mode;
+00184 };
+00185 
+00188 extern struct rpmQVKArguments_s rpmQVKArgs;
+00189 
+00192 extern struct poptOption rpmQVSourcePoptTable[];
+00193 
+00196 extern struct poptOption rpmQueryPoptTable[];
+00197 
+00200 extern struct poptOption rpmVerifyPoptTable[];
+00201 
+00206 void rpmDisplayQueryTags(FILE * fp);
+00207 
+00216 int showQueryPackage(QVA_t qva, rpmts ts, Header h);
+00217 
+00225 int rpmcliArgIter(rpmts ts, QVA_t qva, ARGV_const_t argv);
+00226 
+00235 int rpmcliQuery(rpmts ts, QVA_t qva, ARGV_const_t argv);
+00236 
+00244 int showVerifyPackage(QVA_t qva, rpmts ts, Header h);
+00245 
+00254 int rpmVerifySignatures(QVA_t qva, rpmts ts, FD_t fd, const char * fn);
+00255 
+00264 int rpmcliVerify(rpmts ts, QVA_t qva, ARGV_const_t argv);
+00265 
+00266 /* ==================================================================== */
+00268 /* --- install/upgrade/erase modes */
+00269 
+00273 enum rpmInstallFlags_e {
+00274     INSTALL_NONE        = 0,
+00275     INSTALL_PERCENT     = (1 << 0),     
+00276     INSTALL_HASH        = (1 << 1),     
+00277     INSTALL_NODEPS      = (1 << 2),     
+00278     INSTALL_NOORDER     = (1 << 3),     
+00279     INSTALL_LABEL       = (1 << 4),     
+00280     INSTALL_UPGRADE     = (1 << 5),     
+00281     INSTALL_FRESHEN     = (1 << 6),     
+00282     INSTALL_INSTALL     = (1 << 7),     
+00283     INSTALL_ERASE       = (1 << 8),     
+00284     INSTALL_ALLMATCHES  = (1 << 9)      
+00285 };
+00286 
+00287 typedef rpmFlags rpmInstallFlags;
+00288 
+00292 #define UNINSTALL_NONE INSTALL_NONE
+00293 #define UNINSTALL_NODEPS INSTALL_NODEPS
+00294 #define UNINSTALL_ALLMATCHES INSTALL_ALLMATCHES
+00295 
+00296 extern int rpmcliPackagesTotal;
+00297 extern int rpmcliHashesCurrent;
+00298 extern int rpmcliHashesTotal;
+00299 extern int rpmcliProgressCurrent;
+00300 extern int rpmcliProgressTotal;
+00301 
+00316 void * rpmShowProgress(const void * arg,
+00317                 const rpmCallbackType what,
+00318                 const rpm_loff_t amount,
+00319                 const rpm_loff_t total,
+00320                 fnpyKey key,
+00321                 void * data);
+00322 
+00331 int rpmInstallSource(rpmts ts, const char * arg,
+00332                 char ** specFilePtr,
+00333                 char ** cookie);
+00334 
+00335 
+00339 struct rpmInstallArguments_s {
+00340     rpmtransFlags transFlags;
+00341     rpmprobFilterFlags probFilter;
+00342     rpmInstallFlags installInterfaceFlags;
+00343     int numRelocations;
+00344     int noDeps;
+00345     int incldocs;
+00346     rpmRelocation * relocations;
+00347     char * prefix;
+00348 };
+00349 
+00359 int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_t fileArgv);
+00360 
+00369 int rpmErase(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_const_t argv);
+00370 
+00373 extern struct rpmInstallArguments_s rpmIArgs;
+00374 
+00377 extern struct poptOption rpmInstallPoptTable[];
+00378 
+00379 /* ==================================================================== */
+00387 int rpmcliImportPubkeys(rpmts ts, ARGV_const_t argv);
+00388 
+00395 int rpmcliVerifySignatures(rpmts ts, ARGV_const_t argv);
+00396 
+00397 #ifdef __cplusplus
+00398 }
+00399 #endif
+00400 
+00401 #endif  /* H_RPMCLI */
+
+
+ + + diff --git a/doc/librpm/html/rpmdb_8c.html b/doc/librpm/html/rpmdb_8c.html new file mode 100644 index 0000000..c7e04a7 --- /dev/null +++ b/doc/librpm/html/rpmdb_8c.html @@ -0,0 +1,279 @@ + + + + +rpm: rpmdb.c File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmdb.c File Reference
+
+
+
#include "system.h"
+#include <popt.h>
+#include <rpm/rpmcli.h>
+#include "cliutils.h"
+#include "debug.h"
+
+Include dependency graph for rpmdb.c:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + + +

+Enumerations

enum  modes {
+  MODE_BUILD = (1 << 4), +MODE_REBUILD = (1 << 5), +MODE_RECOMPILE = (1 << 8), +MODE_TARBUILD = (1 << 11), +
+  MODE_INITDB = (1 << 0), +MODE_REBUILDDB = (1 << 1), +MODE_VERIFYDB = (1 << 2), +MODE_CHECKSIG = (1 << 0), +
+  MODE_IMPORTKEY = (1 << 1), +MODE_DELKEY = (1 << 2), +MODE_LISTKEY = (1 << 3), +MODE_QUERY = (1 << 0), +
+  MODE_VERIFY = (1 << 3), +MODE_ADDSIGN = (1 << 0), +MODE_RESIGN = (1 << 1), +MODE_DELSIGN = (1 << 2), +
+  MODE_UNKNOWN = 0, +MODE_QUERY = (1 << 0), +MODE_PARSE = (1 << 1) +
+ }

+Functions

int main (int argc, char *argv[])

+Variables

char ** environ = NULL
static int mode = 0
static struct poptOption dbOptsTable []
static struct poptOption optionsTable []
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum modes
+
+
+
Enumerator:
+ + + + + + + + + + + + + + + + + + + +
MODE_BUILD  +
MODE_REBUILD  +
MODE_RECOMPILE  +
MODE_TARBUILD  +
MODE_INITDB  +
MODE_REBUILDDB  +
MODE_VERIFYDB  +
MODE_CHECKSIG  +
MODE_IMPORTKEY  +
MODE_DELKEY  +
MODE_LISTKEY  +
MODE_QUERY  +
MODE_VERIFY  +
MODE_ADDSIGN  +
MODE_RESIGN  +
MODE_DELSIGN  +
MODE_UNKNOWN  +
MODE_QUERY  +
MODE_PARSE  +
+
+
+ +

Definition at line 12 of file rpmdb.c.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+ +
+

Variable Documentation

+ +
+
+ + + + +
struct poptOption dbOptsTable[] [static]
+
+
+Initial value:
 {
+    { "initdb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_INITDB,
+         "initialize database" , NULL},
+    { "rebuilddb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_REBUILDDB,
+         "rebuild database inverted lists from installed package headers" ,
+        NULL},
+    { "verifydb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR|POPT_ARGFLAG_DOC_HIDDEN),
+        &mode, MODE_VERIFYDB,  "verify database files" , NULL},
+    POPT_TABLEEND
+}
+
+

Definition at line 20 of file rpmdb.c.

+ +
+
+ +
+
+ + + + +
char** environ = NULL
+
+
+ +

Definition at line 9 of file rpmdb.c.

+ +

Referenced by checkPassPhrase().

+ +
+
+ +
+
+ + + + +
int mode = 0 [static]
+
+
+ +

Definition at line 18 of file rpmdb.c.

+ +
+
+ +
+
+ + + + +
struct poptOption optionsTable[] [static]
+
+
+Initial value:
 {
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, dbOptsTable, 0,
+         "Database options:" , NULL },
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+         "Common options for all rpm modes and executables:" , NULL },
+
+    POPT_AUTOALIAS
+    POPT_AUTOHELP
+    POPT_TABLEEND
+}
+
+

Definition at line 31 of file rpmdb.c.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmdb_8c__incl.map b/doc/librpm/html/rpmdb_8c__incl.map new file mode 100644 index 0000000..044c639 --- /dev/null +++ b/doc/librpm/html/rpmdb_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/rpmdb_8c__incl.md5 b/doc/librpm/html/rpmdb_8c__incl.md5 new file mode 100644 index 0000000..40d0d1f --- /dev/null +++ b/doc/librpm/html/rpmdb_8c__incl.md5 @@ -0,0 +1 @@ +8760a2ac6f0ebdd6b26ed1287b451081 \ No newline at end of file diff --git a/doc/librpm/html/rpmdb_8c__incl.png b/doc/librpm/html/rpmdb_8c__incl.png new file mode 100644 index 0000000..a9ad7bc Binary files /dev/null and b/doc/librpm/html/rpmdb_8c__incl.png differ diff --git a/doc/librpm/html/rpmdb_8c_source.html b/doc/librpm/html/rpmdb_8c_source.html new file mode 100644 index 0000000..f5b3416 --- /dev/null +++ b/doc/librpm/html/rpmdb_8c_source.html @@ -0,0 +1,126 @@ + + + + +rpm: rpmdb.c Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmdb.c
+
+
+Go to the documentation of this file.
00001 #include "system.h"
+00002 
+00003 #include <popt.h>
+00004 #include <rpm/rpmcli.h>
+00005 #include "cliutils.h"
+00006 #include "debug.h"
+00007 
+00008 #if !defined(__GLIBC__) && !defined(__APPLE__)
+00009 char ** environ = NULL;
+00010 #endif
+00011 
+00012 enum modes {
+00013     MODE_INITDB         = (1 << 0),
+00014     MODE_REBUILDDB      = (1 << 1),
+00015     MODE_VERIFYDB       = (1 << 2),
+00016 };
+00017 
+00018 static int mode = 0;
+00019 
+00020 static struct poptOption dbOptsTable[] = {
+00021     { "initdb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_INITDB,
+00022         N_("initialize database"), NULL},
+00023     { "rebuilddb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_REBUILDDB,
+00024         N_("rebuild database inverted lists from installed package headers"),
+00025         NULL},
+00026     { "verifydb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR|POPT_ARGFLAG_DOC_HIDDEN),
+00027         &mode, MODE_VERIFYDB, N_("verify database files"), NULL},
+00028     POPT_TABLEEND
+00029 };
+00030 
+00031 static struct poptOption optionsTable[] = {
+00032     { NULL, '\0', POPT_ARG_INCLUDE_TABLE, dbOptsTable, 0,
+00033         N_("Database options:"), NULL },
+00034     { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+00035         N_("Common options for all rpm modes and executables:"), NULL },
+00036 
+00037     POPT_AUTOALIAS
+00038     POPT_AUTOHELP
+00039     POPT_TABLEEND
+00040 };
+00041 
+00042 int main(int argc, char *argv[])
+00043 {
+00044     int ec = EXIT_FAILURE;
+00045     poptContext optCon = rpmcliInit(argc, argv, optionsTable);
+00046     rpmts ts = NULL;
+00047     
+00048     if (argc < 2 || poptPeekArg(optCon)) {
+00049         printUsage(optCon, stderr, 0);
+00050         goto exit;
+00051     }
+00052 
+00053     ts = rpmtsCreate();
+00054     rpmtsSetRootDir(ts, rpmcliRootDir);
+00055 
+00056     switch (mode) {
+00057     case MODE_INITDB:
+00058         ec = rpmtsInitDB(ts, 0644);
+00059         break;
+00060     case MODE_REBUILDDB:
+00061     {   rpmVSFlags vsflags = rpmExpandNumeric("%{_vsflags_rebuilddb}");
+00062         rpmVSFlags ovsflags = rpmtsSetVSFlags(ts, vsflags);
+00063         ec = rpmtsRebuildDB(ts);
+00064         vsflags = rpmtsSetVSFlags(ts, ovsflags);
+00065     }   break;
+00066     case MODE_VERIFYDB:
+00067         ec = rpmtsVerifyDB(ts);
+00068         break;
+00069     default:
+00070         argerror(_("only one major mode may be specified"));
+00071     }
+00072 
+00073 exit:
+00074     rpmtsFree(ts);
+00075     rpmcliFini(optCon);
+00076     return ec;
+00077 }
+
+
+ + + diff --git a/doc/librpm/html/rpmdb_8h.html b/doc/librpm/html/rpmdb_8h.html new file mode 100644 index 0000000..f8d8e4a --- /dev/null +++ b/doc/librpm/html/rpmdb_8h.html @@ -0,0 +1,224 @@ + + + + +rpm: rpmdb.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmdb.h File Reference
+
+
+ +

Access RPM indices using Berkeley DB interface(s). +More...

+
#include <rpm/rpmtypes.h>
+#include <rpm/rpmsw.h>
+
+Include dependency graph for rpmdb.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef enum rpmMireMode_e rpmMireMode
 Tag value pattern match mode.
typedef enum rpmdbOpX_e rpmdbOpX

+Enumerations

enum  rpmMireMode_e { RPMMIRE_DEFAULT = 0, +RPMMIRE_STRCMP = 1, +RPMMIRE_REGEX = 2, +RPMMIRE_GLOB = 3 + }
 Tag value pattern match mode. More...
enum  rpmdbOpX_e { RPMDB_OP_DBGET = 1, +RPMDB_OP_DBPUT = 2, +RPMDB_OP_DBDEL = 3, +RPMDB_OP_MAX = 4 + }

+Functions

rpmop rpmdbOp (rpmdb db, rpmdbOpX opx)
 Retrieve operation timestamp from rpm database.
int rpmdbOpenAll (rpmdb db)
 Open all database indices.
int rpmdbCountPackages (rpmdb db, const char *name)
 Return number of instances of package in rpm database.
unsigned int rpmdbGetIteratorOffset (rpmdbMatchIterator mi)
 Return header join key for current position of rpm database iterator.
int rpmdbGetIteratorCount (rpmdbMatchIterator mi)
 Return number of elements in rpm database iterator.
unsigned int rpmdbGetIteratorFileNum (rpmdbMatchIterator mi)
int rpmdbAppendIterator (rpmdbMatchIterator mi, const int *hdrNums, int nHdrNums)
 Append items to set of package instances to iterate.
int rpmdbSetIteratorRE (rpmdbMatchIterator mi, rpmTagVal tag, rpmMireMode mode, const char *pattern)
 Add pattern to iterator selector.
int rpmdbSetIteratorRewrite (rpmdbMatchIterator mi, int rewrite)
 Prepare iterator for lazy writes.
int rpmdbSetIteratorModified (rpmdbMatchIterator mi, int modified)
 Modify iterator to mark header for lazy write on release.
int rpmdbSetHdrChk (rpmdbMatchIterator mi, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, char **msg))
 Modify iterator to verify retrieved header blobs.
rpmdbMatchIterator rpmdbInitIterator (rpmdb db, rpmDbiTagVal rpmtag, const void *keyp, size_t keylen)
 Return database iterator.
Header rpmdbNextIterator (rpmdbMatchIterator mi)
 Return next package header from iteration.
int rpmdbCheckSignals (void)
 Check for and exit on termination signals.
int rpmdbCheckTerminate (int terminate)
 Check rpmdb signal handler for trapped signal and/or requested exit, clean up any open iterators and databases on termination condition.
rpmdbMatchIterator rpmdbFreeIterator (rpmdbMatchIterator mi)
 Destroy rpm database iterator.
rpmdbIndexIterator rpmdbIndexIteratorInit (rpmdb db, rpmDbiTag rpmtag)
 Get an iterator for an index.
int rpmdbIndexIteratorNext (rpmdbIndexIterator ii, const void **key, size_t *keylen)
 Get the next key - Warning! Keys are not zero terminated! Binary tags may even contain zero bytes.
unsigned int rpmdbIndexIteratorNumPkgs (rpmdbIndexIterator ii)
 Get number of entries for current key.
unsigned int rpmdbIndexIteratorPkgOffset (rpmdbIndexIterator ii, unsigned int nr)
 Get package offset of entry.
unsigned int rpmdbIndexIteratorTagNum (rpmdbIndexIterator ii, unsigned int nr)
 Get tag number of entry.
rpmdbIndexIterator rpmdbIndexIteratorFree (rpmdbIndexIterator ii)
 Free index iterator.
+

Detailed Description

+

Access RPM indices using Berkeley DB interface(s).

+ +

Definition in file rpmdb.h.

+

Typedef Documentation

+ +
+
+ + + + +
typedef enum rpmdbOpX_e rpmdbOpX
+
+
+ +
+
+ +
+
+ + + + +
typedef enum rpmMireMode_e rpmMireMode
+
+
+ +

Tag value pattern match mode.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmdbOpX_e
+
+
+
Enumerator:
+ + + + +
RPMDB_OP_DBGET  +
RPMDB_OP_DBPUT  +
RPMDB_OP_DBDEL  +
RPMDB_OP_MAX  +
+
+
+ +

Definition at line 26 of file rpmdb.h.

+ +
+
+ +
+
+ + + + +
enum rpmMireMode_e
+
+
+ +

Tag value pattern match mode.

+
Enumerator:
+ + + + +
RPMMIRE_DEFAULT  +

regex with \., .* and ^...$ added

+
RPMMIRE_STRCMP  +

strings using strcmp(3)

+
RPMMIRE_REGEX  +

regex(7) patterns through regcomp(3)

+
RPMMIRE_GLOB  +

glob(7) patterns through fnmatch(3)

+
+
+
+ +

Definition at line 19 of file rpmdb.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmdb_8h__incl.map b/doc/librpm/html/rpmdb_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmdb_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmdb_8h__incl.md5 b/doc/librpm/html/rpmdb_8h__incl.md5 new file mode 100644 index 0000000..7add239 --- /dev/null +++ b/doc/librpm/html/rpmdb_8h__incl.md5 @@ -0,0 +1 @@ +1ab8501fe176c389032d954811694b9e \ No newline at end of file diff --git a/doc/librpm/html/rpmdb_8h__incl.png b/doc/librpm/html/rpmdb_8h__incl.png new file mode 100644 index 0000000..752efe8 Binary files /dev/null and b/doc/librpm/html/rpmdb_8h__incl.png differ diff --git a/doc/librpm/html/rpmdb_8h_source.html b/doc/librpm/html/rpmdb_8h_source.html new file mode 100644 index 0000000..6ebc145 --- /dev/null +++ b/doc/librpm/html/rpmdb_8h_source.html @@ -0,0 +1,127 @@ + + + + +rpm: rpmdb.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmdb.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMDB
+00002 #define H_RPMDB
+00003 
+00009 #include <rpm/rpmtypes.h>
+00010 #include <rpm/rpmsw.h>
+00011 
+00012 #ifdef __cplusplus
+00013 extern "C" {
+00014 #endif
+00015 
+00019 typedef enum rpmMireMode_e {
+00020     RPMMIRE_DEFAULT     = 0,    
+00021     RPMMIRE_STRCMP      = 1,    
+00022     RPMMIRE_REGEX       = 2,    
+00023     RPMMIRE_GLOB        = 3     
+00024 } rpmMireMode;
+00025 
+00026 typedef enum rpmdbOpX_e {
+00027     RPMDB_OP_DBGET              = 1,
+00028     RPMDB_OP_DBPUT              = 2,
+00029     RPMDB_OP_DBDEL              = 3,
+00030     RPMDB_OP_MAX                = 4
+00031 } rpmdbOpX;
+00032 
+00039 rpmop rpmdbOp(rpmdb db, rpmdbOpX opx);
+00040 
+00046 int rpmdbOpenAll (rpmdb db);
+00047 
+00054 int rpmdbCountPackages(rpmdb db, const char * name);
+00055 
+00061 unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi);
+00062 
+00068 int rpmdbGetIteratorCount(rpmdbMatchIterator mi);
+00069 
+00072 unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi);
+00073 
+00081 int rpmdbAppendIterator(rpmdbMatchIterator mi,
+00082                 const int * hdrNums, int nHdrNums);
+00083 
+00092 int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTagVal tag,
+00093                 rpmMireMode mode, const char * pattern);
+00094 
+00102 int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite);
+00103 
+00110 int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified);
+00111 
+00119 int rpmdbSetHdrChk(rpmdbMatchIterator mi, rpmts ts,
+00120         rpmRC (*hdrchk) (rpmts ts, const void * uh, size_t uc, char ** msg));
+00121 
+00130 rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
+00131                         const void * keyp, size_t keylen);
+00132 
+00138 Header rpmdbNextIterator(rpmdbMatchIterator mi);
+00139 
+00143 int rpmdbCheckSignals(void);
+00144 
+00153 int rpmdbCheckTerminate(int terminate);
+00154 
+00160 rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
+00161 
+00168 rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag);
+00169 
+00178 int rpmdbIndexIteratorNext(rpmdbIndexIterator ii, const void ** key, size_t * keylen);
+00179 
+00185 unsigned int rpmdbIndexIteratorNumPkgs(rpmdbIndexIterator ii);
+00186 
+00193 unsigned int rpmdbIndexIteratorPkgOffset(rpmdbIndexIterator ii, unsigned int nr);
+00194 
+00201 unsigned int rpmdbIndexIteratorTagNum(rpmdbIndexIterator ii, unsigned int nr);
+00202 
+00208 rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii);
+00209 
+00210 
+00211 #ifdef __cplusplus
+00212 }
+00213 #endif
+00214 
+00215 #endif  /* H_RPMDB */
+
+
+ + + diff --git a/doc/librpm/html/rpmds_8h.html b/doc/librpm/html/rpmds_8h.html new file mode 100644 index 0000000..8094978 --- /dev/null +++ b/doc/librpm/html/rpmds_8h.html @@ -0,0 +1,425 @@ + + + + +rpm: rpmds.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmds.h File Reference
+
+
+ +

Structure(s) used for dependency tag sets. +More...

+
#include <time.h>
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmps.h>
+
+Include dependency graph for rpmds.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define RPMSENSE_SENSEMASK   15
#define RPMSENSE_TRIGGER   (RPMSENSE_TRIGGERPREIN | RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN)
#define _ALL_REQUIRES_MASK
#define _notpre(_x)   ((_x) & ~RPMSENSE_PREREQ)
#define _INSTALL_ONLY_MASK   _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB|RPMSENSE_KEYRING|RPMSENSE_PRETRANS|RPMSENSE_POSTTRANS)
#define _ERASE_ONLY_MASK   _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
#define isLegacyPreReq(_x)   (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
#define isInstallPreReq(_x)   ((_x) & _INSTALL_ONLY_MASK)
#define isErasePreReq(_x)   ((_x) & _ERASE_ONLY_MASK)

+Typedefs

typedef rpmFlags rpmsenseFlags

+Enumerations

enum  rpmsenseFlags_e {
+  RPMSENSE_ANY = 0, +RPMSENSE_LESS = (1 << 1), +RPMSENSE_GREATER = (1 << 2), +RPMSENSE_EQUAL = (1 << 3), +
+  RPMSENSE_POSTTRANS = (1 << 5), +RPMSENSE_PREREQ = (1 << 6), +RPMSENSE_PRETRANS = (1 << 7), +RPMSENSE_INTERP = (1 << 8), +
+  RPMSENSE_SCRIPT_PRE = (1 << 9), +RPMSENSE_SCRIPT_POST = (1 << 10), +RPMSENSE_SCRIPT_PREUN = (1 << 11), +RPMSENSE_SCRIPT_POSTUN = (1 << 12), +
+  RPMSENSE_SCRIPT_VERIFY = (1 << 13), +RPMSENSE_FIND_REQUIRES = (1 << 14), +RPMSENSE_FIND_PROVIDES = (1 << 15), +RPMSENSE_TRIGGERIN = (1 << 16), +
+  RPMSENSE_TRIGGERUN = (1 << 17), +RPMSENSE_TRIGGERPOSTUN = (1 << 18), +RPMSENSE_MISSINGOK = (1 << 19), +RPMSENSE_RPMLIB = (1 << 24), +
+  RPMSENSE_TRIGGERPREIN = (1 << 25), +RPMSENSE_KEYRING = (1 << 26), +RPMSENSE_CONFIG = (1 << 28) +
+ }
 Dependency Attributes. More...

+Functions

rpmds rpmdsLink (rpmds ds)
 Reference a dependency set instance.
rpmds rpmdsFree (rpmds ds)
 Destroy a dependency set.
rpmds rpmdsNew (Header h, rpmTagVal tagN, int flags)
 Create and load a dependency set.
char * rpmdsNewDNEVR (const char *dspfx, const rpmds ds)
 Return new formatted dependency string.
rpmds rpmdsThis (Header h, rpmTagVal tagN, rpmsenseFlags Flags)
 Create, load and initialize a dependency for this header.
rpmds rpmdsSingle (rpmTagVal tagN, const char *N, const char *EVR, rpmsenseFlags Flags)
 Create, load and initialize a dependency set of size 1.
rpmds rpmdsCurrent (rpmds ds)
 Return a new dependency set of size 1 from the current iteration index.
int rpmdsCount (const rpmds ds)
 Return dependency set count.
int rpmdsIx (const rpmds ds)
 Return dependency set index.
int rpmdsSetIx (rpmds ds, int ix)
 Set dependency set index.
const char * rpmdsDNEVR (const rpmds ds)
 Return current formatted dependency string.
const char * rpmdsN (const rpmds ds)
 Return current dependency name.
const char * rpmdsEVR (const rpmds ds)
 Return current dependency epoch-version-release.
rpmsenseFlags rpmdsFlags (const rpmds ds)
 Return current dependency flags.
rpmTagVal rpmdsTagN (const rpmds ds)
 Return current dependency type.
unsigned int rpmdsInstance (rpmds ds)
 Return dependency header instance, ie whether the dependency comes from an installed header or not.
int rpmdsNoPromote (const rpmds ds)
 Return current "Don't promote Epoch:" flag.
int rpmdsSetNoPromote (rpmds ds, int nopromote)
 Set "Don't promote Epoch:" flag.
rpm_color_t rpmdsColor (const rpmds ds)
 Return current dependency color.
rpm_color_t rpmdsSetColor (const rpmds ds, rpm_color_t color)
 Return current dependency color.
void rpmdsNotify (rpmds ds, const char *where, int rc)
 Notify of results of dependency match.
int rpmdsNext (rpmds ds)
 Return next dependency set iterator index.
rpmds rpmdsInit (rpmds ds)
 Initialize dependency set iterator.
int rpmdsFind (rpmds ds, const rpmds ods)
 Find a dependency set element using binary search.
int rpmdsMerge (rpmds *dsp, rpmds ods)
 Merge a dependency set maintaining (N,EVR,Flags) sorted order.
int rpmdsSearch (rpmds ds, rpmds ods)
 Search a sorted dependency set for an element that overlaps.
int rpmdsCompare (const rpmds A, const rpmds B)
 Compare two versioned dependency ranges, looking for overlap.
int rpmdsAnyMatchesDep (const Header h, const rpmds req, int nopromote)
 Compare package provides dependencies from header with a single dependency.
int rpmdsNVRMatchesDep (const Header h, const rpmds req, int nopromote)
 Compare package name-version-release from header with a single dependency.
int rpmdsRpmlib (rpmds *dsp, const void *tblp)
 Load rpmlib provides into a dependency set.

+Variables

int _rpmds_nopromote
+

Detailed Description

+

Structure(s) used for dependency tag sets.

+ +

Definition in file rpmds.h.

+

Define Documentation

+ +
+
+ + + + +
#define _ALL_REQUIRES_MASK
+
+ +
+ +
+
+ + + + +
#define _ERASE_ONLY_MASK   _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
+
+
+ +

Definition at line 80 of file rpmds.h.

+ +
+
+ +
+
+ + + + +
#define _INSTALL_ONLY_MASK   _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB|RPMSENSE_KEYRING|RPMSENSE_PRETRANS|RPMSENSE_POSTTRANS)
+
+
+ +

Definition at line 78 of file rpmds.h.

+ +
+
+ +
+
+ + + + + + + + +
#define _notpre( _x)   ((_x) & ~RPMSENSE_PREREQ)
+
+
+ +

Definition at line 77 of file rpmds.h.

+ +
+
+ +
+
+ + + + + + + + +
#define isErasePreReq( _x)   ((_x) & _ERASE_ONLY_MASK)
+
+
+ +

Definition at line 85 of file rpmds.h.

+ +
+
+ +
+
+ + + + + + + + +
#define isInstallPreReq( _x)   ((_x) & _INSTALL_ONLY_MASK)
+
+
+ +

Definition at line 84 of file rpmds.h.

+ +
+
+ +
+
+ + + + + + + + +
#define isLegacyPreReq( _x)   (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
+
+
+ +

Definition at line 83 of file rpmds.h.

+ +
+
+ +
+
+ + + + +
#define RPMSENSE_SENSEMASK   15
+
+
+ +

Definition at line 57 of file rpmds.h.

+ +
+
+ +
+
+ + + + +
#define RPMSENSE_TRIGGER   (RPMSENSE_TRIGGERPREIN | RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN)
+
+
+ +

Definition at line 60 of file rpmds.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmsenseFlags
+
+
+ +

Definition at line 55 of file rpmds.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmdsRpmlib (rpmdsdsp,
const void * tblp 
)
+
+
+ +

Load rpmlib provides into a dependency set.

+
Return values:
+ + +
*dsp(loaded) depedency set
+
+
+
Parameters:
+ + +
tblprpmlib provides table (NULL uses internal table)
+
+
+
Returns:
0 on success
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
int _rpmds_nopromote
+
+
+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmds_8h__incl.map b/doc/librpm/html/rpmds_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmds_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmds_8h__incl.md5 b/doc/librpm/html/rpmds_8h__incl.md5 new file mode 100644 index 0000000..d560179 --- /dev/null +++ b/doc/librpm/html/rpmds_8h__incl.md5 @@ -0,0 +1 @@ +b9c69bcc3290a3d21b95289040bf0ad7 \ No newline at end of file diff --git a/doc/librpm/html/rpmds_8h__incl.png b/doc/librpm/html/rpmds_8h__incl.png new file mode 100644 index 0000000..1e226f7 Binary files /dev/null and b/doc/librpm/html/rpmds_8h__incl.png differ diff --git a/doc/librpm/html/rpmds_8h_source.html b/doc/librpm/html/rpmds_8h_source.html new file mode 100644 index 0000000..d6a7559 --- /dev/null +++ b/doc/librpm/html/rpmds_8h_source.html @@ -0,0 +1,189 @@ + + + + +rpm: rpmds.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmds.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMDS
+00002 #define H_RPMDS
+00003 
+00009 #include <time.h>
+00010 
+00011 #include <rpm/rpmtypes.h>
+00012 #include <rpm/rpmps.h>
+00013 
+00014 #ifdef __cplusplus
+00015 extern "C" {
+00016 #endif
+00017 
+00020 extern int _rpmds_nopromote;
+00021 
+00025 enum rpmsenseFlags_e {
+00026     RPMSENSE_ANY        = 0,
+00027     RPMSENSE_LESS       = (1 << 1),
+00028     RPMSENSE_GREATER    = (1 << 2),
+00029     RPMSENSE_EQUAL      = (1 << 3),
+00030     /* bit 4 unused */
+00031     RPMSENSE_POSTTRANS  = (1 << 5),     
+00032     RPMSENSE_PREREQ     = (1 << 6),     /* legacy prereq dependency */
+00033     RPMSENSE_PRETRANS   = (1 << 7),     
+00034     RPMSENSE_INTERP     = (1 << 8),     
+00035     RPMSENSE_SCRIPT_PRE = (1 << 9),     
+00036     RPMSENSE_SCRIPT_POST = (1 << 10),   
+00037     RPMSENSE_SCRIPT_PREUN = (1 << 11),  
+00038     RPMSENSE_SCRIPT_POSTUN = (1 << 12), 
+00039     RPMSENSE_SCRIPT_VERIFY = (1 << 13), 
+00040     RPMSENSE_FIND_REQUIRES = (1 << 14), 
+00041     RPMSENSE_FIND_PROVIDES = (1 << 15), 
+00043     RPMSENSE_TRIGGERIN  = (1 << 16),    
+00044     RPMSENSE_TRIGGERUN  = (1 << 17),    
+00045     RPMSENSE_TRIGGERPOSTUN = (1 << 18), 
+00046     RPMSENSE_MISSINGOK  = (1 << 19),    
+00047     /* bits 20-23 unused */
+00048     RPMSENSE_RPMLIB = (1 << 24),        
+00049     RPMSENSE_TRIGGERPREIN = (1 << 25),  
+00050     RPMSENSE_KEYRING    = (1 << 26),
+00051     /* bit 27 unused */
+00052     RPMSENSE_CONFIG     = (1 << 28)
+00053 };
+00054 
+00055 typedef rpmFlags rpmsenseFlags;
+00056 
+00057 #define RPMSENSE_SENSEMASK      15       /* Mask to get senses, ie serial, */
+00058                                          /* less, greater, equal.          */
+00059 
+00060 #define RPMSENSE_TRIGGER        \
+00061         (RPMSENSE_TRIGGERPREIN | RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN)
+00062 
+00063 #define _ALL_REQUIRES_MASK      (\
+00064     RPMSENSE_INTERP | \
+00065     RPMSENSE_SCRIPT_PRE | \
+00066     RPMSENSE_SCRIPT_POST | \
+00067     RPMSENSE_SCRIPT_PREUN | \
+00068     RPMSENSE_SCRIPT_POSTUN | \
+00069     RPMSENSE_SCRIPT_VERIFY | \
+00070     RPMSENSE_FIND_REQUIRES | \
+00071     RPMSENSE_RPMLIB | \
+00072     RPMSENSE_KEYRING | \
+00073     RPMSENSE_PRETRANS | \
+00074     RPMSENSE_POSTTRANS | \
+00075     RPMSENSE_PREREQ)
+00076 
+00077 #define _notpre(_x)             ((_x) & ~RPMSENSE_PREREQ)
+00078 #define _INSTALL_ONLY_MASK \
+00079     _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB|RPMSENSE_KEYRING|RPMSENSE_PRETRANS|RPMSENSE_POSTTRANS)
+00080 #define _ERASE_ONLY_MASK  \
+00081     _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
+00082 
+00083 #define isLegacyPreReq(_x)  (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
+00084 #define isInstallPreReq(_x)     ((_x) & _INSTALL_ONLY_MASK)
+00085 #define isErasePreReq(_x)       ((_x) & _ERASE_ONLY_MASK)
+00086 
+00092 rpmds rpmdsLink(rpmds ds);
+00093 
+00099 rpmds rpmdsFree(rpmds ds);
+00107 rpmds rpmdsNew(Header h, rpmTagVal tagN, int flags);
+00108 
+00115 char * rpmdsNewDNEVR(const char * dspfx, const rpmds ds);
+00116 
+00124 rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags);
+00125 
+00134 rpmds rpmdsSingle(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlags Flags);
+00135 
+00141 rpmds rpmdsCurrent(rpmds ds);
+00142 
+00148 int rpmdsCount(const rpmds ds);
+00149 
+00155 int rpmdsIx(const rpmds ds);
+00156 
+00163 int rpmdsSetIx(rpmds ds, int ix);
+00164 
+00170 const char * rpmdsDNEVR(const rpmds ds);
+00171 
+00177 const char * rpmdsN(const rpmds ds);
+00178 
+00184 const char * rpmdsEVR(const rpmds ds);
+00185 
+00191 rpmsenseFlags rpmdsFlags(const rpmds ds);
+00192 
+00198 rpmTagVal rpmdsTagN(const rpmds ds);
+00199 
+00206 unsigned int rpmdsInstance(rpmds ds);
+00207 
+00221 int rpmdsNoPromote(const rpmds ds);
+00222 
+00229 int rpmdsSetNoPromote(rpmds ds, int nopromote);
+00230 
+00236 rpm_color_t rpmdsColor(const rpmds ds);
+00237 
+00244 rpm_color_t rpmdsSetColor(const rpmds ds, rpm_color_t color);
+00245 
+00252 /* FIX: rpmMessage annotation is a lie */
+00253 void rpmdsNotify(rpmds ds, const char * where, int rc);
+00254 
+00260 int rpmdsNext(rpmds ds);
+00261 
+00267 rpmds rpmdsInit(rpmds ds);
+00268 
+00275 int rpmdsFind(rpmds ds, const rpmds ods);
+00276 
+00283 int rpmdsMerge(rpmds * dsp, rpmds ods);
+00284 
+00293 int rpmdsSearch(rpmds ds, rpmds ods);
+00294 
+00301 int rpmdsCompare(const rpmds A, const rpmds B);
+00302 
+00310 int rpmdsAnyMatchesDep (const Header h, const rpmds req, int nopromote);
+00311 
+00319 int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote);
+00320 
+00327 int rpmdsRpmlib(rpmds * dsp, const void * tblp);
+00328 
+00329 #ifdef __cplusplus
+00330 }
+00331 #endif
+00332 
+00333 #endif  /* H_RPMDS */
+
+
+ + + diff --git a/doc/librpm/html/rpmfc_8h.html b/doc/librpm/html/rpmfc_8h.html new file mode 100644 index 0000000..58f6a96 --- /dev/null +++ b/doc/librpm/html/rpmfc_8h.html @@ -0,0 +1,139 @@ + + + + +rpm: rpmfc.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+ +
+ +

Structures and methods for build-time file classification. +More...

+
#include <rpm/rpmtypes.h>
+#include <rpm/argv.h>
+#include <rpm/rpmspec.h>
+
+Include dependency graph for rpmfc.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define RPMFC_ELF   (RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFMIPSN32)

+Typedefs

typedef struct rpmfc_s * rpmfc
typedef rpmFlags FCOLOR_t
typedef struct rpmfcTokens_s * rpmfcToken

+Enumerations

enum  FCOLOR_e { RPMFC_BLACK = 0, +RPMFC_ELF32 = (1 << 0), +RPMFC_ELF64 = (1 << 1), +RPMFC_ELFMIPSN32 = (1 << 2) + }

+Functions

void rpmfcPrint (const char *msg, rpmfc fc, FILE *fp)
 Print results of file classification.
rpmfc rpmfcFree (rpmfc fc)
 Destroy a file classifier.
rpmfc rpmfcCreate (const char *rootDir, rpmFlags flags)
 Create a file classifier.
RPM_GNUC_DEPRECATED rpmfc rpmfcNew (void)
rpmRC rpmfcClassify (rpmfc fc, ARGV_t argv, rpm_mode_t *fmode)
 Build file class dictionary and mappings.
rpmRC rpmfcApply (rpmfc fc)
 Build file/package dependency dictionary and mappings.
rpmds rpmfcProvides (rpmfc fc)
 Retrieve file classification provides.
rpmds rpmfcRequires (rpmfc fc)
 Retrieve file classification requires.

+Variables

int _rpmfc_debug
+

Detailed Description

+

Structures and methods for build-time file classification.

+ +

Definition in file rpmfc.h.

+

Define Documentation

+ +
+
+ + + + +
#define RPMFC_ELF   (RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFMIPSN32)
+
+
+ +

Definition at line 30 of file rpmfc.h.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
int _rpmfc_debug
+
+
+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmfc_8h__incl.map b/doc/librpm/html/rpmfc_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmfc_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmfc_8h__incl.md5 b/doc/librpm/html/rpmfc_8h__incl.md5 new file mode 100644 index 0000000..34b07b8 --- /dev/null +++ b/doc/librpm/html/rpmfc_8h__incl.md5 @@ -0,0 +1 @@ +ba14c7b12051a6a447d93b32d2d11de0 \ No newline at end of file diff --git a/doc/librpm/html/rpmfc_8h__incl.png b/doc/librpm/html/rpmfc_8h__incl.png new file mode 100644 index 0000000..fde8c3a Binary files /dev/null and b/doc/librpm/html/rpmfc_8h__incl.png differ diff --git a/doc/librpm/html/rpmfc_8h_source.html b/doc/librpm/html/rpmfc_8h_source.html new file mode 100644 index 0000000..ef3bb42 --- /dev/null +++ b/doc/librpm/html/rpmfc_8h_source.html @@ -0,0 +1,104 @@ + + + + +rpm: rpmfc.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmfc.h
+
+
+Go to the documentation of this file.
00001 #ifndef _H_RPMFC_
+00002 #define _H_RPMFC_
+00003 
+00009 #include <rpm/rpmtypes.h>
+00010 #include <rpm/argv.h>   /* for ARGV_t */
+00011 #include <rpm/rpmspec.h>        /* for Package */
+00012 
+00013 #ifdef __cplusplus
+00014 extern "C" {
+00015 #endif
+00016 
+00017 extern int _rpmfc_debug;
+00018 
+00021 typedef struct rpmfc_s * rpmfc;
+00022 
+00025 enum FCOLOR_e {
+00026     RPMFC_BLACK                 = 0,
+00027     RPMFC_ELF32                 = (1 <<  0),
+00028     RPMFC_ELF64                 = (1 <<  1),
+00029     RPMFC_ELFMIPSN32            = (1 <<  2),
+00030 #define RPMFC_ELF       (RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFMIPSN32)
+00031         /* (1 << 3) leaks into package headers, reserved */
+00032 
+00033     RPMFC_WHITE                 = (1 << 29),
+00034     RPMFC_INCLUDE               = (1 << 30),
+00035     RPMFC_ERROR                 = (1 << 31)
+00036 };
+00037 
+00040 typedef rpmFlags FCOLOR_t;
+00041 
+00044 typedef const struct rpmfcTokens_s * rpmfcToken;
+00045 
+00053 void rpmfcPrint(const char * msg, rpmfc fc, FILE * fp);
+00054 
+00060 rpmfc rpmfcFree(rpmfc fc);
+00061 
+00068 rpmfc rpmfcCreate(const char *rootDir, rpmFlags flags);
+00069 
+00075 RPM_GNUC_DEPRECATED
+00076 rpmfc rpmfcNew(void);
+00077 
+00078 
+00086 rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode);
+00087 
+00093 rpmRC rpmfcApply(rpmfc fc);
+00094 
+00100 rpmds rpmfcProvides(rpmfc fc);
+00101 
+00107 rpmds rpmfcRequires(rpmfc fc);
+00108 
+00109 #ifdef __cplusplus
+00110 }
+00111 #endif
+00112 
+00113 #endif /* _H_RPMFC_ */
+
+
+ + + diff --git a/doc/librpm/html/rpmfi_8h.html b/doc/librpm/html/rpmfi_8h.html new file mode 100644 index 0000000..3e35177 --- /dev/null +++ b/doc/librpm/html/rpmfi_8h.html @@ -0,0 +1,576 @@ + + + + +rpm: rpmfi.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmfi.h File Reference
+
+
+ +

Structure(s) used for file info tag sets. +More...

+
#include <rpm/rpmtypes.h>
+#include <rpm/rpmvf.h>
+#include <rpm/rpmpgp.h>
+
+Include dependency graph for rpmfi.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  rpmRelocation_s
 We pass these around as an array with a sentinel. More...

+Defines

#define RPMFILE_ALL   ~(RPMFILE_NONE)
#define XFA_SKIPPING(_a)   ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR)
#define RPMFI_FLAGS_ERASE
#define RPMFI_FLAGS_INSTALL   (RPMFI_NOFILECLASS | RPMFI_NOFILEVERIFYFLAGS)
#define RPMFI_FLAGS_VERIFY
#define RPMFI_FLAGS_QUERY

+Typedefs

typedef enum rpmFileTypes_e rpmFileTypes
 File types.
typedef enum rpmfileState_e rpmfileState
 File States (when installed).
typedef rpmFlags rpmfileAttrs
typedef enum rpmFileAction_e rpmFileAction
 File disposition(s) during package install/erase transaction.
typedef rpmFlags rpmfiFlags

+Enumerations

enum  rpmFileTypes_e {
+  PIPE = 1, +CDEV = 2, +XDIR = 4, +BDEV = 6, +
+  REG = 8, +LINK = 10, +SOCK = 12 +
+ }
 File types. More...
enum  rpmfileState_e {
+  RPMFILE_STATE_MISSING = -1, +RPMFILE_STATE_NORMAL = 0, +RPMFILE_STATE_REPLACED = 1, +RPMFILE_STATE_NOTINSTALLED = 2, +
+  RPMFILE_STATE_NETSHARED = 3, +RPMFILE_STATE_WRONGCOLOR = 4 +
+ }
 File States (when installed). More...
enum  rpmfileAttrs_e {
+  RPMFILE_NONE = 0, +RPMFILE_CONFIG = (1 << 0), +RPMFILE_DOC = (1 << 1), +RPMFILE_ICON = (1 << 2), +
+  RPMFILE_MISSINGOK = (1 << 3), +RPMFILE_NOREPLACE = (1 << 4), +RPMFILE_SPECFILE = (1 << 5), +RPMFILE_GHOST = (1 << 6), +
+  RPMFILE_LICENSE = (1 << 7), +RPMFILE_README = (1 << 8), +RPMFILE_EXCLUDE = (1 << 9), +RPMFILE_UNPATCHED = (1 << 10), +
+  RPMFILE_PUBKEY = (1 << 11) +
+ }
 File Attributes. More...
enum  rpmFileAction_e {
+  FA_UNKNOWN = 0, +FA_CREATE, +FA_COPYIN, +FA_COPYOUT, +
+  FA_BACKUP, +FA_SAVE, +FA_SKIP, +FA_ALTNAME, +
+  FA_ERASE, +FA_SKIPNSTATE, +FA_SKIPNETSHARED, +FA_SKIPCOLOR +
+ }
 File disposition(s) during package install/erase transaction. More...
enum  rpmfiFlags_e {
+  RPMFI_NOHEADER = 0, +RPMFI_KEEPHEADER = (1 << 0), +RPMFI_NOFILECLASS = (1 << 1), +RPMFI_NOFILEDEPS = (1 << 2), +
+  RPMFI_NOFILELANGS = (1 << 3), +RPMFI_NOFILEUSER = (1 << 4), +RPMFI_NOFILEGROUP = (1 << 5), +RPMFI_NOFILEMODES = (1 << 6), +
+  RPMFI_NOFILESIZES = (1 << 7), +RPMFI_NOFILECAPS = (1 << 8), +RPMFI_NOFILELINKTOS = (1 << 9), +RPMFI_NOFILEDIGESTS = (1 << 10), +
+  RPMFI_NOFILEMTIMES = (1 << 11), +RPMFI_NOFILERDEVS = (1 << 12), +RPMFI_NOFILEINODES = (1 << 13), +RPMFI_NOFILESTATES = (1 << 14), +
+  RPMFI_NOFILECOLORS = (1 << 15), +RPMFI_NOFILEVERIFYFLAGS = (1 << 16), +RPMFI_NOFILEFLAGS = (1 << 17), +RPMFI_ISBUILD = (1 << 30), +
+  RPMFI_ISSOURCE = (1 << 31) +
+ }

+Functions

rpmfi rpmfiLink (rpmfi fi)
 Reference a file info set instance.
rpm_count_t rpmfiFC (rpmfi fi)
 Return file count from file info set.
int rpmfiFX (rpmfi fi)
 Return current file index from file info set.
int rpmfiSetFX (rpmfi fi, int fx)
 Set current file index in file info set.
rpm_count_t rpmfiDC (rpmfi fi)
 Return directory count from file info set.
int rpmfiDX (rpmfi fi)
 Return current directory index from file info set.
int rpmfiSetDX (rpmfi fi, int dx)
 Set current directory index in file info set.
const char * rpmfiBN (rpmfi fi)
 Return current base name from file info set.
const char * rpmfiDN (rpmfi fi)
 Return current directory name from file info set.
const char * rpmfiFN (rpmfi fi)
 Return current file name from file info set.
rpmfileAttrs rpmfiFFlags (rpmfi fi)
 Return current file flags from file info set.
rpmVerifyAttrs rpmfiVFlags (rpmfi fi)
 Return current file verify flags from file info set.
rpm_mode_t rpmfiFMode (rpmfi fi)
 Return current file mode from file info set.
rpmfileState rpmfiFState (rpmfi fi)
 Return current file state from file info set.
int rpmfiDigestAlgo (rpmfi fi)
 Return digest algorithm of a file info set.
const unsigned char * rpmfiFDigest (rpmfi fi, int *algo, size_t *diglen)
 Return current file (binary) digest of file info set.
char * rpmfiFDigestHex (rpmfi fi, int *algo)
 Return current file (hex) digest of file info set.
const unsigned char * rpmfiMD5 (rpmfi fi) RPM_GNUC_DEPRECATED
 Return current file (binary) md5 digest from file info set.
const char * rpmfiFLink (rpmfi fi)
 Return current file linkto (i.e.
rpm_loff_t rpmfiFSize (rpmfi fi)
 Return current file size from file info set.
rpm_rdev_t rpmfiFRdev (rpmfi fi)
 Return current file rdev from file info set.
rpm_ino_t rpmfiFInode (rpmfi fi)
 Return current file inode from file info set.
rpm_color_t rpmfiColor (rpmfi fi)
 Return union of all file color bits from file info set.
rpm_color_t rpmfiFColor (rpmfi fi)
 Return current file color bits from file info set.
const char * rpmfiFClass (rpmfi fi)
 Return current file class from file info set.
uint32_t rpmfiFDepends (rpmfi fi, const uint32_t **fddictp)
 Return current file depends dictionary from file info set.
uint32_t rpmfiFNlink (rpmfi fi)
 Return (calculated) current file nlink count from file info set.
rpm_time_t rpmfiFMtime (rpmfi fi)
 Return current file modify time from file info set.
const char * rpmfiFUser (rpmfi fi)
 Return current file owner from file info set.
const char * rpmfiFGroup (rpmfi fi)
 Return current file group from file info set.
const char * rpmfiFCaps (rpmfi fi)
 Return textual representation of current file capabilities from file info set.
const char * rpmfiFLangs (rpmfi fi)
 Return current file language(s) from file info set.
int rpmfiNext (rpmfi fi)
 Return next file iterator index.
rpmfi rpmfiInit (rpmfi fi, int fx)
 Initialize file iterator index.
int rpmfiNextD (rpmfi fi)
 Return next directory iterator index.
rpmfi rpmfiInitD (rpmfi fi, int dx)
 Initialize directory iterator index.
rpmfi rpmfiFree (rpmfi fi)
 Destroy a file info set.
rpmfi rpmfiNew (const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags)
 Create and load a file info set.
rpmFileTypes rpmfiWhatis (rpm_mode_t mode)
 Return file type from mode_t.
int rpmfiCompare (const rpmfi afi, const rpmfi bfi)
 Return file info comparison.
rpmFileAction rpmfiDecideFate (const rpmfi ofi, rpmfi nfi, int skipMissing)
 Return file disposition.
int rpmfiConfigConflict (const rpmfi fi)
 Return whether file is conflicting config.
+

Detailed Description

+

Structure(s) used for file info tag sets.

+ +

Definition in file rpmfi.h.

+

Define Documentation

+ +
+
+ + + + +
#define RPMFI_FLAGS_ERASE
+
+ +
+ +
+
+ + + + +
#define RPMFI_FLAGS_INSTALL   (RPMFI_NOFILECLASS | RPMFI_NOFILEVERIFYFLAGS)
+
+
+ +

Definition at line 403 of file rpmfi.h.

+ +
+
+ +
+
+ + + + +
#define RPMFI_FLAGS_QUERY
+
+ +
+ +
+
+ + + + +
#define RPMFI_FLAGS_VERIFY
+
+
+Value: +

Definition at line 406 of file rpmfi.h.

+ +
+
+ +
+
+ + + + +
#define RPMFILE_ALL   ~(RPMFILE_NONE)
+
+
+ +

Definition at line 67 of file rpmfi.h.

+ +
+
+ +
+
+ + + + + + + + +
#define XFA_SKIPPING( _a)   ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR)
+
+
+ +

Definition at line 87 of file rpmfi.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmfiFlags
+
+
+ +

Definition at line 396 of file rpmfi.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags rpmfileAttrs
+
+
+ +

Definition at line 65 of file rpmfi.h.

+ +
+
+ +
+
+ + + + +
typedef enum rpmfileState_e rpmfileState
+
+
+ +

File States (when installed).

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmfiFlags_e
+
+
+
Enumerator:
+ + + + + + + + + + + + + + + + + + + + + +
RPMFI_NOHEADER  +
RPMFI_KEEPHEADER  +
RPMFI_NOFILECLASS  +
RPMFI_NOFILEDEPS  +
RPMFI_NOFILELANGS  +
RPMFI_NOFILEUSER  +
RPMFI_NOFILEGROUP  +
RPMFI_NOFILEMODES  +
RPMFI_NOFILESIZES  +
RPMFI_NOFILECAPS  +
RPMFI_NOFILELINKTOS  +
RPMFI_NOFILEDIGESTS  +
RPMFI_NOFILEMTIMES  +
RPMFI_NOFILERDEVS  +
RPMFI_NOFILEINODES  +
RPMFI_NOFILESTATES  +
RPMFI_NOFILECOLORS  +
RPMFI_NOFILEVERIFYFLAGS  +
RPMFI_NOFILEFLAGS  +
RPMFI_ISBUILD  +
RPMFI_ISSOURCE  +
+
+
+ +

Definition at line 372 of file rpmfi.h.

+ +
+
+ +
+
+ + + + +
enum rpmfileAttrs_e
+
+
+ +

File Attributes.

+
Enumerator:
+ + + + + + + + + + + + + +
RPMFILE_NONE  +
RPMFILE_CONFIG  +

from %config

+
RPMFILE_DOC  +

from %doc

+
RPMFILE_ICON  +

from %donotuse.

+
RPMFILE_MISSINGOK  +

from %config(missingok)

+
RPMFILE_NOREPLACE  +

from %config(noreplace)

+
RPMFILE_SPECFILE  +
Todo:
(unnecessary) marks 1st file in srpm.
+
RPMFILE_GHOST  +

from %ghost

+
RPMFILE_LICENSE  +

from %license

+
RPMFILE_README  +

from %readme

+
RPMFILE_EXCLUDE  +

from %exclude, internal

+
RPMFILE_UNPATCHED  +

placeholder (SuSE)

+
RPMFILE_PUBKEY  +

from %pubkey

+
+
+
+ +

Definition at line 49 of file rpmfi.h.

+ +
+
+ +
+
+ + + + +
enum rpmfileState_e
+
+
+ +

File States (when installed).

+
Enumerator:
+ + + + + + +
RPMFILE_STATE_MISSING  +
RPMFILE_STATE_NORMAL  +
RPMFILE_STATE_REPLACED  +
RPMFILE_STATE_NOTINSTALLED  +
RPMFILE_STATE_NETSHARED  +
RPMFILE_STATE_WRONGCOLOR  +
+
+
+ +

Definition at line 37 of file rpmfi.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmfi_8h__incl.map b/doc/librpm/html/rpmfi_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmfi_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmfi_8h__incl.md5 b/doc/librpm/html/rpmfi_8h__incl.md5 new file mode 100644 index 0000000..2a1c9e0 --- /dev/null +++ b/doc/librpm/html/rpmfi_8h__incl.md5 @@ -0,0 +1 @@ +19ddb74ac6b2602e03135607ac28a1d8 \ No newline at end of file diff --git a/doc/librpm/html/rpmfi_8h__incl.png b/doc/librpm/html/rpmfi_8h__incl.png new file mode 100644 index 0000000..178fcf8 Binary files /dev/null and b/doc/librpm/html/rpmfi_8h__incl.png differ diff --git a/doc/librpm/html/rpmfi_8h_source.html b/doc/librpm/html/rpmfi_8h_source.html new file mode 100644 index 0000000..d735dc7 --- /dev/null +++ b/doc/librpm/html/rpmfi_8h_source.html @@ -0,0 +1,254 @@ + + + + +rpm: rpmfi.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmfi.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMFI
+00002 #define H_RPMFI
+00003 
+00009 #include <rpm/rpmtypes.h>
+00010 #include <rpm/rpmvf.h>
+00011 #include <rpm/rpmpgp.h>
+00012 
+00013 #ifdef __cplusplus
+00014 extern "C" {
+00015 #endif
+00016 
+00024 typedef enum rpmFileTypes_e {
+00025     PIPE        =  1,   
+00026     CDEV        =  2,   
+00027     XDIR        =  4,   
+00028     BDEV        =  6,   
+00029     REG         =  8,   
+00030     LINK        = 10,   
+00031     SOCK        = 12    
+00032 } rpmFileTypes;
+00033 
+00037 typedef enum rpmfileState_e {
+00038     RPMFILE_STATE_MISSING       = -1,   /* used for unavailable data */
+00039     RPMFILE_STATE_NORMAL        = 0,
+00040     RPMFILE_STATE_REPLACED      = 1,
+00041     RPMFILE_STATE_NOTINSTALLED  = 2,
+00042     RPMFILE_STATE_NETSHARED     = 3,
+00043     RPMFILE_STATE_WRONGCOLOR    = 4
+00044 } rpmfileState;
+00045 
+00049 enum rpmfileAttrs_e {
+00050     RPMFILE_NONE        = 0,
+00051     RPMFILE_CONFIG      = (1 <<  0),    
+00052     RPMFILE_DOC         = (1 <<  1),    
+00053     RPMFILE_ICON        = (1 <<  2),    
+00054     RPMFILE_MISSINGOK   = (1 <<  3),    
+00055     RPMFILE_NOREPLACE   = (1 <<  4),    
+00056     RPMFILE_SPECFILE    = (1 <<  5),    
+00057     RPMFILE_GHOST       = (1 <<  6),    
+00058     RPMFILE_LICENSE     = (1 <<  7),    
+00059     RPMFILE_README      = (1 <<  8),    
+00060     RPMFILE_EXCLUDE     = (1 <<  9),    
+00061     RPMFILE_UNPATCHED   = (1 << 10),    
+00062     RPMFILE_PUBKEY      = (1 << 11),    
+00063 };
+00064 
+00065 typedef rpmFlags rpmfileAttrs;
+00066 
+00067 #define RPMFILE_ALL     ~(RPMFILE_NONE)
+00068 
+00072 typedef enum rpmFileAction_e {
+00073     FA_UNKNOWN = 0,     
+00074     FA_CREATE,          
+00075     FA_COPYIN,          
+00076     FA_COPYOUT,         
+00077     FA_BACKUP,          
+00078     FA_SAVE,            
+00079     FA_SKIP,            
+00080     FA_ALTNAME,         
+00081     FA_ERASE,           
+00082     FA_SKIPNSTATE,      
+00083     FA_SKIPNETSHARED,   
+00084     FA_SKIPCOLOR        
+00085 } rpmFileAction;
+00086 
+00087 #define XFA_SKIPPING(_a)        \
+00088     ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR)
+00089 
+00093 struct rpmRelocation_s {
+00094     char * oldPath;     
+00095     char * newPath;     
+00096 };
+00097 
+00103 rpmfi rpmfiLink (rpmfi fi);
+00104 
+00110 rpm_count_t rpmfiFC(rpmfi fi);
+00111 
+00117 int rpmfiFX(rpmfi fi);
+00118 
+00125 int rpmfiSetFX(rpmfi fi, int fx);
+00126 
+00132 rpm_count_t rpmfiDC(rpmfi fi);
+00133 
+00139 int rpmfiDX(rpmfi fi);
+00140 
+00147 int rpmfiSetDX(rpmfi fi, int dx);
+00148 
+00154 const char * rpmfiBN(rpmfi fi);
+00155 
+00161 const char * rpmfiDN(rpmfi fi);
+00162 
+00168 const char * rpmfiFN(rpmfi fi);
+00169 
+00175 rpmfileAttrs rpmfiFFlags(rpmfi fi);
+00176 
+00182 rpmVerifyAttrs rpmfiVFlags(rpmfi fi);
+00183 
+00189 rpm_mode_t rpmfiFMode(rpmfi fi);
+00190 
+00196 rpmfileState rpmfiFState(rpmfi fi);
+00197 
+00203 int rpmfiDigestAlgo(rpmfi fi);
+00204 
+00212 const unsigned char * rpmfiFDigest(rpmfi fi, int *algo, size_t *diglen);
+00213 
+00223 char * rpmfiFDigestHex(rpmfi fi, int *algo);
+00224 
+00231 const unsigned char * rpmfiMD5(rpmfi fi) RPM_GNUC_DEPRECATED;
+00232 
+00238 const char * rpmfiFLink(rpmfi fi);
+00239 
+00245 rpm_loff_t rpmfiFSize(rpmfi fi);
+00246 
+00252 rpm_rdev_t rpmfiFRdev(rpmfi fi);
+00253 
+00259 rpm_ino_t rpmfiFInode(rpmfi fi);
+00260 
+00266 rpm_color_t rpmfiColor(rpmfi fi);
+00267 
+00273 rpm_color_t rpmfiFColor(rpmfi fi);
+00274 
+00280 const char * rpmfiFClass(rpmfi fi);
+00281 
+00288 uint32_t rpmfiFDepends(rpmfi fi,
+00289                 const uint32_t ** fddictp);
+00290 
+00296 uint32_t rpmfiFNlink(rpmfi fi);
+00297 
+00303 rpm_time_t rpmfiFMtime(rpmfi fi);
+00304 
+00310 const char * rpmfiFUser(rpmfi fi);
+00311 
+00317 const char * rpmfiFGroup(rpmfi fi);
+00318 
+00326 const char * rpmfiFCaps(rpmfi fi);
+00327 
+00333 const char * rpmfiFLangs(rpmfi fi);
+00334 
+00340 int rpmfiNext(rpmfi fi);
+00341 
+00348 rpmfi rpmfiInit(rpmfi fi, int fx);
+00349 
+00355 int rpmfiNextD(rpmfi fi);
+00356 
+00363 rpmfi rpmfiInitD(rpmfi fi, int dx);
+00364 
+00370 rpmfi rpmfiFree(rpmfi fi);
+00371 
+00372 enum rpmfiFlags_e {
+00373     RPMFI_NOHEADER              = 0,
+00374     RPMFI_KEEPHEADER            = (1 << 0),
+00375     RPMFI_NOFILECLASS           = (1 << 1),
+00376     RPMFI_NOFILEDEPS            = (1 << 2),
+00377     RPMFI_NOFILELANGS           = (1 << 3),
+00378     RPMFI_NOFILEUSER            = (1 << 4),
+00379     RPMFI_NOFILEGROUP           = (1 << 5),
+00380     RPMFI_NOFILEMODES           = (1 << 6),
+00381     RPMFI_NOFILESIZES           = (1 << 7),
+00382     RPMFI_NOFILECAPS            = (1 << 8),
+00383     RPMFI_NOFILELINKTOS         = (1 << 9),
+00384     RPMFI_NOFILEDIGESTS         = (1 << 10),
+00385     RPMFI_NOFILEMTIMES          = (1 << 11),
+00386     RPMFI_NOFILERDEVS           = (1 << 12),
+00387     RPMFI_NOFILEINODES          = (1 << 13),
+00388     RPMFI_NOFILESTATES          = (1 << 14),
+00389     RPMFI_NOFILECOLORS          = (1 << 15),
+00390     RPMFI_NOFILEVERIFYFLAGS     = (1 << 16),
+00391     RPMFI_NOFILEFLAGS           = (1 << 17),
+00392     RPMFI_ISBUILD               = (1 << 30),    /* internal */
+00393     RPMFI_ISSOURCE              = (1 << 31),    /* internal */
+00394 };
+00395 
+00396 typedef rpmFlags rpmfiFlags;
+00397 
+00398 #define RPMFI_FLAGS_ERASE \
+00399     (RPMFI_NOFILECLASS | RPMFI_NOFILELANGS | \
+00400      RPMFI_NOFILEMTIMES | RPMFI_NOFILERDEVS | RPMFI_NOFILEINODES | \
+00401      RPMFI_NOFILEVERIFYFLAGS)
+00402 
+00403 #define RPMFI_FLAGS_INSTALL \
+00404     (RPMFI_NOFILECLASS | RPMFI_NOFILEVERIFYFLAGS)
+00405 
+00406 #define RPMFI_FLAGS_VERIFY \
+00407     (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
+00408      RPMFI_NOFILECOLORS)
+00409 
+00410 #define RPMFI_FLAGS_QUERY \
+00411     (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \
+00412      RPMFI_NOFILECOLORS | RPMFI_NOFILEVERIFYFLAGS)
+00413 
+00422 rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags);
+00423 
+00429 rpmFileTypes rpmfiWhatis(rpm_mode_t mode);
+00430 
+00437 int rpmfiCompare(const rpmfi afi, const rpmfi bfi);
+00438 
+00446 rpmFileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing);
+00447 
+00453 int rpmfiConfigConflict(const rpmfi fi);
+00454 
+00455 #ifdef __cplusplus
+00456 }
+00457 #endif
+00458 
+00459 #endif  /* H_RPMDS */
+
+
+ + + diff --git a/doc/librpm/html/rpmfileutil_8h.html b/doc/librpm/html/rpmfileutil_8h.html new file mode 100644 index 0000000..231a0a5 --- /dev/null +++ b/doc/librpm/html/rpmfileutil_8h.html @@ -0,0 +1,118 @@ + + + + +rpm: rpmfileutil.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmfileutil.h File Reference
+
+
+ +

File and path manipulation helper functions. +More...

+
#include <rpm/rpmutil.h>
+#include <rpm/rpmio.h>
+#include <rpm/rpmpgp.h>
+#include <rpm/argv.h>
+
+Include dependency graph for rpmfileutil.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef enum rpmCompressedMagic_e rpmCompressedMagic

+Enumerations

enum  rpmCompressedMagic_e {
+  COMPRESSED_NOT = 0, +COMPRESSED_OTHER = 1, +COMPRESSED_BZIP2 = 2, +COMPRESSED_ZIP = 3, +
+  COMPRESSED_LZMA = 4, +COMPRESSED_XZ = 5, +COMPRESSED_LZIP = 6, +COMPRESSED_LRZIP = 7 +
+ }

+Functions

int rpmDoDigest (int algo, const char *fn, int asAscii, unsigned char *digest, rpm_loff_t *fsizep)
 Calculate a file digest and size.
FD_t rpmMkTemp (char *templ)
 Thin wrapper for mkstemp(3).
FD_t rpmMkTempFile (const char *prefix, char **fn)
 Return file handle for a temporaray file.
int rpmioMkpath (const char *path, mode_t mode, uid_t uid, gid_t gid)
 Insure that directories in path exist, creating as needed.
int rpmMkdirs (const char *root, const char *pathstr)
 Create several directories (including parents if needed) in one go.
char * rpmCleanPath (char *path)
 Canonicalize file path.
char * rpmGenPath (const char *urlroot, const char *urlmdir, const char *urlfile)
 Merge 3 args into path, any or all of which may be a url.
char * rpmGetPath (const char *path,...) RPM_GNUC_NULL_TERMINATED
 Return (malloc'ed) expanded, canonicalized, file path.
int rpmGlob (const char *patterns, int *argcPtr, ARGV_t *argvPtr)
 Return URL path(s) from a (URL prefixed) pattern glob.
char * rpmEscapeSpaces (const char *s)
 Escape isspace(3) characters in string.
int rpmFileIsCompressed (const char *file, rpmCompressedMagic *compressed)
 Return type of compression used in file.
int rpmFileHasSuffix (const char *path, const char *suffix)
 Check if path (string) ends with given suffix.
char * rpmGetCwd (void)
 Like getcwd() but the result is malloced.
+

Detailed Description

+

File and path manipulation helper functions.

+ +

Definition in file rpmfileutil.h.

+
+ + + diff --git a/doc/librpm/html/rpmfileutil_8h__incl.map b/doc/librpm/html/rpmfileutil_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmfileutil_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmfileutil_8h__incl.md5 b/doc/librpm/html/rpmfileutil_8h__incl.md5 new file mode 100644 index 0000000..c8c2451 --- /dev/null +++ b/doc/librpm/html/rpmfileutil_8h__incl.md5 @@ -0,0 +1 @@ +8494f7d50ade9a737fdb31ce0c8169ac \ No newline at end of file diff --git a/doc/librpm/html/rpmfileutil_8h__incl.png b/doc/librpm/html/rpmfileutil_8h__incl.png new file mode 100644 index 0000000..7ee8641 Binary files /dev/null and b/doc/librpm/html/rpmfileutil_8h__incl.png differ diff --git a/doc/librpm/html/rpmfileutil_8h_source.html b/doc/librpm/html/rpmfileutil_8h_source.html new file mode 100644 index 0000000..f58edbf --- /dev/null +++ b/doc/librpm/html/rpmfileutil_8h_source.html @@ -0,0 +1,105 @@ + + + + +rpm: rpmfileutil.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmfileutil.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMFILEUTIL_H
+00002 #define _RPMFILEUTIL_H
+00003 
+00009 #include <rpm/rpmutil.h>
+00010 #include <rpm/rpmio.h>
+00011 #include <rpm/rpmpgp.h>
+00012 #include <rpm/argv.h>
+00013 
+00014 #ifdef __cplusplus
+00015 extern "C" {
+00016 #endif
+00017 
+00020 typedef enum rpmCompressedMagic_e {
+00021     COMPRESSED_NOT              = 0,    
+00022     COMPRESSED_OTHER            = 1,    
+00023     COMPRESSED_BZIP2            = 2,    
+00024     COMPRESSED_ZIP              = 3,    
+00025     COMPRESSED_LZMA             = 4,    
+00026     COMPRESSED_XZ               = 5,    
+00027     COMPRESSED_LZIP             = 6,    
+00028     COMPRESSED_LRZIP            = 7     
+00029 } rpmCompressedMagic;
+00030 
+00040 int rpmDoDigest(int algo, const char * fn,int asAscii,
+00041                   unsigned char * digest, rpm_loff_t * fsizep);
+00042 
+00048 FD_t rpmMkTemp(char *templ);
+00049 
+00060 FD_t rpmMkTempFile(const char * prefix, char **fn);
+00061 
+00070 int rpmioMkpath(const char * path, mode_t mode, uid_t uid, gid_t gid);
+00071 
+00080 int rpmMkdirs(const char *root, const char *pathstr);
+00081 
+00087 char * rpmCleanPath     (char * path);
+00088 
+00099 char * rpmGenPath       (const char * urlroot,
+00100                         const char * urlmdir,
+00101                         const char * urlfile);
+00102 
+00108 char * rpmGetPath (const char * path, ...) RPM_GNUC_NULL_TERMINATED;
+00109 
+00117 int rpmGlob(const char * patterns, int * argcPtr, ARGV_t * argvPtr);
+00118 
+00124 char * rpmEscapeSpaces(const char * s);
+00125 
+00132 int rpmFileIsCompressed (const char * file, rpmCompressedMagic * compressed);
+00133 
+00140 int rpmFileHasSuffix(const char *path, const char *suffix);
+00141 
+00146 char * rpmGetCwd(void);
+00147 
+00148 #ifdef __cplusplus
+00149 }
+00150 #endif
+00151 #endif /* _RPMFILEUTIL_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmio_8h.html b/doc/librpm/html/rpmio_8h.html new file mode 100644 index 0000000..f561994 --- /dev/null +++ b/doc/librpm/html/rpmio_8h.html @@ -0,0 +1,144 @@ + + + + +rpm: rpmio.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmio.h File Reference
+
+
+
#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmsw.h>
+
+Include dependency graph for rpmio.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef off_t _libio_off_t
 Hide libio API lossage.
typedef off_t _libio_pos_t
typedef struct FDIO_s * FDIO_t

+Functions

RPMIO Interface.
const char * Fstrerror (FD_t fd)
 strerror(3) clone.
ssize_t Fread (void *buf, size_t size, size_t nmemb, FD_t fd)
 fread(3) clone.
ssize_t Fwrite (const void *buf, size_t size, size_t nmemb, FD_t fd)
 fwrite(3) clone.
int Fseek (FD_t fd, _libio_off_t offset, int whence)
 fseek(3) clone.
off_t Ftell (FD_t fd)
 ftell(3) clone.
int Fclose (FD_t fd)
 fclose(3) clone.
FD_t Fdopen (FD_t ofd, const char *fmode)
FD_t Fopen (const char *path, const char *fmode)
 fopen(3) clone.
int Fflush (FD_t fd)
 fflush(3) clone.
int Ferror (FD_t fd)
 ferror(3) clone.
int Fileno (FD_t fd)
 fileno(3) clone.
int Fcntl (FD_t fd, int op, void *lip)
 fcntl(2) clone.

+RPMIO Utilities.

enum  fdOpX_e {
+  FDSTAT_READ = 0, +FDSTAT_WRITE = 1, +FDSTAT_SEEK = 2, +FDSTAT_CLOSE = 3, +
+  FDSTAT_DIGEST = 4, +FDSTAT_MAX = 5 +
+ }
 Identify per-desciptor I/O operation statistics. More...
typedef enum fdOpX_e fdOpX
 Identify per-desciptor I/O operation statistics.
off_t fdSize (FD_t fd)
FD_t fdDup (int fdno)
FILE * fdGetFILE (FD_t fd)
 Get associated FILE stream from fd (if any)
FD_t fdLink (void *cookie)
FD_t fdFree (FD_t fd)
FD_t fdNew (void)
int ufdCopy (FD_t sfd, FD_t tfd)
ssize_t timedRead (FD_t fd, void *bufptr, size_t length)
 XXX the name is misleading, this is a legacy wrapper that ensures only S_ISREG() files are read, nothing to do with timed...
rpmop fdOp (FD_t fd, fdOpX opx)
+

Detailed Description

+
+

Definition in file rpmio.h.

+

Typedef Documentation

+ +
+
+ + + + +
typedef off_t _libio_pos_t
+
+
+ +

Definition at line 35 of file rpmio.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmio_8h__incl.map b/doc/librpm/html/rpmio_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmio_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmio_8h__incl.md5 b/doc/librpm/html/rpmio_8h__incl.md5 new file mode 100644 index 0000000..badf445 --- /dev/null +++ b/doc/librpm/html/rpmio_8h__incl.md5 @@ -0,0 +1 @@ +36cceae7bb0e77ee86f6e0dcf41ca1ca \ No newline at end of file diff --git a/doc/librpm/html/rpmio_8h__incl.png b/doc/librpm/html/rpmio_8h__incl.png new file mode 100644 index 0000000..e679f19 Binary files /dev/null and b/doc/librpm/html/rpmio_8h__incl.png differ diff --git a/doc/librpm/html/rpmio_8h_source.html b/doc/librpm/html/rpmio_8h_source.html new file mode 100644 index 0000000..fbd7a1e --- /dev/null +++ b/doc/librpm/html/rpmio_8h_source.html @@ -0,0 +1,136 @@ + + + + +rpm: rpmio.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmio.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMIO
+00002 #define H_RPMIO
+00003 
+00009 #include <sys/types.h>
+00010 #include <sys/stat.h>
+00011 #include <stdio.h>
+00012 #include <stdlib.h>
+00013 #include <unistd.h>
+00014 
+00015 #include <rpm/rpmtypes.h>
+00016 #include <rpm/rpmsw.h>
+00017 
+00018 #ifdef __cplusplus
+00019 extern "C" {
+00020 #endif
+00021 
+00028 #if defined(__GLIBC__) && \
+00029         (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2))
+00030 #define USE_COOKIE_SEEK_POINTER 1
+00031 typedef _IO_off64_t     _libio_off_t;
+00032 typedef _libio_off_t *  _libio_pos_t;
+00033 #else
+00034 typedef off_t           _libio_off_t;
+00035 typedef off_t           _libio_pos_t;
+00036 #endif
+00037 
+00040 typedef const struct FDIO_s * FDIO_t;
+00041 
+00042 
+00050 const char * Fstrerror(FD_t fd);
+00051 
+00055 ssize_t Fread(void * buf, size_t size, size_t nmemb, FD_t fd);
+00056 
+00060 ssize_t Fwrite(const void * buf, size_t size, size_t nmemb, FD_t fd);
+00061 
+00065 int Fseek(FD_t fd, _libio_off_t offset, int whence);
+00066 
+00070 off_t Ftell(FD_t fd);
+00071 
+00075 int Fclose( FD_t fd);
+00076 
+00079 FD_t    Fdopen(FD_t ofd, const char * fmode);
+00080 
+00084 FD_t    Fopen(const char * path,
+00085                         const char * fmode);
+00086 
+00087 
+00091 int Fflush(FD_t fd);
+00092 
+00096 int Ferror(FD_t fd);
+00097 
+00101 int Fileno(FD_t fd);
+00102 
+00106 int Fcntl(FD_t fd, int op, void *lip);
+00107 
+00114 off_t   fdSize(FD_t fd);
+00115 
+00118 FD_t fdDup(int fdno);
+00119 
+00123 FILE * fdGetFILE(FD_t fd);
+00124 
+00127 FD_t fdLink(void * cookie);
+00128 
+00131 FD_t fdFree(FD_t fd);
+00132 
+00135 FD_t fdNew (void);
+00136 
+00139 int ufdCopy(FD_t sfd, FD_t tfd);
+00140 
+00146 ssize_t timedRead(FD_t fd, void * bufptr, size_t length);
+00147 
+00151 typedef enum fdOpX_e {
+00152     FDSTAT_READ         = 0,    
+00153     FDSTAT_WRITE        = 1,    
+00154     FDSTAT_SEEK         = 2,    
+00155     FDSTAT_CLOSE        = 3,    
+00156     FDSTAT_DIGEST       = 4,    
+00157     FDSTAT_MAX          = 5
+00158 } fdOpX;
+00159 
+00163 rpmop fdOp(FD_t fd, fdOpX opx);
+00164 
+00165 #ifdef __cplusplus
+00166 }
+00167 #endif
+00168 
+00169 #endif  /* H_RPMIO */
+
+
+ + + diff --git a/doc/librpm/html/rpmkeyring_8h.html b/doc/librpm/html/rpmkeyring_8h.html new file mode 100644 index 0000000..62a1905 --- /dev/null +++ b/doc/librpm/html/rpmkeyring_8h.html @@ -0,0 +1,89 @@ + + + + +rpm: rpmkeyring.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmkeyring.h File Reference
+
+
+
#include <rpm/rpmtypes.h>
+#include <rpm/rpmpgp.h>
+
+Include dependency graph for rpmkeyring.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

rpmKeyring rpmKeyringNew (void)
 Create a new, empty keyring.
rpmKeyring rpmKeyringFree (rpmKeyring keyring)
 Free keyring and the keys within it.
int rpmKeyringAddKey (rpmKeyring keyring, rpmPubkey key)
 Add a public key to keyring.
rpmRC rpmKeyringLookup (rpmKeyring keyring, pgpDig sig)
 Perform keyring lookup for a key matching a signature.
rpmKeyring rpmKeyringLink (rpmKeyring keyring)
 Reference a keyring.
rpmPubkey rpmPubkeyNew (const uint8_t *pkt, size_t pktlen)
 Create a new rpmPubkey from OpenPGP packet.
rpmPubkey rpmPubkeyRead (const char *filename)
 Create a new rpmPubkey from ASCII-armored pubkey file.
rpmPubkey rpmPubkeyFree (rpmPubkey key)
 Free a pubkey.
rpmPubkey rpmPubkeyLink (rpmPubkey key)
 Reference a pubkey.
pgpDig rpmPubkeyDig (rpmPubkey key)
 Parse OpenPGP pubkey parameters.
char * rpmPubkeyBase64 (rpmPubkey key)
 Return base64 encoding of pubkey.
+

Detailed Description

+
+

Definition in file rpmkeyring.h.

+
+ + + diff --git a/doc/librpm/html/rpmkeyring_8h__incl.map b/doc/librpm/html/rpmkeyring_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmkeyring_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmkeyring_8h__incl.md5 b/doc/librpm/html/rpmkeyring_8h__incl.md5 new file mode 100644 index 0000000..3ceda4e --- /dev/null +++ b/doc/librpm/html/rpmkeyring_8h__incl.md5 @@ -0,0 +1 @@ +83a96bc49daa58479fd2b53e0f79f14a \ No newline at end of file diff --git a/doc/librpm/html/rpmkeyring_8h__incl.png b/doc/librpm/html/rpmkeyring_8h__incl.png new file mode 100644 index 0000000..0823760 Binary files /dev/null and b/doc/librpm/html/rpmkeyring_8h__incl.png differ diff --git a/doc/librpm/html/rpmkeyring_8h_source.html b/doc/librpm/html/rpmkeyring_8h_source.html new file mode 100644 index 0000000..a24616f --- /dev/null +++ b/doc/librpm/html/rpmkeyring_8h_source.html @@ -0,0 +1,85 @@ + + + + +rpm: rpmkeyring.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmkeyring.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMKEYRING_H
+00002 #define _RPMKEYRING_H
+00003 
+00008 #include <rpm/rpmtypes.h>
+00009 #include <rpm/rpmpgp.h>
+00010 
+00011 #ifdef __cplusplus
+00012 extern "C" {
+00013 #endif
+00014 
+00019 rpmKeyring rpmKeyringNew(void);
+00020 
+00025 rpmKeyring rpmKeyringFree(rpmKeyring keyring);
+00026 
+00033 int rpmKeyringAddKey(rpmKeyring keyring, rpmPubkey key);
+00034 
+00041 rpmRC rpmKeyringLookup(rpmKeyring keyring, pgpDig sig);
+00042 
+00048 rpmKeyring rpmKeyringLink(rpmKeyring keyring);
+00049 
+00056 rpmPubkey rpmPubkeyNew(const uint8_t *pkt, size_t pktlen);
+00057 
+00063 rpmPubkey rpmPubkeyRead(const char *filename);
+00064 
+00070 rpmPubkey rpmPubkeyFree(rpmPubkey key);
+00071 
+00077 rpmPubkey rpmPubkeyLink(rpmPubkey key);
+00078 
+00084 pgpDig rpmPubkeyDig(rpmPubkey key);
+00085 
+00091 char * rpmPubkeyBase64(rpmPubkey key);
+00092 
+00093 #ifdef __cplusplus
+00094 }
+00095 #endif
+00096 #endif /* _RPMKEYDB_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmkeys_8c.html b/doc/librpm/html/rpmkeys_8c.html new file mode 100644 index 0000000..9315a2b --- /dev/null +++ b/doc/librpm/html/rpmkeys_8c.html @@ -0,0 +1,280 @@ + + + + +rpm: rpmkeys.c File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmkeys.c File Reference
+
+
+
#include "system.h"
+#include <popt.h>
+#include <rpm/rpmcli.h>
+#include "cliutils.h"
+#include "debug.h"
+
+Include dependency graph for rpmkeys.c:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + + +

+Enumerations

enum  modes {
+  MODE_BUILD = (1 << 4), +MODE_REBUILD = (1 << 5), +MODE_RECOMPILE = (1 << 8), +MODE_TARBUILD = (1 << 11), +
+  MODE_INITDB = (1 << 0), +MODE_REBUILDDB = (1 << 1), +MODE_VERIFYDB = (1 << 2), +MODE_CHECKSIG = (1 << 0), +
+  MODE_IMPORTKEY = (1 << 1), +MODE_DELKEY = (1 << 2), +MODE_LISTKEY = (1 << 3), +MODE_QUERY = (1 << 0), +
+  MODE_VERIFY = (1 << 3), +MODE_ADDSIGN = (1 << 0), +MODE_RESIGN = (1 << 1), +MODE_DELSIGN = (1 << 2), +
+  MODE_UNKNOWN = 0, +MODE_QUERY = (1 << 0), +MODE_PARSE = (1 << 1) +
+ }

+Functions

int main (int argc, char *argv[])

+Variables

char ** environ = NULL
static int mode = 0
static struct poptOption keyOptsTable []
static struct poptOption optionsTable []
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum modes
+
+
+
Enumerator:
+ + + + + + + + + + + + + + + + + + + +
MODE_BUILD  +
MODE_REBUILD  +
MODE_RECOMPILE  +
MODE_TARBUILD  +
MODE_INITDB  +
MODE_REBUILDDB  +
MODE_VERIFYDB  +
MODE_CHECKSIG  +
MODE_IMPORTKEY  +
MODE_DELKEY  +
MODE_LISTKEY  +
MODE_QUERY  +
MODE_VERIFY  +
MODE_ADDSIGN  +
MODE_RESIGN  +
MODE_DELSIGN  +
MODE_UNKNOWN  +
MODE_QUERY  +
MODE_PARSE  +
+
+
+ +

Definition at line 12 of file rpmkeys.c.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+ +
+

Variable Documentation

+ +
+
+ + + + +
char** environ = NULL
+
+
+ +

Definition at line 9 of file rpmkeys.c.

+ +
+
+ +
+
+ + + + +
struct poptOption keyOptsTable[] [static]
+
+
+Initial value:
 {
+    { "checksig", 'K', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_CHECKSIG,
+         "verify package signature(s)" , NULL },
+    { "import", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_IMPORTKEY,
+         "import an armored public key" , NULL },
+
+
+
+
+
+
+    POPT_TABLEEND
+}
+
+

Definition at line 21 of file rpmkeys.c.

+ +
+
+ +
+
+ + + + +
int mode = 0 [static]
+
+
+ +

Definition at line 19 of file rpmkeys.c.

+ +
+
+ +
+
+ + + + +
struct poptOption optionsTable[] [static]
+
+
+Initial value:
 {
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, keyOptsTable, 0,
+         "Keyring options:" , NULL },
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+         "Common options for all rpm modes and executables:" , NULL },
+
+    POPT_AUTOALIAS
+    POPT_AUTOHELP
+    POPT_TABLEEND
+}
+
+

Definition at line 35 of file rpmkeys.c.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmkeys_8c__incl.map b/doc/librpm/html/rpmkeys_8c__incl.map new file mode 100644 index 0000000..044c639 --- /dev/null +++ b/doc/librpm/html/rpmkeys_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/rpmkeys_8c__incl.md5 b/doc/librpm/html/rpmkeys_8c__incl.md5 new file mode 100644 index 0000000..03b02fc --- /dev/null +++ b/doc/librpm/html/rpmkeys_8c__incl.md5 @@ -0,0 +1 @@ +7af6ce9d4aef38de3216f58ac8554485 \ No newline at end of file diff --git a/doc/librpm/html/rpmkeys_8c__incl.png b/doc/librpm/html/rpmkeys_8c__incl.png new file mode 100644 index 0000000..10ae091 Binary files /dev/null and b/doc/librpm/html/rpmkeys_8c__incl.png differ diff --git a/doc/librpm/html/rpmkeys_8c_source.html b/doc/librpm/html/rpmkeys_8c_source.html new file mode 100644 index 0000000..06cbf4c --- /dev/null +++ b/doc/librpm/html/rpmkeys_8c_source.html @@ -0,0 +1,133 @@ + + + + +rpm: rpmkeys.c Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmkeys.c
+
+
+Go to the documentation of this file.
00001 #include "system.h"
+00002 
+00003 #include <popt.h>
+00004 #include <rpm/rpmcli.h>
+00005 #include "cliutils.h"
+00006 #include "debug.h"
+00007 
+00008 #if !defined(__GLIBC__) && !defined(__APPLE__)
+00009 char ** environ = NULL;
+00010 #endif
+00011 
+00012 enum modes {
+00013     MODE_CHECKSIG       = (1 << 0),
+00014     MODE_IMPORTKEY      = (1 << 1),
+00015     MODE_DELKEY         = (1 << 2),
+00016     MODE_LISTKEY        = (1 << 3),
+00017 };
+00018 
+00019 static int mode = 0;
+00020 
+00021 static struct poptOption keyOptsTable[] = {
+00022     { "checksig", 'K', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_CHECKSIG,
+00023         N_("verify package signature(s)"), NULL },
+00024     { "import", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_IMPORTKEY,
+00025         N_("import an armored public key"), NULL },
+00026 #if 0
+00027     { "delete-key", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_DELKEY,
+00028         N_("list keys from RPM keyring"), NULL },
+00029     { "list-keys", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_LISTKEY,
+00030         N_("list keys from RPM keyring"), NULL },
+00031 #endif
+00032     POPT_TABLEEND
+00033 };
+00034 
+00035 static struct poptOption optionsTable[] = {
+00036     { NULL, '\0', POPT_ARG_INCLUDE_TABLE, keyOptsTable, 0,
+00037         N_("Keyring options:"), NULL },
+00038     { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+00039         N_("Common options for all rpm modes and executables:"), NULL },
+00040 
+00041     POPT_AUTOALIAS
+00042     POPT_AUTOHELP
+00043     POPT_TABLEEND
+00044 };
+00045 
+00046 int main(int argc, char *argv[])
+00047 {
+00048     int ec = EXIT_FAILURE;
+00049     poptContext optCon = rpmcliInit(argc, argv, optionsTable);
+00050     rpmts ts = rpmtsCreate();
+00051     ARGV_const_t args = NULL;
+00052     
+00053     if (argc < 2) {
+00054         printUsage(optCon, stderr, 0);
+00055         goto exit;
+00056     }
+00057 
+00058     args = (ARGV_const_t) poptGetArgs(optCon);
+00059 
+00060     if (mode != MODE_LISTKEY && args == NULL)
+00061         argerror(_("no arguments given"));
+00062 
+00063     rpmtsSetRootDir(ts, rpmcliRootDir);
+00064 
+00065     switch (mode) {
+00066     case MODE_CHECKSIG:
+00067         ec = rpmcliVerifySignatures(ts, args);
+00068         break;
+00069     case MODE_IMPORTKEY:
+00070         ec = rpmcliImportPubkeys(ts, args);
+00071         break;
+00072     /* XXX TODO: actually implement these... */
+00073     case MODE_DELKEY:
+00074     case MODE_LISTKEY:
+00075         break;
+00076     default:
+00077         argerror(_("only one major mode may be specified"));
+00078     }
+00079 
+00080 exit:
+00081     rpmtsFree(ts);
+00082     rpmcliFini(optCon);
+00083     return ec;
+00084 }
+
+
+ + + diff --git a/doc/librpm/html/rpmlegacy_8h.html b/doc/librpm/html/rpmlegacy_8h.html new file mode 100644 index 0000000..92dd442 --- /dev/null +++ b/doc/librpm/html/rpmlegacy_8h.html @@ -0,0 +1,60 @@ + + + + +rpm: rpmlegacy.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
+
rpmlegacy.h File Reference
+
+
+
#include <rpm/rpmtypes.h>
+#include <rpm/rpmutil.h>
+
+Include dependency graph for rpmlegacy.h:
+
+
+
+
+

Go to the source code of this file.

+ +
+
+ + + diff --git a/doc/librpm/html/rpmlegacy_8h__incl.map b/doc/librpm/html/rpmlegacy_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmlegacy_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmlegacy_8h__incl.md5 b/doc/librpm/html/rpmlegacy_8h__incl.md5 new file mode 100644 index 0000000..6faa997 --- /dev/null +++ b/doc/librpm/html/rpmlegacy_8h__incl.md5 @@ -0,0 +1 @@ +930c27166ba8a83efc99fa21e2d9ea4c \ No newline at end of file diff --git a/doc/librpm/html/rpmlegacy_8h__incl.png b/doc/librpm/html/rpmlegacy_8h__incl.png new file mode 100644 index 0000000..42055ad Binary files /dev/null and b/doc/librpm/html/rpmlegacy_8h__incl.png differ diff --git a/doc/librpm/html/rpmlegacy_8h_source.html b/doc/librpm/html/rpmlegacy_8h_source.html new file mode 100644 index 0000000..6737dbe --- /dev/null +++ b/doc/librpm/html/rpmlegacy_8h_source.html @@ -0,0 +1,158 @@ + + + + +rpm: rpmlegacy.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmlegacy.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMLEGACY_H
+00002 #define _RPMLEGACY_H
+00003 
+00004 #include <rpm/rpmtypes.h>
+00005 #include <rpm/rpmutil.h>
+00006 
+00007 /* ==================================================================== */
+00008 /*         LEGACY INTERFACES AND TYPES, DO NOT USE IN NEW CODE!         */
+00009 /* ==================================================================== */
+00010 
+00011 #ifdef __cplusplus
+00012 extern "C" {
+00013 #endif
+00014 
+00015 #ifdef _RPM_4_4_COMPAT
+00016 
+00017 /* mappings for legacy types */
+00018 typedef int32_t         int_32 RPM_GNUC_DEPRECATED;
+00019 typedef int16_t         int_16 RPM_GNUC_DEPRECATED;
+00020 typedef int8_t          int_8 RPM_GNUC_DEPRECATED;
+00021 typedef uint32_t        uint_32 RPM_GNUC_DEPRECATED;
+00022 typedef uint16_t        uint_16 RPM_GNUC_DEPRECATED;
+00023 typedef uint8_t         uint_8 RPM_GNUC_DEPRECATED;
+00024 
+00025 typedef rpm_tag_t *     hTAG_t RPM_GNUC_DEPRECATED;
+00026 typedef rpm_tagtype_t * hTYP_t RPM_GNUC_DEPRECATED;
+00027 typedef const void *    hPTR_t RPM_GNUC_DEPRECATED;
+00028 typedef rpm_count_t *   hCNT_t RPM_GNUC_DEPRECATED;
+00029 
+00030 typedef rpmSpec         Spec RPM_GNUC_DEPRECATED;
+00031 
+00032 /* legacy header interfaces */
+00033 
+00048 int headerGetEntry(Header h, rpm_tag_t tag,
+00049                         rpm_tagtype_t * type,
+00050                         rpm_data_t * p,
+00051                         rpm_count_t * c) RPM_GNUC_DEPRECATED;
+00052 
+00066 int headerGetEntryMinMemory(Header h, rpm_tag_t tag,
+00067                         rpm_tagtype_t * type,
+00068                         rpm_data_t * p, 
+00069                         rpm_count_t * c) RPM_GNUC_DEPRECATED;
+00070 
+00085 int headerAddEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type, 
+00086                    rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED;
+00087 
+00102 int headerAppendEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type,
+00103                 rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED;
+00104 
+00114 int headerAddOrAppendEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type,
+00115                 rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED;
+00116 
+00129 int headerModifyEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type,
+00130                         rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED;
+00131 
+00142 int headerRemoveEntry(Header h, rpm_tag_t tag) RPM_GNUC_DEPRECATED;
+00143 
+00156 #define headerSprintf(_h, _fmt, _tbltags, _exts, _emsg) \
+00157         headerFormat((_h), (_fmt), (_emsg))
+00158 
+00170 int headerNextIterator(HeaderIterator hi,
+00171                 rpm_tag_t * tag,
+00172                 rpm_tagtype_t * type,
+00173                 rpm_data_t * p,
+00174                 rpm_count_t * c) RPM_GNUC_DEPRECATED;
+00175 
+00185 void * headerFreeTag(Header h, rpm_data_t data, rpm_tagtype_t type) RPM_GNUC_DEPRECATED;
+00186 
+00195 void * headerFreeData(rpm_data_t data, rpm_tagtype_t type) RPM_GNUC_DEPRECATED;
+00196 
+00201 typedef void * (*HFD_t) (rpm_data_t data, rpm_tagtype_t type) RPM_GNUC_DEPRECATED;
+00202 typedef int (*HGE_t) (Header h, rpm_tag_t tag, rpm_tagtype_t * type,
+00203                         rpm_data_t * p, rpm_count_t * c) RPM_GNUC_DEPRECATED;
+00204 typedef int (*HAE_t) (Header h, rpm_tag_t tag, rpm_tagtype_t type,
+00205                         rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED;
+00206 typedef int (*HME_t) (Header h, rpm_tag_t tag, rpm_tagtype_t type,
+00207                         rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED;
+00208 typedef int (*HRE_t) (Header h, rpm_tag_t tag) RPM_GNUC_DEPRECATED;
+00211 /* other misc renamed / namespaced functions */
+00212 /* TODO: arrange deprecation warnings on these too... */
+00213 #define isCompressed    rpmFileIsCompressed
+00214 #define makeTempFile    rpmMkTempFile
+00215 #define whatis          rpmfiWhatis
+00216 #define tagName         rpmTagGetName
+00217 #define tagType         rpmTagGetType
+00218 #define tagValue        rpmTagGetValue
+00219 
+00220 #define xislower        rislower
+00221 #define xisupper        risupper
+00222 #define xisalpha        risalpha
+00223 #define xisdigit        risdigit
+00224 #define xisalnum        risalnum
+00225 #define xisblank        risblank
+00226 #define xisspace        risspace
+00227 #define xtolower        rtolower
+00228 #define xtoupper        rtoupper
+00229 #define xstrcasecmp     rstrcasecmp
+00230 #define xstrncasecmp    rstrncasecmp
+00231 
+00232 #define rpmMessage      rpmlog
+00233 #define rpmError        rpmlog
+00234 
+00235 #endif /* _RPM_4_4_COMPAT */
+00236 
+00237 #ifdef __cplusplus
+00238 }
+00239 #endif
+00240 
+00241 #endif /* _RPMLEGACY_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmlib_8h.html b/doc/librpm/html/rpmlib_8h.html new file mode 100644 index 0000000..43cbc62 --- /dev/null +++ b/doc/librpm/html/rpmlib_8h.html @@ -0,0 +1,353 @@ + + + + +rpm: rpmlib.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+ +
+ +

In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not. +More...

+
#include <popt.h>
+#include <rpm/rpmio.h>
+#include <rpm/header.h>
+#include <rpm/rpmtag.h>
+#include <rpm/rpmds.h>
+#include <rpm/rpmpgp.h>
+
+Include dependency graph for rpmlib.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void headerMergeLegacySigs (Header h, const Header sigh)
 Translate and merge legacy signature tags into header.
Header headerRegenSigHeader (const Header h, int noArchiveSize)
 Regenerate signature header.

+Variables

struct rpmMacroContext_s * rpmGlobalMacroContext
struct rpmMacroContext_s * rpmCLIMacroContext
const char *const RPMVERSION
const char *const rpmNAME
const char *const rpmEVR
const int rpmFLAGS

+RPMRC

#define RPM_MACHTABLE_COUNT   4
enum  rpm_machtable_e { RPM_MACHTABLE_INSTARCH = 0, +RPM_MACHTABLE_INSTOS = 1, +RPM_MACHTABLE_BUILDARCH = 2, +RPM_MACHTABLE_BUILDOS = 3 + }
 Build and install arch/os table identifiers. More...
int rpmReadConfigFiles (const char *file, const char *target)
 Read macro configuration file(s) for a target.
void rpmGetArchInfo (const char **name, int *num)
 Return current arch name and/or number.
void rpmGetOsInfo (const char **name, int *num)
 Return current os name and/or number.
int rpmMachineScore (int type, const char *name)
 Return arch/os score of a name.
int rpmShowRC (FILE *fp)
 Display current rpmrc (and macro) configuration.
void rpmSetTables (int archTable, int osTable)
void rpmFreeRpmrc (void)
 Destroy rpmrc arch/os compatibility tables.
int rpmVersionCompare (Header first, Header second)
 Compare headers to determine which header is "newer".
rpmRC headerCheckPayloadFormat (Header h)
 Check for supported payload format in header.
rpmRC headerCheck (rpmts ts, const void *uh, size_t uc, char **msg)
 Check header consistency, performing headerGetEntry() the hard way.
rpmRC rpmReadHeader (rpmts ts, FD_t fd, Header *hdrp, char **msg)
 Return checked and loaded header.
rpmRC rpmReadPackageFile (rpmts ts, FD_t fd, const char *fn, Header *hdrp)
 Return package header from file handle, verifying digests/signatures.
rpmRC rpmInstallSourcePackage (rpmts ts, FD_t fd, char **specFilePtr, char **cookie)
 Install source package.
int rpmvercmp (const char *a, const char *b)
 Segmented string compare for version or release strings.
+

Detailed Description

+

In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.

+ +

Definition in file rpmlib.h.

+

Define Documentation

+ +
+
+ + + + +
#define RPM_MACHTABLE_COUNT   4
+
+
+

No. of arch/os tables.

+ +

Definition at line 68 of file rpmlib.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rpmRC rpmInstallSourcePackage (rpmts ts,
FD_t fd,
char ** specFilePtr,
char ** cookie 
)
+
+
+ +

Install source package.

+
Parameters:
+ + + +
tstransaction set
fdfile handle
+
+
+
Return values:
+ + + +
specFilePtraddress of spec file name (or NULL)
cookieaddress of cookie pointer (or NULL)
+
+
+
Returns:
rpmRC return code
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmvercmp (const char * a,
const char * b 
)
+
+
+ +

Segmented string compare for version or release strings.

+
Parameters:
+ + + +
a1st string
b2nd string
+
+
+
Returns:
+1 if a is "newer", 0 if equal, -1 if b is "newer"
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int rpmVersionCompare (Header first,
Header second 
)
+
+
+ +

Compare headers to determine which header is "newer".

+
Parameters:
+ + + +
first1st header
second2nd header
+
+
+
Returns:
result of comparison
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
struct rpmMacroContext_s* rpmCLIMacroContext
+
+
+ +
+
+ +
+
+ + + + +
const char* const rpmEVR
+
+
+ +

Referenced by printVersion().

+ +
+
+ +
+
+ + + + +
const int rpmFLAGS
+
+
+ +
+
+ +
+
+ + + + +
struct rpmMacroContext_s* rpmGlobalMacroContext
+
+
+ +
+
+ +
+
+ + + + +
const char* const rpmNAME
+
+
+ +
+
+ +
+
+ + + + +
const char* const RPMVERSION
+
+
+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmlib_8h__incl.map b/doc/librpm/html/rpmlib_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmlib_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmlib_8h__incl.md5 b/doc/librpm/html/rpmlib_8h__incl.md5 new file mode 100644 index 0000000..49d7cf6 --- /dev/null +++ b/doc/librpm/html/rpmlib_8h__incl.md5 @@ -0,0 +1 @@ +921a0bd48065758493d359bd12eb93e7 \ No newline at end of file diff --git a/doc/librpm/html/rpmlib_8h__incl.png b/doc/librpm/html/rpmlib_8h__incl.png new file mode 100644 index 0000000..a1c3e80 Binary files /dev/null and b/doc/librpm/html/rpmlib_8h__incl.png differ diff --git a/doc/librpm/html/rpmlib_8h_source.html b/doc/librpm/html/rpmlib_8h_source.html new file mode 100644 index 0000000..0c1d30a --- /dev/null +++ b/doc/librpm/html/rpmlib_8h_source.html @@ -0,0 +1,130 @@ + + + + +rpm: rpmlib.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmlib.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMLIB
+00002 #define H_RPMLIB
+00003 
+00011 #include <popt.h>
+00012 
+00013 #include <rpm/rpmio.h>
+00014 #include <rpm/header.h>
+00015 #include <rpm/rpmtag.h>
+00016 #include <rpm/rpmds.h>  /* XXX move rpmlib provides to rpmds instead */
+00017 #include <rpm/rpmpgp.h>
+00018 #ifdef _RPM_4_4_COMPAT
+00019 #include <rpm/rpmlegacy.h> /* legacy compat definitions if enabled */
+00020 #endif
+00021 
+00022 #ifdef __cplusplus
+00023 extern "C" {
+00024 #endif
+00025 
+00026 extern struct rpmMacroContext_s * rpmGlobalMacroContext;
+00027 
+00028 extern struct rpmMacroContext_s * rpmCLIMacroContext;
+00029 
+00030 extern const char * const RPMVERSION;
+00031 
+00032 extern const char * const rpmNAME;
+00033 
+00034 extern const char * const rpmEVR;
+00035 
+00036 extern const int rpmFLAGS;
+00037 
+00044 void headerMergeLegacySigs(Header h, const Header sigh);
+00045 
+00053 Header headerRegenSigHeader(const Header h, int noArchiveSize);
+00054 
+00055 /* ==================================================================== */
+00062 enum rpm_machtable_e {
+00063     RPM_MACHTABLE_INSTARCH      = 0,    
+00064     RPM_MACHTABLE_INSTOS        = 1,    
+00065     RPM_MACHTABLE_BUILDARCH     = 2,    
+00066     RPM_MACHTABLE_BUILDOS       = 3     
+00067 };
+00068 #define RPM_MACHTABLE_COUNT     4       
+00076 int rpmReadConfigFiles(const char * file,
+00077                 const char * target);
+00078 
+00085 void rpmGetArchInfo( const char ** name,
+00086                 int * num);
+00087 
+00094 void rpmGetOsInfo( const char ** name,
+00095                 int * num);
+00096 
+00110 int rpmMachineScore(int type, const char * name);
+00111 
+00117 int rpmShowRC(FILE * fp);
+00118 
+00126 void rpmSetTables(int archTable, int osTable);
+00127 
+00132 void rpmFreeRpmrc(void);
+00133 
+00140 int rpmVersionCompare(Header first, Header second);
+00141 
+00147 rpmRC headerCheckPayloadFormat(Header h);
+00148 
+00162 rpmRC headerCheck(rpmts ts, const void * uh, size_t uc, char ** msg);
+00163 
+00172 rpmRC rpmReadHeader(rpmts ts, FD_t fd, Header *hdrp, char ** msg);
+00173 
+00182 rpmRC rpmReadPackageFile(rpmts ts, FD_t fd,
+00183                 const char * fn, Header * hdrp);
+00184 
+00193 rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd,
+00194                         char ** specFilePtr,
+00195                         char ** cookie);
+00196 
+00204 int rpmvercmp(const char * a, const char * b);
+00205 
+00206 #ifdef __cplusplus
+00207 }
+00208 #endif
+00209 
+00210 #endif  /* H_RPMLIB */
+
+
+ + + diff --git a/doc/librpm/html/rpmlog_8h.html b/doc/librpm/html/rpmlog_8h.html new file mode 100644 index 0000000..36ddddb --- /dev/null +++ b/doc/librpm/html/rpmlog_8h.html @@ -0,0 +1,590 @@ + + + + +rpm: rpmlog.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmlog.h File Reference
+
+
+ +

Yet Another syslog(3) API clone. +More...

+
#include <stdarg.h>
+#include <stdio.h>
+#include <rpm/rpmutil.h>
+
+Include dependency graph for rpmlog.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define RPMLOG_PRIMASK   0x07
#define RPMLOG_PRI(p)   ((p) & RPMLOG_PRIMASK)
#define RPMLOG_MAKEPRI(fac, pri)   ((((unsigned)(fac)) << 3) | (pri))
#define RPMLOG_NFACILITIES   24
#define RPMLOG_FACMASK   0x03f8
#define RPMLOG_FAC(p)   (((p) & RPMLOG_FACMASK) >> 3)
#define RPMLOG_MASK(pri)   (1 << ((unsigned)(pri)))
#define RPMLOG_UPTO(pri)   ((1 << (((unsigned)(pri))+1)) - 1)
#define RPMLOG_PID   0x01
#define RPMLOG_CONS   0x02
#define RPMLOG_ODELAY   0x04
#define RPMLOG_NDELAY   0x08
#define RPMLOG_NOWAIT   0x10
#define RPMLOG_PERROR   0x20
#define RPMLOG_DEFAULT   0x01
#define RPMLOG_EXIT   0x02
#define rpmSetVerbosity(_lvl)   ((void)rpmlogSetMask( RPMLOG_UPTO( RPMLOG_PRI(_lvl))))
#define rpmIncreaseVerbosity()   ((void)rpmlogSetMask(((((unsigned)(rpmlogSetMask(0) & 0xff)) << 1) | 1)))
#define rpmDecreaseVerbosity()   ((void)rpmlogSetMask((((int)(rpmlogSetMask(0) & 0xff)) >> 1)))
#define rpmIsNormal()   (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_NOTICE ))
#define rpmIsVerbose()   (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_INFO ))
#define rpmIsDebug()   (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_DEBUG ))

+Typedefs

typedef enum rpmlogLvl_e rpmlogLvl
 RPM Log levels.
typedef enum rpmlogFac_e rpmlogFac
 facility codes
typedef struct rpmlogRec_s * rpmlogRec
typedef void * rpmlogCallbackData
typedef int(* rpmlogCallback )(rpmlogRec rec, rpmlogCallbackData data)

+Enumerations

enum  rpmlogLvl_e {
+  RPMLOG_EMERG = 0, +RPMLOG_ALERT = 1, +RPMLOG_CRIT = 2, +RPMLOG_ERR = 3, +
+  RPMLOG_WARNING = 4, +RPMLOG_NOTICE = 5, +RPMLOG_INFO = 6, +RPMLOG_DEBUG = 7 +
+ }
 RPM Log levels. More...
enum  rpmlogFac_e {
+  RPMLOG_KERN = (0<<3), +RPMLOG_USER = (1<<3), +RPMLOG_MAIL = (2<<3), +RPMLOG_DAEMON = (3<<3), +
+  RPMLOG_AUTH = (4<<3), +RPMLOG_SYSLOG = (5<<3), +RPMLOG_LPR = (6<<3), +RPMLOG_NEWS = (7<<3), +
+  RPMLOG_UUCP = (8<<3), +RPMLOG_CRON = (9<<3), +RPMLOG_AUTHPRIV = (10<<3), +RPMLOG_FTP = (11<<3), +
+  RPMLOG_LOCAL0 = (16<<3), +RPMLOG_LOCAL1 = (17<<3), +RPMLOG_LOCAL2 = (18<<3), +RPMLOG_LOCAL3 = (19<<3), +
+  RPMLOG_LOCAL4 = (20<<3), +RPMLOG_LOCAL5 = (21<<3), +RPMLOG_LOCAL6 = (22<<3), +RPMLOG_LOCAL7 = (23<<3) +
+ }
 facility codes More...

+Functions

const char * rpmlogRecMessage (rpmlogRec rec)
 Retrieve log message string from rpmlog record.
rpmlogLvl rpmlogRecPriority (rpmlogRec rec)
 Retrieve log priority from rpmlog record.
int rpmlogGetNrecs (void)
 Return number of rpmError() ressages.
void rpmlogPrint (FILE *f)
 Print all rpmError() messages.
void rpmlogClose (void)
 Close desriptor used to write to system logger.
void rpmlogOpen (const char *ident, int option, int facility)
 Open connection to system logger.
int rpmlogSetMask (int mask)
 Set the log mask level.
void rpmlog (int code, const char *fmt,...) RPM_GNUC_PRINTF(2
 Generate a log message using FMT string and option arguments.
void const char * rpmlogMessage (void)
 Return text of last rpmError() message.
int rpmlogCode (void)
 Return error code from last rpmError() message.
const char * rpmlogLevelPrefix (rpmlogLvl pri)
 Return translated prefix string (if any) given log level.
rpmlogCallback rpmlogSetCallback (rpmlogCallback cb, rpmlogCallbackData data)
 Set rpmlog callback function.
FILE * rpmlogSetFile (FILE *fp)
 Set rpmlog file handle.
+

Detailed Description

+

Yet Another syslog(3) API clone.

+

Used to unify rpmError() and rpmMessage() interfaces in rpm.

+ +

Definition in file rpmlog.h.

+

Define Documentation

+ +
+
+ + + + + + + +
#define rpmDecreaseVerbosity()   ((void)rpmlogSetMask((((int)(rpmlogSetMask(0) & 0xff)) >> 1)))
+
+
+ +

Definition at line 268 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + +
#define rpmIncreaseVerbosity()   ((void)rpmlogSetMask(((((unsigned)(rpmlogSetMask(0) & 0xff)) << 1) | 1)))
+
+
+ +

Definition at line 266 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + +
#define rpmIsDebug()   (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_DEBUG ))
+
+
+ +

Definition at line 274 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + +
#define rpmIsNormal()   (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_NOTICE ))
+
+
+ +

Definition at line 270 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + +
#define rpmIsVerbose()   (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_INFO ))
+
+
+ +

Definition at line 272 of file rpmlog.h.

+ +

Referenced by main(), and printUsage().

+ +
+
+ +
+
+ + + + +
#define RPMLOG_CONS   0x02
+
+
+

log on the console if errors in sending

+ +

Definition at line 149 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_DEFAULT   0x01
+
+
+

perform default logging

+ +

Definition at line 158 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_EXIT   0x02
+
+
+

exit after logging

+ +

Definition at line 159 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPMLOG_FAC( p)   (((p) & RPMLOG_FACMASK) >> 3)
+
+
+ +

Definition at line 104 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_FACMASK   0x03f8
+
+
+

mask to extract facility part

+ +

Definition at line 103 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define RPMLOG_MAKEPRI( fac,
 pri 
)   ((((unsigned)(fac)) << 3) | (pri))
+
+
+ +

Definition at line 43 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPMLOG_MASK( pri)   (1 << ((unsigned)(pri)))
+
+
+

mask for one priority

+ +

Definition at line 139 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_NDELAY   0x08
+
+
+

don't delay open

+ +

Definition at line 151 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_NFACILITIES   24
+
+
+

current number of facilities

+ +

Definition at line 99 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_NOWAIT   0x10
+
+
+

don't wait for console forks: DEPRECATED

+ +

Definition at line 152 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_ODELAY   0x04
+
+
+

delay open until first syslog() (default)

+ +

Definition at line 150 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_PERROR   0x20
+
+
+

log to stderr as well

+ +

Definition at line 153 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_PID   0x01
+
+
+

log the pid with each message

+ +

Definition at line 148 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPMLOG_PRI( p)   ((p) & RPMLOG_PRIMASK)
+
+
+ +

Definition at line 42 of file rpmlog.h.

+ +
+
+ +
+
+ + + + +
#define RPMLOG_PRIMASK   0x07
+
+
+ +

Definition at line 40 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPMLOG_UPTO( pri)   ((1 << (((unsigned)(pri))+1)) - 1)
+
+
+

all priorities through pri

+ +

Definition at line 140 of file rpmlog.h.

+ +
+
+ +
+
+ + + + + + + + +
#define rpmSetVerbosity( _lvl)   ((void)rpmlogSetMask( RPMLOG_UPTO( RPMLOG_PRI(_lvl))))
+
+
+ +

Definition at line 264 of file rpmlog.h.

+ +

Referenced by main().

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef void* rpmlogCallbackData
+
+
+ +

Definition at line 179 of file rpmlog.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmlog_8h__incl.map b/doc/librpm/html/rpmlog_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmlog_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmlog_8h__incl.md5 b/doc/librpm/html/rpmlog_8h__incl.md5 new file mode 100644 index 0000000..fae2bf0 --- /dev/null +++ b/doc/librpm/html/rpmlog_8h__incl.md5 @@ -0,0 +1 @@ +9a386d53616b958af9702e192ac53490 \ No newline at end of file diff --git a/doc/librpm/html/rpmlog_8h__incl.png b/doc/librpm/html/rpmlog_8h__incl.png new file mode 100644 index 0000000..5636fca Binary files /dev/null and b/doc/librpm/html/rpmlog_8h__incl.png differ diff --git a/doc/librpm/html/rpmlog_8h_source.html b/doc/librpm/html/rpmlog_8h_source.html new file mode 100644 index 0000000..5f8f4a0 --- /dev/null +++ b/doc/librpm/html/rpmlog_8h_source.html @@ -0,0 +1,235 @@ + + + + +rpm: rpmlog.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmlog.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMLOG
+00002 #define H_RPMLOG 1
+00003 
+00010 #include <stdarg.h>
+00011 #include <stdio.h>
+00012 
+00013 #include <rpm/rpmutil.h>
+00014 
+00015 #ifdef __cplusplus
+00016 extern "C" {
+00017 #endif
+00018 
+00029 typedef enum rpmlogLvl_e {
+00030     RPMLOG_EMERG        = 0,    
+00031     RPMLOG_ALERT        = 1,    
+00032     RPMLOG_CRIT         = 2,    
+00033     RPMLOG_ERR          = 3,    
+00034     RPMLOG_WARNING      = 4,    
+00035     RPMLOG_NOTICE       = 5,    
+00036     RPMLOG_INFO         = 6,    
+00037     RPMLOG_DEBUG        = 7     
+00038 } rpmlogLvl;
+00039 
+00040 #define RPMLOG_PRIMASK  0x07    /* mask to extract priority part (internal) */
+00041                                 /* extract priority */
+00042 #define RPMLOG_PRI(p)   ((p) & RPMLOG_PRIMASK)
+00043 #define RPMLOG_MAKEPRI(fac, pri)        ((((unsigned)(fac)) << 3) | (pri))
+00044 
+00045 #ifdef RPMLOG_NAMES
+00046 #define _RPMLOG_NOPRI   0x10    /* the "no priority" priority */
+00047                                 /* mark "facility" */
+00048 #define _RPMLOG_MARK    RPMLOG_MAKEPRI(RPMLOG_NFACILITIES, 0)
+00049 typedef struct _rpmcode {
+00050         const char      *c_name;
+00051         int             c_val;
+00052 } RPMCODE;
+00053 
+00054 RPMCODE rpmprioritynames[] =
+00055   {
+00056     { "alert",  RPMLOG_ALERT },
+00057     { "crit",   RPMLOG_CRIT },
+00058     { "debug",  RPMLOG_DEBUG },
+00059     { "emerg",  RPMLOG_EMERG },
+00060     { "err",    RPMLOG_ERR },
+00061     { "error",  RPMLOG_ERR },           /* DEPRECATED */
+00062     { "info",   RPMLOG_INFO },
+00063     { "none",   _RPMLOG_NOPRI },        /* INTERNAL */
+00064     { "notice", RPMLOG_NOTICE },
+00065     { "panic",  RPMLOG_EMERG },         /* DEPRECATED */
+00066     { "warn",   RPMLOG_WARNING },       /* DEPRECATED */
+00067     { "warning",RPMLOG_WARNING },
+00068     { NULL, -1 }
+00069   };
+00070 #endif
+00071 
+00075 typedef enum rpmlogFac_e {
+00076     RPMLOG_KERN         = (0<<3),       
+00077     RPMLOG_USER         = (1<<3),       
+00078     RPMLOG_MAIL         = (2<<3),       
+00079     RPMLOG_DAEMON       = (3<<3),       
+00080     RPMLOG_AUTH         = (4<<3),       
+00081     RPMLOG_SYSLOG       = (5<<3),       
+00082     RPMLOG_LPR          = (6<<3),       
+00083     RPMLOG_NEWS         = (7<<3),       
+00084     RPMLOG_UUCP         = (8<<3),       
+00085     RPMLOG_CRON         = (9<<3),       
+00086     RPMLOG_AUTHPRIV     = (10<<3),      
+00087     RPMLOG_FTP          = (11<<3),      
+00089         /* other codes through 15 reserved for system use */
+00090     RPMLOG_LOCAL0       = (16<<3),      
+00091     RPMLOG_LOCAL1       = (17<<3),      
+00092     RPMLOG_LOCAL2       = (18<<3),      
+00093     RPMLOG_LOCAL3       = (19<<3),      
+00094     RPMLOG_LOCAL4       = (20<<3),      
+00095     RPMLOG_LOCAL5       = (21<<3),      
+00096     RPMLOG_LOCAL6       = (22<<3),      
+00097     RPMLOG_LOCAL7       = (23<<3),      
+00099 #define RPMLOG_NFACILITIES 24   
+00100     RPMLOG_ERRMSG       = (((unsigned)(RPMLOG_NFACILITIES+0))<<3)
+00101 } rpmlogFac;
+00102 
+00103 #define RPMLOG_FACMASK  0x03f8  
+00104 #define RPMLOG_FAC(p)   (((p) & RPMLOG_FACMASK) >> 3)
+00105 
+00106 
+00107 #ifdef RPMLOG_NAMES
+00108 RPMCODE facilitynames[] =
+00109   {
+00110     { "auth",   RPMLOG_AUTH },
+00111     { "authpriv",RPMLOG_AUTHPRIV },
+00112     { "cron",   RPMLOG_CRON },
+00113     { "daemon", RPMLOG_DAEMON },
+00114     { "ftp",    RPMLOG_FTP },
+00115     { "kern",   RPMLOG_KERN },
+00116     { "lpr",    RPMLOG_LPR },
+00117     { "mail",   RPMLOG_MAIL },
+00118     { "mark",   _RPMLOG_MARK },         /* INTERNAL */
+00119     { "news",   RPMLOG_NEWS },
+00120     { "security",RPMLOG_AUTH },         /* DEPRECATED */
+00121     { "syslog", RPMLOG_SYSLOG },
+00122     { "user",   RPMLOG_USER },
+00123     { "uucp",   RPMLOG_UUCP },
+00124     { "local0", RPMLOG_LOCAL0 },
+00125     { "local1", RPMLOG_LOCAL1 },
+00126     { "local2", RPMLOG_LOCAL2 },
+00127     { "local3", RPMLOG_LOCAL3 },
+00128     { "local4", RPMLOG_LOCAL4 },
+00129     { "local5", RPMLOG_LOCAL5 },
+00130     { "local6", RPMLOG_LOCAL6 },
+00131     { "local7", RPMLOG_LOCAL7 },
+00132     { NULL, -1 }
+00133   };
+00134 #endif
+00135 
+00136 /*
+00137  * arguments to setlogmask.
+00138  */
+00139 #define RPMLOG_MASK(pri) (1 << ((unsigned)(pri)))       
+00140 #define RPMLOG_UPTO(pri) ((1 << (((unsigned)(pri))+1)) - 1)     
+00142 /*
+00143  * Option flags for openlog.
+00144  *
+00145  * RPMLOG_ODELAY no longer does anything.
+00146  * RPMLOG_NDELAY is the inverse of what it used to be.
+00147  */
+00148 #define RPMLOG_PID      0x01    
+00149 #define RPMLOG_CONS     0x02    
+00150 #define RPMLOG_ODELAY   0x04    
+00151 #define RPMLOG_NDELAY   0x08    
+00152 #define RPMLOG_NOWAIT   0x10    
+00153 #define RPMLOG_PERROR   0x20    
+00155 /* \ingroup rpmlog
+00156  * Option flags for callback return value.
+00157  */
+00158 #define RPMLOG_DEFAULT  0x01    
+00159 #define RPMLOG_EXIT     0x02    
+00163 typedef struct rpmlogRec_s * rpmlogRec;
+00164 
+00170 const char * rpmlogRecMessage(rpmlogRec rec);
+00171 
+00177 rpmlogLvl rpmlogRecPriority(rpmlogRec rec);
+00178 
+00179 typedef void * rpmlogCallbackData;
+00180 
+00189 typedef int (*rpmlogCallback) (rpmlogRec rec, rpmlogCallbackData data);
+00190 
+00195 int rpmlogGetNrecs(void)        ;
+00196 
+00201 void rpmlogPrint(FILE *f);
+00202 
+00207 void rpmlogClose (void);
+00208 
+00213 void rpmlogOpen (const char * ident, int option, int facility);
+00214 
+00220 int rpmlogSetMask (int mask);
+00221 
+00225 void rpmlog (int code, const char *fmt, ...) RPM_GNUC_PRINTF(2, 3);
+00226 
+00231 const char * rpmlogMessage(void);
+00232 
+00240 int rpmlogCode(void);
+00241 
+00247 const char * rpmlogLevelPrefix(rpmlogLvl pri);
+00248 
+00255 rpmlogCallback rpmlogSetCallback(rpmlogCallback cb, rpmlogCallbackData data);
+00256 
+00262 FILE * rpmlogSetFile(FILE * fp);
+00263 
+00264 #define rpmSetVerbosity(_lvl)   \
+00265         ((void)rpmlogSetMask( RPMLOG_UPTO( RPMLOG_PRI(_lvl))))
+00266 #define rpmIncreaseVerbosity()  \
+00267     ((void)rpmlogSetMask(((((unsigned)(rpmlogSetMask(0) & 0xff)) << 1) | 1)))
+00268 #define rpmDecreaseVerbosity()  \
+00269         ((void)rpmlogSetMask((((int)(rpmlogSetMask(0) & 0xff)) >> 1)))
+00270 #define rpmIsNormal()           \
+00271         (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_NOTICE ))
+00272 #define rpmIsVerbose()          \
+00273         (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_INFO ))
+00274 #define rpmIsDebug()            \
+00275         (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_DEBUG ))
+00276 
+00277 #ifdef __cplusplus
+00278 }
+00279 #endif
+00280 
+00281 #endif /* H_RPMLOG */
+
+
+ + + diff --git a/doc/librpm/html/rpmmacro_8h.html b/doc/librpm/html/rpmmacro_8h.html new file mode 100644 index 0000000..5f8b95e --- /dev/null +++ b/doc/librpm/html/rpmmacro_8h.html @@ -0,0 +1,300 @@ + + + + +rpm: rpmmacro.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmmacro.h File Reference
+
+
+
#include <stdio.h>
+#include <stddef.h>
+#include <rpm/rpmutil.h>
+#include <rpm/rpmfileutil.h>
+
+Include dependency graph for rpmmacro.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define RMIL_DEFAULT   -15
 Markers for sources of macros added throughout rpm.
#define RMIL_MACROFILES   -13
#define RMIL_RPMRC   -11
#define RMIL_CMDLINE   -7
#define RMIL_TARBALL   -5
#define RMIL_SPEC   -3
#define RMIL_OLDSPEC   -1
#define RMIL_GLOBAL   0

+Typedefs

typedef struct rpmMacroEntry_s * rpmMacroEntry
typedef struct rpmMacroContext_s * rpmMacroContext

+Functions

void rpmDumpMacroTable (rpmMacroContext mc, FILE *fp)
 Print macros to file stream.
int expandMacros (void *spec, rpmMacroContext mc, char *sbuf, size_t slen)
 Expand macro into buffer.
void addMacro (rpmMacroContext mc, const char *n, const char *o, const char *b, int level)
 Add macro to context.
void delMacro (rpmMacroContext mc, const char *n)
 Delete macro from context.
int rpmDefineMacro (rpmMacroContext mc, const char *macro, int level)
 Define macro in context.
void rpmLoadMacros (rpmMacroContext mc, int level)
 Load macros from specific context into global context.
int rpmLoadMacroFile (rpmMacroContext mc, const char *fn)
 Load macro context from a macro file.
void rpmInitMacros (rpmMacroContext mc, const char *macrofiles)
 Initialize macro context from set of macrofile(s).
void rpmFreeMacros (rpmMacroContext mc)
 Destroy macro context.
char * rpmExpand (const char *arg,...) RPM_GNUC_NULL_TERMINATED
 Return (malloc'ed) concatenated macro expansion(s).
int rpmExpandNumeric (const char *arg)
 Return macro expansion as a numeric value.
const char * rpmConfigDir (void)
 Return rpm configuration base directory.

+Variables

rpmMacroContext rpmGlobalMacroContext
rpmMacroContext rpmCLIMacroContext
const char * macrofiles
 List of macro files to read when configuring rpm.
+

Detailed Description

+
+

Definition in file rpmmacro.h.

+

Define Documentation

+ +
+
+ + + + +
#define RMIL_CMDLINE   -7
+
+
+ +

Definition at line 40 of file rpmmacro.h.

+ +
+
+ +
+
+ + + + +
#define RMIL_DEFAULT   -15
+
+
+ +

Markers for sources of macros added throughout rpm.

+ +

Definition at line 36 of file rpmmacro.h.

+ +
+
+ +
+
+ + + + +
#define RMIL_GLOBAL   0
+
+
+ +

Definition at line 44 of file rpmmacro.h.

+ +
+
+ +
+
+ + + + +
#define RMIL_MACROFILES   -13
+
+
+ +

Definition at line 37 of file rpmmacro.h.

+ +
+
+ +
+
+ + + + +
#define RMIL_OLDSPEC   -1
+
+
+ +

Definition at line 43 of file rpmmacro.h.

+ +
+
+ +
+
+ + + + +
#define RMIL_RPMRC   -11
+
+
+ +

Definition at line 38 of file rpmmacro.h.

+ +
+
+ +
+
+ + + + +
#define RMIL_SPEC   -3
+
+
+ +

Definition at line 42 of file rpmmacro.h.

+ +
+
+ +
+
+ + + + +
#define RMIL_TARBALL   -5
+
+
+ +

Definition at line 41 of file rpmmacro.h.

+ +

Referenced by buildForTarget().

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct rpmMacroContext_s* rpmMacroContext
+
+
+ +

Definition at line 20 of file rpmmacro.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmMacroEntry_s* rpmMacroEntry
+
+
+ +

Definition at line 18 of file rpmmacro.h.

+ +
+
+

Variable Documentation

+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmmacro_8h__incl.map b/doc/librpm/html/rpmmacro_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmmacro_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmmacro_8h__incl.md5 b/doc/librpm/html/rpmmacro_8h__incl.md5 new file mode 100644 index 0000000..8e29c02 --- /dev/null +++ b/doc/librpm/html/rpmmacro_8h__incl.md5 @@ -0,0 +1 @@ +02ef93a795fec0a5e69a7400c9225aff \ No newline at end of file diff --git a/doc/librpm/html/rpmmacro_8h__incl.png b/doc/librpm/html/rpmmacro_8h__incl.png new file mode 100644 index 0000000..c67944a Binary files /dev/null and b/doc/librpm/html/rpmmacro_8h__incl.png differ diff --git a/doc/librpm/html/rpmmacro_8h_source.html b/doc/librpm/html/rpmmacro_8h_source.html new file mode 100644 index 0000000..f0fa03d --- /dev/null +++ b/doc/librpm/html/rpmmacro_8h_source.html @@ -0,0 +1,117 @@ + + + + +rpm: rpmmacro.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmmacro.h
+
+
+Go to the documentation of this file.
00001 #ifndef _H_MACRO_
+00002 #define _H_MACRO_
+00003 
+00008 #include <stdio.h>
+00009 #include <stddef.h>
+00010 
+00011 #include <rpm/rpmutil.h>
+00012 #include <rpm/rpmfileutil.h>
+00013 
+00014 #ifdef __cplusplus
+00015 extern "C" {
+00016 #endif
+00017 
+00018 typedef struct rpmMacroEntry_s * rpmMacroEntry;
+00019 
+00020 typedef struct rpmMacroContext_s * rpmMacroContext;
+00021 
+00022 extern rpmMacroContext rpmGlobalMacroContext;
+00023 
+00024 extern rpmMacroContext rpmCLIMacroContext;
+00025 
+00031 extern const char * macrofiles;
+00032 
+00036 #define RMIL_DEFAULT    -15
+00037 #define RMIL_MACROFILES -13
+00038 #define RMIL_RPMRC      -11
+00039 
+00040 #define RMIL_CMDLINE    -7
+00041 #define RMIL_TARBALL    -5
+00042 #define RMIL_SPEC       -3
+00043 #define RMIL_OLDSPEC    -1
+00044 #define RMIL_GLOBAL     0
+00045 
+00051 void    rpmDumpMacroTable       (rpmMacroContext mc,
+00052                                         FILE * fp);
+00053 
+00064 int     expandMacros    (void * spec, rpmMacroContext mc,
+00065                                 char * sbuf,
+00066                                 size_t slen);
+00067 
+00077 void    addMacro        (rpmMacroContext mc, const char * n,
+00078                                 const char * o,
+00079                                 const char * b, int level);
+00080 
+00086 void    delMacro        (rpmMacroContext mc, const char * n);
+00087 
+00095 int     rpmDefineMacro  (rpmMacroContext mc, const char * macro,
+00096                                 int level);
+00097 
+00103 void    rpmLoadMacros   (rpmMacroContext mc, int level);
+00104 
+00110 int     rpmLoadMacroFile(rpmMacroContext mc, const char * fn);
+00111 
+00117 void    rpmInitMacros   (rpmMacroContext mc, const char * macrofiles);
+00118 
+00123 void    rpmFreeMacros   (rpmMacroContext mc);
+00124 
+00130 char * rpmExpand        (const char * arg, ...) RPM_GNUC_NULL_TERMINATED;
+00131 
+00139 int     rpmExpandNumeric (const char * arg);
+00140 
+00150 const char *rpmConfigDir(void);
+00151 
+00152 #ifdef __cplusplus
+00153 }
+00154 #endif
+00155 
+00156 #endif  /* _H_ MACRO_ */
+
+
+ + + diff --git a/doc/librpm/html/rpmpgp_8h.html b/doc/librpm/html/rpmpgp_8h.html new file mode 100644 index 0000000..742fb2b --- /dev/null +++ b/doc/librpm/html/rpmpgp_8h.html @@ -0,0 +1,628 @@ + + + + +rpm: rpmpgp.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmpgp.h File Reference
+
+
+ +

OpenPGP constants and structures from RFC-2440. +More...

+
#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmstring.h>
+
+Include dependency graph for rpmpgp.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  pgpPktPubkey_s
 5.1. More...
struct  pgpPktSigV3_s
 5.2.2. More...
struct  pgpPktSigV4_s
 5.2.3. More...
union  pgpPktSig_u
 5.2. More...
struct  pgpPktSymkey_s
 5.3. More...
struct  pgpPktOnepass_s
 5.4. More...
struct  pgpPktKeyV3_s
 5.5.1. More...
struct  pgpPktKeyV4_s
 The version 4 format is similar to the version 3 format except for the absence of a validity period. More...
union  pgpPktKey_u
 5.5.3. More...
struct  pgpPktCdata_s
struct  pgpPktEdata_s
struct  pgpPktLdata_s
struct  pgpPktTrust_s
struct  pgpPktUid_s
union  pgpPktPre_u

+Defines

#define PGPARMOR_ERROR   PGPARMOR_ERR_NO_BEGIN_PGP

+Typedefs

typedef struct DIGEST_CTX_s * DIGEST_CTX
typedef struct rpmDigestBundle_s * rpmDigestBundle
typedef struct pgpDig_s * pgpDig
typedef struct pgpDigParams_s * pgpDigParams
typedef uint8_t pgpKeyID_t [8]
typedef uint8_t pgpTime_t [4]
typedef enum pgpTag_e pgpTag
 4.3.
typedef struct pgpPktPubkey_s pgpPktPubkey
 5.1.
typedef enum pgpSigType_e pgpSigType
 5.2.1.
typedef enum pgpPubkeyAlgo_e pgpPubkeyAlgo
 9.1.
typedef enum pgpSymkeyAlgo_e pgpSymkeyAlgo
 9.2.
typedef enum pgpCompressAlgo_e pgpCompressAlgo
 9.3.
typedef enum pgpHashAlgo_e pgpHashAlgo
 9.4.
typedef struct pgpPktSigV3_spgpPktSigV3
 5.2.2.
typedef struct pgpPktSigV4_spgpPktSigV4
 5.2.3.
typedef enum pgpSubType_e pgpSubType
 5.2.3.1.
typedef union pgpPktSig_upgpPktSig
 5.2.
typedef struct pgpPktSymkey_s pgpPktSymkey
 5.3.
typedef struct pgpPktOnepass_spgpPktOnepass
 5.4.
typedef struct pgpPktKeyV3_spgpPktKeyV3
 5.5.1.
typedef struct pgpPktKeyV4_spgpPktKeyV4
 The version 4 format is similar to the version 3 format except for the absence of a validity period.
typedef union pgpPktKey_u pgpPktKey
 5.5.3.
typedef struct pgpPktCdata_s pgpPktCdata
typedef struct pgpPktEdata_s pgpPktEdata
typedef struct pgpPktLdata_s pgpPktLdata
typedef struct pgpPktTrust_s pgpPktTrust
typedef struct pgpPktUid_s pgpPktUid
typedef enum pgpArmor_e pgpArmor
typedef enum pgpArmorKey_e pgpArmorKey
typedef enum pgpValType_e pgpValType
typedef rpmFlags rpmDigestFlags

+Enumerations

enum  pgpTag_e {
+  PGPTAG_RESERVED = 0, +PGPTAG_PUBLIC_SESSION_KEY = 1, +PGPTAG_SIGNATURE = 2, +PGPTAG_SYMMETRIC_SESSION_KEY = 3, +
+  PGPTAG_ONEPASS_SIGNATURE = 4, +PGPTAG_SECRET_KEY = 5, +PGPTAG_PUBLIC_KEY = 6, +PGPTAG_SECRET_SUBKEY = 7, +
+  PGPTAG_COMPRESSED_DATA = 8, +PGPTAG_SYMMETRIC_DATA = 9, +PGPTAG_MARKER = 10, +PGPTAG_LITERAL_DATA = 11, +
+  PGPTAG_TRUST = 12, +PGPTAG_USER_ID = 13, +PGPTAG_PUBLIC_SUBKEY = 14, +PGPTAG_COMMENT_OLD = 16, +
+  PGPTAG_PHOTOID = 17, +PGPTAG_ENCRYPTED_MDC = 18, +PGPTAG_MDC = 19, +PGPTAG_PRIVATE_60 = 60, +
+  PGPTAG_COMMENT = 61, +PGPTAG_PRIVATE_62 = 62, +PGPTAG_CONTROL = 63 +
+ }
 4.3. More...
enum  pgpSigType_e {
+  PGPSIGTYPE_BINARY = 0x00, +PGPSIGTYPE_TEXT = 0x01, +PGPSIGTYPE_STANDALONE = 0x02, +PGPSIGTYPE_GENERIC_CERT = 0x10, +
+  PGPSIGTYPE_PERSONA_CERT = 0x11, +PGPSIGTYPE_CASUAL_CERT = 0x12, +PGPSIGTYPE_POSITIVE_CERT = 0x13, +PGPSIGTYPE_SUBKEY_BINDING = 0x18, +
+  PGPSIGTYPE_SIGNED_KEY = 0x1F, +PGPSIGTYPE_KEY_REVOKE = 0x20, +PGPSIGTYPE_SUBKEY_REVOKE = 0x28, +PGPSIGTYPE_CERT_REVOKE = 0x30, +
+  PGPSIGTYPE_TIMESTAMP = 0x40 +
+ }
 5.2.1. More...
enum  pgpPubkeyAlgo_e {
+  PGPPUBKEYALGO_RSA = 1, +PGPPUBKEYALGO_RSA_ENCRYPT = 2, +PGPPUBKEYALGO_RSA_SIGN = 3, +PGPPUBKEYALGO_ELGAMAL_ENCRYPT = 16, +
+  PGPPUBKEYALGO_DSA = 17, +PGPPUBKEYALGO_EC = 18, +PGPPUBKEYALGO_ECDSA = 19, +PGPPUBKEYALGO_ELGAMAL = 20, +
+  PGPPUBKEYALGO_DH = 21 +
+ }
 9.1. More...
enum  pgpSymkeyAlgo_e {
+  PGPSYMKEYALGO_PLAINTEXT = 0, +PGPSYMKEYALGO_IDEA = 1, +PGPSYMKEYALGO_TRIPLE_DES = 2, +PGPSYMKEYALGO_CAST5 = 3, +
+  PGPSYMKEYALGO_BLOWFISH = 4, +PGPSYMKEYALGO_SAFER = 5, +PGPSYMKEYALGO_DES_SK = 6, +PGPSYMKEYALGO_AES_128 = 7, +
+  PGPSYMKEYALGO_AES_192 = 8, +PGPSYMKEYALGO_AES_256 = 9, +PGPSYMKEYALGO_TWOFISH = 10, +PGPSYMKEYALGO_NOENCRYPT = 110 +
+ }
 9.2. More...
enum  pgpCompressAlgo_e { PGPCOMPRESSALGO_NONE = 0, +PGPCOMPRESSALGO_ZIP = 1, +PGPCOMPRESSALGO_ZLIB = 2, +PGPCOMPRESSALGO_BZIP2 = 3 + }
 9.3. More...
enum  pgpHashAlgo_e {
+  PGPHASHALGO_MD5 = 1, +PGPHASHALGO_SHA1 = 2, +PGPHASHALGO_RIPEMD160 = 3, +PGPHASHALGO_MD2 = 5, +
+  PGPHASHALGO_TIGER192 = 6, +PGPHASHALGO_HAVAL_5_160 = 7, +PGPHASHALGO_SHA256 = 8, +PGPHASHALGO_SHA384 = 9, +
+  PGPHASHALGO_SHA512 = 10, +PGPHASHALGO_SHA224 = 11 +
+ }
 9.4. More...
enum  pgpSubType_e {
+  PGPSUBTYPE_NONE = 0, +PGPSUBTYPE_SIG_CREATE_TIME = 2, +PGPSUBTYPE_SIG_EXPIRE_TIME = 3, +PGPSUBTYPE_EXPORTABLE_CERT = 4, +
+  PGPSUBTYPE_TRUST_SIG = 5, +PGPSUBTYPE_REGEX = 6, +PGPSUBTYPE_REVOCABLE = 7, +PGPSUBTYPE_KEY_EXPIRE_TIME = 9, +
+  PGPSUBTYPE_ARR = 10, +PGPSUBTYPE_PREFER_SYMKEY = 11, +PGPSUBTYPE_REVOKE_KEY = 12, +PGPSUBTYPE_ISSUER_KEYID = 16, +
+  PGPSUBTYPE_NOTATION = 20, +PGPSUBTYPE_PREFER_HASH = 21, +PGPSUBTYPE_PREFER_COMPRESS = 22, +PGPSUBTYPE_KEYSERVER_PREFERS = 23, +
+  PGPSUBTYPE_PREFER_KEYSERVER = 24, +PGPSUBTYPE_PRIMARY_USERID = 25, +PGPSUBTYPE_POLICY_URL = 26, +PGPSUBTYPE_KEY_FLAGS = 27, +
+  PGPSUBTYPE_SIGNER_USERID = 28, +PGPSUBTYPE_REVOKE_REASON = 29, +PGPSUBTYPE_FEATURES = 30, +PGPSUBTYPE_EMBEDDED_SIG = 32, +
+  PGPSUBTYPE_INTERNAL_100 = 100, +PGPSUBTYPE_INTERNAL_101 = 101, +PGPSUBTYPE_INTERNAL_102 = 102, +PGPSUBTYPE_INTERNAL_103 = 103, +
+  PGPSUBTYPE_INTERNAL_104 = 104, +PGPSUBTYPE_INTERNAL_105 = 105, +PGPSUBTYPE_INTERNAL_106 = 106, +PGPSUBTYPE_INTERNAL_107 = 107, +
+  PGPSUBTYPE_INTERNAL_108 = 108, +PGPSUBTYPE_INTERNAL_109 = 109, +PGPSUBTYPE_INTERNAL_110 = 110, +PGPSUBTYPE_CRITICAL = 128 +
+ }
 5.2.3.1. More...
enum  pgpArmor_e {
+  PGPARMOR_ERR_CRC_CHECK = -7, +PGPARMOR_ERR_BODY_DECODE = -6, +PGPARMOR_ERR_CRC_DECODE = -5, +PGPARMOR_ERR_NO_END_PGP = -4, +
+  PGPARMOR_ERR_UNKNOWN_PREAMBLE_TAG = -3, +PGPARMOR_ERR_UNKNOWN_ARMOR_TYPE = -2, +PGPARMOR_ERR_NO_BEGIN_PGP = -1 +
+ }
enum  pgpArmorKey_e {
+  PGPARMORKEY_VERSION = 1, +PGPARMORKEY_COMMENT = 2, +PGPARMORKEY_MESSAGEID = 3, +PGPARMORKEY_HASH = 4, +
+  PGPARMORKEY_CHARSET = 5 +
+ }
enum  pgpValType_e {
+  PGPVAL_TAG = 1, +PGPVAL_ARMORBLOCK = 2, +PGPVAL_ARMORKEY = 3, +PGPVAL_SIGTYPE = 4, +
+  PGPVAL_SUBTYPE = 5, +PGPVAL_PUBKEYALGO = 6, +PGPVAL_SYMKEYALGO = 7, +PGPVAL_COMPRESSALGO = 8, +
+  PGPVAL_HASHALGO = 9, +PGPVAL_SERVERPREFS = 10 +
+ }
enum  rpmDigestFlags_e { RPMDIGEST_NONE = 0 + }
 Bit(s) to control digest operation. More...

+Functions

const char * pgpValString (pgpValType type, uint8_t val)
 Return string representation of am OpenPGP value.
static unsigned int pgpGrab (const uint8_t *s, size_t nbytes)
 Return (native-endian) integer from big-endian representation.
static size_t pgpLen (const uint8_t *s, size_t *lenp)
 Return length of an OpenPGP packet.
char * pgpHexStr (const uint8_t *p, size_t plen)
 Return hex formatted representation of bytes.
int pgpPubkeyFingerprint (const uint8_t *pkt, size_t pktlen, pgpKeyID_t keyid)
 Calculate OpenPGP public key fingerprint.
int pgpExtractPubkeyFingerprint (const char *b64pkt, pgpKeyID_t keyid)
 Extract OpenPGP public key fingerprint from base64 encoded packet.
int pgpPrtPkts (const uint8_t *pkts, size_t pktlen, pgpDig dig, int printing)
 Print/parse a OpenPGP packet(s).
pgpArmor pgpReadPkts (const char *fn, uint8_t **pkt, size_t *pktlen)
 Parse armored OpenPGP packets from a file.
pgpArmor pgpParsePkts (const char *armor, uint8_t **pkt, size_t *pktlen)
 Parse armored OpenPGP packets from memory.
char * pgpArmorWrap (int atype, const unsigned char *s, size_t ns)
 Wrap a OpenPGP packets in ascii armor for transport.
pgpDig pgpNewDig (void)
 Create a container for parsed OpenPGP packet(s).
void pgpCleanDig (pgpDig dig)
 Release (malloc'd) data from container.
pgpDig pgpFreeDig (pgpDig dig)
 Destroy a container for parsed OpenPGP packet(s).
rpmRC pgpVerifySig (pgpDig dig, DIGEST_CTX hashctx)
 Verify a PGP signature.
char * pgpIdentItem (pgpDigParams digp)
 Return a string identification of a PGP signature/pubkey.
int rpmInitCrypto (void)
 Perform cryptography initialization.
int rpmFreeCrypto (void)
 Shutdown cryptography.
DIGEST_CTX rpmDigestDup (DIGEST_CTX octx)
 Duplicate a digest context.
size_t rpmDigestLength (int hashalgo)
 Obtain digest length in bytes.
DIGEST_CTX rpmDigestInit (int hashalgo, rpmDigestFlags flags)
 Initialize digest.
int rpmDigestUpdate (DIGEST_CTX ctx, const void *data, size_t len)
 Update context with next plain text buffer.
int rpmDigestFinal (DIGEST_CTX ctx, void **datap, size_t *lenp, int asAscii)
 Return digest and destroy context.
rpmDigestBundle rpmDigestBundleNew (void)
 Create a new digest bundle.
rpmDigestBundle rpmDigestBundleFree (rpmDigestBundle bundle)
 Free a digest bundle and all contained digest contexts.
int rpmDigestBundleAdd (rpmDigestBundle bundle, int algo, rpmDigestFlags flags)
 Add a new type of digest to a bundle.
int rpmDigestBundleUpdate (rpmDigestBundle bundle, const void *data, size_t len)
 Update contexts within bundle with next plain text buffer.
int rpmDigestBundleFinal (rpmDigestBundle bundle, int algo, void **datap, size_t *lenp, int asAscii)
 Return digest from a bundle and destroy context, see rpmDigestFinal().
DIGEST_CTX rpmDigestBundleDupCtx (rpmDigestBundle bundle, int algo)
 Duplicate a digest context from a bundle.
+

Detailed Description

+

OpenPGP constants and structures from RFC-2440.

+

Text from RFC-2440 in comments is Copyright (C) The Internet Society (1998). All Rights Reserved.

+ +

Definition in file rpmpgp.h.

+

Define Documentation

+ +
+
+ + + + +
#define PGPARMOR_ERROR   PGPARMOR_ERR_NO_BEGIN_PGP
+
+
+ +

Definition at line 896 of file rpmpgp.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef uint8_t pgpKeyID_t[8]
+
+
+ +

Definition at line 36 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
typedef struct pgpPktCdata_s pgpPktCdata
+
+
+ +
+
+ +
+
+ + + + +
typedef struct pgpPktEdata_s pgpPktEdata
+
+
+ +
+
+ +
+
+ + + + +
typedef struct pgpPktLdata_s pgpPktLdata
+
+
+ +
+
+ +
+
+ + + + +
typedef struct pgpPktSymkey_s pgpPktSymkey
+
+
+ +

5.3.

+

Symmetric-Key Encrypted Session-Key Packets (Tag 3)

+

The Symmetric-Key Encrypted Session Key packet holds the symmetric- key encryption of a session key used to encrypt a message. Zero or more Encrypted Session Key packets and/or Symmetric-Key Encrypted Session Key packets may precede a Symmetrically Encrypted Data Packet that holds an encrypted message. The message is encrypted with a session key, and the session key is itself encrypted and stored in the Encrypted Session Key packet or the Symmetric-Key Encrypted Session Key packet.

+

If the Symmetrically Encrypted Data Packet is preceded by one or more Symmetric-Key Encrypted Session Key packets, each specifies a passphrase that may be used to decrypt the message. This allows a message to be encrypted to a number of public keys, and also to one or more pass phrases. This packet type is new, and is not generated by PGP 2.x or PGP 5.0.

+

The body of this packet consists of:

+
    +
  • A one-octet version number. The only currently defined version is 4.
  • +
  • A one-octet number describing the symmetric algorithm used.
  • +
  • A string-to-key (S2K) specifier, length as defined above.
  • +
  • Optionally, the encrypted session key itself, which is decrypted with the string-to-key object.
  • +
+ +
+
+ +
+
+ + + + +
typedef struct pgpPktTrust_s pgpPktTrust
+
+
+ +
+
+ +
+
+ + + + +
typedef struct pgpPktUid_s pgpPktUid
+
+
+ +
+
+ +
+
+ + + + +
typedef uint8_t pgpTime_t[4]
+
+
+ +

Definition at line 37 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
typedef enum pgpValType_e pgpValType
+
+
+ +
+
+ +
+
+ + + + +
typedef struct rpmDigestBundle_s* rpmDigestBundle
+
+
+ +

Definition at line 26 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags rpmDigestFlags
+
+
+ +

Definition at line 937 of file rpmpgp.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum pgpValType_e
+
+
+
Enumerator:
+ + + + + + + + + + +
PGPVAL_TAG  +
PGPVAL_ARMORBLOCK  +
PGPVAL_ARMORKEY  +
PGPVAL_SIGTYPE  +
PGPVAL_SUBTYPE  +
PGPVAL_PUBKEYALGO  +
PGPVAL_SYMKEYALGO  +
PGPVAL_COMPRESSALGO  +
PGPVAL_HASHALGO  +
PGPVAL_SERVERPREFS  +
+
+
+ +

Definition at line 917 of file rpmpgp.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmpgp_8h__incl.map b/doc/librpm/html/rpmpgp_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmpgp_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmpgp_8h__incl.md5 b/doc/librpm/html/rpmpgp_8h__incl.md5 new file mode 100644 index 0000000..1aabc19 --- /dev/null +++ b/doc/librpm/html/rpmpgp_8h__incl.md5 @@ -0,0 +1 @@ +a5e569eeaf5ec8271394b0169039134c \ No newline at end of file diff --git a/doc/librpm/html/rpmpgp_8h__incl.png b/doc/librpm/html/rpmpgp_8h__incl.png new file mode 100644 index 0000000..b4fae90 Binary files /dev/null and b/doc/librpm/html/rpmpgp_8h__incl.png differ diff --git a/doc/librpm/html/rpmpgp_8h_source.html b/doc/librpm/html/rpmpgp_8h_source.html new file mode 100644 index 0000000..5f5fc9d --- /dev/null +++ b/doc/librpm/html/rpmpgp_8h_source.html @@ -0,0 +1,561 @@ + + + + +rpm: rpmpgp.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmpgp.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMPGP
+00002 #define H_RPMPGP
+00003 
+00013 #include <string.h>
+00014 #include <stdio.h>
+00015 #include <stdlib.h>
+00016 #include <rpm/rpmtypes.h>
+00017 #include <rpm/rpmstring.h>
+00018 
+00019 #ifdef __cplusplus
+00020 extern "C" {
+00021 #endif
+00022 
+00025 typedef struct DIGEST_CTX_s * DIGEST_CTX;
+00026 typedef struct rpmDigestBundle_s * rpmDigestBundle;
+00027 
+00030 typedef struct pgpDig_s * pgpDig;
+00031 
+00034 typedef struct pgpDigParams_s * pgpDigParams;
+00035 
+00036 typedef uint8_t pgpKeyID_t[8];
+00037 typedef uint8_t pgpTime_t[4];
+00038 
+00046 typedef enum pgpTag_e {
+00047     PGPTAG_RESERVED             =  0, 
+00048     PGPTAG_PUBLIC_SESSION_KEY   =  1, 
+00049     PGPTAG_SIGNATURE            =  2, 
+00050     PGPTAG_SYMMETRIC_SESSION_KEY=  3, 
+00051     PGPTAG_ONEPASS_SIGNATURE    =  4, 
+00052     PGPTAG_SECRET_KEY           =  5, 
+00053     PGPTAG_PUBLIC_KEY           =  6, 
+00054     PGPTAG_SECRET_SUBKEY        =  7, 
+00055     PGPTAG_COMPRESSED_DATA      =  8, 
+00056     PGPTAG_SYMMETRIC_DATA       =  9, 
+00057     PGPTAG_MARKER               = 10, 
+00058     PGPTAG_LITERAL_DATA         = 11, 
+00059     PGPTAG_TRUST                = 12, 
+00060     PGPTAG_USER_ID              = 13, 
+00061     PGPTAG_PUBLIC_SUBKEY        = 14, 
+00062     PGPTAG_COMMENT_OLD          = 16, 
+00063     PGPTAG_PHOTOID              = 17, 
+00064     PGPTAG_ENCRYPTED_MDC        = 18, 
+00065     PGPTAG_MDC                  = 19, 
+00066     PGPTAG_PRIVATE_60           = 60, 
+00067     PGPTAG_COMMENT              = 61, 
+00068     PGPTAG_PRIVATE_62           = 62, 
+00069     PGPTAG_CONTROL              = 63  
+00070 } pgpTag;
+00071 
+00106 typedef struct pgpPktPubkey_s {
+00107     uint8_t version;    
+00108     pgpKeyID_t keyid;   
+00109     uint8_t algo;               
+00110 } pgpPktPubkey;
+00111 
+00112 
+00119 typedef enum pgpSigType_e {
+00120     PGPSIGTYPE_BINARY            = 0x00, 
+00121     PGPSIGTYPE_TEXT              = 0x01, 
+00122     PGPSIGTYPE_STANDALONE        = 0x02, 
+00123     PGPSIGTYPE_GENERIC_CERT      = 0x10,
+00125     PGPSIGTYPE_PERSONA_CERT      = 0x11,
+00127     PGPSIGTYPE_CASUAL_CERT       = 0x12,
+00129     PGPSIGTYPE_POSITIVE_CERT     = 0x13,
+00131     PGPSIGTYPE_SUBKEY_BINDING    = 0x18, 
+00132     PGPSIGTYPE_SIGNED_KEY        = 0x1F, 
+00133     PGPSIGTYPE_KEY_REVOKE        = 0x20, 
+00134     PGPSIGTYPE_SUBKEY_REVOKE     = 0x28, 
+00135     PGPSIGTYPE_CERT_REVOKE       = 0x30, 
+00136     PGPSIGTYPE_TIMESTAMP         = 0x40  
+00137 } pgpSigType;
+00138 
+00162 typedef enum pgpPubkeyAlgo_e {
+00163     PGPPUBKEYALGO_RSA           =  1,   
+00164     PGPPUBKEYALGO_RSA_ENCRYPT   =  2,   
+00165     PGPPUBKEYALGO_RSA_SIGN      =  3,   
+00166     PGPPUBKEYALGO_ELGAMAL_ENCRYPT = 16, 
+00167     PGPPUBKEYALGO_DSA           = 17,   
+00168     PGPPUBKEYALGO_EC            = 18,   
+00169     PGPPUBKEYALGO_ECDSA         = 19,   
+00170     PGPPUBKEYALGO_ELGAMAL       = 20,   
+00171     PGPPUBKEYALGO_DH            = 21    
+00172 } pgpPubkeyAlgo;
+00173 
+00198 typedef enum pgpSymkeyAlgo_e {
+00199     PGPSYMKEYALGO_PLAINTEXT     =  0,   
+00200     PGPSYMKEYALGO_IDEA          =  1,   
+00201     PGPSYMKEYALGO_TRIPLE_DES    =  2,   
+00202     PGPSYMKEYALGO_CAST5         =  3,   
+00203     PGPSYMKEYALGO_BLOWFISH      =  4,   
+00204     PGPSYMKEYALGO_SAFER         =  5,   
+00205     PGPSYMKEYALGO_DES_SK        =  6,   
+00206     PGPSYMKEYALGO_AES_128       =  7,   
+00207     PGPSYMKEYALGO_AES_192       =  8,   
+00208     PGPSYMKEYALGO_AES_256       =  9,   
+00209     PGPSYMKEYALGO_TWOFISH       = 10,   
+00210     PGPSYMKEYALGO_NOENCRYPT     = 110   
+00211 } pgpSymkeyAlgo;
+00212 
+00228 typedef enum pgpCompressAlgo_e {
+00229     PGPCOMPRESSALGO_NONE        =  0,   
+00230     PGPCOMPRESSALGO_ZIP         =  1,   
+00231     PGPCOMPRESSALGO_ZLIB        =  2,   
+00232     PGPCOMPRESSALGO_BZIP2       =  3    
+00233 } pgpCompressAlgo;
+00234 
+00256 typedef enum pgpHashAlgo_e {
+00257     PGPHASHALGO_MD5             =  1,   
+00258     PGPHASHALGO_SHA1            =  2,   
+00259     PGPHASHALGO_RIPEMD160       =  3,   
+00260     PGPHASHALGO_MD2             =  5,   
+00261     PGPHASHALGO_TIGER192        =  6,   
+00262     PGPHASHALGO_HAVAL_5_160     =  7,   
+00263     PGPHASHALGO_SHA256          =  8,   
+00264     PGPHASHALGO_SHA384          =  9,   
+00265     PGPHASHALGO_SHA512          = 10,   
+00266     PGPHASHALGO_SHA224          = 11,   
+00267 } pgpHashAlgo;
+00268 
+00290 typedef struct pgpPktSigV3_s {
+00291     uint8_t version;    
+00292     uint8_t hashlen;    
+00293     uint8_t sigtype;    
+00294     pgpTime_t time;     
+00295     pgpKeyID_t signid;  
+00296     uint8_t pubkey_algo;        
+00297     uint8_t hash_algo;  
+00298     uint8_t signhash16[2];      
+00299 } * pgpPktSigV3;
+00300 
+00322 typedef struct pgpPktSigV4_s {
+00323     uint8_t version;    
+00324     uint8_t sigtype;    
+00325     uint8_t pubkey_algo;        
+00326     uint8_t hash_algo;  
+00327     uint8_t hashlen[2]; 
+00328 } * pgpPktSigV4;
+00329 
+00396 typedef enum pgpSubType_e {
+00397     PGPSUBTYPE_NONE             =   0, 
+00398     PGPSUBTYPE_SIG_CREATE_TIME  =   2, 
+00399     PGPSUBTYPE_SIG_EXPIRE_TIME  =   3, 
+00400     PGPSUBTYPE_EXPORTABLE_CERT  =   4, 
+00401     PGPSUBTYPE_TRUST_SIG        =   5, 
+00402     PGPSUBTYPE_REGEX            =   6, 
+00403     PGPSUBTYPE_REVOCABLE        =   7, 
+00404     PGPSUBTYPE_KEY_EXPIRE_TIME  =   9, 
+00405     PGPSUBTYPE_ARR              =  10, 
+00406     PGPSUBTYPE_PREFER_SYMKEY    =  11, 
+00407     PGPSUBTYPE_REVOKE_KEY       =  12, 
+00408     PGPSUBTYPE_ISSUER_KEYID     =  16, 
+00409     PGPSUBTYPE_NOTATION         =  20, 
+00410     PGPSUBTYPE_PREFER_HASH      =  21, 
+00411     PGPSUBTYPE_PREFER_COMPRESS  =  22, 
+00412     PGPSUBTYPE_KEYSERVER_PREFERS=  23, 
+00413     PGPSUBTYPE_PREFER_KEYSERVER =  24, 
+00414     PGPSUBTYPE_PRIMARY_USERID   =  25, 
+00415     PGPSUBTYPE_POLICY_URL       =  26, 
+00416     PGPSUBTYPE_KEY_FLAGS        =  27, 
+00417     PGPSUBTYPE_SIGNER_USERID    =  28, 
+00418     PGPSUBTYPE_REVOKE_REASON    =  29, 
+00419     PGPSUBTYPE_FEATURES         =  30, 
+00420     PGPSUBTYPE_EMBEDDED_SIG     =  32, 
+00422     PGPSUBTYPE_INTERNAL_100     = 100, 
+00423     PGPSUBTYPE_INTERNAL_101     = 101, 
+00424     PGPSUBTYPE_INTERNAL_102     = 102, 
+00425     PGPSUBTYPE_INTERNAL_103     = 103, 
+00426     PGPSUBTYPE_INTERNAL_104     = 104, 
+00427     PGPSUBTYPE_INTERNAL_105     = 105, 
+00428     PGPSUBTYPE_INTERNAL_106     = 106, 
+00429     PGPSUBTYPE_INTERNAL_107     = 107, 
+00430     PGPSUBTYPE_INTERNAL_108     = 108, 
+00431     PGPSUBTYPE_INTERNAL_109     = 109, 
+00432     PGPSUBTYPE_INTERNAL_110     = 110, 
+00434     PGPSUBTYPE_CRITICAL         = 128  
+00435 } pgpSubType;
+00436 
+00457 typedef union pgpPktSig_u {
+00458     struct pgpPktSigV3_s v3;
+00459     struct pgpPktSigV4_s v4;
+00460 } * pgpPktSig;
+00461 
+00490 typedef struct pgpPktSymkey_s {
+00491     uint8_t version;    
+00492     uint8_t symkey_algo;
+00493     uint8_t s2k[1];
+00494 } pgpPktSymkey;
+00495 
+00525 typedef struct pgpPktOnepass_s {
+00526     uint8_t version;    
+00527     uint8_t sigtype;    
+00528     uint8_t hash_algo;  
+00529     uint8_t pubkey_algo;        
+00530     pgpKeyID_t signid;  
+00531     uint8_t nested;
+00532 } * pgpPktOnepass;
+00533 
+00606 typedef struct pgpPktKeyV3_s {
+00607     uint8_t version;    
+00608     pgpTime_t time;     
+00609     uint8_t valid[2];   
+00610     uint8_t pubkey_algo;        
+00611 } * pgpPktKeyV3;
+00612 
+00644 typedef struct pgpPktKeyV4_s {
+00645     uint8_t version;    
+00646     pgpTime_t time;     
+00647     uint8_t pubkey_algo;        
+00648 } * pgpPktKeyV4;
+00649 
+00714 typedef union pgpPktKey_u {
+00715     struct pgpPktKeyV3_s v3;
+00716     struct pgpPktKeyV4_s v4;
+00717 } pgpPktKey;
+00718 
+00719 /* \ingroup rpmpgp
+00720  * 5.6. Compressed Data Packet (Tag 8)
+00721  *
+00722  * The Compressed Data packet contains compressed data. Typically, this
+00723  * packet is found as the contents of an encrypted packet, or following
+00724  * a Signature or One-Pass Signature packet, and contains literal data
+00725  * packets.
+00726  *
+00727  * The body of this packet consists of:
+00728  *   - One octet that gives the algorithm used to compress the packet.
+00729  *   - The remainder of the packet is compressed data.
+00730  *
+00731  * A Compressed Data Packet's body contains an block that compresses
+00732  * some set of packets. See section "Packet Composition" for details on
+00733  * how messages are formed.
+00734  *
+00735  * ZIP-compressed packets are compressed with raw RFC 1951 DEFLATE
+00736  * blocks. Note that PGP V2.6 uses 13 bits of compression. If an
+00737  * implementation uses more bits of compression, PGP V2.6 cannot
+00738  * decompress it.
+00739  *
+00740  * ZLIB-compressed packets are compressed with RFC 1950 ZLIB-style
+00741  * blocks.
+00742  */
+00743 typedef struct pgpPktCdata_s {
+00744     uint8_t compressalgo;
+00745     uint8_t data[1];
+00746 } pgpPktCdata;
+00747 
+00748 /* \ingroup rpmpgp
+00749  * 5.7. Symmetrically Encrypted Data Packet (Tag 9)
+00750  *
+00751  * The Symmetrically Encrypted Data packet contains data encrypted with
+00752  * a symmetric-key algorithm. When it has been decrypted, it will
+00753  * typically contain other packets (often literal data packets or
+00754  * compressed data packets).
+00755  *
+00756  * The body of this packet consists of:
+00757  *   - Encrypted data, the output of the selected symmetric-key cipher
+00758  *     operating in PGP's variant of Cipher Feedback (CFB) mode.
+00759  *
+00760  * The symmetric cipher used may be specified in an Public-Key or
+00761  * Symmetric-Key Encrypted Session Key packet that precedes the
+00762  * Symmetrically Encrypted Data Packet.  In that case, the cipher
+00763  * algorithm octet is prefixed to the session key before it is
+00764  * encrypted.  If no packets of these types precede the encrypted data,
+00765  * the IDEA algorithm is used with the session key calculated as the MD5
+00766  * hash of the passphrase.
+00767  *
+00768  * The data is encrypted in CFB mode, with a CFB shift size equal to the
+00769  * cipher's block size.  The Initial Vector (IV) is specified as all
+00770  * zeros.  Instead of using an IV, OpenPGP prefixes a 10-octet string to
+00771  * the data before it is encrypted.  The first eight octets are random,
+00772  * and the 9th and 10th octets are copies of the 7th and 8th octets,
+00773  * respectively. After encrypting the first 10 octets, the CFB state is
+00774  * resynchronized if the cipher block size is 8 octets or less.  The
+00775  * last 8 octets of ciphertext are passed through the cipher and the
+00776  * block boundary is reset.
+00777  *
+00778  * The repetition of 16 bits in the 80 bits of random data prefixed to
+00779  * the message allows the receiver to immediately check whether the
+00780  * session key is incorrect.
+00781  */
+00782 typedef struct pgpPktEdata_s {
+00783     uint8_t data[1];
+00784 } pgpPktEdata;
+00785 
+00786 /* \ingroup rpmpgp
+00787  * 5.8. Marker Packet (Obsolete Literal Packet) (Tag 10)
+00788  *
+00789  * An experimental version of PGP used this packet as the Literal
+00790  * packet, but no released version of PGP generated Literal packets with
+00791  * this tag. With PGP 5.x, this packet has been re-assigned and is
+00792  * reserved for use as the Marker packet.
+00793  *
+00794  * The body of this packet consists of:
+00795  *   - The three octets 0x50, 0x47, 0x50 (which spell "PGP" in UTF-8).
+00796  *
+00797  * Such a packet MUST be ignored when received.  It may be placed at the
+00798  * beginning of a message that uses features not available in PGP 2.6.x
+00799  * in order to cause that version to report that newer software is
+00800  * necessary to process the message.
+00801  */
+00802 /* \ingroup rpmpgp
+00803  * 5.9. Literal Data Packet (Tag 11)
+00804  *
+00805  * A Literal Data packet contains the body of a message; data that is
+00806  * not to be further interpreted.
+00807  *
+00808  * The body of this packet consists of:
+00809  *   - A one-octet field that describes how the data is formatted.
+00810  *
+00811  * If it is a 'b' (0x62), then the literal packet contains binary data.
+00812  * If it is a 't' (0x74), then it contains text data, and thus may need
+00813  * line ends converted to local form, or other text-mode changes.  RFC
+00814  * 1991 also defined a value of 'l' as a 'local' mode for machine-local
+00815  * conversions.  This use is now deprecated.
+00816  *   - File name as a string (one-octet length, followed by file name),
+00817  *     if the encrypted data should be saved as a file.
+00818  *
+00819  * If the special name "_CONSOLE" is used, the message is considered to
+00820  * be "for your eyes only".  This advises that the message data is
+00821  * unusually sensitive, and the receiving program should process it more
+00822  * carefully, perhaps avoiding storing the received data to disk, for
+00823  * example.
+00824  *   - A four-octet number that indicates the modification date of the
+00825  *     file, or the creation time of the packet, or a zero that
+00826  *     indicates the present time.
+00827  *   - The remainder of the packet is literal data.
+00828  *
+00829  * Text data is stored with <CR><LF> text endings (i.e. network-normal
+00830  * line endings).  These should be converted to native line endings by
+00831  * the receiving software.
+00832  */
+00833 typedef struct pgpPktLdata_s {
+00834     uint8_t format;
+00835     uint8_t filenamelen;
+00836     uint8_t filename[1];
+00837 } pgpPktLdata;
+00838 
+00839 /* \ingroup rpmpgp
+00840  * 5.10. Trust Packet (Tag 12)
+00841  *
+00842  * The Trust packet is used only within keyrings and is not normally
+00843  * exported.  Trust packets contain data that record the user's
+00844  * specifications of which key holders are trustworthy introducers,
+00845  * along with other information that implementing software uses for
+00846  * trust information.
+00847  *
+00848  * Trust packets SHOULD NOT be emitted to output streams that are
+00849  * transferred to other users, and they SHOULD be ignored on any input
+00850  * other than local keyring files.
+00851  */
+00852 typedef struct pgpPktTrust_s {
+00853     uint8_t flag;
+00854 } pgpPktTrust;
+00855 
+00856 /* \ingroup rpmpgp
+00857  * 5.11. User ID Packet (Tag 13)
+00858  *
+00859  * A User ID packet consists of data that is intended to represent the
+00860  * name and email address of the key holder.  By convention, it includes
+00861  * an RFC 822 mail name, but there are no restrictions on its content.
+00862  * The packet length in the header specifies the length of the user id.
+00863  * If it is text, it is encoded in UTF-8.
+00864  *
+00865  */
+00866 typedef struct pgpPktUid_s {
+00867     uint8_t userid[1];
+00868 } pgpPktUid;
+00869 
+00872 union pgpPktPre_u {
+00873     pgpPktPubkey pubkey;        
+00874     pgpPktSig sig;              
+00875     pgpPktSymkey symkey;        
+00876     pgpPktOnepass onepass;      
+00877     pgpPktKey key;              
+00878     pgpPktCdata cdata;          
+00879     pgpPktEdata edata;          
+00881     pgpPktLdata ldata;          
+00882     pgpPktTrust tdata;          
+00883     pgpPktUid uid;              
+00884 };
+00885 
+00888 typedef enum pgpArmor_e {
+00889     PGPARMOR_ERR_CRC_CHECK              = -7,
+00890     PGPARMOR_ERR_BODY_DECODE            = -6,
+00891     PGPARMOR_ERR_CRC_DECODE             = -5,
+00892     PGPARMOR_ERR_NO_END_PGP             = -4,
+00893     PGPARMOR_ERR_UNKNOWN_PREAMBLE_TAG   = -3,
+00894     PGPARMOR_ERR_UNKNOWN_ARMOR_TYPE     = -2,
+00895     PGPARMOR_ERR_NO_BEGIN_PGP           = -1,
+00896 #define PGPARMOR_ERROR  PGPARMOR_ERR_NO_BEGIN_PGP
+00897     PGPARMOR_NONE               =  0,
+00898     PGPARMOR_MESSAGE            =  1, 
+00899     PGPARMOR_PUBKEY             =  2, 
+00900     PGPARMOR_SIGNATURE          =  3, 
+00901     PGPARMOR_SIGNED_MESSAGE     =  4, 
+00902     PGPARMOR_FILE               =  5, 
+00903     PGPARMOR_PRIVKEY            =  6, 
+00904     PGPARMOR_SECKEY             =  7  
+00905 } pgpArmor;
+00906 
+00909 typedef enum pgpArmorKey_e {
+00910     PGPARMORKEY_VERSION         = 1, 
+00911     PGPARMORKEY_COMMENT         = 2, 
+00912     PGPARMORKEY_MESSAGEID       = 3, 
+00913     PGPARMORKEY_HASH            = 4, 
+00914     PGPARMORKEY_CHARSET         = 5  
+00915 } pgpArmorKey;
+00916 
+00917 typedef enum pgpValType_e {
+00918     PGPVAL_TAG                  = 1,
+00919     PGPVAL_ARMORBLOCK           = 2,
+00920     PGPVAL_ARMORKEY             = 3,
+00921     PGPVAL_SIGTYPE              = 4,
+00922     PGPVAL_SUBTYPE              = 5,
+00923     PGPVAL_PUBKEYALGO           = 6,
+00924     PGPVAL_SYMKEYALGO           = 7,
+00925     PGPVAL_COMPRESSALGO         = 8,
+00926     PGPVAL_HASHALGO             = 9,
+00927     PGPVAL_SERVERPREFS          = 10,
+00928 } pgpValType;
+00929 
+00933 enum rpmDigestFlags_e {
+00934     RPMDIGEST_NONE      = 0
+00935 };
+00936 
+00937 typedef rpmFlags rpmDigestFlags;
+00938 
+00945 const char * pgpValString(pgpValType type, uint8_t val);
+00946 
+00953 static inline
+00954 unsigned int pgpGrab(const uint8_t *s, size_t nbytes)
+00955 {
+00956     size_t i = 0;
+00957     size_t nb = (nbytes <= sizeof(i) ? nbytes : sizeof(i));
+00958     while (nb--)
+00959         i = (i << 8) | *s++;
+00960     return i;
+00961 }
+00962 
+00969 static inline
+00970 size_t pgpLen(const uint8_t *s, size_t * lenp)
+00971 {
+00972     if (*s < 192) {
+00973         (*lenp) = *s++;
+00974         return 1;
+00975     } else if (*s < 255) {
+00976         (*lenp) = ((((unsigned)s[0]) - 192) << 8) + s[1] + 192;
+00977         return 2;
+00978     } else {
+00979         (*lenp) = pgpGrab(s+1, (size_t) 4);
+00980         return 5;
+00981     }
+00982 }
+00983 
+00990 char * pgpHexStr(const uint8_t *p, size_t plen);
+00991 
+01000 int pgpPubkeyFingerprint(const uint8_t * pkt, size_t pktlen,
+01001                 pgpKeyID_t keyid);
+01002 
+01010 int pgpExtractPubkeyFingerprint(const char * b64pkt, pgpKeyID_t keyid);
+01011 
+01020 int pgpPrtPkts(const uint8_t *pkts, size_t pktlen, pgpDig dig, int printing);
+01021 
+01029 pgpArmor pgpReadPkts(const char * fn, uint8_t ** pkt, size_t * pktlen);
+01030 
+01038 pgpArmor pgpParsePkts(const char *armor, uint8_t ** pkt, size_t * pktlen);
+01039 
+01047 char * pgpArmorWrap(int atype, const unsigned char * s, size_t ns);
+01048 
+01053 pgpDig pgpNewDig(void);
+01054 
+01059 void pgpCleanDig(pgpDig dig);
+01060 
+01066 pgpDig pgpFreeDig(pgpDig dig);
+01067 
+01074 rpmRC pgpVerifySig(pgpDig dig, DIGEST_CTX hashctx);
+01075 
+01081 char *pgpIdentItem(pgpDigParams digp);
+01082 
+01090 int rpmInitCrypto(void);
+01091 
+01095 int rpmFreeCrypto(void);
+01096 
+01102 DIGEST_CTX rpmDigestDup(DIGEST_CTX octx);
+01103 
+01109 size_t rpmDigestLength(int hashalgo);
+01110 
+01118 DIGEST_CTX rpmDigestInit(int hashalgo, rpmDigestFlags flags);
+01119 
+01127 int rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len);
+01128 
+01140 int rpmDigestFinal(DIGEST_CTX ctx,
+01141         void ** datap,
+01142         size_t * lenp, int asAscii);
+01143 
+01148 rpmDigestBundle rpmDigestBundleNew(void);
+01149 
+01155 rpmDigestBundle rpmDigestBundleFree(rpmDigestBundle bundle);
+01156 
+01164 int rpmDigestBundleAdd(rpmDigestBundle bundle, int algo,
+01165                         rpmDigestFlags flags);
+01166 
+01174 int rpmDigestBundleUpdate(rpmDigestBundle bundle, const void *data, size_t len);
+01175 
+01186 int rpmDigestBundleFinal(rpmDigestBundle bundle,
+01187          int algo, void ** datap, size_t * lenp, int asAscii);
+01188 
+01195 DIGEST_CTX rpmDigestBundleDupCtx(rpmDigestBundle bundle, int algo);
+01196 
+01197 #ifdef __cplusplus
+01198 }
+01199 #endif
+01200 
+01201 #endif  /* H_RPMPGP */
+
+
+ + + diff --git a/doc/librpm/html/rpmpol_8h.html b/doc/librpm/html/rpmpol_8h.html new file mode 100644 index 0000000..cf2c531 --- /dev/null +++ b/doc/librpm/html/rpmpol_8h.html @@ -0,0 +1,137 @@ + + + + +rpm: rpmpol.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmpol.h File Reference
+
+
+ +

Structure(s) used for policy sets. +More...

+
#include <rpm/rpmtypes.h>
+
+Include dependency graph for rpmpol.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + +

+Defines

#define RPMPOL_TYPE_DEFAULT   "default"

+Typedefs

typedef rpmFlags rpmpolFlags

+Enumerations

enum  rpmpolFlags_e { RPMPOL_FLAG_NONE = 0, +RPMPOL_FLAG_BASE = (1 << 0) + }
+

Detailed Description

+

Structure(s) used for policy sets.

+ +

Definition in file rpmpol.h.

+

Define Documentation

+ +
+
+ + + + +
#define RPMPOL_TYPE_DEFAULT   "default"
+
+
+ +

Definition at line 22 of file rpmpol.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmpolFlags
+
+
+ +

Definition at line 20 of file rpmpol.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmpolFlags_e
+
+
+
Enumerator:
+ + +
RPMPOL_FLAG_NONE  +
RPMPOL_FLAG_BASE  +
+
+
+ +

Definition at line 15 of file rpmpol.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmpol_8h__incl.map b/doc/librpm/html/rpmpol_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmpol_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmpol_8h__incl.md5 b/doc/librpm/html/rpmpol_8h__incl.md5 new file mode 100644 index 0000000..7e58ca2 --- /dev/null +++ b/doc/librpm/html/rpmpol_8h__incl.md5 @@ -0,0 +1 @@ +9b4c6f42135baab44638814b0c1fc20a \ No newline at end of file diff --git a/doc/librpm/html/rpmpol_8h__incl.png b/doc/librpm/html/rpmpol_8h__incl.png new file mode 100644 index 0000000..aad4c67 Binary files /dev/null and b/doc/librpm/html/rpmpol_8h__incl.png differ diff --git a/doc/librpm/html/rpmpol_8h_source.html b/doc/librpm/html/rpmpol_8h_source.html new file mode 100644 index 0000000..db2c1c9 --- /dev/null +++ b/doc/librpm/html/rpmpol_8h_source.html @@ -0,0 +1,72 @@ + + + + +rpm: rpmpol.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmpol.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMPOL
+00002 #define H_RPMPOL
+00003 
+00009 #include <rpm/rpmtypes.h>
+00010 
+00011 #ifdef __cplusplus
+00012 extern "C" {
+00013 #endif
+00014 
+00015 enum rpmpolFlags_e {
+00016         RPMPOL_FLAG_NONE = 0,
+00017         RPMPOL_FLAG_BASE = (1 << 0)
+00018 };
+00019 
+00020 typedef rpmFlags rpmpolFlags;
+00021 
+00022 #define RPMPOL_TYPE_DEFAULT "default"
+00023 
+00024 
+00025 #ifdef __cplusplus
+00026 }
+00027 #endif
+00028 #endif                          /* H_rpmpol */
+
+
+ + + diff --git a/doc/librpm/html/rpmprob_8h.html b/doc/librpm/html/rpmprob_8h.html new file mode 100644 index 0000000..ce93031 --- /dev/null +++ b/doc/librpm/html/rpmprob_8h.html @@ -0,0 +1,167 @@ + + + + +rpm: rpmprob.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmprob.h File Reference
+
+
+ +

Structures and prototypes used for an rpm problem item. +More...

+
#include <stdio.h>
+#include <rpm/rpmtypes.h>
+
+Include dependency graph for rpmprob.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef struct rpmProblem_s * rpmProblem
typedef rpmFlags rpmprobFilterFlags
typedef enum rpmProblemType_e rpmProblemType
 Enumerate transaction set problem types.

+Enumerations

enum  rpmprobFilterFlags_e {
+  RPMPROB_FILTER_NONE = 0, +RPMPROB_FILTER_IGNOREOS = (1 << 0), +RPMPROB_FILTER_IGNOREARCH = (1 << 1), +RPMPROB_FILTER_REPLACEPKG = (1 << 2), +
+  RPMPROB_FILTER_FORCERELOCATE = (1 << 3), +RPMPROB_FILTER_REPLACENEWFILES = (1 << 4), +RPMPROB_FILTER_REPLACEOLDFILES = (1 << 5), +RPMPROB_FILTER_OLDPACKAGE = (1 << 6), +
+  RPMPROB_FILTER_DISKSPACE = (1 << 7), +RPMPROB_FILTER_DISKNODES = (1 << 8) +
+ }
enum  rpmProblemType_e {
+  RPMPROB_BADARCH, +RPMPROB_BADOS, +RPMPROB_PKG_INSTALLED, +RPMPROB_BADRELOCATE, +
+  RPMPROB_REQUIRES, +RPMPROB_CONFLICT, +RPMPROB_NEW_FILE_CONFLICT, +RPMPROB_FILE_CONFLICT, +
+  RPMPROB_OLDPACKAGE, +RPMPROB_DISKSPACE, +RPMPROB_DISKNODES, +RPMPROB_OBSOLETES +
+ }
 Enumerate transaction set problem types. More...

+Functions

rpmProblem rpmProblemCreate (rpmProblemType type, const char *pkgNEVR, fnpyKey key, const char *altNEVR, const char *str, uint64_t number)
 Create a problem item.
rpmProblem rpmProblemFree (rpmProblem prob)
 Destroy a problem item.
rpmProblem rpmProblemLink (rpmProblem prob)
 Reference an rpmProblem instance.
int rpmProblemCompare (rpmProblem ap, rpmProblem bp)
 Compare two problems for equality.
const char * rpmProblemGetPkgNEVR (rpmProblem prob)
 Return package NEVR.
const char * rpmProblemGetAltNEVR (rpmProblem prob)
 Return related (e.g.
rpmProblemType rpmProblemGetType (rpmProblem prob)
 Return type of problem (dependency, diskpace etc)
fnpyKey rpmProblemGetKey (rpmProblem prob)
 Return filename or python object address of a problem.
const char * rpmProblemGetStr (rpmProblem prob)
 Return a generic data string from a problem.
rpm_loff_t rpmProblemGetDiskNeed (rpmProblem prob)
 Return disk requirement (needed disk space / number of inodes) depending on problem type.
char * rpmProblemString (rpmProblem prob)
 Return formatted string representation of a problem.
+

Detailed Description

+

Structures and prototypes used for an rpm problem item.

+ +

Definition in file rpmprob.h.

+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmprobFilterFlags
+
+
+ +

Definition at line 34 of file rpmprob.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmProblem_s* rpmProblem
+
+
+ +

Definition at line 16 of file rpmprob.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmprob_8h__incl.map b/doc/librpm/html/rpmprob_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmprob_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmprob_8h__incl.md5 b/doc/librpm/html/rpmprob_8h__incl.md5 new file mode 100644 index 0000000..cbe286c --- /dev/null +++ b/doc/librpm/html/rpmprob_8h__incl.md5 @@ -0,0 +1 @@ +e8f8dc9e5f4875ef90e87812e2e875b0 \ No newline at end of file diff --git a/doc/librpm/html/rpmprob_8h__incl.png b/doc/librpm/html/rpmprob_8h__incl.png new file mode 100644 index 0000000..86a6985 Binary files /dev/null and b/doc/librpm/html/rpmprob_8h__incl.png differ diff --git a/doc/librpm/html/rpmprob_8h_source.html b/doc/librpm/html/rpmprob_8h_source.html new file mode 100644 index 0000000..6641e6c --- /dev/null +++ b/doc/librpm/html/rpmprob_8h_source.html @@ -0,0 +1,120 @@ + + + + +rpm: rpmprob.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmprob.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMPROB_H
+00002 #define _RPMPROB_H
+00003 
+00009 #include <stdio.h>
+00010 #include <rpm/rpmtypes.h>
+00011 
+00012 #ifdef __cplusplus
+00013 extern "C" {
+00014 #endif
+00015 
+00016 typedef struct rpmProblem_s * rpmProblem;
+00017 
+00021 enum rpmprobFilterFlags_e {
+00022     RPMPROB_FILTER_NONE         = 0,
+00023     RPMPROB_FILTER_IGNOREOS     = (1 << 0),     
+00024     RPMPROB_FILTER_IGNOREARCH   = (1 << 1),     
+00025     RPMPROB_FILTER_REPLACEPKG   = (1 << 2),     
+00026     RPMPROB_FILTER_FORCERELOCATE= (1 << 3),     
+00027     RPMPROB_FILTER_REPLACENEWFILES= (1 << 4),   
+00028     RPMPROB_FILTER_REPLACEOLDFILES= (1 << 5),   
+00029     RPMPROB_FILTER_OLDPACKAGE   = (1 << 6),     
+00030     RPMPROB_FILTER_DISKSPACE    = (1 << 7),     
+00031     RPMPROB_FILTER_DISKNODES    = (1 << 8)      
+00032 };
+00033 
+00034 typedef rpmFlags rpmprobFilterFlags;
+00035 
+00039 typedef enum rpmProblemType_e {
+00040     RPMPROB_BADARCH,    
+00041     RPMPROB_BADOS,      
+00042     RPMPROB_PKG_INSTALLED, 
+00043     RPMPROB_BADRELOCATE,
+00044     RPMPROB_REQUIRES,   
+00045     RPMPROB_CONFLICT,   
+00046     RPMPROB_NEW_FILE_CONFLICT, 
+00047     RPMPROB_FILE_CONFLICT,
+00048     RPMPROB_OLDPACKAGE, 
+00049     RPMPROB_DISKSPACE,  
+00050     RPMPROB_DISKNODES,  
+00051     RPMPROB_OBSOLETES,  
+00052  } rpmProblemType;
+00053 
+00064 rpmProblem rpmProblemCreate(rpmProblemType type,
+00065                             const char * pkgNEVR, fnpyKey key,
+00066                             const char * altNEVR,
+00067                             const char * str, uint64_t number);
+00068 
+00074 rpmProblem rpmProblemFree(rpmProblem prob);
+00075 
+00081 rpmProblem rpmProblemLink(rpmProblem prob);
+00082 
+00089 int rpmProblemCompare(rpmProblem ap, rpmProblem bp);
+00090 
+00097 const char * rpmProblemGetPkgNEVR(rpmProblem prob);
+00103 const char * rpmProblemGetAltNEVR(rpmProblem prob);
+00104 
+00111 rpmProblemType rpmProblemGetType(rpmProblem prob);
+00112 
+00118 fnpyKey rpmProblemGetKey(rpmProblem prob);
+00119 
+00126 const char * rpmProblemGetStr(rpmProblem prob);
+00127 
+00135 rpm_loff_t rpmProblemGetDiskNeed(rpmProblem prob);
+00136 
+00142 char * rpmProblemString(rpmProblem prob);
+00143 
+00144 #ifdef __cplusplus
+00145 }
+00146 #endif
+00147 
+00148 #endif  /* _RPMPROB_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmps_8h.html b/doc/librpm/html/rpmps_8h.html new file mode 100644 index 0000000..043637e --- /dev/null +++ b/doc/librpm/html/rpmps_8h.html @@ -0,0 +1,101 @@ + + + + +rpm: rpmps.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmps.h File Reference
+
+
+ +

Structures and prototypes used for an "rpmps" problem set. +More...

+
#include <stdio.h>
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmprob.h>
+
+Include dependency graph for rpmps.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef struct rpmpsi_s * rpmpsi
 Problem set iterator.

+Functions

rpmps rpmpsLink (rpmps ps)
 Reference a problem set instance.
int rpmpsNumProblems (rpmps ps)
 Return number of problems in set.
rpmpsi rpmpsInitIterator (rpmps ps)
 Initialize problem set iterator.
rpmpsi rpmpsFreeIterator (rpmpsi psi)
 Destroy problem set iterator.
rpmProblem rpmpsiNext (rpmpsi psi)
 Return next problem from iterator.
int rpmpsNextIterator (rpmpsi psi)
 Return next problem set iterator index.
rpmProblem rpmpsGetProblem (rpmpsi psi)
 Return current problem from problem set.
rpmps rpmpsCreate (void)
 Create a problem set.
rpmps rpmpsFree (rpmps ps)
 Destroy a problem set.
void rpmpsPrint (FILE *fp, rpmps ps)
 Print problems to file handle.
void rpmpsAppendProblem (rpmps ps, rpmProblem prob)
 Append a problem to current set of problems.
int rpmpsMerge (rpmps dest, rpmps src)
 Merge problem set into another.
+

Detailed Description

+

Structures and prototypes used for an "rpmps" problem set.

+ +

Definition in file rpmps.h.

+
+ + + diff --git a/doc/librpm/html/rpmps_8h__incl.map b/doc/librpm/html/rpmps_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmps_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmps_8h__incl.md5 b/doc/librpm/html/rpmps_8h__incl.md5 new file mode 100644 index 0000000..d56cc93 --- /dev/null +++ b/doc/librpm/html/rpmps_8h__incl.md5 @@ -0,0 +1 @@ +84245e97c6a7466c1c60bf5964e72384 \ No newline at end of file diff --git a/doc/librpm/html/rpmps_8h__incl.png b/doc/librpm/html/rpmps_8h__incl.png new file mode 100644 index 0000000..ea0ab05 Binary files /dev/null and b/doc/librpm/html/rpmps_8h__incl.png differ diff --git a/doc/librpm/html/rpmps_8h_source.html b/doc/librpm/html/rpmps_8h_source.html new file mode 100644 index 0000000..edd3bca --- /dev/null +++ b/doc/librpm/html/rpmps_8h_source.html @@ -0,0 +1,91 @@ + + + + +rpm: rpmps.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmps.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMPS
+00002 #define H_RPMPS
+00003 
+00009 #include <stdio.h>
+00010 #include <rpm/rpmtypes.h>
+00011 #include <rpm/rpmprob.h>
+00012 
+00013 #ifdef __cplusplus
+00014 extern "C" {
+00015 #endif
+00016 
+00020 typedef struct rpmpsi_s * rpmpsi;
+00021 
+00027 rpmps rpmpsLink (rpmps ps);
+00028 
+00034 int rpmpsNumProblems(rpmps ps);
+00035 
+00041 rpmpsi rpmpsInitIterator(rpmps ps);
+00042 
+00048 rpmpsi rpmpsFreeIterator(rpmpsi psi);
+00049 
+00055 rpmProblem rpmpsiNext(rpmpsi psi);
+00056 
+00062 int rpmpsNextIterator(rpmpsi psi);
+00063 
+00069 rpmProblem rpmpsGetProblem(rpmpsi psi);
+00070 
+00075 rpmps rpmpsCreate(void);
+00076 
+00082 rpmps rpmpsFree(rpmps ps);
+00083 
+00089 void rpmpsPrint(FILE *fp, rpmps ps);
+00090 
+00096 void rpmpsAppendProblem(rpmps ps, rpmProblem prob);
+00097 
+00104 int rpmpsMerge(rpmps dest, rpmps src);
+00105 
+00106 #ifdef __cplusplus
+00107 }
+00108 #endif
+00109 
+00110 #endif  /* H_RPMPS */
+
+
+ + + diff --git a/doc/librpm/html/rpmqv_8c.html b/doc/librpm/html/rpmqv_8c.html new file mode 100644 index 0000000..9689103 --- /dev/null +++ b/doc/librpm/html/rpmqv_8c.html @@ -0,0 +1,320 @@ + + + + +rpm: rpmqv.c File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmqv.c File Reference
+
+
+
#include "system.h"
+#include <rpm/rpmcli.h>
+#include <rpm/rpmlib.h>
+#include <rpm/rpmlog.h>
+#include <rpm/rpmps.h>
+#include <rpm/rpmts.h>
+#include "cliutils.h"
+#include "debug.h"
+
+Include dependency graph for rpmqv.c:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Defines

#define MODES_QV   (MODE_QUERY | MODE_VERIFY)
#define MODES_IE   (MODE_INSTALL | MODE_ERASE)
#define MODES_FOR_NODEPS   (MODES_IE | MODE_VERIFY)
#define MODES_FOR_TEST   (MODES_IE)

+Enumerations

enum  modes {
+  MODE_BUILD = (1 << 4), +MODE_REBUILD = (1 << 5), +MODE_RECOMPILE = (1 << 8), +MODE_TARBUILD = (1 << 11), +
+  MODE_INITDB = (1 << 0), +MODE_REBUILDDB = (1 << 1), +MODE_VERIFYDB = (1 << 2), +MODE_CHECKSIG = (1 << 0), +
+  MODE_IMPORTKEY = (1 << 1), +MODE_DELKEY = (1 << 2), +MODE_LISTKEY = (1 << 3), +MODE_QUERY = (1 << 0), +
+  MODE_VERIFY = (1 << 3), +MODE_ADDSIGN = (1 << 0), +MODE_RESIGN = (1 << 1), +MODE_DELSIGN = (1 << 2), +
+  MODE_UNKNOWN = 0, +MODE_QUERY = (1 << 0), +MODE_PARSE = (1 << 1) +
+ }

+Functions

int main (int argc, char *argv[])

+Variables

const char * program_name
static int quiet
static struct poptOption optionsTable []
+

Define Documentation

+ +
+
+ + + + +
#define MODES_FOR_NODEPS   (MODES_IE | MODE_VERIFY)
+
+
+ +

Definition at line 31 of file rpmqv.c.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
#define MODES_FOR_TEST   (MODES_IE)
+
+
+ +

Definition at line 32 of file rpmqv.c.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
#define MODES_IE   (MODE_INSTALL | MODE_ERASE)
+
+
+ +

Definition at line 26 of file rpmqv.c.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
#define MODES_QV   (MODE_QUERY | MODE_VERIFY)
+
+
+ +

Definition at line 22 of file rpmqv.c.

+ +

Referenced by main().

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum modes
+
+
+
Enumerator:
+ + + + + + + + + + + + + + + + + + + +
MODE_BUILD  +
MODE_REBUILD  +
MODE_RECOMPILE  +
MODE_TARBUILD  +
MODE_INITDB  +
MODE_REBUILDDB  +
MODE_VERIFYDB  +
MODE_CHECKSIG  +
MODE_IMPORTKEY  +
MODE_DELKEY  +
MODE_LISTKEY  +
MODE_QUERY  +
MODE_VERIFY  +
MODE_ADDSIGN  +
MODE_RESIGN  +
MODE_DELSIGN  +
MODE_UNKNOWN  +
MODE_QUERY  +
MODE_PARSE  +
+
+
+ +

Definition at line 18 of file rpmqv.c.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+
+ +

Definition at line 72 of file rpmqv.c.

+ +

References _, __progname, _free, _noTransScripts, _noTransTriggers, argerror(), finishPipe(), rpmInstallArguments_s::incldocs, initPipe(), INSTALL_ERASE, INSTALL_FRESHEN, INSTALL_HASH, INSTALL_INSTALL, INSTALL_NODEPS, INSTALL_PERCENT, INSTALL_UPGRADE, rpmInstallArguments_s::installInterfaceFlags, MODE_QUERY, MODE_UNKNOWN, MODE_VERIFY, MODES_FOR_NODEPS, MODES_FOR_TEST, MODES_IE, MODES_QV, rpmRelocation_s::newPath, rpmInstallArguments_s::noDeps, rpmInstallArguments_s::numRelocations, rpmRelocation_s::oldPath, rpmInstallArguments_s::prefix, printUsage(), rpmInstallArguments_s::probFilter, rpmQVKArguments_s::qva_flags, rpmQVKArguments_s::qva_mode, rpmQVKArguments_s::qva_queryFormat, rpmQVKArguments_s::qva_source, rpmQVKArguments_s::qva_sourceCount, rpmInstallArguments_s::relocations, RETVAL, rpmcliFini(), rpmcliInit(), rpmcliPipeOutput, rpmcliQuery(), rpmcliRootDir, rpmcliVerify(), rpmErase(), rpmExpandNumeric(), rpmIArgs, rpmInstall(), rpmIsVerbose, RPMLOG_WARNING, RPMPROB_FILTER_DISKNODES, RPMPROB_FILTER_DISKSPACE, RPMPROB_FILTER_FORCERELOCATE, RPMPROB_FILTER_IGNOREARCH, RPMPROB_FILTER_IGNOREOS, RPMPROB_FILTER_OLDPACKAGE, RPMPROB_FILTER_REPLACEPKG, RPMQV_ALL, RPMQV_PACKAGE, rpmQVKArgs, rpmSetVerbosity, RPMTRANS_FLAG_ALLFILES, RPMTRANS_FLAG_JUSTDB, RPMTRANS_FLAG_NODOCS, RPMTRANS_FLAG_NOSCRIPTS, RPMTRANS_FLAG_NOTRIGGERS, RPMTRANS_FLAG_TEST, rpmtsCreate(), rpmtsFree(), rpmtsSetRootDir(), rstreq(), rpmInstallArguments_s::transFlags, UNINSTALL_ALLMATCHES, UNINSTALL_NODEPS, VERIFY_ALL, xmalloc, and xrealloc.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
struct poptOption optionsTable[] [static]
+
+
+ +

Definition at line 37 of file rpmqv.c.

+ +
+
+ +
+
+ + + + +
const char* program_name
+
+
+ +

Definition at line 2 of file rpmqv.c.

+ +
+
+ +
+
+ + + + +
int quiet [static]
+
+
+ +

Definition at line 34 of file rpmqv.c.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmqv_8c__incl.map b/doc/librpm/html/rpmqv_8c__incl.map new file mode 100644 index 0000000..268877b --- /dev/null +++ b/doc/librpm/html/rpmqv_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/rpmqv_8c__incl.md5 b/doc/librpm/html/rpmqv_8c__incl.md5 new file mode 100644 index 0000000..6ec73b5 --- /dev/null +++ b/doc/librpm/html/rpmqv_8c__incl.md5 @@ -0,0 +1 @@ +01a6e3e8673cf1a151775ccaf6db5429 \ No newline at end of file diff --git a/doc/librpm/html/rpmqv_8c__incl.png b/doc/librpm/html/rpmqv_8c__incl.png new file mode 100644 index 0000000..e1b7bd7 Binary files /dev/null and b/doc/librpm/html/rpmqv_8c__incl.png differ diff --git a/doc/librpm/html/rpmqv_8c_source.html b/doc/librpm/html/rpmqv_8c_source.html new file mode 100644 index 0000000..0d5e437 --- /dev/null +++ b/doc/librpm/html/rpmqv_8c_source.html @@ -0,0 +1,401 @@ + + + + +rpm: rpmqv.c Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmqv.c
+
+
+Go to the documentation of this file.
00001 #include "system.h"
+00002 const char *__progname;
+00003 
+00004 #include <rpm/rpmcli.h>
+00005 #include <rpm/rpmlib.h>                 /* RPMSIGTAG, rpmReadPackageFile .. */
+00006 #include <rpm/rpmlog.h>
+00007 #include <rpm/rpmps.h>
+00008 #include <rpm/rpmts.h>
+00009 
+00010 #include "cliutils.h"
+00011 
+00012 #include "debug.h"
+00013 
+00014 #if defined(IAM_RPMQ) || defined(IAM_RPMV)
+00015 #define IAM_RPMQV
+00016 #endif
+00017 
+00018 enum modes {
+00019 
+00020     MODE_QUERY          = (1 <<  0),
+00021     MODE_VERIFY         = (1 <<  3),
+00022 #define MODES_QV (MODE_QUERY | MODE_VERIFY)
+00023 
+00024     MODE_INSTALL        = (1 <<  1),
+00025     MODE_ERASE          = (1 <<  2),
+00026 #define MODES_IE (MODE_INSTALL | MODE_ERASE)
+00027 
+00028     MODE_UNKNOWN        = 0
+00029 };
+00030 
+00031 #define MODES_FOR_NODEPS        (MODES_IE | MODE_VERIFY)
+00032 #define MODES_FOR_TEST          (MODES_IE)
+00033 
+00034 static int quiet;
+00035 
+00036 /* the structure describing the options we take and the defaults */
+00037 static struct poptOption optionsTable[] = {
+00038 
+00039 #ifdef  IAM_RPMQV
+00040  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQVSourcePoptTable, 0,
+00041         N_("Query/Verify package selection options:"),
+00042         NULL },
+00043 #endif
+00044 #ifdef IAM_RPMQ
+00045  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQueryPoptTable, 0,
+00046         N_("Query options (with -q or --query):"),
+00047         NULL },
+00048 #endif
+00049 #ifdef IAM_RPMV
+00050  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmVerifyPoptTable, 0,
+00051         N_("Verify options (with -V or --verify):"),
+00052         NULL },
+00053 #endif
+00054 
+00055 #ifdef  IAM_RPMEIU
+00056  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmInstallPoptTable, 0,
+00057         N_("Install/Upgrade/Erase options:"),
+00058         NULL },
+00059 #endif  /* IAM_RPMEIU */
+00060 
+00061  { "quiet", '\0', POPT_ARGFLAG_DOC_HIDDEN, &quiet, 0, NULL, NULL},
+00062 
+00063  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+00064         N_("Common options for all rpm modes and executables:"),
+00065         NULL },
+00066 
+00067    POPT_AUTOALIAS
+00068    POPT_AUTOHELP
+00069    POPT_TABLEEND
+00070 };
+00071 
+00072 int main(int argc, char *argv[])
+00073 {
+00074     rpmts ts = NULL;
+00075     enum modes bigMode = MODE_UNKNOWN;
+00076 
+00077 #if defined(IAM_RPMQV)
+00078     QVA_t qva = &rpmQVKArgs;
+00079 #endif
+00080 
+00081 #ifdef  IAM_RPMEIU
+00082    struct rpmInstallArguments_s * ia = &rpmIArgs;
+00083 #endif
+00084 
+00085     poptContext optCon;
+00086     int ec = 0;
+00087 #ifdef  IAM_RPMEIU
+00088     int i;
+00089 #endif
+00090 
+00091     optCon = rpmcliInit(argc, argv, optionsTable);
+00092 
+00093     /* Set the major mode based on argv[0] */
+00094 #ifdef  IAM_RPMQV
+00095     if (rstreq(__progname, "rpmquery")) bigMode = MODE_QUERY;
+00096     if (rstreq(__progname, "rpmverify")) bigMode = MODE_VERIFY;
+00097 #endif
+00098 
+00099 #if defined(IAM_RPMQV)
+00100     /* Jumpstart option from argv[0] if necessary. */
+00101     switch (bigMode) {
+00102     case MODE_QUERY:    qva->qva_mode = 'q';    break;
+00103     case MODE_VERIFY:   qva->qva_mode = 'V';    break;
+00104     case MODE_INSTALL:
+00105     case MODE_ERASE:
+00106     case MODE_UNKNOWN:
+00107     default:
+00108         break;
+00109     }
+00110 #endif
+00111 
+00112 #ifdef  IAM_RPMQV
+00113   if (bigMode == MODE_UNKNOWN || (bigMode & MODES_QV)) {
+00114     switch (qva->qva_mode) {
+00115     case 'q':   bigMode = MODE_QUERY;           break;
+00116     case 'V':   bigMode = MODE_VERIFY;          break;
+00117     }
+00118 
+00119     if (qva->qva_sourceCount) {
+00120         if (qva->qva_sourceCount > 1)
+00121             argerror(_("one type of query/verify may be performed at a "
+00122                         "time"));
+00123     }
+00124     if (qva->qva_flags && (bigMode & ~MODES_QV)) 
+00125         argerror(_("unexpected query flags"));
+00126 
+00127     if (qva->qva_queryFormat && (bigMode & ~MODES_QV)) 
+00128         argerror(_("unexpected query format"));
+00129 
+00130     if (qva->qva_source != RPMQV_PACKAGE && (bigMode & ~MODES_QV)) 
+00131         argerror(_("unexpected query source"));
+00132   }
+00133 #endif  /* IAM_RPMQV */
+00134 
+00135 #ifdef  IAM_RPMEIU
+00136   if (bigMode == MODE_UNKNOWN || (bigMode & MODES_IE))
+00137     {   int iflags = (ia->installInterfaceFlags &
+00138                 (INSTALL_UPGRADE|INSTALL_FRESHEN|INSTALL_INSTALL));
+00139         int eflags = (ia->installInterfaceFlags & INSTALL_ERASE);
+00140 
+00141         if (iflags & eflags)
+00142             argerror(_("only one major mode may be specified"));
+00143         else if (iflags)
+00144             bigMode = MODE_INSTALL;
+00145         else if (eflags)
+00146             bigMode = MODE_ERASE;
+00147     }
+00148 #endif  /* IAM_RPMEIU */
+00149 
+00150 #if defined(IAM_RPMEIU)
+00151     if (!( bigMode == MODE_INSTALL ) &&
+00152 (ia->probFilter & (RPMPROB_FILTER_REPLACEPKG | RPMPROB_FILTER_OLDPACKAGE)))
+00153         argerror(_("only installation and upgrading may be forced"));
+00154     if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_FORCERELOCATE))
+00155         argerror(_("files may only be relocated during package installation"));
+00156 
+00157     if (ia->relocations && ia->prefix)
+00158         argerror(_("cannot use --prefix with --relocate or --excludepath"));
+00159 
+00160     if (bigMode != MODE_INSTALL && ia->relocations)
+00161         argerror(_("--relocate and --excludepath may only be used when installing new packages"));
+00162 
+00163     if (bigMode != MODE_INSTALL && ia->prefix)
+00164         argerror(_("--prefix may only be used when installing new packages"));
+00165 
+00166     if (ia->prefix && ia->prefix[0] != '/') 
+00167         argerror(_("arguments to --prefix must begin with a /"));
+00168 
+00169     if (bigMode != MODE_INSTALL && (ia->installInterfaceFlags & INSTALL_HASH))
+00170         argerror(_("--hash (-h) may only be specified during package "
+00171                         "installation"));
+00172 
+00173     if (bigMode != MODE_INSTALL && (ia->installInterfaceFlags & INSTALL_PERCENT))
+00174         argerror(_("--percent may only be specified during package "
+00175                         "installation"));
+00176 
+00177     if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_REPLACEPKG))
+00178         argerror(_("--replacepkgs may only be specified during package "
+00179                         "installation"));
+00180 
+00181     if (bigMode != MODE_INSTALL && (ia->transFlags & RPMTRANS_FLAG_NODOCS))
+00182         argerror(_("--excludedocs may only be specified during package "
+00183                    "installation"));
+00184 
+00185     if (bigMode != MODE_INSTALL && ia->incldocs)
+00186         argerror(_("--includedocs may only be specified during package "
+00187                    "installation"));
+00188 
+00189     if (ia->incldocs && (ia->transFlags & RPMTRANS_FLAG_NODOCS))
+00190         argerror(_("only one of --excludedocs and --includedocs may be "
+00191                  "specified"));
+00192   
+00193     if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_IGNOREARCH))
+00194         argerror(_("--ignorearch may only be specified during package "
+00195                    "installation"));
+00196 
+00197     if (bigMode != MODE_INSTALL && (ia->probFilter & RPMPROB_FILTER_IGNOREOS))
+00198         argerror(_("--ignoreos may only be specified during package "
+00199                    "installation"));
+00200 
+00201     if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE &&
+00202         (ia->probFilter & (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES)))
+00203         argerror(_("--ignoresize may only be specified during package "
+00204                    "installation"));
+00205 
+00206     if ((ia->installInterfaceFlags & UNINSTALL_ALLMATCHES) && bigMode != MODE_ERASE)
+00207         argerror(_("--allmatches may only be specified during package "
+00208                    "erasure"));
+00209 
+00210     if ((ia->transFlags & RPMTRANS_FLAG_ALLFILES) && bigMode != MODE_INSTALL)
+00211         argerror(_("--allfiles may only be specified during package "
+00212                    "installation"));
+00213 
+00214     if ((ia->transFlags & RPMTRANS_FLAG_JUSTDB) &&
+00215         bigMode != MODE_INSTALL && bigMode != MODE_ERASE)
+00216         argerror(_("--justdb may only be specified during package "
+00217                    "installation and erasure"));
+00218 
+00219     if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE && bigMode != MODE_VERIFY &&
+00220         (ia->transFlags & (RPMTRANS_FLAG_NOSCRIPTS | _noTransScripts | _noTransTriggers)))
+00221         argerror(_("script disabling options may only be specified during "
+00222                    "package installation and erasure"));
+00223 
+00224     if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE && bigMode != MODE_VERIFY &&
+00225         (ia->transFlags & (RPMTRANS_FLAG_NOTRIGGERS | _noTransTriggers)))
+00226         argerror(_("trigger disabling options may only be specified during "
+00227                    "package installation and erasure"));
+00228 
+00229     if (ia->noDeps & (bigMode & ~MODES_FOR_NODEPS))
+00230         argerror(_("--nodeps may only be specified during package "
+00231                    "installation, erasure, and verification"));
+00232 
+00233     if ((ia->transFlags & RPMTRANS_FLAG_TEST) && (bigMode & ~MODES_FOR_TEST))
+00234         argerror(_("--test may only be specified during package installation "
+00235                  "and erasure"));
+00236 #endif  /* IAM_RPMEIU */
+00237 
+00238     if (rpmcliRootDir && rpmcliRootDir[0] != '/') {
+00239         argerror(_("arguments to --root (-r) must begin with a /"));
+00240     }
+00241 
+00242     if (quiet)
+00243         rpmSetVerbosity(RPMLOG_WARNING);
+00244 
+00245     if (rpmcliPipeOutput && initPipe())
+00246         exit(EXIT_FAILURE);
+00247         
+00248     ts = rpmtsCreate();
+00249     (void) rpmtsSetRootDir(ts, rpmcliRootDir);
+00250     switch (bigMode) {
+00251 #ifdef  IAM_RPMEIU
+00252     case MODE_ERASE:
+00253         if (ia->noDeps) ia->installInterfaceFlags |= UNINSTALL_NODEPS;
+00254 
+00255         if (!poptPeekArg(optCon)) {
+00256             argerror(_("no packages given for erase"));
+00257         } else {
+00258             ec += rpmErase(ts, ia, (ARGV_const_t) poptGetArgs(optCon));
+00259         }
+00260         break;
+00261 
+00262     case MODE_INSTALL:
+00263 
+00264         /* RPMTRANS_FLAG_KEEPOBSOLETE */
+00265 
+00266         if (!ia->incldocs) {
+00267             if (ia->transFlags & RPMTRANS_FLAG_NODOCS) {
+00268                 ;
+00269             } else if (rpmExpandNumeric("%{_excludedocs}"))
+00270                 ia->transFlags |= RPMTRANS_FLAG_NODOCS;
+00271         }
+00272 
+00273         if (ia->noDeps) ia->installInterfaceFlags |= INSTALL_NODEPS;
+00274 
+00275         /* we've already ensured !(!ia->prefix && !ia->relocations) */
+00276         if (ia->prefix) {
+00277             ia->relocations = xmalloc(2 * sizeof(*ia->relocations));
+00278             ia->relocations[0].oldPath = NULL;   /* special case magic */
+00279             ia->relocations[0].newPath = ia->prefix;
+00280             ia->relocations[1].oldPath = NULL;
+00281             ia->relocations[1].newPath = NULL;
+00282         } else if (ia->relocations) {
+00283             ia->relocations = xrealloc(ia->relocations, 
+00284                         sizeof(*ia->relocations) * (ia->numRelocations + 1));
+00285             ia->relocations[ia->numRelocations].oldPath = NULL;
+00286             ia->relocations[ia->numRelocations].newPath = NULL;
+00287         }
+00288 
+00289         if (!poptPeekArg(optCon)) {
+00290             argerror(_("no packages given for install"));
+00291         } else {
+00292             /* FIX: ia->relocations[0].newPath undefined */
+00293             ec += rpmInstall(ts, ia, (ARGV_t) poptGetArgs(optCon));
+00294         }
+00295         break;
+00296 
+00297 #endif  /* IAM_RPMEIU */
+00298 
+00299 #ifdef  IAM_RPMQV
+00300     case MODE_QUERY:
+00301         if (!poptPeekArg(optCon) && !(qva->qva_source == RPMQV_ALL))
+00302             argerror(_("no arguments given for query"));
+00303 
+00304         ec = rpmcliQuery(ts, qva, (ARGV_const_t) poptGetArgs(optCon));
+00305         break;
+00306 
+00307     case MODE_VERIFY:
+00308     {   rpmVerifyFlags verifyFlags = VERIFY_ALL;
+00309 
+00310         verifyFlags &= ~qva->qva_flags;
+00311         qva->qva_flags = (rpmQueryFlags) verifyFlags;
+00312 
+00313         if (!poptPeekArg(optCon) && !(qva->qva_source == RPMQV_ALL))
+00314             argerror(_("no arguments given for verify"));
+00315         ec = rpmcliVerify(ts, qva, (ARGV_const_t) poptGetArgs(optCon));
+00316     }   break;
+00317 #endif  /* IAM_RPMQV */
+00318 
+00319 #if !defined(IAM_RPMQV)
+00320     case MODE_QUERY:
+00321     case MODE_VERIFY:
+00322 #endif
+00323 #if !defined(IAM_RPMEIU)
+00324     case MODE_INSTALL:
+00325     case MODE_ERASE:
+00326 #endif
+00327     case MODE_UNKNOWN:
+00328         if (poptPeekArg(optCon) != NULL || argc <= 1 || rpmIsVerbose()) {
+00329             printUsage(optCon, stderr, 0);
+00330             ec = argc;
+00331         }
+00332         break;
+00333     }
+00334 
+00335     ts = rpmtsFree(ts);
+00336     finishPipe();
+00337 
+00338 #ifdef  IAM_RPMQV
+00339     qva->qva_queryFormat = _free(qva->qva_queryFormat);
+00340 #endif
+00341 
+00342 #ifdef  IAM_RPMEIU
+00343     if (ia->relocations != NULL)
+00344     for (i = 0; i < ia->numRelocations; i++)
+00345         ia->relocations[i].oldPath = _free(ia->relocations[i].oldPath);
+00346     ia->relocations = _free(ia->relocations);
+00347 #endif
+00348 
+00349     rpmcliFini(optCon);
+00350 
+00351     return RETVAL(ec);
+00352 }
+
+
+ + + diff --git a/doc/librpm/html/rpmsign_8c.html b/doc/librpm/html/rpmsign_8c.html new file mode 100644 index 0000000..afb3f89 --- /dev/null +++ b/doc/librpm/html/rpmsign_8c.html @@ -0,0 +1,327 @@ + + + + +rpm: rpmsign.c File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmsign.c File Reference
+
+
+
#include "system.h"
+#include <errno.h>
+#include <sys/wait.h>
+#include <popt.h>
+#include <rpm/rpmcli.h>
+#include <rpm/rpmsign.h>
+#include "cliutils.h"
+#include "debug.h"
+
+Include dependency graph for rpmsign.c:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + +

+Enumerations

enum  modes {
+  MODE_BUILD = (1 << 4), +MODE_REBUILD = (1 << 5), +MODE_RECOMPILE = (1 << 8), +MODE_TARBUILD = (1 << 11), +
+  MODE_INITDB = (1 << 0), +MODE_REBUILDDB = (1 << 1), +MODE_VERIFYDB = (1 << 2), +MODE_CHECKSIG = (1 << 0), +
+  MODE_IMPORTKEY = (1 << 1), +MODE_DELKEY = (1 << 2), +MODE_LISTKEY = (1 << 3), +MODE_QUERY = (1 << 0), +
+  MODE_VERIFY = (1 << 3), +MODE_ADDSIGN = (1 << 0), +MODE_RESIGN = (1 << 1), +MODE_DELSIGN = (1 << 2), +
+  MODE_UNKNOWN = 0, +MODE_QUERY = (1 << 0), +MODE_PARSE = (1 << 1) +
+ }

+Functions

static int checkPassPhrase (const char *passPhrase)
static int doSign (poptContext optCon)
int main (int argc, char *argv[])

+Variables

char ** environ = NULL
static int mode = 0
static struct poptOption signOptsTable []
static struct poptOption optionsTable []
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum modes
+
+
+
Enumerator:
+ + + + + + + + + + + + + + + + + + + +
MODE_BUILD  +
MODE_REBUILD  +
MODE_RECOMPILE  +
MODE_TARBUILD  +
MODE_INITDB  +
MODE_REBUILDDB  +
MODE_VERIFYDB  +
MODE_CHECKSIG  +
MODE_IMPORTKEY  +
MODE_DELKEY  +
MODE_LISTKEY  +
MODE_QUERY  +
MODE_VERIFY  +
MODE_ADDSIGN  +
MODE_RESIGN  +
MODE_DELSIGN  +
MODE_UNKNOWN  +
MODE_QUERY  +
MODE_PARSE  +
+
+
+ +

Definition at line 15 of file rpmsign.c.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
static int checkPassPhrase (const char * passPhrase) [static]
+
+
+ +

Definition at line 44 of file rpmsign.c.

+ +

References _, environ, rpmExpand(), and rstreq().

+ +

Referenced by doSign().

+ +
+
+ +
+
+ + + + + + + + +
static int doSign (poptContext optCon) [static]
+
+
+ +

Definition at line 101 of file rpmsign.c.

+ +

References _, checkPassPhrase(), rpmExpand(), rpmPkgSign(), rstrdup(), and rstreq().

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+ +
+

Variable Documentation

+ +
+
+ + + + +
char** environ = NULL
+
+
+ +

Definition at line 12 of file rpmsign.c.

+ +
+
+ +
+
+ + + + +
int mode = 0 [static]
+
+
+ +

Definition at line 21 of file rpmsign.c.

+ +
+
+ +
+
+ + + + +
struct poptOption optionsTable[] [static]
+
+
+Initial value:
 {
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, signOptsTable, 0,
+         "Signature options:" , NULL },
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+         "Common options for all rpm modes and executables:" , NULL },
+
+    POPT_AUTOALIAS
+    POPT_AUTOHELP
+    POPT_TABLEEND
+}
+
+

Definition at line 33 of file rpmsign.c.

+ +
+
+ +
+
+ + + + +
struct poptOption signOptsTable[] [static]
+
+
+Initial value:
 {
+    { "addsign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_ADDSIGN,
+         "sign package(s)" , NULL },
+    { "resign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_RESIGN,
+         "sign package(s) (identical to --addsign)" , NULL },
+    { "delsign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_DELSIGN,
+         "delete package signatures" , NULL },
+    POPT_TABLEEND
+}
+
+

Definition at line 23 of file rpmsign.c.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmsign_8c__incl.map b/doc/librpm/html/rpmsign_8c__incl.map new file mode 100644 index 0000000..1ccb60a --- /dev/null +++ b/doc/librpm/html/rpmsign_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/rpmsign_8c__incl.md5 b/doc/librpm/html/rpmsign_8c__incl.md5 new file mode 100644 index 0000000..523cef8 --- /dev/null +++ b/doc/librpm/html/rpmsign_8c__incl.md5 @@ -0,0 +1 @@ +73854a12dcdf7a7f75b5d45d29ac6156 \ No newline at end of file diff --git a/doc/librpm/html/rpmsign_8c__incl.png b/doc/librpm/html/rpmsign_8c__incl.png new file mode 100644 index 0000000..cff1b88 Binary files /dev/null and b/doc/librpm/html/rpmsign_8c__incl.png differ diff --git a/doc/librpm/html/rpmsign_8c_source.html b/doc/librpm/html/rpmsign_8c_source.html new file mode 100644 index 0000000..3933083 --- /dev/null +++ b/doc/librpm/html/rpmsign_8c_source.html @@ -0,0 +1,215 @@ + + + + +rpm: rpmsign.c Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmsign.c
+
+
+Go to the documentation of this file.
00001 #include "system.h"
+00002 #include <errno.h>
+00003 #include <sys/wait.h>
+00004 
+00005 #include <popt.h>
+00006 #include <rpm/rpmcli.h>
+00007 #include <rpm/rpmsign.h>
+00008 #include "cliutils.h"
+00009 #include "debug.h"
+00010 
+00011 #if !defined(__GLIBC__) && !defined(__APPLE__)
+00012 char ** environ = NULL;
+00013 #endif
+00014 
+00015 enum modes {
+00016     MODE_ADDSIGN = (1 << 0),
+00017     MODE_RESIGN  = (1 << 1),
+00018     MODE_DELSIGN = (1 << 2),
+00019 };
+00020 
+00021 static int mode = 0;
+00022 
+00023 static struct poptOption signOptsTable[] = {
+00024     { "addsign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_ADDSIGN,
+00025         N_("sign package(s)"), NULL },
+00026     { "resign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_RESIGN,
+00027         N_("sign package(s) (identical to --addsign)"), NULL },
+00028     { "delsign", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_DELSIGN,
+00029         N_("delete package signatures"), NULL },
+00030     POPT_TABLEEND
+00031 };
+00032 
+00033 static struct poptOption optionsTable[] = {
+00034     { NULL, '\0', POPT_ARG_INCLUDE_TABLE, signOptsTable, 0,
+00035         N_("Signature options:"), NULL },
+00036     { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+00037         N_("Common options for all rpm modes and executables:"), NULL },
+00038 
+00039     POPT_AUTOALIAS
+00040     POPT_AUTOHELP
+00041     POPT_TABLEEND
+00042 };
+00043 
+00044 static int checkPassPhrase(const char * passPhrase)
+00045 {
+00046     int passPhrasePipe[2];
+00047     int pid, status;
+00048     int rc;
+00049     int xx;
+00050 
+00051     if (passPhrase == NULL)
+00052         return -1;
+00053 
+00054     passPhrasePipe[0] = passPhrasePipe[1] = 0;
+00055     xx = pipe(passPhrasePipe);
+00056     if (!(pid = fork())) {
+00057         char * cmd, * gpg_path;
+00058         char *const *av;
+00059         int fdno;
+00060 
+00061         xx = close(STDIN_FILENO);
+00062         xx = close(STDOUT_FILENO);
+00063         xx = close(passPhrasePipe[1]);
+00064         if ((fdno = open("/dev/null", O_RDONLY)) != STDIN_FILENO) {
+00065             xx = dup2(fdno, STDIN_FILENO);
+00066             xx = close(fdno);
+00067         }
+00068         if ((fdno = open("/dev/null", O_WRONLY)) != STDOUT_FILENO) {
+00069             xx = dup2(fdno, STDOUT_FILENO);
+00070             xx = close(fdno);
+00071         }
+00072         xx = dup2(passPhrasePipe[0], 3);
+00073 
+00074         unsetenv("MALLOC_CHECK_");
+00075         gpg_path = rpmExpand("%{?_gpg_path}", NULL);
+00076 
+00077         if (!rstreq(gpg_path, ""))
+00078             setenv("GNUPGHOME", gpg_path, 1);
+00079         
+00080         cmd = rpmExpand("%{?__gpg_check_password_cmd}", NULL);
+00081         rc = poptParseArgvString(cmd, NULL, (const char ***)&av);
+00082         if (!rc)
+00083             rc = execve(av[0], av+1, environ);
+00084 
+00085         fprintf(stderr, _("Could not exec %s: %s\n"), "gpg",
+00086                     strerror(errno));
+00087         _exit(EXIT_FAILURE);
+00088     }
+00089 
+00090     xx = close(passPhrasePipe[0]);
+00091     xx = write(passPhrasePipe[1], passPhrase, strlen(passPhrase));
+00092     xx = write(passPhrasePipe[1], "\n", 1);
+00093     xx = close(passPhrasePipe[1]);
+00094 
+00095     (void) waitpid(pid, &status, 0);
+00096 
+00097     return ((WIFEXITED(status) && WEXITSTATUS(status) == 0)) ? 0 : 1;
+00098 }
+00099 
+00100 /* TODO: permit overriding macro setup on the command line */
+00101 static int doSign(poptContext optCon)
+00102 {
+00103     int rc = EXIT_FAILURE;
+00104     char * passPhrase = NULL;
+00105     char * name = rpmExpand("%{?_gpg_name}", NULL);
+00106 
+00107     if (rstreq(name, "")) {
+00108         fprintf(stderr, _("You must set \"%%_gpg_name\" in your macro file\n"));
+00109         goto exit;
+00110     }
+00111 
+00112     /* XXX FIXME: eliminate obsolete getpass() usage */
+00113     passPhrase = getpass(_("Enter pass phrase: "));
+00114     passPhrase = (passPhrase != NULL) ? rstrdup(passPhrase) : NULL;
+00115     if (checkPassPhrase(passPhrase) == 0) {
+00116         const char *arg;
+00117         fprintf(stderr, _("Pass phrase is good.\n"));
+00118         rc = 0;
+00119         while ((arg = poptGetArg(optCon)) != NULL) {
+00120             rc += rpmPkgSign(arg, NULL, passPhrase);
+00121         }
+00122     } else {
+00123         fprintf(stderr, _("Pass phrase check failed\n"));
+00124     }
+00125 
+00126 exit:
+00127     free(passPhrase);
+00128     free(name);
+00129     return rc;
+00130 }
+00131 
+00132 int main(int argc, char *argv[])
+00133 {
+00134     int ec = EXIT_FAILURE;
+00135     poptContext optCon = rpmcliInit(argc, argv, optionsTable);
+00136     const char *arg;
+00137     
+00138     if (argc <= 1) {
+00139         printUsage(optCon, stderr, 0);
+00140         goto exit;
+00141     }
+00142 
+00143     if (poptPeekArg(optCon) == NULL) {
+00144         argerror(_("no arguments given"));
+00145     }
+00146 
+00147     switch (mode) {
+00148     case MODE_ADDSIGN:
+00149     case MODE_RESIGN:
+00150         ec = doSign(optCon);
+00151         break;
+00152     case MODE_DELSIGN:
+00153         ec = 0;
+00154         while ((arg = poptGetArg(optCon)) != NULL) {
+00155             ec += rpmPkgDelSign(arg);
+00156         }
+00157         break;
+00158     default:
+00159         argerror(_("only one major mode may be specified"));
+00160         break;
+00161     }
+00162 
+00163 exit:
+00164     rpmcliFini(optCon);
+00165     return ec;
+00166 }
+
+
+ + + diff --git a/doc/librpm/html/rpmsign_8h.html b/doc/librpm/html/rpmsign_8h.html new file mode 100644 index 0000000..b9cd5e8 --- /dev/null +++ b/doc/librpm/html/rpmsign_8h.html @@ -0,0 +1,147 @@ + + + + +rpm: rpmsign.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmsign.h File Reference
+
+
+
#include <rpm/argv.h>
+#include <rpm/rpmpgp.h>
+
+Include dependency graph for rpmsign.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + +

+Data Structures

struct  rpmSignArgs

+Functions

int rpmPkgSign (const char *path, const struct rpmSignArgs *args, const char *passPhrase)
 Sign a package.
int rpmPkgDelSign (const char *path)
 Delete signature(s) from a package.
+

Function Documentation

+ +
+
+ + + + + + + + +
int rpmPkgDelSign (const char * path)
+
+
+ +

Delete signature(s) from a package.

+
Parameters:
+ + +
pathpath to package
+
+
+
Returns:
0 on success
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int rpmPkgSign (const char * path,
const struct rpmSignArgsargs,
const char * passPhrase 
)
+
+
+ +

Sign a package.

+
Parameters:
+ + + + +
pathpath to package
argssigning parameters (or NULL for defaults)
passPhrasepassphrase for the signing key
+
+
+
Returns:
0 on success
+ +

Referenced by doSign().

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmsign_8h__incl.map b/doc/librpm/html/rpmsign_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmsign_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmsign_8h__incl.md5 b/doc/librpm/html/rpmsign_8h__incl.md5 new file mode 100644 index 0000000..8b427e7 --- /dev/null +++ b/doc/librpm/html/rpmsign_8h__incl.md5 @@ -0,0 +1 @@ +5bdbf3cb2e7274d7888fd9e30e94d38a \ No newline at end of file diff --git a/doc/librpm/html/rpmsign_8h__incl.png b/doc/librpm/html/rpmsign_8h__incl.png new file mode 100644 index 0000000..34d68eb Binary files /dev/null and b/doc/librpm/html/rpmsign_8h__incl.png differ diff --git a/doc/librpm/html/rpmsign_8h_source.html b/doc/librpm/html/rpmsign_8h_source.html new file mode 100644 index 0000000..063a234 --- /dev/null +++ b/doc/librpm/html/rpmsign_8h_source.html @@ -0,0 +1,75 @@ + + + + +rpm: rpmsign.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmsign.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMSIGN_H
+00002 #define _RPMSIGN_H
+00003 
+00004 #include <rpm/argv.h>
+00005 #include <rpm/rpmpgp.h>
+00006 
+00007 #ifdef __cplusplus
+00008 extern "C" {
+00009 #endif
+00010 
+00011 struct rpmSignArgs {
+00012     char *keyid;
+00013     pgpHashAlgo hashalgo;
+00014     /* ... what else? */
+00015 };
+00016 
+00024 int rpmPkgSign(const char *path,
+00025                const struct rpmSignArgs * args, const char *passPhrase);
+00026 
+00032 int rpmPkgDelSign(const char *path);
+00033 
+00034 #ifdef __cplusplus
+00035 }
+00036 #endif
+00037 
+00038 #endif /* _RPMSIGN_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmspec_8c.html b/doc/librpm/html/rpmspec_8c.html new file mode 100644 index 0000000..66c8fac --- /dev/null +++ b/doc/librpm/html/rpmspec_8c.html @@ -0,0 +1,341 @@ + + + + +rpm: rpmspec.c File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmspec.c File Reference
+
+
+
#include "system.h"
+#include <rpm/rpmcli.h>
+#include <rpm/rpmbuild.h>
+#include <rpm/rpmlog.h>
+#include <rpm/rpmts.h>
+#include "cliutils.h"
+#include "debug.h"
+
+Include dependency graph for rpmspec.c:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + +

+Enumerations

enum  modes {
+  MODE_BUILD = (1 << 4), +MODE_REBUILD = (1 << 5), +MODE_RECOMPILE = (1 << 8), +MODE_TARBUILD = (1 << 11), +
+  MODE_INITDB = (1 << 0), +MODE_REBUILDDB = (1 << 1), +MODE_VERIFYDB = (1 << 2), +MODE_CHECKSIG = (1 << 0), +
+  MODE_IMPORTKEY = (1 << 1), +MODE_DELKEY = (1 << 2), +MODE_LISTKEY = (1 << 3), +MODE_QUERY = (1 << 0), +
+  MODE_VERIFY = (1 << 3), +MODE_ADDSIGN = (1 << 0), +MODE_RESIGN = (1 << 1), +MODE_DELSIGN = (1 << 2), +
+  MODE_UNKNOWN = 0, +MODE_QUERY = (1 << 0), +MODE_PARSE = (1 << 1) +
+ }

+Functions

int main (int argc, char *argv[])

+Variables

const char * program_name
static int mode = MODE_UNKNOWN
static int source = RPMQV_SPECRPMS
const char * target = NULL
char * queryformat = NULL
static struct poptOption specOptsTable []
static struct poptOption optionsTable []
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum modes
+
+
+
Enumerator:
+ + + + + + + + + + + + + + + + + + + +
MODE_BUILD  +
MODE_REBUILD  +
MODE_RECOMPILE  +
MODE_TARBUILD  +
MODE_INITDB  +
MODE_REBUILDDB  +
MODE_VERIFYDB  +
MODE_CHECKSIG  +
MODE_IMPORTKEY  +
MODE_DELKEY  +
MODE_LISTKEY  +
MODE_QUERY  +
MODE_VERIFY  +
MODE_ADDSIGN  +
MODE_RESIGN  +
MODE_DELSIGN  +
MODE_UNKNOWN  +
MODE_QUERY  +
MODE_PARSE  +
+
+
+ +

Definition at line 13 of file rpmspec.c.

+ +
+
+

Function Documentation

+ + +

Variable Documentation

+ +
+
+ + + + +
int mode = MODE_UNKNOWN [static]
+
+
+ +

Definition at line 19 of file rpmspec.c.

+ +
+
+ +
+
+ + + + +
struct poptOption optionsTable[] [static]
+
+
+Initial value:
 {
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, specOptsTable, 0,
+         "Spec options:" , NULL },
+
+    { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+         "Common options for all rpm modes and executables:" , NULL },
+
+   POPT_AUTOALIAS
+   POPT_AUTOHELP
+   POPT_TABLEEND
+}
+
+

Definition at line 43 of file rpmspec.c.

+ +
+
+ +
+
+ + + + +
const char* program_name
+
+
+ +

Definition at line 2 of file rpmspec.c.

+ +
+
+ +
+
+ + + + +
char* queryformat = NULL
+
+
+ +

Definition at line 22 of file rpmspec.c.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
int source = RPMQV_SPECRPMS [static]
+
+
+ +

Definition at line 20 of file rpmspec.c.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
struct poptOption specOptsTable[] [static]
+
+
+Initial value:
 {
+    { "parse", 'P', POPT_ARG_VAL, &mode, MODE_PARSE,
+         "parse spec file(s) to stdout" , NULL },
+    { "query", 'q', POPT_ARG_VAL, &mode, MODE_QUERY,
+         "query spec file(s)" , NULL },
+    { "rpms", 0, POPT_ARG_VAL, &source, RPMQV_SPECRPMS,
+         "operate on binary rpms generated by spec (default)" , NULL },
+    { "srpm", 0, POPT_ARG_VAL, &source, RPMQV_SPECSRPM,
+         "operate on source rpm generated by spec" , NULL },
+    { "target", 0, POPT_ARG_STRING, &target, 0,
+         "override target platform" , NULL },
+    { "queryformat", 0, POPT_ARG_STRING, &queryformat, 0,
+         "use the following query format" , "QUERYFORMAT" },
+    { "qf", 0, (POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN), &queryformat, 0,
+        NULL, NULL },
+    POPT_TABLEEND
+}
+
+

Definition at line 24 of file rpmspec.c.

+ +
+
+ +
+
+ + + + +
const char* target = NULL
+
+
+ +

Definition at line 21 of file rpmspec.c.

+ +

Referenced by build().

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmspec_8c__incl.map b/doc/librpm/html/rpmspec_8c__incl.map new file mode 100644 index 0000000..aeb507f --- /dev/null +++ b/doc/librpm/html/rpmspec_8c__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doc/librpm/html/rpmspec_8c__incl.md5 b/doc/librpm/html/rpmspec_8c__incl.md5 new file mode 100644 index 0000000..c02f820 --- /dev/null +++ b/doc/librpm/html/rpmspec_8c__incl.md5 @@ -0,0 +1 @@ +d06f20d2a84df722079aa70579e1097f \ No newline at end of file diff --git a/doc/librpm/html/rpmspec_8c__incl.png b/doc/librpm/html/rpmspec_8c__incl.png new file mode 100644 index 0000000..1853775 Binary files /dev/null and b/doc/librpm/html/rpmspec_8c__incl.png differ diff --git a/doc/librpm/html/rpmspec_8c_source.html b/doc/librpm/html/rpmspec_8c_source.html new file mode 100644 index 0000000..ddb831b --- /dev/null +++ b/doc/librpm/html/rpmspec_8c_source.html @@ -0,0 +1,169 @@ + + + + +rpm: rpmspec.c Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmspec.c
+
+
+Go to the documentation of this file.
00001 #include "system.h"
+00002 const char *__progname;
+00003 
+00004 #include <rpm/rpmcli.h>
+00005 #include <rpm/rpmbuild.h>
+00006 #include <rpm/rpmlog.h>
+00007 #include <rpm/rpmts.h>
+00008 
+00009 #include "cliutils.h"
+00010 
+00011 #include "debug.h"
+00012 
+00013 enum modes {
+00014     MODE_UNKNOWN        = 0,
+00015     MODE_QUERY          = (1 <<  0),
+00016     MODE_PARSE          = (1 <<  1),
+00017 };
+00018 
+00019 static int mode = MODE_UNKNOWN;
+00020 static int source = RPMQV_SPECRPMS;
+00021 const char *target = NULL;
+00022 char *queryformat = NULL;
+00023 
+00024 static struct poptOption specOptsTable[] = {
+00025     { "parse", 'P', POPT_ARG_VAL, &mode, MODE_PARSE,
+00026         N_("parse spec file(s) to stdout"), NULL },
+00027     { "query", 'q', POPT_ARG_VAL, &mode, MODE_QUERY,
+00028         N_("query spec file(s)"), NULL },
+00029     { "rpms", 0, POPT_ARG_VAL, &source, RPMQV_SPECRPMS,
+00030         N_("operate on binary rpms generated by spec (default)"), NULL },
+00031     { "srpm", 0, POPT_ARG_VAL, &source, RPMQV_SPECSRPM,
+00032         N_("operate on source rpm generated by spec"), NULL },
+00033     { "target", 0, POPT_ARG_STRING, &target, 0,
+00034         N_("override target platform"), NULL },
+00035     { "queryformat", 0, POPT_ARG_STRING, &queryformat, 0,
+00036         N_("use the following query format"), "QUERYFORMAT" },
+00037     { "qf", 0, (POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN), &queryformat, 0,
+00038         NULL, NULL },
+00039     POPT_TABLEEND
+00040 };
+00041 
+00042 /* the structure describing the options we take and the defaults */
+00043 static struct poptOption optionsTable[] = {
+00044     { NULL, '\0', POPT_ARG_INCLUDE_TABLE, specOptsTable, 0,
+00045         N_("Spec options:"), NULL },
+00046 
+00047     { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
+00048         N_("Common options for all rpm modes and executables:"), NULL },
+00049 
+00050    POPT_AUTOALIAS
+00051    POPT_AUTOHELP
+00052    POPT_TABLEEND
+00053 };
+00054 
+00055 int main(int argc, char *argv[])
+00056 {
+00057     rpmts ts = NULL;
+00058     QVA_t qva = &rpmQVKArgs;
+00059 
+00060     poptContext optCon;
+00061     int ec = 0;
+00062 
+00063     optCon = rpmcliInit(argc, argv, optionsTable);
+00064 
+00065     if (rpmcliPipeOutput && initPipe())
+00066         exit(EXIT_FAILURE);
+00067 
+00068     if (target) {
+00069         rpmFreeMacros(NULL);
+00070         rpmFreeRpmrc();
+00071         rpmReadConfigFiles(rpmcliRcfile, target);
+00072     }
+00073         
+00074     ts = rpmtsCreate();
+00075     switch (mode) {
+00076 
+00077     case MODE_QUERY:
+00078         if (!poptPeekArg(optCon))
+00079             argerror(_("no arguments given for query"));
+00080 
+00081         qva->qva_queryFormat = queryformat;
+00082         qva->qva_source = source;
+00083         qva->qva_specQuery = rpmspecQuery;
+00084         ec = rpmcliQuery(ts, qva, (ARGV_const_t) poptGetArgs(optCon));
+00085         break;
+00086 
+00087     case MODE_PARSE: {
+00088         const char * spath;
+00089         if (!poptPeekArg(optCon))
+00090             argerror(_("no arguments given for parse"));
+00091 
+00092         while ((spath = poptGetArg(optCon)) != NULL) {
+00093             rpmSpec spec = rpmSpecParse(spath, 0, NULL);
+00094             if (spec == NULL) {
+00095                 ec++;
+00096                 continue;
+00097             }
+00098             fprintf(stdout, "%s", rpmSpecGetSection(spec, RPMBUILD_NONE));
+00099             rpmSpecFree(spec);
+00100         }
+00101         break;
+00102     }
+00103 
+00104     case MODE_UNKNOWN:
+00105         if (poptPeekArg(optCon) != NULL || argc <= 1 || rpmIsVerbose()) {
+00106             printUsage(optCon, stderr, 0);
+00107             ec = argc;
+00108         }
+00109         break;
+00110     }
+00111 
+00112     ts = rpmtsFree(ts);
+00113     finishPipe();
+00114 
+00115     qva->qva_queryFormat = _free(qva->qva_queryFormat);
+00116 
+00117     rpmcliFini(optCon);
+00118 
+00119     return RETVAL(ec);
+00120 }
+
+
+ + + diff --git a/doc/librpm/html/rpmspec_8h.html b/doc/librpm/html/rpmspec_8h.html new file mode 100644 index 0000000..c9f5c53 --- /dev/null +++ b/doc/librpm/html/rpmspec_8h.html @@ -0,0 +1,469 @@ + + + + +rpm: rpmspec.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmspec.h File Reference
+
+
+ +

The rpmSpec and Package data structures used during build. +More...

+
#include <rpm/rpmstring.h>
+#include <rpm/rpmcli.h>
+
+Include dependency graph for rpmspec.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define RPMBUILD_DEFAULT_LANG   "C"

+Typedefs

typedef struct Package_s * rpmSpecPkg
typedef struct Source * rpmSpecSrc
typedef struct rpmSpecIter_s * rpmSpecPkgIter
typedef struct rpmSpecIter_s * rpmSpecSrcIter
typedef rpmFlags rpmSourceFlags
typedef rpmFlags rpmSpecFlags

+Enumerations

enum  rpmSourceFlags_e { RPMBUILD_ISSOURCE = (1 << 0), +RPMBUILD_ISPATCH = (1 << 1), +RPMBUILD_ISICON = (1 << 2), +RPMBUILD_ISNO = (1 << 3) + }
enum  rpmSpecFlags_e { RPMSPEC_NONE = 0, +RPMSPEC_ANYARCH = (1 << 0), +RPMSPEC_FORCE = (1 << 1), +RPMSPEC_NOLANG = (1 << 2) + }

+Functions

rpmSpec rpmSpecFree (rpmSpec spec)
 Destroy Spec structure.
rpmSpecPkgIter rpmSpecPkgIterInit (rpmSpec spec)
rpmSpecPkg rpmSpecPkgIterNext (rpmSpecPkgIter iter)
rpmSpecPkgIter rpmSpecPkgIterFree (rpmSpecPkgIter iter)
Header rpmSpecPkgHeader (rpmSpecPkg pkg)
rpmSpecSrcIter rpmSpecSrcIterInit (rpmSpec spec)
rpmSpecSrc rpmSpecSrcIterNext (rpmSpecSrcIter iter)
rpmSpecSrcIter rpmSpecSrcIterFree (rpmSpecSrcIter iter)
rpmSourceFlags rpmSpecSrcFlags (rpmSpecSrc src)
int rpmSpecSrcNum (rpmSpecSrc src)
const char * rpmSpecSrcFilename (rpmSpecSrc src, int full)
const char * rpmSpecGetSection (rpmSpec spec, int section)
int rpmspecQuery (rpmts ts, QVA_t qva, const char *arg)
 Function to query spec file(s).
+

Detailed Description

+

The rpmSpec and Package data structures used during build.

+ +

Definition in file rpmspec.h.

+

Define Documentation

+ +
+
+ + + + +
#define RPMBUILD_DEFAULT_LANG   "C"
+
+
+ +

Definition at line 32 of file rpmspec.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmSourceFlags
+
+
+ +

Definition at line 30 of file rpmspec.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags rpmSpecFlags
+
+
+ +

Definition at line 41 of file rpmspec.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmSpecIter_s* rpmSpecPkgIter
+
+
+ +

Definition at line 20 of file rpmspec.h.

+ +
+
+ +
+
+ + + + +
typedef struct Source* rpmSpecSrc
+
+
+ +

Definition at line 19 of file rpmspec.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmSpecIter_s* rpmSpecSrcIter
+
+
+ +

Definition at line 21 of file rpmspec.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmSourceFlags_e
+
+
+
Enumerator:
+ + + + +
RPMBUILD_ISSOURCE  +
RPMBUILD_ISPATCH  +
RPMBUILD_ISICON  +
RPMBUILD_ISNO  +
+
+
+ +

Definition at line 23 of file rpmspec.h.

+ +
+
+ +
+
+ + + + +
enum rpmSpecFlags_e
+
+
+
Enumerator:
+ + + + +
RPMSPEC_NONE  +
RPMSPEC_ANYARCH  +
RPMSPEC_FORCE  +
RPMSPEC_NOLANG  +
+
+
+ +

Definition at line 34 of file rpmspec.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
const char* rpmSpecGetSection (rpmSpec spec,
int section 
)
+
+
+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
Header rpmSpecPkgHeader (rpmSpecPkg pkg)
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmSpecPkgIter rpmSpecPkgIterFree (rpmSpecPkgIter iter)
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmSpecPkgIter rpmSpecPkgIterInit (rpmSpec spec)
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmSpecPkg rpmSpecPkgIterNext (rpmSpecPkgIter iter)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
const char* rpmSpecSrcFilename (rpmSpecSrc src,
int full 
)
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmSourceFlags rpmSpecSrcFlags (rpmSpecSrc src)
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmSpecSrcIter rpmSpecSrcIterFree (rpmSpecSrcIter iter)
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmSpecSrcIter rpmSpecSrcIterInit (rpmSpec spec)
+
+
+ +
+
+ +
+
+ + + + + + + + +
rpmSpecSrc rpmSpecSrcIterNext (rpmSpecSrcIter iter)
+
+
+ +
+
+ +
+
+ + + + + + + + +
int rpmSpecSrcNum (rpmSpecSrc src)
+
+
+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmspec_8h__incl.map b/doc/librpm/html/rpmspec_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmspec_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmspec_8h__incl.md5 b/doc/librpm/html/rpmspec_8h__incl.md5 new file mode 100644 index 0000000..cbed7a9 --- /dev/null +++ b/doc/librpm/html/rpmspec_8h__incl.md5 @@ -0,0 +1 @@ +10be92504c3543d28086076a56bd7b99 \ No newline at end of file diff --git a/doc/librpm/html/rpmspec_8h__incl.png b/doc/librpm/html/rpmspec_8h__incl.png new file mode 100644 index 0000000..6de2571 Binary files /dev/null and b/doc/librpm/html/rpmspec_8h__incl.png differ diff --git a/doc/librpm/html/rpmspec_8h_source.html b/doc/librpm/html/rpmspec_8h_source.html new file mode 100644 index 0000000..207eb2c --- /dev/null +++ b/doc/librpm/html/rpmspec_8h_source.html @@ -0,0 +1,118 @@ + + + + +rpm: rpmspec.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmspec.h
+
+
+Go to the documentation of this file.
00001 #ifndef _H_SPEC_
+00002 #define _H_SPEC_
+00003 
+00009 #include <rpm/rpmstring.h>      /* StringBuf */
+00010 #include <rpm/rpmcli.h> /* for QVA_t */
+00011 
+00012 #ifdef __cplusplus
+00013 extern "C" {
+00014 #endif
+00015 
+00018 typedef struct Package_s * rpmSpecPkg;
+00019 typedef struct Source * rpmSpecSrc;
+00020 typedef struct rpmSpecIter_s * rpmSpecPkgIter;
+00021 typedef struct rpmSpecIter_s * rpmSpecSrcIter;
+00022 
+00023 enum rpmSourceFlags_e {
+00024     RPMBUILD_ISSOURCE   = (1 << 0),
+00025     RPMBUILD_ISPATCH    = (1 << 1),
+00026     RPMBUILD_ISICON     = (1 << 2),
+00027     RPMBUILD_ISNO       = (1 << 3),
+00028 };
+00029 
+00030 typedef rpmFlags rpmSourceFlags;
+00031 
+00032 #define RPMBUILD_DEFAULT_LANG "C"
+00033 
+00034 enum rpmSpecFlags_e {
+00035     RPMSPEC_NONE        = 0,
+00036     RPMSPEC_ANYARCH     = (1 << 0),
+00037     RPMSPEC_FORCE       = (1 << 1),
+00038     RPMSPEC_NOLANG      = (1 << 2),
+00039 };
+00040 
+00041 typedef rpmFlags rpmSpecFlags;
+00042 
+00048 rpmSpec rpmSpecFree(rpmSpec spec);
+00049 
+00050 /* Iterator for spec packages */
+00051 rpmSpecPkgIter rpmSpecPkgIterInit(rpmSpec spec);
+00052 rpmSpecPkg rpmSpecPkgIterNext(rpmSpecPkgIter iter);
+00053 rpmSpecPkgIter rpmSpecPkgIterFree(rpmSpecPkgIter iter);
+00054 
+00055 /* Getters for spec package attributes */
+00056 Header rpmSpecPkgHeader(rpmSpecPkg pkg);
+00057 
+00058 /* Iterator for spec sources */
+00059 rpmSpecSrcIter rpmSpecSrcIterInit(rpmSpec spec);
+00060 rpmSpecSrc rpmSpecSrcIterNext(rpmSpecSrcIter iter);
+00061 rpmSpecSrcIter rpmSpecSrcIterFree(rpmSpecSrcIter iter);
+00062 
+00063 /* Getters for spec source attributes */
+00064 rpmSourceFlags rpmSpecSrcFlags(rpmSpecSrc src);
+00065 int rpmSpecSrcNum(rpmSpecSrc src);
+00066 const char * rpmSpecSrcFilename(rpmSpecSrc src, int full);
+00067 
+00068 /*
+00069  * Retrieve parsed spec script section (RPMBUILD_PREP, RPMBUILD_BUILD etc).
+00070  * As a special case, RPMBUILD_NONE as section returns the entire spec in
+00071  * preprocessed (macros expanded etc) format.
+00072  */
+00073 const char * rpmSpecGetSection(rpmSpec spec, int section);
+00074 
+00082 int rpmspecQuery(rpmts ts, QVA_t qva, const char * arg);
+00083 
+00084 #ifdef __cplusplus
+00085 }
+00086 #endif
+00087 
+00088 #endif /* _H_SPEC_ */
+
+
+ + + diff --git a/doc/librpm/html/rpmsq_8h.html b/doc/librpm/html/rpmsq_8h.html new file mode 100644 index 0000000..62489c0 --- /dev/null +++ b/doc/librpm/html/rpmsq_8h.html @@ -0,0 +1,84 @@ + + + + +rpm: rpmsq.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmsq.h File Reference
+
+
+
#include <rpm/rpmsw.h>
+#include <signal.h>
+
+Include dependency graph for rpmsq.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + +

+Typedefs

typedef struct rpmsig_s * rpmsig
typedef struct rpmsqElem * rpmsq
typedef void(* rpmsqAction_t )(int signum)
 Default signal handler prototype.

+Functions

int rpmsqIsCaught (int signum)
 Test if given signal has been caught (while signals blocked).
void rpmsqAction (int signum)
 Default signal handler.
int rpmsqEnable (int signum, rpmsqAction_t handler)
 Enable or disable a signal handler.
pid_t rpmsqFork (rpmsq sq)
 Fork a child process.
pid_t rpmsqWait (rpmsq sq)
 Wait for child process to be reaped.
+

Detailed Description

+
+

Definition in file rpmsq.h.

+
+ + + diff --git a/doc/librpm/html/rpmsq_8h__incl.map b/doc/librpm/html/rpmsq_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmsq_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmsq_8h__incl.md5 b/doc/librpm/html/rpmsq_8h__incl.md5 new file mode 100644 index 0000000..0534050 --- /dev/null +++ b/doc/librpm/html/rpmsq_8h__incl.md5 @@ -0,0 +1 @@ +c90d9a9f6b74d92d37c89a0c919043cf \ No newline at end of file diff --git a/doc/librpm/html/rpmsq_8h__incl.png b/doc/librpm/html/rpmsq_8h__incl.png new file mode 100644 index 0000000..b08a4f6 Binary files /dev/null and b/doc/librpm/html/rpmsq_8h__incl.png differ diff --git a/doc/librpm/html/rpmsq_8h_source.html b/doc/librpm/html/rpmsq_8h_source.html new file mode 100644 index 0000000..106754b --- /dev/null +++ b/doc/librpm/html/rpmsq_8h_source.html @@ -0,0 +1,110 @@ + + + + +rpm: rpmsq.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmsq.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMSQ
+00002 #define H_RPMSQ
+00003 
+00009 #include <rpm/rpmsw.h>
+00010 #include <signal.h>
+00011 #if defined(_RPMSQ_INTERNAL)
+00012 #include <pthread.h>
+00013 #endif
+00014 
+00015 #ifdef __cplusplus
+00016 extern "C" {
+00017 #endif
+00018 
+00021 typedef struct rpmsig_s * rpmsig;
+00022 
+00025 typedef struct rpmsqElem * rpmsq;
+00026 
+00033 #ifdef SA_SIGINFO
+00034 typedef void (*rpmsqAction_t) (int signum, siginfo_t * info, void * context);
+00035 #else
+00036 typedef void (*rpmsqAction_t) (int signum);
+00037 #endif
+00038 
+00039 /* XXX make this fully opaque? */
+00040 #if defined(_RPMSQ_INTERNAL)
+00041 
+00044 struct rpmsqElem {
+00045     struct rpmsqElem * q_forw;  
+00046     struct rpmsqElem * q_back;
+00047     pid_t child;                
+00048     volatile pid_t reaped;      
+00049     volatile int status;        
+00050     struct rpmop_s op;          
+00051     rpmtime_t ms_scriptlets;    
+00052     int reaper;                 
+00053     int pipes[2];               
+00054     void * id;                  
+00055     pthread_mutex_t mutex;      
+00056     pthread_cond_t cond;
+00057 };
+00058 #endif /* _RPMSQ_INTERNAL */
+00059 
+00066 int rpmsqIsCaught(int signum);
+00067 
+00074 #ifdef SA_SIGINFO
+00075 void rpmsqAction(int signum, siginfo_t * info, void * context);
+00076 #else
+00077 void rpmsqAction(int signum);
+00078 #endif
+00079 
+00086 int rpmsqEnable(int signum, rpmsqAction_t handler);
+00087 
+00093 pid_t rpmsqFork(rpmsq sq);
+00094 
+00100 pid_t rpmsqWait(rpmsq sq);
+00101 
+00102 #ifdef __cplusplus
+00103 }
+00104 #endif
+00105 
+00106 #endif  /* H_RPMSQ */
+
+
+ + + diff --git a/doc/librpm/html/rpmstring_8h.html b/doc/librpm/html/rpmstring_8h.html new file mode 100644 index 0000000..98c76c0 --- /dev/null +++ b/doc/librpm/html/rpmstring_8h.html @@ -0,0 +1,224 @@ + + + + +rpm: rpmstring.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmstring.h File Reference
+
+
+ +

String manipulation helper functions. +More...

+
#include <stddef.h>
+#include <string.h>
+#include <rpm/rpmutil.h>
+
+Include dependency graph for rpmstring.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

static RPM_GNUC_CONST int rislower (int c)
 Locale insensitive islower(3)
static RPM_GNUC_CONST int risupper (int c)
 Locale insensitive isupper(3)
static RPM_GNUC_CONST int risalpha (int c)
 Locale insensitive isalpha(3)
static RPM_GNUC_CONST int risdigit (int c)
 Locale insensitive isdigit(3)
static RPM_GNUC_CONST int risalnum (int c)
 Locale insensitive isalnum(3)
static RPM_GNUC_CONST int risblank (int c)
 Locale insensitive isblank(3)
static RPM_GNUC_CONST int risspace (int c)
 Locale insensitive isspace(3)
static RPM_GNUC_CONST int rtolower (int c)
 Locale insensitive tolower(3)
static RPM_GNUC_CONST int rtoupper (int c)
 Locale insensitive toupper(3)
static RPM_GNUC_CONST unsigned char rnibble (char c)
 Convert hex to binary nibble.
static int rstreq (const char *s1, const char *s2)
 Test for string equality.
static int rstreqn (const char *s1, const char *s2, size_t n)
 Test for string equality.
RPM_GNUC_PURE int rstrcasecmp (const char *s1, const char *s2)
 Locale insensitive strcasecmp(3).
RPM_GNUC_PURE int rstrncasecmp (const char *s1, const char *s2, size_t n)
 Locale insensitive strncasecmp(3).
int rasprintf (char **strp, const char *fmt,...) RPM_GNUC_PRINTF(2
 asprintf() clone
int char * rstrcat (char **dest, const char *src)
 Concatenate two strings with dynamically (re)allocated memory.
char * rstrscat (char **dest, const char *arg,...) RPM_GNUC_NULL_TERMINATED
 Concatenate multiple strings with dynamically (re)allocated memory.
size_t rstrlcpy (char *dest, const char *src, size_t n)
 strlcpy() clone: Copy src to string dest of size n.
+

Detailed Description

+

String manipulation helper functions.

+ +

Definition in file rpmstring.h.

+

Function Documentation

+ +
+
+ + + + + + + + +
static RPM_GNUC_CONST unsigned char rnibble (char c) [inline, static]
+
+
+ +

Convert hex to binary nibble.

+
Parameters:
+ + +
chex character
+
+
+
Returns:
binary nibble
+ +

Definition at line 96 of file rpmstring.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
static int rstreq (const char * s1,
const char * s2 
) [inline, static]
+
+
+ +

Test for string equality.

+
Parameters:
+ + + +
s1string 1
s2string 2
+
+
+
Returns:
0 if strings differ, 1 if equal
+ +

Definition at line 113 of file rpmstring.h.

+ +

Referenced by buildForTarget(), checkPassPhrase(), doSign(), and main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
static int rstreqn (const char * s1,
const char * s2,
size_t n 
) [inline, static]
+
+
+ +

Test for string equality.

+
Parameters:
+ + + + +
s1string 1
s2string 2
ncompare at most n characters
+
+
+
Returns:
0 if strings differ, 1 if equal
+ +

Definition at line 125 of file rpmstring.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmstring_8h__incl.map b/doc/librpm/html/rpmstring_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmstring_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmstring_8h__incl.md5 b/doc/librpm/html/rpmstring_8h__incl.md5 new file mode 100644 index 0000000..05e05c1 --- /dev/null +++ b/doc/librpm/html/rpmstring_8h__incl.md5 @@ -0,0 +1 @@ +ddb973de648715cd8f469b82adc743fc \ No newline at end of file diff --git a/doc/librpm/html/rpmstring_8h__incl.png b/doc/librpm/html/rpmstring_8h__incl.png new file mode 100644 index 0000000..4bc053c Binary files /dev/null and b/doc/librpm/html/rpmstring_8h__incl.png differ diff --git a/doc/librpm/html/rpmstring_8h_source.html b/doc/librpm/html/rpmstring_8h_source.html new file mode 100644 index 0000000..020d659 --- /dev/null +++ b/doc/librpm/html/rpmstring_8h_source.html @@ -0,0 +1,147 @@ + + + + +rpm: rpmstring.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmstring.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMSTRING_H_
+00002 #define _RPMSTRING_H_
+00003 
+00009 #include <stddef.h>
+00010 #include <string.h>
+00011 
+00012 #include <rpm/rpmutil.h>
+00013 
+00014 #ifdef __cplusplus
+00015 extern "C" {
+00016 #endif
+00017 
+00021 RPM_GNUC_CONST
+00022 static inline int rislower(int c)  {
+00023     return (c >= 'a' && c <= 'z');
+00024 }
+00025 
+00029 RPM_GNUC_CONST
+00030 static inline int risupper(int c)  {
+00031     return (c >= 'A' && c <= 'Z');
+00032 }
+00033 
+00037 RPM_GNUC_CONST
+00038 static inline int risalpha(int c)  {
+00039     return (rislower(c) || risupper(c));
+00040 }
+00041 
+00045 RPM_GNUC_CONST
+00046 static inline int risdigit(int c)  {
+00047     return (c >= '0' && c <= '9');
+00048 }
+00049 
+00053 RPM_GNUC_CONST
+00054 static inline int risalnum(int c)  {
+00055     return (risalpha(c) || risdigit(c));
+00056 }
+00057 
+00061 RPM_GNUC_CONST
+00062 static inline int risblank(int c)  {
+00063     return (c == ' ' || c == '\t');
+00064 }
+00065 
+00069 RPM_GNUC_CONST
+00070 static inline int risspace(int c)  {
+00071     return (risblank(c) || c == '\n' || c == '\r' || c == '\f' || c == '\v');
+00072 }
+00073 
+00077 RPM_GNUC_CONST
+00078 static inline int rtolower(int c)  {
+00079     return ((risupper(c)) ? (c | ('a' - 'A')) : c);
+00080 }
+00081 
+00085 RPM_GNUC_CONST
+00086 static inline int rtoupper(int c)  {
+00087     return ((rislower(c)) ? (c & ~('a' - 'A')) : c);
+00088 }
+00089 
+00095 RPM_GNUC_CONST
+00096 static inline unsigned char rnibble(char c)
+00097 {
+00098     if (c >= '0' && c <= '9')
+00099         return (c - '0');
+00100     if (c >= 'A' && c <= 'F')
+00101         return (c - 'A') + 10;
+00102     if (c >= 'a' && c <= 'f')
+00103         return (c - 'a') + 10;
+00104     return 0;
+00105 }
+00106 
+00113 static inline int rstreq(const char *s1, const char *s2)
+00114 {
+00115     return (strcmp(s1, s2) == 0);
+00116 }
+00117 
+00125 static inline int rstreqn(const char *s1, const char *s2, size_t n)
+00126 {
+00127     return (strncmp(s1, s2, n) == 0);
+00128 }
+00129 
+00133 RPM_GNUC_PURE
+00134 int rstrcasecmp(const char * s1, const char * s2)               ;
+00135 
+00139 RPM_GNUC_PURE
+00140 int rstrncasecmp(const char *s1, const char * s2, size_t n)     ;
+00141 
+00145 int rasprintf(char **strp, const char *fmt, ...) RPM_GNUC_PRINTF(2, 3);
+00146 
+00153 char *rstrcat(char **dest, const char *src);
+00154 
+00161 char *rstrscat(char **dest, const char *arg, ...) RPM_GNUC_NULL_TERMINATED;
+00162 
+00173 size_t rstrlcpy(char *dest, const char *src, size_t n);
+00174 
+00175 #ifdef __cplusplus
+00176 }
+00177 #endif
+00178 
+00179 #endif  /* _RPMSTRING_H_ */
+
+
+ + + diff --git a/doc/librpm/html/rpmsw_8h.html b/doc/librpm/html/rpmsw_8h.html new file mode 100644 index 0000000..2195341 --- /dev/null +++ b/doc/librpm/html/rpmsw_8h.html @@ -0,0 +1,93 @@ + + + + +rpm: rpmsw.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmsw.h File Reference
+
+
+
#include <unistd.h>
+#include <sys/time.h>
+
+Include dependency graph for rpmsw.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  rpmsw_s
struct  rpmop_s
 Cumulative statistics for an operation. More...

+Typedefs

typedef unsigned long int rpmtime_t
typedef struct rpmsw_srpmsw
typedef struct rpmop_srpmop

+Functions

rpmsw rpmswNow (rpmsw sw)
 Return benchmark time stamp.
rpmtime_t rpmswDiff (rpmsw end, rpmsw begin)
 Return benchmark time stamp difference.
rpmtime_t rpmswInit (void)
 Return benchmark time stamp overhead.
int rpmswEnter (rpmop op, ssize_t rc)
 Enter timed operation.
rpmtime_t rpmswExit (rpmop op, ssize_t rc)
 Exit timed operation.
rpmtime_t rpmswAdd (rpmop to, rpmop from)
 Sum statistic counters.
rpmtime_t rpmswSub (rpmop to, rpmop from)
 Subtract statistic counters.
+

Detailed Description

+
+

Definition in file rpmsw.h.

+
+ + + diff --git a/doc/librpm/html/rpmsw_8h__incl.map b/doc/librpm/html/rpmsw_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmsw_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmsw_8h__incl.md5 b/doc/librpm/html/rpmsw_8h__incl.md5 new file mode 100644 index 0000000..c82d73b --- /dev/null +++ b/doc/librpm/html/rpmsw_8h__incl.md5 @@ -0,0 +1 @@ +da15842991105a415b8494e90547420f \ No newline at end of file diff --git a/doc/librpm/html/rpmsw_8h__incl.png b/doc/librpm/html/rpmsw_8h__incl.png new file mode 100644 index 0000000..ecc4245 Binary files /dev/null and b/doc/librpm/html/rpmsw_8h__incl.png differ diff --git a/doc/librpm/html/rpmsw_8h_source.html b/doc/librpm/html/rpmsw_8h_source.html new file mode 100644 index 0000000..0b95b43 --- /dev/null +++ b/doc/librpm/html/rpmsw_8h_source.html @@ -0,0 +1,99 @@ + + + + +rpm: rpmsw.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmsw.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMSW
+00002 #define H_RPMSW
+00003 
+00008 #include <unistd.h>
+00009 #include <sys/time.h>
+00010 
+00011 #ifdef __cplusplus
+00012 extern "C" {
+00013 #endif
+00014 
+00017 typedef unsigned long int rpmtime_t;
+00018 
+00021 typedef struct rpmsw_s * rpmsw;
+00022 
+00025 typedef struct rpmop_s * rpmop;
+00026 
+00029 struct rpmsw_s {
+00030     union {
+00031         struct timeval tv;
+00032         unsigned long long int ticks;
+00033         unsigned long int tocks[2];
+00034     } u;
+00035 };
+00036 
+00040 struct rpmop_s {
+00041     struct rpmsw_s      begin;  
+00042     int                 count;  
+00043     size_t              bytes;  
+00044     rpmtime_t           usecs;  
+00045 };
+00046 
+00052 rpmsw rpmswNow(rpmsw sw);
+00053 
+00060 rpmtime_t rpmswDiff(rpmsw end, rpmsw begin);
+00061 
+00066 rpmtime_t rpmswInit(void);
+00067 
+00074 int rpmswEnter(rpmop op, ssize_t rc);
+00075 
+00082 rpmtime_t rpmswExit(rpmop op, ssize_t rc);
+00083 
+00090 rpmtime_t rpmswAdd(rpmop to, rpmop from);
+00091 
+00098 rpmtime_t rpmswSub(rpmop to, rpmop from);
+00099 
+00100 #ifdef __cplusplus
+00101 }
+00102 #endif
+00103 
+00104 #endif  /* H_RPMSW */
+
+
+ + + diff --git a/doc/librpm/html/rpmtag_8h.html b/doc/librpm/html/rpmtag_8h.html new file mode 100644 index 0000000..eb84202 --- /dev/null +++ b/doc/librpm/html/rpmtag_8h.html @@ -0,0 +1,670 @@ + + + + +rpm: rpmtag.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmtag.h File Reference
+
+
+
#include <rpm/rpmtypes.h>
+
+Include dependency graph for rpmtag.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define HEADER_IMAGE   61
 Header private tags.
#define HEADER_SIGNATURES   62
#define HEADER_IMMUTABLE   63
#define HEADER_REGIONS   64
#define HEADER_I18NTABLE   100
#define HEADER_SIGBASE   256
#define HEADER_TAGBASE   1000
#define RPMTAG_PKGID   RPMTAG_SIGMD5
#define RPMTAG_HDRID   RPMTAG_SHA1HEADER
#define RPMTAG_N   RPMTAG_NAME
#define RPMTAG_V   RPMTAG_VERSION
#define RPMTAG_R   RPMTAG_RELEASE
#define RPMTAG_E   RPMTAG_EPOCH
#define RPMTAG_FILEMD5S   RPMTAG_FILEDIGESTS
#define RPMTAG_PROVIDES   RPMTAG_PROVIDENAME
#define RPMTAG_P   RPMTAG_PROVIDENAME
#define RPMTAG_REQUIRES   RPMTAG_REQUIRENAME
#define RPMTAG_CONFLICTS   RPMTAG_CONFLICTNAME
#define RPMTAG_C   RPMTAG_CONFLICTNAME
#define RPMTAG_OBSOLETES   RPMTAG_OBSOLETENAME
#define RPMTAG_O   RPMTAG_OBSOLETENAME
#define RPMTAG_SUGGESTS   RPMTAG_SUGGESTSNAME
#define RPMTAG_ENHANCES   RPMTAG_ENHANCESNAME
#define RPMTAG_SVNID   RPMTAG_CVSID
#define RPMTAG_EXTERNAL_TAG   1000000
#define RPM_MIN_TYPE   0
#define RPM_MAX_TYPE   9
#define RPM_FORCEFREE_TYPE   0xff
#define RPM_MASK_TYPE   0x0000ffff

+Typedefs

typedef enum rpmTag_e rpmTag
 Tags identify data in package headers.
typedef enum rpmDbiTag_e rpmDbiTag
 Rpm database index tags.
typedef enum rpmSigTag_e rpmSigTag
 Tags found in signature header from package.
typedef enum rpmTagType_e rpmTagType
 The basic types of data in tags from headers.
typedef enum rpmTagClass_e rpmTagClass
 The classes of data in tags from headers.
typedef enum rpmSubTagType_e rpmSubTagType
 New rpm data types under consideration/development.
typedef rpmFlags rpmTagReturnType

+Enumerations

enum  rpmTag_e {
+  RPMTAG_NOT_FOUND = -1, +RPMTAG_HEADERIMAGE = 61, +RPMTAG_HEADERSIGNATURES = 62, +RPMTAG_HEADERIMMUTABLE = 63, +
+  RPMTAG_HEADERREGIONS = 64, +RPMTAG_HEADERI18NTABLE = 100, +RPMTAG_SIG_BASE = 256, +RPMTAG_SIGSIZE = RPMTAG_SIG_BASE+1, +
+  RPMTAG_SIGLEMD5_1 = RPMTAG_SIG_BASE+2, +RPMTAG_SIGPGP = RPMTAG_SIG_BASE+3, +RPMTAG_SIGLEMD5_2 = RPMTAG_SIG_BASE+4, +RPMTAG_SIGMD5 = RPMTAG_SIG_BASE+5 +
+ }
 Tags identify data in package headers. More...
enum  rpmDbiTag_e {
+  RPMDBI_PACKAGES = 0, +RPMDBI_LABEL = 2, +RPMDBI_NAME = RPMTAG_NAME, +RPMDBI_BASENAMES = RPMTAG_BASENAMES, +
+  RPMDBI_GROUP = RPMTAG_GROUP, +RPMDBI_REQUIRENAME = RPMTAG_REQUIRENAME, +RPMDBI_PROVIDENAME = RPMTAG_PROVIDENAME, +RPMDBI_CONFLICTNAME = RPMTAG_CONFLICTNAME, +
+  RPMDBI_OBSOLETENAME = RPMTAG_OBSOLETENAME, +RPMDBI_TRIGGERNAME = RPMTAG_TRIGGERNAME, +RPMDBI_DIRNAMES = RPMTAG_DIRNAMES, +RPMDBI_INSTALLTID = RPMTAG_INSTALLTID, +
+  RPMDBI_SIGMD5 = RPMTAG_SIGMD5, +RPMDBI_SHA1HEADER = RPMTAG_SHA1HEADER +
+ }
 Rpm database index tags. More...
enum  rpmSigTag_e {
+  RPMSIGTAG_SIZE = 1000, +RPMSIGTAG_LEMD5_1 = 1001, +RPMSIGTAG_PGP = 1002, +RPMSIGTAG_LEMD5_2 = 1003, +
+  RPMSIGTAG_MD5 = 1004, +RPMSIGTAG_GPG = 1005, +RPMSIGTAG_PGP5 = 1006, +RPMSIGTAG_PAYLOADSIZE = 1007, +
+  RPMSIGTAG_BADSHA1_1 = RPMTAG_BADSHA1_1, +RPMSIGTAG_BADSHA1_2 = RPMTAG_BADSHA1_2, +RPMSIGTAG_SHA1 = RPMTAG_SHA1HEADER, +RPMSIGTAG_DSA = RPMTAG_DSAHEADER, +
+  RPMSIGTAG_RSA = RPMTAG_RSAHEADER, +RPMSIGTAG_LONGSIZE = RPMTAG_LONGSIGSIZE, +RPMSIGTAG_LONGARCHIVESIZE = RPMTAG_LONGARCHIVESIZE +
+ }
 Tags found in signature header from package. More...
enum  rpmTagType_e
 The basic types of data in tags from headers. More...
enum  rpmTagClass_e { RPM_NULL_CLASS = 0, +RPM_NUMERIC_CLASS = 1, +RPM_STRING_CLASS = 2, +RPM_BINARY_CLASS = 3 + }
 The classes of data in tags from headers. More...
enum  rpmSubTagType_e { RPM_REGION_TYPE = -10, +RPM_BIN_ARRAY_TYPE = -11, +RPM_XREF_TYPE = -12 + }
 New rpm data types under consideration/development. More...
enum  rpmTagReturnType_e {
+  RPM_ANY_RETURN_TYPE = 0, +RPM_SCALAR_RETURN_TYPE = 0x00010000, +RPM_ARRAY_RETURN_TYPE = 0x00020000, +RPM_MAPPING_RETURN_TYPE = 0x00040000, +
+  RPM_MASK_RETURN_TYPE = 0xffff0000 +
+ }
 * Identify how to return the header data type. More...

+Functions

const char * rpmTagGetName (rpmTagVal tag)
 Return tag name from value.
rpmTagType rpmTagGetType (rpmTagVal tag)
 Return tag data type from value.
rpmTagType rpmTagGetTagType (rpmTagVal tag)
 Return tag data type from value.
rpmTagReturnType rpmTagGetReturnType (rpmTagVal tag)
 Return tag data type from value.
rpmTagClass rpmTagGetClass (rpmTagVal tag)
 Return tag data class from value.
rpmTagVal rpmTagGetValue (const char *tagstr)
 Return tag value from name.
rpmTagClass rpmTagTypeGetClass (rpmTagType type)
 Return data class of type.
int rpmTagGetNames (rpmtd tagnames, int fullname)
 Return known rpm tag names, sorted by name.
+

Define Documentation

+ +
+
+ + + + +
#define HEADER_I18NTABLE   100
+
+
+ +

Definition at line 18 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define HEADER_IMAGE   61
+
+
+ +

Header private tags.

+
Note:
General use tags should start at 1000 (RPM's tag space starts there).
+ +

Definition at line 14 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define HEADER_IMMUTABLE   63
+
+
+ +

Definition at line 16 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define HEADER_REGIONS   64
+
+
+ +

Definition at line 17 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define HEADER_SIGBASE   256
+
+
+ +

Definition at line 19 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define HEADER_SIGNATURES   62
+
+
+ +

Definition at line 15 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define HEADER_TAGBASE   1000
+
+
+ +

Definition at line 20 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPM_FORCEFREE_TYPE   0xff
+
+
+ +

Definition at line 366 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPM_MASK_TYPE   0x0000ffff
+
+
+ +

Definition at line 367 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPM_MAX_TYPE   9
+
+
+ +

Definition at line 365 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPM_MIN_TYPE   0
+
+
+ +

Definition at line 354 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_C   RPMTAG_CONFLICTNAME
+
+
+ +

Definition at line 125 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_CONFLICTS   RPMTAG_CONFLICTNAME
+
+
+ +

Definition at line 124 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_E   RPMTAG_EPOCH
+
+
+ +

Definition at line 68 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_ENHANCES   RPMTAG_ENHANCESNAME
+
+
+ +

Definition at line 225 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_EXTERNAL_TAG   1000000
+
+
+ +

Definition at line 306 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_FILEMD5S   RPMTAG_FILEDIGESTS
+
+
+ +

Definition at line 101 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_HDRID   RPMTAG_SHA1HEADER
+
+
+ +

Definition at line 57 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_N   RPMTAG_NAME
+
+
+ +

Definition at line 62 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_O   RPMTAG_OBSOLETENAME
+
+
+ +

Definition at line 154 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_OBSOLETES   RPMTAG_OBSOLETENAME
+
+
+ +

Definition at line 153 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_P   RPMTAG_PROVIDENAME
+
+
+ +

Definition at line 115 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_PKGID   RPMTAG_SIGMD5
+
+
+ +

Definition at line 47 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_PROVIDES   RPMTAG_PROVIDENAME
+
+
+ +

Definition at line 114 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_R   RPMTAG_RELEASE
+
+
+ +

Definition at line 66 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_REQUIRES   RPMTAG_REQUIRENAME
+
+
+ +

Definition at line 118 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_SUGGESTS   RPMTAG_SUGGESTSNAME
+
+
+ +

Definition at line 221 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_SVNID   RPMTAG_CVSID
+
+
+ +

Definition at line 230 of file rpmtag.h.

+ +
+
+ +
+
+ + + + +
#define RPMTAG_V   RPMTAG_VERSION
+
+
+ +

Definition at line 64 of file rpmtag.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmTagReturnType
+
+
+ +

Definition at line 409 of file rpmtag.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmtag_8h__incl.map b/doc/librpm/html/rpmtag_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmtag_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmtag_8h__incl.md5 b/doc/librpm/html/rpmtag_8h__incl.md5 new file mode 100644 index 0000000..e21963d --- /dev/null +++ b/doc/librpm/html/rpmtag_8h__incl.md5 @@ -0,0 +1 @@ +87081777a06cbc94290161eaf40f3cfe \ No newline at end of file diff --git a/doc/librpm/html/rpmtag_8h__incl.png b/doc/librpm/html/rpmtag_8h__incl.png new file mode 100644 index 0000000..0c7e38a Binary files /dev/null and b/doc/librpm/html/rpmtag_8h__incl.png differ diff --git a/doc/librpm/html/rpmtag_8h_source.html b/doc/librpm/html/rpmtag_8h_source.html new file mode 100644 index 0000000..eca3378 --- /dev/null +++ b/doc/librpm/html/rpmtag_8h_source.html @@ -0,0 +1,441 @@ + + + + +rpm: rpmtag.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmtag.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMTAG_H
+00002 #define _RPMTAG_H
+00003 
+00004 #include <rpm/rpmtypes.h>
+00005 
+00006 #ifdef __cplusplus
+00007 extern "C" {
+00008 #endif
+00009 
+00014 #define HEADER_IMAGE            61
+00015 #define HEADER_SIGNATURES       62
+00016 #define HEADER_IMMUTABLE        63
+00017 #define HEADER_REGIONS          64
+00018 #define HEADER_I18NTABLE        100
+00019 #define HEADER_SIGBASE          256
+00020 #define HEADER_TAGBASE          1000
+00021 
+00028 typedef enum rpmTag_e {
+00029     RPMTAG_NOT_FOUND            = -1,                   
+00031     RPMTAG_HEADERIMAGE          = HEADER_IMAGE,         
+00032     RPMTAG_HEADERSIGNATURES     = HEADER_SIGNATURES,    
+00033     RPMTAG_HEADERIMMUTABLE      = HEADER_IMMUTABLE,     
+00034     RPMTAG_HEADERREGIONS        = HEADER_REGIONS,       
+00036     RPMTAG_HEADERI18NTABLE      = HEADER_I18NTABLE,     /* s[] !< I18N string locales. */
+00037 
+00038 /* Retrofit (and uniqify) signature tags for use by rpmTagGetName() and rpmQuery. */
+00039 /* the md5 sum was broken *twice* on big endian machines */
+00040 /* XXX 2nd underscore prevents tagTable generation */
+00041     RPMTAG_SIG_BASE             = HEADER_SIGBASE,
+00042     RPMTAG_SIGSIZE              = RPMTAG_SIG_BASE+1,    /* i */
+00043     RPMTAG_SIGLEMD5_1           = RPMTAG_SIG_BASE+2,    /* internal - obsolete */
+00044     RPMTAG_SIGPGP               = RPMTAG_SIG_BASE+3,    /* x */
+00045     RPMTAG_SIGLEMD5_2           = RPMTAG_SIG_BASE+4,    /* x internal - obsolete */
+00046     RPMTAG_SIGMD5               = RPMTAG_SIG_BASE+5,    /* x */
+00047 #define RPMTAG_PKGID    RPMTAG_SIGMD5                   /* x */
+00048     RPMTAG_SIGGPG               = RPMTAG_SIG_BASE+6,    /* x */
+00049     RPMTAG_SIGPGP5              = RPMTAG_SIG_BASE+7,    /* internal - obsolete */
+00050 
+00051     RPMTAG_BADSHA1_1            = RPMTAG_SIG_BASE+8,    /* internal - obsolete */
+00052     RPMTAG_BADSHA1_2            = RPMTAG_SIG_BASE+9,    /* internal - obsolete */
+00053     RPMTAG_PUBKEYS              = RPMTAG_SIG_BASE+10,   /* s[] */
+00054     RPMTAG_DSAHEADER            = RPMTAG_SIG_BASE+11,   /* x */
+00055     RPMTAG_RSAHEADER            = RPMTAG_SIG_BASE+12,   /* x */
+00056     RPMTAG_SHA1HEADER           = RPMTAG_SIG_BASE+13,   /* s */
+00057 #define RPMTAG_HDRID    RPMTAG_SHA1HEADER       /* s */
+00058     RPMTAG_LONGSIGSIZE          = RPMTAG_SIG_BASE+14,   /* l */
+00059     RPMTAG_LONGARCHIVESIZE      = RPMTAG_SIG_BASE+15,   /* l */
+00060 
+00061     RPMTAG_NAME                 = 1000, /* s */
+00062 #define RPMTAG_N        RPMTAG_NAME     /* s */
+00063     RPMTAG_VERSION              = 1001, /* s */
+00064 #define RPMTAG_V        RPMTAG_VERSION  /* s */
+00065     RPMTAG_RELEASE              = 1002, /* s */
+00066 #define RPMTAG_R        RPMTAG_RELEASE  /* s */
+00067     RPMTAG_EPOCH                = 1003, /* i */
+00068 #define RPMTAG_E        RPMTAG_EPOCH    /* i */
+00069     RPMTAG_SUMMARY              = 1004, /* s{} */
+00070     RPMTAG_DESCRIPTION          = 1005, /* s{} */
+00071     RPMTAG_BUILDTIME            = 1006, /* i */
+00072     RPMTAG_BUILDHOST            = 1007, /* s */
+00073     RPMTAG_INSTALLTIME          = 1008, /* i */
+00074     RPMTAG_SIZE                 = 1009, /* i */
+00075     RPMTAG_DISTRIBUTION         = 1010, /* s */
+00076     RPMTAG_VENDOR               = 1011, /* s */
+00077     RPMTAG_GIF                  = 1012, /* x */
+00078     RPMTAG_XPM                  = 1013, /* x */
+00079     RPMTAG_LICENSE              = 1014, /* s */
+00080     RPMTAG_PACKAGER             = 1015, /* s */
+00081     RPMTAG_GROUP                = 1016, /* s{} */
+00082     RPMTAG_CHANGELOG            = 1017, /* s[] internal */
+00083     RPMTAG_SOURCE               = 1018, /* s[] */
+00084     RPMTAG_PATCH                = 1019, /* s[] */
+00085     RPMTAG_URL                  = 1020, /* s */
+00086     RPMTAG_OS                   = 1021, /* s legacy used int */
+00087     RPMTAG_ARCH                 = 1022, /* s legacy used int */
+00088     RPMTAG_PREIN                = 1023, /* s */
+00089     RPMTAG_POSTIN               = 1024, /* s */
+00090     RPMTAG_PREUN                = 1025, /* s */
+00091     RPMTAG_POSTUN               = 1026, /* s */
+00092     RPMTAG_OLDFILENAMES         = 1027, /* s[] obsolete */
+00093     RPMTAG_FILESIZES            = 1028, /* i[] */
+00094     RPMTAG_FILESTATES           = 1029, /* c[] */
+00095     RPMTAG_FILEMODES            = 1030, /* h[] */
+00096     RPMTAG_FILEUIDS             = 1031, /* i[] internal - obsolete */
+00097     RPMTAG_FILEGIDS             = 1032, /* i[] internal - obsolete */
+00098     RPMTAG_FILERDEVS            = 1033, /* h[] */
+00099     RPMTAG_FILEMTIMES           = 1034, /* i[] */
+00100     RPMTAG_FILEDIGESTS          = 1035, /* s[] */
+00101 #define RPMTAG_FILEMD5S RPMTAG_FILEDIGESTS /* s[] */
+00102     RPMTAG_FILELINKTOS          = 1036, /* s[] */
+00103     RPMTAG_FILEFLAGS            = 1037, /* i[] */
+00104     RPMTAG_ROOT                 = 1038, /* internal - obsolete */
+00105     RPMTAG_FILEUSERNAME         = 1039, /* s[] */
+00106     RPMTAG_FILEGROUPNAME        = 1040, /* s[] */
+00107     RPMTAG_EXCLUDE              = 1041, /* internal - obsolete */
+00108     RPMTAG_EXCLUSIVE            = 1042, /* internal - obsolete */
+00109     RPMTAG_ICON                 = 1043, /* x */
+00110     RPMTAG_SOURCERPM            = 1044, /* s */
+00111     RPMTAG_FILEVERIFYFLAGS      = 1045, /* i[] */
+00112     RPMTAG_ARCHIVESIZE          = 1046, /* i */
+00113     RPMTAG_PROVIDENAME          = 1047, /* s[] */
+00114 #define RPMTAG_PROVIDES RPMTAG_PROVIDENAME      /* s[] */
+00115 #define RPMTAG_P        RPMTAG_PROVIDENAME      /* s[] */
+00116     RPMTAG_REQUIREFLAGS         = 1048, /* i[] */
+00117     RPMTAG_REQUIRENAME          = 1049, /* s[] */
+00118 #define RPMTAG_REQUIRES RPMTAG_REQUIRENAME      /* s[] */
+00119     RPMTAG_REQUIREVERSION       = 1050, /* s[] */
+00120     RPMTAG_NOSOURCE             = 1051, /* i */
+00121     RPMTAG_NOPATCH              = 1052, /* i */
+00122     RPMTAG_CONFLICTFLAGS        = 1053, /* i[] */
+00123     RPMTAG_CONFLICTNAME         = 1054, /* s[] */
+00124 #define RPMTAG_CONFLICTS RPMTAG_CONFLICTNAME    /* s[] */
+00125 #define RPMTAG_C        RPMTAG_CONFLICTNAME     /* s[] */
+00126     RPMTAG_CONFLICTVERSION      = 1055, /* s[] */
+00127     RPMTAG_DEFAULTPREFIX        = 1056, /* s internal - deprecated */
+00128     RPMTAG_BUILDROOT            = 1057, /* s internal - obsolete */
+00129     RPMTAG_INSTALLPREFIX        = 1058, /* s internal - deprecated */
+00130     RPMTAG_EXCLUDEARCH          = 1059, /* s[] */
+00131     RPMTAG_EXCLUDEOS            = 1060, /* s[] */
+00132     RPMTAG_EXCLUSIVEARCH        = 1061, /* s[] */
+00133     RPMTAG_EXCLUSIVEOS          = 1062, /* s[] */
+00134     RPMTAG_AUTOREQPROV          = 1063, /* s internal */
+00135     RPMTAG_RPMVERSION           = 1064, /* s */
+00136     RPMTAG_TRIGGERSCRIPTS       = 1065, /* s[] */
+00137     RPMTAG_TRIGGERNAME          = 1066, /* s[] */
+00138     RPMTAG_TRIGGERVERSION       = 1067, /* s[] */
+00139     RPMTAG_TRIGGERFLAGS         = 1068, /* i[] */
+00140     RPMTAG_TRIGGERINDEX         = 1069, /* i[] */
+00141     RPMTAG_VERIFYSCRIPT         = 1079, /* s */
+00142     RPMTAG_CHANGELOGTIME        = 1080, /* i[] */
+00143     RPMTAG_CHANGELOGNAME        = 1081, /* s[] */
+00144     RPMTAG_CHANGELOGTEXT        = 1082, /* s[] */
+00145     RPMTAG_BROKENMD5            = 1083, /* internal - obsolete */
+00146     RPMTAG_PREREQ               = 1084, /* internal */
+00147     RPMTAG_PREINPROG            = 1085, /* s */
+00148     RPMTAG_POSTINPROG           = 1086, /* s */
+00149     RPMTAG_PREUNPROG            = 1087, /* s */
+00150     RPMTAG_POSTUNPROG           = 1088, /* s */
+00151     RPMTAG_BUILDARCHS           = 1089, /* s[] */
+00152     RPMTAG_OBSOLETENAME         = 1090, /* s[] */
+00153 #define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME    /* s[] */
+00154 #define RPMTAG_O        RPMTAG_OBSOLETENAME     /* s[] */
+00155     RPMTAG_VERIFYSCRIPTPROG     = 1091, /* s */
+00156     RPMTAG_TRIGGERSCRIPTPROG    = 1092, /* s[] */
+00157     RPMTAG_DOCDIR               = 1093, /* internal */
+00158     RPMTAG_COOKIE               = 1094, /* s */
+00159     RPMTAG_FILEDEVICES          = 1095, /* i[] */
+00160     RPMTAG_FILEINODES           = 1096, /* i[] */
+00161     RPMTAG_FILELANGS            = 1097, /* s[] */
+00162     RPMTAG_PREFIXES             = 1098, /* s[] */
+00163     RPMTAG_INSTPREFIXES         = 1099, /* s[] */
+00164     RPMTAG_TRIGGERIN            = 1100, /* internal */
+00165     RPMTAG_TRIGGERUN            = 1101, /* internal */
+00166     RPMTAG_TRIGGERPOSTUN        = 1102, /* internal */
+00167     RPMTAG_AUTOREQ              = 1103, /* internal */
+00168     RPMTAG_AUTOPROV             = 1104, /* internal */
+00169     RPMTAG_CAPABILITY           = 1105, /* i internal - obsolete */
+00170     RPMTAG_SOURCEPACKAGE        = 1106, /* i */
+00171     RPMTAG_OLDORIGFILENAMES     = 1107, /* internal - obsolete */
+00172     RPMTAG_BUILDPREREQ          = 1108, /* internal */
+00173     RPMTAG_BUILDREQUIRES        = 1109, /* internal */
+00174     RPMTAG_BUILDCONFLICTS       = 1110, /* internal */
+00175     RPMTAG_BUILDMACROS          = 1111, /* internal - unused */
+00176     RPMTAG_PROVIDEFLAGS         = 1112, /* i[] */
+00177     RPMTAG_PROVIDEVERSION       = 1113, /* s[] */
+00178     RPMTAG_OBSOLETEFLAGS        = 1114, /* i[] */
+00179     RPMTAG_OBSOLETEVERSION      = 1115, /* s[] */
+00180     RPMTAG_DIRINDEXES           = 1116, /* i[] */
+00181     RPMTAG_BASENAMES            = 1117, /* s[] */
+00182     RPMTAG_DIRNAMES             = 1118, /* s[] */
+00183     RPMTAG_ORIGDIRINDEXES       = 1119, /* i[] relocation */
+00184     RPMTAG_ORIGBASENAMES        = 1120, /* s[] relocation */
+00185     RPMTAG_ORIGDIRNAMES         = 1121, /* s[] relocation */
+00186     RPMTAG_OPTFLAGS             = 1122, /* s */
+00187     RPMTAG_DISTURL              = 1123, /* s */
+00188     RPMTAG_PAYLOADFORMAT        = 1124, /* s */
+00189     RPMTAG_PAYLOADCOMPRESSOR    = 1125, /* s */
+00190     RPMTAG_PAYLOADFLAGS         = 1126, /* s */
+00191     RPMTAG_INSTALLCOLOR         = 1127, /* i transaction color when installed */
+00192     RPMTAG_INSTALLTID           = 1128, /* i */
+00193     RPMTAG_REMOVETID            = 1129, /* i */
+00194     RPMTAG_SHA1RHN              = 1130, /* internal - obsolete */
+00195     RPMTAG_RHNPLATFORM          = 1131, /* s internal - obsolete */
+00196     RPMTAG_PLATFORM             = 1132, /* s */
+00197     RPMTAG_PATCHESNAME          = 1133, /* s[] deprecated placeholder (SuSE) */
+00198     RPMTAG_PATCHESFLAGS         = 1134, /* i[] deprecated placeholder (SuSE) */
+00199     RPMTAG_PATCHESVERSION       = 1135, /* s[] deprecated placeholder (SuSE) */
+00200     RPMTAG_CACHECTIME           = 1136, /* i internal - obsolete */
+00201     RPMTAG_CACHEPKGPATH         = 1137, /* s internal - obsolete */
+00202     RPMTAG_CACHEPKGSIZE         = 1138, /* i internal - obsolete */
+00203     RPMTAG_CACHEPKGMTIME        = 1139, /* i internal - obsolete */
+00204     RPMTAG_FILECOLORS           = 1140, /* i[] */
+00205     RPMTAG_FILECLASS            = 1141, /* i[] */
+00206     RPMTAG_CLASSDICT            = 1142, /* s[] */
+00207     RPMTAG_FILEDEPENDSX         = 1143, /* i[] */
+00208     RPMTAG_FILEDEPENDSN         = 1144, /* i[] */
+00209     RPMTAG_DEPENDSDICT          = 1145, /* i[] */
+00210     RPMTAG_SOURCEPKGID          = 1146, /* x */
+00211     RPMTAG_FILECONTEXTS         = 1147, /* s[] - obsolete */
+00212     RPMTAG_FSCONTEXTS           = 1148, /* s[] extension */
+00213     RPMTAG_RECONTEXTS           = 1149, /* s[] extension */
+00214     RPMTAG_POLICIES             = 1150, /* s[] selinux *.te policy file. */
+00215     RPMTAG_PRETRANS             = 1151, /* s */
+00216     RPMTAG_POSTTRANS            = 1152, /* s */
+00217     RPMTAG_PRETRANSPROG         = 1153, /* s */
+00218     RPMTAG_POSTTRANSPROG        = 1154, /* s */
+00219     RPMTAG_DISTTAG              = 1155, /* s */
+00220     RPMTAG_SUGGESTSNAME         = 1156, /* s[] extension (unimplemented) */
+00221 #define RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME     /* s[] (unimplemented) */
+00222     RPMTAG_SUGGESTSVERSION      = 1157, /* s[] extension (unimplemented) */
+00223     RPMTAG_SUGGESTSFLAGS        = 1158, /* i[] extension (unimplemented) */
+00224     RPMTAG_ENHANCESNAME         = 1159, /* s[] extension placeholder (unimplemented) */
+00225 #define RPMTAG_ENHANCES RPMTAG_ENHANCESNAME     /* s[] (unimplemented) */
+00226     RPMTAG_ENHANCESVERSION      = 1160, /* s[] extension placeholder (unimplemented) */
+00227     RPMTAG_ENHANCESFLAGS        = 1161, /* i[] extension placeholder (unimplemented) */
+00228     RPMTAG_PRIORITY             = 1162, /* i[] extension placeholder (unimplemented) */
+00229     RPMTAG_CVSID                = 1163, /* s (unimplemented) */
+00230 #define RPMTAG_SVNID    RPMTAG_CVSID    /* s (unimplemented) */
+00231     RPMTAG_BLINKPKGID           = 1164, /* s[] (unimplemented) */
+00232     RPMTAG_BLINKHDRID           = 1165, /* s[] (unimplemented) */
+00233     RPMTAG_BLINKNEVRA           = 1166, /* s[] (unimplemented) */
+00234     RPMTAG_FLINKPKGID           = 1167, /* s[] (unimplemented) */
+00235     RPMTAG_FLINKHDRID           = 1168, /* s[] (unimplemented) */
+00236     RPMTAG_FLINKNEVRA           = 1169, /* s[] (unimplemented) */
+00237     RPMTAG_PACKAGEORIGIN        = 1170, /* s (unimplemented) */
+00238     RPMTAG_TRIGGERPREIN         = 1171, /* internal */
+00239     RPMTAG_BUILDSUGGESTS        = 1172, /* internal (unimplemented) */
+00240     RPMTAG_BUILDENHANCES        = 1173, /* internal (unimplemented) */
+00241     RPMTAG_SCRIPTSTATES         = 1174, /* i[] scriptlet exit codes (unimplemented) */
+00242     RPMTAG_SCRIPTMETRICS        = 1175, /* i[] scriptlet execution times (unimplemented) */
+00243     RPMTAG_BUILDCPUCLOCK        = 1176, /* i (unimplemented) */
+00244     RPMTAG_FILEDIGESTALGOS      = 1177, /* i[] (unimplemented) */
+00245     RPMTAG_VARIANTS             = 1178, /* s[] (unimplemented) */
+00246     RPMTAG_XMAJOR               = 1179, /* i (unimplemented) */
+00247     RPMTAG_XMINOR               = 1180, /* i (unimplemented) */
+00248     RPMTAG_REPOTAG              = 1181, /* s (unimplemented) */
+00249     RPMTAG_KEYWORDS             = 1182, /* s[] (unimplemented) */
+00250     RPMTAG_BUILDPLATFORMS       = 1183, /* s[] (unimplemented) */
+00251     RPMTAG_PACKAGECOLOR         = 1184, /* i (unimplemented) */
+00252     RPMTAG_PACKAGEPREFCOLOR     = 1185, /* i (unimplemented) */
+00253     RPMTAG_XATTRSDICT           = 1186, /* s[] (unimplemented) */
+00254     RPMTAG_FILEXATTRSX          = 1187, /* i[] (unimplemented) */
+00255     RPMTAG_DEPATTRSDICT         = 1188, /* s[] (unimplemented) */
+00256     RPMTAG_CONFLICTATTRSX       = 1189, /* i[] (unimplemented) */
+00257     RPMTAG_OBSOLETEATTRSX       = 1190, /* i[] (unimplemented) */
+00258     RPMTAG_PROVIDEATTRSX        = 1191, /* i[] (unimplemented) */
+00259     RPMTAG_REQUIREATTRSX        = 1192, /* i[] (unimplemented) */
+00260     RPMTAG_BUILDPROVIDES        = 1193, /* internal (unimplemented) */
+00261     RPMTAG_BUILDOBSOLETES       = 1194, /* internal (unimplemented) */
+00262     RPMTAG_DBINSTANCE           = 1195, /* i extension */
+00263     RPMTAG_NVRA                 = 1196, /* s extension */
+00264     /* tags 1997-4999 reserved */
+00265     RPMTAG_FILENAMES            = 5000, /* s[] extension */
+00266     RPMTAG_FILEPROVIDE          = 5001, /* s[] extension */
+00267     RPMTAG_FILEREQUIRE          = 5002, /* s[] extension */
+00268     RPMTAG_FSNAMES              = 5003, /* s[] (unimplemented) */
+00269     RPMTAG_FSSIZES              = 5004, /* l[] (unimplemented) */
+00270     RPMTAG_TRIGGERCONDS         = 5005, /* s[] extension */
+00271     RPMTAG_TRIGGERTYPE          = 5006, /* s[] extension */
+00272     RPMTAG_ORIGFILENAMES        = 5007, /* s[] extension */
+00273     RPMTAG_LONGFILESIZES        = 5008, /* l[] */
+00274     RPMTAG_LONGSIZE             = 5009, /* l */
+00275     RPMTAG_FILECAPS             = 5010, /* s[] */
+00276     RPMTAG_FILEDIGESTALGO       = 5011, /* i file digest algorithm */
+00277     RPMTAG_BUGURL               = 5012, /* s */
+00278     RPMTAG_EVR                  = 5013, /* s extension */
+00279     RPMTAG_NVR                  = 5014, /* s extension */
+00280     RPMTAG_NEVR                 = 5015, /* s extension */
+00281     RPMTAG_NEVRA                = 5016, /* s extension */
+00282     RPMTAG_HEADERCOLOR          = 5017, /* i extension */
+00283     RPMTAG_VERBOSE              = 5018, /* i extension */
+00284     RPMTAG_EPOCHNUM             = 5019, /* i extension */
+00285     RPMTAG_PREINFLAGS           = 5020, /* i */
+00286     RPMTAG_POSTINFLAGS          = 5021, /* i */
+00287     RPMTAG_PREUNFLAGS           = 5022, /* i */
+00288     RPMTAG_POSTUNFLAGS          = 5023, /* i */
+00289     RPMTAG_PRETRANSFLAGS        = 5024, /* i */
+00290     RPMTAG_POSTTRANSFLAGS       = 5025, /* i */
+00291     RPMTAG_VERIFYSCRIPTFLAGS    = 5026, /* i */
+00292     RPMTAG_TRIGGERSCRIPTFLAGS   = 5027, /* i[] */
+00293     RPMTAG_COLLECTIONS          = 5029, /* s[] list of collections */
+00294     RPMTAG_POLICYNAMES          = 5030, /* s[] */
+00295     RPMTAG_POLICYTYPES          = 5031, /* s[] */
+00296     RPMTAG_POLICYTYPESINDEXES   = 5032, /* i[] */
+00297     RPMTAG_POLICYFLAGS          = 5033, /* i[] */
+00298     RPMTAG_VCS                  = 5034, /* s */
+00299     RPMTAG_ORDERNAME            = 5035, /* s[] */
+00300     RPMTAG_ORDERVERSION         = 5036, /* s[] */
+00301     RPMTAG_ORDERFLAGS           = 5037, /* i[] */
+00302 
+00303     RPMTAG_FIRSTFREE_TAG        
+00304 } rpmTag;
+00305 
+00306 #define RPMTAG_EXTERNAL_TAG             1000000
+00307 
+00311 typedef enum rpmDbiTag_e {
+00312     RPMDBI_PACKAGES             = 0,    /* Installed package headers. */
+00313     RPMDBI_LABEL                = 2,    /* NEVRA label pseudo index */
+00314     RPMDBI_NAME                 = RPMTAG_NAME,
+00315     RPMDBI_BASENAMES            = RPMTAG_BASENAMES,
+00316     RPMDBI_GROUP                = RPMTAG_GROUP,
+00317     RPMDBI_REQUIRENAME          = RPMTAG_REQUIRENAME,
+00318     RPMDBI_PROVIDENAME          = RPMTAG_PROVIDENAME,
+00319     RPMDBI_CONFLICTNAME         = RPMTAG_CONFLICTNAME,
+00320     RPMDBI_OBSOLETENAME         = RPMTAG_OBSOLETENAME,
+00321     RPMDBI_TRIGGERNAME          = RPMTAG_TRIGGERNAME,
+00322     RPMDBI_DIRNAMES             = RPMTAG_DIRNAMES,
+00323     RPMDBI_INSTALLTID           = RPMTAG_INSTALLTID,
+00324     RPMDBI_SIGMD5               = RPMTAG_SIGMD5,
+00325     RPMDBI_SHA1HEADER           = RPMTAG_SHA1HEADER,
+00326 } rpmDbiTag;
+00327 
+00331 typedef enum rpmSigTag_e {
+00332     RPMSIGTAG_SIZE      = 1000, 
+00333     RPMSIGTAG_LEMD5_1   = 1001, 
+00334     RPMSIGTAG_PGP       = 1002, 
+00335     RPMSIGTAG_LEMD5_2   = 1003, 
+00336     RPMSIGTAG_MD5       = 1004, 
+00337     RPMSIGTAG_GPG       = 1005, 
+00338     RPMSIGTAG_PGP5      = 1006, 
+00339     RPMSIGTAG_PAYLOADSIZE = 1007,
+00340     RPMSIGTAG_BADSHA1_1 = RPMTAG_BADSHA1_1,     
+00341     RPMSIGTAG_BADSHA1_2 = RPMTAG_BADSHA1_2,     
+00342     RPMSIGTAG_SHA1      = RPMTAG_SHA1HEADER,    
+00343     RPMSIGTAG_DSA       = RPMTAG_DSAHEADER,     
+00344     RPMSIGTAG_RSA       = RPMTAG_RSAHEADER,     
+00345     RPMSIGTAG_LONGSIZE  = RPMTAG_LONGSIGSIZE,   
+00346     RPMSIGTAG_LONGARCHIVESIZE = RPMTAG_LONGARCHIVESIZE, 
+00347 } rpmSigTag;
+00348 
+00349 
+00353 typedef enum rpmTagType_e {
+00354 #define RPM_MIN_TYPE            0
+00355     RPM_NULL_TYPE               =  0,
+00356     RPM_CHAR_TYPE               =  1,
+00357     RPM_INT8_TYPE               =  2,
+00358     RPM_INT16_TYPE              =  3,
+00359     RPM_INT32_TYPE              =  4,
+00360     RPM_INT64_TYPE              =  5,
+00361     RPM_STRING_TYPE             =  6,
+00362     RPM_BIN_TYPE                =  7,
+00363     RPM_STRING_ARRAY_TYPE       =  8,
+00364     RPM_I18NSTRING_TYPE         =  9,
+00365 #define RPM_MAX_TYPE            9
+00366 #define RPM_FORCEFREE_TYPE      0xff
+00367 #define RPM_MASK_TYPE           0x0000ffff
+00368 } rpmTagType;
+00369 
+00373 typedef enum rpmTagClass_e {
+00374     RPM_NULL_CLASS      = 0,
+00375     RPM_NUMERIC_CLASS   = 1,
+00376     RPM_STRING_CLASS    = 2,
+00377     RPM_BINARY_CLASS    = 3,
+00378 } rpmTagClass;
+00379 
+00388 typedef enum rpmSubTagType_e {
+00389     RPM_REGION_TYPE             = -10,
+00390     RPM_BIN_ARRAY_TYPE          = -11,
+00393     RPM_XREF_TYPE               = -12
+00396 } rpmSubTagType;
+00397 
+00401 enum rpmTagReturnType_e {
+00402     RPM_ANY_RETURN_TYPE         = 0,
+00403     RPM_SCALAR_RETURN_TYPE      = 0x00010000,
+00404     RPM_ARRAY_RETURN_TYPE       = 0x00020000,
+00405     RPM_MAPPING_RETURN_TYPE     = 0x00040000,
+00406     RPM_MASK_RETURN_TYPE        = 0xffff0000
+00407 };
+00408 
+00409 typedef rpmFlags rpmTagReturnType;
+00410 
+00416 const char * rpmTagGetName(rpmTagVal tag);
+00417 
+00423 rpmTagType rpmTagGetType(rpmTagVal tag);
+00424 
+00430 rpmTagType rpmTagGetTagType(rpmTagVal tag);
+00431 
+00437 rpmTagReturnType rpmTagGetReturnType(rpmTagVal tag);
+00438 
+00444 rpmTagClass rpmTagGetClass(rpmTagVal tag);
+00445 
+00451 rpmTagVal rpmTagGetValue(const char * tagstr);
+00452 
+00458 rpmTagClass rpmTagTypeGetClass(rpmTagType type);
+00459 
+00466 int rpmTagGetNames(rpmtd tagnames, int fullname);
+00467 
+00468 #ifdef __cplusplus
+00469 }
+00470 #endif
+00471 
+00472 #endif /* _RPMTAG_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmtd_8h.html b/doc/librpm/html/rpmtd_8h.html new file mode 100644 index 0000000..45c0dc2 --- /dev/null +++ b/doc/librpm/html/rpmtd_8h.html @@ -0,0 +1,312 @@ + + + + +rpm: rpmtd.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmtd.h File Reference
+
+
+
#include <rpm/rpmtypes.h>
+#include <rpm/argv.h>
+
+Include dependency graph for rpmtd.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

struct  rpmtd_s
 Container for rpm tag data (from headers or extensions). More...

+Typedefs

typedef rpmFlags rpmtdFlags
typedef enum rpmtdFormats_e rpmtdFormats

+Enumerations

enum  rpmtdFlags_e {
+  RPMTD_NONE = 0, +RPMTD_ALLOCED = (1 << 0), +RPMTD_PTR_ALLOCED = (1 << 1), +RPMTD_IMMUTABLE = (1 << 2), +
+  RPMTD_ARGV = (1 << 3) +
+ }
enum  rpmtdFormats_e {
+  RPMTD_FORMAT_STRING = 0, +RPMTD_FORMAT_ARMOR = 1, +RPMTD_FORMAT_BASE64 = 2, +RPMTD_FORMAT_PGPSIG = 3, +
+  RPMTD_FORMAT_DEPFLAGS = 4, +RPMTD_FORMAT_FFLAGS = 5, +RPMTD_FORMAT_PERMS = 6, +RPMTD_FORMAT_TRIGGERTYPE = 7, +
+  RPMTD_FORMAT_XML = 8, +RPMTD_FORMAT_OCTAL = 9, +RPMTD_FORMAT_HEX = 10, +RPMTD_FORMAT_DATE = 11, +
+  RPMTD_FORMAT_DAY = 12, +RPMTD_FORMAT_SHESCAPE = 13, +RPMTD_FORMAT_ARRAYSIZE = 14, +RPMTD_FORMAT_DEPTYPE = 15, +
+  RPMTD_FORMAT_FSTATE = 16, +RPMTD_FORMAT_VFLAGS = 17, +RPMTD_FORMAT_EXPAND = 18, +RPMTD_FORMAT_FSTATUS = 19 +
+ }

+Functions

rpmtd rpmtdNew (void)
 Create new tag data container.
rpmtd rpmtdFree (rpmtd td)
 Destroy tag data container.
void rpmtdReset (rpmtd td)
 (Re-)initialize tag data container.
void rpmtdFreeData (rpmtd td)
 Free contained data.
rpm_count_t rpmtdCount (rpmtd td)
 Retrieve array size of the container.
rpmTagVal rpmtdTag (rpmtd td)
 Retrieve tag of the container.
rpmTagType rpmtdType (rpmtd td)
 Retrieve type of the container.
rpmTagClass rpmtdClass (rpmtd td)
 Retrieve class of the container.
int rpmtdGetIndex (rpmtd td)
 Retrieve current iteration index of the container.
int rpmtdSetIndex (rpmtd td, int index)
 Set iteration index of the container.
int rpmtdInit (rpmtd td)
 Initialize tag container for iteration.
int rpmtdNext (rpmtd td)
 Iterate over tag data container.
uint32_t * rpmtdNextUint32 (rpmtd td)
 Iterate over uint32_t type tag data container.
uint64_t * rpmtdNextUint64 (rpmtd td)
 Iterate over uint64_t type tag data container.
const char * rpmtdNextString (rpmtd td)
 Iterate over string / string array type tag data container.
char * rpmtdGetChar (rpmtd td)
 Return char data from tag container.
uint16_t * rpmtdGetUint16 (rpmtd td)
 Return uint16_t data from tag container.
uint32_t * rpmtdGetUint32 (rpmtd td)
 Return uint32_t data from tag container.
uint64_t * rpmtdGetUint64 (rpmtd td)
 Return uint64_t data from tag container.
const char * rpmtdGetString (rpmtd td)
 Return string data from tag container.
uint64_t rpmtdGetNumber (rpmtd td)
 Return numeric value from tag container.
char * rpmtdFormat (rpmtd td, rpmtdFormats fmt, const char *errmsg)
 Format data from tag container to string presentation of given format.
int rpmtdSetTag (rpmtd td, rpmTagVal tag)
 Set container tag and type.
int rpmtdFromUint8 (rpmtd td, rpmTagVal tag, uint8_t *data, rpm_count_t count)
 Construct tag container from uint8_t pointer.
int rpmtdFromUint16 (rpmtd td, rpmTagVal tag, uint16_t *data, rpm_count_t count)
 Construct tag container from uint16_t pointer.
int rpmtdFromUint32 (rpmtd td, rpmTagVal tag, uint32_t *data, rpm_count_t count)
 Construct tag container from uint32_t pointer.
int rpmtdFromUint64 (rpmtd td, rpmTagVal tag, uint64_t *data, rpm_count_t count)
 Construct tag container from uint64_t pointer.
int rpmtdFromString (rpmtd td, rpmTagVal tag, const char *data)
 Construct tag container from a string.
int rpmtdFromStringArray (rpmtd td, rpmTagVal tag, const char **data, rpm_count_t count)
 Construct tag container from a string array.
int rpmtdFromArgv (rpmtd td, rpmTagVal tag, ARGV_t argv)
 Construct tag container from ARGV_t array.
int rpmtdFromArgi (rpmtd td, rpmTagVal tag, ARGI_t argi)
 Construct tag container from ARGI_t array.
rpmtd rpmtdDup (rpmtd td)
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmtdFlags
+
+
+ +

Definition at line 19 of file rpmtd.h.

+ +
+
+ +
+
+ + + + +
typedef enum rpmtdFormats_e rpmtdFormats
+
+
+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmtdFlags_e
+
+
+
Enumerator:
+ + + + + +
RPMTD_NONE  +
RPMTD_ALLOCED  +
RPMTD_PTR_ALLOCED  +
RPMTD_IMMUTABLE  +
RPMTD_ARGV  +
+
+
+ +

Definition at line 11 of file rpmtd.h.

+ +
+
+ +
+
+ + + + +
enum rpmtdFormats_e
+
+
+
Enumerator:
+ + + + + + + + + + + + + + + + + + + + +
RPMTD_FORMAT_STRING  +
RPMTD_FORMAT_ARMOR  +
RPMTD_FORMAT_BASE64  +
RPMTD_FORMAT_PGPSIG  +
RPMTD_FORMAT_DEPFLAGS  +
RPMTD_FORMAT_FFLAGS  +
RPMTD_FORMAT_PERMS  +
RPMTD_FORMAT_TRIGGERTYPE  +
RPMTD_FORMAT_XML  +
RPMTD_FORMAT_OCTAL  +
RPMTD_FORMAT_HEX  +
RPMTD_FORMAT_DATE  +
RPMTD_FORMAT_DAY  +
RPMTD_FORMAT_SHESCAPE  +
RPMTD_FORMAT_ARRAYSIZE  +
RPMTD_FORMAT_DEPTYPE  +
RPMTD_FORMAT_FSTATE  +
RPMTD_FORMAT_VFLAGS  +
RPMTD_FORMAT_EXPAND  +
RPMTD_FORMAT_FSTATUS  +
+
+
+ +

Definition at line 202 of file rpmtd.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
rpmtd rpmtdDup (rpmtd td)
+
+
+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmtd_8h__incl.map b/doc/librpm/html/rpmtd_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmtd_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmtd_8h__incl.md5 b/doc/librpm/html/rpmtd_8h__incl.md5 new file mode 100644 index 0000000..7d9d18c --- /dev/null +++ b/doc/librpm/html/rpmtd_8h__incl.md5 @@ -0,0 +1 @@ +3ce09df15c925ce853be36f4bec5c8e8 \ No newline at end of file diff --git a/doc/librpm/html/rpmtd_8h__incl.png b/doc/librpm/html/rpmtd_8h__incl.png new file mode 100644 index 0000000..312a3e3 Binary files /dev/null and b/doc/librpm/html/rpmtd_8h__incl.png differ diff --git a/doc/librpm/html/rpmtd_8h_source.html b/doc/librpm/html/rpmtd_8h_source.html new file mode 100644 index 0000000..8062c71 --- /dev/null +++ b/doc/librpm/html/rpmtd_8h_source.html @@ -0,0 +1,178 @@ + + + + +rpm: rpmtd.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmtd.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMTD_H
+00002 #define _RPMTD_H
+00003 
+00004 #include <rpm/rpmtypes.h>
+00005 #include <rpm/argv.h>
+00006 
+00007 #ifdef __cplusplus
+00008 extern "C" {
+00009 #endif
+00010 
+00011 enum rpmtdFlags_e {
+00012     RPMTD_NONE          = 0,
+00013     RPMTD_ALLOCED       = (1 << 0),     /* was memory allocated? */
+00014     RPMTD_PTR_ALLOCED   = (1 << 1),     /* were array pointers allocated? */
+00015     RPMTD_IMMUTABLE     = (1 << 2),     /* header data or modifiable? */
+00016     RPMTD_ARGV          = (1 << 3),     /* string array is NULL-terminated? */
+00017 };
+00018 
+00019 typedef rpmFlags rpmtdFlags;
+00020 
+00025 struct rpmtd_s {
+00026     rpm_tag_t tag;      /* rpm tag of this data entry*/
+00027     rpm_tagtype_t type; /* data type */
+00028     rpm_count_t count;  /* number of entries */
+00029     rpm_data_t data;    /* pointer to actual data */
+00030     rpmtdFlags flags;   /* flags on memory allocation etc */
+00031     int ix;             /* iteration index */
+00032 };
+00033 
+00038 rpmtd rpmtdNew(void);
+00039 
+00045 rpmtd rpmtdFree(rpmtd td);
+00046  
+00052 void rpmtdReset(rpmtd td);
+00053 
+00059 void rpmtdFreeData(rpmtd td);
+00060 
+00066 rpm_count_t rpmtdCount(rpmtd td);
+00067 
+00073 rpmTagVal rpmtdTag(rpmtd td);
+00074 
+00080 rpmTagType rpmtdType(rpmtd td);
+00081 
+00087 rpmTagClass rpmtdClass(rpmtd td);
+00088 
+00094 int rpmtdGetIndex(rpmtd td);
+00095 
+00104 int rpmtdSetIndex(rpmtd td, int index);
+00105 
+00111 int rpmtdInit(rpmtd td);
+00112 
+00118 int rpmtdNext(rpmtd td);
+00119 
+00125 uint32_t *rpmtdNextUint32(rpmtd td);
+00126 
+00132 uint64_t *rpmtdNextUint64(rpmtd td);
+00133 
+00139 const char *rpmtdNextString(rpmtd td);
+00140 
+00149 char *rpmtdGetChar(rpmtd td);
+00150 
+00159 uint16_t * rpmtdGetUint16(rpmtd td);
+00160 
+00169 uint32_t * rpmtdGetUint32(rpmtd td);
+00170 
+00179 uint64_t * rpmtdGetUint64(rpmtd td);
+00180 
+00189 const char * rpmtdGetString(rpmtd td);
+00190 
+00200 uint64_t rpmtdGetNumber(rpmtd td);
+00201 
+00202 typedef enum rpmtdFormats_e {
+00203     RPMTD_FORMAT_STRING         = 0,    /* plain string (any type) */
+00204     RPMTD_FORMAT_ARMOR          = 1,    /* ascii armor format (bin types) */
+00205     RPMTD_FORMAT_BASE64         = 2,    /* base64 encoding (bin types) */
+00206     RPMTD_FORMAT_PGPSIG         = 3,    /* pgp/gpg signature (bin types) */
+00207     RPMTD_FORMAT_DEPFLAGS       = 4,    /* dependency flags (int types) */
+00208     RPMTD_FORMAT_FFLAGS         = 5,    /* file flags (int types) */
+00209     RPMTD_FORMAT_PERMS          = 6,    /* permission string (int types) */
+00210     RPMTD_FORMAT_TRIGGERTYPE    = 7,    /* trigger types (int types) */
+00211     RPMTD_FORMAT_XML            = 8,    /* xml format (any type) */
+00212     RPMTD_FORMAT_OCTAL          = 9,    /* octal format (int types) */
+00213     RPMTD_FORMAT_HEX            = 10,   /* hex format (int types) */
+00214     RPMTD_FORMAT_DATE           = 11,   /* date format (int types) */
+00215     RPMTD_FORMAT_DAY            = 12,   /* day format (int types) */
+00216     RPMTD_FORMAT_SHESCAPE       = 13,   /* shell escaped (any type) */
+00217     RPMTD_FORMAT_ARRAYSIZE      = 14,   /* size of contained array (any type) */
+00218     RPMTD_FORMAT_DEPTYPE        = 15,   /* dependency types (int types) */
+00219     RPMTD_FORMAT_FSTATE         = 16,   /* file states (int types) */
+00220     RPMTD_FORMAT_VFLAGS         = 17,   /* file verify flags (int types) */
+00221     RPMTD_FORMAT_EXPAND         = 18,   /* macro expansion (string types) */
+00222     RPMTD_FORMAT_FSTATUS        = 19,   /* file verify status (int types) */
+00223 } rpmtdFormats;
+00224 
+00236 char *rpmtdFormat(rpmtd td, rpmtdFormats fmt, const char *errmsg);
+00237 
+00246 int rpmtdSetTag(rpmtd td, rpmTagVal tag);
+00247 
+00259 int rpmtdFromUint8(rpmtd td, rpmTagVal tag, uint8_t *data, rpm_count_t count);
+00260 
+00271 int rpmtdFromUint16(rpmtd td, rpmTagVal tag, uint16_t *data, rpm_count_t count);
+00272 
+00283 int rpmtdFromUint32(rpmtd td, rpmTagVal tag, uint32_t *data, rpm_count_t count);
+00284 
+00295 int rpmtdFromUint64(rpmtd td, rpmTagVal tag, uint64_t *data, rpm_count_t count);
+00296 
+00305 int rpmtdFromString(rpmtd td, rpmTagVal tag, const char *data);
+00306 
+00317 int rpmtdFromStringArray(rpmtd td, rpmTagVal tag, const char **data, rpm_count_t count);
+00318 
+00328 int rpmtdFromArgv(rpmtd td, rpmTagVal tag, ARGV_t argv);
+00329 
+00339 int rpmtdFromArgi(rpmtd td, rpmTagVal tag, ARGI_t argi);
+00340 
+00341 /* \ingroup rpmtd
+00342  * Perform deep copy of container.
+00343  * Create a modifiable copy of tag data container (on string arrays each
+00344  * string is separately allocated)
+00345  * @todo                Only string arrays types are supported currently
+00346  * @param td            Container to copy
+00347  * @return              New container or NULL on error
+00348  */
+00349 rpmtd rpmtdDup(rpmtd td);
+00350 
+00351 #ifdef __cplusplus
+00352 }
+00353 #endif
+00354 
+00355 #endif /* _RPMTD_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmte_8h.html b/doc/librpm/html/rpmte_8h.html new file mode 100644 index 0000000..6a98ef5 --- /dev/null +++ b/doc/librpm/html/rpmte_8h.html @@ -0,0 +1,164 @@ + + + + +rpm: rpmte.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+ +
+ +

Structures used for an "rpmte" transaction element. +More...

+
#include <rpm/rpmtypes.h>
+#include <rpm/argv.h>
+
+Include dependency graph for rpmte.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef enum rpmElementType_e rpmElementType
 Transaction element type.
typedef rpmFlags rpmElementTypes

+Enumerations

enum  rpmElementType_e { TR_ADDED = (1 << 0), +TR_REMOVED = (1 << 1) + }
 Transaction element type. More...

+Functions

Header rpmteHeader (rpmte te)
 Retrieve header from transaction element.
Header rpmteSetHeader (rpmte te, Header h)
 Save header into transaction element.
rpmElementType rpmteType (rpmte te)
 Retrieve type of transaction element.
const char * rpmteN (rpmte te)
 Retrieve name string of transaction element.
const char * rpmteE (rpmte te)
 Retrieve epoch string of transaction element.
const char * rpmteV (rpmte te)
 Retrieve version string of transaction element.
const char * rpmteR (rpmte te)
 Retrieve release string of transaction element.
const char * rpmteA (rpmte te)
 Retrieve arch string of transaction element.
const char * rpmteO (rpmte te)
 Retrieve os string of transaction element.
int rpmteIsSource (rpmte te)
 Retrieve isSource attribute of transaction element.
rpm_color_t rpmteColor (rpmte te)
 Retrieve color bits of transaction element.
rpm_color_t rpmteSetColor (rpmte te, rpm_color_t color)
 Set color bits of transaction element.
unsigned int rpmteDBInstance (rpmte te)
 Retrieve last instance installed to the database.
void rpmteSetDBInstance (rpmte te, unsigned int instance)
 Set last instance installed to the database.
rpm_loff_t rpmtePkgFileSize (rpmte te)
 Retrieve size in bytes of package file.
rpmte rpmteParent (rpmte te)
 Retrieve parent transaction element.
rpmte rpmteSetParent (rpmte te, rpmte pte)
 Set parent transaction element.
rpmps rpmteProblems (rpmte te)
 Return problem set info of transaction element.
void rpmteCleanProblems (rpmte te)
 Destroy problem set info of transaction element.
void rpmteCleanDS (rpmte te)
 Destroy dependency set info of transaction element.
void rpmteSetDependsOn (rpmte te, rpmte depends)
 Set dependent element of TR_REMOVED transaction element.
rpmte rpmteDependsOn (rpmte te)
 Retrieve dependent element of TR_REMOVED transaction element.
int rpmteDBOffset (rpmte te)
 Retrieve rpmdb instance of TR_REMOVED transaction element.
const char * rpmteEVR (rpmte te)
 Retrieve [epoch:]version-release string from transaction element.
const char * rpmteNEVR (rpmte te)
 Retrieve name-[epoch:]version-release string from transaction element.
const char * rpmteNEVRA (rpmte te)
 Retrieve name-[epoch:]version-release.arch string from transaction element.
fnpyKey rpmteKey (rpmte te)
 Retrieve key from transaction element.
int rpmteFailed (rpmte te)
 Return failure status of transaction element.
rpmds rpmteDS (rpmte te, rpmTagVal tag)
 Retrieve dependency tag set from transaction element.
rpmfi rpmteFI (rpmte te)
 Retrieve file info tag set from transaction element.
ARGV_const_t rpmteCollections (rpmte te)
 Retrieve list of collections.
int rpmteHasCollection (rpmte te, const char *collname)
 Determine a transaction element is part of a collection.
+

Detailed Description

+

Structures used for an "rpmte" transaction element.

+ +

Definition in file rpmte.h.

+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmElementTypes
+
+
+ +

Definition at line 24 of file rpmte.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmte_8h__incl.map b/doc/librpm/html/rpmte_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmte_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmte_8h__incl.md5 b/doc/librpm/html/rpmte_8h__incl.md5 new file mode 100644 index 0000000..63afa0c --- /dev/null +++ b/doc/librpm/html/rpmte_8h__incl.md5 @@ -0,0 +1 @@ +113c52c149e060c412183e55ca7c5978 \ No newline at end of file diff --git a/doc/librpm/html/rpmte_8h__incl.png b/doc/librpm/html/rpmte_8h__incl.png new file mode 100644 index 0000000..fc6f375 Binary files /dev/null and b/doc/librpm/html/rpmte_8h__incl.png differ diff --git a/doc/librpm/html/rpmte_8h_source.html b/doc/librpm/html/rpmte_8h_source.html new file mode 100644 index 0000000..a2296a8 --- /dev/null +++ b/doc/librpm/html/rpmte_8h_source.html @@ -0,0 +1,136 @@ + + + + +rpm: rpmte.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmte.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMTE
+00002 #define H_RPMTE
+00003 
+00009 #include <rpm/rpmtypes.h>
+00010 #include <rpm/argv.h>
+00011 
+00012 #ifdef __cplusplus
+00013 extern "C" {
+00014 #endif
+00015 
+00019 typedef enum rpmElementType_e {
+00020     TR_ADDED            = (1 << 0),     
+00021     TR_REMOVED          = (1 << 1)      
+00022 } rpmElementType;
+00023 
+00024 typedef rpmFlags rpmElementTypes;
+00025 
+00031 Header rpmteHeader(rpmte te);
+00032 
+00039 Header rpmteSetHeader(rpmte te, Header h);
+00040 
+00046 rpmElementType rpmteType(rpmte te);
+00047 
+00053 const char * rpmteN(rpmte te);
+00054 
+00060 const char * rpmteE(rpmte te);
+00061 
+00067 const char * rpmteV(rpmte te);
+00068 
+00074 const char * rpmteR(rpmte te);
+00075 
+00081 const char * rpmteA(rpmte te);
+00082 
+00088 const char * rpmteO(rpmte te);
+00089 
+00095 int rpmteIsSource(rpmte te);
+00096 
+00102 rpm_color_t rpmteColor(rpmte te);
+00103 
+00110 rpm_color_t rpmteSetColor(rpmte te, rpm_color_t color);
+00111 
+00117 unsigned int rpmteDBInstance(rpmte te);
+00118 
+00125 void rpmteSetDBInstance(rpmte te, unsigned int instance);
+00126 
+00133 rpm_loff_t rpmtePkgFileSize(rpmte te);
+00134 
+00140 rpmte rpmteParent(rpmte te);
+00141 
+00148 rpmte rpmteSetParent(rpmte te, rpmte pte);
+00149 
+00155 rpmps rpmteProblems(rpmte te);
+00156 
+00161 void rpmteCleanProblems(rpmte te);
+00162 
+00167 void rpmteCleanDS(rpmte te);
+00168 
+00174 void rpmteSetDependsOn(rpmte te, rpmte depends);
+00175 
+00181 rpmte rpmteDependsOn(rpmte te);
+00182 
+00188 int rpmteDBOffset(rpmte te);
+00189 
+00195 const char * rpmteEVR(rpmte te);
+00196 
+00202 const char * rpmteNEVR(rpmte te);
+00203 
+00209 const char * rpmteNEVRA(rpmte te);
+00210 
+00216 fnpyKey rpmteKey(rpmte te);
+00217 
+00225 int rpmteFailed(rpmte te);
+00226 
+00233 rpmds rpmteDS(rpmte te, rpmTagVal tag);
+00234 
+00240 rpmfi rpmteFI(rpmte te);
+00241 
+00247 ARGV_const_t rpmteCollections(rpmte te);
+00248 
+00255 int rpmteHasCollection(rpmte te, const char * collname);
+00256 
+00257 
+00258 #ifdef __cplusplus
+00259 }
+00260 #endif
+00261 
+00262 #endif  /* H_RPMTE */
+
+
+ + + diff --git a/doc/librpm/html/rpmts_8h.html b/doc/librpm/html/rpmts_8h.html new file mode 100644 index 0000000..ff55946 --- /dev/null +++ b/doc/librpm/html/rpmts_8h.html @@ -0,0 +1,633 @@ + + + + +rpm: rpmts.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmts.h File Reference
+
+
+ +

Structures and prototypes used for an "rpmts" transaction set. +More...

+
#include <sys/types.h>
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmte.h>
+#include <rpm/rpmps.h>
+#include <rpm/rpmsw.h>
+#include <rpm/rpmpgp.h>
+#include <rpm/rpmfi.h>
+#include <rpm/rpmcallback.h>
+
+Include dependency graph for rpmts.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define _noTransScripts
#define _noTransTriggers
#define RPMTRANS_FLAG_NOPAYLOAD   0
#define RPMTRANS_FLAG_APPLYONLY   0
#define RPMTRANS_FLAG_KEEPOBSOLETE   0
#define RPMTRANS_FLAG_DIRSTASH   0
#define RPMTRANS_FLAG_REPACKAGE   0
#define RPMTRANS_FLAG_PKGCOMMIT   0
#define RPMTRANS_FLAG_PKGUNDO   0
#define RPMTRANS_FLAG_COMMIT   0
#define RPMTRANS_FLAG_UNDO   0
#define RPMTRANS_FLAG_REVERSE   0
#define RPMTRANS_FLAG_NOSUGGEST   0
#define RPMTRANS_FLAG_ADDINDEPS   0
#define _RPMVSF_NODIGESTS
#define _RPMVSF_NOSIGNATURES
#define _RPMVSF_NOHEADER
#define _RPMVSF_NOPAYLOAD

+Typedefs

typedef rpmFlags rpmtransFlags
typedef rpmFlags rpmVSFlags
typedef enum rpmtsOpX_e rpmtsOpX
 Indices for timestamps.

+Enumerations

enum  rpmtransFlags_e {
+  RPMTRANS_FLAG_NONE = 0, +RPMTRANS_FLAG_TEST = (1 << 0), +RPMTRANS_FLAG_BUILD_PROBS = (1 << 1), +RPMTRANS_FLAG_NOSCRIPTS = (1 << 2), +
+  RPMTRANS_FLAG_JUSTDB = (1 << 3), +RPMTRANS_FLAG_NOTRIGGERS = (1 << 4), +RPMTRANS_FLAG_NODOCS = (1 << 5), +RPMTRANS_FLAG_ALLFILES = (1 << 6), +
+  RPMTRANS_FLAG_NOCONTEXTS = (1 << 8), +RPMTRANS_FLAG_NOTRIGGERPREIN = (1 << 16), +RPMTRANS_FLAG_NOPRE = (1 << 17), +RPMTRANS_FLAG_NOPOST = (1 << 18), +
+  RPMTRANS_FLAG_NOTRIGGERIN = (1 << 19), +RPMTRANS_FLAG_NOTRIGGERUN = (1 << 20), +RPMTRANS_FLAG_NOPREUN = (1 << 21), +RPMTRANS_FLAG_NOPOSTUN = (1 << 22), +
+  RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23), +RPMTRANS_FLAG_NOCOLLECTIONS = (1 << 26), +RPMTRANS_FLAG_NOMD5 = (1 << 27), +RPMTRANS_FLAG_NOFILEDIGEST = (1 << 27), +
+  RPMTRANS_FLAG_NOCONFIGS = (1 << 30), +RPMTRANS_FLAG_DEPLOOPS = (1 << 31) +
+ }
 Bit(s) to control rpmtsRun() operation. More...
enum  rpmVSFlags_e {
+  RPMVSF_DEFAULT = 0, +RPMVSF_NOHDRCHK = (1 << 0), +RPMVSF_NEEDPAYLOAD = (1 << 1), +RPMVSF_NOSHA1HEADER = (1 << 8), +
+  RPMVSF_NOMD5HEADER = (1 << 9), +RPMVSF_NODSAHEADER = (1 << 10), +RPMVSF_NORSAHEADER = (1 << 11), +RPMVSF_NOSHA1 = (1 << 16), +
+  RPMVSF_NOMD5 = (1 << 17), +RPMVSF_NODSA = (1 << 18), +RPMVSF_NORSA = (1 << 19) +
+ }
 Bit(s) to control digest and signature verification. More...
enum  rpmtsOpX_e {
+  RPMTS_OP_TOTAL = 0, +RPMTS_OP_CHECK = 1, +RPMTS_OP_ORDER = 2, +RPMTS_OP_FINGERPRINT = 3, +
+  RPMTS_OP_INSTALL = 5, +RPMTS_OP_ERASE = 6, +RPMTS_OP_SCRIPTLETS = 7, +RPMTS_OP_COMPRESS = 8, +
+  RPMTS_OP_UNCOMPRESS = 9, +RPMTS_OP_DIGEST = 10, +RPMTS_OP_SIGNATURE = 11, +RPMTS_OP_DBADD = 12, +
+  RPMTS_OP_DBREMOVE = 13, +RPMTS_OP_DBGET = 14, +RPMTS_OP_DBPUT = 15, +RPMTS_OP_DBDEL = 16, +
+  RPMTS_OP_MAX = 17 +
+ }
 Indices for timestamps. More...

+Functions

int rpmtsCheck (rpmts ts)
 Perform dependency resolution on the transaction set.
int rpmtsOrder (rpmts ts)
 Determine package order in a transaction set according to dependencies.
int rpmtsRun (rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
 Process all package elements in a transaction set.
rpmts rpmtsLink (rpmts ts)
 Reference a transaction set instance.
int rpmtsCloseDB (rpmts ts)
 Close the database used by the transaction.
int rpmtsOpenDB (rpmts ts, int dbmode)
 Open the database used by the transaction.
int rpmtsInitDB (rpmts ts, int dbmode)
 Initialize the database used by the transaction.
int rpmtsGetDBMode (rpmts ts)
 Return the transaction database mode.
int rpmtsSetDBMode (rpmts ts, int dbmode)
 Set the transaction database mode.
int rpmtsRebuildDB (rpmts ts)
 Rebuild the database used by the transaction.
int rpmtsVerifyDB (rpmts ts)
 Verify the database used by the transaction.
rpmdbMatchIterator rpmtsInitIterator (const rpmts ts, rpmDbiTagVal rpmtag, const void *keyp, size_t keylen)
 Return transaction database iterator.
rpmRC rpmtsImportPubkey (rpmts ts, const unsigned char *pkt, size_t pktlen)
 Import public key packet(s).
rpmKeyring rpmtsGetKeyring (rpmts ts, int autoload)
 Retrieve handle for keyring used for this transaction set.
int rpmtsSetKeyring (rpmts ts, rpmKeyring keyring)
 Set keyring to use for this transaction set.
int rpmtsSetSolveCallback (rpmts ts, int(*solve)(rpmts ts, rpmds ds, const void *data), const void *solveData)
 Set dependency solver callback.
rpmps rpmtsProblems (rpmts ts)
 Return current transaction set problems.
void rpmtsCleanProblems (rpmts ts)
 Clean current transaction problem set.
void rpmtsClean (rpmts ts)
 Free memory needed only for dependency checks and ordering.
void rpmtsEmpty (rpmts ts)
 Re-create an empty transaction set.
rpmts rpmtsFree (rpmts ts)
 Destroy transaction set, closing the database as well.
rpmVSFlags rpmtsVSFlags (rpmts ts)
 Get verify signatures flag(s).
rpmVSFlags rpmtsSetVSFlags (rpmts ts, rpmVSFlags vsflags)
 Set verify signatures flag(s).
const char * rpmtsRootDir (rpmts ts)
 Get transaction rootDir, i.e.
int rpmtsSetRootDir (rpmts ts, const char *rootDir)
 Set transaction rootDir, i.e.
FD_t rpmtsScriptFd (rpmts ts)
 Get transaction script file handle, i.e.
void rpmtsSetScriptFd (rpmts ts, FD_t scriptFd)
 Set transaction script file handle, i.e.
rpm_tid_t rpmtsGetTid (rpmts ts)
 Get transaction id, i.e.
rpm_tid_t rpmtsSetTid (rpmts ts, rpm_tid_t tid)
 Set transaction id, i.e.
rpmdb rpmtsGetRdb (rpmts ts)
 Get transaction set database handle.
void * rpmtsNotify (rpmts ts, rpmte te, rpmCallbackType what, rpm_loff_t amount, rpm_loff_t total)
 Perform transaction progress notify callback.
int rpmtsNElements (rpmts ts)
 Return number of (ordered) transaction set elements.
rpmte rpmtsElement (rpmts ts, int ix)
 Return (ordered) transaction set element.
rpmprobFilterFlags rpmtsFilterFlags (rpmts ts)
 Get problem ignore bit mask, i.e.
rpmtransFlags rpmtsFlags (rpmts ts)
 Get transaction flags, i.e.
rpmtransFlags rpmtsSetFlags (rpmts ts, rpmtransFlags transFlags)
 Set transaction flags, i.e.
rpm_color_t rpmtsColor (rpmts ts)
 Retrieve color bits of transaction set.
rpm_color_t rpmtsPrefColor (rpmts ts)
 Retrieve prefered file color.
rpm_color_t rpmtsSetColor (rpmts ts, rpm_color_t color)
 Set color bits of transaction set.
rpm_color_t rpmtsSetPrefColor (rpmts ts, rpm_color_t color)
 Set prefered file color.
rpmop rpmtsOp (rpmts ts, rpmtsOpX opx)
 Retrieve operation timestamp from a transaction set.
rpmPlugins rpmtsPlugins (rpmts ts)
 Get the plugins associated with a transaction set.
int rpmtsSetNotifyCallback (rpmts ts, rpmCallbackFunction notify, rpmCallbackData notifyData)
 Set transaction notify callback function and argument.
rpmts rpmtsCreate (void)
 Create an empty transaction set.
int rpmtsAddInstallElement (rpmts ts, Header h, const fnpyKey key, int upgrade, rpmRelocation *relocs)
 Add package to be installed to transaction set.
int rpmtsAddEraseElement (rpmts ts, Header h, int dboffset)
 Add package to be erased to transaction set.
rpmtsi rpmtsiFree (rpmtsi tsi)
 Destroy transaction element iterator.
rpmtsi rpmtsiInit (rpmts ts)
 Create transaction element iterator.
rpmte rpmtsiNext (rpmtsi tsi, rpmElementTypes types)
 Return next transaction element of type.

+Variables

int _rpmts_stats
+

Detailed Description

+

Structures and prototypes used for an "rpmts" transaction set.

+ +

Definition in file rpmts.h.

+

Define Documentation

+ +
+
+ + + + +
#define _noTransScripts
+
+
+Value: +

Definition at line 59 of file rpmts.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
#define _noTransTriggers
+
+
+Value: +

Definition at line 66 of file rpmts.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
#define _RPMVSF_NODIGESTS
+
+
+Value: +

Definition at line 109 of file rpmts.h.

+ +

Referenced by build(), and main().

+ +
+
+ +
+
+ + + + +
#define _RPMVSF_NOHEADER
+
+
+Value: +

Definition at line 121 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define _RPMVSF_NOPAYLOAD
+
+
+Value: +

Definition at line 127 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define _RPMVSF_NOSIGNATURES
+
+
+Value: +

Definition at line 115 of file rpmts.h.

+ +

Referenced by build(), and main().

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_ADDINDEPS   0
+
+
+ +

Definition at line 85 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_APPLYONLY   0
+
+
+ +

Definition at line 75 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_COMMIT   0
+
+
+ +

Definition at line 81 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_DIRSTASH   0
+
+
+ +

Definition at line 77 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_KEEPOBSOLETE   0
+
+
+ +

Definition at line 76 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_NOPAYLOAD   0
+
+
+ +

Definition at line 74 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_NOSUGGEST   0
+
+
+ +

Definition at line 84 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_PKGCOMMIT   0
+
+
+ +

Definition at line 79 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_PKGUNDO   0
+
+
+ +

Definition at line 80 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_REPACKAGE   0
+
+
+ +

Definition at line 78 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_REVERSE   0
+
+
+ +

Definition at line 83 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
#define RPMTRANS_FLAG_UNDO   0
+
+
+ +

Definition at line 82 of file rpmts.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmtransFlags
+
+
+ +

Definition at line 57 of file rpmts.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags rpmVSFlags
+
+
+ +

Definition at line 107 of file rpmts.h.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
int _rpmts_stats
+
+
+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmts_8h__incl.map b/doc/librpm/html/rpmts_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmts_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmts_8h__incl.md5 b/doc/librpm/html/rpmts_8h__incl.md5 new file mode 100644 index 0000000..334d93b --- /dev/null +++ b/doc/librpm/html/rpmts_8h__incl.md5 @@ -0,0 +1 @@ +5b850d13455c24a366fccbd6a921fef4 \ No newline at end of file diff --git a/doc/librpm/html/rpmts_8h__incl.png b/doc/librpm/html/rpmts_8h__incl.png new file mode 100644 index 0000000..1f47f57 Binary files /dev/null and b/doc/librpm/html/rpmts_8h__incl.png differ diff --git a/doc/librpm/html/rpmts_8h_source.html b/doc/librpm/html/rpmts_8h_source.html new file mode 100644 index 0000000..cdfd44f --- /dev/null +++ b/doc/librpm/html/rpmts_8h_source.html @@ -0,0 +1,302 @@ + + + + +rpm: rpmts.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmts.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMTS
+00002 #define H_RPMTS
+00003 
+00009 #include <sys/types.h>
+00010 
+00011 #include <rpm/rpmtypes.h>
+00012 #include <rpm/rpmte.h>
+00013 #include <rpm/rpmps.h>
+00014 #include <rpm/rpmsw.h>
+00015 #include <rpm/rpmpgp.h>
+00016 #include <rpm/rpmfi.h>
+00017 #include <rpm/rpmcallback.h>
+00018 
+00019 #ifdef __cplusplus
+00020 extern "C" {
+00021 #endif
+00022 
+00023 extern int _rpmts_stats;
+00024 
+00028 enum rpmtransFlags_e {
+00029     RPMTRANS_FLAG_NONE          = 0,
+00030     RPMTRANS_FLAG_TEST          = (1 <<  0),    
+00031     RPMTRANS_FLAG_BUILD_PROBS   = (1 <<  1),    
+00032     RPMTRANS_FLAG_NOSCRIPTS     = (1 <<  2),    
+00033     RPMTRANS_FLAG_JUSTDB        = (1 <<  3),    
+00034     RPMTRANS_FLAG_NOTRIGGERS    = (1 <<  4),    
+00035     RPMTRANS_FLAG_NODOCS        = (1 <<  5),    
+00036     RPMTRANS_FLAG_ALLFILES      = (1 <<  6),    
+00037     /* bit 7 unused */
+00038     RPMTRANS_FLAG_NOCONTEXTS    = (1 <<  8),    
+00039     /* bits 9-15 unused */
+00040     RPMTRANS_FLAG_NOTRIGGERPREIN= (1 << 16),    
+00041     RPMTRANS_FLAG_NOPRE         = (1 << 17),    
+00042     RPMTRANS_FLAG_NOPOST        = (1 << 18),    
+00043     RPMTRANS_FLAG_NOTRIGGERIN   = (1 << 19),    
+00044     RPMTRANS_FLAG_NOTRIGGERUN   = (1 << 20),    
+00045     RPMTRANS_FLAG_NOPREUN       = (1 << 21),    
+00046     RPMTRANS_FLAG_NOPOSTUN      = (1 << 22),    
+00047     RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23),  
+00048     /* bits 24-25 unused */
+00049     RPMTRANS_FLAG_NOCOLLECTIONS = (1 << 26),    
+00050     RPMTRANS_FLAG_NOMD5         = (1 << 27),    
+00051     RPMTRANS_FLAG_NOFILEDIGEST  = (1 << 27),    
+00052     /* bits 28-29 unused */
+00053     RPMTRANS_FLAG_NOCONFIGS     = (1 << 30),    
+00054     RPMTRANS_FLAG_DEPLOOPS      = (1 << 31)     
+00055 };
+00056 
+00057 typedef rpmFlags rpmtransFlags;
+00058 
+00059 #define _noTransScripts         \
+00060   ( RPMTRANS_FLAG_NOPRE |       \
+00061     RPMTRANS_FLAG_NOPOST |      \
+00062     RPMTRANS_FLAG_NOPREUN |     \
+00063     RPMTRANS_FLAG_NOPOSTUN      \
+00064   )
+00065 
+00066 #define _noTransTriggers        \
+00067   ( RPMTRANS_FLAG_NOTRIGGERPREIN | \
+00068     RPMTRANS_FLAG_NOTRIGGERIN | \
+00069     RPMTRANS_FLAG_NOTRIGGERUN | \
+00070     RPMTRANS_FLAG_NOTRIGGERPOSTUN \
+00071   )
+00072 
+00073 /* Avoid unnecessary breakage for stuff referring to these unused flags */
+00074 #define RPMTRANS_FLAG_NOPAYLOAD 0
+00075 #define RPMTRANS_FLAG_APPLYONLY 0
+00076 #define RPMTRANS_FLAG_KEEPOBSOLETE 0
+00077 #define RPMTRANS_FLAG_DIRSTASH 0
+00078 #define RPMTRANS_FLAG_REPACKAGE 0
+00079 #define RPMTRANS_FLAG_PKGCOMMIT 0
+00080 #define RPMTRANS_FLAG_PKGUNDO 0
+00081 #define RPMTRANS_FLAG_COMMIT 0
+00082 #define RPMTRANS_FLAG_UNDO 0
+00083 #define RPMTRANS_FLAG_REVERSE 0
+00084 #define RPMTRANS_FLAG_NOSUGGEST 0
+00085 #define RPMTRANS_FLAG_ADDINDEPS 0
+00086 
+00090 enum rpmVSFlags_e {
+00091     RPMVSF_DEFAULT      = 0,
+00092     RPMVSF_NOHDRCHK     = (1 <<  0),
+00093     RPMVSF_NEEDPAYLOAD  = (1 <<  1),
+00094     /* bit(s) 2-7 unused */
+00095     RPMVSF_NOSHA1HEADER = (1 <<  8),
+00096     RPMVSF_NOMD5HEADER  = (1 <<  9),    /* unimplemented */
+00097     RPMVSF_NODSAHEADER  = (1 << 10),
+00098     RPMVSF_NORSAHEADER  = (1 << 11),    /* unimplemented */
+00099     /* bit(s) 12-15 unused */
+00100     RPMVSF_NOSHA1       = (1 << 16),    /* unimplemented */
+00101     RPMVSF_NOMD5        = (1 << 17),
+00102     RPMVSF_NODSA        = (1 << 18),
+00103     RPMVSF_NORSA        = (1 << 19)
+00104     /* bit(s) 16-31 unused */
+00105 };
+00106 
+00107 typedef rpmFlags rpmVSFlags;
+00108 
+00109 #define _RPMVSF_NODIGESTS       \
+00110   ( RPMVSF_NOSHA1HEADER |       \
+00111     RPMVSF_NOMD5HEADER |        \
+00112     RPMVSF_NOSHA1 |             \
+00113     RPMVSF_NOMD5 )
+00114 
+00115 #define _RPMVSF_NOSIGNATURES    \
+00116   ( RPMVSF_NODSAHEADER |        \
+00117     RPMVSF_NORSAHEADER |        \
+00118     RPMVSF_NODSA |              \
+00119     RPMVSF_NORSA )
+00120 
+00121 #define _RPMVSF_NOHEADER        \
+00122   ( RPMVSF_NOSHA1HEADER |       \
+00123     RPMVSF_NOMD5HEADER |        \
+00124     RPMVSF_NODSAHEADER |        \
+00125     RPMVSF_NORSAHEADER )
+00126 
+00127 #define _RPMVSF_NOPAYLOAD       \
+00128   ( RPMVSF_NOSHA1 |             \
+00129     RPMVSF_NOMD5 |              \
+00130     RPMVSF_NODSA |              \
+00131     RPMVSF_NORSA )
+00132 
+00136 typedef enum rpmtsOpX_e {
+00137     RPMTS_OP_TOTAL              =  0,
+00138     RPMTS_OP_CHECK              =  1,
+00139     RPMTS_OP_ORDER              =  2,
+00140     RPMTS_OP_FINGERPRINT        =  3,
+00141     RPMTS_OP_INSTALL            =  5,
+00142     RPMTS_OP_ERASE              =  6,
+00143     RPMTS_OP_SCRIPTLETS         =  7,
+00144     RPMTS_OP_COMPRESS           =  8,
+00145     RPMTS_OP_UNCOMPRESS         =  9,
+00146     RPMTS_OP_DIGEST             = 10,
+00147     RPMTS_OP_SIGNATURE          = 11,
+00148     RPMTS_OP_DBADD              = 12,
+00149     RPMTS_OP_DBREMOVE           = 13,
+00150     RPMTS_OP_DBGET              = 14,
+00151     RPMTS_OP_DBPUT              = 15,
+00152     RPMTS_OP_DBDEL              = 16,
+00153     RPMTS_OP_MAX                = 17
+00154 } rpmtsOpX;
+00155 
+00166 int rpmtsCheck(rpmts ts);
+00167 
+00184 int rpmtsOrder(rpmts ts);
+00185 
+00203 int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet);
+00204 
+00210 rpmts rpmtsLink (rpmts ts);
+00211 
+00217 int rpmtsCloseDB(rpmts ts);
+00218 
+00225 int rpmtsOpenDB(rpmts ts, int dbmode);
+00226 
+00234 int rpmtsInitDB(rpmts ts, int dbmode);
+00235 
+00241 int rpmtsGetDBMode(rpmts ts);
+00242 
+00250 int rpmtsSetDBMode(rpmts ts, int dbmode);
+00251 
+00257 int rpmtsRebuildDB(rpmts ts);
+00258 
+00264 int rpmtsVerifyDB(rpmts ts);
+00265 
+00274 rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag,
+00275                         const void * keyp, size_t keylen);
+00276 
+00285 rpmRC rpmtsImportPubkey(rpmts ts, const unsigned char * pkt, size_t pktlen);
+00286 
+00293 rpmKeyring rpmtsGetKeyring(rpmts ts, int autoload);
+00294 
+00303 int rpmtsSetKeyring(rpmts ts, rpmKeyring keyring);
+00304 
+00312 int rpmtsSetSolveCallback(rpmts ts,
+00313                 int (*solve) (rpmts ts, rpmds ds, const void * data),
+00314                 const void * solveData);
+00315 
+00321 rpmps rpmtsProblems(rpmts ts);
+00322 
+00327 void rpmtsCleanProblems(rpmts ts);
+00328 
+00333 void rpmtsClean(rpmts ts);
+00334 
+00339 void rpmtsEmpty(rpmts ts);
+00340 
+00346 rpmts rpmtsFree(rpmts ts);
+00347 
+00353 rpmVSFlags rpmtsVSFlags(rpmts ts);
+00354 
+00361 rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags);
+00362 
+00368 const char * rpmtsRootDir(rpmts ts);
+00369 
+00376 int rpmtsSetRootDir(rpmts ts, const char * rootDir);
+00377 
+00383 FD_t rpmtsScriptFd(rpmts ts);
+00384 
+00390 void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd);
+00391 
+00397 rpm_tid_t rpmtsGetTid(rpmts ts);
+00398 
+00405 rpm_tid_t rpmtsSetTid(rpmts ts, rpm_tid_t tid);
+00406 
+00412 rpmdb rpmtsGetRdb(rpmts ts);
+00413 
+00423 void * rpmtsNotify(rpmts ts, rpmte te,
+00424                 rpmCallbackType what, rpm_loff_t amount, rpm_loff_t total);
+00425 
+00431 int rpmtsNElements(rpmts ts);
+00432 
+00439 rpmte rpmtsElement(rpmts ts, int ix);
+00440 
+00446 rpmprobFilterFlags rpmtsFilterFlags(rpmts ts);
+00447 
+00453 rpmtransFlags rpmtsFlags(rpmts ts);
+00454 
+00461 rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags);
+00462 
+00468 rpm_color_t rpmtsColor(rpmts ts);
+00469 
+00475 rpm_color_t rpmtsPrefColor(rpmts ts);
+00476 
+00483 rpm_color_t rpmtsSetColor(rpmts ts, rpm_color_t color);
+00484 
+00491 rpm_color_t rpmtsSetPrefColor(rpmts ts, rpm_color_t color);
+00492 
+00499 rpmop rpmtsOp(rpmts ts, rpmtsOpX opx);
+00500 
+00506 rpmPlugins rpmtsPlugins(rpmts ts);
+00507 
+00519 int rpmtsSetNotifyCallback(rpmts ts,
+00520                 rpmCallbackFunction notify,
+00521                 rpmCallbackData notifyData);
+00522 
+00527 rpmts rpmtsCreate(void);
+00528 
+00542 int rpmtsAddInstallElement(rpmts ts, Header h,
+00543                 const fnpyKey key, int upgrade,
+00544                 rpmRelocation * relocs);
+00545 
+00553 int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset);
+00554 
+00560 rpmtsi rpmtsiFree(rpmtsi tsi);
+00561 
+00567 rpmtsi rpmtsiInit(rpmts ts);
+00568 
+00575 rpmte rpmtsiNext(rpmtsi tsi, rpmElementTypes types);
+00576 
+00577 #ifdef __cplusplus
+00578 }
+00579 #endif
+00580 
+00581 
+00582 #endif  /* H_RPMTS */
+
+
+ + + diff --git a/doc/librpm/html/rpmtypes_8h.html b/doc/librpm/html/rpmtypes_8h.html new file mode 100644 index 0000000..f776856 --- /dev/null +++ b/doc/librpm/html/rpmtypes_8h.html @@ -0,0 +1,242 @@ + + + + +rpm: rpmtypes.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmtypes.h File Reference
+
+
+ +

Typedefs for RPM abstract data types. +More...

+
#include <stdint.h>
+#include <rpm/rpmtag.h>
+
+Include dependency graph for rpmtypes.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef const char * errmsg_t
typedef struct rpmPubkey_s * rpmPubkey
typedef struct rpmKeyring_s * rpmKeyring
typedef struct rpmPlugins_s * rpmPlugins
typedef struct rpmgi_s * rpmgi
typedef struct rpmSpec_s * rpmSpec
typedef struct rpmRelocation_s rpmRelocation
typedef struct _FD_s * FD_t
 RPM IO file descriptor type.
typedef enum rpmRC_e rpmRC
 Package read return codes.
typedef struct headerToken_s * Header
 RPM header and data retrieval types.
typedef struct headerIterator_s * HeaderIterator
typedef int32_t rpm_tag_t
typedef uint32_t rpm_tagtype_t
typedef uint32_t rpm_count_t
typedef rpm_tag_t rpmTagVal
typedef rpm_tag_t rpmDbiTagVal
typedef void * rpm_data_t
typedef const void * rpm_constdata_t
typedef struct rpmtd_srpmtd
typedef uint32_t rpm_color_t
typedef uint32_t rpm_flag_t
typedef uint32_t rpm_tid_t
typedef uint32_t rpmFlags
typedef uint32_t rpm_off_t
 In-header hardcoded sizes for various POSIXy types.
typedef uint64_t rpm_loff_t
typedef uint32_t rpm_time_t
typedef uint16_t rpm_mode_t
typedef uint16_t rpm_rdev_t
typedef uint32_t rpm_dev_t
typedef uint32_t rpm_ino_t
typedef struct rpmts_s * rpmts
 The main types involved in transaction manipulation.
typedef struct rpmte_s * rpmte
typedef struct rpmds_s * rpmds
typedef struct rpmfi_s * rpmfi
typedef struct rpmdb_s * rpmdb
typedef struct
+rpmdbMatchIterator_s * 
rpmdbMatchIterator
typedef struct rpmtsi_s * rpmtsi
typedef struct rpmps_s * rpmps
typedef struct
+rpmdbIndexIterator_s * 
rpmdbIndexIterator
typedef const void * fnpyKey
typedef void * rpmCallbackData

+Enumerations

enum  rpmRC_e {
+  RPMRC_OK = 0, +RPMRC_NOTFOUND = 1, +RPMRC_FAIL = 2, +RPMRC_NOTTRUSTED = 3, +
+  RPMRC_NOKEY = 4 +
+ }
 Package read return codes. More...
+

Detailed Description

+

Typedefs for RPM abstract data types.

+
Todo:
The grouping needs love to look sane...
+ +

Definition in file rpmtypes.h.

+

Typedef Documentation

+ +
+
+ + + + +
typedef const char* errmsg_t
+
+
+ +

Definition at line 17 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmgi_s* rpmgi
+
+
+ +

Definition at line 82 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmKeyring_s* rpmKeyring
+
+
+ +

Definition at line 78 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmPlugins_s* rpmPlugins
+
+
+ +

Definition at line 80 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmPubkey_s* rpmPubkey
+
+
+ +

Definition at line 77 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmRelocation_s rpmRelocation
+
+
+ +

Definition at line 86 of file rpmtypes.h.

+ +
+
+ +
+
+ + + + +
typedef struct rpmSpec_s* rpmSpec
+
+
+ +

Definition at line 84 of file rpmtypes.h.

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmtypes_8h__incl.map b/doc/librpm/html/rpmtypes_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmtypes_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmtypes_8h__incl.md5 b/doc/librpm/html/rpmtypes_8h__incl.md5 new file mode 100644 index 0000000..f712752 --- /dev/null +++ b/doc/librpm/html/rpmtypes_8h__incl.md5 @@ -0,0 +1 @@ +98067927c084e385fe2b1986a79610c8 \ No newline at end of file diff --git a/doc/librpm/html/rpmtypes_8h__incl.png b/doc/librpm/html/rpmtypes_8h__incl.png new file mode 100644 index 0000000..72fc57a Binary files /dev/null and b/doc/librpm/html/rpmtypes_8h__incl.png differ diff --git a/doc/librpm/html/rpmtypes_8h_source.html b/doc/librpm/html/rpmtypes_8h_source.html new file mode 100644 index 0000000..18cb9cd --- /dev/null +++ b/doc/librpm/html/rpmtypes_8h_source.html @@ -0,0 +1,128 @@ + + + + +rpm: rpmtypes.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmtypes.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMTYPES_H
+00002 #define _RPMTYPES_H
+00003 
+00011 #include <stdint.h>
+00012 
+00013 #ifdef __cplusplus
+00014 extern "C" {
+00015 #endif
+00016 
+00017 typedef const char *    errmsg_t;
+00018 
+00024 typedef struct headerToken_s * Header;
+00025 typedef struct headerIterator_s * HeaderIterator;
+00026 
+00027 typedef int32_t         rpm_tag_t;
+00028 typedef uint32_t        rpm_tagtype_t;
+00029 typedef uint32_t        rpm_count_t;
+00030 typedef rpm_tag_t       rpmTagVal;
+00031 typedef rpm_tag_t       rpmDbiTagVal;
+00032 
+00033 typedef void *          rpm_data_t;
+00034 typedef const void *    rpm_constdata_t;
+00035 
+00036 typedef struct rpmtd_s * rpmtd;
+00037 
+00038 typedef uint32_t        rpm_color_t;
+00039 typedef uint32_t        rpm_flag_t;
+00040 typedef uint32_t        rpm_tid_t;
+00041 
+00042 typedef uint32_t        rpmFlags;
+00050 typedef uint32_t        rpm_off_t;
+00051 typedef uint64_t        rpm_loff_t;
+00052 typedef uint32_t        rpm_time_t;
+00053 typedef uint16_t        rpm_mode_t;
+00054 typedef uint16_t        rpm_rdev_t;
+00055 typedef uint32_t        rpm_dev_t;
+00056 typedef uint32_t        rpm_ino_t;
+00063 typedef struct rpmts_s * rpmts;
+00064 typedef struct rpmte_s * rpmte;
+00065 typedef struct rpmds_s * rpmds;
+00066 typedef struct rpmfi_s * rpmfi;
+00067 typedef struct rpmdb_s * rpmdb;
+00068 typedef struct rpmdbMatchIterator_s * rpmdbMatchIterator;
+00069 typedef struct rpmtsi_s * rpmtsi;
+00070 typedef struct rpmps_s * rpmps;
+00071 
+00072 typedef struct rpmdbIndexIterator_s * rpmdbIndexIterator;
+00073 typedef const void * fnpyKey;
+00074 typedef void * rpmCallbackData;
+00077 typedef struct rpmPubkey_s * rpmPubkey;
+00078 typedef struct rpmKeyring_s * rpmKeyring;
+00079 
+00080 typedef struct rpmPlugins_s * rpmPlugins;
+00081 
+00082 typedef struct rpmgi_s * rpmgi;
+00083 
+00084 typedef struct rpmSpec_s * rpmSpec;
+00085 
+00086 typedef struct rpmRelocation_s rpmRelocation;
+00087 
+00088 
+00092 typedef struct _FD_s * FD_t;
+00093 
+00097 typedef enum rpmRC_e {
+00098     RPMRC_OK            = 0,    
+00099     RPMRC_NOTFOUND      = 1,    
+00100     RPMRC_FAIL          = 2,    
+00101     RPMRC_NOTTRUSTED    = 3,    
+00102     RPMRC_NOKEY         = 4     
+00103 } rpmRC;
+00104 
+00105 #ifdef __cplusplus
+00106 }
+00107 #endif
+00108 
+00109 /* XXX included late as rpmtag.h depends on our definitions here... */
+00110 #include <rpm/rpmtag.h>
+00111 
+00112 #endif /* _RPMTYPES_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmurl_8h.html b/doc/librpm/html/rpmurl_8h.html new file mode 100644 index 0000000..2650d58 --- /dev/null +++ b/doc/librpm/html/rpmurl_8h.html @@ -0,0 +1,86 @@ + + + + +rpm: rpmurl.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmurl.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Typedefs

typedef enum urltype_e urltype
 Supported URL types.

+Enumerations

enum  urltype_e {
+  URL_IS_UNKNOWN = 0, +URL_IS_DASH = 1, +URL_IS_PATH = 2, +URL_IS_FTP = 3, +
+  URL_IS_HTTP = 4, +URL_IS_HTTPS = 5, +URL_IS_HKP = 6 +
+ }
 Supported URL types. More...

+Functions

urltype urlIsURL (const char *url)
 Return type of URL.
urltype urlPath (const char *url, const char **pathp)
 Return path component of URL.
int urlGetFile (const char *url, const char *dest)
 Copy data from URL to local file.
+

Detailed Description

+
+

Definition in file rpmurl.h.

+
+ + + diff --git a/doc/librpm/html/rpmurl_8h_source.html b/doc/librpm/html/rpmurl_8h_source.html new file mode 100644 index 0000000..571873c --- /dev/null +++ b/doc/librpm/html/rpmurl_8h_source.html @@ -0,0 +1,77 @@ + + + + +rpm: rpmurl.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmurl.h
+
+
+Go to the documentation of this file.
00001 #ifndef H_RPMURL
+00002 #define H_RPMURL
+00003 
+00008 #ifdef __cplusplus
+00009 extern "C" {
+00010 #endif
+00011 
+00015 typedef enum urltype_e {
+00016     URL_IS_UNKNOWN      = 0,    
+00017     URL_IS_DASH         = 1,    
+00018     URL_IS_PATH         = 2,    
+00019     URL_IS_FTP          = 3,    
+00020     URL_IS_HTTP         = 4,    
+00021     URL_IS_HTTPS        = 5,    
+00022     URL_IS_HKP          = 6     
+00023 } urltype;
+00024 
+00030 urltype urlIsURL(const char * url);
+00031 
+00038 urltype urlPath(const char * url, const char ** pathp);
+00039 
+00046 int urlGetFile(const char * url, const char * dest);
+00047 
+00048 #ifdef __cplusplus
+00049 }
+00050 #endif
+00051 
+00052 #endif  /* H_RPMURL */
+
+
+ + + diff --git a/doc/librpm/html/rpmutil_8h.html b/doc/librpm/html/rpmutil_8h.html new file mode 100644 index 0000000..25d4519 --- /dev/null +++ b/doc/librpm/html/rpmutil_8h.html @@ -0,0 +1,632 @@ + + + + +rpm: rpmutil.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmutil.h File Reference
+
+
+
#include <unistd.h>
+
+Include dependency graph for rpmutil.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define RPM_GNUC_EXTENSION
#define RPM_GNUC_PURE
#define RPM_GNUC_MALLOC
#define RPM_GNUC_ALLOC_SIZE(x)
#define RPM_GNUC_ALLOC_SIZE2(x, y)
#define RPM_GNUC_NULL_TERMINATED
#define RPM_GNUC_PRINTF(format_idx, arg_idx)
#define RPM_GNUC_SCANF(format_idx, arg_idx)
#define RPM_GNUC_FORMAT(arg_idx)
#define RPM_GNUC_NORETURN
#define RPM_GNUC_CONST
#define RPM_GNUC_UNUSED
#define RPM_GNUC_NO_INSTRUMENT
#define RPM_GNUC_DEPRECATED
#define RPM_GNUC_MAY_ALIAS
#define RPM_GNUC_NONNULL(...)
#define RPM_GNUC_WARN_UNUSED_RESULT
#define RPM_GNUC_INTERNAL
#define RPM_BEGIN_DECLS
#define RPM_END_DECLS

+Typedefs

typedef void *(* rpmMemFailFunc )(size_t size, void *data)
 Memory allocation failure callback prototype.

+Functions

void * rmalloc (size_t size)
void * rcalloc (size_t nmemb, size_t size)
void * rrealloc (void *ptr, size_t size)
char * rstrdup (const char *str)
void * rfree (void *ptr)
rpmMemFailFunc rpmSetMemFail (rpmMemFailFunc func, void *data)
 Set memory allocation failure callback.
+

Define Documentation

+ +
+
+ + + + +
#define RPM_BEGIN_DECLS
+
+
+ +

Definition at line 111 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_END_DECLS
+
+
+ +

Definition at line 112 of file rpmutil.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPM_GNUC_ALLOC_SIZE( x)
+
+
+ +

Definition at line 41 of file rpmutil.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define RPM_GNUC_ALLOC_SIZE2( x,
 
)
+
+
+ +

Definition at line 42 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_CONST
+
+
+ +

Definition at line 71 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_DEPRECATED
+
+
+ +

Definition at line 80 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_EXTENSION
+
+
+ +

Definition at line 22 of file rpmutil.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPM_GNUC_FORMAT( arg_idx)
+
+
+ +

Definition at line 69 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_INTERNAL
+
+
+ +

Definition at line 102 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_MALLOC
+
+
+ +

Definition at line 34 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_MAY_ALIAS
+
+
+ +

Definition at line 88 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_NO_INSTRUMENT
+
+
+ +

Definition at line 73 of file rpmutil.h.

+ +
+
+ +
+
+ + + + + + + + +
#define RPM_GNUC_NONNULL( ...)
+
+
+ +

Definition at line 89 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_NORETURN
+
+
+ +

Definition at line 70 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_NULL_TERMINATED
+
+
+ +

Definition at line 48 of file rpmutil.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define RPM_GNUC_PRINTF( format_idx,
 arg_idx 
)
+
+
+ +

Definition at line 67 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_PURE
+
+
+ +

Definition at line 33 of file rpmutil.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define RPM_GNUC_SCANF( format_idx,
 arg_idx 
)
+
+
+ +

Definition at line 68 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_UNUSED
+
+
+ +

Definition at line 72 of file rpmutil.h.

+ +
+
+ +
+
+ + + + +
#define RPM_GNUC_WARN_UNUSED_RESULT
+
+
+ +

Definition at line 96 of file rpmutil.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef void*(* rpmMemFailFunc)(size_t size, void *data)
+
+
+ +

Memory allocation failure callback prototype.

+

When registered through rpmSetMemFail(), this gets called if memory allocation through rmalloc() and friends fails. If the application can somehow recover memory here, it can return a newly allocated memory block of requested size, otherwise it must return NULL after performing it's own shutdown deeds or terminate itself.

+
Parameters:
+ + + +
sizeSize of allocation request in bytes
dataUser data (or NULL)
+
+
+
Returns:
Allocated memory block of requested size or NULL
+ +

Definition at line 145 of file rpmutil.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void* rcalloc (size_t nmemb,
size_t size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + +
void* rfree (void * ptr)
+
+
+ +
+
+ +
+
+ + + + + + + + +
void* rmalloc (size_t size)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
rpmMemFailFunc rpmSetMemFail (rpmMemFailFunc func,
void * data 
)
+
+
+ +

Set memory allocation failure callback.

+
Parameters:
+ + + +
funcAllocation failure callback function
dataUser data (or NULL)
+
+
+
Returns:
Previous callback function
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void* rrealloc (void * ptr,
size_t size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + +
char* rstrdup (const char * str)
+
+
+ +

Referenced by doSign().

+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmutil_8h__dep__incl.map b/doc/librpm/html/rpmutil_8h__dep__incl.map new file mode 100644 index 0000000..9da089d --- /dev/null +++ b/doc/librpm/html/rpmutil_8h__dep__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/doc/librpm/html/rpmutil_8h__dep__incl.md5 b/doc/librpm/html/rpmutil_8h__dep__incl.md5 new file mode 100644 index 0000000..ec3172a --- /dev/null +++ b/doc/librpm/html/rpmutil_8h__dep__incl.md5 @@ -0,0 +1 @@ +a90a52f2733ce44cf11c50141bedb489 \ No newline at end of file diff --git a/doc/librpm/html/rpmutil_8h__dep__incl.png b/doc/librpm/html/rpmutil_8h__dep__incl.png new file mode 100644 index 0000000..e6cedd6 Binary files /dev/null and b/doc/librpm/html/rpmutil_8h__dep__incl.png differ diff --git a/doc/librpm/html/rpmutil_8h__incl.map b/doc/librpm/html/rpmutil_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmutil_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmutil_8h__incl.md5 b/doc/librpm/html/rpmutil_8h__incl.md5 new file mode 100644 index 0000000..be5e92b --- /dev/null +++ b/doc/librpm/html/rpmutil_8h__incl.md5 @@ -0,0 +1 @@ +235e19b9e888690ad44e761fb3a1dc58 \ No newline at end of file diff --git a/doc/librpm/html/rpmutil_8h__incl.png b/doc/librpm/html/rpmutil_8h__incl.png new file mode 100644 index 0000000..dd9fbe9 Binary files /dev/null and b/doc/librpm/html/rpmutil_8h__incl.png differ diff --git a/doc/librpm/html/rpmutil_8h_source.html b/doc/librpm/html/rpmutil_8h_source.html new file mode 100644 index 0000000..ffa2c8e --- /dev/null +++ b/doc/librpm/html/rpmutil_8h_source.html @@ -0,0 +1,191 @@ + + + + +rpm: rpmutil.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmutil.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMUTIL_H
+00002 #define _RPMUTIL_H
+00003 
+00004 #include <unistd.h>
+00005 
+00006 /*
+00007  * Miscellanous utility macros:
+00008  * - portability wrappers for various gcc extensions like __attribute__()
+00009  * - ...
+00010  *
+00011  * Copied from glib, names replaced to avoid clashing with glib.
+00012  *
+00013  */
+00014 
+00015 /* Here we provide RPM_GNUC_EXTENSION as an alias for __extension__,
+00016  * where this is valid. This allows for warningless compilation of
+00017  * "long long" types even in the presence of '-ansi -pedantic'. 
+00018  */
+00019 #if     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
+00020 #  define RPM_GNUC_EXTENSION __extension__
+00021 #else
+00022 #  define RPM_GNUC_EXTENSION
+00023 #endif
+00024 
+00025 /* Provide macros to feature the GCC function attribute.
+00026  */
+00027 #if    __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+00028 #define RPM_GNUC_PURE                            \
+00029   __attribute__((__pure__))
+00030 #define RPM_GNUC_MALLOC                         \
+00031   __attribute__((__malloc__))
+00032 #else
+00033 #define RPM_GNUC_PURE
+00034 #define RPM_GNUC_MALLOC
+00035 #endif
+00036 
+00037 #if     (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
+00038 #define RPM_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
+00039 #define RPM_GNUC_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y)))
+00040 #else
+00041 #define RPM_GNUC_ALLOC_SIZE(x)
+00042 #define RPM_GNUC_ALLOC_SIZE2(x,y)
+00043 #endif
+00044 
+00045 #if     __GNUC__ >= 4
+00046 #define RPM_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
+00047 #else
+00048 #define RPM_GNUC_NULL_TERMINATED
+00049 #endif
+00050 
+00051 #if     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+00052 #define RPM_GNUC_PRINTF( format_idx, arg_idx )    \
+00053   __attribute__((__format__ (__printf__, format_idx, arg_idx)))
+00054 #define RPM_GNUC_SCANF( format_idx, arg_idx )     \
+00055   __attribute__((__format__ (__scanf__, format_idx, arg_idx)))
+00056 #define RPM_GNUC_FORMAT( arg_idx )                \
+00057   __attribute__((__format_arg__ (arg_idx)))
+00058 #define RPM_GNUC_NORETURN                         \
+00059   __attribute__((__noreturn__))
+00060 #define RPM_GNUC_CONST                            \
+00061   __attribute__((__const__))
+00062 #define RPM_GNUC_UNUSED                           \
+00063   __attribute__((__unused__))
+00064 #define RPM_GNUC_NO_INSTRUMENT                  \
+00065   __attribute__((__no_instrument_function__))
+00066 #else   /* !__GNUC__ */
+00067 #define RPM_GNUC_PRINTF( format_idx, arg_idx )
+00068 #define RPM_GNUC_SCANF( format_idx, arg_idx )
+00069 #define RPM_GNUC_FORMAT( arg_idx )
+00070 #define RPM_GNUC_NORETURN
+00071 #define RPM_GNUC_CONST
+00072 #define RPM_GNUC_UNUSED
+00073 #define RPM_GNUC_NO_INSTRUMENT
+00074 #endif  /* !__GNUC__ */
+00075 
+00076 #if    __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+00077 #define RPM_GNUC_DEPRECATED                            \
+00078   __attribute__((__deprecated__))
+00079 #else
+00080 #define RPM_GNUC_DEPRECATED
+00081 #endif /* __GNUC__ */
+00082 
+00083 #if     __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
+00084 #define RPM_GNUC_MAY_ALIAS __attribute__((may_alias))
+00085 #define RPM_GNUC_NONNULL( ... ) \
+00086   __attribute__((__nonnull__ (__VA_ARGS__)))
+00087 #else
+00088 #define RPM_GNUC_MAY_ALIAS
+00089 #define RPM_GNUC_NONNULL( ... )
+00090 #endif
+00091 
+00092 #if    __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+00093 #define RPM_GNUC_WARN_UNUSED_RESULT             \
+00094   __attribute__((warn_unused_result))
+00095 #else
+00096 #define RPM_GNUC_WARN_UNUSED_RESULT
+00097 #endif /* __GNUC__ */
+00098 
+00099 #if    __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
+00100 #  define RPM_GNUC_INTERNAL __attribute__((visibility("hidden")))
+00101 #else
+00102 #  define RPM_GNUC_INTERNAL
+00103 #endif
+00104 
+00105 
+00106 /* Guard C code in headers, while including them from C++ */
+00107 #ifdef  __cplusplus
+00108 # define RPM_BEGIN_DECLS  extern "C" {
+00109 # define RPM_END_DECLS    }
+00110 #else
+00111 # define RPM_BEGIN_DECLS
+00112 # define RPM_END_DECLS
+00113 #endif
+00114 
+00115 #ifdef __cplusplus
+00116 extern "C" {
+00117 #endif
+00118 
+00119 /* Rpm specific allocators which never return NULL but terminate on failure */
+00120 RPM_GNUC_MALLOC RPM_GNUC_ALLOC_SIZE(1)
+00121 void * rmalloc(size_t size);
+00122 
+00123 RPM_GNUC_MALLOC RPM_GNUC_ALLOC_SIZE2(1,2)
+00124 void * rcalloc(size_t nmemb, size_t size);
+00125 
+00126 RPM_GNUC_ALLOC_SIZE(2)
+00127 void * rrealloc(void *ptr, size_t size);
+00128 
+00129 char * rstrdup(const char *str);
+00130 
+00131 /* Rpm specific free() which returns NULL */
+00132 void * rfree(void *ptr);
+00133 
+00145 typedef void * (*rpmMemFailFunc) (size_t size, void *data);
+00146 
+00153 rpmMemFailFunc rpmSetMemFail(rpmMemFailFunc func, void *data);
+00154 
+00155 #ifdef __cplusplus
+00156 }
+00157 #endif
+00158 
+00159 #endif /* _RPMUTIL_H */
+
+
+ + + diff --git a/doc/librpm/html/rpmvf_8h.html b/doc/librpm/html/rpmvf_8h.html new file mode 100644 index 0000000..1c5c4c7 --- /dev/null +++ b/doc/librpm/html/rpmvf_8h.html @@ -0,0 +1,462 @@ + + + + +rpm: rpmvf.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmvf.h File Reference
+
+
+
#include <rpm/rpmtypes.h>
+
+Include dependency graph for rpmvf.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + +

+Defines

#define RPMVERIFY_ALL   ~(RPMVERIFY_NONE)
#define RPMVERIFY_FAILURES   (RPMVERIFY_LSTATFAIL|RPMVERIFY_READFAIL|RPMVERIFY_READLINKFAIL|RPMVERIFY_LGETFILECONFAIL)
#define VERIFY_ATTRS
#define VERIFY_ALL

+Typedefs

typedef rpmFlags rpmVerifyAttrs
typedef rpmFlags rpmVerifyFlags

+Enumerations

enum  rpmVerifyAttrs_e {
+  RPMVERIFY_NONE = 0, +RPMVERIFY_MD5 = (1 << 0), +RPMVERIFY_FILEDIGEST = (1 << 0), +RPMVERIFY_FILESIZE = (1 << 1), +
+  RPMVERIFY_LINKTO = (1 << 2), +RPMVERIFY_USER = (1 << 3), +RPMVERIFY_GROUP = (1 << 4), +RPMVERIFY_MTIME = (1 << 5), +
+  RPMVERIFY_MODE = (1 << 6), +RPMVERIFY_RDEV = (1 << 7), +RPMVERIFY_CAPS = (1 << 8), +RPMVERIFY_CONTEXTS = (1 << 15), +
+  RPMVERIFY_READLINKFAIL = (1 << 28), +RPMVERIFY_READFAIL = (1 << 29), +RPMVERIFY_LSTATFAIL = (1 << 30), +RPMVERIFY_LGETFILECONFAIL = (1 << 31) +
+ }
 Bit(s) for rpmVerifyFile() attributes and result. More...
enum  rpmVerifyFlags_e {
+  VERIFY_DEFAULT = 0, +VERIFY_MD5 = (1 << 0), +VERIFY_FILEDIGEST = (1 << 0), +VERIFY_SIZE = (1 << 1), +
+  VERIFY_LINKTO = (1 << 2), +VERIFY_USER = (1 << 3), +VERIFY_GROUP = (1 << 4), +VERIFY_MTIME = (1 << 5), +
+  VERIFY_MODE = (1 << 6), +VERIFY_RDEV = (1 << 7), +VERIFY_CAPS = (1 << 8), +VERIFY_CONTEXTS = (1 << 15), +
+  VERIFY_FILES = (1 << 16), +VERIFY_DEPS = (1 << 17), +VERIFY_SCRIPT = (1 << 18), +VERIFY_DIGEST = (1 << 19), +
+  VERIFY_SIGNATURE = (1 << 20), +VERIFY_PATCHES = (1 << 21), +VERIFY_HDRCHK = (1 << 22), +VERIFY_FOR_LIST = (1 << 23), +
+  VERIFY_FOR_STATE = (1 << 24), +VERIFY_FOR_DOCS = (1 << 25), +VERIFY_FOR_CONFIG = (1 << 26), +VERIFY_FOR_DUMPFILES = (1 << 27) +
+ }
 Bit(s) to control rpmVerify() operation. More...

+Functions

int rpmVerifyFile (const rpmts ts, rpmfi fi, rpmVerifyAttrs *res, rpmVerifyAttrs omitMask)
 Verify file attributes (including digest).
+

Detailed Description

+
Todo:
Add a more complete API...
+ +

Definition in file rpmvf.h.

+

Define Documentation

+ +
+
+ + + + +
#define RPMVERIFY_ALL   ~(RPMVERIFY_NONE)
+
+
+ +

Definition at line 41 of file rpmvf.h.

+ +
+
+ +
+
+ + + + +
#define RPMVERIFY_FAILURES   (RPMVERIFY_LSTATFAIL|RPMVERIFY_READFAIL|RPMVERIFY_READLINKFAIL|RPMVERIFY_LGETFILECONFAIL)
+
+
+ +

Definition at line 42 of file rpmvf.h.

+ +
+
+ +
+
+ + + + +
#define VERIFY_ALL
+
+
+Value: +

Definition at line 82 of file rpmvf.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
#define VERIFY_ATTRS
+
+ +
+

Typedef Documentation

+ +
+
+ + + + +
typedef rpmFlags rpmVerifyAttrs
+
+
+ +

Definition at line 39 of file rpmvf.h.

+ +
+
+ +
+
+ + + + +
typedef rpmFlags rpmVerifyFlags
+
+
+ +

Definition at line 77 of file rpmvf.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum rpmVerifyAttrs_e
+
+
+ +

Bit(s) for rpmVerifyFile() attributes and result.

+
Enumerator:
+ + + + + + + + + + + + + + + + +
RPMVERIFY_NONE  +
RPMVERIFY_MD5  +

from verify(md5) - obsolete

+
RPMVERIFY_FILEDIGEST  +

from verify(filedigest)

+
RPMVERIFY_FILESIZE  +

from verify(size)

+
RPMVERIFY_LINKTO  +

from verify(link)

+
RPMVERIFY_USER  +

from verify(user)

+
RPMVERIFY_GROUP  +

from verify(group)

+
RPMVERIFY_MTIME  +

from verify(mtime)

+
RPMVERIFY_MODE  +

from verify(mode)

+
RPMVERIFY_RDEV  +

from verify(rdev)

+
RPMVERIFY_CAPS  +

from verify(caps)

+
RPMVERIFY_CONTEXTS  +

verify: from --nocontexts

+
RPMVERIFY_READLINKFAIL  +

readlink failed

+
RPMVERIFY_READFAIL  +

file read failed

+
RPMVERIFY_LSTATFAIL  +

lstat failed

+
RPMVERIFY_LGETFILECONFAIL  +

lgetfilecon failed

+
+
+
+ +

Definition at line 17 of file rpmvf.h.

+ +
+
+ +
+
+ + + + +
enum rpmVerifyFlags_e
+
+
+ +

Bit(s) to control rpmVerify() operation.

+
Enumerator:
+ + + + + + + + + + + + + + + + + + + + + + + + +
VERIFY_DEFAULT  +
VERIFY_MD5  +

from --nomd5 - obsolete

+
VERIFY_FILEDIGEST  +

from --nofiledigest

+
VERIFY_SIZE  +

from --nosize

+
VERIFY_LINKTO  +

from --nolinkto

+
VERIFY_USER  +

from --nouser

+
VERIFY_GROUP  +

from --nogroup

+
VERIFY_MTIME  +

from --nomtime

+
VERIFY_MODE  +

from --nomode

+
VERIFY_RDEV  +

from --nodev

+
VERIFY_CAPS  +

from --nocaps

+
VERIFY_CONTEXTS  +

verify: from --nocontexts

+
VERIFY_FILES  +

verify: from --nofiles

+
VERIFY_DEPS  +

verify: from --nodeps

+
VERIFY_SCRIPT  +

verify: from --noscripts

+
VERIFY_DIGEST  +

verify: from --nodigest

+
VERIFY_SIGNATURE  +

verify: from --nosignature

+
VERIFY_PATCHES  +

verify: from --nopatches

+
VERIFY_HDRCHK  +

verify: from --nohdrchk

+
VERIFY_FOR_LIST  +

query: from --list

+
VERIFY_FOR_STATE  +

query: from --state

+
VERIFY_FOR_DOCS  +

query: from --docfiles

+
VERIFY_FOR_CONFIG  +

query: from --configfiles

+
VERIFY_FOR_DUMPFILES  +

query: from --dump

+
+
+
+ +

Definition at line 48 of file rpmvf.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rpmVerifyFile (const rpmts ts,
rpmfi fi,
rpmVerifyAttrsres,
rpmVerifyAttrs omitMask 
)
+
+
+ +

Verify file attributes (including digest).

+
Todo:
gnorpm and python bindings prevent this from being static.
+
Parameters:
+ + + +
tstransaction set
fifile info (with linked header and current file index)
+
+
+
Return values:
+ + +
*resbit(s) returned to indicate failure
+
+
+
Parameters:
+ + +
omitMaskbit(s) to disable verify checks
+
+
+
Returns:
0 on success (or not installed), 1 on error
+ +
+
+
+ + + diff --git a/doc/librpm/html/rpmvf_8h__incl.map b/doc/librpm/html/rpmvf_8h__incl.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/rpmvf_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/rpmvf_8h__incl.md5 b/doc/librpm/html/rpmvf_8h__incl.md5 new file mode 100644 index 0000000..5193105 --- /dev/null +++ b/doc/librpm/html/rpmvf_8h__incl.md5 @@ -0,0 +1 @@ +2b60558a09c4ece040b0f66875e5d0e6 \ No newline at end of file diff --git a/doc/librpm/html/rpmvf_8h__incl.png b/doc/librpm/html/rpmvf_8h__incl.png new file mode 100644 index 0000000..dda4983 Binary files /dev/null and b/doc/librpm/html/rpmvf_8h__incl.png differ diff --git a/doc/librpm/html/rpmvf_8h_source.html b/doc/librpm/html/rpmvf_8h_source.html new file mode 100644 index 0000000..2b8e106 --- /dev/null +++ b/doc/librpm/html/rpmvf_8h_source.html @@ -0,0 +1,133 @@ + + + + +rpm: rpmvf.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
rpmvf.h
+
+
+Go to the documentation of this file.
00001 #ifndef _RPMVF_H
+00002 #define _RPMVF_H
+00003 
+00008 #include <rpm/rpmtypes.h>
+00009 
+00010 #ifdef __cplusplus
+00011 extern "C" {
+00012 #endif
+00013 
+00017 enum rpmVerifyAttrs_e {
+00018     RPMVERIFY_NONE      = 0,            
+00019     RPMVERIFY_MD5       = (1 << 0),     
+00020     RPMVERIFY_FILEDIGEST= (1 << 0),     
+00021     RPMVERIFY_FILESIZE  = (1 << 1),     
+00022     RPMVERIFY_LINKTO    = (1 << 2),     
+00023     RPMVERIFY_USER      = (1 << 3),     
+00024     RPMVERIFY_GROUP     = (1 << 4),     
+00025     RPMVERIFY_MTIME     = (1 << 5),     
+00026     RPMVERIFY_MODE      = (1 << 6),     
+00027     RPMVERIFY_RDEV      = (1 << 7),     
+00028     RPMVERIFY_CAPS      = (1 << 8),     
+00029         /* bits 9-14 unused, reserved for rpmVerifyAttrs */
+00030     RPMVERIFY_CONTEXTS  = (1 << 15),    
+00031         /* bits 16-22 used in rpmVerifyFlags */
+00032         /* bits 23-27 used in rpmQueryFlags */
+00033     RPMVERIFY_READLINKFAIL= (1 << 28),  
+00034     RPMVERIFY_READFAIL  = (1 << 29),    
+00035     RPMVERIFY_LSTATFAIL = (1 << 30),    
+00036     RPMVERIFY_LGETFILECONFAIL   = (1 << 31)     
+00037 };
+00038 
+00039 typedef rpmFlags rpmVerifyAttrs;
+00040 
+00041 #define RPMVERIFY_ALL           ~(RPMVERIFY_NONE)
+00042 #define RPMVERIFY_FAILURES      \
+00043   (RPMVERIFY_LSTATFAIL|RPMVERIFY_READFAIL|RPMVERIFY_READLINKFAIL|RPMVERIFY_LGETFILECONFAIL)
+00044 
+00048 enum rpmVerifyFlags_e {
+00049     VERIFY_DEFAULT      = 0,            
+00050     VERIFY_MD5          = (1 << 0),     
+00051     VERIFY_FILEDIGEST   = (1 << 0),     
+00052     VERIFY_SIZE         = (1 << 1),     
+00053     VERIFY_LINKTO       = (1 << 2),     
+00054     VERIFY_USER         = (1 << 3),     
+00055     VERIFY_GROUP        = (1 << 4),     
+00056     VERIFY_MTIME        = (1 << 5),     
+00057     VERIFY_MODE         = (1 << 6),     
+00058     VERIFY_RDEV         = (1 << 7),     
+00059     VERIFY_CAPS         = (1 << 8),     
+00060         /* bits 9-14 unused, reserved for rpmVerifyAttrs */
+00061     VERIFY_CONTEXTS     = (1 << 15),    
+00062     VERIFY_FILES        = (1 << 16),    
+00063     VERIFY_DEPS         = (1 << 17),    
+00064     VERIFY_SCRIPT       = (1 << 18),    
+00065     VERIFY_DIGEST       = (1 << 19),    
+00066     VERIFY_SIGNATURE    = (1 << 20),    
+00067     VERIFY_PATCHES      = (1 << 21),    
+00068     VERIFY_HDRCHK       = (1 << 22),    
+00069     VERIFY_FOR_LIST     = (1 << 23),    
+00070     VERIFY_FOR_STATE    = (1 << 24),    
+00071     VERIFY_FOR_DOCS     = (1 << 25),    
+00072     VERIFY_FOR_CONFIG   = (1 << 26),    
+00073     VERIFY_FOR_DUMPFILES= (1 << 27)     
+00074         /* bits 28-31 used in rpmVerifyAttrs */
+00075 };
+00076 
+00077 typedef rpmFlags rpmVerifyFlags;
+00078 
+00079 #define VERIFY_ATTRS    \
+00080   ( VERIFY_FILEDIGEST | VERIFY_SIZE | VERIFY_LINKTO | VERIFY_USER | VERIFY_GROUP | \
+00081     VERIFY_MTIME | VERIFY_MODE | VERIFY_RDEV | VERIFY_CONTEXTS | VERIFY_CAPS )
+00082 #define VERIFY_ALL      \
+00083   ( VERIFY_ATTRS | VERIFY_FILES | VERIFY_DEPS | VERIFY_SCRIPT | VERIFY_DIGEST |\
+00084     VERIFY_SIGNATURE | VERIFY_HDRCHK )
+00085 
+00095 int rpmVerifyFile(const rpmts ts, rpmfi fi,
+00096                 rpmVerifyAttrs * res, rpmVerifyAttrs omitMask);
+00097 
+00098 
+00099 #ifdef __cplusplus
+00100 }
+00101 #endif
+00102 
+00103 #endif /* _RPMTYPES_H */
+
+
+ + + diff --git a/doc/librpm/html/structARGI__s.html b/doc/librpm/html/structARGI__s.html new file mode 100644 index 0000000..35b19a3 --- /dev/null +++ b/doc/librpm/html/structARGI__s.html @@ -0,0 +1,96 @@ + + + + +rpm: ARGI_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
ARGI_s Struct Reference
+
+
+ +

#include <argv.h>

+ + + + +

+Data Fields

unsigned nvals
ARGint_t vals
+

Detailed Description

+
+

Definition at line 19 of file argv.h.

+

Field Documentation

+ +
+
+ + + + +
unsigned ARGI_s::nvals
+
+
+ +

Definition at line 20 of file argv.h.

+ +
+
+ +
+
+ + + + +
ARGint_t ARGI_s::vals
+
+
+ +

Definition at line 21 of file argv.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktCdata__s.html b/doc/librpm/html/structpgpPktCdata__s.html new file mode 100644 index 0000000..0b04c65 --- /dev/null +++ b/doc/librpm/html/structpgpPktCdata__s.html @@ -0,0 +1,96 @@ + + + + +rpm: pgpPktCdata_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktCdata_s Struct Reference
+
+
+ +

#include <rpmpgp.h>

+ + + + +

+Data Fields

uint8_t compressalgo
uint8_t data [1]
+

Detailed Description

+
+

Definition at line 743 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktCdata_s::compressalgo
+
+
+ +

Definition at line 744 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktCdata_s::data[1]
+
+
+ +

Definition at line 745 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktEdata__s.html b/doc/librpm/html/structpgpPktEdata__s.html new file mode 100644 index 0000000..6dd98d3 --- /dev/null +++ b/doc/librpm/html/structpgpPktEdata__s.html @@ -0,0 +1,80 @@ + + + + +rpm: pgpPktEdata_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktEdata_s Struct Reference
+
+
+ +

#include <rpmpgp.h>

+ + + +

+Data Fields

uint8_t data [1]
+

Detailed Description

+
+

Definition at line 782 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktEdata_s::data[1]
+
+
+ +

Definition at line 783 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktKeyV3__s.html b/doc/librpm/html/structpgpPktKeyV3__s.html new file mode 100644 index 0000000..8f02bda --- /dev/null +++ b/doc/librpm/html/structpgpPktKeyV3__s.html @@ -0,0 +1,162 @@ + + + + +rpm: pgpPktKeyV3_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktKeyV3_s Struct Reference
+
+
+ +

5.5.1. + More...

+ +

#include <rpmpgp.h>

+ + + + + + +

+Data Fields

uint8_t version
pgpTime_t time
uint8_t valid [2]
uint8_t pubkey_algo
+

Detailed Description

+

5.5.1.

+

Key Packet Variants

+

5.5.1.1. Public Key Packet (Tag 6)

+

A Public Key packet starts a series of packets that forms an OpenPGP key (sometimes called an OpenPGP certificate).

+

5.5.1.2. Public Subkey Packet (Tag 14)

+

A Public Subkey packet (tag 14) has exactly the same format as a Public Key packet, but denotes a subkey. One or more subkeys may be associated with a top-level key. By convention, the top-level key provides signature services, and the subkeys provide encryption services.

+

Note: in PGP 2.6.x, tag 14 was intended to indicate a comment packet. This tag was selected for reuse because no previous version of PGP ever emitted comment packets but they did properly ignore them. Public Subkey packets are ignored by PGP 2.6.x and do not cause it to fail, providing a limited degree of backward compatibility.

+

5.5.1.3. Secret Key Packet (Tag 5)

+

A Secret Key packet contains all the information that is found in a Public Key packet, including the public key material, but also includes the secret key material after all the public key fields.

+

5.5.1.4. Secret Subkey Packet (Tag 7)

+

A Secret Subkey packet (tag 7) is the subkey analog of the Secret Key packet, and has exactly the same format.

+

5.5.2. Public Key Packet Formats

+

There are two versions of key-material packets. Version 3 packets were first generated by PGP 2.6. Version 2 packets are identical in format to Version 3 packets, but are generated by PGP 2.5 or before. V2 packets are deprecated and they MUST NOT be generated. PGP 5.0 introduced version 4 packets, with new fields and semantics. PGP 2.6.x will not accept key-material packets with versions greater than 3.

+

OpenPGP implementations SHOULD create keys with version 4 format. An implementation MAY generate a V3 key to ensure interoperability with old software; note, however, that V4 keys correct some security deficiencies in V3 keys. These deficiencies are described below. An implementation MUST NOT create a V3 key with a public key algorithm other than RSA.

+

A version 3 public key or public subkey packet contains:

+
    +
  • A one-octet version number (3).
  • +
  • A four-octet number denoting the time that the key was created.
  • +
  • A two-octet number denoting the time in days that this key is valid. If this number is zero, then it does not expire.
  • +
  • A one-octet number denoting the public key algorithm of this key
  • +
  • A series of multi-precision integers comprising the key material:
      +
    • a multiprecision integer (MPI) of RSA public modulus n;
    • +
    • an MPI of RSA public encryption exponent e.
    • +
    +
  • +
+

V3 keys SHOULD only be used for backward compatibility because of three weaknesses in them. First, it is relatively easy to construct a V3 key that has the same key ID as any other key because the key ID is simply the low 64 bits of the public modulus. Secondly, because the fingerprint of a V3 key hashes the key material, but not its length, which increases the opportunity for fingerprint collisions. Third, there are minor weaknesses in the MD5 hash algorithm that make developers prefer other algorithms. See below for a fuller discussion of key IDs and fingerprints.

+ +

Definition at line 606 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktKeyV3_s::pubkey_algo
+
+
+

public key algorithm.

+ +

Definition at line 610 of file rpmpgp.h.

+ +
+
+ +
+ +
+

time that the key was created.

+ +

Definition at line 608 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktKeyV3_s::valid[2]
+
+
+

time in days that this key is valid.

+ +

Definition at line 609 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktKeyV3_s::version
+
+
+

version number (3).

+ +

Definition at line 607 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktKeyV4__s.html b/doc/librpm/html/structpgpPktKeyV4__s.html new file mode 100644 index 0000000..a7673ec --- /dev/null +++ b/doc/librpm/html/structpgpPktKeyV4__s.html @@ -0,0 +1,145 @@ + + + + +rpm: pgpPktKeyV4_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktKeyV4_s Struct Reference
+
+
+ +

The version 4 format is similar to the version 3 format except for the absence of a validity period. + More...

+ +

#include <rpmpgp.h>

+ + + + + +

+Data Fields

uint8_t version
pgpTime_t time
uint8_t pubkey_algo
+

Detailed Description

+

The version 4 format is similar to the version 3 format except for the absence of a validity period.

+

This has been moved to the signature packet. In addition, fingerprints of version 4 keys are calculated differently from version 3 keys, as described in section "Enhanced Key Formats."

+

A version 4 packet contains:

+
    +
  • A one-octet version number (4).
  • +
  • A four-octet number denoting the time that the key was created.
  • +
  • A one-octet number denoting the public key algorithm of this key
  • +
  • A series of multi-precision integers comprising the key material. This algorithm-specific portion is:
  • +
+

Algorithm Specific Fields for RSA public keys:

+
    +
  • multiprecision integer (MPI) of RSA public modulus n;
  • +
  • MPI of RSA public encryption exponent e.
  • +
+

Algorithm Specific Fields for DSA public keys:

+
    +
  • MPI of DSA prime p;
  • +
  • MPI of DSA group order q (q is a prime divisor of p-1);
  • +
  • MPI of DSA group generator g;
  • +
  • MPI of DSA public key value y (= g**x where x is secret).
  • +
+

Algorithm Specific Fields for Elgamal public keys:

+
    +
  • MPI of Elgamal prime p;
  • +
  • MPI of Elgamal group generator g;
  • +
  • MPI of Elgamal public key value y (= g**x where x is secret).
  • +
+ +

Definition at line 644 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktKeyV4_s::pubkey_algo
+
+
+

public key algorithm.

+ +

Definition at line 647 of file rpmpgp.h.

+ +
+
+ +
+ +
+

time that the key was created.

+ +

Definition at line 646 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktKeyV4_s::version
+
+
+

version number (4).

+ +

Definition at line 645 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktLdata__s.html b/doc/librpm/html/structpgpPktLdata__s.html new file mode 100644 index 0000000..e14b4ff --- /dev/null +++ b/doc/librpm/html/structpgpPktLdata__s.html @@ -0,0 +1,112 @@ + + + + +rpm: pgpPktLdata_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktLdata_s Struct Reference
+
+
+ +

#include <rpmpgp.h>

+ + + + + +

+Data Fields

uint8_t format
uint8_t filenamelen
uint8_t filename [1]
+

Detailed Description

+
+

Definition at line 833 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktLdata_s::filename[1]
+
+
+ +

Definition at line 836 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktLdata_s::filenamelen
+
+
+ +

Definition at line 835 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktLdata_s::format
+
+
+ +

Definition at line 834 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktOnepass__s.html b/doc/librpm/html/structpgpPktOnepass__s.html new file mode 100644 index 0000000..25fb42e --- /dev/null +++ b/doc/librpm/html/structpgpPktOnepass__s.html @@ -0,0 +1,182 @@ + + + + +rpm: pgpPktOnepass_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktOnepass_s Struct Reference
+
+
+ +

5.4. + More...

+ +

#include <rpmpgp.h>

+ + + + + + + + +

+Data Fields

uint8_t version
uint8_t sigtype
uint8_t hash_algo
uint8_t pubkey_algo
pgpKeyID_t signid
uint8_t nested
+

Detailed Description

+

5.4.

+

One-Pass Signature Packets (Tag 4)

+

The One-Pass Signature packet precedes the signed data and contains enough information to allow the receiver to begin calculating any hashes needed to verify the signature. It allows the Signature Packet to be placed at the end of the message, so that the signer can compute the entire signed message in one pass.

+

A One-Pass Signature does not interoperate with PGP 2.6.x or earlier.

+

The body of this packet consists of:

+
    +
  • A one-octet version number. The current version is 3.
  • +
  • A one-octet signature type. Signature types are described in section 5.2.1.
  • +
  • A one-octet number describing the hash algorithm used.
  • +
  • A one-octet number describing the public key algorithm used.
  • +
  • An eight-octet number holding the key ID of the signing key.
  • +
  • A one-octet number holding a flag showing whether the signature is nested. A zero value indicates that the next packet is another One-Pass Signature packet that describes another signature to be applied to the same message data.
  • +
+

Note that if a message contains more than one one-pass signature, then the signature packets bracket the message; that is, the first signature packet after the message corresponds to the last one-pass packet and the final signature packet corresponds to the first one- pass packet.

+ +

Definition at line 525 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktOnepass_s::hash_algo
+
+
+

hash algorithm.

+ +

Definition at line 528 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktOnepass_s::nested
+
+
+ +

Definition at line 531 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktOnepass_s::pubkey_algo
+
+
+

public key algorithm.

+ +

Definition at line 529 of file rpmpgp.h.

+ +
+
+ +
+ +
+

key ID of signer.

+ +

Definition at line 530 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktOnepass_s::sigtype
+
+
+

signature type.

+ +

Definition at line 527 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktOnepass_s::version
+
+
+

version number (3).

+ +

Definition at line 526 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktPubkey__s.html b/doc/librpm/html/structpgpPktPubkey__s.html new file mode 100644 index 0000000..3e4cd46 --- /dev/null +++ b/doc/librpm/html/structpgpPktPubkey__s.html @@ -0,0 +1,137 @@ + + + + +rpm: pgpPktPubkey_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktPubkey_s Struct Reference
+
+
+ +

5.1. + More...

+ +

#include <rpmpgp.h>

+ + + + + +

+Data Fields

uint8_t version
pgpKeyID_t keyid
uint8_t algo
+

Detailed Description

+

5.1.

+

Public-Key Encrypted Session Key Packets (Tag 1)

+

A Public-Key Encrypted Session Key packet holds the session key used to encrypt a message. Zero or more Encrypted Session Key packets (either Public-Key or Symmetric-Key) may precede a Symmetrically Encrypted Data Packet, which holds an encrypted message. The message is encrypted with the session key, and the session key is itself encrypted and stored in the Encrypted Session Key packet(s). The Symmetrically Encrypted Data Packet is preceded by one Public-Key Encrypted Session Key packet for each OpenPGP key to which the message is encrypted. The recipient of the message finds a session key that is encrypted to their public key, decrypts the session key, and then uses the session key to decrypt the message.

+

The body of this packet consists of:

+
    +
  • A one-octet number giving the version number of the packet type. The currently defined value for packet version is 3. An implementation should accept, but not generate a version of 2, which is equivalent to V3 in all other respects.
  • +
  • An eight-octet number that gives the key ID of the public key that the session key is encrypted to.
  • +
  • A one-octet number giving the public key algorithm used.
  • +
  • A string of octets that is the encrypted session key. This string takes up the remainder of the packet, and its contents are dependent on the public key algorithm used.
  • +
+

Algorithm Specific Fields for RSA encryption

+
    +
  • multiprecision integer (MPI) of RSA encrypted value m**e mod n.
  • +
+

Algorithm Specific Fields for Elgamal encryption:

+
    +
  • MPI of Elgamal (Diffie-Hellman) value g**k mod p.
  • +
  • MPI of Elgamal (Diffie-Hellman) value m * y**k mod p.
  • +
+ +

Definition at line 106 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktPubkey_s::algo
+
+
+

public key algorithm used.

+ +

Definition at line 109 of file rpmpgp.h.

+ +
+
+ +
+ +
+

key ID of the public key for session key.

+ +

Definition at line 108 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktPubkey_s::version
+
+
+

version number (generate 3, accept 2).

+ +

Definition at line 107 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktSigV3__s.html b/doc/librpm/html/structpgpPktSigV3__s.html new file mode 100644 index 0000000..323f3cd --- /dev/null +++ b/doc/librpm/html/structpgpPktSigV3__s.html @@ -0,0 +1,228 @@ + + + + +rpm: pgpPktSigV3_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktSigV3_s Struct Reference
+
+
+ +

5.2.2. + More...

+ +

#include <rpmpgp.h>

+ + + + + + + + + + +

+Data Fields

uint8_t version
uint8_t hashlen
uint8_t sigtype
pgpTime_t time
pgpKeyID_t signid
uint8_t pubkey_algo
uint8_t hash_algo
uint8_t signhash16 [2]
+

Detailed Description

+

5.2.2.

+

Version 3 Signature Packet Format

+

The body of a version 3 Signature Packet contains:

+
    +
  • One-octet version number (3).
  • +
  • One-octet length of following hashed material. MUST be 5.
      +
    • One-octet signature type.
    • +
    • Four-octet creation time.
    • +
    +
  • +
  • Eight-octet key ID of signer.
  • +
  • One-octet public key algorithm.
  • +
  • One-octet hash algorithm.
  • +
  • Two-octet field holding left 16 bits of signed hash value.
  • +
  • One or more multi-precision integers comprising the signature.
  • +
+

Algorithm Specific Fields for RSA signatures:

+
    +
  • multiprecision integer (MPI) of RSA signature value m**d.
  • +
+

Algorithm Specific Fields for DSA signatures:

+
    +
  • MPI of DSA value r.
  • +
  • MPI of DSA value s.
  • +
+ +

Definition at line 290 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktSigV3_s::hash_algo
+
+
+

hash algorithm.

+ +

Definition at line 297 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSigV3_s::hashlen
+
+
+

length of following hashed material. MUST be 5.

+ +

Definition at line 292 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSigV3_s::pubkey_algo
+
+
+

public key algorithm.

+ +

Definition at line 296 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSigV3_s::signhash16[2]
+
+
+

left 16 bits of signed hash value.

+ +

Definition at line 298 of file rpmpgp.h.

+ +
+
+ +
+ +
+

key ID of signer.

+ +

Definition at line 295 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSigV3_s::sigtype
+
+
+

signature type.

+ +

Definition at line 293 of file rpmpgp.h.

+ +
+
+ +
+ +
+

4 byte creation time.

+ +

Definition at line 294 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSigV3_s::version
+
+
+

version number (3).

+ +

Definition at line 291 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktSigV4__s.html b/doc/librpm/html/structpgpPktSigV4__s.html new file mode 100644 index 0000000..bf14ad7 --- /dev/null +++ b/doc/librpm/html/structpgpPktSigV4__s.html @@ -0,0 +1,167 @@ + + + + +rpm: pgpPktSigV4_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktSigV4_s Struct Reference
+
+
+ +

5.2.3. + More...

+ +

#include <rpmpgp.h>

+ + + + + + + +

+Data Fields

uint8_t version
uint8_t sigtype
uint8_t pubkey_algo
uint8_t hash_algo
uint8_t hashlen [2]
+

Detailed Description

+

5.2.3.

+

Version 4 Signature Packet Format

+

The body of a version 4 Signature Packet contains:

+
    +
  • One-octet version number (4).
  • +
  • One-octet signature type.
  • +
  • One-octet public key algorithm.
  • +
  • One-octet hash algorithm.
  • +
  • Two-octet scalar octet count for following hashed subpacket data. Note that this is the length in octets of all of the hashed subpackets; a pointer incremented by this number will skip over the hashed subpackets.
  • +
  • Hashed subpacket data. (zero or more subpackets)
  • +
  • Two-octet scalar octet count for following unhashed subpacket data. Note that this is the length in octets of all of the unhashed subpackets; a pointer incremented by this number will skip over the unhashed subpackets.
  • +
  • Unhashed subpacket data. (zero or more subpackets)
  • +
  • Two-octet field holding left 16 bits of signed hash value.
  • +
  • One or more multi-precision integers comprising the signature.
  • +
+ +

Definition at line 322 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktSigV4_s::hash_algo
+
+
+

hash algorithm.

+ +

Definition at line 326 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSigV4_s::hashlen[2]
+
+
+

length of following hashed material.

+ +

Definition at line 327 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSigV4_s::pubkey_algo
+
+
+

public key algorithm.

+ +

Definition at line 325 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSigV4_s::sigtype
+
+
+

signature type.

+ +

Definition at line 324 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSigV4_s::version
+
+
+

version number (4).

+ +

Definition at line 323 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktSymkey__s.html b/doc/librpm/html/structpgpPktSymkey__s.html new file mode 100644 index 0000000..b38fde8 --- /dev/null +++ b/doc/librpm/html/structpgpPktSymkey__s.html @@ -0,0 +1,127 @@ + + + + +rpm: pgpPktSymkey_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktSymkey_s Struct Reference
+
+
+ +

5.3. + More...

+ +

#include <rpmpgp.h>

+ + + + + +

+Data Fields

uint8_t version
uint8_t symkey_algo
uint8_t s2k [1]
+

Detailed Description

+

5.3.

+

Symmetric-Key Encrypted Session-Key Packets (Tag 3)

+

The Symmetric-Key Encrypted Session Key packet holds the symmetric- key encryption of a session key used to encrypt a message. Zero or more Encrypted Session Key packets and/or Symmetric-Key Encrypted Session Key packets may precede a Symmetrically Encrypted Data Packet that holds an encrypted message. The message is encrypted with a session key, and the session key is itself encrypted and stored in the Encrypted Session Key packet or the Symmetric-Key Encrypted Session Key packet.

+

If the Symmetrically Encrypted Data Packet is preceded by one or more Symmetric-Key Encrypted Session Key packets, each specifies a passphrase that may be used to decrypt the message. This allows a message to be encrypted to a number of public keys, and also to one or more pass phrases. This packet type is new, and is not generated by PGP 2.x or PGP 5.0.

+

The body of this packet consists of:

+
    +
  • A one-octet version number. The only currently defined version is 4.
  • +
  • A one-octet number describing the symmetric algorithm used.
  • +
  • A string-to-key (S2K) specifier, length as defined above.
  • +
  • Optionally, the encrypted session key itself, which is decrypted with the string-to-key object.
  • +
+ +

Definition at line 490 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktSymkey_s::s2k[1]
+
+
+ +

Definition at line 493 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSymkey_s::symkey_algo
+
+
+ +

Definition at line 492 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
uint8_t pgpPktSymkey_s::version
+
+
+

version number (4).

+ +

Definition at line 491 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktTrust__s.html b/doc/librpm/html/structpgpPktTrust__s.html new file mode 100644 index 0000000..86d55c5 --- /dev/null +++ b/doc/librpm/html/structpgpPktTrust__s.html @@ -0,0 +1,80 @@ + + + + +rpm: pgpPktTrust_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktTrust_s Struct Reference
+
+
+ +

#include <rpmpgp.h>

+ + + +

+Data Fields

uint8_t flag
+

Detailed Description

+
+

Definition at line 852 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktTrust_s::flag
+
+
+ +

Definition at line 853 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structpgpPktUid__s.html b/doc/librpm/html/structpgpPktUid__s.html new file mode 100644 index 0000000..5792b2d --- /dev/null +++ b/doc/librpm/html/structpgpPktUid__s.html @@ -0,0 +1,80 @@ + + + + +rpm: pgpPktUid_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktUid_s Struct Reference
+
+
+ +

#include <rpmpgp.h>

+ + + +

+Data Fields

uint8_t userid [1]
+

Detailed Description

+
+

Definition at line 866 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
uint8_t pgpPktUid_s::userid[1]
+
+
+ +

Definition at line 867 of file rpmpgp.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structrpmBuildArguments__s.html b/doc/librpm/html/structrpmBuildArguments__s.html new file mode 100644 index 0000000..3e614a3 --- /dev/null +++ b/doc/librpm/html/structrpmBuildArguments__s.html @@ -0,0 +1,162 @@ + + + + +rpm: rpmBuildArguments_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmBuildArguments_s Struct Reference
+
+
+ +

Describe build request. + More...

+ +

#include <rpmbuild.h>

+ + + + + + + +

+Data Fields

rpmBuildPkgFlags pkgFlags
rpmBuildFlags buildAmount
char * buildRootOverride
char * cookie
const char * rootdir
+

Detailed Description

+

Describe build request.

+ +

Definition at line 53 of file rpmbuild.h.

+

Field Documentation

+ +
+ +
+

Bit(s) to control build execution.

+ +

Definition at line 55 of file rpmbuild.h.

+ +

Referenced by build(), buildArgCallback(), buildForTarget(), and main().

+ +
+
+ +
+ +
+

from --buildroot

+ +

Definition at line 56 of file rpmbuild.h.

+ +

Referenced by buildArgCallback(), buildForTarget(), and main().

+ +
+
+ +
+
+ + + + +
char* rpmBuildArguments_s::cookie
+
+
+

NULL for binary, ??? for source, rpm's

+ +

Definition at line 57 of file rpmbuild.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+

Bit(s) to control package generation.

+ +

Definition at line 54 of file rpmbuild.h.

+ +

Referenced by buildArgCallback().

+ +
+
+ +
+
+ + + + +
const char* rpmBuildArguments_s::rootdir
+
+
+ +

Definition at line 58 of file rpmbuild.h.

+ +

Referenced by main().

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structrpmInstallArguments__s.html b/doc/librpm/html/structrpmInstallArguments__s.html new file mode 100644 index 0000000..7ab42b8 --- /dev/null +++ b/doc/librpm/html/structrpmInstallArguments__s.html @@ -0,0 +1,219 @@ + + + + +rpm: rpmInstallArguments_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmInstallArguments_s Struct Reference
+
+
+ +

Describe database command line requests. + More...

+ +

#include <rpmcli.h>

+
+Collaboration diagram for rpmInstallArguments_s:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + +

+Data Fields

rpmtransFlags transFlags
rpmprobFilterFlags probFilter
rpmInstallFlags installInterfaceFlags
int numRelocations
int noDeps
int incldocs
rpmRelocationrelocations
char * prefix
+

Detailed Description

+

Describe database command line requests.

+ +

Definition at line 339 of file rpmcli.h.

+

Field Documentation

+ +
+ +
+ +

Definition at line 345 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+ +

Definition at line 342 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+ +

Definition at line 344 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+ +

Definition at line 343 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+ +

Definition at line 347 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+ +

Definition at line 341 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+ +

Definition at line 346 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+ +

Definition at line 340 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structrpmInstallArguments__s__coll__graph.map b/doc/librpm/html/structrpmInstallArguments__s__coll__graph.map new file mode 100644 index 0000000..1092b2c --- /dev/null +++ b/doc/librpm/html/structrpmInstallArguments__s__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/librpm/html/structrpmInstallArguments__s__coll__graph.md5 b/doc/librpm/html/structrpmInstallArguments__s__coll__graph.md5 new file mode 100644 index 0000000..1ea8224 --- /dev/null +++ b/doc/librpm/html/structrpmInstallArguments__s__coll__graph.md5 @@ -0,0 +1 @@ +9be1b1e11ab229e86ebae221773fab8e \ No newline at end of file diff --git a/doc/librpm/html/structrpmInstallArguments__s__coll__graph.png b/doc/librpm/html/structrpmInstallArguments__s__coll__graph.png new file mode 100644 index 0000000..37fb64e Binary files /dev/null and b/doc/librpm/html/structrpmInstallArguments__s__coll__graph.png differ diff --git a/doc/librpm/html/structrpmQVKArguments__s.html b/doc/librpm/html/structrpmQVKArguments__s.html new file mode 100644 index 0000000..df9dfc6 --- /dev/null +++ b/doc/librpm/html/structrpmQVKArguments__s.html @@ -0,0 +1,227 @@ + + + + +rpm: rpmQVKArguments_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmQVKArguments_s Struct Reference
+
+
+ +

Describe query/verify/signature command line operation. + More...

+ +

#include <rpmcli.h>

+
+Collaboration diagram for rpmQVKArguments_s:
+
+
Collaboration graph
+
[legend]
+ + + + + + + + + + +

+Data Fields

rpmQVSources qva_source
int qva_sourceCount
rpmQueryFlags qva_flags
rpmfileAttrs qva_fflags
QVF_t qva_showPackage
QSpecF_t qva_specQuery
char * qva_queryFormat
char qva_mode
+

Detailed Description

+

Describe query/verify/signature command line operation.

+ +

Definition at line 167 of file rpmcli.h.

+

Field Documentation

+ +
+ +
+

Bit(s) to filter on attribute.

+ +

Definition at line 171 of file rpmcli.h.

+ +
+
+ +
+ +
+

Bit(s) to control operation.

+ +

Definition at line 170 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
char rpmQVKArguments_s::qva_mode
+
+
+
    +
  • 'q' from --query, -q
  • +
  • 'Q' from --querytags
  • +
  • 'V' from --verify, -V
  • +
  • 'I' from --import
  • +
  • 'K' from --checksig, -K
  • +
+ +

Definition at line 177 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+

Format for headerFormat().

+ +

Definition at line 175 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+

Function to display iterator matches.

+ +

Definition at line 173 of file rpmcli.h.

+ +
+
+ +
+ +
+

Identify CLI arg type.

+ +

Definition at line 168 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+

Exclusive option check (>1 is error).

+ +

Definition at line 169 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+ +
+ +
+

Function to query spec file.

+ +

Definition at line 174 of file rpmcli.h.

+ +

Referenced by main().

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structrpmQVKArguments__s__coll__graph.map b/doc/librpm/html/structrpmQVKArguments__s__coll__graph.map new file mode 100644 index 0000000..8be6a30 --- /dev/null +++ b/doc/librpm/html/structrpmQVKArguments__s__coll__graph.map @@ -0,0 +1,2 @@ + + diff --git a/doc/librpm/html/structrpmQVKArguments__s__coll__graph.md5 b/doc/librpm/html/structrpmQVKArguments__s__coll__graph.md5 new file mode 100644 index 0000000..0747c90 --- /dev/null +++ b/doc/librpm/html/structrpmQVKArguments__s__coll__graph.md5 @@ -0,0 +1 @@ +65fa174b080ae21cd51fedef900df578 \ No newline at end of file diff --git a/doc/librpm/html/structrpmQVKArguments__s__coll__graph.png b/doc/librpm/html/structrpmQVKArguments__s__coll__graph.png new file mode 100644 index 0000000..8945d0d Binary files /dev/null and b/doc/librpm/html/structrpmQVKArguments__s__coll__graph.png differ diff --git a/doc/librpm/html/structrpmRelocation__s.html b/doc/librpm/html/structrpmRelocation__s.html new file mode 100644 index 0000000..b865e8d --- /dev/null +++ b/doc/librpm/html/structrpmRelocation__s.html @@ -0,0 +1,106 @@ + + + + +rpm: rpmRelocation_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmRelocation_s Struct Reference
+
+
+ +

We pass these around as an array with a sentinel. + More...

+ +

#include <rpmfi.h>

+ + + + +

+Data Fields

char * oldPath
char * newPath
+

Detailed Description

+

We pass these around as an array with a sentinel.

+ +

Definition at line 93 of file rpmfi.h.

+

Field Documentation

+ +
+
+ + + + +
char* rpmRelocation_s::newPath
+
+
+

NULL means to omit the file completely!

+ +

Definition at line 95 of file rpmfi.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
char* rpmRelocation_s::oldPath
+
+
+

NULL here evals to RPMTAG_DEFAULTPREFIX,

+ +

Definition at line 94 of file rpmfi.h.

+ +

Referenced by main().

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structrpmSignArgs.html b/doc/librpm/html/structrpmSignArgs.html new file mode 100644 index 0000000..79468d1 --- /dev/null +++ b/doc/librpm/html/structrpmSignArgs.html @@ -0,0 +1,96 @@ + + + + +rpm: rpmSignArgs Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmSignArgs Struct Reference
+
+
+ +

#include <rpmsign.h>

+ + + + +

+Data Fields

char * keyid
pgpHashAlgo hashalgo
+

Detailed Description

+
+

Definition at line 11 of file rpmsign.h.

+

Field Documentation

+ +
+ +
+ +

Definition at line 13 of file rpmsign.h.

+ +
+
+ +
+
+ + + + +
char* rpmSignArgs::keyid
+
+
+ +

Definition at line 12 of file rpmsign.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structrpmop__s.html b/doc/librpm/html/structrpmop__s.html new file mode 100644 index 0000000..098e476 --- /dev/null +++ b/doc/librpm/html/structrpmop__s.html @@ -0,0 +1,143 @@ + + + + +rpm: rpmop_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmop_s Struct Reference
+
+
+ +

Cumulative statistics for an operation. + More...

+ +

#include <rpmsw.h>

+
+Collaboration diagram for rpmop_s:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + +

+Data Fields

struct rpmsw_s begin
int count
size_t bytes
rpmtime_t usecs
+

Detailed Description

+

Cumulative statistics for an operation.

+ +

Definition at line 40 of file rpmsw.h.

+

Field Documentation

+ +
+
+ + + + +
struct rpmsw_s rpmop_s::begin
+
+
+

Starting time stamp.

+ +

Definition at line 41 of file rpmsw.h.

+ +
+
+ +
+
+ + + + +
size_t rpmop_s::bytes
+
+
+

Number of bytes transferred.

+ +

Definition at line 43 of file rpmsw.h.

+ +
+
+ +
+
+ + + + +
int rpmop_s::count
+
+
+

Number of operations.

+ +

Definition at line 42 of file rpmsw.h.

+ +
+
+ +
+ +
+

Number of ticks.

+ +

Definition at line 44 of file rpmsw.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structrpmop__s__coll__graph.map b/doc/librpm/html/structrpmop__s__coll__graph.map new file mode 100644 index 0000000..fc8c699 --- /dev/null +++ b/doc/librpm/html/structrpmop__s__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/librpm/html/structrpmop__s__coll__graph.md5 b/doc/librpm/html/structrpmop__s__coll__graph.md5 new file mode 100644 index 0000000..16f1140 --- /dev/null +++ b/doc/librpm/html/structrpmop__s__coll__graph.md5 @@ -0,0 +1 @@ +7f3754f0feeecc77bd6736fa5d1631c5 \ No newline at end of file diff --git a/doc/librpm/html/structrpmop__s__coll__graph.png b/doc/librpm/html/structrpmop__s__coll__graph.png new file mode 100644 index 0000000..3a83e7c Binary files /dev/null and b/doc/librpm/html/structrpmop__s__coll__graph.png differ diff --git a/doc/librpm/html/structrpmsw__s.html b/doc/librpm/html/structrpmsw__s.html new file mode 100644 index 0000000..cd0d36a --- /dev/null +++ b/doc/librpm/html/structrpmsw__s.html @@ -0,0 +1,127 @@ + + + + +rpm: rpmsw_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmsw_s Struct Reference
+
+
+ +

#include <rpmsw.h>

+ + + + + + + +

+Data Fields

union {
   struct timeval   tv
   unsigned long long int   ticks
   unsigned long int   tocks [2]
u
+

Detailed Description

+
+

Definition at line 29 of file rpmsw.h.

+

Field Documentation

+ +
+
+ + + + +
unsigned long long int rpmsw_s::ticks
+
+
+ +

Definition at line 32 of file rpmsw.h.

+ +
+
+ +
+
+ + + + +
unsigned long int rpmsw_s::tocks[2]
+
+
+ +

Definition at line 33 of file rpmsw.h.

+ +
+
+ +
+
+ + + + +
struct timeval rpmsw_s::tv
+
+
+ +

Definition at line 31 of file rpmsw.h.

+ +
+
+ +
+
+ + + + +
union { ... } rpmsw_s::u
+
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/structrpmtd__s.html b/doc/librpm/html/structrpmtd__s.html new file mode 100644 index 0000000..c8819a1 --- /dev/null +++ b/doc/librpm/html/structrpmtd__s.html @@ -0,0 +1,165 @@ + + + + +rpm: rpmtd_s Struct Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
rpmtd_s Struct Reference
+
+
+ +

Container for rpm tag data (from headers or extensions). + More...

+ +

#include <rpmtd.h>

+ + + + + + + + +

+Data Fields

rpm_tag_t tag
rpm_tagtype_t type
rpm_count_t count
rpm_data_t data
rpmtdFlags flags
int ix
+

Detailed Description

+

Container for rpm tag data (from headers or extensions).

+
Todo:
Make this opaque (at least outside rpm itself)
+ +

Definition at line 25 of file rpmtd.h.

+

Field Documentation

+ +
+ +
+ +

Definition at line 28 of file rpmtd.h.

+ +
+
+ +
+ +
+ +

Definition at line 29 of file rpmtd.h.

+ +
+
+ +
+ +
+ +

Definition at line 30 of file rpmtd.h.

+ +
+
+ +
+
+ + + + +
int rpmtd_s::ix
+
+
+ +

Definition at line 31 of file rpmtd.h.

+ +
+
+ +
+
+ + + + +
rpm_tag_t rpmtd_s::tag
+
+
+ +

Definition at line 26 of file rpmtd.h.

+ +
+
+ +
+ +
+ +

Definition at line 27 of file rpmtd.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + diff --git a/doc/librpm/html/system_8h.html b/doc/librpm/html/system_8h.html new file mode 100644 index 0000000..8997e68 --- /dev/null +++ b/doc/librpm/html/system_8h.html @@ -0,0 +1,726 @@ + + + + +rpm: system.h File Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
system.h File Reference
+
+
+
#include <sys/file.h>
+#include "rpmio/rpmutil.h"
+#include <dlfcn.h>
+
+Include dependency graph for system.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define dirent   direct
#define NLENGTH(direct)   ((direct)->d_namlen)
#define PATH_MAX   256
#define freecon(_c)
#define setfilecon(_fn, _c)   (-1)
#define lsetfilecon(_fn, _c)   (-1)
#define is_selinux_enabled()   (0)
#define matchpathcon_init(_fn)   (-1)
#define matchpathcon_fini()   (0)
#define matchpathcon(_fn, _fm, _c)   (-1)
#define selabel_lookup_raw(_hnd, _scon, _key, _type)   (-1)
#define selinux_file_context_path()   (0)
#define rpm_execcon(_v, _fn, _av, _envp)   (0)
#define xmalloc(_size)   rmalloc((_size))
#define xcalloc(_nmemb, _size)   rcalloc((_nmemb), (_size))
#define xrealloc(_ptr, _size)   rrealloc((_ptr), (_size))
#define xstrdup(_str)   rstrdup((_str))
#define _free(_ptr)   rfree((_ptr))
#define __progname   program_name
#define setprogname(pn)
#define _(Text)   Text
#define N_(Text)   Text

+Typedefs

typedef char * security_context_t

+Functions

char * stpcpy (char *dest, const char *src)
char * stpncpy (char *dest, const char *src, size_t n)

+Variables

const char * program_name
+

Detailed Description

+
+

Definition in file system.h.

+

Define Documentation

+ +
+
+ + + + + + + + +
#define _( Text)   Text
+
+ +
+ +
+
+ + + + +
#define __progname   program_name
+
+
+ +

Definition at line 118 of file system.h.

+ +

Referenced by argerror(), and main().

+ +
+
+ +
+
+ + + + + + + + +
#define _free( _ptr)   rfree((_ptr))
+
+
+ +

Definition at line 109 of file system.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + +
#define dirent   direct
+
+
+ +

Definition at line 52 of file system.h.

+ +
+
+ +
+
+ + + + + + + + +
#define freecon( _c)
+
+
+ +

Definition at line 85 of file system.h.

+ +
+
+ +
+
+ + + + + + + +
#define is_selinux_enabled()   (0)
+
+
+ +

Definition at line 90 of file system.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define lsetfilecon( _fn,
 _c 
)   (-1)
+
+
+ +

Definition at line 88 of file system.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define matchpathcon( _fn,
 _fm,
 _c 
)   (-1)
+
+
+ +

Definition at line 94 of file system.h.

+ +
+
+ +
+
+ + + + + + + +
#define matchpathcon_fini()   (0)
+
+
+ +

Definition at line 93 of file system.h.

+ +
+
+ +
+
+ + + + + + + + +
#define matchpathcon_init( _fn)   (-1)
+
+
+ +

Definition at line 92 of file system.h.

+ +
+
+ +
+
+ + + + + + + + +
#define N_( Text)   Text
+
+
+ +

Definition at line 135 of file system.h.

+ +
+
+ +
+
+ + + + + + + + +
#define NLENGTH( direct)   ((direct)->d_namlen)
+
+
+ +

Definition at line 53 of file system.h.

+ +
+
+ +
+
+ + + + +
#define PATH_MAX   256
+
+
+ +

Definition at line 75 of file system.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define rpm_execcon( _v,
 _fn,
 _av,
 _envp 
)   (0)
+
+
+ +

Definition at line 100 of file system.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define selabel_lookup_raw( _hnd,
 _scon,
 _key,
 _type 
)   (-1)
+
+
+ +

Definition at line 96 of file system.h.

+ +
+
+ +
+
+ + + + + + + +
#define selinux_file_context_path()   (0)
+
+
+ +

Definition at line 98 of file system.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define setfilecon( _fn,
 _c 
)   (-1)
+
+
+ +

Definition at line 87 of file system.h.

+ +
+
+ +
+
+ + + + + + + + +
#define setprogname( pn)
+
+
+Value:
{ if ((__progname = strrchr(pn, '/')) != NULL) __progname++; \
+    else __progname = pn;               \
+  }
+
+

Definition at line 119 of file system.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define xcalloc( _nmemb,
 _size 
)   rcalloc((_nmemb), (_size))
+
+
+ +

Definition at line 106 of file system.h.

+ +
+
+ +
+
+ + + + + + + + +
#define xmalloc( _size)   rmalloc((_size))
+
+
+ +

Definition at line 105 of file system.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define xrealloc( _ptr,
 _size 
)   rrealloc((_ptr), (_size))
+
+
+ +

Definition at line 107 of file system.h.

+ +

Referenced by main().

+ +
+
+ +
+
+ + + + + + + + +
#define xstrdup( _str)   rstrdup((_str))
+
+
+ +

Definition at line 108 of file system.h.

+ +

Referenced by buildArgCallback(), and buildForTarget().

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef char* security_context_t
+
+
+ +

Definition at line 83 of file system.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
char* stpcpy (char * dest,
const char * src 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
char* stpncpy (char * dest,
const char * src,
size_t n 
)
+
+
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
const char* program_name
+
+
+ +

Definition at line 4 of file rpm2cpio.c.

+ +
+
+
+ + + diff --git a/doc/librpm/html/system_8h__dep__incl.map b/doc/librpm/html/system_8h__dep__incl.map new file mode 100644 index 0000000..c9a4801 --- /dev/null +++ b/doc/librpm/html/system_8h__dep__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/doc/librpm/html/system_8h__dep__incl.md5 b/doc/librpm/html/system_8h__dep__incl.md5 new file mode 100644 index 0000000..0965846 --- /dev/null +++ b/doc/librpm/html/system_8h__dep__incl.md5 @@ -0,0 +1 @@ +40d53150b84989b5c22c9af83dd7c603 \ No newline at end of file diff --git a/doc/librpm/html/system_8h__dep__incl.png b/doc/librpm/html/system_8h__dep__incl.png new file mode 100644 index 0000000..e92e8f5 Binary files /dev/null and b/doc/librpm/html/system_8h__dep__incl.png differ diff --git a/doc/librpm/html/system_8h__incl.map b/doc/librpm/html/system_8h__incl.map new file mode 100644 index 0000000..a3e0ed6 --- /dev/null +++ b/doc/librpm/html/system_8h__incl.map @@ -0,0 +1,3 @@ + + + diff --git a/doc/librpm/html/system_8h__incl.md5 b/doc/librpm/html/system_8h__incl.md5 new file mode 100644 index 0000000..6184b3c --- /dev/null +++ b/doc/librpm/html/system_8h__incl.md5 @@ -0,0 +1 @@ +ef2b8287098d746ab45932fbd28cc9b5 \ No newline at end of file diff --git a/doc/librpm/html/system_8h__incl.png b/doc/librpm/html/system_8h__incl.png new file mode 100644 index 0000000..e3cf5f4 Binary files /dev/null and b/doc/librpm/html/system_8h__incl.png differ diff --git a/doc/librpm/html/system_8h_source.html b/doc/librpm/html/system_8h_source.html new file mode 100644 index 0000000..1cce027 --- /dev/null +++ b/doc/librpm/html/system_8h_source.html @@ -0,0 +1,200 @@ + + + + +rpm: system.h Source File + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+
system.h
+
+
+Go to the documentation of this file.
00001 
+00005 #ifndef H_SYSTEM
+00006 #define H_SYSTEM
+00007 
+00008 #ifdef HAVE_CONFIG_H
+00009 #include "config.h"
+00010 #endif
+00011 
+00012 #ifdef HAVE_SYS_PARAM_H
+00013 #include <sys/param.h>
+00014 #endif
+00015 
+00016 /* <unistd.h> should be included before any preprocessor test
+00017    of _POSIX_VERSION.  */
+00018 #ifdef HAVE_UNISTD_H
+00019 #include <unistd.h>
+00020 #if !defined(__GLIBC__)
+00021 #ifdef __APPLE__
+00022 #include <crt_externs.h>
+00023 #define environ (*_NSGetEnviron())
+00024 #else
+00025 extern char ** environ;
+00026 #endif /* __APPLE__ */
+00027 #endif
+00028 #endif
+00029 
+00030 #if !defined(HAVE_STPCPY)
+00031 char * stpcpy(char * dest, const char * src);
+00032 #endif
+00033 
+00034 #if !defined(HAVE_STPNCPY)
+00035 char * stpncpy(char * dest, const char * src, size_t n);
+00036 #endif
+00037 
+00038 #if HAVE___SECURE_GETENV
+00039 #define getenv(_s)      __secure_getenv(_s)
+00040 #endif
+00041 
+00042 #ifdef HAVE_FCNTL_H
+00043 #include <fcntl.h>
+00044 #else
+00045 #include <sys/file.h>
+00046 #endif
+00047 
+00048 #ifdef HAVE_DIRENT_H
+00049 # include <dirent.h>
+00050 # define NLENGTH(direct) (strlen((direct)->d_name))
+00051 #else /* not HAVE_DIRENT_H */
+00052 # define dirent direct
+00053 # define NLENGTH(direct) ((direct)->d_namlen)
+00054 # ifdef HAVE_SYS_NDIR_H
+00055 #  include <sys/ndir.h>
+00056 # endif /* HAVE_SYS_NDIR_H */
+00057 # ifdef HAVE_SYS_DIR_H
+00058 #  include <sys/dir.h>
+00059 # endif /* HAVE_SYS_DIR_H */
+00060 # ifdef HAVE_NDIR_H
+00061 #  include <ndir.h>
+00062 # endif /* HAVE_NDIR_H */
+00063 #endif /* HAVE_DIRENT_H */
+00064 
+00065 #if HAVE_LIMITS_H
+00066 #include <limits.h>
+00067 #endif
+00068 
+00069 #ifndef PATH_MAX
+00070 #ifdef _POSIX_PATH_MAX
+00071 #define PATH_MAX _POSIX_PATH_MAX
+00072 #elif defined MAXPATHLEN
+00073 #define PATH_MAX MAXPATHLEN
+00074 #else
+00075 #define PATH_MAX 256
+00076 #endif
+00077 #endif
+00078 
+00079 #if WITH_SELINUX
+00080 #include <selinux/selinux.h>
+00081 #include <selinux/label.h>
+00082 #else
+00083 typedef char * security_context_t;
+00084 
+00085 #define freecon(_c)
+00086 
+00087 #define setfilecon(_fn, _c)     (-1)
+00088 #define lsetfilecon(_fn, _c)    (-1)
+00089 
+00090 #define is_selinux_enabled()    (0)
+00091 
+00092 #define matchpathcon_init(_fn)                  (-1)
+00093 #define matchpathcon_fini()                     (0)
+00094 #define matchpathcon(_fn, _fm, _c)              (-1)
+00095 
+00096 #define selabel_lookup_raw(_hnd, _scon, _key,_type)     (-1)
+00097 
+00098 #define selinux_file_context_path() (0)
+00099 
+00100 #define rpm_execcon(_v, _fn, _av, _envp)        (0)
+00101 #endif
+00102 
+00103 #include "rpmio/rpmutil.h"
+00104 /* compatibility macros to avoid a mass-renaming all over the codebase */
+00105 #define xmalloc(_size) rmalloc((_size))
+00106 #define xcalloc(_nmemb, _size) rcalloc((_nmemb), (_size))
+00107 #define xrealloc(_ptr, _size) rrealloc((_ptr), (_size))
+00108 #define xstrdup(_str) rstrdup((_str))
+00109 #define _free(_ptr) rfree((_ptr))
+00110 
+00111 /* Retrofit glibc __progname */
+00112 #if defined __GLIBC__ && __GLIBC__ >= 2
+00113 #if __GLIBC_MINOR__ >= 1
+00114 #define __progname      __assert_program_name
+00115 #endif
+00116 #define setprogname(pn)
+00117 #else
+00118 #define __progname      program_name
+00119 #define setprogname(pn) \
+00120   { if ((__progname = strrchr(pn, '/')) != NULL) __progname++; \
+00121     else __progname = pn;               \
+00122   }
+00123 #endif
+00124 extern const char *__progname;
+00125 
+00126 /* Take care of NLS matters.  */
+00127 #if ENABLE_NLS
+00128 # include <locale.h>
+00129 # include <libintl.h>
+00130 # define _(Text) dgettext (PACKAGE, Text)
+00131 #else
+00132 # define _(Text) Text
+00133 #endif
+00134 
+00135 #define N_(Text) Text
+00136 
+00137 /* ============== from misc/miscfn.h */
+00138 
+00139 #if !defined(USE_GNU_GLOB) 
+00140 #if HAVE_FNMATCH_H
+00141 #include <fnmatch.h>
+00142 #endif
+00143 
+00144 #if HAVE_GLOB_H 
+00145 #include <glob.h>
+00146 #endif
+00147 #else
+00148 #include "misc/glob.h"
+00149 #include "misc/fnmatch.h"
+00150 #endif
+00151 
+00152 #include <dlfcn.h>
+00153 
+00154 #endif  /* H_SYSTEM */
+
+
+ + + diff --git a/doc/librpm/html/tab_a.png b/doc/librpm/html/tab_a.png new file mode 100644 index 0000000..2d99ef2 Binary files /dev/null and b/doc/librpm/html/tab_a.png differ diff --git a/doc/librpm/html/tab_b.png b/doc/librpm/html/tab_b.png new file mode 100644 index 0000000..b2c3d2b Binary files /dev/null and b/doc/librpm/html/tab_b.png differ diff --git a/doc/librpm/html/tab_h.png b/doc/librpm/html/tab_h.png new file mode 100644 index 0000000..c11f48f Binary files /dev/null and b/doc/librpm/html/tab_h.png differ diff --git a/doc/librpm/html/tab_s.png b/doc/librpm/html/tab_s.png new file mode 100644 index 0000000..978943a Binary files /dev/null and b/doc/librpm/html/tab_s.png differ diff --git a/doc/librpm/html/tabs.css b/doc/librpm/html/tabs.css new file mode 100644 index 0000000..2192056 --- /dev/null +++ b/doc/librpm/html/tabs.css @@ -0,0 +1,59 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/doc/librpm/html/todo.html b/doc/librpm/html/todo.html new file mode 100644 index 0000000..2424e16 --- /dev/null +++ b/doc/librpm/html/todo.html @@ -0,0 +1,223 @@ + + + + +rpm: Todo List + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ +
+
+
+
Todo List
+
+
+

+
+
Global expandMacros (void *spec, rpmMacroContext mc, char *sbuf, size_t slen)
+
Eliminate from API.
+
+

+
+
Global headerMergeLegacySigs (Header h, const Header sigh)
+
Remove headerSort() through headerInitIterator() modifies sig.
+
+

+
+
Global headerPutString (Header h, rpmTagVal tag, const char *val)
+
Make doxygen group these meaningfully.
+
+

+
+
Global headerRegenSigHeader (const Header h, int noArchiveSize)
+
Remove headerSort() through headerInitIterator() modifies h.
+
+

+
+
Global pgpExtractPubkeyFingerprint (const char *b64pkt, pgpKeyID_t keyid)
+
V3 non-RSA public keys not implemented.
+
+

+
+
Global pgpHashAlgo
+
Add SHA256.
+
+

+
+
Global pgpPubkeyFingerprint (const uint8_t *pkt, size_t pktlen, pgpKeyID_t keyid)
+
V3 non-RSA public keys not implemented.
+
+

+
+
Global RPM_BIN_ARRAY_TYPE
+
Implement, kinda like RPM_STRING_ARRAY_TYPE for known (but variable) length binary data.
+
+

+
+
Global rpm_machtable_e
+
Eliminate from API.
+
+

+
+
Global RPM_XREF_TYPE
+
Implement, intent is to to carry a (???,tagNum,valNum) cross reference to retrieve data from other tags.
+
+

+
+
Global rpmcliQuery (rpmts ts, QVA_t qva, ARGV_const_t argv)
+
hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union?
+
+

+
+
Global rpmcliVerify (rpmts ts, QVA_t qva, ARGV_const_t argv)
+
hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union?
+
+

+
+
Global rpmfcPrint (const char *msg, rpmfc fc, FILE *fp)
+
Remove debugging routine.
+
+

+
+
Global RPMFILE_SPECFILE
+
(unnecessary) marks 1st file in srpm.
+
+

+
+
Global rpmFreeRpmrc (void)
+
Eliminate from API.
+
+

+
+
Global rpmGetArchInfo (const char **name, int *num)
+
Generalize to extract arch component from target_platform macro.
+
+

+
+
Global rpmGetOsInfo (const char **name, int *num)
+
Generalize to extract os component from target_platform macro.
+
+

+
+
Global rpmInstall (rpmts ts, struct rpmInstallArguments_s *ia, ARGV_t fileArgv)
+
fileArgv is modified on errors, should be ARGV_const_t
+
+

+
+
Global rpmlogClose (void)
+
Implement.
+
+

+
+
Global rpmlogOpen (const char *ident, int option, int facility)
+
Implement.
+
+

+
+
Global rpmMachineScore (int type, const char *name)
+
Rewrite to use RE's against config.guess target platform output.
+
+

+
+
Global rpmprobFilterFlags_e
+
Generalize filter mechanism.
+
+

+
+
Global rpmProblemGetStr (rpmProblem prob)
+
needs a better name
+
+

+
+
Global rpmQueryFlags_e
+
Merge rpmQueryFlags, rpmVerifyFlags, and rpmVerifyAttrs?.
+
+

+
+
Global rpmQVSources_e
+
Reassign to tag values.
+
+

+
+
Global rpmSetTables (int archTable, int osTable)
+
Eliminate from API. #
+
+

+
+
Global rpmShowProgress (const void *arg, const rpmCallbackType what, const rpm_loff_t amount, const rpm_loff_t total, fnpyKey key, void *data)
+
Remove headerFormat() from the progress callback.
+
+

+
+
Global rpmSpecParse (const char *specFile, rpmSpecFlags flags, const char *buildRoot)
+
Eliminate buildRoot from here, its a build, not spec property
+
+

+
+
Global rpmTag
+
: Somehow supply type
+
+

+
+
Class rpmtd_s
+
Make this opaque (at least outside rpm itself)
+
+

+
+
Global rpmtePkgFileSize (rpmte te)
+
Signature header is estimated at 256b.
+
+

+
+
Global rpmtsImportPubkey (rpmts ts, const unsigned char *pkt, size_t pktlen)
+
Implicit --update policy for gpg-pubkey headers.
+
+

+
+
File rpmtypes.h
+
The grouping needs love to look sane...
+
+

+
+
Global rpmVerifyFile (const rpmts ts, rpmfi fi, rpmVerifyAttrs *res, rpmVerifyAttrs omitMask)
+
gnorpm and python bindings prevent this from being static.
+
+

+
+
File rpmvf.h
+
Add a more complete API...
+
+

+
+
Global showQueryPackage (QVA_t qva, rpmts ts, Header h)
+
Devise a meaningful return code.
+
+
+ + + diff --git a/doc/librpm/html/unionpgpPktKey__u.html b/doc/librpm/html/unionpgpPktKey__u.html new file mode 100644 index 0000000..cb50095 --- /dev/null +++ b/doc/librpm/html/unionpgpPktKey__u.html @@ -0,0 +1,138 @@ + + + + +rpm: pgpPktKey_u Union Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktKey_u Union Reference
+
+
+ +

5.5.3. + More...

+ +

#include <rpmpgp.h>

+
+Collaboration diagram for pgpPktKey_u:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Data Fields

struct pgpPktKeyV3_s v3
struct pgpPktKeyV4_s v4
+

Detailed Description

+

5.5.3.

+

Secret Key Packet Formats

+

The Secret Key and Secret Subkey packets contain all the data of the Public Key and Public Subkey packets, with additional algorithm- specific secret key data appended, in encrypted form.

+

The packet contains:

+
    +
  • A Public Key or Public Subkey packet, as described above
  • +
  • One octet indicating string-to-key usage conventions. 0 indicates that the secret key data is not encrypted. 255 indicates that a string-to-key specifier is being given. Any other value is a symmetric-key encryption algorithm specifier.
  • +
  • [Optional] If string-to-key usage octet was 255, a one-octet symmetric encryption algorithm.
  • +
  • [Optional] If string-to-key usage octet was 255, a string-to-key specifier. The length of the string-to-key specifier is implied by its type, as described above.
  • +
  • [Optional] If secret data is encrypted, eight-octet Initial Vector (IV).
  • +
  • Encrypted multi-precision integers comprising the secret key data. These algorithm-specific fields are as described below.
  • +
  • Two-octet checksum of the plaintext of the algorithm-specific portion (sum of all octets, mod 65536).
  • +
+

Algorithm Specific Fields for RSA secret keys:

+
    +
  • multiprecision integer (MPI) of RSA secret exponent d.
  • +
  • MPI of RSA secret prime value p.
  • +
  • MPI of RSA secret prime value q (p < q).
  • +
  • MPI of u, the multiplicative inverse of p, mod q.
  • +
+

Algorithm Specific Fields for DSA secret keys:

+
    +
  • MPI of DSA secret exponent x.
  • +
+

Algorithm Specific Fields for Elgamal secret keys:

+
    +
  • MPI of Elgamal secret exponent x.
  • +
+

Secret MPI values can be encrypted using a passphrase. If a string- to-key specifier is given, that describes the algorithm for converting the passphrase to a key, else a simple MD5 hash of the passphrase is used. Implementations SHOULD use a string-to-key specifier; the simple hash is for backward compatibility. The cipher for encrypting the MPIs is specified in the secret key packet.

+

Encryption/decryption of the secret data is done in CFB mode using the key created from the passphrase and the Initial Vector from the packet. A different mode is used with V3 keys (which are only RSA) than with other key formats. With V3 keys, the MPI bit count prefix (i.e., the first two octets) is not encrypted. Only the MPI non- prefix data is encrypted. Furthermore, the CFB state is resynchronized at the beginning of each new MPI value, so that the CFB block boundary is aligned with the start of the MPI data.

+

With V4 keys, a simpler method is used. All secret MPI values are encrypted in CFB mode, including the MPI bitcount prefix.

+

The 16-bit checksum that follows the algorithm-specific portion is the algebraic sum, mod 65536, of the plaintext of all the algorithm- specific octets (including MPI prefix and data). With V3 keys, the checksum is stored in the clear. With V4 keys, the checksum is encrypted like the algorithm-specific data. This value is used to check that the passphrase was correct.

+ +

Definition at line 714 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
struct pgpPktKeyV3_s pgpPktKey_u::v3
+
+
+ +

Definition at line 715 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
struct pgpPktKeyV4_s pgpPktKey_u::v4
+
+
+ +

Definition at line 716 of file rpmpgp.h.

+ +
+
+
The documentation for this union was generated from the following file: +
+ + + diff --git a/doc/librpm/html/unionpgpPktKey__u__coll__graph.map b/doc/librpm/html/unionpgpPktKey__u__coll__graph.map new file mode 100644 index 0000000..ce3330f --- /dev/null +++ b/doc/librpm/html/unionpgpPktKey__u__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doc/librpm/html/unionpgpPktKey__u__coll__graph.md5 b/doc/librpm/html/unionpgpPktKey__u__coll__graph.md5 new file mode 100644 index 0000000..c3b4d39 --- /dev/null +++ b/doc/librpm/html/unionpgpPktKey__u__coll__graph.md5 @@ -0,0 +1 @@ +c1cc36157104bf44f98973132d323746 \ No newline at end of file diff --git a/doc/librpm/html/unionpgpPktKey__u__coll__graph.png b/doc/librpm/html/unionpgpPktKey__u__coll__graph.png new file mode 100644 index 0000000..b3ba3ba Binary files /dev/null and b/doc/librpm/html/unionpgpPktKey__u__coll__graph.png differ diff --git a/doc/librpm/html/unionpgpPktPre__u.html b/doc/librpm/html/unionpgpPktPre__u.html new file mode 100644 index 0000000..15f0892 --- /dev/null +++ b/doc/librpm/html/unionpgpPktPre__u.html @@ -0,0 +1,241 @@ + + + + +rpm: pgpPktPre_u Union Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktPre_u Union Reference
+
+
+ +

#include <rpmpgp.h>

+
+Collaboration diagram for pgpPktPre_u:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + +

+Data Fields

pgpPktPubkey pubkey
pgpPktSig sig
pgpPktSymkey symkey
pgpPktOnepass onepass
pgpPktKey key
pgpPktCdata cdata
pgpPktEdata edata
pgpPktLdata ldata
pgpPktTrust tdata
pgpPktUid uid
+

Detailed Description

+
+

Definition at line 872 of file rpmpgp.h.

+

Field Documentation

+ +
+ +
+

5.6. Compressed Data

+ +

Definition at line 878 of file rpmpgp.h.

+ +
+
+ +
+ +
+

5.7. Symmetrically Encrypted Data 5.8. Marker (obsolete)

+ +

Definition at line 879 of file rpmpgp.h.

+ +
+
+ +
+ +
+

5.5. Key Material

+ +

Definition at line 877 of file rpmpgp.h.

+ +
+
+ +
+ +
+

5.9. Literal Data

+ +

Definition at line 881 of file rpmpgp.h.

+ +
+
+ +
+ +
+

5.4. One-Pass Signature

+ +

Definition at line 876 of file rpmpgp.h.

+ +
+
+ +
+ +
+

5.1. Public-Key Encrypted Session Key

+ +

Definition at line 873 of file rpmpgp.h.

+ +
+
+ +
+ +
+

5.2. Signature

+ +

Definition at line 874 of file rpmpgp.h.

+ +
+
+ +
+ +
+

5.3. Symmetric-Key Encrypted Session-Key

+ +

Definition at line 875 of file rpmpgp.h.

+ +
+
+ +
+ +
+

5.10. Trust

+ +

Definition at line 882 of file rpmpgp.h.

+ +
+
+ +
+ +
+

5.11. User ID

+ +

Definition at line 883 of file rpmpgp.h.

+ +
+
+
The documentation for this union was generated from the following file: +
+ + + diff --git a/doc/librpm/html/unionpgpPktPre__u__coll__graph.map b/doc/librpm/html/unionpgpPktPre__u__coll__graph.map new file mode 100644 index 0000000..77c5f5d --- /dev/null +++ b/doc/librpm/html/unionpgpPktPre__u__coll__graph.map @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/doc/librpm/html/unionpgpPktPre__u__coll__graph.md5 b/doc/librpm/html/unionpgpPktPre__u__coll__graph.md5 new file mode 100644 index 0000000..8a6f86d --- /dev/null +++ b/doc/librpm/html/unionpgpPktPre__u__coll__graph.md5 @@ -0,0 +1 @@ +0a26608940a83d3247cb3f0fc5eb711c \ No newline at end of file diff --git a/doc/librpm/html/unionpgpPktPre__u__coll__graph.png b/doc/librpm/html/unionpgpPktPre__u__coll__graph.png new file mode 100644 index 0000000..194ccbf Binary files /dev/null and b/doc/librpm/html/unionpgpPktPre__u__coll__graph.png differ diff --git a/doc/librpm/html/unionpgpPktSig__u.html b/doc/librpm/html/unionpgpPktSig__u.html new file mode 100644 index 0000000..1b06d72 --- /dev/null +++ b/doc/librpm/html/unionpgpPktSig__u.html @@ -0,0 +1,112 @@ + + + + +rpm: pgpPktSig_u Union Reference + + + + + +
+
+ + + + + + +
+
rpm 4.9.1
+
+
+ + +
+
+ +
+
pgpPktSig_u Union Reference
+
+
+ +

5.2. + More...

+ +

#include <rpmpgp.h>

+
+Collaboration diagram for pgpPktSig_u:
+
+
Collaboration graph
+ + +
[legend]
+ + + + +

+Data Fields

struct pgpPktSigV3_s v3
struct pgpPktSigV4_s v4
+

Detailed Description

+

5.2.

+

Signature Packet (Tag 2)

+

A signature packet describes a binding between some public key and some data. The most common signatures are a signature of a file or a block of text, and a signature that is a certification of a user ID.

+

Two versions of signature packets are defined. Version 3 provides basic signature information, while version 4 provides an expandable format with subpackets that can specify more information about the signature. PGP 2.6.x only accepts version 3 signatures.

+

Implementations MUST accept V3 signatures. Implementations SHOULD generate V4 signatures. Implementations MAY generate a V3 signature that can be verified by PGP 2.6.x.

+

Note that if an implementation is creating an encrypted and signed message that is encrypted to a V3 key, it is reasonable to create a V3 signature.

+ +

Definition at line 457 of file rpmpgp.h.

+

Field Documentation

+ +
+
+ + + + +
struct pgpPktSigV3_s pgpPktSig_u::v3
+
+
+ +

Definition at line 458 of file rpmpgp.h.

+ +
+
+ +
+
+ + + + +
struct pgpPktSigV4_s pgpPktSig_u::v4
+
+
+ +

Definition at line 459 of file rpmpgp.h.

+ +
+
+
The documentation for this union was generated from the following file: +
+ + + diff --git a/doc/librpm/html/unionpgpPktSig__u__coll__graph.map b/doc/librpm/html/unionpgpPktSig__u__coll__graph.map new file mode 100644 index 0000000..adf3480 --- /dev/null +++ b/doc/librpm/html/unionpgpPktSig__u__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doc/librpm/html/unionpgpPktSig__u__coll__graph.md5 b/doc/librpm/html/unionpgpPktSig__u__coll__graph.md5 new file mode 100644 index 0000000..0664fb9 --- /dev/null +++ b/doc/librpm/html/unionpgpPktSig__u__coll__graph.md5 @@ -0,0 +1 @@ +be692d45071da64721864ed6ade8018c \ No newline at end of file diff --git a/doc/librpm/html/unionpgpPktSig__u__coll__graph.png b/doc/librpm/html/unionpgpPktSig__u__coll__graph.png new file mode 100644 index 0000000..028ce19 Binary files /dev/null and b/doc/librpm/html/unionpgpPktSig__u__coll__graph.png differ diff --git a/doc/manual/builddependencies b/doc/manual/builddependencies new file mode 100644 index 0000000..a3938fd --- /dev/null +++ b/doc/manual/builddependencies @@ -0,0 +1,178 @@ +/*! \page builddependencies Generating build dependencies automatically + +As we start updating packages for the next Red Hat distro, I'd like to see +packages start to make use of build dependencies. Basically build +dependencies are just like install dependencies, but they are resolved +against the build system just after parsing the spec file. Syntactically, +build dependencies look just like install dependencies in a spec file with +"Build" prefixed: + +\verbatim + BuildPreReq: + BuildRequires: + BuildConflicts: +\endverbatim + +All the above dependencies include versions, files, existence/range tests, etc. +The build dependency checking can also be turned off with --nodeps if necessary +just like install dependency checking can. Eventually, build dependencies will +be automated in rpm, but the major impediment to that effort is the engineering +required to maintain the pretense that src rpm's are "noarch". + +Meanwhile, I've added a package called "InDependence-1.0" to powertools-6.2 +that may be of use in detecting build dependencies that can be added to +spec files as part of rebuilding packages for Red Hat 6.2. + +Here's a short example of how to generate the package/file names that were used +while building gnorpm using InDependence: + +\verbatim + rpm -U /mnt/redhat/comps/powertools/6.2/i386/InDependence-1.0-3.i386.rpm + rpm -i /mnt/redhat/comps/dist/6.2/SRPMS/gnorpm-0.9-11.src.rpm + cd /usr/src/redhat/SPECS + dep -detail rpmbuild -ba gnorpm.spec >& xxx + ... + (the build will take longer since both dep and strace are pigs) + ... + grep -- '::' xxx > yyy +\endverbatim + +\verbatim +Aside: The dep perl wrapper is a "pig" only because it's exec'ing + rpm -qf + in order to turn filenames into package names. There are easier/faster + ways to get this information... + + There's no way to speed up the + /sbin/strace -q -etrace=open,execve -o ... + command itself. The eventual implementation in rpm will snatch the + same open/execve syscalls using LD_PRELOAD. + + Patches cheerfully accepted :-) +\endverbatim + +Here's what's in yyy (\::\ format): + +\verbatim + ORBit-devel-0.4.95-2::/usr/bin/orbit-config + XFree86-libs-3.3.5-6::/usr/X11R6/lib/libICE.so.6 + XFree86-libs-3.3.5-6::/usr/X11R6/lib/libSM.so.6 + XFree86-libs-3.3.5-6::/usr/X11R6/lib/libX11.so.6 + XFree86-libs-3.3.5-6::/usr/X11R6/lib/libXext.so.6 + audiofile-0.1.9-1::/usr/lib/libaudiofile.so.0 + autoconf-2.13-5::/usr/bin/autoconf + autoconf-2.13-5::/usr/bin/autoheader + autoconf-2.13-5::/usr/share/autoconf/acgeneral.m4 + autoconf-2.13-5::/usr/share/autoconf/autoconf.m4f + automake-1.4-5::/usr/bin/aclocal + automake-1.4-5::/usr/bin/automake + bash-1.14.7-16::/bin/sh + bash-1.14.7-16::/etc/bashrc + binutils-2.9.1.0.23-7::/usr/bin/strip + binutils-2.9.1.0.23-7::/usr/lib/libbfd-2.9.1.0.24.so + binutils-2.9.1.0.23-7::/usr/lib/libopcodes-2.9.1.0.24.so + bzip2-0.9.5c-1::/usr/lib/libbz2.so.0 + dev-2.7.10-2::/dev/null + diffutils-2.7-16::/usr/bin/cmp + egcs-1.1.2-25::/usr/bin/gcc + egcs-1.1.2-25::/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs + esound-0.2.14-1::/usr/lib/libesd.so.0 + file-3.27-3::/usr/bin/file + file-3.27-3::/usr/share/magic + fileutils-4.0-8::/bin/chgrp + fileutils-4.0-8::/bin/chmod + fileutils-4.0-8::/bin/chown + fileutils-4.0-8::/bin/cp + fileutils-4.0-8::/bin/ln + fileutils-4.0-8::/bin/ls + fileutils-4.0-8::/bin/mkdir + fileutils-4.0-8::/bin/mv + fileutils-4.0-8::/bin/rm + fileutils-4.0-8::/usr/bin/install + findutils-4.1-32::/usr/bin/xargs + gawk-3.0.4-1::/bin/awk + gawk-3.0.4-1::/bin/gawk + gettext-0.10.35-13::/usr/bin/xgettext + glib-1.2.5-1::/usr/lib/libglib-1.2.so.0 + glib-1.2.5-1::/usr/lib/libgmodule-1.2.so.0 + glib-devel-1.2.5-1::/usr/bin/glib-config + glibc-2.1.2-13::/etc/localtime + glibc-2.1.2-13::/etc/nsswitch.conf + glibc-2.1.2-13::/lib/ld-linux.so.2 + glibc-2.1.2-13::/lib/libc.so.6 + glibc-2.1.2-13::/lib/libcrypt.so.1 + glibc-2.1.2-13::/lib/libdb.so.2 + glibc-2.1.2-13::/lib/libdl.so.2 + glibc-2.1.2-13::/lib/libm.so.6 + glibc-2.1.2-13::/lib/libnsl.so.1 + glibc-2.1.2-13::/lib/libnss_dns.so.2 + glibc-2.1.2-13::/lib/libnss_files.so.2 + glibc-2.1.2-13::/lib/libnss_nis.so.2 + glibc-2.1.2-13::/lib/libnss_nisplus.so.2 + glibc-2.1.2-13::/lib/libresolv.so.2 + glibc-2.1.2-13::/usr/bin/ldd + gnome-libs-1.0.54-1::/usr/lib/libart_lgpl.so.2 + gnome-libs-1.0.54-1::/usr/lib/libgnome.so.32 + gnome-libs-1.0.54-1::/usr/lib/libgnomesupport.so.0 + gnome-libs-1.0.54-1::/usr/lib/libgnomeui.so.32 + gnome-libs-devel-1.0.54-1::/usr/bin/gnome-config + grep-2.3-2::/bin/egrep + grep-2.3-2::/bin/fgrep + grep-2.3-2::/bin/grep + gtk+-1.2.5-2::/usr/lib/libgdk-1.2.so.0 + gtk+-1.2.5-2::/usr/lib/libgtk-1.2.so.0 + imlib-1.9.7-1::/usr/lib/libgdk_imlib.so.1 + libghttp-1.0.4-1::/usr/lib/libghttp.so.1 + libtool-1.3.3-1::/usr/bin/libtoolize + libtool-1.3.3-1::/usr/share/libtool/config.guess + libtool-1.3.3-1::/usr/share/libtool/config.sub + libtool-1.3.3-1::/usr/share/libtool/ltconfig + libtool-1.3.3-1::/usr/share/libtool/ltmain.sh + libxml-1.4.0-1::/usr/lib/libxml.so.1 + libxml-devel-1.4.0-1::/usr/bin/xml-config + m4-1.4-12::/usr/bin/m4 + make-3.77-6::/usr/bin/make + mktemp-1.5-1::/bin/mktemp + net-tools-1.53-1::/bin/hostname + patch-2.5-9::/usr/bin/patch + rootfiles-5.2-5::/root/.bashrc + rpm-3.0.4-0.16::/bin/rpm + rpm-3.0.4-0.16::/usr/lib/librpm.so.0 + rpm-3.0.4-0.16::/usr/lib/rpm/find-provides + rpm-3.0.4-0.16::/usr/lib/rpm/find-requires + rpm-3.0.4-0.16::/usr/lib/rpm/macros + rpm-3.0.4-0.16::/usr/lib/rpm/rpmpopt + rpm-3.0.4-0.16::/usr/lib/rpm/rpmrc + sed-3.02-4::/bin/sed + setup-2.0.5-1::/etc/group + setup-2.0.5-1::/etc/host.conf + setup-2.0.5-1::/etc/passwd + sh-utils-2.0-1::/bin/basename + sh-utils-2.0-1::/bin/false + sh-utils-2.0-1::/bin/sleep + sh-utils-2.0-1::/bin/true + sh-utils-2.0-1::/usr/bin/expr + sh-utils-2.0-1::/usr/bin/id + texinfo-3.12h-2::/usr/bin/makeinfo + textutils-2.0-2::/bin/cat + textutils-2.0-2::/bin/sort + textutils-2.0-2::/usr/bin/cut + textutils-2.0-2::/usr/bin/tr + zlib-1.1.3-5::/usr/lib/libz.so.1 +\endverbatim + +The information can be used to generate build prerequisites. What is still +needed is a sensible approach on + +\verbatim + 1) eliminating obvious common dependencies (e.g. libtool, egcs). + 2) identifying (and removing for now) per-platform build dependencies. + 3) deciding on whether to add the build dependency on a file or on the + package that contains the file. + 4) if adding a dependency on a package, choosing version ranges as + appropriate. +\endverbatim + +but that's up to individual packagers. + +*/ diff --git a/doc/manual/buildroot b/doc/manual/buildroot new file mode 100644 index 0000000..3bf0b05 --- /dev/null +++ b/doc/manual/buildroot @@ -0,0 +1,122 @@ +/*! \page buildroot Using a build root + +The build root is very similar to Root: (which is now legacy). +By using Buildroot: in your spec file you are indicating +that your package can be built (installed into and packaged from) +a user-definable directory. This helps package building by normal +users. + +\section buildroot_specfile The Spec File + +Simply use +\verbatim + Buildroot: +\endverbatim + +in your spec file. The actual buildroot used by RPM during the +build will be available to you (and your %prep, %build, and %install +sections) as the environment variable RPM_BUILD_ROOT. You must +make sure that the files for the package are installed into the +proper buildroot. As with Root:, the files listed in the %files +section should *not* contain the buildroot. For example, the +following hypothetical spec file: + +\verbatim + Name: foo + ... + Root: /tmp + + %prep + ... + + %build + ... + + %install + install -m755 fooprog /tmp/usr/bin/fooprog + + %files + /usr/bin/fooprog +\endverbatim + +would be changed to: + +\verbatim + Name: foo + ... + BuildRoot: /tmp + + %prep + ... + + %build + ... + + %install + install -m755 fooprog $RPM_BUILD_ROOT/usr/bin/fooprog + + %files + /usr/bin/fooprog +\endverbatim + +\section buildroot_building Building With a Build Root + +RPM will use the buildroot listed in the spec file as the default +buildroot. There are two ways to override this. First, you can +have "buildroot: " in your rpmrc. Second, you can override +the default, and any entry in an rpmrc by using "--buildroot " +on the RPM command line. + +\section buildroot_caveats Caveats using Build Roots + +Care should be taken when using buildroots that the install directory +is owned by the correct package. For example the file + +\verbatim + /usr/lib/perl5/site_perl/MD5.pm +\endverbatim + +is installed by the package perl-MD5. If we were to use a buildroot +and specified + +\verbatim + %files + /usr/lib/perl5/site_perl +\endverbatim + +we would end up with the directory /usr/lib/perl5/site_perl being +owned by the library package. This directory is in fact used by ALL +perl libraries and should be owned by the package for perl not any of +its libraries. It is important that the %files command specifies all +the known directories explicitly. So this would be preferable: + +\verbatim + /usr/lib/perl5/site_perl/* +\endverbatim + +Since we only want the files and directories that the package perl-MD5 +installed into /usr/lib/perl5/site_perl/ to be owned by the package. +The directory /usr/lib/perl5/site_perl/ is created when perl is +installed. + +If we were to use the bad %files line shown above, then when the MD5 +package is removed, RPM will try to remove each of the perl-MD5 files and +then try to remove the dir itself. If there's still files in the +site_perl directory (e.g. from other packages) then the Unix rmdir(2) +will fail and you will get a non-zero return code from RPM. If the +rmdir succeeds then you will no longer have a site_perl directory on +your machine even though this directory was created when Perl was +installed. + +The other common problem is that two packages could install two files +with the the same name into the same directory. This would lead to +other collision problems when removing the file. Care should be taken +by the packager to ensure that all packages install unique files. +Explicit use of %files can help make the packager aware of potential +problems before they happen. When you try to install a package which +contains file names already used by other packages on the system then +RPM will warn you of the problem and give a fatal error. This error can +be overridden with --force and the installed file will be replaced by the +new file and when the new package is removed the file will be removed as well. + +*/ diff --git a/doc/manual/conditionalbuilds b/doc/manual/conditionalbuilds new file mode 100644 index 0000000..b7b5d2c --- /dev/null +++ b/doc/manual/conditionalbuilds @@ -0,0 +1,106 @@ +/*! \page conditionalbuilds Passing conditional parameters into a rpm build + +Source code is often built with optional features enabled or disabled. +When source code is packaged using rpm, the various features can be +chosen, added to a spec file, and a package will be produced with +binaries compiled with that feature set. This mechanism works fine +for packages with small feature sets, but does not work so well +for large, complicated, packages like the Linux kernel and/or +the Pine mailer which have a large number of features, as a given +feature set may not "work" for everyone. + +RPM now has a supported mechanism to pass information from the rpm +command line to enable/disable features during a build. Two options have +been added to pass feature names from the rpm command line: +\verbatim + --with Enable + --without Disable +\endverbatim +The new options are implemented using popt to add aliases to the existing rpm +options --define to specify macros from the command line. The magic necessary +to add the new options is (from the file /usr/lib/rpm/rpmpopt*) +\verbatim + rpmb alias --with --define "_with_!#:+ --with-!#:+" + rpmb alias --without --define "_without_!#:+ --without-!#:+" +\endverbatim +(Note: The obscure "!#:+" popt token above says "substitute the next command +line argument found here, and, additionally, mark the argument as used.") + +For example, when rpm is invoked as +\verbatim + rpm ... --with ldap ... +\endverbatim +then the popt aliases will cause the options to be rewritten as +\verbatim + rpm ... --define "_with_ldap --with-ldap" ... +\endverbatim +which causes a "%_with_ldap" macro to be defined with value "--with-ldap" +during a build. + +The macro defined on the rpm command line can be used to conditionalize +portions of the spec file for the package. For example, let's say you +are trying to build the pine package using "--with ldap" to enable the +LDAP support in the pine mailer (i.e. configuring with "--with-ldap"). +So the spec file should be written +\verbatim + ... + ./configure \ + %{?_with_ldap} \ + ... +\endverbatim +so that, if "--with ldap" was used as a build option, then configure +will be invoked (after macro expansion) as +\verbatim + ./configure --with-ldap ... +\endverbatim +(Note: The obscure "%{?_with_ldap: ...}" rpm macro syntax above says "if the +macro "_with_ldap" exists, then expand "...", else ignore.") + +The spec file should include a default value for the "_with_ldap" macro, +and should support "--without ldap" as well. Here's a more complete example +for pine: +\verbatim + # Default values are --without-ldap --with-ssl. + # + # Read: If neither macro exists, then add the default definition. + %{!?_with_ldap: %{!?_without_ldap: %define _without_ldap --without-ldap}} + %{!?_with_ssl: %{!?_without_ssl: %define _with_ssl --with-ssl}} + ... + + # You might want to make sure that one and only one of required and + # mutually exclusive options exists. + # + # Read: It's an error if both or neither required options exist. + %{?_with_ssl: %{?_without_ssl: %{error: both _with_ssl and _without_ssl}}} + %{!?_with_ssl: %{!?_without_ssl: %{error: neither _with_ssl nor _without_ssl}}} + + # Add build dependencies for ssl and ldap features if enabled. + # Note: Tag tokens must start at beginning-of-line. + # + # Read: If feature is enabled, then add the build dependency. + %{?_with_ssl:BuildRequires: openssl-devel} + %{?_with_ldap:BuildRequires: openldap-devel} + ... + + # Configure with desired features. + # + # Read: Add any defined feature values to the configure invocation. + %configure \ + %{?_with_ssl} \ + %{?_without_ssl} \ + %{?_with_ldap} \ + %{?_without_ldap} + ... + + # Conditional tests for desired features. + # + # Read: true if _with_ssl is defined, false if not defined. + %if %{?_with_ssl:1}%{!?_with_ssl:0} + ... + %endif + +\endverbatim + +See also the %bcond_with and %bcond_without helper macros and their +documentation in /usr/lib/rpm/macros. +*/ diff --git a/doc/manual/dependencies b/doc/manual/dependencies new file mode 100644 index 0000000..810e266 --- /dev/null +++ b/doc/manual/dependencies @@ -0,0 +1,370 @@ +/*! \page dependencies Dependencies + +Dependencies provide a way for a package builder to require other +packages or capabilities to be installed before or simultaneously +with one another. These can be used to require a python interpreter +for a python based application for example. RPM ensures dependencies +are satisfied whenever packages are installed, erased, or upgraded. + +\section dependencies_package Requiring Packages + +To require the packages python and perl, use: + +\verbatim + Requires: python perl +\endverbatim + +in the spec file. Note that "Requires python, perl" would work as well. If you +needed to have a very recent version of python but any version of perl, + +\verbatim + Requires: python >= 1.3, perl +\endverbatim + +would do the trick. Again, the ',' in the line is optional. Instead of +'>=', you may also use '<', '>', '<=', or '='. Spaces are required +around the numeric operator to separate the operator from the package name. + +The full syntax for specifying a dependency on an epoch, version and release +is +\verbatim + [epoch:]version[-release] +\endverbatim +where +\verbatim + epoch (optional) number, with assumed default of 0 if not supplied + version (required) can contain any character except '-' + release (optional) can contain any character except '-' +\endverbatim + +For example, + +\verbatim + Requires: perl >= 9:5.00502-3 +\endverbatim + +specifies + +\verbatim + epoch=9 + version=5.00502 + release=3 +\endverbatim + +The epoch (if present) is a monotonically increasing integer, neither the +version or the release can contain the '-' hyphen character, and the dependency +parser does not permit white space within a definition. Unspecified epoch +and releases are assumed to be zero, and are interpreted as "providing all" +or "requiring any" value. + +The release tag is usually incremented every time a package is rebuilt for +any reason, even if the source code does not change. For example, changes +to the specfile, compiler(s) used to build the package, and/or dependency +changes should all be tracked by incrementing the release. The version number, +on the other hand, is usually set by the developer or upstream maintainer, +and should not be casually modified by the packager. + +Version numbering should be kept simple so that it is easy to determine the +version ordering for any set of packages. If the packager needs to separate +a release from all other releases that came before it, then the epoch, the +most significant part of package ordering, can be changed. + +The algorithm that RPM uses to determine the version ordering of +packages is simple and developers are encouraged not to rely on the +details of its working. Developers should keep their numbering scheme +simple so any reasonable ordering algorithm would work. The version +comparison algorithm is in the routine rpmvercmp() and it is just a segmented +strcmp(3). First, the boundaries of the segments are found using +isdigit(3)/isalpha(3). Each segment is then compared in order with the +right most segment being the least significant. The alphabetical +portions are compared using a lexical graphical ascii ordering, the +digit segments strip leading zeroes and compare the strlen before +doing a strcmp. If both numerical strings are equal, the longer string +is larger. Notice that the algorithm has no knowledge of decimal fractions, +and perl-5.6 is "older" than perl-5.00503 because the number 6 is less than +the number 503. + +The concept of "newer" used by rpm to determine when a package should be +upgraded can be broken if version format changes oddly, such as when the +version segments cannot be meaningfully compared. + +Example of a bad format change: 2.1.7Ax to 19980531 +\verbatim + The date may be the older version, but it is numerically greater + 2 so it is considered newer :( +\endverbatim + +Example of a bad increment: 2.1.7a to 2.1.7A +\verbatim + The 'a' (ASCII 97) is compared against 'A' (ASCII 65), making 2.1.7a + the newer version. +\endverbatim + +Stick to major.minor.patchlevel using numbers for each if you can. +Keeps life simple :-) + +If a Requires: line needs to include an epoch in the comparison, then +the line should be written like + +\verbatim + Requires: somepackage = 23:version +\endverbatim + +You can't continue a "Requires: " line. If you have multiple +"Requires: " lines then the package requires all packages mentioned on +all of the lines to be installed. + +\section dependencies_prereqs Prereqs + +Prereqs are different from requires only in that a PreReq is guaranteed +to be installed before the package that contains the PreReq. PreReq's +are used only to order packages, otherwise PreReq's are exactly the same +as a Requires: dependency. + +\section dependencies_virtual Virtual Packages + +Sometimes you need to make sure the system your package is being installed +on has a package which provides a certain capability, even though you don't +care what specific package provides it. For example, sendmail won't work +properly unless a local delivery agent (lda) is present. You can ensure that +one is installed like this: + +\verbatim + Requires: lda +\endverbatim + +This will match either a package called lda (as mentioned above), or any +package which contains: + +\verbatim + Provides: lda +\endverbatim + +in its .spec file. No version numbers may be used with virtual packages. + +Virtual packages are often used to supply file dependencies such as /bin/sh +on machines that are only partly managed by rpm. A virtual package with +\verbatim + Provides: /bin/sh +\endverbatim +differs from a package that has /bin/sh in the %files list in that the +package can be safely removed without removing /bin/sh. + +\section dependencies_automatic Automatic Dependencies + +To reduce the amount of work required by the package builder, RPM scans +the file list of a package when it is being built. Any files in the file +list which require shared libraries to work (as determined by ldd) cause +that package to require the shared library. + +For example, if your package contains /bin/vi, RPM will add dependencies +for both libtermcap.so.2 and libc.so.5. These are treated as virtual +packages, so no version numbers are used. + +A similar process allows RPM to add Provides information automatically. Any +shared library in the file list is examined for its soname (the part of +the name which must match for two shared libraries to be considered +equivalent) and that soname is automatically provided by the package. For +example, the libc-5.3.12 package has provides information added for +libm.so.5 and libc.so.5. We expect this automatic dependency generation +to eliminate the need for most packages to use explicit Requires: lines. + +\section dependencies_custom Custom Automatic Dependency + +The automatic dependency programs are found via macro expansion. Thus +sites can very the amount of dependency processing that are performed +locally, by changing the executable/script which is run. Dependency +processing can even be changed on a per-package basis if the macros are +defined in the spec file. To allow for maximum configurability the +dependency programs are shell scripts which can be duplicated and edited +for site specific needs. + +The macros: %__find_provides, %__find_prereq, %__find_requires, +%__find_conflicts, %__find_obsoletes, if they exist, are expanded to +the name of a program to exec. For each package, the program receives +the glob'ed %files manifest on stdin and returns dependencies on stdout. The +discovered dependencies are parsed exactly as if they were found after + +\verbatim + Provides: + PreReq: + Requires: + Conflicts: + Obsoletes: +\endverbatim +tokens in a spec file (i.e. the same parser is used), so items look like +(comments added) +\verbatim + /bin/sh # file existence + libc.so.6 # soname existence + foo <= 1:2.3-4 # versioned package + perl5(Apache) <= 1.2 # versioned namespace +\endverbatim + +The default rpm configuration has only + %__find_provides /usr/lib/rpm/find-provides + %__find_requires /usr/lib/rpm/find-requires +which can be overridden (or even undefined) within a spec file. + +\section dependencies_interpreters Interpreters and Shells + +Modules for interpreted languages like perl and tcl impose additional +dependency requirements on packages. A script written for an interpreter +often requires language specific modules to be installed in order to execute +correctly. In order to automatically detect language specific modules, each +interpreter may have its own find-provides and find-requires. To prevent +module name collisions between interpreters, module names are enclosed within +parentheses and a conventional interpreter specific identifier is prepended: + + +\verbatim + Provides: perl(MIME-Base64), perl(Mail-Header)-1-09 + + Requires: perl(Carp), perl(IO-Wrap) = 4.5 +\endverbatim + + +The output of a per-interpreter find-requires (notice in this example the +first requirement is a package and the rest are language specific modules) + +\verbatim + Mail-Header >= 1.01 + perl(Carp) >= 3.2 + perl(IO-Wrap) == 4.5 or perl(IO-Wrap)-4.5 +\endverbatim + +the output from find-provides is +\verbatim + Foo-0.9 + perl(Widget)-0-1 +\endverbatim + +The per-interpreter automatic module detectors will normally be located in +\verbatim + /usr/lib/rpm/{perl,tcl}/find-{provides,requires} +with appropriate per-interpreter hooks into +\verbatim + /usr/lib/rpm/find-{provides,requires} +\endverbatim + +@todo per-interpreter dependency generators are not located in subdirectories. + +Notice that shell dependencies will require that all %post et al scriptlets +be processed by the find-requires. Since a shell script depends on all the +programs which it runs. + + +\section dependencies_installing Installing and Erasing Packages with Dependencies + +For the most part, dependencies should be transparent to the user. However, +a few things will change. + +First, when packages are added or upgraded, all of their dependencies +must be satisfied. If they are not, an error message like this appears: + +\verbatim + failed dependencies: + libICE.so.6 is needed by somepackage-2.11-1 + libSM.so.6 is needed by somepackage-2.11-1 + libc.so.5 is needed by somepackage-2.11-1 +\endverbatim + +Similarly, when packages are removed, a check is made to ensure that +no installed packages will have their dependency conditions break due to +the packages being removed. If you wish to turn off dependency checking for +a particular command, use the --nodeps flag. + +\section dependencies_conflicts Conflicts + +While conflicts were implemented in earlier versions of RPM they never +worked properly until RPM 2.3.4 (well, we hope they work properly now +anyway). + +Conflicts allow a package to say it won't work with another package (or +virtual package) installed on the system. For example, qmail doesn't work +(w/o custom setup) on machines with sendmail installed. The qmail spec file +may codify this with a line like: + +\verbatim + Conflicts: sendmail +\endverbatim + +The syntax of the "Conflicts" tag is identical to the syntax of the Requires +tag and conflict checking may be overridden by using the --nodeps flag. + +\section dependencies_querying Querying for Dependencies + +Two new query information selection options are now available. The first, +--provides, prints a list of all of the capabilities a package provides. +The second, --requires, shows the other packages that a package requires +to be installed, along with any version number checking. + +There are also two new ways to search for packages. Running a query with +--whatrequires \ queries all of the packages that require \. +Similarly, running --whatprovides \ queries all of the packages that +provide the \ virtual package. Note that querying for package that +provides "python" will not return anything, as python is a package, not +a virtual package. + +\section dependencies_verifying Verifying Dependencies + +As of RPM 2.2.2, -V (aka --verify) verifies package dependencies +by default. You can tell rpm to ignore dependencies during system +verification with the --nodeps. If you want RPM to verify just dependencies +and not file attributes (including file existence), use the --nofiles +flag. Note that "rpm -Va --nofiles --nodeps" will not verify anything at +all, nor generate an error message. + +\section dependencies_branching Branching Version + +It is quite common to need to branch a set of sources in version +control. It is not so obvious how those branches should be represented +in the package version numbers. Here is one solution. + +You have a bag of features that are injected into a package in a +non-ordered fashion, and you want to have the package +name-version-release be able to: + +\verbatim + 1) identify the "root version" of the source code. + 2) identify the handful of features that are in that + branch of the package. + 3) preserve sufficient ordering so that packages upgrade + without the use of --oldpackage. +\endverbatim + +A simple (but possibly not adequate) scheme to achieve this is: + +\verbatim + Name: foo + Version: + Release: . +\endverbatim + +where the release instance is something like YYYMMMDD or some linear +record of the number of builds with the current tar file, it is used +to preserve ordering when necessary. + +Another alternative scheme might be: + +\verbatim + Name: foo + Epoch: + Version: + Release: +\endverbatim + +\section dependencies_build Build dependencies + +The following dependencies are available at build time. These are +similar to the install time version but these apply only during +package creation and are specified in the specfile not in the binary +package. + +\verbatim + BuildRequires: + BuildConflicts: + BuildPreReq: +\endverbatim + +*/ diff --git a/doc/manual/format b/doc/manual/format new file mode 100644 index 0000000..521387b --- /dev/null +++ b/doc/manual/format @@ -0,0 +1,273 @@ +/*! \page pkgformat Package format + +This document describes the RPM file format version 3.0, which is used +by RPM versions 2.1 and greater. The format is subject to change, and +you should not assume that this document is kept up to date with the +latest RPM code. That said, the 3.0 format should not change for +quite a while, and when it does, it will not be 3.0 anymore :-). + +\warning In any case, THE PROPER WAY TO ACCESS THESE STRUCTURES IS THROUGH +THE RPM LIBRARY!! + +The RPM file format covers both source and binary packages. An RPM +package file is divided in 4 logical sections: + +\verbatim +. Lead -- 96 bytes of "magic" and other info +. Signature -- collection of "digital signatures" +. Header -- holding area for all the package information (aka "metadata") +. Payload -- compressed archive of the file(s) in the package (aka "payload") +\endverbatim + +All 2 and 4 byte "integer" quantities (int16 and int32) are stored in +network byte order. When data is presented, the first number is the +byte number, or address, in hex, followed by the byte values in hex, +followed by character "translations" (where appropriate). + +\section pkgformat_lead Lead + +The Lead is basically for file(1). All the information contained in +the Lead is duplicated or superceded by information in the Header. +Much of the info in the Lead was used in old versions of RPM but is +now ignored. The Lead is stored as a C structure: + +\code +struct rpmlead { + unsigned char magic[4]; + unsigned char major, minor; + short type; + short archnum; + char name[66]; + short osnum; + short signature_type; + char reserved[16]; +}; +\endcode + +and is illustrated with one pulled from the rpm-2.1.2-1.i386.rpm +package: + +\verbatim +00000000: ed ab ee db 03 00 00 00 +\endverbatim + +The first 4 bytes (0-3) are "magic" used to uniquely identify an RPM +package. It is used by RPM and file(1). The next two bytes (4, 5) +are int8 quantities denoting the "major" and "minor" RPM file format +version. This package is in 3.0 format. The following 2 bytes (6-7) +form an int16 which indicates the package type. As of this writing +there are only two types: 0 == binary, 1 == source. + +\verbatim +00000008: 00 01 72 70 6d 2d 32 2e ..rpm-2. +\endverbatim + +The next two bytes (8-9) form an int16 that indicates the architecture +the package was built for. While this is used by file(1), the true +architecture is stored as a string in the Header. See, lib/misc.c for +a list of architecture->int16 translations. In this case, 1 == i386. +Starting with byte 10 and extending to byte 75, are 65 characters and +a null byte which contain the familiar "name-version-release" of the +package, padded with null (0) bytes. + +\verbatim +00000010: 31 2e 32 2d 31 00 00 00 1.2-1... +00000018: 00 00 00 00 00 00 00 00 ........ +00000020: 00 00 00 00 00 00 00 00 ........ +00000028: 00 00 00 00 00 00 00 00 ........ +00000030: 00 00 00 00 00 00 00 00 ........ +00000038: 00 00 00 00 00 00 00 00 ........ +00000040: 00 00 00 00 00 00 00 00 ........ +00000048: 00 00 00 00 00 01 00 05 ........ +\endverbatim + +Bytes 76-77 ("00 01" above) form an int16 that indicates the OS the +package was built for. In this case, 1 == Linux. The next 2 bytes +(78-79) form an int16 that indicates the signature type. This tells +RPM what to expect in the Signature. For version 3.0 packages, this +is 5, which indicates the new "Header-style" signatures. + +\verbatim +00000050: 04 00 00 00 68 e6 ff bf ........ +00000058: ab ad 00 08 3c eb ff bf ........ +\endverbatim + +The remaining 16 bytes (80-95) are currently unused and are reserved +for future expansion. + +\section pkgformat_signature Signature + +A 3.0 format signature (denoted by signature type 5 in the Lead), uses +the same structure as the Header. For historical reasons, this +structure is called a "header structure", which can be confusing since +it is used for both the Header and the Signature. The details of the +header structure are given below, and you'll want to read them so the +rest of this makes sense. The tags for the Signature are defined in +lib/signature.h. + +The Signature can contain multiple signatures, of different types. +There are currently only three types, each with its own tag in the +header structure: + +\verbatim + Name Tag Header Type + ---- ---- ----------- + SIZE 1000 INT_32 + MD5 1001 BIN + PGP 1002 BIN +\endverbatim + +The MD5 signature is 16 bytes, and the PGP signature varies with +the size of the PGP key used to sign the package. + +As of RPM 2.1, all packages carry at least SIZE and MD5 signatures, +and the Signature section is padded to a multiple of 8 bytes. + +\section pkgformat_header Header + +The Header contains all the information about a package: name, +version, file list, etc. It uses the same "header structure" as the +Signature, which is described in detail below. A complete list of the +tags for the Header would take too much space to list here, and the +list grows fairly frequently. For the complete list see lib/rpmlib.h +in the RPM sources. + +\section pkgformat_payload Payload + +The Payload is currently a gzipped cpio archive. The cpio +archive type used is SVR4 with a CRC checksum. + +\section pkgformat_header_structure The Header Structure + +The header structure is a little complicated, but actually performs a +very simple function. It acts almost like a small database in that it +allows you to store and retrieve arbitrary data with a key called a +"tag". When a header structure is written to disk, the data is +written in network byte order, and when it is read from disk, is is +converted to host byte order. + +Along with the tag and the data, a data "type" is stored, which indicates, +obviously, the type of the data associated with the tag. There are +currently 9 types: + +\verbatim + Type Number + ---- ------ + NULL 0 + CHAR 1 + INT8 2 + INT16 3 + INT32 4 + INT64 5 + STRING 6 + BIN 7 + STRING_ARRAY 8 + I18NSTRING_TYPE 9 +\endverbatim + +One final piece of information is a "count" which is stored with each +tag, and indicates the number of items of the associated type that are +stored. As a special case, the STRING type is not allowed to have a +count greater than 1. To store more than one string you must use a +STRING_ARRAY. + +Altogether, the tag, type, count, and data are called an "Entry" or +"Header Entry". + +\verbatim +00000000: 8e ad e8 01 00 00 00 00 ........ +\endverbatim + +A header begins with 3 bytes of magic "8e ad e8" and a single byte to +indicate the header version. The next four bytes (4-7) are reserved. + +\verbatim +00000008: 00 00 00 20 00 00 07 77 ........ +\endverbatim + +The next four bytes (8-11) form an int32 that is a count of the number +of entries stored (in this case, 32). Bytes 12-15 form an int32 that +is a count of the number of bytes of data stored (that is, the number +of bytes made up by the data portion of each entry). In this case it +is 1911 bytes. + +\verbatim +00000010: 00 00 03 e8 00 00 00 06 00 00 00 00 00 00 00 01 ................ +\endverbatim + +Following the first 16 bytes is the part of the header called the +"index". The index is made of up "index entries", one for each entry +in the header. Each index entry contains four int32 quantities. In +order, they are: tag, type, offset, count. In the above example, we +have tag=1000, type=6, offset=0, count=1. By looking up the the tag +in lib/rpmlib.h we can see that this entry is for the package name. +The type of the entry is a STRING. The offset is an offset from the +start of the data part of the header to the data associated with this +entry. The count indicates that there is only one string associated +with the entry (which we really already knew since STRING types are +not allowed to have a count greater than 1). + +In our example there would be 32 such 16-byte index entries, followed +by the data section: + +\verbatim +00000210: 72 70 6d 00 32 2e 31 2e 32 00 31 00 52 65 64 20 rpm.2.1.2.1.Red +00000220: 48 61 74 20 50 61 63 6b 61 67 65 20 4d 61 6e 61 Hat Package Mana +00000230: 67 65 72 00 31 e7 cb b4 73 63 68 72 6f 65 64 65 ger.1...schroede +00000240: 72 2e 72 65 64 68 61 74 2e 63 6f 6d 00 00 00 00 r.redhat.com.... +... +00000970: 6c 69 62 63 2e 73 6f 2e 35 00 6c 69 62 64 62 2e libc.so.5.libdb. +00000980: 73 6f 2e 32 00 00 so.2.. +\endverbatim + +The data section begins at byte 528 (4 magic, 4 reserved, 4 index +entry count, 4 data byte count, 16 * 32 index entries). At offset 0, +bytes 528-531 are "rpm" plus a null byte, which is the data for the +first index entry (the package name). Following is is the data for +each of the other entries. Each string is null terminated, the strings +in a STRING_ARRAY are also null terminated and are place one after +another. The integer types are aligned to appropriate byte boundaries, +so that the data of INT64 type starts on an 8 byte boundary, INT32 +type starts on a 4 byte boundary, and an INT16 type starts on a 2 byte +boundary. For example: + +\verbatim +00000060: 00 00 03 ef 00 00 00 06 00 00 00 28 00 00 00 01 ................ +00000070: 00 00 03 f1 00 00 00 04 00 00 00 40 00 00 00 01 ................ +... +00000240: 72 2e 72 65 64 68 61 74 2e 63 6f 6d 00 00 00 00 r.redhat.com.... +00000250: 00 09 9b 31 52 65 64 20 48 61 74 20 4c 69 6e 75 ....Red Hat Linu +\endverbatim + +Index entry number 6 is the BUILDHOST, of type STRING. Index entry +number 7 is the SIZE, of type INT32. The corresponding data for entry +6 end at byte 588 with "....redhat.com\0". The next piece of data +could start at byte 589, byte that is an improper boundary for an INT32. +As a result, 3 null bytes are inserted and the date for the SIZE actually +starts at byte 592: "00 09 9b 31", which is 629553). + +\section pkgformat_tools Tools + +The tools directory in the RPM sources contains a number of small +programs that use the RPM library to pick apart packages. These +tools are mostly used for debugging, but can also be used to help +you understand the internals of the RPM package format. + +\verbatim + rpmlead - extracts the Lead from a package + rpmsignature - extracts the Signature from a package + rpmheader - extracts the Header from a package + rpmarchive - extracts the Archive from a package + dump - displays a header structure in readable format +\endverbatim + +Given a package foo.rpm you might try: + +\verbatim + rpmlead foo.rpm | od -x + rpmsignature foo.rpm | dump + rpmheader foo.rpm | dump + rpmarchive foo.rpm | zcat | cpio --list +\endverbatim + +*/ diff --git a/doc/manual/hregions b/doc/manual/hregions new file mode 100644 index 0000000..1bdb4f1 --- /dev/null +++ b/doc/manual/hregions @@ -0,0 +1,89 @@ +/*! \page hregions Immutable header regions in rpm-4.0.1 and later + +The header data structure has changed in rpm-4.0.[12] to preserve the +original header from a package. The goal is to keep the original +header intact so that metadata can be verified separately from the +payload by the RHN up2date client and by the rpm command line verify +mode using signatures saved in the rpm database. I believe the change +is entirely forward and backward compatible, and will not require +any artifacts like changing the version number of packaging or +adding an "rpmlib(...)" tracking dependency. We'll see ... + +Here's a short description of the change. An rpm header has three sections: +\verbatim + 1) intro (# entries in index, # bytes of data) + 2) index 16 byte entries, one per tag, big endian + 3) data tag values, properly aligned, big endian +\endverbatim + +Representing sections in the header (ignoring the intro) with +\verbatim + A,B,C index entries sorted by tag number + a,b,c variable length entry data + | boundary between index/data +\endverbatim +a header with 3 tag/value pairs (A,a) can be represented something like +\verbatim + ABC|abc +\endverbatim + +The change is to introduce a new tag that keeps track of a contiguous +region (i.e. the original header). Representing the boundaries with +square/angle brackets, an "immutable region" in the header thus becomes +\verbatim + [ABC|abc] +\endverbatim +or more generally (spaces added for clarity) +\verbatim + [ABC> QRS | [DEF> QRS | > QRS | < QRS XYZ | QRS D | ). In addition, macros +can be nested, hiding the previous definition for the duration of the +expansion of the macro which contains nested macros. + +\section macros_defining Defining a Macro + +To define a macro use: + +\verbatim + %define [(opts)] +\endverbatim + +All whitespace surrounding \ is removed. Name may be composed +of alphanumeric characters, and the character `_' and must be at least +3 characters in length. A macro without an (opts) field is "simple" in that +only recursive macro expansion is performed. A parameterized macro contains +an (opts) field. The opts (i.e. string between parentheses) is passed +exactly as is to getopt(3) for argc/argv processing at the beginning of +a macro invocation. While a parameterized macro is being expanded, the +following shell-like macros are available: + +\verbatim + %0 the name of the macro being invoked + %* all arguments (unlike shell, not including any processed flags) + %# the number of arguments + %{-f} if present at invocation, the flag f itself + %{-f*} if present at invocation, the argument to flag f + %1, %2 the arguments themselves (after getopt(3) processing) +\endverbatim + +At the end of invocation of a parameterized macro, the above macros are +(at the moment, silently) discarded. + +\section macros_writing Writing a Macro + +Within the body of a macro, there are several constructs that permit +testing for the presence of optional parameters. The simplest construct +is "%{-f}" which expands (literally) to "-f" if -f was mentioned when the +macro was invoked. There are also provisions for including text if flag +was present using "%{-f:X}". This macro expands to (the expansion of) X +if the flag was present. The negative form, "%{!-f:Y}", expanding to (the +expansion of) Y if -f was *not* present, is also supported. + +In addition to the "%{...}" form, shell expansion can be performed +using "%(shell command)". The expansion of "%(...)" is the output of +(the expansion of) ... fed to /bin/sh. For example, "%(date ++%%y%%m%%d)" expands to the string "YYMMDD" (final newline is +deleted). Note the 2nd % needed to escape the arguments to /bin/date. +There is currently an 8K limit on the size that this macro can expand +to. + +\section macros_builtin Builtin Macros + +There are several builtin macros (with reserved names) that are needed +to perform useful operations. The current list is + +\verbatim + %trace toggle print of debugging information before/after + expansion + %dump print the active (i.e. non-covered) macro table + + %{echo:...} print ... to stderr + %{warn:...} print ... to stderr + %{error:...} print ... to stderr and return BADSPEC + + %define ... define a macro + %undefine ... undefine a macro + %global ... define a macro whose body is available in global context + + %{uncompress:...} expand ... to and test to see if is + compressed. The expansion is + cat # if not compressed + gzip -dc # if gzip'ed + bzip2 -dc # if bzip'ed + %{expand:...} like eval, expand ... to and (re-)expand + + %{S:...} expand ... to file name + %{P:...} expand ... to file name + %{F:...} expand ... to file name +\endverbatim + +Macros may also be automatically included from /usr/lib/rpm/macros. +In addition, rpm itself defines numerous macros. To display the current +set, add "%dump" to the beginning of any spec file, process with rpm, and +examine the output from stderr. + +\section macros_example Example of a Macro + +Here is an example %patch definition from /usr/lib/rpm/macros: + +\verbatim + %patch(b:p:P:REz:) \ + %define patch_file %{P:%{-P:%{-P*}}%{!-P:%%PATCH0}} \ + %define patch_suffix %{!-z:%{-b:--suffix %{-b*}}}%{!-b:%{-z:--suffix %{-z*}}}%{!-z:%{!-b: }}%{-z:%{-b:%{error:Can't specify both -z(%{-z*}) and -b(%{-b*})}}} \ + %{uncompress:%patch_file} | patch %{-p:-p%{-p*}} %patch_suffix %{-R} %{-E} \ + ... +\endverbatim + + +The first line defines %patch with its options. The body of %patch is + +\verbatim + %{uncompress:%patch_file} | patch %{-p:-p%{-p*}} %patch_suffix %{-R} %{-E} +\endverbatim + +The body contains 7 macros, which expand as follows + +\verbatim + %{uncompress:...} copy uncompressed patch to stdout + %patch_file ... the name of the patch file + %{-p:...} if "-p N" was present, (re-)generate "-pN" flag + -p%{-p*} ... note patch-2.1 insists on contiguous "-pN" + %patch_suffix override (default) ".orig" suffix if desired + %{-R} supply -R (reversed) flag if desired + %{-E} supply -E (delete empty?) flag if desired +\endverbatim + +There are two "private" helper macros: + +\verbatim + %patch_file the gory details of generating the patch file name + %patch_suffix the gory details of overriding the (default) ".orig" +\endverbatim + +\section macros_using Using a Macro + +To use a macro, write: + +\verbatim + % ... +\endverbatim + +or + +\verbatim + %{} +\endverbatim + +The %{...} form allows you to place the expansion adjacent to other text. +The %\ form, if a parameterized macro, will do argc/argv processing +of the rest of the line as described above. Normally you will likely want +to invoke a parameterized macro by using the %\ form so that +parameters are expanded properly. + +Example: +\verbatim + %define mymacro() (echo -n "My arg is %1" ; sleep %1 ; echo done.) +\endverbatim + +Usage: + +\verbatim + %mymacro 5 +\endverbatim + +This expands to: + +\verbatim + (echo -n "My arg is 5" ; sleep 5 ; echo done.) +\endverbatim + +This will cause all occurrences of %1 in the macro definition to be +replaced by the first argument to the macro, but only if the macro +is invoked as "%mymacro 5". Invoking as "%{mymacro} 5" will not work +as desired in this case. + +\section macros_commandline Command Line Options + +When the command line option "--define 'macroname value'" allows the +user to specify the value that a macro should have during the build. +Note lack of leading % for the macro name. We will try to support +users who accidentally type the leading % but this should not be +relied upon. + +Evaluating a macro can be difficult outside of an rpm execution context. If +you wish to see the expanded value of a macro, you may use the option +\verbatim + --eval '' +\endverbatim +that will read rpm config files and print the macro expansion on stdout. + +Note: This works only macros defined in rpm configuration files, not for +macros defined in specfiles. You can use %{echo: %{your_macro_here}} if +you wish to see the expansion of a macro defined in a spec file. + +\section macros_configuration Configuration using Macros + +Starting in rpm 3.0, macros rather than rpmrc lines are used to configure rpm. +In general, all the rpmrc configuration lines documented in "Maximum RPM" +have been converted to macros, usually with a leading underscore, and the +same name that was used in rpmrc files. In some cases, there is no leading +underscore. Those macros existed in rpm-2.5.x and the underscore is omitted +in order to preserve the meaning and usage of macros that are defined during +spec file parsing. + +Here's an example to illustrate configuration using macros: + +\verbatim + Old way: + In /etc/rpmrc and/or ~/.rpmrc you put + something: some_value + + New way: + In /etc/rpm/macros and/or ~/.rpmmacros + %_something some_value +\endverbatim + +Here are 2 common FAQ for experienced users of rpm: + +\verbatim + 1) --rcfile works differently. + Old way: rpm --rcfile whatever + New way: rpm --rcfile /usr/lib/rpm/rpmrc:whatever + + 2) topdir (and other rpmrc configurables) work differently. + + Old way: + ~/.rpmrc contains + topdir: whatever + + New way: + /usr/lib/rpm/rpmrc contains + macrofiles: /usr/lib/rpm/macros: ... :~/.rpmmacros + ~/.rpmmacros contains + %_topdir whatever +\endverbatim + +\section macros_autoconf Macro Analogues of Autoconf Variables + +Several macro definitions provided by the default rpm macro set have uses in +packaging similar to the autoconf variables that are used in building packages: + +\verbatim + %_prefix /usr + %_exec_prefix %{_prefix} + %_bindir %{_exec_prefix}/bin + %_sbindir %{_exec_prefix}/sbin + %_libexecdir %{_exec_prefix}/libexec + %_datadir %{_prefix}/share + %_sysconfdir %{_prefix}/etc + %_sharedstatedir %{_prefix}/com + %_localstatedir %{_prefix}/var + %_libdir %{_exec_prefix}/lib + %_includedir %{_prefix}/include + %_oldincludedir /usr/include + %_infodir %{_prefix}/info + %_mandir %{_prefix}/man +\endverbatim + +*/ diff --git a/doc/manual/multiplebuilds b/doc/manual/multiplebuilds new file mode 100644 index 0000000..3db75fb --- /dev/null +++ b/doc/manual/multiplebuilds @@ -0,0 +1,47 @@ +/*! \page multiplebuilds Multiple build areas + +It is possible to run several RPM builds on the same machine using +separate RPM databases. On my build machine I have several build +areas which all run builds at the same time. The builds do not +interfere with each other. Each build behaves as if it was running on +its own machine and no build area knows about the RPM database which +actually configures the machine. + +First, setup a "topdir" in a prefix other then where RPM is +installed. You will need to make the directories. They need to be +writable by the account which will do the building, typically they +are owned by the buildmaster account and set to permissions +755. + +\verbatim + BUILD RPMS SOURCES SPECS SRPMS +\endverbatim + +Next, you will need to decide where the database files live. I suggest +putting them in a separate directory under "topdir". I call my +directory DB and it has the same owner and permissions as the other +directories. + +Each separate build area needs a rpmrc and macro configuration file. This +will need to specify the new topdir and dbpath. If you will be building +the same packages in different work areas you will also need to specify a +tmppath into the topdir. I suggest either making tmppath be the same as +the BUILD directory or adding another directory called BUILDROOT for it +in the topdir. + +Keeping track of the correct rpmrc for each build area can be +difficult. To make my life easier I make a small shell script with the +topdir hard coded inside: + +\verbatim + #!/bin/sh + /bin/rpm --rcfile /topdir/rpmrc "$@" + exit $? +\endverbatim + +I call the shell script rpm and it lives in the topdir. Each time I +wish to use a particular build area I just ensure that the build area +is first in my path so that when I run "rpm" I get the regular rpm +binary but I am using the local build areas rpmrc. + +*/ diff --git a/doc/manual/queryformat b/doc/manual/queryformat new file mode 100644 index 0000000..9b2ce6c --- /dev/null +++ b/doc/manual/queryformat @@ -0,0 +1,173 @@ +/*! \page queryformat Query formats + +As it is impossible to please everyone with one style of query output, RPM +allows you to specify what information should be printed during a query +operation and how it should be formatted. + +\section queryformat_tags Tags + +All of the information a package contains, apart from signatures and the +actual files, is in a part of the package called the header. Each piece +of information in the header has a tag associated with it which allows +RPM to to tell the difference between the name and description of a +package. + +To get a list of all of the tags your version of RPM knows about, run the +command 'rpm --querytags'. It will print out a list like (but much longer +then) this: + +\verbatim + RPMTAG_NAME + RPMTAG_VERSION + RPMTAG_RELEASE + RPMTAG_SERIAL + RPMTAG_SUMMARY + RPMTAG_DESCRIPTION + RPMTAG_BUILDTIME + RPMTAG_BUILDHOST + RPMTAG_INSTALLTIME + RPMTAG_SIZE +\endverbatim + +As all of these tags begin with RPMTAG_, you may omit it from query format +specifiers and it will be omitted from the rest of this documentation for +the same reason. + +A tag can consist of one element or an array of elements. Each element can +be a string or number only. + +\section queryformat_format Query Formats + +A query format is passed to RPM after the --queryformat argument, and normally +should be enclosed in single quotes. This query format is then used to print +the information section of a query. This means that when both -i and +--queryformat are used in a command, the -i is essentially ignored. +Additionally, using --queryformat implies -q, so you may omit the -q as well. + +The query format is similar to a C style printf string, which the printf(2) +man page provides a good introduction to. However, as RPM already knows the +type of data that is being printed, you must omit the type specifier. In +its place put the tag name you wish to print enclosed in curly braces +({}). For example, the following RPM command prints the names and sizes +of all of the packages installed on a system: + +\verbatim + rpm -qa --queryformat "%{NAME} %{SIZE}\n" +\endverbatim + +If you want to use printf formatters, they go between the % and {. To +change the above command to print the NAME in the first 30 bytes and +right align the size to, use: + +\verbatim + rpm -qa --queryformat "%-30{NAME} %10{SIZE}\n" +\endverbatim + +\section queryformat_arrays Arrays + +RPM uses many parallel arrays internally. For example, file sizes and +file names are kept as an array of numbers and an array of strings +respectively, with the first element in the size array corresponding +to the first element in the name array. + +To iterate over a set of parallel arrays, enclose the format to be used +to print each item in the array within square brackets ([]). For example, +to print all of the files and their sizes in the slang-devel package +followed by their sizes, with one file per line, use this command: + +\verbatim + rpm -q --queryformat "[%-50{FILENAMES} %10{FILESIZES}\n]" slang-devel +\endverbatim + +Note that since the trailing newline is inside of the square brackets, one +newline is printed for each filename. + +A popular query format to try to construct is one that prints the +name of a package and the name of a file it contains on one line, +repeated for every file in the package. This query can be very useful +for passing information to any program that's line oriented (such as +grep or awk). If you try the obvious, + +\verbatim + rpm --queryformat "[%{NAME} %{FILENAMES}\n]" cdp +\endverbatim + +If you try this, you'll see RPM complain about a "parallel array size +mismatch". Internally, all items in RPM are actually arrays, so the NAME +is a string array containing one element. When you tell RPM to iterate +over the NAME and FILENAMES elements, RPM notices the two tags have +different numbers of elements and complains. + +To make this work properly, you need to tell RPM to always print the first +item in the NAME element. You do this by placing a '=' before the tag +name, like this: + +\verbatim + rpm --queryformat "[%{=NAME} %{FILENAMES}\n]" cdp +\endverbatim + +which will give you the expected output. + +\verbatim + cdp /usr/bin/cdp + cdp /usr/bin/cdplay + cdp /usr/man/man1/cdp.1 +\endverbatim + +\section queryformat_formatting Formatting Tags + +One of the weaknesses with query formats is that it doesn't recognize +that the INSTALLTIME tag (for example) should be printed as a date instead +of as a number. To compensate, you can specify one of a few different +formats to use when printing tags by placing a colon followed the formatting +name after the tag name. Here are some examples: + +\verbatim + rpm -q --queryformat "%{NAME} %{INSTALLTIME:date}\n" fileutils + rpm -q --queryformat "[%{FILEMODES:perms} %{FILENAMES}\n]" rpm + rpm -q --queryformat \ + "[%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}\n]" \ + vlock +\endverbatim + +The :shescape may be used on plain strings to get a string which can pass +through a single level of shell and give the original string. + +\section queryformat_expressions Query Expressions + +Simple conditionals may be evaluated through query expressions. Expressions +are delimited by %|...|. The only type of expression currently supported +is a C-like ternary conditional, which provides simple if/then/else +conditions. For example, the following query format display "present" if +the SOMETAG tag is present, and "missing" otherwise: + +\verbatim + %|SOMETAG?{present}:{missing}| +\endverbatim + +Notice that the subformats "present" and "missing" must be inside of curly +braces. + +\section queryformat_example Example: Viewing the Verify Flags + +The following example query is run against dev because I know %verify +is used there. +\verbatim + rpm -q --qf '[%{filenames} %{fileverifyflags}\n]' dev +\endverbatim + +The flags are defined in rpmlib.h (check there for changes): +\verbatim + #define RPMVERIFY_MD5 (1 << 0) + #define RPMVERIFY_FILESIZE (1 << 1) + #define RPMVERIFY_LINKTO (1 << 2) + #define RPMVERIFY_USER (1 << 3) + #define RPMVERIFY_GROUP (1 << 4) + #define RPMVERIFY_MTIME (1 << 5) + #define RPMVERIFY_MODE (1 << 6) + #define RPMVERIFY_RDEV (1 << 7) +\endverbatim + +A 1 bit in the output of the query means the check is enabled. + +*/ diff --git a/doc/manual/relocatable b/doc/manual/relocatable new file mode 100644 index 0000000..d73d0ce --- /dev/null +++ b/doc/manual/relocatable @@ -0,0 +1,57 @@ +/*! \page relocatable Relocatable packages + +Relocatable packages are a way to give the user a little control +over the installation location of a package. For example, a vendor +may distribute their software to install in "/opt" but you'd like +it to install in "/usr/opt". If the vendor were distributing a +relocatable RPM package, it would be easy. + +\section relocatable_building Building a Relocatable Package + +Not all software can be "relocatable". Before continuing you should +think about how the program works, what files it accesses, what other +programs access *it* (and expect it to be in a certain place), etc. +If you determine that the location of the package doesn't matter, +then it can probably be built as "relocatable". + +All you need to do to build a relocatable package is put one or more: + +\verbatim + Prefix: +\endverbatim + +in your spec file. The "" will usually be something like "/usr", +"/usr/local", or "/opt". Every file in your %files list must start +with that prefix. For example, if you have "Prefix: /usr" and your +%files list contains "/etc/foo.conf", the build will fail. The fix for +this is to put + +\verbatim + Prefix: /usr + Prefix: /etc +\endverbatim + +into the spec file so that the /usr and /etc directories may be +relocated separately when this package is installed. + + +\section relocatable_installing Installing Relocatable Packages + +By default, RPM will install a relocatable package in the prefix +directory listed in the spec file. You can override this on the +RPM install command line with "--prefix ". For example, if +the package in question were going to be installed in "/opt" but +you don't have enough disk space there (and it is a relocatable +package), you could install it "--prefix /usr/opt". + +If there is more then one Prefix you may relocate each prefix +separately by using syntax like: + +\verbatim + rpm ... --relocate /opt=/usr/opt --relocate /etc=/usr/etc ... +\endverbatim + +If any of the Prefixes is not being relocated they can be skipped on +the command line + +*/ diff --git a/doc/manual/signatures b/doc/manual/signatures new file mode 100644 index 0000000..fffb985 --- /dev/null +++ b/doc/manual/signatures @@ -0,0 +1,83 @@ +/*! \page signatures Signature header + +The 2.1 release of RPM had a few improvements in the area of +digital package signatures. The usage of PGP has been cleaned +up and extended, the signature section in the RPM file format +has been made easily extensible with new signature types, and +packages can have multiple signatures. + +\section signatures_pgp PGP + +Legacy usage of PGP in rpm-2.0 was cumbersome, and only supported +1024 bit keys. Both of these problems have been corrected in rpm-2.1. + +Whereas previously you needed many rpmrc entries to clue in +RPM about keyring locations and such, RPM now behaves as PGP +users would expect. The PGPPATH environment variable can be +used to specify keyring locations. You can also use a +"%_pgpbin" line in your macros file to specify a different value +for RPM to use for PGPPATH. If neither of these are used PGP +uses its default ($HOME/.pgp). + +If you just want to verify packages, you need to supply values +for the macros +\verbatim + %_pgpbin the path to the pgp executable + %_signature the type of signature to use +\endverbatim + +In order to be able to sign packages, you may also have to +supply values for +\verbatim + %_pgp_name the pgp signature to use for signing + %_pgp_path the path to the key ring +\endverbatim + +\section signatures_signing Signing Packages + +Signature creation is the same as previous releases: just add +a --sign to your build command line. You can sign a package +after the package is built with: + +\verbatim + rpm --resign +\endverbatim + +Using --resign removes any previous signature in the package. +To *add* a signature to a package, leaving all existing +signatures use: + +\verbatim + rpm --addsign +\endverbatim + +RPM always creates MD5 and SIZE signatures when it build +packages, which means that packages built without --sign can +be "verified" to some extent. The MD5 signature should catch +problems like corrupt packages, faulty downloads, etc. + +\section signatures_verifying Verifying Package Signatures + +Package signature verification is the same as previous releases: + +\verbatim + rpm -K +\endverbatim + +RPM will verify every signature in the package, which may include +more than one PGP signature. The output indicates what types of +signatures are being checked. If any checks fail you'll see a +"NOT OK" message, and you should be worried. + +If you have a package with PGP signatures, but don't have PGP +installed, but still want to verify it as much as possible, you +can do: + +\verbatim + rpm -K --nopgp +\endverbatim + +That will cause RPM to skip any PGP signatures, but still check +any others (currently only MD5 and SIZE). + +*/ diff --git a/doc/manual/spec b/doc/manual/spec new file mode 100644 index 0000000..d67c058 --- /dev/null +++ b/doc/manual/spec @@ -0,0 +1,217 @@ +/*! \page specfile Spec file tags + +A few additions have been made to the spec file format. + +Name + +The Name tag contains the proper name of the package. Names must not +include whitespace and may include a hyphen '-' (unlike version and release +tags). Names should not include any numeric operators ('<', '>','=') as +future versions of rpm may need to reserve characters other than '-'. + +By default subpackages are named by prepending `\
-' to +the subpackage name(s). If you wish to change the name of a +subpackage (most commonly this is to change the '-' to '.'), then you +must specify the full name with the -n argument in the %package +definition: + +\verbatim + %package -n newname +\endverbatim + +\section specfile_summary Summary: and Description: Tags + +The Summary: tag should be use to give a short (50 char or so) summary +of the package. Most package's Description: line should be changed to +a Summary: line. The Description: tag is still supported but should +be changed to a "%description" entry similar to %package and %files. +At some point in the future support will be removed for "Description:". +As an example, this spec file fragment: + +\verbatim + Description: Screen drawing library + Name: screenlib + Version: 1.0 + + %package devel + Description: Screen drawing library headers and static libs +\endverbatim + +might be changed to: + +\verbatim + Summary: Screen drawing library + Name: screenlib + Version: 1.0 + + %description + The screen drawing library + is a handy development tool + + %package devel + Summary: Screen drawing library headers and static libs + + %description devel + This package contains all of the + headers and the static libraries for + screenlib. + + You'll only need this package if you + are doing development. +\endverbatim + +The description is free form text, but there are two things to note. +The first regards reformatting. Lines that begin with white space +are considered "pre-formatted" and will be left alone. Adjacent +lines without leading whitespace are considered a single paragraph +and may be subject to formatting by glint or another RPM tool. + +\section specfile_url URL: and Packager: Tags + +Two new tags are "URL:" and "Packager:". "URL:" is a place to put a +URL for more information and/or documentation on the software +contained in the package. Some future RPM package tool may make use +of this. The Packager: tag is meant to contain the name and email +address of the person who "maintains" the RPM package (which may be +different from the person who actually maintains the program the +package contains). + +\section specfile_buildarchitectures BuildArchitectures: Tag + +This tag specifies the architecture which the resulting binary package +will run on. Typically this is a CPU architecture like sparc, +i386. The string 'noarch' is reserved for specifying that the +resulting binary package is platform independent. Typical platform +independent packages are html, perl, python, java, and ps packages. + +\section specfile_virtual Virtual File Attribute(s) in %files Section + +A %ghost tag on a file indicates that this file is not to be included +in the package. It is typically used when the attributes of the file +are important while the contents is not (e.g. a log file). + +The %config(missingok) indicates that the file need not exist on the +installed machine. The %config(missingok) is frequently used for files +like /etc/rc.d/rc2.d/S55named where the (non-)existence of the symlink +is part of the configuration in %post, and the file may need to be +removed when this package is removed. This file is not required to +exist at either install or uninstall time. + +The %config(noreplace) indicates that the file in the package should +be installed with extension .rpmnew if there is already a modified file +with the same name on the installed machine. + +The virtual file attribute token %verify tells `-V/--verify' to ignore +certain features on files which may be modified by (say) a postinstall +script so that false problems are not displayed during package verification. +\verbatim + %verify(not size filedigest mtime) %{prefix}/bin/javaswarm +\endverbatim + +\section specfile_globbing Shell Globbing of %files Section + +The usual rules for shell globbing apply. Most special characters can +be escaped by prefixing them with a '\'. Spaces are used to separate +file names and so must be escaped by enclosing the file name with quotes. +For example: + +\verbatim + /tmp/are\.you\|bob\? + /tmp/bob\'s\*htdocs\* + "/tmp/bob\'s htdocs" +\endverbatim + +Names containing "%%" will be rpm macro expanded into "%". When +trying to escape large number of file names, it is often best to +create a file with the complete list of escaped file names. This is +easiest to do with a shell script like this: + +\verbatim + rm -f $RPM_BUILD_DIR/filelist.rpm + echo '%defattr(-,root,root)' >> $RPM_BUILD_DIR/filelist.rpm + find $RPM_BUILD_ROOT/%{_prefix} -type f -print | \ + sed "s!$RPM_BUILD_ROOT!!" | perl -pe 's/([?|*.\'"])/\\$1/g' \ + >> $RPM_BUILD_DIR/filelist.rpm + + %files -f filelist.rpm +\endverbatim + +\section specfile_automatic Fine Adjustment of Automatic Dependencies + +Rpm currently supports separate "Autoreq:" and "Autoprov:" tags in a +spec file to independently control the running of find-requires and +find-provides. A common problem occurs when packaging a large third +party binary which has interfaces to other third party libraries you +do not own. RPM will require all the third party libraries be +installed on the target machine even though their intended use was +optional. To rectify the situation you may turn off requirements when +building the package by putting + +\verbatim + Autoreq: 0 +\endverbatim + +in your spec file. Any and all requirements should be added manually using the + +\verbatim + Requires: depend1, ..., dependN +\endverbatim + +in this case. + +Similarly there is an Autoprov tag to turn off the automatic provision +generation and a Autoreqprov to turn off both the automatic provides and +the automatic requires generation. + +\section specfile_nosrc NoSource: Tag + +Files ending in .nosrc.rpm are generally source RPM packages whose spec +files have one or more NoSource: or NoPatch: directives in them. Both +directives use the named source or patch file to build the resulting +binary RPM package as usual, but they are not included in the source +RPM package. + +The original intent of this ability of RPM was to allow proprietary or +non-distributable software to be built using RPM, but to keep the +proprietary or non-distributable parts out of the resulting source RPM +package, so that they would not get distributed. + +They also have utility if you are building RPM packages for software +which is archived at a well-known location and does not require that +you distribute the source with the binary, for example, for an +organization's internal use, where storing large quantities of source +is not as meaningful. + +The end result of all this, though, is that you can't rebuild +``no-source'' RPM packages using `rpm --rebuild' unless you also have +the sources or patches which are not included in the .nosrc.rpm. + +\section specfile_buildrequires BuildRequires: Tag + +Build dependencies are identical to install dependencies except: + +\verbatim + 1) they are prefixed with build (e.g. BuildRequires: rather than Requires:) + 2) they are resolved before building rather than before installing. +\endverbatim + +So, if you were to write a specfile for a package that requires egcs to build, +you would add +\verbatim + BuildRequires: egcs +\endverbatim +to your spec file. + +If your package was like dump and could not be built w/o a specific version of +the libraries to access an ext2 file system, you could express this as +\verbatim + BuildRequires: e2fsprofs-devel = 1.17-1 +\endverbatim + +Finally, if your package used C++ and could not be built with gcc-2.7.2.1, you +can express this as +\verbatim + BuildConflicts: gcc <= 2.7.2.1 +\endverbatim + +*/ diff --git a/doc/manual/triggers b/doc/manual/triggers new file mode 100644 index 0000000..64973f2 --- /dev/null +++ b/doc/manual/triggers @@ -0,0 +1,165 @@ +/*! \page triggers Trigger scriptlets + +Triggers provide a well-defined method for packages to interact with one +another at package install and uninstall time. They are an extension +of the normal installation scripts (i.e. %pre) which allows one package +(the "source" of the trigger package [which I often think of as the +"triggered package"]) to execute an action when the installation status +of another package (the "target" of the trigger) changes. + +\section triggers_example A Simple Example + +Say the package "mymailer" needs an /etc/mymailer/mailer symlink which points +to the mail transport agent to use. If sendmail is installed, the link should +point to /usr/bin/sendmail, but it vmail is installed, the link should +instead point to /usr/bin/vmail. If both packages are present, we don't care +where the link points (realistically, sendmail and vmail should conflict +with one another), while if neither package is installed the link should +not exist at all. + +This can be accomplished by mymailer providing trigger scripts which +move the symlink when any of the following occurs: + +\verbatim + 1) sendmail is installed + 2) vmail is installed + 3) sendmail is removed + 4) vmail is removed +\endverbatim + +The first two of these scripts would look like this: + +\verbatim + %triggerin -- sendmail + ln -sf /usr/bin/sendmail /etc/mymailer/mailer + + %triggerin -- vmail + ln -sf /usr/bin/vmail /etc/mymailer/mailer +\endverbatim + +These are two installation triggers, triggered by one of sendmail or vmail. +They are run when: + +\verbatim + 1) mymailer is already installed, and sendmail is installed or + upgraded + 2) mymailer is already installed, and vmail is installed or + upgraded + 3) sendmail is already installed, and mymailer is installed or + upgraded + 4) vmail is already installed, and mymailer is installed or + upgraded +\endverbatim + +For the upgrading, the strategy is a little different. Rather then +setting the link to point to the trigger, the link is set to point to +the *other* mailer (if it exists), as follows: + +\verbatim + %triggerun -- sendmail + [ $2 = 0 ] || exit 0 + if [ -f /usr/bin/vmail ]; then + ln -sf /usr/bin/vmail /etc/mymailer/mailer + else + rm -f /etc/mymailer/mailer + + fi + + %triggerun -- vmail + [ $2 = 0 ] || exit 0 + if [ -f /usr/bin/sendmail ]; then + ln -sf /usr/bin/sendmail /etc/mymailer/mailer + else + rm -f /etc/mymailer/mailer + + fi + + %postun + [ $1 = 0 ] && rm -f /etc/mymailer/mailer +\endverbatim + +These trigger scripts get run when: + +\verbatim + 1) sendmail is installed, and mymailer is removed + 2) vmail is installed, and mymailer is removed + 3) mymailer is installed, and sendmail gets removed + 4) mymailer is installed, and vmail gets removed +\endverbatim + +The %postun insures that /etc/mymailer/mailer is removed when mymailer +is removed (triggers get run at the same time as %preun scripts, so +doing this in the %postun is safe). Note that the triggers are testing +$2 to see if any action should occur. Recall that the $1 passed to regular +scripts contains the number of instances of the package which will be +installed when the operation has completed. $1 for triggers is exactly +the same -- it is the number of instances of the source (or triggered) +package which will remain when the trigger has completed. Similarly, $2 +is the number of instances of the target package which will remain. In +this case, if any of the targets will remain after the uninstall, the +trigger doesn't do anything (as it's probably being triggered by an +upgrade). + +\section triggers_syntax Trigger Syntax + +Trigger specifications are of the form: + +\verbatim + %trigger{un|in|postun} [[-n] ] [-p ] -- +\endverbatim + +The -n and -p arguments are the same as for %post scripts. The +\ portion is syntactically equivalent to a "Requires" +specification (version numbers may be used). If multiple items are +given (comma separated), the trigger is run when *any* of those +conditions becomes true (the , can be read as "or"). For example: + +\verbatim + %triggerin -n package -p /usr/bin/perl -- fileutils > 3.0, perl < 1.2 + print "I'm in my trigger!\n"; +\endverbatim + +Will put a trigger in package 'package' which runs when the installation +status of either fileutils > 3.0 or perl < 1.2 is changed. The script will +be run through /usr/bin/perl rather then /bin/sh (which is the default). + +\section triggers_unusual An Unusual Case + +There is one other type of trigger available -- %triggerpostun. These are +triggers that are run after their target package has been removed; they will +never be run when the package containing the trigger is removed. + +While this type of trigger is almost never useful, they allow a package to +fix errors introduced by the %postun of another package (or by an earlier +version of that package). + +\section triggers_order Order of Script Execution + +For reference, here's the order in which scripts are executed on a single +package upgrade: + +\verbatim + all-%pretrans + ... + any-%triggerprein (%triggerprein from other packages set off by new install) + new-%triggerprein + new-%pre for new version of package being installed + ... (all new files are installed) + new-%post for new version of package being installed + + any-%triggerin (%triggerin from other packages set off by new install) + new-%triggerin + old-%triggerun + any-%triggerun (%triggerun from other packages set off by old uninstall) + + old-%preun for old version of package being removed + ... (all old files are removed) + old-%postun for old version of package being removed + + old-%triggerpostun + any-%triggerpostun (%triggerpostun from other packages set off by old un + install) + ... + all-%posttrans +\endverbatim +*/ diff --git a/doc/manual/tsort b/doc/manual/tsort new file mode 100644 index 0000000..e2f634f --- /dev/null +++ b/doc/manual/tsort @@ -0,0 +1,159 @@ +/*! \page tsort Package ordering in rpm-4.0.1 and later + +The package ordering algorithm in rpm-4.0.1 has changed. + +\section tsort_problem The Problem + +Here's a simple test to illustrate the need for the change (from +bugzilla #12327): + +Assume the minimal 7.0 package manifest in /tmp/list +\verbatim + /mnt/redhat/comps/dist/7.0/sparc/bash-2.04-11.sparc.rpm + /mnt/redhat/comps/dist/7.0.2/sparc/glibc-2.1.94-1.sparc.rpm + /mnt/redhat/comps/dist/7.0/sparc/mktemp-1.5-5.sparc.rpm + /mnt/redhat/comps/dist/7.0/noarch/basesystem-7.0-2.noarch.rpm + /mnt/redhat/comps/dist/7.0/noarch/setup-2.3.4-1.noarch.rpm + /mnt/redhat/comps/dist/7.0/noarch/filesystem-2.0.7-1.noarch.rpm + /mnt/redhat/comps/dist/7.0/sparc/libtermcap-2.0.8-25.sparc.rpm + /mnt/redhat/comps/dist/7.0/noarch/termcap-11.0.1-3.noarch.rpm +\endverbatim + +with database initialization as +\verbatim + mkdir -p /tmp/ROOT/var/lib/rpm + rpm --initdb /tmp/ROOT/var/lib/rpm +\endverbatim + +This command "works" +\verbatim + rpm -Uvh -r /tmp/ROOT `cat /tmp/list` +\endverbatim +while this command +\verbatim + rpm -Uvh -r /tmp/ROOT `tac /tmp/list` +\endverbatim +fails with +\verbatim + loop in prerequisite chain: libtermcap bash libtermcap +\endverbatim + +\note The 2nd upgrade reverse orders the packages in the manifest. + +The problem is that the previous ordering algorithm, basically a very clever +implementation of tsort, was sensitive to initial conditions, and the first +command "happens" to snip a loop, while the second does not. + +\section tsort_solution The Solution + +The current ordering algorithm is exactly tsort from Knuth V1, with one further +twist. Since the only way out of a dependency loop is to snip the loop +somewhere, rpm uses hints from Requires: dependencies to distinguish +co-requisite (these are not needed to install, only to use, a package) from +pre-requisite (these are guaranteed to be installed before the package that +includes the dependency) relations. + +There is now syntax in spec files to explicitly specify the source of a +Requires: dependency. If, for example, you use grep in %post, then you +as a packager would normally add +\verbatim + PreReq: grep +\endverbatim +in order to insure that grep was installed before attempted use by the +%postun scriptlet. + +Now the same dependency can be expressed more precisely as +\verbatim + Requires(post): grep +\endverbatim + +For completeness, here's the complete set of tokens that may be +added to Requires: as in the example above: +\verbatim + "interp", RPMSENSE_INTERP + "prereq", RPMSENSE_PREREQ + "preun", RPMSENSE_SCRIPT_PREUN + "pre", RPMSENSE_SCRIPT_PRE + "postun", RPMSENSE_SCRIPT_POSTUN + "post", RPMSENSE_SCRIPT_POST + "rpmlib", RPMSENSE_RPMLIB + "verify", RPMSENSE_SCRIPT_VERIFY +\endverbatim + +Ditto BuildRequires: +\verbatim + "prep", RPMSENSE_SCRIPT_PREP + "build", RPMSENSE_SCRIPT_BUILD + "install", RPMSENSE_SCRIPT_INSTALL + "clean", RPMSENSE_SCRIPT_CLEAN +\endverbatim +but let's not go there (yet). + +For giggles, you can also do stuff like +\verbatim + Requires(pre,post): /bin/sh +\endverbatim + +By marking dependencies more precisely, rpm can distinguish between +an upgrade context (like the use of grep in %post above) and an installed +context (like the autogenerated Requires: in a package that includes a +script with #!/bin/sh), and that permits rpm to differentiate pre-requisites +from co-requisites while doing package ordering. + +Here's what cures the libtermcap <-> bash loop: +\verbatim + Requires(postun): /bin/sh +\endverbatim +which, since the dependency is clearly not useful or necessary in determining +install ordering, is safely ignored. + +\section tsort_sideeffects Side Effects + +One of the side effects of changing the package install ordering, is that +there are a handful of new loops that are detected. Here's what I found +looking at supported Red Hat releases: + +\verbatim + ghostscript-fonts ghostscript + /* 7.0 only */ + pango-gtkbeta-devel pango-gtkbeta + XFree86 Mesa + compat-glibc db2 + compat-glibc db1 + pam initscripts + kernel initscripts + initscripts sysklogd + /* 6.2 */ + egcs-c++ libstdc++ + /* 6.1 */ + pilot-link-devel pilot-link + /* 5.2 */ + pam pamconfig +\endverbatim + +Why are there new loops? Because tsort is trying to use all of the +dependency relations for ordering, while the previous tsort ignored all +Requires: from added packages. + +Except for the "well known" libtermcap <-> bash loop (which is just wrong), +all of the other dependencies are simply not needed in an upgrade context +to perform package ordering. Please note that all of the known to cause +loop dependencies listed above are, for now, explicitly ignored when +determining package install ordering. + +\section tsort_summary Summary + +So what does this all mean? Basically not much, unless you find yourself +trying to specify dependencies amongst a set of packages correctly and +happen to create a dependency loop. + +And, before you start adding the new-fangled syntax to packages, please +remember that rpm will almost certainly be auto-generating fine-grained +dependencies for %post et al scriptlets pretty soon. Truly, rpm needs to +make packaging easier, not provide Yet More Complicated Syntax in spec files. + +With thanks to Ken Estes for doing the implementation in bash2 that makes +it possible to auto-generate scriptlet dependencies, blame me for the long, +slow deployment. + +*/ diff --git a/doc/pl/gendiff.1 b/doc/pl/gendiff.1 new file mode 100644 index 0000000..c0e2dc1 --- /dev/null +++ b/doc/pl/gendiff.1 @@ -0,0 +1,47 @@ +.\" Jakub Bogusz , 2003 +.\" rpm 4.3-20030610 +.TH GENDIFF 1 "10 stycznia 2000" +.UC 4 +.SH NAZWA +gendiff \- narzÄ™dzie pomagajÄ…ce przy generowaniu bezbÅ‚Ä™dnych plików diff +.SH SKÅADNIA +\fBgendiff\fR +.SH OPIS +\fBgendiff\fR jest dość prostym skryptem pomagajÄ…cym przy generowaniu +pliku diff z pojedynczego katalogu. Jako jedyne argumenty przyjmuje nazwÄ™ +katalogu i "rozszerzenie-diff". Rozszerzenie diff powinno być unikalnÄ… +sekwencjÄ… znaków dodanÄ… na koÅ„cu wszystkich oryginalnych, nie +zmodyfikowanych plików. WyjÅ›ciem programu jest plik diff, który można +naÅ‚ożyć przy użyciu programu \fBpatch\fR, aby odtworzyć zmiany. +.PP +Zwykle sekwencja czynnoÅ›ci do stworzenia pliku diff to utworzenie dwóch +identycznych katalogów, dokonanie zmian w jednym katalogu i użycie +narzÄ™dzia \fBdiff\fR do utworzenia listy różnic miÄ™dzy nimi. +Użycie gendiff eliminuje potrzebÄ™ dodatkowej kopii oryginalnego, nie +zmodyfikowanego katalogu. Zamiast tego trzeba zachować tylko pojedyncze +pliki przed zmodyfikowaniem. +.PP +Przed edycjÄ… pliku skopiuj go, doÅ‚Ä…czajÄ…c do nazwy wybrane rozszerzenie. +Tzn. jeÅ›li zamierzasz zmodyfikować plik somefile.cpp i wybraÅ‚eÅ› rozszerzenie +"fix", skopiuj go do somefile.cpp.fix przed edycjÄ…. NastÄ™pnie modyfikuj +pierwszÄ… kopiÄ™ (somefile.cpp). +.PP +Po edycji wszystkich potrzebnych plików w ten sposób wejdź do katalogu +jeden poziom wyżej niż jest obecny kod źródÅ‚owy i napisz: +.sp +.nf + $ gendiff tenkatalog .fix > mydiff-fix.patch +.fi +.PP +PowinieneÅ› przekierować wyjÅ›cie do pliku (jak na przykÅ‚adzie), chyba że +chcesz zobaczyć wynik na standardowym wyjÅ›ciu. + +.PD +.SH "ZOBACZ TAKÅ»E" +.BR diff (1), +.BR patch (1) + +.SH AUTOR +.nf +Marc Ewing +.fi diff --git a/doc/pl/rpm.8 b/doc/pl/rpm.8 new file mode 100644 index 0000000..21b7299 --- /dev/null +++ b/doc/pl/rpm.8 @@ -0,0 +1,892 @@ +.\" 1999 PTM Przemek Borys :-Q +.\" Jakub Bogusz , 2003 +.\" rpm - Red Hat Package Manager +.\" rpm 4.3-20030610 +.TH rpm 8 "9 czerwca 2002" "Red Hat, Inc." +.SH NAZWA +rpm \- Menedżer pakietów RPM +.SH SKÅADNIA +.SS "ODPYTYWANIE I WERYFIKACJA PAKIETÓW:" +.PP + +\fBrpm\fR {\fB-q|--query\fR} [\fBopcje-wyboru\fR] [\fBopcje-zapytaÅ„\fR] + +\fBrpm\fR {\fB-V|--verify\fR} [\fBopcje-wyboru\fR] [\fBopcje-weryfikacji\fR] + +\fBrpm\fR \fB--import\fR \fB\fIKLUCZ_PUBLICZNY\fB\fR\fI ...\fR + +\fBrpm\fR {\fB-K|--checksig\fR} [\fB--nosignature\fR] [\fB--nodigest\fR] + \fB\fIPLIK_PAKIETU\fB\fR\fI ...\fR + +.SS "INSTALOWANIE, UAKTUALNIANIE I USUWANIE PAKIETÓW:" +.PP + +\fBrpm\fR {\fB-i|--install\fR} [\fBopcje-instalacji\fR] \fB\fIPLIK_PAKIETU\fB\fR\fI ...\fR + +\fBrpm\fR {\fB-U|--upgrade\fR} [\fBopcje-instalacji\fR] \fB\fIPLIK_PAKIETU\fB\fR\fI ...\fR + +\fBrpm\fR {\fB-F|--freshen\fR} [\fBopcje-instalacji\fR] \fB\fIPLIK_PAKIETU\fB\fR\fI ...\fR + +\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] [\fB--noscripts\fR] + [\fB--notriggers\fR] [\fB--test\fR] \fB\fINAZWA_PAKIETU\fB\fR\fI\ ...\fR + +.SS "RÓŻNE:" +.PP + +\fBrpm\fR {\fB--initdb|--rebuilddb\fR} + +\fBrpm\fR {\fB--addsign|--resign\fR} \fB\fIPLIK_PAKIETU\fB\fR\fI ...\fR + +\fBrpm\fR {\fB--querytags|--showrc\fR} + +\fBrpm\fR {\fB--setperms|--setugids\fR} \fB\fINAZWA_PAKIETU\fB\fR\fI ...\fR + +.SS "opcje-wyboru" +.PP + + [\fB\fINAZWA_PAKIETU\fB\fR] [\fB-a,--all\fR] [\fB-f,--file \fIPLIK\fB\fR] + [\fB-g,--group \fIGRUPA\fB\fR] {\fB-p,--package \fIPLIK_PAKIETU\fB\fR] + [\fB--hdrid \fISHA1\fB\fR] [\fB--pkgid \fIMD5\fB\fR] [\fB--tid \fITID\fB\fR] + [\fB--querybynumber \fINUMER_NAGÅÓWKA\fB\fR] [\fB--triggeredby \fINAZWA_PAKIETU\fB\fR] + [\fB--whatprovides \fIWÅASNOŚĆ\fB\fR] [\fB--whatrequires \fIWÅASNOŚĆ\fB\fR] + +.SS "opcje-zapytaÅ„" +.PP + + [\fB--changelog\fR] [\fB-c,--configfiles\fR] [\fB-d,--docfiles\fR] [\fB--dump\fR] + [\fB--filesbypkg\fR] [\fB-i,--info\fR] [\fB--last\fR] [\fB-l,--list\fR] + [\fB--provides\fR] [\fB--qf,--queryformat \fIFORMAT_ZAPYTANIA\fB\fR] + [\fB-R,--requires\fR] [\fB--scripts\fR] [\fB-s,--state\fR] + [\fB--triggers,--triggerscripts\fR] + +.SS "opcje-weryfikacji" +.PP + + [\fB--nodeps\fR] [\fB--nofiles\fR] [\fB--noscripts\fR] + [\fB--nodigest\fR] [\fB--nosignature\fR] + [\fB--nolinkto\fR] [\fB--nomd5\fR] [\fB--nosize\fR] [\fB--nouser\fR] + [\fB--nogroup\fR] [\fB--nomtime\fR] [\fB--nomode\fR] [\fB--nordev\fR] + +.SS "opcje-instalacji" +.PP + + [\fB--aid\fR] [\fB--allfiles\fR] [\fB--badreloc\fR] [\fB--excludepath \fISTARA_ÅšCIEÅ»KA\fB\fR] + [\fB--excludedocs\fR] [\fB--force\fR] [\fB-h,--hash\fR] + [\fB--ignoresize\fR] [\fB--ignorearch\fR] [\fB--ignoreos\fR] + [\fB--includedocs\fR] [\fB--justdb\fR] [\fB--nodeps\fR] + [\fB--nodigest\fR] [\fB--nosignature\fR] [\fB--nosuggest\fR] + [\fB--noorder\fR] [\fB--noscripts\fR] [\fB--notriggers\fR] + [\fB--oldpackage\fR] [\fB--percent\fR] [\fB--prefix \fINOWA_ÅšCIEÅ»KA\fB\fR] + [\fB--relocate \fISTARA_ÅšCIEÅ»KA\fB=\fINOWA_ÅšCIEÅ»KA\fB\fR] + [\fB--replacefiles\fR] [\fB--replacepkgs\fR] + [\fB--test\fR] + +.SH OPIS +.PP +\fBrpm\fP jest potężnym \fBmenedżerem pakietów\fR, który może być używany do +budowania, instalowania, odpytywania, weryfikowania, uaktualniania i +usuwania pakietów oprogramowania. \fBPakiet\fR skÅ‚ada siÄ™ z archiwum +plików oraz metadanych używanych do instalowania i usuwania plików. +Metadane zawierajÄ… pomocnicze skrypty, atrybuty plików oraz informacje +opisujÄ…ce pakiet. +\fBPakiety\fR wystÄ™pujÄ… w dwóch wersjach: pakietach binarnych, sÅ‚użących +do opakowania oprogramowania do instalacji oraz pakietach źródÅ‚owych, +zawierajÄ…cych kod źródÅ‚owy i przepis na zbudowanie pakietów binarnych. +.PP +Należy wybrać jeden z nastÄ™pujÄ…cych podstawowych trybów: +\fBOdpytywania\fR, +\fBWeryfikowania\fR, +\fBSprawdzania sygnatury\fR, +\fBInstalowania/Uaktualniania/OdÅ›wieżania\fR, +\fBOdinstalowywania\fR, +\fBInicjalizowania bazy danych\fR, +\fBPrzebudowywania bazy danych\fR, +\fBPonownego podpisywania\fR, +\fBDodawania sygnatury\fR, +\fBustawiania wÅ‚aÅ›cicieli i grup\fR, +\fBPokazywania etykiet zapytaÅ„\fR, oraz +\fBPokazywania konfiguracji\fR. +.SS "OPCJE OGÓLNE" +.PP +Opcje te mogÄ… być używane we wszystkich trybach. +.TP +\fB-?\fR, \fB--help\fR +Wypisuje informacjÄ™ o użyciu dÅ‚uższÄ… niż zwykle. +.TP +\fB--version\fR +Wypisuje pojedynczÄ… liniÄ™, zawierajÄ…cÄ… numer wersji używanego \fBrpm\fR-a. +.TP +\fB--quiet\fP +Wypisuje jak najmniej - zazwyczaj tylko komunikaty o bÅ‚Ä™dach. +.TP +\fB-v\fR +Wypisuje szczegółowe informacje - zwykle komunikaty o przebiegu procesu. +.TP +\fB-vv\fR +Wypisuje dużo brzydkich informacji diagnostycznych. +.TP +\fB--rcfile \fILISTA_PLIKÓW\fB\fR +Każdy z plików w oddzielonej dwukropkami \fILIÅšCIE_PLIKÓW\fP jest +odczytywany kolejno przez \fBrpm\fR-a w poszukiwaniu informacji o +konfiguracji. +Istnieć musi tylko pierwszy plik z listy, a tyldy sÄ… zamieniane na +wartość \fB$HOME\fR. +DomyÅ›lnÄ… \fILISTÄ„_PLIKÓW\fR jest +\fI/usr/lib/rpm/rpmrc\fR:\fI/usr/lib/rpm/redhat/rpmrc\fR:\fI/etc/rpmrc\fR:\fI~/.rpmrc\fR. +.TP +\fB--pipe \fIKOMENDA\fB\fR +Przekazuje potokiem wyjÅ›cie \fBrpm\fP-a do \fIKOMENDY\fR. +.TP +\fB--dbpath \fIKATALOG\fB\fR +Używa bazy danych z \fIKATALOGU\fR zamiast domyÅ›lnego \fI/var/lib/rpm\fR. +.TP +\fB--root \fIKATALOG\fB\fR +Używa do wszystkich operacji systemu zakorzenionego w \fIKATALOGU\fR. +Zauważ, że oznacza to, że baza danych w \fIKATALOGU\fP +bÄ™dzie używana przy sprawdzaniu zależnoÅ›ci, a wszystkie skrypty (np. +\fB%post\fR przy instalacji pakietu lub +\fB%prep\fR przy budowaniu pakietu) +bÄ™dÄ… uruchamiane po chroot(2) na +\fIKATALOG\fR. +.SS "OPCJE INSTALOWANIA I UAKTUALNIANIA" +.PP +OgólnÄ… postaciÄ… komendy instalowania rpm-a jest +.PP + +\fBrpm\fR {\fB-i|--install\fR} [\fBinstall-options\fR] \fB\fIPLIK_PAKIETU\fB\fR\fI ...\fR + +.PP +Instaluje to nowy pakiet. +.PP +OgólnÄ… postaciÄ… komendy uaktualniania rpm-a jest +.PP + +\fBrpm\fR {\fB-U|--upgrade\fR} [\fBinstall-options\fR] \fB\fIPLIK_PAKIETU\fB\fR\fI ...\fR + +.PP +Uaktualnia to aktualnie zainstalowany lub instaluje pakiet w nowej wersji. +Jest to to samo co install, lecz wszystkie inne wersje pakietu bÄ™dÄ… +usuniÄ™te po zainstalowaniu nowego pakietu. +.PP + +\fBrpm\fR {\fB-F|--freshen\fR} [\fBinstall-options\fR] \fB\fIPLIK_PAKIETU\fB\fR\fI ...\fR + +.PP +OdÅ›wieży to pakiety, lecz tylko jeÅ›li wczeÅ›niejsza wersja już istnieje. +\fIPLIK_PAKIETU\fR może być podany jako URL +\fBftp\fR lub +\fBhttp\fR. +W tym wypadku pakiet zostanie pobrany przed zainstalowaniem. +W sekcji \fBOPCJE FTP/HTTP\fR znajduje siÄ™ wiÄ™cej informacji o wewnÄ™trznej +obsÅ‚udze klienckiej +\fBftp\fR i +\fBhttp\fR w \fBrpm\fR. +.PP +.TP +\fB--aid\fR +Dodaje w razie potrzeby sugerowane pliki do zbioru transakcji. +.TP +\fB--allfiles\fR +Instaluje lub odÅ›wieża wszystkie pliki missingok (takie, których może +brakować) z pakietu, niezależnie czy istniejÄ…. +.TP +\fB--badreloc\fR +Do użytku w poÅ‚Ä…czeniu z \fB--relocate\fR. Pozwala na relokowanie Å›cieżek +wszystkich plików, nie tylko tych, których \fISTARA_ÅšCIEÅ»KA\fR jest na +liÅ›cie podpowiedzi dla relokacji w pakiecie binarnym. +.TP +\fB--excludepath \fISTARA_ÅšCIEÅ»KA\fB\fR +Nie instaluje plików, których nazwy rozpoczynajÄ… siÄ™ od +\fISTARA_ÅšCIEÅ»KA\fR. +.TP +\fB--excludedocs\fR +Nie instaluje żadnych plików, które sÄ… zaznaczone jako dokumentacja +(co tyczy siÄ™ także podrÄ™czników man i texinfo). +.TP +\fB--force\fR +To samo, co użycie: +\fB--replacepkgs\fR, +\fB--replacefiles\fR i +\fB--oldpackage\fR. +.TP +\fB-h\fR, \fB--hash\fR +Wypisuje 50 znaków krzyżyka, pokazujÄ…c proces rozpakowywania archiwum. +UżywajÄ…c z \fB-v|--verbose\fR, uzyskasz Å‚adny obraz. +.TP +\fB--ignoresize\fR +Nie sprawdza, czy na zamontowanych systemach plików jest dość miejsca na +zainstalowanie tego pakietu. +.TP +\fB--ignorearch\fR +Umożliwia instalacjÄ™ lub uaktualnienie nawet w wypadku, gdy +architektury binarnego pakietu i hosta nie odpowiadajÄ… sobie. +.TP +\fB--ignoreos\fR +Umożliwia instalacjÄ™ lub uaktualnienie nawet w wypadku, gdy +systemy operacyjne binarnego pakietu i hosta nie odpowiadajÄ… sobie. +.TP +\fB--includedocs\fR +Instaluje pliki dokumentacji. Tak jest domyÅ›lnie. +.TP +\fB--justdb\fR +OdÅ›wieża tylko bazÄ™ danych, a nie system plików. +.TP +\fB--nodigest\fR +Nie weryfikuje skrótów kryptograficznych pakietu ani nagłówka przy odczycie. +.TP +\fB--nosignature\fR +Nie weryfikuje sygnatur pakietu ani nagłówka przy odczycie. +.TP +\fB--nodeps\fR +Nie dokonuje sprawdzenia zależnoÅ›ci przed instalowaniem, lub +uaktualnieniem pakietu. +.TP +\fB--nosuggest\fR +Nie sugeruje pakietu(ów), które dostarczajÄ… brakujÄ…cÄ… zależność. +.TP +\fB--noorder\fR +Nie porzÄ…dkuje pakietów do instalacji. Lista pakietów w normalnych +wypadkach jest porzÄ…dkowana na nowo, aby speÅ‚nić zależnoÅ›ci. +.TP +\fB--noscripts\fR +.TP +\fB--nopre\fR +.TP +\fB--nopost\fR +.TP +\fB--nopreun\fR +.TP +\fB--nopostun\fR +Nie wywoÅ‚uje skryptów o podanej nazwie. +Opcja \fB--noscripts\fR jest równoważna + +\fB--nopre\fR +\fB--nopost\fR +\fB--nopreun\fR +\fB--nopostun\fR + +i wyÅ‚Ä…cza wykonywanie odpowiadajÄ…cych im skryptów +\fB%pre\fR, +\fB%post\fR, +\fB%preun\fR oraz +\fB%postun\fR. +.TP +\fB--notriggers\fR +.TP +\fB--notriggerin\fR +.TP +\fB--notriggerun\fR +.TP +\fB--notriggerpostun\fR +Nie wywoÅ‚uje skryptów, które sÄ… pociÄ…gane przez instalacjÄ™ lub +usuwanie pakietu. +Opcja \fB--notriggers\fR jest równoważna + +\fB--notriggerin\fR +\fB--notriggerun\fR +\fB--notriggerpostun\fR + +i wyÅ‚Ä…cza wykonywanie odpowiadajÄ…cych im skryptów +\fB%triggerin\fR, +\fB%triggerun\fR oraz +\fB%triggerpostun\fR. +.TP +\fB--oldpackage\fR +Zezwala uaktualnianiu na zastÄ…pienie nowszego pakietu starszym. +.TP +\fB--percent\fR +Wypisuje procenty podczas rozpakowywania plików z archiwum. Jest to zrobione +w celu uÅ‚atwienia wywoÅ‚ywania \frpm\fR-a z innych narzÄ™dzi. +.TP +\fB--prefix \fINOWA_ÅšCIEÅ»KA\fB\fR +Dla pakietów relokowalnych tÅ‚umaczy wszystkie Å›cieżki plików +zaczynajÄ…ce siÄ™ od prefiksu instalacji w podpowiedziach dla relokacji +na \fNOWÄ„_ÅšCIEÅ»KĘ\fR. +.TP +\fB--relocate \fISTARA_ÅšCIEÅ»KA\fB=\fINOWA_ÅšCIEÅ»KA\fB\fR +Dla pakietów relokowalnych tÅ‚umaczy wszystkie Å›cieżki plików +zaczynajÄ…ce siÄ™ od \fISTAREJ_ÅšCIEÅ»KI\fR w podpowiedziach dla relokacji +na \fINOWÄ„_ÅšCIEÅ»KĘ\fR. +Ta opcja może używana wiele razy, jeÅ›li ma być zrelokowane kilka różnych +\fISTARYCH_ÅšCIEÅ»EK\fR. +.TP +\fB--replacefiles\fR +Instaluje pakiety nawet jeÅ›li zastÄ™pujÄ… one pliki z innych, już +zainstalowanych pakietów. +.TP +\fB--replacepkgs\fR +Instaluje pakiety nawet jeÅ›li niektóre z nich sÄ… już zainstalowane na tym +systemie. +.TP +Nie instaluje pakietu, po prostu sprawdza i raportuje potencjalne +konflikty. +.SS "OPCJE USUWANIA" +.PP +OgólnÄ… postaciÄ… komendy usuwania rpm-a jest +.PP + +\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] [\fB--noscripts\fR] [\fB--notriggers\fR] [\fB--test\fR] \fB\fINAZWA_PAKIETU\fB\fR\fI ...\fR + +.PP +Można użyć nastÄ™pujÄ…cych opcji: +.TP +\fB--allmatches\fR +Usunie wszystkie wersje pakietu, które odpowiadajÄ… +\fI"\fR z pierÅ›cieni kluczy zlokalizowanych +w \fB/etc/rpm/.pgp\fP, +przy użyciu programu \fI/usr/bin/gpg\fR, zaÅ‚Ä…czyÅ‚byÅ› +.PP +.nf +%_gpg_path /etc/rpm/.gpg +%_gpg_name John Doe +%_gpgbin /usr/bin/gpg +.fi +.PP +w pliku konfiguracji makr. Do ogólnosystemowej konfiguracji użyj +\fI/etc/rpm/macros\fR, a dla lokalnej \fI~/.rpmmacros\fR. +.SS "OPCJE PRZEBUDOWYWANIA BAZY DANYCH" +.PP +Ogólna postać komendy przebudowywania bazy danych rpm-a to +.PP + +\fBrpm\fR {\fB--initdb|--rebuilddb\fR} [\fB-v\fR] [\fB--dbpath \fIKATALOG\fB\fR] [\fB--root \fIKATALOG\fB\fR] + +.PP +Użyj \fB--initdb\fR aby utworzyć nowÄ… bazÄ™ danych lub +\fB--rebuilddb\fR, aby przebudować indeksy bazy danych +z nagłówków zainstalowanych pakietów. +.SS "WYÅšWIETLANIE KONFIGURACJI" +.PP +Polecenie +.PP +\fBrpm\fR \fB--showrc\fR +.PP +pokazuje wartoÅ›ci, których \fBrpm\fR bÄ™dzie używaÅ‚ dla wszystkich +opcji, które sÄ… aktualnie ustawione w plikach konfiguracyjnych +\fIrpmrc\fR oraz +\fImacros\fR. +.SS "OPCJE FTP/HTTP" +.PP +\fBrpm\fR może dziaÅ‚ać jako klient FTP i/lub HTTP, co pozwala na +odpytywanie lub instalowanie pakietów z Internetu. +Pliki pakietów do operacji instalacji, uaktualnienia lub odpytania +mogÄ… być podane jako URL w stylu +\fBftp\fR lub +\fBhttp\fR: +.PP +ftp://UÅ»YTKOWNIK:HASÅO@HOST:PORT/Å›cieżka/do/pakietu.rpm +.PP +JeÅ›li część \fB:HASÅO\fR jest pominiÄ™ta, użytkownik zostanie o nie +zapytany (jednokrotnie na parÄ™ użytkownik/host). JeÅ›li pominiÄ™to nazwÄ™ +użytkownika i hasÅ‚o, używany jest anonimowy \fBftp\fR. We wszystkich +przypadkach używane sÄ… pasywne (PASV) transfery \fBftp\fR. +.PP +\fBrpm\fR zezwala na używanie z URL-ami \fBftp\fR nastÄ™pujÄ…cych opcji: +.TP +\fB--ftpproxy \fIHOST\fB\fR +Podany \fIHOST\fR bÄ™dzie używany jako proxy dla wszystkich transferów +ftp, co umożliwia użytkownikom Å›ciÄ…ganie danych przez zapory ogniowe, +które używajÄ… systemów proxy. Opcja ta może być też podana przez +skonfigurowanie makra \fB%_ftpproxy\fP. +.TP +\fB--ftpport \fIPORT\fB\fR +Numer \fIPORTU\fR TCP, którego użyć do poÅ‚Ä…czenia ftp na serwerze proxy +zamiast portu domyÅ›lnego. Opcja ta może być też podana przez +skonfigurowanie makra \fB%_ftpport\fP. +.PP +\fBrpm\fR zezwala na używanie z URL-ami \fBhttp\fR nastÄ™pujÄ…cych opcji: +.TP +\fB--httpproxy \fIHOST\fB\fR +Podany \fIHOST\fR bÄ™dzie używany jako proxy dla wszystkich transferów +\fBhttp\fR. Opcja ta może być też podana przez skonfigurowanie makra +\fB%_httpproxy\fR. +.TP +\fB--httpport \fIPORT\fB\fR +Numer \fIPORTU\fR TCP, którego użyć do poÅ‚Ä…czenia \fBhttp\fR na serwerze +proxy zamiast portu domyÅ›lnego. Opcja ta może być też podana przez +skonfigurowanie makra \fB%_httpport\fR. +.SH "SPRAWY SPADKOWE" +.SS "Uruchamianie rpmbuild" +.PP +Tryby budowania rpm-a znajdujÄ… siÄ™ teraz w programie +\fI/usr/bin/rpmbuild\fR. +Mimo że spadkowa kompatybilność zapewniona przez wymienione niżej aliasy +popt jest wystarczajÄ…ca, kompatybilność nie jest doskonaÅ‚a; dlatego +kompatybilność trybu budowania poprzez aliasy popt jest usuwana z rpm-a. +Zainstaluj pakiet \fBrpm-build\fR i zobacz +\fBrpmbuild\fR(8), gdzie znajduje siÄ™ dokumentacja wszystkich trybów budowania +\fBrpm\fR poprzednio udokumentowana w niniejszym +\fBrpm\fR(8). +.PP +Dodaj nastÄ™pujÄ…ce linie do \fI/etc/popt\fR, jeÅ›li chcesz nadal uruchamiać +\fBrpmbuild\fR z linii poleceÅ„ \fBrpm\fR-a: +.PP +.nf +rpm exec --bp rpmb -bp +rpm exec --bc rpmb -bc +rpm exec --bi rpmb -bi +rpm exec --bl rpmb -bl +rpm exec --ba rpmb -ba +rpm exec --bb rpmb -bb +rpm exec --bs rpmb -bs +rpm exec --tp rpmb -tp +rpm exec --tc rpmb -tc +rpm exec --ti rpmb -ti +rpm exec --tl rpmb -tl +rpm exec --ta rpmb -ta +rpm exec --tb rpmb -tb +rpm exec --ts rpmb -ts +rpm exec --rebuild rpmb --rebuild +rpm exec --recompile rpmb --recompile +rpm exec --clean rpmb --clean +rpm exec --rmsource rpmb --rmsource +rpm exec --rmspec rpmb --rmspec +rpm exec --target rpmb --target +rpm exec --short-circuit rpmb --short-circuit +.fi +.SH "PLIKI" +.SS "Konfiguracja rpmrc" +.PP +.nf +\fI/usr/lib/rpm/rpmrc\fR +\fI/usr/lib/rpm/redhat/rpmrc\fR +\fI/etc/rpmrc\fR +\fI~/.rpmrc\fR +.fi +.SS "Konfiguracja makr" +.PP +.nf +\fI/usr/lib/rpm/macros\fR +\fI/usr/lib/rpm/redhat/macros\fR +\fI/etc/rpm/macros\fR +\fI~/.rpmmacros\fR +.fi +.SS "Baza danych" +.PP +.nf +\fI/var/lib/rpm/Basenames\fR +\fI/var/lib/rpm/Conflictname\fR +\fI/var/lib/rpm/Dirnames\fR +\fI/var/lib/rpm/Filemd5s\fR +\fI/var/lib/rpm/Group\fR +\fI/var/lib/rpm/Installtid\fR +\fI/var/lib/rpm/Name\fR +\fI/var/lib/rpm/Packages\fR +\fI/var/lib/rpm/Providename\fR +\fI/var/lib/rpm/Provideversion\fR +\fI/var/lib/rpm/Pubkeys\fR +\fI/var/lib/rpm/Removed\fR +\fI/var/lib/rpm/Requirename\fR +\fI/var/lib/rpm/Requireversion\fR +\fI/var/lib/rpm/Sha1header\fR +\fI/var/lib/rpm/Sigmd5\fR +\fI/var/lib/rpm/Triggername\fR +.fi +.SS "Tymczasowe" +.PP +\fI/var/tmp/rpm*\fR +.SH "ZOBACZ TAKÅ»E" + +.nf +\fBpopt\fR(3), +\fBrpm2cpio\fR(8), +\fBrpmbuild\fR(8), +.fi + +\fBhttp://www.rpm.org/ +\fR + +.SH "AUTORZY" + +.nf +Marc Ewing +Jeff Johnson +Erik Troan +.fi diff --git a/doc/pl/rpm2cpio.8 b/doc/pl/rpm2cpio.8 new file mode 100644 index 0000000..6c030f8 --- /dev/null +++ b/doc/pl/rpm2cpio.8 @@ -0,0 +1,27 @@ +.\" {PTM/WK/1999-11-21} +.\" Jakub Bogusz , 2003 +.\" rpm2cpio - Converts RPM Package to cpio archive +.\" rpm 4.3-20030610 +.TH rpm2cpio 8 "11 stycznia 2001" "Red Hat, Inc." +.SH NAZWA +rpm2cpio \- konwersja pakietu RPM na archiwum cpio +.SH SKÅADNIA +\fBrpm2cpio\fP [ nazwa_pliku ] +.SH OPIS +\fBrpm2cpio\fP konwertuje podany, jako jedyny argument, plik .rpm +do postaci archiwum cpio na standardowym wyjÅ›ciu. JeÅ›li podano argument '-', +to strumieÅ„ rpm czytany jest ze standardowego wejÅ›cia. + +.br +.I "\fBrpm2cpio rpm-1.1-1.i386.rpm\fP" +.br +.I "\fBrpm2cpio < glint-1.0-1.i386.rpm\fP" +.br +.I "\fBrpm2cpio glint-1.0-1.i386.rpm | cpio -dium\fP" + +.SH ZOBACZ TAKÅ»E +.IR rpm (8) +.SH AUTOR +.nf +Erik Troan +.fi diff --git a/doc/pl/rpmbuild.8 b/doc/pl/rpmbuild.8 new file mode 100644 index 0000000..673becf --- /dev/null +++ b/doc/pl/rpmbuild.8 @@ -0,0 +1,245 @@ +.\" Jakub Bogusz , 2003 +.\" (partially based on rpm.8 translation by Przemek Borys 1999) +.\" rpm 4.3-20030610 +.TH "RPMBUILD" "8" "9 czerwca 2002" "Red Hat, Inc." +.SH NAZWA +rpmbuild \- Budowanie pakietów RPM +.SH SKÅADNIA +.SS "BUDOWANIE PAKIETÓW:" +.PP + +\fBrpmbuild\fR {\fB-ba|-bb|-bp|-bc|-bi|-bl|-bs\fR} [\fBopcje-rpmbuild\fR] \fB\fIPLIK_SPEC\fB\fR\fI ...\fR + +\fBrpmbuild\fR {\fB-ta|-tb|-tp|-tc|-ti|-tl|-ts\fR} [\fBopcje-rpmbuild\fR] \fB\fITARBALL\fB\fR\fI ...\fR + +\fBrpmbuild\fR {\fB--rebuild|--recompile\fR} \fB\fIPAKIET_ŹRÓDÅOWY\fB\fR\fI ...\fR + +.SS "RÓŻNE:" +.PP + +\fBrpmbuild\fR \fB--showrc\fR + +.SS "opcje-rpmbuild" +.PP + + [\fB--buildroot \fIKATALOG\fB\fR] [\fB--clean\fR] [\fB--nobuild\fR] + [\fB--rmsource\fR] [\fB--rmspec\fR] [\fB--short-circuit\fR] [\fB--sign\fR] + [\fB--target \fIPLATFORMA\fB\fR] + +.SH "OPIS" +.PP +\fBrpmbuild\fR sÅ‚uży do budowania binarnych i źródÅ‚owych pakietów +oprogramowania. \fBPakiet\fR skÅ‚ada siÄ™ z archiwum plików oraz metadanych +używanych do instalowania i usuwania plików. Metadane zawierajÄ… pomocnicze +skrypty, atrybuty plików oraz informacje opisujÄ…ce pakiet. +\fBPakiety\fR wystÄ™pujÄ… w dwóch wersjach: pakietach binarnych, sÅ‚użących do +opakowania oprogramowania do instalacji oraz pakietach źródÅ‚owych, +zawierajÄ…cych kod źródÅ‚owy i przepis na zbudowanie pakietów binarnych. +.PP +Trzeba wybrać jeden z nastÄ™pujÄ…cych podstawowych trybów: +\fBBudowanie pakietu\fR, +\fBBudowanie pakietu z tarballa\fR, +\fBRekompilacja pakietu\fR, +\fBWyÅ›wietlenie konfiguracji\fR. +.SS "OPCJE OGÓLNE" +.PP +Opcje te mogÄ… być używane we wszystkich trybach. +.TP +\fB-?\fR, \fB--help\fR +Wypisuje informacjÄ™ o użyciu dÅ‚uższÄ… niż zwykle. +.TP +\fB--version\fR +Wypisuje pojedynczÄ… liniÄ™, zawierajÄ…cÄ… numer wersji używanego \fBrpm\fR-a. +.TP +\fB--quiet\fP +Wypisuje jak najmniej - zazwyczaj tylko komunikaty o bÅ‚Ä™dach. +.TP +\fB-v\fR +Wypisuje szczegółowe informacje - zwykle komunikaty o przebiegu procesu. +.TP +\fB-vv\fR +Wypisuje dużo brzydkich informacji diagnostycznych. +.TP +\fB--rcfile \fILISTA_PLIKÓW\fB\fR +Każdy z plików w oddzielonej dwukropkami \fILIÅšCIE_PLIKÓW\fP jest +odczytywany kolejno przez \fBrpm\fR-a w poszukiwaniu informacji o +konfiguracji. +Istnieć musi tylko pierwszy plik z listy, a tyldy sÄ… zamieniane na +wartość \fB$HOME\fR. +DomyÅ›lnÄ… \fILISTÄ„_PLIKÓW\fR jest +\fI/usr/lib/rpm/rpmrc\fR:\fI/usr/lib/rpm/redhat/rpmrc\fR:\fI/etc/rpmrc\fR:\fI~/.rpmrc\fR. +.TP +\fB--pipe \fIKOMENDA\fB\fR +Przekazuje potokiem wyjÅ›cie \fBrpm\fP-a do \fIKOMENDY\fR. +.TP +\fB--dbpath \fIKATALOG\fB\fR +Używa bazy danych z \fIKATALOGU\fR zamiast domyÅ›lnego \fI/var/lib/rpm\fR. +.TP +\fB--root \fIKATALOG\fB\fR +Używa do wszystkich operacji systemu zakorzenionego w \fIKATALOGU\fR. +Zauważ, że oznacza to, że baza danych w \fIKATALOGU\fP +bÄ™dzie używana przy sprawdzaniu zależnoÅ›ci, a wszystkie skrypty (np. +\fB%post\fR przy instalacji pakietu lub +\fB%prep\fR przy budowaniu pakietu) +bÄ™dÄ… uruchamiane po chroot(2) na +\fIKATALOG\fR. +.SS "OPCJE BUDOWANIA" +.PP +OgólnÄ… postaciÄ… komendy budowania rpm-a jest +.PP + +\fBrpmbuild\fR \fB-b\fIETAP\fB|-t\fIETAP\fB\fR [ \fB opcje-rpmbuild +\fR ] \fB\fIPLIK\fB\fR\fI ...\fR + +.PP +JeÅ›li do zbudowania pakietu używany jest plik spec, to argumentem powinno +być \fB-b\fR, a jeÅ›li \fBrpmbuild\fR powinien zajrzeć wewnÄ…trz (być może +skompresowanego) pliku tar w poszukiwaniu speca, to powinna być użyta opcja +\fB-t\fR. Po pierwszym argumencie, drugi znak (\fIETAP\fR) okreÅ›la etapy +budowania i pakietowania, które należy wykonać. Może być jednym z: +.TP +\fB-ba\fR +Buduje pakiety binarny i źródÅ‚owy (po wykonaniu etapów %prep, %build +i %install). +.TP +\fB-bb\fR +Buduje pakiet binarny (po wykonaniu etapów %prep, %build i %install). +.TP +\fB-bp\fR +Wykonuje etap "%prep" z pliku spec. Zwykle obejmuje to rozpakowanie źródeÅ‚ +i zaaplikowanie wszelkich Å‚at. +.TP +\fB-bc\fR +Wykonuje etap "%build" z pliku spec (po wykonaniu etapu %prep). +Ogólnie obejmuje to odpowiednik "make". +.TP +\fB-bi\fR +Wykonuje etap "%install" z pliku spec (po wykonaniu etapów %prep i %build). +Ogólnie obejmuje to odpowiednik "make install". +.TP +\fB-bl\fR +Dokonuje sprawdzenia listy. W sekcji "%files" pliku spec rozwijane sÄ… makra +i dokonywane sÄ… sprawdzenia, by upewnić siÄ™, że każdy plik istnieje. +.TP +\fB-bs\fR +Buduje tylko pakiet źródÅ‚owy. +.PP +MogÄ… być też użyte nastÄ™pujÄ…ce opcje: +.TP +\fB--buildroot \fIKATALOG\fB\fR +Na czas budowania pakietu zastÄ™puje wartość BuildRoot \fIKATALOGIEM\fR. +.TP +\fB--clean\fR +Usuwa drzewo budowania po stworzeniu pakietów. +.TP +\fB--nobuild\fR +Nie wykonuje żadnych etapów budowania. Przydatne do testowania plików spec. +.TP +\fB--rmsource\fR +Usuwa źródÅ‚a po budowaniu (może być też używane samodzielnie, np. +"\fBrpmbuild\fR \fB--rmsource foo.spec\fR"). +.TP +\fB--rmspec\fR +Usuwa plik spec po budowaniu (może być też używane samodzielnie, np. +"\fBrpmbuild\fR \fB--rmspec foo.spec\fR"). +.TP +\fB--short-circuit\fR +Przechodzi wprost do podanego etapu (tzn. pomija wszystkie etapy +prowadzÄ…ce do podanego). PrawidÅ‚owe tylko z \fB-bc\fR i \fB-bi\fR. +.TP +\fB--sign\fR +Osadza w pakiecie sygnaturÄ™ GPG. Sygnatura ta może być używana do +weryfikowania integralnoÅ›ci i pochodzenia pakietu. Zobacz sekcjÄ™ o +SYGNATURACH GPG w +\fBrpm\fR(8), gdzie znajdujÄ… siÄ™ szczegóły dotyczÄ…ce konfiguracji. +.TP +\fB--target \fIPLATFORMA\fB\fR +Podczas budowania pakietu interpretuje \fIPLATFORMĘ\fR jako +\fBarch-vendor-os\fR i ustawia odpowiednio makra +\fB%_target\fR, +\fB%_target_cpu\fR oraz +\fB%_target_os\fP. +.SS "OPCJE PRZEBUDOWYWANIA I REKOMPILACJI" +.PP +IstniejÄ… dwa inne sposoby na wywoÅ‚anie budowania przy użyciu rpm-a: +.PP + +\fBrpmbuild\fR \fB--rebuild|--recompile\fR \fB\fIPAKIET_ŹRÓDÅOWY\fB\fR\fI ...\fR + +.PP +Po takim wywoÅ‚aniu, \fBrpmbuild\fR instaluje podany pakiet źródÅ‚owy oraz +wykonuje etapy prep, kompilacji i instalacji. Dodatkowo, \fB--rebuild\fR +buduje nowy pakiet binarny. Po tym jak budowanie jest zakoÅ„czone, katalog +budowania jest usuwany (jak przy \fB--clean\fR), a potem źródÅ‚a i plik spec +dla pakietu sÄ… usuwane. +.SS "WYÅšWIETLANIE KONFIGURACJI" +.PP +Polecenie +.PP + +\fBrpmbuild\fR \fB--showrc\fR + +.PP +pokazuje wartoÅ›ci, których \fBrpmbuild\fR bÄ™dzie używaÅ‚ dla wszystkich +opcji, które sÄ… aktualnie ustawione w plikach konfiguracyjnych +\fIrpmrc\fR oraz +\fImacros\fR. +.SH "PLIKI" +.SS "Konfiguracja rpmrc" +.PP +.nf +\fI/usr/lib/rpm/rpmrc\fR +\fI/usr/lib/rpm/redhat/rpmrc\fR +\fI/etc/rpmrc\fR +\fI~/.rpmrc\fR +.fi +.SS "Konfiguracja makr" +.PP +.nf +\fI/usr/lib/rpm/macros\fR +\fI/usr/lib/rpm/redhat/macros\fR +\fI/etc/rpm/macros\fR +\fI~/.rpmmacros\fR +.fi +.SS "Baza danych" +.PP +.nf +\fI/var/lib/rpm/Basenames\fR +\fI/var/lib/rpm/Conflictname\fR +\fI/var/lib/rpm/Dirnames\fR +\fI/var/lib/rpm/Filemd5s\fR +\fI/var/lib/rpm/Group\fR +\fI/var/lib/rpm/Installtid\fR +\fI/var/lib/rpm/Name\fR +\fI/var/lib/rpm/Packages\fR +\fI/var/lib/rpm/Providename\fR +\fI/var/lib/rpm/Provideversion\fR +\fI/var/lib/rpm/Pubkeys\fR +\fI/var/lib/rpm/Removed\fR +\fI/var/lib/rpm/Requirename\fR +\fI/var/lib/rpm/Requireversion\fR +\fI/var/lib/rpm/Sha1header\fR +\fI/var/lib/rpm/Sigmd5\fR +\fI/var/lib/rpm/Triggername\fR +.fi +.SS "Tymczasowe" +.PP +\fI/var/tmp/rpm*\fR +.SH "ZOBACZ TAKÅ»E" + +.nf +\fBpopt\fR(3), +\fBrpm2cpio\fR(8), +\fBgendiff\fR(1), +\fBrpm\fR(8), +.fi + +\fBhttp://www.rpm.org/ +\fR +.SH "AUTORZY" + +.nf +Marc Ewing +Jeff Johnson +Erik Troan +.fi diff --git a/doc/pl/rpmdeps.8 b/doc/pl/rpmdeps.8 new file mode 100644 index 0000000..3b94364 --- /dev/null +++ b/doc/pl/rpmdeps.8 @@ -0,0 +1,24 @@ +.\" Jakub Bogusz , 2003 +.\" rpm 4.3-20030610 +.TH "RPMDEPS" "8" "24 października 2002" "Red Hat, Inc." +.SH NAZWA +rpmdeps \- Generowanie zależnoÅ›ci pakietów RPM +.SH SKÅADNIA +.PP + +\fBrpmdeps\fR \fB{-P|--provides}\fR \fB{-R|--requires}\fR \fB\fIPLIK\fB\fR\fI ...\fR + +.SH "OPIS" +.PP +\fBrpmdeps\fR generuje zależnoÅ›ci pakietu dla zbioru argumentów +\fBPLIKOWYCH\fR. Każdy argument \fBPLIKOWY\fR jest przeszukiwany pod +kÄ…tem Elf32/Elf64, interpretera skryptów lub zależnoÅ›ci dla skryptu, +a zależnoÅ›ci sÄ… wypisywane na standardowe wyjÅ›cie. +.SH "ZOBACZ TAKÅ»E" + +\fBrpm\fR(8), + +\fBrpmbuild\fR(8), +.SH "AUTORZY" + +Jeff Johnson diff --git a/doc/pl/rpmgraph.8 b/doc/pl/rpmgraph.8 new file mode 100644 index 0000000..de25042 --- /dev/null +++ b/doc/pl/rpmgraph.8 @@ -0,0 +1,42 @@ +.\" Jakub Bogusz , 2003 +.\" rpm 4.3-20030610 +.TH "RPMGRAPH" "8" "30 czerwca 2002" "Red Hat, Inc." +.SH NAZWA +rpmgraph \- WyÅ›wietlanie grafu zależnoÅ›ci pakietu RPM +.SH SKÅADNIA +.PP + +\fBrpmgraph\fR \fB\fIPLIK_PAKIETU\fB\fR\fI ...\fR + +.SH "OPIS" +.PP +\fBrpmgraph\fR używa argumentów \fIPLIK_PAKIETU\fR do wygenerowania +grafu zależnoÅ›ci pakietów. Każdy argument \fIPLIK_PAKIETU\fR jest +czytany i dodawany do zbioru transakcji rpm-a. Elementy zbioru +transakcji sÄ… częściowo porzÄ…dkowane przy użyciu sortowania +topologicznego. NastÄ™pnie częściowo uporzÄ…dkowane elementy sÄ… +wypisywane na standardowe wyjÅ›cie. +.PP +WierzchoÅ‚ki w grafie zależnoÅ›ci to nazwy pakietów, krawÄ™dzie w grafie +skierowanym wskazujÄ… na rodzica każdego wierzchoÅ‚ka. Rodzic jest +zdefiniowany jako ostatni poprzednik pakietu w częściowym porzÄ…dku +przy użyciu gdzie zależnoÅ›ci pakietu jako relacji. Oznacza to, że +rodzic danego pakietu jest ostatniÄ… zależnoÅ›ciÄ… pakietu. +.PP +WyjÅ›cie jest w formacie grafu skierowanego \fBdot\fR(1) i może być +wyÅ›wietlone lub wydrukowane przy użyciu edytora grafów \fBdotty\fR +z pakietu \fBgraphviz\fR. +Nie ma opcji specyficznych dla programu \fBrpmgraph\fR, tylko wspólne +opcje \fBrpm\fR-a. Aktualnie zaimplementowane opcje można zobaczyć +w komunikacie o skÅ‚adni komendy \fBrpmgraph\fR. +.SH "ZOBACZ TAKÅ»E" + +\fBdot\fR(1), + +\fBdotty\fR(1), + +\fB http://www.graphviz.org/ +\fR +.SH "AUTORZY" + +Jeff Johnson diff --git a/doc/rpm.8 b/doc/rpm.8 new file mode 100644 index 0000000..f510fac --- /dev/null +++ b/doc/rpm.8 @@ -0,0 +1,843 @@ +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.TH "RPM" "8" "09 June 2002" "Red Hat, Inc." +.SH NAME +rpm \- RPM Package Manager +.SH SYNOPSIS +.SS "QUERYING AND VERIFYING PACKAGES:" +.PP + + +\fBrpm\fR {\fB-q|--query\fR} [\fBselect-options\fR] [\fBquery-options\fR] + + + +\fBrpm\fR {\fB-V|--verify\fR} [\fBselect-options\fR] [\fBverify-options\fR] + + + +\fBrpm\fR [\fB--nosignature\fR] [\fB--nodigest\fR] + \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.SS "INSTALLING, UPGRADING, AND REMOVING PACKAGES:" +.PP + + +\fBrpm\fR {\fB-i|--install\fR} [\fBinstall-options\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + + + +\fBrpm\fR {\fB-U|--upgrade\fR} [\fBinstall-options\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + + + +\fBrpm\fR {\fB-F|--freshen\fR} [\fBinstall-options\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + + + +\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] [\fB--noscripts\fR] + [\fB--notriggers\fR] [\fB--test\fR] \fB\fIPACKAGE_NAME\fB\fR\fI\ ...\fR + +.SS "MISCELLANEOUS:" +.PP + + +\fBrpm\fR {\fB--querytags|--showrc\fR} + + + +\fBrpm\fR {\fB--setperms|--setugids\fR} \fB\fIPACKAGE_NAME\fB\fR\fI ...\fR + +.SS "select-options" +.PP + + + [\fB\fIPACKAGE_NAME\fB\fR] [\fB-a,--all\fR] [\fB-f,--file \fIFILE\fB\fR] + [\fB-g,--group \fIGROUP\fB\fR] {\fB-p,--package \fIPACKAGE_FILE\fB\fR] + [\fB--hdrid \fISHA1\fB\fR] [\fB--pkgid \fIMD5\fB\fR] [\fB--tid \fITID\fB\fR] + [\fB--querybynumber \fIHDRNUM\fB\fR] [\fB--triggeredby \fIPACKAGE_NAME\fB\fR] + [\fB--whatprovides \fICAPABILITY\fB\fR] [\fB--whatrequires \fICAPABILITY\fB\fR] + +.SS "query-options" +.PP + + + [\fB--changelog\fR] [\fB-c,--configfiles\fR] [\fB--conflicts\fR] + [\fB-d,--docfiles\fR] [\fB--dump\fR] [\fB--filesbypkg\fR] [\fB-i,--info\fR] + [\fB--last\fR] [\fB-l,--list\fR] [\fB--provides\fR] + [\fB--qf,--queryformat \fIQUERYFMT\fB\fR] [\fB-R,--requires\fR] + [\fB--scripts\fR] [\fB-s,--state\fR] [\fB--triggers,--triggerscripts\fR] + +.SS "verify-options" +.PP + + + [\fB--nodeps\fR] [\fB--nofiles\fR] [\fB--noscripts\fR] + [\fB--nodigest\fR] [\fB--nosignature\fR] + [\fB--nolinkto\fR] [\fB--nofiledigest\fR] [\fB--nosize\fR] [\fB--nouser\fR] + [\fB--nogroup\fR] [\fB--nomtime\fR] [\fB--nomode\fR] [\fB--nordev\fR] + [\fB--nocaps\fR] + +.SS "install-options" +.PP + + + [\fB--allfiles\fR] [\fB--badreloc\fR] [\fB--excludepath \fIOLDPATH\fB\fR] + [\fB--excludedocs\fR] [\fB--force\fR] [\fB-h,--hash\fR] + [\fB--ignoresize\fR] [\fB--ignorearch\fR] [\fB--ignoreos\fR] + [\fB--includedocs\fR] [\fB--justdb\fR] [\fB--nocollections\fR] + [\fB--nodeps\fR] [\fB--nodigest\fR] [\fB--nosignature\fR] + [\fB--noorder\fR] [\fB--noscripts\fR] [\fB--notriggers\fR] + [\fB--oldpackage\fR] [\fB--percent\fR] [\fB--prefix \fINEWPATH\fB\fR] + [\fB--relocate \fIOLDPATH\fB=\fINEWPATH\fB\fR] + [\fB--replacefiles\fR] [\fB--replacepkgs\fR] + [\fB--test\fR] + +.SH "DESCRIPTION" +.PP +\fBrpm\fR is a powerful \fBPackage Manager\fR, +which can be used to build, install, query, verify, update, and +erase individual software packages. +A \fBpackage\fR consists of an archive of files and +meta-data used to install and erase the archive files. The meta-data +includes helper scripts, file attributes, and descriptive information +about the package. +\fBPackages\fR come in two varieties: binary packages, +used to encapsulate software to be installed, and source packages, +containing the source code and recipe necessary to produce binary +packages. +.PP +One of the following basic modes must be selected: +\fBQuery\fR, +\fBVerify\fR, +\fBInstall/Upgrade/Freshen\fR, +\fBUninstall\fR, +\fBSet Owners/Groups\fR, +\fBShow Querytags\fR, and +\fBShow Configuration\fR. +.SS "GENERAL OPTIONS" +.PP +These options can be used in all the different modes. +.TP +\fB-?, --help\fR +Print a longer usage message then normal. +.TP +\fB--version\fR +Print a single line containing the version number of \fBrpm\fR +being used. +.TP +\fB--quiet\fR +Print as little as possible - normally only error messages will +be displayed. +.TP +\fB-v\fR +Print verbose information - normally routine progress messages will be +displayed. +.TP +\fB-vv\fR +Print lots of ugly debugging information. +.TP +\fB--rcfile \fIFILELIST\fB\fR +Each of the files in the colon separated +\fIFILELIST\fR +is read sequentially by \fBrpm\fR for configuration +information. +Only the first file in the list must exist, and tildes will be +expanded to the value of \fB$HOME\fR. +The default \fIFILELIST\fR is +\fI/usr/lib/rpm/rpmrc\fR:\fI/usr/lib/rpm/redhat/rpmrc\fR:\fI/etc/rpmrc\fR:\fI~/.rpmrc\fR. +.TP +\fB--pipe \fICMD\fB\fR +Pipes the output of \fBrpm\fR to the command \fICMD\fR. +.TP +\fB--dbpath \fIDIRECTORY\fB\fR +Use the database in \fIDIRECTORY\fR rather +than the default path \fI/var/lib/rpm\fR +.TP +\fB--root \fIDIRECTORY\fB\fR +Use the file system tree rooted at \fIDIRECTORY\fR for all operations. +Note that this means the database within +\fIDIRECTORY\fR +will be used for dependency checks and any scriptlet(s) (e.g. +\fB%post\fR if installing, or +\fB%prep\fR if building, a package) +will be run after a chroot(2) to +\fIDIRECTORY\fR. +.SS "INSTALL AND UPGRADE OPTIONS" +.PP +In these options, \fIPACKAGE_FILE\fR can be either \fBrpm\fR binary +file or ASCII package manifest (see \fBPACKAGE SELECTION OPTIONS\fR), and +may be specified as an +\fBftp\fR or +\fBhttp\fR URL, +in which case the package will be downloaded before being +installed. See \fBFTP/HTTP OPTIONS\fR +for information on \fBrpm\fR's internal +\fBftp\fR and +\fBhttp\fR +client support. +.PP +The general form of an rpm install command is +.PP +\fBrpm\fR {\fB-i|--install\fR} [\fBinstall-options\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR +.PP +This installs a new package. +.PP +The general form of an rpm upgrade command is +.PP +\fBrpm\fR {\fB-U|--upgrade\fR} [\fBinstall-options\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR +.PP +This upgrades or installs the package currently installed +to a newer version. This is the same as install, except +all other version(s) of the package are removed after the +new package is installed. +.PP +\fBrpm\fR {\fB-F|--freshen\fR} [\fBinstall-options\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR +.PP +This will upgrade packages, but only ones for which an earlier version is +installed. +.PP +.TP +\fB--allfiles\fR +Installs or upgrades all the missingok files in the package, +regardless if they exist. +.TP +\fB--badreloc\fR +Used with \fB--relocate\fR, permit relocations on +all file paths, not just those \fIOLDPATH\fR's +included in the binary package relocation hint(s). +.TP +\fB--excludepath \fIOLDPATH\fB\fR +Don't install files whose name begins with +\fIOLDPATH\fR. +.TP +\fB--excludedocs\fR +Don't install any files which are marked as documentation +(which includes man pages and texinfo documents). +.TP +\fB--force\fR +Same as using +\fB--replacepkgs\fR, +\fB--replacefiles\fR, and +\fB--oldpackage\fR. +.TP +\fB-h, --hash\fR +Print 50 hash marks as the package archive is unpacked. +Use with \fB-v|--verbose\fR for a nicer display. +.TP +\fB--ignoresize\fR +Don't check mount file systems for sufficient disk space before +installing this package. +.TP +\fB--ignorearch\fR +Allow installation or upgrading even if the architectures +of the binary package and host don't match. +.TP +\fB--ignoreos\fR +Allow installation or upgrading even if the operating +systems of the binary package and host don't match. +.TP +\fB--includedocs\fR +Install documentation files. This is the default behavior. +.TP +\fB--justdb\fR +Update only the database, not the filesystem. +.TP +\fB--nodigest\fR +Don't verify package or header digests when reading. +.TP +\fB--nomanifest\fR +Don't process non-package files as manifests. +.TP +\fB--nosignature\fR +Don't verify package or header signatures when reading. +.TP +\fB--nodeps\fR +Don't do a dependency check before installing or upgrading +a package. +.TP +\fB--noorder\fR +Don't reorder the packages for an install. The list of +packages would normally be reordered to satisfy dependencies. +.TP +\fB--noscripts\fR +.TP +\fB--nopre\fR +.TP +\fB--nopost\fR +.TP +\fB--nopreun\fR +.TP +\fB--nopostun\fR +Don't execute the scriptlet of the same name. +The \fB--noscripts\fR option is equivalent to + +\fB--nopre\fR +\fB--nopost\fR +\fB--nopreun\fR +\fB--nopostun\fR + +and turns off the execution of the corresponding +\fB%pre\fR, +\fB%post\fR, +\fB%preun\fR, and +\fB%postun\fR +scriptlet(s). +.TP +\fB--notriggers\fR +.TP +\fB--notriggerin\fR +.TP +\fB--notriggerun\fR +.TP +\fB--notriggerprein\fR +.TP +\fB--notriggerpostun\fR +Don't execute any trigger scriptlet of the named type. +The \fB--notriggers\fR option is equivalent to + +\fB--notriggerprein\fR +\fB--notriggerin\fR +\fB--notriggerun\fR +\fB--notriggerpostun\fR + +and turns off execution of the corresponding +\fB%triggerprein\fR, +\fB%triggerin\fR, +\fB%triggerun\fR, and +\fB%triggerpostun\fR +scriptlet(s). +.TP +\fB--oldpackage\fR +Allow an upgrade to replace a newer package with an older one. +.TP +\fB--percent\fR +Print percentages as files are unpacked from the package archive. +This is intended to make \fBrpm\fR easy to run from +other tools. +.TP +\fB--prefix \fINEWPATH\fB\fR +For relocatable binary packages, translate all file paths that +start with the installation prefix in the package relocation hint(s) +to \fINEWPATH\fR. +.TP +\fB--relocate \fIOLDPATH\fB=\fINEWPATH\fB\fR +For relocatable binary packages, translate all file paths +that start with \fIOLDPATH\fR in the +package relocation hint(s) to \fINEWPATH\fR. +This option can be used repeatedly if several +\fIOLDPATH\fR's in the package are to +be relocated. +.TP +\fB--replacefiles\fR +Install the packages even if they replace files from other, +already installed, packages. +.TP +\fB--replacepkgs\fR +Install the packages even if some of them are already installed +on this system. +.TP +\fB--test\fR +Do not install the package, simply check for and report +potential conflicts. +.SS "ERASE OPTIONS" +.PP +The general form of an rpm erase command is +.PP + +\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] [\fB--noscripts\fR] [\fB--notriggers\fR] [\fB--test\fR] \fB\fIPACKAGE_NAME\fB\fR\fI ...\fR + +.PP +The following options may also be used: +.TP +\fB--allmatches\fR +Remove all versions of the package which match +\fIPACKAGE_NAME\fR. Normally an +error is issued if \fIPACKAGE_NAME\fR +matches multiple packages. +.TP +\fB--nodeps\fR +Don't check dependencies before uninstalling the packages. +.TP +\fB--noscripts\fR +.TP +\fB--nopreun\fR +.TP +\fB--nopostun\fR +Don't execute the scriptlet of the same name. +The \fB--noscripts\fR option during package erase is +equivalent to + +\fB--nopreun\fR +\fB--nopostun\fR + +and turns off the execution of the corresponding +\fB%preun\fR, and +\fB%postun\fR +scriptlet(s). +.TP +\fB--notriggers\fR +.TP +\fB--notriggerun\fR +.TP +\fB--notriggerpostun\fR +Don't execute any trigger scriptlet of the named type. +The \fB--notriggers\fR option is equivalent to + +\fB--notriggerun\fR +\fB--notriggerpostun\fR + +and turns off execution of the corresponding +\fB%triggerun\fR, and +\fB%triggerpostun\fR +scriptlet(s). +.TP +\fB--test\fR +Don't really uninstall anything, just go through the motions. +Useful in conjunction with the \fB-vv\fR option +for debugging. +.SS "QUERY OPTIONS" +.PP +The general form of an rpm query command is +.PP + +\fBrpm\fR {\fB-q|--query\fR} [\fBselect-options\fR] [\fBquery-options\fR] + +.PP +You may specify the format that package information should be +printed in. To do this, you use the + + \fB--qf|--queryformat\fR \fB\fIQUERYFMT\fB\fR + +option, followed by the \fIQUERYFMT\fR +format string. Query formats are modified versions of the +standard \fBprintf(3)\fR formatting. The format +is made up of static strings (which may include standard C +character escapes for newlines, tabs, and other special +characters) and \fBprintf(3)\fR type formatters. +As \fBrpm\fR already knows the type to print, the +type specifier must be omitted however, and replaced by the name +of the header tag to be printed, enclosed by \fB{}\fR +characters. Tag names are case insensitive, and the leading +\fBRPMTAG_\fR portion of the tag name may be omitted +as well. +.PP +Alternate output formats may be requested by following +the tag with \fB:\fItypetag\fB\fR. +Currently, the following types are supported: +.TP +\fB:armor\fR +Wrap a public key in ASCII armor. +.TP +\fB:arraysize\fR +Display number of elements in array tags. +.TP +\fB:base64\fR +Encode binary data using base64. +.TP +\fB:date\fR +Use strftime(3) "%c" format. +.TP +\fB:day\fR +Use strftime(3) "%a %b %d %Y" format. +.TP +\fB:depflags\fR +Format dependency comparison operator. +.TP +\fB:deptype\fR +Format dependency type. +.TP +\fB:expand\fR +Perform macro expansion. +.TP +\fB:fflags\fR +Format file flags. +.TP +\fB:fstate\fR +Format file state. +.TP +\fB:fstatus\fR +Format file verify status. +.TP +\fB:hex\fR +Format in hexadecimal. +.TP +\fB:octal\fR +Format in octal. +.TP +\fB:perms\fR +Format file permissions. +.TP +\fB:pgpsig\fR +Display signature fingerprint and time. +.TP +\fB:shescape\fR +Escape single quotes for use in a script. +.TP +\fB:triggertype\fR +Display trigger suffix. +.TP +\fB:vflags\fR +File verification flags. +.TP +\fB:xml\fR +Wrap data in simple xml markup. +.PP +For example, to print only the names of the packages queried, +you could use \fB%{NAME}\fR as the format string. +To print the packages name and distribution information in +two columns, you could use \fB%-30{NAME}%{DISTRIBUTION}\fR. +\fBrpm\fR will print a list of all of the tags it knows about when it +is invoked with the \fB--querytags\fR argument. +.PP +There are two subsets of options for querying: package selection, +and information selection. +.SS "PACKAGE SELECTION OPTIONS:" +.PP +.TP +\fB\fIPACKAGE_NAME\fB\fR +Query installed package named \fIPACKAGE_NAME\fR. +.TP +\fB-a, --all\fR +Query all installed packages. +.TP +\fB-f, --file \fIFILE\fB\fR +Query package owning \fIFILE\fR. +.TP +\fB-g, --group \fIGROUP\fB\fR +Query packages with the group of \fIGROUP\fR. +.TP +\fB--hdrid \fISHA1\fB\fR +Query package that contains a given header identifier, i.e. the +\fISHA1\fR digest of the immutable header region. +.TP +\fB-p, --package \fIPACKAGE_FILE\fB\fR +Query an (uninstalled) package \fIPACKAGE_FILE\fR. +The \fIPACKAGE_FILE\fR may be specified +as an \fBftp\fR or \fBhttp\fR style URL, in +which case the package header will be downloaded and queried. +See \fBFTP/HTTP OPTIONS\fR for information on +\fBrpm\fR's internal +\fBftp\fR and +\fBhttp\fR +client support. The \fIPACKAGE_FILE\fR argument(s), +if not a binary package, will be interpreted as an ASCII package +manifest unless \fB--nomanifest\fR option is used. +In manifests, comments are permitted, starting with a '#', and each +line of a package manifest file may include white space separated +glob expressions, including URL's, +that will be expanded to paths that are substituted in place of +the package manifest as additional \fIPACKAGE_FILE\fR +arguments to the query. +.TP +\fB--pkgid \fIMD5\fB\fR +Query package that contains a given package identifier, i.e. the +\fIMD5\fR digest of the combined header and +payload contents. +.TP +\fB--querybynumber \fIHDRNUM\fB\fR +Query the \fIHDRNUM\fRth database entry +directly; this is useful only for debugging. +.TP +\fB--specfile \fISPECFILE\fB\fR +Parse and query \fISPECFILE\fR as if +it were a package. Although not all the information (e.g. file lists) +is available, this type of query permits rpm to be used to extract +information from spec files without having to write a specfile +parser. +.TP +\fB--tid \fITID\fB\fR +Query package(s) that have a given \fITID\fR +transaction identifier. A unix time stamp is currently used as a +transaction identifier. All package(s) installed or erased within +a single transaction have a common identifier. +.TP +\fB--triggeredby \fIPACKAGE_NAME\fB\fR +Query packages that are triggered by package(s) +\fIPACKAGE_NAME\fR. +.TP +\fB--whatprovides \fICAPABILITY\fB\fR +Query all packages that provide the \fICAPABILITY\fR capability. +.TP +\fB--whatrequires \fICAPABILITY\fB\fR +Query all packages that require \fICAPABILITY\fR for proper functioning. +.SS "PACKAGE QUERY OPTIONS:" +.PP +.TP +\fB--changelog\fR +Display change information for the package. +.TP +\fB-c, --configfiles\fR +List only configuration files (implies \fB-l\fR). +.TP +\fB--conflicts\fR +List capabilities this package conflicts with. +.TP +\fB-d, --docfiles\fR +List only documentation files (implies \fB-l\fR). +.TP +\fB--dump\fR +Dump file information as follows (implies \fB-l\fR): +.sp +.RS + +.nf +path size mtime filedigest mode owner group isconfig isdoc rdev symlink + +.fi +.RE +.TP +\fB--filesbypkg\fR +List all the files in each selected package. +.TP +\fB-i, --info\fR +Display package information, including name, version, and description. +This uses the \fB--queryformat\fR if one was specified. +.TP +\fB--last\fR +Orders the package listing by install time such that the latest +packages are at the top. +.TP +\fB-l, --list\fR +List files in package. +.TP +\fB--provides\fR +List capabilities this package provides. +.TP +\fB-R, --requires\fR +List capabilities on which this package depends. +.TP +\fB--scripts\fR +List the package specific scriptlet(s) that are used as part +of the installation and uninstallation processes. +.TP +\fB-s, --state\fR +Display the \fIstates\fR of files in the package +(implies \fB-l\fR). The state of each file is one of +\fInormal\fR, +\fInot installed\fR, or +\fIreplaced\fR. +.TP +\fB--triggers, --triggerscripts\fR +Display the trigger scripts, if any, which are contained in +the package. +.SS "VERIFY OPTIONS" +.PP +The general form of an rpm verify command is +.PP + +\fBrpm\fR {\fB-V|--verify\fR} [\fBselect-options\fR] [\fBverify-options\fR] + +.PP +Verifying a package compares information about the installed files in +the package with information about the files taken from the package +metadata stored in the rpm database. Among other things, verifying +compares the size, MD5 sum, permissions, type, owner and group of +each file. Any discrepancies are displayed. +Files that were not installed from the package, for example, +documentation files excluded on installation using the +"\fB--excludedocs\fR" option, +will be silently ignored. +.PP +The package selection options are the same as for package +querying (including package manifest files as arguments). +Other options unique to verify mode are: +.TP +\fB--nodeps\fR +Don't verify dependencies of packages. +.TP +\fB--nodigest\fR +Don't verify package or header digests when reading. +.TP +\fB--nofiles\fR +Don't verify any attributes of package files. +.TP +\fB--noscripts\fR +Don't execute the \fB%verifyscript\fR scriptlet (if any). +.TP +\fB--nosignature\fR +Don't verify package or header signatures when reading. +.TP +\fB--nolinkto\fR +.TP +\fB--nofiledigest\fR (formerly \fB--nomd5\fR) +.TP +\fB--nosize\fR +.TP +\fB--nouser\fR +.TP +\fB--nogroup\fR +.TP +\fB--nomtime\fR +.TP +\fB--nomode\fR +.TP +\fB--nordev\fR +Don't verify the corresponding file attribute. +.PP +The format of the output is a string of 8 characters, a possible +attribute marker: + +.nf +\fBc\fR \fB%config\fR configuration file. +\fBd\fR \fB%doc\fR documentation file. +\fBg\fR \fB%ghost\fR file (i.e. the file contents are not included in the package payload). +\fBl\fR \fB%license\fR license file. +\fBr\fR \fB%readme\fR readme file. +.fi + +from the package header, followed by the file name. +Each of the 8 characters denotes the result of a comparison of +attribute(s) of the file to the value of those attribute(s) recorded +in the database. A single +"\fB.\fR" (period) +means the test passed, while a single +"\fB?\fR" (question mark) +indicates the test could not be performed (e.g. file permissions +prevent reading). Otherwise, the (mnemonically +em\fBB\fRoldened) character denotes failure of +the corresponding \fB--verify\fR test: + +.nf +\fBS\fR file \fBS\fRize differs +\fBM\fR \fBM\fRode differs (includes permissions and file type) +\fB5\fR MD\fB5\fR sum differs +\fBD\fR \fBD\fRevice major/minor number mismatch +\fBL\fR read\fBL\fRink(2) path mismatch +\fBU\fR \fBU\fRser ownership differs +\fBG\fR \fBG\fRroup ownership differs +\fBT\fR m\fBT\fRime differs +\fBP\fR ca\fBP\fRabilities differ +.fi + +.SS "SHOWRC" +.PP +The command +.PP +\fBrpm\fR \fB--showrc\fR +.PP +shows the values \fBrpm\fR will use for all of the +options are currently set in +\fIrpmrc\fR and +\fImacros\fR +configuration file(s). +.SS "FTP/HTTP OPTIONS" +.PP +\fBrpm\fR can act as an FTP and/or HTTP client so +that packages can be queried or installed from the internet. +Package files for install, upgrade, and query operations may be +specified as an +\fBftp\fR or +\fBhttp\fR +style URL: +.PP +ftp://USER:PASSWORD@HOST:PORT/path/to/package.rpm +.PP +If the \fB:PASSWORD\fR portion is omitted, the password will be +prompted for (once per user/hostname pair). If both the user and +password are omitted, anonymous \fBftp\fR is used. +In all cases, passive (PASV) \fBftp\fR transfers are +performed. +.PP +\fBrpm\fR allows the following options to be used with +ftp URLs: +.TP +\fB--ftpproxy \fIHOST\fB\fR +The host \fIHOST\fR will be used as a proxy server +for all ftp transfers, which allows users to ftp through firewall +machines which use proxy systems. This option may also be specified +by configuring the macro \fB%_ftpproxy\fR. +.TP +\fB--ftpport \fIPORT\fB\fR +The TCP \fIPORT\fR number to use for +the ftp connection on the proxy ftp server instead of the default +port. This option may also be specified by configuring the macro +\fB%_ftpport\fR. +.PP +\fBrpm\fR allows the following options to be used with +\fBhttp\fR URLs: +.TP +\fB--httpproxy \fIHOST\fB\fR +The host \fIHOST\fR will be used as +a proxy server for all \fBhttp\fR transfers. This +option may also be specified by configuring the macro +\fB%_httpproxy\fR. +.TP +\fB--httpport \fIPORT\fB\fR +The TCP \fIPORT\fR number to use for the +\fBhttp\fR connection on the proxy http server instead +of the default port. This option may also be specified by configuring +the macro \fB%_httpport\fR. +.SH "LEGACY ISSUES" +.SS "Executing rpmbuild" +.PP +The build modes of rpm are now resident in the \fI/usr/bin/rpmbuild\fR +executable. +Install the package containing \fBrpmbuild\fR (usually \fBrpm-build\fR) and see +\fBrpmbuild\fR(8) for documentation of all the \fBrpm\fR build modes. +.SH "FILES" +.SS "rpmrc Configuration" +.PP +.nf +\fI/usr/lib/rpm/rpmrc\fR +\fI/usr/lib/rpm/redhat/rpmrc\fR +\fI/etc/rpmrc\fR +\fI~/.rpmrc\fR +.fi +.SS "Macro Configuration" +.PP +.nf +\fI/usr/lib/rpm/macros\fR +\fI/usr/lib/rpm/redhat/macros\fR +\fI/etc/rpm/macros\fR +\fI~/.rpmmacros\fR +.fi +.SS "Database" +.PP +.nf +\fI/var/lib/rpm/Basenames\fR +\fI/var/lib/rpm/Conflictname\fR +\fI/var/lib/rpm/Dirnames\fR +\fI/var/lib/rpm/Group\fR +\fI/var/lib/rpm/Installtid\fR +\fI/var/lib/rpm/Name\fR +\fI/var/lib/rpm/Obsoletename\fR +\fI/var/lib/rpm/Packages\fR +\fI/var/lib/rpm/Providename\fR +\fI/var/lib/rpm/Requirename\fR +\fI/var/lib/rpm/Sha1header\fR +\fI/var/lib/rpm/Sigmd5\fR +\fI/var/lib/rpm/Triggername\fR +.fi +.SS "Temporary" +.PP +\fI/var/tmp/rpm*\fR +.SH "SEE ALSO" + +.nf +\fBpopt\fR(3), +\fBrpm2cpio\fR(8), +\fBrpmbuild\fR(8), +\fBrpmdb\fR(8), +\fBrpmkeys\fR(8), +\fBrpmsign\fR(8), +\fBrpmspec\fR(8), +.fi + +\fBrpm --help\fR - as rpm supports customizing the options via popt aliases +it's impossible to guarantee that what's described in the manual matches +what's available. + + +\fBhttp://www.rpm.org/ +\fR +.SH "AUTHORS" + +.nf +Marc Ewing +Jeff Johnson +Erik Troan +.fi diff --git a/doc/rpm2cpio.8 b/doc/rpm2cpio.8 new file mode 100644 index 0000000..46b9aa8 --- /dev/null +++ b/doc/rpm2cpio.8 @@ -0,0 +1,24 @@ +.\" rpm2cpio - Converts Red Hat Package (RPM) to cpio archive +.TH rpm2cpio 8 "11 January 2001" "Red Hat, Inc." +.SH NAME +rpm2cpio \- Extract cpio archive from RPM Package Manager (RPM) package. +.SH SYNOPSIS +\fBrpm2cpio\fP [filename] +.SH DESCRIPTION +\fBrpm2cpio\fP converts the .rpm file specified as a single argument +to a cpio archive on standard out. If a '-' argument is given, an rpm stream +is read from standard in. + +.br +.I "\fBrpm2cpio rpm-1.1-1.i386.rpm\fP" +.br +.I "\fBrpm2cpio - < glint-1.0-1.i386.rpm\fP" +.br +.I "\fBrpm2cpio glint-1.0-1.i386.rpm | cpio -dium\fP" + +.SH SEE ALSO +.IR rpm (8) +.SH AUTHOR +.nf +Erik Troan +.fi diff --git a/doc/rpmbuild.8 b/doc/rpmbuild.8 new file mode 100644 index 0000000..b45a926 --- /dev/null +++ b/doc/rpmbuild.8 @@ -0,0 +1,256 @@ +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.TH "RPMBUILD" "8" "09 June 2002" "Red Hat, Inc." +.SH NAME +rpmbuild \- Build RPM Package(s) +.SH SYNOPSIS +.SS "BUILDING PACKAGES:" +.PP + + +\fBrpmbuild\fR {\fB-ba|-bb|-bp|-bc|-bi|-bl|-bs\fR} [\fBrpmbuild-options\fR] \fB\fISPECFILE\fB\fR\fI ...\fR + + + +\fBrpmbuild\fR {\fB-ta|-tb|-tp|-tc|-ti|-tl|-ts\fR} [\fBrpmbuild-options\fR] \fB\fITARBALL\fB\fR\fI ...\fR + + + +\fBrpmbuild\fR {\fB--rebuild|--recompile\fR} \fB\fISOURCEPKG\fB\fR\fI ...\fR + +.SS "MISCELLANEOUS:" +.PP + + +\fBrpmbuild\fR \fB--showrc\fR + +.SS "rpmbuild-options" +.PP + + + [\fB--buildroot \fIDIRECTORY\fB\fR] [\fB--clean\fR] [\fB--nobuild\fR] + [\fB--rmsource\fR] [\fB--rmspec\fR] [\fB--short-circuit\fR] + [\fB--target \fIPLATFORM\fB\fR] + +.SH "DESCRIPTION" +.PP +\fBrpmbuild\fR is used to build both binary and source software packages. +A \fBpackage\fR consists of an archive of files and +meta-data used to install and erase the archive files. The meta-data +includes helper scripts, file attributes, and descriptive information +about the package. +\fBPackages\fR come in two varieties: binary packages, +used to encapsulate software to be installed, and source packages, +containing the source code and recipe necessary to produce binary +packages. +.PP +One of the following basic modes must be selected: +\fBBuild Package\fR, +\fBBuild Package from Tarball\fR, +\fBRecompile Package\fR, +\fBShow Configuration\fR. +.SS "GENERAL OPTIONS" +.PP +These options can be used in all the different modes. +.TP +\fB-?, --help\fR +Print a longer usage message then normal. +.TP +\fB--version\fR +Print a single line containing the version number of \fBrpm\fR +being used. +.TP +\fB--quiet\fR +Print as little as possible - normally only error messages will +be displayed. +.TP +\fB-v\fR +Print verbose information - normally routine progress messages will be +displayed. +.TP +\fB-vv\fR +Print lots of ugly debugging information. +.TP +\fB--rcfile \fIFILELIST\fB\fR +Each of the files in the colon separated +\fIFILELIST\fR +is read sequentially by \fBrpm\fR for configuration +information. +Only the first file in the list must exist, and tildes will be +expanded to the value of \fB$HOME\fR. +The default \fIFILELIST\fR is +\fI/usr/lib/rpm/rpmrc\fR:\fI/usr/lib/rpm/redhat/rpmrc\fR:\fI/etc/rpmrc\fR:\fI~/.rpmrc\fR. +.TP +\fB--pipe \fICMD\fB\fR +Pipes the output of \fBrpm\fR to the command \fICMD\fR. +.TP +\fB--dbpath \fIDIRECTORY\fB\fR +Use the database in \fIDIRECTORY\fR rather +than the default path \fI/var/lib/rpm\fR +.TP +\fB--root \fIDIRECTORY\fB\fR +Use the file system tree rooted at \fIDIRECTORY\fR for all operations. +Note that this means the database within +\fIDIRECTORY\fR +will be used for dependency checks and any scriptlet(s) (e.g. +\fB%post\fR if installing, or +\fB%prep\fR if building, a package) +will be run after a chroot(2) to +\fIDIRECTORY\fR. +.SS "BUILD OPTIONS" +.PP +The general form of an rpm build command is +.PP + +\fBrpmbuild\fR \fB-b\fISTAGE\fB|-t\fISTAGE\fB\fR [ \fB rpmbuild-options +\fR ] \fB\fIFILE\fB\fR\fI ...\fR + +.PP +The argument used is \fB-b\fR if a spec file is being +used to build the package and \fB-t\fR if \fBrpmbuild\fR +should look inside of a (possibly compressed) tar file for +the spec file to use. After the first argument, the next +character (\fISTAGE\fR) specifies the stages +of building and packaging to be done and is one of: +.TP +\fB-ba\fR +Build binary and source packages (after doing the %prep, %build, and +%install stages). +.TP +\fB-bb\fR +Build a binary package (after doing the %prep, %build, and %install +stages). +.TP +\fB-bp\fR +Executes the "%prep" stage from the spec file. Normally this +involves unpacking the sources and applying any patches. +.TP +\fB-bc\fR +Do the "%build" stage from the spec file (after doing the %prep stage). +This generally involves the equivalent of a "make". +.TP +\fB-bi\fR +Do the "%install" stage from the spec file (after doing the %prep and +%build stages). This generally involves the equivalent of a +"make install". +.TP +\fB-bl\fR +Do a "list check". The "%files" section from the spec file is +macro expanded, and checks are made to verify that each file +exists. +.TP +\fB-bs\fR +Build just the source package. +.PP +The following options may also be used: +.TP +\fB--buildroot \fIDIRECTORY\fB\fR +When building a package, override the BuildRoot tag with directory +\fIDIRECTORY\fR. +.TP +\fB--clean\fR +Remove the build tree after the packages are made. +.TP +\fB--nobuild\fR +Do not execute any build stages. Useful for testing out spec files. +.TP +\fB--nodeps\fR +Do not verify build dependencies. +.TP +\fB--rmsource\fR +Remove the sources after the build (may also be +used standalone, e.g. "\fBrpmbuild\fR \fB--rmsource foo.spec\fR"). +.TP +\fB--rmspec\fR +Remove the spec file after the build (may also be +used standalone, eg. "\fBrpmbuild\fR \fB--rmspec foo.spec\fR"). +.TP +\fB--short-circuit\fR +Skip straight to specified stage (i.e., skip all stages leading +up to the specified stage). Only valid with \fB-bc\fR, \fB-bi\fR, +and \fB-bb\fR. Useful for local testing only. Packages built this +way will be marked with an unsatisfiable dependency to prevent +their accidental use. +.TP +\fB--target \fIPLATFORM\fB\fR +When building the package, interpret \fIPLATFORM\fR +as \fBarch-vendor-os\fR and set the macros +\fB%_target\fR, +\fB%_target_cpu\fR, and +\fB%_target_os\fR +accordingly. +.SS "REBUILD AND RECOMPILE OPTIONS" +.PP +There are two other ways to invoke building with rpm: +.PP + +\fBrpmbuild\fR \fB--rebuild|--recompile\fR \fB\fISOURCEPKG\fB\fR\fI ...\fR + +.PP +When invoked this way, \fBrpmbuild\fR installs the named source +package, and does a prep, compile and install. In addition, +\fB--rebuild\fR builds a new binary package. When the build +has completed, the build directory is removed (as in +\fB--clean\fR) and the the sources and spec file for +the package are removed. +.SS "SHOWRC" +.PP +The command +.PP + +\fBrpmbuild\fR \fB--showrc\fR + +.PP +shows the values \fBrpmbuild\fR will use for all of the +options are currently set in +\fIrpmrc\fR and +\fImacros\fR +configuration file(s). +.SH "FILES" +.SS "rpmrc Configuration" +.PP +.nf +\fI/usr/lib/rpm/rpmrc\fR +\fI/usr/lib/rpm/redhat/rpmrc\fR +\fI/etc/rpmrc\fR +\fI~/.rpmrc\fR +.fi +.SS "Macro Configuration" +.PP +.nf +\fI/usr/lib/rpm/macros\fR +\fI/usr/lib/rpm/redhat/macros\fR +\fI/etc/rpm/macros\fR +\fI~/.rpmmacros\fR +.fi +.SS "Temporary" +.PP +\fI/var/tmp/rpm*\fR +.SH "SEE ALSO" + +.nf +\fBgendiff\fR(1), +\fBpopt\fR(3), +\fBrpm\fR(8), +\fBrpm2cpio\fR(8), +\fBrpmkeys\fR(8) +\fBrpmspec\fR(8), +\fBrpmsign\fR(8), +.fi + +\fBrpmbuild --help\fR - as rpm supports customizing the options via popt +aliases it's impossible to guarantee that what's described in the manual +matches what's available. + +\fBhttp://www.rpm.org/ +\fR +.SH "AUTHORS" + +.nf +Marc Ewing +Jeff Johnson +Erik Troan +.fi diff --git a/doc/rpmdb.8 b/doc/rpmdb.8 new file mode 100644 index 0000000..f1ee5dc --- /dev/null +++ b/doc/rpmdb.8 @@ -0,0 +1,48 @@ +.TH "RPMDB" "8" "29 June 2010" "Red Hat, Inc" +.SH NAME +rpmdb \- RPM Database Tool +.SH SYNOPSIS + +\fBrpm\fR {\fB--initdb|--rebuilddb\fR} + +.SH "DESCRIPTION" +The general form of an rpm rebuild database command is +.PP + +\fBrpm\fR {\fB--initdb|--rebuilddb\fR} [\fB-v\fR] [\fB--dbpath \fIDIRECTORY\fB\fR] [\fB--root \fIDIRECTORY\fB\fR] + +.PP +Use \fB--initdb\fR to create a new database if one doesn't already exist +(existing database is not overwritten), use +\fB--rebuilddb\fR to rebuild the database indices from +the installed package headers. +.PP + +.SH "SEE ALSO" + +.nf +\fBpopt\fR(3), +\fBrpm\fR(8), +\fBrpmkeys\fR(8), +\fBrpmsign\fR(8), +\fBrpm2cpio\fR(8), +\fBrpmbuild\fR(8), +\fBrpmspec\fR(8), +.fi + +\fBrpm --help\fR - as rpm supports customizing the options via popt aliases +it's impossible to guarantee that what's described in the manual matches +what's available. + + +\fBhttp://www.rpm.org/ +\fR +.SH "AUTHORS" + +.nf +Marc Ewing +Jeff Johnson +Erik Troan +Panu Matilainen +.fi + diff --git a/doc/rpmdeps.8 b/doc/rpmdeps.8 new file mode 100644 index 0000000..79adcc5 --- /dev/null +++ b/doc/rpmdeps.8 @@ -0,0 +1,29 @@ +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.TH "RPMDEPS" "8" "24 October 2002" "Red Hat, Inc." +.SH NAME +rpmdeps \- Generate RPM Package Dependencies +.SH SYNOPSIS +.PP + + +\fBrpmdeps\fR \fB{-P|--provides}\fR \fB{-R|--requires}\fR \fB\fIFILE\fB\fR\fI ...\fR + +.SH "DESCRIPTION" +.PP +\fBrpmdeps\fR generates package dependencies +for the set of \fIFILE\fR arguments. +Each \fIFILE\fR argument is searched for +Elf32/Elf64, script interpreter, or per-script dependencies, +and the dependencies are printed to stdout. +.SH "SEE ALSO" + +\fBrpm\fR(8), + +\fBrpmbuild\fR(8), +.SH "AUTHORS" + +Jeff Johnson diff --git a/doc/rpmgraph.8 b/doc/rpmgraph.8 new file mode 100644 index 0000000..a20e8c2 --- /dev/null +++ b/doc/rpmgraph.8 @@ -0,0 +1,45 @@ +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.TH "RPMGRAPH" "8" "30 June 2002" "Red Hat, Inc." +.SH NAME +rpmgraph \- Display RPM Package Dependency Graph +.SH SYNOPSIS +.PP + + +\fBrpmgraph\fR \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.SH "DESCRIPTION" +.PP +\fBrpmgraph\fR uses \fIPACKAGE_FILE\fR arguments +to generate a package dependency graph. Each +\fIPACKAGE_FILE\fR argument is read and +added to an rpm transaction set. The elements of the transaction +set are partially ordered using a topological sort. The partially +ordered elements are then printed to standard output. +.PP +Nodes in the dependency graph are package names, and edges in the +directed graph point to the parent of each node. The parent node +is defined as the last predecessor of a package when partially ordered +using the package dependencies as a relation. That means that the +parent of a given package is the package's last prerequisite. +.PP +The output is in \fBdot\fR(1) directed graph format, +and can be displayed or printed using the \fBdotty\fR +graph editor from the \fBgraphviz\fR package. +There are no \fBrpmgraph\fR specific options, only common \fBrpm\fR options. +See the \fBrpmgraph\fR usage message for what is currently implemented. +.SH "SEE ALSO" + +\fBdot\fR(1), + +\fBdotty\fR(1), + +\fB http://www.graphviz.org/ +\fR +.SH "AUTHORS" + +Jeff Johnson diff --git a/doc/rpmkeys.8 b/doc/rpmkeys.8 new file mode 100644 index 0000000..5f26dc5 --- /dev/null +++ b/doc/rpmkeys.8 @@ -0,0 +1,77 @@ +.TH "RPMKEYS" "8" "29 October 2010" "Red Hat, Inc" +.SH NAME +rpmkeys \- RPM Keyring +.SH SYNOPSIS +.PP + +\fBrpmkeys\fR {\fB--import|--checksig\fR} + +.SH "DESCRIPTION" +.PP +The general forms of rpm digital signature commands are +.PP + +\fBrpmkeys\fR \fB--import\fR \fB\fIPUBKEY\fB\fR\fI ...\fR + +\fBrpmkeys\fR {\fB-K|--checksig\fR} \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.\" These are not implemented yet... +.\" \fBrpm\fR \fB--list-key[s]\fR \fB\fIKEY_ID\fB\fR\fI ...\fR +.\" +.\" \fBrpm\fR \fB--delete-key[s]\fR \fB\fIKEY_ID\fB\fR\fI ...\fR +.\" + +.PP +The \fB--checksig\fR option checks all the digests and signatures contained in +\fIPACKAGE_FILE\fR to ensure +the integrity and origin of the package. Note that +signatures are now verified whenever a package is read, +and \fB--checksig\fR is useful to verify +all of the digests and signatures associated with a package. +.PP +Digital signatures cannot be verified without a public key. +An ASCII armored public key can be added to the \fBrpm\fR database +using \fB--import\fR. An imported public key is +carried in a header, and key ring management is performed +exactly like package management. For example, all currently imported +public keys can be displayed by: +.PP +\fBrpm -qa gpg-pubkey*\fR +.PP +Details about a specific public key, when imported, can be displayed +by querying. Here's information about the Red Hat GPG/DSA key: +.PP +\fBrpm -qi gpg-pubkey-db42a60e\fR +.PP +Finally, public keys can be erased after importing just like +packages. Here's how to remove the Red Hat GPG/DSA key +.PP +\fBrpm -e gpg-pubkey-db42a60e\fR +.PP + +.SH "SEE ALSO" +.nf +\fBpopt\fR(3), +\fBrpm\fR(8), +\fBrpmdb\fR(8), +\fBrpmsign\fR(8), +\fBrpm2cpio\fR(8), +\fBrpmbuild\fR(8), +\fBrpmspec\fR(8), +.fi + +\fBrpmkeys --help\fR - as rpm supports customizing the options via popt aliases +it's impossible to guarantee that what's described in the manual matches +what's available. + + +\fBhttp://www.rpm.org/ +\fR +.SH "AUTHORS" + +.nf +Marc Ewing +Jeff Johnson +Erik Troan +Panu Matilainen +.fi diff --git a/doc/rpmsign.8 b/doc/rpmsign.8 new file mode 100644 index 0000000..53f2d70 --- /dev/null +++ b/doc/rpmsign.8 @@ -0,0 +1,81 @@ +.TH "RPMSIGN" "8" "Red Hat, Inc" +.SH NAME +rpmsign \- RPM Package Signing +.SH SYNOPSIS + +\fBrpm\fR \fB--addsign|--resign\fR \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +\fBrpm\fR \fB--delsign\fR \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.SH DESCRIPTION +.PP +Both of the \fB--addsign\fR and \fB--resign\fR +options generate and insert new signatures for each package +\fIPACKAGE_FILE\fR given, replacing any +existing signatures. There are two options for historical reasons, +there is no difference in behavior currently. + +\fBrpm\fR \fB--delsign\fR \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.PP +Delete all signatures from each package \fIPACKAGE_FILE\fR given. + +.SS "USING GPG TO SIGN PACKAGES" +.PP +In order to sign packages using GPG, \fBrpm\fR +must be configured to run GPG and be able to find a key +ring with the appropriate keys. By default, +\fBrpm\fR uses the same conventions as GPG +to find key rings, namely the \fB$GNUPGHOME\fR environment +variable. If your key rings are not located where GPG expects +them to be, you will need to configure the macro +\fB%_gpg_path\fR +to be the location of the GPG key rings to use. +If you want to be able to sign packages you create yourself, you +also need to create your own public and secret key pair (see the +GPG manual). You will also need to configure the \fBrpm\fR macros +.TP +\fB%_gpg_name\fR +The name of the "user" whose key you wish to use to sign your packages. +.PP +For example, to be able to use GPG to sign packages as the user +\fI"John Doe "\fR +from the key rings located in \fI/etc/rpm/.gpg\fR +using the executable \fI/usr/bin/gpg\fR you would include +.PP +.nf +%_gpg_path /etc/rpm/.gpg +%_gpg_name John Doe +%__gpg /usr/bin/gpg +.fi +.PP +in a macro configuration file. Use \fI/etc/rpm/macros\fR +for per-system configuration and \fI~/.rpmmacros\fR +for per-user configuration. Typically it's sufficient to set just %_gpg_name. + +.SH "SEE ALSO" +.nf +\fBpopt\fR(3), +\fBrpm\fR(8), +\fBrpmdb\fR(8), +\fBrpmkeys\fR(8), +\fBrpm2cpio\fR(8), +\fBrpmbuild\fR(8), +\fBrpmspec\fR(8), +.fi + +\fBrpmsign --help\fR - as rpm supports customizing the options via popt aliases +it's impossible to guarantee that what's described in the manual matches +what's available. + + +\fBhttp://www.rpm.org/ +\fR +.SH "AUTHORS" + +.nf +Marc Ewing +Jeff Johnson +Erik Troan +Panu Matilainen +.fi diff --git a/doc/rpmspec.8 b/doc/rpmspec.8 new file mode 100644 index 0000000..a391237 --- /dev/null +++ b/doc/rpmspec.8 @@ -0,0 +1,71 @@ +.TH "RPMSPEC" "8" "29 October 2010" "Red Hat, Inc" +.SH NAME +rpmspec \- RPM Spec Tool +.SH SYNOPSIS +.SS "QUERYING SPEC FILES:" +.PP + +\fBrpmspec\fR {\fB-q|--query\fR} [\fBselect-options\fR] [\fBquery-options\fR] \fB\fISPEC_FILE\fB\fR\fI ...\fR + +.SS "select-options" +.PP + + [\fB\--rpms\fB\fR] + [\fB\--srpms\fB\fR] + +.SS "query-options" +.PP + + [\fB--qf,--queryformat \fIQUERYFMT\fB\fR] + [\fB--target \fITARGET_PLATFORM\fB\fR] + +.SS "QUERY OPTIONS" +.PP +The general form of an rpm spec query command is +.PP + +\fBrpm\fR {\fB-q|--query\fR} [\fBselect-options\fR] [\fBquery-options\fR] + +.PP +You may specify the format that the information should be +printed in. To do this, you use the + + \fB--qf|--queryformat\fR \fB\fIQUERYFMT\fB\fR + +option, followed by the \fIQUERYFMT\fR format string. +See \fBrpm(8)\fR for details. +.PP + +.SS "SELECT OPTIONS" +.PP + \fB--rpms\fR +Operate on the binary package header(s). + \fB--srpm\fR +Operate on the source package header(s). + +.SH "SEE ALSO" +.nf +\fBpopt\fR(3), +\fBrpm\fR(8), +\fBrpmdb\fR(8), +\fBrpmkeys\fR(8), +\fBrpmsign\fR(8), +\fBrpm2cpio\fR(8), +\fBrpmbuild\fR(8), +.fi + +\fBrpmspec --help\fR - as rpm supports customizing the options via popt aliases +it's impossible to guarantee that what's described in the manual matches +what's available. + + +\fBhttp://www.rpm.org/ +\fR +.SH "AUTHORS" + +.nf +Marc Ewing +Jeff Johnson +Erik Troan +Panu Matilainen +.fi diff --git a/doc/ru/rpm.8 b/doc/ru/rpm.8 new file mode 100644 index 0000000..8ed5262 --- /dev/null +++ b/doc/ru/rpm.8 @@ -0,0 +1,943 @@ +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.TH "RPM" "8" "25 Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ 2006" "Инвента" +.SH ÐÐЗВÐÐИЕ +rpm \- Менеджер пакетов RPM +.SH ОБЗОР +.SS "ЗÐПРОС И ПРОВЕРКРПÐКЕТОВ:" +.PP + + +\fBrpm\fR {\fB-q|--query\fR} [\fBопции-выбора\fR] [\fBопции-запроÑа\fR] + + + +\fBrpm\fR {\fB-V|--verify\fR} [\fBопции-выбора\fR] [\fBопции-проверки\fR] + + + +\fBrpm\fR \fB--import\fR \fB\fIPUBKEY\fB\fR\fI ...\fR + + + +\fBrpm\fR {\fB-K|--checksig\fR} [\fB--nosignature\fR] [\fB--nodigest\fR] + \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.SS "УСТÐÐОВКÐ, ОБÐОВЛЕÐИЕ И УДÐЛЕÐИЕ ПÐКЕТОВ:" +.PP + + +\fBrpm\fR {\fB-i|--install\fR} [\fBопции-уÑтановки\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + + + +\fBrpm\fR {\fB-U|--upgrade\fR} [\fBопции-уÑтановки\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + + + +\fBrpm\fR {\fB-F|--freshen\fR} [\fBопции-уÑтановки\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + + + +\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] [\fB--noscripts\fR] + [\fB--notriggers\fR] [\fB--test\fR] \fB\fIPACKAGE_NAME\fB\fR\fI\ ...\fR + +.SS "РÐЗÐОЕ:" +.PP + + +\fBrpm\fR {\fB--initdb|--rebuilddb\fR} + + + +\fBrpm\fR {\fB--addsign|--resign\fR} \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + + + +\fBrpm\fR {\fB--querytags|--showrc\fR} + + + +\fBrpm\fR {\fB--setperms|--setugids\fR} \fB\fIPACKAGE_NAME\fB\fR\fI ...\fR + +.SS "опции-выбора" +.PP + + + [\fB\fIPACKAGE_NAME\fB\fR] [\fB-a,--all\fR] [\fB-f,--file \fIFILE\fB\fR] + [\fB-g,--group \fIGROUP\fB\fR] {\fB-p,--package \fIPACKAGE_FILE\fB\fR] + [\fB--hdrid \fISHA1\fB\fR] [\fB--pkgid \fIMD5\fB\fR] [\fB--tid \fITID\fB\fR] + [\fB--querybynumber \fIHDRNUM\fB\fR] [\fB--triggeredby \fIPACKAGE_NAME\fB\fR] + [\fB--whatprovides \fICAPABILITY\fB\fR] [\fB--whatrequires \fICAPABILITY\fB\fR] + +.SS "опции-запроÑа" +.PP + + + [\fB--changelog\fR] [\fB-c,--configfiles\fR] [\fB-d,--docfiles\fR] [\fB--dump\fR] + [\fB--filesbypkg\fR] [\fB-i,--info\fR] [\fB--last\fR] [\fB-l,--list\fR] + [\fB--provides\fR] [\fB--qf,--queryformat \fIQUERYFMT\fB\fR] + [\fB-R,--requires\fR] [\fB--scripts\fR] [\fB-s,--state\fR] + [\fB--triggers,--triggerscripts\fR] + +.SS "опции-проверки" +.PP + + + [\fB--nodeps\fR] [\fB--nofiles\fR] [\fB--noscripts\fR] + [\fB--nodigest\fR] [\fB--nosignature\fR] + [\fB--nolinkto\fR] [\fB--nomd5\fR] [\fB--nosize\fR] [\fB--nouser\fR] + [\fB--nogroup\fR] [\fB--nomtime\fR] [\fB--nomode\fR] [\fB--nordev\fR] + +.SS "опции-уÑтановки" +.PP + + + [\fB--aid\fR] [\fB--allfiles\fR] [\fB--badreloc\fR] [\fB--excludepath \fIOLDPATH\fB\fR] + [\fB--excludedocs\fR] [\fB--force\fR] [\fB-h,--hash\fR] + [\fB--ignoresize\fR] [\fB--ignorearch\fR] [\fB--ignoreos\fR] + [\fB--includedocs\fR] [\fB--justdb\fR] [\fB--nodeps\fR] + [\fB--nodigest\fR] [\fB--nosignature\fR] [\fB--nosuggest\fR] + [\fB--noorder\fR] [\fB--noscripts\fR] [\fB--notriggers\fR] + [\fB--oldpackage\fR] [\fB--percent\fR] [\fB--prefix \fINEWPATH\fB\fR] + [\fB--relocate \fIOLDPATH\fB=\fINEWPATH\fB\fR] + [\fB--replacefiles\fR] [\fB--replacepkgs\fR] + [\fB--test\fR] + +.SH "ОПИСÐÐИЕ" +.PP +\fBrpm\fR - Ñто мощный \fBМенеджер Пакетов\fR, +который может быть иÑпользован Ð´Ð»Ñ Ñборки, уÑтановки, запроÑа, проверки, +Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… программных пакетов. +\fBПакет\fR Ñодержит архив Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ и метаданные, иÑпользуемые Ð´Ð»Ñ +уÑтановки и ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² архива. Метаданные включают Ñценарии, +атрибуты файлов и информацию Ñ Ð¾Ð¿Ð¸Ñанием пакета. +\fBПакеты\fR бывают двух типов: двоичные пакеты, иÑпользуемые Ð´Ð»Ñ +Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑƒÑтанавливаемых программ, и пакеты Ñ Ð¸Ñходными кодами, +включающие иÑходные коды и опиÑание ÑпоÑоба Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ пакета. +.PP +Ðеобходимо указать один из Ñледующих оÑновных режимов работы: +\fBЗапроÑ\fR, +\fBПроверка\fR, +\fBПроверка подпиÑи\fR, +\fBУÑтановка/Обновление/ОÑвежение\fR, +\fBУдаление\fR, +\fBÐ˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð‘Ð°Ð·Ñ‹ данных\fR, +\fBПереÑтройка Базы данных\fR, +\fBÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ\fR, +\fBДобавление подпиÑи\fR, +\fBЗадание Владельцев/Групп\fR, +\fBОтображение тегов запроÑа\fR и +\fBОтображение конфигурации\fR. +.SS "ОБЩИЕ ОПЦИИ" +.PP +Эти опции могут быть иÑпользованы во вÑех режимах. +.TP +\fB-?, --help\fR +ВывеÑти более детальную, чем обычно, Ñправку об иÑпользовании. +.TP +\fB--version\fR +ВывеÑти одну Ñтроку, Ñодержащую номер верÑии \fBrpm\fR. +.TP +\fB--quiet\fR +Выводить как можно меньше Ñообщений - как правило, отображаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ +ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках. +.TP +\fB-v\fR +Выводить подробную информацию - как правило, отображаютÑÑ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾ +выполнении вÑех шагов. +.TP +\fB-vv\fR +Выводить много отладочной информации. +.TP +\fB--rcfile \fIFILELIST\fB\fR +Каждый из файлов разделенного двоеточиÑми ÑпиÑка файлов \fIFILELIST\fR поÑледовательно +прочитываетÑÑ \fIrpm\fR на предмет конфигурационной информации. +Ð’ Ñтом ÑпиÑке обÑзан ÑущеÑтвовать только первый файл; +вÑе знаки тильда будут заменены значением \fB$HOME\fR. +По умолчанию ÑпиÑок файлов \fIFILELIST\fR выглÑдит как +\fI/usr/lib/rpm/rpmrc\fR:\fI/usr/lib/rpm/redhat/rpmrc\fR:\fI/etc/rpmrc\fR:\fI~/.rpmrc\fR. +.TP +\fB--pipe \fICMD\fB\fR +ПеренаправлÑет вывод \fBrpm\fR на вход команды \fICMD\fR. +.TP +\fB--dbpath \fIDIRECTORY\fB\fR +ИÑпользовать базу данных RPM в каталоге \fIDIRECTORY\fR вмеÑто пути по умолчанию +\fI/var/lib/rpm\fR +.TP +\fB--root \fIDIRECTORY\fB\fR +ИÑпользовать Ð´Ð»Ñ Ð²Ñех операций файловую ÑиÑтему Ñ ÐºÐ¾Ñ€Ð½ÐµÐ¼ в \fIDIRECTORY\fR. +Обратите внимание, что Ñто значит, что база данных внутри \fIDIRECTORY\fR +будет иÑпользоватьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ завиÑимоÑтей, и вÑе Ñценарии \fB%post\fR и \fB%prep\fR +будут иÑполнÑÑ‚ÑŒÑÑ Ð¿Ð¾Ñле chroot(2) в \fIDIRECTORY\fR. +.SS "ОПЦИИ УСТÐÐОВКИ И ОБÐОВЛЕÐИЯ" +.PP +ÐžÐ±Ñ‰Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° команды уÑтановки rpm приведена ниже +.PP + +\fBrpm\fR {\fB-i|--install\fR} [\fBопции-уÑтановки\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.PP +Так выполнÑетÑÑ ÑƒÑтановка нового пакета. +.PP +ÐžÐ±Ñ‰Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° команды Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ rpm приведена ниже +.PP + +\fBrpm\fR {\fB-U|--upgrade\fR} [\fBопции-уÑтановки\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.PP +Так выполнÑетÑÑ ÑƒÑтановка или обновление уже уÑтановленного +пакета до новой верÑии. Эта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ð° уÑтановке, +при Ñтом вÑе другие верÑии удалÑÑŽÑ‚ÑÑ Ð¿Ð¾Ñле уÑтановки +нового пакета. +.PP + +\fBrpm\fR {\fB-F|--freshen\fR} [\fBопции-уÑтановки\fR] \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.PP +Так выполнÑетÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ðµ пакетов, но только еÑли Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ +верÑÐ¸Ñ ÑƒÐ¶Ðµ уÑтановлена. Параметр \fIPACKAGE_FILE\fR может быть +указан как Ð°Ð´Ñ€ÐµÑ +\fBftp\fR или +\fBhttp\fR URL, +в таком Ñлучае пакет будет Ñкачан перед уÑтановкой. См. +\fBОПЦИИ FTP/HTTP\fR +Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о работе \fBrpm\fR Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ +\fBftp\fR или +\fBhttp\fR. + +.PP +.TP +\fB--aid\fR +ДобавлÑет при необходимоÑти предложенные пакеты в набор транзакции. +.TP +\fB--allfiles\fR +УÑтанавливает или обновлÑет вÑе файлы Ñ Ñ„Ð»Ð°Ð³Ð¾Ð¼ missingok в пакете, +незавиÑимо от их ÑущеÑтвованиÑ. +.TP +\fB--badreloc\fR +ИÑпользуетÑÑ Ð²Ð¼ÐµÑте Ñ \fB--relocate\fR, разрешает перемещение +вÑех путей файлов, не только тех, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñтарые пути \fIOLDPATH\fR +включены в заметки по перемещению (relocation hint) в бинарном пакете. +.TP +\fB--excludepath \fIOLDPATH\fB\fR +Ðе уÑтанавливать файлы названиÑ, которых начинаютÑÑ Ñ +\fIOLDPATH\fR. +.TP +\fB--excludedocs\fR +Ðе уÑтанавливать файлы помеченные как Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ +(включающие man Ñтраницы и документы texinfo). +.TP +\fB--force\fR +Эквивалентно иÑпользованию +\fB--replacepkgs\fR, +\fB--replacefiles\fR и +\fB--oldpackage\fR. +.TP +\fB-h, --hash\fR +Выводит 50 отметок при раÑпаковке архива. +ИÑпользуетÑÑ Ñ \fB-v|--verbose\fR Ð´Ð»Ñ ÑƒÐ´Ð¾Ð±Ñтва отображениÑ. +.TP +\fB--ignoresize\fR +Ðе проверÑÑ‚ÑŒ подключенные файловые ÑиÑтемы на наличие необходимого +меÑта на диÑке перед уÑтановкой данного пакета. +.TP +\fB--ignorearch\fR +Разрешить уÑтановку или обновление, даже еÑли архитектуры +бинарного пакета и узла не Ñовпадают. +.TP +\fB--ignoreos\fR +Разрешить уÑтановку или обновление, даже еÑли операционные ÑиÑтемы +бинарного пакета и узла не Ñовпадают. +.TP +\fB--includedocs\fR +УÑтанавливать файлы Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸ÐµÐ¹. Это поведение задано по умолчанию. +.TP +\fB--justdb\fR +Обновить только информацию в базе, но не файловые ÑиÑтемы. +.TP +\fB--nodigest\fR +Ðе проверÑÑ‚ÑŒ при чтении дайджеÑÑ‚ пакета или заголовка. +.TP +\fB--nosignature\fR +Ðе проверÑÑ‚ÑŒ при чтении подпиÑÑŒ пакета или заголовка. +.TP +\fB--nodeps\fR +Ðе выполнÑÑ‚ÑŒ проверку завиÑимоÑтей перед уÑтановкой или обновлением пакета. +.TP +\fB--nosuggest\fR +Ðе предлагать пакет(Ñ‹) Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚ÑутÑтвующих завиÑимоÑтей. +.TP +\fB--noorder\fR +Ðе выполнÑÑ‚ÑŒ переупорÑдочивание пакетов Ð´Ð»Ñ ÑƒÑтановки. СпиÑок пакетов +обычно переупорÑдочиваетÑÑ Ð´Ð»Ñ ÑƒÐ´Ð¾Ð²Ð»ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑтей. +.TP +\fB--noscripts\fR +.TP +\fB--nopre\fR +.TP +\fB--nopost\fR +.TP +\fB--nopreun\fR +.TP +\fB--nopostun\fR +Ðе выполнÑÑ‚ÑŒ Ñкриптлеты Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ именем. +ÐžÐ¿Ñ†Ð¸Ñ \fB--noscripts\fR Ñквивалентна + +\fB--nopre\fR +\fB--nopost\fR +\fB--nopreun\fR +\fB--nopostun\fR + +и выключает иÑполнение ÑоответÑтвующих +\fB%pre\fR, +\fB%post\fR, +\fB%preun\fR и +\fB%postun\fR +Ñкриптлетов. +.TP +\fB--notriggers\fR +.TP +\fB--notriggerin\fR +.TP +\fB--notriggerun\fR +.TP +\fB--notriggerpostun\fR + +Ðе выполнÑÑ‚ÑŒ ни какие триггерные Ñкриптлеты Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ именем. +ÐžÐ¿Ñ†Ð¸Ñ \fB--notriggers\fR Ñквивалентна + +\fB--notriggerin\fR +\fB--notriggerun\fR +\fB--notriggerpostun\fR + +и выключает иÑполнение ÑоответÑтвующих +\fB%triggerin\fR, +\fB%triggerun\fR и +\fB%triggerpostun\fR +Ñкриптлетов. +.TP +\fB--oldpackage\fR +Разрешает обновить или заменить новый пакет более Ñтарой верÑией. +.TP +\fB--percent\fR +ВывеÑти информацию в процентах по мере раÑпаковки файлов из архива пакета. +Она предназначена Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° \fBrpm\fR из других утилит. +.TP +\fB--prefix \fINEWPATH\fB\fR +Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ñ… бинарных пакетов, преобразовать вÑе пути файлов, +которые начинаютÑÑ Ñ Ð¸Ð½ÑталлÑционного префикÑа в заметках по +перемещению (relocation hint) на \fINEWPATH\fR. +.TP +\fB--relocate \fIOLDPATH\fB=\fINEWPATH\fB\fR +Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ñ‹Ñ… бинарных пакетов, преобразовать вÑе пути файлов, +которые начинаютÑÑ Ñ \fIOLDPATH\fR в заметках по +перемещению (relocation hint) на \fINEWPATH\fR. +Ð”Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть иÑпользована неÑколько раз, +еÑли требуетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑтить неÑколько путей \fIOLDPATH\fR +в пакете. +.TP +\fB--replacefiles\fR +УÑтановить пакеты, даже еÑли они заменÑÑŽÑ‚ файлы от других +уÑтановленных пакетов. +.TP +\fB--replacepkgs\fR +УÑтановить пакеты, даже еÑли они уже уÑтановлены в ÑиÑтеме. +.TP +\fB--test\fR +Ðе уÑтанавливать пакеты, проÑто выполнить проверку и Ñообщить +о потенциальных конфликтах. +.SS "ОПЦИИ УДÐЛЕÐИЯ" +.PP +ÐžÐ±Ñ‰Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° команды ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ rpm приведена ниже +.PP + +\fBrpm\fR {\fB-e|--erase\fR} [\fB--allmatches\fR] [\fB--nodeps\fR] [\fB--noscripts\fR] [\fB--notriggers\fR] [\fB--test\fR] \fB\fIPACKAGE_NAME\fB\fR\fI ...\fR + +.PP +Следующие опции могут быть также иÑпользованы: +.TP +\fB--allmatches\fR +Удалить вÑе верÑии пакета Ñовпадающие Ñ +\fIPACKAGE_NAME\fR. Обычно при наличии неÑкольких +пакетов Ñовпадающих Ñ \fIPACKAGE_NAME\fR +возникает ошибка. +.TP +\fB--nodeps\fR +Ðе проверÑÑ‚ÑŒ завиÑимоÑти перед удалением пакетов. +.TP +\fB--noscripts\fR +.TP +\fB--nopreun\fR +.TP +\fB--nopostun\fR +Ðе выполнÑÑ‚ÑŒ Ñкриптлеты Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼Ð¸ именами. +Ðаличие параметра \fB--noscripts\fR при удалении пакетов +Ñквивалентно + +\fB--nopreun\fR +\fB--nopostun\fR + +и выключает иÑполнение ÑоответÑтвующих Ñкриптлетов +\fB%preun\fR и +\fB%postun\fR. +.TP +\fB--notriggers\fR +.TP +\fB--notriggerun\fR +.TP +\fB--notriggerpostun\fR +Ðе выполнÑÑ‚ÑŒ ни какие триггерные Ñкриптлеты Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ именем. +ÐžÐ¿Ñ†Ð¸Ñ \fB--notriggers\fR Ñквивалентна + +\fB--notriggerun\fR +\fB--notriggerpostun\fR + +и выключает иÑполнение ÑоответÑтвующих +\fB%triggerun\fR и +\fB%triggerpostun\fR +Ñкриптлетов. +.TP +\fB--test\fR +Ðе удалÑÑ‚ÑŒ пакеты, проÑто выполнить проверку. +Удобно иÑпользовать Ñтот параметр при отладке ÑовмеÑтно +Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ \fB-vv\fR. +.SS "ОПЦИИ ЗÐПРОСÐ" +.PP +ÐžÐ±Ñ‰Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° команды запроÑа rpm приведена ниже +.PP + +\fBrpm\fR {\fB-q|--query\fR} [\fBselect-options\fR] [\fBquery-options\fR] + +.PP +СущеÑтвует возможноÑÑ‚ÑŒ задать формат вывода информации о пакете. +Ð”Ð»Ñ Ñтого необходимо иÑпользовать параметр + + \fB--qf|--queryformat\fR \fB\fIQUERYFMT\fB\fR + +вÑлед за которым указываетÑÑ Ñтрока формата \fIQUERYFMT\fR. +Форматирование запроÑа - Ñто Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтандартного +механизма \fBprintf(3)\fR. Форматирование формируетÑÑ Ð¸Ð· +ÑтатичеÑких Ñтрок (которые могут включать Ñтандартные Ð´Ð»Ñ +Ñзыка C escape-поÑледовательноÑти Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° Ñтроки, табулÑции +и других Ñпец. Ñимволов) и меток Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ \fBprintf(3)\fR. +Т.к. \fBrpm\fR заранее знает тип выводимой информации, указатель +формата может быть опущен и заменен на Ð¸Ð¼Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð¸Ð¼Ð¾Ð³Ð¾ тега заголовка, +заключенного в фигурные Ñкобки \fB{}\fR. Имена тегов не чувÑтвительны +к региÑтру и Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ \fBRPMTAG_\fR в имени тега можно опуÑкать. +.PP +Ðльтернативные форматы вывода могут быть заданы при помощи +Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° вывода \fB:\fItypetag\fB\fR поÑле имени тега. +Ð’ данный момент поддерживаютÑÑ Ñледующие типы: +.TP +\fB:armor\fR +Упаковать публичный ключ в ASCII вид. +.TP +\fB:base64\fR +Закодировать двоичные данные в формат base64. +.TP +\fB:date\fR +ИÑпользовать формат strftime(3) "%c". +.TP +\fB:day\fR +ИÑпользовать формат strftime(3) "%a %b %d %Y". +.TP +\fB:depflags\fR +Форматировать флаги завиÑимоÑтей. +.TP +\fB:fflags\fR +Форматировать флаги файлов. +.TP +\fB:hex\fR +Ð’ шеÑтнадцатеричном виде. +.TP +\fB:octal\fR +Ð’ воÑьмеричном виде. +.TP +\fB:perms\fR +Форматировать права доÑтупа файлов. +.TP +\fB:shescape\fR +Экранировать одиночные кавычки Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑценариÑÑ…. +.TP +\fB:triggertype\fR +ВывеÑти ÑÑƒÑ„Ñ„Ð¸ÐºÑ Ñ‚Ñ€Ð¸Ð³Ð³ÐµÑ€Ð°. +.PP +Ðапример, Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° только имени пакета при запроÑе, вы можете +иÑпользовать Ñтроку формата \fB%{NAME}\fR. +Ð”Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° имени пакетов и информации о диÑтрибутиве в две колонки +вы можете иÑпользовать \fB%-30{NAME}%{DISTRIBUTION}\fR. +Команда \fBrpm\fR отобразит Ñпиков вÑех тегов, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ она может работать +при ее вызове Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ \fB--querytags\fR. +.PP +СущеÑтвуют два набора параметров Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов: Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° пакетов +и Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸. +.SS "ОПЦИИ ВЫБОРРПÐКЕТОВ:" +.PP +.TP +\fB\fIPACKAGE_NAME\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº уÑтановленному пакету Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ \fIPACKAGE_NAME\fR. +.TP +\fB-a, --all\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ ÐºÐ¾ вÑем уÑтановленным пакетам. +.TP +\fB-f, --file \fIFILE\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº пакету, владельцу файла \fIFILE\fR. +.TP +\fB-g, --group \fIGROUP\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº пакету Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð¹ \fIGROUP\fR. +.TP +\fB--hdrid \fISHA1\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº пакету, Ñодержащему указанный идентификатор заголовка, +Ñ‚.е. \fISHA1\fR дайджеÑÑ‚ неизменной чаÑти заголовка. +.TP +\fB-p, --package \fIPACKAGE_FILE\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº (неуÑтановленному) пакету в файле \fIPACKAGE_FILE\fR. +Параметр \fIPACKAGE_FILE\fR может быть указан в виде адреÑа \fBftp\fR или +\fBhttp\fR URL, в результате чего заголовок пакета будет Ñкачан и опрошен. +ОбратитеÑÑŒ к \fBОПЦИЯМ FTP/HTTP\fR за информацией о поддержке в +\fBrpm\fR работы Ñ +\fBftp\fR и +\fBhttp\fR. +ЕÑли аргумент(Ñ‹) \fIPACKAGE_FILE\fR не ÑвлÑетÑÑ Ð±Ð¸Ð½Ð°Ñ€Ð½Ñ‹Ð¼ пакетом, то он +будет интерпретирован как ASCII манифеÑÑ‚ пакета. +Ð’ нем разрешено применение комментариев начинающихÑÑ Ñ '#', ÐºÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· Ñтрок файла +манифеÑта пакета может включать разделенные запÑтыми glob выражениÑ, +Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð°Ð´Ñ€ÐµÑа URL Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¼Ð¸ glob выражениÑми, они будут развернуты в +пути, которые будут подÑтавлены вмеÑто манифеÑта пакета как дополнительный +аргумент \fIPACKAGE_FILE\fR в запроÑе. +.TP +\fB--pkgid \fIMD5\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº пакету, который Ñодержит указанный идентификатор пакета, +Ñ‚.е. \fIMD5\fR дайджеÑÑ‚ объединенного Ñодержимого заголовка и тела пакета. +.TP +\fB--querybynumber \fIHDRNUM\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð°Ð¿Ñ€Ñмую \fIHDRNUM\fR'ой запиÑи в базе данных; иÑпользуетÑÑ +только Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸. +.TP +\fB--specfile \fISPECFILE\fB\fR +Обработать и выполнить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº \fISPECFILE\fR файлу, как еÑли бы Ñто был +пакет. Ð¥Ð¾Ñ‚Ñ Ð½Ðµ вÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð¾Ñтупна (например, ÑпиÑок файлов), +Ñтот тип запроÑов позволÑет иÑпользовать rpm Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ из +spec файлов без напиÑÐ°Ð½Ð¸Ñ Ñпециализированного анализатора таких файлов. +.TP +\fB--tid \fITID\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº пакету(ам), который Ñодержит указанный идентификатор +транзакции \fITID\fR. Ð’ данный момент иÑпользуетÑÑ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¼ÐµÑ‚ÐºÐ° unix +в качеÑтве идентификатора. Ð’Ñе пакеты уÑтановленные или удаленные в ÑоÑтаве +одной транзакции будут иметь один и тот же идентификатор. +.TP +\fB--triggeredby \fIPACKAGE_NAME\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº пакетам, которые вызывают Ñрабатывание триггера пакета(ов) +\fIPACKAGE_NAME\fR. +.TP +\fB--whatprovides \fICAPABILITY\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ ÐºÐ¾ вÑем пакетам, которые предоÑтавлÑÑŽÑ‚ функциональноÑÑ‚ÑŒ +\fICAPABILITY\fR. +.TP +\fB--whatrequires \fICAPABILITY\fB\fR +ВыполнÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ ÐºÐ¾ вÑем пакетам, которые требуют \fICAPABILITY\fR Ð´Ð»Ñ +корректной работы. +.SS "ОПЦИИ ЗÐПРОСРПÐКЕТОВ:" +.PP +.TP +\fB--changelog\fR +ВывеÑти информацию об изменениÑÑ… в пакете. +.TP +\fB-c, --configfiles\fR +ВывеÑти только конфигурационные файлы (подразумевает \fB-l\fR). +.TP +\fB-d, --docfiles\fR +ВывеÑти только файлы документации (подразумевает \fB-l\fR). +.TP +\fB--dump\fR +РаÑпечатать информацию о файле в виде: +.sp +.RS + +.nf +path size mtime md5sum mode owner group isconfig isdoc rdev symlink + +.fi +.RE + +Эта Ð¾Ð¿Ñ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть иÑпользована ÑовмеÑтно Ñ Ð¾Ð´Ð½Ð¾Ð¹ из +\fB-l\fR, +\fB-c\fR, +\fB-d\fR. +.TP +\fB--filesbypkg\fR +ВывеÑти вÑе файлы во вÑех выбранных пакетах. +.TP +\fB-i, --info\fR +ВывеÑти информацию о пакете, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¸Ð¼Ñ, верÑию и опиÑание. +Будет иÑпользована \fB--queryformat\fR еÑли указана. +.TP +\fB--last\fR +УпорÑдочивает вывод пакетов по времени уÑтановки так, чтобы поÑледние +пакеты были выведены в начале. +.TP +\fB-l, --list\fR +ВывеÑти ÑпиÑок файлов в пакете. +.TP +\fB--provides\fR +ВывеÑти функциональноÑÑ‚ÑŒ (capabilities) предоÑтавлÑемую пакетом. +.TP +\fB-R, --requires\fR +ВывеÑти пакеты, от которых завиÑит Ñтот пакет. +.TP +\fB--scripts\fR +ВывеÑти Ñкриптлет(Ñ‹) пакета, которые иÑпользуютÑÑ ÐºÐ°Ðº чаÑÑ‚ÑŒ процеÑÑа +уÑтановки или ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð². +.TP +\fB-s, --state\fR +ВывеÑти ÑоÑтоÑние (\fIstate\fR) файлов в пакете (подразумеваетÑÑ \fB-l\fR). +СоÑтоÑние каждого файла в пакете ÑвлÑетÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из +\fIнормальное (normal)\fR, +\fIне уÑтановлен (not installed)\fR или +\fIзаменен (replaced)\fR. +.TP +\fB--triggers, --triggerscripts\fR +Показать Ñценарии триггеров (еÑли ÑущеÑтвуют), входÑщие в ÑоÑтав пакета. + +.SS "ОПЦИИ ПРОВЕРКИ" +.PP +ÐžÐ±Ñ‰Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° команды проверки rpm приведена ниже +.PP + +\fBrpm\fR {\fB-V|--verify\fR} [\fBопции-выбора\fR] [\fBопции-проверки\fR] + +.PP +ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ пакета Ñравнивает информацию о файлах уÑтановленных из +пакета Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о них из метаданных пакета, хранимых в базе данных rpm. +Среди прочего при проверке ÑравниваютÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€, MD5 Ñумма, права доÑтупа +тип, владельца и группу каждого файла. Любые раÑÑ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ отображены. +Файлы, которые не были уÑтановлены вмеÑте Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð¼, например, файлы +документации, иÑключенные при помощи опции "\fB--excludedocs\fR", +будут проигнорированы без предупреждениÑ. +.PP +Опции выбора пакетов ÑвлÑÑŽÑ‚ÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ запроÑу пакетов (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ +файлы манифеÑта пакета в качеÑтве аргумента). +Опции, уникальные Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° проверки, приведены ниже: +.TP +\fB--nodeps\fR +Ðе выполнÑÑ‚ÑŒ проверку завиÑимоÑтей пакетов. +.TP +\fB--nodigest\fR +Ðе проверÑÑ‚ÑŒ при чтении дайджеÑÑ‚ пакета или заголовка. +.TP +\fB--nofiles\fR +Ðе проверÑÑ‚ÑŒ атрибуты файлов пакетов. +.TP +\fB--noscripts\fR +Ðе выполнÑÑ‚ÑŒ Ñкриптлет \fB%verifyscript\fR (еÑли ÑущеÑтвует). +.TP +\fB--nosignature\fR +Ðе проверÑÑ‚ÑŒ при чтении подпиÑÑŒ пакета или заголовка при чтении. +.TP +\fB--nolinkto\fR +.TP +\fB--nomd5\fR +.TP +\fB--nosize\fR +.TP +\fB--nouser\fR +.TP +\fB--nogroup\fR +.TP +\fB--nomtime\fR +.TP +\fB--nomode\fR +.TP +\fB--nordev\fR +Ðе проверÑÑ‚ÑŒ ÑоответÑтвующие атрибуты файлов. +.PP +Формат вывода предÑтавлÑет Ñобой Ñтроку из 8 Ñимволов и маркера из заголовка пакета, +за которыми Ñледует Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°. Возможные маркеры атрибутов приведены ниже: + +.nf +\fBc\fR \fB%config\fR конфигурационный файл. +\fBd\fR \fB%doc\fR файл документации. +\fBg\fR \fB%ghost\fR файл (Ñ‚.е. Ñодержимое файла не включено в ÑоÑтав пакета). +\fBl\fR \fB%license\fR файл Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸ÐµÐ¹. +\fBr\fR \fB%readme\fR файл readme. +.fi + +Каждый из 8 Ñимволов отражает результат проверки атрибута(ов) файлов Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ +того же атрибута, запиÑанного в базе данных. Символ +"\fB.\fR" (точка) +означает, что проверка прошла, а Ñимвол +"\fB?\fR" (вопроÑительный знак) +означает, что проверка не может быть выполнена (например, права доÑтупа к файлу не +позволÑÑŽÑ‚ провеÑти чтение). Ð’ противном Ñлучае будут отображены Ñимволы (Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ +Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ñ‹ жирным), показывающие Ñбой проверки ÑоответÑтвующего \fB--verify\fR теÑта: + +.nf +\fBS\fR размер (\fBS\fRize) файла отличаетÑÑ +\fBM\fR режим (\fBM\fRode) доÑтупа отличаетÑÑ (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿Ñ€Ð°Ð²Ð° доÑтупа и тип файла) +\fB5\fR отличаетÑÑ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ MD\fB5\fR Ñумма +\fBD\fR отличаетÑÑ Ñтарший/младший номер файла уÑтройÑтва (\fBD\fRevice) +\fBL\fR отличаетÑÑ Ð¿ÑƒÑ‚ÑŒ ÑÑылки при read\fBL\fRink(2) +\fBU\fR отличаетÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ† (\fBU\fRser) +\fBG\fR отличаетÑÑ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ðµ владение (\fBG\fRroup) +\fBT\fR отличаетÑÑ Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ (m\fBT\fRime) +.fi + +.SS "ПРОВЕРКРЦИФРОВОЙ ПОДПИСИ И ДÐЙДЖЕСТÐ" +.PP +ÐžÐ±Ñ‰Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° команд rpm по работе Ñ Ñ†Ð¸Ñ„Ñ€Ð¾Ð²Ð¾Ð¹ подпиÑью приведена ниже +.PP + + +\fBrpm\fR \fB--import\fR \fB\fIPUBKEY\fB\fR\fI ...\fR + + +\fBrpm\fR {\fB--checksig\fR} [\fB--nosignature\fR] [\fB--nodigest\fR] + \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.PP +ÐžÐ¿Ñ†Ð¸Ñ \fB--checksig\fR проверÑет вÑе дайджеÑÑ‚Ñ‹ и подпиÑи, ÑодержащиеÑÑ Ð² +\fIPACKAGE_FILE\fR Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ целоÑтноÑти и проиÑÑ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð°. +Обратите внимание, что подпиÑи теперь проверÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¸ каждом +чтении пакета и Ð¾Ð¿Ñ†Ð¸Ñ \fB--checksig\fR полезна Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ +вÑех дайджеÑтов и подпиÑей, аÑÑоциированных Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð¼. +.PP +Цифровые подпиÑи не могут быть проверены без публичных ключей. +Публичный ключ в ASCII формате может быть добавлен в базу +данных \fBrpm\fR при иÑпользовании команды \fB--import\fR. +Импортированный публичный ключ заноÑитÑÑ Ð² заголовок и +управление ключами проводитÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ð¾ управлению пакетами. +Ðапример, вÑе импортированные ключи можно проÑмотреть при помощи: +.PP +\fBrpm -qa gpg-pubkey*\fR +.PP +ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ конкретном публичном ключе поÑле импорта +может быть отображена при запроÑе. Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ключе +Red Hat GPG/DSA: +.PP +\fBrpm -qi gpg-pubkey-db42a60e\fR +.PP +Ðаконец, публичный ключ может быть удален поÑле его импорта +также как пакет. Удаление ключа Red Hat GPG/DSA: +.PP +\fBrpm -e gpg-pubkey-db42a60e\fR +.SS "ПОДПИСЬ ПÐКЕТÐ" +.PP + +\fBrpm\fR \fB--addsign|--resign\fR \fB\fIPACKAGE_FILE\fB\fR\fI ...\fR + +.PP +Обе опции \fB--addsign\fR и \fB--resign\fR +Ñоздают и вÑтавлÑÑŽÑ‚ новую подпиÑÑŒ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ указанного +файла \fIPACKAGE_FILE\fR, заменÑÑ ÑущеÑтвующие подпиÑи. +Эти две опции ÑущеÑтвуют по иÑторичеÑким причинам, +и разницы в поведении между ними ÑÐµÐ¹Ñ‡Ð°Ñ Ð½ÐµÑ‚. +.SS "ИСПОЛЬЗОВÐÐИЕ GPG ДЛЯ ПОДПИСИ ПÐКЕТОВ" +.PP +Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы подпиÑывать пакеты при помощи GPG, \fBrpm\fR +должен быть наÑтроен на запуÑк GPG и иметь возможноÑÑ‚ÑŒ +находить хранилище ключей Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ñ‹Ð¼Ð¸ ключами. По умолчанию +\fBrpm\fR иÑпользует те же ÑоглашениÑ, что и GPG Ð´Ð»Ñ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ +хранилища ключей, а именно переменную Ñреды \fB$GNUPGHOME\fR. +ЕÑли ваше хранилище ключей раÑполагаетÑÑ Ð½Ðµ там, где его +ожидает найти GPG, вам потребуетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ в макроÑе +\fB%_gpg_path\fR +раÑположение хранилища ключей GPG. +.PP +Ð”Ð»Ñ ÑовмеÑтимоÑти Ñо Ñтарыми верÑиÑми GPG, PGP и rpm +Ñледует наÑтраивать только подпиÑÑŒ пакетов V3 OpenPGP. +Могут быть иÑпользованы алгоритмы проверки DSA и RSA, Ñ…Ð¾Ñ‚Ñ +предпочитаетÑÑ DSA. +.PP +ЕÑли вам требуетÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñывать ÑобÑтвенные пакеты, вам также +потребуетÑÑ Ñоздать ÑобÑтвенную пару из публичного и приватного +ключа (Ñм. руководÑтво по GPG). Вам также потребуетÑÑ Ð½Ð°Ñтроить +\fBrpm\fR Ð¼Ð°ÐºÑ€Ð¾Ñ +.TP +\fB%_gpg_name\fR +Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, ключом которого будут подпиÑыватьÑÑ Ð²Ð°ÑˆÐ¸ пакеты. +.PP +Ðапример, Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ GPG Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи пакетов от имени +\fI"John Doe "\fR +из хранилища ключей раÑположенного в \fI/etc/rpm/.gpg\fR, +иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñƒ \fI/usr/bin/gpg\fR, вам потребуетÑÑ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ Ñтроки +.PP +.nf +%_gpg_path /etc/rpm/.gpg +%_gpg_name John Doe +%_gpgbin /usr/bin/gpg +.fi +.PP +в файл наÑтройки макроÑов. Ð”Ð»Ñ Ð¾Ð±Ñ‰ÐµÑиÑтемной наÑтройки иÑпользуетÑÑ +\fI/etc/rpm/macros\fR и \fI~/.rpmmacros\fR Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³Ð¾ пользователÑ. +.SS "ОПЦИИ ПЕРЕСТРОЙКИ БÐЗЫ ДÐÐÐЫХ" +.PP +ÐžÐ±Ñ‰Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° команды переÑтройки базы данных rpm приведена ниже +.PP + +\fBrpm\fR {\fB--initdb|--rebuilddb\fR} [\fB-v\fR] [\fB--dbpath \fIDIRECTORY\fB\fR] [\fB--root \fIDIRECTORY\fB\fR] + +.PP +ИÑпользуйте \fB--initdb\fR Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ базы данных и +\fB--rebuilddb\fR Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑтройки индекÑов базы данных на оÑновании +заголовков уÑтановленных пакетов. +.SS "SHOWRC" +.PP +Команда +.PP +\fBrpm\fR \fB--showrc\fR +.PP +показывает значениÑ, которые \fBrpm\fR будет иÑпользовать +Ð´Ð»Ñ Ð²Ñех опций, уÑтановленные в конфигурационных файлах +\fIrpmrc\fR и +\fImacros\fR. +.SS "ОПЦИИ FTP/HTTP" +.PP +\fBrpm\fR может выÑтупать в качеÑтве клиента FTP и/или HTTP, +таким образом пакеты могут быть опрошены или уÑтановлены из Интернет. +Пакеты Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ уÑтановки, Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ запроÑа могут +быть указаны в виде адреÑа +\fBftp\fR или +\fBhttp\fR +URL: +.PP +ftp://USER:PASSWORD@HOST:PORT/path/to/package.rpm +.PP +ЕÑли параметр \fB:PASSWORD\fR будет опущен, пароль будет запрошен +(один раз Ð´Ð»Ñ Ð¿Ð°Ñ€Ñ‹ пользователь/узел). ЕÑли опущены оба параметра +(user и password), будет выполнено анонимное подключение \fBftp\fR. +Во вÑех ÑлучаÑÑ… иÑпользуетÑÑ Ð¿Ð°ÑÑивный (PASV) режим передачи +файлов \fBftp\fR. +.PP +\fBrpm\fR допуÑкает Ñледующие опции Ð´Ð»Ñ Ð°Ð´Ñ€ÐµÑов +ftp URL: +.TP +\fB--ftpproxy \fIHOST\fB\fR +Узел \fIHOST\fR будет иÑпользован как прокÑи-Ñервер +Ð´Ð»Ñ Ð²Ñех операций передачи данных ftp, что позволÑет работать +Ñ ftp через межÑетевые Ñкраны, на которых запущена Ñлужба прокÑи. +Эта Ð¾Ð¿Ñ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть также указана при +наÑтройке макроÑа \fB%_ftpproxy\fR. +.TP +\fB--ftpport \fIPORT\fB\fR +Ðомер TCP порта \fIPORT\fR будет иÑпользован Ð´Ð»Ñ ftp Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ +к ftp прокÑи-Ñерверу вмеÑто порта по умолчанию. Эта Ð¾Ð¿Ñ†Ð¸Ñ +может быть также указана при наÑтройке макроÑа \fB%_ftpport\fR. +.PP +\fBrpm\fR допуÑкает Ñледующие опции Ð´Ð»Ñ Ð°Ð´Ñ€ÐµÑов +\fBhttp\fR URL: +.TP +\fB--httpproxy \fIHOST\fB\fR +Узел \fIHOST\fR будет иÑпользован как прокÑи-Ñервер Ð´Ð»Ñ +вÑех операций передачи данных \fBhttp\fR. Эта Ð¾Ð¿Ñ†Ð¸Ñ +может быть также указана при наÑтройке макроÑа +\fB%_httpproxy\fR. +.TP +\fB--httpport \fIPORT\fB\fR +Ðомер TCP порта \fIPORT\fR будет иÑпользован Ð´Ð»Ñ \fBhttp\fR Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ +к http прокÑи-Ñерверу вмеÑто порта по умолчанию. Эта Ð¾Ð¿Ñ†Ð¸Ñ +может быть также указана при наÑтройке макроÑа \fB%_httpport\fR. +.SH "ВОПРОСЫ СОВМЕСТИМОСТИ" +.SS "Выполнение rpmbuild" +.PP +Режимы Ñборки rpm теперь вынеÑены в программу +\fI/usr/bin/rpmbuild\fR. +Ðе ÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° Ñто, ÑовмеÑтимоÑÑ‚ÑŒ, обеÑÐ¿ÐµÑ‡Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð¿Ñ€Ð¸ помощи popt +пÑевдонимов, указанных ниже, ÑвлÑетÑÑ Ð°Ð´ÐµÐºÐ²Ð°Ñ‚Ð½Ð¾Ð¹, но не Ñовершенной. +ПоÑтому ÑовмеÑтимоÑÑ‚ÑŒ режимов Ñборки через пÑевдонимы popt +удалена из rpm. УÑтановите пакет \fBrpmbuild\fR и проÑмотрите +документацию в \fBrpmbuild\fR(8) по вÑем режимам Ñборки \fBrpm\fR, +ранее приведенную здеÑÑŒ в \fBrpm\fR(8). +.PP +Добавьте Ñледующие Ñтроки в \fI/etc/popt\fR, +еÑли вы желаете вызывать \fBrpmbuild\fR из +командной Ñтроки \fBrpm\fR: +.PP +.nf +rpm exec --bp rpmb -bp +rpm exec --bc rpmb -bc +rpm exec --bi rpmb -bi +rpm exec --bl rpmb -bl +rpm exec --ba rpmb -ba +rpm exec --bb rpmb -bb +rpm exec --bs rpmb -bs +rpm exec --tp rpmb -tp +rpm exec --tc rpmb -tc +rpm exec --ti rpmb -ti +rpm exec --tl rpmb -tl +rpm exec --ta rpmb -ta +rpm exec --tb rpmb -tb +rpm exec --ts rpmb -ts +rpm exec --rebuild rpmb --rebuild +rpm exec --recompile rpmb --recompile +rpm exec --clean rpmb --clean +rpm exec --rmsource rpmb --rmsource +rpm exec --rmspec rpmb --rmspec +rpm exec --target rpmb --target +rpm exec --short-circuit rpmb --short-circuit +.fi +.SH "ФÐЙЛЫ" +.SS "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ rpmrc" +.PP +.nf +\fI/usr/lib/rpm/rpmrc\fR +\fI/usr/lib/rpm/redhat/rpmrc\fR +\fI/etc/rpmrc\fR +\fI~/.rpmrc\fR +.fi +.SS "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð°ÐºÑ€Ð¾Ñов" +.PP +.nf +\fI/usr/lib/rpm/macros\fR +\fI/usr/lib/rpm/redhat/macros\fR +\fI/etc/rpm/macros\fR +\fI~/.rpmmacros\fR +.fi +.SS "База данных" +.PP +.nf +\fI/var/lib/rpm/Basenames\fR +\fI/var/lib/rpm/Conflictname\fR +\fI/var/lib/rpm/Dirnames\fR +\fI/var/lib/rpm/Filemd5s\fR +\fI/var/lib/rpm/Group\fR +\fI/var/lib/rpm/Installtid\fR +\fI/var/lib/rpm/Name\fR +\fI/var/lib/rpm/Packages\fR +\fI/var/lib/rpm/Providename\fR +\fI/var/lib/rpm/Provideversion\fR +\fI/var/lib/rpm/Pubkeys\fR +\fI/var/lib/rpm/Removed\fR +\fI/var/lib/rpm/Requirename\fR +\fI/var/lib/rpm/Requireversion\fR +\fI/var/lib/rpm/Sha1header\fR +\fI/var/lib/rpm/Sigmd5\fR +\fI/var/lib/rpm/Triggername\fR +.fi +.SS "Временные файлы" +.PP +\fI/var/tmp/rpm*\fR +.SH "СМОТРИ ТÐКЖЕ" + +.nf +\fBpopt\fR(3), +\fBrpm2cpio\fR(8), +\fBrpmbuild\fR(8), +.fi + +\fBhttp://www.rpm.org/ +\fR +.SH "ÐВТОРЫ" + +.nf +Marc Ewing +Jeff Johnson +Erik Troan +.fi +.SH ПЕРЕВОД +.nf +Ðндрей Мартынов +.fi diff --git a/doc/ru/rpm2cpio.8 b/doc/ru/rpm2cpio.8 new file mode 100644 index 0000000..e1d1989 --- /dev/null +++ b/doc/ru/rpm2cpio.8 @@ -0,0 +1,28 @@ +.\" rpm2cpio - конвертирует пакет RPM в архив cpio +.TH rpm2cpio 8 "25 Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ 2006" "Инвента" +.SH ÐÐЗВÐÐИЕ +rpm2cpio \- Извлекает архив cpio из RPM пакета +.SH ОБЗОР +\fBrpm2cpio\fP [Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°] +.SH ОПИСÐÐИЕ +\fBrpm2cpio\fP конвертирует файл .rpm, заданный как его единÑтвенный аргумент, +в архив cpio на Ñтандартном выводе. ЕÑли в качеÑтве аргумента указано '-', +RPM пакет ÑчитываетÑÑ Ñо Ñтандартного ввода. + +.br +.I "\fBrpm2cpio rpm-1.1-1.i386.rpm\fP" +.br +.I "\fBrpm2cpio - < glint-1.0-1.i386.rpm\fP" +.br +.I "\fBrpm2cpio glint-1.0-1.i386.rpm | cpio -dium\fP" + +.SH СМОТРИ ТÐКЖЕ +.IR rpm (8) +.SH ÐВТОР +.nf +Erik Troan +.fi +.SH ПЕРЕВОД +.nf +Ðндрей Мартынов +.fi diff --git a/doc/sk/rpm.8 b/doc/sk/rpm.8 new file mode 100644 index 0000000..621f7a0 --- /dev/null +++ b/doc/sk/rpm.8 @@ -0,0 +1,624 @@ +.\" rpm - Red Hat Package Manager +.\" +.\" translated into slovak by Peter Ivanyi +.\" for rpm version 3.0.5-9.6x +.\" +.TH rpm 8 "22 December 1998" "Red Hat Software" + +.SH MENO +rpm \- Red Hat správca balíkov + +.SH POUŽITIE +\fBrpm\fP [voľby] + +.SH POPIS +\fBrpm\fP je veľmi výkonný \fIsprávca balíkov\fP, ktorý môže byÅ¥ +použitý na zostavenie, inÅ¡taláciu, výpis informácií, kontrolu, +aktualizáciu a odinÅ¡talovanie jednotlivých softverových balíkov. +\fIBalík\fP obsahuje archív súborov a informácií o balíku vrátane +mena, verzie a popisu. + +Musí byÅ¥ použitý v niektorom z nasledujúcich režimov: +\fIinicializácia databázy\fP, \fIprebudovanie databázy\fP, +\fIzostavenie balíka\fP, \fIrekompilácia balíka\fP, +\fIzostavenie balíka z tar archívu\fP, \fIzistenie informácií\fP, +\fIvýpis informaÄných tagov\fP, \fIinÅ¡talácia\fP, \fIobÄerstvenie\fP, +\fIodinÅ¡talovanie\fP, \fIkontrola a overenie\fP, \fIoverenie podpisu\fP, +\fIopätovný podpis\fP, \fIpridanie podpisu\fP, +\fInastavenie vlastníkov a skupín\fP a \fIvýpis konfigurácie\fP. + +Spravovanie databázy: +.br +.I "\fB rpm \-i [\-\-initdb]\fP" +.br +.I "\fB rpm \-i [\-\-rebuilddb]\fP" + +Zostavenie: +.br +.I "\fB rpm [\-b|t] [balík_spec]+\fP" +.br +.I "\fB rpm [\-\-rebuild] [zdrojové_rpm]+\fP" +.br +.I "\fB rpm [\-\-tarbuild] [tarovaný_zdroj]+\fP" +.br + +Zistenie informácií: +.br +.I "\fB rpm [\-\-query] [zisÅ¥ovacie\-voľby]\fP" +.br +.I "\fB rpm [\-\-querytags]\fP" +.br + +Spravovanie inÅ¡talovaných balíkov: +.br +.I "\fB rpm [\-\-install] [inÅ¡talaÄné\-voľby] [súbor_balíka]+\fP" +.br +.I "\fB rpm [\-\-freshen|\-F] [inÅ¡talaÄné\-voľby] [súbor_balíka]+\fP" +.br +.I "\fB rpm [\-\-uninstall|\-e] [odinÅ¡talaÄné\-voľby] [balík]+\fP" +.br +.I "\fB rpm [\-\-verify|\-V] [overovacie\-voľby] [balík]+\fP" +.br + +Podpisy (signatúry): +.br +.I "\fB rpm [\-\-verify|\-V] [overovacie\-voľby] [balík]+\fP" +.br +.I "\fB rpm [\-\-resign] [súbor_balíka]+\fP" +.br +.I "\fB rpm [\-\-addsign] [súbor_balíka]+\fP" +.br + +RozliÄné: +.br +.I "\fB rpm [\-\-showrc]\fP" +.br +.I "\fB rpm [\-\-setperms] [balík]+\fP" +.br +.I "\fB rpm [\-\-setgids] [balík]+\fP" +.br + + +.SH VÅ EOBECNÉ VOĽBY +Tieto voľby môžu byÅ¥ použité vo vÅ¡etkých režimoch. +.IP "\fB\-vv\fP" +Vypíše množstvo oÅ¡klivých ladiacich informácií. +.IP "\fB\-\-quiet\fP" +Vypíše Äo najmenej informácií \- normálne sa zobrazia iba chybové hlášky. +.IP "\fB\-\-help\fP" +Vypíše o nieÄo dlhÅ¡iu informáciu o použití ako je bežný výpis. +.IP "\fB\-\-version\fP" +Vypíše jednoriadkovú informáciu pozostávajúcu z Äísla používanej verzie +\fBrpm\fP. +.IP "\fB\-\-rcfile \fI\fP" +Každý zo súborov v \fI\fP oddelených dvojbodkami je +postupne Äítaný cez \fBrpm\fP za úÄelom získania konfiguraÄných informácií. +Implicitný \fI\fP je +\fB/usr/lib/rpm/rpmrc:/etc/rpmrc:~/.rpmrc\fP. +Iba prvý súbor zo zoznamu súborov musí existovaÅ¥, a vlnovky (~) sú +expandované na hodnotu \fB$HOME\fP. +.IP "\fB\-\-root \fI\fP" +Použije adresár \fI\fP ako koreňový adresár systému pre vÅ¡etky operácie. +Uvedomte si, že toto znamená, že databáza sa sa bude ÄítaÅ¥ alebo modifikovaÅ¥ +pod adresárom \fI\fP a vÅ¡etky predinÅ¡talaÄné a poinÅ¡talaÄné skripty +budú bežaÅ¥ po prevedení chroot() na adresár \fI\fP. +.IP "\fB\-\-dbpath \fI\fP" +Použije databázu RPM v ceste \fI\fP. +.IP "\fB\-\-justdb\fP" +Aktualizuje iba databázu a nie súborový systém. +.IP "\fB\-\-ftpproxy \fI\fP, \fB\-\-httpproxy \fI\fP" +Použije \fI\fP ako poÄítaÄ s FTP alebo HTTP proxy serverom. +Bližšie podrobnosti sú uvedené v sekcii \fBVOĽBY FTP/HTTP\fP. +.IP "\fB\-\-ftpport \fI\fP, \fB\-\-httpport \fI\fP" +Použije \fI\fP ako FTP alebo HTTP port na poÄítaÄi s proxy serverom. +Bližšie podrobnosti sú uvedené v sekcii \fBVOĽBY FTP/HTTP\fP. +.IP "\fB\-\-pipe \fI\fP" +Presmeruje výstup \fBrpm\fP na príkaz \fI\fP. + + +.SH VOĽBY PRI INÅ TALÃCII A AKTUALIZÃCII (UPGRADE) +VÅ¡eobecná forma inÅ¡talaÄného príkazu je +.PP + \fBrpm \-i [inÅ¡talaÄné\-voľby] \fI+\fP +.PP +Táto voľba nainÅ¡taluje nový balíÄek. +VÅ¡eobecná forma aktualizaÄného príkazu je +.PP + \fBrpm \-U [inÅ¡talaÄné\-voľby] \fI+\fP +.PP +Táto voľba aktualizuje existujúci nainÅ¡talovaný balíÄek alebo nainÅ¡taluje +nový balíÄek. Podobá sa inÅ¡talaÄnému príkazu, rozdiel je iba v tom, že +vÅ¡etky Äaľšie verzie balíka sa odstránia zo systému. +.PP + \fBrpm [\-F|--freshen] [inÅ¡talaÄné\-voľby] \fI+\fP +.PP +Táto voľba aktualizuje balíky, ale iba za predpokladu, že predchádzajúce +verzie sú nainÅ¡talované. + +\fI\fP môže byÅ¥ Å¡pecifikovaný ako ftp alebo http URL, +v tomto prípade sa najprv balíÄek stiahne a nainÅ¡taluje až potom. +Bližšie podrobnosti o vstavanej podpore ftp a http sú uvedené v sekcii +\fBVOĽBY FTP/HTTP\fP. +.PP +.IP "\fB\-\-force\fP" +Rovnaký efekt ako súÄasné použitie \fB\-\-replacepkgs\fP, \fB\-\-replacefiles\fP a +\fB\-\-oldpackage\fP. +.IP "\fB\-h\fP, \fB\-\-hash\fP" +Vypíše 50 znakov #, keÄ je celý archív balíka rozbalený. Pre lepší +vzhľad je vhodné používaÅ¥ s voľbou \fB\-v\fP. +.IP "\fB\-\-oldpackage\fP" +Povolí aktualizáciu prepísaním novÅ¡ieho balíka starším. +.IP "\fB\-\-percent\fP" +Vypíše stav rozbalovania súborov z balíkového archívu v percentách. +Toto je praktické pri behu RPM z iných nástrojov. +.IP "\fB\-\-replacefiles\fP" +NainÅ¡taluje balík aj v prípade, že nahradí súbory z iných, už +nainÅ¡talovaných balíkov. +.IP "\fB\-\-replacepkgs\fP" +NainÅ¡taluje balíky aj v prípade, že niektoré z nich už sú nainÅ¡talované +v systéme. +.IP "\fB\-\-allfiles\fP" +NainÅ¡taluje alebo aktualizuje vÅ¡etky missingok súbory (súbory, ktoré nemusia +nutne existovaÅ¥) z balíka bez ohľadu na to, Äi existujú. +.IP "\fB\-\-nodeps\fP" +Nevykoná kontrolu závislostí pred inÅ¡talovaním alebo aktualizovaním +balíka. +.IP "\fB\-\-noscripts\fP" +Nevykoná predinÅ¡talaÄné a poinÅ¡talaÄné skripty. +.IP "\fB\-\-notriggers\fP" +Nevykoná skripty, ktorých spúšťou je inÅ¡talácia balíka. +.IP "\fB\-\-ignoresize\fP" +Nevykoná kontrolu pripojeného súborového systému na dostatok voľného miesta +pred inÅ¡taláciou balíka. +.IP "\fB\-\-excludepath \fI\fP" +NenainÅ¡taluje súbory, ktorých mená zaÄínajú na \fI\fP. +.IP "\fB\-\-excludedocs\fP" +NenainÅ¡taluje žiadne súbory, ktoré sú oznaÄené ako dokumentácia (ktoré +zahŕňajú najmä manuálové stránky a texinfo dokumenty). +.IP "\fB\-\-includedocs\fP" +NainÅ¡taluje súbory, ktoré sú oznaÄené ako dokumentácia. Toto je implicitné +nastavenie. +.IP "\fB\-\-test\fP" +NenainÅ¡taluje balík, iba jednoducho otestuje, Äo by sa vykonalo pri +inÅ¡talácii a vypíše potenciálne konflikty. +.IP "\fB\-\-ignorearch\fP" +Toto umožní inÅ¡taláciu alebo aktualizáciu aj v prípade, že sa nezhoduje +architektúra popísaná v binárnom RPM a poÄítaÄa, na ktorý sa má balík +inÅ¡talovaÅ¥. +.IP "\fB\-\-ignoreos\fP" +Toto umožní inÅ¡taláciu alebo aktualizáciu aj v prípade, že sa nezhoduje +operaÄný systém popísaný v binárnom RPM a poÄítaÄi, na ktorý sa má balík +inÅ¡talovaÅ¥. +.IP "\fB\-\-prefix \fI\fP" +Toto nastaví inÅ¡talaÄný prefix na \fI\fP pre relokovateľné +(premiestniteľné) balíky. +.IP "\fB\-\-relocate \fI\fB=\fI\fP" +Pre relokovateľné balíky, preloží cestu súborov, ktoré sa mali umiestniÅ¥ +na miesto \fI\fP do \fI\fP. +.IP "\fB\-\-badreloc\fP" +Vnúti relokáciu aj v prípade, že balík nie je relokovateľný. Používa sa +spolu s voľbou \-\-relocate. +.IP "\fB\-\-noorder\fP" +Nezmení poradie balíkov na inÅ¡taláciu. V opaÄnomom prípade by mohlo byÅ¥ +zmenené poradie v zozname balíkov, aby sa zachovali závislosti. + + +.SH VOĽBY PRI ZISTENà INFORMÃCIà (QUERY) +VÅ¡eobecná forma príkazu zistenia informácií je +.PP + \fBrpm \-q [zisÅ¥ovacie\-voľby]\fP +.PP +Je možné Å¡pecifikovaÅ¥, v akom formáte majú byÅ¥ vypísané výstupné údaje. +Na takýto úÄel slúži voľba \fB[\-\-queryformat|\-\-qf]\fP, nasledovaná +formátovacím reÅ¥azcom. + +InformaÄné výstupy sú modifikovanou verziou Å¡tandardného \fBprintf(3)\fP +formátovania. Formát je vytvorený zo statických reÅ¥azcov (ktoré môžu zahŕňaÅ¥ +Å¡tandardné C znakové escape sekvencie pre nový riadok, tabelátor a Äaľšie +Å¡peciálne znaky a \fBprintf(3)\fP typové formátovaÄe). KeÄže \fBrpm\fP už +vie, aky typ má vytlaÄiÅ¥, Å¡pecifikátor typu musí byÅ¥ vynechaný a nahradený +menom tagu hlaviÄky, ktorá má byÅ¥ vytlaÄená, uzavretý znakmi {}. RPMTAG_ +ÄasÅ¥ mena tagu môže byÅ¥ vynechaná. + +Alternatívny výstup formátovania môže byÅ¥ požadovaný, ak je nasledovaný +tagom s \fB:\fItypetag\fR. Momentálne sú podporované nasledujúce typy: +\fBoctal\fR, \fBdate\fR, \fBshescape\fR, \fBperms\fR, \fBfflags\fR, a +\fBdepflags\fR. + +Napríklad na vytlaÄenie informácie o mene balíka je možné použiÅ¥ +formátovací reÅ¥azec \fB%{NAME}\fP. Na vytlaÄenie informácie o mene +a distribúcii v dvoch stĺpcoch je možné použiÅ¥ +\fB%\-30{NAME}%{DISTRIBUTION}\fP. + +\fBrpm\fP zobrazí zoznam vÅ¡etkých tagov, ktoré pozná, keÄ je spustené +s argumentom \fB\-\-querytags\fP. + +Existujú dve podmnožiny volieb pre zistenie informácií: výber balíka a +výber informácií. + +Voľby výberu balíka: +.br +.IP "\fB\fI\fP" +ZisÅ¥uje u inÅ¡talovaných balíkov s menom \fI\fP. +.IP "\fB\-a\fP, \fB\-\-all\fP" +ZisÅ¥uje u vÅ¡etkých nainÅ¡talovaných balíkov. +.IP "\fB\-\-whatrequires \fI\fP" +ZisÅ¥uje u vÅ¡etkých inÅ¡talovaných balíkov, ktoré vyžadujú \fI\fP +pre správnu funkÄnosÅ¥. +.IP "\fB\-\-whatprovides \fI\fP" +ZisÅ¥uje u vÅ¡etkých inÅ¡talovaných balíkov, ktoré poskytujú vlastnosÅ¥ +\fI\fP. +.IP "\fB\-f \fI\fP, \fB\-\-file \fI\fP" +ZisÅ¥uje u balíka, ktorý vlastní súbor \fI\fP. +.IP "\fB\-g \fI\fP, \fB\-\-group \fI\fP" +ZisÅ¥uje u balíkov, ktoré majú skupinu \fI\fP. +.IP "\fB\-p \fI\fP" +ZisÅ¥uje u (nenainÅ¡talovaného) balíka \fI\fP. +\fI\fP môže byÅ¥ Å¡pecifikovaný v ftp alebo http Å¡týle URL, +v takomto prípade bude stiahnutá hlaviÄka balíka, a z nej Äítané požadované +informácie. Bližšie informácie o vstavanej podpore ftp a http klienta sú +v sekcii \fBFTP/HTTP VOĽBY\fP. +.IP "\fB\-\-specfile \fI\fP" +Rozanalyzuje \fI\fP a zisÅ¥uje informácie z tohto súboru, ako keby +to bol balík rpm. Aj napriek neprítomnosti vÅ¡etkých informácií (napr. zoznam +súborov), tento druh zisÅ¥ovania umožňuje rpm získaÅ¥ informácie zo spec súboru +bez nutnosti napísaÅ¥ Å¡peciálny analyzátor spec súborov. +.IP "\fB\-\-querybynumber \fI<Äíslo>\fP" +ZisÅ¥uje u záznamu Äíslo \fI<Äíslo>\fP databázy priamo, toto je užitoÄné pre +ladiace úÄely. +.IP "\fB\-\-triggeredby \fI\fP" +Vypíše balíky, ktorých spúštou je existencia balíka \fI\fP. + +.P +Voľba výberu informácií: +.br +.IP "\fB\-i\fP" +Vypíše informácie o balíku, vrátane mena, verzie a popisu. Táto voľba +využíva \fB\-\-queryformat\fP, ak je Å¡pecifikovaný. +.IP "\fB\-R\fP, \fB\-\-requires\fP" +Vypíše zoznam balíkov, na ktorých daný balík závisí. +.IP "\fB\-\-provides\fP" +Vypíše zoznam vlastností/schopností, ktoré poskytuje tento balík. +.IP "\fB\-\-changelog\fP" +Vypíše históriu zmien pre balík. +.IP "\fB\-l\fP, \fB\-\-list\fP" +Vypíše zoznam súborov v balíku. +.IP "\fB\-s\fP, \fB\-\-state\fP" +Vypíše \fIstavy\fP jednotlivých súborov v balíku (aplikuje voľbu +\fB\-l\fP). Stav jednotlivých súborov môže byÅ¥ \fInormal\fP (normálny), +\fInot installed\fP (nenainÅ¡talovaný) alebo \fIreplaced\fP (nahradený). +.IP "\fB\-d\fP, \fB\-\-docfiles\fP" +Vypíše zoznam súborov oznaÄených ako dokumentácia (aplikuje \fB\-l\fP). +.IP "\fB\-c\fP, \fB\-\-configfiles\fP" +Vypíše iba zoznam konfiguraÄných súborov (aplikuje \fB\-l\fP). +.IP "\fB\-\-scripts\fP" +Vypíše balíkovo Å¡pecifický shellový skript, ktorý je použitý +v inÅ¡talaÄnom alebo odinÅ¡talaÄnom procese, ak nejaký vôbec existuje. +.IP "\fB\-\-triggers\fP, \fB\-\-triggerscripts\fP" +Vypíše skripty, ktoré sú spúšťané spúšťou, ak nejaká existuje a je +obsiahnutá v balíku. +.IP "\fB\-\-dump\fP" +Vypíše zoznam podrobných vlastností súborov pozostoávajúci z: +cesta veľkosÅ¥ mtime md5sum mód vlastník skupina je_konfiguraÄný_súbor +je_dokumentaÄný_súbor rdev symlink. Táto voľba musí byÅ¥ použitá +minimálne s jednou z nasledujúcich volieb \fB\-l\fP, \fB\-c\fP, \fB\-d\fP. +.IP "\fB\-\-last\fP" +Usporiada zoznam balíkov podľa Äasu inÅ¡talácie takým spôsobom, že posledný +inÅ¡talovaný balík bude na vrchu. +.IP "\fB\-\-filesbypkg\fP" +Vypíše zoznam vÅ¡etkých súborov v každom balíku. +.IP "\fB\-\-triggerscripts\fP" +Vypíše vÅ¡etky skripty, ktoré sú spúšťané spúšťou vo vybranom balíku. + + +.SH VOĽBY PRI KONTROLE A OVEROVANà +VÅ¡eobecná forma príkazu kontroly je +.PP + \fBrpm \-V|\-y|\-\-verify [overovacie\-voľby]\fP +.PP +Kontrola balíka prebieha z porovnania informácií z inÅ¡talovaných súborov +z balíkov v systéme s informáciami o súboroch, ktoré obsahoval pôvodný balík +(tieto su uložené v rpm databáze). Okrem iných údajov, kontrola porovnáva +veľkosÅ¥, MD5 kontrolný súÄet, oprávnenia, typ, vlastníka a skupinu každého +súboru. VÅ¡etky odchýľky sú zobrazené. SpecifikaÄné voľby balíka sú rovnaké +ako režime výpisu informácii balíkov. + +Súbory, ktoré neboli inÅ¡talované z balíka, týkajúce sa napr. dokumentaÄných +súborov pri použití voľby "\fB\-\-excludedocs\fP" pri inÅ¡talácii, sú v +tichosti ignorované. + +Voľby, ktoré môžu byÅ¥ použité v kontrolnom režime: + +.IP "\fB\-\-nofiles\fP" +Ignoruje chýbajúce súbory v systéme poÄas kontroly. +.IP "\fB\-\-nomd5\fP" +Ignoruje chyby kontrolných súÄtov MD5 poÄas kontroly. +.IP "\fB\-\-nopgp\fP" +Ignoruje chyby PGP podpisov poÄas kontroly. + +Výstup má formát 8 znakového reÅ¥azca, s prípadným rozšírením výskytu +"\fBc\fP", ktoré charakterizuje konfiguraÄný súbor a mena súboru. +Každý z ôsmych znakov popisuje výsledok porovnania jedného konkrétneho +atribútu súboru s údajmi zaznamenanými v RPM databáze. Jednoduchá "\fB.\fP" +(bodka) znamená, že test preÅ¡iel (neobjavené žiadne odchýľky). +Nasledujúce znaky oznamujú dôvod neúspechu urÄitého testu: + +.IP "\fB5\fP" +MD5 kontrolný súÄet +.IP "\fBS\fP" +VeľkosÅ¥ súboru +.IP "\fBL\fP" +Symbolický link +.IP "\fBT\fP" +Mtime (posledný Äas modifikácie) +.IP "\fBD\fP" +Zariadenie +.IP "\fBU\fP" +Užívateľ +.IP "\fBG\fP" +Skupina +.IP "\fBM\fP" +Mód (vrátane oprávnení a typu súborov) + + +.SH KONTROLA PODPISOV (SIGNATURE) +VÅ¡eobecná forma príkazu kontroly rpm podpisu je +.PP + \fBrpm \-\-checksig \fI+\fP +.PP +Takto sa overuje PGP podpis balíka \fI\fP na uistenie +sa o jeho integrite a pôvode. +KonfiguraÄné informácie PGP sú Äítané z konfiguraÄných súborov. +Bližšie údaje sa nachádzajú v sekcii PGP POPDPISY. + + +.SH VOĽBY PRI ODINÅ TALÃCII +VÅ¡eobecná forma príkazu na odinÅ¡talovanie je +.PP + \fB rpm \-e \fI+\fP +.PP +.IP "\fB\-\-allmatches\fP" +Odstráni vÅ¡etky verzie balíka, ktoré súhlasia s menom \fI\fR. +Normálne sa vyvolá chyba, ak viac balíkov súhlasí s menom +\fI\fR. +.IP "\fB\-\-noscripts\fP" +Nevykoná pred a po odinÅ¡talaÄné skripty. +.IP "\fB\-\-notriggers\fP" +Nevykoná skripty, ktorých spúšťou je odinÅ¡talovanie balíka. +.IP "\fB\-\-nodeps\fP" +Nebude skúmaÅ¥ závislosti pri odinÅ¡talovaní balíkov. +.IP "\fB\-\-test\fP" +NiÄ sa v skutoÄnosti neodinÅ¡taluje, len sa preverí, Äo by sa malo staÅ¥. +Veľmi užitoÄné s voľbou \fB\-vv\fP. + + +.SH VOĽBY PRI ZOSTAVOVANà +VÅ¡eobecná forma príkazu na zostavenie rpm je +.PP + \fBrpm \-[b|t]\fIO\fP [zostavovacie\-voľby] \fI+\fP +.PP +Argumentom je \fB-b\fR, ak sa na zostavenie balíka použije spec súbor +(súbor Å¡pecifikácií balíka) alebo \fB-t\fR, ak \fBRPM\fR má vyhľadaÅ¥ +spec súbor vnútri gzipovaného (alebo komprimovaného) tar archívu, a tento +použiÅ¥ na zostavenie balíka. Po prvom argumente Äaľší argument (\fIO\fR) +Å¡pecifikuje fázu Å¡tádia zostavenia a zabalenia, ktorá sa má vykonaÅ¥, a +ktorá je jedna z: + +.IP "\fB\-bp\fP" +Vykoná "%prep" fázu pre spec súbor. Normálne toto vyvolá rozbalenie +zdrojových archívov a aplikovanie záplat. +.IP "\fB\-bl\fP" +Vykoná "kontrolu zoznamu". Sekcia "%files" z spec súboru je makrom +expandovaná, a je vykonaná kontrola, že každý súbor existuje. +.IP "\fB\-bc\fP" +Vykoná fázu "%build" pre spec súbor (po vykonaní prep fázy). Toto +normálne vyvolá ekvivalent príkazu "make". +.IP "\fB\-bi\fP" +Vykoná fázu "%install" zo spec súboru (po vykonaní prep a build fázy). +Toto vo vÅ¡eobecnosti vyvolá ekvivalent príkazu "make install". +.IP "\fB\-bb\fP" +Zostaví binárny balík (po vykonaní prep, build a install fázy). +.IP "\fB\-bs\fP" +Zostaví iba zdrojový balík (po vykonaní prep, build a install fázy). +.IP "\fB\-ba\fP" +Zostaví binárny a zdrojový balík (po vykonaní prep, build a install fázy). +.PP +Môžu byÅ¥ použité aj nasledujúce voľby: +.IP "\fB\-\-short\-circuit\fP" +PreskoÄí priamo na požadovanú fázu (t. zn. preskoÄí vÅ¡etky fázy Å¡tádia +zostavenia, ktoré predchádzajú Å¡pecifikovanej fáze). Táto voľba je platná +iba s prepínaÄmi \fB\-bc\fP and \fB\-bi\fP. +.IP "\fB\-\-timecheck\fP" +Nastavuje "kontrolu Äasu" (0 zakáže). Táto voľba môže byÅ¥ nastavená +definovaním makra "_timecheck". Hodnota "kontroly Äasu" vyjadruje +(v sekundách) maximálny vek súborov, ktoré budú zabalené. Varovania +sú vypisované pre vÅ¡etky súbory, ktorých vek je za hranicou takto +definovanej hodnoty. +.IP "\fB\-\-clean\fP" +Odstrání zostavovací strom (adresár) potom, Äo sa vytvorí balík. +.IP "\fB\-\-rmsource\fP" +Odstrání zdrojové súbory a spec súbor po zostavení (môže sa používaÅ¥ aj +samostatne, napr. "\fBrpm \-\-rmsource foo.spec\fP"). +.IP "\fB\-\-test\fP" +Nevykoná žiadnu zo zostavovacej fázy. +UžitoÄné pre otestovanie spec súboru. +.IP "\fB\-\-sign\fP" +Vloží PGP podpis do balíka. Tento podpis môže byÅ¥ využitý na overenie +integrity a pôvodu balíka. Bližšie informácie na nastavenie sú uvedené +v sekcii PGP PODPISY. +.IP "\fB\-\-buildroot \fI\fP" +Pri zostavovaní balíka prepíše tag BuildRoot adresárom \fI\fP. +.IP "\fB\-\-target \fI\fP" +Pri zostavovaní balíka sa interpretuje \fI\fP ako +\fBarch-vendor-os\fP a makrá \fB_target\fP, \fB_target_arch\fP a +\fB_target_os\fP sa nastavia podľa tejto hodnoty. + + +.SH VOĽBY PRI ZNOVUZOSTAVOVANà A REKOMPILOVANà + +Existujú dve voľby, ako spustiÅ¥ zostavenie balíka s rpm: + +.I "\fBrpm \-\-recompile \fI+\fP" + +.I "\fBrpm \-\-rebuild \fI+\fP" + +KeÄ je rpm spustené týmto spôsobom, \fBrpm\fP nainÅ¡taluje zdrojový balík a +vykoná postupne fázy prípravy (prep), kompilácie a inÅ¡talácie. Prídavne +s voľbou \fB\-\-rebuild\fP zostaví nový binárny balík. KeÄ sa zostavenie +dokonÄí, adresár zostavovania (ako pri \fB\-\-clean\fP), zdrojové súbory, +ako aj spec súbor sa sa odstránia. + + +.SH PODPISOVANIE EXISTUJÚCEHO RPM + +.I "\fBrpm \-\-resign \fI+\fP" + +Táto voľba vygeneruje a vloží nový podpis pre zoznam balíkov. +VÅ¡etky prípadne existujúce podpisy sa odstránia. + +.I "\fBrpm \-\-addsign \fI+\fP" + +Táto voľba vygeneruje a pridá nový podpis pre zoznam balíkov u ktorých +už podpis existuje. + + +.SH PGP PODPISY + +Aby bolo možné používaÅ¥ vlastnosti podpisovania, RPM je potrebné nastaviÅ¥ +spôsobom, aby mohlo spúšťaÅ¥ PGP, a aby bolo schopné nájsÅ¥ zväzok verejných +kľúÄov s RPM verejnými kľúÄmi v ňom. Implicitne RPM používa implicitné +hodnoty PGP na nájdenie zväzkov kľúÄov (honorujúc PGPPATH). +Ak je zväzok kľúÄov umiestnený na inom mieste, ako PGP oÄakáva, je potrebné +nastaviÅ¥ makro + +.IP "\fB_pgp_path\fP" +na definovanie umiestnenia zväzkov kľúÄov PGP, ktoré sa majú použiÅ¥. +.PP + +Ak si želáte podpisovaÅ¥ balíky, ktoré si sami vytvoríte, potrebujete +podobným spôsobom vytvoriÅ¥ váš verejný a tajný kľúÄový pár (bližšie informácie +sú v dokumentácii ku PGP). +Taktiež potrebujete konfigurovaÅ¥ makrá: + +.IP "\fB_pgp_name\fP" +Meno "užívateľa", ktorého kľúÄom sa má podpísaÅ¥ balík. +.PP + +Pri zostavovaní balíka je potrebné pridaÅ¥ \-\-sign do príkazového +riadku. Nasledovne sa objaví výzva na heslo, a po správnom zadadaní +sa balík zostaví a podpíše. + +Napríkad pre použitie PGP na podpísanie balíka ako užívateľ +\fB"John Doe "\fP zo zväzku kľúÄov umiestnených +v \fB/etc/rpm/.pgp\fP použitím \fB/usr/bin/pgp\fP zápis bude +obsahovaÅ¥ + +.I "\fB%_pgp_path /etc/rpm/.pgp\fP" + +.I "\fB%_pgp_name John Doe \fP" + +.I "\fB%_pgpbin /usr/bin/pgp\fP" + +v konfiguraÄnom súbore makier: \fB/etc/rpm/macros\fP je urÄený na +per-systém nastavenie a \fB~/.rpmmacros\fP na per-užívateľ nastavenie. + + +.SH VOĽBY PRI PREBUDOVANà DATABÃZY +VÅ¡eobecná forma príkazu prebudovania databázy je +.PP + \fBrpm \-\-rebuilddb\fP +.PP + +Na vybudovanie novej databázy treba vykonaÅ¥ +.PP + \fBrpm \-\-initdb\fP +.PP + +Jedinými voľbami pre tento režim sú \fB-\-dbpath\fP a \fB-\-root\fP. + + +.SH SHOWRC + +Spustením + +.PP + \fBrpm \-\-showrc\fP + +.PP +sa vypíšu hodnoty, ktoré bude RPM používaÅ¥ pri vÅ¡etkých voľbách, a +ktoré môžu byÅ¥ nastavené v \fIrpmrc\fP súboroch. + + +.SH FTP/HTTP VOĽBY + +RPM obsahuje jednoduchého FTP a HTTP klienta na zjednoduÅ¡enie inÅ¡talácie +a jednoduchÅ¡ieho získania informácií balíkov, ktoré sú umiestenené na sieti. +Súbory balíkov urÄené pre inÅ¡talovanie, aktualizáciu a výpis informácií je +možné Å¡pecifikovaÅ¥ v ftp alebo http Å¡týle URL: + +.PP + \fBftp://:@poÄítaÄ:/path/to/package.rpm\fP +.PP +Ak ÄasÅ¥ \fB:heslo\fP chýba, objaví sa výzva na heslo (vždy len jeden krát +pre pár užívateľ/poÄítaÄ). Ak chýbajú obe Äasti - užívateľ aj heslo, použitý +je anonymný ftp. Vo vÅ¡etkých prípadoch je použitý pasívny (PASV) ftp prenos. + +RPM povoluje použiÅ¥ nasledujúce voľby s ftp URL: + +.IP "\fB\--ftpproxy \fI\fP" +PoÄítaÄ \fI\fP sa použije ako proxy server pre vÅ¡etky ftp +prenosy, Äo umožní užívateľom použiÅ¥ ftp služby za firewallom, ktorý +používa proxy systémy. +Táto voľba môže byÅ¥ tak isto Å¡pecifikovaná nastavením makra \fB_ftpproxy\fP. + +.IP "\fB\--ftpport \fI\fP" +Použije sa Äíslo TCP portu \fI\fP pre ftp spojenie s ftp proxy +serverom namiesto implicitného portu. Táto voľba môže byÅ¥ tak isto +Å¡pecifikovaná nastavením makra \fB_ftpport\fP. +.PP + +RPM umožňuje nasledujúce voľby pri použití http URL: + +.IP "\fB\--httpproxy \fI\fP" +PoÄítaÄ \fI\fP bude použitý ako proxy server pre vÅ¡etky http +prenosy. +Táto voľba môže byÅ¥ tak isto Å¡pecifikovaná konfigurovaním makra +\fB_httpproxy\fP. + +.IP "\fB\--httpport \fI\fP" +Použije sa Äíslo TCP portu \fI\fP pre http spojenie s http proxy +serverom namiesto implicitného portu. +Táto voľba môže byÅ¥ tiež Å¡pecifikovaná konfigurovaním makra +\fB_httpport\fP. +.PP + + +.SH SÚBORY +.nf +/usr/lib/rpm/rpmrc +/etc/rpmrc +~/.rpmrc +/usr/lib/rpm/macros +/etc/rpm/macros +~/.rpmmacros +/var/lib/rpm/conflictsindex.rpm +/var/lib/rpm/fileindex.rpm +/var/lib/rpm/groupindex.rpm +/var/lib/rpm/nameindex.rpm +/var/lib/rpm/packages.rpm +/var/lib/rpm/providesindex.rpm +/var/lib/rpm/requiredby.rpm +/var/lib/rpm/triggerindex.rpm +/tmp/rpm* +.fi +.SH PRÃBUZNà DOKUMENTÃCIA +.IR glint (8) , +.IR rpm2cpio (8) , +.B http://www.rpm.org/ +.nf +.SH AUTORI +.nf +Marc Ewing +Jeff Johnson +Erik Troan +.fi diff --git a/fileattrs/Makefile.am b/fileattrs/Makefile.am new file mode 100644 index 0000000..0fd1435 --- /dev/null +++ b/fileattrs/Makefile.am @@ -0,0 +1,11 @@ +# Makefile for rpm file attributes + +include $(top_srcdir)/rpm.am + +fattrsdir = $(rpmconfigdir)/fileattrs + +fattrs_DATA = \ + desktop.attr elf.attr font.attr libtool.attr perl.attr perllib.attr \ + pkgconfig.attr python.attr ocaml.attr script.attr mono.attr + +EXTRA_DIST = $(fattrs_DATA) diff --git a/fileattrs/Makefile.in b/fileattrs/Makefile.in new file mode 100644 index 0000000..b3e1a77 --- /dev/null +++ b/fileattrs/Makefile.in @@ -0,0 +1,526 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile for rpm file attributes + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/rpm.am +subdir = fileattrs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(fattrsdir)" +DATA = $(fattrs_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Internal binaries +rpmlibexecdir = $(prefix)/lib/rpm + +# Host independent config files +rpmconfigdir = $(prefix)/lib/rpm +fattrsdir = $(rpmconfigdir)/fileattrs +fattrs_DATA = \ + desktop.attr elf.attr font.attr libtool.attr perl.attr perllib.attr \ + pkgconfig.attr python.attr ocaml.attr script.attr mono.attr + +EXTRA_DIST = $(fattrs_DATA) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/rpm.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign fileattrs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign fileattrs/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-fattrsDATA: $(fattrs_DATA) + @$(NORMAL_INSTALL) + test -z "$(fattrsdir)" || $(MKDIR_P) "$(DESTDIR)$(fattrsdir)" + @list='$(fattrs_DATA)'; test -n "$(fattrsdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fattrsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(fattrsdir)" || exit $$?; \ + done + +uninstall-fattrsDATA: + @$(NORMAL_UNINSTALL) + @list='$(fattrs_DATA)'; test -n "$(fattrsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(fattrsdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(fattrsdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(fattrsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-fattrsDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-fattrsDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-fattrsDATA install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-fattrsDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/fileattrs/desktop.attr b/fileattrs/desktop.attr new file mode 100644 index 0000000..f6882be --- /dev/null +++ b/fileattrs/desktop.attr @@ -0,0 +1,2 @@ +%__desktop_provides %{_rpmconfigdir}/desktop-file.prov +%__desktop_path ^%{_datadir}/applications/.*\\.desktop$ diff --git a/fileattrs/elf.attr b/fileattrs/elf.attr new file mode 100644 index 0000000..bc6ce83 --- /dev/null +++ b/fileattrs/elf.attr @@ -0,0 +1,4 @@ +%__elf_provides %{_rpmconfigdir}/elfdeps --provides %{?__filter_GLIBC_PRIVATE:--filter-private} +%__elf_requires %{_rpmconfigdir}/elfdeps --requires %{?__filter_GLIBC_PRIVATE:--filter-private} +%__elf_magic ^(sticky )?ELF (32|64)-bit.*$ +%__elf_flags exeonly diff --git a/fileattrs/font.attr b/fileattrs/font.attr new file mode 100644 index 0000000..5c4c78f --- /dev/null +++ b/fileattrs/font.attr @@ -0,0 +1,3 @@ +%__font_provides %{_rpmconfigdir}/fontconfig.prov +%__font_requires %{nil} +%__font_magic ^.* [Ff]ont (program )?(text|data).*$ diff --git a/fileattrs/libtool.attr b/fileattrs/libtool.attr new file mode 100644 index 0000000..ed5cb8c --- /dev/null +++ b/fileattrs/libtool.attr @@ -0,0 +1,3 @@ +%__libtool_provides %{_rpmconfigdir}/libtooldeps.sh --provides %{buildroot} %{name} +%__libtool_requires %{_rpmconfigdir}/libtooldeps.sh --requires %{buildroot} %{name} +%__libtool_path ^%{_libdir}/.*\.la$ diff --git a/fileattrs/mono.attr b/fileattrs/mono.attr new file mode 100644 index 0000000..1d376a0 --- /dev/null +++ b/fileattrs/mono.attr @@ -0,0 +1,3 @@ +%__mono_provides %{_rpmconfigdir}/mono-find-provides %{_builddir}/%{?buildsubdir} %{buildroot} %{_libdir} +%__mono_requires %{_rpmconfigdir}/mono-find-requires %{_builddir}/%{?buildsubdir} %{buildroot} %{_libdir} +%__mono_magic ^.*Mono/.Net assembly.*$ diff --git a/fileattrs/ocaml.attr b/fileattrs/ocaml.attr new file mode 100644 index 0000000..5fd0870 --- /dev/null +++ b/fileattrs/ocaml.attr @@ -0,0 +1,3 @@ +%__ocaml_provides %{_rpmconfigdir}/ocaml-find-provides.sh +%__ocaml_requires %{_rpmconfigdir}/ocaml-find-requires.sh +%__ocaml_magic ^(Objective caml|OCaml) .*$ diff --git a/fileattrs/perl.attr b/fileattrs/perl.attr new file mode 100644 index 0000000..23b873f --- /dev/null +++ b/fileattrs/perl.attr @@ -0,0 +1,3 @@ +%__perl_requires %{_rpmconfigdir}/perl.req +%__perl_magic ^.*perl .*$ +%__perl_flags exeonly diff --git a/fileattrs/perllib.attr b/fileattrs/perllib.attr new file mode 100644 index 0000000..4e54225 --- /dev/null +++ b/fileattrs/perllib.attr @@ -0,0 +1,3 @@ +%__perllib_provides %{_rpmconfigdir}/perl.prov +%__perllib_requires %{_rpmconfigdir}/perl.req +%__perllib_magic ^Perl[[:digit:]] module source.* diff --git a/fileattrs/pkgconfig.attr b/fileattrs/pkgconfig.attr new file mode 100644 index 0000000..1b4240d --- /dev/null +++ b/fileattrs/pkgconfig.attr @@ -0,0 +1,3 @@ +%__pkgconfig_provides %{_rpmconfigdir}/pkgconfigdeps.sh --provides +%__pkgconfig_requires %{_rpmconfigdir}/pkgconfigdeps.sh --requires +%__pkgconfig_path ^((%{_libdir}|%{_datadir})/pkgconfig/.*\.pc|%{_bindir}/pkg-config)$ diff --git a/fileattrs/python.attr b/fileattrs/python.attr new file mode 100644 index 0000000..5b48f75 --- /dev/null +++ b/fileattrs/python.attr @@ -0,0 +1,4 @@ +%__python_provides %{_rpmconfigdir}/pythondeps.sh --provides +%__python_requires %{_rpmconfigdir}/pythondeps.sh --requires +%__python_path ^((/usr/lib(64)?/python[[:digit:]]\\.[[:digit:]]/.*\\.(py[oc]?|so))|(%{_bindir}/python[[:digit:]]\\.[[:digit:]]))$ +%__python_magic ^python.*(executable|byte-compiled)$ diff --git a/fileattrs/script.attr b/fileattrs/script.attr new file mode 100644 index 0000000..79f4d73 --- /dev/null +++ b/fileattrs/script.attr @@ -0,0 +1,3 @@ +%__script_requires %{_rpmconfigdir}/script.req +%__script_magic ^.* script[, ].*$ +%__script_flags exeonly diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..6781b98 --- /dev/null +++ b/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/installplatform b/installplatform new file mode 100755 index 0000000..5973a18 --- /dev/null +++ b/installplatform @@ -0,0 +1,155 @@ +#!/usr/bin/env bash + +DESTDIR="${DESTDIR:-/}" +pkglibdir="${pkglibdir:-/usr/lib/rpm}" +platformdir="${pkglibdir}/platform" + +RPMRC="${1:-rpmrc}" +MACROS="${2:-macros}" +PLATFORM="${3:-platform}" + +RPM="./rpm --rcfile=$RPMRC --macros=$MACROS" + +canonarch_sed='s_i.86_i386_;s_pentium[34]_i386_;s_athlon_i386_;s_sparc[^-]*_sparc_;s_alpha[^-]*_alpha_;s_arm[^-]*_arm_;s_\(powerpc\|ppc\)[^-]*_ppc_;s,\(ia32e\|amd64\),x86_64,;s_sh4a_sh4_' +arch="`$RPM --eval '%{_arch}'|sed -e "$canonarch_sed"`" +VENDOR="`$RPM --eval '%{_vendor}'`" +OS="`$RPM --eval '%{_os}'`" +RPMRC_GNU="`$RPM --eval '%{_gnu}'`" + +case "$arch" in + i[3456]86|pentium[34]|athlon|geode) SUBSTS='s_i386_i386_ s_i386_i486_ s_i386_i586_ s_i386_i686_ s_i386_pentium3_ s_i386_pentium4_ s_i386_athlon_ s_i386_geode_' ;; + alpha*) SUBSTS='s_alpha_alpha_ s_alpha_alphaev5_ s_alpha_alphaev56_ s_alpha_alphapca56_ s_alpha_alphaev6_ s_alpha_alphaev67_' ;; + arm*) SUBSTS='s_arm_arm_ s_arm_armv3l_ s_arm_armv4l_ s_arm_armv4tl_ s_arm_armv5tel_ s_arm_armv5tejl_ s_arm_armv6l_ s_arm_armv7l_' ;; + sh4*) SUBSTS='s_sh4_sh4_ s_sh4_sh4a_' ;; + sparc*) SUBSTS='s_sparc\(64\|64v\|v9v\|v9\)_sparc_ s_sparc64_sparcv9_;s_sparc\([^v]\|$\)_sparcv9\1_ s_sparcv9_sparc64_;s_sparc\([^6]\|$\)_sparc64\1_' ;; + powerpc*|ppc*) SUBSTS='s_ppc64_ppc_ s_ppc\([^6ip]\|$\)_ppc64\1_ s_ppc\([^6ip]\|$\)_ppciseries_ s_ppc\([^6ip]\|$\)_ppcpseries_ s_ppc\([^6ip]\|$\)_ppc64iseries_ s_ppc\([^6ip]\|$\)_ppc64pseries_' ;; + s390*) SUBSTS='s_s390x_s390_ s_s390\([^x]\|$\)_s390x\1_' ;; + x86_64|amd64|ia32e) SUBSTS='s,x86_64,x86_64, s,x86_64,ia32e, s,x86_64,amd64, s,x86_64,i386, s,x86_64,i486, s,x86_64,i586, s,x86_64,i686, s,x86_64,pentium3, s,x86_64,pentium4, s,x86_64,athlon, s,x86_64,geode,' ;; + *) SUBSTS=y___ ;; +esac + +for SUBST in $SUBSTS ; do + ARCH=`echo $arch | sed -e $SUBST` + TARGET_PLATFORM=`echo $target_platform | sed -e $SUBST` + TARGET=`echo $target | sed -e $SUBST` + + PPD="${DESTDIR}/${platformdir}/${ARCH}-${OS}" + + [ -d $PPD ] || mkdir -p $PPD + + RPMRC_OPTFLAGS="`sed -n 's/^optflags: '$ARCH' //p' $RPMRC`" + RPMRC_OPTFLAGS="`echo $RPMRC_OPTFLAGS | sed -e 's, ,\ ,g'`" + case $RPMRC_OPTFLAGS in + *-g*) ;; + *) RPMRC_OPTFLAGS="$RPMRC_OPTFLAGS -g" ;; + esac + + ARCH_INSTALL_POST='%{nil}' + case "${ARCH}-${OS}" in + sparc64*-linux) LIB=lib64 ;; + s390x-linux) LIB=lib64 ;; + ppc64-linux|powerpc64-linux) LIB=lib64 ;; + x86_64-linux|amd64-linux|ia32e-linux) LIB=lib64 ;; + *) LIB=lib;; + esac + + # XXX FIXME: incomplete and quite likely wrong too in places, + # consult various arch folks for correct names etc. + ISANAME= + ISABITS= + case "${ARCH}" in + sparc64*) + ISANAME=sparc + ISABITS=64 + ;; + sparc*) + ISANAME=sparc + ISABITS=32 + ;; + s390) + ISANAME=s390 + ISABITS=32 + ;; + s390x) + ISANAME=s390 + ISABITS=64 + ;; + ppc64*) + ISANAME=ppc + ISABITS=64 + ;; + ppc*) + ISANAME=ppc + ISABITS=32 + ;; + i?86|pentium?|athlon|geode) + ISANAME=x86 + ISABITS=32 + ;; + x86_64|amd64|ia32e) + ISANAME=x86 + ISABITS=64 + ;; + ia64) + ISANAME=ia + ISABITS=64 + ;; + sh*) + ISANAME=sh + ISABITS=32 + ;; + arm*) + ISANAME=`echo ${ARCH} | sed "s/^\([^-]*\)-.*/\1/"` + ISABITS=32 + ;; + alpha*) + ISANAME=alpha + ISABITS=64 + ;; + esac + + case $VENDOR in + yellowdog) + VENDORSED='-e s,^@yellowdog@,,' + ;; + pld) + VENDORSED='-e s,^@pld@,,' + RPMRC_OPTFLAGS="`echo $RPMRC_OPTFLAGS | sed -e "s/ -g/ /"`" + ;; + mandrake) + VENDORSED='-e s,^@mandrake@,,' + RPMRC_OPTFLAGS="`echo $RPMRC_OPTFLAGS | sed -e s/i386/i686/`" + ;; + conectiva) + VENDORSED='-e s,^@conectiva@,,' + ;; + redhat) + VENDORSED='-e s,^@redhat@,,' + ;; + apple) + VENDORSED='-e s,^@apple@,,' + ;; + esac + + CANONARCH="`echo $ARCH|sed -e "$canonarch_sed"`" + + cat $PLATFORM \ + | sed -e "s,@RPMRC_OPTFLAGS@,$RPMRC_OPTFLAGS," \ + -e "s,$arch,$CANONARCH," \ + -e "s,@RPMRC_GNU@,$RPMRC_GNU," \ + -e "s,@LIB@,$LIB," \ + -e "s,@ARCH_INSTALL_POST@,$ARCH_INSTALL_POST," \ + -e '/\${\w*:-/!s,\${,%{_,' \ + -e "s,@ISANAME@,$ISANAME," \ + -e "s,@ISABITS@,$ISABITS," \ + $VENDORSED \ + | grep -v '^@' \ + > ${PPD}/macros + +done + +{ cd ${DESTDIR}/${platformdir} + [ -L noarch-${OS} ] && rm -f noarch-${OS} 2>/dev/null + mkdir -p noarch-${OS} + sed -e "/^%_arch/s,${arch},noarch," ${arch}-${OS}/macros | grep -v '^%optflags' | grep -v "^%__isa" > noarch-${OS}/macros +} diff --git a/lib/Makefile.am b/lib/Makefile.am new file mode 100644 index 0000000..5ad0d9c --- /dev/null +++ b/lib/Makefile.am @@ -0,0 +1,173 @@ +# Makefile for rpm library. + +include $(top_srcdir)/rpm.am + +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/ +AM_CPPFLAGS += @WITH_NSS_INCLUDE@ +AM_CPPFLAGS += @WITH_POPT_INCLUDE@ +AM_CPPFLAGS += -I$(top_srcdir)/misc +AM_CPPFLAGS += -DLOCALEDIR="\"$(localedir)\"" +AM_CPPFLAGS += -DSYSCONFDIR="\"$(sysconfdir)\"" +AM_CPPFLAGS += -DLOCALSTATEDIR="\"$(localstatedir)\"" +AM_CPPFLAGS += -DLIBRPMALIAS_FILENAME="\"rpmpopt-${VERSION}\"" +AM_CPPFLAGS += -DLIBRPMALIAS_EXECPATH="\"$(bindir)\"" + +usrlibdir = $(libdir) + +check_PROGRAMS = +CLEANFILES = +EXTRA_DIST = gentagtbl.sh tagtbl.C rpmhash.C rpmhash.H +EXTRA_PROGRAMS = + +usrlib_LTLIBRARIES = librpm.la +librpm_la_SOURCES = \ + backend/dbconfig.c backend/db3.c backend/dbi.h \ + headerutil.c header.c headerfmt.c header_internal.h \ + rpmdb.c rpmdb_internal.h \ + fprint.c fprint.h tagname.c rpmtd.c \ + cpio.c cpio.h depends.c order.c formats.c tagexts.c fsm.c fsm.h \ + manifest.c manifest.h misc.c package.c \ + poptALL.c poptI.c poptQV.c psm.c query.c \ + rpmal.c rpmal.h rpmchecksig.c rpmds.c rpmfi.c rpmfi_internal.h \ + rpmgi.h rpmgi.c rpminstall.c rpmts_internal.h \ + rpmlead.c rpmlead.h rpmps.c rpmprob.c rpmrc.c \ + rpmte.c rpmte_internal.h rpmts.c rpmfs.h rpmfs.c \ + rpmvercmp.c signature.c signature.h transaction.c \ + verify.c rpmlock.c rpmlock.h misc.h \ + rpmscript.h rpmscript.c legacy.c merge.c \ + rpmchroot.c rpmchroot.h \ + rpmplugins.c rpmplugins.h rpmug.c rpmug.h + +librpm_la_LDFLAGS = -version-info 2:1:0 + +librpm_la_LIBADD = \ + $(top_builddir)/rpmio/librpmio.la \ + @WITH_POPT_LIB@ \ + @WITH_SELINUX_LIB@ \ + @WITH_CAP_LIB@ \ + @WITH_ACL_LIB@ \ + @LIBINTL@ + +if WITH_LUA +AM_CPPFLAGS += @LUA_CFLAGS@ +librpm_la_LIBADD += @LUA_LIBS@ +librpm_la_SOURCES += rpmliblua.c rpmliblua.h +endif + +if WITH_INTERNAL_DB +librpm_la_LIBADD += $(libdb_la) +else +librpm_la_LIBADD += @WITH_DB_LIB@ +endif + +tagtbl.C: Makefile.am $(srcdir)/rpmtag.h gentagtbl.sh + @AWK=${AWK} ${SHELL} $(srcdir)/gentagtbl.sh \ + $(srcdir)/rpmtag.h > $@.new && \ + mv -f $@.new $@ +BUILT_SOURCES = tagtbl.C + +if WITH_INTERNAL_DB +# XXX watchout, $(top_builddir)/db3/libdb.la created by this Makefile may surprise +libdb_la = $(top_builddir)/db3/libdb.la + +# XXX grrr, force noinst libdb.la for db3. +# there are more reliable ways to get the BDB version info, just a dirty +# hack for now... +BDBVER = $(shell grep ^LIBVERSION $(top_builddir)/db3/Makefile|cut -f2) +$(libdb_la): $(top_builddir)/db3/libdb-$(BDBVER).la + sed -e"/^libdir=/s/^.*$$/libdir=''/" \ + < $(top_builddir)/db3/libdb-$(BDBVER).la > $(libdb_la) +CLEANFILES += $(libdb_la) + + +rpmlibexec_PROGRAMS = + +rpmlibexec_PROGRAMS += rpmdb_archive +rpmdb_archive_SOURCES = +rpmdb_archive_LDADD = \ + $(top_builddir)/db3/db_archive.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la + +rpmlibexec_PROGRAMS += rpmdb_checkpoint +rpmdb_checkpoint_SOURCES = +rpmdb_checkpoint_LDADD = \ + $(top_builddir)/db3/db_checkpoint.o \ + $(top_builddir)/db3/util_log.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la + +rpmlibexec_PROGRAMS += rpmdb_deadlock +rpmdb_deadlock_SOURCES = +rpmdb_deadlock_LDADD = \ + $(top_builddir)/db3/db_deadlock.o \ + $(top_builddir)/db3/util_log.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la + +rpmlibexec_PROGRAMS += rpmdb_dump +rpmdb_dump_SOURCES = +rpmdb_dump_LDADD = \ + $(top_builddir)/db3/db_dump.o \ + $(top_builddir)/db3/util_cache.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la + +rpmlibexec_PROGRAMS += rpmdb_load +rpmdb_load_SOURCES = +rpmdb_load_LDADD = \ + $(top_builddir)/db3/db_load.o \ + $(top_builddir)/db3/util_cache.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la + +rpmlibexec_PROGRAMS += rpmdb_printlog +rpmdb_printlog_SOURCES = +rpmdb_printlog_LDADD = \ + $(top_builddir)/db3/db_printlog.o \ + $(top_builddir)/db3/btree_autop.o \ + $(top_builddir)/db3/crdel_autop.o \ + $(top_builddir)/db3/db_autop.o \ + $(top_builddir)/db3/dbreg_autop.o \ + $(top_builddir)/db3/fileops_autop.o \ + $(top_builddir)/db3/hash_autop.o \ + $(top_builddir)/db3/qam_autop.o \ + $(top_builddir)/db3/rep_autop.o \ + $(top_builddir)/db3/txn_autop.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la + +rpmlibexec_PROGRAMS += rpmdb_recover +rpmdb_recover_SOURCES = +rpmdb_recover_LDADD = \ + $(top_builddir)/db3/db_recover.o \ + $(top_builddir)/db3/util_cache.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la + +rpmlibexec_PROGRAMS += rpmdb_stat +rpmdb_stat_SOURCES = +rpmdb_stat_LDADD = \ + $(top_builddir)/db3/db_stat.o \ + $(top_builddir)/db3/util_cache.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la + +rpmlibexec_PROGRAMS += rpmdb_upgrade +rpmdb_upgrade_SOURCES = +rpmdb_upgrade_LDADD = \ + $(top_builddir)/db3/db_upgrade.o \ + $(top_builddir)/db3/util_cache.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la + +rpmlibexec_PROGRAMS += rpmdb_verify +rpmdb_verify_SOURCES = +rpmdb_verify_LDADD = \ + $(top_builddir)/db3/db_verify.o \ + $(top_builddir)/db3/util_cache.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la +endif + +CLEANFILES += $(BUILT_SOURCES) diff --git a/lib/Makefile.in b/lib/Makefile.in new file mode 100644 index 0000000..220ff43 --- /dev/null +++ b/lib/Makefile.in @@ -0,0 +1,1052 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile for rpm library. + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/rpm.am +check_PROGRAMS = +EXTRA_PROGRAMS = +@WITH_LUA_TRUE@am__append_1 = @LUA_CFLAGS@ +@WITH_LUA_TRUE@am__append_2 = @LUA_LIBS@ +@WITH_LUA_TRUE@am__append_3 = rpmliblua.c rpmliblua.h +@WITH_INTERNAL_DB_TRUE@am__append_4 = $(libdb_la) +@WITH_INTERNAL_DB_FALSE@am__append_5 = @WITH_DB_LIB@ +@WITH_INTERNAL_DB_TRUE@am__append_6 = $(libdb_la) +@WITH_INTERNAL_DB_TRUE@rpmlibexec_PROGRAMS = rpmdb_archive$(EXEEXT) \ +@WITH_INTERNAL_DB_TRUE@ rpmdb_checkpoint$(EXEEXT) \ +@WITH_INTERNAL_DB_TRUE@ rpmdb_deadlock$(EXEEXT) \ +@WITH_INTERNAL_DB_TRUE@ rpmdb_dump$(EXEEXT) rpmdb_load$(EXEEXT) \ +@WITH_INTERNAL_DB_TRUE@ rpmdb_printlog$(EXEEXT) \ +@WITH_INTERNAL_DB_TRUE@ rpmdb_recover$(EXEEXT) \ +@WITH_INTERNAL_DB_TRUE@ rpmdb_stat$(EXEEXT) \ +@WITH_INTERNAL_DB_TRUE@ rpmdb_upgrade$(EXEEXT) \ +@WITH_INTERNAL_DB_TRUE@ rpmdb_verify$(EXEEXT) +subdir = lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(usrlibdir)" \ + "$(DESTDIR)$(rpmlibexecdir)" +LTLIBRARIES = $(usrlib_LTLIBRARIES) +am__DEPENDENCIES_1 = +librpm_la_DEPENDENCIES = $(top_builddir)/rpmio/librpmio.la \ + $(am__DEPENDENCIES_1) $(am__append_4) $(am__DEPENDENCIES_1) +am__librpm_la_SOURCES_DIST = backend/dbconfig.c backend/db3.c \ + backend/dbi.h headerutil.c header.c headerfmt.c \ + header_internal.h rpmdb.c rpmdb_internal.h fprint.c fprint.h \ + tagname.c rpmtd.c cpio.c cpio.h depends.c order.c formats.c \ + tagexts.c fsm.c fsm.h manifest.c manifest.h misc.c package.c \ + poptALL.c poptI.c poptQV.c psm.c query.c rpmal.c rpmal.h \ + rpmchecksig.c rpmds.c rpmfi.c rpmfi_internal.h rpmgi.h rpmgi.c \ + rpminstall.c rpmts_internal.h rpmlead.c rpmlead.h rpmps.c \ + rpmprob.c rpmrc.c rpmte.c rpmte_internal.h rpmts.c rpmfs.h \ + rpmfs.c rpmvercmp.c signature.c signature.h transaction.c \ + verify.c rpmlock.c rpmlock.h misc.h rpmscript.h rpmscript.c \ + legacy.c merge.c rpmchroot.c rpmchroot.h rpmplugins.c \ + rpmplugins.h rpmug.c rpmug.h rpmliblua.c rpmliblua.h +am__dirstamp = $(am__leading_dot)dirstamp +@WITH_LUA_TRUE@am__objects_1 = rpmliblua.lo +am_librpm_la_OBJECTS = backend/dbconfig.lo backend/db3.lo \ + headerutil.lo header.lo headerfmt.lo rpmdb.lo fprint.lo \ + tagname.lo rpmtd.lo cpio.lo depends.lo order.lo formats.lo \ + tagexts.lo fsm.lo manifest.lo misc.lo package.lo poptALL.lo \ + poptI.lo poptQV.lo psm.lo query.lo rpmal.lo rpmchecksig.lo \ + rpmds.lo rpmfi.lo rpmgi.lo rpminstall.lo rpmlead.lo rpmps.lo \ + rpmprob.lo rpmrc.lo rpmte.lo rpmts.lo rpmfs.lo rpmvercmp.lo \ + signature.lo transaction.lo verify.lo rpmlock.lo rpmscript.lo \ + legacy.lo merge.lo rpmchroot.lo rpmplugins.lo rpmug.lo \ + $(am__objects_1) +librpm_la_OBJECTS = $(am_librpm_la_OBJECTS) +librpm_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(librpm_la_LDFLAGS) $(LDFLAGS) -o $@ +PROGRAMS = $(rpmlibexec_PROGRAMS) +am_rpmdb_archive_OBJECTS = +rpmdb_archive_OBJECTS = $(am_rpmdb_archive_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_archive_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_archive.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +am_rpmdb_checkpoint_OBJECTS = +rpmdb_checkpoint_OBJECTS = $(am_rpmdb_checkpoint_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_checkpoint_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_checkpoint.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_log.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +am_rpmdb_deadlock_OBJECTS = +rpmdb_deadlock_OBJECTS = $(am_rpmdb_deadlock_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_deadlock_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_deadlock.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_log.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +am_rpmdb_dump_OBJECTS = +rpmdb_dump_OBJECTS = $(am_rpmdb_dump_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_dump_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_dump.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +am_rpmdb_load_OBJECTS = +rpmdb_load_OBJECTS = $(am_rpmdb_load_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_load_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_load.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +am_rpmdb_printlog_OBJECTS = +rpmdb_printlog_OBJECTS = $(am_rpmdb_printlog_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_printlog_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_printlog.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/btree_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/crdel_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/dbreg_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/fileops_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/hash_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/qam_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/rep_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/txn_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +am_rpmdb_recover_OBJECTS = +rpmdb_recover_OBJECTS = $(am_rpmdb_recover_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_recover_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_recover.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +am_rpmdb_stat_OBJECTS = +rpmdb_stat_OBJECTS = $(am_rpmdb_stat_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_stat_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_stat.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +am_rpmdb_upgrade_OBJECTS = +rpmdb_upgrade_OBJECTS = $(am_rpmdb_upgrade_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_upgrade_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_upgrade.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +am_rpmdb_verify_OBJECTS = +rpmdb_verify_OBJECTS = $(am_rpmdb_verify_OBJECTS) +@WITH_INTERNAL_DB_TRUE@rpmdb_verify_DEPENDENCIES = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_verify.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(librpm_la_SOURCES) $(rpmdb_archive_SOURCES) \ + $(rpmdb_checkpoint_SOURCES) $(rpmdb_deadlock_SOURCES) \ + $(rpmdb_dump_SOURCES) $(rpmdb_load_SOURCES) \ + $(rpmdb_printlog_SOURCES) $(rpmdb_recover_SOURCES) \ + $(rpmdb_stat_SOURCES) $(rpmdb_upgrade_SOURCES) \ + $(rpmdb_verify_SOURCES) +DIST_SOURCES = $(am__librpm_la_SOURCES_DIST) $(rpmdb_archive_SOURCES) \ + $(rpmdb_checkpoint_SOURCES) $(rpmdb_deadlock_SOURCES) \ + $(rpmdb_dump_SOURCES) $(rpmdb_load_SOURCES) \ + $(rpmdb_printlog_SOURCES) $(rpmdb_recover_SOURCES) \ + $(rpmdb_stat_SOURCES) $(rpmdb_upgrade_SOURCES) \ + $(rpmdb_verify_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Internal binaries +rpmlibexecdir = $(prefix)/lib/rpm + +# Host independent config files +rpmconfigdir = $(prefix)/lib/rpm +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ + -I$(top_builddir)/include/ @WITH_NSS_INCLUDE@ \ + @WITH_POPT_INCLUDE@ -I$(top_srcdir)/misc \ + -DLOCALEDIR="\"$(localedir)\"" \ + -DSYSCONFDIR="\"$(sysconfdir)\"" \ + -DLOCALSTATEDIR="\"$(localstatedir)\"" \ + -DLIBRPMALIAS_FILENAME="\"rpmpopt-${VERSION}\"" \ + -DLIBRPMALIAS_EXECPATH="\"$(bindir)\"" $(am__append_1) +usrlibdir = $(libdir) +CLEANFILES = $(am__append_6) $(BUILT_SOURCES) +EXTRA_DIST = gentagtbl.sh tagtbl.C rpmhash.C rpmhash.H +usrlib_LTLIBRARIES = librpm.la +librpm_la_SOURCES = backend/dbconfig.c backend/db3.c backend/dbi.h \ + headerutil.c header.c headerfmt.c header_internal.h rpmdb.c \ + rpmdb_internal.h fprint.c fprint.h tagname.c rpmtd.c cpio.c \ + cpio.h depends.c order.c formats.c tagexts.c fsm.c fsm.h \ + manifest.c manifest.h misc.c package.c poptALL.c poptI.c \ + poptQV.c psm.c query.c rpmal.c rpmal.h rpmchecksig.c rpmds.c \ + rpmfi.c rpmfi_internal.h rpmgi.h rpmgi.c rpminstall.c \ + rpmts_internal.h rpmlead.c rpmlead.h rpmps.c rpmprob.c rpmrc.c \ + rpmte.c rpmte_internal.h rpmts.c rpmfs.h rpmfs.c rpmvercmp.c \ + signature.c signature.h transaction.c verify.c rpmlock.c \ + rpmlock.h misc.h rpmscript.h rpmscript.c legacy.c merge.c \ + rpmchroot.c rpmchroot.h rpmplugins.c rpmplugins.h rpmug.c \ + rpmug.h $(am__append_3) +librpm_la_LDFLAGS = -version-info 2:1:0 +librpm_la_LIBADD = $(top_builddir)/rpmio/librpmio.la @WITH_POPT_LIB@ \ + @WITH_SELINUX_LIB@ @WITH_CAP_LIB@ @WITH_ACL_LIB@ @LIBINTL@ \ + $(am__append_2) $(am__append_4) $(am__append_5) +BUILT_SOURCES = tagtbl.C + +# XXX watchout, $(top_builddir)/db3/libdb.la created by this Makefile may surprise +@WITH_INTERNAL_DB_TRUE@libdb_la = $(top_builddir)/db3/libdb.la + +# XXX grrr, force noinst libdb.la for db3. +# there are more reliable ways to get the BDB version info, just a dirty +# hack for now... +@WITH_INTERNAL_DB_TRUE@BDBVER = $(shell grep ^LIBVERSION $(top_builddir)/db3/Makefile|cut -f2) +@WITH_INTERNAL_DB_TRUE@rpmdb_archive_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_archive_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_archive.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +@WITH_INTERNAL_DB_TRUE@rpmdb_checkpoint_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_checkpoint_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_checkpoint.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_log.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +@WITH_INTERNAL_DB_TRUE@rpmdb_deadlock_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_deadlock_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_deadlock.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_log.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +@WITH_INTERNAL_DB_TRUE@rpmdb_dump_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_dump_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_dump.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +@WITH_INTERNAL_DB_TRUE@rpmdb_load_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_load_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_load.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +@WITH_INTERNAL_DB_TRUE@rpmdb_printlog_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_printlog_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_printlog.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/btree_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/crdel_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/dbreg_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/fileops_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/hash_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/qam_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/rep_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/txn_autop.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +@WITH_INTERNAL_DB_TRUE@rpmdb_recover_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_recover_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_recover.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +@WITH_INTERNAL_DB_TRUE@rpmdb_stat_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_stat_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_stat.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +@WITH_INTERNAL_DB_TRUE@rpmdb_upgrade_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_upgrade_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_upgrade.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +@WITH_INTERNAL_DB_TRUE@rpmdb_verify_SOURCES = +@WITH_INTERNAL_DB_TRUE@rpmdb_verify_LDADD = \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/db_verify.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_cache.o \ +@WITH_INTERNAL_DB_TRUE@ $(top_builddir)/db3/util_sig.o \ +@WITH_INTERNAL_DB_TRUE@ librpm.la + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/rpm.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-usrlibLTLIBRARIES: $(usrlib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(usrlibdir)" || $(MKDIR_P) "$(DESTDIR)$(usrlibdir)" + @list='$(usrlib_LTLIBRARIES)'; test -n "$(usrlibdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(usrlibdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(usrlibdir)"; \ + } + +uninstall-usrlibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(usrlib_LTLIBRARIES)'; test -n "$(usrlibdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(usrlibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(usrlibdir)/$$f"; \ + done + +clean-usrlibLTLIBRARIES: + -test -z "$(usrlib_LTLIBRARIES)" || rm -f $(usrlib_LTLIBRARIES) + @list='$(usrlib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +backend/$(am__dirstamp): + @$(MKDIR_P) backend + @: > backend/$(am__dirstamp) +backend/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) backend/$(DEPDIR) + @: > backend/$(DEPDIR)/$(am__dirstamp) +backend/dbconfig.lo: backend/$(am__dirstamp) \ + backend/$(DEPDIR)/$(am__dirstamp) +backend/db3.lo: backend/$(am__dirstamp) \ + backend/$(DEPDIR)/$(am__dirstamp) +librpm.la: $(librpm_la_OBJECTS) $(librpm_la_DEPENDENCIES) + $(librpm_la_LINK) -rpath $(usrlibdir) $(librpm_la_OBJECTS) $(librpm_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +install-rpmlibexecPROGRAMS: $(rpmlibexec_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(rpmlibexecdir)" || $(MKDIR_P) "$(DESTDIR)$(rpmlibexecdir)" + @list='$(rpmlibexec_PROGRAMS)'; test -n "$(rpmlibexecdir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(rpmlibexecdir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(rpmlibexecdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-rpmlibexecPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(rpmlibexec_PROGRAMS)'; test -n "$(rpmlibexecdir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(rpmlibexecdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(rpmlibexecdir)" && rm -f $$files + +clean-rpmlibexecPROGRAMS: + @list='$(rpmlibexec_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +rpmdb_archive$(EXEEXT): $(rpmdb_archive_OBJECTS) $(rpmdb_archive_DEPENDENCIES) + @rm -f rpmdb_archive$(EXEEXT) + $(LINK) $(rpmdb_archive_OBJECTS) $(rpmdb_archive_LDADD) $(LIBS) +rpmdb_checkpoint$(EXEEXT): $(rpmdb_checkpoint_OBJECTS) $(rpmdb_checkpoint_DEPENDENCIES) + @rm -f rpmdb_checkpoint$(EXEEXT) + $(LINK) $(rpmdb_checkpoint_OBJECTS) $(rpmdb_checkpoint_LDADD) $(LIBS) +rpmdb_deadlock$(EXEEXT): $(rpmdb_deadlock_OBJECTS) $(rpmdb_deadlock_DEPENDENCIES) + @rm -f rpmdb_deadlock$(EXEEXT) + $(LINK) $(rpmdb_deadlock_OBJECTS) $(rpmdb_deadlock_LDADD) $(LIBS) +rpmdb_dump$(EXEEXT): $(rpmdb_dump_OBJECTS) $(rpmdb_dump_DEPENDENCIES) + @rm -f rpmdb_dump$(EXEEXT) + $(LINK) $(rpmdb_dump_OBJECTS) $(rpmdb_dump_LDADD) $(LIBS) +rpmdb_load$(EXEEXT): $(rpmdb_load_OBJECTS) $(rpmdb_load_DEPENDENCIES) + @rm -f rpmdb_load$(EXEEXT) + $(LINK) $(rpmdb_load_OBJECTS) $(rpmdb_load_LDADD) $(LIBS) +rpmdb_printlog$(EXEEXT): $(rpmdb_printlog_OBJECTS) $(rpmdb_printlog_DEPENDENCIES) + @rm -f rpmdb_printlog$(EXEEXT) + $(LINK) $(rpmdb_printlog_OBJECTS) $(rpmdb_printlog_LDADD) $(LIBS) +rpmdb_recover$(EXEEXT): $(rpmdb_recover_OBJECTS) $(rpmdb_recover_DEPENDENCIES) + @rm -f rpmdb_recover$(EXEEXT) + $(LINK) $(rpmdb_recover_OBJECTS) $(rpmdb_recover_LDADD) $(LIBS) +rpmdb_stat$(EXEEXT): $(rpmdb_stat_OBJECTS) $(rpmdb_stat_DEPENDENCIES) + @rm -f rpmdb_stat$(EXEEXT) + $(LINK) $(rpmdb_stat_OBJECTS) $(rpmdb_stat_LDADD) $(LIBS) +rpmdb_upgrade$(EXEEXT): $(rpmdb_upgrade_OBJECTS) $(rpmdb_upgrade_DEPENDENCIES) + @rm -f rpmdb_upgrade$(EXEEXT) + $(LINK) $(rpmdb_upgrade_OBJECTS) $(rpmdb_upgrade_LDADD) $(LIBS) +rpmdb_verify$(EXEEXT): $(rpmdb_verify_OBJECTS) $(rpmdb_verify_DEPENDENCIES) + @rm -f rpmdb_verify$(EXEEXT) + $(LINK) $(rpmdb_verify_OBJECTS) $(rpmdb_verify_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f backend/db3.$(OBJEXT) + -rm -f backend/db3.lo + -rm -f backend/dbconfig.$(OBJEXT) + -rm -f backend/dbconfig.lo + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/depends.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/formats.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fprint.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/headerfmt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/headerutil.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legacy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/manifest.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/order.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/package.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poptALL.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poptI.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poptQV.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/query.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmchecksig.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmchroot.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmdb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmds.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmfi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmfs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmgi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpminstall.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmlead.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmliblua.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmlock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmplugins.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmprob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmps.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmrc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmscript.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmtd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmte.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmts.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmvercmp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signature.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tagexts.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tagname.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transaction.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verify.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@backend/$(DEPDIR)/db3.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@backend/$(DEPDIR)/dbconfig.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf backend/.libs backend/_libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(usrlibdir)" "$(DESTDIR)$(rpmlibexecdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f backend/$(DEPDIR)/$(am__dirstamp) + -rm -f backend/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-rpmlibexecPROGRAMS clean-usrlibLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) backend/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-usrlibLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-rpmlibexecPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) backend/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-rpmlibexecPROGRAMS uninstall-usrlibLTLIBRARIES + +.MAKE: all check check-am install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool \ + clean-rpmlibexecPROGRAMS clean-usrlibLTLIBRARIES ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-rpmlibexecPROGRAMS \ + install-strip install-usrlibLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-rpmlibexecPROGRAMS \ + uninstall-usrlibLTLIBRARIES + + +tagtbl.C: Makefile.am $(srcdir)/rpmtag.h gentagtbl.sh + @AWK=${AWK} ${SHELL} $(srcdir)/gentagtbl.sh \ + $(srcdir)/rpmtag.h > $@.new && \ + mv -f $@.new $@ +@WITH_INTERNAL_DB_TRUE@$(libdb_la): $(top_builddir)/db3/libdb-$(BDBVER).la +@WITH_INTERNAL_DB_TRUE@ sed -e"/^libdir=/s/^.*$$/libdir=''/" \ +@WITH_INTERNAL_DB_TRUE@ < $(top_builddir)/db3/libdb-$(BDBVER).la > $(libdb_la) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/lib/backend/db3.c b/lib/backend/db3.c new file mode 100644 index 0000000..ff55791 --- /dev/null +++ b/lib/backend/db3.c @@ -0,0 +1,617 @@ +/** \ingroup rpmdb + * \file lib/db3.c + */ + +static int _debug = 1; /* XXX if < 0 debugging, > 0 unusual error returns */ + +#include "system.h" + +#include +#include + +#include +#include +#include +#include + +#include "lib/rpmdb_internal.h" + +#include "debug.h" + +static const char * _errpfx = "rpmdb"; + +static int dbapi_err(rpmdb rdb, const char * msg, int error, int printit) +{ + if (printit && error) { + int db_api = rdb->db_ver; + if (msg) + rpmlog(RPMLOG_ERR, _("db%d error(%d) from %s: %s\n"), + db_api, error, msg, db_strerror(error)); + else + rpmlog(RPMLOG_ERR, _("db%d error(%d): %s\n"), + db_api, error, db_strerror(error)); + } + return error; +} + +static int cvtdberr(dbiIndex dbi, const char * msg, int error, int printit) +{ + return dbapi_err(dbi->dbi_rpmdb, msg, error, printit); +} + +static void errlog(const DB_ENV * env, const char *errpfx, const char *msg) +{ + rpmlog(RPMLOG_ERR, "%s: %s\n", errpfx, msg); +} + +static uint32_t db_envflags(DB * db) +{ + DB_ENV * env = db->get_env(db); + uint32_t eflags = 0; + (void) env->get_open_flags(env, &eflags); + return eflags; +} + +static int db_fini(rpmdb rdb, const char * dbhome) +{ + DB_ENV * dbenv = rdb->db_dbenv; + int rc; + uint32_t eflags = 0; + + if (dbenv == NULL) + return 0; + + if (rdb->db_opens > 1) { + rdb->db_opens--; + return 0; + } + + (void) dbenv->get_open_flags(dbenv, &eflags); + rc = dbenv->close(dbenv, 0); + rc = dbapi_err(rdb, "dbenv->close", rc, _debug); + + rpmlog(RPMLOG_DEBUG, "closed db environment %s\n", dbhome); + + if (!(eflags & DB_PRIVATE) && rdb->db_remove_env) { + int xx; + + xx = db_env_create(&dbenv, 0); + xx = dbapi_err(rdb, "db_env_create", xx, _debug); + xx = dbenv->remove(dbenv, dbhome, 0); + /* filter out EBUSY as it just means somebody else gets to clean it */ + xx = dbapi_err(rdb, "dbenv->remove", xx, (xx == EBUSY ? 0 : _debug)); + + rpmlog(RPMLOG_DEBUG, "removed db environment %s\n", dbhome); + + } + return rc; +} + +static int fsync_disable(int fd) +{ + return 0; +} + +/* + * dbenv->failchk() callback method for determining is the given pid/tid + * is alive. We only care about pid's though. + */ +static int isalive(DB_ENV *dbenv, pid_t pid, db_threadid_t tid, uint32_t flags) +{ + int alive = 0; + + if (pid == getpid()) { + alive = 1; + } else if (kill(pid, 0) == 0) { + alive = 1; + /* only existing processes can fail with EPERM */ + } else if (errno == EPERM) { + alive = 1; + } + + return alive; +} + +static int db_init(rpmdb rdb, const char * dbhome) +{ + DB_ENV *dbenv = NULL; + int rc, xx; + int retry_open = 2; + struct _dbConfig * cfg = &rdb->cfg; + /* This is our setup, thou shall not have other setups before us */ + uint32_t eflags = (DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB); + + if (rdb->db_dbenv != NULL) { + rdb->db_opens++; + return 0; + } + + /* By no means necessary but speeds things up a bit */ + if (rdb->db_flags & RPMDB_FLAG_REBUILD) + eflags &= ~DB_INIT_CDB; + /* XXX Something bizarre with verify... use private environment, no cdb */ + if (rdb->db_flags & RPMDB_FLAG_VERIFYONLY) { + eflags |= DB_PRIVATE; + eflags &= ~DB_INIT_CDB; + } + + rc = db_env_create(&dbenv, 0); + rc = dbapi_err(rdb, "db_env_create", rc, _debug); + if (dbenv == NULL || rc) + goto errxit; + + dbenv->set_alloc(dbenv, rmalloc, rrealloc, NULL); + dbenv->set_errcall(dbenv, NULL); + dbenv->set_errpfx(dbenv, _errpfx); + + /* + * These enable automatic stale lock removal. + * thread_count 8 is some kind of "magic minimum" value... + */ + dbenv->set_thread_count(dbenv, 8); + dbenv->set_isalive(dbenv, isalive); + + dbenv->set_verbose(dbenv, DB_VERB_DEADLOCK, + (cfg->db_verbose & DB_VERB_DEADLOCK)); + dbenv->set_verbose(dbenv, DB_VERB_RECOVERY, + (cfg->db_verbose & DB_VERB_RECOVERY)); + dbenv->set_verbose(dbenv, DB_VERB_WAITSFOR, + (cfg->db_verbose & DB_VERB_WAITSFOR)); + + if (cfg->db_mmapsize) { + xx = dbenv->set_mp_mmapsize(dbenv, cfg->db_mmapsize); + xx = dbapi_err(rdb, "dbenv->set_mp_mmapsize", xx, _debug); + } + + if (cfg->db_cachesize) { + xx = dbenv->set_cachesize(dbenv, 0, cfg->db_cachesize, 0); + xx = dbapi_err(rdb, "dbenv->set_cachesize", xx, _debug); + } + + /* + * Actually open the environment. Fall back to private environment + * if we dont have permission to join/create shared environment. + */ + while (retry_open) { + char *fstr = prDbiOpenFlags(eflags, 1); + rpmlog(RPMLOG_DEBUG, "opening db environment %s %s\n", dbhome, fstr); + free(fstr); + + rc = (dbenv->open)(dbenv, dbhome, eflags, rdb->db_perms); + if (rc == EACCES || rc == EROFS) { + eflags |= DB_PRIVATE; + retry_open--; + } else { + retry_open = 0; + } + } + rc = dbapi_err(rdb, "dbenv->open", rc, _debug); + if (rc) + goto errxit; + + dbenv->set_errcall(dbenv, errlog); + + /* stale lock removal */ + rc = dbenv->failchk(dbenv, 0); + rc = dbapi_err(rdb, "dbenv->failchk", rc, _debug); + if (rc) + goto errxit; + + rdb->db_dbenv = dbenv; + rdb->db_opens = 1; + + return 0; + +errxit: + if (dbenv) { + int xx; + xx = dbenv->close(dbenv, 0); + xx = dbapi_err(rdb, "dbenv->close", xx, _debug); + } + return rc; +} + +void dbSetFSync(void *dbenv, int enable) +{ + db_env_set_func_fsync(enable ? fdatasync : fsync_disable); +} + +int dbiSync(dbiIndex dbi, unsigned int flags) +{ + DB * db = dbi->dbi_db; + int rc = 0; + + if (db != NULL && !dbi->dbi_no_dbsync) { + rc = db->sync(db, flags); + rc = cvtdberr(dbi, "db->sync", rc, _debug); + } + return rc; +} + +int dbiCclose(dbiIndex dbi, DBC * dbcursor, + unsigned int flags) +{ + int rc = -2; + + /* XXX dbiCopen error pathways come through here. */ + if (dbcursor != NULL) { + rc = dbcursor->c_close(dbcursor); + rc = cvtdberr(dbi, "dbcursor->c_close", rc, _debug); + } + return rc; +} + +int dbiCopen(dbiIndex dbi, DBC ** dbcp, unsigned int dbiflags) +{ + DB * db = dbi->dbi_db; + DBC * dbcursor = NULL; + int flags; + int rc; + uint32_t eflags = db_envflags(db); + + /* XXX DB_WRITECURSOR cannot be used with sunrpc dbenv. */ + assert(db != NULL); + if ((dbiflags & DB_WRITECURSOR) && + (eflags & DB_INIT_CDB) && !(dbi->dbi_oflags & DB_RDONLY)) + { + flags = DB_WRITECURSOR; + } else + flags = 0; + + rc = db->cursor(db, NULL, &dbcursor, flags); + rc = cvtdberr(dbi, "db->cursor", rc, _debug); + + if (dbcp) + *dbcp = dbcursor; + else + (void) dbiCclose(dbi, dbcursor, 0); + + return rc; +} + + +/* Store (key,data) pair in index database. */ +int dbiPut(dbiIndex dbi, DBC * dbcursor, DBT * key, DBT * data, + unsigned int flags) +{ + DB * db = dbi->dbi_db; + int rc; + + assert(key->data != NULL && key->size > 0 && data->data != NULL && data->size > 0); + assert(db != NULL); + + (void) rpmswEnter(&dbi->dbi_rpmdb->db_putops, (ssize_t) 0); + if (dbcursor == NULL) { + rc = db->put(db, NULL, key, data, 0); + rc = cvtdberr(dbi, "db->put", rc, _debug); + } else { + rc = dbcursor->c_put(dbcursor, key, data, DB_KEYLAST); + rc = cvtdberr(dbi, "dbcursor->c_put", rc, _debug); + } + + (void) rpmswExit(&dbi->dbi_rpmdb->db_putops, (ssize_t) data->size); + return rc; +} + +int dbiDel(dbiIndex dbi, DBC * dbcursor, DBT * key, DBT * data, + unsigned int flags) +{ + DB * db = dbi->dbi_db; + int rc; + + assert(db != NULL); + assert(key->data != NULL && key->size > 0); + (void) rpmswEnter(&dbi->dbi_rpmdb->db_delops, 0); + + if (dbcursor == NULL) { + rc = db->del(db, NULL, key, flags); + rc = cvtdberr(dbi, "db->del", rc, _debug); + } else { + int _printit; + + /* XXX TODO: insure that cursor is positioned with duplicates */ + rc = dbcursor->c_get(dbcursor, key, data, DB_SET); + /* XXX DB_NOTFOUND can be returned */ + _printit = (rc == DB_NOTFOUND ? 0 : _debug); + rc = cvtdberr(dbi, "dbcursor->c_get", rc, _printit); + + if (rc == 0) { + rc = dbcursor->c_del(dbcursor, flags); + rc = cvtdberr(dbi, "dbcursor->c_del", rc, _debug); + } + } + + (void) rpmswExit(&dbi->dbi_rpmdb->db_delops, data->size); + return rc; +} + +/* Retrieve (key,data) pair from index database. */ +int dbiGet(dbiIndex dbi, DBC * dbcursor, DBT * key, DBT * data, + unsigned int flags) +{ + + DB * db = dbi->dbi_db; + int _printit; + int rc; + + assert((flags == DB_NEXT) || (key->data != NULL && key->size > 0)); + (void) rpmswEnter(&dbi->dbi_rpmdb->db_getops, 0); + + assert(db != NULL); + if (dbcursor == NULL) { + /* XXX duplicates require cursors. */ + rc = db->get(db, NULL, key, data, 0); + /* XXX DB_NOTFOUND can be returned */ + _printit = (rc == DB_NOTFOUND ? 0 : _debug); + rc = cvtdberr(dbi, "db->get", rc, _printit); + } else { + /* XXX db4 does DB_FIRST on uninitialized cursor */ + rc = dbcursor->c_get(dbcursor, key, data, flags); + /* XXX DB_NOTFOUND can be returned */ + _printit = (rc == DB_NOTFOUND ? 0 : _debug); + rc = cvtdberr(dbi, "dbcursor->c_get", rc, _printit); + } + + (void) rpmswExit(&dbi->dbi_rpmdb->db_getops, data->size); + return rc; +} + +int dbiCount(dbiIndex dbi, DBC * dbcursor, + unsigned int * countp, + unsigned int flags) +{ + db_recno_t count = 0; + int rc = 0; + + flags = 0; + rc = dbcursor->c_count(dbcursor, &count, flags); + rc = cvtdberr(dbi, "dbcursor->c_count", rc, _debug); + if (rc) return rc; + if (countp) *countp = count; + + return rc; +} + +int dbiByteSwapped(dbiIndex dbi) +{ + DB * db = dbi->dbi_db; + int rc = 0; + + if (dbi->dbi_byteswapped != -1) + return dbi->dbi_byteswapped; + + if (db != NULL) { + int isswapped = 0; + rc = db->get_byteswapped(db, &isswapped); + if (rc == 0) + dbi->dbi_byteswapped = rc = isswapped; + } + return rc; +} + +dbiIndexType dbiType(dbiIndex dbi) +{ + return dbi->dbi_type; +} + +int dbiFlags(dbiIndex dbi) +{ + DB *db = dbi->dbi_db; + int flags = DBI_NONE; + uint32_t oflags = 0; + + if (db && db->get_open_flags(db, &oflags) == 0) { + if (oflags & DB_CREATE) + flags |= DBI_CREATED; + if (oflags & DB_RDONLY) + flags |= DBI_RDONLY; + } + return flags; +} + +const char * dbiName(dbiIndex dbi) +{ + return dbi->dbi_file; +} + +int dbiVerify(dbiIndex dbi, unsigned int flags) +{ + int rc = 0; + + if (dbi && dbi->dbi_db) { + DB * db = dbi->dbi_db; + + rc = db->verify(db, dbi->dbi_file, NULL, NULL, flags); + rc = cvtdberr(dbi, "db->verify", rc, _debug); + + rpmlog(RPMLOG_DEBUG, "verified db index %s\n", dbi->dbi_file); + + /* db->verify() destroys the handle, make sure nobody accesses it */ + dbi->dbi_db = NULL; + } + return rc; +} + +int dbiClose(dbiIndex dbi, unsigned int flags) +{ + rpmdb rdb = dbi->dbi_rpmdb; + const char * dbhome = rpmdbHome(rdb); + DB * db = dbi->dbi_db; + int _printit; + int rc = 0, xx; + + flags = 0; /* XXX unused */ + + if (db) { + rc = db->close(db, 0); + /* XXX ignore not found error messages. */ + _printit = (rc == ENOENT ? 0 : _debug); + rc = cvtdberr(dbi, "db->close", rc, _printit); + db = dbi->dbi_db = NULL; + + rpmlog(RPMLOG_DEBUG, "closed db index %s/%s\n", + dbhome, dbi->dbi_file); + } + + xx = db_fini(rdb, dbhome ? dbhome : ""); + + dbi->dbi_db = NULL; + + dbi = dbiFree(dbi); + + return rc; +} + +/* + * Lock a file using fcntl(2). Traditionally this is Packages, + * the file used to store metadata of installed header(s), + * as Packages is always opened, and should be opened first, + * for any rpmdb access. + * + * If no DBENV is used, then access is protected with a + * shared/exclusive locking scheme, as always. + * + * With a DBENV, the fcntl(2) lock is necessary only to keep + * the riff-raff from playing where they don't belong, as + * the DBENV should provide it's own locking scheme. So try to + * acquire a lock, but permit failures, as some other + * DBENV player may already have acquired the lock. + * + * With NPTL posix mutexes, revert to fcntl lock on non-functioning + * glibc/kernel combinations. + */ +static int dbiFlock(dbiIndex dbi, int mode) +{ + int fdno = -1; + int rc = 0; + DB * db = dbi->dbi_db; + + if (!(db->fd(db, &fdno) == 0 && fdno >= 0)) { + rc = 1; + } else { + const char *dbhome = rpmdbHome(dbi->dbi_rpmdb); + struct flock l; + memset(&l, 0, sizeof(l)); + l.l_whence = 0; + l.l_start = 0; + l.l_len = 0; + l.l_type = (mode & O_ACCMODE) == O_RDONLY + ? F_RDLCK : F_WRLCK; + l.l_pid = 0; + + rc = fcntl(fdno, F_SETLK, (void *) &l); + if (rc) { + uint32_t eflags = db_envflags(db); + /* Warning iff using non-private CDB locking. */ + rc = (((eflags & DB_INIT_CDB) && !(eflags & DB_PRIVATE)) ? 0 : 1); + rpmlog( (rc ? RPMLOG_ERR : RPMLOG_WARNING), + _("cannot get %s lock on %s/%s\n"), + ((mode & O_ACCMODE) == O_RDONLY) + ? _("shared") : _("exclusive"), + dbhome, dbi->dbi_file); + } else { + rpmlog(RPMLOG_DEBUG, + "locked db index %s/%s\n", + dbhome, dbi->dbi_file); + } + } + return rc; +} + +int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags) +{ + const char *dbhome = rpmdbHome(rdb); + dbiIndex dbi = NULL; + int rc = 0; + int retry_open; + int verifyonly = (flags & RPMDB_FLAG_VERIFYONLY); + + DB * db = NULL; + DBTYPE dbtype = DB_UNKNOWN; + uint32_t oflags; + static int _lockdbfd = 0; + + if (dbip) + *dbip = NULL; + + /* + * Parse db configuration parameters. + */ + if ((dbi = dbiNew(rdb, rpmtag)) == NULL) + return 1; + + oflags = dbi->dbi_oflags; + + /* + * Map open mode flags onto configured database/environment flags. + */ + if ((rdb->db_mode & O_ACCMODE) == O_RDONLY) oflags |= DB_RDONLY; + + rc = db_init(rdb, dbhome); + + retry_open = (rc == 0) ? 2 : 0; + + while (retry_open) { + rc = db_create(&db, rdb->db_dbenv, 0); + rc = cvtdberr(dbi, "db_create", rc, _debug); + + /* For verify we only want the handle, not an open db */ + if (verifyonly) + break; + + if (rc == 0 && db != NULL) { + int _printit, xx; + char *dbfs = prDbiOpenFlags(oflags, 0); + rpmlog(RPMLOG_DEBUG, "opening db index %s/%s %s mode=0x%x\n", + dbhome, dbi->dbi_file, dbfs, rdb->db_mode); + free(dbfs); + + rc = (db->open)(db, NULL, dbi->dbi_file, NULL, + dbtype, oflags, rdb->db_perms); + + /* Attempt to create if missing, discarding DB_RDONLY (!) */ + if (rc == ENOENT) { + oflags |= DB_CREATE; + oflags &= ~DB_RDONLY; + dbtype = (dbiType(dbi) == DBI_PRIMARY) ? DB_HASH : DB_BTREE; + retry_open--; + } else { + retry_open = 0; + } + + /* XXX return rc == errno without printing */ + _printit = (rc > 0 ? 0 : _debug); + xx = cvtdberr(dbi, "db->open", rc, _printit); + + /* Validate the index type is something we can support */ + if ((rc == 0) && (dbtype == DB_UNKNOWN)) { + db->get_type(db, &dbtype); + if (dbtype != DB_HASH && dbtype != DB_BTREE) { + rpmlog(RPMLOG_ERR, _("invalid index type %x on %s/%s\n"), + dbtype, dbhome, dbi->dbi_file); + rc = 1; + } + } + + if (rc != 0) { + db->close(db, 0); + db = NULL; + } + } + } + + dbi->dbi_db = db; + dbi->dbi_oflags = oflags; + + if (!verifyonly && rc == 0 && dbi->dbi_lockdbfd && _lockdbfd++ == 0) { + rc = dbiFlock(dbi, rdb->db_mode); + } + + if (rc == 0 && dbi->dbi_db != NULL && dbip != NULL) { + *dbip = dbi; + } else { + (void) dbiClose(dbi, 0); + } + + return rc; +} diff --git a/lib/backend/dbconfig.c b/lib/backend/dbconfig.c new file mode 100644 index 0000000..9e81476 --- /dev/null +++ b/lib/backend/dbconfig.c @@ -0,0 +1,268 @@ +/** \ingroup rpmdb + * \file lib/dbconfig.c + */ + +#include "system.h" + +#include + +#include +#include +#include +#include +#include +#include "lib/rpmdb_internal.h" +#include "debug.h" + +static struct _dbiIndex staticdbi; +static struct _dbConfig staticcfg; +static int db_eflags; + +/** \ingroup dbi + */ +static const struct poptOption rdbOptions[] = { + /* Environment options */ + + { "cdb", 0,POPT_BIT_SET, &db_eflags, DB_INIT_CDB, + NULL, NULL }, + { "lock", 0,POPT_BIT_SET, &db_eflags, DB_INIT_LOCK, + NULL, NULL }, + { "log", 0,POPT_BIT_SET, &db_eflags, DB_INIT_LOG, + NULL, NULL }, + { "txn", 0,POPT_BIT_SET, &db_eflags, DB_INIT_TXN, + NULL, NULL }, + { "recover", 0,POPT_BIT_SET, &db_eflags, DB_RECOVER, + NULL, NULL }, + { "recover_fatal", 0,POPT_BIT_SET, &db_eflags, DB_RECOVER_FATAL, + NULL, NULL }, + { "lockdown", 0,POPT_BIT_SET, &db_eflags, DB_LOCKDOWN, + NULL, NULL }, + { "private", 0,POPT_BIT_SET, &db_eflags, DB_PRIVATE, + NULL, NULL }, + + { "deadlock", 0,POPT_BIT_SET, &staticcfg.db_verbose, DB_VERB_DEADLOCK, + NULL, NULL }, + { "recovery", 0,POPT_BIT_SET, &staticcfg.db_verbose, DB_VERB_RECOVERY, + NULL, NULL }, + { "waitsfor", 0,POPT_BIT_SET, &staticcfg.db_verbose, DB_VERB_WAITSFOR, + NULL, NULL }, + { "verbose", 0,POPT_ARG_VAL, &staticcfg.db_verbose, -1, + NULL, NULL }, + + { "cachesize", 0,POPT_ARG_INT, &staticcfg.db_cachesize, 0, + NULL, NULL }, + { "mmapsize", 0,POPT_ARG_INT, &staticcfg.db_mmapsize, 0, + NULL, NULL }, + { "mp_mmapsize", 0,POPT_ARG_INT, &staticcfg.db_mmapsize, 0, + NULL, NULL }, + { "mp_size", 0,POPT_ARG_INT, &staticcfg.db_cachesize, 0, + NULL, NULL }, + + { "nofsync", 0,POPT_ARG_NONE, &staticcfg.db_no_fsync, 0, + NULL, NULL }, + + /* Per-dbi options */ + { "nommap", 0,POPT_BIT_SET, &staticdbi.dbi_oflags, DB_NOMMAP, + NULL, NULL }, + + { "nodbsync", 0,POPT_ARG_NONE, &staticdbi.dbi_no_dbsync, 0, + NULL, NULL }, + { "lockdbfd", 0,POPT_ARG_NONE, &staticdbi.dbi_lockdbfd, 0, + NULL, NULL }, + + POPT_TABLEEND +}; + +dbiIndex dbiFree(dbiIndex dbi) +{ + if (dbi) { + dbi = _free(dbi); + } + return dbi; +} + +dbiIndex dbiNew(rpmdb rdb, rpmDbiTagVal rpmtag) +{ + dbiIndex dbi = xcalloc(1, sizeof(*dbi)); + char *dbOpts; + + dbOpts = rpmExpand("%{_dbi_config_", rpmTagGetName(rpmtag), "}", NULL); + + if (!(dbOpts && *dbOpts && *dbOpts != '%')) { + dbOpts = _free(dbOpts); + dbOpts = rpmExpand("%{_dbi_config}", NULL); + if (!(dbOpts && *dbOpts && *dbOpts != '%')) { + dbOpts = _free(dbOpts); + } + } + + /* Parse the options for the database element(s). */ + if (dbOpts && *dbOpts && *dbOpts != '%') { + char *o, *oe; + char *p, *pe; + + memset(&staticdbi, 0, sizeof(staticdbi)); +/*=========*/ + for (o = dbOpts; o && *o; o = oe) { + const struct poptOption *opt; + const char * tok; + unsigned int argInfo; + + /* Skip leading white space. */ + while (*o && risspace(*o)) + o++; + + /* Find and terminate next key=value pair. Save next start point. */ + for (oe = o; oe && *oe; oe++) { + if (risspace(*oe)) + break; + if (oe[0] == ':' && !(oe[1] == '/' && oe[2] == '/')) + break; + } + if (oe && *oe) + *oe++ = '\0'; + if (*o == '\0') + continue; + + /* Separate key from value, save value start (if any). */ + for (pe = o; pe && *pe && *pe != '='; pe++) + {}; + p = (pe ? *pe++ = '\0', pe : NULL); + + /* Skip over negation at start of token. */ + for (tok = o; *tok == '!'; tok++) + {}; + + /* Find key in option table. */ + for (opt = rdbOptions; opt->longName != NULL; opt++) { + if (!rstreq(tok, opt->longName)) + continue; + break; + } + if (opt->longName == NULL) { + rpmlog(RPMLOG_ERR, + _("unrecognized db option: \"%s\" ignored.\n"), o); + continue; + } + + /* Toggle the flags for negated tokens, if necessary. */ + argInfo = opt->argInfo; + if (argInfo == POPT_BIT_SET && *o == '!' && ((tok - o) % 2)) + argInfo = POPT_BIT_CLR; + + /* Save value in template as appropriate. */ + switch (argInfo & POPT_ARG_MASK) { + + case POPT_ARG_NONE: + (void) poptSaveInt((int *)opt->arg, argInfo, 1L); + break; + case POPT_ARG_VAL: + (void) poptSaveInt((int *)opt->arg, argInfo, (long)opt->val); + break; + case POPT_ARG_STRING: + { char ** t = opt->arg; + if (t) { +/* FIX: opt->arg annotation in popt.h */ + *t = _free(*t); + *t = xstrdup( (p ? p : "") ); + } + } break; + + case POPT_ARG_INT: + case POPT_ARG_LONG: + { long aLong = strtol(p, &pe, 0); + if (pe) { + if (!rstrncasecmp(pe, "Mb", 2)) + aLong *= 1024 * 1024; + else if (!rstrncasecmp(pe, "Kb", 2)) + aLong *= 1024; + else if (*pe != '\0') { + rpmlog(RPMLOG_ERR, + _("%s has invalid numeric value, skipped\n"), + opt->longName); + continue; + } + } + + if ((argInfo & POPT_ARG_MASK) == POPT_ARG_LONG) { + if (aLong == LONG_MIN || aLong == LONG_MAX) { + rpmlog(RPMLOG_ERR, + _("%s has too large or too small long value, skipped\n"), + opt->longName); + continue; + } + (void) poptSaveLong((long *)opt->arg, argInfo, aLong); + break; + } else { + if (aLong > INT_MAX || aLong < INT_MIN) { + rpmlog(RPMLOG_ERR, + _("%s has too large or too small integer value, skipped\n"), + opt->longName); + continue; + } + (void) poptSaveInt((int *)opt->arg, argInfo, aLong); + } + } break; + default: + break; + } + } +/*=========*/ + } + + dbOpts = _free(dbOpts); + + *dbi = staticdbi; /* structure assignment */ + memset(&staticdbi, 0, sizeof(staticdbi)); + + /* FIX: figger lib/dbi refcounts */ + dbi->dbi_rpmdb = rdb; + dbi->dbi_file = rpmTagGetName(rpmtag); + dbi->dbi_type = (rpmtag == RPMDBI_PACKAGES) ? DBI_PRIMARY : DBI_SECONDARY; + dbi->dbi_byteswapped = -1; /* -1 unknown, 0 native order, 1 alien order */ + + /* XXX FIXME: Get environment configuration out of here! */ + if (rdb->db_dbenv == NULL) { + struct _dbConfig * cfg = &rdb->cfg; + *cfg = staticcfg; /* structure assignment */ + /* Throw in some defaults if configuration didn't set any */ + if (!cfg->db_mmapsize) cfg->db_mmapsize = 16 * 1024 * 1024; + if (!cfg->db_cachesize) cfg->db_cachesize = 8 * 1024 * 1024; + } + + /* FIX: *(rdbOptions->arg) reachable */ + return dbi; +} + +char * prDbiOpenFlags(int dbflags, int print_dbenv_flags) +{ + ARGV_t flags = NULL; + const struct poptOption *opt; + char *buf; + + for (opt = rdbOptions; opt->longName != NULL; opt++) { + if (opt->argInfo != POPT_BIT_SET) + continue; + if (print_dbenv_flags) { + if (!(opt->arg == &db_eflags)) + continue; + } else { + if (!(opt->arg == &staticdbi.dbi_oflags)) + continue; + } + if ((dbflags & opt->val) != opt->val) + continue; + argvAdd(&flags, opt->longName); + dbflags &= ~opt->val; + } + if (dbflags) { + char *df = NULL; + rasprintf(&df, "0x%x", (unsigned)dbflags); + argvAdd(&flags, df); + free(df); + } + buf = argvJoin(flags, ":"); + argvFree(flags); + + return buf ? buf : xstrdup("(none)"); +} diff --git a/lib/backend/dbi.h b/lib/backend/dbi.h new file mode 100644 index 0000000..f37a160 --- /dev/null +++ b/lib/backend/dbi.h @@ -0,0 +1,270 @@ +#ifndef _DBI_H +#define _DBI_H + +enum rpmdbFlags { + RPMDB_FLAG_JUSTCHECK = (1 << 0), + RPMDB_FLAG_REBUILD = (1 << 1), + RPMDB_FLAG_VERIFYONLY = (1 << 2), +}; + +typedef struct _dbiIndex * dbiIndex; + +struct _dbConfig { + int db_mmapsize; /*!< (10Mb) */ + int db_cachesize; /*!< (128Kb) */ + int db_verbose; + int db_no_fsync; /*!< no-op fsync for db */ +}; + +#undef HASHTYPE +#undef HTKEYTYPE +#undef HTDATATYPE +#define HASHTYPE intHash +#define HTKEYTYPE unsigned int +#include "lib/rpmhash.H" +#undef HASHTYPE +#undef HTKEYTYPE + +/** \ingroup rpmdb + * Describes the collection of index databases used by rpm. + */ +struct rpmdb_s { + char * db_root;/*!< path prefix */ + char * db_home;/*!< directory path */ + char * db_fullpath; /*!< full db path including prefix */ + int db_flags; + int db_mode; /*!< open mode */ + int db_perms; /*!< open permissions */ + int db_ver; /*!< Berkeley DB version */ + intHash db_checked; /*!< headerCheck()'ed package instances */ + rpmdb db_next; + int db_opens; + int db_ndbi; /*!< No. of tag indices. */ + dbiIndex * _dbi; /*!< Tag indices. */ + int db_buildindex; /*!< Index rebuild indicator */ + + /* dbenv and related parameters */ + void * db_dbenv; /*!< Berkeley DB_ENV handle. */ + struct _dbConfig cfg; + int db_remove_env; + + struct rpmop_s db_getops; + struct rpmop_s db_putops; + struct rpmop_s db_delops; + + int nrefs; /*!< Reference count. */ +}; + +/* Type of the dbi, also serves as the join key size */ +typedef enum dbiIndexType_e { + DBI_PRIMARY = (1 * sizeof(int32_t)), + DBI_SECONDARY = (2 * sizeof(int32_t)), +} dbiIndexType; + +enum dbiFlags_e { + DBI_NONE = 0, + DBI_CREATED = (1 << 0), + DBI_RDONLY = (1 << 1), +}; + +/** \ingroup dbi + * Describes an index database (implemented on Berkeley db functionality). + */ +struct _dbiIndex { + const char * dbi_file; /*!< file component of path */ + + int dbi_oflags; /*!< db->open flags */ + int dbi_permit_dups; /*!< permit duplicate entries? */ + int dbi_no_dbsync; /*!< don't call dbiSync */ + int dbi_lockdbfd; /*!< do fcntl lock on db fd */ + int dbi_byteswapped; + + rpmdb dbi_rpmdb; /*!< the parent rpm database */ + dbiIndexType dbi_type; /*! Type of dbi (primary / index) */ + + DB * dbi_db; /*!< Berkeley DB * handle */ +}; + +#ifdef __cplusplus +extern "C" { +#endif + + +RPM_GNUC_INTERNAL +/* Globally enable/disable fsync in the backend */ +void dbSetFSync(void *dbenv, int enable); + +/** \ingroup dbi + * Return new configured index database handle instance. + * @param rdb rpm database + * @param rpmtag database index tag + * @return index database handle + */ +RPM_GNUC_INTERNAL +dbiIndex dbiNew(rpmdb rdb, rpmDbiTagVal rpmtag); + +/** \ingroup dbi + * Destroy index database handle instance. + * @param dbi index database handle + * @return NULL always + */ +RPM_GNUC_INTERNAL +dbiIndex dbiFree( dbiIndex dbi); + +/** \ingroup dbi + * Format dbi open flags for debugging print. + * @param dbflags db open flags + * @param print_dbenv_flags format db env flags instead? + * @return formatted flags (malloced) + */ +RPM_GNUC_INTERNAL +char * prDbiOpenFlags(int dbflags, int print_dbenv_flags); + +/** \ingroup dbi + * Actually open the database of the index. + * @param db rpm database + * @param rpmtag database index tag + * @param dbiIndex address of index database handle + * @param flags + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags); + + +/* FIX: vector annotations */ +/** \ingroup dbi + * Open a database cursor. + * @param dbi index database handle + * @retval dbcp returned database cursor + * @param flags DB_WRITECURSOR if writing, or 0 + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiCopen(dbiIndex dbi, DBC ** dbcp, unsigned int flags); + +/** \ingroup dbi + * Close a database cursor. + * @param dbi index database handle + * @param dbcursor database cursor + * @param flags (unused) + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiCclose(dbiIndex dbi, DBC * dbcursor, unsigned int flags); + +/** \ingroup dbi + * Delete (key,data) pair(s) from index database. + * @param dbi index database handle + * @param dbcursor database cursor (NULL will use db->del) + * @param key delete key value/length/flags + * @param data delete data value/length/flags + * @param flags (unused) + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiDel(dbiIndex dbi, DBC * dbcursor, DBT * key, DBT * data, + unsigned int flags); + +/** \ingroup dbi + * Retrieve (key,data) pair from index database. + * @param dbi index database handle + * @param dbcursor database cursor (NULL will use db->get) + * @param key retrieve key value/length/flags + * @param data retrieve data value/length/flags + * @param flags (unused) + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiGet(dbiIndex dbi, DBC * dbcursor, DBT * key, DBT * data, + unsigned int flags); + +/** \ingroup dbi + * Store (key,data) pair in index database. + * @param dbi index database handle + * @param dbcursor database cursor (NULL will use db->put) + * @param key store key value/length/flags + * @param data store data value/length/flags + * @param flags (unused) + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiPut(dbiIndex dbi, DBC * dbcursor, DBT * key, DBT * data, + unsigned int flags); + +/** \ingroup dbi + * Retrieve count of (possible) duplicate items. + * @param dbi index database handle + * @param dbcursor database cursor + * @param countp address of count + * @param flags (unused) + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiCount(dbiIndex dbi, DBC * dbcursor, unsigned int * countp, + unsigned int flags); + +/** \ingroup dbi + * Close index database. + * @param dbi index database handle + * @param flags (unused) + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiClose(dbiIndex dbi, unsigned int flags); + +/** \ingroup dbi + * Flush pending operations to disk. + * @param dbi index database handle + * @param flags (unused) + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiSync (dbiIndex dbi, unsigned int flags); + +/** \ingroup dbi + * Verify (and close) index database. + * @param dbi index database handle + * @param flags (unused) + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int dbiVerify(dbiIndex dbi, unsigned int flags); + +/** \ingroup dbi + * Is database byte swapped? + * @param dbi index database handle + * @return 0 same order, 1 swapped order + */ +RPM_GNUC_INTERNAL +int dbiByteSwapped(dbiIndex dbi); + +/** \ingroup dbi + * Type of dbi (primary data / index) + * @param dbi index database handle + * @return type of dbi + */ +RPM_GNUC_INTERNAL +dbiIndexType dbiType(dbiIndex dbi); + +/** \ingroup dbi + * Retrieve index control flags (new/existing, read-only etc) + * @param dbi index database handle + * @return dbi control flags + */ +RPM_GNUC_INTERNAL +int dbiFlags(dbiIndex dbi); + +/** \ingroup dbi + * Retrieve index name (same as the backing file name) + * @param dbi index database handle + * @return dbi name + */ +RPM_GNUC_INTERNAL +const char * dbiName(dbiIndex dbi); + +#ifdef __cplusplus +} +#endif + +#endif /* _DBI_H */ diff --git a/lib/cpio.c b/lib/cpio.c new file mode 100644 index 0000000..b5c39c0 --- /dev/null +++ b/lib/cpio.c @@ -0,0 +1,245 @@ +/** \ingroup payload + * \file lib/cpio.c + * Handle cpio payloads within rpm packages. + * + * \warning FIXME: We don't translate between cpio and system mode bits! These + * should both be the same, but really odd things are going to happen if + * that's not true! + */ + +#include "system.h" + +#if MAJOR_IN_MKDEV +#include +#elif MAJOR_IN_SYSMACROS +#include +#else +#include /* already included from system.h */ +#endif +#include + +#include +#include + +#include "lib/cpio.h" +#include "lib/fsm.h" + +#include "debug.h" + + +/** + * Convert string to unsigned integer (with buffer size check). + * @param str input string + * @retval endptr address of 1st character not processed + * @param base numerical conversion base + * @param num max no. of bytes to read + * @return converted integer + */ +static unsigned long strntoul(const char *str,char **endptr, int base, size_t num) +{ + char buf[num+1], * end; + unsigned long ret; + + strncpy(buf, str, num); + buf[num] = '\0'; + + ret = strtoul(buf, &end, base); + if (*end != '\0') + *endptr = ((char *)str) + (end - buf); /* XXX discards const */ + else + *endptr = ((char *)str) + strlen(buf); + + return ret; +} + +#define GET_NUM_FIELD(phys, log) \ + \ + log = strntoul(phys, &end, 16, sizeof(phys)); \ + \ + if ( (end - phys) != sizeof(phys) ) return CPIOERR_BAD_HEADER; +#define SET_NUM_FIELD(phys, val, space) \ + sprintf(space, "%8.8lx", (unsigned long) (val)); \ + \ + memcpy(phys, space, 8) \ + +int cpioTrailerWrite(FSM_t fsm) +{ + struct cpioCrcPhysicalHeader * hdr = + (struct cpioCrcPhysicalHeader *)fsm->rdbuf; + int rc; + + memset(hdr, '0', PHYS_HDR_SIZE); + memcpy(hdr->magic, CPIO_NEWC_MAGIC, sizeof(hdr->magic)); + memcpy(hdr->nlink, "00000001", 8); + memcpy(hdr->namesize, "0000000b", 8); + memcpy(fsm->rdbuf + PHYS_HDR_SIZE, CPIO_TRAILER, sizeof(CPIO_TRAILER)); + + /* XXX DWRITE uses rdnb for I/O length. */ + fsm->rdnb = PHYS_HDR_SIZE + sizeof(CPIO_TRAILER); + rc = fsmNext(fsm, FSM_DWRITE); + + /* + * GNU cpio pads to 512 bytes here, but we don't. This may matter for + * tape device(s) and/or concatenated cpio archives. + */ + if (!rc) + rc = fsmNext(fsm, FSM_PAD); + + return rc; +} + +int cpioHeaderWrite(FSM_t fsm, struct stat * st) +{ + struct cpioCrcPhysicalHeader * hdr = (struct cpioCrcPhysicalHeader *)fsm->rdbuf; + char field[64]; + size_t len; + dev_t dev; + int rc = 0; + + memcpy(hdr->magic, CPIO_NEWC_MAGIC, sizeof(hdr->magic)); + SET_NUM_FIELD(hdr->inode, st->st_ino, field); + SET_NUM_FIELD(hdr->mode, st->st_mode, field); + SET_NUM_FIELD(hdr->uid, st->st_uid, field); + SET_NUM_FIELD(hdr->gid, st->st_gid, field); + SET_NUM_FIELD(hdr->nlink, st->st_nlink, field); + SET_NUM_FIELD(hdr->mtime, st->st_mtime, field); + SET_NUM_FIELD(hdr->filesize, st->st_size, field); + + dev = major(st->st_dev); SET_NUM_FIELD(hdr->devMajor, dev, field); + dev = minor(st->st_dev); SET_NUM_FIELD(hdr->devMinor, dev, field); + dev = major(st->st_rdev); SET_NUM_FIELD(hdr->rdevMajor, dev, field); + dev = minor(st->st_rdev); SET_NUM_FIELD(hdr->rdevMinor, dev, field); + + len = strlen(fsm->path) + 1; SET_NUM_FIELD(hdr->namesize, len, field); + memcpy(hdr->checksum, "00000000", 8); + memcpy(fsm->rdbuf + PHYS_HDR_SIZE, fsm->path, len); + + /* XXX DWRITE uses rdnb for I/O length. */ + fsm->rdnb = PHYS_HDR_SIZE + len; + rc = fsmNext(fsm, FSM_DWRITE); + if (!rc && fsm->rdnb != fsm->wrnb) + rc = CPIOERR_WRITE_FAILED; + if (!rc) + rc = fsmNext(fsm, FSM_PAD); + return rc; +} + +int cpioHeaderRead(FSM_t fsm, struct stat * st) +{ + struct cpioCrcPhysicalHeader hdr; + int nameSize; + char * end; + unsigned int major, minor; + int rc = 0; + + fsm->wrlen = PHYS_HDR_SIZE; + rc = fsmNext(fsm, FSM_DREAD); + if (!rc && fsm->rdnb != fsm->wrlen) + rc = CPIOERR_READ_FAILED; + if (rc) return rc; + memcpy(&hdr, fsm->wrbuf, fsm->rdnb); + + if (strncmp(CPIO_CRC_MAGIC, hdr.magic, sizeof(CPIO_CRC_MAGIC)-1) && + strncmp(CPIO_NEWC_MAGIC, hdr.magic, sizeof(CPIO_NEWC_MAGIC)-1)) + return CPIOERR_BAD_MAGIC; + + GET_NUM_FIELD(hdr.inode, st->st_ino); + GET_NUM_FIELD(hdr.mode, st->st_mode); + GET_NUM_FIELD(hdr.uid, st->st_uid); + GET_NUM_FIELD(hdr.gid, st->st_gid); + GET_NUM_FIELD(hdr.nlink, st->st_nlink); + GET_NUM_FIELD(hdr.mtime, st->st_mtime); + GET_NUM_FIELD(hdr.filesize, st->st_size); + + GET_NUM_FIELD(hdr.devMajor, major); + GET_NUM_FIELD(hdr.devMinor, minor); + st->st_dev = makedev(major, minor); + + GET_NUM_FIELD(hdr.rdevMajor, major); + GET_NUM_FIELD(hdr.rdevMinor, minor); + st->st_rdev = makedev(major, minor); + + GET_NUM_FIELD(hdr.namesize, nameSize); + if (nameSize >= fsm->wrsize) + return CPIOERR_BAD_HEADER; + + { char * t = xmalloc(nameSize + 1); + fsm->wrlen = nameSize; + rc = fsmNext(fsm, FSM_DREAD); + if (!rc && fsm->rdnb != fsm->wrlen) + rc = CPIOERR_BAD_HEADER; + if (rc) { + t = _free(t); + fsm->path = NULL; + return rc; + } + memcpy(t, fsm->wrbuf, fsm->rdnb); + t[nameSize] = '\0'; + fsm->path = t; + } + + return 0; +} + +const char * cpioStrerror(int rc) +{ + static char msg[256]; + const char *s; + int myerrno = errno; + size_t l; + + strcpy(msg, "cpio: "); + switch (rc) { + default: { + char *t = msg + strlen(msg); + sprintf(t, _("(error 0x%x)"), (unsigned)rc); + s = NULL; + break; + } + case CPIOERR_BAD_MAGIC: s = _("Bad magic"); break; + case CPIOERR_BAD_HEADER: s = _("Bad/unreadable header");break; + + case CPIOERR_OPEN_FAILED: s = "open"; break; + case CPIOERR_CHMOD_FAILED: s = "chmod"; break; + case CPIOERR_CHOWN_FAILED: s = "chown"; break; + case CPIOERR_WRITE_FAILED: s = "write"; break; + case CPIOERR_UTIME_FAILED: s = "utime"; break; + case CPIOERR_UNLINK_FAILED: s = "unlink"; break; + case CPIOERR_RENAME_FAILED: s = "rename"; break; + case CPIOERR_SYMLINK_FAILED: s = "symlink"; break; + case CPIOERR_STAT_FAILED: s = "stat"; break; + case CPIOERR_LSTAT_FAILED: s = "lstat"; break; + case CPIOERR_MKDIR_FAILED: s = "mkdir"; break; + case CPIOERR_RMDIR_FAILED: s = "rmdir"; break; + case CPIOERR_MKNOD_FAILED: s = "mknod"; break; + case CPIOERR_MKFIFO_FAILED: s = "mkfifo"; break; + case CPIOERR_LINK_FAILED: s = "link"; break; + case CPIOERR_READLINK_FAILED: s = "readlink"; break; + case CPIOERR_READ_FAILED: s = "read"; break; + case CPIOERR_COPY_FAILED: s = "copy"; break; + case CPIOERR_LSETFCON_FAILED: s = "lsetfilecon"; break; + case CPIOERR_SETCAP_FAILED: s = "cap_set_file"; break; + + case CPIOERR_HDR_SIZE: s = _("Header size too big"); break; + case CPIOERR_UNKNOWN_FILETYPE: s = _("Unknown file type"); break; + case CPIOERR_MISSING_HARDLINK: s = _("Missing hard link(s)"); break; + case CPIOERR_DIGEST_MISMATCH: s = _("Digest mismatch"); break; + case CPIOERR_INTERNAL: s = _("Internal error"); break; + case CPIOERR_UNMAPPED_FILE: s = _("Archive file not in header"); break; + case CPIOERR_ENOENT: s = strerror(ENOENT); break; + case CPIOERR_ENOTEMPTY: s = strerror(ENOTEMPTY); break; + } + + l = sizeof(msg) - strlen(msg) - 1; + if (s != NULL) { + if (l > 0) strncat(msg, s, l); + l -= strlen(s); + } + if ((rc & CPIOERR_CHECK_ERRNO) && myerrno) { + s = _(" failed - "); + if (l > 0) strncat(msg, s, l); + l -= strlen(s); + if (l > 0) strncat(msg, strerror(myerrno), l); + } + return msg; +} diff --git a/lib/cpio.h b/lib/cpio.h new file mode 100644 index 0000000..9453184 --- /dev/null +++ b/lib/cpio.h @@ -0,0 +1,133 @@ +#ifndef H_CPIO +#define H_CPIO + +/** \ingroup payload + * \file lib/cpio.h + * Structures used to handle cpio payloads within rpm packages. + * + * @warning Rpm's cpio implementation may be different than standard cpio. + * The implementation is pretty close, but it has some behaviors which are + * more to RPM's liking. I tried to document the differing behavior in cpio.c, + * but I may have missed some (ewt). + * + */ + +#include "lib/fsm.h" + +/** \ingroup payload + * @note CPIO_CHECK_ERRNO bit is set only if errno is valid. + */ +#define CPIOERR_CHECK_ERRNO 0x00008000 + +/** \ingroup payload + */ +enum cpioErrorReturns { + CPIOERR_BAD_MAGIC = 2, + CPIOERR_BAD_HEADER = 3, + CPIOERR_OPEN_FAILED = 4 | CPIOERR_CHECK_ERRNO, + CPIOERR_CHMOD_FAILED = 5 | CPIOERR_CHECK_ERRNO, + CPIOERR_CHOWN_FAILED = 6 | CPIOERR_CHECK_ERRNO, + CPIOERR_WRITE_FAILED = 7 | CPIOERR_CHECK_ERRNO, + CPIOERR_UTIME_FAILED = 8 | CPIOERR_CHECK_ERRNO, + CPIOERR_UNLINK_FAILED = 9 | CPIOERR_CHECK_ERRNO, + CPIOERR_RENAME_FAILED = 10 | CPIOERR_CHECK_ERRNO, + CPIOERR_SYMLINK_FAILED = 11 | CPIOERR_CHECK_ERRNO, + CPIOERR_STAT_FAILED = 12 | CPIOERR_CHECK_ERRNO, + CPIOERR_LSTAT_FAILED = 13 | CPIOERR_CHECK_ERRNO, + CPIOERR_MKDIR_FAILED = 14 | CPIOERR_CHECK_ERRNO, + CPIOERR_RMDIR_FAILED = 15 | CPIOERR_CHECK_ERRNO, + CPIOERR_MKNOD_FAILED = 16 | CPIOERR_CHECK_ERRNO, + CPIOERR_MKFIFO_FAILED = 17 | CPIOERR_CHECK_ERRNO, + CPIOERR_LINK_FAILED = 18 | CPIOERR_CHECK_ERRNO, + CPIOERR_READLINK_FAILED = 19 | CPIOERR_CHECK_ERRNO, + CPIOERR_READ_FAILED = 20 | CPIOERR_CHECK_ERRNO, + CPIOERR_COPY_FAILED = 21 | CPIOERR_CHECK_ERRNO, + CPIOERR_LSETFCON_FAILED = 22 | CPIOERR_CHECK_ERRNO, + CPIOERR_HDR_SIZE = 23, + CPIOERR_HDR_TRAILER = 24, + CPIOERR_UNKNOWN_FILETYPE= 25, + CPIOERR_MISSING_HARDLINK= 26, + CPIOERR_DIGEST_MISMATCH = 27, + CPIOERR_INTERNAL = 28, + CPIOERR_UNMAPPED_FILE = 29, + CPIOERR_ENOENT = 30, + CPIOERR_ENOTEMPTY = 31, + CPIOERR_SETCAP_FAILED = 32 | CPIOERR_CHECK_ERRNO, +}; + +/* + * Size limit for individual files in "new ascii format" cpio archives. + * The max size of the entire archive is unlimited from cpio POV, + * but subject to filesystem limitations. + */ +#define CPIO_FILESIZE_MAX UINT32_MAX + +#define CPIO_NEWC_MAGIC "070701" +#define CPIO_CRC_MAGIC "070702" +#define CPIO_TRAILER "TRAILER!!!" + +/** \ingroup payload + * Cpio archive header information. + */ +struct cpioCrcPhysicalHeader { + char magic[6]; + char inode[8]; + char mode[8]; + char uid[8]; + char gid[8]; + char nlink[8]; + char mtime[8]; + char filesize[8]; + char devMajor[8]; + char devMinor[8]; + char rdevMajor[8]; + char rdevMinor[8]; + char namesize[8]; + char checksum[8]; /* ignored !! */ +}; + +#define PHYS_HDR_SIZE 110 /* Don't depend on sizeof(struct) */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Write cpio trailer. + * @retval fsm file path and stat info + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int cpioTrailerWrite(FSM_t fsm); + +/** + * Write cpio header. + * @retval fsm file path and stat info + * @param st + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int cpioHeaderWrite(FSM_t fsm, struct stat * st); + +/** + * Read cpio header. + * @retval fsm file path and stat info + * @retval st + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int cpioHeaderRead(FSM_t fsm, struct stat * st); + +/** \ingroup payload + * Return formatted error message on payload handling failure. + * @param rc error code + * @return formatted error string + */ +/* XXX should be RPM_GNUC_INTERNAL too but build/pack.c uses */ +const char * cpioStrerror(int rc); + +#ifdef __cplusplus +} +#endif + +#endif /* H_CPIO */ diff --git a/lib/depends.c b/lib/depends.c new file mode 100644 index 0000000..69aecbb --- /dev/null +++ b/lib/depends.c @@ -0,0 +1,596 @@ +/** \ingroup rpmts + * \file lib/depends.c + */ + +#include "system.h" + +#include /* XXX rpmcliPackagesTotal */ + +#include /* rpmVersionCompare, rpmlib provides */ +#include +#include +#include +#include +#include + +#include "lib/rpmts_internal.h" +#include "lib/rpmte_internal.h" +#include "lib/misc.h" + +#include "debug.h" + +const char * const RPMVERSION = VERSION; + +const char * const rpmNAME = PACKAGE; + +const char * const rpmEVR = VERSION; + +const int rpmFLAGS = RPMSENSE_EQUAL; + +/* rpmlib provides */ +static rpmds rpmlibP = NULL; + +#undef HASHTYPE +#undef HTKEYTYPE +#undef HTDATATYPE + +#define HASHTYPE depCache +#define HTKEYTYPE const char * +#define HTDATATYPE int +#include "lib/rpmhash.H" +#include "lib/rpmhash.C" +#undef HASHTYPE +#undef HTKEYTYPE +#undef HTDATATYPE + +#define HASHTYPE intHash +#define HTKEYTYPE unsigned int +#include "rpmhash.C" +#undef HASHTYPE +#undef HASHKEYTYPE + +/** + * Add removed package instance to ordered transaction set. + * @param ts transaction set + * @param h header + * @param depends installed package of pair (or RPMAL_NOMATCH on erase) + * @return 0 on success + */ +static int removePackage(rpmts ts, Header h, rpmte depends) +{ + tsMembers tsmem = rpmtsMembers(ts); + rpmte p; + unsigned int dboffset = headerGetInstance(h); + + /* Can't remove what's not installed */ + if (dboffset == 0) return 1; + + /* Filter out duplicate erasures. */ + if (intHashHasEntry(tsmem->removedPackages, dboffset)) { + return 0; + } + + intHashAddEntry(tsmem->removedPackages, dboffset); + + if (tsmem->orderCount >= tsmem->orderAlloced) { + tsmem->orderAlloced += (tsmem->orderCount - tsmem->orderAlloced) + tsmem->delta; + tsmem->order = xrealloc(tsmem->order, sizeof(*tsmem->order) * tsmem->orderAlloced); + } + + p = rpmteNew(ts, h, TR_REMOVED, NULL, NULL); + rpmteSetDependsOn(p, depends); + + tsmem->order[tsmem->orderCount] = p; + tsmem->orderCount++; + + return 0; +} + +/* Return rpmdb iterator with removals pruned out */ +static rpmdbMatchIterator rpmtsPrunedIterator(rpmts ts, rpmDbiTagVal tag, const char * key) +{ + rpmdbMatchIterator mi = rpmtsInitIterator(ts, tag, key, 0); + tsMembers tsmem = rpmtsMembers(ts); + rpmdbPruneIterator(mi, tsmem->removedPackages); + return mi; +} + +#define skipColor(_tscolor, _color, _ocolor) \ + ((_tscolor) && (_color) && (_ocolor) && !((_color) & (_ocolor))) + +/* Add erase elements for older packages of same color (if any). */ +static void addUpgradeErasures(rpmts ts, tsMembers tsmem, rpm_color_t tscolor, + rpmte p, rpm_color_t hcolor, Header h) +{ + Header oh; + rpmdbMatchIterator mi = rpmtsInitIterator(ts, RPMDBI_NAME, rpmteN(p), 0); + + while((oh = rpmdbNextIterator(mi)) != NULL) { + /* Ignore colored packages not in our rainbow. */ + if (skipColor(tscolor, hcolor, headerGetNumber(oh, RPMTAG_HEADERCOLOR))) + continue; + + /* Skip packages that contain identical NEVR. */ + if (rpmVersionCompare(h, oh) == 0) + continue; + + removePackage(ts, oh, p); + } + mi = rpmdbFreeIterator(mi); +} + +/* Add erase elements for obsoleted packages of same color (if any). */ +static void addObsoleteErasures(rpmts ts, tsMembers tsmem, rpm_color_t tscolor, + rpmte p, rpm_color_t hcolor) +{ + rpmds obsoletes = rpmdsInit(rpmteDS(p, RPMTAG_OBSOLETENAME)); + Header oh; + + while (rpmdsNext(obsoletes) >= 0) { + const char * Name; + rpmdbMatchIterator mi = NULL; + + if ((Name = rpmdsN(obsoletes)) == NULL) + continue; /* XXX can't happen */ + + /* XXX avoid self-obsoleting packages. */ + if (rstreq(rpmteN(p), Name)) + continue; + + mi = rpmtsPrunedIterator(ts, RPMDBI_NAME, Name); + + while((oh = rpmdbNextIterator(mi)) != NULL) { + /* Ignore colored packages not in our rainbow. */ + if (skipColor(tscolor, hcolor, + headerGetNumber(oh, RPMTAG_HEADERCOLOR))) + continue; + + /* + * Rpm prior to 3.0.3 does not have versioned obsoletes. + * If no obsoletes version info is available, match all names. + */ + if (rpmdsEVR(obsoletes) == NULL + || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) { + char * ohNEVRA = headerGetAsString(oh, RPMTAG_NEVRA); + rpmlog(RPMLOG_DEBUG, " Obsoletes: %s\t\terases %s\n", + rpmdsDNEVR(obsoletes)+2, ohNEVRA); + ohNEVRA = _free(ohNEVRA); + + removePackage(ts, oh, p); + } + } + mi = rpmdbFreeIterator(mi); + } +} + +/* + * Check for previously added versions and obsoletions. + * Return index where to place this element, or -1 to skip. + */ +static int findPos(rpmts ts, rpm_color_t tscolor, Header h, int upgrade) +{ + int oc; + int obsolete = 0; + const char * arch = headerGetString(h, RPMTAG_ARCH); + const char * os = headerGetString(h, RPMTAG_OS); + rpmte p; + rpmds oldChk = rpmdsThis(h, RPMTAG_REQUIRENAME, (RPMSENSE_LESS)); + rpmds newChk = rpmdsThis(h, RPMTAG_REQUIRENAME, (RPMSENSE_GREATER)); + rpmds sameChk = rpmdsThis(h, RPMTAG_REQUIRENAME, (RPMSENSE_EQUAL)); + rpmds obsChk = rpmdsNew(h, RPMTAG_OBSOLETENAME, 0); + rpmtsi pi = rpmtsiInit(ts); + + /* XXX can't use rpmtsiNext() filter or oc will have wrong value. */ + for (oc = 0; (p = rpmtsiNext(pi, 0)) != NULL; oc++) { + rpmds thisds, obsoletes; + + /* Only added binary packages need checking */ + if (rpmteType(p) == TR_REMOVED || rpmteIsSource(p)) + continue; + + /* Skip packages obsoleted by already added packages */ + obsoletes = rpmdsInit(rpmteDS(p, RPMTAG_OBSOLETENAME)); + while (rpmdsNext(obsoletes) >= 0) { + if (rpmdsCompare(obsoletes, sameChk)) { + obsolete = 1; + oc = -1; + break; + } + } + + /* Replace already added obsoleted packages by obsoleting package */ + thisds = rpmteDS(p, RPMTAG_NAME); + rpmdsInit(obsChk); + while (rpmdsNext(obsChk) >= 0) { + if (rpmdsCompare(obsChk, thisds)) { + obsolete = 1; + break; + } + } + + if (obsolete) + break; + + if (tscolor) { + const char * parch = rpmteA(p); + const char * pos = rpmteO(p); + + if (arch == NULL || parch == NULL || os == NULL || pos == NULL) + continue; + if (!rstreq(arch, parch) || !rstreq(os, pos)) + continue; + } + + /* + * Always skip identical NEVR. + * On upgrade, if newer NEVR was previously added, skip adding older. + */ + if (rpmdsCompare(sameChk, thisds) || + (upgrade && rpmdsCompare(newChk, thisds))) { + oc = -1; + break;; + } + + /* On upgrade, if older NEVR was previously added, replace with new */ + if (upgrade && rpmdsCompare(oldChk, thisds) != 0) { + break; + } + } + + /* If we broke out of the loop early we've something to say */ + if (p != NULL && rpmIsVerbose()) { + char *nevra = headerGetAsString(h, RPMTAG_NEVRA); + const char *msg = (oc < 0) ? + _("package %s was already added, skipping %s\n") : + _("package %s was already added, replacing with %s\n"); + rpmlog(RPMLOG_WARNING, msg, rpmteNEVRA(p), nevra); + free(nevra); + } + + rpmtsiFree(pi); + rpmdsFree(oldChk); + rpmdsFree(newChk); + rpmdsFree(sameChk); + rpmdsFree(obsChk); + return oc; +} + + +int rpmtsAddInstallElement(rpmts ts, Header h, + fnpyKey key, int upgrade, rpmRelocation * relocs) +{ + tsMembers tsmem = rpmtsMembers(ts); + rpm_color_t tscolor = rpmtsColor(ts); + rpmte p = NULL; + int isSource = headerIsSource(h); + int ec = 0; + int oc = tsmem->orderCount; + + /* Check for supported payload format if it's a package */ + if (key && headerCheckPayloadFormat(h) != RPMRC_OK) { + ec = 1; + goto exit; + } + + /* Check binary packages for redundancies in the set */ + if (!isSource) { + oc = findPos(ts, tscolor, h, upgrade); + /* If we're replacing a previously added element, free the old one */ + if (oc >= 0 && oc < tsmem->orderCount) { + rpmalDel(tsmem->addedPackages, tsmem->order[oc]); + tsmem->order[oc] = rpmteFree(tsmem->order[oc]); + /* If newer NEVR was already added, we're done */ + } else if (oc < 0) { + goto exit; + } + } + + if (tsmem->addedPackages == NULL) { + tsmem->addedPackages = rpmalCreate(5, tscolor, rpmtsPrefColor(ts)); + } + + if (oc >= tsmem->orderAlloced) { + tsmem->orderAlloced += (oc - tsmem->orderAlloced) + tsmem->delta; + tsmem->order = xrealloc(tsmem->order, + tsmem->orderAlloced * sizeof(*tsmem->order)); + } + + p = rpmteNew(ts, h, TR_ADDED, key, relocs); + + tsmem->order[oc] = p; + if (oc == tsmem->orderCount) { + tsmem->orderCount++; + rpmcliPackagesTotal++; + } + + rpmalAdd(tsmem->addedPackages, p); + + /* If not upgrading or a source package, then we're done. */ + if (!(upgrade & 0x1) || isSource) + goto exit; + + /* Do lazy (readonly?) open of rpm database. */ + if (rpmtsGetRdb(ts) == NULL && rpmtsGetDBMode(ts) != -1) { + if ((ec = rpmtsOpenDB(ts, rpmtsGetDBMode(ts))) != 0) + goto exit; + } + + /* Add erasure elements for old versions and obsoletions */ + addUpgradeErasures(ts, tsmem, tscolor, p, rpmteColor(p), h); + addObsoleteErasures(ts, tsmem, tscolor, p, rpmteColor(p)); + +exit: + return ec; +} + +int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset) +{ + return removePackage(ts, h, NULL); +} + +/* Cached rpmdb provide lookup, returns 0 if satisfied, 1 otherwise */ +static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep) +{ + const char * Name = rpmdsN(dep); + const char * DNEVR = rpmdsDNEVR(dep); + int *cachedrc = NULL; + rpmdbMatchIterator mi = NULL; + Header h = NULL; + int rc = 0; + + /* See if we already looked this up */ + if (depCacheGetEntry(dcache, DNEVR, &cachedrc, NULL, NULL)) { + rc = *cachedrc; + rpmdsNotify(dep, "(cached)", rc); + return rc; + } + + /* + * See if a filename dependency is a real file in some package, + * taking file state into account: replaced, wrong colored and + * not installed files can not satisfy a dependency. + */ + if (Name[0] == '/') { + mi = rpmtsPrunedIterator(ts, RPMDBI_BASENAMES, Name); + while ((h = rpmdbNextIterator(mi)) != NULL) { + int fs = RPMFILE_STATE_MISSING; + struct rpmtd_s states; + if (headerGet(h, RPMTAG_FILESTATES, &states, HEADERGET_MINMEM)) { + rpmtdSetIndex(&states, rpmdbGetIteratorFileNum(mi)); + fs = rpmtdGetNumber(&states); + rpmtdFreeData(&states); + } + if (fs == RPMFILE_STATE_NORMAL || fs == RPMFILE_STATE_NETSHARED) { + rpmdsNotify(dep, "(db files)", rc); + break; + } + } + rpmdbFreeIterator(mi); + } + + /* Otherwise look in provides no matter what the dependency looks like */ + if (h == NULL) { + mi = rpmtsPrunedIterator(ts, RPMDBI_PROVIDENAME, Name); + while ((h = rpmdbNextIterator(mi)) != NULL) { + if (rpmdsAnyMatchesDep(h, dep, _rpmds_nopromote)) { + rpmdsNotify(dep, "(db provides)", rc); + break; + } + } + rpmdbFreeIterator(mi); + } + rc = (h != NULL) ? 0 : 1; + + /* Cache the relatively expensive rpmdb lookup results */ + depCacheAddEntry(dcache, xstrdup(DNEVR), rc); + return rc; +} + +/** + * Check dep for an unsatisfied dependency. + * @param ts transaction set + * @param dep dependency + * @return 0 if satisfied, 1 if not satisfied + */ +static int unsatisfiedDepend(rpmts ts, depCache dcache, rpmds dep) +{ + tsMembers tsmem = rpmtsMembers(ts); + int rc; + int retrying = 0; + int adding = (rpmdsInstance(dep) == 0); + rpmsenseFlags dsflags = rpmdsFlags(dep); + +retry: + rc = 0; /* assume dependency is satisfied */ + + /* + * New features in rpm packaging implicitly add versioned dependencies + * on rpmlib provides. The dependencies look like "rpmlib(YaddaYadda)". + * Check those dependencies now. + */ + if (dsflags & RPMSENSE_RPMLIB) { + static int oneshot = -1; + if (oneshot) + oneshot = rpmdsRpmlib(&rpmlibP, NULL); + + if (rpmlibP != NULL && rpmdsSearch(rpmlibP, dep) >= 0) { + rpmdsNotify(dep, "(rpmlib provides)", rc); + goto exit; + } + goto unsatisfied; + } + + /* Dont look at pre-requisites of already installed packages */ + if (!adding && isInstallPreReq(dsflags) && !isErasePreReq(dsflags)) + goto exit; + + /* Pretrans dependencies can't be satisfied by added packages. */ + if (!(dsflags & RPMSENSE_PRETRANS)) { + rpmte match = rpmalSatisfiesDepend(tsmem->addedPackages, dep); + + /* + * Handle definitive matches within the added package set. + * Self-obsoletes and -conflicts fall through here as we need to + * check for possible other matches in the rpmdb. + */ + if (match) { + rpmTagVal dtag = rpmdsTagN(dep); + /* Requires match, look no further */ + if (dtag == RPMTAG_REQUIRENAME) + goto exit; + + /* Conflicts/obsoletes match on another package, look no further */ + if (rpmteDS(match, dtag) != dep) + goto exit; + } + } + + /* See if the rpmdb provides it */ + if (rpmdbProvides(ts, dcache, dep) == 0) + goto exit; + + /* Search for an unsatisfied dependency. */ + if (adding && !retrying && !(dsflags & RPMSENSE_PRETRANS)) { + int xx = rpmtsSolve(ts, dep); + if (xx == 0) + goto exit; + if (xx == -1) { + retrying = 1; + goto retry; + } + } + +unsatisfied: + rc = 1; /* dependency is unsatisfied */ + rpmdsNotify(dep, NULL, rc); + +exit: + return rc; +} + +/* Check a dependency set for problems */ +static void checkDS(rpmts ts, depCache dcache, rpmte te, + const char * pkgNEVRA, rpmds ds, + const char * depName, rpm_color_t tscolor) +{ + rpm_color_t dscolor; + /* require-problems are unsatisfied, others appear "satisfied" */ + int is_problem = (rpmdsTagN(ds) == RPMTAG_REQUIRENAME); + + ds = rpmdsInit(ds); + while (rpmdsNext(ds) >= 0) { + /* Filter out dependencies that came along for the ride. */ + if (depName != NULL && !rstreq(depName, rpmdsN(ds))) + continue; + + /* Ignore colored dependencies not in our rainbow. */ + dscolor = rpmdsColor(ds); + if (tscolor && dscolor && !(tscolor & dscolor)) + continue; + + if (unsatisfiedDepend(ts, dcache, ds) == is_problem) + rpmteAddDepProblem(te, pkgNEVRA, ds, NULL); + } +} + +/* Check a given dependency type against installed packages */ +static void checkInstDeps(rpmts ts, depCache dcache, rpmte te, + rpmTag depTag, const char *dep) +{ + Header h; + rpmdbMatchIterator mi = rpmtsPrunedIterator(ts, depTag, dep); + + while ((h = rpmdbNextIterator(mi)) != NULL) { + char * pkgNEVRA = headerGetAsString(h, RPMTAG_NEVRA); + rpmds ds = rpmdsNew(h, depTag, 0); + + checkDS(ts, dcache, te, pkgNEVRA, ds, dep, 0); + + ds = rpmdsFree(ds); + pkgNEVRA = _free(pkgNEVRA); + } + rpmdbFreeIterator(mi); +} + +int rpmtsCheck(rpmts ts) +{ + rpm_color_t tscolor = rpmtsColor(ts); + rpmtsi pi = NULL; rpmte p; + int closeatexit = 0; + int rc = 0; + depCache dcache = NULL; + + (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_CHECK), 0); + + /* Do lazy, readonly, open of rpm database. */ + if (rpmtsGetRdb(ts) == NULL && rpmtsGetDBMode(ts) != -1) { + if ((rc = rpmtsOpenDB(ts, rpmtsGetDBMode(ts))) != 0) + goto exit; + closeatexit = 1; + } + + /* XXX FIXME: figure some kind of heuristic for the cache size */ + dcache = depCacheCreate(5001, hashFunctionString, strcmp, + (depCacheFreeKey)rfree, NULL); + + /* + * Look at all of the added packages and make sure their dependencies + * are satisfied. + */ + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, TR_ADDED)) != NULL) { + rpmds provides = rpmdsInit(rpmteDS(p, RPMTAG_PROVIDENAME)); + + rpmlog(RPMLOG_DEBUG, "========== +++ %s %s/%s 0x%x\n", + rpmteNEVR(p), rpmteA(p), rpmteO(p), rpmteColor(p)); + + checkDS(ts, dcache, p, rpmteNEVRA(p), rpmteDS(p, RPMTAG_REQUIRENAME), + NULL, tscolor); + checkDS(ts, dcache, p, rpmteNEVRA(p), rpmteDS(p, RPMTAG_CONFLICTNAME), + NULL, tscolor); + + /* Check provides against conflicts in installed packages. */ + while (rpmdsNext(provides) >= 0) { + checkInstDeps(ts, dcache, p, RPMTAG_CONFLICTNAME, rpmdsN(provides)); + } + + /* Skip obsoletion checks for source packages (ie build) */ + if (rpmteIsSource(p)) + continue; + + /* Check package name (not provides!) against installed obsoletes */ + checkInstDeps(ts, dcache, p, RPMTAG_OBSOLETENAME, rpmteN(p)); + } + pi = rpmtsiFree(pi); + + /* + * Look at the removed packages and make sure they aren't critical. + */ + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, TR_REMOVED)) != NULL) { + rpmds provides = rpmdsInit(rpmteDS(p, RPMTAG_PROVIDENAME)); + rpmfi fi = rpmfiInit(rpmteFI(p), 0); + + rpmlog(RPMLOG_DEBUG, "========== --- %s %s/%s 0x%x\n", + rpmteNEVR(p), rpmteA(p), rpmteO(p), rpmteColor(p)); + + /* Check provides and filenames against installed dependencies. */ + while (rpmdsNext(provides) >= 0) { + checkInstDeps(ts, dcache, p, RPMTAG_REQUIRENAME, rpmdsN(provides)); + } + + while (rpmfiNext(fi) >= 0) { + checkInstDeps(ts, dcache, p, RPMTAG_REQUIRENAME, rpmfiFN(fi)); + } + } + pi = rpmtsiFree(pi); + +exit: + depCacheFree(dcache); + + (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_CHECK), 0); + + if (closeatexit) + (void) rpmtsCloseDB(ts); + return rc; +} diff --git a/lib/formats.c b/lib/formats.c new file mode 100644 index 0000000..7ce4608 --- /dev/null +++ b/lib/formats.c @@ -0,0 +1,705 @@ +/** \ingroup header + * \file lib/formats.c + */ + +#include "system.h" + +#include + +#include +#include +#include +#include +#include +#include + +#include "rpmio/digest.h" +#include "lib/manifest.h" +#include "lib/misc.h" + +#include "debug.h" + +/** \ingroup header + * Define header tag output formats. + */ + +struct headerFormatFunc_s { + rpmtdFormats fmt; /*!< Value of extension */ + const char *name; /*!< Name of extension. */ + headerTagFormatFunction func; /*!< Pointer to formatter function. */ +}; + +/** + * barebones string representation with no extra formatting + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * stringFormat(rpmtd td, char *formatPrefix) +{ + const char *str = NULL; + char *val = NULL, *buf = NULL; + + switch (rpmtdClass(td)) { + case RPM_NUMERIC_CLASS: + strcat(formatPrefix, PRIu64); + rasprintf(&val, formatPrefix, rpmtdGetNumber(td)); + break; + case RPM_STRING_CLASS: + str = rpmtdGetString(td); + strcat(formatPrefix, "s"); + rasprintf(&val, formatPrefix, str); + break; + case RPM_BINARY_CLASS: + buf = pgpHexStr(td->data, td->count); + strcat(formatPrefix, "s"); + rasprintf(&val, formatPrefix, buf); + free(buf); + break; + default: + val = xstrdup("(unknown type)"); + break; + } + return val; +} + +static char * numFormat(rpmtd td, char * formatPrefix, char *format) +{ + char * val = NULL; + + if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { + val = xstrdup(_("(not a number)")); + } else { + strcat(formatPrefix, format); + rasprintf(&val, formatPrefix, rpmtdGetNumber(td)); + } + + return val; +} +/** + * octalFormat. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * octalFormat(rpmtd td, char * formatPrefix) +{ + return numFormat(td, formatPrefix, "o"); +} + +/** + * hexFormat. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * hexFormat(rpmtd td, char * formatPrefix) +{ + return numFormat(td, formatPrefix, "x"); +} + +/** + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * realDateFormat(rpmtd td, char * formatPrefix, + const char * strftimeFormat) +{ + char * val = NULL; + + if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { + val = xstrdup(_("(not a number)")); + } else { + struct tm * tstruct; + char buf[50]; + time_t dateint = rpmtdGetNumber(td); + tstruct = localtime(&dateint); + + strcat(formatPrefix, "s"); + + buf[0] = '\0'; + if (tstruct) + (void) strftime(buf, sizeof(buf) - 1, strftimeFormat, tstruct); + rasprintf(&val, formatPrefix, buf); + } + + return val; +} + +/** + * Format a date. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * dateFormat(rpmtd td, char * formatPrefix) +{ + return realDateFormat(td, formatPrefix, _("%c")); +} + +/** + * Format a day. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * dayFormat(rpmtd td, char * formatPrefix) +{ + return realDateFormat(td, formatPrefix, _("%a %b %d %Y")); +} + +/** + * Return shell escape formatted data. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * shescapeFormat(rpmtd td, char * formatPrefix) +{ + char * result = NULL, * dst, * src; + + if (rpmtdClass(td) == RPM_NUMERIC_CLASS) { + strcat(formatPrefix, PRIu64); + rasprintf(&result, formatPrefix, rpmtdGetNumber(td)); + } else { + char *buf = NULL; + strcat(formatPrefix, "s"); + rasprintf(&buf, formatPrefix, rpmtdGetString(td)); + + result = dst = xmalloc(strlen(buf) * 4 + 3); + *dst++ = '\''; + for (src = buf; *src != '\0'; src++) { + if (*src == '\'') { + *dst++ = '\''; + *dst++ = '\\'; + *dst++ = '\''; + *dst++ = '\''; + } else { + *dst++ = *src; + } + } + *dst++ = '\''; + *dst = '\0'; + free(buf); + } + + return result; +} + + +/** + * Identify type of trigger. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * triggertypeFormat(rpmtd td, char * formatPrefix) +{ + char * val; + + if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { + val = xstrdup(_("(not a number)")); + } else { + uint64_t item = rpmtdGetNumber(td); + if (item & RPMSENSE_TRIGGERPREIN) + val = xstrdup("prein"); + else if (item & RPMSENSE_TRIGGERIN) + val = xstrdup("in"); + else if (item & RPMSENSE_TRIGGERUN) + val = xstrdup("un"); + else if (item & RPMSENSE_TRIGGERPOSTUN) + val = xstrdup("postun"); + else + val = xstrdup(""); + } + return val; +} + +/** + * Identify type of dependency. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * deptypeFormat(rpmtd td, char * formatPrefix) +{ + char *val = NULL; + if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { + val = xstrdup(_("(not a number)")); + } else { + ARGV_t sdeps = NULL; + uint64_t item = rpmtdGetNumber(td); + + if (item & RPMSENSE_SCRIPT_PRE) + argvAdd(&sdeps, "pre"); + if (item & RPMSENSE_SCRIPT_POST) + argvAdd(&sdeps, "post"); + if (item & RPMSENSE_SCRIPT_PREUN) + argvAdd(&sdeps, "preun"); + if (item & RPMSENSE_SCRIPT_POSTUN) + argvAdd(&sdeps, "postun"); + if (item & RPMSENSE_SCRIPT_VERIFY) + argvAdd(&sdeps, "verify"); + if (item & RPMSENSE_INTERP) + argvAdd(&sdeps, "interp"); + if (item & RPMSENSE_RPMLIB) + argvAdd(&sdeps, "rpmlib"); + if ((item & RPMSENSE_FIND_REQUIRES) || (item & RPMSENSE_FIND_PROVIDES)) + argvAdd(&sdeps, "auto"); + if (item & RPMSENSE_PREREQ) + argvAdd(&sdeps, "prereq"); + if (item & RPMSENSE_PRETRANS) + argvAdd(&sdeps, "pretrans"); + if (item & RPMSENSE_POSTTRANS) + argvAdd(&sdeps, "posttrans"); + + if (sdeps) { + val = argvJoin(sdeps, ","); + } else { + val = xstrdup("manual"); + } + + argvFree(sdeps); + } + return val; +} + +/** + * Format file permissions for display. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * permsFormat(rpmtd td, char * formatPrefix) +{ + char * val = NULL; + char * buf; + + if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { + val = xstrdup(_("(not a number)")); + } else { + strcat(formatPrefix, "s"); + buf = rpmPermsString(rpmtdGetNumber(td)); + rasprintf(&val, formatPrefix, buf); + buf = _free(buf); + } + + return val; +} + +/** + * Format file flags for display. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * fflagsFormat(rpmtd td, char * formatPrefix) +{ + char * val = NULL; + + if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { + val = xstrdup(_("(not a number)")); + } else { + char *buf = rpmFFlagsString(rpmtdGetNumber(td), ""); + strcat(formatPrefix, "s"); + rasprintf(&val, formatPrefix, buf); + free(buf); + } + + return val; +} + +/** + * Wrap a pubkey in ascii armor for display. + * @todo Permit selectable display formats (i.e. binary). + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * armorFormat(rpmtd td, char * formatPrefix) +{ + const char * enc; + const unsigned char * s; + unsigned char * bs = NULL; + char *val; + size_t ns; + int atype; + + switch (rpmtdType(td)) { + case RPM_BIN_TYPE: + s = td->data; + /* XXX HACK ALERT: element field abused as no. bytes of binary data. */ + ns = td->count; + atype = PGPARMOR_SIGNATURE; /* XXX check pkt for signature */ + break; + case RPM_STRING_TYPE: + case RPM_STRING_ARRAY_TYPE: + enc = rpmtdGetString(td); + if (b64decode(enc, (void **)&bs, &ns)) + return xstrdup(_("(not base64)")); + s = bs; + atype = PGPARMOR_PUBKEY; /* XXX check pkt for pubkey */ + break; + case RPM_NULL_TYPE: + case RPM_CHAR_TYPE: + case RPM_INT8_TYPE: + case RPM_INT16_TYPE: + case RPM_INT32_TYPE: + case RPM_INT64_TYPE: + case RPM_I18NSTRING_TYPE: + default: + return xstrdup(_("(invalid type)")); + break; + } + + /* XXX this doesn't use padding directly, assumes enough slop in retval. */ + val = pgpArmorWrap(atype, s, ns); + if (atype == PGPARMOR_PUBKEY) { + free(bs); + } + return val; +} + +/** + * Encode binary data in base64 for display. + * @todo Permit selectable display formats (i.e. binary). + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * base64Format(rpmtd td, char * formatPrefix) +{ + char * val = NULL; + + if (rpmtdType(td) != RPM_BIN_TYPE) { + val = xstrdup(_("(not a blob)")); + } else { + char * enc; + if ((enc = b64encode(td->data, td->count, -1)) != NULL) { + strcat(formatPrefix, "s"); + rasprintf(&val, formatPrefix, enc ? enc : ""); + free(enc); + } + } + + return val; +} + +/** + * Wrap tag data in simple header xml markup. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * xmlFormat(rpmtd td, char * formatPrefix) +{ + const char *xtag = NULL; + char *val = NULL; + char *s = NULL; + rpmtdFormats fmt = RPMTD_FORMAT_STRING; + + switch (rpmtdClass(td)) { + case RPM_STRING_CLASS: + xtag = "string"; + break; + case RPM_BINARY_CLASS: + fmt = RPMTD_FORMAT_BASE64; + xtag = "base64"; + break; + case RPM_NUMERIC_CLASS: + xtag = "integer"; + break; + case RPM_NULL_TYPE: + default: + return xstrdup(_("(invalid xml type)")); + break; + } + + /* XXX TODO: handle errors */ + s = rpmtdFormat(td, fmt, NULL); + + if (s[0] == '\0') { + val = rstrscat(NULL, "\t<", xtag, "/>", NULL); + } else { + char *new_s = NULL; + size_t i, s_size = strlen(s); + + for (i=0; i': rstrcat(&new_s, ">"); break; + case '&': rstrcat(&new_s, "&"); break; + default: { + char c[2] = " "; + *c = s[i]; + rstrcat(&new_s, c); + break; + } + } + } + + val = rstrscat(NULL, "\t<", xtag, ">", new_s, "", NULL); + free(new_s); + } + free(s); + + strcat(formatPrefix, "s"); + return val; +} + +/** + * Display signature fingerprint and time. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * pgpsigFormat(rpmtd td, char * formatPrefix) +{ + char * val, * t; + + if (rpmtdType(td) != RPM_BIN_TYPE) { + val = xstrdup(_("(not a blob)")); + } else { + const uint8_t * pkt = td->data; + size_t pktlen = 0; + unsigned int v = *pkt; + pgpTag tag = 0; + size_t plen; + size_t hlen = 0; + + if (v & 0x80) { + if (v & 0x40) { + tag = (v & 0x3f); + plen = pgpLen(pkt+1, &hlen); + } else { + tag = (v >> 2) & 0xf; + plen = (1 << (v & 0x3)); + hlen = pgpGrab(pkt+1, plen); + } + + pktlen = 1 + plen + hlen; + } + + if (pktlen == 0 || tag != PGPTAG_SIGNATURE) { + val = xstrdup(_("(not an OpenPGP signature)")); + } else { + pgpDig dig = pgpNewDig(); + pgpDigParams sigp = &dig->signature; + size_t nb = 0; + char *tempstr = NULL; + + (void) pgpPrtPkts(pkt, pktlen, dig, 0); + + val = NULL; + again: + nb += 100; + val = t = xrealloc(val, nb + 1); + + t = stpcpy(t, pgpValString(PGPVAL_PUBKEYALGO, sigp->pubkey_algo)); + if (t + 5 >= val + nb) + goto again; + *t++ = '/'; + t = stpcpy(t, pgpValString(PGPVAL_HASHALGO, sigp->hash_algo)); + if (t + strlen (", ") + 1 >= val + nb) + goto again; + + t = stpcpy(t, ", "); + + /* this is important if sizeof(int32_t) ! sizeof(time_t) */ + { time_t dateint = pgpGrab(sigp->time, sizeof(sigp->time)); + struct tm * tstruct = localtime(&dateint); + if (tstruct) + (void) strftime(t, (nb - (t - val)), "%c", tstruct); + } + t += strlen(t); + if (t + strlen (", Key ID ") + 1 >= val + nb) + goto again; + t = stpcpy(t, ", Key ID "); + tempstr = pgpHexStr(sigp->signid, sizeof(sigp->signid)); + if (t + strlen (tempstr) > val + nb) + goto again; + t = stpcpy(t, tempstr); + free(tempstr); + + dig = pgpFreeDig(dig); + } + } + + return val; +} + +/** + * Format dependency flags for display. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * depflagsFormat(rpmtd td, char * formatPrefix) +{ + char * val = NULL; + + if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { + val = xstrdup(_("(not a number)")); + } else { + uint64_t anint = rpmtdGetNumber(td); + char buf[10]; + buf[0] = '\0'; + + if (anint & RPMSENSE_LESS) + strcat(buf, "<"); + if (anint & RPMSENSE_GREATER) + strcat(buf, ">"); + if (anint & RPMSENSE_EQUAL) + strcat(buf, "="); + + strcat(formatPrefix, "s"); + rasprintf(&val, formatPrefix, buf); + } + + return val; +} + +/** + * Return tag container array size. + * @param td tag data container + * @param formatPrefix sprintf format string + * @return formatted string + */ +static char * arraysizeFormat(rpmtd td, char * formatPrefix) +{ + char *val = NULL; + strcat(formatPrefix, "u"); + rasprintf(&val, formatPrefix, rpmtdCount(td)); + return val; +} + +static char * fstateFormat(rpmtd td, char * formatPrefix) +{ + char * val = NULL; + + if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { + val = xstrdup(_("(not a number)")); + } else { + const char * str; + rpmfileState fstate = rpmtdGetNumber(td); + switch (fstate) { + case RPMFILE_STATE_NORMAL: + str = _("normal"); + break; + case RPMFILE_STATE_REPLACED: + str = _("replaced"); + break; + case RPMFILE_STATE_NOTINSTALLED: + str = _("not installed"); + break; + case RPMFILE_STATE_NETSHARED: + str = _("net shared"); + break; + case RPMFILE_STATE_WRONGCOLOR: + str = _("wrong color"); + break; + case RPMFILE_STATE_MISSING: + str = _("missing"); + break; + default: + str = _("(unknown)"); + break; + } + + strcat(formatPrefix, "s"); + rasprintf(&val, formatPrefix, str); + } + return val; +} + +static char * verifyFlags(rpmtd td, char * formatPrefix, const char *pad) +{ + char * val = NULL; + + if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { + val = xstrdup(_("(not a number)")); + } else { + strcat(formatPrefix, "s"); + char *buf = rpmVerifyString(rpmtdGetNumber(td), pad); + rasprintf(&val, formatPrefix, buf); + buf = _free(buf); + } + return val; +} + +static char * vflagsFormat(rpmtd td, char * formatPrefix) +{ + return verifyFlags(td, formatPrefix, ""); +} + +static char * fstatusFormat(rpmtd td, char * formatPrefix) +{ + return verifyFlags(td, formatPrefix, "."); +} + +static char * expandFormat(rpmtd td, char * formatPrefix) +{ + char *val = NULL; + if (rpmtdClass(td) != RPM_STRING_CLASS) { + val = xstrdup(_("(not a string)")); + } else { + val = rpmExpand(td->data, NULL); + } + strcat(formatPrefix, "s"); + return val; +} + +static const struct headerFormatFunc_s rpmHeaderFormats[] = { + { RPMTD_FORMAT_STRING, "string", stringFormat }, + { RPMTD_FORMAT_ARMOR, "armor", armorFormat }, + { RPMTD_FORMAT_BASE64, "base64", base64Format }, + { RPMTD_FORMAT_PGPSIG, "pgpsig", pgpsigFormat }, + { RPMTD_FORMAT_DEPFLAGS, "depflags", depflagsFormat }, + { RPMTD_FORMAT_DEPTYPE, "deptype", deptypeFormat }, + { RPMTD_FORMAT_FFLAGS, "fflags", fflagsFormat }, + { RPMTD_FORMAT_PERMS, "perms", permsFormat }, + { RPMTD_FORMAT_PERMS, "permissions", permsFormat }, + { RPMTD_FORMAT_TRIGGERTYPE, "triggertype", triggertypeFormat }, + { RPMTD_FORMAT_XML, "xml", xmlFormat }, + { RPMTD_FORMAT_OCTAL, "octal", octalFormat }, + { RPMTD_FORMAT_HEX, "hex", hexFormat }, + { RPMTD_FORMAT_DATE, "date", dateFormat }, + { RPMTD_FORMAT_DAY, "day", dayFormat }, + { RPMTD_FORMAT_SHESCAPE, "shescape", shescapeFormat }, + { RPMTD_FORMAT_ARRAYSIZE, "arraysize", arraysizeFormat }, + { RPMTD_FORMAT_FSTATE, "fstate", fstateFormat }, + { RPMTD_FORMAT_VFLAGS, "vflags", vflagsFormat }, + { RPMTD_FORMAT_EXPAND, "expand", expandFormat }, + { RPMTD_FORMAT_FSTATUS, "fstatus", fstatusFormat }, + { -1, NULL, NULL } +}; + +headerTagFormatFunction rpmHeaderFormatFuncByName(const char *fmt) +{ + const struct headerFormatFunc_s * ext; + headerTagFormatFunction func = NULL; + + for (ext = rpmHeaderFormats; ext->name != NULL; ext++) { + if (rstreq(ext->name, fmt)) { + func = ext->func; + break; + } + } + return func; +} + +headerTagFormatFunction rpmHeaderFormatFuncByValue(rpmtdFormats fmt) +{ + const struct headerFormatFunc_s * ext; + headerTagFormatFunction func = NULL; + + for (ext = rpmHeaderFormats; ext->name != NULL; ext++) { + if (fmt == ext->fmt) { + func = ext->func; + break; + } + } + return func; +} + diff --git a/lib/fprint.c b/lib/fprint.c new file mode 100644 index 0000000..2289224 --- /dev/null +++ b/lib/fprint.c @@ -0,0 +1,365 @@ +/** + * \file lib/fprint.c + */ + +#include "system.h" + +#include /* for rpmCleanPath */ + +#include "lib/rpmdb_internal.h" +#include "lib/rpmfi_internal.h" +#include "lib/fprint.h" +#include "lib/misc.h" +#include "debug.h" +#include + +/* Create new hash table type rpmFpEntryHash */ +#include "lib/rpmhash.C" + +#undef HASHTYPE +#undef HTKEYTYPE +#undef HTDATATYPE +#define HASHTYPE rpmFpEntryHash +#define HTKEYTYPE const char * +#define HTDATATYPE const struct fprintCacheEntry_s * +#include "lib/rpmhash.C" + +fingerPrintCache fpCacheCreate(int sizeHint) +{ + fingerPrintCache fpc; + + fpc = xmalloc(sizeof(*fpc)); + fpc->ht = rpmFpEntryHashCreate(sizeHint, hashFunctionString, strcmp, + (rpmFpEntryHashFreeKey)free, + (rpmFpEntryHashFreeData)free); + return fpc; +} + +fingerPrintCache fpCacheFree(fingerPrintCache cache) +{ + if (cache) { + cache->ht = rpmFpEntryHashFree(cache->ht); + free(cache); + } + return NULL; +} + +/** + * Find directory name entry in cache. + * @param cache pointer to fingerprint cache + * @param dirName string to locate in cache + * @return pointer to directory name entry (or NULL if not found). + */ +static const struct fprintCacheEntry_s * cacheContainsDirectory( + fingerPrintCache cache, + const char * dirName) +{ + const struct fprintCacheEntry_s ** data; + + if (rpmFpEntryHashGetEntry(cache->ht, dirName, &data, NULL, NULL)) + return data[0]; + return NULL; +} + +/** + * Return finger print of a file path. + * @param cache pointer to fingerprint cache + * @param dirName leading directory name of path + * @param baseName file name of path + * @param scareMemory + * @return pointer to the finger print associated with a file path. + */ +fingerPrint fpLookup(fingerPrintCache cache, + const char * dirName, const char * baseName, int scareMemory) +{ + char dir[PATH_MAX]; + const char * cleanDirName; + size_t cdnl; + char * end; /* points to the '\0' at the end of "buf" */ + fingerPrint fp; + struct stat sb; + char *buf = NULL; + char *cdnbuf = NULL; + const struct fprintCacheEntry_s * cacheHit; + + /* assert(*dirName == '/' || !scareMemory); */ + + /* XXX WATCHOUT: fp.subDir is set below from relocated dirName arg */ + cleanDirName = dirName; + cdnl = strlen(cleanDirName); + + if (*cleanDirName == '/') { + if (!scareMemory) { + cdnbuf = xstrdup(dirName); + char trailingslash = (cdnbuf[strlen(cdnbuf)-1] == '/'); + cdnbuf = rpmCleanPath(cdnbuf); + if (trailingslash) { + cdnbuf = rstrcat(&cdnbuf, "/"); + } + cleanDirName = cdnbuf; + cdnl = strlen(cleanDirName); + } + } else { + scareMemory = 0; /* XXX causes memory leak */ + + /* Using realpath on the arg isn't correct if the arg is a symlink, + * especially if the symlink is a dangling link. What we + * do instead is use realpath() on `.' and then append arg to + * the result. + */ + + /* if the current directory doesn't exist, we might fail. + oh well. likewise if it's too long. */ + dir[0] = '\0'; + if (realpath(".", dir) != NULL) { + end = dir + strlen(dir); + if (end[-1] != '/') *end++ = '/'; + end = stpncpy(end, cleanDirName, sizeof(dir) - (end - dir)); + *end = '\0'; + (void)rpmCleanPath(dir); /* XXX possible /../ from concatenation */ + end = dir + strlen(dir); + if (end[-1] != '/') *end++ = '/'; + *end = '\0'; + cleanDirName = dir; + cdnl = end - dir; + } + } + fp.entry = NULL; + fp.subDir = NULL; + fp.baseName = NULL; + if (cleanDirName == NULL) goto exit; /* XXX can't happen */ + + buf = xstrdup(cleanDirName); + end = buf + cdnl; + + /* no need to pay attention to that extra little / at the end of dirName */ + if (buf[1] && end[-1] == '/') { + end--; + *end = '\0'; + } + + while (1) { + + /* as we're stating paths here, we want to follow symlinks */ + + cacheHit = cacheContainsDirectory(cache, (*buf != '\0' ? buf : "/")); + if (cacheHit != NULL) { + fp.entry = cacheHit; + } else if (!stat((*buf != '\0' ? buf : "/"), &sb)) { + struct fprintCacheEntry_s * newEntry = xmalloc(sizeof(* newEntry)); + + newEntry->ino = sb.st_ino; + newEntry->dev = sb.st_dev; + newEntry->dirName = xstrdup((*buf != '\0' ? buf : "/")); + fp.entry = newEntry; + + rpmFpEntryHashAddEntry(cache->ht, newEntry->dirName, fp.entry); + } + + if (fp.entry) { + fp.subDir = cleanDirName + (end - buf); + if (fp.subDir[0] == '/' && fp.subDir[1] != '\0') + fp.subDir++; + if (fp.subDir[0] == '\0' || + /* XXX don't bother saving '/' as subdir */ + (fp.subDir[0] == '/' && fp.subDir[1] == '\0')) + fp.subDir = NULL; + fp.baseName = baseName; + if (!scareMemory && fp.subDir != NULL) + fp.subDir = xstrdup(fp.subDir); + /* FIX: fp.entry.{dirName,dev,ino} undef @*/ + goto exit; + } + + /* stat of '/' just failed! */ + if (end == buf + 1) + abort(); + + end--; + while ((end > buf) && *end != '/') end--; + if (end == buf) /* back to stat'ing just '/' */ + end++; + + *end = '\0'; + } + +exit: + free(buf); + free(cdnbuf); + /* FIX: fp.entry.{dirName,dev,ino} undef @*/ + return fp; +} + +unsigned int fpHashFunction(const fingerPrint * fp) +{ + unsigned int hash = 0; + int j; + + hash = hashFunctionString(fp->baseName); + if (fp->subDir) hash ^= hashFunctionString(fp->subDir); + + hash ^= ((unsigned)fp->entry->dev); + for (j=0; j<4; j++) hash ^= ((fp->entry->ino >> (8*j)) & 0xFF) << ((3-j)*8); + + return hash; +} + +int fpEqual(const fingerPrint * k1, const fingerPrint * k2) +{ + /* If the addresses are the same, so are the values. */ + if (k1 == k2) + return 0; + + /* Otherwise, compare fingerprints by value. */ + if (FP_EQUAL(*k1, *k2)) + return 0; + return 1; + +} + +void fpLookupList(fingerPrintCache cache, const char ** dirNames, + const char ** baseNames, const uint32_t * dirIndexes, + int fileCount, fingerPrint * fpList) +{ + int i; + + for (i = 0; i < fileCount; i++) { + /* If this is in the same directory as the last file, don't bother + redoing all of this work */ + if (i > 0 && dirIndexes[i - 1] == dirIndexes[i]) { + fpList[i].entry = fpList[i - 1].entry; + fpList[i].subDir = fpList[i - 1].subDir; + fpList[i].baseName = baseNames[i]; + } else { + fpList[i] = fpLookup(cache, dirNames[dirIndexes[i]], baseNames[i], + 1); + } + } +} + +void fpLookupSubdir(rpmFpHash symlinks, rpmFpHash fphash, fingerPrintCache fpc, rpmte p, int filenr) +{ + rpmfi fi = rpmteFI(p); + struct fingerPrint_s current_fp; + char *endsubdir, *endbasename, *currentsubdir; + size_t lensubDir; + + struct rpmffi_s * recs; + int numRecs; + int i, fiFX; + fingerPrint *fp = rpmfiFpsIndex(fi, filenr); + int symlinkcount = 0; + struct rpmffi_s ffi = { p, filenr}; + + if (fp->subDir == NULL) { + rpmFpHashAddEntry(fphash, fp, ffi); + return; + } + + lensubDir = strlen(fp->subDir); + current_fp = *fp; + currentsubdir = xstrdup(fp->subDir); + + /* Set baseName to the upper most dir */ + current_fp.baseName = endbasename = currentsubdir; + while (*endbasename != '/' && endbasename < currentsubdir + lensubDir - 1) + endbasename++; + *endbasename = '\0'; + + current_fp.subDir = endsubdir = NULL; // no subDir for now + + while (endbasename < currentsubdir + lensubDir - 1) { + char found; + found = 0; + + rpmFpHashGetEntry(symlinks, ¤t_fp, + &recs, &numRecs, NULL); + + for (i=0; idirName, + current_fp.subDir ? "/" : "", + current_fp.subDir ? current_fp.subDir : "", + "/", NULL); + } + rstrscat(&link, linktarget, "/", NULL); + if (strlen(endbasename+1)) { + rstrscat(&link, endbasename+1, "/", NULL); + } + + *fp = fpLookup(fpc, link, fp->baseName, 0); + + free(link); + free(currentsubdir); + symlinkcount++; + + /* setup current_fp for the new path */ + found = 1; + current_fp = *fp; + if (fp->subDir == NULL) { + /* directory exists - no need to look for symlinks */ + rpmFpHashAddEntry(fphash, fp, ffi); + return; + } + lensubDir = strlen(fp->subDir); + currentsubdir = xstrdup(fp->subDir); + current_fp.subDir = endsubdir = NULL; // no subDir for now + + /* Set baseName to the upper most dir */ + current_fp.baseName = currentsubdir; + endbasename = currentsubdir; + while (*endbasename != '/' && + endbasename < currentsubdir + lensubDir - 1) + endbasename++; + *endbasename = '\0'; + break; + + } + rpmfiSetFX(foundfi, fiFX); + } + if (symlinkcount>50) { + // found too many symlinks in the path + // most likley a symlink cicle + // giving up + // TODO warning/error + break; + } + if (found) { + continue; // restart loop after symlink + } + + if (current_fp.subDir == NULL) { + /* after first round set former baseName as subDir */ + current_fp.subDir = currentsubdir; + } else { + *endsubdir = '/'; // rejoin the former baseName with subDir + } + endsubdir = endbasename; + + /* set baseName to the next lower dir */ + endbasename++; + while (*endbasename != '\0' && *endbasename != '/') + endbasename++; + *endbasename = '\0'; + current_fp.baseName = endsubdir+1; + + } + free(currentsubdir); + rpmFpHashAddEntry(fphash, fp, ffi); + +} diff --git a/lib/fprint.h b/lib/fprint.h new file mode 100644 index 0000000..f2ea6f5 --- /dev/null +++ b/lib/fprint.h @@ -0,0 +1,170 @@ +#ifndef H_FINGERPRINT +#define H_FINGERPRINT + +/** \ingroup rpmtrans + * \file lib/fprint.h + * Identify a file name path by a unique "finger print". + */ + +#include +#include +#include "lib/rpmdb_internal.h" + +/** + */ +typedef struct fprintCache_s * fingerPrintCache; + +/** + * @todo Convert to pointer and make abstract. + */ +typedef struct fingerPrint_s fingerPrint; + +/** + * Associates a trailing sub-directory and final base name with an existing + * directory finger print. + */ +struct fingerPrint_s { +/*! directory finger print entry (the directory path is stat(2)-able */ + const struct fprintCacheEntry_s * entry; +/*! trailing sub-directory path (directories that are not stat(2)-able */ +const char * subDir; +const char * baseName; /*!< file base name */ +}; + +/* Create new hash table data type */ +#define HASHTYPE rpmFpEntryHash +#define HTKEYTYPE const char * +#define HTDATATYPE const struct fprintCacheEntry_s * +#include "lib/rpmhash.H" + +/** + * Finger print cache entry. + * This is really a directory and symlink cache. We don't differentiate between + * the two. We can prepopulate it, which allows us to easily conduct "fake" + * installs of a system w/o actually mounting filesystems. + */ +struct fprintCacheEntry_s { + const char * dirName; /*!< path to existing directory */ + dev_t dev; /*!< stat(2) device number */ + ino_t ino; /*!< stat(2) inode number */ +}; + +/** + * Finger print cache. + */ +struct fprintCache_s { + rpmFpEntryHash ht; /*!< hashed by dirName */ +}; + +/* Create new hash table data type */ + +struct rpmffi_s { + rpmte p; + int fileno; +}; + +#undef HASHTYPE +#undef HTKEYTYPE +#undef HTDATATYPE + +#define HASHTYPE rpmFpHash +#define HTKEYTYPE const fingerPrint * +#define HTDATATYPE struct rpmffi_s +#include "lib/rpmhash.H" + +/** */ +#define FP_ENTRY_EQUAL(a, b) (((a)->dev == (b)->dev) && ((a)->ino == (b)->ino)) + +/** */ +#define FP_EQUAL(a, b) ( \ + FP_ENTRY_EQUAL((a).entry, (b).entry) && \ + !strcmp((a).baseName, (b).baseName) && ( \ + ((a).subDir == (b).subDir) || \ + ((a).subDir && (b).subDir && !strcmp((a).subDir, (b).subDir)) \ + ) \ + ) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Create finger print cache. + * @param sizeHint number of elements expected + * @return pointer to initialized fingerprint cache + */ +RPM_GNUC_INTERNAL +fingerPrintCache fpCacheCreate(int sizeHint); + +/** + * Destroy finger print cache. + * @param cache pointer to fingerprint cache + * @return NULL always + */ +RPM_GNUC_INTERNAL +fingerPrintCache fpCacheFree(fingerPrintCache cache); + +/** + * Return finger print of a file path. + * @param cache pointer to fingerprint cache + * @param dirName leading directory name of file path + * @param baseName base name of file path + * @param scareMemory + * @return pointer to the finger print associated with a file path. + */ +RPM_GNUC_INTERNAL +fingerPrint fpLookup(fingerPrintCache cache, const char * dirName, + const char * baseName, int scareMemory); + +/** + * Return hash value for a finger print. + * Hash based on dev and inode only! + * @param key pointer to finger print entry + * @return hash value + */ +RPM_GNUC_INTERNAL +unsigned int fpHashFunction(const fingerPrint * key); + +/** + * Compare two finger print entries. + * This routine is exactly equivalent to the FP_EQUAL macro. + * @param key1 finger print 1 + * @param key2 finger print 2 + * @return result of comparing key1 and key2 + */ +RPM_GNUC_INTERNAL +int fpEqual(const fingerPrint * key1, const fingerPrint * key2); + +/** + * Return finger prints of an array of file paths. + * @warning: scareMemory is assumed! + * @param cache pointer to fingerprint cache + * @param dirNames directory names + * @param baseNames file base names + * @param dirIndexes index into dirNames for each baseNames + * @param fileCount number of file entries + * @retval fpList pointer to array of finger prints + */ +RPM_GNUC_INTERNAL +void fpLookupList(fingerPrintCache cache, const char ** dirNames, + const char ** baseNames, const uint32_t * dirIndexes, + int fileCount, fingerPrint * fpList); + +/** + * Check file for to be installed symlinks in their path, + * correct their fingerprint and add it to newht. + * @param ht hash table containing all files fingerprints + * @param newht hash table to add the corrected fingerprints + * @param fpc fingerprint cache + * @param fi file iterator of the package + * @param filenr the number of the file we are dealing with + */ +RPM_GNUC_INTERNAL +void fpLookupSubdir(rpmFpHash symlinks, rpmFpHash fphash, fingerPrintCache fpc, rpmte p, int filenr); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/fsm.c b/lib/fsm.c new file mode 100644 index 0000000..9a475a2 --- /dev/null +++ b/lib/fsm.c @@ -0,0 +1,2332 @@ +/** \ingroup payload + * \file lib/fsm.c + * File state machine to handle a payload from a package. + */ + +#include "system.h" + +#include +#include +#if defined(HAVE_MMAP) +#include +#endif +#if WITH_CAP +#include +#endif + +#include +#include +#include +#include + +#include "rpmio/rpmio_internal.h" /* fdInit/FiniDigest */ +#include "lib/cpio.h" +#include "lib/fsm.h" +#define fsmUNSAFE fsmStage +#include "lib/rpmfi_internal.h" /* XXX fi->apath, ... */ +#include "lib/rpmte_internal.h" /* XXX rpmfs */ +#include "lib/rpmts_internal.h" /* rpmtsSELabelFoo() only */ +#include "lib/rpmug.h" + +#include "debug.h" + +#define _FSM_DEBUG 0 +int _fsm_debug = _FSM_DEBUG; + +/* XXX Failure to remove is not (yet) cause for failure. */ +static int strict_erasures = 0; + +/** \ingroup payload + * Keeps track of the set of all hard links to a file in an archive. + */ +struct hardLink_s { + hardLink_t next; + const char ** nsuffix; + int * filex; + struct stat sb; + nlink_t nlink; + nlink_t linksLeft; + int linkIndex; + int createdPath; +}; + +/** \ingroup payload + * Iterator across package file info, forward on install, backward on erase. + */ +struct fsmIterator_s { + rpmts ts; /*!< transaction set. */ + rpmte te; /*!< transaction element. */ + rpmfi fi; /*!< transaction element file info. */ + int reverse; /*!< reversed traversal? */ + int isave; /*!< last returned iterator index. */ + int i; /*!< iterator index. */ +}; + +/** + * Retrieve transaction set from file state machine iterator. + * @param fsm file state machine + * @return transaction set + */ +static rpmts fsmGetTs(const FSM_t fsm) { + const FSMI_t iter = fsm->iter; + return (iter ? iter->ts : NULL); +} + +/** + * Retrieve transaction element file info from file state machine iterator. + * @param fsm file state machine + * @return transaction element file info + */ +static rpmfi fsmGetFi(const FSM_t fsm) +{ + const FSMI_t iter = fsm->iter; + return (iter ? iter->fi : NULL); +} + +static rpmte fsmGetTe(const FSM_t fsm) +{ + const FSMI_t iter = fsm->iter; + return (iter ? iter->te : NULL); +} + +#define SUFFIX_RPMORIG ".rpmorig" +#define SUFFIX_RPMSAVE ".rpmsave" +#define SUFFIX_RPMNEW ".rpmnew" + +/* Default directory and file permissions if not mapped */ +#define _dirPerms 0755 +#define _filePerms 0644 + +/* + * XXX Forward declarations for previously exported functions to avoid moving + * things around needlessly + */ +static const char * fileStageString(fileStage a); +static const char * fileActionString(rpmFileAction a); +static int fsmStage(FSM_t fsm, fileStage stage); + +/** \ingroup payload + * Build path to file from file info, ornamented with subdir and suffix. + * @param fsm file state machine data + * @param st file stat info + * @param subdir subdir to use (NULL disables) + * @param suffix suffix to use (NULL disables) + * @retval path to file (malloced) + */ +static char * fsmFsPath(const FSM_t fsm, + const struct stat * st, + const char * subdir, + const char * suffix) +{ + char * s = NULL; + + if (fsm) { + int isDir = (st && S_ISDIR(st->st_mode)); + s = rstrscat(NULL, fsm->dirName, + (!isDir && subdir) ? subdir : "", + fsm->baseName, + (!isDir && suffix) ? suffix : "", + NULL); + } + return s; +} + +/** \ingroup payload + * Destroy file info iterator. + * @param p file info iterator + * @retval NULL always + */ +static FSMI_t mapFreeIterator(FSMI_t iter) +{ + if (iter) { + iter->ts = rpmtsFree(iter->ts); + iter->te = NULL; /* XXX rpmte is not refcounted yet */ + iter->fi = rpmfiFree(iter->fi); + free(iter); + } + return NULL; +} + +/** \ingroup payload + * Create file info iterator. + * @param ts transaction set + * @param fi transaction element file info + * @return file info iterator + */ +static FSMI_t +mapInitIterator(rpmts ts, rpmte te, rpmfi fi) +{ + FSMI_t iter = NULL; + + iter = xcalloc(1, sizeof(*iter)); + iter->ts = rpmtsLink(ts); + iter->te = te; /* XXX rpmte is not refcounted yet */ + iter->fi = rpmfiLink(fi); + iter->reverse = (rpmteType(te) == TR_REMOVED); + iter->i = (iter->reverse ? (rpmfiFC(fi) - 1) : 0); + iter->isave = iter->i; + return iter; +} + +/** \ingroup payload + * Return next index into file info. + * @param a file info iterator + * @return next index, -1 on termination + */ +static int mapNextIterator(FSMI_t iter) +{ + int i = -1; + + if (iter) { + const rpmfi fi = iter->fi; + if (iter->reverse) { + if (iter->i >= 0) i = iter->i--; + } else { + if (iter->i < rpmfiFC(fi)) i = iter->i++; + } + iter->isave = i; + } + return i; +} + +/** \ingroup payload + */ +static int cpioStrCmp(const void * a, const void * b) +{ + const char * afn = *(const char **)a; + const char * bfn = *(const char **)b; + + /* Match rpm-4.0 payloads with ./ prefixes. */ + if (afn[0] == '.' && afn[1] == '/') afn += 2; + if (bfn[0] == '.' && bfn[1] == '/') bfn += 2; + + /* If either path is absolute, make it relative. */ + if (afn[0] == '/') afn += 1; + if (bfn[0] == '/') bfn += 1; + + return strcmp(afn, bfn); +} + +/** \ingroup payload + * Locate archive path in file info. + * @param iter file info iterator + * @param fsmPath archive path + * @return index into file info, -1 if archive path was not found + */ +static int mapFind(FSMI_t iter, const char * fsmPath) +{ + int ix = -1; + + if (iter) { + const rpmfi fi = iter->fi; + int fc = rpmfiFC(fi); + if (fi && fc > 0 && fi->apath && fsmPath && *fsmPath) { + char ** p = NULL; + + if (fi->apath != NULL) + p = bsearch(&fsmPath, fi->apath, fc, sizeof(fsmPath), + cpioStrCmp); + if (p) { + iter->i = p - fi->apath; + ix = mapNextIterator(iter); + } + } + } + return ix; +} + +/** \ingroup payload + * Directory name iterator. + */ +typedef struct dnli_s { + rpmfi fi; + char * active; + int reverse; + int isave; + int i; +} * DNLI_t; + +/** \ingroup payload + * Destroy directory name iterator. + * @param a directory name iterator + * @retval NULL always + */ +static DNLI_t dnlFreeIterator(DNLI_t dnli) +{ + if (dnli) { + if (dnli->active) free(dnli->active); + free(dnli); + } + return NULL; +} + +/** \ingroup payload + */ +static inline int dnlCount(const DNLI_t dnli) +{ + return (dnli ? rpmfiDC(dnli->fi) : 0); +} + +/** \ingroup payload + */ +static inline int dnlIndex(const DNLI_t dnli) +{ + return (dnli ? dnli->isave : -1); +} + +/** \ingroup payload + * Create directory name iterator. + * @param fsm file state machine data + * @param reverse traverse directory names in reverse order? + * @return directory name iterator + */ +static DNLI_t dnlInitIterator(const FSM_t fsm, int reverse) +{ + rpmfi fi = fsmGetFi(fsm); + rpmfs fs = rpmteGetFileStates(fsmGetTe(fsm)); + DNLI_t dnli; + int i, j; + int dc; + + if (fi == NULL) + return NULL; + dc = rpmfiDC(fi); + dnli = xcalloc(1, sizeof(*dnli)); + dnli->fi = fi; + dnli->reverse = reverse; + dnli->i = (reverse ? dc : 0); + + if (dc) { + dnli->active = xcalloc(dc, sizeof(*dnli->active)); + int fc = rpmfiFC(fi); + + /* Identify parent directories not skipped. */ + for (i = 0; i < fc; i++) + if (!XFA_SKIPPING(rpmfsGetAction(fs, i))) + dnli->active[rpmfiDIIndex(fi, i)] = 1; + + /* Exclude parent directories that are explicitly included. */ + for (i = 0; i < fc; i++) { + int dil; + size_t dnlen, bnlen; + + if (!S_ISDIR(rpmfiFModeIndex(fi, i))) + continue; + + dil = rpmfiDIIndex(fi, i); + dnlen = strlen(rpmfiDNIndex(fi, dil)); + bnlen = strlen(rpmfiBNIndex(fi, i)); + + for (j = 0; j < dc; j++) { + const char * dnl; + size_t jlen; + + if (!dnli->active[j] || j == dil) + continue; + dnl = rpmfiDNIndex(fi, j); + jlen = strlen(dnl); + if (jlen != (dnlen+bnlen+1)) + continue; + if (!rstreqn(dnl, rpmfiDNIndex(fi, dil), dnlen)) + continue; + if (!rstreqn(dnl+dnlen, rpmfiBNIndex(fi, i), bnlen)) + continue; + if (dnl[dnlen+bnlen] != '/' || dnl[dnlen+bnlen+1] != '\0') + continue; + /* This directory is included in the package. */ + dnli->active[j] = 0; + break; + } + } + + /* Print only once per package. */ + if (!reverse) { + j = 0; + for (i = 0; i < dc; i++) { + if (!dnli->active[i]) continue; + if (j == 0) { + j = 1; + rpmlog(RPMLOG_DEBUG, + "========== Directories not explicitly included in package:\n"); + } + rpmlog(RPMLOG_DEBUG, "%10d %s\n", i, rpmfiDNIndex(fi, i)); + } + if (j) + rpmlog(RPMLOG_DEBUG, "==========\n"); + } + } + return dnli; +} + +/** \ingroup payload + * Return next directory name (from file info). + * @param dnli directory name iterator + * @return next directory name + */ +static +const char * dnlNextIterator(DNLI_t dnli) +{ + const char * dn = NULL; + + if (dnli) { + rpmfi fi = dnli->fi; + int dc = rpmfiDC(fi); + int i = -1; + + if (dnli->active) + do { + i = (!dnli->reverse ? dnli->i++ : --dnli->i); + } while (i >= 0 && i < dc && !dnli->active[i]); + + if (i >= 0 && i < dc) + dn = rpmfiDNIndex(fi, i); + else + i = -1; + dnli->isave = i; + } + return dn; +} + +int fsmNext(FSM_t fsm, fileStage nstage) +{ + fsm->nstage = nstage; + return fsmStage(fsm, fsm->nstage); +} + +/** + * Map next file path and action. + * @param fsm file state machine + */ +static int fsmMapPath(FSM_t fsm) +{ + rpmfi fi = fsmGetFi(fsm); /* XXX const except for fstates */ + int rc = 0; + int i; + + fsm->osuffix = NULL; + fsm->nsuffix = NULL; + fsm->action = FA_UNKNOWN; + + i = fsm->ix; + if (fi && i >= 0 && i < rpmfiFC(fi)) { + rpmte te = fsmGetTe(fsm); + rpmfs fs = rpmteGetFileStates(te); + /* XXX these should use rpmfiFFlags() etc */ + fsm->action = rpmfsGetAction(fs, i); + fsm->fflags = rpmfiFFlagsIndex(fi, i); + + /* src rpms have simple base name in payload. */ + fsm->dirName = rpmfiDNIndex(fi, rpmfiDIIndex(fi, i)); + fsm->baseName = rpmfiBNIndex(fi, i); + + if (rpmteType(te) == TR_ADDED) { + switch (fsm->action) { + case FA_SKIPNSTATE: + rpmfsSetState(fs, i, RPMFILE_STATE_NOTINSTALLED); + break; + case FA_SKIPNETSHARED: + rpmfsSetState(fs, i, RPMFILE_STATE_NETSHARED); + break; + case FA_SKIPCOLOR: + rpmfsSetState(fs, i, RPMFILE_STATE_WRONGCOLOR); + break; + case FA_ALTNAME: + if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */ + fsm->nsuffix = SUFFIX_RPMNEW; + break; + case FA_SAVE: + if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */ + fsm->osuffix = SUFFIX_RPMSAVE; + break; + default: + break; + } + } + + if (fsm->action == FA_BACKUP && !(fsm->fflags & RPMFILE_GHOST)) { + /* XXX Don't if %ghost file. */ + fsm->osuffix = (rpmteType(te) == TR_ADDED) ? SUFFIX_RPMORIG : SUFFIX_RPMSAVE; + } + + if ((fsm->mapFlags & CPIO_MAP_PATH) || fsm->nsuffix) { + const struct stat * st = &fsm->sb; + fsm->path = _free(fsm->path); + fsm->path = fsmFsPath(fsm, st, fsm->subdir, + (fsm->suffix ? fsm->suffix : fsm->nsuffix)); + } + } + return rc; +} + +/** \ingroup payload + * Save hard link in chain. + * @param fsm file state machine data + * @return Is chain only partially filled? + */ +static int saveHardLink(FSM_t fsm) +{ + struct stat * st = &fsm->sb; + int rc = 0; + int ix = -1; + int j; + + /* Find hard link set. */ + for (fsm->li = fsm->links; fsm->li; fsm->li = fsm->li->next) { + if (fsm->li->sb.st_ino == st->st_ino && fsm->li->sb.st_dev == st->st_dev) + break; + } + + /* New hard link encountered, add new link to set. */ + if (fsm->li == NULL) { + fsm->li = xcalloc(1, sizeof(*fsm->li)); + fsm->li->next = NULL; + fsm->li->sb = *st; /* structure assignment */ + fsm->li->nlink = st->st_nlink; + fsm->li->linkIndex = fsm->ix; + fsm->li->createdPath = -1; + + fsm->li->filex = xcalloc(st->st_nlink, sizeof(fsm->li->filex[0])); + memset(fsm->li->filex, -1, (st->st_nlink * sizeof(fsm->li->filex[0]))); + fsm->li->nsuffix = xcalloc(st->st_nlink, sizeof(*fsm->li->nsuffix)); + + if (fsm->goal == FSM_PKGBUILD) + fsm->li->linksLeft = st->st_nlink; + if (fsm->goal == FSM_PKGINSTALL) + fsm->li->linksLeft = 0; + + fsm->li->next = fsm->links; + fsm->links = fsm->li; + } + + if (fsm->goal == FSM_PKGBUILD) --fsm->li->linksLeft; + fsm->li->filex[fsm->li->linksLeft] = fsm->ix; + fsm->li->nsuffix[fsm->li->linksLeft] = fsm->nsuffix; + if (fsm->goal == FSM_PKGINSTALL) fsm->li->linksLeft++; + + if (fsm->goal == FSM_PKGBUILD) + return (fsm->li->linksLeft > 0); + + if (fsm->goal != FSM_PKGINSTALL) + return 0; + + if (!(st->st_size || fsm->li->linksLeft == st->st_nlink)) + return 1; + + /* Here come the bits, time to choose a non-skipped file name. */ + { rpmfs fs = rpmteGetFileStates(fsmGetTe(fsm)); + + for (j = fsm->li->linksLeft - 1; j >= 0; j--) { + ix = fsm->li->filex[j]; + if (ix < 0 || XFA_SKIPPING(rpmfsGetAction(fs, ix))) + continue; + break; + } + } + + /* Are all links skipped or not encountered yet? */ + if (ix < 0 || j < 0) + return 1; /* XXX W2DO? */ + + /* Save the non-skipped file name and map index. */ + fsm->li->linkIndex = j; + fsm->path = _free(fsm->path); + fsm->ix = ix; + rc = fsmMapPath(fsm); + return rc; +} + +/** \ingroup payload + * Destroy set of hard links. + * @param li set of hard links + * @return NULL always + */ +static hardLink_t freeHardLink(hardLink_t li) +{ + if (li) { + li->nsuffix = _free(li->nsuffix); /* XXX elements are shared */ + li->filex = _free(li->filex); + _free(li); + } + return NULL; +} + +FSM_t newFSM(cpioMapFlags mapflags) +{ + FSM_t fsm = xcalloc(1, sizeof(*fsm)); + fsm->mapFlags = mapflags; + return fsm; +} + +FSM_t freeFSM(FSM_t fsm) +{ + if (fsm) { + fsm->path = _free(fsm->path); + while ((fsm->li = fsm->links) != NULL) { + fsm->links = fsm->li->next; + fsm->li->next = NULL; + fsm->li = freeHardLink(fsm->li); + } + fsm->dnlx = _free(fsm->dnlx); + fsm->ldn = _free(fsm->ldn); + fsm->iter = mapFreeIterator(fsm->iter); + _free(fsm); + } + return NULL; +} + +/* forward declaration*/ +static int fsmMkdirs(FSM_t fsm); + +static int fsmCreate(FSM_t fsm) +{ + int rc = 0; + fsm->path = _free(fsm->path); + fsm->opath = _free(fsm->opath); + fsm->dnlx = _free(fsm->dnlx); + + fsm->ldn = _free(fsm->ldn); + fsm->ldnalloc = fsm->ldnlen = 0; + + fsm->rdsize = fsm->wrsize = 0; + fsm->rdbuf = fsm->rdb = _free(fsm->rdb); + fsm->wrbuf = fsm->wrb = _free(fsm->wrb); + if (fsm->goal == FSM_PKGINSTALL || fsm->goal == FSM_PKGBUILD) { + fsm->rdsize = 8 * BUFSIZ; + fsm->rdbuf = fsm->rdb = xmalloc(fsm->rdsize); + fsm->wrsize = 8 * BUFSIZ; + fsm->wrbuf = fsm->wrb = xmalloc(fsm->wrsize); + } + + fsm->mkdirsdone = 0; + fsm->ix = -1; + fsm->links = NULL; + fsm->li = NULL; + errno = 0; /* XXX get rid of EBADF */ + + /* Detect and create directories not explicitly in package. */ + if (fsm->goal == FSM_PKGINSTALL) { + rc = fsmMkdirs(fsm); + if (!rc) fsm->mkdirsdone = 1; + } + return rc; +} + +int fsmSetup(FSM_t fsm, fileStage goal, + rpmts ts, rpmte te, rpmfi fi, FD_t cfd, + rpm_loff_t * archiveSize, char ** failedFile) +{ + int rc, ec = 0; + + fsm->goal = goal; + if (cfd != NULL) { + fsm->cfd = fdLink(cfd); + } + fsm->cpioPos = 0; + fsm->iter = mapInitIterator(ts, te, fi); + fsm->digestalgo = rpmfiDigestAlgo(fi); + + if (fsm->goal == FSM_PKGINSTALL || fsm->goal == FSM_PKGBUILD) { + void * ptr; + fsm->archivePos = 0; + ptr = rpmtsNotify(ts, te, + RPMCALLBACK_INST_START, fsm->archivePos, fi->archiveSize); + } + + fsm->archiveSize = archiveSize; + if (fsm->archiveSize) + *fsm->archiveSize = 0; + fsm->failedFile = failedFile; + if (fsm->failedFile) + *fsm->failedFile = NULL; + + memset(fsm->sufbuf, 0, sizeof(fsm->sufbuf)); + if (fsm->goal == FSM_PKGINSTALL) { + if (ts && rpmtsGetTid(ts) != (rpm_tid_t)-1) + sprintf(fsm->sufbuf, ";%08x", (unsigned)rpmtsGetTid(ts)); + } + + ec = fsm->rc = 0; + rc = fsmCreate(fsm); + if (rc && !ec) ec = rc; + + rc = fsmUNSAFE(fsm, fsm->goal); + if (rc && !ec) ec = rc; + + if (fsm->archiveSize && ec == 0) + *fsm->archiveSize = fsm->cpioPos; + +/* FIX: *fsm->failedFile may be NULL */ + return ec; +} + +int fsmTeardown(FSM_t fsm) +{ + int rc = fsm->rc; + + if (!rc) + rc = fsmUNSAFE(fsm, FSM_DESTROY); + + fsm->iter = mapFreeIterator(fsm->iter); + if (fsm->cfd != NULL) { + fsm->cfd = fdFree(fsm->cfd); + fsm->cfd = NULL; + } + fsm->failedFile = NULL; + return rc; +} + +static int fsmMapFContext(FSM_t fsm) +{ + rpmts ts = fsmGetTs(fsm); + struct stat * st; + st = &fsm->sb; + + /* + * Find file security context (if not disabled). + */ + fsm->fcontext = NULL; + if (ts != NULL && !(rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS) && rpmtsSELabelHandle(ts)) { + security_context_t scon = NULL; + + if (selabel_lookup_raw(rpmtsSELabelHandle(ts), &scon, fsm->path, st->st_mode) == 0 && scon != NULL) { + fsm->fcontext = scon; + } + } + return 0; +} + +#if WITH_CAP +static int fsmMapFCaps(FSM_t fsm) +{ + rpmfi fi = fsmGetFi(fsm); + const char *captxt = rpmfiFCapsIndex(fi, fsm->ix); + fsm->fcaps = NULL; + if (captxt && *captxt != '\0') { + cap_t fcaps = cap_from_text(captxt); + if (fcaps) { + fsm->fcaps = fcaps; + } + } + return 0; +} +#endif + +/** + * Map file stat(2) info. + * @param fsm file state machine + */ +static int fsmMapAttrs(FSM_t fsm) +{ + struct stat * st = &fsm->sb; + rpmfi fi = fsmGetFi(fsm); + int i = fsm->ix; + + /* this check is pretty moot, rpmfi accessors check array bounds etc */ + if (fi && i >= 0 && i < rpmfiFC(fi)) { + mode_t finalMode = rpmfiFModeIndex(fi, i); + dev_t finalRdev = rpmfiFRdevIndex(fi, i); + time_t finalMtime = rpmfiFMtimeIndex(fi, i); + const char *user = rpmfiFUserIndex(fi, i); + const char *group = rpmfiFGroupIndex(fi, i); + uid_t uid = 0; + gid_t gid = 0; + + if (user && rpmugUid(user, &uid)) { + if (fsm->goal == FSM_PKGINSTALL) + rpmlog(RPMLOG_WARNING, + _("user %s does not exist - using root\n"), user); + finalMode &= ~S_ISUID; /* turn off suid bit */ + } + + if (group && rpmugGid(group, &gid)) { + if (fsm->goal == FSM_PKGINSTALL) + rpmlog(RPMLOG_WARNING, + _("group %s does not exist - using root\n"), group); + finalMode &= ~S_ISGID; /* turn off sgid bit */ + } + + if (fsm->mapFlags & CPIO_MAP_MODE) + st->st_mode = (st->st_mode & S_IFMT) | (finalMode & ~S_IFMT); + if (fsm->mapFlags & CPIO_MAP_TYPE) { + st->st_mode = (st->st_mode & ~S_IFMT) | (finalMode & S_IFMT); + if ((S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode)) + && st->st_nlink == 0) + st->st_nlink = 1; + st->st_rdev = finalRdev; + st->st_mtime = finalMtime; + } + if (fsm->mapFlags & CPIO_MAP_UID) + st->st_uid = uid; + if (fsm->mapFlags & CPIO_MAP_GID) + st->st_gid = gid; + + { rpmts ts = fsmGetTs(fsm); + + /* + * Set file digest (if not disabled). + */ + if (ts != NULL && !(rpmtsFlags(ts) & RPMTRANS_FLAG_NOFILEDIGEST)) { + fsm->digest = rpmfiFDigestIndex(fi, i, NULL, NULL); + } else { + fsm->digest = NULL; + } + } + } + return 0; +} + +/** \ingroup payload + * Create file from payload stream. + * @param fsm file state machine data + * @return 0 on success + */ +static int expandRegular(FSM_t fsm) +{ + const struct stat * st = &fsm->sb; + rpm_loff_t left = st->st_size; + int rc = 0; + + rc = fsmNext(fsm, FSM_WOPEN); + if (rc) + goto exit; + + if (st->st_size > 0 && fsm->digest != NULL) + fdInitDigest(fsm->wfd, fsm->digestalgo, 0); + + while (left) { + + fsm->wrlen = (left > fsm->wrsize ? fsm->wrsize : left); + rc = fsmNext(fsm, FSM_DREAD); + if (rc) + goto exit; + + rc = fsmNext(fsm, FSM_WRITE); + if (rc) + goto exit; + + left -= fsm->wrnb; + + /* don't call this with fileSize == fileComplete */ + if (!rc && left) + (void) fsmNext(fsm, FSM_NOTIFY); + } + + if (st->st_size > 0 && fsm->digest) { + void * digest = NULL; + int asAscii = (fsm->digest == NULL ? 1 : 0); + + (void) Fflush(fsm->wfd); + fdFiniDigest(fsm->wfd, fsm->digestalgo, &digest, NULL, asAscii); + + if (digest == NULL) { + rc = CPIOERR_DIGEST_MISMATCH; + goto exit; + } + + if (fsm->digest != NULL) { + size_t diglen = rpmDigestLength(fsm->digestalgo); + if (memcmp(digest, fsm->digest, diglen)) + rc = CPIOERR_DIGEST_MISMATCH; + } else { + rc = CPIOERR_DIGEST_MISMATCH; + } + digest = _free(digest); + } + +exit: + (void) fsmNext(fsm, FSM_WCLOSE); + return rc; +} + +static int fsmReadLink(FSM_t fsm) +{ + int rc; + /* XXX NUL terminated result in fsm->rdbuf, len in fsm->rdnb. */ + rc = readlink(fsm->path, fsm->rdbuf, fsm->rdsize - 1); + if (_fsm_debug && (FSM_READLINK & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, rdbuf, %d) %s\n", fileStageString(FSM_READLINK), + fsm->path, (int)(fsm->rdsize -1), (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_READLINK_FAILED; + else { + fsm->rdnb = rc; + fsm->rdbuf[fsm->rdnb] = '\0'; + rc = 0; + } + return rc; +} + +/** \ingroup payload + * Write next item to payload stream. + * @param fsm file state machine data + * @param writeData should data be written? + * @return 0 on success + */ +static int writeFile(FSM_t fsm, int writeData) +{ + char * path = fsm->path; + char * opath = fsm->opath; + struct stat * st = &fsm->sb; + struct stat * ost = &fsm->osb; + char * symbuf = NULL; + rpm_loff_t left; + int rc; + + st->st_size = (writeData ? ost->st_size : 0); + + if (S_ISDIR(st->st_mode)) { + st->st_size = 0; + } else if (S_ISLNK(st->st_mode)) { + /* + * While linux puts the size of a symlink in the st_size field, + * I don't think that's a specified standard. + */ + /* XXX NUL terminated result in fsm->rdbuf, len in fsm->rdnb. */ + rc = fsmReadLink(fsm); + if (rc) goto exit; + st->st_size = fsm->rdnb; + rstrcat(&symbuf, fsm->rdbuf); /* XXX save readlink return. */ + } + + if (fsm->mapFlags & CPIO_MAP_ABSOLUTE) { + fsm->path = rstrscat(NULL, (fsm->mapFlags & CPIO_MAP_ADDDOT) ? "." : "", + fsm->dirName, fsm->baseName, NULL); + } else if (fsm->mapFlags & CPIO_MAP_PATH) { + rpmfi fi = fsmGetFi(fsm); + fsm->path = xstrdup((fi->apath ? fi->apath[fsm->ix] : + rpmfiBNIndex(fi, fsm->ix))); + } + + rc = cpioHeaderWrite(fsm, st); + _free(fsm->path); + fsm->path = path; + if (rc) goto exit; + + if (writeData && S_ISREG(st->st_mode)) { +#ifdef HAVE_MMAP + char * rdbuf = NULL; + void * mapped = MAP_FAILED; + size_t nmapped; + int xx; +#endif + + rc = fsmNext(fsm, FSM_ROPEN); + if (rc) goto exit; + + /* XXX unbuffered mmap generates *lots* of fdio debugging */ +#ifdef HAVE_MMAP + nmapped = 0; + mapped = mmap(NULL, st->st_size, PROT_READ, MAP_SHARED, Fileno(fsm->rfd), 0); + if (mapped != MAP_FAILED) { + rdbuf = fsm->rdbuf; + fsm->rdbuf = (char *) mapped; + fsm->rdlen = nmapped = st->st_size; +#if defined(MADV_DONTNEED) + xx = madvise(mapped, nmapped, MADV_DONTNEED); +#endif + } +#endif + + left = st->st_size; + + while (left) { +#ifdef HAVE_MMAP + if (mapped != MAP_FAILED) { + fsm->rdnb = nmapped; + } else +#endif + { + fsm->rdlen = (left > fsm->rdsize ? fsm->rdsize : left), + rc = fsmNext(fsm, FSM_READ); + if (rc) goto exit; + } + + /* XXX DWRITE uses rdnb for I/O length. */ + rc = fsmNext(fsm, FSM_DWRITE); + if (rc) goto exit; + + left -= fsm->wrnb; + } + +#ifdef HAVE_MMAP + if (mapped != MAP_FAILED) { + xx = msync(mapped, nmapped, MS_ASYNC); +#if defined(MADV_DONTNEED) + xx = madvise(mapped, nmapped, MADV_DONTNEED); +#endif + xx = munmap(mapped, nmapped); + fsm->rdbuf = rdbuf; + } +#endif + + } else if (writeData && S_ISLNK(st->st_mode)) { + /* XXX DWRITE uses rdnb for I/O length. */ + strcpy(fsm->rdbuf, symbuf); /* XXX restore readlink buffer. */ + fsm->rdnb = strlen(symbuf); + rc = fsmNext(fsm, FSM_DWRITE); + if (rc) goto exit; + } + + rc = fsmNext(fsm, FSM_PAD); + if (rc) goto exit; + + rc = 0; + +exit: + if (fsm->rfd != NULL) + (void) fsmNext(fsm, FSM_RCLOSE); + fsm->opath = opath; + fsm->path = path; + free(symbuf); + return rc; +} + +/** \ingroup payload + * Write set of linked files to payload stream. + * @param fsm file state machine data + * @return 0 on success + */ +static int writeLinkedFile(FSM_t fsm) +{ + char * path = fsm->path; + const char * nsuffix = fsm->nsuffix; + int iterIndex = fsm->ix; + int ec = 0; + int rc; + int i; + + fsm->path = NULL; + fsm->nsuffix = NULL; + fsm->ix = -1; + + for (i = fsm->li->nlink - 1; i >= 0; i--) { + + if (fsm->li->filex[i] < 0) continue; + + fsm->ix = fsm->li->filex[i]; + rc = fsmMapPath(fsm); + + /* Write data after last link. */ + rc = writeFile(fsm, (i == 0)); + if (fsm->failedFile && rc != 0 && *fsm->failedFile == NULL) { + ec = rc; + *fsm->failedFile = xstrdup(fsm->path); + } + + fsm->path = _free(fsm->path); + fsm->li->filex[i] = -1; + } + + fsm->ix = iterIndex; + fsm->nsuffix = nsuffix; + fsm->path = path; + return ec; +} + +static int fsmStat(FSM_t fsm, int dolstat) +{ + int rc; + if (dolstat){ + rc = lstat(fsm->path, &fsm->osb); + } else { + rc = stat(fsm->path, &fsm->osb); + } + if (_fsm_debug && (FSM_STAT & FSM_SYSCALL) && rc && errno != ENOENT) + rpmlog(RPMLOG_DEBUG, " %8s (%s, ost) %s\n", + fileStageString(dolstat ? FSM_LSTAT : FSM_STAT), + fsm->path, (rc < 0 ? strerror(errno) : "")); + if (rc < 0) { + rc = (errno == ENOENT ? CPIOERR_ENOENT : CPIOERR_LSTAT_FAILED); + memset(&fsm->osb, 0, sizeof(fsm->osb)); /* XXX s390x hackery */ + } + return rc; +} + +static int fsmVerify(FSM_t fsm); + +/** \ingroup payload + * Create pending hard links to existing file. + * @param fsm file state machine data + * @return 0 on success + */ +static int fsmMakeLinks(FSM_t fsm) +{ + char * path = fsm->path; + char * opath = fsm->opath; + const char * nsuffix = fsm->nsuffix; + int iterIndex = fsm->ix; + int ec = 0; + int rc; + int i; + + fsm->path = NULL; + fsm->opath = NULL; + fsm->nsuffix = NULL; + fsm->ix = -1; + + fsm->ix = fsm->li->filex[fsm->li->createdPath]; + rc = fsmMapPath(fsm); + fsm->opath = fsm->path; + fsm->path = NULL; + for (i = 0; i < fsm->li->nlink; i++) { + if (fsm->li->filex[i] < 0) continue; + if (fsm->li->createdPath == i) continue; + + fsm->ix = fsm->li->filex[i]; + fsm->path = _free(fsm->path); + rc = fsmMapPath(fsm); + if (XFA_SKIPPING(fsm->action)) continue; + + rc = fsmVerify(fsm); + if (!rc) continue; + if (!(rc == CPIOERR_ENOENT)) break; + + /* XXX link(fsm->opath, fsm->path) */ + rc = link(fsm->opath, fsm->path); + if (_fsm_debug && (FSM_LINK & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, %s) %s\n", fileStageString(FSM_LINK), + fsm->opath, fsm->path, (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_LINK_FAILED; + + if (fsm->failedFile && rc != 0 && *fsm->failedFile == NULL) { + ec = rc; + *fsm->failedFile = xstrdup(fsm->path); + } + + fsm->li->linksLeft--; + } + fsm->path = _free(fsm->path); + fsm->opath = _free(fsm->opath); + + fsm->ix = iterIndex; + fsm->nsuffix = nsuffix; + fsm->path = path; + fsm->opath = opath; + return ec; +} + +/** \ingroup payload + * Commit hard linked file set atomically. + * @param fsm file state machine data + * @return 0 on success + */ +static int fsmCommitLinks(FSM_t fsm) +{ + char * path = fsm->path; + const char * nsuffix = fsm->nsuffix; + int iterIndex = fsm->ix; + struct stat * st = &fsm->sb; + int rc = 0; + nlink_t i; + + fsm->path = NULL; + fsm->nsuffix = NULL; + fsm->ix = -1; + + for (fsm->li = fsm->links; fsm->li; fsm->li = fsm->li->next) { + if (fsm->li->sb.st_ino == st->st_ino && fsm->li->sb.st_dev == st->st_dev) + break; + } + + for (i = 0; i < fsm->li->nlink; i++) { + if (fsm->li->filex[i] < 0) continue; + fsm->ix = fsm->li->filex[i]; + rc = fsmMapPath(fsm); + if (!XFA_SKIPPING(fsm->action)) + rc = fsmNext(fsm, FSM_COMMIT); + fsm->path = _free(fsm->path); + fsm->li->filex[i] = -1; + } + + fsm->ix = iterIndex; + fsm->nsuffix = nsuffix; + fsm->path = path; + return rc; +} + +static int fsmRmdir(FSM_t fsm) +{ + int rc = rmdir(fsm->path); + if (_fsm_debug && (FSM_RMDIR & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s) %s\n", fileStageString(FSM_RMDIR), + fsm->path, (rc < 0 ? strerror(errno) : "")); + if (rc < 0) + switch (errno) { + case ENOENT: rc = CPIOERR_ENOENT; break; + case ENOTEMPTY: rc = CPIOERR_ENOTEMPTY; break; + default: rc = CPIOERR_RMDIR_FAILED; break; + } + return rc; +} + +static int fsmLsetfcon(FSM_t fsm) +{ + int rc = 0; + if (fsm->fcontext == NULL || *fsm->fcontext == '\0' + || rstreq(fsm->fcontext, "<>")) + return rc; + rc = lsetfilecon(fsm->path, (security_context_t)fsm->fcontext); + if (_fsm_debug && (FSM_LSETFCON & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, %s) %s\n", fileStageString(FSM_LSETFCON), + fsm->path, fsm->fcontext, + (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = (errno == EOPNOTSUPP ? 0 : CPIOERR_LSETFCON_FAILED); + return rc; +} + +static int fsmMkdir(FSM_t fsm) +{ + int rc = mkdir(fsm->path, (fsm->sb.st_mode & 07777)); + if (_fsm_debug && (FSM_MKDIR & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, 0%04o) %s\n", fileStageString(FSM_MKDIR), + fsm->path, (unsigned)(fsm->sb.st_mode & 07777), + (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_MKDIR_FAILED; + return rc; +} + +/** + * Create (if necessary) directories not explicitly included in package. + * @param fsm file state machine data + * @return 0 on success + */ +static int fsmMkdirs(FSM_t fsm) +{ + struct stat * st = &fsm->sb; + struct stat * ost = &fsm->osb; + char * path = fsm->path; + const char *dpath; + mode_t st_mode = st->st_mode; + DNLI_t dnli = dnlInitIterator(fsm, 0); + int dc = dnlCount(dnli); + int rc = 0; + int i; + rpmts ts = fsmGetTs(fsm); + security_context_t scon = NULL; + + fsm->dnlx = (dc ? xcalloc(dc, sizeof(*fsm->dnlx)) : NULL); + if (fsm->dnlx != NULL) + while ((dpath = dnlNextIterator(dnli)) != NULL) { + size_t dnlen = strlen(dpath); + char * te, dn[dnlen+1]; + + dc = dnlIndex(dnli); + if (dc < 0) continue; + fsm->dnlx[dc] = dnlen; + if (dnlen <= 1) + continue; + + if (dnlen <= fsm->ldnlen && rstreq(dpath, fsm->ldn)) + continue; + + /* Copy as we need to modify the string */ + (void) stpcpy(dn, dpath); + fsm->path = dn; + + /* Assume '/' directory exists, "mkdir -p" for others if non-existent */ + for (i = 1, te = dn + 1; *te != '\0'; te++, i++) { + if (*te != '/') + continue; + + *te = '\0'; + + /* Already validated? */ + if (i < fsm->ldnlen && + (fsm->ldn[i] == '/' || fsm->ldn[i] == '\0') && + rstreqn(fsm->path, fsm->ldn, i)) + { + *te = '/'; + /* Move pre-existing path marker forward. */ + fsm->dnlx[dc] = (te - dn); + continue; + } + + /* Validate next component of path. */ + rc = fsmStat(fsm, 1); /* lstat */ + *te = '/'; + + /* Directory already exists? */ + if (rc == 0 && S_ISDIR(ost->st_mode)) { + /* Move pre-existing path marker forward. */ + fsm->dnlx[dc] = (te - dn); + } else if (rc == CPIOERR_ENOENT) { + *te = '\0'; + st->st_mode = S_IFDIR | (_dirPerms & 07777); + rc = fsmMkdir(fsm); + if (!rc) { + /* XXX FIXME? only new dir will have context set. */ + /* Get file security context from patterns. */ + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS) && rpmtsSELabelHandle(ts)) { + if (selabel_lookup_raw(rpmtsSELabelHandle(ts), &scon, fsm->path, st->st_mode) == 0 && + scon != NULL) { + fsm->fcontext = scon; + rc = fsmLsetfcon(fsm); + } + } + + if (fsm->fcontext == NULL) + rpmlog(RPMLOG_DEBUG, + "%s directory created with perms %04o, no context.\n", + fsm->path, (unsigned)(st->st_mode & 07777)); + else { + rpmlog(RPMLOG_DEBUG, + "%s directory created with perms %04o, context %s.\n", + fsm->path, (unsigned)(st->st_mode & 07777), + fsm->fcontext); + freecon(fsm->fcontext); + } + fsm->fcontext = NULL; + } + *te = '/'; + } + if (rc) + break; + } + if (rc) break; + + /* Save last validated path. */ +/* FIX: ldn/path annotations ? */ + if (fsm->ldnalloc < (dnlen + 1)) { + fsm->ldnalloc = dnlen + 100; + fsm->ldn = xrealloc(fsm->ldn, fsm->ldnalloc); + } + if (fsm->ldn != NULL) { /* XXX can't happen */ + strcpy(fsm->ldn, fsm->path); + fsm->ldnlen = dnlen; + } + } + dnli = dnlFreeIterator(dnli); + + fsm->path = path; + st->st_mode = st_mode; /* XXX restore st->st_mode */ +/* FIX: ldn/path annotations ? */ + return rc; +} + +static void removeSBITS(const char *path) +{ + struct stat stb; + if (lstat(path, &stb) == 0 && S_ISREG(stb.st_mode)) { + if ((stb.st_mode & 06000) != 0) { + (void) chmod(path, stb.st_mode & 0777); + } +#if WITH_CAP + if (stb.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)) { + (void) cap_set_file(path, NULL); + } +#endif + } +} + +/********************************************************************/ + +static int fsmInit(FSM_t fsm) +{ + int rc = 0; + + fsm->path = _free(fsm->path); + fsm->postpone = 0; + fsm->diskchecked = fsm->exists = 0; + fsm->subdir = NULL; + fsm->suffix = (fsm->sufbuf[0] != '\0' ? fsm->sufbuf : NULL); + fsm->action = FA_UNKNOWN; + fsm->osuffix = NULL; + fsm->nsuffix = NULL; + + if (fsm->goal == FSM_PKGINSTALL) { + /* Read next header from payload, checking for end-of-payload. */ + rc = fsmUNSAFE(fsm, FSM_NEXT); + } + if (rc) return rc; + + /* Identify mapping index. */ + fsm->ix = ((fsm->goal == FSM_PKGINSTALL) + ? mapFind(fsm->iter, fsm->path) : mapNextIterator(fsm->iter)); + + /* Detect end-of-loop and/or mapping error. */ + if (fsm->ix < 0) { + if (fsm->goal == FSM_PKGINSTALL) { +#if 0 + rpmlog(RPMLOG_WARNING, + _("archive file %s was not found in header file list\n"), + fsm->path); +#endif + if (fsm->failedFile && *fsm->failedFile == NULL) + *fsm->failedFile = xstrdup(fsm->path); + rc = CPIOERR_UNMAPPED_FILE; + } else { + rc = CPIOERR_HDR_TRAILER; + } + return rc; + } + + /* On non-install, mode must be known so that dirs don't get suffix. */ + if (fsm->goal != FSM_PKGINSTALL) { + rpmfi fi = fsmGetFi(fsm); + fsm->sb.st_mode = rpmfiFModeIndex(fi, fsm->ix); + } + + /* Generate file path. */ + rc = fsmMapPath(fsm); + if (rc) return rc; + + /* Perform lstat/stat for disk file. */ + if (fsm->path != NULL && + !(fsm->goal == FSM_PKGINSTALL && S_ISREG(fsm->sb.st_mode))) + { + rc = fsmStat(fsm, (!(fsm->mapFlags & CPIO_FOLLOW_SYMLINKS))); + if (rc == CPIOERR_ENOENT) { + // errno = saveerrno; XXX temporary commented out + rc = 0; + fsm->exists = 0; + } else if (rc == 0) { + fsm->exists = 1; + } + } else { + /* Skip %ghost files on build. */ + fsm->exists = 0; + } + fsm->diskchecked = 1; + if (rc) return rc; + + /* On non-install, the disk file stat is what's remapped. */ + if (fsm->goal != FSM_PKGINSTALL) + fsm->sb = fsm->osb; /* structure assignment */ + + /* Remap file perms, owner, and group. */ + rc = fsmMapAttrs(fsm); + if (rc) return rc; + + fsm->postpone = XFA_SKIPPING(fsm->action); + if (fsm->goal == FSM_PKGINSTALL || fsm->goal == FSM_PKGBUILD) { + /* FIX: saveHardLink can modify fsm */ + if (S_ISREG(fsm->sb.st_mode) && fsm->sb.st_nlink > 1) + fsm->postpone = saveHardLink(fsm); + } + return rc; + +} + +static int fsmUnlink(FSM_t fsm) +{ + int rc = 0; + if (fsm->mapFlags & CPIO_SBIT_CHECK) + removeSBITS(fsm->path); + rc = unlink(fsm->path); + if (_fsm_debug && (FSM_UNLINK & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s) %s\n", fileStageString(FSM_UNLINK), + fsm->path, (rc < 0 ? strerror(errno) : "")); + if (rc < 0) + rc = (errno == ENOENT ? CPIOERR_ENOENT : CPIOERR_UNLINK_FAILED); + return rc; +} + +static int fsmRename(FSM_t fsm) +{ + if (fsm->mapFlags & CPIO_SBIT_CHECK) + removeSBITS(fsm->path); + int rc = rename(fsm->opath, fsm->path); +#if defined(ETXTBSY) && defined(__HPUX__) + if (rc && errno == ETXTBSY) { + char *path = NULL; + rstrscat(&path, fsm->path, "-RPMDELETE", NULL); + /* + * XXX HP-UX (and other os'es) don't permit rename to busy + * XXX files. + */ + rc = rename(fsm->path, path); + if (!rc) rc = rename(fsm->opath, fsm->path); + free(path); + } +#endif + if (_fsm_debug && (FSM_RENAME & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, %s) %s\n", fileStageString(FSM_RENAME), + fsm->opath, fsm->path, (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_RENAME_FAILED; + return rc; +} + + +static int fsmChown(FSM_t fsm) +{ + int rc = chown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid); + if (rc < 0) { + struct stat st; + if (lstat(fsm->path, &st) == 0 && st.st_uid == fsm->sb.st_uid && st.st_gid == fsm->sb.st_gid) + rc = 0; + } + if (_fsm_debug && (FSM_CHOWN & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", fileStageString(FSM_CHOWN), + fsm->path, (int)fsm->sb.st_uid, (int)fsm->sb.st_gid, + (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_CHOWN_FAILED; + return rc; +} + +static int fsmLChown(FSM_t fsm) +{ + int rc = 0; + rc = lchown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid); + if (rc < 0) { + struct stat st; + if (lstat(fsm->path, &st) == 0 && st.st_uid == fsm->sb.st_uid && st.st_gid == fsm->sb.st_gid) + rc = 0; + } + if (_fsm_debug && (FSM_LCHOWN & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", fileStageString(FSM_LCHOWN), + fsm->path, (int)fsm->sb.st_uid, (int)fsm->sb.st_gid, + (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_CHOWN_FAILED; + return rc; +} + +static int fsmChmod(FSM_t fsm) +{ + int rc = chmod(fsm->path, (fsm->sb.st_mode & 07777)); + if (rc < 0) { + struct stat st; + if (lstat(fsm->path, &st) == 0 && (st.st_mode & 07777) == (fsm->sb.st_mode & 07777)) + rc = 0; + } + if (_fsm_debug && (FSM_CHMOD & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, 0%04o) %s\n", fileStageString(FSM_CHMOD), + fsm->path, (unsigned)(fsm->sb.st_mode & 07777), + (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_CHMOD_FAILED; + return rc; +} + +static int fsmUtime(FSM_t fsm) +{ + int rc = 0; + struct utimbuf stamp; + stamp.actime = fsm->sb.st_mtime; + stamp.modtime = fsm->sb.st_mtime; + rc = utime(fsm->path, &stamp); + if (_fsm_debug && (FSM_UTIME & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, 0x%x) %s\n", fileStageString(FSM_UTIME), + fsm->path, (unsigned)fsm->sb.st_mtime, + (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_UTIME_FAILED; + return rc; +} + +#if WITH_CAP +static int fsmSetcap(FSM_t fsm) +{ + int rc = cap_set_file(fsm->path, fsm->fcaps); + if (rc < 0) { + rc = CPIOERR_SETCAP_FAILED; + } + return rc; +} +#endif /* WITH_CAP */ + +static int fsmVerify(FSM_t fsm) +{ + int rc; + struct stat * st = &fsm->sb; + struct stat * ost = &fsm->osb; + int saveerrno = errno; + + if (fsm->diskchecked && !fsm->exists) { + return CPIOERR_ENOENT; + } + if (S_ISREG(st->st_mode)) { + /* + * XXX HP-UX (and other os'es) don't permit unlink on busy + * XXX files. + */ + fsm->opath = fsm->path; + fsm->path = rstrscat(NULL, fsm->path, "-RPMDELETE", NULL); + rc = fsmRename(fsm); + if (!rc) + (void) fsmUnlink(fsm); + else + rc = CPIOERR_UNLINK_FAILED; + _free(fsm->path); + fsm->path = fsm->opath; + fsm->opath = NULL; + return (rc ? rc : CPIOERR_ENOENT); /* XXX HACK */ + } else if (S_ISDIR(st->st_mode)) { + if (S_ISDIR(ost->st_mode)) return 0; + if (S_ISLNK(ost->st_mode)) { + rc = fsmStat(fsm, 0); + if (rc == CPIOERR_ENOENT) rc = 0; + if (rc) return rc; + errno = saveerrno; + if (S_ISDIR(ost->st_mode)) return 0; + } + } else if (S_ISLNK(st->st_mode)) { + if (S_ISLNK(ost->st_mode)) { + /* XXX NUL terminated result in fsm->rdbuf, len in fsm->rdnb. */ + rc = fsmReadLink(fsm); + errno = saveerrno; + if (rc) return rc; + if (rstreq(fsm->opath, fsm->rdbuf)) return 0; + } + } else if (S_ISFIFO(st->st_mode)) { + if (S_ISFIFO(ost->st_mode)) return 0; + } else if (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode)) { + if ((S_ISCHR(ost->st_mode) || S_ISBLK(ost->st_mode)) && + (ost->st_rdev == st->st_rdev)) return 0; + } else if (S_ISSOCK(st->st_mode)) { + if (S_ISSOCK(ost->st_mode)) return 0; + } + /* XXX shouldn't do this with commit/undo. */ + rc = 0; + if (fsm->stage == FSM_PROCESS) rc = fsmUnlink(fsm); + if (rc == 0) rc = CPIOERR_ENOENT; + return (rc ? rc : CPIOERR_ENOENT); /* XXX HACK */ +} + +/********************************************************************/ + +#define IS_DEV_LOG(_x) \ + ((_x) != NULL && strlen(_x) >= (sizeof("/dev/log")-1) && \ + rstreqn((_x), "/dev/log", sizeof("/dev/log")-1) && \ + ((_x)[sizeof("/dev/log")-1] == '\0' || \ + (_x)[sizeof("/dev/log")-1] == ';')) + +/** + * File state machine driver. + * @param fsm file state machine + * @param stage next stage + * @return 0 on success + */ +static int fsmStage(FSM_t fsm, fileStage stage) +{ +#ifdef UNUSED + fileStage prevStage = fsm->stage; + const char * const prev = fileStageString(prevStage); +#endif + static int modulo = 4; + const char * const cur = fileStageString(stage); + struct stat * st = &fsm->sb; + struct stat * ost = &fsm->osb; + int saveerrno = errno; + int rc = fsm->rc; + rpm_loff_t left; + +#define _fafilter(_a) \ + (!((_a) == FA_CREATE || (_a) == FA_ERASE || (_a) == FA_COPYIN || (_a) == FA_COPYOUT) \ + ? fileActionString(_a) : "") + + if (stage & FSM_DEAD) { + /* do nothing */ + } else if (stage & FSM_INTERNAL) { + if (_fsm_debug && !(stage & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s %06o%3d (%4d,%4d)%10d %s %s\n", + cur, + (unsigned)st->st_mode, (int)st->st_nlink, + (int)st->st_uid, (int)st->st_gid, (int)st->st_size, + (fsm->path ? fsm->path : ""), + _fafilter(fsm->action)); + } else { + fsm->stage = stage; + if (_fsm_debug || !(stage & FSM_VERBOSE)) + rpmlog(RPMLOG_DEBUG, "%-8s %06o%3d (%4d,%4d)%10d %s %s\n", + cur, + (unsigned)st->st_mode, (int)st->st_nlink, + (int)st->st_uid, (int)st->st_gid, (int)st->st_size, + (fsm->path ? fsm->path : ""), + _fafilter(fsm->action)); + } +#undef _fafilter + + switch (stage) { + case FSM_UNKNOWN: + break; + case FSM_PKGINSTALL: + while (1) { + /* Clean fsm, free'ing memory. Read next archive header. */ + rc = fsmInit(fsm); + + /* Exit on end-of-payload. */ + if (rc == CPIOERR_HDR_TRAILER) { + rc = 0; + break; + } + + /* Exit on error. */ + if (rc) { + fsm->postpone = 1; + (void) fsmNext(fsm, FSM_UNDO); + break; + } + + /* Extract file from archive. */ + rc = fsmNext(fsm, FSM_PROCESS); + if (rc) { + (void) fsmNext(fsm, FSM_UNDO); + break; + } + + /* Notify on success. */ + (void) fsmNext(fsm, FSM_NOTIFY); + + rc = fsmNext(fsm, FSM_FINI); + if (rc) { + break; + } + } + break; + case FSM_PKGERASE: + while (1) { + /* Clean fsm, free'ing memory. */ + rc = fsmInit(fsm); + + /* Exit on end-of-payload. */ + if (rc == CPIOERR_HDR_TRAILER) { + rc = 0; + break; + } + + /* Rename/erase next item. */ + if (fsmNext(fsm, FSM_FINI)) + break; + } + break; + case FSM_PKGBUILD: + while (1) { + + rc = fsmInit(fsm); + + /* Exit on end-of-payload. */ + if (rc == CPIOERR_HDR_TRAILER) { + rc = 0; + break; + } + + /* Exit on error. */ + if (rc) { + fsm->postpone = 1; + (void) fsmNext(fsm, FSM_UNDO); + break; + } + + /* Copy file into archive. */ + rc = fsmNext(fsm, FSM_PROCESS); + if (rc) { + (void) fsmNext(fsm, FSM_UNDO); + break; + } + + /* Notify on success. */ + (void) fsmNext(fsm, FSM_NOTIFY); + + if (fsmNext(fsm, FSM_FINI)) + break; + } + + /* Flush partial sets of hard linked files. */ + if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) { + nlink_t i, nlink; + int j; + while ((fsm->li = fsm->links) != NULL) { + fsm->links = fsm->li->next; + fsm->li->next = NULL; + + /* Re-calculate link count for archive header. */ + for (j = -1, nlink = 0, i = 0; i < fsm->li->nlink; i++) { + if (fsm->li->filex[i] < 0) + continue; + nlink++; + if (j == -1) j = i; + } + /* XXX force the contents out as well. */ + if (j != 0) { + fsm->li->filex[0] = fsm->li->filex[j]; + fsm->li->filex[j] = -1; + } + fsm->li->sb.st_nlink = nlink; + + fsm->sb = fsm->li->sb; /* structure assignment */ + fsm->osb = fsm->sb; /* structure assignment */ + + if (!rc) rc = writeLinkedFile(fsm); + + fsm->li = freeHardLink(fsm->li); + } + } + + if (!rc) + rc = cpioTrailerWrite(fsm); + + break; + case FSM_PROCESS: + if (fsm->postpone) { + if (fsm->goal == FSM_PKGINSTALL) + rc = fsmNext(fsm, FSM_EAT); + break; + } + + if (fsm->goal == FSM_PKGBUILD) { + if (fsm->fflags & RPMFILE_GHOST) /* XXX Don't if %ghost file. */ + break; + if (S_ISREG(st->st_mode) && st->st_nlink > 1) { + hardLink_t li, prev; + +if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; + rc = writeLinkedFile(fsm); + if (rc) break; /* W2DO? */ + + for (li = fsm->links, prev = NULL; li; prev = li, li = li->next) + if (li == fsm->li) + break; + + if (prev == NULL) + fsm->links = fsm->li->next; + else + prev->next = fsm->li->next; + fsm->li->next = NULL; + fsm->li = freeHardLink(fsm->li); + } else { + rc = writeFile(fsm, 1); + } + break; + } + + if (fsm->goal != FSM_PKGINSTALL) + break; + + if (S_ISREG(st->st_mode)) { + char * path = fsm->path; + if (fsm->osuffix) + fsm->path = fsmFsPath(fsm, st, NULL, NULL); + rc = fsmVerify(fsm); + + if (rc == 0 && fsm->osuffix) { + char * opath = fsm->opath; + fsm->opath = fsm->path; + fsm->path = fsmFsPath(fsm, st, NULL, fsm->osuffix); + rc = fsmRename(fsm); + if (!rc) + rpmlog(RPMLOG_WARNING, + _("%s saved as %s\n"), + (fsm->opath ? fsm->opath : ""), + (fsm->path ? fsm->path : "")); + fsm->path = _free(fsm->path); + fsm->opath = opath; + } + + fsm->path = path; + if (!(rc == CPIOERR_ENOENT)) return rc; + rc = expandRegular(fsm); + } else if (S_ISDIR(st->st_mode)) { + mode_t st_mode = st->st_mode; + rc = fsmVerify(fsm); + if (rc == CPIOERR_ENOENT) { + st->st_mode &= ~07777; /* XXX abuse st->st_mode */ + st->st_mode |= 00700; + rc = fsmMkdir(fsm); + st->st_mode = st_mode; /* XXX restore st->st_mode */ + } + } else if (S_ISLNK(st->st_mode)) { + char * opath = fsm->opath; + + if ((st->st_size + 1) > fsm->rdsize) { + rc = CPIOERR_HDR_SIZE; + break; + } + + fsm->wrlen = st->st_size; + rc = fsmNext(fsm, FSM_DREAD); + if (!rc && fsm->rdnb != fsm->wrlen) + rc = CPIOERR_READ_FAILED; + if (rc) break; + + fsm->wrbuf[st->st_size] = '\0'; + /* XXX symlink(fsm->opath, fsm->path) */ + fsm->opath = fsm->wrbuf; + rc = fsmVerify(fsm); + if (rc == CPIOERR_ENOENT) { + rc = symlink(fsm->opath, fsm->path); + if (_fsm_debug && (FSM_SYMLINK & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, %s) %s\n", fileStageString(FSM_SYMLINK), + fsm->opath, fsm->path, (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_SYMLINK_FAILED; + } + fsm->opath = opath; /* XXX restore fsm->path */ + } else if (S_ISFIFO(st->st_mode)) { + mode_t st_mode = st->st_mode; + /* This mimics cpio S_ISSOCK() behavior but probably isnt' right */ + rc = fsmVerify(fsm); + if (rc == CPIOERR_ENOENT) { + st->st_mode = 0000; /* XXX abuse st->st_mode */ + + rc = mkfifo(fsm->path, (st->st_mode & 07777)); + if (_fsm_debug && (FSM_MKFIFO & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, 0%04o) %s\n", fileStageString(FSM_MKFIFO), + fsm->path, (unsigned)(st->st_mode & 07777), + (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_MKFIFO_FAILED; + + st->st_mode = st_mode; /* XXX restore st->st_mode */ + } + } else if (S_ISCHR(st->st_mode) || + S_ISBLK(st->st_mode) || + S_ISSOCK(st->st_mode)) + { + rc = fsmVerify(fsm); + if (rc == CPIOERR_ENOENT) { + /* FIX: check S_IFIFO or dev != 0 */ + rc = mknod(fsm->path, (fsm->sb.st_mode & ~07777), fsm->sb.st_rdev); + if (_fsm_debug && (FSM_MKNOD & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, 0%o, 0x%x) %s\n", fileStageString(FSM_MKNOD), + fsm->path, (unsigned)(fsm->sb.st_mode & ~07777), + (unsigned)fsm->sb.st_rdev, + (rc < 0 ? strerror(errno) : "")); + if (rc < 0) rc = CPIOERR_MKNOD_FAILED; + } + } else { + /* XXX Special case /dev/log, which shouldn't be packaged anyways */ + if (!IS_DEV_LOG(fsm->path)) + rc = CPIOERR_UNKNOWN_FILETYPE; + } + if (S_ISREG(st->st_mode) && st->st_nlink > 1) { + fsm->li->createdPath = fsm->li->linkIndex; + rc = fsmMakeLinks(fsm); + } + break; + case FSM_POST: + break; + case FSM_MKLINKS: + rc = fsmMakeLinks(fsm); + break; + case FSM_NOTIFY: /* XXX move from fsm to psm -> tsm */ + if (fsm->goal == FSM_PKGINSTALL || fsm->goal == FSM_PKGBUILD) { + rpmts ts = fsmGetTs(fsm); + rpmte te = fsmGetTe(fsm); + rpmfi fi = fsmGetFi(fsm); + void * ptr; + if (fsm->cpioPos > fsm->archivePos) { + fsm->archivePos = fsm->cpioPos; + ptr = rpmtsNotify(ts, te, RPMCALLBACK_INST_PROGRESS, + fsm->archivePos, fi->archiveSize); + } + } + break; + case FSM_UNDO: + if (fsm->postpone) + break; + if (fsm->goal == FSM_PKGINSTALL) { + /* XXX only erase if temp fn w suffix is in use */ + if (fsm->sufbuf[0] != '\0') { + if (S_ISDIR(st->st_mode)) { + (void) fsmRmdir(fsm); + } else { + (void) fsmUnlink(fsm); + } + } + errno = saveerrno; + } + if (fsm->failedFile && *fsm->failedFile == NULL) + *fsm->failedFile = xstrdup(fsm->path); + break; + case FSM_FINI: + if (!fsm->postpone) { + if (fsm->goal == FSM_PKGINSTALL) + rc = ((S_ISREG(st->st_mode) && st->st_nlink > 1) + ? fsmCommitLinks(fsm) : fsmNext(fsm, FSM_COMMIT)); + if (fsm->goal == FSM_PKGERASE) + rc = fsmNext(fsm, FSM_COMMIT); + } + fsm->path = _free(fsm->path); + fsm->opath = _free(fsm->opath); + memset(st, 0, sizeof(*st)); + memset(ost, 0, sizeof(*ost)); + break; + case FSM_COMMIT: + /* Rename pre-existing modified or unmanaged file. */ + if (fsm->osuffix && fsm->diskchecked && + (fsm->exists || (fsm->goal == FSM_PKGINSTALL && S_ISREG(st->st_mode)))) + { + char * opath = fsm->opath; + char * path = fsm->path; + fsm->opath = fsmFsPath(fsm, st, NULL, NULL); + fsm->path = fsmFsPath(fsm, st, NULL, fsm->osuffix); + rc = fsmRename(fsm); + if (!rc) { + rpmlog(RPMLOG_WARNING, _("%s saved as %s\n"), + (fsm->opath ? fsm->opath : ""), + (fsm->path ? fsm->path : "")); + } + fsm->path = _free(fsm->path); + fsm->path = path; + fsm->opath = _free(fsm->opath); + fsm->opath = opath; + } + + /* Remove erased files. */ + if (fsm->goal == FSM_PKGERASE) { + if (fsm->action == FA_ERASE) { + rpmte te = fsmGetTe(fsm); + if (S_ISDIR(st->st_mode)) { + rc = fsmRmdir(fsm); + if (!rc) break; + switch (rc) { + case CPIOERR_ENOENT: /* XXX rmdir("/") linux 2.2.x kernel hack */ + case CPIOERR_ENOTEMPTY: + /* XXX make sure that build side permits %missingok on directories. */ + if (fsm->fflags & RPMFILE_MISSINGOK) + break; + + /* XXX common error message. */ + rpmlog( + (strict_erasures ? RPMLOG_ERR : RPMLOG_DEBUG), + _("%s rmdir of %s failed: Directory not empty\n"), + rpmteTypeString(te), fsm->path); + break; + default: + rpmlog( + (strict_erasures ? RPMLOG_ERR : RPMLOG_DEBUG), + _("%s rmdir of %s failed: %s\n"), + rpmteTypeString(te), fsm->path, strerror(errno)); + break; + } + } else { + rc = fsmUnlink(fsm); + if (!rc) break; + switch (rc) { + case CPIOERR_ENOENT: + if (fsm->fflags & RPMFILE_MISSINGOK) + break; + default: + rpmlog( + (strict_erasures ? RPMLOG_ERR : RPMLOG_DEBUG), + _("%s unlink of %s failed: %s\n"), + rpmteTypeString(te), fsm->path, strerror(errno)); + break; + } + } + } + /* XXX Failure to remove is not (yet) cause for failure. */ + if (!strict_erasures) rc = 0; + break; + } + + /* XXX Special case /dev/log, which shouldn't be packaged anyways */ + if (!S_ISSOCK(st->st_mode) && !IS_DEV_LOG(fsm->path)) { + /* Rename temporary to final file name. */ + if (!S_ISDIR(st->st_mode) && + (fsm->subdir || fsm->suffix || fsm->nsuffix)) + { + fsm->opath = fsm->path; + fsm->path = fsmFsPath(fsm, st, NULL, fsm->nsuffix); + rc = fsmRename(fsm); + if (!rc && fsm->nsuffix) { + char * opath = fsmFsPath(fsm, st, NULL, NULL); + rpmlog(RPMLOG_WARNING, _("%s created as %s\n"), + (opath ? opath : ""), + (fsm->path ? fsm->path : "")); + opath = _free(opath); + } + fsm->opath = _free(fsm->opath); + } + /* + * Set file security context (if not disabled). + */ + if (!rc && !getuid()) { + rc = fsmMapFContext(fsm); + if (!rc) { + rc = fsmLsetfcon(fsm); + freecon(fsm->fcontext); + } + fsm->fcontext = NULL; + } + if (S_ISLNK(st->st_mode)) { + if (!rc && !getuid()) + rc = fsmLChown(fsm); + } else { + if (!rc && !getuid()) + rc = fsmChown(fsm); + if (!rc) + rc = fsmChmod(fsm); + if (!rc) { + time_t mtime = st->st_mtime; + rpmfi fi = fsmGetFi(fsm); + st->st_mtime = rpmfiFMtimeIndex(fi, fsm->ix); + rc = fsmUtime(fsm); + st->st_mtime = mtime; + /* utime error is not critical for directories */ + if (rc && S_ISDIR(st->st_mode)) + rc = 0; + } +#if WITH_CAP + if (!rc && !S_ISDIR(st->st_mode) && !getuid()) { + rc = fsmMapFCaps(fsm); + if (!rc && fsm->fcaps) { + rc = fsmSetcap(fsm); + cap_free(fsm->fcaps); + } + fsm->fcaps = NULL; + } +#endif /* WITH_CAP */ + } + } + + /* Notify on success. */ + if (!rc) rc = fsmNext(fsm, FSM_NOTIFY); + else if (fsm->failedFile && *fsm->failedFile == NULL) { + *fsm->failedFile = fsm->path; + fsm->path = NULL; + } + break; + case FSM_DESTROY: + fsm->path = _free(fsm->path); + + /* Check for hard links missing from payload. */ + while ((fsm->li = fsm->links) != NULL) { + fsm->links = fsm->li->next; + fsm->li->next = NULL; + if (fsm->goal == FSM_PKGINSTALL && fsm->li->linksLeft) { + for (nlink_t i = 0 ; i < fsm->li->linksLeft; i++) { + if (fsm->li->filex[i] < 0) + continue; + rc = CPIOERR_MISSING_HARDLINK; + if (fsm->failedFile && *fsm->failedFile == NULL) { + fsm->ix = fsm->li->filex[i]; + if (!fsmMapPath(fsm)) { + /* Out-of-sync hardlinks handled as sub-state */ + *fsm->failedFile = fsm->path; + fsm->path = NULL; + } + } + break; + } + } + if (fsm->goal == FSM_PKGBUILD && + (fsm->mapFlags & CPIO_ALL_HARDLINKS)) + { + rc = CPIOERR_MISSING_HARDLINK; + } + fsm->li = freeHardLink(fsm->li); + } + fsm->ldn = _free(fsm->ldn); + fsm->ldnalloc = fsm->ldnlen = 0; + fsm->rdbuf = fsm->rdb = _free(fsm->rdb); + fsm->wrbuf = fsm->wrb = _free(fsm->wrb); + break; + case FSM_NEXT: + rc = fsmNext(fsm, FSM_POS); + if (!rc) + rc = cpioHeaderRead(fsm, st); /* Read next payload header. */ + if (rc) break; + if (rstreq(fsm->path, CPIO_TRAILER)) { /* Detect end-of-payload. */ + fsm->path = _free(fsm->path); + rc = CPIOERR_HDR_TRAILER; + } + if (!rc) + rc = fsmNext(fsm, FSM_POS); + break; + case FSM_EAT: + for (left = st->st_size; left > 0; left -= fsm->rdnb) { + fsm->wrlen = (left > fsm->wrsize ? fsm->wrsize : left); + rc = fsmNext(fsm, FSM_DREAD); + if (rc) + break; + } + break; + case FSM_POS: + left = (modulo - (fsm->cpioPos % modulo)) % modulo; + if (left) { + fsm->wrlen = left; + (void) fsmNext(fsm, FSM_DREAD); + } + break; + case FSM_PAD: + left = (modulo - (fsm->cpioPos % modulo)) % modulo; + if (left) { + memset(fsm->rdbuf, 0, left); + /* XXX DWRITE uses rdnb for I/O length. */ + fsm->rdnb = left; + (void) fsmNext(fsm, FSM_DWRITE); + } + break; + case FSM_DREAD: + fsm->rdnb = Fread(fsm->wrbuf, sizeof(*fsm->wrbuf), fsm->wrlen, fsm->cfd); + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, cfd)\trdnb %d\n", + cur, (fsm->wrbuf == fsm->wrb ? "wrbuf" : "mmap"), + (int)fsm->wrlen, (int)fsm->rdnb); + if (fsm->rdnb != fsm->wrlen || Ferror(fsm->cfd)) + rc = CPIOERR_READ_FAILED; + if (fsm->rdnb > 0) + fsm->cpioPos += fsm->rdnb; + break; + case FSM_DWRITE: + fsm->wrnb = Fwrite(fsm->rdbuf, sizeof(*fsm->rdbuf), fsm->rdnb, fsm->cfd); + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, cfd)\twrnb %d\n", + cur, (fsm->rdbuf == fsm->rdb ? "rdbuf" : "mmap"), + (int)fsm->rdnb, (int)fsm->wrnb); + if (fsm->rdnb != fsm->wrnb || Ferror(fsm->cfd)) + rc = CPIOERR_WRITE_FAILED; + if (fsm->wrnb > 0) + fsm->cpioPos += fsm->wrnb; + break; + + case FSM_ROPEN: + fsm->rfd = Fopen(fsm->path, "r.ufdio"); + if (fsm->rfd == NULL || Ferror(fsm->rfd)) { + if (fsm->rfd != NULL) (void) fsmNext(fsm, FSM_RCLOSE); + fsm->rfd = NULL; + rc = CPIOERR_OPEN_FAILED; + break; + } + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, \"r\") rfd %p rdbuf %p\n", cur, + fsm->path, fsm->rfd, fsm->rdbuf); + break; + case FSM_READ: + fsm->rdnb = Fread(fsm->rdbuf, sizeof(*fsm->rdbuf), fsm->rdlen, fsm->rfd); + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (rdbuf, %d, rfd)\trdnb %d\n", + cur, (int)fsm->rdlen, (int)fsm->rdnb); + if (fsm->rdnb != fsm->rdlen || Ferror(fsm->rfd)) + rc = CPIOERR_READ_FAILED; + break; + case FSM_RCLOSE: + if (fsm->rfd != NULL) { + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%p)\n", cur, fsm->rfd); + (void) rpmswAdd(rpmtsOp(fsmGetTs(fsm), RPMTS_OP_DIGEST), + fdOp(fsm->rfd, FDSTAT_DIGEST)); + (void) Fclose(fsm->rfd); + errno = saveerrno; + } + fsm->rfd = NULL; + break; + case FSM_WOPEN: + fsm->wfd = Fopen(fsm->path, "w.ufdio"); + if (fsm->wfd == NULL || Ferror(fsm->wfd)) { + if (fsm->wfd != NULL) (void) fsmNext(fsm, FSM_WCLOSE); + fsm->wfd = NULL; + rc = CPIOERR_OPEN_FAILED; + } + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%s, \"w\") wfd %p wrbuf %p\n", cur, + fsm->path, fsm->wfd, fsm->wrbuf); + break; + case FSM_WRITE: + fsm->wrnb = Fwrite(fsm->wrbuf, sizeof(*fsm->wrbuf), fsm->rdnb, fsm->wfd); + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (wrbuf, %d, wfd)\twrnb %d\n", + cur, (int)fsm->rdnb, (int)fsm->wrnb); + if (fsm->rdnb != fsm->wrnb || Ferror(fsm->wfd)) + rc = CPIOERR_WRITE_FAILED; + break; + case FSM_WCLOSE: + if (fsm->wfd != NULL) { + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmlog(RPMLOG_DEBUG, " %8s (%p)\n", cur, fsm->wfd); + (void) rpmswAdd(rpmtsOp(fsmGetTs(fsm), RPMTS_OP_DIGEST), + fdOp(fsm->wfd, FDSTAT_DIGEST)); + (void) Fclose(fsm->wfd); + errno = saveerrno; + } + fsm->wfd = NULL; + break; + + default: + break; + } + + if (!(stage & FSM_INTERNAL)) { + fsm->rc = (rc == CPIOERR_HDR_TRAILER ? 0 : rc); + } + return rc; +} + +/** + * Return formatted string representation of file disposition. + * @param a file dispostion + * @return formatted string + */ +static const char * fileActionString(rpmFileAction a) +{ + switch (a) { + case FA_UNKNOWN: return "unknown"; + case FA_CREATE: return "create"; + case FA_COPYOUT: return "copyout"; + case FA_COPYIN: return "copyin"; + case FA_BACKUP: return "backup"; + case FA_SAVE: return "save"; + case FA_SKIP: return "skip"; + case FA_ALTNAME: return "altname"; + case FA_ERASE: return "erase"; + case FA_SKIPNSTATE: return "skipnstate"; + case FA_SKIPNETSHARED: return "skipnetshared"; + case FA_SKIPCOLOR: return "skipcolor"; + default: return "???"; + } +} + +/** + * Return formatted string representation of file stages. + * @param a file stage + * @return formatted string + */ +static const char * fileStageString(fileStage a) { + switch(a) { + case FSM_UNKNOWN: return "unknown"; + + case FSM_PKGINSTALL:return "INSTALL"; + case FSM_PKGERASE: return "ERASE"; + case FSM_PKGBUILD: return "BUILD"; + case FSM_PKGUNDO: return "UNDO"; + + case FSM_CREATE: return "create"; + case FSM_INIT: return "init"; + case FSM_MAP: return "map"; + case FSM_MKDIRS: return "mkdirs"; + case FSM_RMDIRS: return "rmdirs"; + case FSM_PRE: return "pre"; + case FSM_PROCESS: return "process"; + case FSM_POST: return "post"; + case FSM_MKLINKS: return "mklinks"; + case FSM_NOTIFY: return "notify"; + case FSM_UNDO: return "undo"; + case FSM_FINI: return "fini"; + case FSM_COMMIT: return "commit"; + case FSM_DESTROY: return "destroy"; + case FSM_VERIFY: return "verify"; + + case FSM_UNLINK: return "unlink"; + case FSM_RENAME: return "rename"; + case FSM_MKDIR: return "mkdir"; + case FSM_RMDIR: return "rmdir"; + case FSM_LSETFCON: return "lsetfcon"; + case FSM_CHOWN: return "chown"; + case FSM_LCHOWN: return "lchown"; + case FSM_CHMOD: return "chmod"; + case FSM_UTIME: return "utime"; + case FSM_SYMLINK: return "symlink"; + case FSM_LINK: return "link"; + case FSM_MKFIFO: return "mkfifo"; + case FSM_MKNOD: return "mknod"; + case FSM_LSTAT: return "lstat"; + case FSM_STAT: return "stat"; + case FSM_READLINK: return "readlink"; + case FSM_SETCAP: return "setcap"; + + case FSM_NEXT: return "next"; + case FSM_EAT: return "eat"; + case FSM_POS: return "pos"; + case FSM_PAD: return "pad"; + case FSM_TRAILER: return "trailer"; + case FSM_HREAD: return "hread"; + case FSM_HWRITE: return "hwrite"; + case FSM_DREAD: return "Fread"; + case FSM_DWRITE: return "Fwrite"; + + case FSM_ROPEN: return "Fopen"; + case FSM_READ: return "Fread"; + case FSM_RCLOSE: return "Fclose"; + case FSM_WOPEN: return "Fopen"; + case FSM_WRITE: return "Fwrite"; + case FSM_WCLOSE: return "Fclose"; + + default: return "???"; + } +} diff --git a/lib/fsm.h b/lib/fsm.h new file mode 100644 index 0000000..22aa935 --- /dev/null +++ b/lib/fsm.h @@ -0,0 +1,227 @@ +#ifndef H_FSM +#define H_FSM + +/** \ingroup payload + * \file lib/fsm.h + * File state machine to handle a payload within an rpm package. + */ + +#include + +extern int _fsm_debug; + +/** + */ +#define FSM_VERBOSE 0x8000 +#define FSM_INTERNAL 0x4000 +#define FSM_SYSCALL 0x2000 +#define FSM_DEAD 0x1000 + +#define _fv(_a) ((_a) | FSM_VERBOSE) +#define _fi(_a) ((_a) | FSM_INTERNAL) +#define _fs(_a) ((_a) | (FSM_INTERNAL | FSM_SYSCALL)) +#define _fd(_a) ((_a) | (FSM_INTERNAL | FSM_DEAD)) + +typedef enum fileStage_e { + FSM_UNKNOWN = 0, + FSM_INIT = _fd(1), + FSM_PRE = _fd(2), + FSM_PROCESS = _fv(3), + FSM_POST = _fd(4), + FSM_UNDO = 5, + FSM_FINI = 6, + + FSM_PKGINSTALL = _fd(7), + FSM_PKGERASE = _fd(8), + FSM_PKGBUILD = _fd(9), + FSM_PKGUNDO = _fd(11), + + FSM_CREATE = _fd(17), + FSM_MAP = _fd(18), + FSM_MKDIRS = _fi(19), + FSM_RMDIRS = _fi(20), + FSM_MKLINKS = _fi(21), + FSM_NOTIFY = _fd(22), + FSM_DESTROY = _fd(23), + FSM_VERIFY = _fd(24), + FSM_COMMIT = _fd(25), + + FSM_UNLINK = _fs(33), + FSM_RENAME = _fs(34), + FSM_MKDIR = _fs(35), + FSM_RMDIR = _fs(36), + FSM_LSETFCON= _fs(39), + FSM_CHOWN = _fs(40), + FSM_LCHOWN = _fs(41), + FSM_CHMOD = _fs(42), + FSM_UTIME = _fs(43), + FSM_SYMLINK = _fs(44), + FSM_LINK = _fs(45), + FSM_MKFIFO = _fs(46), + FSM_MKNOD = _fs(47), + FSM_LSTAT = _fs(48), + FSM_STAT = _fs(49), + FSM_READLINK= _fs(50), + FSM_SETCAP = _fs(52), + + FSM_NEXT = _fd(65), + FSM_EAT = _fd(66), + FSM_POS = _fd(67), + FSM_PAD = _fd(68), + FSM_TRAILER = _fd(69), + FSM_HREAD = _fd(70), + FSM_HWRITE = _fd(71), + FSM_DREAD = _fs(72), + FSM_DWRITE = _fs(73), + + FSM_ROPEN = _fs(129), + FSM_READ = _fs(130), + FSM_RCLOSE = _fs(131), + FSM_WOPEN = _fs(132), + FSM_WRITE = _fs(133), + FSM_WCLOSE = _fs(134) +} fileStage; +#undef _fv +#undef _fi +#undef _fs +#undef _fd + +/** \ingroup payload + */ +enum cpioMapFlags_e { + CPIO_MAP_PATH = (1 << 0), + CPIO_MAP_MODE = (1 << 1), + CPIO_MAP_UID = (1 << 2), + CPIO_MAP_GID = (1 << 3), + CPIO_FOLLOW_SYMLINKS= (1 << 4), /*!< only for building. */ + CPIO_MAP_ABSOLUTE = (1 << 5), + CPIO_MAP_ADDDOT = (1 << 6), + CPIO_ALL_HARDLINKS = (1 << 7), /*!< fail if hardlinks are missing. */ + CPIO_MAP_TYPE = (1 << 8), /*!< only for building. */ + CPIO_SBIT_CHECK = (1 << 9) +}; +typedef rpmFlags cpioMapFlags; + +typedef struct fsmIterator_s * FSMI_t; +typedef struct fsm_s * FSM_t; + +typedef struct hardLink_s * hardLink_t; + +/** \ingroup payload + * File name and stat information. + */ +struct fsm_s { + char * path; /*!< Current file name. */ + char * opath; /*!< Original file name. */ + FD_t cfd; /*!< Payload file handle. */ + FD_t rfd; /*!< read: File handle. */ + char * rdbuf; /*!< read: Buffer. */ + char * rdb; /*!< read: Buffer allocated. */ + size_t rdsize; /*!< read: Buffer allocated size. */ + size_t rdlen; /*!< read: Number of bytes requested.*/ + size_t rdnb; /*!< read: Number of bytes returned. */ + FD_t wfd; /*!< write: File handle. */ + char * wrbuf; /*!< write: Buffer. */ + char * wrb; /*!< write: Buffer allocated. */ + size_t wrsize; /*!< write: Buffer allocated size. */ + size_t wrlen; /*!< write: Number of bytes requested.*/ + size_t wrnb; /*!< write: Number of bytes returned. */ + FSMI_t iter; /*!< File iterator. */ + int ix; /*!< Current file iterator index. */ + hardLink_t links; /*!< Pending hard linked file(s). */ + hardLink_t li; /*!< Current hard linked file(s). */ + rpm_loff_t * archiveSize; /*!< Pointer to archive size. */ + rpm_loff_t archivePos; /*!< Current archive position. */ + rpm_loff_t cpioPos; + char ** failedFile; /*!< First file name that failed. */ + const char * subdir; /*!< Current file sub-directory. */ + const char * osuffix; /*!< Old, preserved, file suffix. */ + const char * nsuffix; /*!< New, created, file suffix. */ + const char * suffix; /*!< Current file suffix. */ + char sufbuf[64]; /* XXX eliminate */ + short * dnlx; /*!< Last dirpath verified indexes. */ + char * ldn; /*!< Last dirpath verified. */ + int ldnlen; /*!< Last dirpath current length. */ + int ldnalloc; /*!< Last dirpath allocated length. */ + int postpone; /*!< Skip remaining stages? */ + int diskchecked; /*!< Has stat(2) been performed? */ + int exists; /*!< Does current file exist on disk? */ + int mkdirsdone; /*!< Have "orphan" dirs been created? */ + int rc; /*!< External file stage return code. */ + cpioMapFlags mapFlags; /*!< Bit(s) to control mapping. */ + const char * dirName; /*!< File directory name. */ + const char * baseName; /*!< File base name. */ + const unsigned char * digest; /*!< Binary digest (NULL disables). */ + security_context_t fcontext;/*!< File security context (NULL disables). */ + void *fcaps; /*!< File capabilities */ + pgpHashAlgo digestalgo; /*!< File digest algorithm */ + + unsigned fflags; /*!< File flags. */ + rpmFileAction action; /*!< File disposition. */ + fileStage goal; /*!< Package state machine goal. */ + fileStage stage; /*!< External file stage. */ + fileStage nstage; /*!< Next file stage. */ + struct stat sb; /*!< Current file stat(2) info. */ + struct stat osb; /*!< Original file stat(2) info. */ +}; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Create file state machine instance. + * @param mapflags CPIO map flags to use + * @return file state machine + */ +RPM_GNUC_INTERNAL +FSM_t newFSM(cpioMapFlags mapflags); + +/** + * Destroy file state machine instance. + * @param fsm file state machine + * @return always NULL + */ +RPM_GNUC_INTERNAL +FSM_t freeFSM(FSM_t fsm); + +/** + * Load external data into file state machine. + * @param fsm file state machine + * @param goal + * @param ts transaction set + * @param fi transaction element file info + * @param cfd + * @retval archiveSize pointer to archive size + * @retval failedFile pointer to first file name that failed (malloced) + * @return 0 on success + */ +int fsmSetup(FSM_t fsm, fileStage goal, + rpmts ts, + rpmte te, + rpmfi fi, + FD_t cfd, + rpm_loff_t * archiveSize, + char ** failedFile); + +/** + * Clean file state machine. + * @param fsm file state machine + * @return 0 on success + */ +int fsmTeardown(FSM_t fsm); + +/** + * File state machine driver. + * @param fsm file state machine + * @param nstage next stage + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int fsmNext(FSM_t fsm, fileStage nstage); + +#ifdef __cplusplus +} +#endif + +#endif /* H_FSM */ diff --git a/lib/gentagtbl.sh b/lib/gentagtbl.sh new file mode 100755 index 0000000..0558d09 --- /dev/null +++ b/lib/gentagtbl.sh @@ -0,0 +1,80 @@ +#!/bin/sh + +cat << EOF +static const struct headerTagTableEntry_s rpmTagTable[] = { +EOF + +${AWK} '/[\t ](RPMTAG_[A-Z0-9]*)[ \t]+([0-9]*)/ && !/internal/ && !/unimplemented/ { + tt = "NULL" + ta = "ANY" + ext = "0" + if ($5 == "c") { + tt = "CHAR" + ta = "SCALAR" + } + if ($5 == "c[]") { + tt = "CHAR" + ta = "ARRAY" + } + if ($5 == "h") { + tt = "INT16" + ta = "SCALAR" + } + if ($5 == "h[]") { + tt = "INT16" + ta = "ARRAY" + } + if ($5 == "i") { + tt = "INT32" + ta = "SCALAR" + } + if ($5 == "i[]") { + tt = "INT32" + ta = "ARRAY" + } + if ($5 == "l") { + tt = "INT64" + ta = "SCALAR" + } + if ($5 == "l[]") { + tt = "INT64" + ta = "ARRAY" + } + if ($5 == "s") { + tt = "STRING" + ta = "SCALAR" + } + if ($5 == "s[]") { + tt = "STRING_ARRAY" + ta = "ARRAY" + } + if ($5 == "s{}") { + tt = "I18NSTRING" + ta = "SCALAR" + } + if ($5 == "x") { + tt = "BIN" + ta = "SCALAR" + } + if ($6 == "extension") { + ext = "1" + } + if ($2 == "=") { + tnarg = $1 + } else { + tnarg = $2 + } + tn = substr(tnarg, index(tnarg, "_") + 1) + sn = (substr(tn, 1, 1) tolower(substr(tn, 2))) + if ($2 == "=") { + printf(" { \"%s\", \"%s\", %s, RPM_%s_TYPE, RPM_%s_RETURN_TYPE, %d },\n", tnarg, sn, tnarg, tt, ta, ext) + } else { + printf(" { \"%s\", \"%s\", %s, RPM_%s_TYPE, RPM_%s_RETURN_TYPE, %d },\n", tnarg, sn, $3, tt, ta, ext) + } +}' < $1 | sort + +cat << EOF + { NULL, NULL, RPMTAG_NOT_FOUND, RPM_NULL_TYPE, 0 } +}; +EOF + diff --git a/lib/header.c b/lib/header.c new file mode 100644 index 0000000..a1bfe38 --- /dev/null +++ b/lib/header.c @@ -0,0 +1,1761 @@ +/** \ingroup header + * \file lib/header.c + */ + +/* RPM - Copyright (C) 1995-2002 Red Hat Software */ + +/* Data written to file descriptors is in network byte order. */ +/* Data read from file descriptors is expected to be in */ +/* network byte order and is converted on the fly to host order. */ + +#include "system.h" +#include +#include +#include +#include "lib/header_internal.h" +#include "lib/misc.h" /* tag function proto */ + +#include "debug.h" + +/** \ingroup header + */ +const unsigned char rpm_header_magic[8] = { + 0x8e, 0xad, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00 +}; + +/** \ingroup header + * Alignment needed for header data types. + */ +static const int typeAlign[16] = { + 1, /*!< RPM_NULL_TYPE */ + 1, /*!< RPM_CHAR_TYPE */ + 1, /*!< RPM_INT8_TYPE */ + 2, /*!< RPM_INT16_TYPE */ + 4, /*!< RPM_INT32_TYPE */ + 8, /*!< RPM_INT64_TYPE */ + 1, /*!< RPM_STRING_TYPE */ + 1, /*!< RPM_BIN_TYPE */ + 1, /*!< RPM_STRING_ARRAY_TYPE */ + 1, /*!< RPM_I18NSTRING_TYPE */ + 0, + 0, + 0, + 0, + 0, + 0 +}; + +/** \ingroup header + * Size of header data types. + */ +static const int typeSizes[16] = { + 0, /*!< RPM_NULL_TYPE */ + 1, /*!< RPM_CHAR_TYPE */ + 1, /*!< RPM_INT8_TYPE */ + 2, /*!< RPM_INT16_TYPE */ + 4, /*!< RPM_INT32_TYPE */ + 8, /*!< RPM_INT64_TYPE */ + -1, /*!< RPM_STRING_TYPE */ + 1, /*!< RPM_BIN_TYPE */ + -1, /*!< RPM_STRING_ARRAY_TYPE */ + -1, /*!< RPM_I18NSTRING_TYPE */ + 0, + 0, + 0, + 0, + 0, + 0 +}; + +enum headerFlags_e { + HEADERFLAG_SORTED = (1 << 0), /*!< Are header entries sorted? */ + HEADERFLAG_ALLOCATED = (1 << 1), /*!< Is 1st header region allocated? */ + HEADERFLAG_LEGACY = (1 << 2), /*!< Header came from legacy source? */ + HEADERFLAG_DEBUG = (1 << 3), /*!< Debug this header? */ +}; + +typedef rpmFlags headerFlags; + +/** \ingroup header + * The Header data structure. + */ +struct headerToken_s { + void * blob; /*!< Header region blob. */ + indexEntry index; /*!< Array of tags. */ + int indexUsed; /*!< Current size of tag array. */ + int indexAlloced; /*!< Allocated size of tag array. */ + unsigned int instance; /*!< Rpmdb instance (offset) */ + headerFlags flags; + int nrefs; /*!< Reference count. */ +}; + +/** \ingroup header + * Maximum no. of bytes permitted in a header. + */ +static const size_t headerMaxbytes = (32*1024*1024); + +#define INDEX_MALLOC_SIZE 8 + +#define ENTRY_IS_REGION(_e) \ + (((_e)->info.tag >= RPMTAG_HEADERIMAGE) && ((_e)->info.tag < RPMTAG_HEADERREGIONS)) +#define ENTRY_IN_REGION(_e) ((_e)->info.offset < 0) + +/* Convert a 64bit value to network byte order. */ +static uint64_t htonll( uint64_t n ) { + uint32_t *i = (uint32_t*)&n; + uint32_t b = i[0]; + i[0] = htonl(i[1]); + i[1] = htonl(b); + return n; +} + +Header headerLink(Header h) +{ + if (h != NULL) + h->nrefs++; + return h; +} + +static Header headerUnlink(Header h) +{ + if (h != NULL) + h->nrefs--; + return NULL; +} + +Header headerFree(Header h) +{ + (void) headerUnlink(h); + + if (h == NULL || h->nrefs > 0) + return NULL; /* XXX return previous header? */ + + if (h->index) { + indexEntry entry = h->index; + int i; + for (i = 0; i < h->indexUsed; i++, entry++) { + if ((h->flags & HEADERFLAG_ALLOCATED) && ENTRY_IS_REGION(entry)) { + if (entry->length > 0) { + int32_t * ei = entry->data; + if ((ei - 2) == h->blob) h->blob = _free(h->blob); + entry->data = NULL; + } + } else if (!ENTRY_IN_REGION(entry)) { + entry->data = _free(entry->data); + } + entry->data = NULL; + } + h->index = _free(h->index); + } + + h = _free(h); + return h; +} + +static Header headerCreate(void *blob, int32_t indexLen) +{ + Header h = xcalloc(1, sizeof(*h)); + h->blob = blob; + if (blob) { + h->indexAlloced = indexLen + 1; + h->indexUsed = indexLen; + } else { + h->indexAlloced = INDEX_MALLOC_SIZE; + h->indexUsed = 0; + } + h->instance = 0; + h->flags |= HEADERFLAG_SORTED; + + h->index = (h->indexAlloced + ? xcalloc(h->indexAlloced, sizeof(*h->index)) + : NULL); + + h->nrefs = 0; + return headerLink(h); +} + +Header headerNew(void) +{ + return headerCreate(NULL, 0); +} + +int headerVerifyInfo(int il, int dl, const void * pev, void * iv, int negate) +{ + entryInfo pe = (entryInfo) pev; + entryInfo info = iv; + int i; + + for (i = 0; i < il; i++) { + info->tag = ntohl(pe[i].tag); + info->type = ntohl(pe[i].type); + info->offset = ntohl(pe[i].offset); + if (negate) + info->offset = -info->offset; + info->count = ntohl(pe[i].count); + + if (hdrchkType(info->type)) + return i; + if (hdrchkAlign(info->type, info->offset)) + return i; + if (!negate && hdrchkRange(dl, info->offset)) + return i; + if (hdrchkData(info->count)) + return i; + + } + return -1; +} + +/** + */ +static int indexCmp(const void * avp, const void * bvp) +{ + indexEntry ap = (indexEntry) avp, bp = (indexEntry) bvp; + return (ap->info.tag - bp->info.tag); +} + +void headerSort(Header h) +{ + if (!(h->flags & HEADERFLAG_SORTED)) { + qsort(h->index, h->indexUsed, sizeof(*h->index), indexCmp); + h->flags |= HEADERFLAG_SORTED; + } +} + +/** + */ +static int offsetCmp(const void * avp, const void * bvp) +{ + indexEntry ap = (indexEntry) avp, bp = (indexEntry) bvp; + int rc = (ap->info.offset - bp->info.offset); + + if (rc == 0) { + /* Within a region, entries sort by address. Added drips sort by tag. */ + if (ap->info.offset < 0) + rc = (((char *)ap->data) - ((char *)bp->data)); + else + rc = (ap->info.tag - bp->info.tag); + } + return rc; +} + +/** \ingroup header + * Restore tags in header to original ordering. + * @param h header + */ +void headerUnsort(Header h) +{ + if (h->flags & HEADERFLAG_SORTED) { + qsort(h->index, h->indexUsed, sizeof(*h->index), offsetCmp); + h->flags &= ~HEADERFLAG_SORTED; + } +} + +unsigned headerSizeof(Header h, int magicp) +{ + indexEntry entry; + unsigned int size = 0; + int i; + + if (h == NULL) + return size; + + headerSort(h); + + switch (magicp) { + case HEADER_MAGIC_YES: + size += sizeof(rpm_header_magic); + break; + case HEADER_MAGIC_NO: + break; + } + + size += 2 * sizeof(int32_t); /* count of index entries */ + + for (i = 0, entry = h->index; i < h->indexUsed; i++, entry++) { + rpm_tagtype_t type; + + /* Regions go in as is ... */ + if (ENTRY_IS_REGION(entry)) { + size += entry->length; + /* XXX Legacy regions do not include the region tag and data. */ + if (i == 0 && (h->flags & HEADERFLAG_LEGACY)) + size += sizeof(struct entryInfo_s) + entry->info.count; + continue; + } + + /* ... and region elements are skipped. */ + if (entry->info.offset < 0) + continue; + + /* Alignment */ + type = entry->info.type; + if (typeSizes[type] > 1) { + unsigned diff = typeSizes[type] - (size % typeSizes[type]); + if (diff != typeSizes[type]) { + size += diff; + } + } + + size += sizeof(struct entryInfo_s) + entry->length; + } + + return size; +} + +/** + * Return length of entry data. + * @param type entry data type + * @param p entry data + * @param count entry item count + * @param onDisk data is concatenated strings (with NUL's))? + * @param pend pointer to end of data (or NULL) + * @return no. bytes in data, -1 on failure + */ +static int dataLength(rpm_tagtype_t type, rpm_constdata_t p, rpm_count_t count, + int onDisk, rpm_constdata_t pend) +{ + const unsigned char * s = p; + const unsigned char * se = pend; + int length = 0; + + switch (type) { + case RPM_STRING_TYPE: + if (count != 1) + return -1; + while (*s++) { + if (se && s > se) + return -1; + length++; + } + length++; /* count nul terminator too. */ + break; + + case RPM_STRING_ARRAY_TYPE: + case RPM_I18NSTRING_TYPE: + /* These are like RPM_STRING_TYPE, except they're *always* an array */ + /* Compute sum of length of all strings, including nul terminators */ + + if (onDisk) { + while (count--) { + length++; /* count nul terminator too */ + while (*s++) { + if (se && s > se) + return -1; + length++; + } + } + } else { + const char ** av = (const char **)p; + while (count--) { + /* add one for null termination */ + length += strlen(*av++) + 1; + } + } + break; + + default: + if (typeSizes[type] == -1) + return -1; + length = typeSizes[(type & 0xf)] * count; + if (length < 0 || (se && (s + length) > se)) + return -1; + break; + } + + return length; +} + +/** \ingroup header + * Swap int32_t and int16_t arrays within header region. + * + * If a header region tag is in the set to be swabbed, as the data for a + * a header region is located after all other tag data. + * + * @param entry header entry + * @param il no. of entries + * @param dl start no. bytes of data + * @param pe header physical entry pointer (swapped) + * @param dataStart header data start + * @param dataEnd header data end + * @param regionid region offset + * @return no. bytes of data in region, -1 on error + */ +static int regionSwab(indexEntry entry, int il, int dl, + entryInfo pe, + unsigned char * dataStart, + const unsigned char * dataEnd, + int regionid) +{ + for (; il > 0; il--, pe++) { + struct indexEntry_s ie; + rpm_tagtype_t type; + + ie.info.tag = ntohl(pe->tag); + ie.info.type = ntohl(pe->type); + ie.info.count = ntohl(pe->count); + ie.info.offset = ntohl(pe->offset); + + if (hdrchkType(ie.info.type)) + return -1; + if (hdrchkData(ie.info.count)) + return -1; + if (hdrchkData(ie.info.offset)) + return -1; + if (hdrchkAlign(ie.info.type, ie.info.offset)) + return -1; + + ie.data = dataStart + ie.info.offset; + if (dataEnd && (unsigned char *)ie.data >= dataEnd) + return -1; + + ie.length = dataLength(ie.info.type, ie.data, ie.info.count, 1, dataEnd); + if (ie.length < 0 || hdrchkData(ie.length)) + return -1; + + ie.rdlen = 0; + + if (entry) { + ie.info.offset = regionid; + *entry = ie; /* structure assignment */ + entry++; + } + + /* Alignment */ + type = ie.info.type; + if (typeSizes[type] > 1) { + unsigned diff = typeSizes[type] - (dl % typeSizes[type]); + if (diff != typeSizes[type]) { + dl += diff; + } + } + + /* Perform endian conversions */ + switch (ntohl(pe->type)) { + case RPM_INT64_TYPE: + { uint64_t * it = ie.data; + for (; ie.info.count > 0; ie.info.count--, it += 1) { + if (dataEnd && ((unsigned char *)it) >= dataEnd) + return -1; + *it = htonll(*it); + } + } break; + case RPM_INT32_TYPE: + { int32_t * it = ie.data; + for (; ie.info.count > 0; ie.info.count--, it += 1) { + if (dataEnd && ((unsigned char *)it) >= dataEnd) + return -1; + *it = htonl(*it); + } + } break; + case RPM_INT16_TYPE: + { int16_t * it = ie.data; + for (; ie.info.count > 0; ie.info.count--, it += 1) { + if (dataEnd && ((unsigned char *)it) >= dataEnd) + return -1; + *it = htons(*it); + } + } break; + } + + dl += ie.length; + } + + return dl; +} + +/** \ingroup header + * doHeaderUnload. + * @param h header + * @retval *lengthPtr no. bytes in unloaded header blob + * @return unloaded header blob (NULL on error) + */ +static void * doHeaderUnload(Header h, + size_t * lengthPtr) +{ + int32_t * ei = NULL; + entryInfo pe; + char * dataStart; + char * te; + unsigned len; + int32_t il = 0; + int32_t dl = 0; + indexEntry entry; + rpm_tagtype_t type; + int i; + int drlen, ndribbles; + + if (h == NULL) return NULL; + + /* Sort entries by (offset,tag). */ + headerUnsort(h); + + /* Compute (il,dl) for all tags, including those deleted in region. */ + drlen = ndribbles = 0; + for (i = 0, entry = h->index; i < h->indexUsed; i++, entry++) { + if (ENTRY_IS_REGION(entry)) { + int32_t rdl = -entry->info.offset; /* negative offset */ + int32_t ril = rdl/sizeof(*pe); + int rid = entry->info.offset; + + il += ril; + dl += entry->rdlen + entry->info.count; + /* XXX Legacy regions do not include the region tag and data. */ + if (i == 0 && (h->flags & HEADERFLAG_LEGACY)) + il += 1; + + /* Skip rest of entries in region, but account for dribbles. */ + for (; i < h->indexUsed && entry->info.offset <= rid+1; i++, entry++) { + if (entry->info.offset <= rid) + continue; + + /* Alignment */ + type = entry->info.type; + if (typeSizes[type] > 1) { + unsigned diff = typeSizes[type] - (dl % typeSizes[type]); + if (diff != typeSizes[type]) { + drlen += diff; + dl += diff; + } + } + + ndribbles++; + il++; + drlen += entry->length; + dl += entry->length; + } + i--; + entry--; + continue; + } + + /* Ignore deleted drips. */ + if (entry->data == NULL || entry->length <= 0) + continue; + + /* Alignment */ + type = entry->info.type; + if (typeSizes[type] > 1) { + unsigned diff = typeSizes[type] - (dl % typeSizes[type]); + if (diff != typeSizes[type]) { + dl += diff; + } + } + + il++; + dl += entry->length; + } + + /* Sanity checks on header intro. */ + if (hdrchkTags(il) || hdrchkData(dl)) + goto errxit; + + len = sizeof(il) + sizeof(dl) + (il * sizeof(*pe)) + dl; + + ei = xmalloc(len); + ei[0] = htonl(il); + ei[1] = htonl(dl); + + pe = (entryInfo) &ei[2]; + dataStart = te = (char *) (pe + il); + + for (i = 0, entry = h->index; i < h->indexUsed; i++, entry++) { + const char * src; + unsigned char *t; + int count; + int rdlen; + + if (entry->data == NULL || entry->length <= 0) + continue; + + t = (unsigned char*)te; + pe->tag = htonl(entry->info.tag); + pe->type = htonl(entry->info.type); + pe->count = htonl(entry->info.count); + + if (ENTRY_IS_REGION(entry)) { + int32_t rdl = -entry->info.offset; /* negative offset */ + int32_t ril = rdl/sizeof(*pe) + ndribbles; + int rid = entry->info.offset; + + src = (char *)entry->data; + rdlen = entry->rdlen; + + /* XXX Legacy regions do not include the region tag and data. */ + if (i == 0 && (h->flags & HEADERFLAG_LEGACY)) { + int32_t stei[4]; + + memcpy(pe+1, src, rdl); + memcpy(te, src + rdl, rdlen); + te += rdlen; + + pe->offset = htonl(te - dataStart); + stei[0] = pe->tag; + stei[1] = pe->type; + stei[2] = htonl(-rdl-entry->info.count); + stei[3] = pe->count; + memcpy(te, stei, entry->info.count); + te += entry->info.count; + ril++; + rdlen += entry->info.count; + + count = regionSwab(NULL, ril, 0, pe, t, NULL, 0); + if (count != rdlen) + goto errxit; + + } else { + + memcpy(pe+1, src + sizeof(*pe), ((ril-1) * sizeof(*pe))); + memcpy(te, src + (ril * sizeof(*pe)), rdlen+entry->info.count+drlen); + te += rdlen; + { + entryInfo se = (entryInfo)src; + int off = ntohl(se->offset); + pe->offset = (off) ? htonl(te - dataStart) : htonl(off); + } + te += entry->info.count + drlen; + + count = regionSwab(NULL, ril, 0, pe, t, NULL, 0); + if (count != (rdlen + entry->info.count + drlen)) + goto errxit; + } + + /* Skip rest of entries in region. */ + while (i < h->indexUsed && entry->info.offset <= rid+1) { + i++; + entry++; + } + i--; + entry--; + pe += ril; + continue; + } + + /* Ignore deleted drips. */ + if (entry->data == NULL || entry->length <= 0) + continue; + + /* Alignment */ + type = entry->info.type; + if (typeSizes[type] > 1) { + unsigned diff; + diff = typeSizes[type] - ((te - dataStart) % typeSizes[type]); + if (diff != typeSizes[type]) { + memset(te, 0, diff); + te += diff; + } + } + + pe->offset = htonl(te - dataStart); + + /* copy data w/ endian conversions */ + switch (entry->info.type) { + case RPM_INT64_TYPE: + count = entry->info.count; + src = entry->data; + while (count--) { + *((uint64_t *)te) = htonll(*((uint64_t *)src)); + te += sizeof(uint64_t); + src += sizeof(uint64_t); + } + break; + + case RPM_INT32_TYPE: + count = entry->info.count; + src = entry->data; + while (count--) { + *((int32_t *)te) = htonl(*((int32_t *)src)); + te += sizeof(int32_t); + src += sizeof(int32_t); + } + break; + + case RPM_INT16_TYPE: + count = entry->info.count; + src = entry->data; + while (count--) { + *((int16_t *)te) = htons(*((int16_t *)src)); + te += sizeof(int16_t); + src += sizeof(int16_t); + } + break; + + default: + memcpy(te, entry->data, entry->length); + te += entry->length; + break; + } + pe++; + } + + /* Insure that there are no memcpy underruns/overruns. */ + if (((char *)pe) != dataStart) + goto errxit; + if ((((char *)ei)+len) != te) + goto errxit; + + if (lengthPtr) + *lengthPtr = len; + + headerSort(h); + + return (void *) ei; + +errxit: + ei = _free(ei); + return (void *) ei; +} + +void * headerUnload(Header h) +{ + size_t length; + void * uh = doHeaderUnload(h, &length); + return uh; +} + +/** + * Find matching (tag,type) entry in header. + * @param h header + * @param tag entry tag + * @param type entry type + * @return header entry + */ +static +indexEntry findEntry(Header h, rpmTagVal tag, rpm_tagtype_t type) +{ + indexEntry entry; + struct indexEntry_s key; + + if (h == NULL) return NULL; + if (!(h->flags & HEADERFLAG_SORTED)) headerSort(h); + + key.info.tag = tag; + + entry = bsearch(&key, h->index, h->indexUsed, sizeof(*h->index), indexCmp); + if (entry == NULL) + return NULL; + + if (type == RPM_NULL_TYPE) + return entry; + + /* look backwards */ + while (entry->info.tag == tag && entry->info.type != type && + entry > h->index) entry--; + + if (entry->info.tag == tag && entry->info.type == type) + return entry; + + return NULL; +} + +int headerDel(Header h, rpmTagVal tag) +{ + indexEntry last = h->index + h->indexUsed; + indexEntry entry, first; + int ne; + + entry = findEntry(h, tag, RPM_NULL_TYPE); + if (!entry) return 1; + + /* Make sure entry points to the first occurence of this tag. */ + while (entry > h->index && (entry - 1)->info.tag == tag) + entry--; + + /* Free data for tags being removed. */ + for (first = entry; first < last; first++) { + rpm_data_t data; + if (first->info.tag != tag) + break; + data = first->data; + first->data = NULL; + first->length = 0; + if (ENTRY_IN_REGION(first)) + continue; + data = _free(data); + } + + ne = (first - entry); + if (ne > 0) { + h->indexUsed -= ne; + ne = last - first; + if (ne > 0) + memmove(entry, first, (ne * sizeof(*entry))); + } + + return 0; +} + +Header headerLoad(void * uh) +{ + int32_t * ei = (int32_t *) uh; + int32_t il = ntohl(ei[0]); /* index length */ + int32_t dl = ntohl(ei[1]); /* data length */ + size_t pvlen = sizeof(il) + sizeof(dl) + + (il * sizeof(struct entryInfo_s)) + dl; + void * pv = uh; + Header h = NULL; + entryInfo pe; + unsigned char * dataStart; + unsigned char * dataEnd; + indexEntry entry; + int rdlen; + + /* Sanity checks on header intro. */ + if (hdrchkTags(il) || hdrchkData(dl)) + goto errxit; + + ei = (int32_t *) pv; + pe = (entryInfo) &ei[2]; + dataStart = (unsigned char *) (pe + il); + dataEnd = dataStart + dl; + + h = headerCreate(uh, il); + + entry = h->index; + if (!(htonl(pe->tag) < RPMTAG_HEADERI18NTABLE)) { + h->flags |= HEADERFLAG_LEGACY; + entry->info.type = REGION_TAG_TYPE; + entry->info.tag = RPMTAG_HEADERIMAGE; + entry->info.count = REGION_TAG_COUNT; + entry->info.offset = ((unsigned char *)pe - dataStart); /* negative offset */ + + entry->data = pe; + entry->length = pvlen - sizeof(il) - sizeof(dl); + rdlen = regionSwab(entry+1, il, 0, pe, dataStart, dataEnd, entry->info.offset); + if (rdlen != dl) + goto errxit; + entry->rdlen = rdlen; + h->indexUsed++; + } else { + int32_t rdl; + int32_t ril; + + h->flags &= ~HEADERFLAG_LEGACY; + + entry->info.type = htonl(pe->type); + entry->info.count = htonl(pe->count); + + if (hdrchkType(entry->info.type)) + goto errxit; + if (hdrchkTags(entry->info.count)) + goto errxit; + + { int off = ntohl(pe->offset); + + if (hdrchkData(off)) + goto errxit; + if (off) { + size_t nb = REGION_TAG_COUNT; + int32_t stei[nb]; + /* XXX Hmm, why the copy? */ + memcpy(&stei, dataStart + off, nb); + rdl = -ntohl(stei[2]); /* negative offset */ + ril = rdl/sizeof(*pe); + if (hdrchkTags(ril) || hdrchkData(rdl)) + goto errxit; + entry->info.tag = htonl(pe->tag); + } else { + ril = il; + rdl = (ril * sizeof(struct entryInfo_s)); + entry->info.tag = RPMTAG_HEADERIMAGE; + } + } + entry->info.offset = -rdl; /* negative offset */ + + entry->data = pe; + entry->length = pvlen - sizeof(il) - sizeof(dl); + rdlen = regionSwab(entry+1, ril-1, 0, pe+1, dataStart, dataEnd, entry->info.offset); + if (rdlen < 0) + goto errxit; + entry->rdlen = rdlen; + + if (ril < h->indexUsed) { + indexEntry newEntry = entry + ril; + int ne = (h->indexUsed - ril); + int rid = entry->info.offset+1; + int rc; + + /* Load dribble entries from region. */ + rc = regionSwab(newEntry, ne, 0, pe+ril, dataStart, dataEnd, rid); + if (rc < 0) + goto errxit; + rdlen += rc; + + { indexEntry firstEntry = newEntry; + int save = h->indexUsed; + int j; + + /* Dribble entries replace duplicate region entries. */ + h->indexUsed -= ne; + for (j = 0; j < ne; j++, newEntry++) { + (void) headerDel(h, newEntry->info.tag); + if (newEntry->info.tag == RPMTAG_BASENAMES) + (void) headerDel(h, RPMTAG_OLDFILENAMES); + } + + /* If any duplicate entries were replaced, move new entries down. */ + if (h->indexUsed < (save - ne)) { + memmove(h->index + h->indexUsed, firstEntry, + (ne * sizeof(*entry))); + } + h->indexUsed += ne; + } + } + } + + h->flags &= ~HEADERFLAG_SORTED; + headerSort(h); + h->flags |= HEADERFLAG_ALLOCATED; + + return h; + +errxit: + if (h) { + h->index = _free(h->index); + h = _free(h); + } + return h; +} + +Header headerReload(Header h, rpmTagVal tag) +{ + Header nh; + size_t length; + void * uh = doHeaderUnload(h, &length); + + h = headerFree(h); + if (uh == NULL) + return NULL; + nh = headerLoad(uh); + if (nh == NULL) { + uh = _free(uh); + return NULL; + } + if (ENTRY_IS_REGION(nh->index)) { + if (tag == RPMTAG_HEADERSIGNATURES || tag == RPMTAG_HEADERIMMUTABLE) + nh->index[0].info.tag = tag; + } + return nh; +} + +Header headerCopyLoad(const void * uh) +{ + int32_t * ei = (int32_t *) uh; + int32_t il = ntohl(ei[0]); /* index length */ + int32_t dl = ntohl(ei[1]); /* data length */ + size_t pvlen = sizeof(il) + sizeof(dl) + + (il * sizeof(struct entryInfo_s)) + dl; + void * nuh = NULL; + Header h = NULL; + + /* Sanity checks on header intro. */ + if (!(hdrchkTags(il) || hdrchkData(dl)) && pvlen < headerMaxbytes) { + nuh = memcpy(xmalloc(pvlen), uh, pvlen); + if ((h = headerLoad(nuh)) == NULL) + nuh = _free(nuh); + } + return h; +} + +/** \ingroup header + * Read (and load) header from file handle. + * @param fd file handle + * @param magicp read (and verify) 8 bytes of (magic, 0)? + * @return header (or NULL on error) + */ +Header headerRead(FD_t fd, int magicp) +{ + int32_t block[4]; + int32_t reserved; + int32_t * ei = NULL; + int32_t il; + int32_t dl; + int32_t magic; + Header h = NULL; + size_t len; + int i; + + memset(block, 0, sizeof(block)); + i = 2; + if (magicp == HEADER_MAGIC_YES) + i += 2; + + /* FIX: cast? */ + if (timedRead(fd, (char *)block, i*sizeof(*block)) != (i * sizeof(*block))) + goto exit; + + i = 0; + + if (magicp == HEADER_MAGIC_YES) { + magic = block[i++]; + if (memcmp(&magic, rpm_header_magic, sizeof(magic))) + goto exit; + reserved = block[i++]; + } + + il = ntohl(block[i]); i++; + dl = ntohl(block[i]); i++; + + len = sizeof(il) + sizeof(dl) + (il * sizeof(struct entryInfo_s)) + dl; + + /* Sanity checks on header intro. */ + if (hdrchkTags(il) || hdrchkData(dl) || len > headerMaxbytes) + goto exit; + + ei = xmalloc(len); + ei[0] = htonl(il); + ei[1] = htonl(dl); + len -= sizeof(il) + sizeof(dl); + + /* FIX: cast? */ + if (timedRead(fd, (char *)&ei[2], len) != len) + goto exit; + + h = headerLoad(ei); + +exit: + if (h == NULL && ei != NULL) { + free(ei); + } + return h; +} + +int headerWrite(FD_t fd, Header h, int magicp) +{ + ssize_t nb; + size_t length; + void * uh; + + uh = doHeaderUnload(h, &length); + if (uh == NULL) + return 1; + switch (magicp) { + case HEADER_MAGIC_YES: + nb = Fwrite(rpm_header_magic, sizeof(uint8_t), sizeof(rpm_header_magic), fd); + if (nb != sizeof(rpm_header_magic)) + goto exit; + break; + case HEADER_MAGIC_NO: + break; + } + + nb = Fwrite(uh, sizeof(char), length, fd); + +exit: + uh = _free(uh); + return (nb == length ? 0 : 1); +} + +int headerIsEntry(Header h, rpmTagVal tag) +{ + /* FIX: h modified by sort. */ + return (findEntry(h, tag, RPM_NULL_TYPE) ? 1 : 0); + +} + +/** \ingroup header + * Retrieve data from header entry. + * Relevant flags (others are ignored), if neither is set allocation + * behavior depends on data type(!) + * HEADERGET_MINMEM: return pointers to header memory + * HEADERGET_ALLOC: always return malloced memory, overrides MINMEM + * + * @todo Permit retrieval of regions other than HEADER_IMUTABLE. + * @param entry header entry + * @param td tag data container + * @param minMem string pointers refer to header memory? + * @param flags flags to control memory allocation + * @return 1 on success, otherwise error. + */ +static int copyTdEntry(const indexEntry entry, rpmtd td, headerGetFlags flags) +{ + rpm_count_t count = entry->info.count; + int rc = 1; /* XXX 1 on success. */ + /* ALLOC overrides MINMEM */ + int allocMem = flags & HEADERGET_ALLOC; + int minMem = allocMem ? 0 : flags & HEADERGET_MINMEM; + int argvArray = (flags & HEADERGET_ARGV) ? 1 : 0; + + assert(td != NULL); + td->flags = RPMTD_IMMUTABLE; + switch (entry->info.type) { + case RPM_BIN_TYPE: + /* + * XXX This only works for + * XXX "sealed" HEADER_IMMUTABLE/HEADER_SIGNATURES/HEADER_IMAGE. + * XXX This will *not* work for unsealed legacy HEADER_IMAGE (i.e. + * XXX a legacy header freshly read, but not yet unloaded to the rpmdb). + */ + if (ENTRY_IS_REGION(entry)) { + int32_t * ei = ((int32_t *)entry->data) - 2; + entryInfo pe = (entryInfo) (ei + 2); + unsigned char * dataStart = (unsigned char *) (pe + ntohl(ei[0])); + int32_t rdl = -entry->info.offset; /* negative offset */ + int32_t ril = rdl/sizeof(*pe); + + rdl = entry->rdlen; + count = 2 * sizeof(*ei) + (ril * sizeof(*pe)) + rdl; + if (entry->info.tag == RPMTAG_HEADERIMAGE) { + ril -= 1; + pe += 1; + } else { + count += REGION_TAG_COUNT; + rdl += REGION_TAG_COUNT; + } + + td->data = xmalloc(count); + ei = (int32_t *) td->data; + ei[0] = htonl(ril); + ei[1] = htonl(rdl); + + pe = (entryInfo) memcpy(ei + 2, pe, (ril * sizeof(*pe))); + + dataStart = (unsigned char *) memcpy(pe + ril, dataStart, rdl); + + rc = regionSwab(NULL, ril, 0, pe, dataStart, dataStart + rdl, 0); + /* don't return data on failure */ + if (rc < 0) { + td->data = _free(td->data); + } + /* XXX 1 on success. */ + rc = (rc < 0) ? 0 : 1; + } else { + count = entry->length; + td->data = (!minMem + ? memcpy(xmalloc(count), entry->data, count) + : entry->data); + } + break; + case RPM_STRING_TYPE: + /* simple string, but fallthrough if its actually an array */ + if (count == 1 && !argvArray) { + td->data = allocMem ? xstrdup(entry->data) : entry->data; + break; + } + case RPM_STRING_ARRAY_TYPE: + case RPM_I18NSTRING_TYPE: + { const char ** ptrEntry; + int tableSize = (count + argvArray) * sizeof(char *); + char * t; + int i; + + if (minMem) { + td->data = xmalloc(tableSize); + ptrEntry = (const char **) td->data; + t = entry->data; + } else { + t = xmalloc(tableSize + entry->length); + td->data = (void *)t; + ptrEntry = (const char **) td->data; + t += tableSize; + memcpy(t, entry->data, entry->length); + } + for (i = 0; i < count; i++) { + *ptrEntry++ = t; + t = strchr(t, 0); + t++; + } + if (argvArray) { + *ptrEntry = NULL; + td->flags |= RPMTD_ARGV; + } + } break; + case RPM_CHAR_TYPE: + case RPM_INT8_TYPE: + case RPM_INT16_TYPE: + case RPM_INT32_TYPE: + case RPM_INT64_TYPE: + if (allocMem) { + td->data = xmalloc(entry->length); + memcpy(td->data, entry->data, entry->length); + } else { + td->data = entry->data; + } + break; + default: + /* WTH? Don't mess with unknown data types... */ + rc = 0; + td->data = NULL; + break; + } + td->type = entry->info.type; + td->count = count; + + if (td->data && entry->data != td->data) { + td->flags |= RPMTD_ALLOCED; + } + + return rc; +} + +/** + * Does locale match entry in header i18n table? + * + * \verbatim + * The range [l,le) contains the next locale to match: + * ll[_CC][.EEEEE][@dddd] + * where + * ll ISO language code (in lowercase). + * CC (optional) ISO coutnry code (in uppercase). + * EEEEE (optional) encoding (not really standardized). + * dddd (optional) dialect. + * \endverbatim + * + * @param td header i18n table data, NUL terminated + * @param l start of locale to match + * @param le end of locale to match + * @return 1 on good match, 2 on weak match, 0 on no match + */ +static int headerMatchLocale(const char *td, const char *l, const char *le) +{ + const char *fe; + + /* First try a complete match. */ + if (strlen(td) == (le-l) && rstreqn(td, l, (le - l))) + return 1; + + /* Next, try stripping optional dialect and matching. */ + for (fe = l; fe < le && *fe != '@'; fe++) + {}; + if (fe < le && rstreqn(td, l, (fe - l))) + return 1; + + /* Next, try stripping optional codeset and matching. */ + for (fe = l; fe < le && *fe != '.'; fe++) + {}; + if (fe < le && rstreqn(td, l, (fe - l))) + return 1; + + /* Finally, try stripping optional country code and matching. */ + for (fe = l; fe < le && *fe != '_'; fe++) + {}; + if (fe < le && rstreqn(td, l, (fe - l))) + return 2; + + return 0; +} + +/** + * Return i18n string from header that matches locale. + * @param h header + * @param entry i18n string data + * @retval td tag data container + * @param flags flags to control allocation + * @return 1 always + */ +static int copyI18NEntry(Header h, indexEntry entry, rpmtd td, + headerGetFlags flags) +{ + const char *lang, *l, *le; + indexEntry table; + + td->type = RPM_STRING_TYPE; + td->count = 1; + /* if no match, just return the first string */ + td->data = entry->data; + + /* XXX Drepper sez' this is the order. */ + if ((lang = getenv("LANGUAGE")) == NULL && + (lang = getenv("LC_ALL")) == NULL && + (lang = getenv("LC_MESSAGES")) == NULL && + (lang = getenv("LANG")) == NULL) + goto exit; + + if ((table = findEntry(h, RPMTAG_HEADERI18NTABLE, RPM_STRING_ARRAY_TYPE)) == NULL) + goto exit; + + for (l = lang; *l != '\0'; l = le) { + const char *t; + char *ed, *ed_weak = NULL; + int langNum; + + while (*l && *l == ':') /* skip leading colons */ + l++; + if (*l == '\0') + break; + for (le = l; *le && *le != ':'; le++) /* find end of this locale */ + {}; + + /* For each entry in the header ... */ + for (langNum = 0, t = table->data, ed = entry->data; + langNum < entry->info.count; + langNum++, t += strlen(t) + 1, ed += strlen(ed) + 1) { + + int match = headerMatchLocale(t, l, le); + if (match == 1) { + td->data = ed; + goto exit; + } else if (match == 2) { + ed_weak = ed; + } + } + if (ed_weak) { + td->data = ed_weak; + goto exit; + } + } + +exit: + if (flags & HEADERGET_ALLOC) { + td->data = xstrdup(td->data); + td->flags |= RPMTD_ALLOCED; + } + + return 1; +} + +/** + * Retrieve tag data from header. + * @param h header + * @retval td tag data container + * @param flags flags to control retrieval + * @return 1 on success, 0 on not found + */ +static int intGetTdEntry(Header h, rpmtd td, headerGetFlags flags) +{ + indexEntry entry; + int rc; + + /* First find the tag */ + /* FIX: h modified by sort. */ + entry = findEntry(h, td->tag, RPM_NULL_TYPE); + if (entry == NULL) { + /* Td is zeroed above, just return... */ + return 0; + } + + if (flags & HEADERGET_RAW) { + rc = copyTdEntry(entry, td, flags); + } else { + switch (entry->info.type) { + case RPM_I18NSTRING_TYPE: + rc = copyI18NEntry(h, entry, td, flags); + break; + default: + rc = copyTdEntry(entry, td, flags); + break; + } + } + + /* XXX 1 on success */ + return ((rc == 1) ? 1 : 0); +} + +int headerGet(Header h, rpmTagVal tag, rpmtd td, headerGetFlags flags) +{ + int rc; + headerTagTagFunction tagfunc = intGetTdEntry; + + if (td == NULL) return 0; + + rpmtdReset(td); + td->tag = tag; + + if (flags & HEADERGET_EXT) { + headerTagTagFunction extfunc = rpmHeaderTagFunc(tag); + if (extfunc) tagfunc = extfunc; + } + rc = tagfunc(h, td, flags); + + assert(tag == td->tag); + return rc; +} + +/** + */ +static void copyData(rpm_tagtype_t type, rpm_data_t dstPtr, + rpm_constdata_t srcPtr, rpm_count_t cnt, int dataLength) +{ + switch (type) { + case RPM_STRING_ARRAY_TYPE: + case RPM_I18NSTRING_TYPE: + { const char ** av = (const char **) srcPtr; + char * t = dstPtr; + + while (cnt-- > 0 && dataLength > 0) { + const char * s; + if ((s = *av++) == NULL) + continue; + do { + *t++ = *s++; + } while (s[-1] && --dataLength > 0); + } + } break; + + default: + memmove(dstPtr, srcPtr, dataLength); + break; + } +} + +/** + * Return (malloc'ed) copy of entry data. + * @param type entry data type + * @param p entry data + * @param c entry item count + * @retval lengthPtr no. bytes in returned data + * @return (malloc'ed) copy of entry data, NULL on error + */ +static void * +grabData(rpm_tagtype_t type, rpm_constdata_t p, rpm_count_t c, int * lengthPtr) +{ + rpm_data_t data = NULL; + int length; + + length = dataLength(type, p, c, 0, NULL); + if (length > 0) { + data = xmalloc(length); + copyData(type, data, p, c, length); + } + + if (lengthPtr) + *lengthPtr = length; + return data; +} + +static int intAddEntry(Header h, rpmtd td) +{ + indexEntry entry; + rpm_data_t data; + int length; + + /* Count must always be >= 1 for headerAddEntry. */ + if (td->count <= 0) + return 0; + + if (hdrchkType(td->type)) + return 0; + if (hdrchkData(td->count)) + return 0; + + length = 0; + data = grabData(td->type, td->data, td->count, &length); + if (data == NULL || length <= 0) + return 0; + + /* Allocate more index space if necessary */ + if (h->indexUsed == h->indexAlloced) { + h->indexAlloced += INDEX_MALLOC_SIZE; + h->index = xrealloc(h->index, h->indexAlloced * sizeof(*h->index)); + } + + /* Fill in the index */ + entry = h->index + h->indexUsed; + entry->info.tag = td->tag; + entry->info.type = td->type; + entry->info.count = td->count; + entry->info.offset = 0; + entry->data = data; + entry->length = length; + + if (h->indexUsed > 0 && td->tag < h->index[h->indexUsed-1].info.tag) + h->flags &= ~HEADERFLAG_SORTED; + h->indexUsed++; + + return 1; +} + +static int intAppendEntry(Header h, rpmtd td) +{ + indexEntry entry; + int length; + + if (td->type == RPM_STRING_TYPE || td->type == RPM_I18NSTRING_TYPE) { + /* we can't do this */ + return 0; + } + + /* Find the tag entry in the header. */ + entry = findEntry(h, td->tag, td->type); + if (!entry) + return 0; + + length = dataLength(td->type, td->data, td->count, 0, NULL); + if (length < 0) + return 0; + + if (ENTRY_IN_REGION(entry)) { + char * t = xmalloc(entry->length + length); + memcpy(t, entry->data, entry->length); + entry->data = t; + entry->info.offset = 0; + } else + entry->data = xrealloc(entry->data, entry->length + length); + + copyData(td->type, ((char *) entry->data) + entry->length, + td->data, td->count, length); + + entry->length += length; + + entry->info.count += td->count; + + return 1; +} + +int headerPut(Header h, rpmtd td, headerPutFlags flags) +{ + int rc; + + assert(td != NULL); + if (flags & HEADERPUT_APPEND) { + rc = findEntry(h, td->tag, td->type) ? + intAppendEntry(h, td) : + intAddEntry(h, td); + } else { + rc = intAddEntry(h, td); + } + return rc; +} + +int headerAddI18NString(Header h, rpmTagVal tag, const char * string, + const char * lang) +{ + indexEntry table, entry; + const char ** strArray; + int length; + int ghosts; + rpm_count_t i, langNum; + char * buf; + + table = findEntry(h, RPMTAG_HEADERI18NTABLE, RPM_STRING_ARRAY_TYPE); + entry = findEntry(h, tag, RPM_I18NSTRING_TYPE); + + if (!table && entry) + return 0; /* this shouldn't ever happen!! */ + + if (!table && !entry) { + const char * charArray[2]; + rpm_count_t count = 0; + struct rpmtd_s td; + if (!lang || (lang[0] == 'C' && lang[1] == '\0')) { + charArray[count++] = "C"; + } else { + charArray[count++] = "C"; + charArray[count++] = lang; + } + + rpmtdReset(&td); + td.tag = RPMTAG_HEADERI18NTABLE; + td.type = RPM_STRING_ARRAY_TYPE; + td.data = (void *) charArray; + td.count = count; + if (!headerPut(h, &td, HEADERPUT_DEFAULT)) + return 0; + table = findEntry(h, RPMTAG_HEADERI18NTABLE, RPM_STRING_ARRAY_TYPE); + } + + if (!table) + return 0; + if (!lang) lang = "C"; + + { const char * l = table->data; + for (langNum = 0; langNum < table->info.count; langNum++) { + if (rstreq(l, lang)) break; + l += strlen(l) + 1; + } + } + + if (langNum >= table->info.count) { + length = strlen(lang) + 1; + if (ENTRY_IN_REGION(table)) { + char * t = xmalloc(table->length + length); + memcpy(t, table->data, table->length); + table->data = t; + table->info.offset = 0; + } else + table->data = xrealloc(table->data, table->length + length); + memmove(((char *)table->data) + table->length, lang, length); + table->length += length; + table->info.count++; + } + + if (!entry) { + int rc; + struct rpmtd_s td; + strArray = xmalloc(sizeof(*strArray) * (langNum + 1)); + for (i = 0; i < langNum; i++) + strArray[i] = ""; + strArray[langNum] = string; + + rpmtdReset(&td); + td.tag = tag; + td.type = RPM_I18NSTRING_TYPE; + td.data = strArray; + td.count = langNum + 1; + rc = headerPut(h, &td, HEADERPUT_DEFAULT); + free(strArray); + return rc; + } else if (langNum >= entry->info.count) { + ghosts = langNum - entry->info.count; + + length = strlen(string) + 1 + ghosts; + if (ENTRY_IN_REGION(entry)) { + char * t = xmalloc(entry->length + length); + memcpy(t, entry->data, entry->length); + entry->data = t; + entry->info.offset = 0; + } else + entry->data = xrealloc(entry->data, entry->length + length); + + memset(((char *)entry->data) + entry->length, '\0', ghosts); + memmove(((char *)entry->data) + entry->length + ghosts, string, strlen(string)+1); + + entry->length += length; + entry->info.count = langNum + 1; + } else { + char *b, *be, *e, *ee, *t; + size_t bn, sn, en; + + /* Set beginning/end pointers to previous data */ + b = be = e = ee = entry->data; + for (i = 0; i < table->info.count; i++) { + if (i == langNum) + be = ee; + ee += strlen(ee) + 1; + if (i == langNum) + e = ee; + } + + /* Get storage for new buffer */ + bn = (be-b); + sn = strlen(string) + 1; + en = (ee-e); + length = bn + sn + en; + t = buf = xmalloc(length); + + /* Copy values into new storage */ + memcpy(t, b, bn); + t += bn; + memcpy(t, string, sn); + t += sn; + memcpy(t, e, en); + t += en; + + /* Replace i18N string array */ + entry->length -= strlen(be) + 1; + entry->length += sn; + + if (ENTRY_IN_REGION(entry)) { + entry->info.offset = 0; + } else + entry->data = _free(entry->data); + entry->data = buf; + } + + return 0; +} + +int headerMod(Header h, rpmtd td) +{ + indexEntry entry; + rpm_data_t oldData; + rpm_data_t data; + int length; + + /* First find the tag */ + entry = findEntry(h, td->tag, td->type); + if (!entry) + return 0; + + length = 0; + data = grabData(td->type, td->data, td->count, &length); + if (data == NULL || length <= 0) + return 0; + + /* make sure entry points to the first occurence of this tag */ + while (entry > h->index && (entry - 1)->info.tag == td->tag) + entry--; + + /* free after we've grabbed the new data in case the two are intertwined; + that's a bad idea but at least we won't break */ + oldData = entry->data; + + entry->info.count = td->count; + entry->info.type = td->type; + entry->data = data; + entry->length = length; + + if (ENTRY_IN_REGION(entry)) { + entry->info.offset = 0; + } else + oldData = _free(oldData); + + return 1; +} + +/** + * Header tag iterator data structure. + */ +struct headerIterator_s { + Header h; /*!< Header being iterated. */ + int next_index; /*!< Next tag index. */ +}; + +HeaderIterator headerFreeIterator(HeaderIterator hi) +{ + if (hi != NULL) { + hi->h = headerFree(hi->h); + hi = _free(hi); + } + return hi; +} + +HeaderIterator headerInitIterator(Header h) +{ + HeaderIterator hi = xmalloc(sizeof(*hi)); + + headerSort(h); + + hi->h = headerLink(h); + hi->next_index = 0; + return hi; +} + +static indexEntry nextIndex(HeaderIterator hi) +{ + Header h = hi->h; + int slot; + indexEntry entry = NULL; + + for (slot = hi->next_index; slot < h->indexUsed; slot++) { + entry = h->index + slot; + if (!ENTRY_IS_REGION(entry)) + break; + } + hi->next_index = slot; + if (entry == NULL || slot >= h->indexUsed) + return NULL; + + hi->next_index++; + return entry; +} + +rpmTagVal headerNextTag(HeaderIterator hi) +{ + indexEntry entry = nextIndex(hi); + return entry ? entry->info.tag : RPMTAG_NOT_FOUND; +} + +int headerNext(HeaderIterator hi, rpmtd td) +{ + indexEntry entry = nextIndex(hi); + int rc = 0; + + rpmtdReset(td); + if (entry) { + td->tag = entry->info.tag; + rc = copyTdEntry(entry, td, HEADERGET_DEFAULT); + } + return ((rc == 1) ? 1 : 0); +} + +unsigned int headerGetInstance(Header h) +{ + return h ? h->instance : 0; +} + +void headerSetInstance(Header h, unsigned int instance) +{ + h->instance = instance; +} + diff --git a/lib/header.h b/lib/header.h new file mode 100644 index 0000000..a9160fc --- /dev/null +++ b/lib/header.h @@ -0,0 +1,446 @@ +#ifndef H_HEADER +#define H_HEADER + +/** \ingroup header + * \file lib/header.h + * + * An rpm header carries all information about a package. A header is + * a collection of data elements called tags. Each tag has a data type, + * and includes 1 or more values. + * + */ + +/* RPM - Copyright (C) 1995-2001 Red Hat Software */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup header + * Header magic value + */ +extern const unsigned char rpm_header_magic[8]; + +/** \ingroup header + * Include calculation for 8 bytes of (magic, 0)? + */ +enum hMagic { + HEADER_MAGIC_NO = 0, + HEADER_MAGIC_YES = 1 +}; + +/** \ingroup header + * Create new (empty) header instance. + * @return header + */ +Header headerNew(void); + +/** \ingroup header + * Dereference a header instance. + * @param h header + * @return NULL always + */ +Header headerFree( Header h); + +/** \ingroup header + * Reference a header instance. + * @param h header + * @return new header reference + */ +Header headerLink(Header h); + +/** \ingroup header + * Sort tags in header. + * @param h header + */ +void headerSort(Header h); + +/** \ingroup header + * Restore tags in header to original ordering. + * @param h header + */ +void headerUnsort(Header h); + +/** \ingroup header + * Return size of on-disk header representation in bytes. + * @param h header + * @param magicp include size of 8 bytes for (magic, 0)? + * @return size of on-disk header + */ +unsigned int headerSizeof(Header h, int magicp); + +/** \ingroup header + * Perform simple sanity and range checks on header tag(s). + * @param il no. of tags in header + * @param dl no. of bytes in header data. + * @param pev 1st element in tag array, big-endian + * @param iv failing (or last) tag element, host-endian + * @param negate negative offset expected? + * @return -1 on success, otherwise failing tag element index + */ +int headerVerifyInfo(int il, int dl, const void * pev, void * iv, int negate); + +/** \ingroup header + * Convert header to on-disk representation. + * @param h header (with pointers) + * @return on-disk header blob (i.e. with offsets) + */ +void * headerUnload(Header h); + +/** \ingroup header + * Convert header to on-disk representation, and then reload. + * This is used to insure that all header data is in one chunk. + * @param h header (with pointers) + * @param tag region tag + * @return on-disk header (with offsets) + */ +Header headerReload(Header h, rpmTagVal tag); + +/** \ingroup header + * Duplicate a header. + * @param h header + * @return new header instance + */ +Header headerCopy(Header h); + +/** \ingroup header + * Convert header to in-memory representation. + * @param uh on-disk header blob (i.e. with offsets) + * @return header + */ +Header headerLoad(void * uh); + +/** \ingroup header + * Make a copy and convert header to in-memory representation. + * @param uh on-disk header blob (i.e. with offsets) + * @return header + */ +Header headerCopyLoad(const void * uh); + +/** \ingroup header + * Read (and load) header from file handle. + * @param fd file handle + * @param magicp read (and verify) 8 bytes of (magic, 0)? + * @return header (or NULL on error) + */ +Header headerRead(FD_t fd, int magicp); + +/** \ingroup header + * Write (with unload) header to file handle. + * @param fd file handle + * @param h header + * @param magicp prefix write with 8 bytes of (magic, 0)? + * @return 0 on success, 1 on error + */ +int headerWrite(FD_t fd, Header h, int magicp); + +/** \ingroup header + * Check if tag is in header. + * @param h header + * @param tag tag + * @return 1 on success, 0 on failure + */ +int headerIsEntry(Header h, rpmTagVal tag); + +/** \ingroup header + * Modifier flags for headerGet() operation. + * For consistent behavior you'll probably want to use ALLOC to ensure + * the caller owns the data, but MINMEM is useful for avoiding extra + * copy of data when you are sure the header wont go away. + * Most of the time you'll probably want EXT too, but note that extensions + * tags don't generally honor the other flags, MINMEM, RAW, ALLOC and ARGV + * are only relevant for non-extension data. + */ +enum headerGetFlags_e { + HEADERGET_DEFAULT = 0, /* legacy headerGetEntry() behavior */ + HEADERGET_MINMEM = (1 << 0), /* pointers can refer to header memory */ + HEADERGET_EXT = (1 << 1), /* lookup extension types too */ + HEADERGET_RAW = (1 << 2), /* return raw contents (no i18n lookups) */ + HEADERGET_ALLOC = (1 << 3), /* always allocate memory for all data */ + HEADERGET_ARGV = (1 << 4), /* return string arrays NULL-terminated */ +}; + +typedef rpmFlags headerGetFlags; + +/** \ingroup header + * Retrieve tag value. + * @param h header + * @param tag tag + * @retval td tag data container + * @param flags retrieval modifier flags + * @return 1 on success, 0 on failure + */ +int headerGet(Header h, rpmTagVal tag, rpmtd td, headerGetFlags flags); + + +enum headerPutFlags_e { + HEADERPUT_DEFAULT = 0, + HEADERPUT_APPEND = (1 << 0), +}; + +typedef rpmFlags headerPutFlags; + +/** \ingroup header + * Add or append tag to header. + * + * @param h header + * @param td tag data container + * @param flags flags to control operation + * @return 1 on success, 0 on failure + */ +int headerPut(Header h, rpmtd td, headerPutFlags flags); + +/** \ingroup header + * @{ + * Type-safe methods for inserting tag data to header. + * Tag data type is validated to match the function type, ie things like + * headerPutUint32(h, RPMTAG_NAME, ...) will return failure. For non-array + * types size must equal 1, and data is checked to be non-NULL. For array + * types, add-or-append mode is always used. + * + * headerPutString() can be used on both RPM_STRING_TYPE and + * RPM_STRING_ARRAY_TYPE (to add a single string into the array) tags, + * for others the type must match exactly. + * + * These are intended to "do the right thing" in the common case, if you + * need more fine grained control use headerPut() & friends instead. + * @todo Make doxygen group these meaningfully. + * + * @param h header + * @param tag tag to insert + * @param val pointer to value(s) + * @param size number of items in array (1 or larger) + * @return 1 on success, 0 on failure + * + */ +int headerPutString(Header h, rpmTagVal tag, const char *val); +int headerPutStringArray(Header h, rpmTagVal tag, const char **val, rpm_count_t size); +int headerPutBin(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size); +int headerPutChar(Header h, rpmTagVal tag, const char *val, rpm_count_t size); +int headerPutUint8(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size); +int headerPutUint16(Header h, rpmTagVal tag, const uint16_t *val, rpm_count_t size); +int headerPutUint32(Header h, rpmTagVal tag, const uint32_t *val, rpm_count_t size); +int headerPutUint64(Header h, rpmTagVal tag, const uint64_t *val, rpm_count_t size); +/** @} */ + +/** \ingroup header + * Add locale specific tag to header. + * A NULL lang is interpreted as the C locale. Here are the rules: + * \verbatim + * - If the tag isn't in the header, it's added with the passed string + * as new value. + * - If the tag occurs multiple times in entry, which tag is affected + * by the operation is undefined. + * - If the tag is in the header w/ this language, the entry is + * *replaced* (like headerMod()). + * \endverbatim + * This function is intended to just "do the right thing". If you need + * more fine grained control use headerPut() and headerMod(). + * + * @param h header + * @param tag tag + * @param string tag value + * @param lang locale + * @return 1 on success, 0 on failure + */ +int headerAddI18NString(Header h, rpmTagVal tag, const char * string, + const char * lang); + +/** \ingroup header + * Modify tag in header. + * If there are multiple entries with this tag, the first one gets replaced. + * @param h header + * @param td tag data container + * @return 1 on success, 0 on failure + */ +int headerMod(Header h, rpmtd td); + +/** \ingroup header + * Delete tag in header. + * Removes all entries of type tag from the header, returns 1 if none were + * found. + * + * @param h header + * @param tag tag + * @return 0 on success, 1 on failure (INCONSISTENT) + */ +int headerDel(Header h, rpmTagVal tag); + +/** \ingroup header + * Return formatted output string from header tags. + * The returned string must be free()d. + * + * @param h header + * @param fmt format to use + * @retval errmsg error message (if any) + * @return formatted output string (malloc'ed) + */ +char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg); + +/** \ingroup header + * Duplicate tag values from one header into another. + * @param headerFrom source header + * @param headerTo destination header + * @param tagstocopy array of tags that are copied + */ +void headerCopyTags(Header headerFrom, Header headerTo, + const rpmTagVal * tagstocopy); + +/** \ingroup header + * Destroy header tag iterator. + * @param hi header tag iterator + * @return NULL always + */ +HeaderIterator headerFreeIterator(HeaderIterator hi); + +/** \ingroup header + * Create header tag iterator. + * @param h header + * @return header tag iterator + */ +HeaderIterator headerInitIterator(Header h); + +/** \ingroup header + * Return next tag contents from header. + * @param hi header tag iterator + * @retval td tag data container + * @return 1 on success, 0 on failure + */ +int headerNext(HeaderIterator hi, rpmtd td); + +/** \ingroup header + * Return next tag number from header. + * @param hi header tag iterator + * @return next tag, RPMTAG_NOT_FOUND to stop iteration + */ +rpmTagVal headerNextTag(HeaderIterator hi); + +/** \ingroup header + * Return name, version, release strings from header. + * @param h header + * @retval *np name pointer (or NULL) + * @retval *vp version pointer (or NULL) + * @retval *rp release pointer (or NULL) + * @return 0 always + */ +RPM_GNUC_DEPRECATED +int headerNVR(Header h, + const char ** np, + const char ** vp, + const char ** rp); + +/** \ingroup header + * Return name, epoch, version, release, arch strings from header. + * @param h header + * @retval *np name pointer (or NULL) + * @retval *ep epoch pointer (or NULL) + * @retval *vp version pointer (or NULL) + * @retval *rp release pointer (or NULL) + * @retval *ap arch pointer (or NULL) + * @return 0 always + */ +RPM_GNUC_DEPRECATED +int headerNEVRA(Header h, + const char ** np, + uint32_t ** ep, + const char ** vp, + const char ** rp, + const char ** ap); + +/** \ingroup header + * Return (malloc'd) header name-version-release string. + * @param h header + * @retval np name tag value + * @return name-version-release string + */ +RPM_GNUC_DEPRECATED +char * headerGetNEVR(Header h, const char ** np ); + +/** \ingroup header + * Return (malloc'd) header name-version-release.arch string. + * @param h header + * @retval np name tag value + * @return name-version-release string + */ +RPM_GNUC_DEPRECATED +char * headerGetNEVRA(Header h, const char ** np ); + +/* \ingroup header + * Return (malloc'd) header (epoch:)version-release string. + * @param h header + * @retval np name tag value (or NULL) + * @return (epoch:)version-release string + */ +RPM_GNUC_DEPRECATED +char * headerGetEVR(Header h, const char **np); + +/** \ingroup header + * Return any non-array tag from header, converted to string + * @param h header + * @param tag tag to retrieve + * @return string pointer (malloced) or NULL on failure + */ +char * headerGetAsString(Header h, rpmTagVal tag); + +/** \ingroup header + * Return a simple string tag from header + * @param h header + * @param tag tag to retrieve + * @return string pointer (to header memory) or NULL on failure + */ +const char * headerGetString(Header h, rpmTagVal tag); + +/* \ingroup header + * Return a simple number tag (or extension) from header + * @param h header + * @param tag tag to retrieve + * @return numeric tag value or 0 on failure + */ +uint64_t headerGetNumber(Header h, rpmTagVal tag); + +/** \ingroup header + * Return header color. + * @param h header + * @return header color + */ +RPM_GNUC_DEPRECATED +rpm_color_t headerGetColor(Header h); + +/** \ingroup header + * Check if header is a source or binary package header + * @param h header + * @return 0 == binary, 1 == source + */ +int headerIsSource(Header h); + +/** \ingroup header + * Return header instance, ie is the header from rpmdb. + * @param h header + * @return rpmdb record number or 0 + */ +unsigned int headerGetInstance(Header h); + +typedef enum headerConvOps_e { + HEADERCONV_EXPANDFILELIST = 0, + HEADERCONV_COMPRESSFILELIST = 1, + HEADERCONV_RETROFIT_V3 = 2, +} headerConvOps; + +/** \ingroup header + * Convert header to/from (legacy) data presentation + * @param h header + * @param op one of headerConvOps operations + * @return 1 on success, 0 on failure + */ +int headerConvert(Header h, int op); + +#ifdef __cplusplus +} +#endif + +#endif /* H_HEADER */ diff --git a/lib/header_internal.h b/lib/header_internal.h new file mode 100644 index 0000000..82b96e3 --- /dev/null +++ b/lib/header_internal.h @@ -0,0 +1,78 @@ +#ifndef H_HEADER_INTERNAL +#define H_HEADER_INTERNAL + +/** \ingroup header + * \file lib/header_internal.h + */ + +#include + +/** \ingroup header + * Description of tag data. + */ +typedef struct entryInfo_s * entryInfo; +struct entryInfo_s { + rpm_tag_t tag; /*!< Tag identifier. */ + rpm_tagtype_t type; /*!< Tag data type. */ + int32_t offset; /*!< Offset into data segment (ondisk only). */ + rpm_count_t count; /*!< Number of tag elements. */ +}; + +#define REGION_TAG_TYPE RPM_BIN_TYPE +#define REGION_TAG_COUNT sizeof(struct entryInfo_s) + +/** \ingroup header + * A single tag from a Header. + */ +typedef struct indexEntry_s * indexEntry; +struct indexEntry_s { + struct entryInfo_s info; /*!< Description of tag data. */ + rpm_data_t data; /*!< Location of tag data. */ + int length; /*!< No. bytes of data. */ + int rdlen; /*!< No. bytes of data in region. */ +}; + +/** + * Sanity check on no. of tags. + * This check imposes a limit of 65K tags, more than enough. + */ +#define hdrchkTags(_ntags) ((_ntags) & 0xffff0000) + +/** + * Sanity check on type values. + */ +#define hdrchkType(_type) ((_type) < RPM_MIN_TYPE || (_type) > RPM_MAX_TYPE) + +/** + * Sanity check on data size and/or offset and/or count. + * This check imposes a limit of 16 MB, more than enough. + */ +#define hdrchkData(_nbytes) ((_nbytes) & 0xff000000) + +/** + * Sanity check on data alignment for data type. + */ +#define hdrchkAlign(_type, _off) ((_off) & (typeAlign[_type]-1)) + +/** + * Sanity check on range of data offset. + */ +#define hdrchkRange(_dl, _off) ((_off) < 0 || (_off) > (_dl)) + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup header + * Set header instance (rpmdb record number) + * @param h header + * @param instance record number + */ +RPM_GNUC_INTERNAL +void headerSetInstance(Header h, unsigned int instance); + +#ifdef __cplusplus +} +#endif + +#endif /* H_HEADER_INTERNAL */ diff --git a/lib/headerfmt.c b/lib/headerfmt.c new file mode 100644 index 0000000..49c7047 --- /dev/null +++ b/lib/headerfmt.c @@ -0,0 +1,868 @@ +/** \ingroup header + * \file lib/headerfmt.c + */ + +#include "system.h" + +#include +#include +#include +#include +#include "lib/misc.h" /* format function protos */ + +#include "debug.h" + +#define PARSER_BEGIN 0 +#define PARSER_IN_ARRAY 1 +#define PARSER_IN_EXPR 2 + +/** \ingroup header + */ +typedef struct sprintfTag_s * sprintfTag; +struct sprintfTag_s { + headerTagFormatFunction fmt; + rpmTagVal tag; + int justOne; + char * format; + char * type; +}; + +typedef enum { + PTOK_NONE = 0, + PTOK_TAG, + PTOK_ARRAY, + PTOK_STRING, + PTOK_COND +} ptokType; + +/** \ingroup header + */ +typedef struct sprintfToken_s * sprintfToken; +struct sprintfToken_s { + ptokType type; + union { + struct sprintfTag_s tag; /*!< PTOK_TAG */ + struct { + sprintfToken format; + int i; + int numTokens; + } array; /*!< PTOK_ARRAY */ + struct { + char * string; + int len; + } string; /*!< PTOK_STRING */ + struct { + sprintfToken ifFormat; + int numIfTokens; + sprintfToken elseFormat; + int numElseTokens; + struct sprintfTag_s tag; + } cond; /*!< PTOK_COND */ + } u; +}; + +#define HASHTYPE tagCache +#define HTKEYTYPE rpmTagVal +#define HTDATATYPE rpmtd +#include "lib/rpmhash.H" +#include "lib/rpmhash.C" +#undef HASHTYPE +#undef HTKEYTYPE +#undef HTDATATYPE + +/** + */ +typedef struct headerSprintfArgs_s { + Header h; + char * fmt; + const char * errmsg; + tagCache cache; + sprintfToken format; + HeaderIterator hi; + char * val; + size_t vallen; + size_t alloced; + int numTokens; + int i; + headerGetFlags hgflags; +} * headerSprintfArgs; + + +static char escapedChar(const char ch) +{ + switch (ch) { + case 'a': return '\a'; + case 'b': return '\b'; + case 'f': return '\f'; + case 'n': return '\n'; + case 'r': return '\r'; + case 't': return '\t'; + case 'v': return '\v'; + default: return ch; + } +} + +/** + * Destroy headerSprintf format array. + * @param format sprintf format array + * @param num number of elements + * @return NULL always + */ +static sprintfToken +freeFormat( sprintfToken format, int num) +{ + int i; + + if (format == NULL) return NULL; + + for (i = 0; i < num; i++) { + switch (format[i].type) { + case PTOK_ARRAY: + format[i].u.array.format = + freeFormat(format[i].u.array.format, + format[i].u.array.numTokens); + break; + case PTOK_COND: + format[i].u.cond.ifFormat = + freeFormat(format[i].u.cond.ifFormat, + format[i].u.cond.numIfTokens); + format[i].u.cond.elseFormat = + freeFormat(format[i].u.cond.elseFormat, + format[i].u.cond.numElseTokens); + break; + case PTOK_NONE: + case PTOK_TAG: + case PTOK_STRING: + default: + break; + } + } + format = _free(format); + return NULL; +} + +/** + * Initialize an hsa iteration. + * @param hsa headerSprintf args + */ +static void hsaInit(headerSprintfArgs hsa) +{ + sprintfTag tag = + (hsa->format->type == PTOK_TAG + ? &hsa->format->u.tag : + (hsa->format->type == PTOK_ARRAY + ? &hsa->format->u.array.format->u.tag : + NULL)); + + hsa->i = 0; + if (tag != NULL && tag->tag == -2) + hsa->hi = headerInitIterator(hsa->h); + /* Normally with bells and whistles enabled, but raw dump on iteration. */ + hsa->hgflags = (hsa->hi == NULL) ? HEADERGET_EXT : HEADERGET_RAW; +} + +/** + * Return next hsa iteration item. + * @param hsa headerSprintf args + * @return next sprintfToken (or NULL) + */ +static sprintfToken hsaNext(headerSprintfArgs hsa) +{ + sprintfToken fmt = NULL; + sprintfTag tag = + (hsa->format->type == PTOK_TAG + ? &hsa->format->u.tag : + (hsa->format->type == PTOK_ARRAY + ? &hsa->format->u.array.format->u.tag : + NULL)); + + if (hsa->i >= 0 && hsa->i < hsa->numTokens) { + fmt = hsa->format + hsa->i; + if (hsa->hi == NULL) { + hsa->i++; + } else { + tag->tag = headerNextTag(hsa->hi); + if (tag->tag == RPMTAG_NOT_FOUND) + fmt = NULL; + } + } + + return fmt; +} + +/** + * Finish an hsa iteration. + * @param hsa headerSprintf args + */ +static void hsaFini(headerSprintfArgs hsa) +{ + hsa->hi = headerFreeIterator(hsa->hi); + hsa->i = 0; +} + +/** + * Reserve sufficient buffer space for next output value. + * @param hsa headerSprintf args + * @param need no. of bytes to reserve + * @return pointer to reserved space + */ +static char * hsaReserve(headerSprintfArgs hsa, size_t need) +{ + if ((hsa->vallen + need) >= hsa->alloced) { + if (hsa->alloced <= need) + hsa->alloced += need; + hsa->alloced <<= 1; + hsa->val = xrealloc(hsa->val, hsa->alloced+1); + } + return hsa->val + hsa->vallen; +} + +/** + * Search tags for a name. + * @param hsa headerSprintf args + * @param token parsed fields + * @param name name to find + * @return 0 on success, 1 on not found + */ +static int findTag(headerSprintfArgs hsa, sprintfToken token, const char * name) +{ + const char *tagname = name; + sprintfTag stag = (token->type == PTOK_COND + ? &token->u.cond.tag : &token->u.tag); + + stag->fmt = NULL; + stag->tag = RPMTAG_NOT_FOUND; + + if (rstreq(tagname, "*")) { + stag->tag = -2; + goto bingo; + } + + if (rstreqn("RPMTAG_", tagname, sizeof("RPMTAG_")-1)) { + tagname += sizeof("RPMTAG"); + } + + /* Search tag names. */ + stag->tag = rpmTagGetValue(tagname); + if (stag->tag != RPMTAG_NOT_FOUND) + goto bingo; + + return 1; + +bingo: + /* Search extensions for specific format. */ + if (stag->type != NULL) + stag->fmt = rpmHeaderFormatFuncByName(stag->type); + + return stag->fmt ? 0 : 1; +} + +/* forward ref */ +/** + * Parse an expression. + * @param hsa headerSprintf args + * @param token token + * @param str string + * @param[out] *endPtr + * @return 0 on success + */ +static int parseExpression(headerSprintfArgs hsa, sprintfToken token, + char * str,char ** endPtr); + +/** + * Parse a headerSprintf term. + * @param hsa headerSprintf args + * @param str + * @retval *formatPtr + * @retval *numTokensPtr + * @retval *endPtr + * @param state + * @return 0 on success + */ +static int parseFormat(headerSprintfArgs hsa, char * str, + sprintfToken * formatPtr,int * numTokensPtr, + char ** endPtr, int state) +{ + char * chptr, * start, * next, * dst; + sprintfToken format; + sprintfToken token; + int numTokens; + int done = 0; + + /* upper limit on number of individual formats */ + numTokens = 0; + if (str != NULL) + for (chptr = str; *chptr != '\0'; chptr++) + if (*chptr == '%' || *chptr == '[') numTokens++; + numTokens = numTokens * 2 + 1; + + format = xcalloc(numTokens, sizeof(*format)); + if (endPtr) *endPtr = NULL; + + dst = start = str; + numTokens = 0; + token = NULL; + if (start != NULL) + while (*start != '\0') { + switch (*start) { + case '%': + /* handle %% */ + if (*(start + 1) == '%') { + if (token == NULL || token->type != PTOK_STRING) { + token = format + numTokens++; + token->type = PTOK_STRING; + dst = token->u.string.string = start; + } + start++; + *dst++ = *start++; + break; + } + + token = format + numTokens++; + *dst++ = '\0'; + start++; + + if (*start == '|') { + char * newEnd; + + start++; + if (parseExpression(hsa, token, start, &newEnd)) { + goto errxit; + } + start = newEnd; + break; + } + + token->u.tag.format = start; + token->u.tag.justOne = 0; + + chptr = start; + while (*chptr && *chptr != '{' && *chptr != '%') chptr++; + if (!*chptr || *chptr == '%') { + hsa->errmsg = _("missing { after %"); + goto errxit; + } + + *chptr++ = '\0'; + + while (start < chptr) { + start++; + } + + if (*start == '=') { + token->u.tag.justOne = 1; + start++; + } else if (*start == '#') { + token->u.tag.justOne = 1; + token->u.tag.type = "arraysize"; + start++; + } + + dst = next = start; + while (*next && *next != '}') next++; + if (!*next) { + hsa->errmsg = _("missing } after %{"); + goto errxit; + } + *next++ = '\0'; + + chptr = start; + while (*chptr && *chptr != ':') chptr++; + + if (*chptr != '\0') { + *chptr++ = '\0'; + if (!*chptr) { + hsa->errmsg = _("empty tag format"); + goto errxit; + } + token->u.tag.type = chptr; + } + /* default to string conversion if no formats found by now */ + if (!token->u.tag.type) { + token->u.tag.type = "string"; + } + + if (!*start) { + hsa->errmsg = _("empty tag name"); + goto errxit; + } + + token->type = PTOK_TAG; + + if (findTag(hsa, token, start)) { + hsa->errmsg = _("unknown tag"); + goto errxit; + } + + start = next; + break; + + case '[': + *dst++ = '\0'; + *start++ = '\0'; + token = format + numTokens++; + + if (parseFormat(hsa, start, + &token->u.array.format, + &token->u.array.numTokens, + &start, PARSER_IN_ARRAY)) { + goto errxit; + } + + if (!start) { + hsa->errmsg = _("] expected at end of array"); + goto errxit; + } + + dst = start; + + token->type = PTOK_ARRAY; + + break; + + case ']': + if (state != PARSER_IN_ARRAY) { + hsa->errmsg = _("unexpected ]"); + goto errxit; + } + *start++ = '\0'; + if (endPtr) *endPtr = start; + done = 1; + break; + + case '}': + if (state != PARSER_IN_EXPR) { + hsa->errmsg = _("unexpected }"); + goto errxit; + } + *start++ = '\0'; + if (endPtr) *endPtr = start; + done = 1; + break; + + default: + if (token == NULL || token->type != PTOK_STRING) { + token = format + numTokens++; + token->type = PTOK_STRING; + dst = token->u.string.string = start; + } + + if (*start == '\\') { + start++; + *dst++ = escapedChar(*start++); + } else { + *dst++ = *start++; + } + break; + } + if (done) + break; + } + + if (dst != NULL) + *dst = '\0'; + + for (int i = 0; i < numTokens; i++) { + token = format + i; + if (token->type == PTOK_STRING) + token->u.string.len = strlen(token->u.string.string); + } + + *numTokensPtr = numTokens; + *formatPtr = format; + return 0; + +errxit: + freeFormat(format, numTokens); + return 1; +} + +static int parseExpression(headerSprintfArgs hsa, sprintfToken token, + char * str, char ** endPtr) +{ + char * chptr; + char * end; + + hsa->errmsg = NULL; + chptr = str; + while (*chptr && *chptr != '?') chptr++; + + if (*chptr != '?') { + hsa->errmsg = _("? expected in expression"); + return 1; + } + + *chptr++ = '\0';; + + if (*chptr != '{') { + hsa->errmsg = _("{ expected after ? in expression"); + return 1; + } + + chptr++; + + if (parseFormat(hsa, chptr, &token->u.cond.ifFormat, + &token->u.cond.numIfTokens, &end, PARSER_IN_EXPR)) + return 1; + + /* XXX fix segfault on "rpm -q rpm --qf='%|NAME?{%}:{NAME}|\n'"*/ + if (!(end && *end)) { + hsa->errmsg = _("} expected in expression"); + token->u.cond.ifFormat = + freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens); + return 1; + } + + chptr = end; + if (*chptr != ':' && *chptr != '|') { + hsa->errmsg = _(": expected following ? subexpression"); + token->u.cond.ifFormat = + freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens); + return 1; + } + + if (*chptr == '|') { + if (parseFormat(hsa, NULL, &token->u.cond.elseFormat, + &token->u.cond.numElseTokens, &end, PARSER_IN_EXPR)) + { + token->u.cond.ifFormat = + freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens); + return 1; + } + } else { + chptr++; + + if (*chptr != '{') { + hsa->errmsg = _("{ expected after : in expression"); + token->u.cond.ifFormat = + freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens); + return 1; + } + + chptr++; + + if (parseFormat(hsa, chptr, &token->u.cond.elseFormat, + &token->u.cond.numElseTokens, &end, PARSER_IN_EXPR)) + return 1; + + /* XXX fix segfault on "rpm -q rpm --qf='%|NAME?{a}:{%}|{NAME}\n'" */ + if (!(end && *end)) { + hsa->errmsg = _("} expected in expression"); + token->u.cond.ifFormat = + freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens); + return 1; + } + + chptr = end; + if (*chptr != '|') { + hsa->errmsg = _("| expected at end of expression"); + token->u.cond.ifFormat = + freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens); + token->u.cond.elseFormat = + freeFormat(token->u.cond.elseFormat, token->u.cond.numElseTokens); + return 1; + } + } + + chptr++; + + *endPtr = chptr; + + token->type = PTOK_COND; + + (void) findTag(hsa, token, str); + + return 0; +} + +static rpmtd getCached(tagCache cache, rpmTagVal tag) +{ + rpmtd *res = NULL; + return tagCacheGetEntry(cache, tag, &res, NULL, NULL) ? res[0] : NULL; +} + +/** + * Do headerGet() just once for given tag, cache results. + * @param hsa headerSprintf args + * @param tag + * @retval *typeptr + * @retval *data + * @retval *countptr + * @return 1 on success, 0 on failure + */ +static rpmtd getData(headerSprintfArgs hsa, rpmTagVal tag) +{ + rpmtd td = NULL; + + if (!(td = getCached(hsa->cache, tag))) { + td = rpmtdNew(); + if (!headerGet(hsa->h, tag, td, hsa->hgflags)) { + rpmtdFree(td); + return NULL; + } + tagCacheAddEntry(hsa->cache, tag, td); + } + + return td; +} + +/** + * formatValue + * @param hsa headerSprintf args + * @param tag + * @param element + * @return end of formatted string (NULL on error) + */ +static char * formatValue(headerSprintfArgs hsa, sprintfTag tag, int element) +{ + char * val = NULL; + size_t need = 0; + char * t, * te; + char buf[20]; + rpmtd td; + + memset(buf, 0, sizeof(buf)); + if ((td = getData(hsa, tag->tag))) { + td->ix = element; /* Ick, use iterators instead */ + stpcpy(stpcpy(buf, "%"), tag->format); + val = tag->fmt(td, buf); + } else { + stpcpy(buf, "%s"); + val = xstrdup("(none)"); + } + + need = strlen(val); + + if (val && need > 0) { + t = hsaReserve(hsa, need); + te = stpcpy(t, val); + hsa->vallen += (te - t); + } + free(val); + + return (hsa->val + hsa->vallen); +} + +/** + * Format a single headerSprintf item. + * @param hsa headerSprintf args + * @param token + * @param element + * @return end of formatted string (NULL on error) + */ +static char * singleSprintf(headerSprintfArgs hsa, sprintfToken token, + int element) +{ + char * t, * te; + int i, j, found; + rpm_count_t count, numElements; + sprintfToken spft; + int condNumFormats; + size_t need; + + /* we assume the token and header have been validated already! */ + + switch (token->type) { + case PTOK_NONE: + break; + + case PTOK_STRING: + need = token->u.string.len; + if (need == 0) break; + t = hsaReserve(hsa, need); + te = stpcpy(t, token->u.string.string); + hsa->vallen += (te - t); + break; + + case PTOK_TAG: + t = hsa->val + hsa->vallen; + te = formatValue(hsa, &token->u.tag, + (token->u.tag.justOne ? 0 : element)); + if (te == NULL) + return NULL; + break; + + case PTOK_COND: + if (getData(hsa, token->u.cond.tag.tag) || + headerIsEntry(hsa->h, token->u.cond.tag.tag)) { + spft = token->u.cond.ifFormat; + condNumFormats = token->u.cond.numIfTokens; + } else { + spft = token->u.cond.elseFormat; + condNumFormats = token->u.cond.numElseTokens; + } + + need = condNumFormats * 20; + if (spft == NULL || need == 0) break; + + t = hsaReserve(hsa, need); + for (i = 0; i < condNumFormats; i++, spft++) { + te = singleSprintf(hsa, spft, element); + if (te == NULL) + return NULL; + } + break; + + case PTOK_ARRAY: + numElements = 0; + found = 0; + spft = token->u.array.format; + for (i = 0; i < token->u.array.numTokens; i++, spft++) + { + rpmtd td = NULL; + if (spft->type != PTOK_TAG || + spft->u.tag.justOne) continue; + + if (!(td = getData(hsa, spft->u.tag.tag))) { + continue; + } + + found = 1; + count = rpmtdCount(td); + + if (numElements > 1 && count != numElements) + switch (td->type) { + default: + hsa->errmsg = + _("array iterator used with different sized arrays"); + return NULL; + break; + case RPM_BIN_TYPE: + case RPM_STRING_TYPE: + break; + } + if (count > numElements) + numElements = count; + } + + if (found) { + int isxml; + + need = numElements * token->u.array.numTokens * 10; + if (need == 0) break; + + spft = token->u.array.format; + isxml = (spft->type == PTOK_TAG && spft->u.tag.type != NULL && + rstreq(spft->u.tag.type, "xml")); + + if (isxml) { + const char * tagN = rpmTagGetName(spft->u.tag.tag); + + need = sizeof(" \n") - 1; + if (tagN != NULL) + need += strlen(tagN); + t = hsaReserve(hsa, need); + te = stpcpy(t, " \n"); + hsa->vallen += (te - t); + } + + t = hsaReserve(hsa, need); + for (j = 0; j < numElements; j++) { + spft = token->u.array.format; + for (i = 0; i < token->u.array.numTokens; i++, spft++) { + te = singleSprintf(hsa, spft, j); + if (te == NULL) + return NULL; + } + } + + if (isxml) { + need = sizeof(" \n") - 1; + t = hsaReserve(hsa, need); + te = stpcpy(t, " \n"); + hsa->vallen += (te - t); + } + + } + break; + } + + return (hsa->val + hsa->vallen); +} + +static int tagCmp(rpmTagVal a, rpmTagVal b) +{ + return (a != b); +} + +static unsigned int tagId(rpmTagVal tag) +{ + return tag; +} + +static rpmtd tagFree(rpmtd td) +{ + rpmtdFreeData(td); + rpmtdFree(td); + return NULL; +} + +char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg) +{ + struct headerSprintfArgs_s hsa; + sprintfToken nextfmt; + sprintfTag tag; + char * t, * te; + int isxml; + size_t need; + + memset(&hsa, 0, sizeof(hsa)); + hsa.h = headerLink(h); + hsa.fmt = xstrdup(fmt); + hsa.errmsg = NULL; + + if (parseFormat(&hsa, hsa.fmt, &hsa.format, &hsa.numTokens, NULL, PARSER_BEGIN)) + goto exit; + + hsa.cache = tagCacheCreate(128, tagId, tagCmp, NULL, tagFree); + hsa.val = xstrdup(""); + + tag = + (hsa.format->type == PTOK_TAG + ? &hsa.format->u.tag : + (hsa.format->type == PTOK_ARRAY + ? &hsa.format->u.array.format->u.tag : + NULL)); + isxml = (tag != NULL && tag->tag == -2 && tag->type != NULL && rstreq(tag->type, "xml")); + + if (isxml) { + need = sizeof("\n") - 1; + t = hsaReserve(&hsa, need); + te = stpcpy(t, "\n"); + hsa.vallen += (te - t); + } + + hsaInit(&hsa); + while ((nextfmt = hsaNext(&hsa)) != NULL) { + te = singleSprintf(&hsa, nextfmt, 0); + if (te == NULL) { + hsa.val = _free(hsa.val); + break; + } + } + hsaFini(&hsa); + + if (isxml) { + need = sizeof("\n") - 1; + t = hsaReserve(&hsa, need); + te = stpcpy(t, "\n"); + hsa.vallen += (te - t); + } + + if (hsa.val != NULL && hsa.vallen < hsa.alloced) + hsa.val = xrealloc(hsa.val, hsa.vallen+1); + + hsa.cache = tagCacheFree(hsa.cache); + hsa.format = freeFormat(hsa.format, hsa.numTokens); + +exit: + if (errmsg) + *errmsg = hsa.errmsg; + hsa.h = headerFree(hsa.h); + hsa.fmt = _free(hsa.fmt); + return hsa.val; +} + diff --git a/lib/headerutil.c b/lib/headerutil.c new file mode 100644 index 0000000..d207fb8 --- /dev/null +++ b/lib/headerutil.c @@ -0,0 +1,245 @@ +/** \ingroup rpmdb + * \file lib/hdrNVR.c + */ + +#include "system.h" + +#include +#include +#include + +#include "debug.h" + +static int NEVRA(Header h, const char **np, + uint32_t **ep, const char **vp, const char **rp, + const char **ap) +{ + if (np) *np = headerGetString(h, RPMTAG_NAME); + if (vp) *vp = headerGetString(h, RPMTAG_VERSION); + if (rp) *rp = headerGetString(h, RPMTAG_RELEASE); + if (ap) *ap = headerGetString(h, RPMTAG_ARCH); + if (ep) { + struct rpmtd_s td; + headerGet(h, RPMTAG_EPOCH, &td, HEADERGET_DEFAULT); + *ep = rpmtdGetUint32(&td); + } + return 0; +} + +int headerNVR(Header h, const char **np, const char **vp, const char **rp) +{ + return NEVRA(h, np, NULL, vp, rp, NULL); +} + +int headerNEVRA(Header h, const char **np, + uint32_t **ep, const char **vp, const char **rp, + const char **ap) +{ + return NEVRA(h, np, ep, vp, rp, ap); +} + +static char *getNEVRA(Header h, rpmTag tag, const char **np) +{ + if (np) *np = headerGetString(h, RPMTAG_NAME); + return headerGetAsString(h, tag); +} + +char * headerGetNEVR(Header h, const char ** np) +{ + return getNEVRA(h, RPMTAG_NEVR, np); +} + +char * headerGetNEVRA(Header h, const char ** np) +{ + return getNEVRA(h, RPMTAG_NEVRA, np); +} + +char * headerGetEVR(Header h, const char ** np) +{ + return getNEVRA(h, RPMTAG_EVR, np); +} + +rpm_color_t headerGetColor(Header h) +{ + return headerGetNumber(h, RPMTAG_HEADERCOLOR); +} + +int headerIsSource(Header h) +{ + return (!headerIsEntry(h, RPMTAG_SOURCERPM)); +} + +Header headerCopy(Header h) +{ + Header nh = headerNew(); + HeaderIterator hi; + struct rpmtd_s td; + + hi = headerInitIterator(h); + while (headerNext(hi, &td)) { + if (rpmtdCount(&td) > 0) { + (void) headerPut(nh, &td, HEADERPUT_DEFAULT); + } + rpmtdFreeData(&td); + } + hi = headerFreeIterator(hi); + + return headerReload(nh, RPMTAG_HEADERIMAGE); +} + +void headerCopyTags(Header headerFrom, Header headerTo, + const rpmTagVal * tagstocopy) +{ + const rpmTagVal * p; + struct rpmtd_s td; + + if (headerFrom == headerTo) + return; + + for (p = tagstocopy; *p != 0; p++) { + if (headerIsEntry(headerTo, *p)) + continue; + if (!headerGet(headerFrom, *p, &td, (HEADERGET_MINMEM|HEADERGET_RAW))) + continue; + (void) headerPut(headerTo, &td, HEADERPUT_DEFAULT); + rpmtdFreeData(&td); + } +} + +char * headerGetAsString(Header h, rpmTagVal tag) +{ + char *res = NULL; + struct rpmtd_s td; + + if (headerGet(h, tag, &td, HEADERGET_EXT)) { + if (rpmtdCount(&td) == 1) { + res = rpmtdFormat(&td, RPMTD_FORMAT_STRING, NULL); + } + rpmtdFreeData(&td); + } + return res; +} + +const char * headerGetString(Header h, rpmTagVal tag) +{ + const char *res = NULL; + struct rpmtd_s td; + + if (headerGet(h, tag, &td, HEADERGET_MINMEM)) { + if (rpmtdCount(&td) == 1) { + res = rpmtdGetString(&td); + } + rpmtdFreeData(&td); + } + return res; +} + +uint64_t headerGetNumber(Header h, rpmTagVal tag) +{ + uint64_t res = 0; + struct rpmtd_s td; + + if (headerGet(h, tag, &td, HEADERGET_EXT)) { + if (rpmtdCount(&td) == 1) { + res = rpmtdGetNumber(&td); + } + rpmtdFreeData(&td); + } + return res; +} + +/* + * Sanity check data types against tag table before putting. Assume + * append on all array-types. + */ +static int headerPutType(Header h, rpmTagVal tag, rpmTagType reqtype, + rpm_constdata_t data, rpm_count_t size) +{ + struct rpmtd_s td; + rpmTagType type = rpmTagGetTagType(tag); + rpmTagReturnType retype = rpmTagGetReturnType(tag); + headerPutFlags flags = HEADERPUT_APPEND; + int valid = 1; + + /* Basic sanity checks: type must match and there must be data to put */ + if (type != reqtype + || size < 1 || data == NULL || h == NULL) { + valid = 0; + } + + /* + * Non-array types can't be appended to. Binary types use size + * for data length, for other non-array types size must be 1. + */ + if (retype != RPM_ARRAY_RETURN_TYPE) { + flags = HEADERPUT_DEFAULT; + if (type != RPM_BIN_TYPE && size != 1) { + valid = 0; + } + } + + if (valid) { + rpmtdReset(&td); + td.tag = tag; + td.type = type; + td.data = (void *) data; + td.count = size; + + valid = headerPut(h, &td, flags); + } + + return valid; +} + +int headerPutString(Header h, rpmTagVal tag, const char *val) +{ + rpmTagType type = rpmTagGetTagType(tag); + const void *sptr = NULL; + + /* string arrays expect char **, arrange that */ + if (type == RPM_STRING_ARRAY_TYPE || type == RPM_I18NSTRING_TYPE) { + sptr = &val; + } else if (type == RPM_STRING_TYPE) { + sptr = val; + } else { + return 0; + } + + return headerPutType(h, tag, type, sptr, 1); +} + +int headerPutStringArray(Header h, rpmTagVal tag, const char **array, rpm_count_t size) +{ + return headerPutType(h, tag, RPM_STRING_ARRAY_TYPE, array, size); +} + +int headerPutChar(Header h, rpmTagVal tag, const char *val, rpm_count_t size) +{ + return headerPutType(h, tag, RPM_CHAR_TYPE, val, size); +} + +int headerPutUint8(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size) +{ + return headerPutType(h, tag, RPM_INT8_TYPE, val, size); +} + +int headerPutUint16(Header h, rpmTagVal tag, const uint16_t *val, rpm_count_t size) +{ + return headerPutType(h, tag, RPM_INT16_TYPE, val, size); +} + +int headerPutUint32(Header h, rpmTagVal tag, const uint32_t *val, rpm_count_t size) +{ + return headerPutType(h, tag, RPM_INT32_TYPE, val, size); +} + +int headerPutUint64(Header h, rpmTagVal tag, const uint64_t *val, rpm_count_t size) +{ + return headerPutType(h, tag, RPM_INT64_TYPE, val, size); +} + +int headerPutBin(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size) +{ + return headerPutType(h, tag, RPM_BIN_TYPE, val, size); +} + diff --git a/lib/legacy.c b/lib/legacy.c new file mode 100644 index 0000000..df7911e --- /dev/null +++ b/lib/legacy.c @@ -0,0 +1,379 @@ +/** + * \file lib/legacy.c + */ + +#include "system.h" + +#include +#include +#include +#include +#include + +#include "debug.h" + +static int dncmp(const void * a, const void * b) +{ + const char *const * first = a; + const char *const * second = b; + return strcmp(*first, *second); +} + +static void compressFilelist(Header h) +{ + struct rpmtd_s fileNames; + char ** dirNames; + const char ** baseNames; + uint32_t * dirIndexes; + rpm_count_t count; + int xx, i; + int dirIndex = -1; + + /* + * This assumes the file list is already sorted, and begins with a + * single '/'. That assumption isn't critical, but it makes things go + * a bit faster. + */ + + if (headerIsEntry(h, RPMTAG_DIRNAMES)) { + xx = headerDel(h, RPMTAG_OLDFILENAMES); + return; /* Already converted. */ + } + + if (!headerGet(h, RPMTAG_OLDFILENAMES, &fileNames, HEADERGET_MINMEM)) + return; + count = rpmtdCount(&fileNames); + if (count < 1) + return; + + dirNames = xmalloc(sizeof(*dirNames) * count); /* worst case */ + baseNames = xmalloc(sizeof(*dirNames) * count); + dirIndexes = xmalloc(sizeof(*dirIndexes) * count); + + /* HACK. Source RPM, so just do things differently */ + { const char *fn = rpmtdGetString(&fileNames); + if (fn && *fn != '/') { + dirIndex = 0; + dirNames[dirIndex] = xstrdup(""); + while ((i = rpmtdNext(&fileNames)) >= 0) { + dirIndexes[i] = dirIndex; + baseNames[i] = rpmtdGetString(&fileNames); + } + goto exit; + } + } + + /* + * XXX EVIL HACK, FIXME: + * This modifies (and then restores) a const string from rpmtd + * through basename retrieved from strrchr() which silently + * casts away const on return. + */ + while ((i = rpmtdNext(&fileNames)) >= 0) { + char ** needle; + char savechar; + char * baseName; + size_t len; + char *filename = (char *) rpmtdGetString(&fileNames); /* HACK HACK */ + + if (filename == NULL) /* XXX can't happen */ + continue; + baseName = strrchr(filename, '/') + 1; + len = baseName - filename; + needle = dirNames; + savechar = *baseName; + *baseName = '\0'; + if (dirIndex < 0 || + (needle = bsearch(&filename, dirNames, dirIndex + 1, sizeof(dirNames[0]), dncmp)) == NULL) { + char *s = xmalloc(len + 1); + rstrlcpy(s, filename, len + 1); + dirIndexes[i] = ++dirIndex; + dirNames[dirIndex] = s; + } else + dirIndexes[i] = needle - dirNames; + + *baseName = savechar; + baseNames[i] = baseName; + } + +exit: + if (count > 0) { + headerPutUint32(h, RPMTAG_DIRINDEXES, dirIndexes, count); + headerPutStringArray(h, RPMTAG_BASENAMES, baseNames, count); + headerPutStringArray(h, RPMTAG_DIRNAMES, + (const char **) dirNames, dirIndex + 1); + } + + rpmtdFreeData(&fileNames); + for (i = 0; i <= dirIndex; i++) { + free(dirNames[i]); + } + free(dirNames); + free(baseNames); + free(dirIndexes); + + xx = headerDel(h, RPMTAG_OLDFILENAMES); +} + +static void expandFilelist(Header h) +{ + struct rpmtd_s filenames; + + if (!headerIsEntry(h, RPMTAG_OLDFILENAMES)) { + (void) headerGet(h, RPMTAG_FILENAMES, &filenames, HEADERGET_EXT); + if (rpmtdCount(&filenames) < 1) + return; + rpmtdSetTag(&filenames, RPMTAG_OLDFILENAMES); + headerPut(h, &filenames, HEADERPUT_DEFAULT); + rpmtdFreeData(&filenames); + } + + (void) headerDel(h, RPMTAG_DIRNAMES); + (void) headerDel(h, RPMTAG_BASENAMES); + (void) headerDel(h, RPMTAG_DIRINDEXES); +} + +/* + * Up to rpm 3.0.4, packages implicitly provided their own name-version-release. + * Retrofit an explicit "Provides: name = epoch:version-release. + */ +static void providePackageNVR(Header h) +{ + const char *name = headerGetString(h, RPMTAG_NAME); + char *pEVR = headerGetAsString(h, RPMTAG_EVR); + rpmsenseFlags pFlags = RPMSENSE_EQUAL; + int bingo = 1; + struct rpmtd_s pnames; + rpmds hds, nvrds; + + /* Generate provides for this package name-version-release. */ + if (!(name && pEVR)) + return; + + /* + * Rpm prior to 3.0.3 does not have versioned provides. + * If no provides at all are available, we can just add. + */ + if (!headerGet(h, RPMTAG_PROVIDENAME, &pnames, HEADERGET_MINMEM)) { + goto exit; + } + + /* + * Otherwise, fill in entries on legacy packages. + */ + if (!headerIsEntry(h, RPMTAG_PROVIDEVERSION)) { + while (rpmtdNext(&pnames) >= 0) { + rpmsenseFlags fdummy = RPMSENSE_ANY; + + headerPutString(h, RPMTAG_PROVIDEVERSION, ""); + headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &fdummy, 1); + } + goto exit; + } + + /* see if we already have this provide */ + hds = rpmdsNew(h, RPMTAG_PROVIDENAME, 0); + nvrds = rpmdsSingle(RPMTAG_PROVIDENAME, name, pEVR, pFlags); + if (rpmdsFind(hds, nvrds) >= 0) { + bingo = 0; + } + rpmdsFree(hds); + rpmdsFree(nvrds); + + +exit: + if (bingo) { + headerPutString(h, RPMTAG_PROVIDENAME, name); + headerPutString(h, RPMTAG_PROVIDEVERSION, pEVR); + headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pFlags, 1); + } + rpmtdFreeData(&pnames); + free(pEVR); +} + +static void legacyRetrofit(Header h) +{ + /* + * The file list was moved to a more compressed format which not + * only saves memory (nice), but gives fingerprinting a nice, fat + * speed boost (very nice). Go ahead and convert old headers to + * the new style (this is a noop for new headers). + */ + compressFilelist(h); + + /* Retrofit "Provide: name = EVR" for binary packages. */ + if (!headerIsSource(h)) { + providePackageNVR(h); + } +} + +int headerConvert(Header h, int op) +{ + int rc = 1; + + if (h == NULL) + return 0; + + switch (op) { + case HEADERCONV_EXPANDFILELIST: + expandFilelist(h); + break; + case HEADERCONV_COMPRESSFILELIST: + compressFilelist(h); + break; + case HEADERCONV_RETROFIT_V3: + legacyRetrofit(h); + break; + default: + rc = 0; + break; + } + return rc; +}; + +/* + * Backwards compatibility wrappers for legacy interfaces. + * Remove these some day... + */ +#define _RPM_4_4_COMPAT +#include + +/* dumb macro to avoid 50 copies of this code while converting... */ +#define TDWRAP() \ + if (type) \ + *type = td.type; \ + if (p) \ + *p = td.data; \ + else \ + rpmtdFreeData(&td); \ + if (c) \ + *c = td.count + +int headerRemoveEntry(Header h, rpm_tag_t tag) +{ + return headerDel(h, tag); +} + +static void *_headerFreeData(rpm_data_t data, rpm_tagtype_t type) +{ + if (data) { + if (type == RPM_FORCEFREE_TYPE || + type == RPM_STRING_ARRAY_TYPE || + type == RPM_I18NSTRING_TYPE || + type == RPM_BIN_TYPE) + free(data); + } + return NULL; +} + +void * headerFreeData(rpm_data_t data, rpm_tagtype_t type) +{ + return _headerFreeData(data, type); +} + +void * headerFreeTag(Header h, rpm_data_t data, rpm_tagtype_t type) +{ + return _headerFreeData(data, type); +} + +static int headerGetWrap(Header h, rpm_tag_t tag, + rpm_tagtype_t * type, + rpm_data_t * p, + rpm_count_t * c, + headerGetFlags flags) +{ + struct rpmtd_s td; + int rc; + + rc = headerGet(h, tag, &td, flags); + TDWRAP(); + return rc; +} + +int headerGetEntry(Header h, rpm_tag_t tag, + rpm_tagtype_t * type, + rpm_data_t * p, + rpm_count_t * c) +{ + return headerGetWrap(h, tag, type, p, c, HEADERGET_DEFAULT); +} + +int headerGetEntryMinMemory(Header h, rpm_tag_t tag, + rpm_tagtype_t * type, + rpm_data_t * p, + rpm_count_t * c) +{ + return headerGetWrap(h, tag, type, (rpm_data_t) p, c, HEADERGET_MINMEM); +} + +/* XXX shut up compiler warning from missing prototype */ +int headerGetRawEntry(Header h, rpm_tag_t tag, rpm_tagtype_t * type, rpm_data_t * p, + rpm_count_t * c); + +int headerGetRawEntry(Header h, rpm_tag_t tag, rpm_tagtype_t * type, rpm_data_t * p, + rpm_count_t * c) +{ + if (p == NULL) + return headerIsEntry(h, tag); + + return headerGetWrap(h, tag, type, p, c, HEADERGET_RAW); +} + +int headerNextIterator(HeaderIterator hi, + rpm_tag_t * tag, + rpm_tagtype_t * type, + rpm_data_t * p, + rpm_count_t * c) +{ + struct rpmtd_s td; + int rc; + + rc = headerNext(hi, &td); + if (tag) + *tag = td.tag; + TDWRAP(); + return rc; +} + +int headerModifyEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) +{ + struct rpmtd_s td = { + .tag = tag, + .type = type, + .data = (void *) p, + .count = c, + }; + return headerMod(h, &td); +} + +static int headerPutWrap(Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c, headerPutFlags flags) +{ + struct rpmtd_s td = { + .tag = tag, + .type = type, + .data = (void *) p, + .count = c, + }; + return headerPut(h, &td, flags); +} + +int headerAddOrAppendEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) +{ + return headerPutWrap(h, tag, type, p, c, HEADERPUT_APPEND); +} + +int headerAppendEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) +{ + return headerPutWrap(h, tag, type, p, c, HEADERPUT_APPEND); +} + +int headerAddEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) +{ + return headerPutWrap(h, tag, type, p, c, HEADERPUT_DEFAULT); +} +#undef _RPM_4_4_COMPAT diff --git a/lib/manifest.c b/lib/manifest.c new file mode 100644 index 0000000..5d71f3f --- /dev/null +++ b/lib/manifest.c @@ -0,0 +1,175 @@ +/** \ingroup rpmcli + * \file lib/manifest.c + */ + +#include "system.h" + +#include +#include +#include + +#include "lib/manifest.h" + +#include "debug.h" + + +char * rpmPermsString(int mode) +{ + char *perms = xstrdup("----------"); + + if (S_ISREG(mode)) + perms[0] = '-'; + else if (S_ISDIR(mode)) + perms[0] = 'd'; + else if (S_ISLNK(mode)) + perms[0] = 'l'; + else if (S_ISFIFO(mode)) + perms[0] = 'p'; + else if (S_ISSOCK(mode)) + perms[0] = 's'; + else if (S_ISCHR(mode)) + perms[0] = 'c'; + else if (S_ISBLK(mode)) + perms[0] = 'b'; + else + perms[0] = '?'; + + if (mode & S_IRUSR) perms[1] = 'r'; + if (mode & S_IWUSR) perms[2] = 'w'; + if (mode & S_IXUSR) perms[3] = 'x'; + + if (mode & S_IRGRP) perms[4] = 'r'; + if (mode & S_IWGRP) perms[5] = 'w'; + if (mode & S_IXGRP) perms[6] = 'x'; + + if (mode & S_IROTH) perms[7] = 'r'; + if (mode & S_IWOTH) perms[8] = 'w'; + if (mode & S_IXOTH) perms[9] = 'x'; + + if (mode & S_ISUID) + perms[3] = ((mode & S_IXUSR) ? 's' : 'S'); + + if (mode & S_ISGID) + perms[6] = ((mode & S_IXGRP) ? 's' : 'S'); + + if (mode & S_ISVTX) + perms[9] = ((mode & S_IXOTH) ? 't' : 'T'); + + return perms; +} + +/**@todo Infinite loops through manifest files exist, operator error for now. */ +rpmRC rpmReadPackageManifest(FD_t fd, int * argcPtr, char *** argvPtr) +{ + ARGV_t sb = NULL; + char * s = NULL; + char * se; + int ac = 0; + char ** av = NULL; + int argc = (argcPtr ? *argcPtr : 0); + char ** argv = (argvPtr ? *argvPtr : NULL); + FILE * f = fdopen(Fileno(fd), "r"); + rpmRC rpmrc = RPMRC_OK; + int i, j, next, npre; + + if (f != NULL) + while (1) { + char line[BUFSIZ]; + + /* Read next line. */ + s = fgets(line, sizeof(line) - 1, f); + if (s == NULL) { + /* XXX Ferror check needed */ + break; + } + + /* Skip comments. */ + if ((se = strchr(s, '#')) != NULL) *se = '\0'; + + /* Trim white space. */ + se = s + strlen(s); + while (se > s && (se[-1] == '\n' || se[-1] == '\r')) + *(--se) = '\0'; + while (*s && strchr(" \f\n\r\t\v", *s) != NULL) + s++; + if (*s == '\0') continue; + + /* Sanity checks: skip obviously binary lines and dash (for stdin) */ + if (*s < 32 || rstreq(s, "-")) { + s = NULL; + rpmrc = RPMRC_NOTFOUND; + goto exit; + } + + /* Concatenate next line in buffer. */ + *se = '\0'; + argvAdd(&sb, s); + } + + s = argvJoin(sb, " "); + + if (!(s && *s)) { + rpmrc = RPMRC_NOTFOUND; + goto exit; + } + + /* Glob manifest items. */ + rpmrc = (rpmGlob(s, &ac, &av) == 0 ? RPMRC_OK : RPMRC_FAIL); + if (rpmrc != RPMRC_OK) goto exit; + + rpmlog(RPMLOG_DEBUG, "adding %d args from manifest.\n", ac); + + /* Count non-NULL args, keeping track of 1st arg after last NULL. */ + npre = 0; + next = 0; + if (argv != NULL) + for (i = 0; i < argc; i++) { + if (argv[i] != NULL) + npre++; + else if (i >= next) + next = i + 1; + } + + /* Copy old arg list, inserting manifest before argv[next]. */ + if (argv != NULL) { + int nac = npre + ac; + char ** nav = xcalloc((nac + 1), sizeof(*nav)); + + for (i = 0, j = 0; i < next; i++) { + if (argv[i] != NULL) + nav[j++] = argv[i]; + } + + if (ac) + memcpy(nav + j, av, ac * sizeof(*nav)); + if ((argc - next) > 0) + memcpy(nav + j + ac, argv + next, (argc - next) * sizeof(*nav)); + nav[nac] = NULL; + + if (argvPtr) + *argvPtr = argv = _free(argv); + av = _free(av); + av = nav; + ac = nac; + } + + /* Save new argc/argv list. */ + if (argvPtr) { + *argvPtr = _free(*argvPtr); + *argvPtr = av; + } + if (argcPtr) + *argcPtr = ac; + +exit: + if (argvPtr == NULL || (rpmrc != RPMRC_OK && av)) { + if (av) + for (i = 0; i < ac; i++) + av[i] = _free(av[i]); + av = _free(av); + } + argvFree(sb); + free(s); + /* FIX: *argvPtr may be NULL. */ + return rpmrc; +} diff --git a/lib/manifest.h b/lib/manifest.h new file mode 100644 index 0000000..227ca00 --- /dev/null +++ b/lib/manifest.h @@ -0,0 +1,34 @@ +#ifndef H_MANIFEST +#define H_MANIFEST + +/** + * \file lib/manifest.h + * Routines to expand a manifest containing glob expressions into an argv list. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Return ls(1)-like formatted mode string. + * @param mode file mode + * @return (malloc'd) formatted mode string + */ +char * rpmPermsString(int mode) +; + +/** + * Read manifest, glob items, and append to existing args. + * @param fd manifest file handle + * @retval argcPtr no. of args + * @retval argvPtr args themselves + * @return RPMRC_OK on success + */ +rpmRC rpmReadPackageManifest(FD_t fd, int * argcPtr, char *** argvPtr); + +#ifdef __cplusplus +} +#endif + +#endif /* H_MANIFEST */ diff --git a/lib/merge.c b/lib/merge.c new file mode 100644 index 0000000..738ad7a --- /dev/null +++ b/lib/merge.c @@ -0,0 +1,347 @@ +#ifndef __APPLE__ +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Peter McIlroy. + * + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)merge.c 8.2 (Berkeley) 2/14/94"; +#endif /* LIBC_SCCS and not lint */ + +/* + * Hybrid exponential search/linear search merge sort with hybrid + * natural/pairwise first pass. Requires about .3% more comparisons + * for random data than LSMS with pairwise first pass alone. + * It works for objects as small as two bytes. + */ + +#define NATURAL +#define THRESHOLD 16 /* Best choice for natural merge cut-off. */ + +/* #define NATURAL to get hybrid natural merge. + * (The default is pairwise merging.) + */ + +#include "system.h" +#include +#include +#include +#include "lib/rpmdb_internal.h" /* XXX for mergesort */ + +#define ISIZE sizeof(int) +#define PSIZE sizeof(unsigned char *) +#define ICOPY_LIST(src, dst, last) \ + do \ + *(int*)dst = *(int*)src, src += ISIZE, dst += ISIZE; \ + while(src < last) +#define ICOPY_ELT(src, dst, i) \ + do \ + *(int*) dst = *(int*) src, src += ISIZE, dst += ISIZE; \ + while (i -= ISIZE) + +#define CCOPY_LIST(src, dst, last) \ + do \ + *dst++ = *src++; \ + while (src < last) +#define CCOPY_ELT(src, dst, i) \ + do \ + *dst++ = *src++; \ + while (i -= 1) + +/* + * Find the next possible pointer head. (Trickery for forcing an array + * to do double duty as a linked list when objects do not align with word + * boundaries. + */ +/* Assumption: PSIZE is a power of 2. */ +#define EVAL(p) (unsigned char **) \ + ((unsigned char *)0 + \ + (((unsigned char *)p + PSIZE - 1 - (unsigned char *) 0) & ~(PSIZE - 1))) + +#define swap(a, b) { \ + s = b; \ + i = size; \ + do { \ + tmp = *a; *a++ = *s; *s++ = tmp; \ + } while (--i); \ + a -= size; \ + } +#define reverse(bot, top) { \ + s = top; \ + do { \ + i = size; \ + do { \ + tmp = *bot; *bot++ = *s; *s++ = tmp; \ + } while (--i); \ + s -= size2; \ + } while(bot < s); \ +} + +/* + * This is to avoid out-of-bounds addresses in sorting the + * last 4 elements. + */ +static void +insertionsort(unsigned char *a, size_t n, size_t size, + int (*cmp) (const void *, const void *)) +{ + unsigned char *ai, *s, *t, *u, tmp; + int i; + + for (ai = a+size; --n >= 1; ai += size) + for (t = ai; t > a; t -= size) { + u = t - size; + if (cmp(u, t) <= 0) + break; + swap(u, t); + } +} + +/* + * Optional hybrid natural/pairwise first pass. Eats up list1 in runs of + * increasing order, list2 in a corresponding linked list. Checks for runs + * when THRESHOLD/2 pairs compare with same sense. (Only used when NATURAL + * is defined. Otherwise simple pairwise merging is used.) + */ +static void +setup(unsigned char *list1, unsigned char *list2, + size_t n, size_t size, int (*cmp) (const void *, const void *)) +{ + int i, length, size2, tmp, sense; + unsigned char *f1, *f2, *s, *l2, *last, *p2; + + size2 = size*2; + if (n <= 5) { + insertionsort(list1, n, size, cmp); + *EVAL(list2) = (unsigned char*) list2 + n*size; + return; + } + /* + * Avoid running pointers out of bounds; limit n to evens + * for simplicity. + */ + i = 4 + (n & 1); + insertionsort(list1 + (n - i) * size, i, size, cmp); + last = list1 + size * (n - i); + *EVAL(list2 + (last - list1)) = list2 + n * size; + +#ifdef NATURAL + p2 = list2; + f1 = list1; + sense = (cmp(f1, f1 + size) > 0); + for (; f1 < last; sense = !sense) { + length = 2; + /* Find pairs with same sense. */ + for (f2 = f1 + size2; f2 < last; f2 += size2) { + if ((cmp(f2, f2+ size) > 0) != sense) + break; + length += 2; + } + if (length < THRESHOLD) { /* Pairwise merge */ + do { + p2 = *EVAL(p2) = f1 + size2 - list1 + list2; + if (sense > 0) + swap (f1, f1 + size); + } while ((f1 += size2) < f2); + } else { /* Natural merge */ + l2 = f2; + for (f2 = f1 + size2; f2 < l2; f2 += size2) { + if ((cmp(f2-size, f2) > 0) != sense) { + p2 = *EVAL(p2) = f2 - list1 + list2; + if (sense > 0) + reverse(f1, f2-size); + f1 = f2; + } + } + if (sense > 0) + reverse (f1, f2-size); + f1 = f2; + if (f2 < last || cmp(f2 - size, f2) > 0) + p2 = *EVAL(p2) = f2 - list1 + list2; + else + p2 = *EVAL(p2) = list2 + n*size; + } + } +#else /* pairwise merge only. */ + for (f1 = list1, p2 = list2; f1 < last; f1 += size2) { + p2 = *EVAL(p2) = p2 + size2; + if (cmp (f1, f1 + size) > 0) + swap(f1, f1 + size); + } +#endif /* NATURAL */ +} + +/* + * Arguments are as for qsort. + */ +int +mergesort(void *base, size_t nmemb, size_t size, + int (*cmp) (const void *, const void *)) +{ + register int i, sense; + int big, iflag; + register unsigned char *f1, *f2, *t, *b, *q, *l1, *l2; + register unsigned char *tp2; + unsigned char *list2; + unsigned char *list1; + unsigned char *p2, *p, *last, **p1; + + if (size < PSIZE / 2) { /* Pointers must fit into 2 * size. */ + errno = EINVAL; + return (-1); + } + + if (nmemb == 0) + return (0); + + /* + * XXX + * Stupid subtraction for the Cray. + */ + iflag = 0; + if (!(size % ISIZE) && !(((char *)base - (char *)0) % ISIZE)) + iflag = 1; + + if ((list2 = malloc(nmemb * size + PSIZE)) == NULL) + return (-1); + + list1 = base; + setup(list1, list2, nmemb, size, cmp); + last = list2 + nmemb * size; + i = big = 0; + while (*EVAL(list2) != last) { + l2 = list1; + p1 = EVAL(list1); + for (tp2 = p2 = list2; p2 != last; p1 = EVAL(l2)) { + p2 = *EVAL(p2); + f1 = l2; + f2 = l1 = list1 + (p2 - list2); + if (p2 != last) + p2 = *EVAL(p2); + l2 = list1 + (p2 - list2); + while (f1 < l1 && f2 < l2) { + if ((*cmp)(f1, f2) <= 0) { + q = f2; + b = f1, t = l1; + sense = -1; + } else { + q = f1; + b = f2, t = l2; + sense = 0; + } + if (!big) { /* here i = 0 */ + while ((b += size) < t && cmp(q, b) >sense) + if (++i == 6) { + big = 1; + goto EXPONENTIAL; + } + } else { +EXPONENTIAL: for (i = size; ; i <<= 1) + if ((p = (b + i)) >= t) { + if ((p = t - size) > b && + (*cmp)(q, p) <= sense) + t = p; + else + b = p; + break; + } else if ((*cmp)(q, p) <= sense) { + t = p; + if (i == size) + big = 0; + goto FASTCASE; + } else + b = p; + while (t > b+size) { + i = (((t - b) / size) >> 1) * size; + if ((*cmp)(q, p = b + i) <= sense) + t = p; + else + b = p; + } + goto COPY; +FASTCASE: while (i > size) + if ((*cmp)(q, + p = b + (i >>= 1)) <= sense) + t = p; + else + b = p; +COPY: b = t; + } + i = size; + if (q == f1) { + if (iflag) { + ICOPY_LIST(f2, tp2, b); + ICOPY_ELT(f1, tp2, i); + } else { + CCOPY_LIST(f2, tp2, b); + CCOPY_ELT(f1, tp2, i); + } + } else { + if (iflag) { + ICOPY_LIST(f1, tp2, b); + ICOPY_ELT(f2, tp2, i); + } else { + CCOPY_LIST(f1, tp2, b); + CCOPY_ELT(f2, tp2, i); + } + } + } + if (f2 < l2) { + if (iflag) + ICOPY_LIST(f2, tp2, l2); + else + CCOPY_LIST(f2, tp2, l2); + } else if (f1 < l1) { + if (iflag) + ICOPY_LIST(f1, tp2, l1); + else + CCOPY_LIST(f1, tp2, l1); + } + *p1 = l2; + } + tp2 = list1; /* swap list1, list2 */ + list1 = list2; + list2 = tp2; + last = list2 + nmemb*size; + } + if (base == list2) { + memmove(list2, list1, nmemb*size); + list2 = list1; + } + free(list2); + return (0); +} +#else +/* mergesort is implemented in System on Mac OS X */ +#endif /* __APPLE__ */ diff --git a/lib/misc.c b/lib/misc.c new file mode 100644 index 0000000..3ea41a5 --- /dev/null +++ b/lib/misc.c @@ -0,0 +1,24 @@ +/** + * \file lib/misc.c + */ + +#include "system.h" +#include "lib/misc.h" +#include "debug.h" + +unsigned int hashFunctionString(const char * string) +{ + /* Jenkins One-at-a-time hash */ + unsigned int hash = 0xe4721b68; + + while (*string != '\0') { + hash += *string; + hash += (hash << 10); + hash ^= (hash >> 6); + string++; + } + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + return hash; +} diff --git a/lib/misc.h b/lib/misc.h new file mode 100644 index 0000000..958561c --- /dev/null +++ b/lib/misc.h @@ -0,0 +1,46 @@ +#ifndef H_MISC +#define H_MISC + +/** + * \file lib/misc.h + * + */ + +#include +#include +#include /* for headerGetFlags typedef, duh.. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* known arch? */ +RPM_GNUC_INTERNAL +int rpmIsKnownArch(const char *name); + +RPM_GNUC_INTERNAL +char * rpmVerifyString(uint32_t verifyResult, const char *pad); + +RPM_GNUC_INTERNAL +char * rpmFFlagsString(uint32_t fflags, const char *pad); + +RPM_GNUC_INTERNAL +unsigned int hashFunctionString(const char * string); + +typedef char * (*headerTagFormatFunction) (rpmtd td, char * formatPrefix); +typedef int (*headerTagTagFunction) (Header h, rpmtd td, headerGetFlags hgflags); + +RPM_GNUC_INTERNAL +headerTagTagFunction rpmHeaderTagFunc(rpmTagVal tag); + +RPM_GNUC_INTERNAL +headerTagFormatFunction rpmHeaderFormatFuncByName(const char *fmt); + +RPM_GNUC_INTERNAL +headerTagFormatFunction rpmHeaderFormatFuncByValue(rpmtdFormats fmt); + +#ifdef __cplusplus +} +#endif + +#endif /* H_MISC */ diff --git a/lib/order.c b/lib/order.c new file mode 100644 index 0000000..34ad795 --- /dev/null +++ b/lib/order.c @@ -0,0 +1,655 @@ +/** \ingroup rpmts + * \file lib/depends.c + */ + +#include "system.h" + +#include +#include +#include +#include + +#include "lib/rpmte_internal.h" /* XXX tsortInfo_s */ +#include "lib/rpmts_internal.h" + +#include "debug.h" + +/* + * Strongly Connected Components + * set of packages (indirectly) requiering each other + */ +struct scc_s { + int count; /* # of external requires this SCC has */ + /* int qcnt; # of external requires pointing to this SCC */ + int size; /* # of members */ + tsortInfo * members; +}; + +typedef struct scc_s * scc; + +struct relation_s { + tsortInfo rel_suc; // pkg requiring this package + rpmsenseFlags rel_flags; // accumulated flags of the requirements + struct relation_s * rel_next; +}; + +typedef struct relation_s * relation; + +struct tsortInfo_s { + rpmte te; + int tsi_count; // #pkgs this pkg requires + int tsi_qcnt; // #pkgs requiring this package + int tsi_reqx; // requires Idx/mark as (queued/loop) + struct relation_s * tsi_relations; + struct relation_s * tsi_forward_relations; + tsortInfo tsi_suc; // used for queuing (addQ) + int tsi_SccIdx; // # of the SCC the node belongs to + // (1 for trivial SCCs) + int tsi_SccLowlink; // used for SCC detection +}; + +static void rpmTSIFree(tsortInfo tsi) +{ + relation rel; + + while (tsi->tsi_relations != NULL) { + rel = tsi->tsi_relations; + tsi->tsi_relations = tsi->tsi_relations->rel_next; + rel = _free(rel); + } + while (tsi->tsi_forward_relations != NULL) { + rel = tsi->tsi_forward_relations; + tsi->tsi_forward_relations = \ + tsi->tsi_forward_relations->rel_next; + rel = _free(rel); + } +} + +static inline int addSingleRelation(rpmte p, + rpmte q, + rpmsenseFlags dsflags) +{ + struct tsortInfo_s *tsi_p, *tsi_q; + relation rel; + rpmElementType teType = rpmteType(p); + rpmsenseFlags flags; + + /* Avoid deps outside this transaction and self dependencies */ + if (q == NULL || q == p) + return 0; + + /* Erasures are reversed installs. */ + if (teType == TR_REMOVED) { + rpmte r = p; + p = q; + q = r; + flags = isErasePreReq(dsflags); + } else { + flags = isInstallPreReq(dsflags); + } + + /* map legacy prereq to pre/preun as needed */ + if (isLegacyPreReq(dsflags)) { + flags |= (teType == TR_ADDED) ? + RPMSENSE_SCRIPT_PRE : RPMSENSE_SCRIPT_PREUN; + } + + tsi_p = rpmteTSI(p); + tsi_q = rpmteTSI(q); + + /* if relation got already added just update the flags */ + if (tsi_q->tsi_relations && tsi_q->tsi_relations->rel_suc == tsi_p) { + tsi_q->tsi_relations->rel_flags |= flags; + tsi_p->tsi_forward_relations->rel_flags |= flags; + return 0; + } + + /* Record next "q <- p" relation (i.e. "p" requires "q"). */ + if (p != q) { + /* bump p predecessor count */ + tsi_p->tsi_count++; + } + + rel = xcalloc(1, sizeof(*rel)); + rel->rel_suc = tsi_p; + rel->rel_flags = flags; + + rel->rel_next = tsi_q->tsi_relations; + tsi_q->tsi_relations = rel; + if (p != q) { + /* bump q successor count */ + tsi_q->tsi_qcnt++; + } + + rel = xcalloc(1, sizeof(*rel)); + rel->rel_suc = tsi_q; + rel->rel_flags = flags; + + rel->rel_next = tsi_p->tsi_forward_relations; + tsi_p->tsi_forward_relations = rel; + + return 0; +} + +/** + * Record next "q <- p" relation (i.e. "p" requires "q"). + * @param ts transaction set + * @param p predecessor (i.e. package that "Requires: q") + * @param requires relation + * @return 0 always + */ +static inline int addRelation(rpmts ts, + rpmal al, + rpmte p, + rpmds requires) +{ + rpmte q; + rpmsenseFlags dsflags; + + dsflags = rpmdsFlags(requires); + + /* Avoid dependendencies which are not relevant for ordering */ + if (dsflags & (RPMSENSE_RPMLIB|RPMSENSE_CONFIG|RPMSENSE_PRETRANS|RPMSENSE_POSTTRANS)) + return 0; + + q = rpmalSatisfiesDepend(al, requires); + + /* Avoid deps outside this transaction and self dependencies */ + if (q == NULL || q == p) + return 0; + + addSingleRelation(p, q, dsflags); + + return 0; +} + +/* + * Collections might have special ordering requirements. Notably + * sepolicy collection requires having all the bits in the collection + * close to each other. We try to ensure this by creating a strongly + * connected component of such "grouped" collections, by introducing + * an artificial relation loop across the all its members. + */ +static int addCollRelations(rpmal al, rpmte p, ARGV_t *seenColls) +{ + ARGV_const_t qcolls; + + for (qcolls = rpmteCollections(p); qcolls && *qcolls; qcolls++) { + char * flags; + if (argvSearch(*seenColls, *qcolls, NULL)) + continue; + + flags = rstrscat(NULL, "%{__collection_", *qcolls, "_flags}", NULL); + if (rpmExpandNumeric(flags) & 0x1) { + rpmte *tes = rpmalAllInCollection(al, *qcolls); + for (rpmte *te = tes; te && *te; te++) { + rpmte next = (*(te + 1) != NULL) ? *(te + 1) : *tes; + addSingleRelation(*te, next, RPMSENSE_ANY); + } + _free(tes); + } + free(flags); + + argvAdd(seenColls, *qcolls); + argvSort(*seenColls, NULL); + } + + return 0; +} + +/** + * Add element to list sorting by tsi_qcnt. + * @param p new element + * @retval qp address of first element + * @retval rp address of last element + * @param prefcolor + */ +static void addQ(tsortInfo p, tsortInfo * qp, tsortInfo * rp, + rpm_color_t prefcolor) +{ + tsortInfo q, qprev; + rpm_color_t pcolor = rpmteColor(p->te); + int tailcond; + + /* Mark the package as queued. */ + p->tsi_reqx = 1; + + if ((*rp) == NULL) { /* 1st element */ + /* FIX: double indirection */ + (*rp) = (*qp) = p; + return; + } + + if (rpmteType(p->te) == TR_ADDED) + tailcond = (pcolor && pcolor != prefcolor); + else + tailcond = (pcolor && pcolor == prefcolor); + + /* Find location in queue using metric tsi_qcnt and color. */ + for (qprev = NULL, q = (*qp); + q != NULL; + qprev = q, q = q->tsi_suc) + { + /* Place preferred color towards queue head on install, tail on erase */ + if (tailcond && (pcolor != rpmteColor(q->te))) + continue; + + if (q->tsi_qcnt <= p->tsi_qcnt) + break; + } + + if (qprev == NULL) { /* insert at beginning of list */ + p->tsi_suc = q; + (*qp) = p; /* new head */ + } else if (q == NULL) { /* insert at end of list */ + qprev->tsi_suc = p; + (*rp) = p; /* new tail */ + } else { /* insert between qprev and q */ + p->tsi_suc = q; + qprev->tsi_suc = p; + } +} + +typedef struct sccData_s { + int index; /* DFS node number counter */ + tsortInfo *stack; /* Stack of nodes */ + int stackcnt; /* Stack top counter */ + scc SCCs; /* Array of SCC's found */ + int sccCnt; /* Number of SCC's found */ +} * sccData; + +static void tarjan(sccData sd, tsortInfo tsi) { + tsortInfo tsi_q; + relation rel; + + /* use negative index numbers */ + sd->index--; + /* Set the depth index for p */ + tsi->tsi_SccIdx = sd->index; + tsi->tsi_SccLowlink = sd->index; + + sd->stack[sd->stackcnt++] = tsi; /* Push p on the stack */ + for (rel=tsi->tsi_relations; rel != NULL; rel=rel->rel_next) { + /* Consider successors of p */ + tsi_q = rel->rel_suc; + if (tsi_q->tsi_SccIdx > 0) + /* Ignore already found SCCs */ + continue; + if (tsi_q->tsi_SccIdx == 0){ + /* Was successor q not yet visited? */ + tarjan(sd, tsi_q); /* Recurse */ + /* negative index numers: use max as it is closer to 0 */ + tsi->tsi_SccLowlink = ( + tsi->tsi_SccLowlink > tsi_q->tsi_SccLowlink + ? tsi->tsi_SccLowlink : tsi_q->tsi_SccLowlink); + } else { + tsi->tsi_SccLowlink = ( + tsi->tsi_SccLowlink > tsi_q->tsi_SccIdx + ? tsi->tsi_SccLowlink : tsi_q->tsi_SccIdx); + } + } + + if (tsi->tsi_SccLowlink == tsi->tsi_SccIdx) { + /* v is the root of an SCC? */ + if (sd->stack[sd->stackcnt-1] == tsi) { + /* ignore trivial SCCs */ + tsi_q = sd->stack[--sd->stackcnt]; + tsi_q->tsi_SccIdx = 1; + } else { + int stackIdx = sd->stackcnt; + do { + tsi_q = sd->stack[--stackIdx]; + tsi_q->tsi_SccIdx = sd->sccCnt; + } while (tsi_q != tsi); + + stackIdx = sd->stackcnt; + do { + tsi_q = sd->stack[--stackIdx]; + /* Calculate count for the SCC */ + sd->SCCs[sd->sccCnt].count += tsi_q->tsi_count; + /* Subtract internal relations */ + for (rel=tsi_q->tsi_relations; rel != NULL; + rel=rel->rel_next) { + if (rel->rel_suc != tsi_q && + rel->rel_suc->tsi_SccIdx == sd->sccCnt) + sd->SCCs[sd->sccCnt].count--; + } + } while (tsi_q != tsi); + sd->SCCs[sd->sccCnt].size = sd->stackcnt - stackIdx; + /* copy members */ + sd->SCCs[sd->sccCnt].members = xcalloc(sd->SCCs[sd->sccCnt].size, + sizeof(tsortInfo)); + memcpy(sd->SCCs[sd->sccCnt].members, sd->stack + stackIdx, + sd->SCCs[sd->sccCnt].size * sizeof(tsortInfo)); + sd->stackcnt = stackIdx; + sd->sccCnt++; + } + } +} + +/* Search for SCCs and return an array last entry has a .size of 0 */ +static scc detectSCCs(tsortInfo orderInfo, int nelem, int debugloops) +{ + /* Set up data structures needed for the tarjan algorithm */ + scc SCCs = xcalloc(nelem+3, sizeof(*SCCs)); + tsortInfo *stack = xcalloc(nelem, sizeof(*stack)); + struct sccData_s sd = { 0, stack, 0, SCCs, 2 }; + + for (int i = 0; i < nelem; i++) { + tsortInfo tsi = &orderInfo[i]; + /* Start a DFS at each node */ + if (tsi->tsi_SccIdx == 0) + tarjan(&sd, tsi); + } + + free(stack); + + SCCs = xrealloc(SCCs, (sd.sccCnt+1)*sizeof(struct scc_s)); + + /* Debug output */ + if (sd.sccCnt > 2) { + int msglvl = debugloops ? RPMLOG_WARNING : RPMLOG_DEBUG; + rpmlog(msglvl, "%i Strongly Connected Components\n", sd.sccCnt-2); + for (int i = 2; i < sd.sccCnt; i++) { + rpmlog(msglvl, "SCC #%i: %i members (%i external dependencies)\n", + i-1, SCCs[i].size, SCCs[i].count); + + /* loop over members */ + for (int j = 0; j < SCCs[i].size; j++) { + tsortInfo member = SCCs[i].members[j]; + rpmlog(msglvl, "\t%s\n", rpmteNEVRA(member->te)); + /* show relations between members */ + relation rel = member->tsi_forward_relations; + for (; rel != NULL; rel=rel->rel_next) { + if (rel->rel_suc->tsi_SccIdx!=i) continue; + rpmlog(msglvl, "\t\t%s %s\n", + rel->rel_flags ? "=>" : "->", + rpmteNEVRA(rel->rel_suc->te)); + } + } + } + } + return SCCs; +} + +static void collectTE(rpm_color_t prefcolor, tsortInfo q, + rpmte * newOrder, int * newOrderCount, + scc SCCs, + tsortInfo * queue_end, + tsortInfo * outer_queue, + tsortInfo * outer_queue_end) +{ + char deptypechar = (rpmteType(q->te) == TR_REMOVED ? '-' : '+'); + + if (rpmIsDebug()) { + int depth = 1; + /* figure depth in tree for nice formatting */ + for (rpmte p = q->te; (p = rpmteParent(p)); depth++) {} + rpmlog(RPMLOG_DEBUG, "%5d%5d%5d%5d %*s%c%s\n", + *newOrderCount, q->tsi_count, q->tsi_qcnt, + depth, (2 * depth), "", + deptypechar, rpmteNEVRA(q->te)); + } + + newOrder[*newOrderCount] = q->te; + (*newOrderCount)++; + + /* T6. Erase relations. */ + for (relation rel = q->tsi_relations; rel != NULL; rel = rel->rel_next) { + tsortInfo p = rel->rel_suc; + /* ignore already collected packages */ + if (p->tsi_SccIdx == 0) continue; + if (p == q) continue; + + if (p && (--p->tsi_count) == 0) { + (void) rpmteSetParent(p->te, q->te); + + if (q->tsi_SccIdx > 1 && q->tsi_SccIdx != p->tsi_SccIdx) { + /* Relation point outside of this SCC: add to outside queue */ + assert(outer_queue != NULL && outer_queue_end != NULL); + addQ(p, outer_queue, outer_queue_end, prefcolor); + } else { + addQ(p, &q->tsi_suc, queue_end, prefcolor); + } + } + if (p && p->tsi_SccIdx > 1 && + p->tsi_SccIdx != q->tsi_SccIdx) { + if (--SCCs[p->tsi_SccIdx].count == 0) { + /* New SCC is ready, add this package as representative */ + (void) rpmteSetParent(p->te, q->te); + + if (outer_queue != NULL) { + addQ(p, outer_queue, outer_queue_end, prefcolor); + } else { + addQ(p, &q->tsi_suc, queue_end, prefcolor); + } + } + } + } + q->tsi_SccIdx = 0; +} + +static void collectSCC(rpm_color_t prefcolor, tsortInfo p_tsi, + rpmte * newOrder, int * newOrderCount, + scc SCCs, tsortInfo * queue_end) +{ + int sccNr = p_tsi->tsi_SccIdx; + struct scc_s SCC = SCCs[sccNr]; + int i; + int start, end; + relation rel; + + /* remove p from the outer queue */ + tsortInfo outer_queue_start = p_tsi->tsi_suc; + p_tsi->tsi_suc = NULL; + + /* + * Run a multi source Dijkstra's algorithm to find relations + * that can be zapped with least danger to pre reqs. + * As weight of the edges is always 1 it is not necessary to + * sort the vertices by distance as the queue gets them + * already in order + */ + + /* can use a simple queue as edge weights are always 1 */ + tsortInfo * queue = xmalloc((SCC.size+1) * sizeof(*queue)); + + /* + * Find packages that are prerequired and use them as + * starting points for the Dijkstra algorithm + */ + start = end = 0; + for (i = 0; i < SCC.size; i++) { + tsortInfo tsi = SCC.members[i]; + tsi->tsi_SccLowlink = INT_MAX; + for (rel=tsi->tsi_forward_relations; rel != NULL; rel=rel->rel_next) { + if (rel->rel_flags && rel->rel_suc->tsi_SccIdx == sccNr) { + if (rel->rel_suc != tsi) { + tsi->tsi_SccLowlink = 0; + queue[end++] = tsi; + } else { + tsi->tsi_SccLowlink = INT_MAX/2; + } + break; + } + } + } + + if (start == end) { /* no regular prereqs; add self prereqs to queue */ + for (i = 0; i < SCC.size; i++) { + tsortInfo tsi = SCC.members[i]; + if (tsi->tsi_SccLowlink != INT_MAX) { + queue[end++] = tsi; + } + } + } + + /* Do Dijkstra */ + while (start != end) { + tsortInfo tsi = queue[start++]; + for (rel=tsi->tsi_forward_relations; rel != NULL; rel=rel->rel_next) { + tsortInfo next_tsi = rel->rel_suc; + if (next_tsi->tsi_SccIdx != sccNr) continue; + if (next_tsi->tsi_SccLowlink > tsi->tsi_SccLowlink+1) { + next_tsi->tsi_SccLowlink = tsi->tsi_SccLowlink + 1; + queue[end++] = rel->rel_suc; + } + } + } + queue = _free(queue); + + + while (1) { + tsortInfo best = NULL; + tsortInfo inner_queue_start, inner_queue_end; + int best_score = 0; + + /* select best candidate to start with */ + for (int i = 0; i < SCC.size; i++) { + tsortInfo tsi = SCC.members[i]; + if (tsi->tsi_SccIdx == 0) /* package already collected */ + continue; + if (tsi->tsi_SccLowlink >= best_score) { + best = tsi; + best_score = tsi->tsi_SccLowlink; + } + } + + if (best == NULL) /* done */ + break; + + /* collect best candidate and all packages that get freed */ + inner_queue_start = inner_queue_end = NULL; + addQ(best, &inner_queue_start, &inner_queue_end, prefcolor); + + for (; inner_queue_start != NULL; + inner_queue_start = inner_queue_start->tsi_suc) { + /* Mark the package as unqueued. */ + inner_queue_start->tsi_reqx = 0; + collectTE(prefcolor, inner_queue_start, newOrder, newOrderCount, + SCCs, &inner_queue_end, &outer_queue_start, queue_end); + } + } + + /* restore outer queue */ + p_tsi->tsi_suc = outer_queue_start; +} + +int rpmtsOrder(rpmts ts) +{ + tsMembers tsmem = rpmtsMembers(ts); + rpm_color_t prefcolor = rpmtsPrefColor(ts); + rpmtsi pi; rpmte p; + tsortInfo q, r; + rpmte * newOrder; + int newOrderCount = 0; + int rc; + rpmal erasedPackages = rpmalCreate(5, rpmtsColor(ts), prefcolor); + scc SCCs; + int nelem = rpmtsNElements(ts); + tsortInfo sortInfo = xcalloc(nelem, sizeof(struct tsortInfo_s)); + ARGV_t seenColls = NULL; + + (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_ORDER), 0); + + /* Create erased package index. */ + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, TR_REMOVED)) != NULL) { + rpmalAdd(erasedPackages, p); + } + pi = rpmtsiFree(pi); + + for (int i = 0; i < nelem; i++) { + sortInfo[i].te = tsmem->order[i]; + rpmteSetTSI(tsmem->order[i], &sortInfo[i]); + } + + /* Record relations. */ + rpmlog(RPMLOG_DEBUG, "========== recording tsort relations\n"); + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) { + rpmal al = (rpmteType(p) == TR_REMOVED) ? + erasedPackages : tsmem->addedPackages; + rpmds requires = rpmdsInit(rpmteDS(p, RPMTAG_REQUIRENAME)); + rpmds order = rpmdsInit(rpmteDS(p, RPMTAG_ORDERNAME)); + + while (rpmdsNext(requires) >= 0) { + /* Record next "q <- p" relation (i.e. "p" requires "q"). */ + (void) addRelation(ts, al, p, requires); + } + + while (rpmdsNext(order) >= 0) { + /* Record next "q <- p" ordering request */ + (void) addRelation(ts, al, p, order); + } + + addCollRelations(al, p, &seenColls); + } + + seenColls = argvFree(seenColls); + pi = rpmtsiFree(pi); + + newOrder = xcalloc(tsmem->orderCount, sizeof(*newOrder)); + SCCs = detectSCCs(sortInfo, nelem, (rpmtsFlags(ts) & RPMTRANS_FLAG_DEPLOOPS)); + + rpmlog(RPMLOG_DEBUG, "========== tsorting packages (order, #predecessors, #succesors, depth)\n"); + + for (int i = 0; i < 2; i++) { + /* Do two separate runs: installs first - then erases */ + int oType = !i ? TR_ADDED : TR_REMOVED; + q = r = NULL; + /* Scan for zeroes and add them to the queue */ + for (int e = 0; e < nelem; e++) { + tsortInfo p = &sortInfo[e]; + if (rpmteType(p->te) != oType) continue; + if (p->tsi_count != 0) + continue; + p->tsi_suc = NULL; + addQ(p, &q, &r, prefcolor); + } + + /* Add one member of each leaf SCC */ + for (int i = 2; SCCs[i].members != NULL; i++) { + tsortInfo member = SCCs[i].members[0]; + if (SCCs[i].count == 0 && rpmteType(member->te) == oType) { + addQ(member, &q, &r, prefcolor); + } + } + + while (q != NULL) { + /* Mark the package as unqueued. */ + q->tsi_reqx = 0; + if (q->tsi_SccIdx > 1) { + collectSCC(prefcolor, q, newOrder, &newOrderCount, SCCs, &r); + } else { + collectTE(prefcolor, q, newOrder, &newOrderCount, SCCs, &r, + NULL, NULL); + } + q = q->tsi_suc; + } + } + + /* Clean up tsort data */ + for (int i = 0; i < nelem; i++) { + rpmteSetTSI(tsmem->order[i], NULL); + rpmTSIFree(&sortInfo[i]); + } + free(sortInfo); + + assert(newOrderCount == tsmem->orderCount); + + tsmem->order = _free(tsmem->order); + tsmem->order = newOrder; + tsmem->orderAlloced = tsmem->orderCount; + rc = 0; + + for (int i = 2; SCCs[i].members != NULL; i++) { + free(SCCs[i].members); + } + free(SCCs); + rpmalFree(erasedPackages); + + (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_ORDER), 0); + + return rc; +} diff --git a/lib/package.c b/lib/package.c new file mode 100644 index 0000000..e1795dd --- /dev/null +++ b/lib/package.c @@ -0,0 +1,807 @@ +/** \ingroup header + * \file lib/package.c + */ + +#include "system.h" + +#include + +#include /* XXX RPMSIGTAG, other sig stuff */ +#include +#include +#include +#include + +#include "lib/rpmlead.h" +#include "lib/signature.h" +#include "rpmio/digest.h" +#include "rpmio/rpmio_internal.h" /* fd digest bits */ +#include "lib/header_internal.h" /* XXX headerCheck */ + +#include "debug.h" + +static int _print_pkts = 0; + +static const unsigned int nkeyids_max = 256; +static unsigned int nkeyids = 0; +static unsigned int nextkeyid = 0; +static unsigned int * keyids; + +void headerMergeLegacySigs(Header h, const Header sigh) +{ + HeaderIterator hi; + struct rpmtd_s td; + + hi = headerInitIterator(sigh); + for (; headerNext(hi, &td); rpmtdFreeData(&td)) + { + switch (td.tag) { + /* XXX Translate legacy signature tag values. */ + case RPMSIGTAG_SIZE: + td.tag = RPMTAG_SIGSIZE; + break; + case RPMSIGTAG_PGP: + td.tag = RPMTAG_SIGPGP; + break; + case RPMSIGTAG_MD5: + td.tag = RPMTAG_SIGMD5; + break; + case RPMSIGTAG_GPG: + td.tag = RPMTAG_SIGGPG; + break; + case RPMSIGTAG_PGP5: + td.tag = RPMTAG_SIGPGP5; + break; + case RPMSIGTAG_PAYLOADSIZE: + td.tag = RPMTAG_ARCHIVESIZE; + break; + case RPMSIGTAG_SHA1: + case RPMSIGTAG_DSA: + case RPMSIGTAG_RSA: + default: + if (!(td.tag >= HEADER_SIGBASE && td.tag < HEADER_TAGBASE)) + continue; + break; + } + if (td.data == NULL) continue; /* XXX can't happen */ + if (!headerIsEntry(h, td.tag)) { + if (hdrchkType(td.type)) + continue; + if (td.count < 0 || hdrchkData(td.count)) + continue; + switch(td.type) { + case RPM_NULL_TYPE: + continue; + break; + case RPM_CHAR_TYPE: + case RPM_INT8_TYPE: + case RPM_INT16_TYPE: + case RPM_INT32_TYPE: + case RPM_INT64_TYPE: + if (td.count != 1) + continue; + break; + case RPM_STRING_TYPE: + case RPM_BIN_TYPE: + if (td.count >= 16*1024) + continue; + break; + case RPM_STRING_ARRAY_TYPE: + case RPM_I18NSTRING_TYPE: + continue; + break; + } + (void) headerPut(h, &td, HEADERPUT_DEFAULT); + } + } + hi = headerFreeIterator(hi); +} + +Header headerRegenSigHeader(const Header h, int noArchiveSize) +{ + Header sigh = rpmNewSignature(); + HeaderIterator hi; + struct rpmtd_s td; + + for (hi = headerInitIterator(h); headerNext(hi, &td); rpmtdFreeData(&td)) { + switch (td.tag) { + /* XXX Translate legacy signature tag values. */ + case RPMTAG_SIGSIZE: + td.tag = RPMSIGTAG_SIZE; + break; + case RPMTAG_SIGPGP: + td.tag = RPMSIGTAG_PGP; + break; + case RPMTAG_SIGMD5: + td.tag = RPMSIGTAG_MD5; + break; + case RPMTAG_SIGGPG: + td.tag = RPMSIGTAG_GPG; + break; + case RPMTAG_SIGPGP5: + td.tag = RPMSIGTAG_PGP5; + break; + case RPMTAG_ARCHIVESIZE: + /* XXX rpm-4.1 and later has archive size in signature header. */ + if (noArchiveSize) + continue; + td.tag = RPMSIGTAG_PAYLOADSIZE; + break; + case RPMTAG_SHA1HEADER: + case RPMTAG_DSAHEADER: + case RPMTAG_RSAHEADER: + default: + if (!(td.tag >= HEADER_SIGBASE && td.tag < HEADER_TAGBASE)) + continue; + break; + } + if (td.data == NULL) continue; /* XXX can't happen */ + if (!headerIsEntry(sigh, td.tag)) + (void) headerPut(sigh, &td, HEADERPUT_DEFAULT); + } + hi = headerFreeIterator(hi); + return sigh; +} + +/** + * Remember current key id. + * @param dig OpenPGP packet containter + * @return 0 if new keyid, otherwise 1 + */ +static int stashKeyid(pgpDig dig) +{ + pgpDigParams sigp = dig ? &dig->signature : NULL; + unsigned int keyid; + int i; + + if (dig == NULL || sigp == NULL) + return 0; + + keyid = pgpGrab(sigp->signid+4, 4); + if (keyid == 0) + return 0; + + if (keyids != NULL) + for (i = 0; i < nkeyids; i++) { + if (keyid == keyids[i]) + return 1; + } + + if (nkeyids < nkeyids_max) { + nkeyids++; + keyids = xrealloc(keyids, nkeyids * sizeof(*keyids)); + } + if (keyids) /* XXX can't happen */ + keyids[nextkeyid] = keyid; + nextkeyid++; + nextkeyid %= nkeyids_max; + + return 0; +} + +/* Parse the parameters from the OpenPGP packets that will be needed. */ +static rpmRC parsePGP(rpmtd sigtd, const char *type, pgpDig dig) +{ + rpmRC rc = RPMRC_FAIL; + int debug = (_print_pkts & rpmIsDebug()); + if ((pgpPrtPkts(sigtd->data, sigtd->count, dig, debug) == 0) && + (dig->signature.version == 3 || dig->signature.version == 4)) { + rc = RPMRC_OK; + } else { + rpmlog(RPMLOG_ERR, + _("skipping %s with unverifiable V%u signature\n"), type, + dig->signature.version); + } + return rc; +} + +static rpmRC headerVerify(rpmKeyring keyring, rpmVSFlags vsflags, + const void * uh, size_t uc, char ** msg) +{ + pgpDig dig = NULL; + char *buf = NULL; + int32_t * ei = (int32_t *) uh; + int32_t il = ntohl(ei[0]); + int32_t dl = ntohl(ei[1]); + entryInfo pe = (entryInfo) &ei[2]; + int32_t ildl[2]; + int32_t pvlen = sizeof(ildl) + (il * sizeof(*pe)) + dl; + unsigned char * dataStart = (unsigned char *) (pe + il); + struct indexEntry_s entry; + struct entryInfo_s info; + unsigned const char * b; + size_t siglen = 0; + size_t blen; + size_t nb; + int32_t ril = 0; + unsigned char * regionEnd = NULL; + rpmRC rc = RPMRC_FAIL; /* assume failure */ + int xx; + int i; + struct rpmtd_s sigtd; + DIGEST_CTX ctx = NULL; + + /* Is the blob the right size? */ + if (uc > 0 && pvlen != uc) { + rasprintf(&buf, _("blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n"), + (int)uc, (int)il, (int)dl); + goto exit; + } + + memset(&entry, 0, sizeof(entry)); + memset(&info, 0, sizeof(info)); + + /* Check (and convert) the 1st tag element. */ + xx = headerVerifyInfo(1, dl, pe, &entry.info, 0); + if (xx != -1) { + rasprintf(&buf, _("tag[%d]: BAD, tag %d type %d offset %d count %d\n"), + 0, entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + + /* Is there an immutable header region tag? */ + if (!(entry.info.tag == RPMTAG_HEADERIMMUTABLE + && entry.info.type == RPM_BIN_TYPE + && entry.info.count == REGION_TAG_COUNT)) + { + rc = RPMRC_NOTFOUND; + goto exit; + } + + /* Is the offset within the data area? */ + if (entry.info.offset >= dl) { + rasprintf(&buf, + _("region offset: BAD, tag %d type %d offset %d count %d\n"), + entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + + /* Is there an immutable header region tag trailer? */ + regionEnd = dataStart + entry.info.offset; + (void) memcpy(&info, regionEnd, REGION_TAG_COUNT); + regionEnd += REGION_TAG_COUNT; + + xx = headerVerifyInfo(1, dl, &info, &entry.info, 1); + if (xx != -1 || + !(entry.info.tag == RPMTAG_HEADERIMMUTABLE + && entry.info.type == RPM_BIN_TYPE + && entry.info.count == REGION_TAG_COUNT)) + { + rasprintf(&buf, + _("region trailer: BAD, tag %d type %d offset %d count %d\n"), + entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + memset(&info, 0, sizeof(info)); + + /* Is the no. of tags in the region less than the total no. of tags? */ + ril = entry.info.offset/sizeof(*pe); + if ((entry.info.offset % sizeof(*pe)) || ril > il) { + rasprintf(&buf, _("region size: BAD, ril(%d) > il(%d)\n"), ril, il); + goto exit; + } + + /* Find a header-only digest/signature tag. */ + for (i = ril; i < il; i++) { + xx = headerVerifyInfo(1, dl, pe+i, &entry.info, 0); + if (xx != -1) { + rasprintf(&buf, + _("tag[%d]: BAD, tag %d type %d offset %d count %d\n"), + i, entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + + switch (entry.info.tag) { + case RPMTAG_SHA1HEADER: + if (vsflags & RPMVSF_NOSHA1HEADER) + break; + blen = 0; + for (b = dataStart + entry.info.offset; *b != '\0'; b++) { + if (strchr("0123456789abcdefABCDEF", *b) == NULL) + break; + blen++; + } + if (entry.info.type != RPM_STRING_TYPE || *b != '\0' || blen != 40) + { + rasprintf(&buf, _("hdr SHA1: BAD, not hex\n")); + goto exit; + } + if (info.tag == 0) { + info = entry.info; /* structure assignment */ + siglen = blen + 1; + } + break; + case RPMTAG_RSAHEADER: + if (vsflags & RPMVSF_NORSAHEADER) + break; + if (entry.info.type != RPM_BIN_TYPE) { + rasprintf(&buf, _("hdr RSA: BAD, not binary\n")); + goto exit; + } + info = entry.info; /* structure assignment */ + siglen = info.count; + break; + case RPMTAG_DSAHEADER: + if (vsflags & RPMVSF_NODSAHEADER) + break; + if (entry.info.type != RPM_BIN_TYPE) { + rasprintf(&buf, _("hdr DSA: BAD, not binary\n")); + goto exit; + } + info = entry.info; /* structure assignment */ + siglen = info.count; + break; + default: + break; + } + } + rc = RPMRC_NOTFOUND; + +exit: + /* Return determined RPMRC_OK/RPMRC_FAIL conditions. */ + if (rc != RPMRC_NOTFOUND) { + if (msg) + *msg = buf; + else + free(buf); + return rc; + } + + /* If no header-only digest/signature, then do simple sanity check. */ + if (info.tag == 0) { +verifyinfo_exit: + xx = headerVerifyInfo(ril-1, dl, pe+1, &entry.info, 0); + if (xx != -1) { + rasprintf(&buf, + _("tag[%d]: BAD, tag %d type %d offset %d count %d\n"), + xx+1, entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + rc = RPMRC_FAIL; + } else { + rasprintf(&buf, "Header sanity check: OK\n"); + rc = RPMRC_OK; + } + if (msg) + *msg = buf; + else + free(buf); + return rc; + } + + /* Verify header-only digest/signature. */ + dig = pgpNewDig(); + if (dig == NULL) + goto verifyinfo_exit; + + sigtd.tag = info.tag; + sigtd.type = info.type; + sigtd.count = info.count; + sigtd.data = memcpy(xmalloc(siglen), dataStart + info.offset, siglen); + sigtd.flags = RPMTD_ALLOCED; + + switch (info.tag) { + case RPMTAG_RSAHEADER: + case RPMTAG_DSAHEADER: + if ((rc = parsePGP(&sigtd, "header", dig)) != RPMRC_OK) { + pgpFreeDig(dig); + goto exit; + } + /* fallthrough */ + case RPMTAG_SHA1HEADER: { + int hashalgo = (info.tag == RPMTAG_SHA1HEADER) ? + PGPHASHALGO_SHA1 : dig->signature.hash_algo; + ildl[0] = htonl(ril); + ildl[1] = (regionEnd - dataStart); + ildl[1] = htonl(ildl[1]); + + ctx = rpmDigestInit(hashalgo, RPMDIGEST_NONE); + + b = (unsigned char *) rpm_header_magic; + nb = sizeof(rpm_header_magic); + (void) rpmDigestUpdate(ctx, b, nb); + + b = (unsigned char *) ildl; + nb = sizeof(ildl); + (void) rpmDigestUpdate(ctx, b, nb); + + b = (unsigned char *) pe; + nb = (htonl(ildl[0]) * sizeof(*pe)); + (void) rpmDigestUpdate(ctx, b, nb); + + b = (unsigned char *) dataStart; + nb = htonl(ildl[1]); + (void) rpmDigestUpdate(ctx, b, nb); + } break; + default: + sigtd.data = _free(sigtd.data); /* Hmm...? */ + break; + } + + rc = rpmVerifySignature(keyring, &sigtd, dig, ctx, &buf); + + if (msg) + *msg = buf; + else + free(buf); + + rpmtdFreeData(&sigtd); + pgpFreeDig(dig); + rpmDigestFinal(ctx, NULL, NULL, 0); + return rc; +} + +rpmRC headerCheck(rpmts ts, const void * uh, size_t uc, char ** msg) +{ + rpmRC rc; + rpmVSFlags vsflags = rpmtsVSFlags(ts); + rpmKeyring keyring = rpmtsGetKeyring(ts, 1); + + rpmswEnter(rpmtsOp(ts, RPMTS_OP_DIGEST), 0); + rc = headerVerify(keyring, vsflags, uh, uc, msg); + rpmswExit(rpmtsOp(ts, RPMTS_OP_DIGEST), uc); + rpmKeyringFree(keyring); + + return rc; +} + +static rpmRC rpmpkgReadHeader(rpmKeyring keyring, rpmVSFlags vsflags, + FD_t fd, Header *hdrp, char ** msg) +{ + char *buf = NULL; + int32_t block[4]; + int32_t il; + int32_t dl; + int32_t * ei = NULL; + size_t uc; + size_t nb; + Header h = NULL; + rpmRC rc = RPMRC_FAIL; /* assume failure */ + int xx; + + if (hdrp) + *hdrp = NULL; + if (msg) + *msg = NULL; + + memset(block, 0, sizeof(block)); + if ((xx = timedRead(fd, (char *)block, sizeof(block))) != sizeof(block)) { + rasprintf(&buf, + _("hdr size(%d): BAD, read returned %d\n"), (int)sizeof(block), xx); + goto exit; + } + if (memcmp(block, rpm_header_magic, sizeof(rpm_header_magic))) { + rasprintf(&buf, _("hdr magic: BAD\n")); + goto exit; + } + il = ntohl(block[2]); + if (hdrchkTags(il)) { + rasprintf(&buf, _("hdr tags: BAD, no. of tags(%d) out of range\n"), il); + goto exit; + } + dl = ntohl(block[3]); + if (hdrchkData(dl)) { + rasprintf(&buf, + _("hdr data: BAD, no. of bytes(%d) out of range\n"), dl); + goto exit; + } + + nb = (il * sizeof(struct entryInfo_s)) + dl; + uc = sizeof(il) + sizeof(dl) + nb; + ei = xmalloc(uc); + ei[0] = block[2]; + ei[1] = block[3]; + if ((xx = timedRead(fd, (char *)&ei[2], nb)) != nb) { + rasprintf(&buf, _("hdr blob(%zd): BAD, read returned %d\n"), nb, xx); + goto exit; + } + + /* Sanity check header tags */ + rc = headerVerify(keyring, vsflags, ei, uc, msg); + if (rc != RPMRC_OK) + goto exit; + + /* OK, blob looks sane, load the header. */ + h = headerLoad(ei); + if (h == NULL) { + rasprintf(&buf, _("hdr load: BAD\n")); + rc = RPMRC_FAIL; + goto exit; + } + ei = NULL; /* XXX will be freed with header */ + +exit: + if (hdrp && h && rc == RPMRC_OK) + *hdrp = headerLink(h); + ei = _free(ei); + h = headerFree(h); + + if (msg != NULL && *msg == NULL && buf != NULL) { + *msg = buf; + } else { + free(buf); + } + + return rc; +} + +rpmRC rpmReadHeader(rpmts ts, FD_t fd, Header *hdrp, char ** msg) +{ + rpmRC rc; + rpmKeyring keyring = rpmtsGetKeyring(ts, 1); + rpmVSFlags vsflags = rpmtsVSFlags(ts); + + rc = rpmpkgReadHeader(keyring, vsflags, fd, hdrp, msg); + + rpmKeyringFree(keyring); + return rc; +} + +static rpmRC rpmpkgRead(rpmKeyring keyring, rpmVSFlags vsflags, + FD_t fd, const char * fn, Header * hdrp) +{ + pgpDig dig = NULL; + char buf[8*BUFSIZ]; + ssize_t count; + rpmlead l = NULL; + Header sigh = NULL; + rpmTagVal sigtag; + struct rpmtd_s sigtd; + Header h = NULL; + char * msg; + rpmRC rc = RPMRC_FAIL; /* assume failure */ + int leadtype = -1; + headerGetFlags hgeflags = HEADERGET_DEFAULT; + DIGEST_CTX ctx = NULL; + + if (hdrp) *hdrp = NULL; + + rpmtdReset(&sigtd); + l = rpmLeadNew(); + + if ((rc = rpmLeadRead(fd, l)) == RPMRC_OK) { + const char * err = NULL; + if ((rc = rpmLeadCheck(l, &err)) == RPMRC_FAIL) { + rpmlog(RPMLOG_ERR, "%s: %s\n", fn, err); + } + leadtype = rpmLeadType(l); + } + l = rpmLeadFree(l); + + if (rc != RPMRC_OK) + goto exit; + + /* Read the signature header. */ + msg = NULL; + rc = rpmReadSignature(fd, &sigh, RPMSIGTYPE_HEADERSIG, &msg); + switch (rc) { + default: + rpmlog(RPMLOG_ERR, _("%s: rpmReadSignature failed: %s"), fn, + (msg && *msg ? msg : "\n")); + msg = _free(msg); + goto exit; + break; + case RPMRC_OK: + if (sigh == NULL) { + rpmlog(RPMLOG_ERR, _("%s: No signature available\n"), fn); + rc = RPMRC_FAIL; + goto exit; + } + break; + } + msg = _free(msg); + +#define _chk(_mask, _tag) \ + (sigtag == 0 && !(vsflags & (_mask)) && headerIsEntry(sigh, (_tag))) + + /* + * Figger the most effective available signature. + * Prefer signatures over digests, then header-only over header+payload. + * DSA will be preferred over RSA if both exist because tested first. + * Note that NEEDPAYLOAD prevents header+payload signatures and digests. + */ + sigtag = 0; + if (_chk(RPMVSF_NODSAHEADER, RPMSIGTAG_DSA)) { + sigtag = RPMSIGTAG_DSA; + } else if (_chk(RPMVSF_NORSAHEADER, RPMSIGTAG_RSA)) { + sigtag = RPMSIGTAG_RSA; + } else if (_chk(RPMVSF_NODSA|RPMVSF_NEEDPAYLOAD, RPMSIGTAG_GPG)) { + sigtag = RPMSIGTAG_GPG; + fdInitDigest(fd, PGPHASHALGO_SHA1, 0); + } else if (_chk(RPMVSF_NORSA|RPMVSF_NEEDPAYLOAD, RPMSIGTAG_PGP)) { + sigtag = RPMSIGTAG_PGP; + fdInitDigest(fd, PGPHASHALGO_MD5, 0); + } else if (_chk(RPMVSF_NOSHA1HEADER, RPMSIGTAG_SHA1)) { + sigtag = RPMSIGTAG_SHA1; + } else if (_chk(RPMVSF_NOMD5|RPMVSF_NEEDPAYLOAD, RPMSIGTAG_MD5)) { + sigtag = RPMSIGTAG_MD5; + fdInitDigest(fd, PGPHASHALGO_MD5, 0); + } + + /* Read the metadata, computing digest(s) on the fly. */ + h = NULL; + msg = NULL; + + rc = rpmpkgReadHeader(keyring, vsflags, fd, &h, &msg); + + if (rc != RPMRC_OK || h == NULL) { + rpmlog(RPMLOG_ERR, _("%s: headerRead failed: %s"), fn, + (msg && *msg ? msg : "\n")); + msg = _free(msg); + goto exit; + } + msg = _free(msg); + + /* Any digests or signatures to check? */ + if (sigtag == 0) { + rc = RPMRC_OK; + goto exit; + } + + dig = pgpNewDig(); + if (dig == NULL) { + rc = RPMRC_FAIL; + goto exit; + } + + /* Retrieve the tag parameters from the signature header. */ + if (!headerGet(sigh, sigtag, &sigtd, hgeflags)) { + rc = RPMRC_FAIL; + goto exit; + } + + switch (sigtag) { + case RPMSIGTAG_RSA: + case RPMSIGTAG_DSA: + if ((rc = parsePGP(&sigtd, "package", dig)) != RPMRC_OK) { + goto exit; + } + /* fallthrough */ + case RPMSIGTAG_SHA1: + { struct rpmtd_s utd; + int hashalgo = (sigtag == RPMSIGTAG_SHA1) ? + PGPHASHALGO_SHA1 : dig->signature.hash_algo; + + if (!headerGet(h, RPMTAG_HEADERIMMUTABLE, &utd, hgeflags)) + break; + ctx = rpmDigestInit(hashalgo, RPMDIGEST_NONE); + (void) rpmDigestUpdate(ctx, rpm_header_magic, sizeof(rpm_header_magic)); + (void) rpmDigestUpdate(ctx, utd.data, utd.count); + rpmtdFreeData(&utd); + } break; + case RPMSIGTAG_GPG: + case RPMSIGTAG_PGP5: /* XXX legacy */ + case RPMSIGTAG_PGP: + if ((rc = parsePGP(&sigtd, "package", dig)) != RPMRC_OK) { + goto exit; + } + /* fallthrough */ + case RPMSIGTAG_MD5: + /* Legacy signatures need the compressed payload in the digest too. */ + while ((count = Fread(buf, sizeof(buf[0]), sizeof(buf), fd)) > 0) {} + if (count < 0) { + rpmlog(RPMLOG_ERR, _("%s: Fread failed: %s\n"), + fn, Fstrerror(fd)); + rc = RPMRC_FAIL; + goto exit; + } + + ctx = rpmDigestBundleDupCtx(fdGetBundle(fd), (sigtag == RPMSIGTAG_MD5) ? + PGPHASHALGO_MD5 : dig->signature.hash_algo); + break; + default: + break; + } + + /** @todo Implement disable/enable/warn/error/anal policy. */ + rc = rpmVerifySignature(keyring, &sigtd, dig, ctx, &msg); + + switch (rc) { + case RPMRC_OK: /* Signature is OK. */ + rpmlog(RPMLOG_DEBUG, "%s: %s", fn, msg); + break; + case RPMRC_NOTTRUSTED: /* Signature is OK, but key is not trusted. */ + case RPMRC_NOKEY: /* Public key is unavailable. */ + /* XXX Print NOKEY/NOTTRUSTED warning only once. */ + { int lvl = (stashKeyid(dig) ? RPMLOG_DEBUG : RPMLOG_WARNING); + rpmlog(lvl, "%s: %s", fn, msg); + } break; + case RPMRC_NOTFOUND: /* Signature is unknown type. */ + rpmlog(RPMLOG_WARNING, "%s: %s", fn, msg); + break; + default: + case RPMRC_FAIL: /* Signature does not verify. */ + rpmlog(RPMLOG_ERR, "%s: %s", fn, msg); + break; + } + free(msg); + +exit: + if (rc != RPMRC_FAIL && h != NULL && hdrp != NULL) { + /* Retrofit RPMTAG_SOURCEPACKAGE to srpms for compatibility */ + if (leadtype == RPMLEAD_SOURCE && headerIsSource(h)) { + if (!headerIsEntry(h, RPMTAG_SOURCEPACKAGE)) { + uint32_t one = 1; + headerPutUint32(h, RPMTAG_SOURCEPACKAGE, &one, 1); + } + } + /* + * Try to make sure binary rpms have RPMTAG_SOURCERPM set as that's + * what we use for differentiating binary vs source elsewhere. + */ + if (!headerIsEntry(h, RPMTAG_SOURCEPACKAGE) && headerIsSource(h)) { + headerPutString(h, RPMTAG_SOURCERPM, "(none)"); + } + /* + * Convert legacy headers on the fly. Not having "new" style compressed + * filenames is close enough estimate for legacy indication... + */ + if (!headerIsEntry(h, RPMTAG_DIRNAMES)) { + headerConvert(h, HEADERCONV_RETROFIT_V3); + } + + /* Append (and remap) signature tags to the metadata. */ + headerMergeLegacySigs(h, sigh); + + /* Bump reference count for return. */ + *hdrp = headerLink(h); + } + rpmtdFreeData(&sigtd); + rpmDigestFinal(ctx, NULL, NULL, 0); + h = headerFree(h); + pgpFreeDig(dig); + sigh = rpmFreeSignature(sigh); + return rc; +} + +rpmRC rpmReadPackageFile(rpmts ts, FD_t fd, const char * fn, Header * hdrp) +{ + rpmRC rc; + rpmVSFlags vsflags = rpmtsVSFlags(ts); + rpmKeyring keyring = 0; + + if ((vsflags & _RPMVSF_NOSIGNATURES) != _RPMVSF_NOSIGNATURES) + keyring = rpmtsGetKeyring(ts, 1); + + rc = rpmpkgRead(keyring, vsflags, fd, fn, hdrp); + + if (keyring) + rpmKeyringFree(keyring); + return rc; +} + +/** + * Check for supported payload format in header. + * @param h header to check + * @return RPMRC_OK if supported, RPMRC_FAIL otherwise + */ +rpmRC headerCheckPayloadFormat(Header h) { + rpmRC rc = RPMRC_OK; + const char *payloadfmt = headerGetString(h, RPMTAG_PAYLOADFORMAT); + /* + * XXX Ugh, rpm 3.x packages don't have payload format tag. Instead + * of blinly allowing, should check somehow (HDRID existence or... ?) + */ + if (!payloadfmt) return rc; + + if (!rstreq(payloadfmt, "cpio")) { + char *nevra = headerGetAsString(h, RPMTAG_NEVRA); + if (payloadfmt && rstreq(payloadfmt, "drpm")) { + rpmlog(RPMLOG_ERR, + _("%s is a Delta RPM and cannot be directly installed\n"), + nevra); + } else { + rpmlog(RPMLOG_ERR, + _("Unsupported payload (%s) in package %s\n"), + payloadfmt ? payloadfmt : "none", nevra); + } + nevra = _free(nevra); + rc = RPMRC_FAIL; + } + return rc; +} + + diff --git a/lib/poptALL.c b/lib/poptALL.c new file mode 100644 index 0000000..474af33 --- /dev/null +++ b/lib/poptALL.c @@ -0,0 +1,316 @@ +/** \ingroup rpmcli + * \file lib/poptALL.c + * Popt tables for all rpm modes. + */ + +#include "system.h" +const char *__progname; + +#if HAVE_MCHECK_H +#include +#endif + +#include +#include /* rpmEVR, rpmReadConfigFiles etc */ +#include +#include +#include + +#include "debug.h" + +#define POPT_SHOWVERSION -999 +#define POPT_SHOWRC -998 +#define POPT_QUERYTAGS -997 +#define POPT_PREDEFINE -996 +#define POPT_DBPATH -995 + +static int _debug = 0; + +extern int _rpmds_nopromote; + +extern int _fsm_debug; + +extern int _print_pkts; + +extern int _psm_debug; + +/* XXX avoid -lrpmbuild linkage. */ + int _rpmfc_debug; + +extern int _rpmts_stats; + +const char * rpmcliPipeOutput = NULL; + +const char * rpmcliRcfile = NULL; + +const char * rpmcliRootDir = "/"; + +rpmQueryFlags rpmcliQueryFlags; + +extern int _rpmio_debug; + +static int rpmcliInitialized = -1; + +/** + * Display rpm version. + */ +static void printVersion(FILE * fp) +{ + fprintf(fp, _("RPM version %s\n"), rpmEVR); +} + +/** + * Make sure that config files have been read. + * @warning Options like --rcfile and --verbose must precede callers option. + */ +void rpmcliConfigured(void) +{ + + if (rpmcliInitialized < 0) + rpmcliInitialized = rpmReadConfigFiles(rpmcliRcfile, NULL); + if (rpmcliInitialized) + exit(EXIT_FAILURE); +} + +/** + */ +static void rpmcliAllArgCallback( poptContext con, + enum poptCallbackReason reason, + const struct poptOption * opt, const char * arg, + const void * data) +{ + + /* XXX avoid accidental collisions with POPT_BIT_SET for flags */ + if (opt->arg == NULL) + switch (opt->val) { + case 'q': + rpmSetVerbosity(RPMLOG_WARNING); + break; + case 'v': + rpmIncreaseVerbosity(); + break; + case POPT_PREDEFINE: + (void) rpmDefineMacro(NULL, arg, RMIL_CMDLINE); + break; + case 'D': + { char *s, *t; + /* XXX Convert '-' in macro name to underscore, skip leading %. */ + s = t = xstrdup(arg); + while (*t && !risspace(*t)) { + if (*t == '-') *t = '_'; + t++; + } + t = s; + if (*t == '%') t++; + /* XXX Predefine macro if not initialized yet. */ + if (rpmcliInitialized < 0) + (void) rpmDefineMacro(NULL, t, RMIL_CMDLINE); + rpmcliConfigured(); + (void) rpmDefineMacro(NULL, t, RMIL_CMDLINE); + (void) rpmDefineMacro(rpmCLIMacroContext, t, RMIL_CMDLINE); + s = _free(s); + break; + } + case 'E': + rpmcliConfigured(); + { char *val = rpmExpand(arg, NULL); + fprintf(stdout, "%s\n", val); + val = _free(val); + } + break; + case POPT_DBPATH: + rpmcliConfigured(); + addMacro(NULL, "_dbpath", NULL, arg, RMIL_CMDLINE); + break; + case POPT_SHOWVERSION: + printVersion(stdout); + exit(EXIT_SUCCESS); + break; + case POPT_SHOWRC: + rpmcliConfigured(); + (void) rpmShowRC(stdout); + exit(EXIT_SUCCESS); + break; + case POPT_QUERYTAGS: + rpmDisplayQueryTags(stdout); + exit(EXIT_SUCCESS); + break; + case RPMCLI_POPT_NODIGEST: + rpmcliQueryFlags |= VERIFY_DIGEST; + break; + + case RPMCLI_POPT_NOSIGNATURE: + rpmcliQueryFlags |= VERIFY_SIGNATURE; + break; + + case RPMCLI_POPT_NOHDRCHK: + rpmcliQueryFlags |= VERIFY_HDRCHK; + break; + } +} + +struct poptOption rpmcliAllPoptTable[] = { +/* FIX: cast? */ + { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE, + rpmcliAllArgCallback, 0, NULL, NULL }, + + { "debug", 'd', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_debug, -1, + NULL, NULL }, + + { "predefine", '\0', POPT_ARG_STRING|POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_PREDEFINE, + N_("predefine MACRO with value EXPR"), + N_("'MACRO EXPR'") }, + { "define", 'D', POPT_ARG_STRING, 0, 'D', + N_("define MACRO with value EXPR"), + N_("'MACRO EXPR'") }, + { "eval", 'E', POPT_ARG_STRING, 0, 'E', + N_("print macro expansion of EXPR"), + N_("'EXPR'") }, + { "macros", '\0', POPT_ARG_STRING, ¯ofiles, 0, + N_("read instead of default file(s)"), + N_("") }, + + { "nodigest", '\0', 0, 0, RPMCLI_POPT_NODIGEST, + N_("don't verify package digest(s)"), NULL }, + { "nohdrchk", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_NOHDRCHK, + N_("don't verify database header(s) when retrieved"), NULL }, + { "nosignature", '\0', 0, 0, RPMCLI_POPT_NOSIGNATURE, + N_("don't verify package signature(s)"), NULL }, + + { "pipe", '\0', POPT_ARG_STRING|POPT_ARGFLAG_DOC_HIDDEN, &rpmcliPipeOutput, 0, + N_("send stdout to CMD"), + N_("CMD") }, + { "rcfile", '\0', POPT_ARG_STRING, &rpmcliRcfile, 0, + N_("read instead of default file(s)"), + N_("") }, + { "root", 'r', POPT_ARG_STRING|POPT_ARGFLAG_SHOW_DEFAULT, &rpmcliRootDir, 0, + N_("use ROOT as top level directory"), + N_("ROOT") }, + { "dbpath", '\0', POPT_ARG_STRING, 0, POPT_DBPATH, + N_("use database in DIRECTORY"), + N_("DIRECTORY") }, + + { "querytags", '\0', 0, 0, POPT_QUERYTAGS, + N_("display known query tags"), NULL }, + { "showrc", '\0', 0, NULL, POPT_SHOWRC, + N_("display final rpmrc and macro configuration"), NULL }, + { "quiet", '\0', 0, NULL, 'q', + N_("provide less detailed output"), NULL}, + { "verbose", 'v', 0, NULL, 'v', + N_("provide more detailed output"), NULL}, + { "version", '\0', 0, NULL, POPT_SHOWVERSION, + N_("print the version of rpm being used"), NULL }, + + { "promoteepoch", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmds_nopromote, 0, + NULL, NULL}, + + { "fsmdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_fsm_debug, -1, + N_("debug payload file state machine"), NULL}, + { "prtpkts", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_print_pkts, -1, + NULL, NULL}, + { "rpmfcdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmfc_debug, -1, + NULL, NULL}, + { "rpmiodebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmio_debug, -1, + N_("debug rpmio I/O"), NULL}, + { "stats", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmts_stats, -1, + NULL, NULL}, + + POPT_TABLEEND +}; + +poptContext +rpmcliFini(poptContext optCon) +{ + poptFreeContext(optCon); + rpmFreeMacros(NULL); + rpmFreeMacros(rpmCLIMacroContext); + rpmFreeRpmrc(); + rpmlogClose(); + rpmcliInitialized = -1; + +#if HAVE_MCHECK_H && HAVE_MTRACE + muntrace(); /* Trace malloc only if MALLOC_TRACE=mtrace-output-file. */ +#endif + + return NULL; +} + +poptContext +rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable) +{ + const char * optArg; + poptContext optCon; + int rc; + const char *ctx, *execPath; + +#if HAVE_MCHECK_H && HAVE_MTRACE + mtrace(); /* Trace malloc only if MALLOC_TRACE=mtrace-output-file. */ +#endif + setprogname(argv[0]); /* Retrofit glibc __progname */ + + /* XXX glibc churn sanity */ + if (__progname == NULL) { + if ((__progname = strrchr(argv[0], '/')) != NULL) __progname++; + else __progname = argv[0]; + } + +#if defined(ENABLE_NLS) + (void) setlocale(LC_ALL, "" ); + + (void) bindtextdomain(PACKAGE, LOCALEDIR); + (void) textdomain(PACKAGE); +#endif + + rpmSetVerbosity(RPMLOG_NOTICE); + + if (optionsTable == NULL) { + /* Read rpm configuration (if not already read). */ + rpmcliConfigured(); + return NULL; + } + + /* XXX hack to get popt working from build tree wrt lt-foo names */ + ctx = rstreqn(__progname, "lt-", 3) ? __progname + 3 : __progname; + + optCon = poptGetContext(ctx, argc, (const char **)argv, optionsTable, 0); + { + char *poptfile = rpmGenPath(rpmConfigDir(), LIBRPMALIAS_FILENAME, NULL); + (void) poptReadConfigFile(optCon, poptfile); + free(poptfile); + } + (void) poptReadDefaultConfig(optCon, 1); + + if ((execPath = getenv("RPM_POPTEXEC_PATH")) == NULL) + execPath = LIBRPMALIAS_EXECPATH; + poptSetExecPath(optCon, execPath, 1); + + /* Process all options, whine if unknown. */ + while ((rc = poptGetNextOpt(optCon)) > 0) { + optArg = poptGetOptArg(optCon); + switch (rc) { + default: + fprintf(stderr, _("%s: option table misconfigured (%d)\n"), + __progname, rc); + exit(EXIT_FAILURE); + + break; + } + } + + if (rc < -1) { + fprintf(stderr, "%s: %s: %s\n", __progname, + poptBadOption(optCon, POPT_BADOPTION_NOALIAS), + poptStrerror(rc)); + exit(EXIT_FAILURE); + } + + /* Read rpm configuration (if not already read). */ + rpmcliConfigured(); + + if (_debug) { + rpmIncreaseVerbosity(); + rpmIncreaseVerbosity(); + } + + return optCon; +} diff --git a/lib/poptI.c b/lib/poptI.c new file mode 100644 index 0000000..8c1ff6e --- /dev/null +++ b/lib/poptI.c @@ -0,0 +1,252 @@ +/** \ingroup rpmcli + * \file lib/poptI.c + * Popt tables for install modes. + */ + +#include "system.h" + +#include + +#include "debug.h" + +struct rpmInstallArguments_s rpmIArgs = { + 0, /* transFlags */ + 0, /* probFilter */ + 0, /* installInterfaceFlags */ + 0, /* numRelocations */ + 0, /* noDeps */ + 0, /* incldocs */ + NULL, /* relocations */ + NULL, /* prefix */ +}; + +#define POPT_RELOCATE -1021 +#define POPT_EXCLUDEPATH -1022 + +RPM_GNUC_NORETURN +static void argerror(const char * desc) +{ + fprintf(stderr, _("%s: %s\n"), __progname, desc); + exit(EXIT_FAILURE); +} + +/** + */ +static void installArgCallback( poptContext con, + enum poptCallbackReason reason, + const struct poptOption * opt, const char * arg, + const void * data) +{ + struct rpmInstallArguments_s * ia = &rpmIArgs; + + /* XXX avoid accidental collisions with POPT_BIT_SET for flags */ + if (opt->arg == NULL) + switch (opt->val) { + + case 'i': + ia->installInterfaceFlags |= INSTALL_INSTALL; + break; + + case POPT_EXCLUDEPATH: + if (arg == NULL || *arg != '/') + argerror(_("exclude paths must begin with a /")); + ia->relocations = xrealloc(ia->relocations, + sizeof(*ia->relocations) * (ia->numRelocations + 1)); + ia->relocations[ia->numRelocations].oldPath = xstrdup(arg); + ia->relocations[ia->numRelocations].newPath = NULL; + ia->numRelocations++; + break; + case POPT_RELOCATE: + { char * oldPath = NULL; + char * newPath = NULL; + + if (arg == NULL || *arg != '/') + argerror(_("relocations must begin with a /")); + oldPath = xstrdup(arg); + if (!(newPath = strchr(oldPath, '='))) + argerror(_("relocations must contain a =")); + *newPath++ = '\0'; + if (*newPath != '/') + argerror(_("relocations must have a / following the =")); + ia->relocations = xrealloc(ia->relocations, + sizeof(*ia->relocations) * (ia->numRelocations + 1)); + ia->relocations[ia->numRelocations].oldPath = oldPath; + ia->relocations[ia->numRelocations].newPath = newPath; + ia->numRelocations++; + } break; + + case RPMCLI_POPT_NODEPS: + ia->noDeps = 1; + break; + + case RPMCLI_POPT_NOFILEDIGEST: + ia->transFlags |= RPMTRANS_FLAG_NOFILEDIGEST; + break; + + case RPMCLI_POPT_NOCONTEXTS: + ia->transFlags |= RPMTRANS_FLAG_NOCONTEXTS; + break; + + case RPMCLI_POPT_FORCE: + ia->probFilter |= + ( RPMPROB_FILTER_REPLACEPKG + | RPMPROB_FILTER_REPLACEOLDFILES + | RPMPROB_FILTER_REPLACENEWFILES + | RPMPROB_FILTER_OLDPACKAGE ); + break; + + case RPMCLI_POPT_NOSCRIPTS: + ia->transFlags |= (_noTransScripts | _noTransTriggers); + break; + + } +} + +/** + */ +struct poptOption rpmInstallPoptTable[] = { +/* FIX: cast? */ + { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE, + installArgCallback, 0, NULL, NULL }, + + { "allfiles", '\0', POPT_BIT_SET, + &rpmIArgs.transFlags, RPMTRANS_FLAG_ALLFILES, + N_("install all files, even configurations which might otherwise be skipped"), + NULL}, + { "allmatches", '\0', POPT_BIT_SET, + &rpmIArgs.installInterfaceFlags, UNINSTALL_ALLMATCHES, + N_("remove all packages which match (normally an error is generated if specified multiple packages)"), + NULL}, + + { "badreloc", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_FORCERELOCATE, + N_("relocate files in non-relocatable package"), NULL}, + + { "deploops", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_DEPLOOPS, + N_("print dependency loops as warning"), NULL}, + + { "erase", 'e', POPT_BIT_SET, + &rpmIArgs.installInterfaceFlags, INSTALL_ERASE, + N_("erase (uninstall) package"), N_("+") }, + { "excludeconfigs", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOCONFIGS, + N_("do not install configuration files"), NULL}, + { "excludedocs", '\0', POPT_BIT_SET, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NODOCS, + N_("do not install documentation"), NULL}, + { "excludepath", '\0', POPT_ARG_STRING, 0, POPT_EXCLUDEPATH, + N_("skip files with leading component "), + N_("") }, + + { "force", '\0', 0, NULL, RPMCLI_POPT_FORCE, + N_("short hand for --replacepkgs --replacefiles"), NULL}, + + { "freshen", 'F', POPT_BIT_SET, &rpmIArgs.installInterfaceFlags, + (INSTALL_UPGRADE|INSTALL_FRESHEN|INSTALL_INSTALL), + N_("upgrade package(s) if already installed"), + N_("+") }, + { "hash", 'h', POPT_BIT_SET, &rpmIArgs.installInterfaceFlags, INSTALL_HASH, + N_("print hash marks as package installs (good with -v)"), NULL}, + { "ignorearch", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_IGNOREARCH, + N_("don't verify package architecture"), NULL}, + { "ignoreos", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_IGNOREOS, + N_("don't verify package operating system"), NULL}, + { "ignoresize", '\0', POPT_BIT_SET, &rpmIArgs.probFilter, + (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES), + N_("don't check disk space before installing"), NULL}, + { "includedocs", '\0', POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.incldocs, 0, + N_("install documentation"), NULL}, + + { "install", 'i', 0, NULL, 'i', + N_("install package(s)"), N_("+") }, + + { "justdb", '\0', POPT_BIT_SET, &rpmIArgs.transFlags, RPMTRANS_FLAG_JUSTDB, + N_("update the database, but do not modify the filesystem"), NULL}, + + { "noconfigs", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOCONFIGS, + N_("do not install configuration files"), NULL}, + { "nodeps", '\0', 0, NULL, RPMCLI_POPT_NODEPS, + N_("do not verify package dependencies"), NULL }, + { "nodocs", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NODOCS, + N_("do not install documentation"), NULL}, + + { "nofiledigest", '\0', 0, NULL, RPMCLI_POPT_NOFILEDIGEST, + N_("don't verify digest of files"), NULL }, + { "nomd5", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOFILEDIGEST, + N_("don't verify digest of files (obsolete)"), NULL }, + { "nocontexts", '\0',0, NULL, RPMCLI_POPT_NOCONTEXTS, + N_("don't install file security contexts"), NULL}, + + { "noorder", '\0', POPT_BIT_SET, + &rpmIArgs.installInterfaceFlags, INSTALL_NOORDER, + N_("do not reorder package installation to satisfy dependencies"), + NULL}, + + { "noscripts", '\0', 0, NULL, RPMCLI_POPT_NOSCRIPTS, + N_("do not execute package scriptlet(s)"), NULL }, + + { "nopre", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, + RPMTRANS_FLAG_NOPRE, + N_("do not execute %%pre scriptlet (if any)"), NULL }, + { "nopost", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, + RPMTRANS_FLAG_NOPOST, + N_("do not execute %%post scriptlet (if any)"), NULL }, + { "nopreun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, + RPMTRANS_FLAG_NOPREUN, + N_("do not execute %%preun scriptlet (if any)"), NULL }, + { "nopostun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &rpmIArgs.transFlags, + RPMTRANS_FLAG_NOPOSTUN, + N_("do not execute %%postun scriptlet (if any)"), NULL }, + + { "notriggers", '\0', POPT_BIT_SET, &rpmIArgs.transFlags, _noTransTriggers, + N_("do not execute any scriptlet(s) triggered by this package"), NULL}, + { "notriggerprein", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOTRIGGERPREIN, + N_("do not execute any %%triggerprein scriptlet(s)"), NULL}, + { "notriggerin", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOTRIGGERIN, + N_("do not execute any %%triggerin scriptlet(s)"), NULL}, + { "notriggerun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOTRIGGERUN, + N_("do not execute any %%triggerun scriptlet(s)"), NULL}, + { "notriggerpostun", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOTRIGGERPOSTUN, + N_("do not execute any %%triggerpostun scriptlet(s)"), NULL}, + + { "nocollections", '\0', POPT_BIT_SET, + &rpmIArgs.transFlags, RPMTRANS_FLAG_NOCOLLECTIONS, + N_("do not perform any collection actions"), NULL}, + + { "oldpackage", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_OLDPACKAGE, + N_("upgrade to an old version of the package (--force on upgrades does this automatically)"), + NULL}, + { "percent", '\0', POPT_BIT_SET, + &rpmIArgs.installInterfaceFlags, INSTALL_PERCENT, + N_("print percentages as package installs"), NULL}, + { "prefix", '\0', POPT_ARG_STRING, &rpmIArgs.prefix, 0, + N_("relocate the package to , if relocatable"), + N_("") }, + { "relocate", '\0', POPT_ARG_STRING, 0, POPT_RELOCATE, + N_("relocate files from path to "), + N_("=") }, + { "replacefiles", '\0', POPT_BIT_SET, &rpmIArgs.probFilter, + (RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES), + N_("ignore file conflicts between packages"), NULL}, + { "replacepkgs", '\0', POPT_BIT_SET, + &rpmIArgs.probFilter, RPMPROB_FILTER_REPLACEPKG, + N_("reinstall if the package is already present"), NULL}, + { "test", '\0', POPT_BIT_SET, &rpmIArgs.transFlags, RPMTRANS_FLAG_TEST, + N_("don't install, but tell if it would work or not"), NULL}, + { "upgrade", 'U', POPT_BIT_SET, + &rpmIArgs.installInterfaceFlags, (INSTALL_UPGRADE|INSTALL_INSTALL), + N_("upgrade package(s)"), + N_("+") }, + + POPT_TABLEEND +}; diff --git a/lib/poptQV.c b/lib/poptQV.c new file mode 100644 index 0000000..1cb5517 --- /dev/null +++ b/lib/poptQV.c @@ -0,0 +1,246 @@ +/** \ingroup rpmcli + * \file lib/poptQV.c + * Popt tables for query/verify modes. + */ + +#include "system.h" + +#include +#include "lib/rpmgi.h" /* XXX for giFlags */ + +#include "debug.h" + +struct rpmQVKArguments_s rpmQVKArgs; + +#define POPT_QUERYFORMAT -1000 +#define POPT_WHATREQUIRES -1001 +#define POPT_WHATPROVIDES -1002 +#define POPT_QUERYBYNUMBER -1003 +#define POPT_TRIGGEREDBY -1004 +#define POPT_DUMP -1005 +#define POPT_QUERYBYPKGID -1007 +#define POPT_QUERYBYHDRID -1008 +#define POPT_QUERYBYTID -1010 + +/* ========== Query/Verify/Signature source args */ +static void rpmQVSourceArgCallback( poptContext con, + enum poptCallbackReason reason, + const struct poptOption * opt, const char * arg, + const void * data) +{ + QVA_t qva = &rpmQVKArgs; + rpmQVSources sources = qva->qva_source;; + + switch (opt->val) { + case 'q': /* from --query, -q */ + case 'Q': /* from --querytags (handled by poptALL) */ + case 'V': /* from --verify, -V */ + if (qva->qva_mode == '\0' || strchr("qQ ", qva->qva_mode)) { + qva->qva_mode = opt->val; + } + break; + case 'a': qva->qva_source |= RPMQV_ALL; break; + case 'f': qva->qva_source |= RPMQV_PATH; break; + case 'g': qva->qva_source |= RPMQV_GROUP; break; + case 'p': qva->qva_source |= RPMQV_RPM; break; + case POPT_WHATPROVIDES: qva->qva_source |= RPMQV_WHATPROVIDES; break; + case POPT_WHATREQUIRES: qva->qva_source |= RPMQV_WHATREQUIRES; break; + case POPT_TRIGGEREDBY: qva->qva_source |= RPMQV_TRIGGEREDBY; break; + case POPT_QUERYBYPKGID: qva->qva_source |= RPMQV_PKGID; break; + case POPT_QUERYBYHDRID: qva->qva_source |= RPMQV_HDRID; break; + case POPT_QUERYBYTID: qva->qva_source |= RPMQV_TID; break; + case POPT_QUERYBYNUMBER: qva->qva_source |= RPMQV_DBOFFSET; break; + } + + if (sources != qva->qva_source) + qva->qva_sourceCount++; +} + +/** + * Common query/verify mode options. + */ +struct poptOption rpmQVSourcePoptTable[] = { +/* FIX: cast? */ + { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, + rpmQVSourceArgCallback, 0, NULL, NULL }, + { "all", 'a', 0, 0, 'a', + N_("query/verify all packages"), NULL }, + { "checksig", 'K', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'K', + N_("rpm checksig mode"), NULL }, + { "file", 'f', 0, 0, 'f', + N_("query/verify package(s) owning file"), "FILE" }, + { "group", 'g', 0, 0, 'g', + N_("query/verify package(s) in group"), "GROUP" }, + { "package", 'p', 0, 0, 'p', + N_("query/verify a package file"), NULL }, + + { "pkgid", '\0', 0, 0, POPT_QUERYBYPKGID, + N_("query/verify package(s) with package identifier"), "MD5" }, + { "hdrid", '\0', 0, 0, POPT_QUERYBYHDRID, + N_("query/verify package(s) with header identifier"), "SHA1" }, + + { "query", 'q', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'q', + N_("rpm query mode"), NULL }, + { "querybynumber", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYNUMBER, + N_("query/verify a header instance"), "HDRNUM" }, + { "tid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYTID, + N_("query/verify package(s) from install transaction"), "TID" }, + { "triggeredby", '\0', 0, 0, POPT_TRIGGEREDBY, + N_("query the package(s) triggered by the package"), "PACKAGE" }, + { "verify", 'V', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'V', + N_("rpm verify mode"), NULL }, + { "whatrequires", '\0', 0, 0, POPT_WHATREQUIRES, + N_("query/verify the package(s) which require a dependency"), "CAPABILITY" }, + { "whatprovides", '\0', 0, 0, POPT_WHATPROVIDES, + N_("query/verify the package(s) which provide a dependency"), "CAPABILITY" }, + + { "noglob", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &giFlags, RPMGI_NOGLOB, + N_("do not glob arguments"), NULL}, + { "nomanifest", '\0', POPT_BIT_SET, &giFlags, RPMGI_NOMANIFEST, + N_("do not process non-package files as manifests"), NULL}, + + POPT_TABLEEND +}; + +/* ========== Query specific popt args */ + +static void queryArgCallback(poptContext con, + enum poptCallbackReason reason, + const struct poptOption * opt, const char * arg, + const void * data) +{ + QVA_t qva = &rpmQVKArgs; + + switch (opt->val) { + case 'c': qva->qva_flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break; + case 'd': qva->qva_flags |= QUERY_FOR_DOCS | QUERY_FOR_LIST; break; + case 'l': qva->qva_flags |= QUERY_FOR_LIST; break; + case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST; + break; + case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST; + break; + + case POPT_QUERYFORMAT: + rstrcat(&qva->qva_queryFormat, arg); + break; + + case 'i': + if (qva->qva_mode == 'q') { + const char * infoCommand[] = { "--info", NULL }; + (void) poptStuffArgs(con, infoCommand); + } + break; + + case RPMCLI_POPT_NODEPS: + qva->qva_flags |= VERIFY_DEPS; + break; + + case RPMCLI_POPT_NOFILEDIGEST: + qva->qva_flags |= VERIFY_FILEDIGEST; + break; + + case RPMCLI_POPT_NOCONTEXTS: + qva->qva_flags |= VERIFY_CONTEXTS; + break; + +#ifdef NOTYET + case RPMCLI_POPT_FORCE: + ia->probFilter |= + ( RPMPROB_FILTER_REPLACEPKG + | RPMPROB_FILTER_REPLACEOLDFILES + | RPMPROB_FILTER_REPLACENEWFILES + | RPMPROB_FILTER_OLDPACKAGE ); + break; +#endif + + case RPMCLI_POPT_NOSCRIPTS: + qva->qva_flags |= VERIFY_SCRIPT; + break; + + } +} + +/** + * Query mode options. + */ +struct poptOption rpmQueryPoptTable[] = { +/* FIX: cast? */ + { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE, + queryArgCallback, 0, NULL, NULL }, + { "configfiles", 'c', 0, 0, 'c', + N_("list all configuration files"), NULL }, + { "docfiles", 'd', 0, 0, 'd', + N_("list all documentation files"), NULL }, + { "dump", '\0', 0, 0, POPT_DUMP, + N_("dump basic file information"), NULL }, + { NULL, 'i', POPT_ARGFLAG_DOC_HIDDEN, 0, 'i', + NULL, NULL }, + { "list", 'l', 0, 0, 'l', + N_("list files in package"), NULL }, + + /* Duplicate file attr flags from packages into command line options. */ + { "noghost", '\0', POPT_BIT_CLR|POPT_ARGFLAG_DOC_HIDDEN, + &rpmQVKArgs.qva_fflags, RPMFILE_GHOST, + N_("skip %%ghost files"), NULL }, + + { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0, + POPT_QUERYFORMAT, NULL, NULL }, + { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT, + N_("use the following query format"), "QUERYFORMAT" }, + { "state", 's', 0, 0, 's', + N_("display the states of the listed files"), NULL }, + POPT_TABLEEND +}; + +/** + * Verify mode options. + */ +struct poptOption rpmVerifyPoptTable[] = { +/* FIX: cast? */ + { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE, + queryArgCallback, 0, NULL, NULL }, + + { "nofiledigest", '\0', 0, NULL, RPMCLI_POPT_NOFILEDIGEST, + N_("don't verify digest of files"), NULL }, + { "nomd5", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOFILEDIGEST, + N_("don't verify digest of files"), NULL }, + { "nosize", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmQVKArgs.qva_flags, VERIFY_SIZE, + N_("don't verify size of files"), NULL }, + { "nolinkto", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmQVKArgs.qva_flags, VERIFY_LINKTO, + N_("don't verify symlink path of files"), NULL }, + { "nouser", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmQVKArgs.qva_flags, VERIFY_USER, + N_("don't verify owner of files"), NULL }, + { "nogroup", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmQVKArgs.qva_flags, VERIFY_GROUP, + N_("don't verify group of files"), NULL }, + { "nomtime", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmQVKArgs.qva_flags, VERIFY_MTIME, + N_("don't verify modification time of files"), NULL }, + { "nomode", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmQVKArgs.qva_flags, VERIFY_MODE, + N_("don't verify mode of files"), NULL }, + { "nordev", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmQVKArgs.qva_flags, VERIFY_RDEV, + N_("don't verify mode of files"), NULL }, + { "nocaps", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, + &rpmQVKArgs.qva_flags, VERIFY_CAPS, + N_("don't verify capabilities of files"), NULL }, + + { "nocontexts", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOCONTEXTS, + N_("don't verify file security contexts"), NULL }, + { "nofiles", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_FILES, + N_("don't verify files in package"), NULL}, + { "nodeps", '\0', 0, NULL, RPMCLI_POPT_NODEPS, + N_("don't verify package dependencies"), NULL }, + + { "noscript", '\0', 0, NULL, RPMCLI_POPT_NOSCRIPTS, + N_("don't execute verify script(s)"), NULL }, + /* XXX legacy had a trailing s on --noscript */ + { "noscripts", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOSCRIPTS, + N_("don't execute verify script(s)"), NULL }, + + POPT_TABLEEND +}; diff --git a/lib/psm.c b/lib/psm.c new file mode 100644 index 0000000..1c761bf --- /dev/null +++ b/lib/psm.c @@ -0,0 +1,1095 @@ +/** \ingroup rpmts payload + * \file lib/psm.c + * Package state machine to handle a package from a transaction set. + */ + +#include "system.h" + +#include + +#include /* rpmvercmp and others */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lib/cpio.h" +#include "lib/fsm.h" /* XXX CPIO_FOO/FSM_FOO constants */ +#include "lib/rpmchroot.h" +#include "lib/rpmfi_internal.h" /* XXX replaced/states... */ +#include "lib/rpmte_internal.h" /* XXX internal apis */ +#include "lib/rpmdb_internal.h" /* rpmdbAdd/Remove */ +#include "lib/rpmscript.h" + +#include "debug.h" + +typedef enum pkgStage_e { + PSM_UNKNOWN = 0, + PSM_INIT = 1, + PSM_PRE = 2, + PSM_PROCESS = 3, + PSM_POST = 4, + PSM_UNDO = 5, + PSM_FINI = 6, + + PSM_CREATE = 17, + PSM_NOTIFY = 22, + PSM_DESTROY = 23, + + PSM_SCRIPT = 53, + PSM_TRIGGERS = 54, + PSM_IMMED_TRIGGERS = 55, + + PSM_RPMDB_ADD = 98, + PSM_RPMDB_REMOVE = 99 + +} pkgStage; + +typedef struct rpmpsm_s { + rpmts ts; /*!< transaction set */ + rpmte te; /*!< current transaction element */ + rpmfi fi; /*!< transaction element file info */ + const char * goalName; + char * failedFile; + rpmTagVal scriptTag; /*!< Scriptlet data tag. */ + int npkgs_installed; /*!< No. of installed instances. */ + int scriptArg; /*!< Scriptlet package arg. */ + rpmsenseFlags sense; /*!< One of RPMSENSE_TRIGGER{PREIN,IN,UN,POSTUN}. */ + int countCorrection; /*!< 0 if installing, -1 if removing. */ + rpmCallbackType what; /*!< Callback type. */ + rpm_loff_t amount; /*!< Callback amount. */ + rpm_loff_t total; /*!< Callback total. */ + pkgGoal goal; + pkgStage stage; /*!< Current psm stage. */ + pkgStage nstage; /*!< Next psm stage. */ + + int nrefs; /*!< Reference count. */ +} * rpmpsm; + +static rpmpsm rpmpsmNew(rpmts ts, rpmte te); +static rpmpsm rpmpsmFree(rpmpsm psm); +static rpmRC rpmpsmStage(rpmpsm psm, pkgStage stage); + +/** + * Macros to be defined from per-header tag values. + * @todo Should other macros be added from header when installing a package? + */ +static struct tagMacro { + const char *macroname; /*!< Macro name to define. */ + rpmTag tag; /*!< Header tag to use for value. */ +} const tagMacros[] = { + { "name", RPMTAG_NAME }, + { "version", RPMTAG_VERSION }, + { "release", RPMTAG_RELEASE }, + { "epoch", RPMTAG_EPOCH }, + { NULL, 0 } +}; + +/** + * Define per-header macros. + * @param h header + * @return 0 always + */ +static void rpmInstallLoadMacros(Header h) +{ + const struct tagMacro * tagm; + + for (tagm = tagMacros; tagm->macroname != NULL; tagm++) { + struct rpmtd_s td; + char *body; + if (!headerGet(h, tagm->tag, &td, HEADERGET_DEFAULT)) + continue; + + switch (rpmtdType(&td)) { + default: + body = rpmtdFormat(&td, RPMTD_FORMAT_STRING, NULL); + addMacro(NULL, tagm->macroname, NULL, body, -1); + free(body); + break; + case RPM_NULL_TYPE: + break; + } + rpmtdFreeData(&td); + } +} + +/** + * Mark files in database shared with this package as "replaced". + * @param psm package state machine data + * @return 0 always + */ +static rpmRC markReplacedFiles(const rpmpsm psm) +{ + const rpmts ts = psm->ts; + rpmfs fs = rpmteGetFileStates(psm->te); + sharedFileInfo replaced = rpmfsGetReplaced(fs); + sharedFileInfo sfi; + rpmdbMatchIterator mi; + Header h; + int * offsets; + unsigned int prev; + int num, xx; + + if (!replaced) + return RPMRC_OK; + + num = prev = 0; + for (sfi = replaced; sfi; sfi=rpmfsNextReplaced(fs, sfi)) { + if (prev && prev == sfi->otherPkg) + continue; + prev = sfi->otherPkg; + num++; + } + if (num == 0) + return RPMRC_OK; + + offsets = xmalloc(num * sizeof(*offsets)); + offsets[0] = 0; + num = prev = 0; + for (sfi = replaced; sfi; sfi=rpmfsNextReplaced(fs, sfi)) { + if (prev && prev == sfi->otherPkg) + continue; + prev = sfi->otherPkg; + offsets[num++] = sfi->otherPkg; + } + + mi = rpmtsInitIterator(ts, RPMDBI_PACKAGES, NULL, 0); + xx = rpmdbAppendIterator(mi, offsets, num); + xx = rpmdbSetIteratorRewrite(mi, 1); + + sfi = replaced; + while ((h = rpmdbNextIterator(mi)) != NULL) { + int modified; + struct rpmtd_s secStates; + modified = 0; + + if (!headerGet(h, RPMTAG_FILESTATES, &secStates, HEADERGET_MINMEM)) + continue; + + prev = rpmdbGetIteratorOffset(mi); + num = 0; + while (sfi && sfi->otherPkg == prev) { + int ix = rpmtdSetIndex(&secStates, sfi->otherFileNum); + assert(ix != -1); + + char *state = rpmtdGetChar(&secStates); + if (state && *state != RPMFILE_STATE_REPLACED) { + *state = RPMFILE_STATE_REPLACED; + if (modified == 0) { + /* Modified header will be rewritten. */ + modified = 1; + xx = rpmdbSetIteratorModified(mi, modified); + } + num++; + } + sfi=rpmfsNextReplaced(fs, sfi); + } + rpmtdFreeData(&secStates); + } + mi = rpmdbFreeIterator(mi); + free(offsets); + + return RPMRC_OK; +} + +static int rpmlibDeps(Header h) +{ + rpmds req = rpmdsInit(rpmdsNew(h, RPMTAG_REQUIRENAME, 0)); + rpmds rpmlib = NULL; + rpmdsRpmlib(&rpmlib, NULL); + int rc = 1; + char *nvr = NULL; + while (rpmdsNext(req) >= 0) { + if (!(rpmdsFlags(req) & RPMSENSE_RPMLIB)) + continue; + if (rpmdsSearch(rpmlib, req) < 0) { + if (!nvr) { + nvr = headerGetAsString(h, RPMTAG_NEVRA); + rpmlog(RPMLOG_ERR, _("Missing rpmlib features for %s:\n"), nvr); + } + rpmlog(RPMLOG_ERR, "\t%s\n", rpmdsDNEVR(req)+2); + rc = 0; + } + } + rpmdsFree(req); + rpmdsFree(rpmlib); + free(nvr); + return rc; +} + +rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd, + char ** specFilePtr, char ** cookie) +{ + rpmfi fi = NULL; + char * specFile = NULL; + const char *rootdir = rpmtsRootDir(ts); + Header h = NULL; + rpmpsm psm = NULL; + rpmte te = NULL; + rpmRC rpmrc; + int specix = -1; + struct rpmtd_s filenames; + + rpmtdReset(&filenames); + rpmrc = rpmReadPackageFile(ts, fd, RPMDBG_M("InstallSourcePackage"), &h); + switch (rpmrc) { + case RPMRC_NOTTRUSTED: + case RPMRC_NOKEY: + case RPMRC_OK: + break; + default: + goto exit; + break; + } + if (h == NULL) + goto exit; + + rpmrc = RPMRC_FAIL; /* assume failure */ + + if (!headerIsSource(h)) { + rpmlog(RPMLOG_ERR, _("source package expected, binary found\n")); + goto exit; + } + + /* src.rpm install can require specific rpmlib features, check them */ + if (!rpmlibDeps(h)) + goto exit; + + if (headerGet(h, RPMTAG_BASENAMES, &filenames, HEADERGET_ALLOC)) { + struct rpmtd_s td; + const char *str; + const char *_cookie = headerGetString(h, RPMTAG_COOKIE); + if (cookie && _cookie) *cookie = xstrdup(_cookie); + + /* Try to find spec by file flags */ + if (_cookie && headerGet(h, RPMTAG_FILEFLAGS, &td, HEADERGET_MINMEM)) { + rpmfileAttrs *flags; + while (specix < 0 && (flags = rpmtdNextUint32(&td))) { + if (*flags & RPMFILE_SPECFILE) + specix = rpmtdGetIndex(&td); + } + } + /* Still no spec? Look by filename. */ + while (specix < 0 && (str = rpmtdNextString(&filenames))) { + if (rpmFileHasSuffix(str, ".spec")) + specix = rpmtdGetIndex(&filenames); + } + } + + if (rootdir && rstreq(rootdir, "/")) + rootdir = NULL; + + /* Macros need to be added before trying to create directories */ + rpmInstallLoadMacros(h); + + if (specix >= 0) { + const char *bn; + + headerDel(h, RPMTAG_BASENAMES); + headerDel(h, RPMTAG_DIRNAMES); + headerDel(h, RPMTAG_DIRINDEXES); + + rpmtdInit(&filenames); + for (int i = 0; (bn = rpmtdNextString(&filenames)); i++) { + int spec = (i == specix); + char *fn = rpmGenPath(rpmtsRootDir(ts), + spec ? "%{_specdir}" : "%{_sourcedir}", bn); + headerPutString(h, RPMTAG_OLDFILENAMES, fn); + if (spec) specFile = xstrdup(fn); + free(fn); + } + headerConvert(h, HEADERCONV_COMPRESSFILELIST); + } else { + rpmlog(RPMLOG_ERR, _("source package contains no .spec file\n")); + goto exit; + }; + + if (rpmtsAddInstallElement(ts, h, NULL, 0, NULL)) { + goto exit; + } + + te = rpmtsElement(ts, 0); + if (te == NULL) { /* XXX can't happen */ + goto exit; + } + rpmteSetFd(te, fd); + + rpmteSetHeader(te, h); + fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, RPMFI_KEEPHEADER); + h = headerFree(h); + + if (fi == NULL) { /* XXX can't happen */ + goto exit; + } + fi->apath = filenames.data; /* Ick */ + rpmteSetFI(te, fi); + fi = rpmfiFree(fi); + + if (rpmMkdirs(rpmtsRootDir(ts), "%{_topdir}:%{_sourcedir}:%{_specdir}")) { + goto exit; + } + + { + /* set all files to be installed */ + rpmfs fs = rpmteGetFileStates(te); + int i; + unsigned int fc = rpmfiFC(fi); + for (i=0; igoal = PKG_INSTALL; + + /* FIX: psm->fi->dnl should be owned. */ + if (rpmpsmStage(psm, PSM_PROCESS) == RPMRC_OK) + rpmrc = RPMRC_OK; + + (void) rpmpsmStage(psm, PSM_FINI); + psm = rpmpsmFree(psm); + +exit: + if (specFilePtr && specFile && rpmrc == RPMRC_OK) + *specFilePtr = specFile; + else + specFile = _free(specFile); + + if (h != NULL) h = headerFree(h); + if (fi != NULL) fi = rpmfiFree(fi); + + /* XXX nuke the added package(s). */ + rpmtsClean(ts); + + return rpmrc; +} + +static rpmTagVal triggertag(rpmsenseFlags sense) +{ + rpmTagVal tag = RPMTAG_NOT_FOUND; + switch (sense) { + case RPMSENSE_TRIGGERIN: + tag = RPMTAG_TRIGGERIN; + break; + case RPMSENSE_TRIGGERUN: + tag = RPMTAG_TRIGGERUN; + break; + case RPMSENSE_TRIGGERPOSTUN: + tag = RPMTAG_TRIGGERPOSTUN; + break; + case RPMSENSE_TRIGGERPREIN: + tag = RPMTAG_TRIGGERPREIN; + break; + default: + break; + } + return tag; +} + +/** + * Run a scriptlet with args. + * + * Run a script with an interpreter. If the interpreter is not specified, + * /bin/sh will be used. If the interpreter is /bin/sh, then the args from + * the header will be ignored, passing instead arg1 and arg2. + * + * @param psm package state machine data + * @param prefixes install prefixes + * @param script scriptlet from header + * @param arg1 no. instances of package installed after scriptlet exec + * (-1 is no arg) + * @param arg2 ditto, but for the target package + * @return 0 on success + */ +static rpmRC runScript(rpmpsm psm, ARGV_const_t prefixes, + rpmScript script, int arg1, int arg2) +{ + rpmRC rc = RPMRC_OK; + int warn_only = (script->tag != RPMTAG_PREIN && + script->tag != RPMTAG_PREUN && + script->tag != RPMTAG_VERIFYSCRIPT); + int selinux = !(rpmtsFlags(psm->ts) & RPMTRANS_FLAG_NOCONTEXTS); + + rpmswEnter(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0); + rc = rpmScriptRun(script, arg1, arg2, rpmtsScriptFd(psm->ts), + prefixes, warn_only, selinux); + rpmswExit(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0); + + /* + * Notify callback for all errors. "total" abused for warning/error, + * rc only reflects whether the condition prevented install/erase + * (which is only happens with %prein and %preun scriptlets) or not. + */ + if (rc != RPMRC_OK) { + if (warn_only) { + rc = RPMRC_OK; + } + rpmtsNotify(psm->ts, psm->te, RPMCALLBACK_SCRIPT_ERROR, script->tag, rc); + } + + return rc; +} + +static rpmRC runInstScript(rpmpsm psm) +{ + rpmRC rc = RPMRC_OK; + struct rpmtd_s pfx; + Header h = rpmteHeader(psm->te); + rpmScript script = rpmScriptFromTag(h, psm->scriptTag); + + if (script) { + headerGet(h, RPMTAG_INSTPREFIXES, &pfx, HEADERGET_ALLOC|HEADERGET_ARGV); + rc = runScript(psm, pfx.data, script, psm->scriptArg, -1); + rpmtdFreeData(&pfx); + } + + rpmScriptFree(script); + headerFree(h); + + return rc; +} + +/** + * Execute triggers. + * @todo Trigger on any provides, not just package NVR. + * @param psm package state machine data + * @param sourceH header of trigger source + * @param trigH header of triggered package + * @param arg2 + * @param triggersAlreadyRun + * @return + */ +static rpmRC handleOneTrigger(const rpmpsm psm, + Header sourceH, Header trigH, + int arg2, unsigned char * triggersAlreadyRun) +{ + const rpmts ts = psm->ts; + rpmds trigger = rpmdsInit(rpmdsNew(trigH, RPMTAG_TRIGGERNAME, 0)); + struct rpmtd_s pfx; + const char * sourceName = headerGetString(sourceH, RPMTAG_NAME); + const char * triggerName = headerGetString(trigH, RPMTAG_NAME); + rpmRC rc = RPMRC_OK; + int i; + + if (trigger == NULL) + return rc; + + headerGet(trigH, RPMTAG_INSTPREFIXES, &pfx, HEADERGET_ALLOC|HEADERGET_ARGV); + (void) rpmdsSetNoPromote(trigger, 1); + + while ((i = rpmdsNext(trigger)) >= 0) { + struct rpmtd_s tscripts, tprogs, tindexes, tflags; + headerGetFlags hgflags = HEADERGET_MINMEM; + + if (!(rpmdsFlags(trigger) & psm->sense)) + continue; + + if (!rstreq(rpmdsN(trigger), sourceName)) + continue; + + /* XXX Trigger on any provided dependency, not just the package NEVR */ + if (!rpmdsAnyMatchesDep(sourceH, trigger, 1)) + continue; + + /* XXX FIXME: this leaks memory if scripts or progs retrieve fails */ + if (!(headerGet(trigH, RPMTAG_TRIGGERINDEX, &tindexes, hgflags) && + headerGet(trigH, RPMTAG_TRIGGERSCRIPTS, &tscripts, hgflags) && + headerGet(trigH, RPMTAG_TRIGGERSCRIPTPROG, &tprogs, hgflags))) { + continue; + } else { + int arg1 = rpmdbCountPackages(rpmtsGetRdb(ts), triggerName); + char ** triggerScripts = tscripts.data; + char ** triggerProgs = tprogs.data; + uint32_t * triggerIndices = tindexes.data; + uint32_t * triggerFlags = NULL; + uint32_t ix = triggerIndices[i]; + + headerGet(trigH, RPMTAG_TRIGGERSCRIPTFLAGS, &tflags, hgflags); + triggerFlags = tflags.data; + + if (arg1 < 0) { + /* XXX W2DO? fails as "execution of script failed" */ + rc = RPMRC_FAIL; + } else { + arg1 += psm->countCorrection; + + if (triggersAlreadyRun == NULL || triggersAlreadyRun[ix] == 0) { + /* XXX TODO add rpmScript API to handle this, ugh */ + char *macro = NULL; + char *qformat = NULL; + char *args[2] = { triggerProgs[ix], NULL }; + struct rpmScript_s script = { + .tag = triggertag(psm->sense), + .body = triggerScripts[ix], + .flags = triggerFlags ? triggerFlags[ix] : 0, + .args = args + }; + + if (script.body && (script.flags & RPMSCRIPT_EXPAND)) { + macro = rpmExpand(script.body, NULL); + script.body = macro; + } + if (script.body && (script.flags & RPMSCRIPT_QFORMAT)) { + qformat = headerFormat(trigH, script.body, NULL); + script.body = qformat; + } + + rc = runScript(psm, pfx.data, &script, arg1, arg2); + if (triggersAlreadyRun != NULL) + triggersAlreadyRun[ix] = 1; + free(macro); + free(qformat); + } + } + } + + rpmtdFreeData(&tindexes); + rpmtdFreeData(&tscripts); + rpmtdFreeData(&tprogs); + + /* + * Each target/source header pair can only result in a single + * script being run. + */ + break; + } + + rpmtdFreeData(&pfx); + trigger = rpmdsFree(trigger); + + return rc; +} + +/** + * Run trigger scripts in the database that are fired by this header. + * @param psm package state machine data + * @return 0 on success + */ +static rpmRC runTriggers(rpmpsm psm) +{ + const rpmts ts = psm->ts; + int numPackage = -1; + const char * N = NULL; + int nerrors = 0; + + if (psm->te) /* XXX can't happen */ + N = rpmteN(psm->te); + if (N) /* XXX can't happen */ + numPackage = rpmdbCountPackages(rpmtsGetRdb(ts), N) + + psm->countCorrection; + if (numPackage < 0) + return RPMRC_NOTFOUND; + + { Header triggeredH; + Header h = rpmteHeader(psm->te); + rpmdbMatchIterator mi; + int countCorrection = psm->countCorrection; + + psm->countCorrection = 0; + mi = rpmtsInitIterator(ts, RPMDBI_TRIGGERNAME, N, 0); + while((triggeredH = rpmdbNextIterator(mi)) != NULL) + nerrors += handleOneTrigger(psm, h, triggeredH, numPackage, NULL); + mi = rpmdbFreeIterator(mi); + psm->countCorrection = countCorrection; + headerFree(h); + } + + return (nerrors == 0) ? RPMRC_OK : RPMRC_FAIL; +} + +/** + * Run triggers from this header that are fired by headers in the database. + * @param psm package state machine data + * @return 0 on success + */ +static rpmRC runImmedTriggers(rpmpsm psm) +{ + const rpmts ts = psm->ts; + unsigned char * triggersRun; + struct rpmtd_s tnames, tindexes; + Header h = rpmteHeader(psm->te); + int nerrors = 0; + + if (!(headerGet(h, RPMTAG_TRIGGERNAME, &tnames, HEADERGET_MINMEM) && + headerGet(h, RPMTAG_TRIGGERINDEX, &tindexes, HEADERGET_MINMEM))) { + goto exit; + } + + triggersRun = xcalloc(rpmtdCount(&tindexes), sizeof(*triggersRun)); + { Header sourceH = NULL; + const char *trigName; + rpm_count_t *triggerIndices = tindexes.data; + + while ((trigName = rpmtdNextString(&tnames))) { + rpmdbMatchIterator mi; + int i = rpmtdGetIndex(&tnames); + + if (triggersRun[triggerIndices[i]] != 0) continue; + + mi = rpmtsInitIterator(ts, RPMDBI_NAME, trigName, 0); + + while((sourceH = rpmdbNextIterator(mi)) != NULL) { + nerrors += handleOneTrigger(psm, sourceH, h, + rpmdbGetIteratorCount(mi), + triggersRun); + } + + mi = rpmdbFreeIterator(mi); + } + } + rpmtdFreeData(&tnames); + rpmtdFreeData(&tindexes); + free(triggersRun); + +exit: + headerFree(h); + return (nerrors == 0) ? RPMRC_OK : RPMRC_FAIL; +} + +static rpmpsm rpmpsmFree(rpmpsm psm) +{ + if (psm == NULL) + return NULL; + + psm->fi = rpmfiFree(psm->fi); +#ifdef NOTYET + psm->te = rpmteFree(psm->te); +#else + psm->te = NULL; +#endif + psm->ts = rpmtsFree(psm->ts); + + memset(psm, 0, sizeof(*psm)); /* XXX trash and burn */ + psm = _free(psm); + + return NULL; +} + +static rpmpsm rpmpsmNew(rpmts ts, rpmte te) +{ + rpmpsm psm = xcalloc(1, sizeof(*psm)); + + if (ts) psm->ts = rpmtsLink(ts); + if (te) { +#ifdef NOTYET + psm->te = rpmteLink(te, RPMDBG_M("rpmpsmNew"));  +#else + psm->te = te; +#endif + psm->fi = rpmfiLink(rpmteFI(te)); + } + + return psm; +} + +static rpmRC rpmpsmNext(rpmpsm psm, pkgStage nstage) +{ + psm->nstage = nstage; + return rpmpsmStage(psm, psm->nstage); +} + +static rpmRC rpmpsmStage(rpmpsm psm, pkgStage stage) +{ + const rpmts ts = psm->ts; + rpm_color_t tscolor = rpmtsColor(ts); + rpmfi fi = psm->fi; + rpmRC rc = RPMRC_OK; + int saveerrno; + int xx; + + switch (stage) { + case PSM_UNKNOWN: + break; + case PSM_INIT: + rpmlog(RPMLOG_DEBUG, "%s: %s has %d files\n", + psm->goalName, rpmteNEVR(psm->te), rpmfiFC(fi)); + + /* + * When we run scripts, we pass an argument which is the number of + * versions of this package that will be installed when we are + * finished. + */ + psm->npkgs_installed = rpmdbCountPackages(rpmtsGetRdb(ts), rpmteN(psm->te)); + if (psm->npkgs_installed < 0) { + rc = RPMRC_FAIL; + break; + } + + if (psm->goal == PKG_INSTALL) { + rpmdbMatchIterator mi; + Header oh; + + psm->scriptArg = psm->npkgs_installed + 1; + + mi = rpmtsInitIterator(ts, RPMDBI_NAME, rpmteN(psm->te), 0); + xx = rpmdbSetIteratorRE(mi, RPMTAG_EPOCH, RPMMIRE_STRCMP, + rpmteE(psm->te)); + xx = rpmdbSetIteratorRE(mi, RPMTAG_VERSION, RPMMIRE_STRCMP, + rpmteV(psm->te)); + xx = rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_STRCMP, + rpmteR(psm->te)); + if (tscolor) { + xx = rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP, + rpmteA(psm->te)); + xx = rpmdbSetIteratorRE(mi, RPMTAG_OS, RPMMIRE_STRCMP, + rpmteO(psm->te)); + } + + while ((oh = rpmdbNextIterator(mi)) != NULL) { + rpmteSetDBInstance(psm->te, rpmdbGetIteratorOffset(mi)); + oh = NULL; + break; + } + mi = rpmdbFreeIterator(mi); + rc = RPMRC_OK; + + if (rpmtsFlags(ts) & RPMTRANS_FLAG_JUSTDB) break; + + if (rpmfiFC(fi) > 0) { + struct rpmtd_s filenames; + rpmTag ftag = RPMTAG_FILENAMES; + Header h = rpmteHeader(psm->te); + + if (headerIsEntry(h, RPMTAG_ORIGBASENAMES)) { + ftag = RPMTAG_ORIGFILENAMES; + } + headerGet(h, ftag, &filenames, HEADERGET_EXT); + fi->apath = filenames.data; /* Ick.. */ + headerFree(h); + } + } + if (psm->goal == PKG_ERASE) { + psm->scriptArg = psm->npkgs_installed - 1; + } + break; + case PSM_PRE: + if (psm->goal == PKG_INSTALL) { + psm->scriptTag = RPMTAG_PREIN; + psm->sense = RPMSENSE_TRIGGERPREIN; + psm->countCorrection = 0; /* XXX is this correct?!? */ + + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPREIN)) { + /* Run triggers in other package(s) this package sets off. */ + rc = rpmpsmNext(psm, PSM_TRIGGERS); + if (rc) break; + + /* Run triggers in this package other package(s) set off. */ + rc = rpmpsmNext(psm, PSM_IMMED_TRIGGERS); + if (rc) break; + } + + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPRE)) { + rc = rpmpsmNext(psm, PSM_SCRIPT); + if (rc) break; + } + } + + if (psm->goal == PKG_ERASE) { + psm->scriptTag = RPMTAG_PREUN; + psm->sense = RPMSENSE_TRIGGERUN; + psm->countCorrection = -1; + + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERUN)) { + /* Run triggers in this package other package(s) set off. */ + rc = rpmpsmNext(psm, PSM_IMMED_TRIGGERS); + if (rc) break; + + /* Run triggers in other package(s) this package sets off. */ + rc = rpmpsmNext(psm, PSM_TRIGGERS); + if (rc) break; + } + + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPREUN)) + rc = rpmpsmNext(psm, PSM_SCRIPT); + } + break; + case PSM_PROCESS: + if (psm->goal == PKG_INSTALL) { + FD_t payload = NULL; + + if (rpmtsFlags(ts) & RPMTRANS_FLAG_JUSTDB) break; + + /* XXX Synthesize callbacks for packages with no files. */ + if (rpmfiFC(fi) <= 0) { + void * ptr; + ptr = rpmtsNotify(ts, psm->te, RPMCALLBACK_INST_START, 0, 100); + ptr = rpmtsNotify(ts, psm->te, RPMCALLBACK_INST_PROGRESS, 100, 100); + break; + } + + payload = rpmtePayload(psm->te); + if (payload == NULL) { + rc = RPMRC_FAIL; + break; + } + + rc = fsmSetup(rpmfiFSM(fi), FSM_PKGINSTALL, ts, psm->te, fi, + payload, NULL, &psm->failedFile); + (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_UNCOMPRESS), + fdOp(payload, FDSTAT_READ)); + (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_DIGEST), + fdOp(payload, FDSTAT_DIGEST)); + xx = fsmTeardown(rpmfiFSM(fi)); + + saveerrno = errno; /* XXX FIXME: Fclose with libio destroys errno */ + xx = Fclose(payload); + errno = saveerrno; /* XXX FIXME: Fclose with libio destroys errno */ + + /* XXX make sure progress is closed out */ + psm->what = RPMCALLBACK_INST_PROGRESS; + psm->amount = (fi->archiveSize ? fi->archiveSize : 100); + psm->total = psm->amount; + xx = rpmpsmNext(psm, PSM_NOTIFY); + + if (rc) { + rpmlog(RPMLOG_ERR, + _("unpacking of archive failed%s%s: %s\n"), + (psm->failedFile != NULL ? _(" on file ") : ""), + (psm->failedFile != NULL ? psm->failedFile : ""), + cpioStrerror(rc)); + rc = RPMRC_FAIL; + + /* XXX notify callback on error. */ + psm->what = RPMCALLBACK_UNPACK_ERROR; + psm->amount = 0; + psm->total = 0; + xx = rpmpsmNext(psm, PSM_NOTIFY); + + break; + } + } + if (psm->goal == PKG_ERASE) { + int fc = rpmfiFC(fi); + + if (rpmtsFlags(ts) & RPMTRANS_FLAG_JUSTDB) break; + + /* XXX Synthesize callbacks for packages with no files. */ + if (rpmfiFC(fi) <= 0) { + void * ptr; + ptr = rpmtsNotify(ts, psm->te, RPMCALLBACK_UNINST_START, 0, 100); + ptr = rpmtsNotify(ts, psm->te, RPMCALLBACK_UNINST_STOP, 0, 100); + break; + } + + psm->what = RPMCALLBACK_UNINST_START; + psm->amount = fc; /* XXX W2DO? looks wrong. */ + psm->total = fc; + xx = rpmpsmNext(psm, PSM_NOTIFY); + + rc = fsmSetup(rpmfiFSM(fi), FSM_PKGERASE, ts, psm->te, fi, + NULL, NULL, &psm->failedFile); + xx = fsmTeardown(rpmfiFSM(fi)); + + psm->what = RPMCALLBACK_UNINST_STOP; + psm->amount = 0; /* XXX W2DO? looks wrong. */ + psm->total = fc; + xx = rpmpsmNext(psm, PSM_NOTIFY); + + } + break; + case PSM_POST: + if (psm->goal == PKG_INSTALL) { + rpm_time_t installTime = (rpm_time_t) time(NULL); + rpmfs fs = rpmteGetFileStates(psm->te); + rpm_count_t fc = rpmfsFC(fs); + rpm_fstate_t * fileStates = rpmfsGetStates(fs); + Header h = rpmteHeader(psm->te); + + if (fileStates != NULL && fc > 0) { + headerPutChar(h, RPMTAG_FILESTATES, fileStates, fc); + } + + headerPutUint32(h, RPMTAG_INSTALLTIME, &installTime, 1); + headerPutUint32(h, RPMTAG_INSTALLCOLOR, &tscolor, 1); + headerFree(h); + + /* + * If this package has already been installed, remove it from + * the database before adding the new one. + */ + if (rpmteDBInstance(psm->te)) { + rc = rpmpsmNext(psm, PSM_RPMDB_REMOVE); + if (rc) break; + } + + rc = rpmpsmNext(psm, PSM_RPMDB_ADD); + if (rc) break; + + psm->scriptTag = RPMTAG_POSTIN; + psm->sense = RPMSENSE_TRIGGERIN; + psm->countCorrection = 0; + + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOST)) { + rc = rpmpsmNext(psm, PSM_SCRIPT); + if (rc) break; + } + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERIN)) { + /* Run triggers in other package(s) this package sets off. */ + rc = rpmpsmNext(psm, PSM_TRIGGERS); + if (rc) break; + + /* Run triggers in this package other package(s) set off. */ + rc = rpmpsmNext(psm, PSM_IMMED_TRIGGERS); + if (rc) break; + } + + rc = markReplacedFiles(psm); + + } + if (psm->goal == PKG_ERASE) { + + psm->scriptTag = RPMTAG_POSTUN; + psm->sense = RPMSENSE_TRIGGERPOSTUN; + psm->countCorrection = -1; + + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOSTUN)) { + rc = rpmpsmNext(psm, PSM_SCRIPT); + if (rc) break; + } + + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPOSTUN)) { + /* Run triggers in other package(s) this package sets off. */ + rc = rpmpsmNext(psm, PSM_TRIGGERS); + if (rc) break; + } + + rc = rpmpsmNext(psm, PSM_RPMDB_REMOVE); + } + break; + case PSM_UNDO: + break; + case PSM_FINI: + if (rc) { + if (psm->failedFile) + rpmlog(RPMLOG_ERR, + _("%s failed on file %s: %s\n"), + psm->goalName, psm->failedFile, cpioStrerror(rc)); + else + rpmlog(RPMLOG_ERR, _("%s failed: %s\n"), + psm->goalName, cpioStrerror(rc)); + + /* XXX notify callback on error. */ + psm->what = RPMCALLBACK_CPIO_ERROR; + psm->amount = 0; + psm->total = 0; + xx = rpmpsmNext(psm, PSM_NOTIFY); + } + + psm->failedFile = _free(psm->failedFile); + + fi->apath = _free(fi->apath); + break; + + case PSM_CREATE: + break; + case PSM_NOTIFY: + { void * ptr; +/* FIX: psm->te may be NULL */ + ptr = rpmtsNotify(ts, psm->te, psm->what, psm->amount, psm->total); + } break; + case PSM_DESTROY: + break; + case PSM_SCRIPT: /* Run current package scriptlets. */ + rc = runInstScript(psm); + break; + case PSM_TRIGGERS: + /* Run triggers in other package(s) this package sets off. */ + rc = runTriggers(psm); + break; + case PSM_IMMED_TRIGGERS: + /* Run triggers in this package other package(s) set off. */ + rc = runImmedTriggers(psm); + break; + + case PSM_RPMDB_ADD: { + Header h = rpmteHeader(psm->te); + + if (!headerIsEntry(h, RPMTAG_INSTALLTID)) { + rpm_tid_t tid = rpmtsGetTid(ts); + if (tid != 0 && tid != (rpm_tid_t)-1) + headerPutUint32(h, RPMTAG_INSTALLTID, &tid, 1); + } + + (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_DBADD), 0); + rc = (rpmdbAdd(rpmtsGetRdb(ts), h) == 0) ? RPMRC_OK : RPMRC_FAIL; + (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBADD), 0); + + if (rc == RPMRC_OK) + rpmteSetDBInstance(psm->te, headerGetInstance(h)); + headerFree(h); + } break; + + case PSM_RPMDB_REMOVE: + (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0); + rc = (rpmdbRemove(rpmtsGetRdb(ts), rpmteDBInstance(psm->te)) == 0) ? + RPMRC_OK : RPMRC_FAIL; + (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0); + if (rc == RPMRC_OK) + rpmteSetDBInstance(psm->te, 0); + break; + + default: + break; + } + + return rc; +} + +static const char * pkgGoalString(pkgGoal goal) +{ + switch(goal) { + case PKG_INSTALL: return " install"; + case PKG_ERASE: return " erase"; + case PKG_VERIFY: return " verify"; + case PKG_PRETRANS: return " pretrans"; + case PKG_POSTTRANS: return "posttrans"; + default: return "unknown"; + } +} + +rpmRC rpmpsmRun(rpmts ts, rpmte te, pkgGoal goal) +{ + rpmpsm psm = NULL; + rpmRC rc = RPMRC_FAIL; + + /* Psm can't fail in test mode, just return early */ + if (rpmtsFlags(ts) & RPMTRANS_FLAG_TEST) + return RPMRC_OK; + + psm = rpmpsmNew(ts, te); + if (rpmChrootIn() == 0) { + rpmtsOpX op; + psm->goal = goal; + psm->goalName = pkgGoalString(goal); + + switch (goal) { + case PKG_INSTALL: + case PKG_ERASE: + op = (goal == PKG_INSTALL) ? RPMTS_OP_INSTALL : RPMTS_OP_ERASE; + rpmswEnter(rpmtsOp(psm->ts, op), 0); + + rc = rpmpsmNext(psm, PSM_INIT); + if (!rc) rc = rpmpsmNext(psm, PSM_PRE); + if (!rc) rc = rpmpsmNext(psm, PSM_PROCESS); + if (!rc) rc = rpmpsmNext(psm, PSM_POST); + (void) rpmpsmNext(psm, PSM_FINI); + + rpmswExit(rpmtsOp(psm->ts, op), 0); + break; + case PKG_PRETRANS: + case PKG_POSTTRANS: + case PKG_VERIFY: + psm->scriptTag = goal; + rc = rpmpsmStage(psm, PSM_SCRIPT); + break; + default: + break; + } + /* XXX an error here would require a full abort */ + (void) rpmChrootOut(); + } + rpmpsmFree(psm); + return rc; +} diff --git a/lib/query.c b/lib/query.c new file mode 100644 index 0000000..308fe65 --- /dev/null +++ b/lib/query.c @@ -0,0 +1,575 @@ +/** \ingroup rpmcli + * \file lib/query.c + * Display tag values from package metadata. + */ + +#include "system.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include /* rpmCleanPath */ + +#include "lib/rpmgi.h" +#include "lib/manifest.h" + +#include "debug.h" + + +/** + */ +static void printFileInfo(const char * name, + rpm_loff_t size, unsigned short mode, + unsigned int mtime, + unsigned short rdev, unsigned int nlink, + const char * owner, const char * group, + const char * linkto) +{ + char sizefield[21]; + char ownerfield[8+1], groupfield[8+1]; + char timefield[100]; + time_t when = mtime; /* important if sizeof(int32_t) ! sizeof(time_t) */ + struct tm * tm; + static time_t now; + static struct tm nowtm; + char * perms = rpmPermsString(mode); + char *link = NULL; + + /* On first call, grab snapshot of now */ + if (now == 0) { + now = time(NULL); + tm = localtime(&now); + if (tm) nowtm = *tm; /* structure assignment */ + } + + rstrlcpy(ownerfield, owner, sizeof(ownerfield)); + rstrlcpy(groupfield, group, sizeof(groupfield)); + + /* this is normally right */ + snprintf(sizefield, sizeof(sizefield), "%20" PRIu64, size); + + /* this knows too much about dev_t */ + + if (S_ISLNK(mode)) { + rasprintf(&link, "%s -> %s", name, linkto); + } else if (S_ISCHR(mode)) { + perms[0] = 'c'; + snprintf(sizefield, sizeof(sizefield), "%3u, %3u", ((unsigned)(rdev >> 8) & 0xff), + ((unsigned)rdev & 0xff)); + } else if (S_ISBLK(mode)) { + perms[0] = 'b'; + snprintf(sizefield, sizeof(sizefield), "%3u, %3u", ((unsigned)(rdev >> 8) & 0xff), + ((unsigned)rdev & 0xff)); + } + + /* Convert file mtime to display format */ + tm = localtime(&when); + timefield[0] = '\0'; + if (tm != NULL) + { const char *fmt; + if (now > when + 6L * 30L * 24L * 60L * 60L || /* Old. */ + now < when - 60L * 60L) /* In the future. */ + { + /* The file is fairly old or in the future. + * POSIX says the cutoff is 6 months old; + * approximate this by 6*30 days. + * Allow a 1 hour slop factor for what is considered "the future", + * to allow for NFS server/client clock disagreement. + * Show the year instead of the time of day. + */ + fmt = "%b %e %Y"; + } else { + fmt = "%b %e %H:%M"; + } + (void)strftime(timefield, sizeof(timefield) - 1, fmt, tm); + } + + rpmlog(RPMLOG_NOTICE, "%s %4d %-8s%-8s %10s %s %s\n", perms, + (int)nlink, ownerfield, groupfield, sizefield, timefield, + link ? link : name); + free(perms); + free(link); +} + +int showQueryPackage(QVA_t qva, rpmts ts, Header h) +{ + rpmfi fi = NULL; + rpmfiFlags fiflags = (RPMFI_NOHEADER | RPMFI_FLAGS_QUERY); + int rc = 0; /* XXX FIXME: need real return code */ + + if (qva->qva_queryFormat != NULL) { + const char *errstr; + char *str = headerFormat(h, qva->qva_queryFormat, &errstr); + + if ( str != NULL ) { + rpmlog(RPMLOG_NOTICE, "%s", str); + free(str); + } else { + rpmlog(RPMLOG_ERR, _("incorrect format: %s\n"), errstr); + } + } + + if (!(qva->qva_flags & QUERY_FOR_LIST)) + goto exit; + + if (!(qva->qva_flags & QUERY_FOR_DUMPFILES)) + fiflags |= RPMFI_NOFILEDIGESTS; + + fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, fiflags); + if (rpmfiFC(fi) <= 0) { + rpmlog(RPMLOG_NOTICE, _("(contains no files)\n")); + goto exit; + } + + fi = rpmfiInit(fi, 0); + while (rpmfiNext(fi) >= 0) { + rpmfileAttrs fflags = rpmfiFFlags(fi); + rpm_mode_t fmode = rpmfiFMode(fi); + rpm_rdev_t frdev = rpmfiFRdev(fi); + rpm_time_t fmtime = rpmfiFMtime(fi); + rpmfileState fstate = rpmfiFState(fi); + rpm_loff_t fsize = rpmfiFSize(fi); + const char *fn = rpmfiFN(fi); + const char *fuser = rpmfiFUser(fi); + const char *fgroup = rpmfiFGroup(fi); + const char *flink = rpmfiFLink(fi); + char *buf = NULL; + + /* If querying only docs, skip non-doc files. */ + if ((qva->qva_flags & QUERY_FOR_DOCS) && !(fflags & RPMFILE_DOC)) + continue; + + /* If querying only configs, skip non-config files. */ + if ((qva->qva_flags & QUERY_FOR_CONFIG) && !(fflags & RPMFILE_CONFIG)) + continue; + + /* If not querying %ghost, skip ghost files. */ + if ((qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST)) + continue; + + if (qva->qva_flags & QUERY_FOR_STATE) { + switch (fstate) { + case RPMFILE_STATE_NORMAL: + rstrcat(&buf, _("normal ")); + break; + case RPMFILE_STATE_REPLACED: + rstrcat(&buf, _("replaced ")); + break; + case RPMFILE_STATE_NOTINSTALLED: + rstrcat(&buf, _("not installed ")); + break; + case RPMFILE_STATE_NETSHARED: + rstrcat(&buf, _("net shared ")); + break; + case RPMFILE_STATE_WRONGCOLOR: + rstrcat(&buf, _("wrong color ")); + break; + case RPMFILE_STATE_MISSING: + rstrcat(&buf, _("(no state) ")); + break; + default: + rasprintf(&buf, _("(unknown %3d) "), fstate); + break; + } + } + + if (qva->qva_flags & QUERY_FOR_DUMPFILES) { + char *add, *fdigest; + fdigest = rpmfiFDigestHex(fi, NULL); + rasprintf(&add, "%s %" PRIu64 " %d %s 0%o ", + fn, fsize, fmtime, fdigest ? fdigest : "", fmode); + rstrcat(&buf, add); + free(add); + free(fdigest); + + if (fuser && fgroup) { + rasprintf(&add, "%s %s", fuser, fgroup); + rstrcat(&buf, add); + free(add); + } else { + rpmlog(RPMLOG_ERR, + _("package has not file owner/group lists\n")); + } + + rasprintf(&add, " %s %s %u %s", + fflags & RPMFILE_CONFIG ? "1" : "0", + fflags & RPMFILE_DOC ? "1" : "0", + frdev, + (flink && *flink ? flink : "X")); + rpmlog(RPMLOG_NOTICE, "%s%s\n", buf, add); + free(add); + } else + if (!rpmIsVerbose()) { + rpmlog(RPMLOG_NOTICE, "%s%s\n", buf ? buf : "", fn); + } + else { + uint32_t fnlink = rpmfiFNlink(fi); + + /* XXX Adjust directory link count and size for display output. */ + if (S_ISDIR(fmode)) { + fnlink++; + fsize = 0; + } + + if (fuser && fgroup) { + if (buf) { + rpmlog(RPMLOG_NOTICE, "%s", buf); + } + printFileInfo(fn, fsize, fmode, fmtime, frdev, fnlink, + fuser, fgroup, flink); + } else { + rpmlog(RPMLOG_ERR, + _("package has neither file owner or id lists\n")); + } + } + free(buf); + } + + rc = 0; + +exit: + fi = rpmfiFree(fi); + return rc; +} + +void rpmDisplayQueryTags(FILE * fp) +{ + static const char * const tagTypeNames[] = { + "", "char", "int8", "int16", "int32", "int64", + "string", "blob", "argv", "i18nstring" + }; + const char *tname, *sname; + rpmtd names = rpmtdNew(); + (void) rpmTagGetNames(names, 1); + + while ((tname = rpmtdNextString(names))) { + sname = tname + strlen("RPMTAG_"); + if (rpmIsVerbose()) { + rpmTagVal tag = rpmTagGetValue(sname); + rpmTagType type = rpmTagGetTagType(tag); + fprintf(fp, "%-20s %6d", sname, tag); + if (type > RPM_NULL_TYPE && type <= RPM_MAX_TYPE) + fprintf(fp, " %s", tagTypeNames[type]); + } else { + fprintf(fp, "%s", sname); + } + fprintf(fp, "\n"); + } + rpmtdFreeData(names); + rpmtdFree(names); +} + +static int rpmgiShowMatches(QVA_t qva, rpmts ts, rpmgi gi) +{ + int ec = 0; + Header h; + + while ((h = rpmgiNext(gi)) != NULL) { + int rc; + + rpmdbCheckSignals(); + if ((rc = qva->qva_showPackage(qva, ts, h)) != 0) + ec = rc; + headerFree(h); + } + return ec + rpmgiNumErrors(gi); +} + +static int rpmcliShowMatches(QVA_t qva, rpmts ts, rpmdbMatchIterator mi) +{ + Header h; + int ec = 0; + + if (mi == NULL) + return 1; + + while ((h = rpmdbNextIterator(mi)) != NULL) { + int rc; + rpmdbCheckSignals(); + if ((rc = qva->qva_showPackage(qva, ts, h)) != 0) + ec = rc; + } + return ec; +} + +static rpmdbMatchIterator initQueryIterator(QVA_t qva, rpmts ts, const char * arg) +{ + const char * s; + int i; + int provides_checked = 0; + rpmdbMatchIterator mi = NULL; + + (void) rpmdbCheckSignals(); + + if (qva->qva_showPackage == NULL) + goto exit; + + switch (qva->qva_source) { + case RPMQV_GROUP: + mi = rpmtsInitIterator(ts, RPMDBI_GROUP, arg, 0); + if (mi == NULL) { + rpmlog(RPMLOG_NOTICE, + _("group %s does not contain any packages\n"), arg); + } + break; + + case RPMQV_TRIGGEREDBY: + mi = rpmtsInitIterator(ts, RPMDBI_TRIGGERNAME, arg, 0); + if (mi == NULL) { + rpmlog(RPMLOG_NOTICE, _("no package triggers %s\n"), arg); + } + break; + + case RPMQV_PKGID: + { unsigned char MD5[16]; + unsigned char * t; + + for (i = 0, s = arg; *s && isxdigit(*s); s++, i++) + {}; + if (i != 32) { + rpmlog(RPMLOG_ERR, _("malformed %s: %s\n"), "pkgid", arg); + goto exit; + } + + MD5[0] = '\0'; + for (i = 0, t = MD5, s = arg; i < 16; i++, t++, s += 2) + *t = (rnibble(s[0]) << 4) | rnibble(s[1]); + + mi = rpmtsInitIterator(ts, RPMDBI_SIGMD5, MD5, sizeof(MD5)); + if (mi == NULL) { + rpmlog(RPMLOG_NOTICE, _("no package matches %s: %s\n"), + "pkgid", arg); + } + } break; + + case RPMQV_HDRID: + for (i = 0, s = arg; *s && isxdigit(*s); s++, i++) + {}; + if (i != 40) { + rpmlog(RPMLOG_ERR, _("malformed %s: %s\n"), "hdrid", arg); + goto exit; + } + + mi = rpmtsInitIterator(ts, RPMDBI_SHA1HEADER, arg, 0); + if (mi == NULL) { + rpmlog(RPMLOG_NOTICE, _("no package matches %s: %s\n"), + "hdrid", arg); + } + break; + + case RPMQV_TID: + { char * end = NULL; + rpm_tid_t iid = strtoul(arg, &end, 0); + + if ((*end) || (end == arg) || (iid == UINT_MAX)) { + rpmlog(RPMLOG_ERR, _("malformed %s: %s\n"), "tid", arg); + goto exit; + } + mi = rpmtsInitIterator(ts, RPMDBI_INSTALLTID, &iid, sizeof(iid)); + if (mi == NULL) { + rpmlog(RPMLOG_NOTICE, _("no package matches %s: %s\n"), + "tid", arg); + } + } break; + + case RPMQV_WHATREQUIRES: + mi = rpmtsInitIterator(ts, RPMDBI_REQUIRENAME, arg, 0); + if (mi == NULL) { + rpmlog(RPMLOG_NOTICE, _("no package requires %s\n"), arg); + } + break; + + case RPMQV_WHATPROVIDES: + if (arg[0] != '/') { + provides_checked = 1; + mi = rpmtsInitIterator(ts, RPMDBI_PROVIDENAME, arg, 0); + if (mi == NULL) { + rpmlog(RPMLOG_NOTICE, _("no package provides %s\n"), arg); + } + break; + } + case RPMQV_PATH: + { char * fn; + + for (s = arg; *s != '\0'; s++) + if (!(*s == '.' || *s == '/')) + break; + + if (*s == '\0') { + char fnbuf[PATH_MAX]; + fn = realpath(arg, fnbuf); + fn = xstrdup( (fn != NULL ? fn : arg) ); + } else if (*arg != '/') { + char *curDir = rpmGetCwd(); + fn = (char *) rpmGetPath(curDir, "/", arg, NULL); + curDir = _free(curDir); + } else + fn = xstrdup(arg); + (void) rpmCleanPath(fn); + + mi = rpmtsInitIterator(ts, RPMDBI_BASENAMES, fn, 0); + if (mi == NULL && !provides_checked) + mi = rpmtsInitIterator(ts, RPMDBI_PROVIDENAME, fn, 0); + + if (mi == NULL) { + struct stat sb; + if (lstat(fn, &sb) != 0) + rpmlog(RPMLOG_ERR, _("file %s: %s\n"), fn, strerror(errno)); + else + rpmlog(RPMLOG_NOTICE, + _("file %s is not owned by any package\n"), fn); + } + + fn = _free(fn); + } break; + + case RPMQV_DBOFFSET: + { char * end = NULL; + unsigned int recOffset = strtoul(arg, &end, 0); + + if ((*end) || (end == arg) || (recOffset == UINT_MAX)) { + rpmlog(RPMLOG_ERR, _("invalid package number: %s\n"), arg); + goto exit; + } + rpmlog(RPMLOG_DEBUG, "package record number: %u\n", recOffset); + /* RPMDBI_PACKAGES */ + mi = rpmtsInitIterator(ts, RPMDBI_PACKAGES, &recOffset, sizeof(recOffset)); + if (mi == NULL) { + rpmlog(RPMLOG_ERR, _("record %u could not be read\n"), recOffset); + } + } break; + + case RPMQV_PACKAGE: + { + int matches = 0; + mi = rpmtsInitIterator(ts, RPMDBI_LABEL, arg, 0); + while (rpmdbNextIterator(mi) != NULL) { + matches++; + } + mi = rpmdbFreeIterator(mi); + if (! matches) { + rpmlog(RPMLOG_NOTICE, _("package %s is not installed\n"), arg); + } else { + mi = rpmtsInitIterator(ts, RPMDBI_LABEL, arg, 0); + } + break; + } + default: + break; + } + +exit: + return mi; +} + +/* + * Initialize db iterator with optional filters. By default patterns + * applied to package name, others can be specified with = + */ +static rpmdbMatchIterator initFilterIterator(rpmts ts, ARGV_const_t argv) +{ + rpmdbMatchIterator mi = rpmtsInitIterator(ts, RPMDBI_PACKAGES, NULL, 0); + + for (ARGV_const_t arg = argv; arg && *arg != NULL; arg++) { + rpmTagVal tag = RPMTAG_NAME; + char a[strlen(*arg)+1], *ae; + const char *pat = a; + + strcpy(a, *arg); + + /* Parse for "tag=pattern" args. */ + if ((ae = strchr(a, '=')) != NULL) { + *ae++ = '\0'; + tag = rpmTagGetValue(a); + if (tag == RPMTAG_NOT_FOUND) { + rpmlog(RPMLOG_ERR, _("unknown tag: \"%s\"\n"), a); + mi = rpmdbFreeIterator(mi); + break; + } + pat = ae; + } + + rpmdbSetIteratorRE(mi, tag, RPMMIRE_DEFAULT, pat); + } + + return mi; +} + +int rpmcliArgIter(rpmts ts, QVA_t qva, ARGV_const_t argv) +{ + int ec = 0; + + switch (qva->qva_source) { + case RPMQV_ALL: { + rpmdbMatchIterator mi = initFilterIterator(ts, argv); + ec = rpmcliShowMatches(qva, ts, mi); + mi = rpmdbFreeIterator(mi); + break; + } + case RPMQV_RPM: { + rpmgi gi = rpmgiNew(ts, giFlags, argv); + ec = rpmgiShowMatches(qva, ts, gi); + gi = rpmgiFree(gi); + break; + } + case RPMQV_SPECRPMS: + case RPMQV_SPECSRPM: + for (ARGV_const_t arg = argv; arg && *arg; arg++) { + ec += ((qva->qva_specQuery != NULL) + ? qva->qva_specQuery(ts, qva, *arg) : 1); + } + break; + default: + for (ARGV_const_t arg = argv; arg && *arg; arg++) { + rpmdbMatchIterator mi = initQueryIterator(qva, ts, *arg); + ec += rpmcliShowMatches(qva, ts, mi); + rpmdbFreeIterator(mi); + } + break; + } + + return ec; +} + +int rpmcliQuery(rpmts ts, QVA_t qva, char * const * argv) +{ + rpmVSFlags vsflags, ovsflags; + int ec = 0; + + if (qva->qva_showPackage == NULL) + qva->qva_showPackage = showQueryPackage; + + /* If --queryformat unspecified, then set default now. */ + if (!(qva->qva_flags & _QUERY_FOR_BITS) && qva->qva_queryFormat == NULL) { + char * fmt = rpmExpand("%{?_query_all_fmt}\n", NULL); + if (fmt == NULL || strlen(fmt) <= 1) { + fmt = _free(fmt); + fmt = xstrdup("%{nvra}\n"); + } + qva->qva_queryFormat = fmt; + } + + vsflags = rpmExpandNumeric("%{?_vsflags_query}"); + if (rpmcliQueryFlags & VERIFY_DIGEST) + vsflags |= _RPMVSF_NODIGESTS; + if (rpmcliQueryFlags & VERIFY_SIGNATURE) + vsflags |= _RPMVSF_NOSIGNATURES; + if (rpmcliQueryFlags & VERIFY_HDRCHK) + vsflags |= RPMVSF_NOHDRCHK; + + ovsflags = rpmtsSetVSFlags(ts, vsflags); + ec = rpmcliArgIter(ts, qva, argv); + vsflags = rpmtsSetVSFlags(ts, ovsflags); + + if (qva->qva_showPackage == showQueryPackage) + qva->qva_showPackage = NULL; + + return ec; +} diff --git a/lib/rpmal.c b/lib/rpmal.c new file mode 100644 index 0000000..2f934c7 --- /dev/null +++ b/lib/rpmal.c @@ -0,0 +1,406 @@ +/** \ingroup rpmdep + * \file lib/rpmal.c + */ + +#include "system.h" + + +#include +#include +#include + +#include "lib/rpmal.h" +#include "lib/misc.h" +#include "lib/rpmte_internal.h" + +#include "debug.h" + +typedef struct availablePackage_s * availablePackage; +typedef int rpmalNum; + +/** \ingroup rpmdep + * Info about a single package to be installed. + */ +struct availablePackage_s { + rpmte p; /*!< transaction member */ + rpmds provides; /*!< Provides: dependencies. */ + rpmfi fi; /*!< File info set. */ +}; + +/** \ingroup rpmdep + * A single available item (e.g. a Provides: dependency). + */ +typedef struct availableIndexEntry_s { + rpmalNum pkgNum; /*!< Containing package index. */ + unsigned int entryIx; /*!< Dependency index. */ +} * availableIndexEntry; + +struct fileNameEntry_s { + const char * dirName; + const char * baseName; +}; + +#undef HASHTYPE +#undef HTKEYTYPE +#undef HTDATATYPE +#define HASHTYPE rpmalProvidesHash +#define HTKEYTYPE const char * +#define HTDATATYPE struct availableIndexEntry_s +#include "lib/rpmhash.H" +#include "lib/rpmhash.C" + +#undef HASHTYPE +#undef HTKEYTYPE +#undef HTDATATYPE +#define HASHTYPE rpmalFileHash +#define HTKEYTYPE struct fileNameEntry_s +#define HTDATATYPE struct availableIndexEntry_s +#include "lib/rpmhash.H" +#include "lib/rpmhash.C" + +/** \ingroup rpmdep + * Set of available packages, items, and directories. + */ +struct rpmal_s { + availablePackage list; /*!< Set of packages. */ + rpmalProvidesHash providesHash; + rpmalFileHash fileHash; + int delta; /*!< Delta for pkg list reallocation. */ + int size; /*!< No. of pkgs in list. */ + int alloced; /*!< No. of pkgs allocated for list. */ + rpm_color_t tscolor; /*!< Transaction color. */ + rpm_color_t prefcolor; /*!< Transaction preferred color. */ +}; + +/** + * Destroy available item index. + * @param al available list + */ +static void rpmalFreeIndex(rpmal al) +{ + al->providesHash = rpmalProvidesHashFree(al->providesHash); + al->fileHash = rpmalFileHashFree(al->fileHash); +} + +rpmal rpmalCreate(int delta, rpm_color_t tscolor, rpm_color_t prefcolor) +{ + rpmal al = xcalloc(1, sizeof(*al)); + + al->delta = delta; + al->size = 0; + al->alloced = al->delta; + al->list = xmalloc(sizeof(*al->list) * al->alloced);; + + al->providesHash = NULL; + al->fileHash = NULL; + al->tscolor = tscolor; + al->prefcolor = prefcolor; + + return al; +} + +rpmal rpmalFree(rpmal al) +{ + availablePackage alp; + int i; + + if (al == NULL) + return NULL; + + if ((alp = al->list) != NULL) + for (i = 0; i < al->size; i++, alp++) { + alp->provides = rpmdsFree(alp->provides); + alp->fi = rpmfiFree(alp->fi); + } + al->list = _free(al->list); + al->alloced = 0; + + rpmalFreeIndex(al); + al = _free(al); + return NULL; +} + +static unsigned int fileHash(struct fileNameEntry_s file){ + return hashFunctionString(file.dirName) ^ hashFunctionString(file.baseName); +} + +static int fileCompare(struct fileNameEntry_s one, struct fileNameEntry_s two) { + int rc = 0; + rc = strcmp(one.dirName, two.dirName); + if (!rc) + rc = strcmp(one.baseName, two.baseName); + return rc; +} + +void rpmalDel(rpmal al, rpmte p) +{ + availablePackage alp; + rpmalNum pkgNum; + + if (al == NULL || al->list == NULL) + return; /* XXX can't happen */ + + // XXX use a search for self provide + for (pkgNum=0; pkgNumsize; pkgNum++) { + if (al->list[pkgNum].p == p) { + break; + } + } + if (pkgNum == al->size ) return; // Not found! + + alp = al->list + pkgNum; + // do not actually delete, just set p to NULL + // and later filter that out of the results + alp->p = NULL; +} + +static void rpmalAddFiles(rpmal al, rpmalNum pkgNum, rpmfi fi){ + struct fileNameEntry_s fileName; + struct availableIndexEntry_s fileEntry; + int i; + rpm_color_t ficolor; + + fileEntry.pkgNum = pkgNum; + + fi = rpmfiInit(fi, 0); + while ((i = rpmfiNext(fi)) >= 0) { + /* Ignore colored provides not in our rainbow. */ + ficolor = rpmfiFColor(fi); + if (al->tscolor && ficolor && !(al->tscolor & ficolor)) + continue; + + fileName.dirName = rpmfiDN(fi); + fileName.baseName = rpmfiBN(fi); + + fileEntry.entryIx = i; + + rpmalFileHashAddEntry(al->fileHash, fileName, fileEntry); + } +} + +static void rpmalAddProvides(rpmal al, rpmalNum pkgNum, rpmds provides){ + struct availableIndexEntry_s indexEntry; + rpm_color_t dscolor; + + indexEntry.pkgNum = pkgNum; + + if (rpmdsInit(provides) != NULL) + while (rpmdsNext(provides) >= 0) { + /* Ignore colored provides not in our rainbow. */ + dscolor = rpmdsColor(provides); + if (al->tscolor && dscolor && !(al->tscolor & dscolor)) + continue; + + indexEntry.entryIx = rpmdsIx(provides); + rpmalProvidesHashAddEntry(al->providesHash, rpmdsN(provides), indexEntry); + } +} + +void rpmalAdd(rpmal al, rpmte p) +{ + rpmalNum pkgNum; + availablePackage alp; + + if (al->size == al->alloced) { + al->alloced += al->delta; + al->list = xrealloc(al->list, sizeof(*al->list) * al->alloced); + } + pkgNum = al->size++; + + alp = al->list + pkgNum; + + alp->p = p; + + alp->provides = rpmdsLink(rpmteDS(p, RPMTAG_PROVIDENAME)); + alp->fi = rpmfiLink(rpmteFI(p)); + + if (al->providesHash != NULL) { // index is already created + rpmalAddProvides(al, pkgNum, alp->provides); + rpmalAddFiles(al, pkgNum, alp->fi); + } + + assert(((rpmalNum)(alp - al->list)) == pkgNum); +} + +static void rpmalMakeIndex(rpmal al) +{ + availablePackage alp; + int i; + int providesCnt = 0; + int fileCnt = 0; + + if (al == NULL || al->list == NULL) return; + if (al->providesHash != NULL || al->fileHash != NULL) + return; + for (i = 0; i < al->size; i++) { + alp = al->list + i; + if (alp->provides != NULL) + providesCnt += rpmdsCount(alp->provides); + if (alp->fi != NULL) + fileCnt += rpmfiFC(alp->fi); + } + + al->providesHash = rpmalProvidesHashCreate(providesCnt/4+128, hashFunctionString, + strcmp, NULL, NULL); + al->fileHash = rpmalFileHashCreate(fileCnt/4+128, fileHash, fileCompare, + NULL, NULL); + + for (i = 0; i < al->size; i++) { + alp = al->list + i; + rpmalAddProvides(al, i, alp->provides); + rpmalAddFiles(al, i, alp->fi); + } +} + +static rpmte * rpmalAllFileSatisfiesDepend(const rpmal al, const rpmds ds) +{ + const char *fileName = rpmdsN(ds); + const char *slash; + rpmte * ret = NULL; + + if (al == NULL || fileName == NULL || *fileName != '/') + return NULL; + + /* Split path into dirname and basename components for lookup */ + if ((slash = strrchr(fileName, '/')) != NULL) { + availableIndexEntry result; + int resultCnt = 0; + size_t bnStart = (slash - fileName) + 1; + char dirName[bnStart + 1]; + struct fileNameEntry_s fne = { + .baseName = fileName + bnStart, + .dirName = dirName, + }; + strncpy(dirName, fileName, bnStart); + dirName[bnStart] = '\0'; + + rpmalFileHashGetEntry(al->fileHash, fne, &result, &resultCnt, NULL); + + if (resultCnt > 0) { + int i, found; + ret = xmalloc((resultCnt+1) * sizeof(*ret)); + + for (found = i = 0; i < resultCnt; i++) { + availablePackage alp = al->list + result[i].pkgNum; + if (alp->p == NULL) // deleted + continue; + + rpmdsNotify(ds, "(added files)", 0); + + ret[found] = alp->p; + found++; + } + ret[found] = NULL; + } + } + + return ret; +} + +static rpmte * rpmalAllSatisfiesDepend(const rpmal al, const rpmds ds) +{ + rpmte * ret = NULL; + int i, found; + const char * name; + availableIndexEntry result; + int resultCnt; + + availablePackage alp; + int rc; + + if (al == NULL || ds == NULL || (name = rpmdsN(ds)) == NULL) + return ret; + + if (al->providesHash == NULL && al->fileHash == NULL) + rpmalMakeIndex(al); + + if (*name == '/') { + /* First, look for files "contained" in package ... */ + ret = rpmalAllFileSatisfiesDepend(al, ds); + if (ret != NULL && *ret != NULL) + return ret; + /* ... then, look for files "provided" by package. */ + ret = _free(ret); + } + + rpmalProvidesHashGetEntry(al->providesHash, name, &result, + &resultCnt, NULL); + + if (resultCnt==0) return NULL; + + ret = xmalloc((resultCnt+1) * sizeof(*ret)); + + for (found=i=0; ilist + result[i].pkgNum; + if (alp->p == NULL) // deleted + continue; + (void) rpmdsSetIx(alp->provides, result[i].entryIx); + rc = 0; + if (rpmdsIx(alp->provides) >= 0) + rc = rpmdsCompare(alp->provides, ds); + + if (rc) { + rpmdsNotify(ds, "(added provide)", 0); + ret[found] = alp->p; + found++; + } + } + ret[found] = NULL; + + return ret; +} + +rpmte +rpmalSatisfiesDepend(const rpmal al, const rpmds ds) +{ + rpmte *providers = rpmalAllSatisfiesDepend(al, ds); + rpmte best = NULL; + + if (providers) { + if (al->tscolor) { + /* + * For colored dependencies, try to find a matching provider. + * Otherwise prefer provider of ts preferred color. + */ + rpm_color_t dscolor = rpmdsColor(ds); + for (rpmte *p = providers; *p; p++) { + rpm_color_t tecolor = rpmteColor(*p); + if (dscolor) { + if (dscolor == tecolor) best = *p; + } else if (al->prefcolor) { + if (al->prefcolor == tecolor) best = *p; + } + if (best) break; + } + } + /* if not decided by now, just pick first match */ + if (!best) best = providers[0]; + free(providers); + } + return best; +} + +rpmte * +rpmalAllInCollection(const rpmal al, const char *collname) +{ + rpmte *ret = NULL; + int found = 0; + rpmalNum pkgNum; + + if (!al || !al->list || !collname) + return NULL; + + for (pkgNum = 0; pkgNum < al->size; pkgNum++) { + rpmte p = al->list[pkgNum].p; + if (rpmteHasCollection(p, collname)) { + ret = xrealloc(ret, sizeof(*ret) * (found + 1 + 1)); + ret[found] = p; + found++; + } + } + if (ret) { + ret[found] = NULL; + } + + return ret; +} diff --git a/lib/rpmal.h b/lib/rpmal.h new file mode 100644 index 0000000..9a0e640 --- /dev/null +++ b/lib/rpmal.h @@ -0,0 +1,75 @@ +#ifndef H_RPMAL +#define H_RPMAL + +/** \ingroup rpmdep rpmtrans + * \file lib/rpmal.h + * Structures used for managing added/available package lists. + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct rpmal_s * rpmal; + +/** + * Initialize available packckages, items, and directory list. + * @param delta no. of entries to add on each realloc + * @param tscolor transaction color bits + * @param prefcolor preferred color + * @return al new available list + */ +RPM_GNUC_INTERNAL +rpmal rpmalCreate(int delta, rpm_color_t tscolor, rpm_color_t prefcolor); + +/** + * Free available packages, items, and directory members. + * @param al available list + * @return NULL always + */ +RPM_GNUC_INTERNAL +rpmal rpmalFree(rpmal al); + +/** + * Delete package from available list. + * @param al available list + * @param p package + */ +RPM_GNUC_INTERNAL +void rpmalDel(rpmal al, rpmte p); + +/** + * Add package to available list. + * @param al available list + * @param p package + */ +RPM_GNUC_INTERNAL +void rpmalAdd(rpmal al, rpmte p); + +/** + * Lookup best provider for a dependency in the available list + * @param al available list + * @param ds dependency set + * @return best provider for the dependency, NULL if none + */ +RPM_GNUC_INTERNAL +rpmte rpmalSatisfiesDepend(const rpmal al, const rpmds ds); + +/** + * Get a list of transaction elements that are memebers of a collection in the + * available list + * @param al available list + * @param collname collection name to search for + * @return NULL-terminated list of transaction elements that are + * members of the specified collection + */ +RPM_GNUC_INTERNAL +rpmte * rpmalAllInCollection(const rpmal al, const char * collname); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMAL */ diff --git a/lib/rpmcallback.h b/lib/rpmcallback.h new file mode 100644 index 0000000..3544567 --- /dev/null +++ b/lib/rpmcallback.h @@ -0,0 +1,47 @@ +#ifndef _RPMCALLBACK_H +#define _RPMCALLBACK_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Bit(s) to identify progress callbacks. + */ +typedef enum rpmCallbackType_e { + RPMCALLBACK_UNKNOWN = 0, + RPMCALLBACK_INST_PROGRESS = (1 << 0), + RPMCALLBACK_INST_START = (1 << 1), + RPMCALLBACK_INST_OPEN_FILE = (1 << 2), + RPMCALLBACK_INST_CLOSE_FILE = (1 << 3), + RPMCALLBACK_TRANS_PROGRESS = (1 << 4), + RPMCALLBACK_TRANS_START = (1 << 5), + RPMCALLBACK_TRANS_STOP = (1 << 6), + RPMCALLBACK_UNINST_PROGRESS = (1 << 7), + RPMCALLBACK_UNINST_START = (1 << 8), + RPMCALLBACK_UNINST_STOP = (1 << 9), + RPMCALLBACK_REPACKAGE_PROGRESS = (1 << 10), /* obsolete, unused */ + RPMCALLBACK_REPACKAGE_START = (1 << 11), /* obsolete, unused */ + RPMCALLBACK_REPACKAGE_STOP = (1 << 12), /* obsolete, unused */ + RPMCALLBACK_UNPACK_ERROR = (1 << 13), + RPMCALLBACK_CPIO_ERROR = (1 << 14), + RPMCALLBACK_SCRIPT_ERROR = (1 << 15) +} rpmCallbackType; + +/** + */ +typedef void * (*rpmCallbackFunction) + (const void * h, + const rpmCallbackType what, + const rpm_loff_t amount, + const rpm_loff_t total, + fnpyKey key, + rpmCallbackData data); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMCALLBACK_H */ diff --git a/lib/rpmchecksig.c b/lib/rpmchecksig.c new file mode 100644 index 0000000..850ca62 --- /dev/null +++ b/lib/rpmchecksig.c @@ -0,0 +1,469 @@ +/** \ingroup rpmcli + * \file lib/rpmchecksig.c + * Verify the signature of a package. + */ + +#include "system.h" + +#include /* RPMSIGTAG & related */ +#include +#include +#include /* rpmMkTemp() */ +#include +#include +#include +#include +#include + +#include "rpmio/digest.h" +#include "rpmio/rpmio_internal.h" /* fdSetBundle() */ +#include "lib/rpmlead.h" +#include "lib/signature.h" + +#include "debug.h" + +int _print_pkts = 0; + +static int doImport(rpmts ts, const char *fn, char *buf, ssize_t blen) +{ + char const * const pgpmark = "-----BEGIN PGP "; + size_t marklen = strlen(pgpmark); + int res = 0; + int keyno = 1; + char *start = strstr(buf, pgpmark); + + while (start) { + uint8_t *pkt = NULL; + size_t pktlen = 0; + + /* Read pgp packet. */ + if (pgpParsePkts(start, &pkt, &pktlen) == PGPARMOR_PUBKEY) { + /* Import pubkey packet(s). */ + if (rpmtsImportPubkey(ts, pkt, pktlen) != RPMRC_OK) { + rpmlog(RPMLOG_ERR, _("%s: key %d import failed.\n"), fn, keyno); + res++; + } + } else { + rpmlog(RPMLOG_ERR, _("%s: key %d not an armored public key.\n"), + fn, keyno); + res++; + } + + /* See if there are more keys in the buffer */ + if (start + marklen < buf + blen) { + start = strstr(start + marklen, pgpmark); + } else { + start = NULL; + } + + keyno++; + free(pkt); + } + return res; +} + +int rpmcliImportPubkeys(rpmts ts, ARGV_const_t argv) +{ + int res = 0; + for (ARGV_const_t arg = argv; arg && *arg; arg++) { + const char *fn = *arg; + uint8_t *buf = NULL; + ssize_t blen = 0; + char *t = NULL; + int iorc; + + /* If arg looks like a keyid, then attempt keyserver retrieve. */ + if (rstreqn(fn, "0x", 2)) { + const char * s = fn + 2; + int i; + for (i = 0; *s && isxdigit(*s); s++, i++) + {}; + if (i == 8 || i == 16) { + t = rpmExpand("%{_hkp_keyserver_query}", fn+2, NULL); + if (t && *t != '%') + fn = t; + } + } + + /* Read the file and try to import all contained keys */ + iorc = rpmioSlurp(fn, &buf, &blen); + if (iorc || buf == NULL || blen < 64) { + rpmlog(RPMLOG_ERR, _("%s: import read failed(%d).\n"), fn, iorc); + res++; + } else { + res += doImport(ts, fn, (char *)buf, blen); + } + + free(t); + free(buf); + } + return res; +} + +/** + * @todo If the GPG key was known available, the md5 digest could be skipped. + */ +static int readFile(FD_t fd, const char * fn, pgpDig dig, + rpmDigestBundle plbundle, rpmDigestBundle hdrbundle) +{ + unsigned char buf[4*BUFSIZ]; + ssize_t count; + int rc = 1; + Header h = NULL; + + /* Read the header from the package. */ + if ((h = headerRead(fd, HEADER_MAGIC_YES)) == NULL) { + rpmlog(RPMLOG_ERR, _("%s: headerRead failed\n"), fn); + goto exit; + } + + if (headerIsEntry(h, RPMTAG_HEADERIMMUTABLE)) { + struct rpmtd_s utd; + + if (!headerGet(h, RPMTAG_HEADERIMMUTABLE, &utd, HEADERGET_DEFAULT)){ + rpmlog(RPMLOG_ERR, + _("%s: Immutable header region could not be read. " + "Corrupted package?\n"), fn); + goto exit; + } + rpmDigestBundleUpdate(hdrbundle, rpm_header_magic, sizeof(rpm_header_magic)); + rpmDigestBundleUpdate(hdrbundle, utd.data, utd.count); + rpmtdFreeData(&utd); + } + + /* Read the payload from the package. */ + while ((count = Fread(buf, sizeof(buf[0]), sizeof(buf), fd)) > 0) {} + if (count < 0) { + rpmlog(RPMLOG_ERR, _("%s: Fread failed: %s\n"), fn, Fstrerror(fd)); + goto exit; + } + + rc = 0; + +exit: + headerFree(h); + return rc; +} + +/* Parse the parameters from the OpenPGP packets that will be needed. */ +/* XXX TODO: unify with similar parsePGP() in package.c */ +static rpmRC parsePGP(rpmtd sigtd, const char *fn, pgpDig dig) +{ + rpmRC rc = RPMRC_FAIL; + int debug = (_print_pkts & rpmIsDebug()); + if ((pgpPrtPkts(sigtd->data, sigtd->count, dig, debug) == 0) && + (dig->signature.version == 3 || dig->signature.version == 4)) { + rc = RPMRC_OK; + } else { + rpmlog(RPMLOG_ERR, + _("skipping package %s with unverifiable V%u signature\n"), fn, + dig->signature.version); + } + return rc; +} + +/* + * Figure best available signature. + * XXX TODO: Similar detection in rpmReadPackageFile(), unify these. + */ +static rpmTagVal bestSig(Header sigh, int nosignatures, int nodigests) +{ + rpmTagVal sigtag = 0; + if (sigtag == 0 && !nosignatures) { + if (headerIsEntry(sigh, RPMSIGTAG_DSA)) + sigtag = RPMSIGTAG_DSA; + else if (headerIsEntry(sigh, RPMSIGTAG_RSA)) + sigtag = RPMSIGTAG_RSA; + else if (headerIsEntry(sigh, RPMSIGTAG_GPG)) + sigtag = RPMSIGTAG_GPG; + else if (headerIsEntry(sigh, RPMSIGTAG_PGP)) + sigtag = RPMSIGTAG_PGP; + } + if (sigtag == 0 && !nodigests) { + if (headerIsEntry(sigh, RPMSIGTAG_MD5)) + sigtag = RPMSIGTAG_MD5; + else if (headerIsEntry(sigh, RPMSIGTAG_SHA1)) + sigtag = RPMSIGTAG_SHA1; /* XXX never happens */ + } + return sigtag; +} + +static const char *sigtagname(rpmTagVal sigtag, int upper) +{ + const char *n = NULL; + + switch (sigtag) { + case RPMSIGTAG_SIZE: + n = (upper ? "SIZE" : "size"); + break; + case RPMSIGTAG_SHA1: + n = (upper ? "SHA1" : "sha1"); + break; + case RPMSIGTAG_MD5: + n = (upper ? "MD5" : "md5"); + break; + case RPMSIGTAG_RSA: + n = (upper ? "RSA" : "rsa"); + break; + case RPMSIGTAG_PGP5: /* XXX legacy */ + case RPMSIGTAG_PGP: + n = (upper ? "(MD5) PGP" : "(md5) pgp"); + break; + case RPMSIGTAG_DSA: + n = (upper ? "(SHA1) DSA" : "(sha1) dsa"); + break; + case RPMSIGTAG_GPG: + n = (upper ? "GPG" : "gpg"); + break; + default: + n = (upper ? "?UnknownSigatureType?" : "???"); + break; + } + return n; +} + +/* + * Format sigcheck result for output, appending the message spew to buf and + * bad/missing keyids to keyprob. + * + * In verbose mode, just dump it all. Otherwise ok signatures + * are dumped lowercase, bad sigs uppercase and for PGP/GPG + * if misssing/untrusted key it's uppercase in parenthesis + * and stash the key id as #. Pfft. + */ +static void formatResult(rpmTagVal sigtag, rpmRC sigres, const char *result, + int havekey, char **keyprob, char **buf) +{ + char *msg = NULL; + if (rpmIsVerbose()) { + rasprintf(&msg, " %s", result); + } else { + /* Check for missing / untrusted keys in result. */ + const char *signame = sigtagname(sigtag, (sigres != RPMRC_OK)); + + if (havekey && (sigres == RPMRC_NOKEY || sigres == RPMRC_NOTTRUSTED)) { + const char *tempKey = strstr(result, "ey ID"); + if (tempKey) { + char keyid[sizeof(pgpKeyID_t) + 1]; + rstrlcpy(keyid, tempKey + 6, sizeof(keyid)); + rstrscat(keyprob, " ", signame, "#", keyid, NULL); + } + } + rasprintf(&msg, (*keyprob ? "(%s) " : "%s "), signame); + } + rstrcat(buf, msg); + free(msg); +} + +static int rpmpkgVerifySigs(rpmKeyring keyring, rpmQueryFlags flags, + FD_t fd, const char *fn) +{ + + char *buf = NULL; + char *missingKeys = NULL; + char *untrustedKeys = NULL; + struct rpmtd_s sigtd; + rpmTagVal sigtag; + pgpDig dig = NULL; + pgpDigParams sigp; + Header sigh = NULL; + HeaderIterator hi = NULL; + char * msg = NULL; + int res = 1; /* assume failure */ + rpmRC rc; + int failed = 0; + int nodigests = !(flags & VERIFY_DIGEST); + int nosignatures = !(flags & VERIFY_SIGNATURE); + rpmDigestBundle plbundle = rpmDigestBundleNew(); + rpmDigestBundle hdrbundle = rpmDigestBundleNew(); + + rpmlead lead = rpmLeadNew(); + if ((rc = rpmLeadRead(fd, lead)) == RPMRC_OK) { + const char *lmsg = NULL; + rc = rpmLeadCheck(lead, &lmsg); + if (rc != RPMRC_OK) + rpmlog(RPMLOG_ERR, "%s: %s\n", fn, lmsg); + } + lead = rpmLeadFree(lead); + + if (rc != RPMRC_OK) { + goto exit; + } + + rc = rpmReadSignature(fd, &sigh, RPMSIGTYPE_HEADERSIG, &msg); + switch (rc) { + default: + rpmlog(RPMLOG_ERR, _("%s: rpmReadSignature failed: %s"), fn, + (msg && *msg ? msg : "\n")); + msg = _free(msg); + goto exit; + break; + case RPMRC_OK: + if (sigh == NULL) { + rpmlog(RPMLOG_ERR, _("%s: No signature available\n"), fn); + goto exit; + } + break; + } + msg = _free(msg); + + /* Grab a hint of what needs doing to avoid duplication. */ + sigtag = bestSig(sigh, nosignatures, nodigests); + + dig = pgpNewDig(); + sigp = &dig->signature; + + /* XXX RSA needs the hash_algo, so decode early. */ + if (sigtag == RPMSIGTAG_RSA || sigtag == RPMSIGTAG_PGP || + sigtag == RPMSIGTAG_DSA || sigtag == RPMSIGTAG_GPG) { + int xx = -1; + if (headerGet(sigh, sigtag, &sigtd, HEADERGET_DEFAULT)) { + xx = pgpPrtPkts(sigtd.data, sigtd.count, dig, 0); + rpmtdFreeData(&sigtd); + } + if (xx) goto exit; + + /* XXX assume same hash_algo in header-only and header+payload */ + rpmDigestBundleAdd(plbundle, sigp->hash_algo, RPMDIGEST_NONE); + rpmDigestBundleAdd(hdrbundle, sigp->hash_algo, RPMDIGEST_NONE); + } + + if (headerIsEntry(sigh, RPMSIGTAG_PGP) || + headerIsEntry(sigh, RPMSIGTAG_PGP5) || + headerIsEntry(sigh, RPMSIGTAG_MD5)) { + rpmDigestBundleAdd(plbundle, PGPHASHALGO_MD5, RPMDIGEST_NONE); + } + if (headerIsEntry(sigh, RPMSIGTAG_GPG)) { + rpmDigestBundleAdd(plbundle, PGPHASHALGO_SHA1, RPMDIGEST_NONE); + } + + /* always do sha1 hash of header */ + rpmDigestBundleAdd(hdrbundle, PGPHASHALGO_SHA1, RPMDIGEST_NONE); + + /* Read the file, generating digest(s) on the fly. */ + fdSetBundle(fd, plbundle); + if (readFile(fd, fn, dig, plbundle, hdrbundle)) { + goto exit; + } + + rasprintf(&buf, "%s:%c", fn, (rpmIsVerbose() ? '\n' : ' ') ); + + hi = headerInitIterator(sigh); + for (; headerNext(hi, &sigtd) != 0; rpmtdFreeData(&sigtd)) { + char *result = NULL; + int havekey = 0; + DIGEST_CTX ctx = NULL; + if (sigtd.data == NULL) /* XXX can't happen */ + continue; + + /* Clean up parameters from previous sigtag. */ + pgpCleanDig(dig); + + switch (sigtd.tag) { + case RPMSIGTAG_GPG: + case RPMSIGTAG_PGP5: /* XXX legacy */ + case RPMSIGTAG_PGP: + havekey = 1; + case RPMSIGTAG_RSA: + case RPMSIGTAG_DSA: + if (nosignatures) + continue; + if (parsePGP(&sigtd, fn, dig) != RPMRC_OK) { + goto exit; + } + ctx = rpmDigestBundleDupCtx(havekey ? plbundle : hdrbundle, + dig->signature.hash_algo); + break; + case RPMSIGTAG_SHA1: + if (nodigests) + continue; + ctx = rpmDigestBundleDupCtx(hdrbundle, PGPHASHALGO_SHA1); + break; + case RPMSIGTAG_MD5: + if (nodigests) + continue; + ctx = rpmDigestBundleDupCtx(plbundle, PGPHASHALGO_MD5); + break; + default: + continue; + break; + } + + rc = rpmVerifySignature(keyring, &sigtd, dig, ctx, &result); + rpmDigestFinal(ctx, NULL, NULL, 0); + + formatResult(sigtd.tag, rc, result, havekey, + (rc == RPMRC_NOKEY ? &missingKeys : &untrustedKeys), + &buf); + free(result); + + if (rc != RPMRC_OK) { + failed = 1; + } + + } + res = failed; + + if (rpmIsVerbose()) { + rpmlog(RPMLOG_NOTICE, "%s", buf); + } else { + const char *ok = (failed ? _("NOT OK") : _("OK")); + rpmlog(RPMLOG_NOTICE, "%s%s%s%s%s%s%s%s\n", buf, ok, + missingKeys ? _(" (MISSING KEYS:") : "", + missingKeys ? missingKeys : "", + missingKeys ? _(") ") : "", + untrustedKeys ? _(" (UNTRUSTED KEYS:") : "", + untrustedKeys ? untrustedKeys : "", + untrustedKeys ? _(")") : ""); + } + free(missingKeys); + free(untrustedKeys); + +exit: + free(buf); + rpmDigestBundleFree(hdrbundle); + rpmDigestBundleFree(plbundle); + fdSetBundle(fd, NULL); /* XXX avoid double-free from fd close */ + sigh = rpmFreeSignature(sigh); + hi = headerFreeIterator(hi); + pgpFreeDig(dig); + return res; +} + +/* Wrapper around rpmkVerifySigs to preserve API */ +int rpmVerifySignatures(QVA_t qva, rpmts ts, FD_t fd, const char * fn) +{ + int rc = 1; /* assume failure */ + if (ts && qva && fd && fn) { + rpmKeyring keyring = rpmtsGetKeyring(ts, 1); + rc = rpmpkgVerifySigs(keyring, qva->qva_flags, fd, fn); + rpmKeyringFree(keyring); + } + return rc; +} + +int rpmcliVerifySignatures(rpmts ts, ARGV_const_t argv) +{ + const char * arg; + int res = 0; + rpmKeyring keyring = rpmtsGetKeyring(ts, 1); + rpmVerifyFlags verifyFlags = (VERIFY_DIGEST|VERIFY_SIGNATURE); + + verifyFlags &= ~rpmcliQueryFlags; + + while ((arg = *argv++) != NULL) { + FD_t fd = Fopen(arg, "r.ufdio"); + if (fd == NULL || Ferror(fd)) { + rpmlog(RPMLOG_ERR, _("%s: open failed: %s\n"), + arg, Fstrerror(fd)); + res++; + } else if (rpmpkgVerifySigs(keyring, verifyFlags, fd, arg)) { + res++; + } + + Fclose(fd); + rpmdbCheckSignals(); + } + rpmKeyringFree(keyring); + return res; +} diff --git a/lib/rpmchroot.c b/lib/rpmchroot.c new file mode 100644 index 0000000..81bb5e5 --- /dev/null +++ b/lib/rpmchroot.c @@ -0,0 +1,105 @@ +#include "system.h" +#include +#include +#include +#include "lib/rpmchroot.h" +#include "debug.h" + +struct rootState_s { + char *rootDir; + int chrootDone; + int cwd; +}; + +/* Process global chroot state */ +static struct rootState_s rootState = { + .rootDir = NULL, + .chrootDone = 0, + .cwd = -1, +}; + +int rpmChrootSet(const char *rootDir) +{ + int rc = 0; + + /* Setting same rootDir again is a no-op and not an error */ + if (rootDir && rootState.rootDir && rstreq(rootDir, rootState.rootDir)) + return 0; + + /* Resetting only permitted in neutral state */ + if (rootState.chrootDone != 0) + return -1; + + rootState.rootDir = _free(rootState.rootDir); + if (rootState.cwd >= 0) { + close(rootState.cwd); + rootState.cwd = -1; + } + + if (rootDir != NULL) { + rootState.rootDir = rstrdup(rootDir); + rootState.cwd = open(".", O_RDONLY); + if (rootState.cwd < 0) { + rpmlog(RPMLOG_ERR, _("Unable to open current directory: %m\n")); + rc = -1; + } + } + + return rc; +} + +int rpmChrootIn(void) +{ + int rc = 0; + + if (rootState.rootDir == NULL || rstreq(rootState.rootDir, "/")) + return 0; + + if (rootState.cwd < 0) { + rpmlog(RPMLOG_ERR, _("%s: chroot directory not set\n"), __func__); + return -1; + } + + /* "refcounted" entry to chroot */ + if (rootState.chrootDone > 0) { + rootState.chrootDone++; + } else if (rootState.chrootDone == 0) { + if (chdir("/") == 0 && chroot(rootState.rootDir) == 0) { + rootState.chrootDone = 1; + } else { + rpmlog(RPMLOG_ERR, _("Unable to change root directory: %m\n")); + rc = -1; + } + } + return rc; +} + +int rpmChrootOut(void) +{ + int rc = 0; + if (rootState.rootDir == NULL || rstreq(rootState.rootDir, "/")) + return 0; + + if (rootState.cwd < 0) { + rpmlog(RPMLOG_ERR, _("%s: chroot directory not set\n"), __func__); + return -1; + } + + /* "refcounted" return from chroot */ + if (rootState.chrootDone > 1) { + rootState.chrootDone--; + } else if (rootState.chrootDone == 1) { + if (chroot(".") == 0 && fchdir(rootState.cwd) == 0) { + rootState.chrootDone = 0; + } else { + rpmlog(RPMLOG_ERR, _("Unable to restore root directory: %m\n")); + rc = -1; + } + } + return rc; +} + +int rpmChrootDone(void) +{ + return (rootState.chrootDone > 0); +} diff --git a/lib/rpmchroot.h b/lib/rpmchroot.h new file mode 100644 index 0000000..ba7dea5 --- /dev/null +++ b/lib/rpmchroot.h @@ -0,0 +1,45 @@ +#ifndef _RPMCHROOT_H +#define _RPMCHROOT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmchroot + * Set or clear process-wide chroot directory. + * Calling this while chrooted is an error. + * param rootDir new chroot directory (or NULL to reset) + * return -1 on error, 0 on success + */ +RPM_GNUC_INTERNAL +int rpmChrootSet(const char *rootDir); + +/** \ingroup rpmchroot + * Enter chroot if necessary. + * return -1 on error, 0 on success. + */ +/* RPM_GNUC_INTERNAL */ +int rpmChrootIn(void); + +/** \ingroup rpmchroot + * Return from chroot if necessary. + * return -1 on error, 0 succes. + */ +/* RPM_GNUC_INTERNAL */ +int rpmChrootOut(void); + +/** \ingroup rpmchroot + * Return chrooted status. + * return 1 if chrooted, 0 otherwise + */ +/* RPM_GNUC_INTERNAL */ +int rpmChrootDone(void); + +#ifdef __cplusplus +} +#endif + + +#endif /* _RPMCHROOT_H */ diff --git a/lib/rpmcli.h b/lib/rpmcli.h new file mode 100644 index 0000000..15a4c4c --- /dev/null +++ b/lib/rpmcli.h @@ -0,0 +1,401 @@ +#ifndef H_RPMCLI +#define H_RPMCLI + +/** \ingroup rpmcli rpmbuild + * \file lib/rpmcli.h + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmcli + * Popt option table for options shared by all modes and executables. + */ +extern struct poptOption rpmcliAllPoptTable[]; + +extern const char * rpmcliPipeOutput; + +extern const char * rpmcliRcfile; + +extern const char * rpmcliRootDir; + +/** \ingroup rpmcli + * Initialize most everything needed by an rpm CLI executable context. + * @param argc no. of args + * @param argv arg array + * @param optionsTable popt option table + * @return popt context (or NULL) + */ +poptContext +rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable); + +/** \ingroup rpmcli + * Make sure that rpm configuration has been read. + * @warning Options like --rcfile and --verbose must precede callers option. + */ +void rpmcliConfigured(void); + +/** \ingroup rpmcli + * Destroy most everything needed by an rpm CLI executable context. + * @param optCon popt context + * @return NULL always + */ +poptContext +rpmcliFini(poptContext optCon); + +/** + * Common/global popt tokens used for command line option tables. + */ +#define RPMCLI_POPT_NODEPS -1025 +#define RPMCLI_POPT_FORCE -1026 +#define RPMCLI_POPT_NOMD5 -1027 +#define RPMCLI_POPT_NOFILEDIGEST -1027 /* same as obsolete RPMCLI_POPT_NOMD5 */ +#define RPMCLI_POPT_NOSCRIPTS -1028 +#define RPMCLI_POPT_NOSIGNATURE -1029 +#define RPMCLI_POPT_NODIGEST -1030 +#define RPMCLI_POPT_NOHDRCHK -1031 +#define RPMCLI_POPT_NOCONTEXTS -1032 + +/* ==================================================================== */ +/** \name RPMQV */ + +/** \ingroup rpmcli + * Query/Verify argument qualifiers. + * @todo Reassign to tag values. + */ +enum rpmQVSources_e { + RPMQV_PACKAGE = 0, /*!< ... from package name db search. */ + RPMQV_PATH, /*!< ... from file path db search. */ + RPMQV_ALL, /*!< ... from each installed package. */ + RPMQV_RPM, /*!< ... from reading binary rpm package. */ + RPMQV_GROUP, /*!< ... from group db search. */ + RPMQV_WHATPROVIDES, /*!< ... from provides db search. */ + RPMQV_WHATREQUIRES, /*!< ... from requires db search. */ + RPMQV_TRIGGEREDBY, /*!< ... from trigger db search. */ + RPMQV_DBOFFSET, /*!< ... from database header instance. */ + RPMQV_SPECRPMS, /*!< ... from spec file binaries (query only). */ + RPMQV_SPECFILE = RPMQV_SPECRPMS, /*!< ... backwards compatibility */ + RPMQV_PKGID, /*!< ... from package id (header+payload MD5). */ + RPMQV_HDRID, /*!< ... from header id (immutable header SHA1). */ + RPMQV_TID, /*!< ... from install transaction id (time stamp). */ + RPMQV_SPECSRPM, /*!< ... from spec file source (query only). */ +}; + +typedef rpmFlags rpmQVSources; + +/** \ingroup rpmcli + * Bit(s) to control rpmQuery() operation, stored in qva_flags. + * @todo Merge rpmQueryFlags, rpmVerifyFlags, and rpmVerifyAttrs?. + */ +enum rpmQueryFlags_e { + QUERY_FOR_DEFAULT = 0, /*!< */ + QUERY_MD5 = (1 << 0), /*!< from --nomd5 */ + QUERY_FILEDIGEST = (1 << 0), /*!< from --nofiledigest, same as --nomd5 */ + QUERY_SIZE = (1 << 1), /*!< from --nosize */ + QUERY_LINKTO = (1 << 2), /*!< from --nolink */ + QUERY_USER = (1 << 3), /*!< from --nouser) */ + QUERY_GROUP = (1 << 4), /*!< from --nogroup) */ + QUERY_MTIME = (1 << 5), /*!< from --nomtime) */ + QUERY_MODE = (1 << 6), /*!< from --nomode) */ + QUERY_RDEV = (1 << 7), /*!< from --nodev */ + /* bits 8-14 unused, reserved for rpmVerifyAttrs */ + QUERY_CONTEXTS = (1 << 15), /*!< verify: from --nocontexts */ + QUERY_FILES = (1 << 16), /*!< verify: from --nofiles */ + QUERY_DEPS = (1 << 17), /*!< verify: from --nodeps */ + QUERY_SCRIPT = (1 << 18), /*!< verify: from --noscripts */ + QUERY_DIGEST = (1 << 19), /*!< verify: from --nodigest */ + QUERY_SIGNATURE = (1 << 20), /*!< verify: from --nosignature */ + QUERY_PATCHES = (1 << 21), /*!< verify: from --nopatches */ + QUERY_HDRCHK = (1 << 22), /*!< verify: from --nohdrchk */ + QUERY_FOR_LIST = (1 << 23), /*!< query: from --list */ + QUERY_FOR_STATE = (1 << 24), /*!< query: from --state */ + QUERY_FOR_DOCS = (1 << 25), /*!< query: from --docfiles */ + QUERY_FOR_CONFIG = (1 << 26), /*!< query: from --configfiles */ + QUERY_FOR_DUMPFILES = (1 << 27) /*!< query: from --dump */ +}; + +typedef rpmFlags rpmQueryFlags; + +#define _QUERY_FOR_BITS \ + (QUERY_FOR_LIST|QUERY_FOR_STATE|QUERY_FOR_DOCS|QUERY_FOR_CONFIG|\ + QUERY_FOR_DUMPFILES) + +/** \ingroup rpmcli + * Bit(s) from common command line options. + */ +extern rpmQueryFlags rpmcliQueryFlags; + +/** \ingroup rpmcli + */ +typedef struct rpmQVKArguments_s * QVA_t; + +/** \ingroup rpmcli + * Function to display iterator matches. + * + * @param qva parsed query/verify options + * @param ts transaction set + * @param h header to use for query/verify + * @return 0 on success + */ +typedef int (*QVF_t) (QVA_t qva, rpmts ts, Header h); + +/** \ingroup rpmcli + * Function to query spec file. + * + * @param ts transaction set + * @param qva parsed query/verify options + * @param arg query argument + * @return 0 on success + */ +typedef int (*QSpecF_t) (rpmts ts, QVA_t qva, const char * arg); + +/** \ingroup rpmcli + * Describe query/verify/signature command line operation. + */ +struct rpmQVKArguments_s { + rpmQVSources qva_source; /*!< Identify CLI arg type. */ + int qva_sourceCount;/*!< Exclusive option check (>1 is error). */ + rpmQueryFlags qva_flags; /*!< Bit(s) to control operation. */ + rpmfileAttrs qva_fflags; /*!< Bit(s) to filter on attribute. */ + + QVF_t qva_showPackage; /*!< Function to display iterator matches. */ + QSpecF_t qva_specQuery; /*!< Function to query spec file. */ + char * qva_queryFormat; /*!< Format for headerFormat(). */ + char qva_mode; + /*!< + - 'q' from --query, -q + - 'Q' from --querytags + - 'V' from --verify, -V + - 'I' from --import + - 'K' from --checksig, -K + */ +}; + +/** \ingroup rpmcli + */ +extern struct rpmQVKArguments_s rpmQVKArgs; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmQVSourcePoptTable[]; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmQueryPoptTable[]; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmVerifyPoptTable[]; + +/** \ingroup rpmcli + * Display list of tags that can be used in --queryformat. + * @param fp file handle to use for display + */ +void rpmDisplayQueryTags(FILE * fp); + +/** \ingroup rpmcli + * Display results of package query. + * @todo Devise a meaningful return code. + * @param qva parsed query/verify options + * @param ts transaction set + * @param h header to use for query + * @return 0 always + */ +int showQueryPackage(QVA_t qva, rpmts ts, Header h); + +/** \ingroup rpmcli + * Iterate over query/verify arg list. + * @param ts transaction set + * @param qva parsed query/verify options + * @param argv query argument(s) (or NULL) + * @return 0 on success, else no. of failures + */ +int rpmcliArgIter(rpmts ts, QVA_t qva, ARGV_const_t argv); + +/** \ingroup rpmcli + * Display package information. + * @todo hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union? + * @param ts transaction set + * @param qva parsed query/verify options + * @param argv query argument(s) (or NULL) + * @return 0 on success, else no. of failures + */ +int rpmcliQuery(rpmts ts, QVA_t qva, ARGV_const_t argv); + +/** \ingroup rpmcli + * Display results of package verify. + * @param qva parsed query/verify options + * @param ts transaction set + * @param h header to use for verify + * @return result of last non-zero verify return + */ +int showVerifyPackage(QVA_t qva, rpmts ts, Header h); + +/** + * Check package and header signatures. + * @param qva parsed query/verify options + * @param ts transaction set + * @param fd package file handle + * @param fn package file name + * @return 0 on success, 1 on failure + */ +int rpmVerifySignatures(QVA_t qva, rpmts ts, FD_t fd, const char * fn); + +/** \ingroup rpmcli + * Verify package install. + * @todo hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union? + * @param ts transaction set + * @param qva parsed query/verify options + * @param argv verify argument(s) (or NULL) + * @return 0 on success, else no. of failures + */ +int rpmcliVerify(rpmts ts, QVA_t qva, ARGV_const_t argv); + +/* ==================================================================== */ +/** \name RPMEIU */ +/* --- install/upgrade/erase modes */ + +/** \ingroup rpmcli + * Bit(s) to control rpmInstall() operation. + */ +enum rpmInstallFlags_e { + INSTALL_NONE = 0, + INSTALL_PERCENT = (1 << 0), /*!< from --percent */ + INSTALL_HASH = (1 << 1), /*!< from --hash */ + INSTALL_NODEPS = (1 << 2), /*!< from --nodeps */ + INSTALL_NOORDER = (1 << 3), /*!< from --noorder */ + INSTALL_LABEL = (1 << 4), /*!< from --verbose (notify) */ + INSTALL_UPGRADE = (1 << 5), /*!< from --upgrade */ + INSTALL_FRESHEN = (1 << 6), /*!< from --freshen */ + INSTALL_INSTALL = (1 << 7), /*!< from --install */ + INSTALL_ERASE = (1 << 8), /*!< from --erase */ + INSTALL_ALLMATCHES = (1 << 9) /*!< from --allmatches */ +}; + +typedef rpmFlags rpmInstallFlags; + +/** \ingroup rpmcli + * Bit(s) to control rpmErase() operation. + */ +#define UNINSTALL_NONE INSTALL_NONE +#define UNINSTALL_NODEPS INSTALL_NODEPS +#define UNINSTALL_ALLMATCHES INSTALL_ALLMATCHES + +extern int rpmcliPackagesTotal; +extern int rpmcliHashesCurrent; +extern int rpmcliHashesTotal; +extern int rpmcliProgressCurrent; +extern int rpmcliProgressTotal; + +/** \ingroup rpmcli + * The rpm CLI generic transaction callback handler. + * @todo Remove headerFormat() from the progress callback. + * @deprecated Transaction callback arguments need to change, so don't rely on + * this routine in the rpmcli API. + * + * @param arg per-callback private data (e.g. an rpm header) + * @param what callback identifier + * @param amount per-callback progress info + * @param total per-callback progress info + * @param key opaque header key (e.g. file name or PyObject) + * @param data private data (e.g. rpmInstallInterfaceFlags) + * @return per-callback data (e.g. an opened FD_t) + */ +void * rpmShowProgress(const void * arg, + const rpmCallbackType what, + const rpm_loff_t amount, + const rpm_loff_t total, + fnpyKey key, + void * data); + +/** \ingroup rpmcli + * Install source rpm package. + * @param ts transaction set + * @param arg source rpm file name + * @retval *specFilePtr (installed) spec file name + * @retval *cookie + * @return 0 on success + */ +int rpmInstallSource(rpmts ts, const char * arg, + char ** specFilePtr, + char ** cookie); + + +/** \ingroup rpmcli + * Describe database command line requests. + */ +struct rpmInstallArguments_s { + rpmtransFlags transFlags; + rpmprobFilterFlags probFilter; + rpmInstallFlags installInterfaceFlags; + int numRelocations; + int noDeps; + int incldocs; + rpmRelocation * relocations; + char * prefix; +}; + +/** \ingroup rpmcli + * Install/upgrade/freshen binary rpm package. + * @param ts transaction set + * @param ia mode flags and parameters + * @param fileArgv array of package file names (NULL terminated) + * @return 0 on success + * + * @todo fileArgv is modified on errors, should be ARGV_const_t + */ +int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_t fileArgv); + +/** \ingroup rpmcli + * Erase binary rpm package. + * @param ts transaction set + * @param ia control args/bits + * @param argv array of package file names (NULL terminated) + * @return 0 on success + */ + +int rpmErase(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_const_t argv); + +/** \ingroup rpmcli + */ +extern struct rpmInstallArguments_s rpmIArgs; + +/** \ingroup rpmcli + */ +extern struct poptOption rpmInstallPoptTable[]; + +/* ==================================================================== */ +/** \name RPMK */ + +/** Import public key(s) to rpm keyring + * @param ts transaction set + * @param argv array of pubkey path arguments (NULL terminated) + * @return 0 on success + */ +int rpmcliImportPubkeys(rpmts ts, ARGV_const_t argv); + +/** \ingroup rpmcli + * Verify package signatures + * @param ts transaction set + * @param argv array of package path arguments (NULL terminated) + * @return 0 on success + */ +int rpmcliVerifySignatures(rpmts ts, ARGV_const_t argv); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMCLI */ diff --git a/lib/rpmdb.c b/lib/rpmdb.c new file mode 100644 index 0000000..50bb6b1 --- /dev/null +++ b/lib/rpmdb.c @@ -0,0 +1,2956 @@ +/** \ingroup rpmdb dbi + * \file lib/rpmdb.c + */ + +#include "system.h" + +#define _USE_COPY_LOAD /* XXX don't use DB_DBT_MALLOC (yet) */ + +#include +#include +#include + +#ifndef DYING /* XXX already in "system.h" */ +#include +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include /* XXX isInstallPreReq macro only */ +#include +#include +#include +#include + +#include "lib/rpmchroot.h" +#include "lib/rpmdb_internal.h" +#include "lib/fprint.h" +#include "lib/header_internal.h" /* XXX for headerSetInstance() */ +#include "debug.h" + +static rpmDbiTag const dbiTags[] = { + RPMDBI_PACKAGES, + RPMDBI_NAME, + RPMDBI_BASENAMES, + RPMDBI_GROUP, + RPMDBI_REQUIRENAME, + RPMDBI_PROVIDENAME, + RPMDBI_CONFLICTNAME, + RPMDBI_OBSOLETENAME, + RPMDBI_TRIGGERNAME, + RPMDBI_DIRNAMES, + RPMDBI_INSTALLTID, + RPMDBI_SIGMD5, + RPMDBI_SHA1HEADER, +}; + +#define dbiTagsMax (sizeof(dbiTags) / sizeof(rpmDbiTag)) + +/* A single item from an index database (i.e. the "data returned"). */ +struct dbiIndexItem { + unsigned int hdrNum; /*!< header instance in db */ + unsigned int tagNum; /*!< tag index in header */ +}; + +/* Items retrieved from the index database.*/ +typedef struct _dbiIndexSet { + struct dbiIndexItem * recs; /*!< array of records */ + unsigned int count; /*!< number of records */ + size_t alloced; /*!< alloced size */ +} * dbiIndexSet; + +static int addToIndex(dbiIndex dbi, rpmTagVal rpmtag, unsigned int hdrNum, Header h); +static unsigned int pkgInstance(dbiIndex dbi, int alloc); +static rpmdb rpmdbUnlink(rpmdb db); + +static int buildIndexes(rpmdb db) +{ + int rc = 0; + Header h; + rpmdbMatchIterator mi; + + rc += rpmdbOpenAll(db); + + /* If the main db was just created, this is expected - dont whine */ + if (!(dbiFlags(db->_dbi[0]) & DBI_CREATED)) { + rpmlog(RPMLOG_WARNING, + _("Generating %d missing index(es), please wait...\n"), + db->db_buildindex); + } + + /* Don't call us again */ + db->db_buildindex = 0; + + dbSetFSync(db->db_dbenv, 0); + + mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, NULL, 0); + while ((h = rpmdbNextIterator(mi))) { + unsigned int hdrNum = headerGetInstance(h); + /* Build all secondary indexes which were created on open */ + for (int dbix = 1; dbix < dbiTagsMax; dbix++) { + dbiIndex dbi = db->_dbi[dbix]; + if (dbi && (dbiFlags(dbi) & DBI_CREATED)) { + rc += addToIndex(dbi, dbiTags[dbix], hdrNum, h); + } + } + } + rpmdbFreeIterator(mi); + dbSetFSync(db->db_dbenv, !db->cfg.db_no_fsync); + return rc; +} + +static int uintCmp(unsigned int a, unsigned int b) +{ + return (a != b); +} + +static unsigned int uintId(unsigned int a) +{ + return a; +} + +/** \ingroup dbi + * Return handle for an index database. + * @param db rpm database + * @param rpmtag rpm tag + * @param flags + * @return index database handle + */ +static dbiIndex rpmdbOpenIndex(rpmdb db, rpmDbiTagVal rpmtag, int flags) +{ + int dbix; + dbiIndex dbi = NULL; + int rc = 0; + + if (db == NULL) + return NULL; + + for (dbix = 0; dbix < dbiTagsMax; dbix++) { + if (rpmtag == dbiTags[dbix]) + break; + } + if (dbix >= dbiTagsMax) + return NULL; + + /* Is this index already open ? */ + if ((dbi = db->_dbi[dbix]) != NULL) + return dbi; + + errno = 0; + dbi = NULL; + rc = dbiOpen(db, rpmtag, &dbi, flags); + + if (rc) { + static int _printed[32]; + if (!_printed[dbix & 0x1f]++) + rpmlog(RPMLOG_ERR, _("cannot open %s index using db%d - %s (%d)\n"), + rpmTagGetName(rpmtag), db->db_ver, + (rc > 0 ? strerror(rc) : ""), rc); + } else { + db->_dbi[dbix] = dbi; + int verifyonly = (flags & RPMDB_FLAG_VERIFYONLY); + int rebuild = (db->db_flags & RPMDB_FLAG_REBUILD); + if (dbiType(dbi) == DBI_PRIMARY) { + /* Allocate based on max header instance number + some reserve */ + if (!verifyonly && (db->db_checked == NULL)) { + db->db_checked = intHashCreate(1024 + pkgInstance(dbi, 0) / 4, + uintId, uintCmp, NULL); + } + /* If primary got created, we can safely run without fsync */ + if ((!verifyonly && (dbiFlags(dbi) & DBI_CREATED)) || db->cfg.db_no_fsync) { + rpmlog(RPMLOG_DEBUG, "disabling fsync on database\n"); + db->cfg.db_no_fsync = 1; + dbSetFSync(db->db_dbenv, 0); + } + } else { /* secondary index */ + if (!rebuild && !verifyonly && (dbiFlags(dbi) & DBI_CREATED)) { + rpmlog(RPMLOG_DEBUG, "index %s needs creating\n", dbiName(dbi)); + db->db_buildindex++; + if (db->db_buildindex == 1) { + buildIndexes(db); + } + } + } + } + + return dbi; +} + +union _dbswap { + unsigned int ui; + unsigned char uc[4]; +}; + +#define _DBSWAP(_a) \ +\ + { unsigned char _b, *_c = (_a).uc; \ + _b = _c[3]; _c[3] = _c[0]; _c[0] = _b; \ + _b = _c[2]; _c[2] = _c[1]; _c[1] = _b; \ +\ + } + +/* + * Ensure sufficient memory for nrecs of new records in dbiIndexSet. + * Allocate in power of two sizes to avoid memory fragmentation, so + * realloc is not always needed. + */ +static inline void dbiGrowSet(dbiIndexSet set, unsigned int nrecs) +{ + size_t need = (set->count + nrecs) * sizeof(*(set->recs)); + size_t alloced = set->alloced ? set->alloced : 1 << 4; + + while (alloced < need) + alloced <<= 1; + + if (alloced != set->alloced) { + set->recs = xrealloc(set->recs, alloced); + set->alloced = alloced; + } +} + +/** + * Convert retrieved data to index set. + * @param dbi index database handle + * @param data retrieved data + * @retval setp (malloc'ed) index set + * @return 0 on success + */ +static int dbt2set(dbiIndex dbi, DBT * data, dbiIndexSet * setp) +{ + int _dbbyteswapped = dbiByteSwapped(dbi); + const char * sdbir; + dbiIndexSet set; + unsigned int i; + dbiIndexType itype = dbiType(dbi); + + if (dbi == NULL || data == NULL || setp == NULL) + return -1; + + if ((sdbir = data->data) == NULL) { + *setp = NULL; + return 0; + } + + set = xcalloc(1, sizeof(*set)); + dbiGrowSet(set, data->size / itype); + set->count = data->size / itype; + + switch (itype) { + default: + case DBI_SECONDARY: + for (i = 0; i < set->count; i++) { + union _dbswap hdrNum, tagNum; + + memcpy(&hdrNum.ui, sdbir, sizeof(hdrNum.ui)); + sdbir += sizeof(hdrNum.ui); + memcpy(&tagNum.ui, sdbir, sizeof(tagNum.ui)); + sdbir += sizeof(tagNum.ui); + if (_dbbyteswapped) { + _DBSWAP(hdrNum); + _DBSWAP(tagNum); + } + set->recs[i].hdrNum = hdrNum.ui; + set->recs[i].tagNum = tagNum.ui; + } + break; + case DBI_PRIMARY: + for (i = 0; i < set->count; i++) { + union _dbswap hdrNum; + + memcpy(&hdrNum.ui, sdbir, sizeof(hdrNum.ui)); + sdbir += sizeof(hdrNum.ui); + if (_dbbyteswapped) { + _DBSWAP(hdrNum); + } + set->recs[i].hdrNum = hdrNum.ui; + set->recs[i].tagNum = 0; + } + break; + } + *setp = set; + return 0; +} + +/** + * Convert index set to database representation. + * @param dbi index database handle + * @param data retrieved data + * @param set index set + * @return 0 on success + */ +static int set2dbt(dbiIndex dbi, DBT * data, dbiIndexSet set) +{ + int _dbbyteswapped = dbiByteSwapped(dbi); + char * tdbir; + unsigned int i; + dbiIndexType itype = dbiType(dbi); + + if (dbi == NULL || data == NULL || set == NULL) + return -1; + + data->size = set->count * itype; + if (data->size == 0) { + data->data = NULL; + return 0; + } + tdbir = data->data = xmalloc(data->size); + + switch (itype) { + default: + case DBI_SECONDARY: + for (i = 0; i < set->count; i++) { + union _dbswap hdrNum, tagNum; + + memset(&hdrNum, 0, sizeof(hdrNum)); + memset(&tagNum, 0, sizeof(tagNum)); + hdrNum.ui = set->recs[i].hdrNum; + tagNum.ui = set->recs[i].tagNum; + if (_dbbyteswapped) { + _DBSWAP(hdrNum); + _DBSWAP(tagNum); + } + memcpy(tdbir, &hdrNum.ui, sizeof(hdrNum.ui)); + tdbir += sizeof(hdrNum.ui); + memcpy(tdbir, &tagNum.ui, sizeof(tagNum.ui)); + tdbir += sizeof(tagNum.ui); + } + break; + case DBI_PRIMARY: + for (i = 0; i < set->count; i++) { + union _dbswap hdrNum; + + memset(&hdrNum, 0, sizeof(hdrNum)); + hdrNum.ui = set->recs[i].hdrNum; + if (_dbbyteswapped) { + _DBSWAP(hdrNum); + } + memcpy(tdbir, &hdrNum.ui, sizeof(hdrNum.ui)); + tdbir += sizeof(hdrNum.ui); + } + break; + } + + return 0; +} + +/* XXX assumes hdrNum is first int in dbiIndexItem */ +static int hdrNumCmp(const void * one, const void * two) +{ + const unsigned int * a = one, * b = two; + return (*a - *b); +} + +/** + * Append element(s) to set of index database items. + * @param set set of index database items + * @param recs array of items to append to set + * @param nrecs number of items + * @param recsize size of an array item + * @param sortset should resulting set be sorted? + * @return 0 success, 1 failure (bad args) + */ +static int dbiAppendSet(dbiIndexSet set, const void * recs, + int nrecs, size_t recsize, int sortset) +{ + const char * rptr = recs; + size_t rlen = (recsize < sizeof(*(set->recs))) + ? recsize : sizeof(*(set->recs)); + + if (set == NULL || recs == NULL || nrecs <= 0 || recsize == 0) + return 1; + + dbiGrowSet(set, nrecs); + memset(set->recs + set->count, 0, nrecs * sizeof(*(set->recs))); + + while (nrecs-- > 0) { + memcpy(set->recs + set->count, rptr, rlen); + rptr += recsize; + set->count++; + } + + if (sortset && set->count > 1) + qsort(set->recs, set->count, sizeof(*(set->recs)), hdrNumCmp); + + return 0; +} + +/** + * Remove element(s) from set of index database items. + * @param set set of index database items + * @param recs array of items to remove from set + * @param nrecs number of items + * @param recsize size of an array item + * @param sorted array is already sorted? + * @return 0 success, 1 failure (no items found) + */ +static int dbiPruneSet(dbiIndexSet set, void * recs, int nrecs, + size_t recsize, int sorted) +{ + unsigned int from; + unsigned int to = 0; + unsigned int num = set->count; + unsigned int numCopied = 0; + + assert(set->count > 0); + if (nrecs > 1 && !sorted) + qsort(recs, nrecs, recsize, hdrNumCmp); + + for (from = 0; from < num; from++) { + if (bsearch(&set->recs[from], recs, nrecs, recsize, hdrNumCmp)) { + set->count--; + continue; + } + if (from != to) + set->recs[to] = set->recs[from]; /* structure assignment */ + to++; + numCopied++; + } + return (numCopied == num); +} + +/* Count items in index database set. */ +static unsigned int dbiIndexSetCount(dbiIndexSet set) { + return set->count; +} + +/* Return record offset of header from element in index database set. */ +static unsigned int dbiIndexRecordOffset(dbiIndexSet set, int recno) { + return set->recs[recno].hdrNum; +} + +/* Return file index from element in index database set. */ +static unsigned int dbiIndexRecordFileNumber(dbiIndexSet set, int recno) { + return set->recs[recno].tagNum; +} + +/* Destroy set of index database items */ +static dbiIndexSet dbiFreeIndexSet(dbiIndexSet set) { + if (set) { + set->recs = _free(set->recs); + set = _free(set); + } + return set; +} + +typedef struct miRE_s { + rpmTagVal tag; /*!< header tag */ + rpmMireMode mode; /*!< pattern match mode */ + char * pattern; /*!< pattern string */ + int notmatch; /*!< like "grep -v" */ + regex_t * preg; /*!< regex compiled pattern buffer */ + int cflags; /*!< regcomp(3) flags */ + int eflags; /*!< regexec(3) flags */ + int fnflags; /*!< fnmatch(3) flags */ +} * miRE; + +struct rpmdbMatchIterator_s { + rpmdbMatchIterator mi_next; + void * mi_keyp; + size_t mi_keylen; + rpmdb mi_db; + rpmDbiTagVal mi_rpmtag; + dbiIndexSet mi_set; + DBC * mi_dbc; + int mi_setx; + Header mi_h; + int mi_sorted; + int mi_cflags; + int mi_modified; + unsigned int mi_prevoffset; /* header instance (native endian) */ + unsigned int mi_offset; /* header instance (native endian) */ + unsigned int mi_filenum; /* tag element (native endian) */ + int mi_nre; + miRE mi_re; + rpmts mi_ts; + rpmRC (*mi_hdrchk) (rpmts ts, const void * uh, size_t uc, char ** msg); + +}; + +struct rpmdbIndexIterator_s { + rpmdbIndexIterator ii_next; + rpmdb ii_db; + dbiIndex ii_dbi; + rpmDbiTag ii_rpmtag; + DBC * ii_dbc; + DBT ii_key; + dbiIndexSet ii_set; +}; + +static rpmdb rpmdbRock; +static rpmdbMatchIterator rpmmiRock; +static rpmdbIndexIterator rpmiiRock; + +int rpmdbCheckTerminate(int terminate) +{ + sigset_t newMask, oldMask; + static int terminating = 0; + + if (terminating) return 0; + + (void) sigfillset(&newMask); /* block all signals */ + (void) sigprocmask(SIG_BLOCK, &newMask, &oldMask); + + if (rpmsqIsCaught(SIGINT) > 0 + || rpmsqIsCaught(SIGQUIT) > 0 + || rpmsqIsCaught(SIGHUP) > 0 + || rpmsqIsCaught(SIGTERM) > 0 + || rpmsqIsCaught(SIGPIPE) > 0 + || terminate) + terminating = 1; + + if (terminating) { + rpmdb db; + rpmdbMatchIterator mi; + rpmdbIndexIterator ii; + + while ((mi = rpmmiRock) != NULL) { + rpmmiRock = mi->mi_next; + mi->mi_next = NULL; + mi = rpmdbFreeIterator(mi); + } + + while ((ii = rpmiiRock) != NULL) { + rpmiiRock = ii->ii_next; + ii->ii_next = NULL; + ii = rpmdbIndexIteratorFree(ii); + } + + while ((db = rpmdbRock) != NULL) { + rpmdbRock = db->db_next; + db->db_next = NULL; + (void) rpmdbClose(db); + } + } + sigprocmask(SIG_SETMASK, &oldMask, NULL); + return terminating; +} + +int rpmdbCheckSignals(void) +{ + if (rpmdbCheckTerminate(0)) { + rpmlog(RPMLOG_DEBUG, "Exiting on signal...\n"); + exit(EXIT_FAILURE); + } + return 0; +} + +/** + * Block all signals, returning previous signal mask. + */ +static int blockSignals(sigset_t * oldMask) +{ + sigset_t newMask; + + (void) sigfillset(&newMask); /* block all signals */ + (void) sigprocmask(SIG_BLOCK, &newMask, oldMask); + (void) sigdelset(&newMask, SIGINT); + (void) sigdelset(&newMask, SIGQUIT); + (void) sigdelset(&newMask, SIGHUP); + (void) sigdelset(&newMask, SIGTERM); + (void) sigdelset(&newMask, SIGPIPE); + return sigprocmask(SIG_BLOCK, &newMask, NULL); +} + +/** + * Restore signal mask. + */ +static int unblockSignals(sigset_t * oldMask) +{ + (void) rpmdbCheckSignals(); + return sigprocmask(SIG_SETMASK, oldMask, NULL); +} + +rpmop rpmdbOp(rpmdb rpmdb, rpmdbOpX opx) +{ + rpmop op = NULL; + switch (opx) { + case RPMDB_OP_DBGET: + op = &rpmdb->db_getops; + break; + case RPMDB_OP_DBPUT: + op = &rpmdb->db_putops; + break; + case RPMDB_OP_DBDEL: + op = &rpmdb->db_delops; + break; + default: + break; + } + return op; +} + +const char *rpmdbHome(rpmdb db) +{ + const char *dbdir = NULL; + if (db) { + dbdir = rpmChrootDone() ? db->db_home : db->db_fullpath; + } + return dbdir; +} + +int rpmdbOpenAll(rpmdb db) +{ + int rc = 0; + + if (db == NULL) return -2; + + for (int dbix = 0; dbix < dbiTagsMax; dbix++) { + dbiIndex dbi = db->_dbi[dbix]; + if (dbi == NULL) { + rc += (rpmdbOpenIndex(db, dbiTags[dbix], db->db_flags) == NULL); + } + } + return rc; +} + +static int dbiForeach(dbiIndex *dbis, + int (*func) (dbiIndex, unsigned int), int del) +{ + int xx, rc = 0; + for (int dbix = dbiTagsMax; --dbix >= 0; ) { + if (dbis[dbix] == NULL) + continue; + xx = func(dbis[dbix], 0); + if (xx && rc == 0) rc = xx; + if (del) + dbis[dbix] = NULL; + } + return rc; +} + +int rpmdbClose(rpmdb db) +{ + rpmdb * prev, next; + int rc = 0; + + if (db == NULL) + goto exit; + + (void) rpmdbUnlink(db); + + if (db->nrefs > 0) + goto exit; + + /* Always re-enable fsync on close of rw-database */ + if ((db->db_mode & O_ACCMODE) != O_RDONLY) + dbSetFSync(db->db_dbenv, 1); + + rc = dbiForeach(db->_dbi, dbiClose, 1); + + db->db_root = _free(db->db_root); + db->db_home = _free(db->db_home); + db->db_fullpath = _free(db->db_fullpath); + db->db_checked = intHashFree(db->db_checked); + db->_dbi = _free(db->_dbi); + + prev = &rpmdbRock; + while ((next = *prev) != NULL && next != db) + prev = &next->db_next; + if (next) { + *prev = next->db_next; + next->db_next = NULL; + } + + db = _free(db); + +exit: + (void) rpmsqEnable(-SIGHUP, NULL); + (void) rpmsqEnable(-SIGINT, NULL); + (void) rpmsqEnable(-SIGTERM,NULL); + (void) rpmsqEnable(-SIGQUIT,NULL); + (void) rpmsqEnable(-SIGPIPE,NULL); + return rc; +} + +int rpmdbSync(rpmdb db) +{ + if (db == NULL) return 0; + + return dbiForeach(db->_dbi, dbiSync, 0); +} + +static rpmdb newRpmdb(const char * root, const char * home, + int mode, int perms, int flags) +{ + rpmdb db = NULL; + char * db_home = rpmGetPath((home && *home) ? home : "%{_dbpath}", NULL); + + if (!(db_home && db_home[0] != '%')) { + rpmlog(RPMLOG_ERR, _("no dbpath has been set\n")); + free(db_home); + return NULL; + } + + db = xcalloc(sizeof(*db), 1); + + if (!(perms & 0600)) perms = 0644; /* XXX sanity */ + + db->db_mode = (mode >= 0) ? mode : 0; + db->db_perms = (perms >= 0) ? perms : 0644; + db->db_flags = (flags >= 0) ? flags : 0; + + db->db_home = db_home; + db->db_root = rpmGetPath((root && *root) ? root : "/", NULL); + db->db_fullpath = rpmGenPath(db->db_root, db->db_home, NULL); + /* XXX remove environment after chrooted operations, for now... */ + db->db_remove_env = (!rstreq(db->db_root, "/") ? 1 : 0); + db->_dbi = xcalloc(dbiTagsMax, sizeof(*db->_dbi)); + db->db_ver = DB_VERSION_MAJOR; /* XXX just to put something in messages */ + db->nrefs = 0; + return rpmdbLink(db); +} + +static int openDatabase(const char * prefix, + const char * dbpath, rpmdb *dbp, + int mode, int perms, int flags) +{ + rpmdb db; + int rc, xx; + int justCheck = flags & RPMDB_FLAG_JUSTCHECK; + + if (dbp) + *dbp = NULL; + if ((mode & O_ACCMODE) == O_WRONLY) + return 1; + + db = newRpmdb(prefix, dbpath, mode, perms, flags); + if (db == NULL) + return 1; + + /* Try to ensure db home exists, error out if we cant even create */ + rc = rpmioMkpath(rpmdbHome(db), 0755, getuid(), getgid()); + if (rc == 0) { + (void) rpmsqEnable(SIGHUP, NULL); + (void) rpmsqEnable(SIGINT, NULL); + (void) rpmsqEnable(SIGTERM,NULL); + (void) rpmsqEnable(SIGQUIT,NULL); + (void) rpmsqEnable(SIGPIPE,NULL); + + /* Just the primary Packages database opened here */ + rc = (rpmdbOpenIndex(db, RPMDBI_PACKAGES, db->db_flags) != NULL) ? 0 : -2; + } + + if (rc || justCheck || dbp == NULL) + xx = rpmdbClose(db); + else { + db->db_next = rpmdbRock; + rpmdbRock = db; + *dbp = db; + } + + return rc; +} + +static rpmdb rpmdbUnlink(rpmdb db) +{ + if (db) + db->nrefs--; + return NULL; +} + +rpmdb rpmdbLink(rpmdb db) +{ + if (db) + db->nrefs++; + return db; +} + +int rpmdbOpen (const char * prefix, rpmdb *dbp, int mode, int perms) +{ + return openDatabase(prefix, NULL, dbp, mode, perms, 0); +} + +int rpmdbInit (const char * prefix, int perms) +{ + rpmdb db = NULL; + int rc; + + rc = openDatabase(prefix, NULL, &db, (O_CREAT | O_RDWR), perms, 0); + if (db != NULL) { + int xx; + xx = rpmdbOpenAll(db); + if (xx && rc == 0) rc = xx; + xx = rpmdbClose(db); + if (xx && rc == 0) rc = xx; + db = NULL; + } + return rc; +} + +int rpmdbVerify(const char * prefix) +{ + rpmdb db = NULL; + int rc = 0; + + rc = openDatabase(prefix, NULL, &db, O_RDONLY, 0644, RPMDB_FLAG_VERIFYONLY); + + if (db != NULL) { + int xx; + rc = rpmdbOpenAll(db); + + rc = dbiForeach(db->_dbi, dbiVerify, 0); + + xx = rpmdbClose(db); + if (xx && rc == 0) rc = xx; + db = NULL; + } + return rc; +} + +static Header rpmdbGetHeaderAt(rpmdb db, unsigned int offset) +{ + rpmdbMatchIterator mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, + &offset, sizeof(offset)); + Header h = headerLink(rpmdbNextIterator(mi)); + rpmdbFreeIterator(mi); + return h; +} + +/** + * Find file matches in database. + * @param db rpm database + * @param filespec + * @param key + * @param data + * @param matches + * @return 0 on success, 1 on not found, -2 on error + */ +static int rpmdbFindByFile(rpmdb db, const char * filespec, + DBT * key, DBT * data, dbiIndexSet * matches) +{ + char * dirName = NULL; + const char * baseName; + fingerPrintCache fpc = NULL; + fingerPrint fp1; + dbiIndex dbi = NULL; + DBC * dbcursor; + dbiIndexSet allMatches = NULL; + rpmDbiTag dbtag = RPMDBI_BASENAMES; + unsigned int i; + int rc = -2; /* assume error */ + int xx; + + *matches = NULL; + if (filespec == NULL) return rc; /* nothing alloced yet */ + + if ((baseName = strrchr(filespec, '/')) != NULL) { + size_t len = baseName - filespec + 1; + dirName = strncpy(xmalloc(len + 1), filespec, len); + dirName[len] = '\0'; + baseName++; + } else { + dirName = xstrdup(""); + baseName = filespec; + } + if (baseName == NULL) + goto exit; + + dbi = rpmdbOpenIndex(db, dbtag, 0); + if (dbi != NULL) { + dbcursor = NULL; + xx = dbiCopen(dbi, &dbcursor, 0); + + key->data = (void *) baseName; + key->size = strlen(baseName); + if (key->size == 0) + key->size++; /* XXX "/" fixup. */ + + rc = dbiGet(dbi, dbcursor, key, data, DB_SET); + if (rc > 0) { + rpmlog(RPMLOG_ERR, + _("error(%d) getting \"%s\" records from %s index\n"), + rc, (char*)key->data, dbiName(dbi)); + } + + if (rc == 0) + (void) dbt2set(dbi, data, &allMatches); + + xx = dbiCclose(dbi, dbcursor, 0); + dbcursor = NULL; + } else + rc = -2; + + if (rc || allMatches == NULL) goto exit; + + *matches = xcalloc(1, sizeof(**matches)); + fpc = fpCacheCreate(allMatches->count); + fp1 = fpLookup(fpc, dirName, baseName, 1); + + i = 0; + while (i < allMatches->count) { + struct rpmtd_s bn, dn, di; + const char ** baseNames, ** dirNames; + uint32_t * dirIndexes; + unsigned int offset = dbiIndexRecordOffset(allMatches, i); + unsigned int prevoff; + Header h = rpmdbGetHeaderAt(db, offset); + + if (h == NULL) { + i++; + continue; + } + + headerGet(h, RPMTAG_BASENAMES, &bn, HEADERGET_MINMEM); + headerGet(h, RPMTAG_DIRNAMES, &dn, HEADERGET_MINMEM); + headerGet(h, RPMTAG_DIRINDEXES, &di, HEADERGET_MINMEM); + baseNames = bn.data; + dirNames = dn.data; + dirIndexes = di.data; + + do { + fingerPrint fp2; + int num = dbiIndexRecordFileNumber(allMatches, i); + + fp2 = fpLookup(fpc, dirNames[dirIndexes[num]], baseNames[num], 1); + if (FP_EQUAL(fp1, fp2)) { + struct dbiIndexItem rec = { + .hdrNum = dbiIndexRecordOffset(allMatches, i), + .tagNum = dbiIndexRecordFileNumber(allMatches, i), + }; + xx = dbiAppendSet(*matches, &rec, 1, sizeof(rec), 0); + } + + prevoff = offset; + i++; + if (i < allMatches->count) + offset = dbiIndexRecordOffset(allMatches, i); + } while (i < allMatches->count && offset == prevoff); + + rpmtdFreeData(&bn); + rpmtdFreeData(&dn); + rpmtdFreeData(&di); + h = headerFree(h); + } + + fpCacheFree(fpc); + + if ((*matches)->count == 0) { + *matches = dbiFreeIndexSet(*matches); + rc = 1; + } else { + rc = 0; + } + +exit: + dbiFreeIndexSet(allMatches); + free(dirName); + return rc; +} + +int rpmdbCountPackages(rpmdb db, const char * name) +{ + DBC * dbcursor = NULL; + DBT key, data; + dbiIndex dbi; + rpmDbiTag dbtag = RPMDBI_NAME; + int rc; + int xx; + + if (db == NULL) + return 0; + + dbi = rpmdbOpenIndex(db, dbtag, 0); + if (dbi == NULL) + return 0; + + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + + key.data = (void *) name; + key.size = strlen(name); + + xx = dbiCopen(dbi, &dbcursor, 0); + rc = dbiGet(dbi, dbcursor, &key, &data, DB_SET); + xx = dbiCclose(dbi, dbcursor, 0); + dbcursor = NULL; + + if (rc == 0) { /* success */ + dbiIndexSet matches = NULL; + (void) dbt2set(dbi, &data, &matches); + if (matches) { + rc = dbiIndexSetCount(matches); + matches = dbiFreeIndexSet(matches); + } + } else if (rc == DB_NOTFOUND) { /* not found */ + rc = 0; + } else { /* error */ + rpmlog(RPMLOG_ERR, + _("error(%d) getting \"%s\" records from %s index\n"), + rc, (char*)key.data, dbiName(dbi)); + rc = -1; + } + + return rc; +} + +/** + * Attempt partial matches on name[-version[-release]] strings. + * @param db rpmdb handle + * @param dbi index database handle (always RPMDBI_NAME) + * @param dbcursor index database cursor + * @param key search key/length/flags + * @param data search data/length/flags + * @param name package name + * @param version package version (can be a pattern) + * @param release package release (can be a pattern) + * @retval matches set of header instances that match + * @return RPMRC_OK on match, RPMRC_NOMATCH or RPMRC_FAIL + */ +static rpmRC dbiFindMatches(rpmdb db, dbiIndex dbi, DBC * dbcursor, + DBT * key, DBT * data, + const char * name, + const char * version, + const char * release, + dbiIndexSet * matches) +{ + unsigned int gotMatches = 0; + int rc; + unsigned int i; + + key->data = (void *) name; + key->size = strlen(name); + + rc = dbiGet(dbi, dbcursor, key, data, DB_SET); + + if (rc == 0) { /* success */ + (void) dbt2set(dbi, data, matches); + if (version == NULL && release == NULL) + return RPMRC_OK; + } else if (rc == DB_NOTFOUND) { /* not found */ + return RPMRC_NOTFOUND; + } else { /* error */ + rpmlog(RPMLOG_ERR, + _("error(%d) getting \"%s\" records from %s index\n"), + rc, (char*)key->data, dbiName(dbi)); + return RPMRC_FAIL; + } + + /* Make sure the version and release match. */ + for (i = 0; i < dbiIndexSetCount(*matches); i++) { + unsigned int recoff = dbiIndexRecordOffset(*matches, i); + rpmdbMatchIterator mi; + Header h; + + if (recoff == 0) + continue; + + mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, &recoff, sizeof(recoff)); + + /* Set iterator selectors for version/release if available. */ + if (version && + rpmdbSetIteratorRE(mi, RPMTAG_VERSION, RPMMIRE_DEFAULT, version)) + { + rc = RPMRC_FAIL; + goto exit; + } + if (release && + rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_DEFAULT, release)) + { + rc = RPMRC_FAIL; + goto exit; + } + + h = rpmdbNextIterator(mi); + if (h) + (*matches)->recs[gotMatches++] = (*matches)->recs[i]; + else + (*matches)->recs[i].hdrNum = 0; + mi = rpmdbFreeIterator(mi); + } + + if (gotMatches) { + (*matches)->count = gotMatches; + rc = RPMRC_OK; + } else + rc = RPMRC_NOTFOUND; + +exit: +/* FIX: double indirection */ + if (rc && matches && *matches) + *matches = dbiFreeIndexSet(*matches); + return rc; +} + +/** + * Lookup by name, name-version, and finally by name-version-release. + * Both version and release can be patterns. + * @todo Name must be an exact match, as name is a db key. + * @param db rpmdb handle + * @param dbi index database handle (always RPMDBI_NAME) + * @param dbcursor index database cursor + * @param key search key/length/flags + * @param data search data/length/flags + * @param arg name[-version[-release]] string + * @retval matches set of header instances that match + * @return RPMRC_OK on match, RPMRC_NOMATCH or RPMRC_FAIL + */ +static rpmRC dbiFindByLabel(rpmdb db, dbiIndex dbi, DBC * dbcursor, + DBT * key, DBT * data, const char * arg, dbiIndexSet * matches) +{ + const char * release; + char * localarg; + char * s; + char c; + int brackets; + rpmRC rc; + + if (arg == NULL || strlen(arg) == 0) return RPMRC_NOTFOUND; + + /* did they give us just a name? */ + rc = dbiFindMatches(db, dbi, dbcursor, key, data, arg, NULL, NULL, matches); + if (rc != RPMRC_NOTFOUND) return rc; + + /* FIX: double indirection */ + *matches = dbiFreeIndexSet(*matches); + + /* maybe a name and a release */ + localarg = xmalloc(strlen(arg) + 1); + s = stpcpy(localarg, arg); + + c = '\0'; + brackets = 0; + for (s -= 1; s > localarg; s--) { + switch (*s) { + case '[': + brackets = 1; + break; + case ']': + if (c != '[') brackets = 0; + break; + } + c = *s; + if (!brackets && *s == '-') + break; + } + + /* FIX: *matches may be NULL. */ + if (s == localarg) { + rc = RPMRC_NOTFOUND; + goto exit; + } + + *s = '\0'; + rc = dbiFindMatches(db, dbi, dbcursor, key, data, + localarg, s + 1, NULL, matches); + if (rc != RPMRC_NOTFOUND) goto exit; + + /* FIX: double indirection */ + *matches = dbiFreeIndexSet(*matches); + + /* how about name-version-release? */ + + release = s + 1; + + c = '\0'; + brackets = 0; + for (; s > localarg; s--) { + switch (*s) { + case '[': + brackets = 1; + break; + case ']': + if (c != '[') brackets = 0; + break; + } + c = *s; + if (!brackets && *s == '-') + break; + } + + if (s == localarg) { + rc = RPMRC_NOTFOUND; + goto exit; + } + + *s = '\0'; + /* FIX: *matches may be NULL. */ + rc = dbiFindMatches(db, dbi, dbcursor, key, data, + localarg, s + 1, release, matches); +exit: + free(localarg); + return rc; +} + +/** + * Rewrite a header into packages (if necessary) and free the header. + * Note: this is called from a markReplacedFiles iteration, and *must* + * preserve the "join key" (i.e. offset) for the header. + * @param mi database iterator + * @param dbi index database handle + * @return 0 on success + */ +static int miFreeHeader(rpmdbMatchIterator mi, dbiIndex dbi) +{ + int rc = 0; + + if (mi == NULL || mi->mi_h == NULL) + return 0; + + if (dbi && mi->mi_dbc && mi->mi_modified && mi->mi_prevoffset) { + DBT key, data; + sigset_t signalMask; + rpmRC rpmrc = RPMRC_NOTFOUND; + int xx; + + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + key.data = (void *) &mi->mi_prevoffset; + key.size = sizeof(mi->mi_prevoffset); + data.data = headerUnload(mi->mi_h); + data.size = headerSizeof(mi->mi_h, HEADER_MAGIC_NO); + + /* Check header digest/signature on blob export (if requested). */ + if (mi->mi_hdrchk && mi->mi_ts) { + char * msg = NULL; + int lvl; + + rpmrc = (*mi->mi_hdrchk) (mi->mi_ts, data.data, data.size, &msg); + lvl = (rpmrc == RPMRC_FAIL ? RPMLOG_ERR : RPMLOG_DEBUG); + rpmlog(lvl, "%s h#%8u %s", + (rpmrc == RPMRC_FAIL ? _("miFreeHeader: skipping") : "write"), + mi->mi_prevoffset, (msg ? msg : "\n")); + msg = _free(msg); + } + + if (data.data != NULL && rpmrc != RPMRC_FAIL) { + (void) blockSignals(&signalMask); + rc = dbiPut(dbi, mi->mi_dbc, &key, &data, DB_KEYLAST); + if (rc) { + rpmlog(RPMLOG_ERR, + _("error(%d) storing record #%d into %s\n"), + rc, mi->mi_prevoffset, dbiName(dbi)); + } + xx = dbiSync(dbi, 0); + (void) unblockSignals(&signalMask); + } + data.data = _free(data.data); + data.size = 0; + } + + mi->mi_h = headerFree(mi->mi_h); + + return rc; +} + +rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi) +{ + rpmdbMatchIterator * prev, next; + dbiIndex dbi; + int xx; + int i; + + if (mi == NULL) + return NULL; + + prev = &rpmmiRock; + while ((next = *prev) != NULL && next != mi) + prev = &next->mi_next; + if (next) { + *prev = next->mi_next; + next->mi_next = NULL; + } + + dbi = rpmdbOpenIndex(mi->mi_db, RPMDBI_PACKAGES, 0); + + xx = miFreeHeader(mi, dbi); + + if (mi->mi_dbc) + xx = dbiCclose(dbi, mi->mi_dbc, 0); + mi->mi_dbc = NULL; + + if (mi->mi_re != NULL) + for (i = 0; i < mi->mi_nre; i++) { + miRE mire = mi->mi_re + i; + mire->pattern = _free(mire->pattern); + if (mire->preg != NULL) { + regfree(mire->preg); + mire->preg = _free(mire->preg); + } + } + mi->mi_re = _free(mi->mi_re); + + mi->mi_set = dbiFreeIndexSet(mi->mi_set); + mi->mi_keyp = _free(mi->mi_keyp); + rpmdbClose(mi->mi_db); + mi->mi_ts = rpmtsFree(mi->mi_ts); + + mi = _free(mi); + + (void) rpmdbCheckSignals(); + + return mi; +} + +unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi) { + return (mi ? mi->mi_offset : 0); +} + +unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi) { + return (mi ? mi->mi_filenum : 0); +} + +int rpmdbGetIteratorCount(rpmdbMatchIterator mi) { + return (mi && mi->mi_set ? mi->mi_set->count : 0); +} + +/** + * Return pattern match. + * @param mire match iterator regex + * @param val value to match + * @return 0 if pattern matches, >0 on nomatch, <0 on error + */ +static int miregexec(miRE mire, const char * val) +{ + int rc = 0; + + switch (mire->mode) { + case RPMMIRE_STRCMP: + rc = (!rstreq(mire->pattern, val)); + break; + case RPMMIRE_DEFAULT: + case RPMMIRE_REGEX: + rc = regexec(mire->preg, val, 0, NULL, mire->eflags); + if (rc && rc != REG_NOMATCH) { + char msg[256]; + (void) regerror(rc, mire->preg, msg, sizeof(msg)-1); + msg[sizeof(msg)-1] = '\0'; + rpmlog(RPMLOG_ERR, _("%s: regexec failed: %s\n"), + mire->pattern, msg); + rc = -1; + } + break; + case RPMMIRE_GLOB: + rc = fnmatch(mire->pattern, val, mire->fnflags); + if (rc && rc != FNM_NOMATCH) + rc = -1; + break; + default: + rc = -1; + break; + } + + return rc; +} + +/** + * Compare iterator selectors by rpm tag (qsort/bsearch). + * @param a 1st iterator selector + * @param b 2nd iterator selector + * @return result of comparison + */ +static int mireCmp(const void * a, const void * b) +{ + const miRE mireA = (const miRE) a; + const miRE mireB = (const miRE) b; + return (mireA->tag - mireB->tag); +} + +/** + * Copy pattern, escaping for appropriate mode. + * @param tag rpm tag + * @retval modep type of pattern match + * @param pattern pattern to duplicate + * @return duplicated pattern + */ +static char * mireDup(rpmTagVal tag, rpmMireMode *modep, + const char * pattern) +{ + const char * s; + char * pat; + char * t; + int brackets; + size_t nb; + int c; + + switch (*modep) { + default: + case RPMMIRE_DEFAULT: + if (tag == RPMTAG_DIRNAMES || tag == RPMTAG_BASENAMES) { + *modep = RPMMIRE_GLOB; + pat = xstrdup(pattern); + break; + } + + nb = strlen(pattern) + sizeof("^$"); + + /* Find no. of bytes needed for pattern. */ + /* periods and plusses are escaped, splats become '.*' */ + c = '\0'; + brackets = 0; + for (s = pattern; *s != '\0'; s++) { + switch (*s) { + case '.': + case '+': + case '*': + if (!brackets) nb++; + break; + case '\\': + s++; + break; + case '[': + brackets = 1; + break; + case ']': + if (c != '[') brackets = 0; + break; + } + c = *s; + } + + pat = t = xmalloc(nb); + + if (pattern[0] != '^') *t++ = '^'; + + /* Copy pattern, escaping periods, prefixing splats with period. */ + c = '\0'; + brackets = 0; + for (s = pattern; *s != '\0'; s++, t++) { + switch (*s) { + case '.': + case '+': + if (!brackets) *t++ = '\\'; + break; + case '*': + if (!brackets) *t++ = '.'; + break; + case '\\': + *t++ = *s++; + break; + case '[': + brackets = 1; + break; + case ']': + if (c != '[') brackets = 0; + break; + } + c = *t = *s; + } + + if (s > pattern && s[-1] != '$') *t++ = '$'; + *t = '\0'; + *modep = RPMMIRE_REGEX; + break; + case RPMMIRE_STRCMP: + case RPMMIRE_REGEX: + case RPMMIRE_GLOB: + pat = xstrdup(pattern); + break; + } + + return pat; +} + +int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTagVal tag, + rpmMireMode mode, const char * pattern) +{ + static rpmMireMode defmode = (rpmMireMode)-1; + miRE mire = NULL; + char * allpat = NULL; + int notmatch = 0; + regex_t * preg = NULL; + int cflags = 0; + int eflags = 0; + int fnflags = 0; + int rc = 0; + + if (defmode == (rpmMireMode)-1) { + char *t = rpmExpand("%{?_query_selector_match}", NULL); + + if (*t == '\0' || rstreq(t, "default")) + defmode = RPMMIRE_DEFAULT; + else if (rstreq(t, "strcmp")) + defmode = RPMMIRE_STRCMP; + else if (rstreq(t, "regex")) + defmode = RPMMIRE_REGEX; + else if (rstreq(t, "glob")) + defmode = RPMMIRE_GLOB; + else + defmode = RPMMIRE_DEFAULT; + t = _free(t); + } + + if (mi == NULL || pattern == NULL) + return rc; + + /* Leading '!' inverts pattern match sense, like "grep -v". */ + if (*pattern == '!') { + notmatch = 1; + pattern++; + } + + allpat = mireDup(tag, &mode, pattern); + + if (mode == RPMMIRE_DEFAULT) + mode = defmode; + + switch (mode) { + case RPMMIRE_DEFAULT: + case RPMMIRE_STRCMP: + break; + case RPMMIRE_REGEX: + preg = xcalloc(1, sizeof(*preg)); + cflags = (REG_EXTENDED | REG_NOSUB); + rc = regcomp(preg, allpat, cflags); + if (rc) { + char msg[256]; + (void) regerror(rc, preg, msg, sizeof(msg)-1); + msg[sizeof(msg)-1] = '\0'; + rpmlog(RPMLOG_ERR, _("%s: regcomp failed: %s\n"), allpat, msg); + } + break; + case RPMMIRE_GLOB: + fnflags = FNM_PATHNAME | FNM_PERIOD; + break; + default: + rc = -1; + break; + } + + if (rc) { + /* FIX: mire has kept values */ + allpat = _free(allpat); + if (preg) { + regfree(preg); + preg = _free(preg); + } + return rc; + } + + mi->mi_re = xrealloc(mi->mi_re, (mi->mi_nre + 1) * sizeof(*mi->mi_re)); + mire = mi->mi_re + mi->mi_nre; + mi->mi_nre++; + + mire->tag = tag; + mire->mode = mode; + mire->pattern = allpat; + mire->notmatch = notmatch; + mire->preg = preg; + mire->cflags = cflags; + mire->eflags = eflags; + mire->fnflags = fnflags; + + if (mi->mi_nre > 1) + qsort(mi->mi_re, mi->mi_nre, sizeof(*mi->mi_re), mireCmp); + + return rc; +} + +/** + * Return iterator selector match. + * @param mi rpm database iterator + * @return 1 if header should be skipped + */ +static int mireSkip (const rpmdbMatchIterator mi) +{ + miRE mire; + uint32_t zero = 0; + int ntags = 0; + int nmatches = 0; + int rc; + + if (mi->mi_h == NULL) /* XXX can't happen */ + return 0; + + /* + * Apply tag tests, implicitly "||" for multiple patterns/values of a + * single tag, implicitly "&&" between multiple tag patterns. + */ + if ((mire = mi->mi_re) != NULL) + for (int i = 0; i < mi->mi_nre; i++, mire++) { + int anymatch; + struct rpmtd_s td; + + if (!headerGet(mi->mi_h, mire->tag, &td, HEADERGET_MINMEM)) { + if (mire->tag != RPMTAG_EPOCH) { + ntags++; + continue; + } + /* "is package already installed" checks rely on this behavior */ + td.count = 1; + td.type = RPM_INT32_TYPE; + td.data = &zero; + } + + anymatch = 0; /* no matches yet */ + while (1) { + rpmtdInit(&td); + while (rpmtdNext(&td) >= 0) { + char *str = rpmtdFormat(&td, RPMTD_FORMAT_STRING, NULL); + if (str) { + rc = miregexec(mire, str); + if ((!rc && !mire->notmatch) || (rc && mire->notmatch)) + anymatch++; + free(str); + } + } + if ((i+1) < mi->mi_nre && mire[0].tag == mire[1].tag) { + i++; + mire++; + continue; + } + break; + } + rpmtdFreeData(&td); + + ntags++; + if (anymatch) + nmatches++; + } + + return (ntags == nmatches ? 0 : 1); +} + +int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite) +{ + int rc; + if (mi == NULL) + return 0; + rc = (mi->mi_cflags & DB_WRITECURSOR) ? 1 : 0; + if (rewrite) + mi->mi_cflags |= DB_WRITECURSOR; + else + mi->mi_cflags &= ~DB_WRITECURSOR; + return rc; +} + +int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified) +{ + int rc; + if (mi == NULL) + return 0; + rc = mi->mi_modified; + mi->mi_modified = modified; + return rc; +} + +int rpmdbSetHdrChk(rpmdbMatchIterator mi, rpmts ts, + rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg)) +{ + int rc = 0; + if (mi == NULL) + return 0; + mi->mi_ts = rpmtsLink(ts); + mi->mi_hdrchk = hdrchk; + return rc; +} + +static rpmRC miVerifyHeader(rpmdbMatchIterator mi, const void *uh, size_t uhlen) +{ + rpmRC rpmrc = RPMRC_NOTFOUND; + + if (!(mi->mi_hdrchk && mi->mi_ts)) + return rpmrc; + + /* Don't bother re-checking a previously read header. */ + if (mi->mi_db->db_checked) { + if (intHashHasEntry(mi->mi_db->db_checked, mi->mi_offset)) + rpmrc = RPMRC_OK; + } + + /* If blob is unchecked, check blob import consistency now. */ + if (rpmrc != RPMRC_OK) { + char * msg = NULL; + int lvl; + + rpmrc = (*mi->mi_hdrchk) (mi->mi_ts, uh, uhlen, &msg); + lvl = (rpmrc == RPMRC_FAIL ? RPMLOG_ERR : RPMLOG_DEBUG); + rpmlog(lvl, "%s h#%8u %s", + (rpmrc == RPMRC_FAIL ? _("rpmdbNextIterator: skipping") : " read"), + mi->mi_offset, (msg ? msg : "\n")); + msg = _free(msg); + + /* Mark header checked. */ + if (mi->mi_db && mi->mi_db->db_checked && rpmrc == RPMRC_OK) { + intHashAddEntry(mi->mi_db->db_checked, mi->mi_offset); + } + } + return rpmrc; +} + +/* FIX: mi->mi_key.data may be NULL */ +Header rpmdbNextIterator(rpmdbMatchIterator mi) +{ + dbiIndex dbi; + void * uh; + size_t uhlen; + DBT key, data; + void * keyp; + size_t keylen; + int rc; + int xx; + + if (mi == NULL) + return NULL; + + dbi = rpmdbOpenIndex(mi->mi_db, RPMDBI_PACKAGES, 0); + if (dbi == NULL) + return NULL; + + /* + * Cursors are per-iterator, not per-dbi, so get a cursor for the + * iterator on 1st call. If the iteration is to rewrite headers, and the + * CDB model is used for the database, then the cursor needs to + * marked with DB_WRITECURSOR as well. + */ + if (mi->mi_dbc == NULL) + xx = dbiCopen(dbi, &mi->mi_dbc, mi->mi_cflags); + + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + +top: + uh = NULL; + uhlen = 0; + + do { + union _dbswap mi_offset; + + if (mi->mi_set) { + if (!(mi->mi_setx < mi->mi_set->count)) + return NULL; + mi->mi_offset = dbiIndexRecordOffset(mi->mi_set, mi->mi_setx); + mi->mi_filenum = dbiIndexRecordFileNumber(mi->mi_set, mi->mi_setx); + mi_offset.ui = mi->mi_offset; + if (dbiByteSwapped(dbi) == 1) + _DBSWAP(mi_offset); + keyp = &mi_offset; + keylen = sizeof(mi_offset.ui); + } else { + + key.data = keyp = (void *)mi->mi_keyp; + key.size = keylen = mi->mi_keylen; + data.data = uh; + data.size = uhlen; +#if !defined(_USE_COPY_LOAD) + data.flags |= DB_DBT_MALLOC; +#endif + rc = dbiGet(dbi, mi->mi_dbc, &key, &data, + (key.data == NULL ? DB_NEXT : DB_SET)); + data.flags = 0; + keyp = key.data; + keylen = key.size; + uh = data.data; + uhlen = data.size; + + /* + * If we got the next key, save the header instance number. + * + * Instance 0 (i.e. mi->mi_setx == 0) is the + * largest header instance in the database, and should be + * skipped. + */ + if (keyp && mi->mi_setx && rc == 0) { + memcpy(&mi_offset, keyp, sizeof(mi_offset.ui)); + if (dbiByteSwapped(dbi) == 1) + _DBSWAP(mi_offset); + mi->mi_offset = mi_offset.ui; + } + + /* Terminate on error or end of keys */ + if (rc || (mi->mi_setx && mi->mi_offset == 0)) + return NULL; + } + mi->mi_setx++; + } while (mi->mi_offset == 0); + + /* If next header is identical, return it now. */ + if (mi->mi_prevoffset && mi->mi_offset == mi->mi_prevoffset) { + /* ...but rpmdb record numbers are unique, avoid endless loop */ + return (mi->mi_rpmtag == RPMDBI_PACKAGES) ? NULL : mi->mi_h; + } + + /* Retrieve next header blob for index iterator. */ + if (uh == NULL) { + key.data = keyp; + key.size = keylen; +#if !defined(_USE_COPY_LOAD) + data.flags |= DB_DBT_MALLOC; +#endif + rc = dbiGet(dbi, mi->mi_dbc, &key, &data, DB_SET); + data.flags = 0; + keyp = key.data; + keylen = key.size; + uh = data.data; + uhlen = data.size; + if (rc) + return NULL; + } + + /* Rewrite current header (if necessary) and unlink. */ + xx = miFreeHeader(mi, dbi); + + /* Is this the end of the iteration? */ + if (uh == NULL) + return NULL; + + /* Verify header if enabled, skip damaged and inconsistent headers */ + if (miVerifyHeader(mi, uh, uhlen) == RPMRC_FAIL) { + goto top; + } + + /* Did the header blob load correctly? */ +#if !defined(_USE_COPY_LOAD) + mi->mi_h = headerLoad(uh); +#else + mi->mi_h = headerCopyLoad(uh); +#endif + if (mi->mi_h == NULL || !headerIsEntry(mi->mi_h, RPMTAG_NAME)) { + rpmlog(RPMLOG_ERR, + _("rpmdb: damaged header #%u retrieved -- skipping.\n"), + mi->mi_offset); + goto top; + } + + /* + * Skip this header if iterator selector (if any) doesn't match. + */ + if (mireSkip(mi)) { + /* XXX hack, can't restart with Packages locked on single instance. */ + if (mi->mi_set || mi->mi_keyp == NULL) + goto top; + return NULL; + } + headerSetInstance(mi->mi_h, mi->mi_offset); + + mi->mi_prevoffset = mi->mi_offset; + mi->mi_modified = 0; + + return mi->mi_h; +} + +/** \ingroup rpmdb + * sort the iterator by (recnum, filenum) + * Return database iterator. + * @param mi rpm database iterator + */ +void rpmdbSortIterator(rpmdbMatchIterator mi) +{ + if (mi && mi->mi_set && mi->mi_set->recs && mi->mi_set->count > 0) { + /* + * mergesort is much (~10x with lots of identical basenames) faster + * than pure quicksort, but glibc uses msort_with_tmp() on stack. + */ +#if defined(__GLIBC__) + qsort(mi->mi_set->recs, mi->mi_set->count, + sizeof(*mi->mi_set->recs), hdrNumCmp); +#else + mergesort(mi->mi_set->recs, mi->mi_set->count, + sizeof(*mi->mi_set->recs), hdrNumCmp); +#endif + mi->mi_sorted = 1; + } +} + +int rpmdbExtendIterator(rpmdbMatchIterator mi, + const void * keyp, size_t keylen) +{ + DBC * dbcursor; + DBT data, key; + dbiIndex dbi = NULL; + dbiIndexSet set; + int rc; + int xx; + + if (mi == NULL || keyp == NULL) + return 1; + + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + key.data = (void *) keyp; + key.size = keylen ? keylen : strlen(keyp); + + dbcursor = mi->mi_dbc; + + dbi = rpmdbOpenIndex(mi->mi_db, mi->mi_rpmtag, 0); + if (dbi == NULL) + return 1; + + xx = dbiCopen(dbi, &dbcursor, 0); + rc = dbiGet(dbi, dbcursor, &key, &data, DB_SET); + xx = dbiCclose(dbi, dbcursor, 0); + dbcursor = NULL; + + if (rc) { /* error/not found */ + if (rc != DB_NOTFOUND) + rpmlog(RPMLOG_ERR, + _("error(%d) getting \"%s\" records from %s index\n"), + rc, (char*)key.data, dbiName(dbi)); + return rc; + } + + set = NULL; + (void) dbt2set(dbi, &data, &set); + + if (mi->mi_set == NULL) { + mi->mi_set = set; + } else { + dbiGrowSet(mi->mi_set, set->count); + memcpy(mi->mi_set->recs + mi->mi_set->count, set->recs, + set->count * sizeof(*(mi->mi_set->recs))); + mi->mi_set->count += set->count; + set = dbiFreeIndexSet(set); + } + + return rc; +} + +int rpmdbPruneIterator(rpmdbMatchIterator mi, intHash hdrNums) +{ + if (mi == NULL || hdrNums == NULL || intHashNumKeys(hdrNums) <= 0) + return 1; + + if (!mi->mi_set) + return 0; + + unsigned int from; + unsigned int to = 0; + unsigned int num = mi->mi_set->count; + + assert(mi->mi_set->count > 0); + + for (from = 0; from < num; from++) { + if (intHashHasEntry(hdrNums, mi->mi_set->recs[from].hdrNum)) { + mi->mi_set->count--; + continue; + } + if (from != to) + mi->mi_set->recs[to] = mi->mi_set->recs[from]; /* structure assignment */ + to++; + } + return 0; +} + +int rpmdbAppendIterator(rpmdbMatchIterator mi, const int * hdrNums, int nHdrNums) +{ + if (mi == NULL || hdrNums == NULL || nHdrNums <= 0) + return 1; + + if (mi->mi_set == NULL) + mi->mi_set = xcalloc(1, sizeof(*mi->mi_set)); + (void) dbiAppendSet(mi->mi_set, hdrNums, nHdrNums, sizeof(*hdrNums), 0); + return 0; +} + +rpmdbMatchIterator rpmdbNewIterator(rpmdb db, rpmDbiTagVal dbitag) +{ + rpmdbMatchIterator mi = NULL; + + if (rpmdbOpenIndex(db, dbitag, 0) == NULL) + return NULL; + + mi = xcalloc(1, sizeof(*mi)); + mi->mi_keyp = NULL; + mi->mi_keylen = 0; + mi->mi_set = NULL; + mi->mi_db = rpmdbLink(db); + mi->mi_rpmtag = dbitag; + + mi->mi_dbc = NULL; + mi->mi_setx = 0; + mi->mi_h = NULL; + mi->mi_sorted = 0; + mi->mi_cflags = 0; + mi->mi_modified = 0; + mi->mi_prevoffset = 0; + mi->mi_offset = 0; + mi->mi_filenum = 0; + mi->mi_nre = 0; + mi->mi_re = NULL; + + mi->mi_ts = NULL; + mi->mi_hdrchk = NULL; + + /* Chain cursors for teardown on abnormal exit. */ + mi->mi_next = rpmmiRock; + rpmmiRock = mi; + + return mi; +}; + +rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag, + const void * keyp, size_t keylen) +{ + rpmdbMatchIterator mi = NULL; + dbiIndexSet set = NULL; + dbiIndex dbi; + void * mi_keyp = NULL; + int isLabel = 0; + + if (db == NULL) + return NULL; + + (void) rpmdbCheckSignals(); + + /* XXX HACK to remove rpmdbFindByLabel/findMatches from the API */ + if (rpmtag == RPMDBI_LABEL) { + rpmtag = RPMDBI_NAME; + isLabel = 1; + } + + dbi = rpmdbOpenIndex(db, rpmtag, 0); + if (dbi == NULL) + return NULL; + + /* + * Handle label and file name special cases. + * Otherwise, retrieve join keys for secondary lookup. + */ + if (rpmtag != RPMDBI_PACKAGES) { + DBT key, data; + DBC * dbcursor = NULL; + int rc = 0; + int xx; + + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + + if (keyp) { + + if (isLabel) { + xx = dbiCopen(dbi, &dbcursor, 0); + rc = dbiFindByLabel(db, dbi, dbcursor, &key, &data, keyp, &set); + xx = dbiCclose(dbi, dbcursor, 0); + dbcursor = NULL; + } else if (rpmtag == RPMDBI_BASENAMES) { + rc = rpmdbFindByFile(db, keyp, &key, &data, &set); + } else { + xx = dbiCopen(dbi, &dbcursor, 0); + + key.data = (void *) keyp; + key.size = keylen; + if (key.data && key.size == 0) + key.size = strlen((char *)key.data); + if (key.data && key.size == 0) + key.size++; /* XXX "/" fixup. */ + + rc = dbiGet(dbi, dbcursor, &key, &data, DB_SET); + if (rc > 0) { + rpmlog(RPMLOG_ERR, + _("error(%d) getting \"%s\" records from %s index\n"), + rc, (key.data ? (char *)key.data : "???"), + dbiName(dbi)); + } + + /* Join keys need to be native endian internally. */ + if (rc == 0) + (void) dbt2set(dbi, &data, &set); + + xx = dbiCclose(dbi, dbcursor, 0); + dbcursor = NULL; + } + if (rc) { /* error/not found */ + set = dbiFreeIndexSet(set); + goto exit; + } + } else { + /* get all entries from index */ + xx = dbiCopen(dbi, &dbcursor, 0); + + while ((rc = dbiGet(dbi, dbcursor, &key, &data, DB_NEXT)) == 0) { + dbiIndexSet newset = NULL; + + (void) dbt2set(dbi, &data, &newset); + if (set == NULL) { + set = newset; + } else { + dbiAppendSet(set, newset->recs, newset->count, sizeof(*(set->recs)), 0); + dbiFreeIndexSet(newset); + } + } + + if (rc != DB_NOTFOUND) { + rpmlog(RPMLOG_ERR, + _("error(%d) getting \"%s\" records from %s index\n"), + rc, (key.data ? (char *)key.data : "???"), dbiName(dbi)); + } + + xx = dbiCclose(dbi, dbcursor, 0); + dbcursor = NULL; + + if (rc != DB_NOTFOUND) { /* error */ + set = dbiFreeIndexSet(set); + goto exit; + } + } + } + + /* Copy the retrieval key, byte swapping header instance if necessary. */ + if (keyp) { + switch (rpmtag) { + case RPMDBI_PACKAGES: + { union _dbswap *k; + + assert(keylen == sizeof(k->ui)); /* xxx programmer error */ + k = xmalloc(sizeof(*k)); + memcpy(k, keyp, keylen); + if (dbiByteSwapped(dbi) == 1) + _DBSWAP(*k); + mi_keyp = k; + } break; + default: + { char * k; + if (keylen == 0) + keylen = strlen(keyp); + k = xmalloc(keylen + 1); + memcpy(k, keyp, keylen); + k[keylen] = '\0'; /* XXX assumes strings */ + mi_keyp = k; + } break; + } + } + + mi = rpmdbNewIterator(db, rpmtag); + mi->mi_keyp = mi_keyp; + mi->mi_keylen = keylen; + mi->mi_set = set; + + if (rpmtag != RPMDBI_PACKAGES && keyp == NULL) { + rpmdbSortIterator(mi); + } + +exit: + return mi; +} + +/* + * Convert current tag data to db key + * @param tagdata Tag data container + * @retval key DB key struct + * @retval freedata Should key.data be freed afterwards + * Return 0 to signal this item should be discarded (ie continue) + */ +static int td2key(rpmtd tagdata, DBT *key, int *freedata) +{ + const char *str = NULL; + + *freedata = 0; + switch (rpmtdType(tagdata)) { + case RPM_CHAR_TYPE: + case RPM_INT8_TYPE: + key->size = sizeof(uint8_t); + key->data = rpmtdGetChar(tagdata); + break; + case RPM_INT16_TYPE: + key->size = sizeof(uint16_t); + key->data = rpmtdGetUint16(tagdata); + break; + case RPM_INT32_TYPE: + key->size = sizeof(uint32_t); + key->data = rpmtdGetUint32(tagdata); + break; + case RPM_INT64_TYPE: + key->size = sizeof(uint64_t); + key->data = rpmtdGetUint64(tagdata); + break; + case RPM_BIN_TYPE: + key->size = tagdata->count; + key->data = tagdata->data; + break; + case RPM_STRING_TYPE: + case RPM_I18NSTRING_TYPE: + case RPM_STRING_ARRAY_TYPE: + default: + str = rpmtdGetString(tagdata); + key->data = (char *) str; /* XXX discards const */ + key->size = strlen(str); + break; + } + + if (key->size == 0) + key->size = strlen((char *)key->data); + if (key->size == 0) + key->size++; /* XXX "/" fixup. */ + + return 1; +} +/* + * rpmdbIndexIterator + */ + +rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag) +{ + rpmdbIndexIterator ii; + dbiIndex dbi = NULL; + + if (db == NULL) + return NULL; + + (void) rpmdbCheckSignals(); + + dbi = rpmdbOpenIndex(db, rpmtag, 0); + if (dbi == NULL) + return NULL; + + /* Chain cursors for teardown on abnormal exit. */ + ii = xcalloc(1, sizeof(*ii)); + ii->ii_next = rpmiiRock; + rpmiiRock = ii; + + ii->ii_db = rpmdbLink(db); + ii->ii_rpmtag = rpmtag; + ii->ii_dbi = dbi; + ii->ii_set = NULL; + + return ii; +} + +int rpmdbIndexIteratorNext(rpmdbIndexIterator ii, const void ** key, size_t * keylen) +{ + int rc, xx; + DBT data; + + if (ii == NULL) + return -1; + + if (ii->ii_dbc == NULL) + xx = dbiCopen(ii->ii_dbi, &ii->ii_dbc, 0); + + /* free old data */ + ii->ii_set = dbiFreeIndexSet(ii->ii_set); + + memset(&data, 0, sizeof(data)); + rc = dbiGet(ii->ii_dbi, ii->ii_dbc, &ii->ii_key, &data, DB_NEXT); + + if (rc != 0) { + *key = NULL; + *keylen = 0; + + if (rc != DB_NOTFOUND) { + rpmlog(RPMLOG_ERR, + _("error(%d:%s) getting next key from %s index\n"), + rc, db_strerror(rc), rpmTagGetName(ii->ii_rpmtag)); + } + return -1; + } + + (void) dbt2set(ii->ii_dbi, &data, &ii->ii_set); + *key = ii->ii_key.data; + *keylen = ii->ii_key.size; + + return 0; +} + +unsigned int rpmdbIndexIteratorNumPkgs(rpmdbIndexIterator ii) +{ + return (ii && ii->ii_set) ? dbiIndexSetCount(ii->ii_set) : 0; +} + +unsigned int rpmdbIndexIteratorPkgOffset(rpmdbIndexIterator ii, unsigned int nr) +{ + if (!ii || !ii->ii_set) + return 0; + if (dbiIndexSetCount(ii->ii_set) <= nr) + return 0; + return dbiIndexRecordOffset(ii->ii_set, nr); +} + +unsigned int rpmdbIndexIteratorTagNum(rpmdbIndexIterator ii, unsigned int nr) +{ + if (!ii || !ii->ii_set) + return 0; + if (dbiIndexSetCount(ii->ii_set) <= nr) + return 0; + return dbiIndexRecordFileNumber(ii->ii_set, nr); +} + +rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii) +{ + rpmdbIndexIterator * prev, next; + int xx; + + if (ii == NULL) + return ii; + + prev = &rpmiiRock; + while ((next = *prev) != NULL && next != ii) + prev = &next->ii_next; + if (next) { + *prev = next->ii_next; + next->ii_next = NULL; + } + + if (ii->ii_dbc) + xx = dbiCclose(ii->ii_dbi, ii->ii_dbc, 0); + ii->ii_dbc = NULL; + ii->ii_dbi = NULL; + rpmdbClose(ii->ii_db); + ii->ii_set = dbiFreeIndexSet(ii->ii_set); + + ii = _free(ii); + return ii; +} + + + + +static void logAddRemove(const char *dbiname, int removing, rpmtd tagdata) +{ + rpm_count_t c = rpmtdCount(tagdata); + if (c == 1 && rpmtdType(tagdata) == RPM_STRING_TYPE) { + rpmlog(RPMLOG_DEBUG, "%s \"%s\" %s %s index.\n", + removing ? "removing" : "adding", rpmtdGetString(tagdata), + removing ? "from" : "to", dbiname); + } else if (c > 0) { + rpmlog(RPMLOG_DEBUG, "%s %d entries %s %s index.\n", + removing ? "removing" : "adding", c, + removing ? "from" : "to", dbiname); + } +} + +/* Update primary Packages index. NULL hdr means remove */ +static int updatePackages(dbiIndex dbi, unsigned int hdrNum, DBT *hdr) +{ + union _dbswap mi_offset; + int rc = 0; + int xx; + DBC * dbcursor = NULL; + DBT key; + + if (dbi == NULL || hdrNum == 0) + return 1; + + memset(&key, 0, sizeof(key)); + + xx = dbiCopen(dbi, &dbcursor, DB_WRITECURSOR); + + mi_offset.ui = hdrNum; + if (dbiByteSwapped(dbi) == 1) + _DBSWAP(mi_offset); + key.data = (void *) &mi_offset; + key.size = sizeof(mi_offset.ui); + + if (hdr) { + rc = dbiPut(dbi, dbcursor, &key, hdr, DB_KEYLAST); + if (rc) { + rpmlog(RPMLOG_ERR, + _("error(%d) adding header #%d record\n"), rc, hdrNum); + } + } else { + DBT data; + + memset(&data, 0, sizeof(data)); + rc = dbiGet(dbi, dbcursor, &key, &data, DB_SET); + if (rc) { + rpmlog(RPMLOG_ERR, + _("error(%d) removing header #%d record\n"), rc, hdrNum); + } else + rc = dbiDel(dbi, dbcursor, &key, &data, 0); + } + + xx = dbiCclose(dbi, dbcursor, DB_WRITECURSOR); + xx = dbiSync(dbi, 0); + + return rc; +} + +int rpmdbRemove(rpmdb db, unsigned int hdrNum) +{ + dbiIndex dbi; + Header h; + sigset_t signalMask; + int ret = 0; + + if (db == NULL) + return 0; + + h = rpmdbGetHeaderAt(db, hdrNum); + + if (h == NULL) { + rpmlog(RPMLOG_ERR, _("%s: cannot read header at 0x%x\n"), + "rpmdbRemove", hdrNum); + return 1; + } else { + char *nevra = headerGetAsString(h, RPMTAG_NEVRA); + rpmlog(RPMLOG_DEBUG, " --- h#%8u %s\n", hdrNum, nevra); + free(nevra); + } + + (void) blockSignals(&signalMask); + + dbi = rpmdbOpenIndex(db, RPMDBI_PACKAGES, 0); + /* Remove header from primary index */ + ret = updatePackages(dbi, hdrNum, NULL); + + /* Remove associated data from secondary indexes */ + if (ret == 0) { + struct dbiIndexItem rec = { .hdrNum = hdrNum, .tagNum = 0 }; + int rc = 0; + DBC * dbcursor = NULL; + DBT key, data; + + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + + for (int dbix = 1; dbix < dbiTagsMax; dbix++) { + rpmDbiTag rpmtag = dbiTags[dbix]; + int xx = 0; + struct rpmtd_s tagdata; + + if (!(dbi = rpmdbOpenIndex(db, rpmtag, 0))) + continue; + + if (!headerGet(h, rpmtag, &tagdata, HEADERGET_MINMEM)) + continue; + + xx = dbiCopen(dbi, &dbcursor, DB_WRITECURSOR); + + logAddRemove(dbiName(dbi), 1, &tagdata); + while (rpmtdNext(&tagdata) >= 0) { + dbiIndexSet set; + int freedata = 0; + + if (!td2key(&tagdata, &key, &freedata)) { + continue; + } + + /* XXX + * This is almost right, but, if there are duplicate tag + * values, there will be duplicate attempts to remove + * the header instance. It's faster to just ignore errors + * than to do things correctly. + */ + + /* + * XXX with duplicates, an accurate data value and + * DB_GET_BOTH is needed. + * */ + set = NULL; + + rc = dbiGet(dbi, dbcursor, &key, &data, DB_SET); + if (rc == 0) { /* success */ + (void) dbt2set(dbi, &data, &set); + } else if (rc == DB_NOTFOUND) { /* not found */ + goto cont; + } else { /* error */ + rpmlog(RPMLOG_ERR, + _("error(%d) setting \"%s\" records from %s index\n"), + rc, (char*)key.data, dbiName(dbi)); + ret += 1; + goto cont; + } + + rc = dbiPruneSet(set, &rec, 1, sizeof(rec), 1); + + /* If nothing was pruned, then don't bother updating. */ + if (rc) { + set = dbiFreeIndexSet(set); + goto cont; + } + + if (set->count > 0) { + (void) set2dbt(dbi, &data, set); + rc = dbiPut(dbi, dbcursor, &key, &data, DB_KEYLAST); + if (rc) { + rpmlog(RPMLOG_ERR, + _("error(%d) storing record \"%s\" into %s\n"), + rc, (char*)key.data, dbiName(dbi)); + ret += 1; + } + data.data = _free(data.data); + data.size = 0; + } else { + rc = dbiDel(dbi, dbcursor, &key, &data, 0); + if (rc) { + rpmlog(RPMLOG_ERR, + _("error(%d) removing record \"%s\" from %s\n"), + rc, (char*)key.data, dbiName(dbi)); + ret += 1; + } + } + set = dbiFreeIndexSet(set); +cont: + if (freedata) { + free(key.data); + } + } + + xx = dbiCclose(dbi, dbcursor, DB_WRITECURSOR); + dbcursor = NULL; + + xx = dbiSync(dbi, 0); + + rpmtdFreeData(&tagdata); + } + } + + (void) unblockSignals(&signalMask); + + h = headerFree(h); + + /* XXX return ret; */ + return 0; +} + +/* Get current header instance number or try to allocate a new one */ +static unsigned int pkgInstance(dbiIndex dbi, int alloc) +{ + unsigned int hdrNum = 0; + + if (dbi != NULL && dbiType(dbi) == DBI_PRIMARY) { + DBC * dbcursor = NULL; + DBT key, data; + unsigned int firstkey = 0; + union _dbswap mi_offset; + int ret; + + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + + ret = dbiCopen(dbi, &dbcursor, alloc ? DB_WRITECURSOR : 0); + + /* Key 0 holds the current largest instance, fetch it */ + key.data = &firstkey; + key.size = sizeof(firstkey); + ret = dbiGet(dbi, dbcursor, &key, &data, DB_SET); + + if (ret == 0 && data.data) { + memcpy(&mi_offset, data.data, sizeof(mi_offset.ui)); + if (dbiByteSwapped(dbi) == 1) + _DBSWAP(mi_offset); + hdrNum = mi_offset.ui; + } + + if (alloc) { + /* Rather complicated "increment by one", bswapping as needed */ + ++hdrNum; + mi_offset.ui = hdrNum; + if (dbiByteSwapped(dbi) == 1) + _DBSWAP(mi_offset); + if (ret == 0 && data.data) { + memcpy(data.data, &mi_offset, sizeof(mi_offset.ui)); + } else { + data.data = &mi_offset; + data.size = sizeof(mi_offset.ui); + } + + /* Unless we manage to insert the new instance number, we failed */ + ret = dbiPut(dbi, dbcursor, &key, &data, DB_KEYLAST); + if (ret) { + hdrNum = 0; + rpmlog(RPMLOG_ERR, + _("error(%d) allocating new package instance\n"), ret); + } + + ret = dbiSync(dbi, 0); + } + ret = dbiCclose(dbi, dbcursor, 0); + } + + return hdrNum; +} + +/* Add data to secondary index */ +static int addToIndex(dbiIndex dbi, rpmTagVal rpmtag, unsigned int hdrNum, Header h) +{ + int xx, i, rc = 0; + struct rpmtd_s tagdata, reqflags; + DBC * dbcursor = NULL; + + switch (rpmtag) { + case RPMTAG_REQUIRENAME: + headerGet(h, RPMTAG_REQUIREFLAGS, &reqflags, HEADERGET_MINMEM); + /* fallthrough */ + default: + headerGet(h, rpmtag, &tagdata, HEADERGET_MINMEM); + break; + } + + if (rpmtdCount(&tagdata) == 0) { + if (rpmtag != RPMTAG_GROUP) + goto exit; + + /* XXX preserve legacy behavior */ + tagdata.type = RPM_STRING_TYPE; + tagdata.data = (const char **) "Unknown"; + tagdata.count = 1; + } + + xx = dbiCopen(dbi, &dbcursor, DB_WRITECURSOR); + + logAddRemove(dbiName(dbi), 0, &tagdata); + while ((i = rpmtdNext(&tagdata)) >= 0) { + dbiIndexSet set; + int freedata = 0, j; + DBT key, data; + /* Include the tagNum in all indices (only files use though) */ + struct dbiIndexItem rec = { .hdrNum = hdrNum, .tagNum = i }; + + switch (rpmtag) { + case RPMTAG_REQUIRENAME: { + /* Filter out install prerequisites. */ + rpm_flag_t *rflag = rpmtdNextUint32(&reqflags); + if (rflag && isInstallPreReq(*rflag) && + !isErasePreReq(*rflag)) + continue; + break; + } + case RPMTAG_TRIGGERNAME: + if (i > 0) { /* don't add duplicates */ + const char **tnames = tagdata.data; + const char *str = rpmtdGetString(&tagdata); + for (j = 0; j < i; j++) { + if (rstreq(str, tnames[j])) + break; + } + if (j < i) + continue; + } + break; + default: + break; + } + + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + + if (!td2key(&tagdata, &key, &freedata)) { + continue; + } + + /* + * XXX with duplicates, an accurate data value and + * DB_GET_BOTH is needed. + */ + + set = NULL; + + rc = dbiGet(dbi, dbcursor, &key, &data, DB_SET); + if (rc == 0) { /* success */ + /* With duplicates, cursor is positioned, discard the record. */ + if (!dbi->dbi_permit_dups) + (void) dbt2set(dbi, &data, &set); + } else if (rc != DB_NOTFOUND) { /* error */ + rpmlog(RPMLOG_ERR, + _("error(%d) getting \"%s\" records from %s index\n"), + rc, (char*)key.data, dbiName(dbi)); + rc += 1; + goto cont; + } + + if (set == NULL) /* not found or duplicate */ + set = xcalloc(1, sizeof(*set)); + + (void) dbiAppendSet(set, &rec, 1, sizeof(rec), 0); + + (void) set2dbt(dbi, &data, set); + rc = dbiPut(dbi, dbcursor, &key, &data, DB_KEYLAST); + + if (rc) { + rpmlog(RPMLOG_ERR, + _("error(%d) storing record %s into %s\n"), + rc, (char*)key.data, dbiName(dbi)); + rc += 1; + } + data.data = _free(data.data); + data.size = 0; + set = dbiFreeIndexSet(set); +cont: + if (freedata) { + free(key.data); + } + } + + xx = dbiCclose(dbi, dbcursor, DB_WRITECURSOR); + dbcursor = NULL; + + xx = dbiSync(dbi, 0); + +exit: + rpmtdFreeData(&tagdata); + return rc; +} + +int rpmdbAdd(rpmdb db, Header h) +{ + DBT hdr; + sigset_t signalMask; + dbiIndex dbi; + unsigned int hdrNum = 0; + int ret = 0; + int hdrOk; + + if (db == NULL) + return 0; + + memset(&hdr, 0, sizeof(hdr)); + + hdr.size = headerSizeof(h, HEADER_MAGIC_NO); + hdr.data = headerUnload(h); + hdrOk = (hdr.data != NULL && hdr.size > 0); + + if (!hdrOk) { + ret = -1; + goto exit; + } + + (void) blockSignals(&signalMask); + + dbi = rpmdbOpenIndex(db, RPMDBI_PACKAGES, 0); + hdrNum = pkgInstance(dbi, 1); + + /* Add header to primary index */ + ret = updatePackages(dbi, hdrNum, &hdr); + + /* Add associated data to secondary indexes */ + if (ret == 0) { + for (int dbix = 1; dbix < dbiTagsMax; dbix++) { + rpmDbiTag rpmtag = dbiTags[dbix]; + + if (!(dbi = rpmdbOpenIndex(db, rpmtag, 0))) + continue; + + ret += addToIndex(dbi, rpmtag, hdrNum, h); + } + } + + /* If everthing ok, mark header as installed now */ + if (ret == 0) { + headerSetInstance(h, hdrNum); + } + +exit: + free(hdr.data); + (void) unblockSignals(&signalMask); + + return ret; +} + +/* + * Remove DB4 environment (and lock), ie the equivalent of + * rm -f //__db.??? + * Environment files not existing is not an error, failure to unlink is, + * return zero on success. + * TODO/FIX: push this down to db3.c where it belongs + */ +static int cleanDbenv(const char *prefix, const char *dbpath) +{ + ARGV_t paths = NULL, p; + int rc = 0; + char *pattern = rpmGetPath(prefix, "/", dbpath, "/__db.???", NULL); + + if (rpmGlob(pattern, NULL, &paths) == 0) { + for (p = paths; *p; p++) { + rc += unlink(*p); + } + argvFree(paths); + } + free(pattern); + return rc; +} + +static int rpmdbRemoveDatabase(const char * prefix, const char * dbpath) +{ + int i; + char *path; + int xx; + + for (i = 0; i < dbiTagsMax; i++) { + const char * base = rpmTagGetName(dbiTags[i]); + path = rpmGetPath(prefix, "/", dbpath, "/", base, NULL); + if (access(path, F_OK) == 0) + xx = unlink(path); + free(path); + } + cleanDbenv(prefix, dbpath); + + path = rpmGetPath(prefix, "/", dbpath, NULL); + xx = rmdir(path); + free(path); + + return 0; +} + +static int rpmdbMoveDatabase(const char * prefix, + const char * olddbpath, const char * newdbpath) +{ + int i; + struct stat st; + int rc = 0; + int xx; + int selinux = is_selinux_enabled() && (matchpathcon_init(NULL) != -1); + sigset_t sigMask; + + blockSignals(&sigMask); + for (i = 0; i < dbiTagsMax; i++) { + rpmDbiTag rpmtag = dbiTags[i]; + const char *base = rpmTagGetName(rpmtag); + char *src = rpmGetPath(prefix, "/", olddbpath, "/", base, NULL); + char *dest = rpmGetPath(prefix, "/", newdbpath, "/", base, NULL); + + if (access(src, F_OK) != 0) + goto cont; + + /* + * Restore uid/gid/mode/security context if possible. + */ + if (stat(dest, &st) < 0) + if (stat(src, &st) < 0) + goto cont; + + if ((xx = rename(src, dest)) != 0) { + rc = 1; + goto cont; + } + xx = chown(dest, st.st_uid, st.st_gid); + xx = chmod(dest, (st.st_mode & 07777)); + + if (selinux) { + security_context_t scon = NULL; + if (matchpathcon(dest, st.st_mode, &scon) != -1) { + (void) setfilecon(dest, scon); + freecon(scon); + } + } + +cont: + free(src); + free(dest); + } + + cleanDbenv(prefix, olddbpath); + cleanDbenv(prefix, newdbpath); + + unblockSignals(&sigMask); + + if (selinux) { + (void) matchpathcon_fini(); + } + return rc; +} + +int rpmdbRebuild(const char * prefix, rpmts ts, + rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg)) +{ + rpmdb olddb; + char * dbpath = NULL; + char * rootdbpath = NULL; + rpmdb newdb; + char * newdbpath = NULL; + char * newrootdbpath = NULL; + int nocleanup = 1; + int failed = 0; + int removedir = 0; + int rc = 0, xx; + + dbpath = rpmGetPath("%{?_dbpath}", NULL); + if (rstreq(dbpath, "")) { + rpmlog(RPMLOG_ERR, _("no dbpath has been set")); + rc = 1; + goto exit; + } + rootdbpath = rpmGetPath(prefix, dbpath, NULL); + + newdbpath = rpmGetPath("%{?_dbpath_rebuild}", NULL); + if (rstreq(newdbpath, "") || rstreq(newdbpath, dbpath)) { + newdbpath = _free(newdbpath); + rasprintf(&newdbpath, "%srebuilddb.%d", dbpath, (int) getpid()); + nocleanup = 0; + } + newrootdbpath = rpmGetPath(prefix, newdbpath, NULL); + + rpmlog(RPMLOG_DEBUG, "rebuilding database %s into %s\n", + rootdbpath, newrootdbpath); + + if (mkdir(newrootdbpath, 0755)) { + rpmlog(RPMLOG_ERR, _("failed to create directory %s: %s\n"), + newrootdbpath, strerror(errno)); + rc = 1; + goto exit; + } + removedir = 1; + + if (openDatabase(prefix, dbpath, &olddb, O_RDONLY, 0644, 0)) { + rc = 1; + goto exit; + } + if (openDatabase(prefix, newdbpath, &newdb, + (O_RDWR | O_CREAT), 0644, RPMDB_FLAG_REBUILD)) { + rc = 1; + goto exit; + } + + { Header h = NULL; + rpmdbMatchIterator mi; +#define _RECNUM rpmdbGetIteratorOffset(mi) + + mi = rpmdbInitIterator(olddb, RPMDBI_PACKAGES, NULL, 0); + if (ts && hdrchk) + (void) rpmdbSetHdrChk(mi, ts, hdrchk); + + while ((h = rpmdbNextIterator(mi)) != NULL) { + + /* let's sanity check this record a bit, otherwise just skip it */ + if (!(headerIsEntry(h, RPMTAG_NAME) && + headerIsEntry(h, RPMTAG_VERSION) && + headerIsEntry(h, RPMTAG_RELEASE) && + headerIsEntry(h, RPMTAG_BUILDTIME))) + { + rpmlog(RPMLOG_ERR, + _("header #%u in the database is bad -- skipping.\n"), + _RECNUM); + continue; + } + + /* Deleted entries are eliminated in legacy headers by copy. */ + { Header nh = (headerIsEntry(h, RPMTAG_HEADERIMAGE) + ? headerCopy(h) : NULL); + rc = rpmdbAdd(newdb, (nh ? nh : h)); + nh = headerFree(nh); + } + + if (rc) { + rpmlog(RPMLOG_ERR, + _("cannot add record originally at %u\n"), _RECNUM); + failed = 1; + break; + } + } + + mi = rpmdbFreeIterator(mi); + + } + + xx = rpmdbClose(olddb); + xx = rpmdbClose(newdb); + + if (failed) { + rpmlog(RPMLOG_WARNING, + _("failed to rebuild database: original database " + "remains in place\n")); + + xx = rpmdbRemoveDatabase(prefix, newdbpath); + rc = 1; + goto exit; + } else if (!nocleanup) { + if (rpmdbMoveDatabase(prefix, newdbpath, dbpath)) { + rpmlog(RPMLOG_ERR, _("failed to replace old database with new " + "database!\n")); + rpmlog(RPMLOG_ERR, _("replace files in %s with files from %s " + "to recover"), dbpath, newdbpath); + rc = 1; + goto exit; + } + } + rc = 0; + +exit: + if (removedir && !(rc == 0 && nocleanup)) { + if (rmdir(newrootdbpath)) + rpmlog(RPMLOG_ERR, _("failed to remove directory %s: %s\n"), + newrootdbpath, strerror(errno)); + } + free(newdbpath); + free(dbpath); + free(newrootdbpath); + free(rootdbpath); + + return rc; +} diff --git a/lib/rpmdb.h b/lib/rpmdb.h new file mode 100644 index 0000000..3c7aac2 --- /dev/null +++ b/lib/rpmdb.h @@ -0,0 +1,215 @@ +#ifndef H_RPMDB +#define H_RPMDB + +/** \ingroup rpmdb dbi + * \file lib/rpmdb.h + * Access RPM indices using Berkeley DB interface(s). + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Tag value pattern match mode. + */ +typedef enum rpmMireMode_e { + RPMMIRE_DEFAULT = 0, /*!< regex with \., .* and ^...$ added */ + RPMMIRE_STRCMP = 1, /*!< strings using strcmp(3) */ + RPMMIRE_REGEX = 2, /*!< regex(7) patterns through regcomp(3) */ + RPMMIRE_GLOB = 3 /*!< glob(7) patterns through fnmatch(3) */ +} rpmMireMode; + +typedef enum rpmdbOpX_e { + RPMDB_OP_DBGET = 1, + RPMDB_OP_DBPUT = 2, + RPMDB_OP_DBDEL = 3, + RPMDB_OP_MAX = 4 +} rpmdbOpX; + +/** \ingroup rpmdb + * Retrieve operation timestamp from rpm database. + * @param db rpm database + * @param opx operation timestamp index + * @return pointer to operation timestamp. + */ +rpmop rpmdbOp(rpmdb db, rpmdbOpX opx); + +/** \ingroup rpmdb + * Open all database indices. + * @param db rpm database + * @return 0 on success + */ +int rpmdbOpenAll (rpmdb db); + +/** \ingroup rpmdb + * Return number of instances of package in rpm database. + * @param db rpm database + * @param name rpm package name + * @return number of instances + */ +int rpmdbCountPackages(rpmdb db, const char * name); + +/** \ingroup rpmdb + * Return header join key for current position of rpm database iterator. + * @param mi rpm database iterator + * @return current header join key + */ +unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi); + +/** \ingroup rpmdb + * Return number of elements in rpm database iterator. + * @param mi rpm database iterator + * @return number of elements + */ +int rpmdbGetIteratorCount(rpmdbMatchIterator mi); + +/** \ingroup rpmdb + */ +unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi); + +/** \ingroup rpmdb + * Append items to set of package instances to iterate. + * @param mi rpm database iterator + * @param hdrNums array of package instances + * @param nHdrNums number of elements in array + * @return 0 on success, 1 on failure (bad args) + */ +int rpmdbAppendIterator(rpmdbMatchIterator mi, + const int * hdrNums, int nHdrNums); + +/** \ingroup rpmdb + * Add pattern to iterator selector. + * @param mi rpm database iterator + * @param tag rpm tag + * @param mode type of pattern match + * @param pattern pattern to match + * @return 0 on success + */ +int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTagVal tag, + rpmMireMode mode, const char * pattern); + +/** \ingroup rpmdb + * Prepare iterator for lazy writes. + * @note Must be called before rpmdbNextIterator() with CDB model database. + * @param mi rpm database iterator + * @param rewrite new value of rewrite + * @return previous value + */ +int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite); + +/** \ingroup rpmdb + * Modify iterator to mark header for lazy write on release. + * @param mi rpm database iterator + * @param modified new value of modified + * @return previous value + */ +int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified); + +/** \ingroup rpmdb + * Modify iterator to verify retrieved header blobs. + * @param mi rpm database iterator + * @param ts transaction set + * @param (*hdrchk) headerCheck() vector + * @return 0 always + */ +int rpmdbSetHdrChk(rpmdbMatchIterator mi, rpmts ts, + rpmRC (*hdrchk) (rpmts ts, const void * uh, size_t uc, char ** msg)); + +/** \ingroup rpmdb + * Return database iterator. + * @param db rpm database + * @param rpmtag database index tag + * @param keyp key data (NULL for sequential access) + * @param keylen key data length (0 will use strlen(keyp)) + * @return NULL on failure + */ +rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag, + const void * keyp, size_t keylen); + +/** \ingroup rpmdb + * Return next package header from iteration. + * @param mi rpm database iterator + * @return NULL on end of iteration. + */ +Header rpmdbNextIterator(rpmdbMatchIterator mi); + +/** \ingroup rpmdb + * Check for and exit on termination signals. + */ +int rpmdbCheckSignals(void); + +/** \ingroup rpmdb + * Check rpmdb signal handler for trapped signal and/or requested exit, + * clean up any open iterators and databases on termination condition. + * On non-zero exit any open references to rpmdb are invalid and cannot + * be accessed anymore, calling process should terminate immediately. + * @param terminate 0 to only check for signals, 1 to terminate anyway + * @return 0 to continue, 1 if termination cleanup was done. + */ +int rpmdbCheckTerminate(int terminate); + +/** \ingroup rpmdb + * Destroy rpm database iterator. + * @param mi rpm database iterator + * @return NULL always + */ +rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi); + +/** \ingroup rpmdb + * Get an iterator for an index + * @param db rpm database + * @param rpmtag the index to iterate over + * @return the index iterator + */ +rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag); + +/** \ingroup rpmdb + * Get the next key - Warning! Keys are not zero terminated! + * Binary tags may even contain zero bytes + * @param ii index iterator + * @param key adress to save the pointer to the key + * @param keylen adress to save the length of the key to + * @return 0 on success; != 0 on error or end of index + */ +int rpmdbIndexIteratorNext(rpmdbIndexIterator ii, const void ** key, size_t * keylen); + +/** \ingroup rpmdb + * Get number of entries for current key + * @param ii index iterator + * @return number of entries. 0 on error. + */ +unsigned int rpmdbIndexIteratorNumPkgs(rpmdbIndexIterator ii); + +/** \ingroup rpmdb + * Get package offset of entry + * @param ii index iterator + * @param nr number of the entry + * @return db offset of pkg + */ +unsigned int rpmdbIndexIteratorPkgOffset(rpmdbIndexIterator ii, unsigned int nr); + +/** \ingroup rpmdb + * Get tag number of entry + * @param ii index iterator + * @param nr number of the entry + * @return number of tag within the package + */ +unsigned int rpmdbIndexIteratorTagNum(rpmdbIndexIterator ii, unsigned int nr); + +/** \ingroup rpmdb + * Free index iterator + * @param ii index iterator + * return NULL + */ +rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii); + + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMDB */ diff --git a/lib/rpmdb_internal.h b/lib/rpmdb_internal.h new file mode 100644 index 0000000..de70282 --- /dev/null +++ b/lib/rpmdb_internal.h @@ -0,0 +1,155 @@ +#ifndef H_RPMDB_INTERNAL +#define H_RPMDB_INTERNAL + +#include +#include + +#include +#include +#include +#include "lib/backend/dbi.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmdb + * Reference a database instance. + * @param db rpm database + * @return new rpm database reference + */ +rpmdb rpmdbLink(rpmdb db); + +/** \ingroup rpmdb + * Open rpm database. + * @param prefix path to top of install tree + * @retval dbp address of rpm database + * @param mode open(2) flags: O_RDWR or O_RDONLY (O_CREAT also) + * @param perms database permissions + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int rpmdbOpen (const char * prefix, rpmdb * dbp, int mode, int perms); + +/** \ingroup rpmdb + * Initialize database. + * @param prefix path to top of install tree + * @param perms database permissions + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int rpmdbInit(const char * prefix, int perms); + +/** \ingroup rpmdb + * Close all database indices and free rpmdb. + * @param db rpm database + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int rpmdbClose (rpmdb db); + +/** \ingroup rpmdb + * Sync all database indices. + * @param db rpm database + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int rpmdbSync (rpmdb db); + +/** \ingroup rpmdb + * Rebuild database indices from package headers. + * @param prefix path to top of install tree + * @param ts transaction set (or NULL) + * @param (*hdrchk) headerCheck() vector (or NULL) + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int rpmdbRebuild(const char * prefix, rpmts ts, + rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg)); + +/** \ingroup rpmdb + * Verify database components. + * @param prefix path to top of install tree + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int rpmdbVerify(const char * prefix); + +/** \ingroup rpmdb + * Add package header to rpm database and indices. + * @param db rpm database + * @param h header + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int rpmdbAdd(rpmdb db, Header h); + +/** \ingroup rpmdb + * Remove package header from rpm database and indices. + * @param db rpm database + * @param hdrNum package instance number in database + * @return 0 on success + */ +RPM_GNUC_INTERNAL +int rpmdbRemove(rpmdb db, unsigned int hdrNum); + +/** \ingroup rpmdb + * Return rpmdb home directory (depending on chroot state) + * param db rpmdb handle + * return db home directory (or NULL on error) + */ +RPM_GNUC_INTERNAL +const char *rpmdbHome(rpmdb db); + +/** \ingroup rpmdb + * Return database iterator. + * @param mi rpm database iterator + * @param keyp key data (NULL for sequential access) + * @param keylen key data length (0 will use strlen(keyp)) + * @return 0 on success + */ +int rpmdbExtendIterator(rpmdbMatchIterator mi, + const void * keyp, size_t keylen); + +/** \ingroup rpmdb + * sort the iterator by (recnum, filenum) + * Return database iterator. + * @param mi rpm database iterator + */ +void rpmdbSortIterator(rpmdbMatchIterator mi); + +/** \ingroup rpmdb + * Remove items from set of package instances to iterate. + * @note Sorted hdrNums are always passed in rpmlib. + * @param mi rpm database iterator + * @param hdrNums hash of package instances + * @return 0 on success, 1 on failure (bad args) + */ +int rpmdbPruneIterator(rpmdbMatchIterator mi, intHash hdrNums); + +/** \ingroup rpmdb + * Create a new, empty match iterator (for purposes of extending it + * through other means) + * @param db rpm database + * @param dbitag database index tag + * @return empty match iterator + */ +RPM_GNUC_INTERNAL +rpmdbMatchIterator rpmdbNewIterator(rpmdb db, rpmDbiTagVal dbitag); + +#ifndef __APPLE__ +/** + * * Mergesort, same arguments as qsort(2). + * */ +RPM_GNUC_INTERNAL +int mergesort(void *base, size_t nmemb, size_t size, + int (*cmp) (const void *, const void *)); +#else +/* mergesort is defined in stdlib.h on Mac OS X */ +#endif /* __APPLE__ */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/rpmds.c b/lib/rpmds.c new file mode 100644 index 0000000..c9c3b5d --- /dev/null +++ b/lib/rpmds.c @@ -0,0 +1,933 @@ +/** \ingroup rpmdep + * \file lib/rpmds.c + */ +#include "system.h" + +#include +#include /* rpmvercmp */ +#include +#include +#include + +#include "debug.h" + +int _rpmds_debug = 0; + +int _rpmds_nopromote = 1; + +/** + * A package dependency set. + */ +struct rpmds_s { + const char * Type; /*!< Tag name. */ + char * DNEVR; /*!< Formatted dependency string. */ + const char ** N; /*!< Name. */ + const char ** EVR; /*!< Epoch-Version-Release. */ + rpmsenseFlags * Flags; /*!< Bit(s) identifying context/comparison. */ + rpm_color_t * Color; /*!< Bit(s) calculated from file color(s). */ + rpmTagVal tagN; /*!< Header tag. */ + int32_t Count; /*!< No. of elements */ + unsigned int instance; /*!< From rpmdb instance? */ + int i; /*!< Element index. */ + unsigned l; /*!< Low element (bsearch). */ + unsigned u; /*!< High element (bsearch). */ + int nopromote; /*!< Don't promote Epoch: in rpmdsCompare()? */ + int nrefs; /*!< Reference count. */ +}; + +static const char ** rpmdsDupArgv(const char ** argv, int argc); + +static int dsType(rpmTagVal tag, + const char ** Type, rpmTagVal * tagEVR, rpmTagVal * tagF) +{ + int rc = 0; + const char *t = NULL; + rpmTagVal evr = RPMTAG_NOT_FOUND; + rpmTagVal f = RPMTAG_NOT_FOUND; + + if (tag == RPMTAG_PROVIDENAME) { + t = "Provides"; + evr = RPMTAG_PROVIDEVERSION; + f = RPMTAG_PROVIDEFLAGS; + } else if (tag == RPMTAG_REQUIRENAME) { + t = "Requires"; + evr = RPMTAG_REQUIREVERSION; + f = RPMTAG_REQUIREFLAGS; + } else if (tag == RPMTAG_CONFLICTNAME) { + t = "Conflicts"; + evr = RPMTAG_CONFLICTVERSION; + f = RPMTAG_CONFLICTFLAGS; + } else if (tag == RPMTAG_OBSOLETENAME) { + t = "Obsoletes"; + evr = RPMTAG_OBSOLETEVERSION; + f = RPMTAG_OBSOLETEFLAGS; + } else if (tag == RPMTAG_ORDERNAME) { + t = "Order"; + evr = RPMTAG_ORDERVERSION; + f = RPMTAG_ORDERFLAGS; + } else if (tag == RPMTAG_TRIGGERNAME) { + t = "Trigger"; + evr = RPMTAG_TRIGGERVERSION; + f = RPMTAG_TRIGGERFLAGS; + } else { + rc = 1; + } + if (Type) *Type = t; + if (tagEVR) *tagEVR = evr; + if (tagF) *tagF = f; + return rc; +} + +static rpmds rpmdsUnlink(rpmds ds) +{ + if (ds) + ds->nrefs--; + return NULL; +} + +rpmds rpmdsLink(rpmds ds) +{ + if (ds) + ds->nrefs++; + return ds; +} + +rpmds rpmdsFree(rpmds ds) +{ + rpmTagVal tagEVR, tagF; + + if (ds == NULL) + return NULL; + + if (ds->nrefs > 1) + return rpmdsUnlink(ds); + + if (dsType(ds->tagN, NULL, &tagEVR, &tagF)) + return NULL; + + if (ds->Count > 0) { + ds->N = _free(ds->N); + ds->EVR = _free(ds->EVR); + ds->Flags = _free(ds->Flags); + } + + ds->DNEVR = _free(ds->DNEVR); + ds->Color = _free(ds->Color); + + (void) rpmdsUnlink(ds); + memset(ds, 0, sizeof(*ds)); /* XXX trash and burn */ + ds = _free(ds); + return NULL; +} + +rpmds rpmdsNew(Header h, rpmTagVal tagN, int flags) +{ + rpmTagVal tagEVR, tagF; + rpmds ds = NULL; + const char * Type; + struct rpmtd_s names; + headerGetFlags hgflags = HEADERGET_ALLOC|HEADERGET_ARGV; + + if (dsType(tagN, &Type, &tagEVR, &tagF)) + goto exit; + + if (headerGet(h, tagN, &names, hgflags) && rpmtdCount(&names) > 0) { + struct rpmtd_s evr, flags; + + ds = xcalloc(1, sizeof(*ds)); + ds->Type = Type; + ds->i = -1; + ds->DNEVR = NULL; + ds->tagN = tagN; + ds->N = names.data; + ds->Count = rpmtdCount(&names); + ds->nopromote = _rpmds_nopromote; + ds->instance = headerGetInstance(h); + + headerGet(h, tagEVR, &evr, hgflags); + ds->EVR = evr.data; + headerGet(h, tagF, &flags, hgflags); + ds->Flags = flags.data; + /* ensure rpmlib() requires always have RPMSENSE_RPMLIB flag set */ + if (tagN == RPMTAG_REQUIRENAME && ds->Flags) { + for (int i = 0; i < ds->Count; i++) { + if (!(ds->Flags[i] & RPMSENSE_RPMLIB) && + rstreqn(ds->N[i], "rpmlib(", sizeof("rpmlib(")-1)) + ds->Flags[i] |= RPMSENSE_RPMLIB; + } + } + + ds = rpmdsLink(ds); + } + +exit: + return ds; +} + +char * rpmdsNewDNEVR(const char * dspfx, const rpmds ds) +{ + char * tbuf, * t; + size_t nb; + + nb = 0; + if (dspfx) nb += strlen(dspfx) + 1; + if (ds->N[ds->i]) nb += strlen(ds->N[ds->i]); + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ + if (ds->Flags != NULL && (ds->Flags[ds->i] & RPMSENSE_SENSEMASK)) { + if (nb) nb++; + if (ds->Flags[ds->i] & RPMSENSE_LESS) nb++; + if (ds->Flags[ds->i] & RPMSENSE_GREATER) nb++; + if (ds->Flags[ds->i] & RPMSENSE_EQUAL) nb++; + } + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ + if (ds->EVR != NULL && ds->EVR[ds->i] && *ds->EVR[ds->i]) { + if (nb) nb++; + nb += strlen(ds->EVR[ds->i]); + } + + t = tbuf = xmalloc(nb + 1); + if (dspfx) { + t = stpcpy(t, dspfx); + *t++ = ' '; + } + if (ds->N[ds->i]) + t = stpcpy(t, ds->N[ds->i]); + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ + if (ds->Flags != NULL && (ds->Flags[ds->i] & RPMSENSE_SENSEMASK)) { + if (t != tbuf) *t++ = ' '; + if (ds->Flags[ds->i] & RPMSENSE_LESS) *t++ = '<'; + if (ds->Flags[ds->i] & RPMSENSE_GREATER) *t++ = '>'; + if (ds->Flags[ds->i] & RPMSENSE_EQUAL) *t++ = '='; + } + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ + if (ds->EVR != NULL && ds->EVR[ds->i] && *ds->EVR[ds->i]) { + if (t != tbuf) *t++ = ' '; + t = stpcpy(t, ds->EVR[ds->i]); + } + *t = '\0'; + return tbuf; +} + +static rpmds singleDS(rpmTagVal tagN, const char * N, const char * EVR, + rpmsenseFlags Flags, unsigned int instance) +{ + rpmds ds = NULL; + const char * Type; + + if (dsType(tagN, &Type, NULL, NULL)) + goto exit; + + ds = xcalloc(1, sizeof(*ds)); + ds->Type = Type; + ds->tagN = tagN; + ds->Count = 1; + ds->nopromote = _rpmds_nopromote; + ds->instance = instance; + + ds->N = rpmdsDupArgv(&N, 1); + ds->EVR = rpmdsDupArgv(&EVR, 1); + + ds->Flags = xmalloc(sizeof(*ds->Flags)); + ds->Flags[0] = Flags; + ds->i = 0; + +exit: + return rpmdsLink(ds); +} + +rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags) +{ + char *evr = headerGetAsString(h, RPMTAG_EVR); + rpmds ds = singleDS(tagN, headerGetString(h, RPMTAG_NAME), + evr, Flags, headerGetInstance(h)); + free(evr); + return ds; +} + +rpmds rpmdsSingle(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlags Flags) +{ + return singleDS(tagN, N, EVR, Flags, 0); +} + +rpmds rpmdsCurrent(rpmds ds) +{ + rpmds cds = NULL; + if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) { + cds = singleDS(ds->tagN, ds->N[ds->i], ds->EVR[ds->i], + ds->Flags[ds->i], ds->instance); + } + return cds; +} + +int rpmdsCount(const rpmds ds) +{ + return (ds != NULL ? ds->Count : 0); +} + +int rpmdsIx(const rpmds ds) +{ + return (ds != NULL ? ds->i : -1); +} + +int rpmdsSetIx(rpmds ds, int ix) +{ + int i = -1; + + if (ds != NULL) { + i = ds->i; + ds->i = ix; + ds->DNEVR = _free(ds->DNEVR); + } + return i; +} + +const char * rpmdsDNEVR(const rpmds ds) +{ + const char * DNEVR = NULL; + + if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) { + if (ds->DNEVR == NULL) { + char t[2] = { ds->Type[0], '\0' }; + ds->DNEVR = rpmdsNewDNEVR(t, ds); + } + DNEVR = ds->DNEVR; + } + return DNEVR; +} + +const char * rpmdsN(const rpmds ds) +{ + const char * N = NULL; + + if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) { + if (ds->N != NULL) + N = ds->N[ds->i]; + } + return N; +} + +const char * rpmdsEVR(const rpmds ds) +{ + const char * EVR = NULL; + + if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) { + if (ds->EVR != NULL) + EVR = ds->EVR[ds->i]; + } + return EVR; +} + +rpmsenseFlags rpmdsFlags(const rpmds ds) +{ + rpmsenseFlags Flags = 0; + + if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) { + if (ds->Flags != NULL) + Flags = ds->Flags[ds->i]; + } + return Flags; +} + +rpmTagVal rpmdsTagN(const rpmds ds) +{ + rpmTagVal tagN = RPMTAG_NOT_FOUND; + + if (ds != NULL) + tagN = ds->tagN; + return tagN; +} + +unsigned int rpmdsInstance(rpmds ds) +{ + return (ds != NULL) ? ds->instance : 0; +} + +int rpmdsNoPromote(const rpmds ds) +{ + int nopromote = 0; + + if (ds != NULL) + nopromote = ds->nopromote; + return nopromote; +} + +int rpmdsSetNoPromote(rpmds ds, int nopromote) +{ + int onopromote = 0; + + if (ds != NULL) { + onopromote = ds->nopromote; + ds->nopromote = nopromote; + } + return onopromote; +} + +rpm_color_t rpmdsColor(const rpmds ds) +{ + rpm_color_t Color = 0; + + if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) { + if (ds->Color != NULL) + Color = ds->Color[ds->i]; + } + return Color; +} + +rpm_color_t rpmdsSetColor(const rpmds ds, rpm_color_t color) +{ + rpm_color_t ocolor = 0; + + if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) { + if (ds->Color == NULL) { + ds->Color = xcalloc(ds->Count, sizeof(*ds->Color)); + } + ocolor = ds->Color[ds->i]; + ds->Color[ds->i] = color; + } + return ocolor; +} + +void rpmdsNotify(rpmds ds, const char * where, int rc) +{ + const char *DNEVR; + + if (!rpmIsDebug()) + return; + if (!(ds != NULL && ds->i >= 0 && ds->i < ds->Count)) + return; + if (!(ds->Type != NULL && (DNEVR = rpmdsDNEVR(ds)) != NULL)) + return; + + rpmlog(RPMLOG_DEBUG, "%9s: %-45s %-s %s\n", ds->Type, + (rstreq(DNEVR, "cached") ? DNEVR : DNEVR+2), + (rc ? _("NO ") : _("YES")), + (where != NULL ? where : "")); +} + +int rpmdsNext(rpmds ds) +{ + int i = -1; + + if (ds != NULL && ++ds->i >= 0) { + if (ds->i < ds->Count) { + i = ds->i; + ds->DNEVR = _free(ds->DNEVR); + } else + ds->i = -1; + +if (_rpmds_debug < 0 && i != -1) +fprintf(stderr, "*** ds %p\t%s[%d]: %s\n", ds, (ds->Type ? ds->Type : "?Type?"), i, (ds->DNEVR ? ds->DNEVR : "?DNEVR?")); + + } + + return i; +} + +rpmds rpmdsInit(rpmds ds) +{ + if (ds != NULL) { + ds->i = -1; + ds->DNEVR = _free(ds->DNEVR); + } + return ds; +} + +static +const char ** rpmdsDupArgv(const char ** argv, int argc) +{ + const char ** av; + size_t nb = 0; + int ac = 0; + char * t; + + if (argv == NULL) + return NULL; + for (ac = 0; ac < argc && argv[ac]; ac++) { + nb += strlen(argv[ac]) + 1; + } + nb += (ac + 1) * sizeof(*av); + + av = xmalloc(nb); + t = (char *) (av + ac + 1); + for (ac = 0; ac < argc && argv[ac]; ac++) { + av[ac] = t; + t = stpcpy(t, argv[ac]) + 1; + } + av[ac] = NULL; + return av; +} + +static rpmds rpmdsDup(const rpmds ods) +{ + rpmds ds = xcalloc(1, sizeof(*ds)); + size_t nb; + + ds->Type = ods->Type; + ds->tagN = ods->tagN; + ds->Count = ods->Count; + ds->i = ods->i; + ds->l = ods->l; + ds->u = ods->u; + ds->nopromote = ods->nopromote; + + ds->N = rpmdsDupArgv(ods->N, ods->Count); + + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ +assert(ods->EVR != NULL); +assert(ods->Flags != NULL); + + ds->EVR = rpmdsDupArgv(ods->EVR, ods->Count); + + nb = (ds->Count * sizeof(*ds->Flags)); + ds->Flags = memcpy(xmalloc(nb), ods->Flags, nb); + + return rpmdsLink(ds); + +} + +int rpmdsFind(rpmds ds, const rpmds ods) +{ + int comparison; + + if (ds == NULL || ods == NULL) + return -1; + + ds->l = 0; + ds->u = ds->Count; + while (ds->l < ds->u) { + ds->i = (ds->l + ds->u) / 2; + + comparison = strcmp(ods->N[ods->i], ds->N[ds->i]); + + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ + if (comparison == 0 && ods->EVR && ds->EVR) + comparison = strcmp(ods->EVR[ods->i], ds->EVR[ds->i]); + if (comparison == 0 && ods->Flags && ds->Flags) + comparison = (ods->Flags[ods->i] - ds->Flags[ds->i]); + + if (comparison < 0) + ds->u = ds->i; + else if (comparison > 0) + ds->l = ds->i + 1; + else + return ds->i; + } + return -1; +} + +int rpmdsMerge(rpmds * dsp, rpmds ods) +{ + rpmds ds; + const char ** N; + const char ** EVR; + rpmsenseFlags * Flags; + int j; + int save; + + if (dsp == NULL || ods == NULL) + return -1; + + /* If not initialized yet, dup the 1st entry. */ + if (*dsp == NULL) { + save = ods->Count; + ods->Count = 1; + *dsp = rpmdsDup(ods); + ods->Count = save; + } + ds = *dsp; + if (ds == NULL) + return -1; + + /* + * Add new entries. + */ + save = ods->i; + ods = rpmdsInit(ods); + while (rpmdsNext(ods) >= 0) { + /* + * If this entry is already present, don't bother. + */ + if (rpmdsFind(ds, ods) >= 0) + continue; + + /* + * Insert new entry. + */ + for (j = ds->Count; j > ds->u; j--) + ds->N[j] = ds->N[j-1]; + ds->N[ds->u] = ods->N[ods->i]; + N = rpmdsDupArgv(ds->N, ds->Count+1); + ds->N = _free(ds->N); + ds->N = N; + + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ +assert(ods->EVR != NULL); +assert(ods->Flags != NULL); + + for (j = ds->Count; j > ds->u; j--) + ds->EVR[j] = ds->EVR[j-1]; + ds->EVR[ds->u] = ods->EVR[ods->i]; + EVR = rpmdsDupArgv(ds->EVR, ds->Count+1); + ds->EVR = _free(ds->EVR); + ds->EVR = EVR; + + Flags = xmalloc((ds->Count+1) * sizeof(*Flags)); + if (ds->u > 0) + memcpy(Flags, ds->Flags, ds->u * sizeof(*Flags)); + if (ds->u < ds->Count) + memcpy(Flags + ds->u + 1, ds->Flags + ds->u, + (ds->Count - ds->u) * sizeof(*Flags)); + Flags[ds->u] = ods->Flags[ods->i]; + ds->Flags = _free(ds->Flags); + ds->Flags = Flags; + + ds->i = ds->Count; + ds->Count++; + + } + ods->i = save; + return 0; +} + + +int rpmdsSearch(rpmds ds, rpmds ods) +{ + int comparison; + int i, l, u; + + if (ds == NULL || ods == NULL) + return -1; + + /* Binary search to find the [l,u) subset that contains N */ + i = -1; + l = 0; + u = ds->Count; + while (l < u) { + i = (l + u) / 2; + + comparison = strcmp(ods->N[ods->i], ds->N[i]); + + if (comparison < 0) + u = i; + else if (comparison > 0) + l = i + 1; + else { + /* Set l to 1st member of set that contains N. */ + if (!rstreq(ods->N[ods->i], ds->N[l])) + l = i; + while (l > 0 && rstreq(ods->N[ods->i], ds->N[l-1])) + l--; + /* Set u to 1st member of set that does not contain N. */ + if (u >= ds->Count || !rstreq(ods->N[ods->i], ds->N[u])) + u = i; + while (++u < ds->Count) { + if (!rstreq(ods->N[ods->i], ds->N[u])) + /*@innerbreak@*/ break; + } + break; + } + } + + /* Check each member of [l,u) subset for ranges overlap. */ + i = -1; + if (l < u) { + int save = rpmdsSetIx(ds, l-1); + while ((l = rpmdsNext(ds)) >= 0 && (l < u)) { + if ((i = rpmdsCompare(ods, ds)) != 0) + break; + } + /* Return element index that overlaps, or -1. */ + if (i) + i = rpmdsIx(ds); + else { + (void) rpmdsSetIx(ds, save); + i = -1; + } + } + return i; +} +/** + * Split EVR into epoch, version, and release components. + * @param evr [epoch:]version[-release] string + * @retval *ep pointer to epoch + * @retval *vp pointer to version + * @retval *rp pointer to release + */ +static +void parseEVR(char * evr, + const char ** ep, + const char ** vp, + const char ** rp) +{ + const char *epoch; + const char *version; /* assume only version is present */ + const char *release; + char *s, *se; + + s = evr; + while (*s && risdigit(*s)) s++; /* s points to epoch terminator */ + se = strrchr(s, '-'); /* se points to version terminator */ + + if (*s == ':') { + epoch = evr; + *s++ = '\0'; + version = s; + if (*epoch == '\0') epoch = "0"; + } else { + epoch = NULL; /* XXX disable epoch compare if missing */ + version = evr; + } + if (se) { + *se++ = '\0'; + release = se; + } else { + release = NULL; + } + + if (ep) *ep = epoch; + if (vp) *vp = version; + if (rp) *rp = release; +} + +int rpmdsCompare(const rpmds A, const rpmds B) +{ + char *aEVR, *bEVR; + const char *aE, *aV, *aR, *bE, *bV, *bR; + int result; + int sense; + + /* Different names don't overlap. */ + if (!rstreq(A->N[A->i], B->N[B->i])) { + result = 0; + goto exit; + } + + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ + if (!(A->EVR && A->Flags && B->EVR && B->Flags)) { + result = 1; + goto exit; + } + + /* Same name. If either A or B is an existence test, always overlap. */ + if (!((A->Flags[A->i] & RPMSENSE_SENSEMASK) && (B->Flags[B->i] & RPMSENSE_SENSEMASK))) { + result = 1; + goto exit; + } + + /* If either EVR is non-existent or empty, always overlap. */ + if (!(A->EVR[A->i] && *A->EVR[A->i] && B->EVR[B->i] && *B->EVR[B->i])) { + result = 1; + goto exit; + } + + /* Both AEVR and BEVR exist. */ + aEVR = xstrdup(A->EVR[A->i]); + parseEVR(aEVR, &aE, &aV, &aR); + bEVR = xstrdup(B->EVR[B->i]); + parseEVR(bEVR, &bE, &bV, &bR); + + /* Compare {A,B} [epoch:]version[-release] */ + sense = 0; + if (aE && *aE && bE && *bE) + sense = rpmvercmp(aE, bE); + else if (aE && *aE && atol(aE) > 0) { + if (!B->nopromote) { + sense = 0; + } else + sense = 1; + } else if (bE && *bE && atol(bE) > 0) + sense = -1; + + if (sense == 0) { + sense = rpmvercmp(aV, bV); + if (sense == 0) { + if (aR && *aR && bR && *bR) { + sense = rpmvercmp(aR, bR); + } else { + /* always matches if the side with no release has SENSE_EQUAL */ + if ((aR && *aR && (B->Flags[B->i] & RPMSENSE_EQUAL)) || + (bR && *bR && (A->Flags[A->i] & RPMSENSE_EQUAL))) { + aEVR = _free(aEVR); + bEVR = _free(bEVR); + result = 1; + goto exit; + } + } + } + } + aEVR = _free(aEVR); + bEVR = _free(bEVR); + + /* Detect overlap of {A,B} range. */ + result = 0; + if (sense < 0 && ((A->Flags[A->i] & RPMSENSE_GREATER) || (B->Flags[B->i] & RPMSENSE_LESS))) { + result = 1; + } else if (sense > 0 && ((A->Flags[A->i] & RPMSENSE_LESS) || (B->Flags[B->i] & RPMSENSE_GREATER))) { + result = 1; + } else if (sense == 0 && + (((A->Flags[A->i] & RPMSENSE_EQUAL) && (B->Flags[B->i] & RPMSENSE_EQUAL)) || + ((A->Flags[A->i] & RPMSENSE_LESS) && (B->Flags[B->i] & RPMSENSE_LESS)) || + ((A->Flags[A->i] & RPMSENSE_GREATER) && (B->Flags[B->i] & RPMSENSE_GREATER)))) { + result = 1; + } + +exit: + return result; +} + +int rpmdsAnyMatchesDep (const Header h, const rpmds req, int nopromote) +{ + rpmds provides = NULL; + int result = 0; + + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ + if (req->EVR == NULL || req->Flags == NULL) + return 1; + + if (!(req->Flags[req->i] & RPMSENSE_SENSEMASK) || !req->EVR[req->i] || *req->EVR[req->i] == '\0') + return 1; + + /* Get provides information from header */ + provides = rpmdsInit(rpmdsNew(h, RPMTAG_PROVIDENAME, 0)); + if (provides == NULL) + goto exit; /* XXX should never happen */ + if (nopromote) + (void) rpmdsSetNoPromote(provides, nopromote); + + /* + * Rpm prior to 3.0.3 did not have versioned provides. + * If no provides version info is available, match any/all requires + * with same name. + */ + if (provides->EVR == NULL) { + result = 1; + goto exit; + } + + result = 0; + while (rpmdsNext(provides) >= 0) { + + /* Filter out provides that came along for the ride. */ + if (!rstreq(provides->N[provides->i], req->N[req->i])) + continue; + + result = rpmdsCompare(provides, req); + + /* If this provide matches the require, we're done. */ + if (result) + break; + } + +exit: + provides = rpmdsFree(provides); + + return result; +} + +int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote) +{ + rpmds pkg; + int rc = 1; /* XXX assume match, names already match here */ + + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ + if (req->EVR == NULL || req->Flags == NULL) + return rc; + + if (!((req->Flags[req->i] & RPMSENSE_SENSEMASK) && req->EVR[req->i] && *req->EVR[req->i])) + return rc; + + /* Get package information from header */ + pkg = rpmdsThis(h, RPMTAG_PROVIDENAME, RPMSENSE_EQUAL); + if (nopromote) + rpmdsSetNoPromote(pkg, nopromote); + rc = rpmdsCompare(pkg, req); + rpmdsFree(pkg); + + return rc; +} + +/** + */ +struct rpmlibProvides_s { + const char * featureName; + const char * featureEVR; + rpmsenseFlags featureFlags; + const char * featureDescription; +}; + +static const struct rpmlibProvides_s rpmlibProvides[] = { + { "rpmlib(VersionedDependencies)", "3.0.3-1", + (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("PreReq:, Provides:, and Obsoletes: dependencies support versions.") }, + { "rpmlib(CompressedFileNames)", "3.0.4-1", + (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.")}, +#if HAVE_BZLIB_H + { "rpmlib(PayloadIsBzip2)", "3.0.5-1", + (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("package payload can be compressed using bzip2.") }, +#endif +#if HAVE_LZMA_H + { "rpmlib(PayloadIsXz)", "5.2-1", + (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("package payload can be compressed using xz.") }, + { "rpmlib(PayloadIsLzma)", "4.4.2-1", + (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("package payload can be compressed using lzma.") }, +#endif + { "rpmlib(PayloadFilesHavePrefix)", "4.0-1", + (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("package payload file(s) have \"./\" prefix.") }, + { "rpmlib(ExplicitPackageProvide)", "4.0-1", + (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("package name-version-release is not implicitly provided.") }, + { "rpmlib(HeaderLoadSortsTags)", "4.0.1-1", + ( RPMSENSE_EQUAL), + N_("header tags are always sorted after being loaded.") }, + { "rpmlib(ScriptletInterpreterArgs)", "4.0.3-1", + ( RPMSENSE_EQUAL), + N_("the scriptlet interpreter can use arguments from header.") }, + { "rpmlib(PartialHardlinkSets)", "4.0.4-1", + ( RPMSENSE_EQUAL), + N_("a hardlink file set may be installed without being complete.") }, + { "rpmlib(ConcurrentAccess)", "4.1-1", + ( RPMSENSE_EQUAL), + N_("package scriptlets may access the rpm database while installing.") }, +#ifdef WITH_LUA + { "rpmlib(BuiltinLuaScripts)", "4.2.2-1", + ( RPMSENSE_EQUAL), + N_("internal support for lua scripts.") }, +#endif + { "rpmlib(FileDigests)", "4.6.0-1", + ( RPMSENSE_EQUAL), + N_("file digest algorithm is per package configurable") }, +#ifdef WITH_CAP + { "rpmlib(FileCaps)", "4.6.1-1", + ( RPMSENSE_EQUAL), + N_("support for POSIX.1e file capabilities") }, +#endif + { "rpmlib(ScriptletExpansion)", "4.9.0-1", + ( RPMSENSE_EQUAL), + N_("package scriptlets can be expanded at install time.") }, + { NULL, NULL, 0, NULL } +}; + + +int rpmdsRpmlib(rpmds * dsp, const void * tblp) +{ + const struct rpmlibProvides_s * rltblp = tblp; + const struct rpmlibProvides_s * rlp; + int xx; + + if (rltblp == NULL) + rltblp = rpmlibProvides; + + for (rlp = rltblp; rlp->featureName != NULL; rlp++) { + rpmds ds = rpmdsSingle(RPMTAG_PROVIDENAME, rlp->featureName, + rlp->featureEVR, rlp->featureFlags); + xx = rpmdsMerge(dsp, ds); + ds = rpmdsFree(ds); + } + return 0; +} + diff --git a/lib/rpmds.h b/lib/rpmds.h new file mode 100644 index 0000000..bf3ee2c --- /dev/null +++ b/lib/rpmds.h @@ -0,0 +1,333 @@ +#ifndef H_RPMDS +#define H_RPMDS + +/** \ingroup rpmdep rpmtrans + * \file lib/rpmds.h + * Structure(s) used for dependency tag sets. + */ + +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + */ +extern int _rpmds_nopromote; + +/** \ingroup rpmds + * Dependency Attributes. + */ +enum rpmsenseFlags_e { + RPMSENSE_ANY = 0, + RPMSENSE_LESS = (1 << 1), + RPMSENSE_GREATER = (1 << 2), + RPMSENSE_EQUAL = (1 << 3), + /* bit 4 unused */ + RPMSENSE_POSTTRANS = (1 << 5), /*!< %posttrans dependency */ + RPMSENSE_PREREQ = (1 << 6), /* legacy prereq dependency */ + RPMSENSE_PRETRANS = (1 << 7), /*!< Pre-transaction dependency. */ + RPMSENSE_INTERP = (1 << 8), /*!< Interpreter used by scriptlet. */ + RPMSENSE_SCRIPT_PRE = (1 << 9), /*!< %pre dependency. */ + RPMSENSE_SCRIPT_POST = (1 << 10), /*!< %post dependency. */ + RPMSENSE_SCRIPT_PREUN = (1 << 11), /*!< %preun dependency. */ + RPMSENSE_SCRIPT_POSTUN = (1 << 12), /*!< %postun dependency. */ + RPMSENSE_SCRIPT_VERIFY = (1 << 13), /*!< %verify dependency. */ + RPMSENSE_FIND_REQUIRES = (1 << 14), /*!< find-requires generated dependency. */ + RPMSENSE_FIND_PROVIDES = (1 << 15), /*!< find-provides generated dependency. */ + + RPMSENSE_TRIGGERIN = (1 << 16), /*!< %triggerin dependency. */ + RPMSENSE_TRIGGERUN = (1 << 17), /*!< %triggerun dependency. */ + RPMSENSE_TRIGGERPOSTUN = (1 << 18), /*!< %triggerpostun dependency. */ + RPMSENSE_MISSINGOK = (1 << 19), /*!< suggests/enhances hint. */ + /* bits 20-23 unused */ + RPMSENSE_RPMLIB = (1 << 24), /*!< rpmlib(feature) dependency. */ + RPMSENSE_TRIGGERPREIN = (1 << 25), /*!< %triggerprein dependency. */ + RPMSENSE_KEYRING = (1 << 26), + /* bit 27 unused */ + RPMSENSE_CONFIG = (1 << 28) +}; + +typedef rpmFlags rpmsenseFlags; + +#define RPMSENSE_SENSEMASK 15 /* Mask to get senses, ie serial, */ + /* less, greater, equal. */ + +#define RPMSENSE_TRIGGER \ + (RPMSENSE_TRIGGERPREIN | RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN) + +#define _ALL_REQUIRES_MASK (\ + RPMSENSE_INTERP | \ + RPMSENSE_SCRIPT_PRE | \ + RPMSENSE_SCRIPT_POST | \ + RPMSENSE_SCRIPT_PREUN | \ + RPMSENSE_SCRIPT_POSTUN | \ + RPMSENSE_SCRIPT_VERIFY | \ + RPMSENSE_FIND_REQUIRES | \ + RPMSENSE_RPMLIB | \ + RPMSENSE_KEYRING | \ + RPMSENSE_PRETRANS | \ + RPMSENSE_POSTTRANS | \ + RPMSENSE_PREREQ) + +#define _notpre(_x) ((_x) & ~RPMSENSE_PREREQ) +#define _INSTALL_ONLY_MASK \ + _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB|RPMSENSE_KEYRING|RPMSENSE_PRETRANS|RPMSENSE_POSTTRANS) +#define _ERASE_ONLY_MASK \ + _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN) + +#define isLegacyPreReq(_x) (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ) +#define isInstallPreReq(_x) ((_x) & _INSTALL_ONLY_MASK) +#define isErasePreReq(_x) ((_x) & _ERASE_ONLY_MASK) + +/** \ingroup rpmds + * Reference a dependency set instance. + * @param ds dependency set + * @return new dependency set reference + */ +rpmds rpmdsLink(rpmds ds); + +/** \ingroup rpmds + * Destroy a dependency set. + * @param ds dependency set + * @return NULL always + */ +rpmds rpmdsFree(rpmds ds); +/** \ingroup rpmds + * Create and load a dependency set. + * @param h header + * @param tagN type of dependency + * @param flags unused + * @return new dependency set + */ +rpmds rpmdsNew(Header h, rpmTagVal tagN, int flags); + +/** \ingroup rpmds + * Return new formatted dependency string. + * @param dspfx formatted dependency string prefix + * @param ds dependency set + * @return new formatted dependency (malloc'ed) + */ +char * rpmdsNewDNEVR(const char * dspfx, const rpmds ds); + +/** \ingroup rpmds + * Create, load and initialize a dependency for this header. + * @param h header + * @param tagN type of dependency + * @param Flags comparison flags + * @return new dependency set + */ +rpmds rpmdsThis(Header h, rpmTagVal tagN, rpmsenseFlags Flags); + +/** \ingroup rpmds + * Create, load and initialize a dependency set of size 1. + * @param tagN type of dependency + * @param N name + * @param EVR epoch:version-release + * @param Flags comparison flags + * @return new dependency set + */ +rpmds rpmdsSingle(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlags Flags); + +/** \ingroup rpmds + * Return a new dependency set of size 1 from the current iteration index + * @param ds dependency set + * @return new dependency set + */ +rpmds rpmdsCurrent(rpmds ds); + +/** \ingroup rpmds + * Return dependency set count. + * @param ds dependency set + * @return current count + */ +int rpmdsCount(const rpmds ds); + +/** \ingroup rpmds + * Return dependency set index. + * @param ds dependency set + * @return current index + */ +int rpmdsIx(const rpmds ds); + +/** \ingroup rpmds + * Set dependency set index. + * @param ds dependency set + * @param ix new index + * @return current index + */ +int rpmdsSetIx(rpmds ds, int ix); + +/** \ingroup rpmds + * Return current formatted dependency string. + * @param ds dependency set + * @return current dependency DNEVR, NULL on invalid + */ +const char * rpmdsDNEVR(const rpmds ds); + +/** \ingroup rpmds + * Return current dependency name. + * @param ds dependency set + * @return current dependency name, NULL on invalid + */ +const char * rpmdsN(const rpmds ds); + +/** \ingroup rpmds + * Return current dependency epoch-version-release. + * @param ds dependency set + * @return current dependency EVR, NULL on invalid + */ +const char * rpmdsEVR(const rpmds ds); + +/** \ingroup rpmds + * Return current dependency flags. + * @param ds dependency set + * @return current dependency flags, 0 on invalid + */ +rpmsenseFlags rpmdsFlags(const rpmds ds); + +/** \ingroup rpmds + * Return current dependency type. + * @param ds dependency set + * @return current dependency type, 0 on invalid + */ +rpmTagVal rpmdsTagN(const rpmds ds); + +/** \ingroup rpmds + * Return dependency header instance, ie whether the dependency comes from + * an installed header or not. + * @param ds dependency set + * @return header instance of dependency (0 for not installed) + */ +unsigned int rpmdsInstance(rpmds ds); + +/** \ingroup rpmds + * Return current "Don't promote Epoch:" flag. + * + * This flag controls for Epoch: promotion when a dependency set is + * compared. If the flag is set (for already installed packages), then + * an unspecified value will be treated as Epoch: 0. Otherwise (for added + * packages), the Epoch: portion of the comparison is skipped if the value + * is not specified, i.e. an unspecified Epoch: is assumed to be equal + * in dependency comparisons. + * + * @param ds dependency set + * @return current "Don't promote Epoch:" flag + */ +int rpmdsNoPromote(const rpmds ds); + +/** \ingroup rpmds + * Set "Don't promote Epoch:" flag. + * @param ds dependency set + * @param nopromote Should an unspecified Epoch: be treated as Epoch: 0? + * @return previous "Don't promote Epoch:" flag + */ +int rpmdsSetNoPromote(rpmds ds, int nopromote); + +/** \ingroup rpmds + * Return current dependency color. + * @param ds dependency set + * @return current dependency color + */ +rpm_color_t rpmdsColor(const rpmds ds); + +/** \ingroup rpmds + * Return current dependency color. + * @param ds dependency set + * @param color new dependency color + * @return previous dependency color + */ +rpm_color_t rpmdsSetColor(const rpmds ds, rpm_color_t color); + +/** \ingroup rpmds + * Notify of results of dependency match. + * @param ds dependency set + * @param where where dependency was resolved (or NULL) + * @param rc 0 == YES, otherwise NO + */ +/* FIX: rpmMessage annotation is a lie */ +void rpmdsNotify(rpmds ds, const char * where, int rc); + +/** \ingroup rpmds + * Return next dependency set iterator index. + * @param ds dependency set + * @return dependency set iterator index, -1 on termination + */ +int rpmdsNext(rpmds ds); + +/** \ingroup rpmds + * Initialize dependency set iterator. + * @param ds dependency set + * @return dependency set + */ +rpmds rpmdsInit(rpmds ds); + +/** \ingroup rpmds + * Find a dependency set element using binary search. + * @param ds dependency set to search + * @param ods dependency set element to find. + * @return dependency index (or -1 if not found) + */ +int rpmdsFind(rpmds ds, const rpmds ods); + +/** \ingroup rpmds + * Merge a dependency set maintaining (N,EVR,Flags) sorted order. + * @retval *dsp (merged) dependency set + * @param ods dependency set to merge + * @return (merged) dependency index + */ +int rpmdsMerge(rpmds * dsp, rpmds ods); + +/** \ingroup rpmds + * Search a sorted dependency set for an element that overlaps. + * A boolean result is saved (if allocated) and accessible through + * rpmdsResult(ods) afterwards. + * @param ds dependency set to search + * @param ods dependency set element to find. + * @return dependency index (or -1 if not found) + **/ +int rpmdsSearch(rpmds ds, rpmds ods); + +/** \ingroup rpmds + * Compare two versioned dependency ranges, looking for overlap. + * @param A 1st dependency + * @param B 2nd dependency + * @return 1 if dependencies overlap, 0 otherwise + */ +int rpmdsCompare(const rpmds A, const rpmds B); + +/** \ingroup rpmds + * Compare package provides dependencies from header with a single dependency. + * @param h header + * @param req dependency set + * @param nopromote Don't promote Epoch: in comparison? + * @return 1 if any dependency overlaps, 0 otherwise + */ +int rpmdsAnyMatchesDep (const Header h, const rpmds req, int nopromote); + +/** \ingroup rpmds + * Compare package name-version-release from header with a single dependency. + * @param h header + * @param req dependency set + * @param nopromote Don't promote Epoch: in comparison? + * @return 1 if dependency overlaps, 0 otherwise + */ +int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote); + +/** + * Load rpmlib provides into a dependency set. + * @retval *dsp (loaded) depedency set + * @param tblp rpmlib provides table (NULL uses internal table) + * @return 0 on success + */ +int rpmdsRpmlib(rpmds * dsp, const void * tblp); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMDS */ diff --git a/lib/rpmfi.c b/lib/rpmfi.c new file mode 100644 index 0000000..f8be4c9 --- /dev/null +++ b/lib/rpmfi.c @@ -0,0 +1,1349 @@ +/** \ingroup rpmdep + * \file lib/rpmfi.c + * Routines to handle file info tag sets. + */ + +#include "system.h" + +#include +#include +#include /* XXX rpmDoDigest */ +#include +#include /* XXX rpmCleanPath */ +#include + +#include "lib/rpmfi_internal.h" +#include "lib/rpmte_internal.h" /* relocations */ +#include "lib/cpio.h" /* XXX CPIO_FOO */ +#include "lib/fsm.h" /* XXX newFSM() */ + +#include "debug.h" + +/* + * Simple and stupid string "cache." + * Store each unique string just once, retrieve by index value. + * For data where number of unique names is typically very low, + * the dumb linear lookup appears to be fast enough and hash table seems + * like an overkill. + */ +struct strcache_s { + char **uniq; + scidx_t num; +}; + +static struct strcache_s _ugcache = { NULL, 0 }; +static strcache ugcache = &_ugcache; +static struct strcache_s _langcache = { NULL, 0 }; +static strcache langcache = &_langcache; + +static scidx_t strcachePut(strcache cache, const char *str) +{ + int found = 0; + scidx_t ret; + + for (scidx_t i = 0; i < cache->num; i++) { + if (rstreq(str, cache->uniq[i])) { + ret = i; + found = 1; + break; + } + } + if (!found) { + /* blow up on index wraparound */ + assert((scidx_t)(cache->num + 1) > cache->num); + cache->uniq = xrealloc(cache->uniq, + sizeof(cache->uniq) * (cache->num+1)); + cache->uniq[cache->num] = xstrdup(str); + ret = cache->num; + cache->num++; + } + return ret; +} + +static const char *strcacheGet(strcache cache, scidx_t idx) +{ + const char *name = NULL; + if (idx >= 0 && idx < cache->num && cache->uniq != NULL) + name = cache->uniq[idx]; + return name; +} + +static strcache strcacheNew(void) +{ + strcache cache = xcalloc(1, sizeof(*cache)); + return cache; +} + +static strcache strcacheFree(strcache cache) +{ + if (cache != NULL) { + for (scidx_t i = 0; i < cache->num; i++) { + free(cache->uniq[i]); + } + cache->uniq = _free(cache->uniq); + free(cache); + } + return NULL; +} + +static rpmfi rpmfiUnlink(rpmfi fi) +{ + if (fi) + fi->nrefs--; + return NULL; +} + +rpmfi rpmfiLink(rpmfi fi) +{ + if (fi) + fi->nrefs++; + return fi; +} + +rpm_count_t rpmfiFC(rpmfi fi) +{ + return (fi != NULL ? fi->fc : 0); +} + +rpm_count_t rpmfiDC(rpmfi fi) +{ + return (fi != NULL ? fi->dc : 0); +} + +#ifdef NOTYET +int rpmfiDI(rpmfi fi) +{ +} +#endif + +int rpmfiFX(rpmfi fi) +{ + return (fi != NULL ? fi->i : -1); +} + +int rpmfiSetFX(rpmfi fi, int fx) +{ + int i = -1; + + if (fi != NULL && fx >= 0 && fx < fi->fc) { + i = fi->i; + fi->i = fx; + fi->j = fi->dil[fi->i]; + } + return i; +} + +int rpmfiDX(rpmfi fi) +{ + return (fi != NULL ? fi->j : -1); +} + +int rpmfiSetDX(rpmfi fi, int dx) +{ + int j = -1; + + if (fi != NULL && dx >= 0 && dx < fi->dc) { + j = fi->j; + fi->j = dx; + } + return j; +} + +int rpmfiDIIndex(rpmfi fi, int dx) +{ + int j = -1; + if (fi != NULL && dx >= 0 && dx < fi->fc) { + if (fi->dil != NULL) + j = fi->dil[dx]; + } + return j; +} + +const char * rpmfiBNIndex(rpmfi fi, int ix) +{ + const char * BN = NULL; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->bnl != NULL) + BN = fi->bnl[ix]; + } + return BN; +} + +const char * rpmfiDNIndex(rpmfi fi, int jx) +{ + const char * DN = NULL; + + if (fi != NULL && jx >= 0 && jx < fi->dc) { + if (fi->dnl != NULL) + DN = fi->dnl[jx]; + } + return DN; +} + +const char * rpmfiFNIndex(rpmfi fi, int ix) +{ + const char * FN = ""; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + char * t; + if (fi->fn == NULL) { + size_t dnlmax = 0, bnlmax = 0, len; + for (int i = 0; i < fi->dc; i++) { + if ((len = strlen(fi->dnl[i])) > dnlmax) + dnlmax = len; + } + for (int i = 0; i < fi->fc; i++) { + if ((len = strlen(fi->bnl[i])) > bnlmax) + bnlmax = len; + } + fi->fn = xmalloc(dnlmax + bnlmax + 1); + } + FN = t = fi->fn; + *t = '\0'; + t = stpcpy(t, fi->dnl[fi->dil[ix]]); + t = stpcpy(t, fi->bnl[ix]); + } + return FN; +} + +rpmfileAttrs rpmfiFFlagsIndex(rpmfi fi, int ix) +{ + rpmfileAttrs FFlags = 0; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->fflags != NULL) + FFlags = fi->fflags[ix]; + } + return FFlags; +} + +rpmVerifyAttrs rpmfiVFlagsIndex(rpmfi fi, int ix) +{ + rpmVerifyAttrs VFlags = 0; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->vflags != NULL) + VFlags = fi->vflags[ix]; + } + return VFlags; +} + +rpm_mode_t rpmfiFModeIndex(rpmfi fi, int ix) +{ + rpm_mode_t fmode = 0; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->fmodes != NULL) + fmode = fi->fmodes[ix]; + } + return fmode; +} + +rpmfileState rpmfiFStateIndex(rpmfi fi, int ix) +{ + rpmfileState fstate = RPMFILE_STATE_MISSING; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->fstates != NULL) + fstate = fi->fstates[ix]; + } + return fstate; +} + +const unsigned char * rpmfiMD5(rpmfi fi) +{ + const unsigned char *digest; + int algo = 0; + + digest = rpmfiFDigest(fi, &algo, NULL); + return (algo == PGPHASHALGO_MD5) ? digest : NULL; +} + +int rpmfiDigestAlgo(rpmfi fi) +{ + return fi ? fi->digestalgo : 0; +} + +const unsigned char * rpmfiFDigestIndex(rpmfi fi, int ix, int *algo, size_t *len) +{ + const unsigned char *digest = NULL; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + size_t diglen = rpmDigestLength(fi->digestalgo); + if (fi->digests != NULL) + digest = fi->digests + (diglen * ix); + if (len) + *len = diglen; + if (algo) + *algo = fi->digestalgo; + } + return digest; +} + +char * rpmfiFDigestHex(rpmfi fi, int *algo) +{ + size_t diglen = 0; + char *fdigest = NULL; + const unsigned char *digest = rpmfiFDigest(fi, algo, &diglen); + if (digest) { + fdigest = pgpHexStr(digest, diglen); + } + return fdigest; +} + +const char * rpmfiFLinkIndex(rpmfi fi, int ix) +{ + const char * flink = NULL; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->flinks != NULL) + flink = strcacheGet(fi->flinkcache, fi->flinks[ix]); + } + return flink; +} + +rpm_loff_t rpmfiFSizeIndex(rpmfi fi, int ix) +{ + rpm_loff_t fsize = 0; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->fsizes != NULL) + fsize = fi->fsizes[ix]; + } + return fsize; +} + +rpm_rdev_t rpmfiFRdevIndex(rpmfi fi, int ix) +{ + rpm_rdev_t frdev = 0; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->frdevs != NULL) + frdev = fi->frdevs[ix]; + } + return frdev; +} + +rpm_ino_t rpmfiFInodeIndex(rpmfi fi, int ix) +{ + rpm_ino_t finode = 0; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->finodes != NULL) + finode = fi->finodes[ix]; + } + return finode; +} + +rpm_color_t rpmfiColor(rpmfi fi) +{ + rpm_color_t color = 0; + + if (fi != NULL && fi->fcolors != NULL) { + for (int i = 0; i < fi->fc; i++) + color |= fi->fcolors[i]; + /* XXX ignore all but lsnibble for now. */ + color &= 0xf; + } + return color; +} + +rpm_color_t rpmfiFColorIndex(rpmfi fi, int ix) +{ + rpm_color_t fcolor = 0; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->fcolors != NULL) + /* XXX ignore all but lsnibble for now. */ + fcolor = (fi->fcolors[ix] & 0x0f); + } + return fcolor; +} + +const char * rpmfiFClassIndex(rpmfi fi, int ix) +{ + const char * fclass = NULL; + int cdictx; + + if (fi != NULL && fi->fcdictx != NULL && ix >= 0 && ix < fi->fc) { + cdictx = fi->fcdictx[ix]; + if (fi->cdict != NULL && cdictx >= 0 && cdictx < fi->ncdict) + fclass = fi->cdict[cdictx]; + } + return fclass; +} + +uint32_t rpmfiFDependsIndex(rpmfi fi, int ix, const uint32_t ** fddictp) +{ + int fddictx = -1; + int fddictn = 0; + const uint32_t * fddict = NULL; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->fddictn != NULL) + fddictn = fi->fddictn[ix]; + if (fddictn > 0 && fi->fddictx != NULL) + fddictx = fi->fddictx[ix]; + if (fi->ddict != NULL && fddictx >= 0 && (fddictx+fddictn) <= fi->nddict) + fddict = fi->ddict + fddictx; + } + if (fddictp) + *fddictp = fddict; + return fddictn; +} + +uint32_t rpmfiFNlinkIndex(rpmfi fi, int ix) +{ + uint32_t nlink = 0; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + /* XXX rpm-2.3.12 has not RPMTAG_FILEINODES */ + if (fi->finodes && fi->frdevs) { + rpm_ino_t finode = fi->finodes[ix]; + rpm_rdev_t frdev = fi->frdevs[ix]; + int j; + + for (j = 0; j < fi->fc; j++) { + if (fi->frdevs[j] == frdev && fi->finodes[j] == finode) + nlink++; + } + } + } + return nlink; +} + +rpm_time_t rpmfiFMtimeIndex(rpmfi fi, int ix) +{ + rpm_time_t fmtime = 0; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->fmtimes != NULL) + fmtime = fi->fmtimes[ix]; + } + return fmtime; +} + +const char * rpmfiFUserIndex(rpmfi fi, int ix) +{ + const char * fuser = NULL; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->fuser != NULL) + fuser = strcacheGet(ugcache, fi->fuser[ix]); + } + return fuser; +} + +const char * rpmfiFGroupIndex(rpmfi fi, int ix) +{ + const char * fgroup = NULL; + + if (fi != NULL && ix >= 0 && ix < fi->fc) { + if (fi->fgroup != NULL) + fgroup = strcacheGet(ugcache, fi->fgroup[ix]); + } + return fgroup; +} + +const char * rpmfiFCapsIndex(rpmfi fi, int ix) +{ + const char *fcaps = NULL; + if (fi != NULL && ix >= 0 && ix < fi->fc) { + fcaps = fi->fcapcache ? strcacheGet(fi->fcapcache, fi->fcaps[ix]) : ""; + } + return fcaps; +} + +const char * rpmfiFLangsIndex(rpmfi fi, int ix) +{ + const char *flangs = NULL; + if (fi != NULL && fi->flangs != NULL && ix >= 0 && ix < fi->fc) { + flangs = strcacheGet(langcache, fi->flangs[ix]); + } + return flangs; +} + +struct fingerPrint_s *rpmfiFpsIndex(rpmfi fi, int ix) +{ + struct fingerPrint_s * fps = NULL; + if (fi != NULL && fi->fps != NULL && ix >= 0 && ix < fi->fc) { + fps = fi->fps + ix; + } + return fps; +} + +int rpmfiNext(rpmfi fi) +{ + int i = -1; + + if (fi != NULL && ++fi->i >= 0) { + if (fi->i < fi->fc) { + i = fi->i; + if (fi->dil != NULL) + fi->j = fi->dil[fi->i]; + } else + fi->i = -1; + } + + return i; +} + +rpmfi rpmfiInit(rpmfi fi, int fx) +{ + if (fi != NULL) { + if (fx >= 0 && fx < fi->fc) { + fi->i = fx - 1; + fi->j = -1; + } + } + + return fi; +} + +int rpmfiNextD(rpmfi fi) +{ + int j = -1; + + if (fi != NULL && ++fi->j >= 0) { + if (fi->j < fi->dc) + j = fi->j; + else + fi->j = -1; + } + + return j; +} + +rpmfi rpmfiInitD(rpmfi fi, int dx) +{ + if (fi != NULL) { + if (dx >= 0 && dx < fi->fc) + fi->j = dx - 1; + else + fi = NULL; + } + + return fi; +} + +/** + * Identify a file type. + * @param ft file type + * @return string to identify a file type + */ +static +const char * ftstring (rpmFileTypes ft) +{ + switch (ft) { + case XDIR: return "directory"; + case CDEV: return "char dev"; + case BDEV: return "block dev"; + case LINK: return "link"; + case SOCK: return "sock"; + case PIPE: return "fifo/pipe"; + case REG: return "file"; + default: return "unknown file type"; + } +} + +rpmFileTypes rpmfiWhatis(rpm_mode_t mode) +{ + if (S_ISDIR(mode)) return XDIR; + if (S_ISCHR(mode)) return CDEV; + if (S_ISBLK(mode)) return BDEV; + if (S_ISLNK(mode)) return LINK; + if (S_ISSOCK(mode)) return SOCK; + if (S_ISFIFO(mode)) return PIPE; + return REG; +} + +int rpmfiCompare(const rpmfi afi, const rpmfi bfi) +{ + rpmFileTypes awhat = rpmfiWhatis(rpmfiFMode(afi)); + rpmFileTypes bwhat = rpmfiWhatis(rpmfiFMode(bfi)); + + if ((rpmfiFFlags(afi) & RPMFILE_GHOST) || + (rpmfiFFlags(bfi) & RPMFILE_GHOST)) return 0; + + if (awhat != bwhat) return 1; + + if (awhat == LINK) { + const char * alink = rpmfiFLink(afi); + const char * blink = rpmfiFLink(bfi); + if (alink == blink) return 0; + if (alink == NULL) return 1; + if (blink == NULL) return -1; + return strcmp(alink, blink); + } else if (awhat == REG) { + size_t adiglen, bdiglen; + int aalgo, balgo; + const unsigned char * adigest = rpmfiFDigest(afi, &aalgo, &adiglen); + const unsigned char * bdigest = rpmfiFDigest(bfi, &balgo, &bdiglen); + if (adigest == bdigest) return 0; + if (adigest == NULL) return 1; + if (bdigest == NULL) return -1; + /* can't meaningfully compare different hash types */ + if (aalgo != balgo || adiglen != bdiglen) return -1; + return memcmp(adigest, bdigest, adiglen); + } + + return 0; +} + +rpmFileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing) +{ + const char * fn = rpmfiFN(nfi); + rpmfileAttrs newFlags = rpmfiFFlags(nfi); + char buffer[1024]; + rpmFileTypes dbWhat, newWhat, diskWhat; + struct stat sb; + int save = (newFlags & RPMFILE_NOREPLACE) ? FA_ALTNAME : FA_SAVE; + + if (lstat(fn, &sb)) { + /* + * The file doesn't exist on the disk. Create it unless the new + * package has marked it as missingok, or allfiles is requested. + */ + if (skipMissing && (newFlags & RPMFILE_MISSINGOK)) { + rpmlog(RPMLOG_DEBUG, "%s skipped due to missingok flag\n", + fn); + return FA_SKIP; + } else { + return FA_CREATE; + } + } + + diskWhat = rpmfiWhatis((rpm_mode_t)sb.st_mode); + dbWhat = rpmfiWhatis(rpmfiFMode(ofi)); + newWhat = rpmfiWhatis(rpmfiFMode(nfi)); + + /* + * RPM >= 2.3.10 shouldn't create config directories -- we'll ignore + * them in older packages as well. + */ + if (newWhat == XDIR) + return FA_CREATE; + + if (diskWhat != newWhat && dbWhat != REG && dbWhat != LINK) + return save; + else if (newWhat != dbWhat && diskWhat != dbWhat) + return save; + else if (dbWhat != newWhat) + return FA_CREATE; + else if (dbWhat != LINK && dbWhat != REG) + return FA_CREATE; + + /* + * This order matters - we'd prefer to CREATE the file if at all + * possible in case something else (like the timestamp) has changed. + */ + memset(buffer, 0, sizeof(buffer)); + if (dbWhat == REG) { + int oalgo, nalgo; + size_t odiglen, ndiglen; + const unsigned char * odigest, * ndigest; + odigest = rpmfiFDigest(ofi, &oalgo, &odiglen); + if (diskWhat == REG) { + if (rpmDoDigest(oalgo, fn, 0, + (unsigned char *)buffer, NULL)) + return FA_CREATE; /* assume file has been removed */ + if (odigest && !memcmp(odigest, buffer, odiglen)) + return FA_CREATE; /* unmodified config file, replace. */ + } + ndigest = rpmfiFDigest(nfi, &nalgo, &ndiglen); + /* Can't compare different hash types, backup to avoid data loss */ + if (oalgo != nalgo || odiglen != ndiglen) + return save; + if (odigest && ndigest && !memcmp(odigest, ndigest, odiglen)) + return FA_SKIP; /* identical file, don't bother. */ + } else /* dbWhat == LINK */ { + const char * oFLink, * nFLink; + oFLink = rpmfiFLink(ofi); + if (diskWhat == LINK) { + if (readlink(fn, buffer, sizeof(buffer) - 1) == -1) + return FA_CREATE; /* assume file has been removed */ + if (oFLink && rstreq(oFLink, buffer)) + return FA_CREATE; /* unmodified config file, replace. */ + } + nFLink = rpmfiFLink(nfi); + if (oFLink && nFLink && rstreq(oFLink, nFLink)) + return FA_SKIP; /* identical file, don't bother. */ + } + + /* + * The config file on the disk has been modified, but + * the ones in the two packages are different. It would + * be nice if RPM was smart enough to at least try and + * merge the difference ala CVS, but... + */ + return save; +} + +int rpmfiConfigConflict(const rpmfi fi) +{ + const char * fn = rpmfiFN(fi); + rpmfileAttrs flags = rpmfiFFlags(fi); + char buffer[1024]; + rpmFileTypes newWhat, diskWhat; + struct stat sb; + + if (!(flags & RPMFILE_CONFIG) || lstat(fn, &sb)) { + return 0; + } + + diskWhat = rpmfiWhatis((rpm_mode_t)sb.st_mode); + newWhat = rpmfiWhatis(rpmfiFMode(fi)); + + if (newWhat != LINK && newWhat != REG) + return 1; + + if (diskWhat != newWhat) + return 1; + + memset(buffer, 0, sizeof(buffer)); + if (newWhat == REG) { + int algo; + size_t diglen; + const unsigned char *ndigest = rpmfiFDigest(fi, &algo, &diglen); + if (rpmDoDigest(algo, fn, 0, (unsigned char *)buffer, NULL)) + return 0; /* assume file has been removed */ + if (ndigest && !memcmp(ndigest, buffer, diglen)) + return 0; /* unmodified config file */ + } else /* newWhat == LINK */ { + const char * nFLink; + if (readlink(fn, buffer, sizeof(buffer) - 1) == -1) + return 0; /* assume file has been removed */ + nFLink = rpmfiFLink(fi); + if (nFLink && rstreq(nFLink, buffer)) + return 0; /* unmodified config file */ + } + + return 1; +} + +static char **duparray(char ** src, int size) +{ + char **dest = xmalloc((size+1) * sizeof(*dest)); + for (int i = 0; i < size; i++) { + dest[i] = xstrdup(src[i]); + } + free(src); + return dest; +} + +static int addPrefixes(Header h, rpmRelocation *relocations, int numRelocations) +{ + struct rpmtd_s validRelocs; + const char *validprefix; + const char ** actualRelocations; + int numActual = 0; + + headerGet(h, RPMTAG_PREFIXES, &validRelocs, HEADERGET_MINMEM); + /* + * If no relocations are specified (usually the case), then return the + * original header. If there are prefixes, however, then INSTPREFIXES + * should be added for RPM_INSTALL_PREFIX environ variables in scriptlets, + * but, since relocateFileList() can be called more than once for + * the same header, don't bother if already present. + */ + if (relocations == NULL || numRelocations == 0) { + if (rpmtdCount(&validRelocs) > 0) { + if (!headerIsEntry(h, RPMTAG_INSTPREFIXES)) { + rpmtdSetTag(&validRelocs, RPMTAG_INSTPREFIXES); + headerPut(h, &validRelocs, HEADERPUT_DEFAULT); + } + rpmtdFreeData(&validRelocs); + } + return 0; + } + + actualRelocations = xmalloc(rpmtdCount(&validRelocs) * sizeof(*actualRelocations)); + rpmtdInit(&validRelocs); + while ((validprefix = rpmtdNextString(&validRelocs))) { + int j; + for (j = 0; j < numRelocations; j++) { + if (relocations[j].oldPath == NULL || /* XXX can't happen */ + !rstreq(validprefix, relocations[j].oldPath)) + continue; + /* On install, a relocate to NULL means skip the path. */ + if (relocations[j].newPath) { + actualRelocations[numActual] = relocations[j].newPath; + numActual++; + } + break; + } + if (j == numRelocations) { + actualRelocations[numActual] = validprefix; + numActual++; + } + } + rpmtdFreeData(&validRelocs); + + if (numActual) { + headerPutStringArray(h, RPMTAG_INSTPREFIXES, actualRelocations, numActual); + } + actualRelocations = _free(actualRelocations); + return numActual; +} + +static void saveRelocs(Header h, rpmtd bnames, rpmtd dnames, rpmtd dindexes) +{ + struct rpmtd_s td; + headerGet(h, RPMTAG_BASENAMES, &td, HEADERGET_MINMEM); + rpmtdSetTag(&td, RPMTAG_ORIGBASENAMES); + headerPut(h, &td, HEADERPUT_DEFAULT); + rpmtdFreeData(&td); + + headerGet(h, RPMTAG_DIRNAMES, &td, HEADERGET_MINMEM); + rpmtdSetTag(&td, RPMTAG_ORIGDIRNAMES); + headerPut(h, &td, HEADERPUT_DEFAULT); + rpmtdFreeData(&td); + + headerGet(h, RPMTAG_DIRINDEXES, &td, HEADERGET_MINMEM); + rpmtdSetTag(&td, RPMTAG_ORIGDIRINDEXES); + headerPut(h, &td, HEADERPUT_DEFAULT); + rpmtdFreeData(&td); + + headerMod(h, bnames); + headerMod(h, dnames); + headerMod(h, dindexes); +} + +void rpmRelocateFileList(rpmRelocation *relocations, int numRelocations, + rpmfs fs, Header h) +{ + static int _printed = 0; + char ** baseNames; + char ** dirNames; + uint32_t * dirIndexes; + rpm_count_t fileCount, dirCount; + int nrelocated = 0; + int fileAlloced = 0; + char * fn = NULL; + int haveRelocatedBase = 0; + size_t maxlen = 0; + int i, j; + struct rpmtd_s bnames, dnames, dindexes, fmodes; + + addPrefixes(h, relocations, numRelocations); + + if (!_printed) { + _printed = 1; + rpmlog(RPMLOG_DEBUG, "========== relocations\n"); + for (i = 0; i < numRelocations; i++) { + if (relocations[i].oldPath == NULL) continue; /* XXX can't happen */ + if (relocations[i].newPath == NULL) + rpmlog(RPMLOG_DEBUG, "%5d exclude %s\n", + i, relocations[i].oldPath); + else + rpmlog(RPMLOG_DEBUG, "%5d relocate %s -> %s\n", + i, relocations[i].oldPath, relocations[i].newPath); + } + } + + for (i = 0; i < numRelocations; i++) { + if (relocations[i].newPath == NULL) continue; + size_t len = strlen(relocations[i].newPath); + if (len > maxlen) maxlen = len; + } + + headerGet(h, RPMTAG_BASENAMES, &bnames, HEADERGET_MINMEM); + headerGet(h, RPMTAG_DIRINDEXES, &dindexes, HEADERGET_ALLOC); + headerGet(h, RPMTAG_DIRNAMES, &dnames, HEADERGET_MINMEM); + headerGet(h, RPMTAG_FILEMODES, &fmodes, HEADERGET_MINMEM); + /* TODO XXX ugh.. use rpmtd iterators & friends instead */ + baseNames = bnames.data; + dirIndexes = dindexes.data; + fileCount = rpmtdCount(&bnames); + dirCount = rpmtdCount(&dnames); + /* XXX TODO: use rpmtdDup() instead */ + dirNames = dnames.data = duparray(dnames.data, dirCount); + dnames.flags |= RPMTD_PTR_ALLOCED; + + /* + * For all relocations, we go through sorted file/relocation lists + * backwards so that /usr/local relocations take precedence over /usr + * ones. + */ + + /* Relocate individual paths. */ + + for (i = fileCount - 1; i >= 0; i--) { + rpmFileTypes ft; + int fnlen; + + size_t len = maxlen + + strlen(dirNames[dirIndexes[i]]) + strlen(baseNames[i]) + 1; + if (len >= fileAlloced) { + fileAlloced = len * 2; + fn = xrealloc(fn, fileAlloced); + } + +assert(fn != NULL); /* XXX can't happen */ + *fn = '\0'; + fnlen = stpcpy( stpcpy(fn, dirNames[dirIndexes[i]]), baseNames[i]) - fn; + + /* + * See if this file path needs relocating. + */ + /* + * XXX FIXME: Would a bsearch of the (already sorted) + * relocation list be a good idea? + */ + for (j = numRelocations - 1; j >= 0; j--) { + if (relocations[j].oldPath == NULL) /* XXX can't happen */ + continue; + len = !rstreq(relocations[j].oldPath, "/") + ? strlen(relocations[j].oldPath) + : 0; + + if (fnlen < len) + continue; + /* + * Only subdirectories or complete file paths may be relocated. We + * don't check for '\0' as our directory names all end in '/'. + */ + if (!(fn[len] == '/' || fnlen == len)) + continue; + + if (!rstreqn(relocations[j].oldPath, fn, len)) + continue; + break; + } + if (j < 0) continue; + + rpmtdSetIndex(&fmodes, i); + ft = rpmfiWhatis(rpmtdGetNumber(&fmodes)); + + /* On install, a relocate to NULL means skip the path. */ + if (relocations[j].newPath == NULL) { + if (ft == XDIR) { + /* Start with the parent, looking for directory to exclude. */ + for (j = dirIndexes[i]; j < dirCount; j++) { + len = strlen(dirNames[j]) - 1; + while (len > 0 && dirNames[j][len-1] == '/') len--; + if (fnlen != len) + continue; + if (!rstreqn(fn, dirNames[j], fnlen)) + continue; + break; + } + } + rpmfsSetAction(fs, i, FA_SKIPNSTATE); + rpmlog(RPMLOG_DEBUG, "excluding %s %s\n", + ftstring(ft), fn); + continue; + } + + /* Relocation on full paths only, please. */ + if (fnlen != len) continue; + + rpmlog(RPMLOG_DEBUG, "relocating %s to %s\n", + fn, relocations[j].newPath); + nrelocated++; + + strcpy(fn, relocations[j].newPath); + { char * te = strrchr(fn, '/'); + if (te) { + if (te > fn) te++; /* root is special */ + fnlen = te - fn; + } else + te = fn + strlen(fn); + if (!rstreq(baseNames[i], te)) { /* basename changed too? */ + if (!haveRelocatedBase) { + /* XXX TODO: use rpmtdDup() instead */ + bnames.data = baseNames = duparray(baseNames, fileCount); + bnames.flags |= RPMTD_PTR_ALLOCED; + haveRelocatedBase = 1; + } + free(baseNames[i]); + baseNames[i] = xstrdup(te); + } + *te = '\0'; /* terminate new directory name */ + } + + /* Does this directory already exist in the directory list? */ + for (j = 0; j < dirCount; j++) { + if (fnlen != strlen(dirNames[j])) + continue; + if (!rstreqn(fn, dirNames[j], fnlen)) + continue; + break; + } + + if (j < dirCount) { + dirIndexes[i] = j; + continue; + } + + /* Creating new paths is a pita */ + dirNames = dnames.data = xrealloc(dnames.data, + sizeof(*dirNames) * (dirCount + 1)); + + dirNames[dirCount] = xstrdup(fn); + dirIndexes[i] = dirCount; + dirCount++; + dnames.count++; + } + + /* Finish off by relocating directories. */ + for (i = dirCount - 1; i >= 0; i--) { + for (j = numRelocations - 1; j >= 0; j--) { + + if (relocations[j].oldPath == NULL) /* XXX can't happen */ + continue; + size_t len = !rstreq(relocations[j].oldPath, "/") + ? strlen(relocations[j].oldPath) + : 0; + + if (len && !rstreqn(relocations[j].oldPath, dirNames[i], len)) + continue; + + /* + * Only subdirectories or complete file paths may be relocated. We + * don't check for '\0' as our directory names all end in '/'. + */ + if (dirNames[i][len] != '/') + continue; + + if (relocations[j].newPath) { /* Relocate the path */ + char *t = NULL; + rstrscat(&t, relocations[j].newPath, (dirNames[i] + len), NULL); + /* Unfortunatly rpmCleanPath strips the trailing slash.. */ + (void) rpmCleanPath(t); + rstrcat(&t, "/"); + + rpmlog(RPMLOG_DEBUG, + "relocating directory %s to %s\n", dirNames[i], t); + free(dirNames[i]); + dirNames[i] = t; + nrelocated++; + } + } + } + + /* Save original filenames in header and replace (relocated) filenames. */ + if (nrelocated) { + saveRelocs(h, &bnames, &dnames, &dindexes); + } + + rpmtdFreeData(&bnames); + rpmtdFreeData(&dnames); + rpmtdFreeData(&dindexes); + rpmtdFreeData(&fmodes); + free(fn); +} + +rpmfi rpmfiFree(rpmfi fi) +{ + if (fi == NULL) return NULL; + + if (fi->nrefs > 1) + return rpmfiUnlink(fi); + + if (fi->fc > 0) { + fi->bnl = _free(fi->bnl); + fi->dnl = _free(fi->dnl); + + fi->flinkcache = strcacheFree(fi->flinkcache); + fi->flinks = _free(fi->flinks); + fi->flangs = _free(fi->flangs); + fi->digests = _free(fi->digests); + fi->fcapcache = strcacheFree(fi->fcapcache); + fi->fcaps = _free(fi->fcaps); + + fi->cdict = _free(fi->cdict); + + fi->fuser = _free(fi->fuser); + fi->fgroup = _free(fi->fgroup); + + fi->fstates = _free(fi->fstates); + fi->fps = _free(fi->fps); + + /* these point to header memory if KEEPHEADER is used, dont free */ + if (!(fi->fiflags & RPMFI_KEEPHEADER) && fi->h == NULL) { + fi->fmtimes = _free(fi->fmtimes); + fi->fmodes = _free(fi->fmodes); + fi->fflags = _free(fi->fflags); + fi->vflags = _free(fi->vflags); + fi->fsizes = _free(fi->fsizes); + fi->frdevs = _free(fi->frdevs); + fi->finodes = _free(fi->finodes); + fi->dil = _free(fi->dil); + + fi->fcolors = _free(fi->fcolors); + fi->fcdictx = _free(fi->fcdictx); + fi->ddict = _free(fi->ddict); + fi->fddictx = _free(fi->fddictx); + fi->fddictn = _free(fi->fddictn); + + } + } + + fi->fsm = freeFSM(fi->fsm); + + fi->fn = _free(fi->fn); + fi->apath = _free(fi->apath); + + fi->replacedSizes = _free(fi->replacedSizes); + + fi->h = headerFree(fi->h); + + (void) rpmfiUnlink(fi); + memset(fi, 0, sizeof(*fi)); /* XXX trash and burn */ + fi = _free(fi); + + return NULL; +} + +/* Helper to push header tag data into a string cache */ +static scidx_t *cacheTag(strcache cache, Header h, rpmTag tag) +{ + scidx_t *idx = NULL; + struct rpmtd_s td; + if (headerGet(h, tag, &td, HEADERGET_MINMEM)) { + idx = xmalloc(sizeof(*idx) * rpmtdCount(&td)); + int i = 0; + const char *str; + while ((str = rpmtdNextString(&td))) { + idx[i++] = strcachePut(cache, str); + } + rpmtdFreeData(&td); + } + return idx; +} + +#define _hgfi(_h, _tag, _td, _flags, _data) \ + if (headerGet((_h), (_tag), (_td), (_flags))) \ + _data = (td.data) + +rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags) +{ + rpmfi fi = NULL; + rpm_loff_t *asize = NULL; + unsigned char * t; + int isBuild, isSource; + struct rpmtd_s fdigests, digalgo; + struct rpmtd_s td; + headerGetFlags scareFlags = (flags & RPMFI_KEEPHEADER) ? + HEADERGET_MINMEM : HEADERGET_ALLOC; + headerGetFlags defFlags = HEADERGET_ALLOC; + + fi = xcalloc(1, sizeof(*fi)); + if (fi == NULL) /* XXX can't happen */ + goto exit; + + fi->magic = RPMFIMAGIC; + fi->i = -1; + + fi->fiflags = flags; + fi->scareFlags = scareFlags; + + if (headerGet(h, RPMTAG_LONGARCHIVESIZE, &td, HEADERGET_EXT)) { + asize = rpmtdGetUint64(&td); + } + /* 0 means unknown */ + fi->archiveSize = asize ? *asize : 0; + rpmtdFreeData(&td); + + /* Archive size is not set when this gets called from build */ + isBuild = (asize == NULL); + isSource = headerIsSource(h); + if (isBuild) fi->fiflags |= RPMFI_ISBUILD; + if (isSource) fi->fiflags |= RPMFI_ISSOURCE; + + _hgfi(h, RPMTAG_BASENAMES, &td, defFlags, fi->bnl); + fi->fc = rpmtdCount(&td); + if (fi->fc == 0) { + goto exit; + } + + _hgfi(h, RPMTAG_DIRNAMES, &td, defFlags, fi->dnl); + fi->dc = rpmtdCount(&td); + _hgfi(h, RPMTAG_DIRINDEXES, &td, scareFlags, fi->dil); + if (!(flags & RPMFI_NOFILEMODES)) + _hgfi(h, RPMTAG_FILEMODES, &td, scareFlags, fi->fmodes); + if (!(flags & RPMFI_NOFILEFLAGS)) + _hgfi(h, RPMTAG_FILEFLAGS, &td, scareFlags, fi->fflags); + if (!(flags & RPMFI_NOFILEVERIFYFLAGS)) + _hgfi(h, RPMTAG_FILEVERIFYFLAGS, &td, scareFlags, fi->vflags); + if (!(flags & RPMFI_NOFILESIZES)) + _hgfi(h, RPMTAG_FILESIZES, &td, scareFlags, fi->fsizes); + + if (!(flags & RPMFI_NOFILECOLORS)) + _hgfi(h, RPMTAG_FILECOLORS, &td, scareFlags, fi->fcolors); + + if (!(flags & RPMFI_NOFILECLASS)) { + _hgfi(h, RPMTAG_CLASSDICT, &td, scareFlags, fi->cdict); + fi->ncdict = rpmtdCount(&td); + _hgfi(h, RPMTAG_FILECLASS, &td, scareFlags, fi->fcdictx); + } + if (!(flags & RPMFI_NOFILEDEPS)) { + _hgfi(h, RPMTAG_DEPENDSDICT, &td, scareFlags, fi->ddict); + fi->nddict = rpmtdCount(&td); + _hgfi(h, RPMTAG_FILEDEPENDSX, &td, scareFlags, fi->fddictx); + _hgfi(h, RPMTAG_FILEDEPENDSN, &td, scareFlags, fi->fddictn); + } + + if (!(flags & RPMFI_NOFILESTATES)) + _hgfi(h, RPMTAG_FILESTATES, &td, defFlags, fi->fstates); + + if (!(flags & RPMFI_NOFILECAPS) && headerIsEntry(h, RPMTAG_FILECAPS)) { + fi->fcapcache = strcacheNew(); + fi->fcaps = cacheTag(fi->fcapcache, h, RPMTAG_FILECAPS); + } + + if (!(flags & RPMFI_NOFILELINKTOS)) { + fi->flinkcache = strcacheNew(); + fi->flinks = cacheTag(fi->flinkcache, h, RPMTAG_FILELINKTOS); + } + /* FILELANGS are only interesting when installing */ + if ((headerGetInstance(h) == 0) && !(flags & RPMFI_NOFILELANGS)) + fi->flangs = cacheTag(langcache, h, RPMTAG_FILELANGS); + + /* See if the package has non-md5 file digests */ + fi->digestalgo = PGPHASHALGO_MD5; + if (headerGet(h, RPMTAG_FILEDIGESTALGO, &digalgo, HEADERGET_MINMEM)) { + uint32_t *algo = rpmtdGetUint32(&digalgo); + /* Hmm, what to do with unknown digest algorithms? */ + if (algo && rpmDigestLength(*algo) != 0) { + fi->digestalgo = *algo; + } + } + + fi->digests = NULL; + /* grab hex digests from header and store in binary format */ + if (!(flags & RPMFI_NOFILEDIGESTS) && + headerGet(h, RPMTAG_FILEDIGESTS, &fdigests, HEADERGET_MINMEM)) { + const char *fdigest; + size_t diglen = rpmDigestLength(fi->digestalgo); + fi->digests = t = xmalloc(rpmtdCount(&fdigests) * diglen); + + while ((fdigest = rpmtdNextString(&fdigests))) { + if (!(fdigest && *fdigest != '\0')) { + memset(t, 0, diglen); + t += diglen; + continue; + } + for (int j = 0; j < diglen; j++, t++, fdigest += 2) + *t = (rnibble(fdigest[0]) << 4) | rnibble(fdigest[1]); + } + rpmtdFreeData(&fdigests); + } + + /* XXX TR_REMOVED doesn;t need fmtimes, frdevs, finodes */ + if (!(flags & RPMFI_NOFILEMTIMES)) + _hgfi(h, RPMTAG_FILEMTIMES, &td, scareFlags, fi->fmtimes); + if (!(flags & RPMFI_NOFILERDEVS)) + _hgfi(h, RPMTAG_FILERDEVS, &td, scareFlags, fi->frdevs); + if (!(flags & RPMFI_NOFILEINODES)) + _hgfi(h, RPMTAG_FILEINODES, &td, scareFlags, fi->finodes); + + if (!(flags & RPMFI_NOFILEUSER)) + fi->fuser = cacheTag(ugcache, h, RPMTAG_FILEUSERNAME); + if (!(flags & RPMFI_NOFILEGROUP)) + fi->fgroup = cacheTag(ugcache, h, RPMTAG_FILEGROUPNAME); + + /* lazily alloced from rpmfiFN() */ + fi->fn = NULL; + +exit: + + if (fi != NULL) { + fi->h = (fi->fiflags & RPMFI_KEEPHEADER) ? headerLink(h) : NULL; + } + + /* FIX: rpmfi null annotations */ + return rpmfiLink(fi); +} + +void rpmfiSetFReplacedSize(rpmfi fi, rpm_loff_t newsize) +{ + if (fi != NULL && fi->i >= 0 && fi->i < fi->fc) { + if (fi->replacedSizes == NULL) { + fi->replacedSizes = xcalloc(fi->fc, sizeof(*fi->replacedSizes)); + } + /* XXX watch out, replacedSizes is not rpm_loff_t (yet) */ + fi->replacedSizes[fi->i] = (rpm_off_t) newsize; + } +} + +rpm_loff_t rpmfiFReplacedSize(rpmfi fi) +{ + rpm_loff_t rsize = 0; + if (fi != NULL && fi->i >= 0 && fi->i < fi->fc) { + if (fi->replacedSizes) { + rsize = fi->replacedSizes[fi->i]; + } + } + return rsize; +} + +void rpmfiFpLookup(rpmfi fi, fingerPrintCache fpc) +{ + if (fi->fc > 0 && fi->fps == NULL) { + fi->fps = xcalloc(fi->fc, sizeof(*fi->fps)); + } + fpLookupList(fpc, fi->dnl, fi->bnl, fi->dil, fi->fc, fi->fps); +} + +FSM_t rpmfiFSM(rpmfi fi) +{ + if (fi != NULL && fi->fsm == NULL) { + cpioMapFlags mapflags; + /* Figure out mapflags: + * - path, mode, uid and gid are used by everything + * - all binary packages get SBIT_CHECK set + * - if archive size is not known, we're only building this package, + * different rules apply + */ + mapflags = CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID; + if (fi->fiflags & RPMFI_ISBUILD) { + mapflags |= CPIO_MAP_TYPE; + if (fi->fiflags & RPMFI_ISSOURCE) mapflags |= CPIO_FOLLOW_SYMLINKS; + } else { + if (!(fi->fiflags & RPMFI_ISSOURCE)) mapflags |= CPIO_SBIT_CHECK; + } + fi->fsm = newFSM(mapflags); + } + return (fi != NULL) ? fi->fsm : NULL; +} + +/* + * Generate iterator accessors function wrappers, these do nothing but + * call the corresponding rpmfiFooIndex(fi, fi->[ij]) + */ + +#define RPMFI_ITERFUNC(TYPE, NAME, IXV) \ + TYPE rpmfi ## NAME(rpmfi fi) { return rpmfi ## NAME ## Index(fi, fi ? fi->IXV : -1); } + +RPMFI_ITERFUNC(const char *, BN, i) +RPMFI_ITERFUNC(const char *, DN, j) +RPMFI_ITERFUNC(const char *, FN, i) +RPMFI_ITERFUNC(const char *, FLink, i) +RPMFI_ITERFUNC(const char *, FUser, i) +RPMFI_ITERFUNC(const char *, FGroup, i) +RPMFI_ITERFUNC(const char *, FCaps, i) +RPMFI_ITERFUNC(const char *, FLangs, i) +RPMFI_ITERFUNC(const char *, FClass, i) +RPMFI_ITERFUNC(rpmfileState, FState, i) +RPMFI_ITERFUNC(rpmfileAttrs, FFlags, i) +RPMFI_ITERFUNC(rpmVerifyAttrs, VFlags, i) +RPMFI_ITERFUNC(rpm_mode_t, FMode, i) +RPMFI_ITERFUNC(rpm_rdev_t, FRdev, i) +RPMFI_ITERFUNC(rpm_time_t, FMtime, i) +RPMFI_ITERFUNC(rpm_ino_t, FInode, i) +RPMFI_ITERFUNC(rpm_loff_t, FSize, i) +RPMFI_ITERFUNC(rpm_color_t, FColor, i) +RPMFI_ITERFUNC(uint32_t, FNlink, i) + +const unsigned char * rpmfiFDigest(rpmfi fi, int *algo, size_t *len) +{ + return rpmfiFDigestIndex(fi, fi ? fi->i : -1, algo, len); +} + +uint32_t rpmfiFDepends(rpmfi fi, const uint32_t ** fddictp) +{ + return rpmfiFDependsIndex(fi, fi ? fi->i : -1, fddictp); +} diff --git a/lib/rpmfi.h b/lib/rpmfi.h new file mode 100644 index 0000000..3dcf61b --- /dev/null +++ b/lib/rpmfi.h @@ -0,0 +1,459 @@ +#ifndef H_RPMFI +#define H_RPMFI + +/** \ingroup rpmdep rpmtrans + * \file lib/rpmfi.h + * Structure(s) used for file info tag sets. + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmfi + * File types. + * These are the file types used internally by rpm. The file + * type is determined by applying stat(2) macros like S_ISDIR to + * the file mode tag from a header. The values are arbitrary, + * but are identical to the linux stat(2) file types. + */ +typedef enum rpmFileTypes_e { + PIPE = 1, /*!< pipe/fifo */ + CDEV = 2, /*!< character device */ + XDIR = 4, /*!< directory */ + BDEV = 6, /*!< block device */ + REG = 8, /*!< regular file */ + LINK = 10, /*!< hard link */ + SOCK = 12 /*!< socket */ +} rpmFileTypes; + +/** + * File States (when installed). + */ +typedef enum rpmfileState_e { + RPMFILE_STATE_MISSING = -1, /* used for unavailable data */ + RPMFILE_STATE_NORMAL = 0, + RPMFILE_STATE_REPLACED = 1, + RPMFILE_STATE_NOTINSTALLED = 2, + RPMFILE_STATE_NETSHARED = 3, + RPMFILE_STATE_WRONGCOLOR = 4 +} rpmfileState; + +/** + * File Attributes. + */ +enum rpmfileAttrs_e { + RPMFILE_NONE = 0, + RPMFILE_CONFIG = (1 << 0), /*!< from %%config */ + RPMFILE_DOC = (1 << 1), /*!< from %%doc */ + RPMFILE_ICON = (1 << 2), /*!< from %%donotuse. */ + RPMFILE_MISSINGOK = (1 << 3), /*!< from %%config(missingok) */ + RPMFILE_NOREPLACE = (1 << 4), /*!< from %%config(noreplace) */ + RPMFILE_SPECFILE = (1 << 5), /*!< @todo (unnecessary) marks 1st file in srpm. */ + RPMFILE_GHOST = (1 << 6), /*!< from %%ghost */ + RPMFILE_LICENSE = (1 << 7), /*!< from %%license */ + RPMFILE_README = (1 << 8), /*!< from %%readme */ + RPMFILE_EXCLUDE = (1 << 9), /*!< from %%exclude, internal */ + RPMFILE_UNPATCHED = (1 << 10), /*!< placeholder (SuSE) */ + RPMFILE_PUBKEY = (1 << 11), /*!< from %%pubkey */ +}; + +typedef rpmFlags rpmfileAttrs; + +#define RPMFILE_ALL ~(RPMFILE_NONE) + +/** \ingroup rpmfi + * File disposition(s) during package install/erase transaction. + */ +typedef enum rpmFileAction_e { + FA_UNKNOWN = 0, /*!< initial action for file ... */ + FA_CREATE, /*!< ... copy in from payload. */ + FA_COPYIN, /*!< ... copy in from payload. */ + FA_COPYOUT, /*!< ... copy out to payload. */ + FA_BACKUP, /*!< ... renamed with ".rpmorig" extension. */ + FA_SAVE, /*!< ... renamed with ".rpmsave" extension. */ + FA_SKIP, /*!< ... already replaced, don't remove. */ + FA_ALTNAME, /*!< ... create with ".rpmnew" extension. */ + FA_ERASE, /*!< ... to be removed. */ + FA_SKIPNSTATE, /*!< ... untouched, state "not installed". */ + FA_SKIPNETSHARED, /*!< ... untouched, state "netshared". */ + FA_SKIPCOLOR /*!< ... untouched, state "wrong color". */ +} rpmFileAction; + +#define XFA_SKIPPING(_a) \ + ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPCOLOR) + +/** + * We pass these around as an array with a sentinel. + */ +struct rpmRelocation_s { + char * oldPath; /*!< NULL here evals to RPMTAG_DEFAULTPREFIX, */ + char * newPath; /*!< NULL means to omit the file completely! */ +}; + +/** \ingroup rpmfi + * Reference a file info set instance. + * @param fi file info set + * @return new file info set reference + */ +rpmfi rpmfiLink (rpmfi fi); + +/** \ingroup rpmfi + * Return file count from file info set. + * @param fi file info set + * @return current file count + */ +rpm_count_t rpmfiFC(rpmfi fi); + +/** \ingroup rpmfi + * Return current file index from file info set. + * @param fi file info set + * @return current file index + */ +int rpmfiFX(rpmfi fi); + +/** \ingroup rpmfi + * Set current file index in file info set. + * @param fi file info set + * @param fx new file index + * @return current file index + */ +int rpmfiSetFX(rpmfi fi, int fx); + +/** \ingroup rpmfi + * Return directory count from file info set. + * @param fi file info set + * @return current directory count + */ +rpm_count_t rpmfiDC(rpmfi fi); + +/** \ingroup rpmfi + * Return current directory index from file info set. + * @param fi file info set + * @return current directory index + */ +int rpmfiDX(rpmfi fi); + +/** \ingroup rpmfi + * Set current directory index in file info set. + * @param fi file info set + * @param dx new directory index + * @return current directory index + */ +int rpmfiSetDX(rpmfi fi, int dx); + +/** \ingroup rpmfi + * Return current base name from file info set. + * @param fi file info set + * @return current base name, NULL on invalid + */ +const char * rpmfiBN(rpmfi fi); + +/** \ingroup rpmfi + * Return current directory name from file info set. + * @param fi file info set + * @return current directory, NULL on invalid + */ +const char * rpmfiDN(rpmfi fi); + +/** \ingroup rpmfi + * Return current file name from file info set. + * @param fi file info set + * @return current file name + */ +const char * rpmfiFN(rpmfi fi); + +/** \ingroup rpmfi + * Return current file flags from file info set. + * @param fi file info set + * @return current file flags, 0 on invalid + */ +rpmfileAttrs rpmfiFFlags(rpmfi fi); + +/** \ingroup rpmfi + * Return current file verify flags from file info set. + * @param fi file info set + * @return current file verify flags, 0 on invalid + */ +rpmVerifyAttrs rpmfiVFlags(rpmfi fi); + +/** \ingroup rpmfi + * Return current file mode from file info set. + * @param fi file info set + * @return current file mode, 0 on invalid + */ +rpm_mode_t rpmfiFMode(rpmfi fi); + +/** \ingroup rpmfi + * Return current file state from file info set. + * @param fi file info set + * @return current file state, 0 on invalid + */ +rpmfileState rpmfiFState(rpmfi fi); + +/** \ingroup rpmfi + * Return digest algorithm of a file info set. + * @param fi file info set + * @return digest algorithm of file info set, 0 on invalid + */ +int rpmfiDigestAlgo(rpmfi fi); + +/** \ingroup rpmfi + * Return current file (binary) digest of file info set. + * @param fi file info set + * @retval algo digest hash algoritm used (pass NULL to ignore) + * @retval diglen digest hash length (pass NULL to ignore) + * @return current file digest, NULL on invalid + */ +const unsigned char * rpmfiFDigest(rpmfi fi, int *algo, size_t *diglen); + +/** \ingroup rpmfi + * Return current file (hex) digest of file info set. + * The file info set stores file digests in binary format to conserve + * memory, this converts the binary data back to hex presentation used in + * headers. + * @param fi file info set + * @retval algo digest hash algoritm used (pass NULL to ignore) + * @return current file digest (malloc'ed), NULL on invalid + */ +char * rpmfiFDigestHex(rpmfi fi, int *algo); + +/** \ingroup rpmfi + * Return current file (binary) md5 digest from file info set. + * @deprecated Use rpmfiFDigest() instead + * @param fi file info set + * @return current file md5 digest, NULL on invalid + */ +const unsigned char * rpmfiMD5(rpmfi fi) RPM_GNUC_DEPRECATED; + +/** \ingroup rpmfi + * Return current file linkto (i.e. symlink(2) target) from file info set. + * @param fi file info set + * @return current file linkto, NULL on invalid + */ +const char * rpmfiFLink(rpmfi fi); + +/** \ingroup rpmfi + * Return current file size from file info set. + * @param fi file info set + * @return current file size, 0 on invalid + */ +rpm_loff_t rpmfiFSize(rpmfi fi); + +/** \ingroup rpmfi + * Return current file rdev from file info set. + * @param fi file info set + * @return current file rdev, 0 on invalid + */ +rpm_rdev_t rpmfiFRdev(rpmfi fi); + +/** \ingroup rpmfi + * Return current file inode from file info set. + * @param fi file info set + * @return current file inode, 0 on invalid + */ +rpm_ino_t rpmfiFInode(rpmfi fi); + +/** \ingroup rpmfi + * Return union of all file color bits from file info set. + * @param fi file info set + * @return current color + */ +rpm_color_t rpmfiColor(rpmfi fi); + +/** \ingroup rpmfi + * Return current file color bits from file info set. + * @param fi file info set + * @return current file color + */ +rpm_color_t rpmfiFColor(rpmfi fi); + +/** \ingroup rpmfi + * Return current file class from file info set. + * @param fi file info set + * @return current file class, 0 on invalid + */ +const char * rpmfiFClass(rpmfi fi); + +/** \ingroup rpmfi + * Return current file depends dictionary from file info set. + * @param fi file info set + * @retval *fddictp file depends dictionary array (or NULL) + * @return no. of file depends entries, 0 on invalid + */ +uint32_t rpmfiFDepends(rpmfi fi, + const uint32_t ** fddictp); + +/** \ingroup rpmfi + * Return (calculated) current file nlink count from file info set. + * @param fi file info set + * @return current file nlink count, 0 on invalid + */ +uint32_t rpmfiFNlink(rpmfi fi); + +/** \ingroup rpmfi + * Return current file modify time from file info set. + * @param fi file info set + * @return current file modify time, 0 on invalid + */ +rpm_time_t rpmfiFMtime(rpmfi fi); + +/** \ingroup rpmfi + * Return current file owner from file info set. + * @param fi file info set + * @return current file owner, NULL on invalid + */ +const char * rpmfiFUser(rpmfi fi); + +/** \ingroup rpmfi + * Return current file group from file info set. + * @param fi file info set + * @return current file group, NULL on invalid + */ +const char * rpmfiFGroup(rpmfi fi); + +/** \ingroup rpmfi + * Return textual representation of current file capabilities + * from file info set. See cap_from_text(3) for details. + * @param fi file info set + * @return file capability description, "" for no capabilities + * and NULL on invalid + */ +const char * rpmfiFCaps(rpmfi fi); + +/** \ingroup rpmfi + * Return current file language(s) from file info set. + * @param fi file info set + * @return current file language(s), NULL on invalid + */ +const char * rpmfiFLangs(rpmfi fi); + +/** \ingroup rpmfi + * Return next file iterator index. + * @param fi file info set + * @return file iterator index, -1 on termination + */ +int rpmfiNext(rpmfi fi); + +/** \ingroup rpmfi + * Initialize file iterator index. + * @param fi file info set + * @param fx file iterator index + * @return file info set + */ +rpmfi rpmfiInit(rpmfi fi, int fx); + +/** \ingroup rpmfi + * Return next directory iterator index. + * @param fi file info set + * @return directory iterator index, -1 on termination + */ +int rpmfiNextD(rpmfi fi); + +/** \ingroup rpmfi + * Initialize directory iterator index. + * @param fi file info set + * @param dx directory iterator index + * @return file info set, NULL if dx is out of range + */ +rpmfi rpmfiInitD(rpmfi fi, int dx); + +/** \ingroup rpmfi + * Destroy a file info set. + * @param fi file info set + * @return NULL always + */ +rpmfi rpmfiFree(rpmfi fi); + +enum rpmfiFlags_e { + RPMFI_NOHEADER = 0, + RPMFI_KEEPHEADER = (1 << 0), + RPMFI_NOFILECLASS = (1 << 1), + RPMFI_NOFILEDEPS = (1 << 2), + RPMFI_NOFILELANGS = (1 << 3), + RPMFI_NOFILEUSER = (1 << 4), + RPMFI_NOFILEGROUP = (1 << 5), + RPMFI_NOFILEMODES = (1 << 6), + RPMFI_NOFILESIZES = (1 << 7), + RPMFI_NOFILECAPS = (1 << 8), + RPMFI_NOFILELINKTOS = (1 << 9), + RPMFI_NOFILEDIGESTS = (1 << 10), + RPMFI_NOFILEMTIMES = (1 << 11), + RPMFI_NOFILERDEVS = (1 << 12), + RPMFI_NOFILEINODES = (1 << 13), + RPMFI_NOFILESTATES = (1 << 14), + RPMFI_NOFILECOLORS = (1 << 15), + RPMFI_NOFILEVERIFYFLAGS = (1 << 16), + RPMFI_NOFILEFLAGS = (1 << 17), + RPMFI_ISBUILD = (1 << 30), /* internal */ + RPMFI_ISSOURCE = (1 << 31), /* internal */ +}; + +typedef rpmFlags rpmfiFlags; + +#define RPMFI_FLAGS_ERASE \ + (RPMFI_NOFILECLASS | RPMFI_NOFILELANGS | \ + RPMFI_NOFILEMTIMES | RPMFI_NOFILERDEVS | RPMFI_NOFILEINODES | \ + RPMFI_NOFILEVERIFYFLAGS) + +#define RPMFI_FLAGS_INSTALL \ + (RPMFI_NOFILECLASS | RPMFI_NOFILEVERIFYFLAGS) + +#define RPMFI_FLAGS_VERIFY \ + (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \ + RPMFI_NOFILECOLORS) + +#define RPMFI_FLAGS_QUERY \ + (RPMFI_NOFILECLASS | RPMFI_NOFILEDEPS | RPMFI_NOFILELANGS | \ + RPMFI_NOFILECOLORS | RPMFI_NOFILEVERIFYFLAGS) + +/** \ingroup rpmfi + * Create and load a file info set. + * @param ts unused + * @param h header + * @param tagN unused + * @param flags Flags to control what information is loaded. + * @return new file info set + */ +rpmfi rpmfiNew(const rpmts ts, Header h, rpmTagVal tagN, rpmfiFlags flags); + +/** \ingroup rpmfi + * Return file type from mode_t. + * @param mode file mode bits (from header) + * @return file type + */ +rpmFileTypes rpmfiWhatis(rpm_mode_t mode); + +/** \ingroup rpmfi + * Return file info comparison. + * @param afi 1st file info + * @param bfi 2nd file info + * @return 0 if identical + */ +int rpmfiCompare(const rpmfi afi, const rpmfi bfi); + +/** \ingroup rpmfi + * Return file disposition. + * @param ofi old file info + * @param nfi new file info + * @param skipMissing OK to skip missing files? + * @return file dispostion + */ +rpmFileAction rpmfiDecideFate(const rpmfi ofi, rpmfi nfi, int skipMissing); + +/** \ingroup rpmfi + * Return whether file is conflicting config + * @param fi file info + * @return 1 if config file and file on disk conflicts + */ +int rpmfiConfigConflict(const rpmfi fi); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMDS */ diff --git a/lib/rpmfi_internal.h b/lib/rpmfi_internal.h new file mode 100644 index 0000000..dc02eaf --- /dev/null +++ b/lib/rpmfi_internal.h @@ -0,0 +1,172 @@ +#ifndef _RPMFI_INTERNAL_H +#define _RPMFI_INTERNAL_H + +#include +#include +#include "lib/fsm.h" /* for FSM_t */ +#include "lib/fprint.h" + +/* + * This limits maximum unique strings (user + group names) from packages to + * 65535, should be plenty but easy to bump if ever needed. + */ +typedef uint16_t scidx_t; +typedef struct strcache_s *strcache; + +#define RPMFIMAGIC 0x09697923 + +/** + * A package filename set. + */ +struct rpmfi_s { + int i; /*!< Current file index. */ + int j; /*!< Current directory index. */ + + Header h; /*!< Header for file info set (or NULL) */ + + const char ** bnl; /*!< Base name(s) (from header) */ + const char ** dnl; /*!< Directory name(s) (from header) */ + + strcache flinkcache; /*!< File link cache */ + scidx_t * flinks; /*!< Index to file link(s) cache */ + scidx_t * flangs; /*!< Index to file lang(s) cache */ + + uint32_t * dil; /*!< Directory indice(s) (from header) */ + rpm_flag_t * fflags; /*!< File flag(s) (from header) */ + rpm_off_t * fsizes; /*!< File size(s) (from header) */ + rpm_time_t * fmtimes; /*!< File modification time(s) (from header) */ + rpm_mode_t * fmodes; /*!< File mode(s) (from header) */ + rpm_rdev_t * frdevs; /*!< File rdev(s) (from header) */ + rpm_ino_t * finodes; /*!< File inodes(s) (from header) */ + + scidx_t *fuser; /*!< Index to file owner(s) cache */ + scidx_t *fgroup; /*!< Index to file group(s) cache */ + + char * fstates; /*!< File state(s) (from header) */ + + rpm_color_t * fcolors; /*!< File color bits (header) */ + strcache fcapcache; /*!< File capabilities cache */ + scidx_t * fcaps; /*!< Index to file cap(s) cache */ + + char ** cdict; /*!< File class dictionary (header) */ + rpm_count_t ncdict; /*!< No. of class entries. */ + uint32_t * fcdictx; /*!< File class dictionary index (header) */ + + uint32_t * ddict; /*!< File depends dictionary (header) */ + rpm_count_t nddict; /*!< No. of depends entries. */ + uint32_t * fddictx; /*!< File depends dictionary start (header) */ + uint32_t * fddictn; /*!< File depends dictionary count (header) */ + rpm_flag_t * vflags; /*!< File verify flag(s) (from header) */ + + rpm_count_t dc; /*!< No. of directories. */ + rpm_count_t fc; /*!< No. of files. */ + + rpmfiFlags fiflags; /*!< file info set control flags */ + headerGetFlags scareFlags; /*!< headerGet flags wrt scareMem */ + + struct fingerPrint_s * fps; /*!< File fingerprint(s). */ + + int digestalgo; /*!< File digest algorithm */ + unsigned char * digests; /*!< File digests in binary. */ + + char * fn; /*!< File name buffer. */ + + rpm_loff_t archiveSize; + char ** apath; + FSM_t fsm; /*!< File state machine data. */ + rpm_off_t * replacedSizes; /*!< (TR_ADDED) */ + int magic; + int nrefs; /*!< Reference count. */ +}; + +#ifdef __cplusplus +extern "C" { +#endif + +RPM_GNUC_INTERNAL +int rpmfiDIIndex(rpmfi fi, int dx); + +RPM_GNUC_INTERNAL +const char * rpmfiBNIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +const char * rpmfiDNIndex(rpmfi fi, int jx); + +RPM_GNUC_INTERNAL +const char * rpmfiFNIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +rpmVerifyAttrs rpmfiVFlagsIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +rpmfileState rpmfiFStateIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +const char * rpmfiFLinkIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +rpm_loff_t rpmfiFSizeIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +rpm_color_t rpmfiFColorIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +const char * rpmfiFClassIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +uint32_t rpmfiFDependsIndex(rpmfi fi, int ix, const uint32_t ** fddictp); + +RPM_GNUC_INTERNAL +uint32_t rpmfiFNlinkIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +const char * rpmfiFLangsIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +rpmfileAttrs rpmfiFFlagsIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +rpm_mode_t rpmfiFModeIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +const unsigned char * rpmfiFDigestIndex(rpmfi fi, int ix, int *algo, size_t *len); + +RPM_GNUC_INTERNAL +rpm_rdev_t rpmfiFRdevIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +rpm_ino_t rpmfiFInodeIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +rpm_time_t rpmfiFMtimeIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +const char * rpmfiFUserIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +const char * rpmfiFGroupIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +const char * rpmfiFCapsIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +struct fingerPrint_s *rpmfiFpsIndex(rpmfi fi, int ix); + +RPM_GNUC_INTERNAL +void rpmfiSetFReplacedSize(rpmfi fi, rpm_loff_t newsize); + +RPM_GNUC_INTERNAL +rpm_loff_t rpmfiFReplacedSize(rpmfi fi); + +RPM_GNUC_INTERNAL +void rpmfiFpLookup(rpmfi fi, fingerPrintCache fpc); + +/* XXX can't be internal as build code needs this */ +FSM_t rpmfiFSM(rpmfi fi); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMFI_INTERNAL_H */ + diff --git a/lib/rpmfs.c b/lib/rpmfs.c new file mode 100644 index 0000000..a8b1b5b --- /dev/null +++ b/lib/rpmfs.c @@ -0,0 +1,120 @@ +#include "system.h" +#include +#include "lib/rpmfs.h" +#include "debug.h" + +struct rpmfs_s { + unsigned int fc; + + rpm_fstate_t * states; + rpmFileAction * actions; /*!< File disposition(s). */ + + sharedFileInfo replaced; /*!< (TR_ADDED) to be replaced files in the rpmdb */ + int numReplaced; + int allocatedReplaced; +}; + +rpmfs rpmfsNew(Header h, rpmElementType type) +{ + struct rpmtd_s bnames; + rpmfs fs = xcalloc(1, sizeof(*fs)); + + headerGet(h, RPMTAG_BASENAMES, &bnames, HEADERGET_MINMEM); + fs->fc = rpmtdCount(&bnames); + rpmtdFreeData(&bnames); + + fs->actions = xmalloc(fs->fc * sizeof(*fs->actions)); + memset(fs->actions, FA_UNKNOWN, fs->fc * sizeof(*fs->actions)); + if (type == TR_ADDED) { + fs->states = xmalloc(sizeof(*fs->states) * fs->fc); + memset(fs->states, RPMFILE_STATE_NORMAL, fs->fc); + } + return fs; +} + +rpmfs rpmfsFree(rpmfs fs) +{ + if (fs != NULL) { + fs->replaced = _free(fs->replaced); + fs->states = _free(fs->states); + fs->actions = _free(fs->actions); + fs = _free(fs); + } + return NULL; +} + +rpm_count_t rpmfsFC(rpmfs fs) +{ + return (fs != NULL) ? fs->fc : 0; +} + +void rpmfsAddReplaced(rpmfs fs, int pkgFileNum, int otherPkg, int otherFileNum) +{ + if (!fs->replaced) { + fs->replaced = xcalloc(3, sizeof(*fs->replaced)); + fs->allocatedReplaced = 3; + } + if (fs->numReplaced>=fs->allocatedReplaced) { + fs->allocatedReplaced += (fs->allocatedReplaced>>1) + 2; + fs->replaced = xrealloc(fs->replaced, fs->allocatedReplaced*sizeof(*fs->replaced)); + } + fs->replaced[fs->numReplaced].pkgFileNum = pkgFileNum; + fs->replaced[fs->numReplaced].otherPkg = otherPkg; + fs->replaced[fs->numReplaced].otherFileNum = otherFileNum; + + fs->numReplaced++; +} + +sharedFileInfo rpmfsGetReplaced(rpmfs fs) +{ + if (fs && fs->numReplaced) + return fs->replaced; + else + return NULL; +} + +sharedFileInfo rpmfsNextReplaced(rpmfs fs , sharedFileInfo replaced) +{ + if (fs && replaced) { + replaced++; + if (replaced - fs->replaced < fs->numReplaced) + return replaced; + } + return NULL; +} + +void rpmfsSetState(rpmfs fs, unsigned int ix, rpmfileState state) +{ + assert(ix < fs->fc); + fs->states[ix] = state; +} + +rpmfileState rpmfsGetState(rpmfs fs, unsigned int ix) +{ + assert(ix < fs->fc); + if (fs->states) return fs->states[ix]; + return RPMFILE_STATE_MISSING; +} + +rpm_fstate_t * rpmfsGetStates(rpmfs fs) +{ + return fs->states; +} + +rpmFileAction rpmfsGetAction(rpmfs fs, unsigned int ix) +{ + rpmFileAction action; + if (fs->actions != NULL && ix < fs->fc) { + action = fs->actions[ix]; + } else { + action = FA_UNKNOWN; + } + return action; +} + +void rpmfsSetAction(rpmfs fs, unsigned int ix, rpmFileAction action) +{ + if (fs->actions != NULL && ix < fs->fc) { + fs->actions[ix] = action; + } +} diff --git a/lib/rpmfs.h b/lib/rpmfs.h new file mode 100644 index 0000000..129bc65 --- /dev/null +++ b/lib/rpmfs.h @@ -0,0 +1,63 @@ +#ifndef _RPMFS_H +#define _RPMFS_H + +#include +#include + +/** \ingroup rpmfs + * Transaction element file states. + */ +typedef struct rpmfs_s * rpmfs; +typedef struct sharedFileInfo_s * sharedFileInfo; +typedef char rpm_fstate_t; + +/* XXX psm needs access to these */ +struct sharedFileInfo_s { + int pkgFileNum; + int otherPkg; + int otherFileNum; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +RPM_GNUC_INTERNAL +rpmfs rpmfsNew(Header h, rpmElementType type); + +RPM_GNUC_INTERNAL +rpmfs rpmfsFree(rpmfs fs); + +RPM_GNUC_INTERNAL +rpm_count_t rpmfsFC(rpmfs fs); + +RPM_GNUC_INTERNAL +void rpmfsAddReplaced(rpmfs fs, int pkgFileNum, int otherPkg, int otherFileNum); + +RPM_GNUC_INTERNAL +sharedFileInfo rpmfsGetReplaced(rpmfs fs); + +RPM_GNUC_INTERNAL +sharedFileInfo rpmfsNextReplaced(rpmfs fs , sharedFileInfo replaced); + +RPM_GNUC_INTERNAL +void rpmfsSetState(rpmfs fs, unsigned int ix, rpmfileState state); + +RPM_GNUC_INTERNAL +rpmfileState rpmfsGetState(rpmfs fs, unsigned int ix); + +/* May return NULL */ +RPM_GNUC_INTERNAL +rpm_fstate_t * rpmfsGetStates(rpmfs fs); + +RPM_GNUC_INTERNAL +rpmFileAction rpmfsGetAction(rpmfs fs, unsigned int ix); + +/* XXX this should be internal too but build code needs for now */ +void rpmfsSetAction(rpmfs fs, unsigned int ix, rpmFileAction action); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMFS_H */ diff --git a/lib/rpmgi.c b/lib/rpmgi.c new file mode 100644 index 0000000..19f8f9f --- /dev/null +++ b/lib/rpmgi.c @@ -0,0 +1,241 @@ +/** \ingroup rpmio + * \file lib/rpmgi.c + */ +#include "system.h" + +#include + +#include +#include /* rpmReadPackageFile */ +#include +#include /* XXX rpmExpand */ +#include +#include + +#include "lib/rpmgi.h" +#include "lib/manifest.h" + +#include "debug.h" + +RPM_GNUC_INTERNAL +rpmgiFlags giFlags = RPMGI_NONE; + +/** \ingroup rpmgi + */ +struct rpmgi_s { + rpmts ts; /*!< Iterator transaction set. */ + + rpmgiFlags flags; /*!< Iterator control bits. */ + int i; /*!< Element index. */ + int errors; + + ARGV_t argv; + int argc; +}; + +/** + * Open a file after macro expanding path. + * @todo There are two error messages printed on header, then manifest failures. + * @param path file path + * @param fmode open mode + * @return file handle + */ +static FD_t rpmgiOpen(const char * path, const char * fmode) +{ + char * fn = rpmExpand(path, NULL); + FD_t fd = Fopen(fn, fmode); + + if (fd == NULL || Ferror(fd)) { + rpmlog(RPMLOG_ERR, _("open of %s failed: %s\n"), fn, Fstrerror(fd)); + if (fd != NULL) (void) Fclose(fd); + fd = NULL; + } + fn = _free(fn); + + return fd; +} + +/** + * Load manifest into iterator arg list. + * @param gi generalized iterator + * @param path file path + * @return RPMRC_OK on success + */ +static rpmRC rpmgiLoadManifest(rpmgi gi, const char * path) +{ + FD_t fd = rpmgiOpen(path, "r.ufdio"); + rpmRC rpmrc = RPMRC_FAIL; + + if (fd != NULL) { + rpmrc = rpmReadPackageManifest(fd, &gi->argc, &gi->argv); + (void) Fclose(fd); + } + return rpmrc; +} + +/** + * Return header from package. + * @param gi generalized iterator + * @param path file path + * @retval hdrp header (NULL on failure) + * @return 1 if path could be opened, 0 if not + */ +static int rpmgiReadHeader(rpmgi gi, const char * path, Header * hdrp) +{ + FD_t fd = rpmgiOpen(path, "r.ufdio"); + Header h = NULL; + + if (fd != NULL) { + /* XXX what if path needs expansion? */ + rpmRC rpmrc = rpmReadPackageFile(gi->ts, fd, path, &h); + + (void) Fclose(fd); + + switch (rpmrc) { + case RPMRC_NOTFOUND: + /* XXX Read a package manifest. Restart ftswalk on success. */ + case RPMRC_FAIL: + default: + h = headerFree(h); + break; + case RPMRC_NOTTRUSTED: + case RPMRC_NOKEY: + case RPMRC_OK: + break; + } + } + + *hdrp = h; + return (fd != NULL); +} + +/** + * Read next header from package, lazily expanding manifests as found. + * @todo An empty file read as manifest truncates argv returning RPMRC_NOTFOUND. + * @todo Chained manifests lose an arg someplace. + * @param gi generalized iterator + * @return header on success + */ +static Header rpmgiLoadReadHeader(rpmgi gi) +{ + Header h = NULL; + + if (gi->argv != NULL && gi->argv[gi->i] != NULL) + do { + char * fn = gi->argv[gi->i]; + int rc = rpmgiReadHeader(gi, fn, &h); + + if (h != NULL || (gi->flags & RPMGI_NOMANIFEST) || rc == 0) + break; + + /* Not a header, so try for a manifest. */ + gi->argv[gi->i] = NULL; /* Mark the insertion point */ + if (rpmgiLoadManifest(gi, fn) != RPMRC_OK) { + gi->argv[gi->i] = fn; /* Manifest failed, restore fn */ + rpmlog(RPMLOG_ERR, + _("%s: not an rpm package (or package manifest)\n"), fn); + break; + } + fn = _free(fn); + } while (1); + + return h; +} + + +/** + * Append globbed arg list to iterator. + * @param gi generalized iterator + * @param argv arg list to be globbed (or NULL) + */ +static void rpmgiGlobArgv(rpmgi gi, ARGV_const_t argv) +{ + const char * arg; + int ac = 0; + int xx; + + /* XXX Expand globs only if requested */ + if ((gi->flags & RPMGI_NOGLOB)) { + if (argv != NULL) { + while (argv[ac] != NULL) + ac++; + xx = argvAppend(&gi->argv, argv); + } + gi->argc = ac; + return; + } + + if (argv != NULL) + while ((arg = *argv++) != NULL) { + char * t = rpmEscapeSpaces(arg); + char ** av = NULL; + + xx = rpmGlob(t, &ac, &av); + xx = argvAppend(&gi->argv, av); + gi->argc += ac; + av = argvFree(av); + t = _free(t); + ac = 0; + } + return; +} + +rpmgi rpmgiFree(rpmgi gi) +{ + if (gi == NULL) + return NULL; + + gi->ts = rpmtsFree(gi->ts); + gi->argv = argvFree(gi->argv); + + memset(gi, 0, sizeof(*gi)); /* XXX trash and burn */ + gi = _free(gi); + return NULL; +} + +rpmgi rpmgiNew(rpmts ts, rpmgiFlags flags, ARGV_const_t argv) +{ + rpmgi gi = xcalloc(1, sizeof(*gi)); + + gi->ts = rpmtsLink(ts); + + gi->flags = flags; + gi->i = -1; + gi->errors = 0; + + gi->flags = flags; + gi->argv = argvNew(); + gi->argc = 0; + rpmgiGlobArgv(gi, argv); + + return gi; +} + +Header rpmgiNext(rpmgi gi) +{ + Header h = NULL; + + if (gi != NULL && ++gi->i >= 0) { + /* + * Read next header, lazily expanding manifests as found, + * count + skip errors. + */ + while (gi->i < gi->argc) { + if ((h = rpmgiLoadReadHeader(gi)) != NULL) + break; + gi->errors++; + gi->i++; + } + + /* Out of things to try, end of iteration */ + if (h == NULL) + gi->i = -1; + } + + return h; +} + +int rpmgiNumErrors(rpmgi gi) +{ + return (gi != NULL ? gi->errors : -1); +} diff --git a/lib/rpmgi.h b/lib/rpmgi.h new file mode 100644 index 0000000..32b8806 --- /dev/null +++ b/lib/rpmgi.h @@ -0,0 +1,65 @@ +#ifndef H_RPMGI +#define H_RPMGI + +/** \ingroup rpmio + * \file lib/rpmgi.h + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmgi + */ +enum rpmgiFlags_e { + RPMGI_NONE = 0, + RPMGI_NOGLOB = (1 << 2), + RPMGI_NOMANIFEST = (1 << 3), +}; + +typedef rpmFlags rpmgiFlags; + +extern rpmgiFlags giFlags; + +/** \ingroup rpmgi + * Destroy a generalized iterator. + * @param gi generalized iterator + * @return NULL always + */ +RPM_GNUC_INTERNAL +rpmgi rpmgiFree(rpmgi gi); + +/** \ingroup rpmgi + * Return a generalized iterator. + * @param ts transaction set + * @param flags iterator flags + * @param argv arg list + * @return new iterator + */ +RPM_GNUC_INTERNAL +rpmgi rpmgiNew(rpmts ts, rpmgiFlags flags, ARGV_const_t argv); + +/** \ingroup rpmgi + * Perform next iteration step. + * @param gi generalized iterator + * @returns next header (new reference), NULL on end of iteration + */ +RPM_GNUC_INTERNAL +Header rpmgiNext(rpmgi gi); + +/** \ingroup rpmgi + * Return number of errors (file not found etc) encountered during iteration + * @param gi generalized iterator + * @return number of errors + */ +RPM_GNUC_INTERNAL +int rpmgiNumErrors(rpmgi gi); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMGI */ diff --git a/lib/rpmhash.C b/lib/rpmhash.C new file mode 100644 index 0000000..628f2dd --- /dev/null +++ b/lib/rpmhash.C @@ -0,0 +1,272 @@ +/** + * \file lib/rpmhash.c + * Hash table implemenation + */ + +#include "system.h" +#include "debug.h" + +#define Bucket JOIN(HASHTYPE,Buket) +#define Bucket_s JOIN(HASHTYPE,Buket_s) + +typedef struct Bucket_s * Bucket; + +/** + */ +struct Bucket_s { + Bucket next; /*!< pointer to next item in bucket */ + HTKEYTYPE key; /*!< hash key */ +#ifdef HTDATATYPE + int dataCount; /*!< data entries */ + HTDATATYPE data[1]; /*!< data - grows by resizing whole bucket */ +#endif +}; + +/** + */ +struct HASHSTRUCT { + int numBuckets; /*!< number of hash buckets */ + Bucket * buckets; /*!< hash bucket array */ + hashFunctionType fn; /*!< generate hash value for key */ + hashEqualityType eq; /*!< compare hash keys for equality */ + hashFreeKey freeKey; + int bucketCount; /*!< number of used buckets */ + int keyCount; /*!< number of keys */ +#ifdef HTDATATYPE + int dataCount; /*!< number of data entries */ + hashFreeData freeData; +#endif +}; + +/** + * Find entry in hash table. + * @param ht pointer to hash table + * @param key pointer to key value + * @return pointer to hash bucket of key (or NULL) + */ +static +Bucket HASHPREFIX(findEntry)(HASHTYPE ht, HTKEYTYPE key) +{ + unsigned int hash; + Bucket b; + + hash = ht->fn(key) % ht->numBuckets; + b = ht->buckets[hash]; + + while (b && ht->eq(b->key, key)) + b = b->next; + + return b; +} + +HASHTYPE HASHPREFIX(Create)(int numBuckets, + hashFunctionType fn, hashEqualityType eq, + hashFreeKey freeKey +#ifdef HTDATATYPE +, hashFreeData freeData +#endif +) +{ + HASHTYPE ht; + + ht = xmalloc(sizeof(*ht)); + ht->numBuckets = numBuckets; + ht->buckets = xcalloc(numBuckets, sizeof(*ht->buckets)); + ht->freeKey = freeKey; +#ifdef HTDATATYPE + ht->freeData = freeData; + ht->dataCount = 0; +#endif + ht->fn = fn; + ht->eq = eq; + ht->bucketCount = ht->keyCount = 0; + return ht; +} + +static void HASHPREFIX(Resize)(HASHTYPE ht, int numBuckets) { + Bucket * buckets = xcalloc(numBuckets, sizeof(*ht->buckets)); + + for (int i=0; inumBuckets; i++) { + Bucket b = ht->buckets[i]; + Bucket nextB; + while (b != NULL) { + unsigned int hash = ht->fn(b->key) % numBuckets; + nextB = b->next; + b->next = buckets[hash]; + buckets[hash] = b; + b = nextB; + } + } + free(ht->buckets); + ht->buckets = buckets; + ht->numBuckets = numBuckets; +} + +void HASHPREFIX(AddEntry)(HASHTYPE ht, HTKEYTYPE key +#ifdef HTDATATYPE +, HTDATATYPE data +#endif +) +{ + unsigned int hash; + Bucket b; + Bucket * b_addr; + + hash = ht->fn(key) % ht->numBuckets; + b = ht->buckets[hash]; + b_addr = ht->buckets + hash; + + if (b == NULL) { + ht->bucketCount += 1; + } + + while (b && ht->eq(b->key, key)) { + b_addr = &(b->next); + b = b->next; + } + + if (b == NULL) { + ht->keyCount += 1; + b = xmalloc(sizeof(*b)); + b->key = key; +#ifdef HTDATATYPE + b->dataCount = 1; + b->data[0] = data; +#endif + b->next = ht->buckets[hash]; + ht->buckets[hash] = b; + } +#ifdef HTDATATYPE + else { + // resizing bucket TODO: increase exponentially + // Bucket_s already contains space for one dataset + b = *b_addr = xrealloc( + b, sizeof(*b) + sizeof(b->data[0]) * (b->dataCount)); + // though increasing dataCount after the resize + b->data[b->dataCount++] = data; + } + ht->dataCount += 1; +#endif + if (ht->keyCount > ht->numBuckets) { + HASHPREFIX(Resize)(ht, ht->numBuckets * 2); + } +} + +void HASHPREFIX(Empty)( HASHTYPE ht) +{ + Bucket b, n; + int i; + + if (ht->bucketCount == 0) return; + + for (i = 0; i < ht->numBuckets; i++) { + b = ht->buckets[i]; + if (b == NULL) + continue; + ht->buckets[i] = NULL; + + do { + n = b->next; + if (ht->freeKey) + b->key = ht->freeKey(b->key); +#ifdef HTDATATYPE + if (ht->freeData) { + int j; + for (j=0; j < b->dataCount; j++ ) { + b->data[j] = ht->freeData(b->data[j]); + } + } +#endif + b = _free(b); + } while ((b = n) != NULL); + } + ht->bucketCount = 0; + ht->keyCount = 0; +#ifdef HTDATATYPE + ht->dataCount = 0; +#endif +} + +HASHTYPE HASHPREFIX(Free)(HASHTYPE ht) +{ + if (ht==NULL) + return ht; + HASHPREFIX(Empty)(ht); + ht->buckets = _free(ht->buckets); + ht = _free(ht); + + return NULL; +} + +int HASHPREFIX(HasEntry)(HASHTYPE ht, HTKEYTYPE key) +{ + Bucket b; + + if (!(b = HASHPREFIX(findEntry)(ht, key))) return 0; else return 1; +} + +int HASHPREFIX(GetEntry)(HASHTYPE ht, HTKEYTYPE key, +#ifdef HTDATATYPE + HTDATATYPE** data, int * dataCount, +#endif + HTKEYTYPE* tableKey) +{ + Bucket b; + int rc = ((b = HASHPREFIX(findEntry)(ht, key)) != NULL); + +#ifdef HTDATATYPE + if (data) + *data = rc ? b->data : NULL; + if (dataCount) + *dataCount = rc ? b->dataCount : 0; +#endif + if (tableKey && rc) + *tableKey = b->key; + + return rc; +} + +unsigned int HASHPREFIX(NumBuckets)(HASHTYPE ht) { + return ht->numBuckets; +} + +unsigned int HASHPREFIX(UsedBuckets)(HASHTYPE ht) { + return ht->bucketCount; +} + +unsigned int HASHPREFIX(NumKeys)(HASHTYPE ht) { + return ht->keyCount; +} + +#ifdef HTDATATYPE +unsigned int HASHPREFIX(NumData)(HASHTYPE ht) { + return ht->dataCount; +} +#endif + + +void HASHPREFIX(PrintStats)(HASHTYPE ht) { + int i; + Bucket bucket; + + int hashcnt=0, bucketcnt=0, datacnt=0; + int maxbuckets=0; + + for (i=0; inumBuckets; i++) { + int buckets = 0; + for (bucket=ht->buckets[i]; bucket; bucket=bucket->next){ + buckets++; +#ifdef HTDATATYPE + datacnt += bucket->dataCount; +#endif + } + if (maxbuckets < buckets) maxbuckets = buckets; + if (buckets) hashcnt++; + bucketcnt += buckets; + } + fprintf(stderr, "Hashsize: %i\n", ht->numBuckets); + fprintf(stderr, "Hashbuckets: %i\n", hashcnt); + fprintf(stderr, "Keys: %i\n", bucketcnt); + fprintf(stderr, "Values: %i\n", datacnt); + fprintf(stderr, "Max Keys/Bucket: %i\n", maxbuckets); +} diff --git a/lib/rpmhash.H b/lib/rpmhash.H new file mode 100644 index 0000000..e9db2ea --- /dev/null +++ b/lib/rpmhash.H @@ -0,0 +1,145 @@ +/** + * \file lib/rpmhash.h + * Hash table implemenation. + */ + +#include +// Hackery to make sure that macros get expanded +#define __JOIN(a,b) a##b +#define JOIN(a,b) __JOIN(a,b) +#define HASHPREFIX(name) JOIN(HASHTYPE,name) +#define HASHSTRUCT JOIN(HASHTYPE,_s) + +typedef struct HASHSTRUCT * HASHTYPE; + +/* function pointer types to deal with the datatypes the hash works with */ + +#define hashFunctionType JOIN(HASHTYPE,HashFunctionType) +#define hashEqualityType JOIN(HASHTYPE,HashEqualityType) +#define hashFreeKey JOIN(HASHTYPE,FreeKey) + +typedef unsigned int (*hashFunctionType) (HTKEYTYPE string); +typedef int (*hashEqualityType) (HTKEYTYPE key1, HTKEYTYPE key2); +typedef HTKEYTYPE (*hashFreeKey) (HTKEYTYPE); + +#ifdef HTDATATYPE +#define hashFreeData JOIN(HASHTYPE,FreeData) +typedef HTDATATYPE (*hashFreeData) (HTDATATYPE); +#endif + +/** + * Create hash table. + * If keySize > 0, the key is duplicated within the table (which costs + * memory, but may be useful anyway. + * @param numBuckets number of hash buckets + * @param fn function to generate hash value for key + * @param eq function to compare hash keys for equality + * @param freeKey function to free the keys or NULL + * @param freeData function to free the data or NULL + * @return pointer to initialized hash table + */ +RPM_GNUC_INTERNAL +HASHTYPE HASHPREFIX(Create)(int numBuckets, + hashFunctionType fn, hashEqualityType eq, + hashFreeKey freeKey +#ifdef HTDATATYPE +, hashFreeData freeData +#endif +); + +/** + * Destroy hash table. + * @param ht pointer to hash table + * @return NULL always + */ +RPM_GNUC_INTERNAL +HASHTYPE HASHPREFIX(Free)( HASHTYPE ht); + +/** + * Remove all entries from the hash table. + * @param ht pointer to hash table + */ +RPM_GNUC_INTERNAL +void HASHPREFIX(Empty)(HASHTYPE ht); + +/** + * Add item to hash table. + * @param ht pointer to hash table + * @param key key + * @param data data value + */ +RPM_GNUC_INTERNAL +void HASHPREFIX(AddEntry)(HASHTYPE ht, HTKEYTYPE key +#ifdef HTDATATYPE +, HTDATATYPE data +#endif +); + +/** + * Retrieve item from hash table. + * @param ht pointer to hash table + * @param key key value + * @retval data address to store data value from bucket + * @retval dataCount address to store data value size from bucket + * @retval tableKey address to store key value from bucket (may be NULL) + * @return 1 on success, 0 if the item is not found. + */ +RPM_GNUC_INTERNAL +int HASHPREFIX(GetEntry)(HASHTYPE ht, HTKEYTYPE key, +#ifdef HTDATATYPE + HTDATATYPE** data, + int * dataCount, +#endif + HTKEYTYPE* tableKey); + +/** + * Check for key in hash table. + * @param ht pointer to hash table + * @param key key value + * @return 1 if the key is present, 0 otherwise + */ +RPM_GNUC_INTERNAL +int HASHPREFIX(HasEntry)(HASHTYPE ht, HTKEYTYPE key); + +/** + * How many buckets are currently allocated (result is implementation + * dependent) + * @param ht pointer to hash table + * @result number of buckets allocated + */ +RPM_GNUC_INTERNAL +unsigned int HASHPREFIX(NumBuckets)(HASHTYPE ht); + +/** + * How many buckets are used (result is implementation dependent) + * @param ht pointer to hash table + * @result number of buckets used + */ +RPM_GNUC_INTERNAL +unsigned int HASHPREFIX(UsedBuckets)(HASHTYPE ht); + +/** + * How many (unique) keys have been added to the hash table + * @param ht pointer to hash table + * @result number of unique keys + */ +RPM_GNUC_INTERNAL +unsigned int HASHPREFIX(NumKeys)(HASHTYPE ht); + +#ifdef HTDATATYPE +/** + * How many data entries have been added to the hash table + * @param ht pointer to hash table + * @result number of data entries + */ +RPM_GNUC_INTERNAL +unsigned int HASHPREFIX(NumData)(HASHTYPE ht); +#endif + +/** + * Print statistics about the hash to stderr + * This is for debugging only + * @param ht pointer to hash table + */ +RPM_GNUC_INTERNAL +void HASHPREFIX(PrintStats)(HASHTYPE ht); diff --git a/lib/rpminstall.c b/lib/rpminstall.c new file mode 100644 index 0000000..b4ffd10 --- /dev/null +++ b/lib/rpminstall.c @@ -0,0 +1,735 @@ +/** \ingroup rpmcli + * \file lib/rpminstall.c + */ + +#include "system.h" + +#include +#include +#include /* rpmReadPackageFile, vercmp etc */ +#include +#include +#include +#include +#include + +#include "lib/rpmgi.h" +#include "lib/manifest.h" +#include "debug.h" + +int rpmcliPackagesTotal = 0; +int rpmcliHashesCurrent = 0; +int rpmcliHashesTotal = 0; +int rpmcliProgressCurrent = 0; +int rpmcliProgressTotal = 0; + +/** + * Print a CLI progress bar. + * @todo Unsnarl isatty(STDOUT_FILENO) from the control flow. + * @param amount current + * @param total final + */ +static void printHash(const rpm_loff_t amount, const rpm_loff_t total) +{ + int hashesNeeded; + + rpmcliHashesTotal = (isatty (STDOUT_FILENO) ? 44 : 50); + + if (rpmcliHashesCurrent != rpmcliHashesTotal) { + float pct = (total ? (((float) amount) / total) : 1.0); + hashesNeeded = (rpmcliHashesTotal * pct) + 0.5; + while (hashesNeeded > rpmcliHashesCurrent) { + if (isatty (STDOUT_FILENO)) { + int i; + for (i = 0; i < rpmcliHashesCurrent; i++) + (void) putchar ('#'); + for (; i < rpmcliHashesTotal; i++) + (void) putchar (' '); + fprintf(stdout, "(%3d%%)", (int)((100 * pct) + 0.5)); + for (i = 0; i < (rpmcliHashesTotal + 6); i++) + (void) putchar ('\b'); + } else + fprintf(stdout, "#"); + + rpmcliHashesCurrent++; + } + (void) fflush(stdout); + + if (rpmcliHashesCurrent == rpmcliHashesTotal) { + int i; + rpmcliProgressCurrent++; + if (isatty(STDOUT_FILENO)) { + for (i = 1; i < rpmcliHashesCurrent; i++) + (void) putchar ('#'); + pct = (rpmcliProgressTotal + ? (((float) rpmcliProgressCurrent) / rpmcliProgressTotal) + : 1); + fprintf(stdout, " [%3d%%]", (int)((100 * pct) + 0.5)); + } + fprintf(stdout, "\n"); + } + (void) fflush(stdout); + } +} + +static rpmVSFlags setvsFlags(struct rpmInstallArguments_s * ia) +{ + rpmVSFlags vsflags; + + if (ia->installInterfaceFlags & (INSTALL_UPGRADE | INSTALL_ERASE)) + vsflags = rpmExpandNumeric("%{?_vsflags_erase}"); + else + vsflags = rpmExpandNumeric("%{?_vsflags_install}"); + + if (rpmcliQueryFlags & VERIFY_DIGEST) + vsflags |= _RPMVSF_NODIGESTS; + if (rpmcliQueryFlags & VERIFY_SIGNATURE) + vsflags |= _RPMVSF_NOSIGNATURES; + if (rpmcliQueryFlags & VERIFY_HDRCHK) + vsflags |= RPMVSF_NOHDRCHK; + + return vsflags; +} + +void * rpmShowProgress(const void * arg, + const rpmCallbackType what, + const rpm_loff_t amount, + const rpm_loff_t total, + fnpyKey key, + void * data) +{ + Header h = (Header) arg; + char * s; + int flags = (int) ((long)data); + void * rc = NULL; + const char * filename = (const char *)key; + static FD_t fd = NULL; + + switch (what) { + case RPMCALLBACK_INST_OPEN_FILE: + if (filename == NULL || filename[0] == '\0') + return NULL; + fd = Fopen(filename, "r.ufdio"); + /* FIX: still necessary? */ + if (fd == NULL || Ferror(fd)) { + rpmlog(RPMLOG_ERR, _("open of %s failed: %s\n"), filename, + Fstrerror(fd)); + if (fd != NULL) { + Fclose(fd); + fd = NULL; + } + } else + fd = fdLink(fd); + return (void *)fd; + break; + + case RPMCALLBACK_INST_CLOSE_FILE: + /* FIX: still necessary? */ + fd = fdFree(fd); + if (fd != NULL) { + Fclose(fd); + fd = NULL; + } + break; + + case RPMCALLBACK_INST_START: + rpmcliHashesCurrent = 0; + if (h == NULL || !(flags & INSTALL_LABEL)) + break; + /* @todo Remove headerFormat() on a progress callback. */ + if (flags & INSTALL_HASH) { + s = headerFormat(h, "%{NAME}", NULL); + if (isatty (STDOUT_FILENO)) + fprintf(stdout, "%4d:%-23.23s", rpmcliProgressCurrent + 1, s); + else + fprintf(stdout, "%-28.28s", s); + (void) fflush(stdout); + s = _free(s); + } else { + s = headerFormat(h, "%{NAME}-%{VERSION}-%{RELEASE}", NULL); + fprintf(stdout, "%s\n", s); + (void) fflush(stdout); + s = _free(s); + } + break; + + case RPMCALLBACK_TRANS_PROGRESS: + case RPMCALLBACK_INST_PROGRESS: + if (flags & INSTALL_PERCENT) + fprintf(stdout, "%%%% %f\n", (double) (total + ? ((((float) amount) / total) * 100) + : 100.0)); + else if (flags & INSTALL_HASH) + printHash(amount, total); + (void) fflush(stdout); + break; + + case RPMCALLBACK_TRANS_START: + rpmcliHashesCurrent = 0; + rpmcliProgressTotal = 1; + rpmcliProgressCurrent = 0; + if (!(flags & INSTALL_LABEL)) + break; + if (flags & INSTALL_HASH) + fprintf(stdout, "%-28s", _("Preparing...")); + else + fprintf(stdout, "%s\n", _("Preparing packages for installation...")); + (void) fflush(stdout); + break; + + case RPMCALLBACK_TRANS_STOP: + if (flags & INSTALL_HASH) + printHash(1, 1); /* Fixes "preparing..." progress bar */ + rpmcliProgressTotal = rpmcliPackagesTotal; + rpmcliProgressCurrent = 0; + break; + + case RPMCALLBACK_UNINST_PROGRESS: + break; + case RPMCALLBACK_UNINST_START: + break; + case RPMCALLBACK_UNINST_STOP: + break; + case RPMCALLBACK_UNPACK_ERROR: + break; + case RPMCALLBACK_CPIO_ERROR: + break; + case RPMCALLBACK_SCRIPT_ERROR: + break; + case RPMCALLBACK_UNKNOWN: + default: + break; + } + + return rc; +} + +static void setNotifyFlag(struct rpmInstallArguments_s * ia, + rpmts ts) +{ + int notifyFlags; + + notifyFlags = ia->installInterfaceFlags | (rpmIsVerbose() ? INSTALL_LABEL : 0 ); + rpmtsSetNotifyCallback(ts, rpmShowProgress, (void *) ((long)notifyFlags)); +} + +struct rpmEIU { + Header h; + int numFailed; + int numPkgs; + char ** pkgURL; + char ** fnp; + char * pkgState; + int prevx; + int pkgx; + int numRPMS; + int numSRPMS; + char ** sourceURL; + int isSource; + int argc; + char ** argv; + rpmRelocation * relocations; + rpmRC rpmrc; +}; + +static int rpmcliTransaction(rpmts ts, struct rpmInstallArguments_s * ia, + int numPackages) +{ + rpmps ps; + + int rc = 0; + int stop = 0; + + int eflags = ia->installInterfaceFlags & INSTALL_ERASE; + + if (!(ia->installInterfaceFlags & INSTALL_NODEPS)) { + + if (rpmtsCheck(ts)) { + rc = numPackages; + stop = 1; + } + + ps = rpmtsProblems(ts); + if (!stop && rpmpsNumProblems(ps) > 0) { + rpmlog(RPMLOG_ERR, _("Failed dependencies:\n")); + rpmpsPrint(NULL, ps); + rc = numPackages; + stop = 1; + } + ps = rpmpsFree(ps); + } + + if (!stop && !(ia->installInterfaceFlags & INSTALL_NOORDER)) { + if (rpmtsOrder(ts)) { + rc = numPackages; + stop = 1; + } + } + + if (numPackages && !stop) { + rpmlog(RPMLOG_DEBUG, eflags ? "erasing packages\n" : + "installing binary packages\n"); + rpmtsClean(ts); + rc = rpmtsRun(ts, NULL, ia->probFilter); + + ps = rpmtsProblems(ts); + + if ((rpmpsNumProblems(ps) > 0) && (eflags? 1 : (rc > 0))) + rpmpsPrint((eflags? NULL : stderr), ps); + ps = rpmpsFree(ps); + } + + return rc; +} + +static int tryReadManifest(struct rpmEIU * eiu) +{ + int rc; + + /* Try to read a package manifest. */ + FD_t fd = Fopen(*eiu->fnp, "r.fpio"); + if (fd == NULL || Ferror(fd)) { + rpmlog(RPMLOG_ERR, _("open of %s failed: %s\n"), *eiu->fnp, + Fstrerror(fd)); + if (fd != NULL) { + Fclose(fd); + fd = NULL; + } + eiu->numFailed++; *eiu->fnp = NULL; + return RPMRC_FAIL; + } + + /* Read list of packages from manifest. */ + rc = rpmReadPackageManifest(fd, &eiu->argc, &eiu->argv); + if (rc != RPMRC_OK) + rpmlog(RPMLOG_ERR, _("%s: not an rpm package (or package manifest): %s\n"), + *eiu->fnp, Fstrerror(fd)); + Fclose(fd); + fd = NULL; + + if (rc != RPMRC_OK) + eiu->numFailed++; *eiu->fnp = NULL; + + return rc; +} + +static int tryReadHeader(rpmts ts, struct rpmEIU * eiu, rpmVSFlags vsflags) +{ + rpmVSFlags tvsflags; + + /* Try to read the header from a package file. */ + FD_t fd = Fopen(*eiu->fnp, "r.ufdio"); + if (fd == NULL || Ferror(fd)) { + rpmlog(RPMLOG_ERR, _("open of %s failed: %s\n"), *eiu->fnp, + Fstrerror(fd)); + if (fd != NULL) { + Fclose(fd); + fd = NULL; + } + eiu->numFailed++; *eiu->fnp = NULL; + return RPMRC_FAIL; + } + + /* Read the header, verifying signatures (if present). */ + tvsflags = rpmtsSetVSFlags(ts, vsflags); + eiu->rpmrc = rpmReadPackageFile(ts, fd, *eiu->fnp, &eiu->h); + tvsflags = rpmtsSetVSFlags(ts, tvsflags); + Fclose(fd); + fd = NULL; + + /* Honor --nomanifest */ + if (eiu->rpmrc == RPMRC_NOTFOUND && (giFlags & RPMGI_NOMANIFEST)) + eiu->rpmrc = RPMRC_FAIL; + + if(eiu->rpmrc == RPMRC_FAIL) { + rpmlog(RPMLOG_ERR, _("%s cannot be installed\n"), *eiu->fnp); + eiu->numFailed++; *eiu->fnp = NULL; + } + + return RPMRC_OK; +} + + +/* On --freshen, verify package is installed and newer */ +static int checkFreshenStatus(rpmts ts, struct rpmEIU * eiu) +{ + rpmdbMatchIterator mi = NULL; + const char * name = headerGetString(eiu->h, RPMTAG_NAME); + const char *arch = headerGetString(eiu->h, RPMTAG_ARCH); + Header oldH = NULL; + + if (name != NULL) + mi = rpmtsInitIterator(ts, RPMDBI_NAME, name, 0); + if (rpmtsColor(ts) && arch) + rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_DEFAULT, arch); + + while ((oldH = rpmdbNextIterator(mi)) != NULL) { + /* Package is newer than those currently installed. */ + if (rpmVersionCompare(oldH, eiu->h) < 0) + break; + } + + mi = rpmdbFreeIterator(mi); + if (oldH == NULL) { + eiu->h = headerFree(eiu->h); + } + return (oldH != NULL); +} + +/** @todo Generalize --freshen policies. */ +int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_t fileArgv) +{ + struct rpmEIU * eiu = xcalloc(1, sizeof(*eiu)); + rpmRelocation * relocations; + char * fileURL = NULL; + rpmVSFlags vsflags, ovsflags; + int rc; + int i; + + if (fileArgv == NULL) goto exit; + + rpmcliPackagesTotal = 0; + + (void) rpmtsSetFlags(ts, ia->transFlags); + + relocations = ia->relocations; + + vsflags = setvsFlags(ia); + ovsflags = rpmtsSetVSFlags(ts, (vsflags | RPMVSF_NEEDPAYLOAD)); + + setNotifyFlag(ia, ts); + + if ((eiu->relocations = relocations) != NULL) { + while (eiu->relocations->oldPath) + eiu->relocations++; + if (eiu->relocations->newPath == NULL) + eiu->relocations = NULL; + } + + /* Build fully globbed list of arguments in argv[argc]. */ + for (eiu->fnp = fileArgv; *eiu->fnp != NULL; eiu->fnp++) { + ARGV_t av = NULL; + int ac = 0; + char * fn; + + fn = rpmEscapeSpaces(*eiu->fnp); + rc = rpmGlob(fn, &ac, &av); + fn = _free(fn); + if (rc || ac == 0) { + rpmlog(RPMLOG_ERR, _("File not found by glob: %s\n"), *eiu->fnp); + eiu->numFailed++; + continue; + } + + argvAppend(&(eiu->argv), av); + argvFree(av); + eiu->argc += ac; + } + +restart: + /* Allocate sufficient storage for next set of args. */ + if (eiu->pkgx >= eiu->numPkgs) { + eiu->numPkgs = eiu->pkgx + eiu->argc; + eiu->pkgURL = xrealloc(eiu->pkgURL, + (eiu->numPkgs + 1) * sizeof(*eiu->pkgURL)); + memset(eiu->pkgURL + eiu->pkgx, 0, + ((eiu->argc + 1) * sizeof(*eiu->pkgURL))); + eiu->pkgState = xrealloc(eiu->pkgState, + (eiu->numPkgs + 1) * sizeof(*eiu->pkgState)); + memset(eiu->pkgState + eiu->pkgx, 0, + ((eiu->argc + 1) * sizeof(*eiu->pkgState))); + } + + /* Retrieve next set of args, cache on local storage. */ + for (i = 0; i < eiu->argc; i++) { + fileURL = _free(fileURL); + fileURL = eiu->argv[i]; + eiu->argv[i] = NULL; + + switch (urlIsURL(fileURL)) { + case URL_IS_HTTPS: + case URL_IS_HTTP: + case URL_IS_FTP: + { char *tfn = NULL; + FD_t tfd; + + if (rpmIsVerbose()) + fprintf(stdout, _("Retrieving %s\n"), fileURL); + + tfd = rpmMkTempFile(rpmtsRootDir(ts), &tfn); + if (tfd && tfn) { + Fclose(tfd); + rc = urlGetFile(fileURL, tfn); + } else { + rc = -1; + } + + if (rc != 0) { + rpmlog(RPMLOG_ERR, + _("skipping %s - transfer failed\n"), fileURL); + eiu->numFailed++; + eiu->pkgURL[eiu->pkgx] = NULL; + tfn = _free(tfn); + break; + } + eiu->pkgState[eiu->pkgx] = 1; + eiu->pkgURL[eiu->pkgx] = tfn; + eiu->pkgx++; + } break; + case URL_IS_PATH: + case URL_IS_DASH: /* WRONG WRONG WRONG */ + case URL_IS_HKP: /* WRONG WRONG WRONG */ + default: + eiu->pkgURL[eiu->pkgx] = fileURL; + fileURL = NULL; + eiu->pkgx++; + break; + } + } + fileURL = _free(fileURL); + + if (eiu->numFailed) goto exit; + + /* Continue processing file arguments, building transaction set. */ + for (eiu->fnp = eiu->pkgURL+eiu->prevx; + *eiu->fnp != NULL; + eiu->fnp++, eiu->prevx++) + { + const char * fileName; + + rpmlog(RPMLOG_DEBUG, "============== %s\n", *eiu->fnp); + (void) urlPath(*eiu->fnp, &fileName); + + if (tryReadHeader(ts, eiu, vsflags) == RPMRC_FAIL) + continue; + + if (eiu->rpmrc == RPMRC_NOTFOUND) { + rc = tryReadManifest(eiu); + if (rc == RPMRC_OK) { + eiu->prevx++; + goto restart; + } + } + + eiu->isSource = headerIsSource(eiu->h); + + if (eiu->isSource) { + rpmlog(RPMLOG_DEBUG, "\tadded source package [%d]\n", + eiu->numSRPMS); + eiu->sourceURL = xrealloc(eiu->sourceURL, + (eiu->numSRPMS + 2) * sizeof(*eiu->sourceURL)); + eiu->sourceURL[eiu->numSRPMS] = *eiu->fnp; + *eiu->fnp = NULL; + eiu->numSRPMS++; + eiu->sourceURL[eiu->numSRPMS] = NULL; + continue; + } + + if (eiu->relocations) { + struct rpmtd_s prefixes; + + headerGet(eiu->h, RPMTAG_PREFIXES, &prefixes, HEADERGET_DEFAULT); + if (rpmtdCount(&prefixes) == 1) { + eiu->relocations->oldPath = xstrdup(rpmtdGetString(&prefixes)); + rpmtdFreeData(&prefixes); + } else { + rpmlog(RPMLOG_ERR, _("package %s is not relocatable\n"), + headerGetString(eiu->h, RPMTAG_NAME)); + eiu->numFailed++; + goto exit; + } + } + + if (ia->installInterfaceFlags & INSTALL_FRESHEN) + if (checkFreshenStatus(ts, eiu) != 1) + continue; + + rc = rpmtsAddInstallElement(ts, eiu->h, (fnpyKey)fileName, + (ia->installInterfaceFlags & INSTALL_UPGRADE) != 0, + relocations); + + /* XXX reference held by transaction set */ + eiu->h = headerFree(eiu->h); + if (eiu->relocations) + eiu->relocations->oldPath = _free(eiu->relocations->oldPath); + + switch(rc) { + case 0: + rpmlog(RPMLOG_DEBUG, "\tadded binary package [%d]\n", + eiu->numRPMS); + break; + case 1: + rpmlog(RPMLOG_ERR, + _("error reading from file %s\n"), *eiu->fnp); + eiu->numFailed++; + goto exit; + break; + case 2: + rpmlog(RPMLOG_ERR, + _("file %s requires a newer version of RPM\n"), + *eiu->fnp); + eiu->numFailed++; + goto exit; + break; + default: + eiu->numFailed++; + goto exit; + break; + } + + eiu->numRPMS++; + } + + rpmlog(RPMLOG_DEBUG, "found %d source and %d binary packages\n", + eiu->numSRPMS, eiu->numRPMS); + + if (eiu->numFailed) goto exit; + + if (eiu->numRPMS) { + int rc = rpmcliTransaction(ts, ia, eiu->numPkgs); + if (rc < 0) + eiu->numFailed += eiu->numRPMS; + else if (rc > 0) + eiu->numFailed += rc; + } + + if (eiu->numSRPMS && (eiu->sourceURL != NULL)) { + for (i = 0; i < eiu->numSRPMS; i++) { + rpmdbCheckSignals(); + if (eiu->sourceURL[i] != NULL) { + rc = RPMRC_OK; + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)) + rc = rpmInstallSource(ts, eiu->sourceURL[i], NULL, NULL); + if (rc != 0) + eiu->numFailed++; + } + } + } + +exit: + if (eiu->pkgURL != NULL) { + for (i = 0; i < eiu->numPkgs; i++) { + if (eiu->pkgURL[i] == NULL) continue; + if (eiu->pkgState[i] == 1) + (void) unlink(eiu->pkgURL[i]); + eiu->pkgURL[i] = _free(eiu->pkgURL[i]); + } + } + eiu->pkgState = _free(eiu->pkgState); + eiu->pkgURL = _free(eiu->pkgURL); + eiu->argv = _free(eiu->argv); + rc = eiu->numFailed; + free(eiu); + + rpmtsEmpty(ts); + + return rc; +} + +int rpmErase(rpmts ts, struct rpmInstallArguments_s * ia, ARGV_const_t argv) +{ + char * const * arg; + char *qfmt = NULL; + int numFailed = 0; + int numPackages = 0; + rpmVSFlags vsflags, ovsflags; + + if (argv == NULL) return 0; + + vsflags = setvsFlags(ia); + ovsflags = rpmtsSetVSFlags(ts, vsflags); + + (void) rpmtsSetFlags(ts, ia->transFlags); + +#ifdef NOTYET /* XXX no callbacks on erase yet */ + setNotifyFlag(ia, ts); +#endif + + qfmt = rpmExpand("%{?_query_all_fmt}\n", NULL); + for (arg = argv; *arg; arg++) { + rpmdbMatchIterator mi; + int matches = 0; + int erasing = 1; + + /* Iterator count isn't reliable with labels, count manually... */ + mi = rpmtsInitIterator(ts, RPMDBI_LABEL, *arg, 0); + while (rpmdbNextIterator(mi) != NULL) { + matches++; + } + rpmdbFreeIterator(mi); + + if (! matches) { + rpmlog(RPMLOG_ERR, _("package %s is not installed\n"), *arg); + numFailed++; + } else { + Header h; /* XXX iterator owns the reference */ + + if (matches > 1 && + !(ia->installInterfaceFlags & UNINSTALL_ALLMATCHES)) { + rpmlog(RPMLOG_ERR, _("\"%s\" specifies multiple packages:\n"), + *arg); + numFailed++; + erasing = 0; + } + + mi = rpmtsInitIterator(ts, RPMDBI_LABEL, *arg, 0); + while ((h = rpmdbNextIterator(mi)) != NULL) { + if (erasing) { + (void) rpmtsAddEraseElement(ts, h, -1); + numPackages++; + } else { + char *nevra = headerFormat(h, qfmt, NULL); + rpmlog(RPMLOG_NOTICE, " %s", nevra); + free(nevra); + } + } + mi = rpmdbFreeIterator(mi); + } + } + free(qfmt); + + if (numFailed) goto exit; + numFailed = rpmcliTransaction(ts, ia, numPackages); +exit: + rpmtsEmpty(ts); + + return numFailed; +} + +int rpmInstallSource(rpmts ts, const char * arg, + char ** specFilePtr, char ** cookie) +{ + FD_t fd; + int rc; + + + fd = Fopen(arg, "r.ufdio"); + if (fd == NULL || Ferror(fd)) { + rpmlog(RPMLOG_ERR, _("cannot open %s: %s\n"), arg, Fstrerror(fd)); + if (fd != NULL) (void) Fclose(fd); + return 1; + } + + if (rpmIsVerbose() && specFilePtr != NULL) + fprintf(stdout, _("Installing %s\n"), arg); + + { + rpmVSFlags ovsflags = + rpmtsSetVSFlags(ts, (specFilePtr) ? (rpmtsVSFlags(ts) | RPMVSF_NEEDPAYLOAD) : rpmtsVSFlags(ts)); + rpmRC rpmrc = rpmInstallSourcePackage(ts, fd, specFilePtr, cookie); + rc = (rpmrc == RPMRC_OK ? 0 : 1); + ovsflags = rpmtsSetVSFlags(ts, ovsflags); + } + if (rc != 0) { + rpmlog(RPMLOG_ERR, _("%s cannot be installed\n"), arg); + if (specFilePtr && *specFilePtr) + *specFilePtr = _free(*specFilePtr); + if (cookie && *cookie) + *cookie = _free(*cookie); + } + + (void) Fclose(fd); + + return rc; +} + diff --git a/lib/rpmlead.c b/lib/rpmlead.c new file mode 100644 index 0000000..d41a413 --- /dev/null +++ b/lib/rpmlead.c @@ -0,0 +1,141 @@ +/** \ingroup lead + * \file lib/rpmlead.c + */ + +#include "system.h" + +#include +#include + +#include /* rpmGetOs/ArchInfo() */ +#include +#include + +#include "lib/signature.h" +#include "lib/rpmlead.h" + +#include "debug.h" + +static unsigned char const lead_magic[] = { + RPMLEAD_MAGIC0, RPMLEAD_MAGIC1, RPMLEAD_MAGIC2, RPMLEAD_MAGIC3 +}; + +/** \ingroup lead + * The lead data structure. + * The lead needs to be 8 byte aligned. + * @deprecated The lead (except for signature_type) is legacy. + * @todo Don't use any information from lead. + */ +struct rpmlead_s { + unsigned char magic[4]; + unsigned char major; + unsigned char minor; + short type; + short archnum; + char name[66]; + short osnum; + short signature_type; /*!< Signature header type (RPMSIG_HEADERSIG) */ + char reserved[16]; /*!< Pad to 96 bytes -- 8 byte aligned! */ +}; + +rpmlead rpmLeadNew(void) +{ + int archnum, osnum; + rpmlead l = xcalloc(1, sizeof(*l)); + + rpmGetArchInfo(NULL, &archnum); + rpmGetOsInfo(NULL, &osnum); + + l->major = 3; + l->minor = 0; + l->archnum = archnum; + l->osnum = osnum; + l->signature_type = RPMSIGTYPE_HEADERSIG; + return l; +} + +rpmlead rpmLeadFromHeader(Header h) +{ + char * nevr; + assert(h != NULL); + rpmlead l = rpmLeadNew(); + + l->type = (headerIsSource(h) ? 1 : 0); + nevr = headerGetAsString(h, RPMTAG_NEVR); + rstrlcpy(l->name, nevr, sizeof(l->name)); + free(nevr); + + return l; +} + +rpmlead rpmLeadFree(rpmlead lead) +{ + assert(lead != NULL); + free(lead); + return NULL; +} + +/* The lead needs to be 8 byte aligned */ +rpmRC rpmLeadWrite(FD_t fd, rpmlead lead) +{ + struct rpmlead_s l; + assert(lead != NULL); + + memcpy(&l, lead, sizeof(l)); + + memcpy(&l.magic, lead_magic, sizeof(l.magic)); + l.type = htons(lead->type); + l.archnum = htons(lead->archnum); + l.osnum = htons(lead->osnum); + l.signature_type = htons(lead->signature_type); + + if (Fwrite(&l, 1, sizeof(l), fd) != sizeof(l)) + return RPMRC_FAIL; + + return RPMRC_OK; +} + +rpmRC rpmLeadCheck(rpmlead lead, const char **msg) +{ + if (memcmp(lead->magic, lead_magic, sizeof(lead_magic))) { + if (msg) *msg = _("not an rpm package"); + return RPMRC_NOTFOUND; + } + if (lead->signature_type != RPMSIGTYPE_HEADERSIG) { + if (msg) *msg = _("illegal signature type"); + return RPMRC_FAIL; + } + if (lead->major < 3 || lead->major > 4) { + if (msg) *msg = _("unsupported RPM package version"); + return RPMRC_FAIL; + } + return RPMRC_OK; +} + +rpmRC rpmLeadRead(FD_t fd, rpmlead lead) +{ + assert(lead != NULL); + memset(lead, 0, sizeof(*lead)); + /* FIX: remove timed read */ + if (timedRead(fd, (char *)lead, sizeof(*lead)) != sizeof(*lead)) { + if (Ferror(fd)) { + rpmlog(RPMLOG_ERR, _("read failed: %s (%d)\n"), + Fstrerror(fd), errno); + return RPMRC_FAIL; + } else { + rpmlog(RPMLOG_ERR, _("not an rpm package\n")); + return RPMRC_NOTFOUND; + } + } + lead->type = ntohs(lead->type); + lead->archnum = ntohs(lead->archnum); + lead->osnum = ntohs(lead->osnum); + lead->signature_type = ntohs(lead->signature_type); + + return RPMRC_OK; +} + +int rpmLeadType(rpmlead lead) +{ + return lead ? lead->type : -1; +} diff --git a/lib/rpmlead.h b/lib/rpmlead.h new file mode 100644 index 0000000..768ea28 --- /dev/null +++ b/lib/rpmlead.h @@ -0,0 +1,82 @@ +#ifndef _H_RPMLEAD +#define _H_RPMLEAD + +/** \ingroup lead + * \file lib/rpmlead.h + * Routines to read and write an rpm lead structure for a a package. + */ +#ifdef __cplusplus +extern "C" { +#endif + +#define RPMLEAD_BINARY 0 +#define RPMLEAD_SOURCE 1 + +#define RPMLEAD_MAGIC0 0xed +#define RPMLEAD_MAGIC1 0xab +#define RPMLEAD_MAGIC2 0xee +#define RPMLEAD_MAGIC3 0xdb + +#define RPMLEAD_SIZE 96 /*!< Don't rely on sizeof(struct) */ + +typedef struct rpmlead_s * rpmlead; + + +/** \ingroup lead + * Initialize a lead structure + * @return Pointer to empty lead structure + */ +rpmlead rpmLeadNew(void); + +/** \ingroup lead + * Initialize a lead structure from header + * param h Header + * @return Pointer to populated lead structure (malloced) + */ +rpmlead rpmLeadFromHeader(Header h); + +/** \ingroup lead + * Free a lead structure + * @param lead Pointer to lead structure + * @return NULL always + */ +rpmlead rpmLeadFree(rpmlead lead); + +/** \ingroup lead + * Write lead to file handle. + * @param fd file handle + * @param lead package lead + * @return RPMRC_OK on success, RPMRC_FAIL on error + */ +rpmRC rpmLeadWrite(FD_t fd, rpmlead lead); + +/** \ingroup lead + * Read lead from file handle. + * @param fd file handle + * @retval lead package lead + * @return RPMRC_OK on success, RPMRC_FAIL/RPMRC_NOTFOUND on error + */ +rpmRC rpmLeadRead(FD_t fd, rpmlead lead); + +/** \ingroup lead + * Check lead for compatibility. + * @param lead Pointer to lead handle + * @retval fn Pointer to error message, NULL on success + * @return RPMRC_OK on success, + * RPMRC_NOTFOUND if not an rpm, + * RPMRC_FAIL on invalid/incompatible rpm + */ +rpmRC rpmLeadCheck(rpmlead lead, const char **msg); + +/** \ingroup lead + * Returen type (source vs binary) of lead + * @param lead Pointer to lead handle + * @return RPMLEAD_BINARY or RPMLEAD_SOURCE, -1 on invalid + */ +int rpmLeadType(rpmlead lead); + +#ifdef __cplusplus +} +#endif + +#endif /* _H_RPMLEAD */ diff --git a/lib/rpmlegacy.h b/lib/rpmlegacy.h new file mode 100644 index 0000000..2f9e0a0 --- /dev/null +++ b/lib/rpmlegacy.h @@ -0,0 +1,241 @@ +#ifndef _RPMLEGACY_H +#define _RPMLEGACY_H + +#include +#include + +/* ==================================================================== */ +/* LEGACY INTERFACES AND TYPES, DO NOT USE IN NEW CODE! */ +/* ==================================================================== */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _RPM_4_4_COMPAT + +/* mappings for legacy types */ +typedef int32_t int_32 RPM_GNUC_DEPRECATED; +typedef int16_t int_16 RPM_GNUC_DEPRECATED; +typedef int8_t int_8 RPM_GNUC_DEPRECATED; +typedef uint32_t uint_32 RPM_GNUC_DEPRECATED; +typedef uint16_t uint_16 RPM_GNUC_DEPRECATED; +typedef uint8_t uint_8 RPM_GNUC_DEPRECATED; + +typedef rpm_tag_t * hTAG_t RPM_GNUC_DEPRECATED; +typedef rpm_tagtype_t * hTYP_t RPM_GNUC_DEPRECATED; +typedef const void * hPTR_t RPM_GNUC_DEPRECATED; +typedef rpm_count_t * hCNT_t RPM_GNUC_DEPRECATED; + +typedef rpmSpec Spec RPM_GNUC_DEPRECATED; + +/* legacy header interfaces */ + +/** \ingroup header_legacy + * Retrieve tag value. + * Will never return RPM_I18NSTRING_TYPE! RPM_STRING_TYPE elements with + * RPM_I18NSTRING_TYPE equivalent entries are translated (if HEADER_I18NTABLE + * entry is present). + * @deprecated Use headerGet() instead + * + * @param h header + * @param tag tag + * @retval *type tag value data type (or NULL) + * @retval *p pointer to tag value(s) (or NULL) + * @retval *c number of values (or NULL) + * @return 1 on success, 0 on failure + */ +int headerGetEntry(Header h, rpm_tag_t tag, + rpm_tagtype_t * type, + rpm_data_t * p, + rpm_count_t * c) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Retrieve tag value using header internal array. + * Get an entry using as little extra RAM as possible to return the tag value. + * This is only an issue for RPM_STRING_ARRAY_TYPE. + * @deprecated Use headerGet() instead + * + * @param h header + * @param tag tag + * @retval *type tag value data type (or NULL) + * @retval *p pointer to tag value(s) (or NULL) + * @retval *c number of values (or NULL) + * @return 1 on success, 0 on failure + */ +int headerGetEntryMinMemory(Header h, rpm_tag_t tag, + rpm_tagtype_t * type, + rpm_data_t * p, + rpm_count_t * c) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Add tag to header. + * Duplicate tags are okay, but only defined for iteration (with the + * exceptions noted below). While you are allowed to add i18n string + * arrays through this function, you probably don't mean to. See + * headerAddI18NString() instead. + * + * @param h header + * @param tag tag + * @param type tag value data type + * @param p pointer to tag value(s) + * @param c number of values + * @return 1 on success, 0 on failure + */ +int headerAddEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Append element to tag array in header. + * Appends item p to entry w/ tag and type as passed. Won't work on + * RPM_STRING_TYPE. Any pointers into header memory returned from + * headerGetEntryMinMemory() for this entry are invalid after this + * call has been made! + * + * @param h header + * @param tag tag + * @param type tag value data type + * @param p pointer to tag value(s) + * @param c number of values + * @return 1 on success, 0 on failure + */ +int headerAppendEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Add or append element to tag array in header. + * @param h header + * @param tag tag + * @param type tag value data type + * @param p pointer to tag value(s) + * @param c number of values + * @return 1 on success, 0 on failure + */ +int headerAddOrAppendEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Modify tag in header. + * If there are multiple entries with this tag, the first one gets replaced. + * @deprecated Use headerMod() instead + * + * @param h header + * @param tag tag + * @param type tag value data type + * @param p pointer to tag value(s) + * @param c number of values + * @return 1 on success, 0 on failure + */ +int headerModifyEntry(Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Delete tag in header. + * Removes all entries of type tag from the header, returns 1 if none were + * found. + * @deprecated Use headerDel() instead + * + * @param h header + * @param tag tag + * @return 0 on success, 1 on failure (INCONSISTENT) + */ +int headerRemoveEntry(Header h, rpm_tag_t tag) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Return formatted output string from header tags. + * The returned string must be free()d. + * @deprecated Use headerFormat() instead + * + * @param _h header + * @param _fmt format to use + * @param _tbltags array of tag name/value pairs (unused) + * @param _exts chained table of formatting extensions. (unused) + * @retval _emsg error message (if any) + * @return formatted output string (malloc'ed) + */ +#define headerSprintf(_h, _fmt, _tbltags, _exts, _emsg) \ + headerFormat((_h), (_fmt), (_emsg)) + +/** \ingroup header_legacy + * Return next tag from header. + * @deprecated Use headerNext() instead. + * + * @param hi header tag iterator + * @retval *tag tag + * @retval *type tag value data type + * @retval *p pointer to tag value(s) + * @retval *c number of values + * @return 1 on success, 0 on failure + */ +int headerNextIterator(HeaderIterator hi, + rpm_tag_t * tag, + rpm_tagtype_t * type, + rpm_data_t * p, + rpm_count_t * c) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Free data allocated when retrieved from header. + * @deprecated Use rpmtdFreeData() instead + * + * @param h header + * @param data pointer to tag value(s) + * @param type type of data (or -1 to force free) + * @return NULL always + */ +void * headerFreeTag(Header h, rpm_data_t data, rpm_tagtype_t type) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Free data allocated when retrieved from header. + * @deprecated Use rpmtdFreeData() instead. + * + * @param data address of data (or NULL) + * @param type type of data (or RPM_FORCEFREE_TYPE to force free) + * @return NULL always + */ +void * headerFreeData(rpm_data_t data, rpm_tagtype_t type) RPM_GNUC_DEPRECATED; + +/** \ingroup header_legacy + * Prototypes for headerGetEntry(), headerFreeData() etc vectors. + * @{ + */ +typedef void * (*HFD_t) (rpm_data_t data, rpm_tagtype_t type) RPM_GNUC_DEPRECATED; +typedef int (*HGE_t) (Header h, rpm_tag_t tag, rpm_tagtype_t * type, + rpm_data_t * p, rpm_count_t * c) RPM_GNUC_DEPRECATED; +typedef int (*HAE_t) (Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED; +typedef int (*HME_t) (Header h, rpm_tag_t tag, rpm_tagtype_t type, + rpm_constdata_t p, rpm_count_t c) RPM_GNUC_DEPRECATED; +typedef int (*HRE_t) (Header h, rpm_tag_t tag) RPM_GNUC_DEPRECATED; +/** @} */ + +/* other misc renamed / namespaced functions */ +/* TODO: arrange deprecation warnings on these too... */ +#define isCompressed rpmFileIsCompressed +#define makeTempFile rpmMkTempFile +#define whatis rpmfiWhatis +#define tagName rpmTagGetName +#define tagType rpmTagGetType +#define tagValue rpmTagGetValue + +#define xislower rislower +#define xisupper risupper +#define xisalpha risalpha +#define xisdigit risdigit +#define xisalnum risalnum +#define xisblank risblank +#define xisspace risspace +#define xtolower rtolower +#define xtoupper rtoupper +#define xstrcasecmp rstrcasecmp +#define xstrncasecmp rstrncasecmp + +#define rpmMessage rpmlog +#define rpmError rpmlog + +#endif /* _RPM_4_4_COMPAT */ + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMLEGACY_H */ diff --git a/lib/rpmlib.h b/lib/rpmlib.h new file mode 100644 index 0000000..6ccdeb7 --- /dev/null +++ b/lib/rpmlib.h @@ -0,0 +1,210 @@ +#ifndef H_RPMLIB +#define H_RPMLIB + +/** \ingroup rpmcli rpmrc rpmdep rpmtrans rpmdb lead signature header payload dbi + * \file lib/rpmlib.h + * + * In Memoriam: Steve Taylor was here, now he's not. + * + */ + +#include + +#include +#include +#include +#include /* XXX move rpmlib provides to rpmds instead */ +#include +#ifdef _RPM_4_4_COMPAT +#include /* legacy compat definitions if enabled */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct rpmMacroContext_s * rpmGlobalMacroContext; + +extern struct rpmMacroContext_s * rpmCLIMacroContext; + +extern const char * const RPMVERSION; + +extern const char * const rpmNAME; + +extern const char * const rpmEVR; + +extern const int rpmFLAGS; + +/** \ingroup header + * Translate and merge legacy signature tags into header. + * @todo Remove headerSort() through headerInitIterator() modifies sig. + * @param h header + * @param sigh signature header + */ +void headerMergeLegacySigs(Header h, const Header sigh); + +/** \ingroup header + * Regenerate signature header. + * @todo Remove headerSort() through headerInitIterator() modifies h. + * @param h header + * @param noArchiveSize don't copy archive size tag (pre rpm-4.1) + * @return regenerated signature header + */ +Header headerRegenSigHeader(const Header h, int noArchiveSize); + +/* ==================================================================== */ +/** \name RPMRC */ + +/** \ingroup rpmrc + * Build and install arch/os table identifiers. + * @todo Eliminate from API. + */ +enum rpm_machtable_e { + RPM_MACHTABLE_INSTARCH = 0, /*!< Install platform architecture. */ + RPM_MACHTABLE_INSTOS = 1, /*!< Install platform operating system. */ + RPM_MACHTABLE_BUILDARCH = 2, /*!< Build platform architecture. */ + RPM_MACHTABLE_BUILDOS = 3 /*!< Build platform operating system. */ +}; +#define RPM_MACHTABLE_COUNT 4 /*!< No. of arch/os tables. */ + +/** \ingroup rpmrc + * Read macro configuration file(s) for a target. + * @param file colon separated files to read (NULL uses default) + * @param target target platform (NULL uses default) + * @return 0 on success, -1 on error + */ +int rpmReadConfigFiles(const char * file, + const char * target); + +/** \ingroup rpmrc + * Return current arch name and/or number. + * @todo Generalize to extract arch component from target_platform macro. + * @retval name address of arch name (or NULL) + * @retval num address of arch number (or NULL) + */ +void rpmGetArchInfo( const char ** name, + int * num); + +/** \ingroup rpmrc + * Return current os name and/or number. + * @todo Generalize to extract os component from target_platform macro. + * @retval name address of os name (or NULL) + * @retval num address of os number (or NULL) + */ +void rpmGetOsInfo( const char ** name, + int * num); + +/** \ingroup rpmrc + * Return arch/os score of a name. + * An arch/os score measures the "nearness" of a name to the currently + * running (or defined) platform arch/os. For example, the score of arch + * "i586" on an i686 platform is (usually) 2. The arch/os score is used + * to select one of several otherwise identical packages using the arch/os + * tags from the header as hints of the intended platform for the package. + * @todo Rewrite to use RE's against config.guess target platform output. + * + * @param type any of the RPM_MACHTABLE_* constants + * @param name name + * @return arch score (0 is no match, lower is preferred) + */ +int rpmMachineScore(int type, const char * name); + +/** \ingroup rpmrc + * Display current rpmrc (and macro) configuration. + * @param fp output file handle + * @return 0 always + */ +int rpmShowRC(FILE * fp); + +/** \ingroup rpmrc + * @deprecated Use addMacro to set _target_* macros. + * @todo Eliminate from API. + # @note Only used by build code. + * @param archTable + * @param osTable + */ +void rpmSetTables(int archTable, int osTable); + +/** \ingroup rpmrc + * Destroy rpmrc arch/os compatibility tables. + * @todo Eliminate from API. + */ +void rpmFreeRpmrc(void); + +/** + * Compare headers to determine which header is "newer". + * @param first 1st header + * @param second 2nd header + * @return result of comparison + */ +int rpmVersionCompare(Header first, Header second); + +/** \ingroup header + * Check for supported payload format in header. + * @param h header to check + * @return RPMRC_OK if supported, RPMRC_FAIL otherwise + */ +rpmRC headerCheckPayloadFormat(Header h); + +/** \ingroup header + * Check header consistency, performing headerGetEntry() the hard way. + * + * Sanity checks on the header are performed while looking for a + * header-only digest or signature to verify the blob. If found, + * the digest or signature is verified. + * + * @param ts transaction set + * @param uh unloaded header blob + * @param uc no. of bytes in blob (or 0 to disable) + * @retval *msg verification error message (or NULL) + * @return RPMRC_OK on success + */ +rpmRC headerCheck(rpmts ts, const void * uh, size_t uc, char ** msg); + +/** \ingroup header + * Return checked and loaded header. + * @param ts transaction set + * @param fd file handle + * @retval hdrp address of header (or NULL) + * @retval *msg verification error message (or NULL) + * @return RPMRC_OK on success + */ +rpmRC rpmReadHeader(rpmts ts, FD_t fd, Header *hdrp, char ** msg); + +/** \ingroup header + * Return package header from file handle, verifying digests/signatures. + * @param ts transaction set + * @param fd file handle + * @param fn file name + * @retval hdrp address of header (or NULL) + * @return RPMRC_OK on success + */ +rpmRC rpmReadPackageFile(rpmts ts, FD_t fd, + const char * fn, Header * hdrp); + +/** \ingroup rpmtrans + * Install source package. + * @param ts transaction set + * @param fd file handle + * @retval specFilePtr address of spec file name (or NULL) + * @retval cookie address of cookie pointer (or NULL) + * @return rpmRC return code + */ +rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd, + char ** specFilePtr, + char ** cookie); + +/** \ingroup rpmtrans + * Segmented string compare for version or release strings. + * + * @param a 1st string + * @param b 2nd string + * @return +1 if a is "newer", 0 if equal, -1 if b is "newer" + */ +int rpmvercmp(const char * a, const char * b); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMLIB */ diff --git a/lib/rpmliblua.c b/lib/rpmliblua.c new file mode 100644 index 0000000..046ed31 --- /dev/null +++ b/lib/rpmliblua.c @@ -0,0 +1,45 @@ +#include "system.h" + +#ifdef WITH_LUA +#include +#include +#include + +#define _RPMLUA_INTERNAL +#include "rpmio/rpmlua.h" +#include "lib/rpmliblua.h" + +static int rpm_vercmp(lua_State *L) +{ + const char *v1, *v2; + int rc = 0; + + v1 = luaL_checkstring(L, 1); + v2 = luaL_checkstring(L, 2); + if (v1 && v2) { + lua_pushinteger(L, rpmvercmp(v1, v2)); + rc = 1; + } + return rc; +} + +static const luaL_reg luarpmlib_f[] = { + {"vercmp", rpm_vercmp}, + {NULL, NULL} +}; + +void rpmLuaInit(void) +{ + rpmlua lua = rpmluaGetGlobalState(); + lua_pushvalue(lua->L, LUA_GLOBALSINDEX); + luaL_register(lua->L, "rpm", luarpmlib_f); + return; +} + +void rpmLuaFree(void) +{ + rpmlua lua = rpmluaGetGlobalState(); + rpmluaFree(lua); +} + +#endif /* WITH_LUA */ diff --git a/lib/rpmliblua.h b/lib/rpmliblua.h new file mode 100644 index 0000000..730503f --- /dev/null +++ b/lib/rpmliblua.h @@ -0,0 +1,18 @@ +#ifndef _RPMLIBLUA_H +#define _RPMLIBLUA_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Initialize Lua subsystem & register all our extensions */ +void rpmLuaInit(void); + +/* Shutdown Lua subsystem */ +void rpmLuaFree(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMLIBLUA_H */ diff --git a/lib/rpmlock.c b/lib/rpmlock.c new file mode 100644 index 0000000..cf9947e --- /dev/null +++ b/lib/rpmlock.c @@ -0,0 +1,125 @@ + +#include "system.h" + +#include + +#include +#include + +#include "lib/rpmlock.h" + +#include "debug.h" + +/* Internal interface */ + +enum { + RPMLOCK_READ = 1 << 0, + RPMLOCK_WRITE = 1 << 1, + RPMLOCK_WAIT = 1 << 2, +}; + +struct rpmlock_s { + int fd; + int openmode; +}; + +static rpmlock rpmlock_new(const char *lock_path) +{ + rpmlock lock = (rpmlock) malloc(sizeof(*lock)); + + if (lock != NULL) { + mode_t oldmask = umask(022); + lock->fd = open(lock_path, O_RDWR|O_CREAT, 0644); + (void) umask(oldmask); + + if (lock->fd == -1) { + lock->fd = open(lock_path, O_RDONLY); + if (lock->fd == -1) { + free(lock); + lock = NULL; + } else { + lock->openmode = RPMLOCK_READ; + } + } else { + lock->openmode = RPMLOCK_WRITE | RPMLOCK_READ; + } + } + return lock; +} + +static void rpmlock_free(rpmlock lock) +{ + if (lock) { + (void) close(lock->fd); + free(lock); + } +} + +static int rpmlock_acquire(rpmlock lock, int mode) +{ + int res = 0; + if (lock && (mode & lock->openmode)) { + struct flock info; + int cmd; + if (mode & RPMLOCK_WAIT) + cmd = F_SETLKW; + else + cmd = F_SETLK; + if (mode & RPMLOCK_READ) + info.l_type = F_RDLCK; + else + info.l_type = F_WRLCK; + info.l_whence = SEEK_SET; + info.l_start = 0; + info.l_len = 0; + info.l_pid = 0; + if (fcntl(lock->fd, cmd, &info) != -1) + res = 1; + } + return res; +} + +static void rpmlock_release(rpmlock lock) +{ + if (lock) { + struct flock info; + info.l_type = F_UNLCK; + info.l_whence = SEEK_SET; + info.l_start = 0; + info.l_len = 0; + info.l_pid = 0; + (void) fcntl(lock->fd, F_SETLK, &info); + } +} + + +/* External interface */ + +rpmlock rpmlockAcquire(const char *lock_path, const char *descr) +{ + rpmlock lock = rpmlock_new(lock_path); + if (!lock) { + rpmlog(RPMLOG_ERR, _("can't create %s lock on %s (%s)\n"), + descr, lock_path, strerror(errno)); + } else if (!rpmlock_acquire(lock, RPMLOCK_WRITE)) { + if (lock->openmode & RPMLOCK_WRITE) + rpmlog(RPMLOG_WARNING, _("waiting for %s lock on %s\n"), + descr, lock_path); + if (!rpmlock_acquire(lock, RPMLOCK_WRITE|RPMLOCK_WAIT)) { + rpmlog(RPMLOG_ERR, _("can't create %s lock on %s (%s)\n"), + descr, lock_path, strerror(errno)); + rpmlock_free(lock); + lock = NULL; + } + } + return lock; +} + +rpmlock rpmlockFree(rpmlock lock) +{ + rpmlock_release(lock); /* Not really needed here. */ + rpmlock_free(lock); + return NULL; +} + + diff --git a/lib/rpmlock.h b/lib/rpmlock.h new file mode 100644 index 0000000..aa85451 --- /dev/null +++ b/lib/rpmlock.h @@ -0,0 +1,22 @@ +#ifndef RPMLOCK_H +#define RPMLOCK_H + +#include + +typedef struct rpmlock_s * rpmlock; + +#ifdef __cplusplus +extern "C" { +#endif + +RPM_GNUC_INTERNAL +rpmlock rpmlockAcquire(const char *lock_path, const char *descr); + +RPM_GNUC_INTERNAL +rpmlock rpmlockFree(rpmlock lock); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/rpmplugins.c b/lib/rpmplugins.c new file mode 100644 index 0000000..e34019a --- /dev/null +++ b/lib/rpmplugins.c @@ -0,0 +1,198 @@ + +#include "system.h" + +#include +#include +#include +#include +#include + +#include "lib/rpmplugins.h" + +#define STR1(x) #x +#define STR(x) STR1(x) + +struct rpmPlugins_s { + void **handles; + ARGV_t names; + int count; + rpmts ts; +}; + +static int rpmpluginsGetPluginIndex(rpmPlugins plugins, const char *name) +{ + int i; + for (i = 0; i < plugins->count; i++) { + if (rstreq(plugins->names[i], name)) { + return i; + } + } + return -1; +} + +static int rpmpluginsHookIsSupported(void *handle, rpmPluginHook hook) +{ + rpmPluginHook *supportedHooks = + (rpmPluginHook *) dlsym(handle, STR(PLUGIN_HOOKS)); + return (*supportedHooks & hook); +} + +int rpmpluginsPluginAdded(rpmPlugins plugins, const char *name) +{ + return (rpmpluginsGetPluginIndex(plugins, name) >= 0); +} + +rpmPlugins rpmpluginsNew(rpmts ts) +{ + rpmPlugins plugins = xcalloc(1, sizeof(*plugins)); + plugins->ts = ts; + return plugins; +} + +rpmRC rpmpluginsAdd(rpmPlugins plugins, const char *name, const char *path, + const char *opts) +{ + rpmPluginHook *supportedHooks; + char *error; + + void *handle = dlopen(path, RTLD_LAZY); + if (!handle) { + rpmlog(RPMLOG_ERR, _("Failed to dlopen %s %s\n"), path, dlerror()); + return RPMRC_FAIL; + } + + /* make sure the plugin has the supported hooks flag */ + supportedHooks = (rpmPluginHook *) dlsym(handle, STR(PLUGIN_HOOKS)); + if ((error = dlerror()) != NULL) { + rpmlog(RPMLOG_ERR, _("Failed to resolve symbol %s: %s\n"), + STR(PLUGIN_HOOKS), error); + return RPMRC_FAIL; + } + + argvAdd(&plugins->names, name); + plugins->handles = xrealloc(plugins->handles, (plugins->count + 1) * sizeof(*plugins->handles)); + plugins->handles[plugins->count] = handle; + plugins->count++; + + return rpmpluginsCallInit(plugins, name, opts); +} + +rpmRC rpmpluginsAddCollectionPlugin(rpmPlugins plugins, const char *name) +{ + char *path; + char *options; + rpmRC rc = RPMRC_FAIL; + + path = rpmExpand("%{?__collection_", name, "}", NULL); + if (!path || rstreq(path, "")) { + rpmlog(RPMLOG_ERR, _("Failed to expand %%__collection_%s macro\n"), + name); + goto exit; + } + + /* split the options from the path */ +#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; } +#define SKIPNONSPACE(s) { while (*(s) && !risspace(*(s))) (s)++; } + options = path; + SKIPNONSPACE(options); + if (risspace(*options)) { + *options = '\0'; + options++; + SKIPSPACE(options); + } + if (*options == '\0') { + options = NULL; + } + + rc = rpmpluginsAdd(plugins, name, path, options); + + exit: + _free(path); + return rc; +} + +rpmPlugins rpmpluginsFree(rpmPlugins plugins) +{ + int i; + for (i = 0; i < plugins->count; i++) { + rpmpluginsCallCleanup(plugins, plugins->names[i]); + dlclose(plugins->handles[i]); + } + plugins->handles = _free(plugins->handles); + plugins->names = argvFree(plugins->names); + plugins->ts = NULL; + _free(plugins); + + return NULL; +} + + +/* Common define for all rpmpluginsCall* hook functions */ +#define RPMPLUGINS_SET_HOOK_FUNC(hook) \ + void *handle = NULL; \ + int index; \ + char * error; \ + index = rpmpluginsGetPluginIndex(plugins, name); \ + if (index < 0) { \ + rpmlog(RPMLOG_ERR, _("Plugin %s not loaded\n"), name); \ + return RPMRC_FAIL; \ + } \ + handle = plugins->handles[index]; \ + if (!handle) { \ + rpmlog(RPMLOG_ERR, _("Plugin %s not loaded\n"), name); \ + return RPMRC_FAIL; \ + } \ + if (!rpmpluginsHookIsSupported(handle, hook)) { \ + return RPMRC_OK; \ + } \ + *(void **)(&hookFunc) = dlsym(handle, STR(hook##_FUNC)); \ + if ((error = dlerror()) != NULL) { \ + rpmlog(RPMLOG_ERR, _("Failed to resolve %s plugin symbol %s: %s\n"), name, STR(hook##_FUNC), error); \ + return RPMRC_FAIL; \ + } \ + if (rpmtsFlags(plugins->ts) & (RPMTRANS_FLAG_TEST | RPMTRANS_FLAG_JUSTDB)) { \ + return RPMRC_OK; \ + } \ + rpmlog(RPMLOG_DEBUG, "Plugin: calling hook %s in %s plugin\n", STR(hook##_FUNC), name); + +rpmRC rpmpluginsCallInit(rpmPlugins plugins, const char *name, const char *opts) +{ + rpmRC (*hookFunc)(rpmts, const char *, const char *); + RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_INIT); + return hookFunc(plugins->ts, name, opts); +} + +rpmRC rpmpluginsCallCleanup(rpmPlugins plugins, const char *name) +{ + rpmRC (*hookFunc)(void); + RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_CLEANUP); + return hookFunc(); +} + +rpmRC rpmpluginsCallOpenTE(rpmPlugins plugins, const char *name, rpmte te) +{ + rpmRC (*hookFunc)(rpmte); + RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_OPENTE); + return hookFunc(te); +} + +rpmRC rpmpluginsCallCollectionPostAdd(rpmPlugins plugins, const char *name) +{ + rpmRC (*hookFunc)(void); + RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_COLL_POST_ADD); + return hookFunc(); +} + +rpmRC rpmpluginsCallCollectionPostAny(rpmPlugins plugins, const char *name) +{ + rpmRC (*hookFunc)(void); + RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_COLL_POST_ANY); + return hookFunc(); +} + +rpmRC rpmpluginsCallCollectionPreRemove(rpmPlugins plugins, const char *name) +{ + rpmRC (*hookFunc)(void); + RPMPLUGINS_SET_HOOK_FUNC(PLUGINHOOK_COLL_PRE_REMOVE); + return hookFunc(); +} diff --git a/lib/rpmplugins.h b/lib/rpmplugins.h new file mode 100644 index 0000000..7985559 --- /dev/null +++ b/lib/rpmplugins.h @@ -0,0 +1,125 @@ +#ifndef _PLUGINS_H +#define _PLUGINS_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define PLUGIN_HOOKS plugin_hooks + +#define PLUGINHOOK_INIT_FUNC pluginhook_init +#define PLUGINHOOK_CLEANUP_FUNC pluginhook_cleanup +#define PLUGINHOOK_OPENTE_FUNC pluginhook_opente +#define PLUGINHOOK_COLL_POST_ADD_FUNC pluginhook_coll_post_add +#define PLUGINHOOK_COLL_POST_ANY_FUNC pluginhook_coll_post_any +#define PLUGINHOOK_COLL_PRE_REMOVE_FUNC pluginhook_coll_pre_remove + +enum rpmPluginHook_e { + PLUGINHOOK_NONE = 0, + PLUGINHOOK_INIT = 1 << 0, + PLUGINHOOK_CLEANUP = 1 << 1, + PLUGINHOOK_OPENTE = 1 << 2, + PLUGINHOOK_COLL_POST_ADD = 1 << 3, + PLUGINHOOK_COLL_POST_ANY = 1 << 4, + PLUGINHOOK_COLL_PRE_REMOVE = 1 << 5 +}; + +typedef rpmFlags rpmPluginHook; + +/** \ingroup rpmplugins + * Create a new plugins structure + * @param ts transaction set + * @return new plugin structure + */ +rpmPlugins rpmpluginsNew(rpmts ts); + +/** \ingroup rpmplugins + * Destroy a plugins structure + * @param plugins plugins structure to destroy + * @return NULL always + */ +rpmPlugins rpmpluginsFree(rpmPlugins plugins); + +/** \ingroup rpmplugins + * Add and open a plugin + * @param plugins plugins structure to add a plugin to + * @param name name to access plugin + * @param path path of plugin to open + * @param opts options to pass to the plugin + * @return RPMRC_OK on success, RPMRC_FAIL otherwise + */ +rpmRC rpmpluginsAdd(rpmPlugins plugins, const char *name, const char *path, const char *opts); + +/** \ingroup rpmplugins + * Add and open a collection plugin + * @param plugins plugins structure to add a collection plugin to + * @param name name of collection to open + * @return RPMRC_OK on success, RPMRC_FAIL otherwise + */ +rpmRC rpmpluginsAddCollectionPlugin(rpmPlugins plugins, const char *name); + +/** \ingroup rpmplugins + * Determine if a plugin has been added already + * @param plugins plugins structure + * @param name name of plugin to check + * @return 1 if plugin name has already been added, 0 otherwise + */ +int rpmpluginsPluginAdded(rpmPlugins plugins, const char *name); + + +/** \ingroup rpmplugins + * Call the init plugin hook + * @param plugins plugins structure + * @param name name of plugin + * @param opts plugin options + * @return RPMRC_OK on success, RPMRC_FAIL otherwise + */ +rpmRC rpmpluginsCallInit(rpmPlugins plugins, const char *name, const char *opts); + +/** \ingroup rpmplugins + * Call the cleanup plugin hook + * @param plugins plugins structure + * @param name name of plugin + * @return RPMRC_OK on success, RPMRC_FAIL otherwise + */ +rpmRC rpmpluginsCallCleanup(rpmPlugins plugins, const char *name); + +/** \ingroup rpmplugins + * Call the open te plugin hook + * @param plugins plugins structure + * @param name name of plugin + * @param te transaction element opened + * @return RPMRC_OK on success, RPMRC_FAIL otherwise + */ +rpmRC rpmpluginsCallOpenTE(rpmPlugins plugins, const char *name, rpmte te); + +/** \ingroup rpmplugins + * Call the collection post add plugin hook + * @param plugins plugins structure + * @param name name of plugin + * @return RPMRC_OK on success, RPMRC_FAIL otherwise + */ +rpmRC rpmpluginsCallCollectionPostAdd(rpmPlugins plugins, const char *name); + +/** \ingroup rpmplugins + * Call the collection post any plugin hook + * @param plugins plugins structure + * @param name name of plugin + * @return RPMRC_OK on success, RPMRC_FAIL otherwise + */ +rpmRC rpmpluginsCallCollectionPostAny(rpmPlugins plugins, const char *name); + +/** \ingroup rpmplugins + * Call the collection pre remove plugin hook + * @param plugins plugins structure + * @param name name of plugin + * @return RPMRC_OK on success, RPMRC_FAIL otherwise + */ +rpmRC rpmpluginsCallCollectionPreRemove(rpmPlugins plugins, const char *name); + +#ifdef __cplusplus +} +#endif +#endif /* _PLUGINS_H */ diff --git a/lib/rpmpol.h b/lib/rpmpol.h new file mode 100644 index 0000000..f5aef28 --- /dev/null +++ b/lib/rpmpol.h @@ -0,0 +1,28 @@ +#ifndef H_RPMPOL +#define H_RPMPOL + +/** \ingroup rpmpol + * \file lib/rpmpol.h + * Structure(s) used for policy sets. + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +enum rpmpolFlags_e { + RPMPOL_FLAG_NONE = 0, + RPMPOL_FLAG_BASE = (1 << 0) +}; + +typedef rpmFlags rpmpolFlags; + +#define RPMPOL_TYPE_DEFAULT "default" + + +#ifdef __cplusplus +} +#endif +#endif /* H_rpmpol */ diff --git a/lib/rpmprob.c b/lib/rpmprob.c new file mode 100644 index 0000000..df9c578 --- /dev/null +++ b/lib/rpmprob.c @@ -0,0 +1,213 @@ +/** + * \file lib/rpmps.c + */ + +#include "system.h" + +#include +#include + +#include +#include + +#include "debug.h" + +struct rpmProblem_s { + char * pkgNEVR; + char * altNEVR; + fnpyKey key; + rpmProblemType type; + char * str1; + uint64_t num1; + int nrefs; +}; + +static rpmProblem rpmProblemUnlink(rpmProblem prob); + +rpmProblem rpmProblemCreate(rpmProblemType type, + const char * pkgNEVR, fnpyKey key, + const char * altNEVR, + const char * str, uint64_t number) +{ + rpmProblem p = xcalloc(1, sizeof(*p)); + + p->type = type; + p->key = key; + p->num1 = number; + + p->pkgNEVR = (pkgNEVR ? xstrdup(pkgNEVR) : NULL); + p->altNEVR = (altNEVR ? xstrdup(altNEVR) : NULL); + p->str1 = (str ? xstrdup(str) : NULL); + + return rpmProblemLink(p); +} + +rpmProblem rpmProblemFree(rpmProblem prob) +{ + if (prob == NULL) return NULL; + + if (prob->nrefs > 1) { + return rpmProblemUnlink(prob); + } + prob->pkgNEVR = _free(prob->pkgNEVR); + prob->altNEVR = _free(prob->altNEVR); + prob->str1 = _free(prob->str1); + free(prob); + return NULL; +} + +rpmProblem rpmProblemLink(rpmProblem prob) +{ + if (prob) { + prob->nrefs++; + } + return prob; +} + +static rpmProblem rpmProblemUnlink(rpmProblem prob) +{ + if (prob) { + prob->nrefs--; + } + return NULL; +} + +const char * rpmProblemGetPkgNEVR(rpmProblem p) +{ + return (p->pkgNEVR); +} + +const char * rpmProblemGetAltNEVR(rpmProblem p) +{ + return (p->altNEVR); +} + +fnpyKey rpmProblemGetKey(rpmProblem p) +{ + return (p->key); +} + +rpmProblemType rpmProblemGetType(rpmProblem p) +{ + return (p->type); +} + +const char * rpmProblemGetStr(rpmProblem p) +{ + return (p->str1); +} + +rpm_loff_t rpmProblemGetDiskNeed(rpmProblem p) +{ + return (p->num1); +} + +char * rpmProblemString(rpmProblem prob) +{ + const char * pkgNEVR = (prob->pkgNEVR ? prob->pkgNEVR : "?pkgNEVR?"); + const char * altNEVR = (prob->altNEVR ? prob->altNEVR : "? ?altNEVR?"); + const char * str1 = (prob->str1 ? prob->str1 : N_("different")); + char * buf = NULL; + int rc; + + switch (prob->type) { + case RPMPROB_BADARCH: + rc = rasprintf(&buf, _("package %s is intended for a %s architecture"), + pkgNEVR, str1); + break; + case RPMPROB_BADOS: + rc = rasprintf(&buf, + _("package %s is intended for a %s operating system"), + pkgNEVR, str1); + break; + case RPMPROB_PKG_INSTALLED: + rc = rasprintf(&buf, _("package %s is already installed"), + pkgNEVR); + break; + case RPMPROB_BADRELOCATE: + rc = rasprintf(&buf, _("path %s in package %s is not relocatable"), + str1, pkgNEVR); + break; + case RPMPROB_NEW_FILE_CONFLICT: + rc = rasprintf(&buf, + _("file %s conflicts between attempted installs of %s and %s"), + str1, pkgNEVR, altNEVR); + break; + case RPMPROB_FILE_CONFLICT: + rc = rasprintf(&buf, + _("file %s from install of %s conflicts with file from package %s"), + str1, pkgNEVR, altNEVR); + break; + case RPMPROB_OLDPACKAGE: + rc = rasprintf(&buf, + _("package %s (which is newer than %s) is already installed"), + altNEVR, pkgNEVR); + break; + case RPMPROB_DISKSPACE: + rc = rasprintf(&buf, + _("installing package %s needs %" PRIu64 "%cB on the %s filesystem"), + pkgNEVR, + prob->num1 > (1024*1024) + ? (prob->num1 + 1024 * 1024 - 1) / (1024 * 1024) + : (prob->num1 + 1023) / 1024, + prob->num1 > (1024*1024) ? 'M' : 'K', + str1); + break; + case RPMPROB_DISKNODES: + rc = rasprintf(&buf, + _("installing package %s needs %" PRIu64 " inodes on the %s filesystem"), + pkgNEVR, prob->num1, str1); + break; + case RPMPROB_REQUIRES: + rc = rasprintf(&buf, _("%s is needed by %s%s"), + prob->str1, + (prob->num1 ? _("(installed) ") : ""), altNEVR); + break; + case RPMPROB_CONFLICT: + rc = rasprintf(&buf, _("%s conflicts with %s%s"), + prob->str1, + (prob->num1 ? _("(installed) ") : ""), altNEVR); + break; + case RPMPROB_OBSOLETES: + rc = rasprintf(&buf, _("%s is obsoleted by %s%s"), + prob->str1, + (prob->num1 ? _("(installed) ") : ""), altNEVR); + break; + default: + rc = rasprintf(&buf, + _("unknown error %d encountered while manipulating package %s"), + prob->type, pkgNEVR); + break; + } + + return buf; +} + +static int cmpStr(const char *s1, const char *s2) +{ + if (s1 == s2) return 0; + if (s1 && s2) return strcmp(s1, s2); + return 1; +} + +int rpmProblemCompare(rpmProblem ap, rpmProblem bp) +{ + if (ap == bp) + return 0; + if (ap == NULL || bp == NULL) + return 1; + if (ap->type != bp->type) + return 1; + if (ap->key != bp->key) + return 1; + if (ap->num1 != bp->num1) + return 1; + if (cmpStr(ap->pkgNEVR, bp->pkgNEVR)) + return 1; + if (cmpStr(ap->altNEVR, bp->altNEVR)) + return 1; + if (cmpStr(ap->str1, bp->str1)) + return 1; + + return 0; +} diff --git a/lib/rpmprob.h b/lib/rpmprob.h new file mode 100644 index 0000000..2b89f15 --- /dev/null +++ b/lib/rpmprob.h @@ -0,0 +1,148 @@ +#ifndef _RPMPROB_H +#define _RPMPROB_H + +/** \ingroup rpmprob + * \file lib/rpmprob.h + * Structures and prototypes used for an rpm problem item. + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct rpmProblem_s * rpmProblem; + +/** \ingroup rpmprob + * @todo Generalize filter mechanism. + */ +enum rpmprobFilterFlags_e { + RPMPROB_FILTER_NONE = 0, + RPMPROB_FILTER_IGNOREOS = (1 << 0), /*!< from --ignoreos */ + RPMPROB_FILTER_IGNOREARCH = (1 << 1), /*!< from --ignorearch */ + RPMPROB_FILTER_REPLACEPKG = (1 << 2), /*!< from --replacepkgs */ + RPMPROB_FILTER_FORCERELOCATE= (1 << 3), /*!< from --badreloc */ + RPMPROB_FILTER_REPLACENEWFILES= (1 << 4), /*!< from --replacefiles */ + RPMPROB_FILTER_REPLACEOLDFILES= (1 << 5), /*!< from --replacefiles */ + RPMPROB_FILTER_OLDPACKAGE = (1 << 6), /*!< from --oldpackage */ + RPMPROB_FILTER_DISKSPACE = (1 << 7), /*!< from --ignoresize */ + RPMPROB_FILTER_DISKNODES = (1 << 8) /*!< from --ignoresize */ +}; + +typedef rpmFlags rpmprobFilterFlags; + +/** \ingroup rpmprob + * Enumerate transaction set problem types. + */ +typedef enum rpmProblemType_e { + RPMPROB_BADARCH, /*!< package ... is for a different architecture */ + RPMPROB_BADOS, /*!< package ... is for a different operating system */ + RPMPROB_PKG_INSTALLED, /*!< package ... is already installed */ + RPMPROB_BADRELOCATE,/*!< path ... is not relocatable for package ... */ + RPMPROB_REQUIRES, /*!< package ... has unsatisfied Requires: ... */ + RPMPROB_CONFLICT, /*!< package ... has unsatisfied Conflicts: ... */ + RPMPROB_NEW_FILE_CONFLICT, /*!< file ... conflicts between attemped installs of ... */ + RPMPROB_FILE_CONFLICT,/*!< file ... from install of ... conflicts with file from package ... */ + RPMPROB_OLDPACKAGE, /*!< package ... (which is newer than ...) is already installed */ + RPMPROB_DISKSPACE, /*!< installing package ... needs ... on the ... filesystem */ + RPMPROB_DISKNODES, /*!< installing package ... needs ... on the ... filesystem */ + RPMPROB_OBSOLETES, /*!< package ... is obsoleted by ... */ + } rpmProblemType; + +/** \ingroup rpmprob + * Create a problem item. + * @param type type of problem + * @param pkgNEVR package name + * @param key filename or python object address + * @param altNEVR related (e.g. through a dependency) package name + * @param str generic string attribute + * @param number generic number attribute + * @return rpmProblem + */ +rpmProblem rpmProblemCreate(rpmProblemType type, + const char * pkgNEVR, fnpyKey key, + const char * altNEVR, + const char * str, uint64_t number); + +/** \ingroup rpmprob + * Destroy a problem item. + * @param prob rpm problem + * @return rpm problem (NULL) + */ +rpmProblem rpmProblemFree(rpmProblem prob); + +/** \ingroup rpmprob + * Reference an rpmProblem instance + * @param prob rpm problem + * @return rpm problem + */ +rpmProblem rpmProblemLink(rpmProblem prob); + +/** \ingroup rpmprob + * Compare two problems for equality. + * @param ap 1st problem + * @param bp 2nd problem + * @return 1 if the problems differ, 0 otherwise + */ +int rpmProblemCompare(rpmProblem ap, rpmProblem bp); + +/** \ingroup rpmprob + * Return package NEVR + * @param prob rpm problem + * @return package NEVR + */ + +const char * rpmProblemGetPkgNEVR(rpmProblem prob); +/** \ingroup rpmprob + * Return related (e.g. through a dependency) package NEVR + * @param prob rpm problem + * @return related (e.g. through a dependency) package NEVR + */ +const char * rpmProblemGetAltNEVR(rpmProblem prob); + +/** \ingroup rpmprob + * Return type of problem (dependency, diskpace etc) + * @param prob rpm problem + * @return type of problem + */ + +rpmProblemType rpmProblemGetType(rpmProblem prob); + +/** \ingroup rpmprob + * Return filename or python object address of a problem + * @param prob rpm problem + * @return filename or python object address + */ +fnpyKey rpmProblemGetKey(rpmProblem prob); + +/** \ingroup rpmprob + * Return a generic data string from a problem + * @param prob rpm problem + * @return a generic data string + * @todo needs a better name + */ +const char * rpmProblemGetStr(rpmProblem prob); + +/** \ingroup rpmprob + * Return disk requirement (needed disk space / number of inodes) + * depending on problem type. On problem types other than RPMPROB_DISKSPACE + * and RPMPROB_DISKNODES return value is undefined. + * @param prob rpm problem + * @return disk requirement + */ +rpm_loff_t rpmProblemGetDiskNeed(rpmProblem prob); + +/** \ingroup rpmprob + * Return formatted string representation of a problem. + * @param prob rpm problem + * @return formatted string (malloc'd) + */ +char * rpmProblemString(rpmProblem prob); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMPROB_H */ diff --git a/lib/rpmps.c b/lib/rpmps.c new file mode 100644 index 0000000..6e1ab18 --- /dev/null +++ b/lib/rpmps.c @@ -0,0 +1,172 @@ +/** + * \file lib/rpmps.c + */ + +#include "system.h" + +#include +#include + +#include +#include + +#include "debug.h" + +struct rpmps_s { + int numProblems; /*!< Current probs array size. */ + int numProblemsAlloced; /*!< Allocated probs array size. */ + rpmProblem *probs; /*!< Array of pointers to specific problems. */ + int nrefs; /*!< Reference count. */ +}; + +struct rpmpsi_s { + int ix; + rpmps ps; +}; + + +static rpmps rpmpsUnlink(rpmps ps) +{ + if (ps) { + ps->nrefs--; + } + return NULL; +} + +rpmps rpmpsLink(rpmps ps) +{ + if (ps) { + ps->nrefs++; + } + return ps; +} + +int rpmpsNumProblems(rpmps ps) +{ + int numProblems = 0; + if (ps && ps->probs) + numProblems = ps->numProblems; + return numProblems; +} + +rpmpsi rpmpsInitIterator(rpmps ps) +{ + rpmpsi psi = NULL; + if (ps != NULL && ps->numProblems > 0) { + psi = xcalloc(1, sizeof(*psi)); + psi->ps = rpmpsLink(ps); + psi->ix = -1; + } + return psi; +} + +rpmpsi rpmpsFreeIterator(rpmpsi psi) +{ + if (psi != NULL) { + rpmpsUnlink(psi->ps); + free(psi); + } + return NULL; +} + +rpmProblem rpmpsiNext(rpmpsi psi) +{ + rpmProblem p = NULL; + if (psi != NULL && psi->ps != NULL && ++psi->ix >= 0) { + rpmps ps = psi->ps; + if (psi->ix < ps->numProblems) { + p = ps->probs[psi->ix]; + } else { + psi->ix = -1; + } + } + return p; +} + +int rpmpsNextIterator(rpmpsi psi) +{ + return (rpmpsiNext(psi) != NULL) ? psi->ix : -1; +} + +rpmProblem rpmpsGetProblem(rpmpsi psi) +{ + rpmProblem p = NULL; + if (psi != NULL && psi->ix >= 0 && psi->ix < rpmpsNumProblems(psi->ps)) { + p = psi->ps->probs[psi->ix]; + } + return p; +} + +rpmps rpmpsCreate(void) +{ + rpmps ps = xcalloc(1, sizeof(*ps)); + return rpmpsLink(ps); +} + +rpmps rpmpsFree(rpmps ps) +{ + if (ps == NULL) return NULL; + if (ps->nrefs > 1) { + return rpmpsUnlink(ps); + } + + if (ps->probs) { + rpmpsi psi = rpmpsInitIterator(ps); + while (rpmpsNextIterator(psi) >= 0) { + rpmProblemFree(rpmpsGetProblem(psi)); + } + rpmpsFreeIterator(psi); + ps->probs = _free(ps->probs); + } + ps = _free(ps); + return NULL; +} + +void rpmpsAppendProblem(rpmps ps, rpmProblem prob) +{ + if (ps == NULL || prob == NULL) return; + + if (ps->numProblems == ps->numProblemsAlloced) { + if (ps->numProblemsAlloced) + ps->numProblemsAlloced *= 2; + else + ps->numProblemsAlloced = 2; + ps->probs = xrealloc(ps->probs, + ps->numProblemsAlloced * sizeof(ps->probs)); + } + + ps->probs[ps->numProblems] = rpmProblemLink(prob); + ps->numProblems++; +} + +/* + * TODO: filter out duplicates while merging. Also horribly inefficient... */ +int rpmpsMerge(rpmps dest, rpmps src) +{ + int rc = 0; + if (dest != NULL) { + rpmProblem p; + rpmpsi spi = rpmpsInitIterator(src); + while ((p = rpmpsiNext(spi)) != NULL) { + rpmpsAppendProblem(dest, p); + rc++; + } + rpmpsFreeIterator(spi); + } + return rc; +} + +void rpmpsPrint(FILE *fp, rpmps ps) +{ + rpmProblem p; + rpmpsi psi = rpmpsInitIterator(ps); + FILE *f = (fp != NULL) ? fp : stderr; + + while ((p = rpmpsiNext(psi))) { + char *msg = rpmProblemString(p); + fprintf(f, "\t%s\n", msg); + free(msg); + } + rpmpsFreeIterator(psi); +} + diff --git a/lib/rpmps.h b/lib/rpmps.h new file mode 100644 index 0000000..1b1142b --- /dev/null +++ b/lib/rpmps.h @@ -0,0 +1,110 @@ +#ifndef H_RPMPS +#define H_RPMPS + +/** \ingroup rpmps + * \file lib/rpmps.h + * Structures and prototypes used for an "rpmps" problem set. + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmps + * Problem set iterator + */ +typedef struct rpmpsi_s * rpmpsi; + +/** \ingroup rpmps + * Reference a problem set instance. + * @param ps transaction set + * @return new transaction set reference + */ +rpmps rpmpsLink (rpmps ps); + +/** \ingroup rpmps + * Return number of problems in set. + * @param ps problem set + * @return number of problems + */ +int rpmpsNumProblems(rpmps ps); + +/** \ingroup rpmps + * Initialize problem set iterator. + * @param ps problem set + * @return problem set iterator + */ +rpmpsi rpmpsInitIterator(rpmps ps); + +/** \ingroup rpmps + * Destroy problem set iterator. + * @param psi problem set iterator + * @return problem set iterator (NULL) + */ +rpmpsi rpmpsFreeIterator(rpmpsi psi); + +/** \ingroup rpmps + * Return next problem from iterator + * @param psi problem set iterator + * @return next problem (weak ref), NULL on termination + */ +rpmProblem rpmpsiNext(rpmpsi psi); + +/** \ingroup rpmps + * Return next problem set iterator index + * @param psi problem set iterator + * @return iterator index, -1 on termination + */ +int rpmpsNextIterator(rpmpsi psi); + +/** \ingroup rpmps + * Return current problem from problem set + * @param psi problem set iterator + * @return current rpmProblem + */ +rpmProblem rpmpsGetProblem(rpmpsi psi); + +/** \ingroup rpmps + * Create a problem set. + * @return new problem set + */ +rpmps rpmpsCreate(void); + +/** \ingroup rpmps + * Destroy a problem set. + * @param ps problem set + * @return NULL always + */ +rpmps rpmpsFree(rpmps ps); + +/** \ingroup rpmps + * Print problems to file handle. + * @param fp file handle (NULL uses stderr) + * @param ps problem set + */ +void rpmpsPrint(FILE *fp, rpmps ps); + +/** \ingroup rpmps + * Append a problem to current set of problems. + * @param ps problem set + * @param prob rpmProblem + */ +void rpmpsAppendProblem(rpmps ps, rpmProblem prob); + +/** \ingroup rpmps + * Merge problem set into another. + * @param dest destination problem set + * @param src source problem set + * @return number of problems merged + */ +int rpmpsMerge(rpmps dest, rpmps src); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMPS */ diff --git a/lib/rpmrc.c b/lib/rpmrc.c new file mode 100644 index 0000000..1b47dc3 --- /dev/null +++ b/lib/rpmrc.c @@ -0,0 +1,1710 @@ +#include "system.h" + +#include +#if defined(__linux__) && defined(__powerpc__) +#include +#endif + +#if HAVE_SYS_UTSNAME_H +#include +#endif +#include +#include /* XXX for /etc/rpm/platform contents */ + +#if HAVE_SYS_SYSTEMCFG_H +#include +#else +#define __power_pc() 0 +#endif + +#include /* RPM_MACTABLE*, Rc-prototypes */ +#include +#include +#include +#include + +#include "rpmio/rpmlua.h" +#include "rpmio/rpmio_internal.h" /* XXX for rpmioSlurp */ +#include "lib/misc.h" +#include "lib/rpmliblua.h" + +#include "debug.h" + +static const char * defrcfiles = NULL; +const char * macrofiles = NULL; + +static const char * const platform = SYSCONFDIR "/rpm/platform"; +static char ** platpat = NULL; +static int nplatpat = 0; + +typedef char * cptr_t; + +typedef struct machCacheEntry_s { + char * name; + int count; + cptr_t * equivs; + int visited; +} * machCacheEntry; + +typedef struct machCache_s { + machCacheEntry cache; + int size; +} * machCache; + +typedef struct machEquivInfo_s { + char * name; + int score; +} * machEquivInfo; + +typedef struct machEquivTable_s { + int count; + machEquivInfo list; +} * machEquivTable; + +struct rpmvarValue { + char * value; + /* eventually, this arch will be replaced with a generic condition */ + char * arch; +struct rpmvarValue * next; +}; + +struct rpmOption { + char * name; + int var; + int archSpecific; +int required; + int macroize; + int localize; +struct rpmOptionValue * value; +}; + +typedef struct defaultEntry_s { + char * name; + char * defName; +} * defaultEntry; + +typedef struct canonEntry_s { + char * name; + char * short_name; + short num; +} * canonEntry; + +/* tags are 'key'canon, 'key'translate, 'key'compat + * + * for giggles, 'key'_canon, 'key'_compat, and 'key'_canon will also work + */ +typedef struct tableType_s { + char * const key; + const int hasCanon; + const int hasTranslate; + struct machEquivTable_s equiv; + struct machCache_s cache; + defaultEntry defaults; + canonEntry canons; + int defaultsLength; + int canonsLength; +} * tableType; + +static struct tableType_s tables[RPM_MACHTABLE_COUNT] = { + { "arch", 1, 0 }, + { "os", 1, 0 }, + { "buildarch", 0, 1 }, + { "buildos", 0, 1 } +}; + +/* XXX get rid of this stuff... */ +/* Stuff for maintaining "variables" like SOURCEDIR, BUILDDIR, etc */ +#define RPMVAR_OPTFLAGS 3 +#define RPMVAR_INCLUDE 43 +#define RPMVAR_MACROFILES 49 + +#define RPMVAR_NUM 55 /* number of RPMVAR entries */ + +/* this *must* be kept in alphabetical order */ +/* The order of the flags is archSpecific, required, macroize, localize */ + +static const struct rpmOption optionTable[] = { + { "include", RPMVAR_INCLUDE, 0, 1, 0, 2 }, + { "macrofiles", RPMVAR_MACROFILES, 0, 0, 0, 1 }, + { "optflags", RPMVAR_OPTFLAGS, 1, 0, 1, 0 }, +}; + +static const size_t optionTableSize = sizeof(optionTable) / sizeof(*optionTable); + +#define OS 0 +#define ARCH 1 + +static cptr_t current[2]; + +static int currTables[2] = { RPM_MACHTABLE_INSTOS, RPM_MACHTABLE_INSTARCH }; + +static struct rpmvarValue values[RPMVAR_NUM]; + +static int defaultsInitialized = 0; + +/* prototypes */ +static rpmRC doReadRC(const char * urlfn); + +static void rpmSetVarArch(int var, const char * val, + const char * arch); + +static void rebuildCompatTables(int type, const char * name); + +static void rpmRebuildTargetVars(const char **target, const char ** canontarget); + +static int optionCompare(const void * a, const void * b) +{ + return rstrcasecmp(((const struct rpmOption *) a)->name, + ((const struct rpmOption *) b)->name); +} + +static machCacheEntry +machCacheFindEntry(const machCache cache, const char * key) +{ + int i; + + for (i = 0; i < cache->size; i++) + if (rstreq(cache->cache[i].name, key)) return cache->cache + i; + + return NULL; +} + +static int machCompatCacheAdd(char * name, const char * fn, int linenum, + machCache cache) +{ + machCacheEntry entry = NULL; + char * chptr; + char * equivs; + int delEntry = 0; + int i; + + while (*name && risspace(*name)) name++; + + chptr = name; + while (*chptr && *chptr != ':') chptr++; + if (!*chptr) { + rpmlog(RPMLOG_ERR, _("missing second ':' at %s:%d\n"), fn, linenum); + return 1; + } else if (chptr == name) { + rpmlog(RPMLOG_ERR, _("missing architecture name at %s:%d\n"), fn, + linenum); + return 1; + } + + while (*chptr == ':' || risspace(*chptr)) chptr--; + *(++chptr) = '\0'; + equivs = chptr + 1; + while (*equivs && risspace(*equivs)) equivs++; + if (!*equivs) { + delEntry = 1; + } + + if (cache->size) { + entry = machCacheFindEntry(cache, name); + if (entry) { + for (i = 0; i < entry->count; i++) + entry->equivs[i] = _free(entry->equivs[i]); + entry->equivs = _free(entry->equivs); + entry->count = 0; + } + } + + if (!entry) { + cache->cache = xrealloc(cache->cache, + (cache->size + 1) * sizeof(*cache->cache)); + entry = cache->cache + cache->size++; + entry->name = xstrdup(name); + entry->count = 0; + entry->visited = 0; + } + + if (delEntry) return 0; + + while ((chptr = strtok(equivs, " ")) != NULL) { + equivs = NULL; + if (chptr[0] == '\0') /* does strtok() return "" ever?? */ + continue; + if (entry->count) + entry->equivs = xrealloc(entry->equivs, sizeof(*entry->equivs) + * (entry->count + 1)); + else + entry->equivs = xmalloc(sizeof(*entry->equivs)); + + entry->equivs[entry->count] = xstrdup(chptr); + entry->count++; + } + + return 0; +} + +static machEquivInfo +machEquivSearch(const machEquivTable table, const char * name) +{ + int i; + + for (i = 0; i < table->count; i++) + if (!rstrcasecmp(table->list[i].name, name)) + return table->list + i; + + return NULL; +} + +static void machAddEquiv(machEquivTable table, const char * name, + int distance) +{ + machEquivInfo equiv; + + equiv = machEquivSearch(table, name); + if (!equiv) { + if (table->count) + table->list = xrealloc(table->list, (table->count + 1) + * sizeof(*table->list)); + else + table->list = xmalloc(sizeof(*table->list)); + + table->list[table->count].name = xstrdup(name); + table->list[table->count++].score = distance; + } +} + +static void machCacheEntryVisit(machCache cache, + machEquivTable table, const char * name, int distance) +{ + machCacheEntry entry; + int i; + + entry = machCacheFindEntry(cache, name); + if (!entry || entry->visited) return; + + entry->visited = 1; + + for (i = 0; i < entry->count; i++) { + machAddEquiv(table, entry->equivs[i], distance); + } + + for (i = 0; i < entry->count; i++) { + machCacheEntryVisit(cache, table, entry->equivs[i], distance + 1); + } +} + +static void machFindEquivs(machCache cache, machEquivTable table, + const char * key) +{ + int i; + + for (i = 0; i < cache->size; i++) + cache->cache[i].visited = 0; + + while (table->count > 0) { + --table->count; + table->list[table->count].name = _free(table->list[table->count].name); + } + table->count = 0; + table->list = _free(table->list); + + /* + * We have a general graph built using strings instead of pointers. + * Yuck. We have to start at a point at traverse it, remembering how + * far away everything is. + */ + /* FIX: table->list may be NULL. */ + machAddEquiv(table, key, 1); + machCacheEntryVisit(cache, table, key, 2); + return; +} + +static rpmRC addCanon(canonEntry * table, int * tableLen, char * line, + const char * fn, int lineNum) +{ + canonEntry t; + char *s, *s1; + const char * tname; + const char * tshort_name; + int tnum; + + (*tableLen) += 2; + *table = xrealloc(*table, sizeof(**table) * (*tableLen)); + + t = & ((*table)[*tableLen - 2]); + + tname = strtok(line, ": \t"); + tshort_name = strtok(NULL, " \t"); + s = strtok(NULL, " \t"); + if (! (tname && tshort_name && s)) { + rpmlog(RPMLOG_ERR, _("Incomplete data line at %s:%d\n"), + fn, lineNum); + return RPMRC_FAIL; + } + if (strtok(NULL, " \t")) { + rpmlog(RPMLOG_ERR, _("Too many args in data line at %s:%d\n"), + fn, lineNum); + return RPMRC_FAIL; + } + + tnum = strtoul(s, &s1, 10); + if ((*s1) || (s1 == s) || (tnum == ULONG_MAX)) { + rpmlog(RPMLOG_ERR, _("Bad arch/os number: %s (%s:%d)\n"), s, + fn, lineNum); + return RPMRC_FAIL; + } + + t[0].name = xstrdup(tname); + t[0].short_name = (tshort_name ? xstrdup(tshort_name) : xstrdup("")); + t[0].num = tnum; + + /* From A B C entry */ + /* Add B B C entry */ + t[1].name = (tshort_name ? xstrdup(tshort_name) : xstrdup("")); + t[1].short_name = (tshort_name ? xstrdup(tshort_name) : xstrdup("")); + t[1].num = tnum; + + return RPMRC_OK; +} + +static rpmRC addDefault(defaultEntry * table, int * tableLen, char * line, + const char * fn, int lineNum) +{ + defaultEntry t; + + (*tableLen)++; + *table = xrealloc(*table, sizeof(**table) * (*tableLen)); + + t = & ((*table)[*tableLen - 1]); + + t->name = strtok(line, ": \t"); + t->defName = strtok(NULL, " \t"); + if (! (t->name && t->defName)) { + rpmlog(RPMLOG_ERR, _("Incomplete default line at %s:%d\n"), + fn, lineNum); + return RPMRC_FAIL; + } + if (strtok(NULL, " \t")) { + rpmlog(RPMLOG_ERR, _("Too many args in default line at %s:%d\n"), + fn, lineNum); + return RPMRC_FAIL; + } + + t->name = xstrdup(t->name); + t->defName = (t->defName ? xstrdup(t->defName) : NULL); + + return RPMRC_OK; +} + +static canonEntry lookupInCanonTable(const char * name, + const canonEntry table, int tableLen) +{ + while (tableLen) { + tableLen--; + if (!rstreq(name, table[tableLen].name)) + continue; + return &(table[tableLen]); + } + + return NULL; +} + +static +const char * lookupInDefaultTable(const char * name, + const defaultEntry table, int tableLen) +{ + while (tableLen) { + tableLen--; + if (table[tableLen].name && rstreq(name, table[tableLen].name)) + return table[tableLen].defName; + } + + return name; +} + +static void setDefaults(void) +{ + const char *confdir = rpmConfigDir(); + if (!defrcfiles) { + defrcfiles = rstrscat(NULL, confdir, "/rpmrc", ":", + confdir, "/" RPMCANONVENDOR "/rpmrc", ":", + SYSCONFDIR "/rpmrc", ":", + "~/.rpmrc", NULL); + } + +#ifndef MACROFILES + if (!macrofiles) { + macrofiles = rstrscat(NULL, confdir, "/macros", ":", + confdir, "/platform/%{_target}/macros", ":", + confdir, "/fileattrs/*.attr", ":", + confdir, "/" RPMCANONVENDOR "/macros", ":", + SYSCONFDIR "/rpm/macros.*", ":", + SYSCONFDIR "/rpm/macros", ":", + SYSCONFDIR "/rpm/%{_target}/macros", ":", + "~/.rpmmacros", NULL); + } +#else + macrofiles = MACROFILES; +#endif +} + +/* FIX: se usage inconsistent, W2DO? */ +static rpmRC doReadRC(const char * urlfn) +{ + char *s; + char *se, *next, *buf = NULL, *fn; + int linenum = 0; + struct rpmOption searchOption, * option; + rpmRC rc = RPMRC_FAIL; + + fn = rpmGetPath(urlfn, NULL); + if (rpmioSlurp(fn, (uint8_t **) &buf, NULL) || buf == NULL) { + goto exit; + } + + next = buf; + while (*next != '\0') { + linenum++; + + s = se = next; + + /* Find end-of-line. */ + while (*se && *se != '\n') se++; + if (*se != '\0') *se++ = '\0'; + next = se; + + /* Trim leading spaces */ + while (*s && risspace(*s)) s++; + + /* We used to allow comments to begin anywhere, but not anymore. */ + if (*s == '#' || *s == '\0') continue; + + /* Find end-of-keyword. */ + se = (char *)s; + while (*se && !risspace(*se) && *se != ':') se++; + + if (risspace(*se)) { + *se++ = '\0'; + while (*se && risspace(*se) && *se != ':') se++; + } + + if (*se != ':') { + rpmlog(RPMLOG_ERR, _("missing ':' (found 0x%02x) at %s:%d\n"), + (unsigned)(0xff & *se), fn, linenum); + goto exit; + } + *se++ = '\0'; /* terminate keyword or option, point to value */ + while (*se && risspace(*se)) se++; + + /* Find keyword in table */ + searchOption.name = s; + option = bsearch(&searchOption, optionTable, optionTableSize, + sizeof(optionTable[0]), optionCompare); + + if (option) { /* For configuration variables ... */ + const char *arch, *val; + + arch = val = NULL; + if (*se == '\0') { + rpmlog(RPMLOG_ERR, _("missing argument for %s at %s:%d\n"), + option->name, fn, linenum); + goto exit; + } + + switch (option->var) { + case RPMVAR_INCLUDE: + s = se; + while (*se && !risspace(*se)) se++; + if (*se != '\0') *se++ = '\0'; + +#if 0 /* XXX doesn't seem to do anything useful, only break things... */ + rpmRebuildTargetVars(NULL, NULL); +#endif + + if (doReadRC(s)) { + rpmlog(RPMLOG_ERR, _("cannot open %s at %s:%d: %m\n"), + s, fn, linenum); + goto exit; + } else { + continue; /* XXX don't save include value as var/macro */ + } + break; + default: + break; + } + + if (option->archSpecific) { + arch = se; + while (*se && !risspace(*se)) se++; + if (*se == '\0') { + rpmlog(RPMLOG_ERR, + _("missing architecture for %s at %s:%d\n"), + option->name, fn, linenum); + goto exit; + } + *se++ = '\0'; + while (*se && risspace(*se)) se++; + if (*se == '\0') { + rpmlog(RPMLOG_ERR, + _("missing argument for %s at %s:%d\n"), + option->name, fn, linenum); + goto exit; + } + } + + val = se; + + /* Only add macros if appropriate for this arch */ + if (option->macroize && + (arch == NULL || rstreq(arch, current[ARCH]))) { + char *n, *name; + n = name = xmalloc(strlen(option->name)+2); + if (option->localize) + *n++ = '_'; + strcpy(n, option->name); + addMacro(NULL, name, NULL, val, RMIL_RPMRC); + free(name); + } + rpmSetVarArch(option->var, val, arch); + fn = _free(fn); + + } else { /* For arch/os compatibilty tables ... */ + int gotit; + int i; + + gotit = 0; + + for (i = 0; i < RPM_MACHTABLE_COUNT; i++) { + if (rstreqn(tables[i].key, s, strlen(tables[i].key))) + break; + } + + if (i < RPM_MACHTABLE_COUNT) { + const char *rest = s + strlen(tables[i].key); + if (*rest == '_') rest++; + + if (rstreq(rest, "compat")) { + if (machCompatCacheAdd(se, fn, linenum, + &tables[i].cache)) + goto exit; + gotit = 1; + } else if (tables[i].hasTranslate && + rstreq(rest, "translate")) { + if (addDefault(&tables[i].defaults, + &tables[i].defaultsLength, + se, fn, linenum)) + goto exit; + gotit = 1; + } else if (tables[i].hasCanon && + rstreq(rest, "canon")) { + if (addCanon(&tables[i].canons, &tables[i].canonsLength, + se, fn, linenum)) + goto exit; + gotit = 1; + } + } + + if (!gotit) { + rpmlog(RPMLOG_ERR, _("bad option '%s' at %s:%d\n"), + s, fn, linenum); + goto exit; + } + } + } + rc = RPMRC_OK; + +exit: + free(fn); + free(buf); + + return rc; +} + + +/** + */ +static rpmRC rpmPlatform(const char * platform) +{ + const char *cpu = NULL, *vendor = NULL, *os = NULL, *gnu = NULL; + uint8_t * b = NULL; + ssize_t blen = 0; + int init_platform = 0; + char * p, * pe; + rpmRC rc; + + rc = (rpmioSlurp(platform, &b, &blen) == 0) ? RPMRC_OK : RPMRC_FAIL; + + if (rc || b == NULL || blen <= 0) { + rc = RPMRC_FAIL; + goto exit; + } + + p = (char *)b; + for (pe = p; p && *p; p = pe) { + pe = strchr(p, '\n'); + if (pe) + *pe++ = '\0'; + + while (*p && isspace(*p)) + p++; + if (*p == '\0' || *p == '#') + continue; + + if (init_platform) { + char * t = p + strlen(p); + + while (--t > p && isspace(*t)) + *t = '\0'; + if (t > p) { + platpat = xrealloc(platpat, (nplatpat + 2) * sizeof(*platpat)); + platpat[nplatpat] = xstrdup(p); + nplatpat++; + platpat[nplatpat] = NULL; + } + continue; + } + + cpu = p; + vendor = "unknown"; + os = "unknown"; + gnu = NULL; + while (*p && !(*p == '-' || isspace(*p))) + p++; + if (*p != '\0') *p++ = '\0'; + + vendor = p; + while (*p && !(*p == '-' || isspace(*p))) + p++; + if (*p != '-') { + if (*p != '\0') *p++ = '\0'; + os = vendor; + vendor = "unknown"; + } else { + if (*p != '\0') *p++ = '\0'; + + os = p; + while (*p && !(*p == '-' || isspace(*p))) + p++; + if (*p == '-') { + *p++ = '\0'; + + gnu = p; + while (*p && !(*p == '-' || isspace(*p))) + p++; + } + if (*p != '\0') *p++ = '\0'; + } + + addMacro(NULL, "_host_cpu", NULL, cpu, -1); + addMacro(NULL, "_host_vendor", NULL, vendor, -1); + addMacro(NULL, "_host_os", NULL, os, -1); + + platpat = xrealloc(platpat, (nplatpat + 2) * sizeof(*platpat)); + platpat[nplatpat] = rpmExpand("%{_host_cpu}-%{_host_vendor}-%{_host_os}", (gnu && *gnu ? "-" : NULL), gnu, NULL); + nplatpat++; + platpat[nplatpat] = NULL; + + init_platform++; + } + rc = (init_platform ? RPMRC_OK : RPMRC_FAIL); + +exit: + b = _free(b); + return rc; +} + + +# if defined(__linux__) && defined(__i386__) +#include +#include + +/* + * Generic CPUID function + */ +static inline void cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx) +{ + asm volatile ( + "pushl %%ebx \n" + "cpuid \n" + "movl %%ebx, %%esi \n" + "popl %%ebx \n" + : "=a" (*eax), "=S" (*ebx), "=c" (*ecx), "=d" (*edx) + : "a" (op)); +} + +/* + * CPUID functions returning a single datum + */ +static inline unsigned int cpuid_eax(unsigned int op) +{ + unsigned int tmp, val; + cpuid(op, &val, &tmp, &tmp, &tmp); + return val; +} + +static inline unsigned int cpuid_ebx(unsigned int op) +{ + unsigned int tmp, val; + cpuid(op, &tmp, &val, &tmp, &tmp); + return val; +} + +static inline unsigned int cpuid_ecx(unsigned int op) +{ + unsigned int tmp, val; + cpuid(op, &tmp, &tmp, &val, &tmp); + return val; +} + +static inline unsigned int cpuid_edx(unsigned int op) +{ + unsigned int tmp, val; + cpuid(op, &tmp, &tmp, &tmp, &val); + return val; +} + +static sigjmp_buf jenv; + +static inline void model3(int _unused) +{ + siglongjmp(jenv, 1); +} + +static inline int RPMClass(void) +{ + int cpu; + unsigned int tfms, junk, cap, capamd; + struct sigaction oldsa; + + sigaction(SIGILL, NULL, &oldsa); + signal(SIGILL, model3); + + if (sigsetjmp(jenv, 1)) { + sigaction(SIGILL, &oldsa, NULL); + return 3; + } + + if (cpuid_eax(0x000000000)==0) { + sigaction(SIGILL, &oldsa, NULL); + return 4; + } + + cpuid(0x00000001, &tfms, &junk, &junk, &cap); + cpuid(0x80000001, &junk, &junk, &junk, &capamd); + + cpu = (tfms>>8)&15; + + sigaction(SIGILL, &oldsa, NULL); + + if (cpu < 6) + return cpu; + + if (cap & (1<<15)) { + /* CMOV supported? */ + if (capamd & (1<<30)) + return 7; /* 3DNOWEXT supported */ + return 6; + } + + return 5; +} + +/* should only be called for model 6 CPU's */ +static int is_athlon(void) +{ + unsigned int eax, ebx, ecx, edx; + char vendor[16]; + int i; + + cpuid (0, &eax, &ebx, &ecx, &edx); + + /* If you care about space, you can just check ebx, ecx and edx directly + instead of forming a string first and then doing a strcmp */ + memset(vendor, 0, sizeof(vendor)); + + for (i=0; i<4; i++) + vendor[i] = (unsigned char) (ebx >>(8*i)); + for (i=0; i<4; i++) + vendor[4+i] = (unsigned char) (edx >>(8*i)); + for (i=0; i<4; i++) + vendor[8+i] = (unsigned char) (ecx >>(8*i)); + + if (!rstreqn(vendor, "AuthenticAMD", 12)) + return 0; + + return 1; +} + +static int is_pentium3() +{ + unsigned int eax, ebx, ecx, edx, family, model; + char vendor[16]; + cpuid(0, &eax, &ebx, &ecx, &edx); + memset(vendor, 0, sizeof(vendor)); + *((unsigned int *)&vendor[0]) = ebx; + *((unsigned int *)&vendor[4]) = edx; + *((unsigned int *)&vendor[8]) = ecx; + if (!rstreqn(vendor, "GenuineIntel", 12)) + return 0; + cpuid(1, &eax, &ebx, &ecx, &edx); + family = (eax >> 8) & 0x0f; + model = (eax >> 4) & 0x0f; + if (family == 6) + switch (model) + { + case 7: // Pentium III, Pentium III Xeon (model 7) + case 8: // Pentium III, Pentium III Xeon, Celeron (model 8) + case 9: // Pentium M + /* + Intel recently announced its new technology for mobile platforms, + named Centrino, and presents it as a big advance in mobile PCs. + One of the main part of Centrino consists in a brand new CPU, + the Pentium M, codenamed Banias, that we'll study in this review. + A particularity of this CPU is that it was designed for mobile platform + exclusively, unlike previous mobile CPU (Pentium III-M, Pentium 4-M) + that share the same micro-architecture as their desktop counterparts. + The Pentium M introduces a new micro-architecture, adapted for mobility + constraints, and that is halfway between the Pentium III and the Pentium 4. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + */ + case 10: // Pentium III Xeon (model A) + case 11: // Pentium III (model B) + return 1; + } + return 0; +} + +static int is_pentium4() +{ + unsigned int eax, ebx, ecx, edx, family, model; + char vendor[16]; + cpuid(0, &eax, &ebx, &ecx, &edx); + memset(vendor, 0, sizeof(vendor)); + *((unsigned int *)&vendor[0]) = ebx; + *((unsigned int *)&vendor[4]) = edx; + *((unsigned int *)&vendor[8]) = ecx; + if (!rstreqn(vendor, "GenuineIntel", 12)) + return 0; + cpuid(1, &eax, &ebx, &ecx, &edx); + family = (eax >> 8) & 0x0f; + model = (eax >> 4) & 0x0f; + if (family == 15) + switch (model) + { + case 0: // Pentium 4, Pentium 4 Xeon (0.18um) + case 1: // Pentium 4, Pentium 4 Xeon MP, Celeron (0.18um) + case 2: // Pentium 4, Mobile Pentium 4-M, + // Pentium 4 Xeon, Pentium 4 Xeon MP, + // Celeron, Mobile Celron (0.13um) + case 3: // Pentium 4, Celeron (0.09um) + return 1; + } + return 0; +} + +static int is_geode() +{ + unsigned int eax, ebx, ecx, edx, family, model; + char vendor[16]; + /* If you care about space, you can just check ebx, ecx and edx directly + instead of forming a string first and then doing a strcmp */ + memset(vendor, 0, sizeof(vendor)); + + cpuid(0, &eax, &ebx, &ecx, &edx); + memset(vendor, 0, sizeof(vendor)); + *((unsigned int *)&vendor[0]) = ebx; + *((unsigned int *)&vendor[4]) = edx; + *((unsigned int *)&vendor[8]) = ecx; + if (!rstreqn(vendor, "AuthenticAMD", 12)) + return 0; + cpuid(1, &eax, &ebx, &ecx, &edx); + family = (eax >> 8) & 0x0f; + model = (eax >> 4) & 0x0f; + if (family == 5) + switch (model) + { + case 10: // Geode + return 1; + } + return 0; +} +#endif + +#if defined(__linux__) && defined(__powerpc__) +static jmp_buf mfspr_jmpbuf; + +static void mfspr_ill(int notused) +{ + longjmp(mfspr_jmpbuf, -1); +} +#endif + +/** + */ +static void defaultMachine(const char ** arch, + const char ** os) +{ + static struct utsname un; + static int gotDefaults = 0; + char * chptr; + canonEntry canon; + int rc; + + while (!gotDefaults) { + if (!rpmPlatform(platform)) { + char * s; + s = rpmExpand("%{_host_cpu}", NULL); + if (s) { + rstrlcpy(un.machine, s, sizeof(un.machine)); + s = _free(s); + } + s = rpmExpand("%{_host_os}", NULL); + if (s) { + rstrlcpy(un.sysname, s, sizeof(un.sysname)); + s = _free(s); + } + gotDefaults = 1; + break; + } + rc = uname(&un); + if (rc < 0) return; + +#if !defined(__linux__) +#ifdef SNI + /* USUALLY un.sysname on sinix does start with the word "SINIX" + * let's be absolutely sure + */ + strncpy(un.sysname, "SINIX", sizeof(un.sysname)); +#endif + if (rstreq(un.sysname, "AIX")) { + strcpy(un.machine, __power_pc() ? "ppc" : "rs6000"); + sprintf(un.sysname,"aix%s.%s", un.version, un.release); + } + else if(rstreq(un.sysname, "Darwin")) { +#ifdef __ppc__ + strcpy(un.machine, "ppc"); +#else ifdef __i386__ + strcpy(un.machine, "i386"); +#endif + } + else if (rstreq(un.sysname, "SunOS")) { + if (rstreqn(un.release,"4", 1)) /* SunOS 4.x */ { + int fd; + for (fd = 0; + (un.release[fd] != 0 && (fd < sizeof(un.release))); + fd++) { + if (!risdigit(un.release[fd]) && (un.release[fd] != '.')) { + un.release[fd] = 0; + break; + } + } + sprintf(un.sysname,"sunos%s",un.release); + } + + else /* Solaris 2.x: n.x.x becomes n-3.x.x */ + sprintf(un.sysname, "solaris%1d%s", atoi(un.release)-3, + un.release+1+(atoi(un.release)/10)); + + /* Solaris on Intel hardware reports i86pc instead of i386 + * (at least on 2.6 and 2.8) + */ + if (rstreq(un.machine, "i86pc")) + sprintf(un.machine, "i386"); + } + else if (rstreq(un.sysname, "HP-UX")) + /*make un.sysname look like hpux9.05 for example*/ + sprintf(un.sysname, "hpux%s", strpbrk(un.release, "123456789")); + else if (rstreq(un.sysname, "OSF1")) + /*make un.sysname look like osf3.2 for example*/ + sprintf(un.sysname, "osf%s", strpbrk(un.release, "123456789")); + else if (rstreqn(un.sysname, "IP", 2)) + un.sysname[2] = '\0'; + else if (rstreqn(un.sysname, "SINIX", 5)) { + sprintf(un.sysname, "sinix%s",un.release); + if (rstreqn(un.machine, "RM", 2)) + sprintf(un.machine, "mips"); + } + else if ((rstreqn(un.machine, "34", 2) || + rstreqn(un.machine, "33", 2)) && \ + rstreqn(un.release, "4.0", 3)) + { + /* we are on ncr-sysv4 */ + char * prelid = NULL; + FD_t fd = Fopen("/etc/.relid", "r.fdio"); + int gotit = 0; + if (fd != NULL && !Ferror(fd)) { + chptr = xcalloc(1, 256); + { int irelid = Fread(chptr, sizeof(*chptr), 256, fd); + (void) Fclose(fd); + /* example: "112393 RELEASE 020200 Version 01 OS" */ + if (irelid > 0) { + if ((prelid = strstr(chptr, "RELEASE "))){ + prelid += strlen("RELEASE ")+1; + sprintf(un.sysname,"ncr-sysv4.%.*s",1,prelid); + gotit = 1; + } + } + } + chptr = _free (chptr); + } + if (!gotit) /* parsing /etc/.relid file failed? */ + strcpy(un.sysname,"ncr-sysv4"); + /* wrong, just for now, find out how to look for i586 later*/ + strcpy(un.machine,"i486"); + } +#endif /* __linux__ */ + + /* get rid of the hyphens in the sysname */ + for (chptr = un.machine; *chptr != '\0'; chptr++) + if (*chptr == '/') *chptr = '-'; + +# if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) + /* little endian */ + strcpy(un.machine, "mipsel"); +# elif defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) + /* big endian */ + strcpy(un.machine, "mips"); +# endif + +# if defined(__hpux) && defined(_SC_CPU_VERSION) + { +# if !defined(CPU_PA_RISC1_2) +# define CPU_PA_RISC1_2 0x211 /* HP PA-RISC1.2 */ +# endif +# if !defined(CPU_PA_RISC2_0) +# define CPU_PA_RISC2_0 0x214 /* HP PA-RISC2.0 */ +# endif + int cpu_version = sysconf(_SC_CPU_VERSION); + +# if defined(CPU_HP_MC68020) + if (cpu_version == CPU_HP_MC68020) + strcpy(un.machine, "m68k"); +# endif +# if defined(CPU_HP_MC68030) + if (cpu_version == CPU_HP_MC68030) + strcpy(un.machine, "m68k"); +# endif +# if defined(CPU_HP_MC68040) + if (cpu_version == CPU_HP_MC68040) + strcpy(un.machine, "m68k"); +# endif + +# if defined(CPU_PA_RISC1_0) + if (cpu_version == CPU_PA_RISC1_0) + strcpy(un.machine, "hppa1.0"); +# endif +# if defined(CPU_PA_RISC1_1) + if (cpu_version == CPU_PA_RISC1_1) + strcpy(un.machine, "hppa1.1"); +# endif +# if defined(CPU_PA_RISC1_2) + if (cpu_version == CPU_PA_RISC1_2) + strcpy(un.machine, "hppa1.2"); +# endif +# if defined(CPU_PA_RISC2_0) + if (cpu_version == CPU_PA_RISC2_0) + strcpy(un.machine, "hppa2.0"); +# endif + } +# endif /* hpux */ + +# if defined(__linux__) && defined(__sparc__) + if (rstreq(un.machine, "sparc")) { + #define PERS_LINUX 0x00000000 + #define PERS_LINUX_32BIT 0x00800000 + #define PERS_LINUX32 0x00000008 + + extern int personality(unsigned long); + int oldpers; + + oldpers = personality(PERS_LINUX_32BIT); + if (oldpers != -1) { + if (personality(PERS_LINUX) != -1) { + uname(&un); + if (rstreq(un.machine, "sparc64")) { + strcpy(un.machine, "sparcv9"); + oldpers = PERS_LINUX32; + } + } + personality(oldpers); + } + } +# endif /* sparc*-linux */ + +# if defined(__GNUC__) && defined(__alpha__) + { + unsigned long amask, implver; + register long v0 __asm__("$0") = -1; + __asm__ (".long 0x47e00c20" : "=r"(v0) : "0"(v0)); + amask = ~v0; + __asm__ (".long 0x47e03d80" : "=r"(v0)); + implver = v0; + switch (implver) { + case 1: + switch (amask) { + case 0: strcpy(un.machine, "alphaev5"); break; + case 1: strcpy(un.machine, "alphaev56"); break; + case 0x101: strcpy(un.machine, "alphapca56"); break; + } + break; + case 2: + switch (amask) { + case 0x303: strcpy(un.machine, "alphaev6"); break; + case 0x307: strcpy(un.machine, "alphaev67"); break; + } + break; + } + } +# endif + +# if defined(__linux__) && defined(__i386__) + { + char mclass = (char) (RPMClass() | '0'); + + if ((mclass == '6' && is_athlon()) || mclass == '7') + strcpy(un.machine, "athlon"); + else if (is_pentium4()) + strcpy(un.machine, "pentium4"); + else if (is_pentium3()) + strcpy(un.machine, "pentium3"); + else if (is_geode()) + strcpy(un.machine, "geode"); + else if (strchr("3456", un.machine[1]) && un.machine[1] != mclass) + un.machine[1] = mclass; + } +# endif + + /* the uname() result goes through the arch_canon table */ + canon = lookupInCanonTable(un.machine, + tables[RPM_MACHTABLE_INSTARCH].canons, + tables[RPM_MACHTABLE_INSTARCH].canonsLength); + if (canon) + rstrlcpy(un.machine, canon->short_name, sizeof(un.machine)); + + canon = lookupInCanonTable(un.sysname, + tables[RPM_MACHTABLE_INSTOS].canons, + tables[RPM_MACHTABLE_INSTOS].canonsLength); + if (canon) + rstrlcpy(un.sysname, canon->short_name, sizeof(un.sysname)); + gotDefaults = 1; + break; + } + + if (arch) *arch = un.machine; + if (os) *os = un.sysname; +} + +static +const char * rpmGetVarArch(int var, const char * arch) +{ + const struct rpmvarValue * next; + + if (arch == NULL) arch = current[ARCH]; + + if (arch) { + next = &values[var]; + while (next) { + if (next->arch && rstreq(next->arch, arch)) return next->value; + next = next->next; + } + } + + next = values + var; + while (next && next->arch) next = next->next; + + return next ? next->value : NULL; +} + +static const char *rpmGetVar(int var) +{ + return rpmGetVarArch(var, NULL); +} + +static void rpmSetVarArch(int var, const char * val, const char * arch) +{ + struct rpmvarValue * next = values + var; + + if (next->value) { + if (arch) { + while (next->next) { + if (next->arch && rstreq(next->arch, arch)) break; + next = next->next; + } + } else { + while (next->next) { + if (!next->arch) break; + next = next->next; + } + } + + if (next->arch && arch && rstreq(next->arch, arch)) { + next->value = _free(next->value); + next->arch = _free(next->arch); + } else if (next->arch || arch) { + next->next = xmalloc(sizeof(*next->next)); + next = next->next; + next->value = NULL; + next->arch = NULL; + next->next = NULL; + } + } + + next->value = _free(next->value); + next->value = xstrdup(val); + next->arch = (arch ? xstrdup(arch) : NULL); +} + +void rpmSetTables(int archTable, int osTable) +{ + const char * arch, * os; + + defaultMachine(&arch, &os); + + if (currTables[ARCH] != archTable) { + currTables[ARCH] = archTable; + rebuildCompatTables(ARCH, arch); + } + + if (currTables[OS] != osTable) { + currTables[OS] = osTable; + rebuildCompatTables(OS, os); + } +} + +int rpmMachineScore(int type, const char * name) +{ + machEquivInfo info = NULL; + if (name) + info = machEquivSearch(&tables[type].equiv, name); + return info ? info->score : 0; +} + +int rpmIsKnownArch(const char *name) +{ + canonEntry canon = lookupInCanonTable(name, + tables[RPM_MACHTABLE_INSTARCH].canons, + tables[RPM_MACHTABLE_INSTARCH].canonsLength); + return (canon != NULL || rstreq(name, "noarch")); +} + +/** \ingroup rpmrc + * Set current arch/os names. + * NULL as argument is set to the default value (munged uname()) + * pushed through a translation table (if appropriate). + * @deprecated Use addMacro to set _target_* macros. + * @todo Eliminate + * + * @param arch arch name (or NULL) + * @param os os name (or NULL) + * */ + +static void rpmSetMachine(const char * arch, const char * os) +{ + const char * host_cpu, * host_os; + + defaultMachine(&host_cpu, &host_os); + + if (arch == NULL) { + arch = host_cpu; + if (tables[currTables[ARCH]].hasTranslate) + arch = lookupInDefaultTable(arch, + tables[currTables[ARCH]].defaults, + tables[currTables[ARCH]].defaultsLength); + } + if (arch == NULL) return; /* XXX can't happen */ + + if (os == NULL) { + os = host_os; + if (tables[currTables[OS]].hasTranslate) + os = lookupInDefaultTable(os, + tables[currTables[OS]].defaults, + tables[currTables[OS]].defaultsLength); + } + if (os == NULL) return; /* XXX can't happen */ + + if (!current[ARCH] || !rstreq(arch, current[ARCH])) { + current[ARCH] = _free(current[ARCH]); + current[ARCH] = xstrdup(arch); + rebuildCompatTables(ARCH, host_cpu); + } + + if (!current[OS] || !rstreq(os, current[OS])) { + char * t = xstrdup(os); + current[OS] = _free(current[OS]); + /* + * XXX Capitalizing the 'L' is needed to insure that old + * XXX os-from-uname (e.g. "Linux") is compatible with the new + * XXX os-from-platform (e.g "linux" from "sparc-*-linux"). + * XXX A copy of this string is embedded in headers and is + * XXX used by rpmInstallPackage->{os,arch}Okay->rpmMachineScore-> + * XXX to verify correct arch/os from headers. + */ + if (rstreq(t, "linux")) + *t = 'L'; + current[OS] = t; + + rebuildCompatTables(OS, host_os); + } +} + +static void rebuildCompatTables(int type, const char * name) +{ + machFindEquivs(&tables[currTables[type]].cache, + &tables[currTables[type]].equiv, + name); +} + +static void getMachineInfo(int type, const char ** name, + int * num) +{ + canonEntry canon; + int which = currTables[type]; + + /* use the normal canon tables, even if we're looking up build stuff */ + if (which >= 2) which -= 2; + + canon = lookupInCanonTable(current[type], + tables[which].canons, + tables[which].canonsLength); + + if (canon) { + if (num) *num = canon->num; + if (name) *name = canon->short_name; + } else { + if (num) *num = 255; + if (name) *name = current[type]; + + if (tables[currTables[type]].hasCanon) { + rpmlog(RPMLOG_WARNING, _("Unknown system: %s\n"), current[type]); + rpmlog(RPMLOG_WARNING, _("Please contact %s\n"), PACKAGE_BUGREPORT); + } + } +} + +void rpmGetArchInfo(const char ** name, int * num) +{ + getMachineInfo(ARCH, name, num); +} + +void rpmGetOsInfo(const char ** name, int * num) +{ + getMachineInfo(OS, name, num); +} + +static void rpmRebuildTargetVars(const char ** target, const char ** canontarget) +{ + + char *ca = NULL, *co = NULL, *ct = NULL; + int x; + + /* Rebuild the compat table to recalculate the current target arch. */ + + rpmSetMachine(NULL, NULL); + rpmSetTables(RPM_MACHTABLE_INSTARCH, RPM_MACHTABLE_INSTOS); + rpmSetTables(RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS); + + if (target && *target) { + char *c; + /* Set arch and os from specified build target */ + ca = xstrdup(*target); + if ((c = strchr(ca, '-')) != NULL) { + *c++ = '\0'; + + if ((co = strrchr(c, '-')) == NULL) { + co = c; + } else { + if (!rstrcasecmp(co, "-gnu")) + *co = '\0'; + if ((co = strrchr(c, '-')) == NULL) + co = c; + else + co++; + } + if (co != NULL) co = xstrdup(co); + } + } else { + const char *a = NULL; + const char *o = NULL; + /* Set build target from rpm arch and os */ + rpmGetArchInfo(&a, NULL); + ca = (a) ? xstrdup(a) : NULL; + rpmGetOsInfo(&o, NULL); + co = (o) ? xstrdup(o) : NULL; + } + + /* If still not set, Set target arch/os from default uname(2) values */ + if (ca == NULL) { + const char *a = NULL; + defaultMachine(&a, NULL); + ca = xstrdup(a ? a : "(arch)"); + } + for (x = 0; ca[x] != '\0'; x++) + ca[x] = rtolower(ca[x]); + + if (co == NULL) { + const char *o = NULL; + defaultMachine(NULL, &o); + co = xstrdup(o ? o : "(os)"); + } + for (x = 0; co[x] != '\0'; x++) + co[x] = rtolower(co[x]); + + /* XXX For now, set canonical target to arch-os */ + if (ct == NULL) { + rasprintf(&ct, "%s-%s", ca, co); + } + +/* + * XXX All this macro pokery/jiggery could be achieved by doing a delayed + * rpmInitMacros(NULL, PER-PLATFORM-MACRO-FILE-NAMES); + */ + delMacro(NULL, "_target"); + addMacro(NULL, "_target", NULL, ct, RMIL_RPMRC); + delMacro(NULL, "_target_cpu"); + addMacro(NULL, "_target_cpu", NULL, ca, RMIL_RPMRC); + delMacro(NULL, "_target_os"); + addMacro(NULL, "_target_os", NULL, co, RMIL_RPMRC); +/* + * XXX Make sure that per-arch optflags is initialized correctly. + */ + { const char *optflags = rpmGetVarArch(RPMVAR_OPTFLAGS, ca); + if (optflags != NULL) { + delMacro(NULL, "optflags"); + addMacro(NULL, "optflags", NULL, optflags, RMIL_RPMRC); + } + } + + if (canontarget) + *canontarget = ct; + else + ct = _free(ct); + ca = _free(ca); + co = _free(co); +} + +void rpmFreeRpmrc(void) +{ + int i, j, k; + + if (platpat) + for (i = 0; i < nplatpat; i++) + platpat[i] = _free(platpat[i]); + platpat = _free(platpat); + nplatpat = 0; + + for (i = 0; i < RPM_MACHTABLE_COUNT; i++) { + tableType t; + t = tables + i; + if (t->equiv.list) { + for (j = 0; j < t->equiv.count; j++) + t->equiv.list[j].name = _free(t->equiv.list[j].name); + t->equiv.list = _free(t->equiv.list); + t->equiv.count = 0; + } + if (t->cache.cache) { + for (j = 0; j < t->cache.size; j++) { + machCacheEntry e; + e = t->cache.cache + j; + if (e == NULL) + continue; + e->name = _free(e->name); + if (e->equivs) { + for (k = 0; k < e->count; k++) + e->equivs[k] = _free(e->equivs[k]); + e->equivs = _free(e->equivs); + } + } + t->cache.cache = _free(t->cache.cache); + t->cache.size = 0; + } + if (t->defaults) { + for (j = 0; j < t->defaultsLength; j++) { + t->defaults[j].name = _free(t->defaults[j].name); + t->defaults[j].defName = _free(t->defaults[j].defName); + } + t->defaults = _free(t->defaults); + t->defaultsLength = 0; + } + if (t->canons) { + for (j = 0; j < t->canonsLength; j++) { + t->canons[j].name = _free(t->canons[j].name); + t->canons[j].short_name = _free(t->canons[j].short_name); + } + t->canons = _free(t->canons); + t->canonsLength = 0; + } + } + + for (i = 0; i < RPMVAR_NUM; i++) { + struct rpmvarValue * vp; + while ((vp = values[i].next) != NULL) { + values[i].next = vp->next; + vp->value = _free(vp->value); + vp->arch = _free(vp->arch); + vp = _free(vp); + } + values[i].value = _free(values[i].value); + values[i].arch = _free(values[i].arch); + } + current[OS] = _free(current[OS]); + current[ARCH] = _free(current[ARCH]); + defaultsInitialized = 0; +/* FIX: platpat/current may be NULL */ + + /* XXX doesn't really belong here but... */ + rpmFreeCrypto(); +#ifdef WITH_LUA + rpmLuaFree(); +#endif + + return; +} + +/** \ingroup rpmrc + * Read rpmrc (and macro) configuration file(s). + * @param rcfiles colon separated files to read (NULL uses default) + * @return RPMRC_OK on success + */ +static rpmRC rpmReadRC(const char * rcfiles) +{ + ARGV_t p, globs = NULL, files = NULL; + rpmRC rc = RPMRC_FAIL; + + if (!defaultsInitialized) { + setDefaults(); + defaultsInitialized = 1; + } + + if (rcfiles == NULL) + rcfiles = defrcfiles; + + /* Expand any globs in rcfiles. Missing files are ok here. */ + argvSplit(&globs, rcfiles, ":"); + for (p = globs; *p; p++) { + ARGV_t av = NULL; + if (rpmGlob(*p, NULL, &av) == 0) { + argvAppend(&files, av); + argvFree(av); + } + } + argvFree(globs); + + /* Read each file in rcfiles. */ + for (p = files; p && *p; p++) { + /* XXX Only /usr/lib/rpm/rpmrc must exist in default rcfiles list */ + if (access(*p, R_OK) != 0) { + if (rcfiles == defrcfiles && p != files) + continue; + rpmlog(RPMLOG_ERR, _("Unable to open %s for reading: %m.\n"), *p); + goto exit; + break; + } else { + rc = doReadRC(*p); + } + } + rc = RPMRC_OK; + rpmSetMachine(NULL, NULL); /* XXX WTFO? Why bother? */ + +exit: + argvFree(files); + return rc; +} + +int rpmReadConfigFiles(const char * file, const char * target) +{ + /* Force preloading of dlopen()'ed libraries in case we go chrooting */ + (void) gethostbyname("localhost"); + (void) rpmInitCrypto(); + + /* Preset target macros */ + /* FIX: target can be NULL */ + rpmRebuildTargetVars(&target, NULL); + + /* Read the files */ + if (rpmReadRC(file)) return -1; + + if (macrofiles != NULL) { + char *mf = rpmGetPath(macrofiles, NULL); + rpmInitMacros(NULL, mf); + _free(mf); + } + + /* Reset target macros */ + rpmRebuildTargetVars(&target, NULL); + + /* Finally set target platform */ + { char *cpu = rpmExpand("%{_target_cpu}", NULL); + char *os = rpmExpand("%{_target_os}", NULL); + rpmSetMachine(cpu, os); + cpu = _free(cpu); + os = _free(os); + } + +#ifdef WITH_LUA + /* Force Lua state initialization */ + rpmLuaInit(); +#endif + + return 0; +} + +int rpmShowRC(FILE * fp) +{ + const struct rpmOption *opt; + rpmds ds = NULL; + int i, xx; + machEquivTable equivTable; + + /* the caller may set the build arch which should be printed here */ + fprintf(fp, "ARCHITECTURE AND OS:\n"); + fprintf(fp, "build arch : %s\n", current[ARCH]); + + fprintf(fp, "compatible build archs:"); + equivTable = &tables[RPM_MACHTABLE_BUILDARCH].equiv; + for (i = 0; i < equivTable->count; i++) + fprintf(fp," %s", equivTable->list[i].name); + fprintf(fp, "\n"); + + fprintf(fp, "build os : %s\n", current[OS]); + + fprintf(fp, "compatible build os's :"); + equivTable = &tables[RPM_MACHTABLE_BUILDOS].equiv; + for (i = 0; i < equivTable->count; i++) + fprintf(fp," %s", equivTable->list[i].name); + fprintf(fp, "\n"); + + rpmSetTables(RPM_MACHTABLE_INSTARCH, RPM_MACHTABLE_INSTOS); + rpmSetMachine(NULL, NULL); /* XXX WTFO? Why bother? */ + + fprintf(fp, "install arch : %s\n", current[ARCH]); + fprintf(fp, "install os : %s\n", current[OS]); + + fprintf(fp, "compatible archs :"); + equivTable = &tables[RPM_MACHTABLE_INSTARCH].equiv; + for (i = 0; i < equivTable->count; i++) + fprintf(fp," %s", equivTable->list[i].name); + fprintf(fp, "\n"); + + fprintf(fp, "compatible os's :"); + equivTable = &tables[RPM_MACHTABLE_INSTOS].equiv; + for (i = 0; i < equivTable->count; i++) + fprintf(fp," %s", equivTable->list[i].name); + fprintf(fp, "\n"); + + fprintf(fp, "\nRPMRC VALUES:\n"); + for (i = 0, opt = optionTable; i < optionTableSize; i++, opt++) { + const char *s = rpmGetVar(opt->var); + if (s != NULL || rpmIsVerbose()) + fprintf(fp, "%-21s : %s\n", opt->name, s ? s : "(not set)"); + } + fprintf(fp, "\n"); + + fprintf(fp, "Features supported by rpmlib:\n"); + xx = rpmdsRpmlib(&ds, NULL); + ds = rpmdsInit(ds); + while (rpmdsNext(ds) >= 0) { + const char * DNEVR = rpmdsDNEVR(ds); + if (DNEVR != NULL) + fprintf(fp, " %s\n", DNEVR+2); + } + ds = rpmdsFree(ds); + fprintf(fp, "\n"); + + rpmDumpMacroTable(NULL, fp); + + return 0; +} diff --git a/lib/rpmscript.c b/lib/rpmscript.c new file mode 100644 index 0000000..f24f865 --- /dev/null +++ b/lib/rpmscript.c @@ -0,0 +1,415 @@ +#include "system.h" + +#include +#include + +#define _RPMSQ_INTERNAL +#include +#include +#include +#include +#include +#include + +#include "rpmio/rpmlua.h" +#include "lib/rpmscript.h" + +#include "debug.h" + +/** + * Run internal Lua script. + */ +static rpmRC runLuaScript(int selinux, ARGV_const_t prefixes, + const char *sname, rpmlogLvl lvl, FD_t scriptFd, + ARGV_t * argvp, const char *script, int arg1, int arg2) +{ + rpmRC rc = RPMRC_FAIL; +#ifdef WITH_LUA + ARGV_t argv = argvp ? *argvp : NULL; + rpmlua lua = NULL; /* Global state. */ + rpmluav var; + int cwd = -1; + + rpmlog(RPMLOG_DEBUG, "%s: running scriptlet.\n", sname); + + /* Create arg variable */ + rpmluaPushTable(lua, "arg"); + var = rpmluavNew(); + rpmluavSetListMode(var, 1); + if (argv) { + char **p; + for (p = argv; *p; p++) { + rpmluavSetValue(var, RPMLUAV_STRING, *p); + rpmluaSetVar(lua, var); + } + } + if (arg1 >= 0) { + rpmluavSetValueNum(var, arg1); + rpmluaSetVar(lua, var); + } + if (arg2 >= 0) { + rpmluavSetValueNum(var, arg2); + rpmluaSetVar(lua, var); + } + var = rpmluavFree(var); + rpmluaPop(lua); + + /* Lua scripts can change our cwd and umask, save and restore */ + /* XXX TODO: use cwd from chroot state to save unnecessary open here */ + cwd = open(".", O_RDONLY); + if (cwd != -1) { + mode_t oldmask = umask(0); + umask(oldmask); + + if (chdir("/") == 0 && rpmluaRunScript(lua, script, sname) == 0) { + rc = RPMRC_OK; + } + /* This failing would be fatal, return something different for it... */ + if (fchdir(cwd)) { + rpmlog(RPMLOG_ERR, _("Unable to restore current directory: %m")); + rc = RPMRC_NOTFOUND; + } + close(cwd); + umask(oldmask); + } + + rpmluaDelVar(lua, "arg"); + +#else + rpmlog(lvl, _(" scriptlet support not built in\n")); +#endif + + return rc; +} + +static const char * const SCRIPT_PATH = "PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin"; + +static void doScriptExec(int selinux, ARGV_const_t argv, ARGV_const_t prefixes, + FD_t scriptFd, FD_t out) +{ + int pipes[2]; + int flag; + int fdno; + int xx; + int open_max; + + (void) signal(SIGPIPE, SIG_DFL); + pipes[0] = pipes[1] = 0; + /* make stdin inaccessible */ + xx = pipe(pipes); + xx = close(pipes[1]); + xx = dup2(pipes[0], STDIN_FILENO); + xx = close(pipes[0]); + + /* XXX Force FD_CLOEXEC on all inherited fdno's. */ + open_max = sysconf(_SC_OPEN_MAX); + if (open_max == -1) { + open_max = 1024; + } + for (fdno = 3; fdno < open_max; fdno++) { + flag = fcntl(fdno, F_GETFD); + if (flag == -1 || (flag & FD_CLOEXEC)) + continue; + xx = fcntl(fdno, F_SETFD, FD_CLOEXEC); + /* XXX W2DO? debug msg for inheirited fdno w/o FD_CLOEXEC */ + } + + if (scriptFd != NULL) { + int sfdno = Fileno(scriptFd); + int ofdno = Fileno(out); + if (sfdno != STDERR_FILENO) + xx = dup2(sfdno, STDERR_FILENO); + if (ofdno != STDOUT_FILENO) + xx = dup2(ofdno, STDOUT_FILENO); + /* make sure we don't close stdin/stderr/stdout by mistake! */ + if (ofdno > STDERR_FILENO && ofdno != sfdno) + xx = Fclose (out); + if (sfdno > STDERR_FILENO && ofdno != sfdno) + xx = Fclose (scriptFd); + } + + { char *ipath = rpmExpand("%{_install_script_path}", NULL); + const char *path = SCRIPT_PATH; + + if (ipath && ipath[5] != '%') + path = ipath; + + xx = setenv("PATH", path, 1); + ipath = _free(ipath); + } + + for (ARGV_const_t pf = prefixes; pf && *pf; pf++) { + char *name = NULL; + int num = (pf - prefixes); + + rasprintf(&name, "RPM_INSTALL_PREFIX%d", num); + setenv(name, *pf, 1); + free(name); + + /* scripts might still be using the old style prefix */ + if (num == 0) { + setenv("RPM_INSTALL_PREFIX", *pf, 1); + } + } + + if (chdir("/") == 0) { + /* XXX Don't mtrace into children. */ + unsetenv("MALLOC_CHECK_"); + + /* Permit libselinux to do the scriptlet exec. */ + if (selinux == 1) { + xx = rpm_execcon(0, argv[0], argv, environ); + } + + if (xx == 0) { + xx = execv(argv[0], argv); + } + } + _exit(127); /* exit 127 for compatibility with bash(1) */ +} + +static char * writeScript(const char *cmd, const char *script) +{ + char *fn = NULL; + size_t slen = strlen(script); + int ok = 0; + FD_t fd = rpmMkTempFile("/", &fn); + + if (Ferror(fd)) + goto exit; + + if (rpmIsDebug() && (rstreq(cmd, "/bin/sh") || rstreq(cmd, "/bin/bash"))) { + static const char set_x[] = "set -x\n"; + /* Assume failures will be caught by the write below */ + Fwrite(set_x, sizeof(set_x[0]), sizeof(set_x)-1, fd); + } + + ok = (Fwrite(script, sizeof(script[0]), slen, fd) == slen); + +exit: + if (!ok) fn = _free(fn); + Fclose(fd); + return fn; +} + +/** + * Run an external script. + */ +static rpmRC runExtScript(int selinux, ARGV_const_t prefixes, + const char *sname, rpmlogLvl lvl, FD_t scriptFd, + ARGV_t * argvp, const char *script, int arg1, int arg2) +{ + FD_t out = NULL; + char * fn = NULL; + int xx; + rpmRC rc = RPMRC_FAIL; + struct rpmsqElem sq; + + memset(&sq, 0, sizeof(sq)); + sq.reaper = 1; + + rpmlog(RPMLOG_DEBUG, "%s: scriptlet start\n", sname); + + if (script) { + fn = writeScript(*argvp[0], script); + if (fn == NULL) { + rpmlog(RPMLOG_ERR, + _("Couldn't create temporary file for %s: %s\n"), + sname, strerror(errno)); + goto exit; + } + + argvAdd(argvp, fn); + if (arg1 >= 0) { + argvAddNum(argvp, arg1); + } + if (arg2 >= 0) { + argvAddNum(argvp, arg2); + } + } + + if (scriptFd != NULL) { + if (rpmIsVerbose()) { + out = fdDup(Fileno(scriptFd)); + } else { + out = Fopen("/dev/null", "w.fdio"); + if (Ferror(out)) { + out = fdDup(Fileno(scriptFd)); + } + } + } else { + out = fdDup(STDOUT_FILENO); + } + if (out == NULL) { + rpmlog(RPMLOG_ERR, _("Couldn't duplicate file descriptor: %s: %s\n"), + sname, strerror(errno)); + goto exit; + } + + xx = rpmsqFork(&sq); + if (sq.child == 0) { + rpmlog(RPMLOG_DEBUG, "%s: execv(%s) pid %d\n", + sname, *argvp[0], (unsigned)getpid()); + doScriptExec(selinux, *argvp, prefixes, scriptFd, out); + } + + if (sq.child == (pid_t)-1) { + rpmlog(RPMLOG_ERR, _("Couldn't fork %s: %s\n"), sname, strerror(errno)); + goto exit; + } + + rpmsqWait(&sq); + + rpmlog(RPMLOG_DEBUG, "%s: waitpid(%d) rc %d status %x\n", + sname, (unsigned)sq.child, (unsigned)sq.reaped, sq.status); + + if (sq.reaped < 0) { + rpmlog(lvl, _("%s scriptlet failed, waitpid(%d) rc %d: %s\n"), + sname, sq.child, sq.reaped, strerror(errno)); + } else if (!WIFEXITED(sq.status) || WEXITSTATUS(sq.status)) { + if (WIFSIGNALED(sq.status)) { + rpmlog(lvl, _("%s scriptlet failed, signal %d\n"), + sname, WTERMSIG(sq.status)); + } else { + rpmlog(lvl, _("%s scriptlet failed, exit status %d\n"), + sname, WEXITSTATUS(sq.status)); + } + } else { + /* if we get this far we're clear */ + rc = RPMRC_OK; + } + +exit: + if (out) + xx = Fclose(out); /* XXX dup'd STDOUT_FILENO */ + + if (fn) { + if (!rpmIsDebug()) + xx = unlink(fn); + fn = _free(fn); + } + return rc; +} + +rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd, + ARGV_const_t prefixes, int warn_only, int selinux) +{ + ARGV_t args = NULL; + rpmlogLvl lvl = warn_only ? RPMLOG_WARNING : RPMLOG_ERR; + rpmRC rc; + + if (script == NULL) return RPMRC_OK; + + /* construct a new argv as we can't modify the one from header */ + if (script->args) { + argvAppend(&args, script->args); + } else { + argvAdd(&args, "/bin/sh"); + } + + if (rstreq(args[0], "")) { + rc = runLuaScript(selinux, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2); + } else { + rc = runExtScript(selinux, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2); + } + argvFree(args); + + return rc; +} + +static rpmTagVal getProgTag(rpmTagVal scriptTag) +{ + switch (scriptTag) { + case RPMTAG_PREIN: return RPMTAG_PREINPROG; + case RPMTAG_POSTIN: return RPMTAG_POSTINPROG; + case RPMTAG_PREUN: return RPMTAG_PREUNPROG; + case RPMTAG_POSTUN: return RPMTAG_POSTUNPROG; + case RPMTAG_PRETRANS: return RPMTAG_PRETRANSPROG; + case RPMTAG_POSTTRANS: return RPMTAG_POSTTRANSPROG; + case RPMTAG_VERIFYSCRIPT: return RPMTAG_VERIFYSCRIPTPROG; + default: return RPMTAG_NOT_FOUND; + } +} + +static rpmTagVal getFlagTag(rpmTagVal scriptTag) +{ + switch (scriptTag) { + case RPMTAG_PRETRANS: return RPMTAG_PRETRANSFLAGS; + case RPMTAG_POSTTRANS: return RPMTAG_POSTTRANSFLAGS; + case RPMTAG_PREUN: return RPMTAG_PREUNFLAGS; + case RPMTAG_POSTUN: return RPMTAG_POSTUNFLAGS; + case RPMTAG_PREIN: return RPMTAG_PREINFLAGS; + case RPMTAG_POSTIN: return RPMTAG_POSTINFLAGS; + case RPMTAG_VERIFYSCRIPT: return RPMTAG_VERIFYSCRIPTFLAGS; + case RPMTAG_TRIGGERSCRIPTS: return RPMTAG_TRIGGERSCRIPTFLAGS; + default: + break; + } + return RPMTAG_NOT_FOUND; +} + +static const char * tag2sln(rpmTagVal tag) +{ + switch (tag) { + case RPMTAG_PRETRANS: return "%pretrans"; + case RPMTAG_TRIGGERPREIN: return "%triggerprein"; + case RPMTAG_PREIN: return "%pre"; + case RPMTAG_POSTIN: return "%post"; + case RPMTAG_TRIGGERIN: return "%triggerin"; + case RPMTAG_TRIGGERUN: return "%triggerun"; + case RPMTAG_PREUN: return "%preun"; + case RPMTAG_POSTUN: return "%postun"; + case RPMTAG_POSTTRANS: return "%posttrans"; + case RPMTAG_TRIGGERPOSTUN: return "%triggerpostun"; + case RPMTAG_VERIFYSCRIPT: return "%verify"; + default: break; + } + return "%unknownscript"; +} + +rpmScript rpmScriptFromTag(Header h, rpmTagVal scriptTag) +{ + rpmScript script = NULL; + rpmTagVal progTag = getProgTag(scriptTag); + + if (headerIsEntry(h, scriptTag) || headerIsEntry(h, progTag)) { + struct rpmtd_s prog; + char *nevra = headerGetAsString(h, RPMTAG_NEVRA); + rpmscriptFlags flags = headerGetNumber(h, getFlagTag(scriptTag)); + + script = xcalloc(1, sizeof(*script)); + script->tag = scriptTag; + rasprintf(&script->descr, "%s(%s)", tag2sln(scriptTag), nevra); + script->body = headerGetAsString(h, scriptTag); + + /* macros need to be expanded before possible queryformat */ + if (script->body && (flags & RPMSCRIPT_EXPAND)) { + char *body = rpmExpand(script->body, NULL); + free(script->body); + script->body = body; + } + if (script->body && (flags & RPMSCRIPT_QFORMAT)) { + /* XXX TODO: handle queryformat errors */ + char *body = headerFormat(h, script->body, NULL); + free(script->body); + script->body = body; + } + + if (headerGet(h, progTag, &prog, (HEADERGET_ALLOC|HEADERGET_ARGV))) { + script->args = prog.data; + } + free(nevra); + } + return script; +} + +rpmScript rpmScriptFree(rpmScript script) +{ + if (script) { + free(script->args); + free(script->body); + free(script->descr); + free(script); + } + return NULL; +} diff --git a/lib/rpmscript.h b/lib/rpmscript.h new file mode 100644 index 0000000..f10770c --- /dev/null +++ b/lib/rpmscript.h @@ -0,0 +1,42 @@ +#ifndef _RPMSCRIPT_H +#define _RPMSCRIPT_H + +#include +#include + +enum rpmscriptFlags_e { + RPMSCRIPT_NONE = 0, + RPMSCRIPT_EXPAND = (1 << 0), /* macro expansion */ + RPMSCRIPT_QFORMAT = (1 << 1), /* header queryformat expansion */ +}; + +typedef rpmFlags rpmscriptFlags; + +typedef struct rpmScript_s * rpmScript; + +struct rpmScript_s { + rpmTagVal tag; /* script tag */ + char **args; /* scriptlet call arguments */ + char *body; /* script body */ + char *descr; /* description for logging */ + rpmscriptFlags flags; /* flags to control operation */ +}; + +#ifdef __cplusplus +extern "C" { +#endif + +RPM_GNUC_INTERNAL +rpmScript rpmScriptFromTag(Header h, rpmTagVal scriptTag); + +RPM_GNUC_INTERNAL +rpmScript rpmScriptFree(rpmScript script); + +RPM_GNUC_INTERNAL +rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd, + ARGV_const_t prefixes, int warn_only, int selinux); + +#ifdef __cplusplus +} +#endif +#endif /* _RPMSCRIPT_H */ diff --git a/lib/rpmtag.h b/lib/rpmtag.h new file mode 100644 index 0000000..50939c6 --- /dev/null +++ b/lib/rpmtag.h @@ -0,0 +1,472 @@ +#ifndef _RPMTAG_H +#define _RPMTAG_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Header private tags. + * @note General use tags should start at 1000 (RPM's tag space starts there). + */ +#define HEADER_IMAGE 61 +#define HEADER_SIGNATURES 62 +#define HEADER_IMMUTABLE 63 +#define HEADER_REGIONS 64 +#define HEADER_I18NTABLE 100 +#define HEADER_SIGBASE 256 +#define HEADER_TAGBASE 1000 + +/** \ingroup rpmtag + * Tags identify data in package headers. + * @note tags should not have value 0! + * @note all new tags should be added above 5000 + */ +/** @todo: Somehow supply type **/ +typedef enum rpmTag_e { + RPMTAG_NOT_FOUND = -1, /*!< Unknown tag */ + + RPMTAG_HEADERIMAGE = HEADER_IMAGE, /*!< Current image. */ + RPMTAG_HEADERSIGNATURES = HEADER_SIGNATURES, /*!< Signatures. */ + RPMTAG_HEADERIMMUTABLE = HEADER_IMMUTABLE, /*!< Original image. */ + RPMTAG_HEADERREGIONS = HEADER_REGIONS, /*!< Regions. */ + + RPMTAG_HEADERI18NTABLE = HEADER_I18NTABLE, /* s[] !< I18N string locales. */ + +/* Retrofit (and uniqify) signature tags for use by rpmTagGetName() and rpmQuery. */ +/* the md5 sum was broken *twice* on big endian machines */ +/* XXX 2nd underscore prevents tagTable generation */ + RPMTAG_SIG_BASE = HEADER_SIGBASE, + RPMTAG_SIGSIZE = RPMTAG_SIG_BASE+1, /* i */ + RPMTAG_SIGLEMD5_1 = RPMTAG_SIG_BASE+2, /* internal - obsolete */ + RPMTAG_SIGPGP = RPMTAG_SIG_BASE+3, /* x */ + RPMTAG_SIGLEMD5_2 = RPMTAG_SIG_BASE+4, /* x internal - obsolete */ + RPMTAG_SIGMD5 = RPMTAG_SIG_BASE+5, /* x */ +#define RPMTAG_PKGID RPMTAG_SIGMD5 /* x */ + RPMTAG_SIGGPG = RPMTAG_SIG_BASE+6, /* x */ + RPMTAG_SIGPGP5 = RPMTAG_SIG_BASE+7, /* internal - obsolete */ + + RPMTAG_BADSHA1_1 = RPMTAG_SIG_BASE+8, /* internal - obsolete */ + RPMTAG_BADSHA1_2 = RPMTAG_SIG_BASE+9, /* internal - obsolete */ + RPMTAG_PUBKEYS = RPMTAG_SIG_BASE+10, /* s[] */ + RPMTAG_DSAHEADER = RPMTAG_SIG_BASE+11, /* x */ + RPMTAG_RSAHEADER = RPMTAG_SIG_BASE+12, /* x */ + RPMTAG_SHA1HEADER = RPMTAG_SIG_BASE+13, /* s */ +#define RPMTAG_HDRID RPMTAG_SHA1HEADER /* s */ + RPMTAG_LONGSIGSIZE = RPMTAG_SIG_BASE+14, /* l */ + RPMTAG_LONGARCHIVESIZE = RPMTAG_SIG_BASE+15, /* l */ + + RPMTAG_NAME = 1000, /* s */ +#define RPMTAG_N RPMTAG_NAME /* s */ + RPMTAG_VERSION = 1001, /* s */ +#define RPMTAG_V RPMTAG_VERSION /* s */ + RPMTAG_RELEASE = 1002, /* s */ +#define RPMTAG_R RPMTAG_RELEASE /* s */ + RPMTAG_EPOCH = 1003, /* i */ +#define RPMTAG_E RPMTAG_EPOCH /* i */ + RPMTAG_SUMMARY = 1004, /* s{} */ + RPMTAG_DESCRIPTION = 1005, /* s{} */ + RPMTAG_BUILDTIME = 1006, /* i */ + RPMTAG_BUILDHOST = 1007, /* s */ + RPMTAG_INSTALLTIME = 1008, /* i */ + RPMTAG_SIZE = 1009, /* i */ + RPMTAG_DISTRIBUTION = 1010, /* s */ + RPMTAG_VENDOR = 1011, /* s */ + RPMTAG_GIF = 1012, /* x */ + RPMTAG_XPM = 1013, /* x */ + RPMTAG_LICENSE = 1014, /* s */ + RPMTAG_PACKAGER = 1015, /* s */ + RPMTAG_GROUP = 1016, /* s{} */ + RPMTAG_CHANGELOG = 1017, /* s[] internal */ + RPMTAG_SOURCE = 1018, /* s[] */ + RPMTAG_PATCH = 1019, /* s[] */ + RPMTAG_URL = 1020, /* s */ + RPMTAG_OS = 1021, /* s legacy used int */ + RPMTAG_ARCH = 1022, /* s legacy used int */ + RPMTAG_PREIN = 1023, /* s */ + RPMTAG_POSTIN = 1024, /* s */ + RPMTAG_PREUN = 1025, /* s */ + RPMTAG_POSTUN = 1026, /* s */ + RPMTAG_OLDFILENAMES = 1027, /* s[] obsolete */ + RPMTAG_FILESIZES = 1028, /* i[] */ + RPMTAG_FILESTATES = 1029, /* c[] */ + RPMTAG_FILEMODES = 1030, /* h[] */ + RPMTAG_FILEUIDS = 1031, /* i[] internal - obsolete */ + RPMTAG_FILEGIDS = 1032, /* i[] internal - obsolete */ + RPMTAG_FILERDEVS = 1033, /* h[] */ + RPMTAG_FILEMTIMES = 1034, /* i[] */ + RPMTAG_FILEDIGESTS = 1035, /* s[] */ +#define RPMTAG_FILEMD5S RPMTAG_FILEDIGESTS /* s[] */ + RPMTAG_FILELINKTOS = 1036, /* s[] */ + RPMTAG_FILEFLAGS = 1037, /* i[] */ + RPMTAG_ROOT = 1038, /* internal - obsolete */ + RPMTAG_FILEUSERNAME = 1039, /* s[] */ + RPMTAG_FILEGROUPNAME = 1040, /* s[] */ + RPMTAG_EXCLUDE = 1041, /* internal - obsolete */ + RPMTAG_EXCLUSIVE = 1042, /* internal - obsolete */ + RPMTAG_ICON = 1043, /* x */ + RPMTAG_SOURCERPM = 1044, /* s */ + RPMTAG_FILEVERIFYFLAGS = 1045, /* i[] */ + RPMTAG_ARCHIVESIZE = 1046, /* i */ + RPMTAG_PROVIDENAME = 1047, /* s[] */ +#define RPMTAG_PROVIDES RPMTAG_PROVIDENAME /* s[] */ +#define RPMTAG_P RPMTAG_PROVIDENAME /* s[] */ + RPMTAG_REQUIREFLAGS = 1048, /* i[] */ + RPMTAG_REQUIRENAME = 1049, /* s[] */ +#define RPMTAG_REQUIRES RPMTAG_REQUIRENAME /* s[] */ + RPMTAG_REQUIREVERSION = 1050, /* s[] */ + RPMTAG_NOSOURCE = 1051, /* i */ + RPMTAG_NOPATCH = 1052, /* i */ + RPMTAG_CONFLICTFLAGS = 1053, /* i[] */ + RPMTAG_CONFLICTNAME = 1054, /* s[] */ +#define RPMTAG_CONFLICTS RPMTAG_CONFLICTNAME /* s[] */ +#define RPMTAG_C RPMTAG_CONFLICTNAME /* s[] */ + RPMTAG_CONFLICTVERSION = 1055, /* s[] */ + RPMTAG_DEFAULTPREFIX = 1056, /* s internal - deprecated */ + RPMTAG_BUILDROOT = 1057, /* s internal - obsolete */ + RPMTAG_INSTALLPREFIX = 1058, /* s internal - deprecated */ + RPMTAG_EXCLUDEARCH = 1059, /* s[] */ + RPMTAG_EXCLUDEOS = 1060, /* s[] */ + RPMTAG_EXCLUSIVEARCH = 1061, /* s[] */ + RPMTAG_EXCLUSIVEOS = 1062, /* s[] */ + RPMTAG_AUTOREQPROV = 1063, /* s internal */ + RPMTAG_RPMVERSION = 1064, /* s */ + RPMTAG_TRIGGERSCRIPTS = 1065, /* s[] */ + RPMTAG_TRIGGERNAME = 1066, /* s[] */ + RPMTAG_TRIGGERVERSION = 1067, /* s[] */ + RPMTAG_TRIGGERFLAGS = 1068, /* i[] */ + RPMTAG_TRIGGERINDEX = 1069, /* i[] */ + RPMTAG_VERIFYSCRIPT = 1079, /* s */ + RPMTAG_CHANGELOGTIME = 1080, /* i[] */ + RPMTAG_CHANGELOGNAME = 1081, /* s[] */ + RPMTAG_CHANGELOGTEXT = 1082, /* s[] */ + RPMTAG_BROKENMD5 = 1083, /* internal - obsolete */ + RPMTAG_PREREQ = 1084, /* internal */ + RPMTAG_PREINPROG = 1085, /* s */ + RPMTAG_POSTINPROG = 1086, /* s */ + RPMTAG_PREUNPROG = 1087, /* s */ + RPMTAG_POSTUNPROG = 1088, /* s */ + RPMTAG_BUILDARCHS = 1089, /* s[] */ + RPMTAG_OBSOLETENAME = 1090, /* s[] */ +#define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME /* s[] */ +#define RPMTAG_O RPMTAG_OBSOLETENAME /* s[] */ + RPMTAG_VERIFYSCRIPTPROG = 1091, /* s */ + RPMTAG_TRIGGERSCRIPTPROG = 1092, /* s[] */ + RPMTAG_DOCDIR = 1093, /* internal */ + RPMTAG_COOKIE = 1094, /* s */ + RPMTAG_FILEDEVICES = 1095, /* i[] */ + RPMTAG_FILEINODES = 1096, /* i[] */ + RPMTAG_FILELANGS = 1097, /* s[] */ + RPMTAG_PREFIXES = 1098, /* s[] */ + RPMTAG_INSTPREFIXES = 1099, /* s[] */ + RPMTAG_TRIGGERIN = 1100, /* internal */ + RPMTAG_TRIGGERUN = 1101, /* internal */ + RPMTAG_TRIGGERPOSTUN = 1102, /* internal */ + RPMTAG_AUTOREQ = 1103, /* internal */ + RPMTAG_AUTOPROV = 1104, /* internal */ + RPMTAG_CAPABILITY = 1105, /* i internal - obsolete */ + RPMTAG_SOURCEPACKAGE = 1106, /* i */ + RPMTAG_OLDORIGFILENAMES = 1107, /* internal - obsolete */ + RPMTAG_BUILDPREREQ = 1108, /* internal */ + RPMTAG_BUILDREQUIRES = 1109, /* internal */ + RPMTAG_BUILDCONFLICTS = 1110, /* internal */ + RPMTAG_BUILDMACROS = 1111, /* internal - unused */ + RPMTAG_PROVIDEFLAGS = 1112, /* i[] */ + RPMTAG_PROVIDEVERSION = 1113, /* s[] */ + RPMTAG_OBSOLETEFLAGS = 1114, /* i[] */ + RPMTAG_OBSOLETEVERSION = 1115, /* s[] */ + RPMTAG_DIRINDEXES = 1116, /* i[] */ + RPMTAG_BASENAMES = 1117, /* s[] */ + RPMTAG_DIRNAMES = 1118, /* s[] */ + RPMTAG_ORIGDIRINDEXES = 1119, /* i[] relocation */ + RPMTAG_ORIGBASENAMES = 1120, /* s[] relocation */ + RPMTAG_ORIGDIRNAMES = 1121, /* s[] relocation */ + RPMTAG_OPTFLAGS = 1122, /* s */ + RPMTAG_DISTURL = 1123, /* s */ + RPMTAG_PAYLOADFORMAT = 1124, /* s */ + RPMTAG_PAYLOADCOMPRESSOR = 1125, /* s */ + RPMTAG_PAYLOADFLAGS = 1126, /* s */ + RPMTAG_INSTALLCOLOR = 1127, /* i transaction color when installed */ + RPMTAG_INSTALLTID = 1128, /* i */ + RPMTAG_REMOVETID = 1129, /* i */ + RPMTAG_SHA1RHN = 1130, /* internal - obsolete */ + RPMTAG_RHNPLATFORM = 1131, /* s internal - obsolete */ + RPMTAG_PLATFORM = 1132, /* s */ + RPMTAG_PATCHESNAME = 1133, /* s[] deprecated placeholder (SuSE) */ + RPMTAG_PATCHESFLAGS = 1134, /* i[] deprecated placeholder (SuSE) */ + RPMTAG_PATCHESVERSION = 1135, /* s[] deprecated placeholder (SuSE) */ + RPMTAG_CACHECTIME = 1136, /* i internal - obsolete */ + RPMTAG_CACHEPKGPATH = 1137, /* s internal - obsolete */ + RPMTAG_CACHEPKGSIZE = 1138, /* i internal - obsolete */ + RPMTAG_CACHEPKGMTIME = 1139, /* i internal - obsolete */ + RPMTAG_FILECOLORS = 1140, /* i[] */ + RPMTAG_FILECLASS = 1141, /* i[] */ + RPMTAG_CLASSDICT = 1142, /* s[] */ + RPMTAG_FILEDEPENDSX = 1143, /* i[] */ + RPMTAG_FILEDEPENDSN = 1144, /* i[] */ + RPMTAG_DEPENDSDICT = 1145, /* i[] */ + RPMTAG_SOURCEPKGID = 1146, /* x */ + RPMTAG_FILECONTEXTS = 1147, /* s[] - obsolete */ + RPMTAG_FSCONTEXTS = 1148, /* s[] extension */ + RPMTAG_RECONTEXTS = 1149, /* s[] extension */ + RPMTAG_POLICIES = 1150, /* s[] selinux *.te policy file. */ + RPMTAG_PRETRANS = 1151, /* s */ + RPMTAG_POSTTRANS = 1152, /* s */ + RPMTAG_PRETRANSPROG = 1153, /* s */ + RPMTAG_POSTTRANSPROG = 1154, /* s */ + RPMTAG_DISTTAG = 1155, /* s */ + RPMTAG_SUGGESTSNAME = 1156, /* s[] extension (unimplemented) */ +#define RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME /* s[] (unimplemented) */ + RPMTAG_SUGGESTSVERSION = 1157, /* s[] extension (unimplemented) */ + RPMTAG_SUGGESTSFLAGS = 1158, /* i[] extension (unimplemented) */ + RPMTAG_ENHANCESNAME = 1159, /* s[] extension placeholder (unimplemented) */ +#define RPMTAG_ENHANCES RPMTAG_ENHANCESNAME /* s[] (unimplemented) */ + RPMTAG_ENHANCESVERSION = 1160, /* s[] extension placeholder (unimplemented) */ + RPMTAG_ENHANCESFLAGS = 1161, /* i[] extension placeholder (unimplemented) */ + RPMTAG_PRIORITY = 1162, /* i[] extension placeholder (unimplemented) */ + RPMTAG_CVSID = 1163, /* s (unimplemented) */ +#define RPMTAG_SVNID RPMTAG_CVSID /* s (unimplemented) */ + RPMTAG_BLINKPKGID = 1164, /* s[] (unimplemented) */ + RPMTAG_BLINKHDRID = 1165, /* s[] (unimplemented) */ + RPMTAG_BLINKNEVRA = 1166, /* s[] (unimplemented) */ + RPMTAG_FLINKPKGID = 1167, /* s[] (unimplemented) */ + RPMTAG_FLINKHDRID = 1168, /* s[] (unimplemented) */ + RPMTAG_FLINKNEVRA = 1169, /* s[] (unimplemented) */ + RPMTAG_PACKAGEORIGIN = 1170, /* s (unimplemented) */ + RPMTAG_TRIGGERPREIN = 1171, /* internal */ + RPMTAG_BUILDSUGGESTS = 1172, /* internal (unimplemented) */ + RPMTAG_BUILDENHANCES = 1173, /* internal (unimplemented) */ + RPMTAG_SCRIPTSTATES = 1174, /* i[] scriptlet exit codes (unimplemented) */ + RPMTAG_SCRIPTMETRICS = 1175, /* i[] scriptlet execution times (unimplemented) */ + RPMTAG_BUILDCPUCLOCK = 1176, /* i (unimplemented) */ + RPMTAG_FILEDIGESTALGOS = 1177, /* i[] (unimplemented) */ + RPMTAG_VARIANTS = 1178, /* s[] (unimplemented) */ + RPMTAG_XMAJOR = 1179, /* i (unimplemented) */ + RPMTAG_XMINOR = 1180, /* i (unimplemented) */ + RPMTAG_REPOTAG = 1181, /* s (unimplemented) */ + RPMTAG_KEYWORDS = 1182, /* s[] (unimplemented) */ + RPMTAG_BUILDPLATFORMS = 1183, /* s[] (unimplemented) */ + RPMTAG_PACKAGECOLOR = 1184, /* i (unimplemented) */ + RPMTAG_PACKAGEPREFCOLOR = 1185, /* i (unimplemented) */ + RPMTAG_XATTRSDICT = 1186, /* s[] (unimplemented) */ + RPMTAG_FILEXATTRSX = 1187, /* i[] (unimplemented) */ + RPMTAG_DEPATTRSDICT = 1188, /* s[] (unimplemented) */ + RPMTAG_CONFLICTATTRSX = 1189, /* i[] (unimplemented) */ + RPMTAG_OBSOLETEATTRSX = 1190, /* i[] (unimplemented) */ + RPMTAG_PROVIDEATTRSX = 1191, /* i[] (unimplemented) */ + RPMTAG_REQUIREATTRSX = 1192, /* i[] (unimplemented) */ + RPMTAG_BUILDPROVIDES = 1193, /* internal (unimplemented) */ + RPMTAG_BUILDOBSOLETES = 1194, /* internal (unimplemented) */ + RPMTAG_DBINSTANCE = 1195, /* i extension */ + RPMTAG_NVRA = 1196, /* s extension */ + /* tags 1997-4999 reserved */ + RPMTAG_FILENAMES = 5000, /* s[] extension */ + RPMTAG_FILEPROVIDE = 5001, /* s[] extension */ + RPMTAG_FILEREQUIRE = 5002, /* s[] extension */ + RPMTAG_FSNAMES = 5003, /* s[] (unimplemented) */ + RPMTAG_FSSIZES = 5004, /* l[] (unimplemented) */ + RPMTAG_TRIGGERCONDS = 5005, /* s[] extension */ + RPMTAG_TRIGGERTYPE = 5006, /* s[] extension */ + RPMTAG_ORIGFILENAMES = 5007, /* s[] extension */ + RPMTAG_LONGFILESIZES = 5008, /* l[] */ + RPMTAG_LONGSIZE = 5009, /* l */ + RPMTAG_FILECAPS = 5010, /* s[] */ + RPMTAG_FILEDIGESTALGO = 5011, /* i file digest algorithm */ + RPMTAG_BUGURL = 5012, /* s */ + RPMTAG_EVR = 5013, /* s extension */ + RPMTAG_NVR = 5014, /* s extension */ + RPMTAG_NEVR = 5015, /* s extension */ + RPMTAG_NEVRA = 5016, /* s extension */ + RPMTAG_HEADERCOLOR = 5017, /* i extension */ + RPMTAG_VERBOSE = 5018, /* i extension */ + RPMTAG_EPOCHNUM = 5019, /* i extension */ + RPMTAG_PREINFLAGS = 5020, /* i */ + RPMTAG_POSTINFLAGS = 5021, /* i */ + RPMTAG_PREUNFLAGS = 5022, /* i */ + RPMTAG_POSTUNFLAGS = 5023, /* i */ + RPMTAG_PRETRANSFLAGS = 5024, /* i */ + RPMTAG_POSTTRANSFLAGS = 5025, /* i */ + RPMTAG_VERIFYSCRIPTFLAGS = 5026, /* i */ + RPMTAG_TRIGGERSCRIPTFLAGS = 5027, /* i[] */ + RPMTAG_COLLECTIONS = 5029, /* s[] list of collections */ + RPMTAG_POLICYNAMES = 5030, /* s[] */ + RPMTAG_POLICYTYPES = 5031, /* s[] */ + RPMTAG_POLICYTYPESINDEXES = 5032, /* i[] */ + RPMTAG_POLICYFLAGS = 5033, /* i[] */ + RPMTAG_VCS = 5034, /* s */ + RPMTAG_ORDERNAME = 5035, /* s[] */ + RPMTAG_ORDERVERSION = 5036, /* s[] */ + RPMTAG_ORDERFLAGS = 5037, /* i[] */ + + RPMTAG_FIRSTFREE_TAG /*!< internal */ +} rpmTag; + +#define RPMTAG_EXTERNAL_TAG 1000000 + +/** \ingroup rpmtag + * Rpm database index tags. + */ +typedef enum rpmDbiTag_e { + RPMDBI_PACKAGES = 0, /* Installed package headers. */ + RPMDBI_LABEL = 2, /* NEVRA label pseudo index */ + RPMDBI_NAME = RPMTAG_NAME, + RPMDBI_BASENAMES = RPMTAG_BASENAMES, + RPMDBI_GROUP = RPMTAG_GROUP, + RPMDBI_REQUIRENAME = RPMTAG_REQUIRENAME, + RPMDBI_PROVIDENAME = RPMTAG_PROVIDENAME, + RPMDBI_CONFLICTNAME = RPMTAG_CONFLICTNAME, + RPMDBI_OBSOLETENAME = RPMTAG_OBSOLETENAME, + RPMDBI_TRIGGERNAME = RPMTAG_TRIGGERNAME, + RPMDBI_DIRNAMES = RPMTAG_DIRNAMES, + RPMDBI_INSTALLTID = RPMTAG_INSTALLTID, + RPMDBI_SIGMD5 = RPMTAG_SIGMD5, + RPMDBI_SHA1HEADER = RPMTAG_SHA1HEADER, +} rpmDbiTag; + +/** \ingroup signature + * Tags found in signature header from package. + */ +typedef enum rpmSigTag_e { + RPMSIGTAG_SIZE = 1000, /*!< internal Header+Payload size (32bit) in bytes. */ + RPMSIGTAG_LEMD5_1 = 1001, /*!< internal Broken MD5, take 1 @deprecated legacy. */ + RPMSIGTAG_PGP = 1002, /*!< internal PGP 2.6.3 signature. */ + RPMSIGTAG_LEMD5_2 = 1003, /*!< internal Broken MD5, take 2 @deprecated legacy. */ + RPMSIGTAG_MD5 = 1004, /*!< internal MD5 signature. */ + RPMSIGTAG_GPG = 1005, /*!< internal GnuPG signature. */ + RPMSIGTAG_PGP5 = 1006, /*!< internal PGP5 signature @deprecated legacy. */ + RPMSIGTAG_PAYLOADSIZE = 1007,/*!< internal uncompressed payload size (32bit) in bytes. */ + RPMSIGTAG_BADSHA1_1 = RPMTAG_BADSHA1_1, /*!< internal Broken SHA1, take 1. */ + RPMSIGTAG_BADSHA1_2 = RPMTAG_BADSHA1_2, /*!< internal Broken SHA1, take 2. */ + RPMSIGTAG_SHA1 = RPMTAG_SHA1HEADER, /*!< internal sha1 header digest. */ + RPMSIGTAG_DSA = RPMTAG_DSAHEADER, /*!< internal DSA header signature. */ + RPMSIGTAG_RSA = RPMTAG_RSAHEADER, /*!< internal RSA header signature. */ + RPMSIGTAG_LONGSIZE = RPMTAG_LONGSIGSIZE, /*!< internal Header+Payload size (64bit) in bytes. */ + RPMSIGTAG_LONGARCHIVESIZE = RPMTAG_LONGARCHIVESIZE, /*!< internal uncompressed payload size (64bit) in bytes. */ +} rpmSigTag; + + +/** \ingroup header + * The basic types of data in tags from headers. + */ +typedef enum rpmTagType_e { +#define RPM_MIN_TYPE 0 + RPM_NULL_TYPE = 0, + RPM_CHAR_TYPE = 1, + RPM_INT8_TYPE = 2, + RPM_INT16_TYPE = 3, + RPM_INT32_TYPE = 4, + RPM_INT64_TYPE = 5, + RPM_STRING_TYPE = 6, + RPM_BIN_TYPE = 7, + RPM_STRING_ARRAY_TYPE = 8, + RPM_I18NSTRING_TYPE = 9, +#define RPM_MAX_TYPE 9 +#define RPM_FORCEFREE_TYPE 0xff +#define RPM_MASK_TYPE 0x0000ffff +} rpmTagType; + +/** \ingroup rpmtag + * The classes of data in tags from headers. + */ +typedef enum rpmTagClass_e { + RPM_NULL_CLASS = 0, + RPM_NUMERIC_CLASS = 1, + RPM_STRING_CLASS = 2, + RPM_BINARY_CLASS = 3, +} rpmTagClass; + +/** \ingroup header + * New rpm data types under consideration/development. + * These data types may (or may not) be added to rpm at some point. In order + * to avoid incompatibility with legacy versions of rpm, these data (sub-)types + * are introduced into the header by overloading RPM_BIN_TYPE, with the binary + * value of the tag a 16 byte image of what should/will be in the header index, + * followed by per-tag private data. + */ +typedef enum rpmSubTagType_e { + RPM_REGION_TYPE = -10, + RPM_BIN_ARRAY_TYPE = -11, + /*!<@todo Implement, kinda like RPM_STRING_ARRAY_TYPE for known (but variable) + length binary data. */ + RPM_XREF_TYPE = -12 + /*!<@todo Implement, intent is to to carry a (???,tagNum,valNum) cross + reference to retrieve data from other tags. */ +} rpmSubTagType; + +/** \ingroup header + * * Identify how to return the header data type. + * */ +enum rpmTagReturnType_e { + RPM_ANY_RETURN_TYPE = 0, + RPM_SCALAR_RETURN_TYPE = 0x00010000, + RPM_ARRAY_RETURN_TYPE = 0x00020000, + RPM_MAPPING_RETURN_TYPE = 0x00040000, + RPM_MASK_RETURN_TYPE = 0xffff0000 +}; + +typedef rpmFlags rpmTagReturnType; + +/** \ingroup rpmtag + * Return tag name from value. + * @param tag tag value + * @return tag name, "(unknown)" on not found + */ +const char * rpmTagGetName(rpmTagVal tag); + +/** \ingroup rpmtag + * Return tag data type from value. + * @param tag tag value + * @return tag data type + return type, RPM_NULL_TYPE on not found. + */ +rpmTagType rpmTagGetType(rpmTagVal tag); + +/** \ingroup rpmtag + * Return tag data type from value. + * @param tag tag value + * @return tag data type, RPM_NULL_TYPE on not found. + */ +rpmTagType rpmTagGetTagType(rpmTagVal tag); + +/** \ingroup rpmtag + * Return tag data type from value. + * @param tag tag value + * @return tag data return type, RPM_NULL_TYPE on not found. + */ +rpmTagReturnType rpmTagGetReturnType(rpmTagVal tag); + +/** \ingroup rpmtag + * Return tag data class from value. + * @param tag tag value + * @return tag data class, RPM_NULL_CLASS on not found. + */ +rpmTagClass rpmTagGetClass(rpmTagVal tag); + +/** \ingroup rpmtag + * Return tag value from name. + * @param tagstr name of tag + * @return tag value, -1 on not found + */ +rpmTagVal rpmTagGetValue(const char * tagstr); + +/** \ingroup rpmtag + * Return data class of type + * @param type tag type + * @return data class, RPM_NULL_CLASS on unknown. + */ +rpmTagClass rpmTagTypeGetClass(rpmTagType type); + +/** \ingroup rpmtag + * Return known rpm tag names, sorted by name. + * @retval tagnames tag container of string array type + * @param fullname return short or full name + * @return number of tag names, 0 on error + */ +int rpmTagGetNames(rpmtd tagnames, int fullname); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMTAG_H */ diff --git a/lib/rpmtd.c b/lib/rpmtd.c new file mode 100644 index 0000000..d941113 --- /dev/null +++ b/lib/rpmtd.c @@ -0,0 +1,443 @@ +#include "system.h" + +#include +#include +#include +#include "lib/misc.h" /* format function prototypes */ + +#include "debug.h" + +rpmtd rpmtdNew(void) +{ + rpmtd td = xmalloc(sizeof(*td)); + rpmtdReset(td); + return td; +} + +rpmtd rpmtdFree(rpmtd td) +{ + /* permit free on NULL td */ + if (td != NULL) { + /* XXX should we free data too - a flag maybe? */ + free(td); + } + return NULL; +} + +void rpmtdReset(rpmtd td) +{ + assert(td != NULL); + + memset(td, 0, sizeof(*td)); + td->ix = -1; +} + +void rpmtdFreeData(rpmtd td) +{ + assert(td != NULL); + + if (td->flags & RPMTD_ALLOCED) { + if (td->flags & RPMTD_PTR_ALLOCED) { + assert(td->data != NULL); + char **data = td->data; + for (int i = 0; i < td->count; i++) { + free(data[i]); + } + } + free(td->data); + } + rpmtdReset(td); +} + +rpm_count_t rpmtdCount(rpmtd td) +{ + assert(td != NULL); + /* fix up for binary type abusing count as data length */ + return (td->type == RPM_BIN_TYPE) ? 1 : td->count; +} + +rpmTagVal rpmtdTag(rpmtd td) +{ + assert(td != NULL); + return td->tag; +} + +rpmTagType rpmtdType(rpmtd td) +{ + assert(td != NULL); + return td->type; +} + +rpmTagClass rpmtdClass(rpmtd td) +{ + assert(td != NULL); + return rpmTagTypeGetClass(td->type); +} + +int rpmtdGetIndex(rpmtd td) +{ + assert(td != NULL); + return td->ix; +} + +int rpmtdSetIndex(rpmtd td, int index) +{ + assert(td != NULL); + + if (index < 0 || index >= rpmtdCount(td)) { + return -1; + } + td->ix = index; + return td->ix; +} + +int rpmtdInit(rpmtd td) +{ + assert(td != NULL); + + /* XXX check that this is an array type? */ + td->ix = -1; + return 0; +} + +int rpmtdNext(rpmtd td) +{ + assert(td != NULL); + + int i = -1; + + if (++td->ix >= 0) { + if (td->ix < rpmtdCount(td)) { + i = td->ix; + } else { + td->ix = i; + } + } + return i; +} + +uint32_t *rpmtdNextUint32(rpmtd td) +{ + assert(td != NULL); + uint32_t *res = NULL; + if (rpmtdNext(td) >= 0) { + res = rpmtdGetUint32(td); + } + return res; +} + +uint64_t *rpmtdNextUint64(rpmtd td) +{ + assert(td != NULL); + uint64_t *res = NULL; + if (rpmtdNext(td) >= 0) { + res = rpmtdGetUint64(td); + } + return res; +} + +const char *rpmtdNextString(rpmtd td) +{ + assert(td != NULL); + const char *res = NULL; + if (rpmtdNext(td) >= 0) { + res = rpmtdGetString(td); + } + return res; +} + +char * rpmtdGetChar(rpmtd td) +{ + char *res = NULL; + + assert(td != NULL); + + if (td->type == RPM_CHAR_TYPE) { + int ix = (td->ix >= 0 ? td->ix : 0); + res = (char *) td->data + ix; + } + return res; +} +uint16_t * rpmtdGetUint16(rpmtd td) +{ + uint16_t *res = NULL; + + assert(td != NULL); + + if (td->type == RPM_INT16_TYPE) { + int ix = (td->ix >= 0 ? td->ix : 0); + res = (uint16_t *) td->data + ix; + } + return res; +} + +uint32_t * rpmtdGetUint32(rpmtd td) +{ + uint32_t *res = NULL; + + assert(td != NULL); + + if (td->type == RPM_INT32_TYPE) { + int ix = (td->ix >= 0 ? td->ix : 0); + res = (uint32_t *) td->data + ix; + } + return res; +} + +uint64_t * rpmtdGetUint64(rpmtd td) +{ + uint64_t *res = NULL; + + assert(td != NULL); + + if (td->type == RPM_INT64_TYPE) { + int ix = (td->ix >= 0 ? td->ix : 0); + res = (uint64_t *) td->data + ix; + } + return res; +} + +const char * rpmtdGetString(rpmtd td) +{ + const char *str = NULL; + + assert(td != NULL); + + if (td->type == RPM_STRING_TYPE) { + str = (const char *) td->data; + } else if (td->type == RPM_STRING_ARRAY_TYPE || + td->type == RPM_I18NSTRING_TYPE) { + /* XXX TODO: check for array bounds */ + int ix = (td->ix >= 0 ? td->ix : 0); + str = *((const char**) td->data + ix); + } + return str; +} + +uint64_t rpmtdGetNumber(rpmtd td) +{ + assert(td != NULL); + uint64_t val = 0; + int ix = (td->ix >= 0 ? td->ix : 0); + + switch (td->type) { + case RPM_INT64_TYPE: + val = *((uint64_t *) td->data + ix); + break; + case RPM_INT32_TYPE: + val = *((uint32_t *) td->data + ix); + break; + case RPM_INT16_TYPE: + val = *((uint16_t *) td->data + ix); + break; + case RPM_INT8_TYPE: + case RPM_CHAR_TYPE: + val = *((uint8_t *) td->data + ix); + break; + default: + break; + } + return val; +} + +char *rpmtdFormat(rpmtd td, rpmtdFormats fmt, const char *errmsg) +{ + headerTagFormatFunction func = rpmHeaderFormatFuncByValue(fmt); + const char *err = NULL; + char *str = NULL; + + if (func) { + char fmtbuf[50]; /* yuck, get rid of this */ + strcpy(fmtbuf, "%"); + str = func(td, fmtbuf); + } else { + err = _("Unknown format"); + } + + if (err && errmsg) { + errmsg = err; + } + + return str; +} + +int rpmtdSetTag(rpmtd td, rpmTagVal tag) +{ + assert(td != NULL); + rpmTagType newtype = rpmTagGetTagType(tag); + int rc = 0; + + /* + * Sanity checks: + * - is the new tag valid at all + * - if changing tag of non-empty container, require matching type + */ + if (newtype == RPM_NULL_TYPE) + goto exit; + + if (td->data || td->count > 0) { + if (rpmTagGetTagType(td->tag) != rpmTagGetTagType(tag)) { + goto exit; + } + } + + td->tag = tag; + td->type = newtype; + rc = 1; + +exit: + return rc; +} + +static inline int rpmtdSet(rpmtd td, rpmTagVal tag, rpmTagType type, + rpm_constdata_t data, rpm_count_t count) +{ + rpmtdReset(td); + td->tag = tag; + td->type = type; + td->count = count; + /* + * Discards const, but we won't touch the data (even rpmtdFreeData() + * wont free it as allocation flags aren't set) so it's "ok". + * XXX: Should there be a separate RPMTD_FOO flag for "user data"? + */ + td->data = (void *) data; + return 1; +} + +int rpmtdFromUint8(rpmtd td, rpmTagVal tag, uint8_t *data, rpm_count_t count) +{ + rpmTagType type = rpmTagGetTagType(tag); + rpmTagReturnType retype = rpmTagGetReturnType(tag); + + if (count < 1) + return 0; + + /* + * BIN type is really just an uint8_t array internally, it's just + * treated specially otherwise. + */ + switch (type) { + case RPM_CHAR_TYPE: + case RPM_INT8_TYPE: + if (retype != RPM_ARRAY_RETURN_TYPE && count > 1) + return 0; + /* fallthrough */ + case RPM_BIN_TYPE: + break; + default: + return 0; + } + + return rpmtdSet(td, tag, type, data, count); +} + +int rpmtdFromUint16(rpmtd td, rpmTagVal tag, uint16_t *data, rpm_count_t count) +{ + rpmTagType type = rpmTagGetTagType(tag); + rpmTagReturnType retype = rpmTagGetReturnType(tag); + if (type != RPM_INT16_TYPE || count < 1) + return 0; + if (retype != RPM_ARRAY_RETURN_TYPE && count > 1) + return 0; + + return rpmtdSet(td, tag, type, data, count); +} + +int rpmtdFromUint32(rpmtd td, rpmTagVal tag, uint32_t *data, rpm_count_t count) +{ + rpmTagType type = rpmTagGetTagType(tag); + rpmTagReturnType retype = rpmTagGetReturnType(tag); + if (type != RPM_INT32_TYPE || count < 1) + return 0; + if (retype != RPM_ARRAY_RETURN_TYPE && count > 1) + return 0; + + return rpmtdSet(td, tag, type, data, count); +} + +int rpmtdFromUint64(rpmtd td, rpmTagVal tag, uint64_t *data, rpm_count_t count) +{ + rpmTagType type = rpmTagGetTagType(tag); + rpmTagReturnType retype = rpmTagGetReturnType(tag); + if (type != RPM_INT64_TYPE || count < 1) + return 0; + if (retype != RPM_ARRAY_RETURN_TYPE && count > 1) + return 0; + + return rpmtdSet(td, tag, type, data, count); +} + +int rpmtdFromString(rpmtd td, rpmTagVal tag, const char *data) +{ + rpmTagType type = rpmTagGetTagType(tag); + int rc = 0; + + if (type == RPM_STRING_TYPE) { + rc = rpmtdSet(td, tag, type, data, 1); + } else if (type == RPM_STRING_ARRAY_TYPE) { + rc = rpmtdSet(td, tag, type, &data, 1); + } + + return rc; +} + +int rpmtdFromStringArray(rpmtd td, rpmTagVal tag, const char **data, rpm_count_t count) +{ + rpmTagType type = rpmTagGetTagType(tag); + if (type != RPM_STRING_ARRAY_TYPE || count < 1) + return 0; + if (type == RPM_STRING_TYPE && count != 1) + return 0; + + return rpmtdSet(td, tag, type, data, count); +} + +int rpmtdFromArgv(rpmtd td, rpmTagVal tag, ARGV_t argv) +{ + int count = argvCount(argv); + rpmTagType type = rpmTagGetTagType(tag); + + if (type != RPM_STRING_ARRAY_TYPE || count < 1) + return 0; + + return rpmtdSet(td, tag, type, argv, count); +} + +int rpmtdFromArgi(rpmtd td, rpmTagVal tag, ARGI_t argi) +{ + int count = argiCount(argi); + rpmTagType type = rpmTagGetTagType(tag); + rpmTagReturnType retype = rpmTagGetReturnType(tag); + + if (type != RPM_INT32_TYPE || retype != RPM_ARRAY_RETURN_TYPE || count < 1) + return 0; + + return rpmtdSet(td, tag, type, argiData(argi), count); +} + +rpmtd rpmtdDup(rpmtd td) +{ + rpmtd newtd = NULL; + char **data = NULL; + int i; + + assert(td != NULL); + /* TODO: permit other types too */ + if (td->type != RPM_STRING_ARRAY_TYPE && td->type != RPM_I18NSTRING_TYPE) { + return NULL; + } + + /* deep-copy container and data, drop immutable flag */ + newtd = rpmtdNew(); + memcpy(newtd, td, sizeof(*td)); + newtd->flags &= ~(RPMTD_IMMUTABLE); + + newtd->flags |= (RPMTD_ALLOCED | RPMTD_PTR_ALLOCED); + newtd->data = data = xmalloc(td->count * sizeof(*data)); + while ((i = rpmtdNext(td)) >= 0) { + data[i] = xstrdup(rpmtdGetString(td)); + } + + return newtd; +} diff --git a/lib/rpmtd.h b/lib/rpmtd.h new file mode 100644 index 0000000..99c94ba --- /dev/null +++ b/lib/rpmtd.h @@ -0,0 +1,355 @@ +#ifndef _RPMTD_H +#define _RPMTD_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +enum rpmtdFlags_e { + RPMTD_NONE = 0, + RPMTD_ALLOCED = (1 << 0), /* was memory allocated? */ + RPMTD_PTR_ALLOCED = (1 << 1), /* were array pointers allocated? */ + RPMTD_IMMUTABLE = (1 << 2), /* header data or modifiable? */ + RPMTD_ARGV = (1 << 3), /* string array is NULL-terminated? */ +}; + +typedef rpmFlags rpmtdFlags; + +/** \ingroup rpmtd + * Container for rpm tag data (from headers or extensions). + * @todo Make this opaque (at least outside rpm itself) + */ +struct rpmtd_s { + rpm_tag_t tag; /* rpm tag of this data entry*/ + rpm_tagtype_t type; /* data type */ + rpm_count_t count; /* number of entries */ + rpm_data_t data; /* pointer to actual data */ + rpmtdFlags flags; /* flags on memory allocation etc */ + int ix; /* iteration index */ +}; + +/** \ingroup rpmtd + * Create new tag data container + * @return New, initialized tag data container. + */ +rpmtd rpmtdNew(void); + +/** \ingroup rpmtd + * Destroy tag data container. + * @param td Tag data container + * @return NULL always + */ +rpmtd rpmtdFree(rpmtd td); + +/** \ingroup rpmtd + * (Re-)initialize tag data container. Contents will be zeroed out + * and iteration index reset. + * @param td Tag data container + */ +void rpmtdReset(rpmtd td); + +/** \ingroup rpmtd + * Free contained data. This is always safe to call as the container knows + * if data was malloc'ed or not. Container is reinitialized. + * @param td Tag data container + */ +void rpmtdFreeData(rpmtd td); + +/** \ingroup rpmtd + * Retrieve array size of the container. For non-array types this is always 1. + * @param td Tag data container + * @return Number of entries in contained data. + */ +rpm_count_t rpmtdCount(rpmtd td); + +/** \ingroup rpmtd + * Retrieve tag of the container. + * @param td Tag data container + * @return Rpm tag. + */ +rpmTagVal rpmtdTag(rpmtd td); + +/** \ingroup rpmtd + * Retrieve type of the container. + * @param td Tag data container + * @return Rpm tag type. + */ +rpmTagType rpmtdType(rpmtd td); + +/** \ingroup rpmtd + * Retrieve class of the container. + * @param td Tag data container + * @return Rpm tag class + */ +rpmTagClass rpmtdClass(rpmtd td); + +/** \ingroup rpmtd + * Retrieve current iteration index of the container. + * @param td Tag data container + * @return Iteration index (or -1 if not iterating) + */ +int rpmtdGetIndex(rpmtd td); + +/** \ingroup rpmtd + * Set iteration index of the container. + * If new index is out of bounds for the container, -1 is returned and + * iteration index is left untouched. + * @param td Tag data container + * @param index New index + * @return New index, or -1 if index out of bounds + */ +int rpmtdSetIndex(rpmtd td, int index); + +/** \ingroup rpmtd + * Initialize tag container for iteration + * @param td Tag data container + * @return 0 on success + */ +int rpmtdInit(rpmtd td); + +/** \ingroup rpmtd + * Iterate over tag data container. + * @param td Tag data container + * @return Tag data container iterator index, -1 on termination + */ +int rpmtdNext(rpmtd td); + +/** \ingroup rpmtd + * Iterate over uint32_t type tag data container. + * @param td Tag data container + * @return Pointer to next value, NULL on termination or error + */ +uint32_t *rpmtdNextUint32(rpmtd td); + +/** \ingroup rpmtd + * Iterate over uint64_t type tag data container. + * @param td Tag data container + * @return Pointer to next value, NULL on termination or error + */ +uint64_t *rpmtdNextUint64(rpmtd td); + +/** \ingroup rpmtd + * Iterate over string / string array type tag data container. + * @param td Tag data container + * @return Pointer to next value, NULL on termination or error + */ +const char *rpmtdNextString(rpmtd td); + +/** \ingroup rpmtd + * Return char data from tag container. + * For scalar return type, just return pointer to the integer. On array + * types, return pointer to current iteration index. If the tag container + * is not for char type, NULL is returned. + * @param td Tag data container + * @return Pointer to uint16_t, NULL on error + */ +char *rpmtdGetChar(rpmtd td); + +/** \ingroup rpmtd + * Return uint16_t data from tag container. + * For scalar return type, just return pointer to the integer. On array + * types, return pointer to current iteration index. If the tag container + * is not for int16 type, NULL is returned. + * @param td Tag data container + * @return Pointer to uint16_t, NULL on error + */ +uint16_t * rpmtdGetUint16(rpmtd td); + +/** \ingroup rpmtd + * Return uint32_t data from tag container. + * For scalar return type, just return pointer to the integer. On array + * types, return pointer to current iteration index. If the tag container + * is not for int32 type, NULL is returned. + * @param td Tag data container + * @return Pointer to uint32_t, NULL on error + */ +uint32_t * rpmtdGetUint32(rpmtd td); + +/** \ingroup rpmtd + * Return uint64_t data from tag container. + * For scalar return type, just return pointer to the integer. On array + * types, return pointer to current iteration index. If the tag container + * is not for int64 type, NULL is returned. + * @param td Tag data container + * @return Pointer to uint64_t, NULL on error + */ +uint64_t * rpmtdGetUint64(rpmtd td); + +/** \ingroup rpmtd + * Return string data from tag container. + * For string types, just return the string. On string array types, + * return the string from current iteration index. If the tag container + * is not for a string type, NULL is returned. + * @param td Tag data container + * @return String constant from container, NULL on error + */ +const char * rpmtdGetString(rpmtd td); + +/** \ingroup rpmtd + * Return numeric value from tag container. + * Returns the value of numeric container (RPM_NUMERIC_CLASS) from + * current iteration index as uint64_t regardless of its internal + * presentation (8/16/32/64-bit integer). + * @param td Tag data container + * @return Value of current iteration item as uint64_t, + * 0 for non-numeric types (error) + */ +uint64_t rpmtdGetNumber(rpmtd td); + +typedef enum rpmtdFormats_e { + RPMTD_FORMAT_STRING = 0, /* plain string (any type) */ + RPMTD_FORMAT_ARMOR = 1, /* ascii armor format (bin types) */ + RPMTD_FORMAT_BASE64 = 2, /* base64 encoding (bin types) */ + RPMTD_FORMAT_PGPSIG = 3, /* pgp/gpg signature (bin types) */ + RPMTD_FORMAT_DEPFLAGS = 4, /* dependency flags (int types) */ + RPMTD_FORMAT_FFLAGS = 5, /* file flags (int types) */ + RPMTD_FORMAT_PERMS = 6, /* permission string (int types) */ + RPMTD_FORMAT_TRIGGERTYPE = 7, /* trigger types (int types) */ + RPMTD_FORMAT_XML = 8, /* xml format (any type) */ + RPMTD_FORMAT_OCTAL = 9, /* octal format (int types) */ + RPMTD_FORMAT_HEX = 10, /* hex format (int types) */ + RPMTD_FORMAT_DATE = 11, /* date format (int types) */ + RPMTD_FORMAT_DAY = 12, /* day format (int types) */ + RPMTD_FORMAT_SHESCAPE = 13, /* shell escaped (any type) */ + RPMTD_FORMAT_ARRAYSIZE = 14, /* size of contained array (any type) */ + RPMTD_FORMAT_DEPTYPE = 15, /* dependency types (int types) */ + RPMTD_FORMAT_FSTATE = 16, /* file states (int types) */ + RPMTD_FORMAT_VFLAGS = 17, /* file verify flags (int types) */ + RPMTD_FORMAT_EXPAND = 18, /* macro expansion (string types) */ + RPMTD_FORMAT_FSTATUS = 19, /* file verify status (int types) */ +} rpmtdFormats; + +/** \ingroup rpmtd + * Format data from tag container to string presentation of given format. + * Return malloced string presentation of current data in container, + * converting from integers etc as necessary. On array types, data from + * current iteration index is used for formatting. + * @param td Tag data container + * @param fmt Format to apply + * @param errmsg Error message from conversion (or NULL) + * @return String representation of current data (malloc'ed), + * NULL on error + */ +char *rpmtdFormat(rpmtd td, rpmtdFormats fmt, const char *errmsg); + +/** \ingroup rpmtd + * Set container tag and type. + * For empty container, any valid tag can be set. If the container has + * data, changing is only permitted to tag of same type. + * @param td Tag data container + * @param tag New tag + * @return 1 on success, 0 on error + */ +int rpmtdSetTag(rpmtd td, rpmTagVal tag); + +/** \ingroup rpmtd + * Construct tag container from uint8_t pointer. + * Tag type is checked to be of compatible type (CHAR, INT8 or BIN). + * For non-array types (BIN is a special case of INT8 array) + * count must be exactly 1. + * @param td Tag data container + * @param tag Rpm tag to construct + * @param data Pointer to uint8_t (value or array) + * @param count Number of entries + * @return 1 on success, 0 on error (eg wrong type) + */ +int rpmtdFromUint8(rpmtd td, rpmTagVal tag, uint8_t *data, rpm_count_t count); + +/** \ingroup rpmtd + * Construct tag container from uint16_t pointer. + * Tag type is checked to be of INT16 type. For non-array types count + * must be exactly 1. + * @param td Tag data container + * @param tag Rpm tag to construct + * @param data Pointer to uint16_t (value or array) + * @param count Number of entries + * @return 1 on success, 0 on error (eg wrong type) + */ +int rpmtdFromUint16(rpmtd td, rpmTagVal tag, uint16_t *data, rpm_count_t count); + +/** \ingroup rpmtd + * Construct tag container from uint32_t pointer. + * Tag type is checked to be of INT32 type. For non-array types count + * must be exactly 1. + * @param td Tag data container + * @param tag Rpm tag to construct + * @param data Pointer to uint32_t (value or array) + * @param count Number of entries + * @return 1 on success, 0 on error (eg wrong type) + */ +int rpmtdFromUint32(rpmtd td, rpmTagVal tag, uint32_t *data, rpm_count_t count); + +/** \ingroup rpmtd + * Construct tag container from uint64_t pointer. + * Tag type is checked to be of INT64 type. For non-array types count + * must be exactly 1. + * @param td Tag data container + * @param tag Rpm tag to construct + * @param data Pointer to uint64_t (value or array) + * @param count Number of entries + * @return 1 on success, 0 on error (eg wrong type) + */ +int rpmtdFromUint64(rpmtd td, rpmTagVal tag, uint64_t *data, rpm_count_t count); + +/** \ingroup rpmtd + * Construct tag container from a string. + * Tag type is checked to be of string type. + * @param td Tag data container + * @param tag Rpm tag to construct + * @param data String to use + * @return 1 on success, 0 on error (eg wrong type) + */ +int rpmtdFromString(rpmtd td, rpmTagVal tag, const char *data); + +/** \ingroup rpmtd + * Construct tag container from a string array. + * Tag type is checked to be of string or string array type. For non-array + * types count must be exactly 1. + * @param td Tag data container + * @param tag Rpm tag to construct + * @param data Pointer to string array + * @param count Number of entries + * @return 1 on success, 0 on error (eg wrong type) + */ +int rpmtdFromStringArray(rpmtd td, rpmTagVal tag, const char **data, rpm_count_t count); + +/** \ingroup rpmtd + * Construct tag container from ARGV_t array. + * Tag type is checked to be of string array type and array is checked + * to be non-empty. + * @param td Tag data container + * @param tag Rpm tag to construct + * @param argv ARGV array + * @return 1 on success, 0 on error (eg wrong type) + */ +int rpmtdFromArgv(rpmtd td, rpmTagVal tag, ARGV_t argv); + +/** \ingroup rpmtd + * Construct tag container from ARGI_t array. + * Tag type is checked to be of integer array type and array is checked + * to be non-empty. + * @param td Tag data container + * @param tag Rpm tag to construct + * @param argi ARGI array + * @return 1 on success, 0 on error (eg wrong type) + */ +int rpmtdFromArgi(rpmtd td, rpmTagVal tag, ARGI_t argi); + +/* \ingroup rpmtd + * Perform deep copy of container. + * Create a modifiable copy of tag data container (on string arrays each + * string is separately allocated) + * @todo Only string arrays types are supported currently + * @param td Container to copy + * @return New container or NULL on error + */ +rpmtd rpmtdDup(rpmtd td); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMTD_H */ diff --git a/lib/rpmte.c b/lib/rpmte.c new file mode 100644 index 0000000..d13575a --- /dev/null +++ b/lib/rpmte.c @@ -0,0 +1,927 @@ +/** \ingroup rpmdep + * \file lib/rpmte.c + * Routine(s) to handle an "rpmte" transaction element. + */ +#include "system.h" + +#include +#include /* RPM_MACHTABLE_* */ +#include +#include +#include +#include +#include +#include + +#include "lib/rpmplugins.h" +#include "lib/rpmte_internal.h" + +#include "debug.h" + +/** \ingroup rpmte + * A single package instance to be installed/removed atomically. + */ +struct rpmte_s { + rpmElementType type; /*!< Package disposition (installed/removed). */ + + Header h; /*!< Package header. */ + char * NEVR; /*!< Package name-version-release. */ + char * NEVRA; /*!< Package name-version-release.arch. */ + char * name; /*!< Name: */ + char * epoch; + char * version; /*!< Version: */ + char * release; /*!< Release: */ + char * arch; /*!< Architecture hint. */ + char * os; /*!< Operating system hint. */ + int isSource; /*!< (TR_ADDED) source rpm? */ + + rpmte depends; /*!< Package updated by this package (ERASE te) */ + rpmte parent; /*!< Parent transaction element. */ + unsigned int db_instance; /*!< Database instance (of removed pkgs) */ + tsortInfo tsi; /*!< Dependency ordering chains. */ + + rpmds thisds; /*!< This package's provided NEVR. */ + rpmds provides; /*!< Provides: dependencies. */ + rpmds requires; /*!< Requires: dependencies. */ + rpmds conflicts; /*!< Conflicts: dependencies. */ + rpmds obsoletes; /*!< Obsoletes: dependencies. */ + rpmds order; /*!< Order: dependencies. */ + rpmfi fi; /*!< File information. */ + rpmps probs; /*!< Problems (relocations) */ + rpmts ts; /*!< Parent transaction */ + + rpm_color_t color; /*!< Color bit(s) from package dependencies. */ + rpm_loff_t pkgFileSize; /*!< No. of bytes in package file (approx). */ + unsigned int headerSize; /*!< No. of bytes in package header */ + + fnpyKey key; /*!< (TR_ADDED) Retrieval key. */ + rpmRelocation * relocs; /*!< (TR_ADDED) Payload file relocations. */ + int nrelocs; /*!< (TR_ADDED) No. of relocations. */ + FD_t fd; /*!< (TR_ADDED) Payload file descriptor. */ + +#define RPMTE_HAVE_PRETRANS (1 << 0) +#define RPMTE_HAVE_POSTTRANS (1 << 1) + int transscripts; /*!< pre/posttrans script existence */ + int failed; /*!< (parent) install/erase failed */ + + rpmfs fs; + + ARGV_t lastInCollectionsAny; /*!< list of collections this te is the last to be installed or removed */ + ARGV_t lastInCollectionsAdd; /*!< list of collections this te is the last to be only installed */ + ARGV_t firstInCollectionsRemove; /*!< list of collections this te is the first to be only removed */ + ARGV_t collections; /*!< list of collections */ +}; + +/* forward declarations */ +static void rpmteColorDS(rpmte te, rpmTag tag); +static int rpmteClose(rpmte te, int reset_fi); + +void rpmteCleanDS(rpmte te) +{ + te->thisds = rpmdsFree(te->thisds); + te->provides = rpmdsFree(te->provides); + te->requires = rpmdsFree(te->requires); + te->conflicts = rpmdsFree(te->conflicts); + te->obsoletes = rpmdsFree(te->obsoletes); + te->order = rpmdsFree(te->order); +} + +static rpmfi getFI(rpmte p, Header h) +{ + rpmfiFlags fiflags; + fiflags = (p->type == TR_ADDED) ? (RPMFI_NOHEADER | RPMFI_FLAGS_INSTALL) : + (RPMFI_NOHEADER | RPMFI_FLAGS_ERASE); + + /* relocate stuff in header if necessary */ + if (rpmteType(p) == TR_ADDED && rpmfsFC(p->fs) > 0) { + if (!headerIsSource(h) && !headerIsEntry(h, RPMTAG_ORIGBASENAMES)) { + rpmRelocateFileList(p->relocs, p->nrelocs, p->fs, h); + } + } + return rpmfiNew(NULL, h, RPMTAG_BASENAMES, fiflags); +} + +/* stupid bubble sort, but it's probably faster here */ +static void sortRelocs(rpmRelocation *relocations, int numRelocations) +{ + for (int i = 0; i < numRelocations; i++) { + int madeSwap = 0; + for (int j = 1; j < numRelocations; j++) { + rpmRelocation tmpReloc; + if (relocations[j - 1].oldPath == NULL || /* XXX can't happen */ + relocations[j ].oldPath == NULL || /* XXX can't happen */ + strcmp(relocations[j - 1].oldPath, relocations[j].oldPath) <= 0) + continue; + tmpReloc = relocations[j - 1]; + relocations[j - 1] = relocations[j]; + relocations[j] = tmpReloc; + madeSwap = 1; + } + if (!madeSwap) break; + } +} + +static char * stripTrailingChar(char * s, char c) +{ + char * t; + for (t = s + strlen(s) - 1; *t == c && t >= s; t--) + *t = '\0'; + return s; +} + +static void buildRelocs(rpmte p, Header h, rpmRelocation *relocs) +{ + int i; + struct rpmtd_s validRelocs; + + for (rpmRelocation *r = relocs; r->oldPath || r->newPath; r++) + p->nrelocs++; + + headerGet(h, RPMTAG_PREFIXES, &validRelocs, HEADERGET_MINMEM); + p->relocs = xmalloc(sizeof(*p->relocs) * (p->nrelocs+1)); + + /* Build sorted relocation list from raw relocations. */ + for (i = 0; i < p->nrelocs; i++) { + char * t; + + /* + * Default relocations (oldPath == NULL) are handled in the UI, + * not rpmlib. + */ + if (relocs[i].oldPath == NULL) continue; /* XXX can't happen */ + + /* FIXME: Trailing /'s will confuse us greatly. Internal ones will + too, but those are more trouble to fix up. :-( */ + t = xstrdup(relocs[i].oldPath); + p->relocs[i].oldPath = (t[0] == '/' && t[1] == '\0') + ? t + : stripTrailingChar(t, '/'); + + /* An old path w/o a new path is valid, and indicates exclusion */ + if (relocs[i].newPath) { + int valid = 0; + const char *validprefix; + + t = xstrdup(relocs[i].newPath); + p->relocs[i].newPath = (t[0] == '/' && t[1] == '\0') + ? t + : stripTrailingChar(t, '/'); + + /* FIX: relocations[i].oldPath == NULL */ + /* Verify that the relocation's old path is in the header. */ + rpmtdInit(&validRelocs); + while ((validprefix = rpmtdNextString(&validRelocs))) { + if (rstreq(validprefix, p->relocs[i].oldPath)) { + valid = 1; + break; + } + } + + if (!valid) { + rpmteAddProblem(p, RPMPROB_BADRELOCATE, NULL, + p->relocs[i].oldPath, 0); + } + } else { + p->relocs[i].newPath = NULL; + } + } + p->relocs[i].oldPath = NULL; + p->relocs[i].newPath = NULL; + sortRelocs(p->relocs, p->nrelocs); + + rpmtdFreeData(&validRelocs); +} + +/** + * Initialize transaction element data from header. + * @param p transaction element + * @param h header + * @param key (TR_ADDED) package retrieval key (e.g. file name) + * @param relocs (TR_ADDED) package file relocations + */ +static void addTE(rpmte p, Header h, fnpyKey key, rpmRelocation * relocs) +{ + struct rpmtd_s colls; + + p->name = headerGetAsString(h, RPMTAG_NAME); + p->version = headerGetAsString(h, RPMTAG_VERSION); + p->release = headerGetAsString(h, RPMTAG_RELEASE); + + p->epoch = headerGetAsString(h, RPMTAG_EPOCH); + + p->arch = headerGetAsString(h, RPMTAG_ARCH); + p->os = headerGetAsString(h, RPMTAG_OS); + + p->isSource = headerIsSource(h); + + p->NEVR = headerGetAsString(h, RPMTAG_NEVR); + p->NEVRA = headerGetAsString(h, RPMTAG_NEVRA); + + p->nrelocs = 0; + p->relocs = NULL; + if (relocs != NULL) + buildRelocs(p, h, relocs); + + p->db_instance = headerGetInstance(h); + p->key = key; + p->fd = NULL; + + p->pkgFileSize = 0; + p->headerSize = headerSizeof(h, HEADER_MAGIC_NO); + + p->thisds = rpmdsThis(h, RPMTAG_PROVIDENAME, RPMSENSE_EQUAL); + p->provides = rpmdsNew(h, RPMTAG_PROVIDENAME, 0); + p->requires = rpmdsNew(h, RPMTAG_REQUIRENAME, 0); + p->conflicts = rpmdsNew(h, RPMTAG_CONFLICTNAME, 0); + p->obsoletes = rpmdsNew(h, RPMTAG_OBSOLETENAME, 0); + p->order = rpmdsNew(h, RPMTAG_ORDERNAME, 0); + + p->fs = rpmfsNew(h, p->type); + p->fi = getFI(p, h); + + /* See if we have pre/posttrans scripts. */ + p->transscripts |= (headerIsEntry(h, RPMTAG_PRETRANS) && + headerIsEntry(h, RPMTAG_PRETRANSPROG)) ? + RPMTE_HAVE_PRETRANS : 0; + p->transscripts |= (headerIsEntry(h, RPMTAG_POSTTRANS) && + headerIsEntry(h, RPMTAG_POSTTRANSPROG)) ? + RPMTE_HAVE_POSTTRANS : 0; + + p->lastInCollectionsAny = NULL; + p->lastInCollectionsAdd = NULL; + p->firstInCollectionsRemove = NULL; + p->collections = NULL; + if (headerGet(h, RPMTAG_COLLECTIONS, &colls, HEADERGET_MINMEM)) { + const char *collname; + while ((collname = rpmtdNextString(&colls))) { + argvAdd(&p->collections, collname); + } + argvSort(p->collections, NULL); + rpmtdFreeData(&colls); + } + + rpmteColorDS(p, RPMTAG_PROVIDENAME); + rpmteColorDS(p, RPMTAG_REQUIRENAME); + return; +} + +rpmte rpmteFree(rpmte te) +{ + if (te != NULL) { + if (te->relocs) { + for (int i = 0; i < te->nrelocs; i++) { + free(te->relocs[i].oldPath); + free(te->relocs[i].newPath); + } + free(te->relocs); + } + + free(te->os); + free(te->arch); + free(te->epoch); + free(te->name); + free(te->version); + free(te->release); + free(te->NEVR); + free(te->NEVRA); + + fdFree(te->fd); + rpmfiFree(te->fi); + headerFree(te->h); + rpmfsFree(te->fs); + rpmpsFree(te->probs); + rpmteCleanDS(te); + + argvFree(te->collections); + argvFree(te->lastInCollectionsAny); + argvFree(te->lastInCollectionsAdd); + argvFree(te->firstInCollectionsRemove); + + memset(te, 0, sizeof(*te)); /* XXX trash and burn */ + free(te); + } + return NULL; +} + +rpmte rpmteNew(rpmts ts, Header h, rpmElementType type, fnpyKey key, + rpmRelocation * relocs) +{ + rpmte p = xcalloc(1, sizeof(*p)); + p->ts = ts; + p->type = type; + addTE(p, h, key, relocs); + switch (type) { + case TR_ADDED: + p->pkgFileSize = headerGetNumber(h, RPMTAG_LONGSIGSIZE) + 96 + 256; + break; + case TR_REMOVED: + /* nothing to do */ + break; + } + + return p; +} + +unsigned int rpmteDBInstance(rpmte te) +{ + return (te != NULL ? te->db_instance : 0); +} + +void rpmteSetDBInstance(rpmte te, unsigned int instance) +{ + if (te != NULL) + te->db_instance = instance; +} + +Header rpmteHeader(rpmte te) +{ + return (te != NULL && te->h != NULL ? headerLink(te->h) : NULL); +} + +Header rpmteSetHeader(rpmte te, Header h) +{ + if (te != NULL) { + te->h = headerFree(te->h); + if (h != NULL) + te->h = headerLink(h); + } + return NULL; +} + +rpmElementType rpmteType(rpmte te) +{ + /* XXX returning negative for unsigned type */ + return (te != NULL ? te->type : -1); +} + +const char * rpmteN(rpmte te) +{ + return (te != NULL ? te->name : NULL); +} + +const char * rpmteE(rpmte te) +{ + return (te != NULL ? te->epoch : NULL); +} + +const char * rpmteV(rpmte te) +{ + return (te != NULL ? te->version : NULL); +} + +const char * rpmteR(rpmte te) +{ + return (te != NULL ? te->release : NULL); +} + +const char * rpmteA(rpmte te) +{ + return (te != NULL ? te->arch : NULL); +} + +const char * rpmteO(rpmte te) +{ + return (te != NULL ? te->os : NULL); +} + +int rpmteIsSource(rpmte te) +{ + return (te != NULL ? te->isSource : 0); +} + +rpm_color_t rpmteColor(rpmte te) +{ + return (te != NULL ? te->color : 0); +} + +rpm_color_t rpmteSetColor(rpmte te, rpm_color_t color) +{ + rpm_color_t ocolor = 0; + if (te != NULL) { + ocolor = te->color; + te->color = color; + } + return ocolor; +} + +ARGV_const_t rpmteCollections(rpmte te) +{ + return (te != NULL) ? te->collections : NULL; +} + +int rpmteHasCollection(rpmte te, const char *collname) +{ + return (argvSearch(rpmteCollections(te), collname, NULL) != NULL); +} + +int rpmteAddToLastInCollectionAdd(rpmte te, const char *collname) +{ + if (te != NULL) { + argvAdd(&te->lastInCollectionsAdd, collname); + argvSort(te->lastInCollectionsAdd, NULL); + return 0; + } + return -1; +} + +int rpmteAddToLastInCollectionAny(rpmte te, const char *collname) +{ + if (te != NULL) { + argvAdd(&te->lastInCollectionsAny, collname); + argvSort(te->lastInCollectionsAny, NULL); + return 0; + } + return -1; +} + +int rpmteAddToFirstInCollectionRemove(rpmte te, const char *collname) +{ + if (te != NULL) { + argvAdd(&te->firstInCollectionsRemove, collname); + argvSort(te->firstInCollectionsRemove, NULL); + return 0; + } + return -1; +} + +rpm_loff_t rpmtePkgFileSize(rpmte te) +{ + return (te != NULL ? te->pkgFileSize : 0); +} + +unsigned int rpmteHeaderSize(rpmte te) { + return (te != NULL ? te->headerSize : 0); +} + +rpmte rpmteParent(rpmte te) +{ + return (te != NULL ? te->parent : NULL); +} + +rpmte rpmteSetParent(rpmte te, rpmte pte) +{ + rpmte opte = NULL; + if (te != NULL) { + opte = te->parent; + te->parent = pte; + } + return opte; +} + +tsortInfo rpmteTSI(rpmte te) +{ + return te->tsi; +} + +void rpmteSetTSI(rpmte te, tsortInfo tsi) +{ + te->tsi = tsi; +} + +void rpmteSetDependsOn(rpmte te, rpmte depends) { + te->depends = depends; +} + +rpmte rpmteDependsOn(rpmte te) +{ + return te->depends; +} + +int rpmteDBOffset(rpmte te) +{ + return rpmteDBInstance(te); +} + +const char * rpmteEVR(rpmte te) +{ + return (te != NULL ? te->NEVR + strlen(te->name) + 1 : NULL); +} + +const char * rpmteNEVR(rpmte te) +{ + return (te != NULL ? te->NEVR : NULL); +} + +const char * rpmteNEVRA(rpmte te) +{ + return (te != NULL ? te->NEVRA : NULL); +} + +FD_t rpmteSetFd(rpmte te, FD_t fd) +{ + if (te != NULL) { + if (te->fd != NULL) + te->fd = fdFree(te->fd); + if (fd != NULL) + te->fd = fdLink(fd); + } + return NULL; +} + +fnpyKey rpmteKey(rpmte te) +{ + return (te != NULL ? te->key : NULL); +} + +rpmds rpmteDS(rpmte te, rpmTagVal tag) +{ + if (te == NULL) + return NULL; + + switch (tag) { + case RPMTAG_NAME: return te->thisds; + case RPMTAG_PROVIDENAME: return te->provides; + case RPMTAG_REQUIRENAME: return te->requires; + case RPMTAG_CONFLICTNAME: return te->conflicts; + case RPMTAG_OBSOLETENAME: return te->obsoletes; + case RPMTAG_ORDERNAME: return te->order; + default: break; + } + return NULL; +} + +rpmfi rpmteSetFI(rpmte te, rpmfi fi) +{ + if (te != NULL) { + te->fi = rpmfiFree(te->fi); + if (fi != NULL) + te->fi = rpmfiLink(fi); + } + return NULL; +} + +rpmfi rpmteFI(rpmte te) +{ + if (te == NULL) + return NULL; + + return te->fi; /* XXX take fi reference here? */ +} + +static void rpmteColorDS(rpmte te, rpmTag tag) +{ + rpmfi fi = rpmteFI(te); + rpmds ds = rpmteDS(te, tag); + char deptype = 'R'; + char mydt; + const uint32_t * ddict; + rpm_color_t * colors; + rpm_color_t val; + int Count; + unsigned ix; + int ndx, i; + + if (!(te && (Count = rpmdsCount(ds)) > 0 && rpmfiFC(fi) > 0)) + return; + + switch (tag) { + default: + return; + break; + case RPMTAG_PROVIDENAME: + deptype = 'P'; + break; + case RPMTAG_REQUIRENAME: + deptype = 'R'; + break; + } + + colors = xcalloc(Count, sizeof(*colors)); + + /* Calculate dependency color. */ + fi = rpmfiInit(fi, 0); + if (fi != NULL) + while (rpmfiNext(fi) >= 0) { + val = rpmfiFColor(fi); + ddict = NULL; + ndx = rpmfiFDepends(fi, &ddict); + if (ddict != NULL) + while (ndx-- > 0) { + ix = *ddict++; + mydt = ((ix >> 24) & 0xff); + if (mydt != deptype) + continue; + ix &= 0x00ffffff; +assert (ix < Count); + colors[ix] |= val; + } + } + + /* Set color values in dependency set. */ + ds = rpmdsInit(ds); + while ((i = rpmdsNext(ds)) >= 0) { + val = colors[i]; + te->color |= val; + (void) rpmdsSetColor(ds, val); + } + free(colors); +} + +static Header rpmteDBHeader(rpmte te) +{ + Header h = NULL; + rpmdbMatchIterator mi; + + mi = rpmtsInitIterator(te->ts, RPMDBI_PACKAGES, + &te->db_instance, sizeof(te->db_instance)); + /* iterator returns weak refs, grab hold of header */ + if ((h = rpmdbNextIterator(mi))) + h = headerLink(h); + mi = rpmdbFreeIterator(mi); + return h; +} + +static Header rpmteFDHeader(rpmte te) +{ + Header h = NULL; + te->fd = rpmtsNotify(te->ts, te, RPMCALLBACK_INST_OPEN_FILE, 0, 0); + if (te->fd != NULL) { + rpmVSFlags ovsflags; + rpmRC pkgrc; + + ovsflags = rpmtsSetVSFlags(te->ts, + rpmtsVSFlags(te->ts) | RPMVSF_NEEDPAYLOAD); + pkgrc = rpmReadPackageFile(te->ts, te->fd, rpmteNEVRA(te), &h); + rpmtsSetVSFlags(te->ts, ovsflags); + switch (pkgrc) { + default: + rpmteClose(te, 1); + break; + case RPMRC_NOTTRUSTED: + case RPMRC_NOKEY: + case RPMRC_OK: + break; + } + } + return h; +} + +static int rpmteOpen(rpmte te, int reload_fi) +{ + Header h = NULL; + if (te == NULL || te->ts == NULL || rpmteFailed(te)) + goto exit; + + rpmteSetHeader(te, NULL); + + switch (rpmteType(te)) { + case TR_ADDED: + h = rpmteDBInstance(te) ? rpmteDBHeader(te) : rpmteFDHeader(te); + break; + case TR_REMOVED: + h = rpmteDBHeader(te); + break; + } + if (h != NULL) { + if (reload_fi) { + te->fi = getFI(te, h); + } + + rpmteSetHeader(te, h); + headerFree(h); + } + +exit: + return (h != NULL); +} + +static int rpmteClose(rpmte te, int reset_fi) +{ + if (te == NULL || te->ts == NULL) + return 0; + + switch (te->type) { + case TR_ADDED: + if (te->fd) { + rpmtsNotify(te->ts, te, RPMCALLBACK_INST_CLOSE_FILE, 0, 0); + te->fd = NULL; + } + break; + case TR_REMOVED: + /* eventually we'll want notifications for erase open too */ + break; + } + rpmteSetHeader(te, NULL); + if (reset_fi) { + rpmteSetFI(te, NULL); + } + return 1; +} + +FD_t rpmtePayload(rpmte te) +{ + FD_t payload = NULL; + if (te->fd && te->h) { + const char *compr = headerGetString(te->h, RPMTAG_PAYLOADCOMPRESSOR); + char *ioflags = rstrscat(NULL, "r.", compr ? compr : "gzip", NULL); + payload = Fdopen(fdDup(Fileno(te->fd)), ioflags); + free(ioflags); + } + return payload; +} + +static int rpmteMarkFailed(rpmte te) +{ + rpmtsi pi = rpmtsiInit(te->ts); + rpmte p; + + te->failed++; + /* XXX we can do a much better here than this... */ + while ((p = rpmtsiNext(pi, TR_REMOVED))) { + if (rpmteDependsOn(p) == te) { + p->failed++; + } + } + rpmtsiFree(pi); + return te->failed; +} + +int rpmteFailed(rpmte te) +{ + return (te != NULL) ? te->failed : -1; +} + +static int rpmteHaveTransScript(rpmte te, rpmTagVal tag) +{ + int rc = 0; + if (tag == RPMTAG_PRETRANS) { + rc = (te->transscripts & RPMTE_HAVE_PRETRANS); + } else if (tag == RPMTAG_POSTTRANS) { + rc = (te->transscripts & RPMTE_HAVE_POSTTRANS); + } + return rc; +} + +rpmps rpmteProblems(rpmte te) +{ + return (te != NULL) ? rpmpsLink(te->probs) : NULL; +} + +void rpmteCleanProblems(rpmte te) +{ + if (te != NULL && te->probs != NULL) { + te->probs = rpmpsFree(te->probs); + } +} + +static void appendProblem(rpmte te, rpmProblemType type, + fnpyKey key, const char * altNEVR, + const char * str, uint64_t number) +{ + rpmProblem o; + rpmProblem p = rpmProblemCreate(type, te->NEVRA, key, altNEVR, str, number); + rpmpsi psi = rpmpsInitIterator(te->probs); + + /* Only add new, unique problems to the set */ + while ((o = rpmpsiNext(psi))) { + if (rpmProblemCompare(p, o) == 0) + break; + } + rpmpsFreeIterator(psi); + + if (o == NULL) { + if (te->probs == NULL) + te->probs = rpmpsCreate(); + rpmpsAppendProblem(te->probs, p); + } + rpmProblemFree(p); +} + +void rpmteAddProblem(rpmte te, rpmProblemType type, + const char *altNEVR, const char *str, uint64_t number) +{ + if (te != NULL) { + appendProblem(te, type, rpmteKey(te), altNEVR, str, number); + } +} + +void rpmteAddDepProblem(rpmte te, const char * altNEVR, rpmds ds, + fnpyKey * suggestedKeys) +{ + if (te != NULL) { + const char * DNEVR = rpmdsDNEVR(ds); + rpmProblemType type; + fnpyKey key = (suggestedKeys ? suggestedKeys[0] : NULL); + + switch ((unsigned)DNEVR[0]) { + case 'O': type = RPMPROB_OBSOLETES; break; + case 'C': type = RPMPROB_CONFLICT; break; + default: + case 'R': type = RPMPROB_REQUIRES; break; + } + + appendProblem(te, type, key, altNEVR, DNEVR+2, rpmdsInstance(ds)); + } +} + +const char * rpmteTypeString(rpmte te) +{ + switch(rpmteType(te)) { + case TR_ADDED: return _("install"); + case TR_REMOVED: return _("erase"); + default: return "???"; + } +} + +rpmfs rpmteGetFileStates(rpmte te) { + return te->fs; +} + +rpmRC rpmteSetupCollectionPlugins(rpmte te) +{ + ARGV_const_t colls = rpmteCollections(te); + rpmPlugins plugins = rpmtsPlugins(te->ts); + rpmRC rc = RPMRC_OK; + + if (!colls) { + return rc; + } + + rpmteOpen(te, 0); + for (; colls && *colls; colls++) { + if (!rpmpluginsPluginAdded(plugins, *colls)) { + rc = rpmpluginsAddCollectionPlugin(plugins, *colls); + if (rc != RPMRC_OK) { + break; + } + } + rc = rpmpluginsCallOpenTE(plugins, *colls, te); + if (rc != RPMRC_OK) { + break; + } + } + rpmteClose(te, 0); + + return rc; +} + +static rpmRC rpmteRunAllCollections(rpmte te, rpmPluginHook hook) +{ + ARGV_const_t colls; + rpmRC(*collHook) (rpmPlugins, const char *); + rpmRC rc = RPMRC_OK; + + if (rpmtsFlags(te->ts) & RPMTRANS_FLAG_NOCOLLECTIONS) { + goto exit; + } + + switch (hook) { + case PLUGINHOOK_COLL_POST_ADD: + colls = te->lastInCollectionsAdd; + collHook = rpmpluginsCallCollectionPostAdd; + break; + case PLUGINHOOK_COLL_POST_ANY: + colls = te->lastInCollectionsAny; + collHook = rpmpluginsCallCollectionPostAny; + break; + case PLUGINHOOK_COLL_PRE_REMOVE: + colls = te->firstInCollectionsRemove; + collHook = rpmpluginsCallCollectionPreRemove; + break; + default: + goto exit; + } + + for (; colls && *colls; colls++) { + rc = collHook(rpmtsPlugins(te->ts), *colls); + } + + exit: + return rc; +} + +int rpmteProcess(rpmte te, pkgGoal goal) +{ + /* Only install/erase resets pkg file info */ + int scriptstage = (goal != PKG_INSTALL && goal != PKG_ERASE); + int reset_fi = (scriptstage == 0); + int failed = 1; + + /* Dont bother opening for elements without pre/posttrans scripts */ + if (goal == PKG_PRETRANS || goal == PKG_POSTTRANS) { + if (!rpmteHaveTransScript(te, goal)) { + return 0; + } + } + + if (!scriptstage) { + rpmteRunAllCollections(te, PLUGINHOOK_COLL_PRE_REMOVE); + } + + if (rpmteOpen(te, reset_fi)) { + failed = rpmpsmRun(te->ts, te, goal); + rpmteClose(te, reset_fi); + } + + if (!scriptstage) { + rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ADD); + rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ANY); + } + + /* XXX should %pretrans failure fail the package install? */ + if (failed && !scriptstage) { + failed = rpmteMarkFailed(te); + } + + return failed; +} diff --git a/lib/rpmte.h b/lib/rpmte.h new file mode 100644 index 0000000..a66c1e9 --- /dev/null +++ b/lib/rpmte.h @@ -0,0 +1,262 @@ +#ifndef H_RPMTE +#define H_RPMTE + +/** \ingroup rpmts rpmte + * \file lib/rpmte.h + * Structures used for an "rpmte" transaction element. + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmte + * Transaction element type. + */ +typedef enum rpmElementType_e { + TR_ADDED = (1 << 0), /*!< Package will be installed. */ + TR_REMOVED = (1 << 1) /*!< Package will be removed. */ +} rpmElementType; + +typedef rpmFlags rpmElementTypes; + +/** \ingroup rpmte + * Retrieve header from transaction element. + * @param te transaction element + * @return header (new reference) + */ +Header rpmteHeader(rpmte te); + +/** \ingroup rpmte + * Save header into transaction element. + * @param te transaction element + * @param h header + * @return NULL always + */ +Header rpmteSetHeader(rpmte te, Header h); + +/** \ingroup rpmte + * Retrieve type of transaction element. + * @param te transaction element + * @return type + */ +rpmElementType rpmteType(rpmte te); + +/** \ingroup rpmte + * Retrieve name string of transaction element. + * @param te transaction element + * @return name string + */ +const char * rpmteN(rpmte te); + +/** \ingroup rpmte + * Retrieve epoch string of transaction element. + * @param te transaction element + * @return epoch string + */ +const char * rpmteE(rpmte te); + +/** \ingroup rpmte + * Retrieve version string of transaction element. + * @param te transaction element + * @return version string + */ +const char * rpmteV(rpmte te); + +/** \ingroup rpmte + * Retrieve release string of transaction element. + * @param te transaction element + * @return release string + */ +const char * rpmteR(rpmte te); + +/** \ingroup rpmte + * Retrieve arch string of transaction element. + * @param te transaction element + * @return arch string + */ +const char * rpmteA(rpmte te); + +/** \ingroup rpmte + * Retrieve os string of transaction element. + * @param te transaction element + * @return os string + */ +const char * rpmteO(rpmte te); + +/** \ingroup rpmte + * Retrieve isSource attribute of transaction element. + * @param te transaction element + * @return isSource attribute + */ +int rpmteIsSource(rpmte te); + +/** \ingroup rpmte + * Retrieve color bits of transaction element. + * @param te transaction element + * @return color bits + */ +rpm_color_t rpmteColor(rpmte te); + +/** \ingroup rpmte + * Set color bits of transaction element. + * @param te transaction element + * @param color new color bits + * @return previous color bits + */ +rpm_color_t rpmteSetColor(rpmte te, rpm_color_t color); + +/** \ingroup rpmte + * Retrieve last instance installed to the database. + * @param te transaction element + * @return last install instance. + */ +unsigned int rpmteDBInstance(rpmte te); + +/** \ingroup rpmte + * Set last instance installed to the database. + * @param te transaction element + * @param instance Database instance of last install element. + * @return last install instance. + */ +void rpmteSetDBInstance(rpmte te, unsigned int instance); + +/** \ingroup rpmte + * Retrieve size in bytes of package file. + * @todo Signature header is estimated at 256b. + * @param te transaction element + * @return size in bytes of package file. + */ +rpm_loff_t rpmtePkgFileSize(rpmte te); + +/** \ingroup rpmte + * Retrieve parent transaction element. + * @param te transaction element + * @return parent transaction element + */ +rpmte rpmteParent(rpmte te); + +/** \ingroup rpmte + * Set parent transaction element. + * @param te transaction element + * @param pte new parent transaction element + * @return previous parent transaction element + */ +rpmte rpmteSetParent(rpmte te, rpmte pte); + +/** \ingroup rpmte + * Return problem set info of transaction element. + * @param te transaction element + * @return problem set (or NULL if none) + */ +rpmps rpmteProblems(rpmte te); + +/** \ingroup rpmte + * Destroy problem set info of transaction element. + * @param te transaction element + */ +void rpmteCleanProblems(rpmte te); + +/** \ingroup rpmte + * Destroy dependency set info of transaction element. + * @param te transaction element + */ +void rpmteCleanDS(rpmte te); + +/** \ingroup rpmte + * Set dependent element of TR_REMOVED transaction element. + * @param te transaction element + * @param depends dependent transaction element + */ +void rpmteSetDependsOn(rpmte te, rpmte depends); + +/** \ingroup rpmte + * Retrieve dependent element of TR_REMOVED transaction element. + * @param te transaction element + * @return dependent transaction element + */ +rpmte rpmteDependsOn(rpmte te); + +/** \ingroup rpmte + * Retrieve rpmdb instance of TR_REMOVED transaction element. + * @param te transaction element + * @return rpmdb instance + */ +int rpmteDBOffset(rpmte te); + +/** \ingroup rpmte + * Retrieve [epoch:]version-release string from transaction element. + * @param te transaction element + * @return [epoch:]version-release string + */ +const char * rpmteEVR(rpmte te); + +/** \ingroup rpmte + * Retrieve name-[epoch:]version-release string from transaction element. + * @param te transaction element + * @return name-[epoch:]version-release string + */ +const char * rpmteNEVR(rpmte te); + +/** \ingroup rpmte + * Retrieve name-[epoch:]version-release.arch string from transaction element. + * @param te transaction element + * @return name-[epoch:]version-release.arch string + */ +const char * rpmteNEVRA(rpmte te); + +/** \ingroup rpmte + * Retrieve key from transaction element. + * @param te transaction element + * @return key + */ +fnpyKey rpmteKey(rpmte te); + +/** \ingroup rpmte + * Return failure status of transaction element. + * If the element itself failed, this is 1, larger count means one of + * it's parents failed. + * @param te transaction element + * @return number of failures for this transaction element + */ +int rpmteFailed(rpmte te); + +/** \ingroup rpmte + * Retrieve dependency tag set from transaction element. + * @param te transaction element + * @param tag dependency tag + * @return dependency tag set + */ +rpmds rpmteDS(rpmte te, rpmTagVal tag); + +/** \ingroup rpmte + * Retrieve file info tag set from transaction element. + * @param te transaction element + * @return file info tag set + */ +rpmfi rpmteFI(rpmte te); + +/** \ingroup rpmte + * Retrieve list of collections + * @param te transaction element + * @return list of collections + */ +ARGV_const_t rpmteCollections(rpmte te); + +/** \ingroup rpmte + * Determine a transaction element is part of a collection + * @param te transaction element + * @param collname collection name + * @return 1 if collname is part of a collection, 0 if not + */ +int rpmteHasCollection(rpmte te, const char * collname); + + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMTE */ diff --git a/lib/rpmte_internal.h b/lib/rpmte_internal.h new file mode 100644 index 0000000..8a8df2a --- /dev/null +++ b/lib/rpmte_internal.h @@ -0,0 +1,154 @@ +#ifndef _RPMTE_INTERNAL_H +#define _RPMTE_INTERNAL_H + +#include +#include +#include "lib/rpmfs.h" + +typedef enum pkgGoal_e { + PKG_NONE = 0, + /* permit using rpmteType() for install + erase goals */ + PKG_INSTALL = TR_ADDED, + PKG_ERASE = TR_REMOVED, + /* permit using scriptname for these for now... */ + PKG_VERIFY = RPMTAG_VERIFYSCRIPT, + PKG_PRETRANS = RPMTAG_PRETRANS, + PKG_POSTTRANS = RPMTAG_POSTTRANS, +} pkgGoal; + +/** \ingroup rpmte + * Transaction element ordering chain linkage. + */ +typedef struct tsortInfo_s * tsortInfo; + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmte + * Create a transaction element. + * @param ts transaction set + * @param h header + * @param type TR_ADDED/TR_REMOVED + * @param key (TR_ADDED) package retrieval key (e.g. file name) + * @param relocs (TR_ADDED) package file relocations + * @return new transaction element + */ +RPM_GNUC_INTERNAL +rpmte rpmteNew(rpmts ts, Header h, rpmElementType type, fnpyKey key, + rpmRelocation * relocs); + +/** \ingroup rpmte + * Destroy a transaction element. + * @param te transaction element + * @return NULL always + */ +RPM_GNUC_INTERNAL +rpmte rpmteFree(rpmte te); + +RPM_GNUC_INTERNAL +rpmfi rpmteSetFI(rpmte te, rpmfi fi); + +RPM_GNUC_INTERNAL +FD_t rpmteSetFd(rpmte te, FD_t fd); + +RPM_GNUC_INTERNAL +FD_t rpmtePayload(rpmte te); + +RPM_GNUC_INTERNAL +int rpmteProcess(rpmte te, pkgGoal goal); + +RPM_GNUC_INTERNAL +void rpmteAddProblem(rpmte te, rpmProblemType type, + const char *altNEVR, const char *str, uint64_t number); + +RPM_GNUC_INTERNAL +void rpmteAddDepProblem(rpmte te, const char * pkgNEVR, rpmds ds, + fnpyKey * suggestedKeys); + +RPM_GNUC_INTERNAL +const char * rpmteTypeString(rpmte te); + +RPM_GNUC_INTERNAL +tsortInfo rpmteTSI(rpmte te); + +RPM_GNUC_INTERNAL +void rpmteSetTSI(rpmte te, tsortInfo tsi); + +/* XXX should be internal too but build code needs for now... */ +rpmfs rpmteGetFileStates(rpmte te); + +/* XXX here for now... */ +/** + * Relocate files in header. + * @todo multilib file dispositions need to be checked. + * @param relocations relocations + * @param numRelocations number of relocations + * @param fs file state set + * @param h package header to relocate + */ +RPM_GNUC_INTERNAL +void rpmRelocateFileList(rpmRelocation *relocs, int numRelocations, rpmfs fs, Header h); + +/** \ingroup rpmte + * Retrieve size in bytes of package header. + * @param te transaction element + * @return size in bytes of package file. + */ +RPM_GNUC_INTERNAL +unsigned int rpmteHeaderSize(rpmte te); + +/** + * Package state machine driver. + * @param ts transaction set + * @param te transaction element + * @param goal state machine goal + * @return 0 on success + */ +RPM_GNUC_INTERNAL +rpmRC rpmpsmRun(rpmts ts, rpmte te, pkgGoal goal); + +/** \ingroup rpmte + * Add a collection to the list of last collections for the installation + * section of a transaction element + * @param te transaction element + * @param collname collection name + * @return 0 on success, non-zero on error + */ +RPM_GNUC_INTERNAL +int rpmteAddToLastInCollectionAdd(rpmte te, const char * collname); + +/** \ingroup rpmte + * Add a collection to the list of last collections for the installation + * or removal section of a transaction element + * @param te transaction element + * @param collname collection name + * @return 0 on success, non-zero on error + */ +RPM_GNUC_INTERNAL +int rpmteAddToLastInCollectionAny(rpmte te, const char * collname); + +/** \ingroup rpmte + * Add a collection to the list of first collections for the removal + * section of a transaction element + * @param te transaction element + * @param collname collection name + * @return 0 on success, non-zero on error + */ +RPM_GNUC_INTERNAL +int rpmteAddToFirstInCollectionRemove(rpmte te, const char * collname); + +/** \ingroup rpmte + * Sends the open te plugin hook for each plugins with the transaction element open + * @param te transaction element + * @return 0 on success, non-zero on error + */ +RPM_GNUC_INTERNAL +rpmRC rpmteSetupCollectionPlugins(rpmte te); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMTE_INTERNAL_H */ + diff --git a/lib/rpmts.c b/lib/rpmts.c new file mode 100644 index 0000000..d782ecf --- /dev/null +++ b/lib/rpmts.c @@ -0,0 +1,1036 @@ +/** \ingroup rpmdep + * \file lib/rpmts.c + * Routine(s) to handle a "rpmts" transaction sets. + */ +#include "system.h" + +#include +#include + +#include +#include /* rpmReadPackage etc */ +#include +#include /* rpmtsOpenDB() needs rpmGetPath */ +#include +#include + +#include +#include +#include +#include +#include + +#include "rpmio/digest.h" +#include "lib/rpmal.h" +#include "lib/rpmchroot.h" +#include "lib/rpmplugins.h" +#include "lib/rpmts_internal.h" +#include "lib/rpmte_internal.h" +#include "lib/misc.h" + +#include "debug.h" + +/** + * Iterator across transaction elements, forward on install, backward on erase. + */ +struct rpmtsi_s { + rpmts ts; /*!< transaction set. */ + int oc; /*!< iterator index. */ +}; + +static void loadKeyring(rpmts ts); + +int _rpmts_stats = 0; + +static rpmts rpmtsUnlink(rpmts ts) +{ + if (ts) + ts->nrefs--; + return NULL; +} + +rpmts rpmtsLink(rpmts ts) +{ + if (ts) + ts->nrefs++; + return ts; +} + +int rpmtsCloseDB(rpmts ts) +{ + int rc = 0; + + if (ts->rdb != NULL) { + (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_DBGET), + rpmdbOp(ts->rdb, RPMDB_OP_DBGET)); + (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_DBPUT), + rpmdbOp(ts->rdb, RPMDB_OP_DBPUT)); + (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_DBDEL), + rpmdbOp(ts->rdb, RPMDB_OP_DBDEL)); + rc = rpmdbClose(ts->rdb); + ts->rdb = NULL; + } + return rc; +} + +int rpmtsOpenDB(rpmts ts, int dbmode) +{ + int rc = 0; + + if (ts->rdb != NULL && ts->dbmode == dbmode) + return 0; + + (void) rpmtsCloseDB(ts); + + /* XXX there's a potential db lock race here. */ + + ts->dbmode = dbmode; + rc = rpmdbOpen(ts->rootDir, &ts->rdb, ts->dbmode, 0644); + if (rc) { + char * dn = rpmGetPath(ts->rootDir, "%{_dbpath}", NULL); + rpmlog(RPMLOG_ERR, + _("cannot open Packages database in %s\n"), dn); + dn = _free(dn); + } + return rc; +} + +int rpmtsInitDB(rpmts ts, int dbmode) +{ + rpmlock lock = rpmtsAcquireLock(ts); + int rc = -1; + if (lock) + rc = rpmdbInit(ts->rootDir, dbmode); + rpmlockFree(lock); + return rc; +} + +int rpmtsGetDBMode(rpmts ts) +{ + assert(ts != NULL); + return (ts->dbmode); +} + +int rpmtsSetDBMode(rpmts ts, int dbmode) +{ + int rc = 1; + /* mode setting only permitted on non-open db */ + if (ts != NULL && rpmtsGetRdb(ts) == NULL) { + ts->dbmode = dbmode; + rc = 0; + } + return rc; +} + + +int rpmtsRebuildDB(rpmts ts) +{ + int rc = -1; + rpmlock lock = NULL; + + /* Cannot do this on a populated transaction set */ + if (rpmtsNElements(ts) > 0) + return -1; + + lock = rpmtsAcquireLock(ts); + if (lock) { + if (!(ts->vsflags & RPMVSF_NOHDRCHK)) + rc = rpmdbRebuild(ts->rootDir, ts, headerCheck); + else + rc = rpmdbRebuild(ts->rootDir, NULL, NULL); + rpmlockFree(lock); + } + return rc; +} + +int rpmtsVerifyDB(rpmts ts) +{ + int rc = -1; + rpmlock lock = rpmtsAcquireLock(ts); + if (lock) { + rc = rpmdbVerify(ts->rootDir); + rpmlockFree(lock); + } + return rc; +} + +/* keyp might no be defined. */ +rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag, + const void * keyp, size_t keylen) +{ + rpmdbMatchIterator mi = NULL; + const char * arch = NULL; + char *tmp = NULL; + int xx; + + if (ts == NULL) + return NULL; + + if (ts && ts->keyring == NULL) + loadKeyring(ts); + + if (ts->rdb == NULL && rpmtsOpenDB(ts, ts->dbmode)) + return NULL; + + /* Parse out "N(EVR).A" tokens from a label key. */ + if (rpmtag == RPMDBI_LABEL && keyp != NULL) { + const char *se, *s = keyp; + char *t; + size_t slen = strlen(s); + int level = 0; + int c; + + tmp = xmalloc(slen+1); + keyp = t = tmp; + while ((c = *s++) != '\0') { + switch (c) { + default: + *t++ = c; + break; + case '(': + /* XXX Fail if nested parens. */ + if (level++ != 0) { + rpmlog(RPMLOG_ERR, _("extra '(' in package label: %s\n"), (const char*)keyp); + goto exit; + } + /* Parse explicit epoch. */ + for (se = s; *se && risdigit(*se); se++) + {}; + if (*se == ':') { + /* XXX skip explicit epoch's (for now) */ + *t++ = '-'; + s = se + 1; + } else { + /* No Epoch: found. Convert '(' to '-' and chug. */ + *t++ = '-'; + } + break; + case ')': + /* XXX Fail if nested parens. */ + if (--level != 0) { + rpmlog(RPMLOG_ERR, _("missing '(' in package label: %s\n"), (const char*)keyp); + goto exit; + } + /* Don't copy trailing ')' */ + break; + } + } + if (level) { + rpmlog(RPMLOG_ERR, _("missing ')' in package label: %s\n"), (const char*)keyp); + goto exit; + } + *t = '\0'; + t = (char *) keyp; + t = strrchr(t, '.'); + /* Is this a valid ".arch" suffix? */ + if (t != NULL && rpmIsKnownArch(t+1)) { + *t++ = '\0'; + arch = t; + } + } + + mi = rpmdbInitIterator(ts->rdb, rpmtag, keyp, keylen); + + /* Verify header signature/digest during retrieve (if not disabled). */ + if (mi && !(ts->vsflags & RPMVSF_NOHDRCHK)) + (void) rpmdbSetHdrChk(mi, ts, headerCheck); + + /* Select specified arch only. */ + if (arch != NULL) + xx = rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_DEFAULT, arch); + +exit: + free(tmp); + + return mi; +} + +rpmKeyring rpmtsGetKeyring(rpmts ts, int autoload) +{ + rpmKeyring keyring = NULL; + if (ts) { + if (ts->keyring == NULL && autoload) { + loadKeyring(ts); + } + keyring = rpmKeyringLink(ts->keyring); + } + return keyring; +} + +int rpmtsSetKeyring(rpmts ts, rpmKeyring keyring) +{ + /* + * Should we permit switching keyring on the fly? For now, require + * rpmdb isn't open yet (fairly arbitrary limitation)... + */ + if (ts == NULL || rpmtsGetRdb(ts) != NULL) + return -1; + + rpmKeyringFree(ts->keyring); + ts->keyring = rpmKeyringLink(keyring); + return 0; +} + +static int loadKeyringFromFiles(rpmts ts) +{ + ARGV_t files = NULL; + /* XXX TODO: deal with chroot path issues */ + char *pkpath = rpmGetPath(ts->rootDir, "%{_keyringpath}/*.key", NULL); + int nkeys = 0; + + rpmlog(RPMLOG_DEBUG, "loading keyring from pubkeys in %s\n", pkpath); + if (rpmGlob(pkpath, NULL, &files)) { + rpmlog(RPMLOG_DEBUG, "couldn't find any keys in %s\n", pkpath); + goto exit; + } + + for (char **f = files; *f; f++) { + rpmPubkey key = rpmPubkeyRead(*f); + if (!key) { + rpmlog(RPMLOG_ERR, _("%s: reading of public key failed.\n"), *f); + continue; + } + if (rpmKeyringAddKey(ts->keyring, key) == 0) { + nkeys++; + rpmlog(RPMLOG_DEBUG, "added key %s to keyring\n", *f); + } + rpmPubkeyFree(key); + } +exit: + free(pkpath); + argvFree(files); + return nkeys; +} + +static int loadKeyringFromDB(rpmts ts) +{ + Header h; + rpmdbMatchIterator mi; + int nkeys = 0; + + rpmlog(RPMLOG_DEBUG, "loading keyring from rpmdb\n"); + mi = rpmtsInitIterator(ts, RPMDBI_NAME, "gpg-pubkey", 0); + while ((h = rpmdbNextIterator(mi)) != NULL) { + struct rpmtd_s pubkeys; + const char *key; + + if (!headerGet(h, RPMTAG_PUBKEYS, &pubkeys, HEADERGET_MINMEM)) + continue; + + while ((key = rpmtdNextString(&pubkeys))) { + uint8_t *pkt; + size_t pktlen; + + if (b64decode(key, (void **) &pkt, &pktlen) == 0) { + rpmPubkey key = rpmPubkeyNew(pkt, pktlen); + if (rpmKeyringAddKey(ts->keyring, key) == 0) { + char *nvr = headerGetAsString(h, RPMTAG_NVR); + rpmlog(RPMLOG_DEBUG, "added key %s to keyring\n", nvr); + free(nvr); + nkeys++; + } + rpmPubkeyFree(key); + free(pkt); + } + } + rpmtdFreeData(&pubkeys); + } + rpmdbFreeIterator(mi); + + return nkeys; +} + +static void loadKeyring(rpmts ts) +{ + ts->keyring = rpmKeyringNew(); + if (loadKeyringFromFiles(ts) == 0) { + if (loadKeyringFromDB(ts) > 0) { + /* XXX make this a warning someday... */ + rpmlog(RPMLOG_DEBUG, "Using legacy gpg-pubkey(s) from rpmdb\n"); + } + } +} + +/* Build pubkey header. */ +static int makePubkeyHeader(rpmts ts, rpmPubkey key, Header h) +{ + const char * afmt = "%{pubkeys:armor}"; + const char * group = "Public Keys"; + const char * license = "pubkey"; + const char * buildhost = "localhost"; + rpmsenseFlags pflags = (RPMSENSE_KEYRING|RPMSENSE_EQUAL); + uint32_t zero = 0; + pgpDig dig = NULL; + pgpDigParams pubp = NULL; + char * d = NULL; + char * enc = NULL; + char * n = NULL; + char * u = NULL; + char * v = NULL; + char * r = NULL; + char * evr = NULL; + int rc = -1; + + if ((enc = rpmPubkeyBase64(key)) == NULL) + goto exit; + if ((dig = rpmPubkeyDig(key)) == NULL) + goto exit; + + /* Build header elements. */ + pubp = &dig->pubkey; + v = pgpHexStr(pubp->signid, sizeof(pubp->signid)); + r = pgpHexStr(pubp->time, sizeof(pubp->time)); + + rasprintf(&n, "gpg(%s)", v+8); + rasprintf(&u, "gpg(%s)", pubp->userid ? pubp->userid : "none"); + rasprintf(&evr, "%d:%s-%s", pubp->version, v, r); + + headerPutString(h, RPMTAG_PUBKEYS, enc); + + if ((d = headerFormat(h, afmt, NULL)) == NULL) + goto exit; + + headerPutString(h, RPMTAG_NAME, "gpg-pubkey"); + headerPutString(h, RPMTAG_VERSION, v+8); + headerPutString(h, RPMTAG_RELEASE, r); + headerPutString(h, RPMTAG_DESCRIPTION, d); + headerPutString(h, RPMTAG_GROUP, group); + headerPutString(h, RPMTAG_LICENSE, license); + headerPutString(h, RPMTAG_SUMMARY, u); + + headerPutUint32(h, RPMTAG_SIZE, &zero, 1); + + headerPutString(h, RPMTAG_PROVIDENAME, u); + headerPutString(h, RPMTAG_PROVIDEVERSION, evr); + headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pflags, 1); + + headerPutString(h, RPMTAG_PROVIDENAME, n); + headerPutString(h, RPMTAG_PROVIDEVERSION, evr); + headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pflags, 1); + + headerPutString(h, RPMTAG_RPMVERSION, RPMVERSION); + headerPutString(h, RPMTAG_BUILDHOST, buildhost); + headerPutString(h, RPMTAG_SOURCERPM, "(none)"); + + { rpm_tid_t tid = rpmtsGetTid(ts); + headerPutUint32(h, RPMTAG_INSTALLTIME, &tid, 1); + headerPutUint32(h, RPMTAG_INSTALLTID, &tid, 1); + headerPutUint32(h, RPMTAG_BUILDTIME, &tid, 1); + } + rc = 0; + +exit: + pgpFreeDig(dig); + free(n); + free(u); + free(v); + free(r); + free(evr); + free(enc); + free(d); + + return rc; +} + +rpmRC rpmtsImportPubkey(const rpmts ts, const unsigned char * pkt, size_t pktlen) +{ + Header h = headerNew(); + rpmRC rc = RPMRC_FAIL; /* assume failure */ + rpmPubkey pubkey = NULL; + rpmKeyring keyring = rpmtsGetKeyring(ts, 1); + int krc; + + if ((pubkey = rpmPubkeyNew(pkt, pktlen)) == NULL) + goto exit; + krc = rpmKeyringAddKey(keyring, pubkey); + if (krc < 0) + goto exit; + + /* If we dont already have the key, make a persistent record of it */ + if (krc == 0) { + if (makePubkeyHeader(ts, pubkey, h) != 0) + goto exit; + + /* Add header to database. */ + if (rpmtsOpenDB(ts, (O_RDWR|O_CREAT))) + goto exit; + if (rpmdbAdd(rpmtsGetRdb(ts), h) != 0) + goto exit; + } + rc = RPMRC_OK; + +exit: + /* Clean up. */ + headerFree(h); + rpmPubkeyFree(pubkey); + rpmKeyringFree(keyring); + return rc; +} + +int rpmtsSetSolveCallback(rpmts ts, + int (*solve) (rpmts ts, rpmds key, const void * data), + const void * solveData) +{ + int rc = 0; + + if (ts) { + ts->solve = solve; + ts->solveData = solveData; + } + return rc; +} + +int rpmtsSolve(rpmts ts, rpmds key) +{ + int rc = 1; /* assume not found */ + if (ts && ts->solve) { + rc = (*ts->solve)(ts, key, ts->solveData); + } + return rc; +} + +rpmps rpmtsProblems(rpmts ts) +{ + rpmps ps = rpmpsCreate(); + rpmtsi pi = rpmtsiInit(ts); + rpmte p; + + while ((p = rpmtsiNext(pi, 0)) != NULL) { + rpmps teprobs = rpmteProblems(p); + rpmpsMerge(ps, teprobs); + rpmpsFree(teprobs); + } + pi = rpmtsiFree(pi); + + /* Return NULL on no problems instead of an empty set */ + if (rpmpsNumProblems(ps) == 0) { + ps = rpmpsFree(ps); + } + + return ps; +} + +void rpmtsCleanProblems(rpmts ts) +{ + rpmte p; + rpmtsi pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) + rpmteCleanProblems(p); + pi = rpmtsiFree(pi); +} + +void rpmtsClean(rpmts ts) +{ + rpmtsi pi; rpmte p; + tsMembers tsmem = rpmtsMembers(ts); + + if (ts == NULL) + return; + + /* Clean up after dependency checks. */ + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) + rpmteCleanDS(p); + pi = rpmtsiFree(pi); + + tsmem->addedPackages = rpmalFree(tsmem->addedPackages); + + rpmtsCleanProblems(ts); +} + +/* hash comparison function */ +static int uintCmp(unsigned int a, unsigned int b) +{ + return (a != b); +} + +/* "hash"function*/ +static unsigned int uintId(unsigned int a) +{ + return a; +} + +void rpmtsEmpty(rpmts ts) +{ + tsMembers tsmem = rpmtsMembers(ts); + if (ts == NULL) + return; + + rpmtsClean(ts); + + for (int oc = 0; oc < tsmem->orderCount; oc++) { + tsmem->order[oc] = rpmteFree(tsmem->order[oc]); + } + + tsmem->orderCount = 0; + intHashEmpty(tsmem->removedPackages); + return; +} + +static void rpmtsPrintStat(const char * name, struct rpmop_s * op) +{ + static const unsigned int scale = (1000 * 1000); + if (op != NULL && op->count > 0) + fprintf(stderr, " %s %6d %6lu.%06lu MB %6lu.%06lu secs\n", + name, op->count, + (unsigned long)op->bytes/scale, (unsigned long)op->bytes%scale, + op->usecs/scale, op->usecs%scale); +} + +static void rpmtsPrintStats(rpmts ts) +{ + (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_TOTAL), 0); + + rpmtsPrintStat("total: ", rpmtsOp(ts, RPMTS_OP_TOTAL)); + rpmtsPrintStat("check: ", rpmtsOp(ts, RPMTS_OP_CHECK)); + rpmtsPrintStat("order: ", rpmtsOp(ts, RPMTS_OP_ORDER)); + rpmtsPrintStat("fingerprint: ", rpmtsOp(ts, RPMTS_OP_FINGERPRINT)); + rpmtsPrintStat("install: ", rpmtsOp(ts, RPMTS_OP_INSTALL)); + rpmtsPrintStat("erase: ", rpmtsOp(ts, RPMTS_OP_ERASE)); + rpmtsPrintStat("scriptlets: ", rpmtsOp(ts, RPMTS_OP_SCRIPTLETS)); + rpmtsPrintStat("compress: ", rpmtsOp(ts, RPMTS_OP_COMPRESS)); + rpmtsPrintStat("uncompress: ", rpmtsOp(ts, RPMTS_OP_UNCOMPRESS)); + rpmtsPrintStat("digest: ", rpmtsOp(ts, RPMTS_OP_DIGEST)); + rpmtsPrintStat("signature: ", rpmtsOp(ts, RPMTS_OP_SIGNATURE)); + rpmtsPrintStat("dbadd: ", rpmtsOp(ts, RPMTS_OP_DBADD)); + rpmtsPrintStat("dbremove: ", rpmtsOp(ts, RPMTS_OP_DBREMOVE)); + rpmtsPrintStat("dbget: ", rpmtsOp(ts, RPMTS_OP_DBGET)); + rpmtsPrintStat("dbput: ", rpmtsOp(ts, RPMTS_OP_DBPUT)); + rpmtsPrintStat("dbdel: ", rpmtsOp(ts, RPMTS_OP_DBDEL)); +} + +rpmts rpmtsFree(rpmts ts) +{ + tsMembers tsmem = rpmtsMembers(ts); + if (ts == NULL) + return NULL; + + if (ts->nrefs > 1) + return rpmtsUnlink(ts); + + rpmtsEmpty(ts); + + (void) rpmtsCloseDB(ts); + + tsmem->removedPackages = intHashFree(tsmem->removedPackages); + tsmem->order = _free(tsmem->order); + ts->members = _free(ts->members); + + ts->dsi = _free(ts->dsi); + + if (ts->scriptFd != NULL) { + ts->scriptFd = fdFree(ts->scriptFd); + ts->scriptFd = NULL; + } + ts->rootDir = _free(ts->rootDir); + ts->lockPath = _free(ts->lockPath); + + ts->keyring = rpmKeyringFree(ts->keyring); + ts->netsharedPaths = argvFree(ts->netsharedPaths); + ts->installLangs = argvFree(ts->installLangs); + + ts->plugins = rpmpluginsFree(ts->plugins); + + if (_rpmts_stats) + rpmtsPrintStats(ts); + + (void) rpmtsUnlink(ts); + + ts = _free(ts); + + return NULL; +} + +rpmVSFlags rpmtsVSFlags(rpmts ts) +{ + rpmVSFlags vsflags = 0; + if (ts != NULL) + vsflags = ts->vsflags; + return vsflags; +} + +rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags) +{ + rpmVSFlags ovsflags = 0; + if (ts != NULL) { + ovsflags = ts->vsflags; + ts->vsflags = vsflags; + } + return ovsflags; +} + +const char * rpmtsRootDir(rpmts ts) +{ + return ts ? ts->rootDir : NULL; +} + +int rpmtsSetRootDir(rpmts ts, const char * rootDir) +{ + if (ts == NULL || (rootDir && rootDir[0] != '/')) { + return -1; + } + + ts->rootDir = _free(ts->rootDir); + /* Ensure clean path with a trailing slash */ + ts->rootDir = rootDir ? rpmGetPath(rootDir, NULL) : xstrdup("/"); + if (!rstreq(ts->rootDir, "/")) { + rstrcat(&ts->rootDir, "/"); + } + return 0; +} + +FD_t rpmtsScriptFd(rpmts ts) +{ + FD_t scriptFd = NULL; + if (ts != NULL) { + scriptFd = ts->scriptFd; + } + return scriptFd; +} + +void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd) +{ + + if (ts != NULL) { + if (ts->scriptFd != NULL) { + ts->scriptFd = fdFree(ts->scriptFd); + ts->scriptFd = NULL; + } + if (scriptFd != NULL) + ts->scriptFd = fdLink(scriptFd); + } +} + +struct selabel_handle * rpmtsSELabelHandle(rpmts ts) +{ +#if WITH_SELINUX + if (ts != NULL) { + return ts->selabelHandle; + } +#endif + return NULL; +} + +rpmRC rpmtsSELabelInit(rpmts ts, const char *path) +{ +#if WITH_SELINUX + if (ts == NULL || path == NULL) { + return RPMRC_FAIL; + } + + struct selinux_opt opts[] = { + {SELABEL_OPT_PATH, path} + }; + + if (ts->selabelHandle) { + rpmtsSELabelFini(ts); + } + ts->selabelHandle = selabel_open(SELABEL_CTX_FILE, opts, 1); + + if (!ts->selabelHandle) { + return RPMRC_FAIL; + } +#endif + return RPMRC_OK; +} + +void rpmtsSELabelFini(rpmts ts) +{ +#if WITH_SELINUX + if (ts && ts->selabelHandle) { + selabel_close(ts->selabelHandle); + ts->selabelHandle = NULL; + } +#endif +} + +rpm_tid_t rpmtsGetTid(rpmts ts) +{ + rpm_tid_t tid = (rpm_tid_t)-1; /* XXX -1 is time(2) error return. */ + if (ts != NULL) { + tid = ts->tid; + } + return tid; +} + +rpm_tid_t rpmtsSetTid(rpmts ts, rpm_tid_t tid) +{ + rpm_tid_t otid = (rpm_tid_t)-1; /* XXX -1 is time(2) error return. */ + if (ts != NULL) { + otid = ts->tid; + ts->tid = tid; + } + return otid; +} + +rpmdb rpmtsGetRdb(rpmts ts) +{ + rpmdb rdb = NULL; + if (ts != NULL) { + rdb = ts->rdb; + } + return rdb; +} + +void * rpmtsNotify(rpmts ts, rpmte te, + rpmCallbackType what, rpm_loff_t amount, rpm_loff_t total) +{ + void * ptr = NULL; + if (ts && ts->notify) { + Header h = NULL; + fnpyKey cbkey = NULL; + if (te) { + h = rpmteHeader(te); + cbkey = rpmteKey(te); + } + ptr = ts->notify(h, what, amount, total, cbkey, ts->notifyData); + + if (h) { + headerFree(h); /* undo rpmteHeader() ref */ + } + } + return ptr; +} + +int rpmtsNElements(rpmts ts) +{ + int nelements = 0; + tsMembers tsmem = rpmtsMembers(ts); + if (tsmem != NULL && tsmem->order != NULL) { + nelements = tsmem->orderCount; + } + return nelements; +} + +rpmte rpmtsElement(rpmts ts, int ix) +{ + rpmte te = NULL; + tsMembers tsmem = rpmtsMembers(ts); + if (tsmem != NULL && tsmem->order != NULL) { + if (ix >= 0 && ix < tsmem->orderCount) + te = tsmem->order[ix]; + } + return te; +} + +rpmprobFilterFlags rpmtsFilterFlags(rpmts ts) +{ + return (ts != NULL ? ts->ignoreSet : 0); +} + +rpmtransFlags rpmtsFlags(rpmts ts) +{ + return (ts != NULL ? ts->transFlags : 0); +} + +rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags) +{ + rpmtransFlags otransFlags = 0; + if (ts != NULL) { + otransFlags = ts->transFlags; + ts->transFlags = transFlags; + } + return otransFlags; +} + +rpm_color_t rpmtsColor(rpmts ts) +{ + return (ts != NULL ? ts->color : 0); +} + +rpm_color_t rpmtsSetColor(rpmts ts, rpm_color_t color) +{ + rpm_color_t ocolor = 0; + if (ts != NULL) { + ocolor = ts->color; + ts->color = color; + } + return ocolor; +} + +rpm_color_t rpmtsPrefColor(rpmts ts) +{ + return (ts != NULL ? ts->prefcolor : 0); +} + +rpm_color_t rpmtsSetPrefColor(rpmts ts, rpm_color_t color) +{ + rpm_color_t ocolor = 0; + if (ts != NULL) { + ocolor = ts->prefcolor; + ts->prefcolor = color; + } + return ocolor; +} + +rpmop rpmtsOp(rpmts ts, rpmtsOpX opx) +{ + rpmop op = NULL; + + if (ts != NULL && opx >= 0 && opx < RPMTS_OP_MAX) + op = ts->ops + opx; + return op; +} + +rpmPlugins rpmtsPlugins(rpmts ts) +{ + return (ts != NULL ? ts->plugins : NULL); +} + +int rpmtsSetNotifyCallback(rpmts ts, + rpmCallbackFunction notify, rpmCallbackData notifyData) +{ + if (ts != NULL) { + ts->notify = notify; + ts->notifyData = notifyData; + } + return 0; +} + +tsMembers rpmtsMembers(rpmts ts) +{ + return (ts != NULL) ? ts->members : NULL; +} + +rpmts rpmtsCreate(void) +{ + rpmts ts; + tsMembers tsmem; + + ts = xcalloc(1, sizeof(*ts)); + memset(&ts->ops, 0, sizeof(ts->ops)); + (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_TOTAL), -1); + ts->dsi = NULL; + + ts->solve = NULL; + ts->solveData = NULL; + + ts->rdb = NULL; + ts->dbmode = O_RDONLY; + + ts->scriptFd = NULL; + ts->tid = (rpm_tid_t) time(NULL); + + ts->color = rpmExpandNumeric("%{?_transaction_color}"); + ts->prefcolor = rpmExpandNumeric("%{?_prefer_color}")?:2; + + ts->netsharedPaths = NULL; + ts->installLangs = NULL; + { char *tmp = rpmExpand("%{_netsharedpath}", NULL); + if (tmp && *tmp != '%') { + argvSplit(&ts->netsharedPaths, tmp, ":"); + } + free(tmp); + + tmp = rpmExpand("%{_install_langs}", NULL); + if (tmp && *tmp != '%') { + ARGV_t langs = NULL; + argvSplit(&langs, tmp, ":"); + /* If we'll be installing all languages anyway, don't bother */ + for (ARGV_t l = langs; *l; l++) { + if (rstreq(*l, "all")) { + langs = argvFree(langs); + break; + } + } + ts->installLangs = langs; + } + free(tmp); + } + + tsmem = xcalloc(1, sizeof(*ts->members)); + tsmem->delta = 5; + tsmem->addedPackages = NULL; + tsmem->removedPackages = intHashCreate(128, uintId, uintCmp, NULL); + tsmem->orderAlloced = 0; + tsmem->orderCount = 0; + tsmem->order = NULL; + ts->members = tsmem; + + ts->rootDir = NULL; + ts->keyring = NULL; + + ts->selabelHandle = NULL; + + ts->nrefs = 0; + + ts->plugins = rpmpluginsNew(ts); + + return rpmtsLink(ts); +} + +rpmtsi rpmtsiFree(rpmtsi tsi) +{ + /* XXX watchout: a funky recursion segfaults here iff nrefs is wrong. */ + if (tsi) { + tsi->ts = rpmtsFree(tsi->ts); + _free(tsi); + } + return NULL; +} + +rpmtsi rpmtsiInit(rpmts ts) +{ + rpmtsi tsi = NULL; + + tsi = xcalloc(1, sizeof(*tsi)); + tsi->ts = rpmtsLink(ts); + tsi->oc = 0; + return tsi; +} + +/** + * Return next transaction element. + * @param tsi transaction element iterator + * @return transaction element, NULL on termination + */ +static +rpmte rpmtsiNextElement(rpmtsi tsi) +{ + rpmte te = NULL; + int oc = -1; + + if (tsi == NULL || tsi->ts == NULL || rpmtsNElements(tsi->ts) <= 0) + return te; + + if (tsi->oc < rpmtsNElements(tsi->ts)) oc = tsi->oc++; + if (oc != -1) + te = rpmtsElement(tsi->ts, oc); + return te; +} + +rpmte rpmtsiNext(rpmtsi tsi, rpmElementTypes types) +{ + rpmte te; + + while ((te = rpmtsiNextElement(tsi)) != NULL) { + if (types == 0 || (rpmteType(te) & types) != 0) + break; + } + return te; +} + +#define RPMLOCK_PATH LOCALSTATEDIR "/rpm/.rpm.lock" +rpmlock rpmtsAcquireLock(rpmts ts) +{ + static const char * const rpmlock_path_default = "%{?_rpmlock_path}"; + + if (ts->lockPath == NULL) { + const char *rootDir = rpmtsRootDir(ts); + char *t; + + if (!rootDir || rpmChrootDone()) + rootDir = "/"; + + t = rpmGenPath(rootDir, rpmlock_path_default, NULL); + if (t == NULL || *t == '\0' || *t == '%') { + free(t); + t = xstrdup(RPMLOCK_PATH); + } + ts->lockPath = xstrdup(t); + (void) rpmioMkpath(dirname(t), 0755, getuid(), getgid()); + free(t); + } + return rpmlockAcquire(ts->lockPath, _("transaction")); +} + diff --git a/lib/rpmts.h b/lib/rpmts.h new file mode 100644 index 0000000..0b8d970 --- /dev/null +++ b/lib/rpmts.h @@ -0,0 +1,582 @@ +#ifndef H_RPMTS +#define H_RPMTS + +/** \ingroup rpmts + * \file lib/rpmts.h + * Structures and prototypes used for an "rpmts" transaction set. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern int _rpmts_stats; + +/** \ingroup rpmts + * Bit(s) to control rpmtsRun() operation. + */ +enum rpmtransFlags_e { + RPMTRANS_FLAG_NONE = 0, + RPMTRANS_FLAG_TEST = (1 << 0), /*!< from --test */ + RPMTRANS_FLAG_BUILD_PROBS = (1 << 1), /*!< don't process payload */ + RPMTRANS_FLAG_NOSCRIPTS = (1 << 2), /*!< from --noscripts */ + RPMTRANS_FLAG_JUSTDB = (1 << 3), /*!< from --justdb */ + RPMTRANS_FLAG_NOTRIGGERS = (1 << 4), /*!< from --notriggers */ + RPMTRANS_FLAG_NODOCS = (1 << 5), /*!< from --excludedocs */ + RPMTRANS_FLAG_ALLFILES = (1 << 6), /*!< from --allfiles */ + /* bit 7 unused */ + RPMTRANS_FLAG_NOCONTEXTS = (1 << 8), /*!< from --nocontexts */ + /* bits 9-15 unused */ + RPMTRANS_FLAG_NOTRIGGERPREIN= (1 << 16), /*!< from --notriggerprein */ + RPMTRANS_FLAG_NOPRE = (1 << 17), /*!< from --nopre */ + RPMTRANS_FLAG_NOPOST = (1 << 18), /*!< from --nopost */ + RPMTRANS_FLAG_NOTRIGGERIN = (1 << 19), /*!< from --notriggerin */ + RPMTRANS_FLAG_NOTRIGGERUN = (1 << 20), /*!< from --notriggerun */ + RPMTRANS_FLAG_NOPREUN = (1 << 21), /*!< from --nopreun */ + RPMTRANS_FLAG_NOPOSTUN = (1 << 22), /*!< from --nopostun */ + RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23), /*!< from --notriggerpostun */ + /* bits 24-25 unused */ + RPMTRANS_FLAG_NOCOLLECTIONS = (1 << 26), /*!< from --nocollections */ + RPMTRANS_FLAG_NOMD5 = (1 << 27), /*!< from --nomd5 */ + RPMTRANS_FLAG_NOFILEDIGEST = (1 << 27), /*!< from --nofiledigest (alias to --nomd5) */ + /* bits 28-29 unused */ + RPMTRANS_FLAG_NOCONFIGS = (1 << 30), /*!< from --noconfigs */ + RPMTRANS_FLAG_DEPLOOPS = (1 << 31) /*!< from --deploops */ +}; + +typedef rpmFlags rpmtransFlags; + +#define _noTransScripts \ + ( RPMTRANS_FLAG_NOPRE | \ + RPMTRANS_FLAG_NOPOST | \ + RPMTRANS_FLAG_NOPREUN | \ + RPMTRANS_FLAG_NOPOSTUN \ + ) + +#define _noTransTriggers \ + ( RPMTRANS_FLAG_NOTRIGGERPREIN | \ + RPMTRANS_FLAG_NOTRIGGERIN | \ + RPMTRANS_FLAG_NOTRIGGERUN | \ + RPMTRANS_FLAG_NOTRIGGERPOSTUN \ + ) + +/* Avoid unnecessary breakage for stuff referring to these unused flags */ +#define RPMTRANS_FLAG_NOPAYLOAD 0 +#define RPMTRANS_FLAG_APPLYONLY 0 +#define RPMTRANS_FLAG_KEEPOBSOLETE 0 +#define RPMTRANS_FLAG_DIRSTASH 0 +#define RPMTRANS_FLAG_REPACKAGE 0 +#define RPMTRANS_FLAG_PKGCOMMIT 0 +#define RPMTRANS_FLAG_PKGUNDO 0 +#define RPMTRANS_FLAG_COMMIT 0 +#define RPMTRANS_FLAG_UNDO 0 +#define RPMTRANS_FLAG_REVERSE 0 +#define RPMTRANS_FLAG_NOSUGGEST 0 +#define RPMTRANS_FLAG_ADDINDEPS 0 + +/** \ingroup rpmts + * Bit(s) to control digest and signature verification. + */ +enum rpmVSFlags_e { + RPMVSF_DEFAULT = 0, + RPMVSF_NOHDRCHK = (1 << 0), + RPMVSF_NEEDPAYLOAD = (1 << 1), + /* bit(s) 2-7 unused */ + RPMVSF_NOSHA1HEADER = (1 << 8), + RPMVSF_NOMD5HEADER = (1 << 9), /* unimplemented */ + RPMVSF_NODSAHEADER = (1 << 10), + RPMVSF_NORSAHEADER = (1 << 11), /* unimplemented */ + /* bit(s) 12-15 unused */ + RPMVSF_NOSHA1 = (1 << 16), /* unimplemented */ + RPMVSF_NOMD5 = (1 << 17), + RPMVSF_NODSA = (1 << 18), + RPMVSF_NORSA = (1 << 19) + /* bit(s) 16-31 unused */ +}; + +typedef rpmFlags rpmVSFlags; + +#define _RPMVSF_NODIGESTS \ + ( RPMVSF_NOSHA1HEADER | \ + RPMVSF_NOMD5HEADER | \ + RPMVSF_NOSHA1 | \ + RPMVSF_NOMD5 ) + +#define _RPMVSF_NOSIGNATURES \ + ( RPMVSF_NODSAHEADER | \ + RPMVSF_NORSAHEADER | \ + RPMVSF_NODSA | \ + RPMVSF_NORSA ) + +#define _RPMVSF_NOHEADER \ + ( RPMVSF_NOSHA1HEADER | \ + RPMVSF_NOMD5HEADER | \ + RPMVSF_NODSAHEADER | \ + RPMVSF_NORSAHEADER ) + +#define _RPMVSF_NOPAYLOAD \ + ( RPMVSF_NOSHA1 | \ + RPMVSF_NOMD5 | \ + RPMVSF_NODSA | \ + RPMVSF_NORSA ) + +/** \ingroup rpmts + * Indices for timestamps. + */ +typedef enum rpmtsOpX_e { + RPMTS_OP_TOTAL = 0, + RPMTS_OP_CHECK = 1, + RPMTS_OP_ORDER = 2, + RPMTS_OP_FINGERPRINT = 3, + RPMTS_OP_INSTALL = 5, + RPMTS_OP_ERASE = 6, + RPMTS_OP_SCRIPTLETS = 7, + RPMTS_OP_COMPRESS = 8, + RPMTS_OP_UNCOMPRESS = 9, + RPMTS_OP_DIGEST = 10, + RPMTS_OP_SIGNATURE = 11, + RPMTS_OP_DBADD = 12, + RPMTS_OP_DBREMOVE = 13, + RPMTS_OP_DBGET = 14, + RPMTS_OP_DBPUT = 15, + RPMTS_OP_DBDEL = 16, + RPMTS_OP_MAX = 17 +} rpmtsOpX; + +/** \ingroup rpmts + * Perform dependency resolution on the transaction set. + * + * Any problems found by rpmtsCheck() can be examined by retrieving the + * problem set with rpmtsProblems(), success here only means that + * the resolution was successfully attempted for all packages in the set. + * + * @param ts transaction set + * @return 0 on success + */ +int rpmtsCheck(rpmts ts); + +/** \ingroup rpmts + * Determine package order in a transaction set according to dependencies. + * + * Order packages, returning error if circular dependencies cannot be + * eliminated by removing Requires's from the loop(s). Only dependencies from + * added or removed packages are used to determine ordering using a + * topological sort (Knuth vol. 1, p. 262). Use rpmtsCheck() to verify + * that all dependencies can be resolved. + * + * The final order ends up as installed packages followed by removed packages, + * with packages removed for upgrades immediately following the new package + * to be installed. + * + * @param ts transaction set + * @return no. of (added) packages that could not be ordered + */ +int rpmtsOrder(rpmts ts); + +/** \ingroup rpmts + * Process all package elements in a transaction set. Before calling + * rpmtsRun be sure to have: + * + * - setup the rpm root dir via rpmtsSetRoot(). + * - setup the rpm notify callback via rpmtsSetNotifyCallback(). + * - setup the rpm transaction flags via rpmtsSetFlags(). + * + * Additionally, though not required you may want to: + * + * - setup the rpm verify signature flags via rpmtsSetVSFlags(). + * + * @param ts transaction set + * @param okProbs unused + * @param ignoreSet bits to filter problem types + * @return 0 on success, -1 on error, >0 with newProbs set + */ +int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet); + +/** \ingroup rpmts + * Reference a transaction set instance. + * @param ts transaction set + * @return new transaction set reference + */ +rpmts rpmtsLink (rpmts ts); + +/** \ingroup rpmts + * Close the database used by the transaction. + * @param ts transaction set + * @return 0 on success + */ +int rpmtsCloseDB(rpmts ts); + +/** \ingroup rpmts + * Open the database used by the transaction. + * @param ts transaction set + * @param dbmode O_RDONLY or O_RDWR + * @return 0 on success + */ +int rpmtsOpenDB(rpmts ts, int dbmode); + +/** \ingroup rpmts + * Initialize the database used by the transaction. + * @deprecated An explicit rpmdbInit() is almost never needed. + * @param ts transaction set + * @param dbmode O_RDONLY or O_RDWR + * @return 0 on success + */ +int rpmtsInitDB(rpmts ts, int dbmode); + +/** \ingroup rpmts + * Return the transaction database mode + * @param ts transaction set + * @return O_RDONLY, O_RDWR or -1 (lazy opens disabled) + */ +int rpmtsGetDBMode(rpmts ts); + +/** \ingroup rpmts + * Set the transaction database mode. Only permitted when when backing + * database hasn't been opened yet (ie rpmtsGetRdb(ts) == NULL) + * @param ts transaction set + * @param dbmode O_RDONLY, O_RDWR or -1 (disable lazy opens) + * @return 0 on success, 1 on error + */ +int rpmtsSetDBMode(rpmts ts, int dbmode); + +/** \ingroup rpmts + * Rebuild the database used by the transaction. + * @param ts transaction set + * @return 0 on success + */ +int rpmtsRebuildDB(rpmts ts); + +/** \ingroup rpmts + * Verify the database used by the transaction. + * @param ts transaction set + * @return 0 on success + */ +int rpmtsVerifyDB(rpmts ts); + +/** \ingroup rpmts + * Return transaction database iterator. + * @param ts transaction set + * @param rpmtag database index tag + * @param keyp key data (NULL for sequential access) + * @param keylen key data length (0 will use strlen(keyp)) + * @return NULL on failure + */ +rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag, + const void * keyp, size_t keylen); + +/** \ingroup rpmts + * Import public key packet(s). + * @todo Implicit --update policy for gpg-pubkey headers. + * @param ts transaction set + * @param pkt pgp pubkey packet(s) + * @param pktlen pgp pubkey length + * @return RPMRC_OK/RPMRC_FAIL + */ +rpmRC rpmtsImportPubkey(rpmts ts, const unsigned char * pkt, size_t pktlen); + +/** \ingroup rpmts + * Retrieve handle for keyring used for this transaction set + * @param ts transaction set + * @param autoload load default keyring if keyring is not set + * @return keyring handle (or NULL) + */ +rpmKeyring rpmtsGetKeyring(rpmts ts, int autoload); + +/** \ingroup rpmts + * Set keyring to use for this transaction set. + * Keyring can be only changed while the underlying rpm database is not + * yet open. + * @param ts transaction set + * @param keyring keyring handle (NULL to free current keyring) + * @return 0 on success, -1 on error + */ +int rpmtsSetKeyring(rpmts ts, rpmKeyring keyring); + +/** \ingroup rpmts + * Set dependency solver callback. + * @param ts transaction set + * @param (*solve) dependency solver callback + * @param solveData dependency solver callback data (opaque) + * @return 0 on success + */ +int rpmtsSetSolveCallback(rpmts ts, + int (*solve) (rpmts ts, rpmds ds, const void * data), + const void * solveData); + +/** \ingroup rpmts + * Return current transaction set problems. + * @param ts transaction set + * @return current problem set (or NULL if no problems) + */ +rpmps rpmtsProblems(rpmts ts); + +/** \ingroup rpmts + * Clean current transaction problem set. + * @param ts transaction set + */ +void rpmtsCleanProblems(rpmts ts); + +/** \ingroup rpmts + * Free memory needed only for dependency checks and ordering. + * @param ts transaction set + */ +void rpmtsClean(rpmts ts); + +/** \ingroup rpmts + * Re-create an empty transaction set. + * @param ts transaction set + */ +void rpmtsEmpty(rpmts ts); + +/** \ingroup rpmts + * Destroy transaction set, closing the database as well. + * @param ts transaction set + * @return NULL always + */ +rpmts rpmtsFree(rpmts ts); + +/** \ingroup rpmts + * Get verify signatures flag(s). + * @param ts transaction set + * @return verify signatures flags + */ +rpmVSFlags rpmtsVSFlags(rpmts ts); + +/** \ingroup rpmts + * Set verify signatures flag(s). + * @param ts transaction set + * @param vsflags new verify signatures flags + * @return previous value + */ +rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags); + +/** \ingroup rpmts + * Get transaction rootDir, i.e. path to chroot(2). + * @param ts transaction set + * @return transaction rootDir + */ +const char * rpmtsRootDir(rpmts ts); + +/** \ingroup rpmts + * Set transaction rootDir, i.e. path to chroot(2). + * @param ts transaction set + * @param rootDir new transaction rootDir (or NULL) + * @return 0 on success, -1 on error (invalid rootDir) + */ +int rpmtsSetRootDir(rpmts ts, const char * rootDir); + +/** \ingroup rpmts + * Get transaction script file handle, i.e. stdout/stderr on scriptlet execution + * @param ts transaction set + * @return transaction script file handle + */ +FD_t rpmtsScriptFd(rpmts ts); + +/** \ingroup rpmts + * Set transaction script file handle, i.e. stdout/stderr on scriptlet execution + * @param ts transaction set + * @param scriptFd new script file handle (or NULL) + */ +void rpmtsSetScriptFd(rpmts ts, FD_t scriptFd); + +/** \ingroup rpmts + * Get transaction id, i.e. transaction time stamp. + * @param ts transaction set + * @return transaction id + */ +rpm_tid_t rpmtsGetTid(rpmts ts); + +/** \ingroup rpmts + * Set transaction id, i.e. transaction time stamp. + * @param ts transaction set + * @param tid new transaction id + * @return previous transaction id + */ +rpm_tid_t rpmtsSetTid(rpmts ts, rpm_tid_t tid); + +/** \ingroup rpmts + * Get transaction set database handle. + * @param ts transaction set + * @return transaction database handle + */ +rpmdb rpmtsGetRdb(rpmts ts); + +/** \ingroup rpmts + * Perform transaction progress notify callback. + * @param ts transaction set + * @param te current transaction element + * @param what type of call back + * @param amount current value + * @param total final value + * @return callback dependent pointer + */ +void * rpmtsNotify(rpmts ts, rpmte te, + rpmCallbackType what, rpm_loff_t amount, rpm_loff_t total); + +/** \ingroup rpmts + * Return number of (ordered) transaction set elements. + * @param ts transaction set + * @return no. of transaction set elements + */ +int rpmtsNElements(rpmts ts); + +/** \ingroup rpmts + * Return (ordered) transaction set element. + * @param ts transaction set + * @param ix transaction element index + * @return transaction element (or NULL) + */ +rpmte rpmtsElement(rpmts ts, int ix); + +/** \ingroup rpmts + * Get problem ignore bit mask, i.e. bits to filter encountered problems. + * @param ts transaction set + * @return ignore bit mask + */ +rpmprobFilterFlags rpmtsFilterFlags(rpmts ts); + +/** \ingroup rpmts + * Get transaction flags, i.e. bits that control rpmtsRun(). + * @param ts transaction set + * @return transaction flags + */ +rpmtransFlags rpmtsFlags(rpmts ts); + +/** \ingroup rpmts + * Set transaction flags, i.e. bits that control rpmtsRun(). + * @param ts transaction set + * @param transFlags new transaction flags + * @return previous transaction flags + */ +rpmtransFlags rpmtsSetFlags(rpmts ts, rpmtransFlags transFlags); + +/** \ingroup rpmts + * Retrieve color bits of transaction set. + * @param ts transaction set + * @return color bits + */ +rpm_color_t rpmtsColor(rpmts ts); + +/** \ingroup rpmts + * Retrieve prefered file color + * @param ts transaction set + * @return color bits + */ +rpm_color_t rpmtsPrefColor(rpmts ts); + +/** \ingroup rpmts + * Set color bits of transaction set. + * @param ts transaction set + * @param color new color bits + * @return previous color bits + */ +rpm_color_t rpmtsSetColor(rpmts ts, rpm_color_t color); + +/** \ingroup rpmts + * Set prefered file color + * @param ts transaction set + * @param color new color bits + * @return previous color bits + */ +rpm_color_t rpmtsSetPrefColor(rpmts ts, rpm_color_t color); + +/** \ingroup rpmts + * Retrieve operation timestamp from a transaction set. + * @param ts transaction set + * @param opx operation timestamp index + * @return pointer to operation timestamp. + */ +rpmop rpmtsOp(rpmts ts, rpmtsOpX opx); + +/** \ingroup rpmts + * Get the plugins associated with a transaction set + * @param ts transaction set + * @return plugins + */ +rpmPlugins rpmtsPlugins(rpmts ts); + +/** \ingroup rpmts + * Set transaction notify callback function and argument. + * + * @warning This call must be made before rpmtsRun() for + * install/upgrade/freshen to function correctly. + * + * @param ts transaction set + * @param notify progress callback + * @param notifyData progress callback private data + * @return 0 on success + */ +int rpmtsSetNotifyCallback(rpmts ts, + rpmCallbackFunction notify, + rpmCallbackData notifyData); + +/** \ingroup rpmts + * Create an empty transaction set. + * @return new transaction set + */ +rpmts rpmtsCreate(void); + +/** \ingroup rpmts + * Add package to be installed to transaction set. + * + * The transaction set is checked for duplicate package names. + * If found, the package with the "newest" EVR will be replaced. + * + * @param ts transaction set + * @param h header + * @param key package retrieval key (e.g. file name) + * @param upgrade is package being upgraded? + * @param relocs package file relocations + * @return 0 on success, 1 on I/O error, 2 needs capabilities + */ +int rpmtsAddInstallElement(rpmts ts, Header h, + const fnpyKey key, int upgrade, + rpmRelocation * relocs); + +/** \ingroup rpmts + * Add package to be erased to transaction set. + * @param ts transaction set + * @param h header + * @param dboffset ununsed + * @return 0 on success, 1 on error (not installed) + */ +int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset); + +/** \ingroup rpmte + * Destroy transaction element iterator. + * @param tsi transaction element iterator + * @return NULL always + */ +rpmtsi rpmtsiFree(rpmtsi tsi); + +/** \ingroup rpmte + * Create transaction element iterator. + * @param ts transaction set + * @return transaction element iterator + */ +rpmtsi rpmtsiInit(rpmts ts); + +/** \ingroup rpmte + * Return next transaction element of type. + * @param tsi transaction element iterator + * @param types transaction element type selector (0 for any) + * @return next transaction element of type, NULL on termination + */ +rpmte rpmtsiNext(rpmtsi tsi, rpmElementTypes types); + +#ifdef __cplusplus +} +#endif + + +#endif /* H_RPMTS */ diff --git a/lib/rpmts_internal.h b/lib/rpmts_internal.h new file mode 100644 index 0000000..438fd46 --- /dev/null +++ b/lib/rpmts_internal.h @@ -0,0 +1,108 @@ +#ifndef _RPMTS_INTERNAL_H +#define _RPMTS_INTERNAL_H + +#include + +#include "lib/rpmal.h" /* XXX availablePackage */ +#include "lib/fprint.h" +#include "lib/rpmlock.h" + +typedef struct diskspaceInfo_s * rpmDiskSpaceInfo; + +/* Transaction set elements information */ +typedef struct tsMembers_s { + intHash removedPackages; /*!< Set of packages being removed. */ + rpmal addedPackages; /*!< Set of packages being installed. */ + + rpmte * order; /*!< Packages sorted by dependencies. */ + int orderCount; /*!< No. of transaction elements. */ + int orderAlloced; /*!< No. of allocated transaction elements. */ + int delta; /*!< Delta for reallocation. */ +} * tsMembers; + +/** \ingroup rpmts + * The set of packages to be installed/removed atomically. + */ +struct rpmts_s { + rpmtransFlags transFlags; /*!< Bit(s) to control operation. */ + + int (*solve) (rpmts ts, rpmds key, const void * data); + /*!< Search for NEVRA key. */ + const void * solveData; /*!< Solve callback data */ + + rpmCallbackFunction notify; /*!< Callback function. */ + rpmCallbackData notifyData; /*!< Callback private data. */ + + rpmprobFilterFlags ignoreSet; + /*!< Bits to filter current problems. */ + + rpmDiskSpaceInfo dsi; /*!< Per filesystem disk/inode usage. */ + + rpmdb rdb; /*!< Install database handle. */ + int dbmode; /*!< Install database open mode. */ + + tsMembers members; /*!< Transaction set member info (order etc) */ + + struct selabel_handle * selabelHandle; /*!< Handle to selabel */ + + char * rootDir; /*!< Path to top of install tree. */ + char * lockPath; /*!< Transaction lock path */ + FD_t scriptFd; /*!< Scriptlet stdout/stderr. */ + rpm_tid_t tid; /*!< Transaction id. */ + + rpm_color_t color; /*!< Transaction color bits. */ + rpm_color_t prefcolor; /*!< Preferred file color. */ + + rpmVSFlags vsflags; /*!< Signature/digest verification flags. */ + + rpmKeyring keyring; /*!< Keyring in use. */ + + ARGV_t netsharedPaths; /*!< From %{_netsharedpath} */ + ARGV_t installLangs; /*!< From %{_install_langs} */ + + struct rpmop_s ops[RPMTS_OP_MAX]; + + rpmPlugins plugins; /*!< Transaction plugins */ + + int nrefs; /*!< Reference count. */ +}; + +#ifdef __cplusplus +extern "C" { +#endif + +RPM_GNUC_INTERNAL +tsMembers rpmtsMembers(rpmts ts); + +/* returns -1 for retry, 0 for ignore and 1 for not found */ +RPM_GNUC_INTERNAL +int rpmtsSolve(rpmts ts, rpmds key); + +RPM_GNUC_INTERNAL +rpmlock rpmtsAcquireLock(rpmts ts); + +/** \ingroup rpmts + * Get the selabel handle from the transaction set + * @param ts transaction set + * @return rpm selabel handle, or NULL if it hasn't been initialized yet + */ +struct selabel_handle * rpmtsSELabelHandle(rpmts ts); + +/** \ingroup rpmts + * Initialize selabel + * @param ts transaction set + * @param path path to contexts file + * @return RPMRC_OK on success, RPMRC_FAIL otherwise + */ +rpmRC rpmtsSELabelInit(rpmts ts, const char * path); + +/** \ingroup rpmts + * Clean up selabel + * @param ts transaction set + */ +void rpmtsSELabelFini(rpmts ts); + +#ifdef __cplusplus +} +#endif +#endif /* _RPMTS_INTERNAL_H */ diff --git a/lib/rpmtypes.h b/lib/rpmtypes.h new file mode 100644 index 0000000..28ee5a9 --- /dev/null +++ b/lib/rpmtypes.h @@ -0,0 +1,112 @@ +#ifndef _RPMTYPES_H +#define _RPMTYPES_H + +/** \ingroup rpmtypes + * \file lib/rpmtypes.h + * + * Typedefs for RPM abstract data types. + * @todo The grouping needs love to look sane... + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef const char * errmsg_t; + +/** \ingroup rpmtypes + * + * RPM header and data retrieval types. + * @{ + */ +typedef struct headerToken_s * Header; +typedef struct headerIterator_s * HeaderIterator; + +typedef int32_t rpm_tag_t; +typedef uint32_t rpm_tagtype_t; +typedef uint32_t rpm_count_t; +typedef rpm_tag_t rpmTagVal; +typedef rpm_tag_t rpmDbiTagVal; + +typedef void * rpm_data_t; +typedef const void * rpm_constdata_t; + +typedef struct rpmtd_s * rpmtd; + +typedef uint32_t rpm_color_t; +typedef uint32_t rpm_flag_t; +typedef uint32_t rpm_tid_t; + +typedef uint32_t rpmFlags; +/** @} */ + +/** \ingroup rpmtypes + * + * In-header hardcoded sizes for various POSIXy types + * @{ + */ +typedef uint32_t rpm_off_t; +typedef uint64_t rpm_loff_t; +typedef uint32_t rpm_time_t; +typedef uint16_t rpm_mode_t; +typedef uint16_t rpm_rdev_t; +typedef uint32_t rpm_dev_t; +typedef uint32_t rpm_ino_t; +/** @} */ + +/** \ingroup rpmtypes + * The main types involved in transaction manipulation + * @{ + */ +typedef struct rpmts_s * rpmts; +typedef struct rpmte_s * rpmte; +typedef struct rpmds_s * rpmds; +typedef struct rpmfi_s * rpmfi; +typedef struct rpmdb_s * rpmdb; +typedef struct rpmdbMatchIterator_s * rpmdbMatchIterator; +typedef struct rpmtsi_s * rpmtsi; +typedef struct rpmps_s * rpmps; + +typedef struct rpmdbIndexIterator_s * rpmdbIndexIterator; +typedef const void * fnpyKey; +typedef void * rpmCallbackData; +/** @} */ + +typedef struct rpmPubkey_s * rpmPubkey; +typedef struct rpmKeyring_s * rpmKeyring; + +typedef struct rpmPlugins_s * rpmPlugins; + +typedef struct rpmgi_s * rpmgi; + +typedef struct rpmSpec_s * rpmSpec; + +typedef struct rpmRelocation_s rpmRelocation; + + +/** \ingroup rpmtypes + * RPM IO file descriptor type + */ +typedef struct _FD_s * FD_t; + +/** \ingroup rpmtypes + * Package read return codes. + */ +typedef enum rpmRC_e { + RPMRC_OK = 0, /*!< Generic success code */ + RPMRC_NOTFOUND = 1, /*!< Generic not found code. */ + RPMRC_FAIL = 2, /*!< Generic failure code. */ + RPMRC_NOTTRUSTED = 3, /*!< Signature is OK, but key is not trusted. */ + RPMRC_NOKEY = 4 /*!< Public key is unavailable. */ +} rpmRC; + +#ifdef __cplusplus +} +#endif + +/* XXX included late as rpmtag.h depends on our definitions here... */ +#include + +#endif /* _RPMTYPES_H */ diff --git a/lib/rpmug.c b/lib/rpmug.c new file mode 100644 index 0000000..b365e4a --- /dev/null +++ b/lib/rpmug.c @@ -0,0 +1,202 @@ +#include "system.h" + +#include +#include +#include +#include + +#include "lib/misc.h" +#include "lib/rpmug.h" +#include "debug.h" + +#define HASHTYPE strCache +#define HTKEYTYPE const char * +#include "lib/rpmhash.H" +#include "lib/rpmhash.C" +#undef HASHTYPE +#undef HTKEYTYPE + +static strCache strStash = NULL; + +const char * rpmugStashStr(const char *str) +{ + const char *ret = NULL; + if (str) { + if (strStash == NULL) { + strStash = strCacheCreate(64, hashFunctionString, strcmp, + (strCacheFreeKey)rfree); + } + + if (!strCacheGetEntry(strStash, str, &ret)) { + strCacheAddEntry(strStash, xstrdup(str)); + (void) strCacheGetEntry(strStash, str, &ret); + } + } + return ret; +} + +/* + * These really ought to use hash tables. I just made the + * guess that most files would be owned by root or the same person/group + * who owned the last file. Those two values are cached, everything else + * is looked up via getpw() and getgr() functions. If this performs + * too poorly I'll have to implement it properly :-( + */ + +int rpmugUid(const char * thisUname, uid_t * uid) +{ + static char * lastUname = NULL; + static size_t lastUnameLen = 0; + static size_t lastUnameAlloced; + static uid_t lastUid; + struct passwd * pwent; + size_t thisUnameLen; + + if (!thisUname) { + lastUnameLen = 0; + return -1; + } else if (rstreq(thisUname, "root")) { + *uid = 0; + return 0; + } + + thisUnameLen = strlen(thisUname); + if (lastUname == NULL || thisUnameLen != lastUnameLen || + !rstreq(thisUname, lastUname)) + { + if (lastUnameAlloced < thisUnameLen + 1) { + lastUnameAlloced = thisUnameLen + 10; + lastUname = xrealloc(lastUname, lastUnameAlloced); /* XXX memory leak */ + } + strcpy(lastUname, thisUname); + + pwent = getpwnam(thisUname); + if (pwent == NULL) { + /* FIX: shrug */ + endpwent(); + pwent = getpwnam(thisUname); + if (pwent == NULL) return -1; + } + + lastUid = pwent->pw_uid; + } + + *uid = lastUid; + + return 0; +} + +int rpmugGid(const char * thisGname, gid_t * gid) +{ + static char * lastGname = NULL; + static size_t lastGnameLen = 0; + static size_t lastGnameAlloced; + static gid_t lastGid; + size_t thisGnameLen; + struct group * grent; + + if (thisGname == NULL) { + lastGnameLen = 0; + return -1; + } else if (rstreq(thisGname, "root")) { + *gid = 0; + return 0; + } + + thisGnameLen = strlen(thisGname); + if (lastGname == NULL || thisGnameLen != lastGnameLen || + !rstreq(thisGname, lastGname)) + { + if (lastGnameAlloced < thisGnameLen + 1) { + lastGnameAlloced = thisGnameLen + 10; + lastGname = xrealloc(lastGname, lastGnameAlloced); /* XXX memory leak */ + } + strcpy(lastGname, thisGname); + + grent = getgrnam(thisGname); + if (grent == NULL) { + /* FIX: shrug */ + endgrent(); + grent = getgrnam(thisGname); + if (grent == NULL) { + return -1; + } + } + lastGid = grent->gr_gid; + } + + *gid = lastGid; + + return 0; +} + +const char * rpmugUname(uid_t uid) +{ + static uid_t lastUid = (uid_t) -1; + static char * lastUname = NULL; + static size_t lastUnameLen = 0; + + if (uid == (uid_t) -1) { + lastUid = (uid_t) -1; + return NULL; + } else if (uid == (uid_t) 0) { + return "root"; + } else if (uid == lastUid) { + return lastUname; + } else { + struct passwd * pwent = getpwuid(uid); + size_t len; + + if (pwent == NULL) return NULL; + + lastUid = uid; + len = strlen(pwent->pw_name); + if (lastUnameLen < len + 1) { + lastUnameLen = len + 20; + lastUname = xrealloc(lastUname, lastUnameLen); + } + strcpy(lastUname, pwent->pw_name); + + return lastUname; + } +} + +const char * rpmugGname(gid_t gid) +{ + static gid_t lastGid = (gid_t) -1; + static char * lastGname = NULL; + static size_t lastGnameLen = 0; + + if (gid == (gid_t) -1) { + lastGid = (gid_t) -1; + return NULL; + } else if (gid == (gid_t) 0) { + return "root"; + } else if (gid == lastGid) { + return lastGname; + } else { + struct group * grent = getgrgid(gid); + size_t len; + + if (grent == NULL) return NULL; + + lastGid = gid; + len = strlen(grent->gr_name); + if (lastGnameLen < len + 1) { + lastGnameLen = len + 20; + lastGname = xrealloc(lastGname, lastGnameLen); + } + strcpy(lastGname, grent->gr_name); + + return lastGname; + } +} + +void rpmugFree(void) +{ + rpmugUid(NULL, NULL); + rpmugGid(NULL, NULL); + rpmugUname(-1); + rpmugGname(-1); + strStash = strCacheFree(strStash); +} diff --git a/lib/rpmug.h b/lib/rpmug.h new file mode 100644 index 0000000..35e5d63 --- /dev/null +++ b/lib/rpmug.h @@ -0,0 +1,18 @@ +#ifndef _RPMUG_H +#define _RPMUG_H + +#include + +const char * rpmugStashStr(const char *str); + +int rpmugUid(const char * name, uid_t * uid); + +int rpmugGid(const char * name, gid_t * gid); + +const char * rpmugUname(uid_t uid); + +const char * rpmugGname(gid_t gid); + +void rpmugFree(void); + +#endif /* _RPMUG_H */ diff --git a/lib/rpmvercmp.c b/lib/rpmvercmp.c new file mode 100644 index 0000000..f5ae092 --- /dev/null +++ b/lib/rpmvercmp.c @@ -0,0 +1,131 @@ +/** \ingroup rpmts + * \file lib/rpmvercmp.c + */ + +#include "system.h" + +#include /* rpmvercmp proto */ +#include + +#include "debug.h" + +/* compare alpha and numeric segments of two versions */ +/* return 1: a is newer than b */ +/* 0: a and b are the same version */ +/* -1: b is newer than a */ +int rpmvercmp(const char * a, const char * b) +{ + char oldch1, oldch2; + char abuf[strlen(a)+1], bbuf[strlen(b)+1]; + char *str1 = abuf, *str2 = bbuf; + char * one, * two; + int rc; + int isnum; + + /* easy comparison to see if versions are identical */ + if (rstreq(a, b)) return 0; + + strcpy(str1, a); + strcpy(str2, b); + + one = str1; + two = str2; + + /* loop through each version segment of str1 and str2 and compare them */ + while (*one && *two) { + while (*one && !risalnum(*one)) one++; + while (*two && !risalnum(*two)) two++; + + /* If we ran to the end of either, we are finished with the loop */ + if (!(*one && *two)) break; + + str1 = one; + str2 = two; + + /* grab first completely alpha or completely numeric segment */ + /* leave one and two pointing to the start of the alpha or numeric */ + /* segment and walk str1 and str2 to end of segment */ + if (risdigit(*str1)) { + while (*str1 && risdigit(*str1)) str1++; + while (*str2 && risdigit(*str2)) str2++; + isnum = 1; + } else { + while (*str1 && risalpha(*str1)) str1++; + while (*str2 && risalpha(*str2)) str2++; + isnum = 0; + } + + /* save character at the end of the alpha or numeric segment */ + /* so that they can be restored after the comparison */ + oldch1 = *str1; + *str1 = '\0'; + oldch2 = *str2; + *str2 = '\0'; + + /* this cannot happen, as we previously tested to make sure that */ + /* the first string has a non-null segment */ + if (one == str1) return -1; /* arbitrary */ + + /* take care of the case where the two version segments are */ + /* different types: one numeric, the other alpha (i.e. empty) */ + /* numeric segments are always newer than alpha segments */ + /* XXX See patch #60884 (and details) from bugzilla #50977. */ + if (two == str2) return (isnum ? 1 : -1); + + if (isnum) { + /* this used to be done by converting the digit segments */ + /* to ints using atoi() - it's changed because long */ + /* digit segments can overflow an int - this should fix that. */ + + /* throw away any leading zeros - it's a number, right? */ + while (*one == '0') one++; + while (*two == '0') two++; + + /* whichever number has more digits wins */ + if (strlen(one) > strlen(two)) return 1; + if (strlen(two) > strlen(one)) return -1; + } + + /* strcmp will return which one is greater - even if the two */ + /* segments are alpha or if they are numeric. don't return */ + /* if they are equal because there might be more segments to */ + /* compare */ + rc = strcmp(one, two); + if (rc) return (rc < 1 ? -1 : 1); + + /* restore character that was replaced by null above */ + *str1 = oldch1; + one = str1; + *str2 = oldch2; + two = str2; + } + + /* this catches the case where all numeric and alpha segments have */ + /* compared identically but the segment sepparating characters were */ + /* different */ + if ((!*one) && (!*two)) return 0; + + /* whichever version still has characters left over wins */ + if (!*one) return -1; else return 1; +} + +int rpmVersionCompare(Header first, Header second) +{ + /* Missing epoch becomes zero here, which is what we want */ + uint32_t epochOne = headerGetNumber(first, RPMTAG_EPOCH); + uint32_t epochTwo = headerGetNumber(second, RPMTAG_EPOCH); + int rc; + + if (epochOne < epochTwo) + return -1; + else if (epochOne > epochTwo) + return 1; + + rc = rpmvercmp(headerGetString(first, RPMTAG_VERSION), + headerGetString(second, RPMTAG_VERSION)); + if (rc) + return rc; + + return rpmvercmp(headerGetString(first, RPMTAG_RELEASE), + headerGetString(second, RPMTAG_RELEASE)); +} diff --git a/lib/rpmvf.h b/lib/rpmvf.h new file mode 100644 index 0000000..51690b8 --- /dev/null +++ b/lib/rpmvf.h @@ -0,0 +1,103 @@ +#ifndef _RPMVF_H +#define _RPMVF_H + +/** \ingroup rpmvf + * \file lib/rpmvf.h + * @todo Add a more complete API... + */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmvf + * Bit(s) for rpmVerifyFile() attributes and result. + */ +enum rpmVerifyAttrs_e { + RPMVERIFY_NONE = 0, /*!< */ + RPMVERIFY_MD5 = (1 << 0), /*!< from %verify(md5) - obsolete */ + RPMVERIFY_FILEDIGEST= (1 << 0), /*!< from %verify(filedigest) */ + RPMVERIFY_FILESIZE = (1 << 1), /*!< from %verify(size) */ + RPMVERIFY_LINKTO = (1 << 2), /*!< from %verify(link) */ + RPMVERIFY_USER = (1 << 3), /*!< from %verify(user) */ + RPMVERIFY_GROUP = (1 << 4), /*!< from %verify(group) */ + RPMVERIFY_MTIME = (1 << 5), /*!< from %verify(mtime) */ + RPMVERIFY_MODE = (1 << 6), /*!< from %verify(mode) */ + RPMVERIFY_RDEV = (1 << 7), /*!< from %verify(rdev) */ + RPMVERIFY_CAPS = (1 << 8), /*!< from %verify(caps) */ + /* bits 9-14 unused, reserved for rpmVerifyAttrs */ + RPMVERIFY_CONTEXTS = (1 << 15), /*!< verify: from --nocontexts */ + /* bits 16-22 used in rpmVerifyFlags */ + /* bits 23-27 used in rpmQueryFlags */ + RPMVERIFY_READLINKFAIL= (1 << 28), /*!< readlink failed */ + RPMVERIFY_READFAIL = (1 << 29), /*!< file read failed */ + RPMVERIFY_LSTATFAIL = (1 << 30), /*!< lstat failed */ + RPMVERIFY_LGETFILECONFAIL = (1 << 31) /*!< lgetfilecon failed */ +}; + +typedef rpmFlags rpmVerifyAttrs; + +#define RPMVERIFY_ALL ~(RPMVERIFY_NONE) +#define RPMVERIFY_FAILURES \ + (RPMVERIFY_LSTATFAIL|RPMVERIFY_READFAIL|RPMVERIFY_READLINKFAIL|RPMVERIFY_LGETFILECONFAIL) + +/** \ingroup rpmvf + * Bit(s) to control rpmVerify() operation + */ +enum rpmVerifyFlags_e { + VERIFY_DEFAULT = 0, /*!< */ + VERIFY_MD5 = (1 << 0), /*!< from --nomd5 - obsolete */ + VERIFY_FILEDIGEST = (1 << 0), /*!< from --nofiledigest */ + VERIFY_SIZE = (1 << 1), /*!< from --nosize */ + VERIFY_LINKTO = (1 << 2), /*!< from --nolinkto */ + VERIFY_USER = (1 << 3), /*!< from --nouser */ + VERIFY_GROUP = (1 << 4), /*!< from --nogroup */ + VERIFY_MTIME = (1 << 5), /*!< from --nomtime */ + VERIFY_MODE = (1 << 6), /*!< from --nomode */ + VERIFY_RDEV = (1 << 7), /*!< from --nodev */ + VERIFY_CAPS = (1 << 8), /*!< from --nocaps */ + /* bits 9-14 unused, reserved for rpmVerifyAttrs */ + VERIFY_CONTEXTS = (1 << 15), /*!< verify: from --nocontexts */ + VERIFY_FILES = (1 << 16), /*!< verify: from --nofiles */ + VERIFY_DEPS = (1 << 17), /*!< verify: from --nodeps */ + VERIFY_SCRIPT = (1 << 18), /*!< verify: from --noscripts */ + VERIFY_DIGEST = (1 << 19), /*!< verify: from --nodigest */ + VERIFY_SIGNATURE = (1 << 20), /*!< verify: from --nosignature */ + VERIFY_PATCHES = (1 << 21), /*!< verify: from --nopatches */ + VERIFY_HDRCHK = (1 << 22), /*!< verify: from --nohdrchk */ + VERIFY_FOR_LIST = (1 << 23), /*!< query: from --list */ + VERIFY_FOR_STATE = (1 << 24), /*!< query: from --state */ + VERIFY_FOR_DOCS = (1 << 25), /*!< query: from --docfiles */ + VERIFY_FOR_CONFIG = (1 << 26), /*!< query: from --configfiles */ + VERIFY_FOR_DUMPFILES= (1 << 27) /*!< query: from --dump */ + /* bits 28-31 used in rpmVerifyAttrs */ +}; + +typedef rpmFlags rpmVerifyFlags; + +#define VERIFY_ATTRS \ + ( VERIFY_FILEDIGEST | VERIFY_SIZE | VERIFY_LINKTO | VERIFY_USER | VERIFY_GROUP | \ + VERIFY_MTIME | VERIFY_MODE | VERIFY_RDEV | VERIFY_CONTEXTS | VERIFY_CAPS ) +#define VERIFY_ALL \ + ( VERIFY_ATTRS | VERIFY_FILES | VERIFY_DEPS | VERIFY_SCRIPT | VERIFY_DIGEST |\ + VERIFY_SIGNATURE | VERIFY_HDRCHK ) + +/** \ingroup rpmvf + * Verify file attributes (including digest). + * @todo gnorpm and python bindings prevent this from being static. + * @param ts transaction set + * @param fi file info (with linked header and current file index) + * @retval *res bit(s) returned to indicate failure + * @param omitMask bit(s) to disable verify checks + * @return 0 on success (or not installed), 1 on error + */ +int rpmVerifyFile(const rpmts ts, rpmfi fi, + rpmVerifyAttrs * res, rpmVerifyAttrs omitMask); + + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMTYPES_H */ diff --git a/lib/signature.c b/lib/signature.c new file mode 100644 index 0000000..74d74a4 --- /dev/null +++ b/lib/signature.c @@ -0,0 +1,534 @@ +/** \ingroup signature + * \file lib/signature.c + */ + +#include "system.h" + +#include + +#include +#include +#include +#include +#include + +#include "rpmio/digest.h" +#include "lib/rpmlead.h" +#include "lib/signature.h" +#include "lib/header_internal.h" + +#include "debug.h" + +/* Dumb wrapper around headerPut() for signature header */ +static int sighdrPut(Header h, rpmTagVal tag, rpmTagType type, + rpm_data_t p, rpm_count_t c) +{ + struct rpmtd_s sigtd; + rpmtdReset(&sigtd); + sigtd.tag = tag; + sigtd.type = type; + sigtd.data = p; + sigtd.count = c; + return headerPut(h, &sigtd, HEADERPUT_DEFAULT); +} + +/** + * Print package size. + * @todo rpmio: use fdSize rather than fstat(2) to get file size. + * @param fd package file handle + * @param siglen signature header size + * @param pad signature padding + * @param datalen length of header+payload + * @return rpmRC return code + */ +static inline rpmRC printSize(FD_t fd, size_t siglen, size_t pad, rpm_loff_t datalen) +{ + struct stat st; + int fdno = Fileno(fd); + + if (fstat(fdno, &st) < 0) + return RPMRC_FAIL; + + rpmlog(RPMLOG_DEBUG, + "Expected size: %12" PRIu64 \ + " = lead(%d)+sigs(%zd)+pad(%zd)+data(%" PRIu64 ")\n", + RPMLEAD_SIZE+siglen+pad+datalen, + RPMLEAD_SIZE, siglen, pad, datalen); + rpmlog(RPMLOG_DEBUG, + " Actual size: %12" PRIu64 "\n", (rpm_loff_t) st.st_size); + + return RPMRC_OK; +} + +rpmRC rpmReadSignature(FD_t fd, Header * sighp, sigType sig_type, char ** msg) +{ + char *buf = NULL; + int32_t block[4]; + int32_t il; + int32_t dl; + int32_t * ei = NULL; + entryInfo pe; + size_t nb; + int32_t ril = 0; + struct indexEntry_s entry; + struct entryInfo_s info; + unsigned char * dataStart; + unsigned char * dataEnd = NULL; + Header sigh = NULL; + rpmRC rc = RPMRC_FAIL; /* assume failure */ + int xx; + int i; + + if (sighp) + *sighp = NULL; + + if (sig_type != RPMSIGTYPE_HEADERSIG) + goto exit; + + memset(block, 0, sizeof(block)); + if ((xx = timedRead(fd, (void *)block, sizeof(block))) != sizeof(block)) { + rasprintf(&buf, _("sigh size(%d): BAD, read returned %d\n"), + (int)sizeof(block), xx); + goto exit; + } + if (memcmp(block, rpm_header_magic, sizeof(rpm_header_magic))) { + rasprintf(&buf, _("sigh magic: BAD\n")); + goto exit; + } + il = ntohl(block[2]); + if (il < 0 || il > 32) { + rasprintf(&buf, + _("sigh tags: BAD, no. of tags(%d) out of range\n"), il); + goto exit; + } + dl = ntohl(block[3]); + if (dl < 0 || dl > 8192) { + rasprintf(&buf, + _("sigh data: BAD, no. of bytes(%d) out of range\n"), dl); + goto exit; + } + + memset(&entry, 0, sizeof(entry)); + memset(&info, 0, sizeof(info)); + + nb = (il * sizeof(struct entryInfo_s)) + dl; + ei = xmalloc(sizeof(il) + sizeof(dl) + nb); + ei[0] = block[2]; + ei[1] = block[3]; + pe = (entryInfo) &ei[2]; + dataStart = (unsigned char *) (pe + il); + if ((xx = timedRead(fd, (void *)pe, nb)) != nb) { + rasprintf(&buf, + _("sigh blob(%d): BAD, read returned %d\n"), (int)nb, xx); + goto exit; + } + + /* Check (and convert) the 1st tag element. */ + xx = headerVerifyInfo(1, dl, pe, &entry.info, 0); + if (xx != -1) { + rasprintf(&buf, _("tag[%d]: BAD, tag %d type %d offset %d count %d\n"), + 0, entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + + /* Is there an immutable header region tag? */ + if (entry.info.tag == RPMTAG_HEADERSIGNATURES + && entry.info.type == RPM_BIN_TYPE + && entry.info.count == REGION_TAG_COUNT) + { + + if (entry.info.offset >= dl) { + rasprintf(&buf, + _("region offset: BAD, tag %d type %d offset %d count %d\n"), + entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + + /* Is there an immutable header region tag trailer? */ + dataEnd = dataStart + entry.info.offset; + (void) memcpy(&info, dataEnd, REGION_TAG_COUNT); + /* XXX Really old packages have HEADER_IMAGE, not HEADER_SIGNATURES. */ + if (info.tag == htonl(RPMTAG_HEADERIMAGE)) { + rpmTagVal stag = htonl(RPMTAG_HEADERSIGNATURES); + info.tag = stag; + memcpy(dataEnd, &stag, sizeof(stag)); + } + dataEnd += REGION_TAG_COUNT; + + xx = headerVerifyInfo(1, dl, &info, &entry.info, 1); + if (xx != -1 || + !((entry.info.tag == RPMTAG_HEADERSIGNATURES || entry.info.tag == RPMTAG_HEADERIMAGE) + && entry.info.type == RPM_BIN_TYPE + && entry.info.count == REGION_TAG_COUNT)) + { + rasprintf(&buf, + _("region trailer: BAD, tag %d type %d offset %d count %d\n"), + entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + memset(&info, 0, sizeof(info)); + + /* Is the no. of tags in the region less than the total no. of tags? */ + ril = entry.info.offset/sizeof(*pe); + if ((entry.info.offset % sizeof(*pe)) || ril > il) { + rasprintf(&buf, _("region size: BAD, ril(%d) > il(%d)\n"), ril, il); + goto exit; + } + } + + /* Sanity check signature tags */ + memset(&info, 0, sizeof(info)); + for (i = 1; i < il; i++) { + xx = headerVerifyInfo(1, dl, pe+i, &entry.info, 0); + if (xx != -1) { + rasprintf(&buf, + _("sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n"), + i, entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + } + + /* OK, blob looks sane, load the header. */ + sigh = headerLoad(ei); + if (sigh == NULL) { + rasprintf(&buf, _("sigh load: BAD\n")); + goto exit; + } + + { size_t sigSize = headerSizeof(sigh, HEADER_MAGIC_YES); + size_t pad = (8 - (sigSize % 8)) % 8; /* 8-byte pad */ + ssize_t trc; + struct rpmtd_s sizetag; + rpm_loff_t archSize = 0; + + /* Position at beginning of header. */ + if (pad && (trc = timedRead(fd, (void *)block, pad)) != pad) { + rasprintf(&buf, + _("sigh pad(%zd): BAD, read %zd bytes\n"), pad, trc); + goto exit; + } + + /* Print package component sizes. */ + if (headerGet(sigh, RPMSIGTAG_LONGSIZE, &sizetag, HEADERGET_DEFAULT)) { + rpm_loff_t *tsize = rpmtdGetUint64(&sizetag); + archSize = (tsize) ? *tsize : 0; + } else if (headerGet(sigh, RPMSIGTAG_SIZE, &sizetag, HEADERGET_DEFAULT)) { + rpm_off_t *tsize = rpmtdGetUint32(&sizetag); + archSize = (tsize) ? *tsize : 0; + } + rpmtdFreeData(&sizetag); + rc = printSize(fd, sigSize, pad, archSize); + if (rc != RPMRC_OK) { + rasprintf(&buf, + _("sigh sigSize(%zd): BAD, fstat(2) failed\n"), sigSize); + goto exit; + } + } + ei = NULL; /* XXX will be freed with header */ + +exit: + if (sighp && sigh && rc == RPMRC_OK) + *sighp = headerLink(sigh); + sigh = headerFree(sigh); + free(ei); + + if (msg != NULL) { + *msg = buf; + } else { + free(buf); + } + + return rc; +} + +int rpmWriteSignature(FD_t fd, Header sigh) +{ + static uint8_t buf[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + int sigSize, pad; + int rc; + + rc = headerWrite(fd, sigh, HEADER_MAGIC_YES); + if (rc) + return rc; + + sigSize = headerSizeof(sigh, HEADER_MAGIC_YES); + pad = (8 - (sigSize % 8)) % 8; + if (pad) { + if (Fwrite(buf, sizeof(buf[0]), pad, fd) != pad) + rc = 1; + } + rpmlog(RPMLOG_DEBUG, "Signature: size(%d)+pad(%d)\n", sigSize, pad); + return rc; +} + +Header rpmNewSignature(void) +{ + Header sigh = headerNew(); + return sigh; +} + +Header rpmFreeSignature(Header sigh) +{ + return headerFree(sigh); +} + +static int makeHDRDigest(Header sigh, const char * file, rpmTagVal sigTag) +{ + Header h = NULL; + FD_t fd = NULL; + char * SHA1 = NULL; + int ret = -1; /* assume failure. */ + + switch (sigTag) { + case RPMSIGTAG_SHA1: + fd = Fopen(file, "r.fdio"); + if (fd == NULL || Ferror(fd)) + goto exit; + h = headerRead(fd, HEADER_MAGIC_YES); + if (h == NULL) + goto exit; + + if (headerIsEntry(h, RPMTAG_HEADERIMMUTABLE)) { + DIGEST_CTX ctx; + struct rpmtd_s utd; + + if (!headerGet(h, RPMTAG_HEADERIMMUTABLE, &utd, HEADERGET_DEFAULT) + || utd.data == NULL) + { + rpmlog(RPMLOG_ERR, + _("Immutable header region could not be read. " + "Corrupted package?\n")); + goto exit; + } + ctx = rpmDigestInit(PGPHASHALGO_SHA1, RPMDIGEST_NONE); + (void) rpmDigestUpdate(ctx, rpm_header_magic, sizeof(rpm_header_magic)); + (void) rpmDigestUpdate(ctx, utd.data, utd.count); + (void) rpmDigestFinal(ctx, (void **)&SHA1, NULL, 1); + rpmtdFreeData(&utd); + } + + if (SHA1 == NULL) + goto exit; + if (!sighdrPut(sigh, RPMSIGTAG_SHA1, RPM_STRING_TYPE, SHA1, 1)) + goto exit; + ret = 0; + break; + default: + break; + } + +exit: + free(SHA1); + h = headerFree(h); + if (fd != NULL) (void) Fclose(fd); + return ret; +} + +int rpmGenDigest(Header sigh, const char * file, rpmTagVal sigTag) +{ + struct stat st; + uint8_t * pkt = NULL; + size_t pktlen; + int ret = -1; /* assume failure. */ + + switch (sigTag) { + case RPMSIGTAG_SIZE: { + rpm_off_t size; + if (stat(file, &st) != 0) + break; + size = st.st_size; + if (!sighdrPut(sigh, sigTag, RPM_INT32_TYPE, &size, 1)) + break; + ret = 0; + } break; + case RPMSIGTAG_LONGSIZE: { + rpm_loff_t size; + if (stat(file, &st) != 0) + break; + size = st.st_size; + if (!sighdrPut(sigh, sigTag, RPM_INT64_TYPE, &size, 1)) + break; + ret = 0; + } break; + case RPMSIGTAG_MD5: + pktlen = 16; + pkt = xcalloc(pktlen, sizeof(*pkt)); + if (rpmDoDigest(PGPHASHALGO_MD5, file, 0, pkt, NULL) + || !sighdrPut(sigh, sigTag, RPM_BIN_TYPE, pkt, pktlen)) + break; + ret = 0; + break; + case RPMSIGTAG_SHA1: + ret = makeHDRDigest(sigh, file, sigTag); + break; + default: + break; + } + free(pkt); + + return ret; +} + +static const char * rpmSigString(rpmRC res) +{ + const char * str; + switch (res) { + case RPMRC_OK: str = "OK"; break; + case RPMRC_FAIL: str = "BAD"; break; + case RPMRC_NOKEY: str = "NOKEY"; break; + case RPMRC_NOTTRUSTED: str = "NOTRUSTED"; break; + default: + case RPMRC_NOTFOUND: str = "UNKNOWN"; break; + } + return str; +} + +static rpmRC +verifyMD5Digest(rpmtd sigtd, DIGEST_CTX md5ctx, char **msg) +{ + rpmRC res = RPMRC_FAIL; /* assume failure */ + uint8_t * md5sum = NULL; + size_t md5len = 0; + char *md5; + const char *title = _("MD5 digest:"); + *msg = NULL; + DIGEST_CTX ctx = rpmDigestDup(md5ctx); + + if (ctx == NULL || sigtd->data == NULL) { + rasprintf(msg, "%s %s\n", title, rpmSigString(res)); + goto exit; + } + + (void) rpmDigestFinal(ctx, (void **)&md5sum, &md5len, 0); + + md5 = pgpHexStr(md5sum, md5len); + if (md5len != sigtd->count || memcmp(md5sum, sigtd->data, md5len)) { + char *hex = rpmtdFormat(sigtd, RPMTD_FORMAT_STRING, NULL); + rasprintf(msg, "%s %s Expected(%s) != (%s)\n", title, + rpmSigString(res), hex, md5); + free(hex); + } else { + res = RPMRC_OK; + rasprintf(msg, "%s %s (%s)\n", title, rpmSigString(res), md5); + } + free(md5); + +exit: + md5sum = _free(md5sum); + return res; +} + +/** + * Verify header immutable region SHA1 digest. + * @retval msg verbose success/failure text + * @param sha1ctx + * @return RPMRC_OK on success + */ +static rpmRC +verifySHA1Digest(rpmtd sigtd, DIGEST_CTX sha1ctx, char **msg) +{ + rpmRC res = RPMRC_FAIL; /* assume failure */ + char * SHA1 = NULL; + const char *title = _("Header SHA1 digest:"); + const char *sig = sigtd->data; + *msg = NULL; + DIGEST_CTX ctx = rpmDigestDup(sha1ctx); + + if (ctx == NULL || sigtd->data == NULL) { + rasprintf(msg, "%s %s\n", title, rpmSigString(res)); + goto exit; + } + + (void) rpmDigestFinal(ctx, (void **)&SHA1, NULL, 1); + + if (SHA1 == NULL || strlen(SHA1) != strlen(sig) || !rstreq(SHA1, sig)) { + rasprintf(msg, "%s %s Expected(%s) != (%s)\n", title, + rpmSigString(res), sig, SHA1 ? SHA1 : "(nil)"); + } else { + res = RPMRC_OK; + rasprintf(msg, "%s %s (%s)\n", title, rpmSigString(res), SHA1); + } + +exit: + SHA1 = _free(SHA1); + return res; +} + +/** + * Verify DSA/RSA signature. + * @param keyring pubkey keyring + * @param dig OpenPGP container + * @param hashctx digest context + * @param isHdr header-only signature? + * @retval msg verbose success/failure text + * @return RPMRC_OK on success + */ +static rpmRC +verifySignature(rpmKeyring keyring, pgpDig dig, DIGEST_CTX hashctx, int isHdr, + char **msg) +{ + pgpDigParams sigp = dig ? &dig->signature : NULL; + rpmRC res = RPMRC_FAIL; /* assume failure */ + char *sigid = NULL; + *msg = NULL; + + if (hashctx == NULL) { + goto exit; + } + + /* Call verify even if we dont have a key for a basic sanity check */ + (void) rpmKeyringLookup(keyring, dig); + res = pgpVerifySig(dig, hashctx); + +exit: + sigid = pgpIdentItem(sigp); + rasprintf(msg, "%s%s: %s\n", isHdr ? _("Header ") : "", sigid, + rpmSigString(res)); + free(sigid); + return res; +} + +rpmRC +rpmVerifySignature(rpmKeyring keyring, rpmtd sigtd, pgpDig dig, DIGEST_CTX ctx, char ** result) +{ + rpmRC res = RPMRC_NOTFOUND; + char *msg = NULL; + + if (sigtd->data == NULL || sigtd->count <= 0 || dig == NULL) { + rasprintf(&msg, _("Verify signature: BAD PARAMETERS\n")); + goto exit; + } + + switch (sigtd->tag) { + case RPMSIGTAG_MD5: + res = verifyMD5Digest(sigtd, ctx, &msg); + break; + case RPMSIGTAG_SHA1: + res = verifySHA1Digest(sigtd, ctx, &msg); + break; + case RPMSIGTAG_RSA: + case RPMSIGTAG_DSA: + res = verifySignature(keyring, dig, ctx, 1, &msg); + break; + case RPMSIGTAG_PGP5: /* XXX legacy */ + case RPMSIGTAG_PGP: + case RPMSIGTAG_GPG: + res = verifySignature(keyring, dig, ctx, 0, &msg); + break; + default: + rasprintf(&msg, _("Signature: UNKNOWN (%d)\n"), sigtd->tag); + break; + } + +exit: + if (result) { + *result = msg; + } else { + free(msg); + } + return res; +} diff --git a/lib/signature.h b/lib/signature.h new file mode 100644 index 0000000..726f7f0 --- /dev/null +++ b/lib/signature.h @@ -0,0 +1,79 @@ +#ifndef H_SIGNATURE +#define H_SIGNATURE + +/** \ingroup signature + * \file lib/signature.h + * Generate and verify signatures. + */ + +#include + +/** \ingroup signature + * Signature types stored in rpm lead. + */ +typedef enum sigType_e { + RPMSIGTYPE_HEADERSIG= 5 /*!< Header style signature */ +} sigType; + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup signature + * Return new, empty (signature) header instance. + * @return signature header + */ +Header rpmNewSignature(void); + +/** \ingroup signature + * Read (and verify header+payload size) signature header. + * If an old-style signature is found, we emulate a new style one. + * @param fd file handle + * @retval sighp address of (signature) header (or NULL) + * @param sig_type type of signature header to read (from lead) + * @retval msg failure msg + * @return rpmRC return code + */ +rpmRC rpmReadSignature(FD_t fd, Header *sighp, sigType sig_type, char ** msg); + +/** \ingroup signature + * Write signature header. + * @param fd file handle + * @param h (signature) header + * @return 0 on success, 1 on error + */ +int rpmWriteSignature(FD_t fd, Header h); + +/** \ingroup signature + * Generate digest(s) from a header+payload file, save in signature header. + * @param sigh signature header + * @param file header+payload file name + * @param sigTag type of digest(s) to add + * @return 0 on success, -1 on failure + */ +int rpmGenDigest(Header sigh, const char * file, rpmTagVal sigTag); + +/** \ingroup signature + * Verify a signature from a package. + * + * @param keyring keyring handle + * @param sigtd signature tag data container + * @param dig signature/pubkey parameters + * @retval result detailed text result of signature verification + * (malloc'd) + * @return result of signature verification + */ +rpmRC rpmVerifySignature(rpmKeyring keyring, rpmtd sigtd, pgpDig dig, DIGEST_CTX ctx, char ** result); + +/** \ingroup signature + * Destroy signature header from package. + * @param h signature header + * @return NULL always + */ +Header rpmFreeSignature(Header h); + +#ifdef __cplusplus +} +#endif + +#endif /* H_SIGNATURE */ diff --git a/lib/tagexts.c b/lib/tagexts.c new file mode 100644 index 0000000..aca3209 --- /dev/null +++ b/lib/tagexts.c @@ -0,0 +1,705 @@ +/** \ingroup header + * \file lib/formats.c + */ + +#include "system.h" + +#include +#include +#include /* XXX for %_i18ndomains */ +#include +#include +#include +#include "lib/misc.h" /* tag function proto */ + +#include "debug.h" + +struct headerTagFunc_s { + rpmTag tag; /*!< Tag of extension. */ + headerTagTagFunction func; /*!< Pointer to formatter function. */ +}; + +/** \ingroup rpmfi + * Retrieve file names from header. + * + * The representation of file names in package headers changed in rpm-4.0. + * Originally, file names were stored as an array of absolute paths. + * In rpm-4.0, file names are stored as separate arrays of dirname's and + * basename's, * with a dirname index to associate the correct dirname + * with each basname. + * + * This function is used to retrieve file names independent of how the + * file names are represented in the package header. + * + * @param h header + * @param tagN RPMTAG_BASENAMES | PMTAG_ORIGBASENAMES + * @retval *fnp array of file names + * @retval *fcp number of files + */ +static void rpmfiBuildFNames(Header h, rpmTag tagN, + const char *** fnp, rpm_count_t * fcp) +{ + const char **baseNames, **dirNames, **fileNames; + uint32_t *dirIndexes; + rpm_count_t count; + size_t size; + rpmTag dirNameTag = RPMTAG_DIRNAMES; + rpmTag dirIndexesTag = RPMTAG_DIRINDEXES; + char * t; + int i; + struct rpmtd_s bnames, dnames, dixs; + + if (tagN == RPMTAG_ORIGBASENAMES) { + dirNameTag = RPMTAG_ORIGDIRNAMES; + dirIndexesTag = RPMTAG_ORIGDIRINDEXES; + } + + if (!headerGet(h, tagN, &bnames, HEADERGET_MINMEM)) { + *fnp = NULL; + *fcp = 0; + return; /* no file list */ + } + (void) headerGet(h, dirNameTag, &dnames, HEADERGET_MINMEM); + (void) headerGet(h, dirIndexesTag, &dixs, HEADERGET_MINMEM); + + count = rpmtdCount(&bnames); + baseNames = bnames.data; + dirNames = dnames.data; + dirIndexes = dixs.data; + + /* + * fsm, psm and rpmfi assume the data is stored in a single allocation + * block, until those assumptions are removed we need to jump through + * a few hoops here and precalculate sizes etc + */ + size = sizeof(*fileNames) * count; + for (i = 0; i < count; i++) + size += strlen(baseNames[i]) + strlen(dirNames[dirIndexes[i]]) + 1; + + fileNames = xmalloc(size); + t = ((char *) fileNames) + (sizeof(*fileNames) * count); + for (i = 0; i < count; i++) { + fileNames[i] = t; + t = stpcpy( stpcpy(t, dirNames[dirIndexes[i]]), baseNames[i]); + *t++ = '\0'; + } + rpmtdFreeData(&bnames); + rpmtdFreeData(&dnames); + rpmtdFreeData(&dixs); + + *fnp = fileNames; + *fcp = count; +} + +static int filedepTag(Header h, rpmTag tagN, rpmtd td, headerGetFlags hgflags) +{ + rpmfi fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, RPMFI_NOHEADER); + rpmds ds = NULL; + char **fdeps = NULL; + int numfiles; + char deptype = 'R'; + int fileix; + int rc = 0; + + numfiles = rpmfiFC(fi); + if (numfiles <= 0) { + goto exit; + } + + if (tagN == RPMTAG_PROVIDENAME) + deptype = 'P'; + else if (tagN == RPMTAG_REQUIRENAME) + deptype = 'R'; + + ds = rpmdsNew(h, tagN, 0); + fdeps = xmalloc(numfiles * sizeof(*fdeps)); + + while ((fileix = rpmfiNext(fi)) >= 0) { + ARGV_t deps = NULL; + const uint32_t * ddict = NULL; + int ndx = rpmfiFDepends(fi, &ddict); + if (ddict != NULL) { + while (ndx-- > 0) { + const char * DNEVR; + unsigned dix = *ddict++; + char mydt = ((dix >> 24) & 0xff); + if (mydt != deptype) + continue; + dix &= 0x00ffffff; + (void) rpmdsSetIx(ds, dix-1); + if (rpmdsNext(ds) < 0) + continue; + DNEVR = rpmdsDNEVR(ds); + if (DNEVR != NULL) { + argvAdd(&deps, DNEVR + 2); + } + } + } + fdeps[fileix] = deps ? argvJoin(deps, " ") : xstrdup(""); + argvFree(deps); + } + td->data = fdeps; + td->count = numfiles; + td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED; + td->type = RPM_STRING_ARRAY_TYPE; + rc = 1; + +exit: + fi = rpmfiFree(fi); + ds = rpmdsFree(ds); + return rc; +} + +/** + * Retrieve trigger info. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int triggercondsTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + uint32_t * indices; + int i, j; + char ** conds; + struct rpmtd_s nametd, indextd, flagtd, versiontd, scripttd; + int hgeflags = HEADERGET_MINMEM; + + if (!headerGet(h, RPMTAG_TRIGGERNAME, &nametd, hgeflags)) { + return 0; + } + + headerGet(h, RPMTAG_TRIGGERINDEX, &indextd, hgeflags); + headerGet(h, RPMTAG_TRIGGERFLAGS, &flagtd, hgeflags); + headerGet(h, RPMTAG_TRIGGERVERSION, &versiontd, hgeflags); + headerGet(h, RPMTAG_TRIGGERSCRIPTS, &scripttd, hgeflags); + + td->type = RPM_STRING_ARRAY_TYPE; + td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED; + td->data = conds = xmalloc(sizeof(*conds) * rpmtdCount(&scripttd)); + td->count = rpmtdCount(&scripttd); + + indices = indextd.data; + + while ((i = rpmtdNext(&scripttd)) >= 0) { + rpm_flag_t *flag; + char *flagStr, *item; + ARGV_t items = NULL; + + rpmtdInit(&nametd); rpmtdInit(&flagtd); rpmtdInit(&versiontd); + while ((j = rpmtdNext(&nametd)) >= 0) { + /* flag and version arrays match name array size always */ + rpmtdNext(&flagtd); rpmtdNext(&versiontd); + + if (indices[j] != i) + continue; + + flag = rpmtdGetUint32(&flagtd); + if (flag && *flag & RPMSENSE_SENSEMASK) { + flagStr = rpmtdFormat(&flagtd, RPMTD_FORMAT_DEPFLAGS, NULL); + rasprintf(&item, "%s %s %s", rpmtdGetString(&nametd), + flagStr, + rpmtdGetString(&versiontd)); + free(flagStr); + } else { + item = xstrdup(rpmtdGetString(&nametd)); + } + + argvAdd(&items, item); + free(item); + } + + conds[i] = argvJoin(items, ", "); + argvFree(items); + } + + rpmtdFreeData(&nametd); + rpmtdFreeData(&versiontd); + rpmtdFreeData(&flagtd); + rpmtdFreeData(&indextd); + rpmtdFreeData(&scripttd); + return 1; +} + +/** + * Retrieve trigger type info. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int triggertypeTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + int i; + char ** conds; + struct rpmtd_s indices, flags, scripts; + + if (!headerGet(h, RPMTAG_TRIGGERINDEX, &indices, HEADERGET_MINMEM)) { + return 0; + } + + headerGet(h, RPMTAG_TRIGGERFLAGS, &flags, HEADERGET_MINMEM); + headerGet(h, RPMTAG_TRIGGERSCRIPTS, &scripts, HEADERGET_MINMEM); + + td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED; + td->count = rpmtdCount(&scripts); + td->data = conds = xmalloc(sizeof(*conds) * td->count); + td->type = RPM_STRING_ARRAY_TYPE; + + while ((i = rpmtdNext(&scripts)) >= 0) { + rpm_flag_t *flag; + rpmtdInit(&indices); rpmtdInit(&flags); + + while (rpmtdNext(&indices) >= 0 && rpmtdNext(&flags) >= 0) { + if (*rpmtdGetUint32(&indices) != i) + continue; + + flag = rpmtdGetUint32(&flags); + if (*flag & RPMSENSE_TRIGGERPREIN) + conds[i] = xstrdup("prein"); + else if (*flag & RPMSENSE_TRIGGERIN) + conds[i] = xstrdup("in"); + else if (*flag & RPMSENSE_TRIGGERUN) + conds[i] = xstrdup("un"); + else if (*flag & RPMSENSE_TRIGGERPOSTUN) + conds[i] = xstrdup("postun"); + else + conds[i] = xstrdup(""); + break; + } + } + rpmtdFreeData(&indices); + rpmtdFreeData(&flags); + rpmtdFreeData(&scripts); + + return 1; +} + +/** + * Retrieve file paths. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int filenamesTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + rpmfiBuildFNames(h, RPMTAG_BASENAMES, + (const char ***) &(td->data), &(td->count)); + if (td->data) { + td->type = RPM_STRING_ARRAY_TYPE; + td->flags = RPMTD_ALLOCED; + } + return (td->data != NULL); +} + +/** + * Retrieve original file paths (wrt relocation). + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int origfilenamesTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + rpmfiBuildFNames(h, RPMTAG_ORIGBASENAMES, + (const char ***) &(td->data), &(td->count)); + if (td->data) { + td->type = RPM_STRING_ARRAY_TYPE; + td->flags = RPMTD_ALLOCED; + } + return (td->data != NULL); +} +/** + * Retrieve file classes. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int fileclassTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + rpmfi fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, RPMFI_NOHEADER); + char **fclasses; + int ix, numfiles; + int rc = 0; + + numfiles = rpmfiFC(fi); + if (numfiles <= 0) { + goto exit; + } + + fclasses = xmalloc(numfiles * sizeof(*fclasses)); + rpmfiInit(fi, 0); + while ((ix = rpmfiNext(fi)) >= 0) { + const char *fclass = rpmfiFClass(fi); + fclasses[ix] = xstrdup(fclass ? fclass : ""); + } + + td->data = fclasses; + td->count = numfiles; + td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED; + td->type = RPM_STRING_ARRAY_TYPE; + rc = 1; + +exit: + fi = rpmfiFree(fi); + return rc; +} + +/** + * Retrieve file provides. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int fileprovideTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return filedepTag(h, RPMTAG_PROVIDENAME, td, hgflags); +} + +/** + * Retrieve file requires. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int filerequireTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return filedepTag(h, RPMTAG_REQUIRENAME, td, hgflags); +} + +/* I18N look aside diversions */ + +#if defined(ENABLE_NLS) +extern int _nl_msg_cat_cntr; /* XXX GNU gettext voodoo */ +#endif +static const char * const language = "LANGUAGE"; + +static const char * const _macro_i18ndomains = "%{?_i18ndomains}"; + +/** + * Retrieve i18n text. + * @param h header + * @param tag tag + * @retval td tag data container + * @return 1 on success + */ +static int i18nTag(Header h, rpmTag tag, rpmtd td, headerGetFlags hgflags) +{ + int rc; +#if defined(ENABLE_NLS) + char * dstring = rpmExpand(_macro_i18ndomains, NULL); + + td->type = RPM_STRING_TYPE; + td->data = NULL; + td->count = 0; + + if (dstring && *dstring) { + char *domain, *de; + const char * langval; + char * msgkey; + const char * msgid; + + rasprintf(&msgkey, "%s(%s)", headerGetString(h, RPMTAG_NAME), + rpmTagGetName(tag)); + + /* change to en_US for msgkey -> msgid resolution */ + langval = getenv(language); + (void) setenv(language, "en_US", 1); + ++_nl_msg_cat_cntr; + + msgid = NULL; + for (domain = dstring; domain != NULL; domain = de) { + de = strchr(domain, ':'); + if (de) *de++ = '\0'; + msgid = dgettext(domain, msgkey); + if (msgid != msgkey) break; + } + + /* restore previous environment for msgid -> msgstr resolution */ + if (langval) + (void) setenv(language, langval, 1); + else + unsetenv(language); + ++_nl_msg_cat_cntr; + + if (domain && msgid) { + td->data = dgettext(domain, msgid); + td->data = xstrdup(td->data); /* XXX xstrdup has side effects. */ + td->count = 1; + td->flags = RPMTD_ALLOCED; + } + dstring = _free(dstring); + free(msgkey); + if (td->data) + return 1; + } + + dstring = _free(dstring); +#endif + + rc = headerGet(h, tag, td, HEADERGET_ALLOC); + return rc; +} + +/** + * Retrieve summary text. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int summaryTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return i18nTag(h, RPMTAG_SUMMARY, td, hgflags); +} + +/** + * Retrieve description text. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int descriptionTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return i18nTag(h, RPMTAG_DESCRIPTION, td, hgflags); +} + +/** + * Retrieve group text. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int groupTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return i18nTag(h, RPMTAG_GROUP, td, hgflags); +} + +/* + * Helper to convert 32bit tag to 64bit version. + * If header has new 64bit tag then just return the data, + * otherwise convert 32bit old tag data to 64bit values. + * For consistency, always return malloced data. + */ +static int get64(Header h, rpmtd td, rpmTag newtag, rpmTag oldtag) +{ + int rc; + + if (headerIsEntry(h, newtag)) { + rc = headerGet(h, newtag, td, HEADERGET_ALLOC); + } else { + struct rpmtd_s olddata; + uint32_t *d32 = NULL; + uint64_t *d64 = NULL; + + headerGet(h, oldtag, &olddata, HEADERGET_MINMEM); + if (rpmtdType(&olddata) == RPM_INT32_TYPE) { + td->type = RPM_INT64_TYPE; + td->count = olddata.count; + td->flags = RPMTD_ALLOCED; + td->data = xmalloc(sizeof(*d64) * td->count); + d64 = td->data; + while ((d32 = rpmtdNextUint32(&olddata))) { + *d64++ = *d32; + } + } + rpmtdFreeData(&olddata); + rc = d64 ? 1 : 0; + } + + return rc; +} + +/** + * Retrieve file sizes as 64bit regardless of how they're stored. + * @param h header + * @retval td tag data container + * @return 1 on success + */ +static int longfilesizesTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return get64(h, td, RPMTAG_LONGFILESIZES, RPMTAG_FILESIZES); +} + +static int longarchivesizeTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return get64(h, td, RPMTAG_LONGARCHIVESIZE, RPMTAG_ARCHIVESIZE); +} + +static int longsizeTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return get64(h, td, RPMTAG_LONGSIZE, RPMTAG_SIZE); +} + +static int longsigsizeTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return get64(h, td, RPMTAG_LONGSIGSIZE, RPMTAG_SIGSIZE); +} + +static int numberTag(rpmtd td, uint32_t val) +{ + uint32_t *tval = xmalloc(sizeof(*tval)); + + tval[0] = val; + td->type = RPM_INT32_TYPE; + td->count = 1; + td->data = tval; + td->flags = RPMTD_ALLOCED; + return 1; /* this cannot fail */ +} + +static int dbinstanceTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return numberTag(td, headerGetInstance(h)); +} + +static int headercolorTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + rpm_color_t *fcolor, hcolor = 0; + struct rpmtd_s fcolors; + + headerGet(h, RPMTAG_FILECOLORS, &fcolors, HEADERGET_MINMEM); + while ((fcolor = rpmtdNextUint32(&fcolors)) != NULL) { + hcolor |= *fcolor; + } + rpmtdFreeData(&fcolors); + hcolor &= 0x0f; + + return numberTag(td, hcolor); +} + +enum nevraFlags_e { + NEVRA_NAME = (1 << 0), + NEVRA_EPOCH = (1 << 1), + NEVRA_VERSION = (1 << 2), + NEVRA_RELEASE = (1 << 3), + NEVRA_ARCH = (1 << 4) +}; +typedef rpmFlags nevraFlags; + +static int getNEVRA(Header h, rpmtd td, nevraFlags flags) +{ + const char *val = NULL; + char *res = NULL; + + if ((flags & NEVRA_NAME)) { + val = headerGetString(h, RPMTAG_NAME); + if (val) rstrscat(&res, val, "-", NULL); + } + if ((flags & NEVRA_EPOCH)) { + char *e = headerGetAsString(h, RPMTAG_EPOCH); + if (e) rstrscat(&res, e, ":", NULL); + free(e); + } + if ((flags & NEVRA_VERSION)) { + val = headerGetString(h, RPMTAG_VERSION); + if (val) rstrscat(&res, val, "-", NULL); + } + if ((flags & NEVRA_RELEASE)) { + val = headerGetString(h, RPMTAG_RELEASE); + if (val) rstrscat(&res, val, NULL); + } + if ((flags & NEVRA_ARCH)) { + val = headerGetString(h, RPMTAG_ARCH); + if (headerIsSource(h) && val == NULL) val = "src"; + if (val) rstrscat(&res, ".", val, NULL); + } + + td->type = RPM_STRING_TYPE; + td->data = res; + td->count = 1; + td->flags = RPMTD_ALLOCED; + + return 1; +} + +static int evrTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return getNEVRA(h, td, NEVRA_EPOCH|NEVRA_VERSION|NEVRA_RELEASE); +} + +static int nvrTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return getNEVRA(h, td, NEVRA_NAME|NEVRA_VERSION|NEVRA_RELEASE); +} + +static int nvraTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return getNEVRA(h, td, NEVRA_NAME|NEVRA_VERSION|NEVRA_RELEASE|NEVRA_ARCH); +} + +static int nevrTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return getNEVRA(h, td, NEVRA_NAME|NEVRA_EPOCH|NEVRA_VERSION|NEVRA_RELEASE); +} + +static int nevraTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + return getNEVRA(h, td, NEVRA_NAME|NEVRA_EPOCH|NEVRA_VERSION|NEVRA_RELEASE|NEVRA_ARCH); +} + +static int verboseTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + if (rpmIsVerbose()) { + td->type = RPM_INT32_TYPE; + td->count = 1; + td->data = &(td->count); + td->flags = RPMTD_NONE; + return 1; + } else { + return 0; + } +} + +static int epochnumTag(Header h, rpmtd td, headerGetFlags hgflags) +{ + /* For consistency, always return malloced data */ + if (!headerGet(h, RPMTAG_EPOCH, td, HEADERGET_ALLOC)) { + uint32_t *e = malloc(sizeof(*e)); + *e = 0; + td->data = e; + td->type = RPM_INT32_TYPE; + td->count = 1; + td->flags = RPMTD_ALLOCED; + } + td->tag = RPMTAG_EPOCHNUM; + return 1; +} + +static const struct headerTagFunc_s rpmHeaderTagExtensions[] = { + { RPMTAG_GROUP, groupTag }, + { RPMTAG_DESCRIPTION, descriptionTag }, + { RPMTAG_SUMMARY, summaryTag }, + { RPMTAG_FILECLASS, fileclassTag }, + { RPMTAG_FILENAMES, filenamesTag }, + { RPMTAG_ORIGFILENAMES, origfilenamesTag }, + { RPMTAG_FILEPROVIDE, fileprovideTag }, + { RPMTAG_FILEREQUIRE, filerequireTag }, + { RPMTAG_TRIGGERCONDS, triggercondsTag }, + { RPMTAG_TRIGGERTYPE, triggertypeTag }, + { RPMTAG_LONGFILESIZES, longfilesizesTag }, + { RPMTAG_LONGARCHIVESIZE, longarchivesizeTag }, + { RPMTAG_LONGSIZE, longsizeTag }, + { RPMTAG_LONGSIGSIZE, longsigsizeTag }, + { RPMTAG_DBINSTANCE, dbinstanceTag }, + { RPMTAG_EVR, evrTag }, + { RPMTAG_NVR, nvrTag }, + { RPMTAG_NEVR, nevrTag }, + { RPMTAG_NVRA, nvraTag }, + { RPMTAG_NEVRA, nevraTag }, + { RPMTAG_HEADERCOLOR, headercolorTag }, + { RPMTAG_VERBOSE, verboseTag }, + { RPMTAG_EPOCHNUM, epochnumTag }, + { 0, NULL } +}; + +headerTagTagFunction rpmHeaderTagFunc(rpmTagVal tag) +{ + const struct headerTagFunc_s * ext; + headerTagTagFunction func = NULL; + + for (ext = rpmHeaderTagExtensions; ext->func != NULL; ext++) { + if (ext->tag == tag) { + func = ext->func; + break; + } + } + return func; +} + diff --git a/lib/tagname.c b/lib/tagname.c new file mode 100644 index 0000000..adc7178 --- /dev/null +++ b/lib/tagname.c @@ -0,0 +1,318 @@ +/** + * \file lib/tagname.c + */ + +#include "system.h" + +#include +#include +#include "debug.h" + +/** \ingroup header + * Associate tag names with numeric values. + */ +typedef const struct headerTagTableEntry_s * headerTagTableEntry; +struct headerTagTableEntry_s { + const char * name; /*!< Tag name. */ + const char * shortname; /*!< "Human readable" short name. */ + rpmTagVal val; /*!< Tag numeric value. */ + rpmTagType type; /*!< Tag type. */ + rpmTagReturnType retype; /*!< Tag return type. */ + int extension; /*!< Extension or "real" tag */ +}; + +#include "lib/tagtbl.C" + +static const int rpmTagTableSize = sizeof(rpmTagTable) / sizeof(rpmTagTable[0]) - 1; + +/** + */ +typedef struct headerTagIndices_s * headerTagIndices; + +struct headerTagIndices_s { + int (*loadIndex) (headerTagTableEntry ** ipp, int * np, + int (*cmp) (const void * avp, const void * bvp)); + /*!< load sorted tag index. */ + headerTagTableEntry * byName; /*!< header tags sorted by name. */ + int byNameSize; /*!< no. of entries. */ + int (*byNameCmp) (const void * avp, const void * bvp); /*!< compare entries by name. */ + rpmTagVal (*tagValue) (const char * name); /* return value from name. */ + headerTagTableEntry * byValue; /*!< header tags sorted by value. */ + int byValueSize; /*!< no. of entries. */ + int (*byValueCmp) (const void * avp, const void * bvp); /*!< compare entries by value. */ + const char * (*tagName) (rpmTagVal value); /* Return name from value. */ + rpmTagType (*tagType) (rpmTagVal value); /* Return type from value. */ +}; + +/** + * Compare tag table entries by name. + * @param *avp tag table entry a + * @param *bvp tag table entry b + * @return comparison + */ +static int tagCmpName(const void * avp, const void * bvp) +{ + headerTagTableEntry a = *(const headerTagTableEntry *) avp; + headerTagTableEntry b = *(const headerTagTableEntry *) bvp; + return strcmp(a->name, b->name); +} + +/** + * Compare tag table entries by value. + * @param *avp tag table entry a + * @param *bvp tag table entry b + * @return comparison + */ +static int tagCmpValue(const void * avp, const void * bvp) +{ + headerTagTableEntry a = *(const headerTagTableEntry *) avp; + headerTagTableEntry b = *(const headerTagTableEntry *) bvp; + int ret = (a->val - b->val); + /* Make sure that sort is stable, longest name first. */ + if (ret == 0) + ret = (strlen(b->name) - strlen(a->name)); + return ret; +} + +/** + * Load/sort a tag index. + * @retval *ipp tag index + * @retval *np no. of tags + * @param cmp sort compare routine + * @return 0 always + */ +static int tagLoadIndex(headerTagTableEntry ** ipp, int * np, + int (*cmp) (const void * avp, const void * bvp)) +{ + headerTagTableEntry tte, *ip; + int n = 0; + + ip = xcalloc(rpmTagTableSize, sizeof(*ip)); + n = 0; + for (tte = (headerTagTableEntry)rpmTagTable; tte->name != NULL; tte++) { + ip[n] = tte; + n++; + } +assert(n == rpmTagTableSize); + + if (n > 1) + qsort(ip, n, sizeof(*ip), cmp); + *ipp = ip; + *np = n; + return 0; +} + + +/* forward refs */ +static const char * _tagName(rpmTagVal tag); +static rpmTagType _tagType(rpmTagVal tag); +static rpmTagVal _tagValue(const char * tagstr); + +static struct headerTagIndices_s _rpmTags = { + tagLoadIndex, + NULL, 0, tagCmpName, _tagValue, + NULL, 0, tagCmpValue, _tagName, _tagType, +}; + +static headerTagIndices const rpmTags = &_rpmTags; + +static const char * _tagName(rpmTagVal tag) +{ + const char *name = "(unknown)"; + const struct headerTagTableEntry_s *t; + int comparison, i, l, u; + int xx; + + if (_rpmTags.byValue == NULL) + xx = tagLoadIndex(&_rpmTags.byValue, &_rpmTags.byValueSize, tagCmpValue); + + switch (tag) { + case RPMDBI_PACKAGES: + name = "Packages"; + break; + /* XXX make sure rpmdb indices are identically named. */ + case RPMTAG_CONFLICTS: + name = "Conflictname"; + break; + case RPMTAG_HDRID: + name = "Sha1header"; + break; + + default: + if (_rpmTags.byValue == NULL) + break; + l = 0; + u = _rpmTags.byValueSize; + while (l < u) { + i = (l + u) / 2; + t = _rpmTags.byValue[i]; + + comparison = (tag - t->val); + + if (comparison < 0) + u = i; + else if (comparison > 0) + l = i + 1; + else { + /* Make sure that the bsearch retrieve is stable. */ + while (i > 0 && tag == _rpmTags.byValue[i-1]->val) { + i--; + } + t = _rpmTags.byValue[i]; + if (t->shortname != NULL) + name = t->shortname; + break; + } + } + break; + } + return name; +} + +static rpmTagType _tagType(rpmTagVal tag) +{ + const struct headerTagTableEntry_s *t; + int comparison, i, l, u; + int xx; + + if (_rpmTags.byValue == NULL) + xx = tagLoadIndex(&_rpmTags.byValue, &_rpmTags.byValueSize, tagCmpValue); + if (_rpmTags.byValue) { + l = 0; + u = _rpmTags.byValueSize; + while (l < u) { + i = (l + u) / 2; + t = _rpmTags.byValue[i]; + + comparison = (tag - t->val); + + if (comparison < 0) + u = i; + else if (comparison > 0) + l = i + 1; + else { + /* Make sure that the bsearch retrieve is stable. */ + while (i > 0 && t->val == _rpmTags.byValue[i-1]->val) { + i--; + } + t = _rpmTags.byValue[i]; + /* XXX this is dumb */ + return (rpmTagType)(t->type | t->retype); + } + } + } + return RPM_NULL_TYPE; +} + +static rpmTagVal _tagValue(const char * tagstr) +{ + const struct headerTagTableEntry_s *t; + int comparison, i, l, u; + int xx; + + if (!rstrcasecmp(tagstr, "Packages")) + return RPMDBI_PACKAGES; + + if (_rpmTags.byName == NULL) + xx = tagLoadIndex(&_rpmTags.byName, &_rpmTags.byNameSize, tagCmpName); + if (_rpmTags.byName == NULL) + return RPMTAG_NOT_FOUND; + + l = 0; + u = _rpmTags.byNameSize; + while (l < u) { + i = (l + u) / 2; + t = _rpmTags.byName[i]; + + comparison = rstrcasecmp(tagstr, t->shortname); + + if (comparison < 0) + u = i; + else if (comparison > 0) + l = i + 1; + else + return t->val; + } + return RPMTAG_NOT_FOUND; +} + +const char * rpmTagGetName(rpmTagVal tag) +{ + return ((*rpmTags->tagName)(tag)); +} + +rpmTagType rpmTagGetType(rpmTagVal tag) +{ + return ((*rpmTags->tagType)(tag)); +} + +rpmTagType rpmTagGetTagType(rpmTagVal tag) +{ + return (rpmTagType)((*rpmTags->tagType)(tag) & RPM_MASK_TYPE); +} + +rpmTagReturnType rpmTagGetReturnType(rpmTagVal tag) +{ + return ((*rpmTags->tagType)(tag) & RPM_MASK_RETURN_TYPE); +} + +rpmTagClass rpmTagTypeGetClass(rpmTagType type) +{ + rpmTagClass tclass; + switch (type & RPM_MASK_TYPE) { + case RPM_CHAR_TYPE: + case RPM_INT8_TYPE: + case RPM_INT16_TYPE: + case RPM_INT32_TYPE: + case RPM_INT64_TYPE: + tclass = RPM_NUMERIC_CLASS; + break; + case RPM_STRING_TYPE: + case RPM_STRING_ARRAY_TYPE: + case RPM_I18NSTRING_TYPE: + tclass = RPM_STRING_CLASS; + break; + case RPM_BIN_TYPE: + tclass = RPM_BINARY_CLASS; + break; + case RPM_NULL_TYPE: + default: + tclass = RPM_NULL_CLASS; + break; + } + return tclass; +} + +rpmTagClass rpmTagGetClass(rpmTagVal tag) +{ + return rpmTagTypeGetClass(rpmTagGetTagType(tag)); +} + +rpmTagVal rpmTagGetValue(const char * tagstr) +{ + return ((*rpmTags->tagValue)(tagstr)); +} + +int rpmTagGetNames(rpmtd tagnames, int fullname) +{ + const char **names; + const char *name; + + if (_rpmTags.byName == NULL) + tagLoadIndex(&_rpmTags.byName, &_rpmTags.byNameSize, tagCmpName); + if (tagnames == NULL ||_rpmTags.byName == NULL) + return 0; + + rpmtdReset(tagnames); + tagnames->count = _rpmTags.byNameSize; + tagnames->data = names = xmalloc(tagnames->count * sizeof(*names)); + tagnames->type = RPM_STRING_ARRAY_TYPE; + tagnames->flags = RPMTD_ALLOCED | RPMTD_IMMUTABLE; + + for (int i = 0; i < tagnames->count; i++) { + name = fullname ? _rpmTags.byName[i]->name : + _rpmTags.byName[i]->shortname; + names[i] = name; + } + return tagnames->count; +} diff --git a/lib/tagtbl.C b/lib/tagtbl.C new file mode 100644 index 0000000..4daec25 --- /dev/null +++ b/lib/tagtbl.C @@ -0,0 +1,186 @@ +static const struct headerTagTableEntry_s rpmTagTable[] = { + { "RPMTAG_ARCH", "Arch", RPMTAG_ARCH, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_ARCHIVESIZE", "Archivesize", RPMTAG_ARCHIVESIZE, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_BASENAMES", "Basenames", RPMTAG_BASENAMES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_BUGURL", "Bugurl", RPMTAG_BUGURL, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_BUILDARCHS", "Buildarchs", RPMTAG_BUILDARCHS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_BUILDHOST", "Buildhost", RPMTAG_BUILDHOST, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_BUILDTIME", "Buildtime", RPMTAG_BUILDTIME, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_C", "C", RPMTAG_CONFLICTNAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_CHANGELOGNAME", "Changelogname", RPMTAG_CHANGELOGNAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_CHANGELOGTEXT", "Changelogtext", RPMTAG_CHANGELOGTEXT, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_CHANGELOGTIME", "Changelogtime", RPMTAG_CHANGELOGTIME, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_CLASSDICT", "Classdict", RPMTAG_CLASSDICT, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_COLLECTIONS", "Collections", RPMTAG_COLLECTIONS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_CONFLICTFLAGS", "Conflictflags", RPMTAG_CONFLICTFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_CONFLICTNAME", "Conflictname", RPMTAG_CONFLICTNAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_CONFLICTS", "Conflicts", RPMTAG_CONFLICTNAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_CONFLICTVERSION", "Conflictversion", RPMTAG_CONFLICTVERSION, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_COOKIE", "Cookie", RPMTAG_COOKIE, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_DBINSTANCE", "Dbinstance", RPMTAG_DBINSTANCE, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 1 }, + { "RPMTAG_DEPENDSDICT", "Dependsdict", RPMTAG_DEPENDSDICT, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_DESCRIPTION", "Description", RPMTAG_DESCRIPTION, RPM_I18NSTRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_DIRINDEXES", "Dirindexes", RPMTAG_DIRINDEXES, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_DIRNAMES", "Dirnames", RPMTAG_DIRNAMES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_DISTRIBUTION", "Distribution", RPMTAG_DISTRIBUTION, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_DISTTAG", "Disttag", RPMTAG_DISTTAG, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_DISTURL", "Disturl", RPMTAG_DISTURL, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_DSAHEADER", "Dsaheader", RPMTAG_DSAHEADER, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_E", "E", RPMTAG_EPOCH, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_EPOCH", "Epoch", RPMTAG_EPOCH, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_EPOCHNUM", "Epochnum", RPMTAG_EPOCHNUM, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 1 }, + { "RPMTAG_EVR", "Evr", RPMTAG_EVR, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 1 }, + { "RPMTAG_EXCLUDEARCH", "Excludearch", RPMTAG_EXCLUDEARCH, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_EXCLUDEOS", "Excludeos", RPMTAG_EXCLUDEOS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_EXCLUSIVEARCH", "Exclusivearch", RPMTAG_EXCLUSIVEARCH, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_EXCLUSIVEOS", "Exclusiveos", RPMTAG_EXCLUSIVEOS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILECAPS", "Filecaps", RPMTAG_FILECAPS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILECLASS", "Fileclass", RPMTAG_FILECLASS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILECOLORS", "Filecolors", RPMTAG_FILECOLORS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILECONTEXTS", "Filecontexts", RPMTAG_FILECONTEXTS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEDEPENDSN", "Filedependsn", RPMTAG_FILEDEPENDSN, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEDEPENDSX", "Filedependsx", RPMTAG_FILEDEPENDSX, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEDEVICES", "Filedevices", RPMTAG_FILEDEVICES, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEDIGESTALGO", "Filedigestalgo", RPMTAG_FILEDIGESTALGO, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_FILEDIGESTS", "Filedigests", RPMTAG_FILEDIGESTS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEFLAGS", "Fileflags", RPMTAG_FILEFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEGROUPNAME", "Filegroupname", RPMTAG_FILEGROUPNAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEINODES", "Fileinodes", RPMTAG_FILEINODES, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILELANGS", "Filelangs", RPMTAG_FILELANGS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILELINKTOS", "Filelinktos", RPMTAG_FILELINKTOS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEMD5S", "Filemd5s", RPMTAG_FILEDIGESTS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEMODES", "Filemodes", RPMTAG_FILEMODES, RPM_INT16_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEMTIMES", "Filemtimes", RPMTAG_FILEMTIMES, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILENAMES", "Filenames", RPMTAG_FILENAMES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 1 }, + { "RPMTAG_FILEPROVIDE", "Fileprovide", RPMTAG_FILEPROVIDE, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 1 }, + { "RPMTAG_FILERDEVS", "Filerdevs", RPMTAG_FILERDEVS, RPM_INT16_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEREQUIRE", "Filerequire", RPMTAG_FILEREQUIRE, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 1 }, + { "RPMTAG_FILESIZES", "Filesizes", RPMTAG_FILESIZES, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILESTATES", "Filestates", RPMTAG_FILESTATES, RPM_CHAR_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEUSERNAME", "Fileusername", RPMTAG_FILEUSERNAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FILEVERIFYFLAGS", "Fileverifyflags", RPMTAG_FILEVERIFYFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_FSCONTEXTS", "Fscontexts", RPMTAG_FSCONTEXTS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 1 }, + { "RPMTAG_GIF", "Gif", RPMTAG_GIF, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_GROUP", "Group", RPMTAG_GROUP, RPM_I18NSTRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_HDRID", "Hdrid", RPMTAG_SHA1HEADER, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_HEADERCOLOR", "Headercolor", RPMTAG_HEADERCOLOR, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 1 }, + { "RPMTAG_HEADERI18NTABLE", "Headeri18ntable", RPMTAG_HEADERI18NTABLE, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_HEADERIMAGE", "Headerimage", RPMTAG_HEADERIMAGE, RPM_NULL_TYPE, RPM_ANY_RETURN_TYPE, 0 }, + { "RPMTAG_HEADERIMMUTABLE", "Headerimmutable", RPMTAG_HEADERIMMUTABLE, RPM_NULL_TYPE, RPM_ANY_RETURN_TYPE, 0 }, + { "RPMTAG_HEADERREGIONS", "Headerregions", RPMTAG_HEADERREGIONS, RPM_NULL_TYPE, RPM_ANY_RETURN_TYPE, 0 }, + { "RPMTAG_HEADERSIGNATURES", "Headersignatures", RPMTAG_HEADERSIGNATURES, RPM_NULL_TYPE, RPM_ANY_RETURN_TYPE, 0 }, + { "RPMTAG_ICON", "Icon", RPMTAG_ICON, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_INSTALLCOLOR", "Installcolor", RPMTAG_INSTALLCOLOR, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_INSTALLTID", "Installtid", RPMTAG_INSTALLTID, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_INSTALLTIME", "Installtime", RPMTAG_INSTALLTIME, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_INSTPREFIXES", "Instprefixes", RPMTAG_INSTPREFIXES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_LICENSE", "License", RPMTAG_LICENSE, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_LONGARCHIVESIZE", "Longarchivesize", RPMTAG_LONGARCHIVESIZE, RPM_INT64_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_LONGFILESIZES", "Longfilesizes", RPMTAG_LONGFILESIZES, RPM_INT64_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_LONGSIGSIZE", "Longsigsize", RPMTAG_LONGSIGSIZE, RPM_INT64_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_LONGSIZE", "Longsize", RPMTAG_LONGSIZE, RPM_INT64_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_NAME", "Name", RPMTAG_NAME, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_NEVRA", "Nevra", RPMTAG_NEVRA, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 1 }, + { "RPMTAG_NEVR", "Nevr", RPMTAG_NEVR, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 1 }, + { "RPMTAG_N", "N", RPMTAG_NAME, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_NOPATCH", "Nopatch", RPMTAG_NOPATCH, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_NOSOURCE", "Nosource", RPMTAG_NOSOURCE, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_NVRA", "Nvra", RPMTAG_NVRA, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 1 }, + { "RPMTAG_NVR", "Nvr", RPMTAG_NVR, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 1 }, + { "RPMTAG_OBSOLETEFLAGS", "Obsoleteflags", RPMTAG_OBSOLETEFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_OBSOLETENAME", "Obsoletename", RPMTAG_OBSOLETENAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_OBSOLETES", "Obsoletes", RPMTAG_OBSOLETENAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_OBSOLETEVERSION", "Obsoleteversion", RPMTAG_OBSOLETEVERSION, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_OLDFILENAMES", "Oldfilenames", RPMTAG_OLDFILENAMES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_O", "O", RPMTAG_OBSOLETENAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_OPTFLAGS", "Optflags", RPMTAG_OPTFLAGS, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_ORDERFLAGS", "Orderflags", RPMTAG_ORDERFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_ORDERNAME", "Ordername", RPMTAG_ORDERNAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_ORDERVERSION", "Orderversion", RPMTAG_ORDERVERSION, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_ORIGBASENAMES", "Origbasenames", RPMTAG_ORIGBASENAMES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_ORIGDIRINDEXES", "Origdirindexes", RPMTAG_ORIGDIRINDEXES, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_ORIGDIRNAMES", "Origdirnames", RPMTAG_ORIGDIRNAMES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_ORIGFILENAMES", "Origfilenames", RPMTAG_ORIGFILENAMES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 1 }, + { "RPMTAG_OS", "Os", RPMTAG_OS, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PACKAGER", "Packager", RPMTAG_PACKAGER, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PATCHESFLAGS", "Patchesflags", RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PATCHESNAME", "Patchesname", RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PATCHESVERSION", "Patchesversion", RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PATCH", "Patch", RPMTAG_PATCH, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PAYLOADCOMPRESSOR", "Payloadcompressor", RPMTAG_PAYLOADCOMPRESSOR, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PAYLOADFLAGS", "Payloadflags", RPMTAG_PAYLOADFLAGS, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PAYLOADFORMAT", "Payloadformat", RPMTAG_PAYLOADFORMAT, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PKGID", "Pkgid", RPMTAG_SIGMD5, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PLATFORM", "Platform", RPMTAG_PLATFORM, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_POLICIES", "Policies", RPMTAG_POLICIES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_POLICYFLAGS", "Policyflags", RPMTAG_POLICYFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_POLICYNAMES", "Policynames", RPMTAG_POLICYNAMES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_POLICYTYPESINDEXES", "Policytypesindexes", RPMTAG_POLICYTYPESINDEXES, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_POLICYTYPES", "Policytypes", RPMTAG_POLICYTYPES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_POSTINFLAGS", "Postinflags", RPMTAG_POSTINFLAGS, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_POSTIN", "Postin", RPMTAG_POSTIN, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_POSTINPROG", "Postinprog", RPMTAG_POSTINPROG, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_POSTTRANSFLAGS", "Posttransflags", RPMTAG_POSTTRANSFLAGS, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_POSTTRANS", "Posttrans", RPMTAG_POSTTRANS, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_POSTTRANSPROG", "Posttransprog", RPMTAG_POSTTRANSPROG, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_POSTUNFLAGS", "Postunflags", RPMTAG_POSTUNFLAGS, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_POSTUN", "Postun", RPMTAG_POSTUN, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_POSTUNPROG", "Postunprog", RPMTAG_POSTUNPROG, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_P", "P", RPMTAG_PROVIDENAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PREFIXES", "Prefixes", RPMTAG_PREFIXES, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PREINFLAGS", "Preinflags", RPMTAG_PREINFLAGS, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PREIN", "Prein", RPMTAG_PREIN, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PREINPROG", "Preinprog", RPMTAG_PREINPROG, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PRETRANSFLAGS", "Pretransflags", RPMTAG_PRETRANSFLAGS, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PRETRANS", "Pretrans", RPMTAG_PRETRANS, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PRETRANSPROG", "Pretransprog", RPMTAG_PRETRANSPROG, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PREUNFLAGS", "Preunflags", RPMTAG_PREUNFLAGS, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PREUN", "Preun", RPMTAG_PREUN, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PREUNPROG", "Preunprog", RPMTAG_PREUNPROG, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_PROVIDEFLAGS", "Provideflags", RPMTAG_PROVIDEFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PROVIDENAME", "Providename", RPMTAG_PROVIDENAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PROVIDES", "Provides", RPMTAG_PROVIDENAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PROVIDEVERSION", "Provideversion", RPMTAG_PROVIDEVERSION, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_PUBKEYS", "Pubkeys", RPMTAG_PUBKEYS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_RECONTEXTS", "Recontexts", RPMTAG_RECONTEXTS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 1 }, + { "RPMTAG_RELEASE", "Release", RPMTAG_RELEASE, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_REMOVETID", "Removetid", RPMTAG_REMOVETID, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_REQUIREFLAGS", "Requireflags", RPMTAG_REQUIREFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_REQUIRENAME", "Requirename", RPMTAG_REQUIRENAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_REQUIRES", "Requires", RPMTAG_REQUIRENAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_REQUIREVERSION", "Requireversion", RPMTAG_REQUIREVERSION, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_RPMVERSION", "Rpmversion", RPMTAG_RPMVERSION, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_R", "R", RPMTAG_RELEASE, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_RSAHEADER", "Rsaheader", RPMTAG_RSAHEADER, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SHA1HEADER", "Sha1header", RPMTAG_SHA1HEADER, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SIGGPG", "Siggpg", RPMTAG_SIGGPG, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SIGMD5", "Sigmd5", RPMTAG_SIGMD5, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SIGPGP", "Sigpgp", RPMTAG_SIGPGP, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SIGSIZE", "Sigsize", RPMTAG_SIGSIZE, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SIZE", "Size", RPMTAG_SIZE, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SOURCEPACKAGE", "Sourcepackage", RPMTAG_SOURCEPACKAGE, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SOURCEPKGID", "Sourcepkgid", RPMTAG_SOURCEPKGID, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SOURCERPM", "Sourcerpm", RPMTAG_SOURCERPM, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_SOURCE", "Source", RPMTAG_SOURCE, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_SUMMARY", "Summary", RPMTAG_SUMMARY, RPM_I18NSTRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_TRIGGERCONDS", "Triggerconds", RPMTAG_TRIGGERCONDS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 1 }, + { "RPMTAG_TRIGGERFLAGS", "Triggerflags", RPMTAG_TRIGGERFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_TRIGGERINDEX", "Triggerindex", RPMTAG_TRIGGERINDEX, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_TRIGGERNAME", "Triggername", RPMTAG_TRIGGERNAME, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_TRIGGERSCRIPTFLAGS", "Triggerscriptflags", RPMTAG_TRIGGERSCRIPTFLAGS, RPM_INT32_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_TRIGGERSCRIPTPROG", "Triggerscriptprog", RPMTAG_TRIGGERSCRIPTPROG, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_TRIGGERSCRIPTS", "Triggerscripts", RPMTAG_TRIGGERSCRIPTS, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_TRIGGERTYPE", "Triggertype", RPMTAG_TRIGGERTYPE, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 1 }, + { "RPMTAG_TRIGGERVERSION", "Triggerversion", RPMTAG_TRIGGERVERSION, RPM_STRING_ARRAY_TYPE, RPM_ARRAY_RETURN_TYPE, 0 }, + { "RPMTAG_URL", "Url", RPMTAG_URL, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_VCS", "Vcs", RPMTAG_VCS, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_VENDOR", "Vendor", RPMTAG_VENDOR, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_VERBOSE", "Verbose", RPMTAG_VERBOSE, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 1 }, + { "RPMTAG_VERIFYSCRIPTFLAGS", "Verifyscriptflags", RPMTAG_VERIFYSCRIPTFLAGS, RPM_INT32_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_VERIFYSCRIPTPROG", "Verifyscriptprog", RPMTAG_VERIFYSCRIPTPROG, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_VERIFYSCRIPT", "Verifyscript", RPMTAG_VERIFYSCRIPT, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_VERSION", "Version", RPMTAG_VERSION, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_V", "V", RPMTAG_VERSION, RPM_STRING_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { "RPMTAG_XPM", "Xpm", RPMTAG_XPM, RPM_BIN_TYPE, RPM_SCALAR_RETURN_TYPE, 0 }, + { NULL, NULL, RPMTAG_NOT_FOUND, RPM_NULL_TYPE, 0 } +}; diff --git a/lib/transaction.c b/lib/transaction.c new file mode 100644 index 0000000..7adf60b --- /dev/null +++ b/lib/transaction.c @@ -0,0 +1,1471 @@ +/** \ingroup rpmts + * \file lib/transaction.c + */ + +#include "system.h" + +#include /* rpmMachineScore, rpmReadPackageFile */ +#include /* XXX for rpmExpand */ +#include +#include +#include +#include +#include + +#include "lib/fprint.h" +#include "lib/misc.h" +#include "lib/rpmchroot.h" +#include "lib/rpmlock.h" +#include "lib/rpmfi_internal.h" /* only internal apis */ +#include "lib/rpmte_internal.h" /* only internal apis */ +#include "lib/rpmts_internal.h" +#include "rpmio/rpmhook.h" + +/* XXX FIXME: merge with existing (broken?) tests in system.h */ +/* portability fiddles */ +#if STATFS_IN_SYS_STATVFS +#include + +#else +# if STATFS_IN_SYS_VFS +# include +# else +# if STATFS_IN_SYS_MOUNT +# include +# else +# if STATFS_IN_SYS_STATFS +# include +# endif +# endif +# endif +#endif + +#include "debug.h" + +struct diskspaceInfo_s { + char * mntPoint; /*!< File system mount point */ + dev_t dev; /*!< File system device number. */ + int64_t bneeded; /*!< No. of blocks needed. */ + int64_t ineeded; /*!< No. of inodes needed. */ + int64_t bsize; /*!< File system block size. */ + int64_t bavail; /*!< No. of blocks available. */ + int64_t iavail; /*!< No. of inodes available. */ + int64_t obneeded; /*!< Bookkeeping to avoid duplicate reports */ + int64_t oineeded; /*!< Bookkeeping to avoid duplicate reports */ +}; + +/* Adjust for root only reserved space. On linux e2fs, this is 5%. */ +#define adj_fs_blocks(_nb) (((_nb) * 21) / 20) +#define BLOCK_ROUND(size, block) (((size) + (block) - 1) / (block)) + +static int rpmtsInitDSI(const rpmts ts) +{ + if (rpmtsFilterFlags(ts) & RPMPROB_FILTER_DISKSPACE) + return 0; + ts->dsi = _free(ts->dsi); + ts->dsi = xcalloc(1, sizeof(*ts->dsi)); + return 0; +} + +static rpmDiskSpaceInfo rpmtsCreateDSI(const rpmts ts, dev_t dev, + const char * dirName, int count) +{ + rpmDiskSpaceInfo dsi; + struct stat sb; + char * resolved_path; + char mntPoint[PATH_MAX]; + int rc; + +#if STATFS_IN_SYS_STATVFS + struct statvfs sfb; + memset(&sfb, 0, sizeof(sfb)); + rc = statvfs(dirName, &sfb); +#else + struct statfs sfb; + memset(&sfb, 0, sizeof(sfb)); +# if STAT_STATFS4 +/* This platform has the 4-argument version of the statfs call. The last two + * should be the size of struct statfs and 0, respectively. The 0 is the + * filesystem type, and is always 0 when statfs is called on a mounted + * filesystem, as we're doing. + */ + rc = statfs(dirName, &sfb, sizeof(sfb), 0); +# else + rc = statfs(dirName, &sfb); +# endif +#endif + if (rc) + return NULL; + + rc = stat(dirName, &sb); + if (rc) + return NULL; + if (sb.st_dev != dev) + return NULL; + + ts->dsi = xrealloc(ts->dsi, (count + 2) * sizeof(*ts->dsi)); + dsi = ts->dsi + count; + memset(dsi, 0, 2 * sizeof(*dsi)); + + dsi->dev = sb.st_dev; + dsi->bsize = sfb.f_bsize; + if (!dsi->bsize) + dsi->bsize = 512; /* we need a bsize */ + dsi->bneeded = 0; + dsi->ineeded = 0; +#ifdef STATFS_HAS_F_BAVAIL + dsi->bavail = (sfb.f_flag & ST_RDONLY) ? 0 : sfb.f_bavail; +#else +/* FIXME: the statfs struct doesn't have a member to tell how many blocks are + * available for non-superusers. f_blocks - f_bfree is probably too big, but + * it's about all we can do. + */ + dsi->bavail = sfb.f_blocks - sfb.f_bfree; +#endif + /* XXX Avoid FAT and other file systems that have not inodes. */ + /* XXX assigning negative value to unsigned type */ + dsi->iavail = !(sfb.f_ffree == 0 && sfb.f_files == 0) + ? sfb.f_ffree : -1; + + /* Find mount point belonging to this device number */ + resolved_path = realpath(dirName, mntPoint); + if (!resolved_path) { + strncpy(mntPoint, dirName, PATH_MAX); + mntPoint[PATH_MAX-1] = '\0'; + } + char * end = NULL; + while (end != mntPoint) { + end = strrchr(mntPoint, '/'); + if (end == mntPoint) { /* reached "/" */ + stat("/", &sb); + if (dsi->dev != sb.st_dev) { + dsi->mntPoint = xstrdup(mntPoint); + } else { + dsi->mntPoint = xstrdup("/"); + } + break; + } else if (end) { + *end = '\0'; + } else { /* dirName doesn't start with / - should not happen */ + dsi->mntPoint = xstrdup(dirName); + break; + } + stat(mntPoint, &sb); + if (dsi->dev != sb.st_dev) { + *end = '/'; + dsi->mntPoint = xstrdup(mntPoint); + break; + } + } + + rpmlog(RPMLOG_DEBUG, + "0x%08x %8" PRId64 " %12" PRId64 " %12" PRId64" %s\n", + (unsigned) dsi->dev, dsi->bsize, + dsi->bavail, dsi->iavail, + dsi->mntPoint); + return dsi; +} + +static rpmDiskSpaceInfo rpmtsGetDSI(const rpmts ts, dev_t dev, + const char *dirName) { + rpmDiskSpaceInfo dsi; + dsi = ts->dsi; + if (dsi) { + while (dsi->bsize && dsi->dev != dev) + dsi++; + if (dsi->bsize == 0) { + /* create new entry */ + dsi = rpmtsCreateDSI(ts, dev, dirName, dsi - ts->dsi); + } + } + return dsi; +} + +static void rpmtsUpdateDSI(const rpmts ts, dev_t dev, const char *dirName, + rpm_loff_t fileSize, rpm_loff_t prevSize, rpm_loff_t fixupSize, + rpmFileAction action) +{ + int64_t bneeded; + rpmDiskSpaceInfo dsi = rpmtsGetDSI(ts, dev, dirName); + if (dsi == NULL) + return; + + bneeded = BLOCK_ROUND(fileSize, dsi->bsize); + + switch (action) { + case FA_BACKUP: + case FA_SAVE: + case FA_ALTNAME: + dsi->ineeded++; + dsi->bneeded += bneeded; + break; + + /* + * FIXME: If two packages share a file (same md5sum), and + * that file is being replaced on disk, will dsi->bneeded get + * adjusted twice? Quite probably! + */ + case FA_CREATE: + dsi->bneeded += bneeded; + dsi->bneeded -= BLOCK_ROUND(prevSize, dsi->bsize); + break; + + case FA_ERASE: + dsi->ineeded--; + dsi->bneeded -= bneeded; + break; + + default: + break; + } + + if (fixupSize) + dsi->bneeded -= BLOCK_ROUND(fixupSize, dsi->bsize); + + /* adjust bookkeeping when requirements shrink */ + if (dsi->bneeded < dsi->obneeded) dsi->obneeded = dsi->bneeded; + if (dsi->ineeded < dsi->oineeded) dsi->oineeded = dsi->ineeded; +} + +/* return DSI of the device the rpmdb lives on */ +static rpmDiskSpaceInfo rpmtsDbDSI(const rpmts ts) { + const char *dbhome = rpmdbHome(rpmtsGetRdb(ts)); + struct stat sb; + int rc; + + rc = stat(dbhome, &sb); + if (rc) { + return NULL; + } + return rpmtsGetDSI(ts, sb.st_dev, dbhome); +} + +/* Update DSI for changing size of the rpmdb */ +static void rpmtsUpdateDSIrpmDBSize(const rpmte p, + rpmDiskSpaceInfo dsi) { + rpm_loff_t headerSize; + int64_t bneeded; + + /* XXX somehow we can end up here with bsize 0 (RhBug:671056) */ + if (dsi == NULL || dsi->bsize == 0) return; + + headerSize = rpmteHeaderSize(p); + bneeded = BLOCK_ROUND(headerSize, dsi->bsize); + /* REMOVE doesn't neccessarily shrink the database */ + if (rpmteType(p) == TR_ADDED) { + /* guessing that db grows 4 times more than the header size */ + dsi->bneeded += (bneeded * 4); + } +} + + +static void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te) +{ + rpmDiskSpaceInfo dsi = ts->dsi; + + if (dsi == NULL || !dsi->bsize) + return; + if (rpmfiFC(rpmteFI(te)) <= 0) + return; + + for (; dsi->bsize; dsi++) { + + if (dsi->bavail >= 0 && adj_fs_blocks(dsi->bneeded) > dsi->bavail) { + if (dsi->bneeded > dsi->obneeded) { + rpmteAddProblem(te, RPMPROB_DISKSPACE, NULL, dsi->mntPoint, + (adj_fs_blocks(dsi->bneeded) - dsi->bavail) * dsi->bsize); + dsi->obneeded = dsi->bneeded; + } + } + + if (dsi->iavail >= 0 && adj_fs_blocks(dsi->ineeded) > dsi->iavail) { + if (dsi->ineeded > dsi->oineeded) { + rpmteAddProblem(te, RPMPROB_DISKNODES, NULL, dsi->mntPoint, + (adj_fs_blocks(dsi->ineeded) - dsi->iavail)); + dsi->oineeded = dsi->ineeded; + } + } + } +} + +static void rpmtsFreeDSI(rpmts ts){ + rpmDiskSpaceInfo dsi; + if (ts == NULL) + return; + dsi = ts->dsi; + while (dsi && dsi->bsize != 0) { + dsi->mntPoint = _free(dsi->mntPoint); + dsi++; + } + + ts->dsi = _free(ts->dsi); +} + + +/* Calculate total number of files involved in transaction */ +static uint64_t countFiles(rpmts ts) +{ + uint64_t fc = 0; + rpmtsi pi = rpmtsiInit(ts); + rpmte p; + while ((p = rpmtsiNext(pi, 0)) != NULL) + fc += rpmfiFC(rpmteFI(p)); + pi = rpmtsiFree(pi); + return fc; +} + +/** + * handleInstInstalledFiles. + * @param ts transaction set + * @param p current transaction element + * @param fi file info set + * @param shared shared file info + * @param sharedCount no. of shared elements + * @param reportConflicts + */ +/* XXX only ts->{probs,rpmdb} modified */ +static int handleInstInstalledFile(const rpmts ts, rpmte p, rpmfi fi, + Header otherHeader, rpmfi otherFi, + int beingRemoved) +{ + unsigned int fx = rpmfiFX(fi); + rpmfs fs = rpmteGetFileStates(p); + int isCfgFile = ((rpmfiFFlags(otherFi) | rpmfiFFlags(fi)) & RPMFILE_CONFIG); + + if (XFA_SKIPPING(rpmfsGetAction(fs, fx))) + return 0; + + if (rpmfiCompare(otherFi, fi)) { + rpm_color_t tscolor = rpmtsColor(ts); + rpm_color_t prefcolor = rpmtsPrefColor(ts); + rpm_color_t FColor = rpmfiFColor(fi) & tscolor; + rpm_color_t oFColor = rpmfiFColor(otherFi) & tscolor; + int rConflicts; + + rConflicts = !(beingRemoved || (rpmtsFilterFlags(ts) & RPMPROB_FILTER_REPLACEOLDFILES)); + /* Resolve file conflicts to prefer Elf64 (if not forced). */ + if (tscolor != 0 && FColor != 0 && oFColor != 0 && FColor != oFColor) { + if (oFColor & prefcolor) { + rpmfsSetAction(fs, fx, FA_SKIPCOLOR); + rConflicts = 0; + } else if (FColor & prefcolor) { + rpmfsSetAction(fs, fx, FA_CREATE); + rConflicts = 0; + } + } + + if (rConflicts) { + char *altNEVR = headerGetAsString(otherHeader, RPMTAG_NEVRA); + rpmteAddProblem(p, RPMPROB_FILE_CONFLICT, altNEVR, rpmfiFN(fi), + headerGetInstance(otherHeader)); + free(altNEVR); + } + + /* Save file identifier to mark as state REPLACED. */ + if ( !(isCfgFile || XFA_SKIPPING(rpmfsGetAction(fs, fx))) ) { + if (!beingRemoved) + rpmfsAddReplaced(rpmteGetFileStates(p), rpmfiFX(fi), + headerGetInstance(otherHeader), + rpmfiFX(otherFi)); + } + } + + /* Determine config file dispostion, skipping missing files (if any). */ + if (isCfgFile) { + int skipMissing = ((rpmtsFlags(ts) & RPMTRANS_FLAG_ALLFILES) ? 0 : 1); + rpmFileAction action = rpmfiDecideFate(otherFi, fi, skipMissing); + rpmfsSetAction(fs, fx, action); + } + rpmfiSetFReplacedSize(fi, rpmfiFSize(otherFi)); + + return 0; +} + +/** + * Update disk space needs on each partition for this package's files. + */ +/* XXX only ts->{probs,di} modified */ +static void handleOverlappedFiles(rpmts ts, rpmFpHash ht, rpmte p, rpmfi fi) +{ + rpm_loff_t fixupSize = 0; + const char * fn; + int i, j; + rpm_color_t tscolor = rpmtsColor(ts); + rpm_color_t prefcolor = rpmtsPrefColor(ts); + rpmfs fs = rpmteGetFileStates(p); + rpmfs otherFs; + + fi = rpmfiInit(fi, 0); + while ((i = rpmfiNext(fi)) >= 0) { + rpm_color_t oFColor, FColor; + struct fingerPrint_s * fiFps; + int otherPkgNum, otherFileNum; + rpmfi otherFi; + rpmte otherTe; + rpmfileAttrs FFlags; + rpm_mode_t FMode; + struct rpmffi_s * recs; + int numRecs; + + if (XFA_SKIPPING(rpmfsGetAction(fs, i))) + continue; + + fn = rpmfiFN(fi); + fiFps = rpmfiFpsIndex(fi, i); + FFlags = rpmfiFFlags(fi); + FMode = rpmfiFMode(fi); + FColor = rpmfiFColor(fi); + FColor &= tscolor; + + fixupSize = 0; + + /* + * Retrieve all records that apply to this file. Note that the + * file info records were built in the same order as the packages + * will be installed and removed so the records for an overlapped + * files will be sorted in exactly the same order. + */ + (void) rpmFpHashGetEntry(ht, fiFps, &recs, &numRecs, NULL); + + /* + * If this package is being added, look only at other packages + * being added -- removed packages dance to a different tune. + * + * If both this and the other package are being added, overlapped + * files must be identical (or marked as a conflict). The + * disposition of already installed config files leads to + * a small amount of extra complexity. + * + * If this package is being removed, then there are two cases that + * need to be worried about: + * If the other package is being added, then skip any overlapped files + * so that this package removal doesn't nuke the overlapped files + * that were just installed. + * If both this and the other package are being removed, then each + * file removal from preceding packages needs to be skipped so that + * the file removal occurs only on the last occurence of an overlapped + * file in the transaction set. + * + */ + + /* Locate this overlapped file in the set of added/removed packages. */ + for (j = 0; j < numRecs && recs[j].p != p; j++) + {}; + + /* Find what the previous disposition of this file was. */ + otherFileNum = -1; /* keep gcc quiet */ + otherFi = NULL; + otherTe = NULL; + otherFs = NULL; + + for (otherPkgNum = j - 1; otherPkgNum >= 0; otherPkgNum--) { + otherTe = recs[otherPkgNum].p; + otherFi = rpmteFI(otherTe); + otherFileNum = recs[otherPkgNum].fileno; + otherFs = rpmteGetFileStates(otherTe); + + /* Added packages need only look at other added packages. */ + if (rpmteType(p) == TR_ADDED && rpmteType(otherTe) != TR_ADDED) + continue; + + (void) rpmfiSetFX(otherFi, otherFileNum); + + /* XXX Happens iff fingerprint for incomplete package install. */ + if (rpmfsGetAction(otherFs, otherFileNum) != FA_UNKNOWN) + break; + } + + oFColor = rpmfiFColor(otherFi); + oFColor &= tscolor; + + switch (rpmteType(p)) { + case TR_ADDED: + { + int reportConflicts = + !(rpmtsFilterFlags(ts) & RPMPROB_FILTER_REPLACENEWFILES); + int done = 0; + + if (otherPkgNum < 0) { + /* XXX is this test still necessary? */ + rpmFileAction action; + if (rpmfsGetAction(fs, i) != FA_UNKNOWN) + break; + if (rpmfiConfigConflict(fi)) { + /* Here is a non-overlapped pre-existing config file. */ + action = (FFlags & RPMFILE_NOREPLACE) ? + FA_ALTNAME : FA_BACKUP; + } else { + action = FA_CREATE; + } + rpmfsSetAction(fs, i, action); + break; + } + +assert(otherFi != NULL); + /* Mark added overlapped non-identical files as a conflict. */ + if (rpmfiCompare(otherFi, fi)) { + int rConflicts; + + rConflicts = reportConflicts; + /* Resolve file conflicts to prefer Elf64 (if not forced) ... */ + if (tscolor != 0 && FColor != 0 && oFColor != 0 && FColor != oFColor) { + if (FColor & prefcolor) { + /* ... last file of preferred colour is installed ... */ + if (!XFA_SKIPPING(rpmfsGetAction(fs, i))) + rpmfsSetAction(otherFs, otherFileNum, FA_SKIPCOLOR); + rpmfsSetAction(fs, i, FA_CREATE); + rConflicts = 0; + } else + if (oFColor & prefcolor) { + /* ... first file of preferred colour is installed ... */ + if (XFA_SKIPPING(rpmfsGetAction(fs, i))) + rpmfsSetAction(otherFs, otherFileNum, FA_CREATE); + rpmfsSetAction(fs, i, FA_SKIPCOLOR); + rConflicts = 0; + } + done = 1; + } + if (rConflicts) { + rpmteAddProblem(p, RPMPROB_NEW_FILE_CONFLICT, + rpmteNEVRA(otherTe), fn, 0); + } + } + + /* Try to get the disk accounting correct even if a conflict. */ + fixupSize = rpmfiFSize(otherFi); + + if (rpmfiConfigConflict(fi)) { + /* Here is an overlapped pre-existing config file. */ + rpmFileAction action; + action = (FFlags & RPMFILE_NOREPLACE) ? FA_ALTNAME : FA_SKIP; + rpmfsSetAction(fs, i, action); + } else { + if (!done) + rpmfsSetAction(fs, i, FA_CREATE); + } + } break; + + case TR_REMOVED: + if (otherPkgNum >= 0) { + assert(otherFi != NULL); + /* Here is an overlapped added file we don't want to nuke. */ + if (rpmfsGetAction(otherFs, otherFileNum) != FA_ERASE) { + /* On updates, don't remove files. */ + rpmfsSetAction(fs, i, FA_SKIP); + break; + } + /* Here is an overlapped removed file: skip in previous. */ + rpmfsSetAction(otherFs, otherFileNum, FA_SKIP); + } + if (XFA_SKIPPING(rpmfsGetAction(fs, i))) + break; + if (rpmfiFState(fi) != RPMFILE_STATE_NORMAL) + break; + if (!(S_ISREG(FMode) && (FFlags & RPMFILE_CONFIG))) { + rpmfsSetAction(fs, i, FA_ERASE); + break; + } + + /* Here is a pre-existing modified config file that needs saving. */ + { int algo = 0; + size_t diglen = 0; + const unsigned char *digest; + if ((digest = rpmfiFDigest(fi, &algo, &diglen))) { + unsigned char fdigest[diglen]; + if (!rpmDoDigest(algo, fn, 0, fdigest, NULL) && + memcmp(digest, fdigest, diglen)) { + rpmfsSetAction(fs, i, FA_BACKUP); + break; + } + } + } + rpmfsSetAction(fs, i, FA_ERASE); + break; + } + + /* Update disk space info for a file. */ + rpmtsUpdateDSI(ts, fiFps->entry->dev, fiFps->entry->dirName, + rpmfiFSize(fi), rpmfiFReplacedSize(fi), + fixupSize, rpmfsGetAction(fs, i)); + + } +} + +/** + * Ensure that current package is newer than installed package. + * @param p current transaction element + * @param h installed header + * @param ps problem set + */ +static void ensureOlder(const rpmte p, const Header h) +{ + rpmsenseFlags reqFlags = (RPMSENSE_LESS | RPMSENSE_EQUAL); + rpmds req; + + req = rpmdsSingle(RPMTAG_REQUIRENAME, rpmteN(p), rpmteEVR(p), reqFlags); + if (rpmdsNVRMatchesDep(h, req, _rpmds_nopromote) == 0) { + char * altNEVR = headerGetAsString(h, RPMTAG_NEVRA); + rpmteAddProblem(p, RPMPROB_OLDPACKAGE, altNEVR, NULL, + headerGetInstance(h)); + free(altNEVR); + } + rpmdsFree(req); +} + +/** + * Check if the curent file in the file iterator is in the + * netshardpath and though should be excluded. + * @param ts transaction set + * @param fi file info set + * @returns pointer to matching path or NULL + */ +static char ** matchNetsharedpath(const rpmts ts, rpmfi fi) +{ + char ** nsp; + const char * dn, * bn; + size_t dnlen, bnlen; + char * s; + bn = rpmfiBN(fi); + bnlen = strlen(bn); + dn = rpmfiDN(fi); + dnlen = strlen(dn); + for (nsp = ts->netsharedPaths; nsp && *nsp; nsp++) { + size_t len; + + len = strlen(*nsp); + if (dnlen >= len) { + if (!rstreqn(dn, *nsp, len)) + continue; + /* Only directories or complete file paths can be net shared */ + if (!(dn[len] == '/' || dn[len] == '\0')) + continue; + } else { + if (len < (dnlen + bnlen)) + continue; + if (!rstreqn(dn, *nsp, dnlen)) + continue; + /* Insure that only the netsharedpath basename is compared. */ + if ((s = strchr((*nsp) + dnlen, '/')) != NULL && s[1] != '\0') + continue; + if (!rstreqn(bn, (*nsp) + dnlen, bnlen)) + continue; + len = dnlen + bnlen; + /* Only directories or complete file paths can be net shared */ + if (!((*nsp)[len] == '/' || (*nsp)[len] == '\0')) + continue; + } + + break; + } + return nsp; +} + +static void skipEraseFiles(const rpmts ts, rpmte p) +{ + rpmfi fi = rpmteFI(p); + rpmfs fs = rpmteGetFileStates(p); + int i; + char ** nsp; + /* + * Skip net shared paths. + * Net shared paths are not relative to the current root (though + * they do need to take package relocations into account). + */ + fi = rpmfiInit(fi, 0); + while ((i = rpmfiNext(fi)) >= 0) + { + nsp = matchNetsharedpath(ts, fi); + if (nsp && *nsp) { + rpmfsSetAction(fs, i, FA_SKIPNETSHARED); + } + } +} + + +/** + * Skip any files that do not match install policies. + * @param ts transaction set + * @param fi file info set + */ +static void skipInstallFiles(const rpmts ts, rpmte p) +{ + rpm_color_t tscolor = rpmtsColor(ts); + rpm_color_t FColor; + int noConfigs = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONFIGS); + int noDocs = (rpmtsFlags(ts) & RPMTRANS_FLAG_NODOCS); + int * drc; + char * dff; + int dc; + int i, j, ix; + rpmfi fi = rpmteFI(p); + rpmfs fs = rpmteGetFileStates(p); + + if (!noDocs) + noDocs = rpmExpandNumeric("%{_excludedocs}"); + + /* Compute directory refcount, skip directory if now empty. */ + dc = rpmfiDC(fi); + drc = xcalloc(dc, sizeof(*drc)); + dff = xcalloc(dc, sizeof(*dff)); + + fi = rpmfiInit(fi, 0); + while ((i = rpmfiNext(fi)) >= 0) { + char ** nsp; + const char *flangs; + + ix = rpmfiDX(fi); + drc[ix]++; + + /* Don't bother with skipped files */ + if (XFA_SKIPPING(rpmfsGetAction(fs, i))) { + drc[ix]--; dff[ix] = 1; + continue; + } + + /* Ignore colored files not in our rainbow. */ + FColor = rpmfiFColor(fi); + if (tscolor && FColor && !(tscolor & FColor)) { + drc[ix]--; dff[ix] = 1; + rpmfsSetAction(fs, i, FA_SKIPCOLOR); + continue; + } + + /* + * Skip net shared paths. + * Net shared paths are not relative to the current root (though + * they do need to take package relocations into account). + */ + nsp = matchNetsharedpath(ts, fi); + if (nsp && *nsp) { + drc[ix]--; dff[ix] = 1; + rpmfsSetAction(fs, i, FA_SKIPNETSHARED); + continue; + } + + /* + * Skip i18n language specific files. + */ + flangs = (ts->installLangs != NULL) ? rpmfiFLangs(fi) : NULL; + if (flangs != NULL && *flangs != '\0') { + const char *l, *le; + char **lang; + for (lang = ts->installLangs; *lang != NULL; lang++) { + for (l = flangs; *l != '\0'; l = le) { + for (le = l; *le != '\0' && *le != '|'; le++) + {}; + if ((le-l) > 0 && rstreqn(*lang, l, (le-l))) + break; + if (*le == '|') le++; /* skip over | */ + } + if (*l != '\0') + break; + } + if (*lang == NULL) { + drc[ix]--; dff[ix] = 1; + rpmfsSetAction(fs, i, FA_SKIPNSTATE); + continue; + } + } + + /* + * Skip config files if requested. + */ + if (noConfigs && (rpmfiFFlags(fi) & RPMFILE_CONFIG)) { + drc[ix]--; dff[ix] = 1; + rpmfsSetAction(fs, i, FA_SKIPNSTATE); + continue; + } + + /* + * Skip documentation if requested. + */ + if (noDocs && (rpmfiFFlags(fi) & RPMFILE_DOC)) { + drc[ix]--; dff[ix] = 1; + rpmfsSetAction(fs, i, FA_SKIPNSTATE); + continue; + } + } + + /* Skip (now empty) directories that had skipped files. */ + for (j = 0; j < dc; j++) { + const char * dn, * bn; + size_t dnlen, bnlen; + + if (drc[j]) continue; /* dir still has files. */ + if (!dff[j]) continue; /* dir was not emptied here. */ + + /* Find parent directory and basename. */ + dn = rpmfiDNIndex(fi, j); dnlen = strlen(dn) - 1; + bn = dn + dnlen; bnlen = 0; + while (bn > dn && bn[-1] != '/') { + bnlen++; + dnlen--; + bn--; + } + + /* If explicitly included in the package, skip the directory. */ + fi = rpmfiInit(fi, 0); + while ((i = rpmfiNext(fi)) >= 0) { + const char * fdn, * fbn; + rpm_mode_t fFMode; + + if (XFA_SKIPPING(rpmfsGetAction(fs, i))) + continue; + + fFMode = rpmfiFMode(fi); + + if (rpmfiWhatis(fFMode) != XDIR) + continue; + fdn = rpmfiDN(fi); + if (strlen(fdn) != dnlen) + continue; + if (!rstreqn(fdn, dn, dnlen)) + continue; + fbn = rpmfiBN(fi); + if (strlen(fbn) != bnlen) + continue; + if (!rstreqn(fbn, bn, bnlen)) + continue; + rpmlog(RPMLOG_DEBUG, "excluding directory %s\n", dn); + rpmfsSetAction(fs, i, FA_SKIPNSTATE); + break; + } + } + + free(drc); + free(dff); +} + +#undef HASHTYPE +#undef HTKEYTYPE +#undef HTDATATYPE + +#define HASHTYPE rpmStringSet +#define HTKEYTYPE const char * +#include "lib/rpmhash.H" +#include "lib/rpmhash.C" + +/* Get a rpmdbMatchIterator containing all files in + * the rpmdb that share the basename with one from + * the transaction. + * @param ts transaction set + * @return rpmdbMatchIterator sorted + by (package, fileNum) + */ +static +rpmdbMatchIterator rpmFindBaseNamesInDB(rpmts ts, uint64_t fileCount) +{ + tsMembers tsmem = rpmtsMembers(ts); + rpmtsi pi; rpmte p; + rpmfi fi; + rpmdbMatchIterator mi; + int xx; + int oc = 0; + const char * baseName; + + rpmStringSet baseNames = rpmStringSetCreate(fileCount, + hashFunctionString, strcmp, NULL); + + mi = rpmdbNewIterator(rpmtsGetRdb(ts), RPMDBI_BASENAMES); + + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) { + (void) rpmdbCheckSignals(); + + rpmtsNotify(ts, NULL, RPMCALLBACK_TRANS_PROGRESS, oc++, tsmem->orderCount); + + /* Gather all installed headers with matching basename's. */ + fi = rpmfiInit(rpmteFI(p), 0); + while (rpmfiNext(fi) >= 0) { + size_t keylen; + baseName = rpmfiBN(fi); + if (rpmStringSetHasEntry(baseNames, baseName)) + continue; + + keylen = strlen(baseName); + if (keylen == 0) + keylen++; /* XXX "/" fixup. */ + xx = rpmdbExtendIterator(mi, baseName, keylen); + rpmStringSetAddEntry(baseNames, baseName); + } + } + pi = rpmtsiFree(pi); + rpmStringSetFree(baseNames); + + rpmdbSortIterator(mi); + /* iterator is now sorted by (recnum, filenum) */ + return mi; +} + +/* Check files in the transactions against the rpmdb + * Lookup all files with the same basename in the rpmdb + * and then check for matching finger prints + * @param ts transaction set + * @param fpc global finger print cache + */ +static +void checkInstalledFiles(rpmts ts, uint64_t fileCount, rpmFpHash ht, fingerPrintCache fpc) +{ + tsMembers tsmem = rpmtsMembers(ts); + rpmte p; + rpmfi fi; + rpmfs fs; + rpmfi otherFi=NULL; + int j; + int xx; + unsigned int fileNum; + const char * oldDir; + + rpmdbMatchIterator mi; + Header h, newheader; + + int beingRemoved; + + rpmlog(RPMLOG_DEBUG, "computing file dispositions\n"); + + mi = rpmFindBaseNamesInDB(ts, fileCount); + + /* For all installed headers with matching basename's ... */ + if (mi == NULL) + return; + + if (rpmdbGetIteratorCount(mi) == 0) { + mi = rpmdbFreeIterator(mi); + return; + } + + /* Loop over all packages from the rpmdb */ + h = newheader = rpmdbNextIterator(mi); + while (h != NULL) { + headerGetFlags hgflags = HEADERGET_MINMEM; + struct rpmtd_s bnames, dnames, dindexes, ostates; + fingerPrint fp; + unsigned int installedPkg; + + /* Is this package being removed? */ + installedPkg = rpmdbGetIteratorOffset(mi); + beingRemoved = intHashHasEntry(tsmem->removedPackages, installedPkg); + + h = headerLink(h); + headerGet(h, RPMTAG_BASENAMES, &bnames, hgflags); + headerGet(h, RPMTAG_DIRNAMES, &dnames, hgflags); + headerGet(h, RPMTAG_DIRINDEXES, &dindexes, hgflags); + headerGet(h, RPMTAG_FILESTATES, &ostates, hgflags); + + oldDir = NULL; + /* loop over all interesting files in that package */ + do { + int gotRecs; + struct rpmffi_s * recs; + int numRecs; + const char * dirName; + const char * baseName; + + fileNum = rpmdbGetIteratorFileNum(mi); + rpmtdSetIndex(&bnames, fileNum); + rpmtdSetIndex(&dindexes, fileNum); + rpmtdSetIndex(&dnames, *rpmtdGetUint32(&dindexes)); + rpmtdSetIndex(&ostates, fileNum); + + dirName = rpmtdGetString(&dnames); + baseName = rpmtdGetString(&bnames); + + /* lookup finger print for this file */ + if ( dirName == oldDir) { + /* directory is the same as last round */ + fp.baseName = baseName; + } else { + fp = fpLookup(fpc, dirName, baseName, 1); + oldDir = dirName; + } + /* search for files in the transaction with same finger print */ + gotRecs = rpmFpHashGetEntry(ht, &fp, &recs, &numRecs, NULL); + + for (j=0; (j= numSeenPre) { + /* haven't seen this collection, add it */ + rpmteAddToFirstInCollectionRemove(p, *collname); + argvAdd(&seenCollectionsPre, *collname); + numSeenPre++; + } + } + } + } + pi = rpmtsiFree(pi); + + /* we've looked at all the rpmte's, update the lastInCollectionAny lists */ + for (i = 0; i < numSeenPost; i++) { + rpmteAddToLastInCollectionAny(TEs[i], seenCollectionsPost[i]); + if (installing == 1) { + /* lastInCollectionAdd is only updated above if packages were + * removed. if nothing is removed in the transaction, we need to + * update that list here */ + rpmteAddToLastInCollectionAdd(TEs[i], seenCollectionsPost[i]); + } + } + + argvFree(seenCollectionsPost); + argvFree(seenCollectionsPre); + _free(TEs); + + return 0; +} + +/* Add fingerprint for each file not skipped. */ +static void addFingerprints(rpmts ts, uint64_t fileCount, rpmFpHash ht, fingerPrintCache fpc) +{ + rpmtsi pi; + rpmte p; + rpmfi fi; + int i; + + rpmFpHash symlinks = rpmFpHashCreate(fileCount/16+16, fpHashFunction, fpEqual, NULL, NULL); + + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) { + (void) rpmdbCheckSignals(); + + if ((fi = rpmteFI(p)) == NULL) + continue; /* XXX can't happen */ + + (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0); + rpmfiFpLookup(fi, fpc); + /* collect symbolic links */ + fi = rpmfiInit(fi, 0); + while ((i = rpmfiNext(fi)) >= 0) { + struct rpmffi_s ffi; + char const *linktarget; + linktarget = rpmfiFLink(fi); + if (!(linktarget && *linktarget != '\0')) + continue; + if (XFA_SKIPPING(rpmfsGetAction(rpmteGetFileStates(p), i))) + continue; + ffi.p = p; + ffi.fileno = i; + rpmFpHashAddEntry(symlinks, rpmfiFpsIndex(fi, i), ffi); + } + (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), rpmfiFC(fi)); + + } + pi = rpmtsiFree(pi); + + /* =============================================== + * Check fingerprints if they contain symlinks + * and add them to the hash table + */ + + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) { + (void) rpmdbCheckSignals(); + + fi = rpmfiInit(rpmteFI(p), 0); + (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0); + while ((i = rpmfiNext(fi)) >= 0) { + if (XFA_SKIPPING(rpmfsGetAction(rpmteGetFileStates(p), i))) + continue; + fpLookupSubdir(symlinks, ht, fpc, p, i); + } + (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0); + } + pi = rpmtsiFree(pi); + + rpmFpHashFree(symlinks); +} + +static int rpmtsSetup(rpmts ts, rpmprobFilterFlags ignoreSet) +{ + rpm_tid_t tid = (rpm_tid_t) time(NULL); + int dbmode = (rpmtsFlags(ts) & RPMTRANS_FLAG_TEST) ? O_RDONLY : (O_RDWR|O_CREAT); + + if (rpmtsFlags(ts) & RPMTRANS_FLAG_NOSCRIPTS) + (void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | _noTransScripts | _noTransTriggers)); + if (rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERS) + (void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | _noTransTriggers)); + + if (rpmtsFlags(ts) & (RPMTRANS_FLAG_JUSTDB | RPMTRANS_FLAG_TEST)) + (void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | _noTransScripts | _noTransTriggers | RPMTRANS_FLAG_NOCOLLECTIONS)); + + /* if SELinux isn't enabled, init fails or test run, don't bother... */ + if (!is_selinux_enabled() || (rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)) { + rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_NOCONTEXTS)); + } + + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS)) { + rpmtsSELabelInit(ts, selinux_file_context_path()); + } + + /* + * Make sure the database is open RDWR for package install/erase. + * Note that we initialize chroot state here even if it's just "/" as + * this ensures we can successfully perform open(".") which is + * required to reliably restore cwd after Lua scripts. + */ + if (rpmtsOpenDB(ts, dbmode) || rpmChrootSet(rpmtsRootDir(ts))) + return -1; + + ts->ignoreSet = ignoreSet; + (void) rpmtsSetTid(ts, tid); + + /* Get available space on mounted file systems. */ + (void) rpmtsInitDSI(ts); + + return 0; +} + +static int rpmtsFinish(rpmts ts) +{ + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS)) { + rpmtsSELabelFini(ts); + } + return rpmChrootSet(NULL); +} + +static int rpmtsPrepare(rpmts ts) +{ + tsMembers tsmem = rpmtsMembers(ts); + rpmtsi pi; + rpmte p; + rpmfi fi; + int rc = 0; + uint64_t fileCount = countFiles(ts); + + fingerPrintCache fpc = fpCacheCreate(fileCount/2 + 10001); + rpmFpHash ht = rpmFpHashCreate(fileCount/2+1, fpHashFunction, fpEqual, + NULL, NULL); + rpmDiskSpaceInfo dsi; + + rpmlog(RPMLOG_DEBUG, "computing %" PRIu64 " file fingerprints\n", fileCount); + + /* Skip netshared paths, not our i18n files, and excluded docs */ + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) { + if (rpmfiFC(rpmteFI(p)) == 0) + continue; + if (rpmteType(p) == TR_ADDED) { + skipInstallFiles(ts, p); + } else { + skipEraseFiles(ts, p); + } + } + pi = rpmtsiFree(pi); + + /* Open rpmdb & enter chroot for fingerprinting if necessary */ + if (rpmdbOpenAll(ts->rdb) || rpmChrootIn()) { + rc = -1; + goto exit; + } + + rpmtsNotify(ts, NULL, RPMCALLBACK_TRANS_START, 6, tsmem->orderCount); + addFingerprints(ts, fileCount, ht, fpc); + /* check against files in the rpmdb */ + checkInstalledFiles(ts, fileCount, ht, fpc); + + dsi = rpmtsDbDSI(ts); + + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) { + if ((fi = rpmteFI(p)) == NULL) + continue; /* XXX can't happen */ + + (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0); + /* check files in ts against each other and update disk space + needs on each partition for this package. */ + handleOverlappedFiles(ts, ht, p, fi); + + rpmtsUpdateDSIrpmDBSize(p, dsi); + + /* Check added package has sufficient space on each partition used. */ + if (rpmteType(p) == TR_ADDED) { + rpmtsCheckDSIProblems(ts, p); + } + (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0); + } + pi = rpmtsiFree(pi); + rpmtsNotify(ts, NULL, RPMCALLBACK_TRANS_STOP, 6, tsmem->orderCount); + + /* return from chroot if done earlier */ + if (rpmChrootOut()) + rc = -1; + + /* File info sets, fp caches etc not needed beyond here, free 'em up. */ + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) { + rpmteSetFI(p, NULL); + } + pi = rpmtsiFree(pi); + +exit: + ht = rpmFpHashFree(ht); + fpc = fpCacheFree(fpc); + rpmtsFreeDSI(ts); + return rc; +} + +/* + * Transaction main loop: install and remove packages + */ +static int rpmtsProcess(rpmts ts) +{ + rpmtsi pi; rpmte p; + int rc = 0; + + pi = rpmtsiInit(ts); + while ((p = rpmtsiNext(pi, 0)) != NULL) { + int failed; + + rpmlog(RPMLOG_DEBUG, "========== +++ %s %s-%s 0x%x\n", + rpmteNEVR(p), rpmteA(p), rpmteO(p), rpmteColor(p)); + + failed = rpmteProcess(p, rpmteType(p)); + if (failed) { + rpmlog(RPMLOG_ERR, "%s: %s %s\n", rpmteNEVRA(p), + rpmteTypeString(p), failed > 1 ? _("skipped") : _("failed")); + rc++; + } + (void) rpmdbSync(rpmtsGetRdb(ts)); + } + pi = rpmtsiFree(pi); + return rc; +} + +int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet) +{ + int rc = -1; /* assume failure */ + rpmlock lock = NULL; + rpmps tsprobs = NULL; + /* Force default 022 umask during transaction for consistent results */ + mode_t oldmask = umask(022); + + /* Empty transaction, nothing to do */ + if (rpmtsNElements(ts) <= 0) { + rc = 0; + goto exit; + } + + /* If we are in test mode, then there's no need for transaction lock. */ + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)) { + if (!(lock = rpmtsAcquireLock(ts))) { + goto exit; + } + } + + /* Setup flags and such, open the DB */ + if (rpmtsSetup(ts, ignoreSet)) { + goto exit; + } + + rpmtsSetupCollections(ts); + + /* Check package set for problems */ + tsprobs = checkProblems(ts); + + /* Run pre-transaction scripts, but only if there are no known + * problems up to this point and not disabled otherwise. */ + if (!((rpmtsFlags(ts) & (RPMTRANS_FLAG_BUILD_PROBS|RPMTRANS_FLAG_NOPRE)) + || (rpmpsNumProblems(tsprobs)))) { + rpmlog(RPMLOG_DEBUG, "running pre-transaction scripts\n"); + runTransScripts(ts, PKG_PRETRANS); + } + tsprobs = rpmpsFree(tsprobs); + + /* Compute file disposition for each package in transaction set. */ + if (rpmtsPrepare(ts)) { + goto exit; + } + /* Check again for problems (now including file conflicts, duh */ + tsprobs = rpmtsProblems(ts); + + /* If unfiltered problems exist, free memory and return. */ + if ((rpmtsFlags(ts) & RPMTRANS_FLAG_BUILD_PROBS) || (rpmpsNumProblems(tsprobs))) { + tsMembers tsmem = rpmtsMembers(ts); + rc = tsmem->orderCount; + goto exit; + } + + /* Free up memory taken by problem sets */ + tsprobs = rpmpsFree(tsprobs); + rpmtsCleanProblems(ts); + + /* Actually install and remove packages, get final exit code */ + rc = rpmtsProcess(ts) ? -1 : 0; + + /* Run post-transaction scripts unless disabled */ + if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOST))) { + rpmlog(RPMLOG_DEBUG, "running post-transaction scripts\n"); + runTransScripts(ts, PKG_POSTTRANS); + } + +exit: + /* Finish up... */ + (void) umask(oldmask); + (void) rpmtsFinish(ts); + tsprobs = rpmpsFree(tsprobs); + rpmlockFree(lock); + return rc; +} diff --git a/lib/verify.c b/lib/verify.c new file mode 100644 index 0000000..32e837c --- /dev/null +++ b/lib/verify.c @@ -0,0 +1,516 @@ +/** \ingroup rpmcli + * \file lib/verify.c + * Verify installed payload files from package metadata. + */ + +#include "system.h" + +#include +#if WITH_CAP +#include +#endif +#if WITH_ACL +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "lib/misc.h" +#include "lib/rpmchroot.h" +#include "lib/rpmte_internal.h" /* rpmteProcess() */ +#include "lib/rpmug.h" + +#include "debug.h" + +#define S_ISDEV(m) (S_ISBLK((m)) || S_ISCHR((m))) + +/* If cap_compare() (Linux extension) not available, do it the hard way */ +#if WITH_CAP && !defined(HAVE_CAP_COMPARE) +static int cap_compare(cap_t acap, cap_t bcap) +{ + int rc = 0; + size_t asize = cap_size(acap); + size_t bsize = cap_size(bcap); + + if (asize != bsize) { + rc = 1; + } else { + char *abuf = xcalloc(asize, sizeof(*abuf)); + char *bbuf = xcalloc(bsize, sizeof(*bbuf)); + cap_copy_ext(abuf, acap, asize); + cap_copy_ext(bbuf, bcap, bsize); + rc = memcmp(abuf, bbuf, asize); + free(abuf); + free(bbuf); + } + return rc; +} +#endif + +int rpmVerifyFile(const rpmts ts, const rpmfi fi, + rpmVerifyAttrs * res, rpmVerifyAttrs omitMask) +{ + rpm_mode_t fmode = rpmfiFMode(fi); + rpmfileAttrs fileAttrs = rpmfiFFlags(fi); + rpmVerifyAttrs flags = rpmfiVFlags(fi); + const char * fn = rpmfiFN(fi); + struct stat sb; + int rc; + + *res = RPMVERIFY_NONE; + + /* + * Check to see if the file was installed - if not pretend all is OK. + */ + switch (rpmfiFState(fi)) { + case RPMFILE_STATE_NETSHARED: + case RPMFILE_STATE_NOTINSTALLED: + case RPMFILE_STATE_MISSING: + return 0; + break; + case RPMFILE_STATE_REPLACED: + /* For replaced files we can only verify if it exists at all */ + flags = RPMVERIFY_LSTATFAIL; + break; + case RPMFILE_STATE_WRONGCOLOR: + /* + * Files with wrong color are supposed to share some attributes + * with the actually installed file - verify what we can. + */ + flags &= ~(RPMVERIFY_FILEDIGEST | RPMVERIFY_FILESIZE | + RPMVERIFY_MTIME | RPMVERIFY_RDEV); + break; + case RPMFILE_STATE_NORMAL: + break; + } + + if (fn == NULL || lstat(fn, &sb) != 0) { + *res |= RPMVERIFY_LSTATFAIL; + return 1; + } + + /* + * Not all attributes of non-regular files can be verified. + */ + if (S_ISDIR(sb.st_mode)) + flags &= ~(RPMVERIFY_FILEDIGEST | RPMVERIFY_FILESIZE | RPMVERIFY_MTIME | + RPMVERIFY_LINKTO | RPMVERIFY_CAPS); + else if (S_ISLNK(sb.st_mode)) { + flags &= ~(RPMVERIFY_FILEDIGEST | RPMVERIFY_FILESIZE | RPMVERIFY_MTIME | + RPMVERIFY_MODE | RPMVERIFY_CAPS); + } + else if (S_ISFIFO(sb.st_mode)) + flags &= ~(RPMVERIFY_FILEDIGEST | RPMVERIFY_FILESIZE | RPMVERIFY_MTIME | + RPMVERIFY_LINKTO | RPMVERIFY_CAPS); + else if (S_ISCHR(sb.st_mode)) + flags &= ~(RPMVERIFY_FILEDIGEST | RPMVERIFY_FILESIZE | RPMVERIFY_MTIME | + RPMVERIFY_LINKTO | RPMVERIFY_CAPS); + else if (S_ISBLK(sb.st_mode)) + flags &= ~(RPMVERIFY_FILEDIGEST | RPMVERIFY_FILESIZE | RPMVERIFY_MTIME | + RPMVERIFY_LINKTO | RPMVERIFY_CAPS); + else + flags &= ~(RPMVERIFY_LINKTO); + + /* + * Content checks of %ghost files are meaningless. + */ + if (fileAttrs & RPMFILE_GHOST) + flags &= ~(RPMVERIFY_FILEDIGEST | RPMVERIFY_FILESIZE | RPMVERIFY_MTIME | + RPMVERIFY_LINKTO); + + /* + * Don't verify any features in omitMask. + */ + flags &= ~(omitMask | RPMVERIFY_FAILURES); + + + if (flags & RPMVERIFY_FILEDIGEST) { + const unsigned char *digest; + int algo; + size_t diglen; + + /* XXX If --nomd5, then prelinked library sizes are not corrected. */ + if ((digest = rpmfiFDigest(fi, &algo, &diglen))) { + unsigned char fdigest[diglen]; + rpm_loff_t fsize; + + rc = rpmDoDigest(algo, fn, 0, fdigest, &fsize); + sb.st_size = fsize; + if (rc) { + *res |= (RPMVERIFY_READFAIL|RPMVERIFY_FILEDIGEST); + } else if (memcmp(fdigest, digest, diglen)) { + *res |= RPMVERIFY_FILEDIGEST; + } + } else { + *res |= RPMVERIFY_FILEDIGEST; + } + } + + if (flags & RPMVERIFY_LINKTO) { + char linkto[1024+1]; + int size = 0; + + if ((size = readlink(fn, linkto, sizeof(linkto)-1)) == -1) + *res |= (RPMVERIFY_READLINKFAIL|RPMVERIFY_LINKTO); + else { + const char * flink = rpmfiFLink(fi); + linkto[size] = '\0'; + if (flink == NULL || !rstreq(linkto, flink)) + *res |= RPMVERIFY_LINKTO; + } + } + + if (flags & RPMVERIFY_FILESIZE) { + if (sb.st_size != rpmfiFSize(fi)) + *res |= RPMVERIFY_FILESIZE; + } + + if (flags & RPMVERIFY_MODE) { + rpm_mode_t metamode = fmode; + rpm_mode_t filemode; + + /* + * Platforms (like AIX) where sizeof(rpm_mode_t) != sizeof(mode_t) + * need the (rpm_mode_t) cast here. + */ + filemode = (rpm_mode_t)sb.st_mode; + + /* + * Comparing the type of %ghost files is meaningless, but perms are OK. + */ + if (fileAttrs & RPMFILE_GHOST) { + metamode &= ~0xf000; + filemode &= ~0xf000; + } + + if (metamode != filemode) + *res |= RPMVERIFY_MODE; + +#if WITH_ACL + /* + * For now, any non-default acl's on a file is a difference as rpm + * cannot have set them. + */ + acl_t facl = acl_get_file(fn, ACL_TYPE_ACCESS); + if (facl) { + if (acl_equiv_mode(facl, NULL) == 1) { + *res |= RPMVERIFY_MODE; + } + acl_free(facl); + } +#endif + } + + if (flags & RPMVERIFY_RDEV) { + if (S_ISCHR(fmode) != S_ISCHR(sb.st_mode) + || S_ISBLK(fmode) != S_ISBLK(sb.st_mode)) + { + *res |= RPMVERIFY_RDEV; + } else if (S_ISDEV(fmode) && S_ISDEV(sb.st_mode)) { + rpm_rdev_t st_rdev = (sb.st_rdev & 0xffff); + rpm_rdev_t frdev = (rpmfiFRdev(fi) & 0xffff); + if (st_rdev != frdev) + *res |= RPMVERIFY_RDEV; + } + } + +#if WITH_CAP + if (flags & RPMVERIFY_CAPS) { + /* + * Empty capability set ("=") is not exactly the same as no + * capabilities at all but suffices for now... + */ + cap_t cap, fcap; + cap = cap_from_text(rpmfiFCaps(fi)); + if (!cap) { + cap = cap_from_text("="); + } + fcap = cap_get_file(fn); + if (!fcap) { + fcap = cap_from_text("="); + } + + if (cap_compare(cap, fcap) != 0) + *res |= RPMVERIFY_CAPS; + + cap_free(fcap); + cap_free(cap); + } +#endif + + if ((flags & RPMVERIFY_MTIME) && (sb.st_mtime != rpmfiFMtime(fi))) { + *res |= RPMVERIFY_MTIME; + } + + if (flags & RPMVERIFY_USER) { + const char * name = rpmugUname(sb.st_uid); + const char * fuser = rpmfiFUser(fi); + if (name == NULL || fuser == NULL || !rstreq(name, fuser)) + *res |= RPMVERIFY_USER; + } + + if (flags & RPMVERIFY_GROUP) { + const char * name = rpmugGname(sb.st_gid); + const char * fgroup = rpmfiFGroup(fi); + if (name == NULL || fgroup == NULL || !rstreq(name, fgroup)) + *res |= RPMVERIFY_GROUP; + } + + return 0; +} + +/** + * Return exit code from running verify script from header. + * @param ts transaction set + * @param h header + * @return 0 on success + */ +static int rpmVerifyScript(rpmts ts, Header h) +{ + int rc = 0; + + if (headerIsEntry(h, RPMTAG_VERIFYSCRIPT)) { + /* fake up a erasure transaction element */ + rpmte p = rpmteNew(ts, h, TR_REMOVED, NULL, NULL); + rpmteSetHeader(p, h); + + rc = (rpmpsmRun(ts, p, PKG_VERIFY) != RPMRC_OK); + + /* clean up our fake transaction bits */ + rpmteFree(p); + } + + return rc; +} + +#define unknown "?" +#define _verify(_RPMVERIFY_F, _C, _pad) \ + ((verifyResult & _RPMVERIFY_F) ? _C : _pad) +#define _verifylink(_RPMVERIFY_F, _C, _pad) \ + ((verifyResult & RPMVERIFY_READLINKFAIL) ? unknown : \ + (verifyResult & _RPMVERIFY_F) ? _C : _pad) +#define _verifyfile(_RPMVERIFY_F, _C, _pad) \ + ((verifyResult & RPMVERIFY_READFAIL) ? unknown : \ + (verifyResult & _RPMVERIFY_F) ? _C : _pad) +char * rpmVerifyString(uint32_t verifyResult, const char *pad) +{ + char *fmt = NULL; + rasprintf(&fmt, "%s%s%s%s%s%s%s%s%s", + _verifyfile(RPMVERIFY_FILEDIGEST, "5", pad), + _verify(RPMVERIFY_FILESIZE, "S", pad), + _verifylink(RPMVERIFY_LINKTO, "L", pad), + _verify(RPMVERIFY_MTIME, "T", pad), + _verify(RPMVERIFY_RDEV, "D", pad), + _verify(RPMVERIFY_USER, "U", pad), + _verify(RPMVERIFY_GROUP, "G", pad), + _verify(RPMVERIFY_MODE, "M", pad), + _verify(RPMVERIFY_CAPS, "P", pad)); + + return fmt; +} +#undef _verifyfile +#undef _verifylink +#undef _verify +#undef aok +#undef unknown + +char * rpmFFlagsString(uint32_t fflags, const char *pad) +{ + char *fmt = NULL; + rasprintf(&fmt, "%s%s%s%s%s%s%s%s", + (fflags & RPMFILE_DOC) ? "d" : pad, + (fflags & RPMFILE_CONFIG) ? "c" : pad, + (fflags & RPMFILE_SPECFILE) ? "s" : pad, + (fflags & RPMFILE_MISSINGOK) ? "m" : pad, + (fflags & RPMFILE_NOREPLACE) ? "n" : pad, + (fflags & RPMFILE_GHOST) ? "g" : pad, + (fflags & RPMFILE_LICENSE) ? "l" : pad, + (fflags & RPMFILE_README) ? "r" : pad); + return fmt; +} + +/** + * Check file info from header against what's actually installed. + * @param ts transaction set + * @param h header to verify + * @param omitMask bits to disable verify checks + * @param ghosts should ghosts be verified? + * @return 0 no problems, 1 problems found + */ +static int verifyHeader(rpmts ts, Header h, rpmVerifyAttrs omitMask, int ghosts) +{ + rpmVerifyAttrs verifyResult = 0; + int ec = 0; /* assume no problems */ + rpmfi fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, RPMFI_FLAGS_VERIFY); + + rpmfiInit(fi, 0); + while (rpmfiNext(fi) >= 0) { + rpmfileAttrs fileAttrs = rpmfiFFlags(fi); + char *buf = NULL, *attrFormat; + char ac; + int rc; + + /* If not verifying %ghost, skip ghost files. */ + if ((fileAttrs & RPMFILE_GHOST) && !ghosts) + continue; + + rc = rpmVerifyFile(ts, fi, &verifyResult, omitMask); + + /* Filter out timestamp differences of shared files */ + if (rc == 0 && (verifyResult & RPMVERIFY_MTIME)) { + rpmdbMatchIterator mi; + mi = rpmtsInitIterator(ts, RPMDBI_BASENAMES, rpmfiFN(fi), 0); + if (rpmdbGetIteratorCount(mi) > 1) + verifyResult &= ~RPMVERIFY_MTIME; + rpmdbFreeIterator(mi); + } + + attrFormat = rpmFFlagsString(fileAttrs, ""); + ac = rstreq(attrFormat, "") ? ' ' : attrFormat[0]; + if (rc) { + if (!(fileAttrs & (RPMFILE_MISSINGOK|RPMFILE_GHOST)) || rpmIsVerbose()) { + rasprintf(&buf, _("missing %c %s"), ac, rpmfiFN(fi)); + if ((verifyResult & RPMVERIFY_LSTATFAIL) != 0 && + errno != ENOENT) { + char *app; + rasprintf(&app, " (%s)", strerror(errno)); + rstrcat(&buf, app); + free(app); + } + ec = rc; + } + } else if (verifyResult || rpmIsVerbose()) { + char *verifyFormat = rpmVerifyString(verifyResult, "."); + rasprintf(&buf, "%s %c %s", verifyFormat, ac, rpmfiFN(fi)); + free(verifyFormat); + + if (verifyResult) ec = 1; + } + free(attrFormat); + + if (buf) { + rpmlog(RPMLOG_NOTICE, "%s\n", buf); + buf = _free(buf); + } + } + rpmfiFree(fi); + + return ec; +} + +/** + * Check installed package dependencies for problems. + * @param ts transaction set + * @param h header + * @return number of problems found (0 for no problems) + */ +static int verifyDependencies(rpmts ts, Header h) +{ + rpmps ps; + rpmte te; + int rc; + + rpmtsEmpty(ts); + (void) rpmtsAddInstallElement(ts, h, NULL, 0, NULL); + + (void) rpmtsCheck(ts); + te = rpmtsElement(ts, 0); + ps = rpmteProblems(te); + rc = rpmpsNumProblems(ps); + + if (rc > 0) { + rpmlog(RPMLOG_NOTICE, _("Unsatisfied dependencies for %s:\n"), + rpmteNEVRA(te)); + rpmpsi psi = rpmpsInitIterator(ps); + rpmProblem p; + + while ((p = rpmpsiNext(psi)) != NULL) { + char * ps = rpmProblemString(p); + rpmlog(RPMLOG_NOTICE, "\t%s\n", ps); + free(ps); + } + psi = rpmpsFreeIterator(psi); + } + ps = rpmpsFree(ps); + rpmtsEmpty(ts); + + return rc; +} + +int showVerifyPackage(QVA_t qva, rpmts ts, Header h) +{ + rpmVerifyAttrs omitMask = ((qva->qva_flags & VERIFY_ATTRS) ^ VERIFY_ATTRS); + int ghosts = (qva->qva_fflags & RPMFILE_GHOST); + int ec = 0; + int rc; + + if (qva->qva_flags & VERIFY_DEPS) { + if ((rc = verifyDependencies(ts, h)) != 0) + ec = rc; + } + if (qva->qva_flags & VERIFY_FILES) { + if ((rc = verifyHeader(ts, h, omitMask, ghosts)) != 0) + ec = rc; + } + if (qva->qva_flags & VERIFY_SCRIPT) { + if ((rc = rpmVerifyScript(ts, h)) != 0) + ec = rc; + } + + return ec; +} + +int rpmcliVerify(rpmts ts, QVA_t qva, char * const * argv) +{ + rpmVSFlags vsflags, ovsflags; + int ec = 0; + FD_t scriptFd = fdDup(STDOUT_FILENO); + + /* + * Open the DB + indices explicitly before possible chroot, + * otherwises BDB is going to be unhappy... + */ + rpmtsOpenDB(ts, O_RDONLY); + rpmdbOpenAll(rpmtsGetRdb(ts)); + if (rpmChrootSet(rpmtsRootDir(ts)) || rpmChrootIn()) { + ec = 1; + goto exit; + } + + if (qva->qva_showPackage == NULL) + qva->qva_showPackage = showVerifyPackage; + + vsflags = rpmExpandNumeric("%{?_vsflags_verify}"); + if (rpmcliQueryFlags & VERIFY_DIGEST) + vsflags |= _RPMVSF_NODIGESTS; + if (rpmcliQueryFlags & VERIFY_SIGNATURE) + vsflags |= _RPMVSF_NOSIGNATURES; + if (rpmcliQueryFlags & VERIFY_HDRCHK) + vsflags |= RPMVSF_NOHDRCHK; + vsflags &= ~RPMVSF_NEEDPAYLOAD; + + rpmtsSetScriptFd(ts, scriptFd); + ovsflags = rpmtsSetVSFlags(ts, vsflags); + ec = rpmcliArgIter(ts, qva, argv); + vsflags = rpmtsSetVSFlags(ts, ovsflags); + rpmtsSetScriptFd(ts, NULL); + + if (qva->qva_showPackage == showVerifyPackage) + qva->qva_showPackage = NULL; + + rpmtsEmpty(ts); + + if (rpmChrootOut() || rpmChrootSet(NULL)) + ec = 1; + +exit: + Fclose(scriptFd); + + return ec; +} diff --git a/ltmain.sh b/ltmain.sh new file mode 100755 index 0000000..aa5624c --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,9636 @@ + +# libtool (GNU libtool) 2.4 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.4 +TIMESTAMP="" +package_revision=1.3293 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="/bin/grep -E"} +: ${FGREP="/bin/grep -F"} +: ${GREP="/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/bin/sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' + + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + func_append verstring ":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + func_append libobjs " $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_apped perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + func_append oldobjs " $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + func_append rmfiles " $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/luaext/Makefile.am b/luaext/Makefile.am new file mode 100644 index 0000000..65e1555 --- /dev/null +++ b/luaext/Makefile.am @@ -0,0 +1,19 @@ +noinst_LTLIBRARIES = libluaext.la + +EXTRA_DIST = \ + modemuncher.c \ + userconfig.c \ + linit.lua + +AM_CPPFLAGS = -I$(top_builddir) -I$(top_builddir)/include -I. + +libluaext_la_CPPFLAGS = $(AM_CPPFLAGS) -DWITH_POSIX @LUA_CFLAGS@ +libluaext_la_LIBADD = @LUA_LIBS@ +libluaext_la_SOURCES = \ + lposix.h \ + lposix.c \ + lrexlib.h \ + lrexlib.c + +linit.lch: linit.lua + bin2c linit.lua > linit.lch diff --git a/luaext/Makefile.in b/luaext/Makefile.in new file mode 100644 index 0000000..90218b8 --- /dev/null +++ b/luaext/Makefile.in @@ -0,0 +1,614 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = luaext +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libluaext_la_DEPENDENCIES = +am_libluaext_la_OBJECTS = libluaext_la-lposix.lo \ + libluaext_la-lrexlib.lo +libluaext_la_OBJECTS = $(am_libluaext_la_OBJECTS) +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libluaext_la_SOURCES) +DIST_SOURCES = $(libluaext_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libluaext.la +EXTRA_DIST = \ + modemuncher.c \ + userconfig.c \ + linit.lua + +AM_CPPFLAGS = -I$(top_builddir) -I$(top_builddir)/include -I. +libluaext_la_CPPFLAGS = $(AM_CPPFLAGS) -DWITH_POSIX @LUA_CFLAGS@ +libluaext_la_LIBADD = @LUA_LIBS@ +libluaext_la_SOURCES = \ + lposix.h \ + lposix.c \ + lrexlib.h \ + lrexlib.c + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign luaext/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign luaext/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libluaext.la: $(libluaext_la_OBJECTS) $(libluaext_la_DEPENDENCIES) + $(LINK) $(libluaext_la_OBJECTS) $(libluaext_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libluaext_la-lposix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libluaext_la-lrexlib.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libluaext_la-lposix.lo: lposix.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluaext_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libluaext_la-lposix.lo -MD -MP -MF $(DEPDIR)/libluaext_la-lposix.Tpo -c -o libluaext_la-lposix.lo `test -f 'lposix.c' || echo '$(srcdir)/'`lposix.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libluaext_la-lposix.Tpo $(DEPDIR)/libluaext_la-lposix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lposix.c' object='libluaext_la-lposix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluaext_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libluaext_la-lposix.lo `test -f 'lposix.c' || echo '$(srcdir)/'`lposix.c + +libluaext_la-lrexlib.lo: lrexlib.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluaext_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libluaext_la-lrexlib.lo -MD -MP -MF $(DEPDIR)/libluaext_la-lrexlib.Tpo -c -o libluaext_la-lrexlib.lo `test -f 'lrexlib.c' || echo '$(srcdir)/'`lrexlib.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libluaext_la-lrexlib.Tpo $(DEPDIR)/libluaext_la-lrexlib.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lrexlib.c' object='libluaext_la-lrexlib.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libluaext_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libluaext_la-lrexlib.lo `test -f 'lrexlib.c' || echo '$(srcdir)/'`lrexlib.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +linit.lch: linit.lua + bin2c linit.lua > linit.lch + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/luaext/linit.lua b/luaext/linit.lua new file mode 100644 index 0000000..7b134ba --- /dev/null +++ b/luaext/linit.lua @@ -0,0 +1,41 @@ + +rex.new = rex.newPOSIX + +util = {} + +function util.grep(expr, filename) + if not posix.stat(filename, "mode") then + return nil + end + local lines = {} + local pat = rex.new(expr) + local pos = 1 + for line in io.lines(filename) do + if pat:match(line) then + table.insert(lines, pos, line) + end + pos = pos + 1 + end + if table.getn(lines) == 0 then + return nil + end + return lines +end + +function util.igrep(expr, filename) + return ipairs(rex.grep(expr, filename)) +end + +function util.bgrep(expr, filename) + if not posix.stat(filename, "mode") then + return nil + end + local pat = rex.new(expr) + for line in io.lines(filename) do + if pat:match(line) then + return true + end + end + return false +end + diff --git a/luaext/lposix.c b/luaext/lposix.c new file mode 100644 index 0000000..3b25157 --- /dev/null +++ b/luaext/lposix.c @@ -0,0 +1,889 @@ +/* +* lposix.c +* POSIX library for Lua 5.0. Based on original by Claudio Terra for Lua 3.x. +* Luiz Henrique de Figueiredo +* 05 Nov 2003 22:09:10 +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MYNAME "posix" +#define MYVERSION MYNAME " library for " LUA_VERSION " / Nov 2003" + +#include "lua.h" +#include "lauxlib.h" +#include "lposix.h" + + +#ifndef MYBUFSIZ +#define MYBUFSIZ 512 +#endif + +#include "modemuncher.c" + +static int have_forked = 0; + +static const char *filetype(mode_t m) +{ + if (S_ISREG(m)) return "regular"; + else if (S_ISLNK(m)) return "link"; + else if (S_ISDIR(m)) return "directory"; + else if (S_ISCHR(m)) return "character device"; + else if (S_ISBLK(m)) return "block device"; + else if (S_ISFIFO(m)) return "fifo"; + else if (S_ISSOCK(m)) return "socket"; + else return "?"; +} + +typedef int (*Selector)(lua_State *L, int i, const void *data); + +static int doselection(lua_State *L, int i, const char *const S[], Selector F, const void *data) +{ + if (lua_isnone(L, i)) + { + lua_newtable(L); + for (i=0; S[i]!=NULL; i++) + { + lua_pushstring(L, S[i]); + F(L, i, data); + lua_settable(L, -3); + } + return 1; + } + else + { + int j=luaL_checkoption(L, i, NULL, S); + if (j==-1) luaL_argerror(L, i, "unknown selector"); + return F(L, j, data); + } +} + +static void storeindex(lua_State *L, int i, const char *value) +{ + lua_pushstring(L, value); + lua_rawseti(L, -2, i); +} + +static void storestring(lua_State *L, const char *name, const char *value) +{ + lua_pushstring(L, name); + lua_pushstring(L, value); + lua_settable(L, -3); +} + +static void storenumber(lua_State *L, const char *name, lua_Number value) +{ + lua_pushstring(L, name); + lua_pushnumber(L, value); + lua_settable(L, -3); +} + +static int pusherror(lua_State *L, const char *info) +{ + lua_pushnil(L); + if (info==NULL) + lua_pushstring(L, strerror(errno)); + else + lua_pushfstring(L, "%s: %s", info, strerror(errno)); + lua_pushnumber(L, errno); + return 3; +} + +static int pushresult(lua_State *L, int i, const char *info) +{ + if (i != -1) + { + lua_pushnumber(L, i); + return 1; + } + else + return pusherror(L, info); +} + +static void badoption(lua_State *L, int i, const char *what, int option) +{ + luaL_argerror(L, 2, + lua_pushfstring(L, "unknown %s option `%c'", what, option)); +} + +static uid_t mygetuid(lua_State *L, int i) +{ + if (lua_isnone(L, i)) + return -1; + else if (lua_isnumber(L, i)) + return (uid_t) lua_tonumber(L, i); + else if (lua_isstring(L, i)) + { + struct passwd *p=getpwnam(lua_tostring(L, i)); + return (p==NULL) ? -1 : p->pw_uid; + } + else + return luaL_typerror(L, i, "string or number"); +} + +static gid_t mygetgid(lua_State *L, int i) +{ + if (lua_isnone(L, i)) + return -1; + else if (lua_isnumber(L, i)) + return (gid_t) lua_tonumber(L, i); + else if (lua_isstring(L, i)) + { + struct group *g=getgrnam(lua_tostring(L, i)); + return (g==NULL) ? -1 : g->gr_gid; + } + else + return luaL_typerror(L, i, "string or number"); +} + + + +static int Perrno(lua_State *L) /** errno() */ +{ + lua_pushstring(L, strerror(errno)); + lua_pushnumber(L, errno); + return 2; +} + + +static int Pdir(lua_State *L) /** dir([path]) */ +{ + const char *path = luaL_optstring(L, 1, "."); + DIR *d = opendir(path); + if (d == NULL) + return pusherror(L, path); + else + { + int i; + struct dirent *entry; + lua_newtable(L); + for (i=1; (entry = readdir(d)) != NULL; i++) + storeindex(L, i, entry->d_name); + closedir(d); + return 1; + } +} + + +static int aux_files(lua_State *L) +{ + DIR *d = lua_touserdata(L, lua_upvalueindex(1)); + struct dirent *entry; + if (d == NULL) return luaL_error(L, "attempt to use closed dir"); + entry = readdir(d); + if (entry == NULL) + { + closedir(d); + lua_pushnil(L); + lua_replace(L, lua_upvalueindex(1)); + lua_pushnil(L); + } + else + { + lua_pushstring(L, entry->d_name); +#if 0 +#ifdef _DIRENT_HAVE_D_TYPE + lua_pushstring(L, filetype(DTTOIF(entry->d_type))); + return 2; +#endif +#endif + } + return 1; +} + +static int Pfiles(lua_State *L) /** files([path]) */ +{ + const char *path = luaL_optstring(L, 1, "."); + DIR *d = opendir(path); + if (d == NULL) + return pusherror(L, path); + else + { + lua_pushlightuserdata(L, d); + lua_pushcclosure(L, aux_files, 1); + return 1; + } +} + + +static int Pgetcwd(lua_State *L) /** getcwd() */ +{ + char buf[MYBUFSIZ]; + if (getcwd(buf, sizeof(buf)) == NULL) + return pusherror(L, "."); + else + { + lua_pushstring(L, buf); + return 1; + } +} + + +static int Pmkdir(lua_State *L) /** mkdir(path) */ +{ + const char *path = luaL_checkstring(L, 1); + return pushresult(L, mkdir(path, 0777), path); +} + + +static int Pchdir(lua_State *L) /** chdir(path) */ +{ + const char *path = luaL_checkstring(L, 1); + return pushresult(L, chdir(path), path); +} + + +static int Prmdir(lua_State *L) /** rmdir(path) */ +{ + const char *path = luaL_checkstring(L, 1); + return pushresult(L, rmdir(path), path); +} + + +static int Punlink(lua_State *L) /** unlink(path) */ +{ + const char *path = luaL_checkstring(L, 1); + return pushresult(L, unlink(path), path); +} + + +static int Plink(lua_State *L) /** link(oldpath,newpath) */ +{ + const char *oldpath = luaL_checkstring(L, 1); + const char *newpath = luaL_checkstring(L, 2); + return pushresult(L, link(oldpath, newpath), NULL); +} + + +static int Psymlink(lua_State *L) /** symlink(oldpath,newpath) */ +{ + const char *oldpath = luaL_checkstring(L, 1); + const char *newpath = luaL_checkstring(L, 2); + return pushresult(L, symlink(oldpath, newpath), NULL); +} + + +static int Preadlink(lua_State *L) /** readlink(path) */ +{ + char buf[MYBUFSIZ]; + const char *path = luaL_checkstring(L, 1); + int n = readlink(path, buf, sizeof(buf)); + if (n==-1) return pusherror(L, path); + lua_pushlstring(L, buf, n); + return 1; +} + + +static int Paccess(lua_State *L) /** access(path,[mode]) */ +{ + int mode=F_OK; + const char *path=luaL_checkstring(L, 1); + const char *s; + for (s=luaL_optstring(L, 2, "f"); *s!=0 ; s++) + switch (*s) + { + case ' ': break; + case 'r': mode |= R_OK; break; + case 'w': mode |= W_OK; break; + case 'x': mode |= X_OK; break; + case 'f': mode |= F_OK; break; + default: badoption(L, 2, "mode", *s); break; + } + return pushresult(L, access(path, mode), path); +} + + +static int Pmkfifo(lua_State *L) /** mkfifo(path) */ +{ + const char *path = luaL_checkstring(L, 1); + return pushresult(L, mkfifo(path, 0777), path); +} + + +static int Pexec(lua_State *L) /** exec(path,[args]) */ +{ + const char *path = luaL_checkstring(L, 1); + int i,n=lua_gettop(L); + char **argv; + + if (!have_forked) + return luaL_error(L, "exec not permitted in this context"); + + argv = malloc((n+1)*sizeof(char*)); + if (argv==NULL) return luaL_error(L,"not enough memory"); + argv[0] = (char*)path; + for (i=1; i + #define environ (*_NSGetEnviron()) + #else + extern char **environ; + #endif /* __APPLE__ */ + char **e; + if (*environ==NULL) lua_pushnil(L); else lua_newtable(L); + for (e=environ; *e!=NULL; e++) + { + char *s=*e; + char *eq=strchr(s, '='); + if (eq==NULL) /* will this ever happen? */ + { + lua_pushstring(L,s); + lua_pushboolean(L,0); + } + else + { + lua_pushlstring(L,s,eq-s); + lua_pushstring(L,eq+1); + } + lua_settable(L,-3); + } + } + else + lua_pushstring(L, getenv(luaL_checkstring(L, 1))); + return 1; +} + + +static int Pumask(lua_State *L) /** umask([mode]) */ +{ + char m[10]; + mode_t mode; + umask(mode=umask(0)); + mode=(~mode)&0777; + if (!lua_isnone(L, 1)) + { + if (mode_munch(&mode, luaL_checkstring(L, 1))) + { + lua_pushnil(L); + return 1; + } + mode&=0777; + umask(~mode); + } + modechopper(mode, m); + lua_pushstring(L, m); + return 1; +} + + +static int Pchmod(lua_State *L) /** chmod(path,mode) */ +{ + mode_t mode; + struct stat s; + const char *path = luaL_checkstring(L, 1); + const char *modestr = luaL_checkstring(L, 2); + if (stat(path, &s)) return pusherror(L, path); + mode = s.st_mode; + if (mode_munch(&mode, modestr)) luaL_argerror(L, 2, "bad mode"); + return pushresult(L, chmod(path, mode), path); +} + + +static int Pchown(lua_State *L) /** chown(path,uid,gid) */ +{ + const char *path = luaL_checkstring(L, 1); + uid_t uid = mygetuid(L, 2); + gid_t gid = mygetgid(L, 3); + return pushresult(L, chown(path, uid, gid), path); +} + + +static int Putime(lua_State *L) /** utime(path,[mtime,atime]) */ +{ + struct utimbuf times; + time_t currtime = time(NULL); + const char *path = luaL_checkstring(L, 1); + times.modtime = luaL_optnumber(L, 2, currtime); + times.actime = luaL_optnumber(L, 3, currtime); + return pushresult(L, utime(path, ×), path); +} + + +static int FgetID(lua_State *L, int i, const void *data) +{ + switch (i) + { + case 0: lua_pushnumber(L, getegid()); break; + case 1: lua_pushnumber(L, geteuid()); break; + case 2: lua_pushnumber(L, getgid()); break; + case 3: lua_pushnumber(L, getuid()); break; + case 4: lua_pushnumber(L, getpgrp()); break; + case 5: lua_pushnumber(L, getpid()); break; + case 6: lua_pushnumber(L, getppid()); break; + } + return 1; +} + +static const char *const SgetID[] = +{ + "egid", "euid", "gid", "uid", "pgrp", "pid", "ppid", NULL +}; + +static int Pgetprocessid(lua_State *L) /** getprocessid([selector]) */ +{ + return doselection(L, 1, SgetID, FgetID, NULL); +} + + +static int Pttyname(lua_State *L) /** ttyname(fd) */ +{ + int fd=luaL_optint(L, 1, 0); + lua_pushstring(L, ttyname(fd)); + return 1; +} + +static int Pctermid(lua_State *L) /** ctermid() */ +{ + char b[L_ctermid]; + lua_pushstring(L, ctermid(b)); + return 1; +} + + +static int Pgetlogin(lua_State *L) /** getlogin() */ +{ + lua_pushstring(L, getlogin()); + return 1; +} + + +static int Fgetpasswd(lua_State *L, int i, const void *data) +{ + const struct passwd *p=data; + switch (i) + { + case 0: lua_pushstring(L, p->pw_name); break; + case 1: lua_pushnumber(L, p->pw_uid); break; + case 2: lua_pushnumber(L, p->pw_gid); break; + case 3: lua_pushstring(L, p->pw_dir); break; + case 4: lua_pushstring(L, p->pw_shell); break; +/* not strictly POSIX */ + case 5: lua_pushstring(L, p->pw_gecos); break; + case 6: lua_pushstring(L, p->pw_passwd); break; + } + return 1; +} + +static const char *const Sgetpasswd[] = +{ + "name", "uid", "gid", "dir", "shell", "gecos", "passwd", NULL +}; + + +static int Pgetpasswd(lua_State *L) /** getpasswd(name or id) */ +{ + struct passwd *p=NULL; + if (lua_isnoneornil(L, 1)) + p = getpwuid(geteuid()); + else if (lua_isnumber(L, 1)) + p = getpwuid((uid_t)lua_tonumber(L, 1)); + else if (lua_isstring(L, 1)) + p = getpwnam(lua_tostring(L, 1)); + else + luaL_typerror(L, 1, "string or number"); + if (p==NULL) + lua_pushnil(L); + else + doselection(L, 2, Sgetpasswd, Fgetpasswd, p); + return 1; +} + + +static int Pgetgroup(lua_State *L) /** getgroup(name or id) */ +{ + struct group *g=NULL; + if (lua_isnumber(L, 1)) + g = getgrgid((gid_t)lua_tonumber(L, 1)); + else if (lua_isstring(L, 1)) + g = getgrnam(lua_tostring(L, 1)); + else + luaL_typerror(L, 1, "string or number"); + if (g==NULL) + lua_pushnil(L); + else + { + int i; + lua_newtable(L); + storestring(L, "name", g->gr_name); + storenumber(L, "gid", g->gr_gid); + for (i=0; g->gr_mem[i] != NULL; i++) + storeindex(L, i+1, g->gr_mem[i]); + } + return 1; +} + + +static int Psetuid(lua_State *L) /** setuid(name or id) */ +{ + return pushresult(L, setuid(mygetuid(L, 1)), NULL); +} + + +static int Psetgid(lua_State *L) /** setgid(name or id) */ +{ + return pushresult(L, setgid(mygetgid(L, 1)), NULL); +} + +struct mytimes +{ + struct tms t; + clock_t elapsed; +}; + +#define pushtime(L,x) lua_pushnumber(L,((lua_Number)x)/CLOCKS_PER_SEC) + +static int Ftimes(lua_State *L, int i, const void *data) +{ + const struct mytimes *t=data; + switch (i) + { + case 0: pushtime(L, t->t.tms_utime); break; + case 1: pushtime(L, t->t.tms_stime); break; + case 2: pushtime(L, t->t.tms_cutime); break; + case 3: pushtime(L, t->t.tms_cstime); break; + case 4: pushtime(L, t->elapsed); break; + } + return 1; +} + +static const char *const Stimes[] = +{ + "utime", "stime", "cutime", "cstime", "elapsed", NULL +}; + +#define storetime(L,name,x) storenumber(L,name,(lua_Number)x/CLOCKS_PER_SEC) + +static int Ptimes(lua_State *L) /** times() */ +{ + struct mytimes t; + t.elapsed = times(&t.t); + return doselection(L, 1, Stimes, Ftimes, &t); +} + + +struct mystat +{ + struct stat s; + char mode[10]; + const char *type; +}; + +static int Fstat(lua_State *L, int i, const void *data) +{ + const struct mystat *s=data; + switch (i) + { + case 0: lua_pushstring(L, s->mode); break; + case 1: lua_pushnumber(L, s->s.st_ino); break; + case 2: lua_pushnumber(L, s->s.st_dev); break; + case 3: lua_pushnumber(L, s->s.st_nlink); break; + case 4: lua_pushnumber(L, s->s.st_uid); break; + case 5: lua_pushnumber(L, s->s.st_gid); break; + case 6: lua_pushnumber(L, s->s.st_size); break; + case 7: lua_pushnumber(L, s->s.st_atime); break; + case 8: lua_pushnumber(L, s->s.st_mtime); break; + case 9: lua_pushnumber(L, s->s.st_ctime); break; + case 10:lua_pushstring(L, s->type); break; + case 11:lua_pushnumber(L, s->s.st_mode); break; + } + return 1; +} + +static const char *const Sstat[] = +{ + "mode", "ino", "dev", "nlink", "uid", "gid", + "size", "atime", "mtime", "ctime", "type", "_mode", + NULL +}; + +static int Pstat(lua_State *L) /** stat(path,[selector]) */ +{ + struct mystat s; + const char *path=luaL_checkstring(L, 1); + if (lstat(path,&s.s)==-1) return pusherror(L, path); + s.type=filetype(s.s.st_mode); + modechopper(s.s.st_mode, s.mode); + return doselection(L, 2, Sstat, Fstat, &s); +} + + +static int Puname(lua_State *L) /** uname([string]) */ +{ + struct utsname u; + luaL_Buffer b; + const char *s; + if (uname(&u) == -1) return pusherror(L, NULL); + luaL_buffinit(L, &b); + for (s=luaL_optstring(L, 1, "%s %n %r %v %m"); *s; s++) + if (*s!='%') + luaL_putchar(&b, *s); + else switch (*++s) + { + case '%': luaL_putchar(&b, *s); break; + case 'm': luaL_addstring(&b,u.machine); break; + case 'n': luaL_addstring(&b,u.nodename); break; + case 'r': luaL_addstring(&b,u.release); break; + case 's': luaL_addstring(&b,u.sysname); break; + case 'v': luaL_addstring(&b,u.version); break; + default: badoption(L, 2, "format", *s); break; + } + luaL_pushresult(&b); + return 1; +} + + +static const int Kpathconf[] = +{ + _PC_LINK_MAX, _PC_MAX_CANON, _PC_MAX_INPUT, _PC_NAME_MAX, _PC_PATH_MAX, + _PC_PIPE_BUF, _PC_CHOWN_RESTRICTED, _PC_NO_TRUNC, _PC_VDISABLE, + -1 +}; + +static int Fpathconf(lua_State *L, int i, const void *data) +{ + const char *path=data; + lua_pushnumber(L, pathconf(path, Kpathconf[i])); + return 1; +} + +static const char *const Spathconf[] = +{ + "link_max", "max_canon", "max_input", "name_max", "path_max", + "pipe_buf", "chown_restricted", "no_trunc", "vdisable", + NULL +}; + +static int Ppathconf(lua_State *L) /** pathconf(path,[selector]) */ +{ + const char *path=luaL_checkstring(L, 1); + return doselection(L, 2, Spathconf, Fpathconf, path); +} + + +static const int Ksysconf[] = +{ + _SC_ARG_MAX, _SC_CHILD_MAX, _SC_CLK_TCK, _SC_NGROUPS_MAX, _SC_STREAM_MAX, + _SC_TZNAME_MAX, _SC_OPEN_MAX, _SC_JOB_CONTROL, _SC_SAVED_IDS, _SC_VERSION, + -1 +}; + +static int Fsysconf(lua_State *L, int i, const void *data) +{ + lua_pushnumber(L, sysconf(Ksysconf[i])); + return 1; +} + +static const char *const Ssysconf[] = +{ + "arg_max", "child_max", "clk_tck", "ngroups_max", "stream_max", + "tzname_max", "open_max", "job_control", "saved_ids", "version", + NULL +}; + +static int Psysconf(lua_State *L) /** sysconf([selector]) */ +{ + return doselection(L, 1, Ssysconf, Fsysconf, NULL); +} + +static int Pmkstemp(lua_State *L) +{ + const char *path; + char *dynpath; + int fd; + FILE **f; + + path = luaL_checkstring(L, 1); + if (path == NULL) + return 0; + dynpath = rstrdup(path); + fd = mkstemp(dynpath); + f = (FILE**)lua_newuserdata(L, sizeof(FILE*)); + if (f == NULL) { + close(fd); + free(dynpath); + return 0; + } + *f = fdopen(fd, "a+"); + lua_pushstring(L, dynpath); + free(dynpath); + luaL_getmetatable(L, "FILE*"); + if (lua_isnil(L, -1)) { + lua_pop(L, 1); + return luaL_error(L, "FILE* metatable not available " + "(io not loaded?)"); + } else { + lua_setmetatable(L, -3); + } + return 2; +} + +static const luaL_reg R[] = +{ + {"access", Paccess}, + {"chdir", Pchdir}, + {"chmod", Pchmod}, + {"chown", Pchown}, + {"ctermid", Pctermid}, + {"dir", Pdir}, + {"errno", Perrno}, + {"exec", Pexec}, + {"files", Pfiles}, + {"fork", Pfork}, + {"getcwd", Pgetcwd}, + {"getenv", Pgetenv}, + {"getgroup", Pgetgroup}, + {"getlogin", Pgetlogin}, + {"getpasswd", Pgetpasswd}, + {"getprocessid", Pgetprocessid}, + {"kill", Pkill}, + {"link", Plink}, + {"mkdir", Pmkdir}, + {"mkfifo", Pmkfifo}, + {"mkstemp", Pmkstemp}, + {"pathconf", Ppathconf}, + {"putenv", Pputenv}, + {"readlink", Preadlink}, + {"rmdir", Prmdir}, + {"setgid", Psetgid}, + {"setuid", Psetuid}, + {"sleep", Psleep}, + {"stat", Pstat}, + {"symlink", Psymlink}, + {"sysconf", Psysconf}, + {"times", Ptimes}, + {"ttyname", Pttyname}, + {"umask", Pumask}, + {"uname", Puname}, + {"unlink", Punlink}, + {"utime", Putime}, + {"wait", Pwait}, + {"setenv", Psetenv}, + {"unsetenv", Punsetenv}, + {NULL, NULL} +}; + +LUALIB_API int luaopen_posix (lua_State *L) +{ + luaL_openlib(L, MYNAME, R, 0); + lua_pushliteral(L,"version"); /** version */ + lua_pushliteral(L,MYVERSION); + lua_settable(L,-3); + return 1; +} + +/* RPM specific overrides for Lua standard library */ + +static int exit_override(lua_State *L) +{ + if (!have_forked) + return luaL_error(L, "exit not permitted in this context"); + + exit(luaL_optint(L, 1, EXIT_SUCCESS)); +} + +static const luaL_reg os_overrides[] = +{ + {"exit", exit_override}, + {NULL, NULL} +}; + +int luaopen_rpm_os(lua_State *L) +{ + lua_pushvalue(L, LUA_GLOBALSINDEX); + luaL_openlib(L, "os", os_overrides, 0); + return 0; +} + diff --git a/luaext/lposix.h b/luaext/lposix.h new file mode 100644 index 0000000..1f9afe9 --- /dev/null +++ b/luaext/lposix.h @@ -0,0 +1,7 @@ +#ifndef LPOSIX_H +#define LPOSIX_H + +int luaopen_posix (lua_State *L); +int luaopen_rpm_os (lua_State *L); + +#endif diff --git a/luaext/lrexlib.c b/luaext/lrexlib.c new file mode 100644 index 0000000..81931c0 --- /dev/null +++ b/luaext/lrexlib.c @@ -0,0 +1,340 @@ +/* lrexlib.c - POSIX & PCRE regular expression library */ +/* POSIX regexs can use Spencer extensions for matching NULs if available + (REG_BASIC) */ +/* Reuben Thomas nov00-06oct03 */ + +#include +#include +#include + +#include "lua.h" +#include "lauxlib.h" +#include "lrexlib.h" + + +/* Sanity check */ +#if !defined(WITH_POSIX) && !defined(WITH_PCRE) +#error Define WITH_POSIX or WITH_PCRE, otherwise this library is useless! +#endif + + +/* POSIX regex methods */ + +#ifdef WITH_POSIX + +#include + +static int rex_comp(lua_State *L) +{ + size_t l; + const char *pattern; + int res; + regex_t *pr = (regex_t *)lua_newuserdata(L, sizeof(regex_t)); + pattern = luaL_checklstring(L, 1, &l); +#ifdef REG_BASIC + pr->re_endp = pattern + lua_strlen(L, 1); + res = regcomp(pr, pattern, REG_EXTENDED | REG_PEND); +#else + res = regcomp(pr, pattern, REG_EXTENDED); +#endif + if (res) { + size_t sz = regerror(res, pr, NULL, 0); + char errbuf[sz]; + regerror(res, pr, errbuf, sz); + lua_pushstring(L, errbuf); + lua_error(L); + } + luaL_getmetatable(L, "regex_t"); + lua_setmetatable(L, -2); + return 1; +} + +static void rex_getargs(lua_State *L, size_t *len, size_t *ncapt, + const char **text, regex_t **pr, regmatch_t **match) +{ + luaL_checkany(L, 1); + *pr = (regex_t *)lua_touserdata(L, 1); +#ifdef REG_BASIC + *text = luaL_checklstring(L, 2, len); +#else + *text = luaL_checklstring(L, 2, NULL); +#endif + *ncapt = (*pr)->re_nsub; + luaL_checkstack(L, *ncapt + 2, "too many captures"); + *match = malloc((*ncapt + 1) * sizeof(regmatch_t)); +} + +static void rex_push_matches(lua_State *L, const char *text, regmatch_t *match, + size_t ncapt) +{ + size_t i; + lua_newtable(L); + for (i = 1; i <= ncapt; i++) { + if (match[i].rm_so >= 0) { + lua_pushlstring(L, text + match[i].rm_so, + match[i].rm_eo - match[i].rm_so); + lua_rawseti(L, -2, i); + } + } +} + +static int rex_match(lua_State *L) +{ + int res; +#ifdef REG_BASIC + size_t len; +#endif + size_t ncapt; + const char *text; + regex_t *pr; + regmatch_t *match; + rex_getargs(L, +#ifdef REG_BASIC + &len, +#else + NULL, +#endif + &ncapt, &text, &pr, &match); +#ifdef REG_BASIC + match[0].rm_so = 0; + match[0].rm_eo = len; + res = regexec(pr, text, ncapt + 1, match, REG_STARTEND); +#else + res = regexec(pr, text, ncapt + 1, match, 0); +#endif + if (res == 0) { + lua_pushnumber(L, match[0].rm_so + 1); + lua_pushnumber(L, match[0].rm_eo); + rex_push_matches(L, text, match, ncapt); + lua_pushstring(L, "n"); + lua_pushnumber(L, ncapt); + lua_rawset(L, -3); + return 3; + } else + return 0; +} + +static int rex_gmatch(lua_State *L) +{ + int res; +#ifdef REG_BASIC + size_t len; +#endif + size_t ncapt, nmatch = 0, maxmatch = 0, limit = 0; + const char *text; + regex_t *pr; + regmatch_t *match; + rex_getargs(L, +#ifdef REG_BASIC + &len, +#else + NULL, +#endif + &ncapt, &text, &pr, &match); + luaL_checktype(L, 3, LUA_TFUNCTION); + if (lua_gettop(L) > 3) { + maxmatch = (size_t)luaL_checknumber(L, 4); + limit = 1; + } + while (!limit || nmatch < maxmatch) { +#ifdef REG_BASIC + match[0].rm_so = 0; + match[0].rm_eo = len; + res = regexec(pr, text, ncapt + 1, match, REG_STARTEND); +#else + res = regexec(pr, text, ncapt + 1, match, 0); +#endif + if (res == 0) { + lua_pushvalue(L, 3); + lua_pushlstring(L, text + match[0].rm_so, match[0].rm_eo - match[0].rm_so); + rex_push_matches(L, text, match, ncapt); + lua_call(L, 2, 0); + text += match[0].rm_eo; +#ifdef REG_BASIC + len -= match[0].rm_eo; +#endif + nmatch++; + } else + break; + } + lua_pushnumber(L, nmatch); + return 1; +} + +static int rex_gc (lua_State *L) +{ + regex_t *r = (regex_t *)luaL_checkudata(L, 1, "regex_t"); + if (r) + regfree(r); + return 0; +} + +static const luaL_reg rexmeta[] = { + {"match", rex_match}, + {"gmatch", rex_gmatch}, + {"__gc", rex_gc}, + {NULL, NULL} +}; + +#endif /* WITH_POSIX */ + + +/* PCRE methods */ + +#ifdef WITH_PCRE + +#include + +static int pcre_comp(lua_State *L) +{ + size_t l; + const char *pattern; + const char *error; + int erroffset; + pcre **ppr = (pcre **)lua_newuserdata(L, sizeof(pcre **)); + pcre *pr; + pattern = luaL_checklstring(L, 1, &l); + pr = pcre_compile(pattern, 0, &error, &erroffset, NULL); + if (!pr) { + lua_pushstring(L, error); + lua_error(L); + } + *ppr = pr; + luaL_getmetatable(L, "pcre"); + lua_setmetatable(L, -2); + return 1; +} + +static void pcre_getargs(lua_State *L, int *len, int *ncapt, const char **text, + pcre ***ppr, int **match) +{ + luaL_checkany(L, 1); + *ppr = (pcre **)lua_touserdata(L, 1); + *text = luaL_checklstring(L, 2, len); + pcre_fullinfo(**ppr, NULL, PCRE_INFO_CAPTURECOUNT, ncapt); + luaL_checkstack(L, *ncapt + 2, "too many captures"); + /* need (2 ints per capture, plus one for substring match) * 3/2 */ + *match = malloc((*ncapt + 1) * 3 * sizeof(int)); +} + +static void pcre_push_matches(lua_State *L, const char *text, int *match, + int ncapt) +{ + int i; + lua_newtable(L); + for (i = 1; i <= ncapt; i++) { + if (match[i * 2] >= 0) { + lua_pushlstring(L, text + match[i * 2], + match[i * 2 + 1] - match[i * 2]); + lua_rawseti(L, -2, i); + } + } +} + +static int pcre_match(lua_State *L) +{ + int res; + const char *text; + pcre **ppr; + int *match; + int ncapt; + int len; + pcre_getargs(L, &len, &ncapt, &text, &ppr, &match); + res = pcre_exec(*ppr, NULL, text, len, 0, 0, match, (ncapt + 1) * 3); + if (res >= 0) { + lua_pushnumber(L, match[0] + 1); + lua_pushnumber(L, match[1]); + pcre_push_matches(L, text, match, ncapt); + lua_pushstring(L, "n"); + lua_pushnumber(L, ncapt); + lua_rawset(L, -3); + return 3; + } else + return 0; +} + +static int pcre_gmatch(lua_State *L) +{ + int res; + const char *text; + int limit = 0; + int ncapt, nmatch = 0, maxmatch; + pcre **ppr; + int *match; + int len; + pcre_getargs(L, &len, &ncapt, &text, &ppr, &match); + luaL_checktype(L, 3, LUA_TFUNCTION); + if (lua_gettop(L) > 3) { + maxmatch = (int)luaL_checknumber(L, 4); + limit = 1; + } + while (!limit || nmatch < maxmatch) { + res = pcre_exec(*ppr, NULL, text, len, 0, 0, match, (ncapt + 1) * 3); + if (res == 0) { + lua_pushvalue(L, 3); + lua_pushlstring(L, text + match[0], match[1] - match[0]); + pcre_push_matches(L, text, match, ncapt); + lua_call(L, 2, 0); + text += match[1]; + len -= match[1]; + nmatch++; + } else + break; + } + lua_pushnumber(L, nmatch); + return 1; +} + +static int pcre_gc (lua_State *L) +{ + pcre **ppr = (pcre **)luaL_checkudata(L, 1, "pcre"); + if (ppr) + pcre_free(*ppr); + return 0; +} + +static const luaL_reg pcremeta[] = { + {"match", pcre_match}, + {"gmatch", pcre_gmatch}, + {"__gc", pcre_gc}, + {NULL, NULL} +}; + +#endif /* defined(WITH_PCRE) */ + + +/* Open the library */ + +static const luaL_reg rexlib[] = { +#ifdef WITH_POSIX + {"newPOSIX", rex_comp}, +#endif +#ifdef WITH_PCRE + {"newPCRE", pcre_comp}, +#endif + {NULL, NULL} +}; + +static void createmeta(lua_State *L, const char *name) +{ + luaL_newmetatable(L, name); /* create new metatable */ + lua_pushliteral(L, "__index"); + lua_pushvalue(L, -2); /* push metatable */ + lua_rawset(L, -3); /* metatable.__index = metatable */ +} + +LUALIB_API int luaopen_rex(lua_State *L) +{ +#ifdef WITH_POSIX + createmeta(L, "regex_t"); + luaL_openlib(L, NULL, rexmeta, 0); + lua_pop(L, 1); +#endif +#ifdef WITH_PCRE + createmeta(L, "pcre"); + luaL_openlib(L, NULL, pcremeta, 0); + lua_pop(L, 1); +#endif + luaL_openlib(L, "rex", rexlib, 0); + return 1; +} diff --git a/luaext/lrexlib.h b/luaext/lrexlib.h new file mode 100644 index 0000000..663c635 --- /dev/null +++ b/luaext/lrexlib.h @@ -0,0 +1,6 @@ +#ifndef LREXLIB_H +#define LREXLIB_H + +int luaopen_rex(lua_State *L); + +#endif diff --git a/luaext/modemuncher.c b/luaext/modemuncher.c new file mode 100644 index 0000000..ed86d9f --- /dev/null +++ b/luaext/modemuncher.c @@ -0,0 +1,271 @@ +/* + Mode Muncher -- modemuncher.c + 961110 Claudio Terra + + munch vb + [ME monchen, perh. influenced by MF mangier to eat --more at MANGER] + :to chew with a crunching sound: eat with relish + :to chew food with a crunching sound: eat food with relish + --munch-er n + + The NeXT Digital Edition of Webster's Ninth New Collegiate Dictionary + and Webster's Collegiate Thesaurus +*/ + +/* struct for rwx <-> POSIX constant lookup tables */ +struct modeLookup +{ + char rwx; + mode_t bits; +}; + +typedef struct modeLookup modeLookup; + +static modeLookup modesel[] = +{ + /* RWX char Posix Constant */ + {'r', S_IRUSR}, + {'w', S_IWUSR}, + {'x', S_IXUSR}, + + {'r', S_IRGRP}, + {'w', S_IWGRP}, + {'x', S_IXGRP}, + + {'r', S_IROTH}, + {'w', S_IWOTH}, + {'x', S_IXOTH}, + {'\0', (mode_t)-1} /* do not delete this line */ +}; + + + +static int rwxrwxrwx(mode_t *mode, const char *p) +{ + int count; + mode_t tmp_mode = *mode; + + tmp_mode &= ~(S_ISUID | S_ISGID); /* turn off suid and sgid flags */ + for (count=0; count<9; count ++) + { + if (*p == modesel[count].rwx) tmp_mode |= modesel[count].bits; /* set a bit */ + else if (*p == '-') tmp_mode &= ~modesel[count].bits; /* clear a bit */ + else if (*p=='s') switch(count) + { + case 2: /* turn on suid flag */ + tmp_mode |= S_ISUID | S_IXUSR; + break; + + case 5: /* turn on sgid flag */ + tmp_mode |= S_ISGID | S_IXGRP; + break; + + default: + return -4; /* failed! -- bad rwxrwxrwx mode change */ + break; + } + p++; + } + *mode = tmp_mode; + return 0; +} + +static void modechopper(mode_t mode, char *p) +{ + /* requires char p[10] */ + int count; + char *pp; + + pp=p; + + for (count=0; count<9; count ++) + { + if (mode & modesel[count].bits) *p = modesel[count].rwx; + else *p='-'; + + p++; + } + *p=0; /* to finish the string */ + + /* dealing with suid and sgid flags */ + if (mode & S_ISUID) pp[2] = (mode & S_IXUSR) ? 's' : 'S'; + if (mode & S_ISGID) pp[5] = (mode & S_IXGRP) ? 's' : 'S'; + +} + +static int mode_munch(mode_t *mode, const char* p) +{ + + char op=0; + mode_t affected_bits, ch_mode; + int doneFlag = 0; +#ifdef DEBUG +char tmp[10]; +#endif + +#ifdef DEBUG +modechopper(*mode, tmp); +printf("modemuncher: got base mode = %s\n", tmp); +#endif + + while (!doneFlag) + { + /* step 0 -- clear temporary variables */ + affected_bits=0; + ch_mode=0; + + /* step 1 -- who's affected? */ + +#ifdef DEBUG +printf("modemuncher step 1\n"); +#endif + + /* mode string given in rwxrwxrwx format */ + if (*p== 'r' || *p == '-') return rwxrwxrwx(mode, p); + + /* mode string given in 0644 format */ + if (*p >= '0' && *p <= '7') { + char *e; + mode_t tmp_mode = strtol(p, &e, 8); + if (*p == 0 || *e != 0) + return -5; + *mode = tmp_mode; + return 0; + } + + /* mode string given in ugoa+-=rwx format */ + for ( ; ; p++) + switch (*p) + { + case 'u': + affected_bits |= 04700; + break; + + case 'g': + affected_bits |= 02070; + break; + + case 'o': + affected_bits |= 01007; + break; + + case 'a': + affected_bits |= 07777; + break; + + /* ignore spaces */ + case ' ': + break; + + + default: + goto no_more_affected; + } + + no_more_affected: + /* If none specified, affect all bits. */ + if (affected_bits == 0) affected_bits = 07777; + + /* step 2 -- how is it changed? */ + +#ifdef DEBUG +printf("modemuncher step 2 (*p='%c')\n", *p); +#endif + + switch (*p) + { + case '+': + case '-': + case '=': + op = *p; + break; + + /* ignore spaces */ + case ' ': + break; + + default: + return -1; /* failed! -- bad operator */ + } + + + /* step 3 -- what are the changes? */ + +#ifdef DEBUG +printf("modemuncher step 3\n"); +#endif + + for (p++ ; *p!=0 ; p++) + switch (*p) + { + case 'r': + ch_mode |= 00444; + break; + + case 'w': + ch_mode |= 00222; + break; + + case 'x': + ch_mode |= 00111; + break; + + case 's': + /* Set the setuid/gid bits if `u' or `g' is selected. */ + ch_mode |= 06000; + break; + + /* ignore spaces */ + case ' ': + break; + + default: + goto specs_done; + } + + specs_done: + /* step 4 -- apply the changes */ + +#ifdef DEBUG + printf("modemuncher step 4\n"); +#endif + if (*p != ',') doneFlag = 1; + if (*p != 0 && *p != ' ' && *p != ',') + { + +#ifdef DEBUG +printf("modemuncher: comma error!\n"); +printf("modemuncher: doneflag = %u\n", doneFlag); +#endif + return -2; /* failed! -- bad mode change */ + + } + p++; + /*if (!ch_mode) return -2;*/ /* failed! -- bad mode change */ + if (ch_mode) switch (op) + { + case '+': + *mode |= ch_mode & affected_bits; + break; + + case '-': + *mode &= ~(ch_mode & affected_bits); + break; + + case '=': + *mode = ch_mode & affected_bits; + break; + + default: + return -3; /* failed! -- unknown error */ + } + } +#ifdef DEBUG +modechopper(*mode, tmp); +printf("modemuncher: returning mode = %s\n", tmp); +#endif + + return 0; /* successful call */ +} + + diff --git a/luaext/userconfig.c b/luaext/userconfig.c new file mode 100644 index 0000000..458768a --- /dev/null +++ b/luaext/userconfig.c @@ -0,0 +1,57 @@ + +#include "config.h" + +#include "lposix.h" +#include "lrexlib.h" + +#define LUA_EXTRALIBS \ + {"posix", luaopen_posix}, \ + {"rex", luaopen_rex}, \ + {"luapath", luapath}, + +#if 0 + +#define lua_readline myreadline +#define lua_saveline mysaveline + +#include +#include +#include + +static int myreadline (lua_State *L, const char *prompt) { + char *s=readline(prompt); + if (s==NULL) + return 0; + else { + lua_pushstring(L,s); + lua_pushliteral(L,"\n"); + lua_concat(L,2); + free(s); + return 1; + } +} + +static void mysaveline (lua_State *L, const char *s) { + const char *p; + for (p=s; isspace(*p); p++); + if (*p!=0) { + size_t n=strlen(s)-1; + if (s[n]!='\n') + add_history(s); + else { + lua_pushlstring(L,s,n); + s=lua_tostring(L,-1); + add_history(s); + lua_remove(L,-1); + } + } +} +#endif + +static int luapath(lua_State *L) +{ + lua_pushstring(L, "LUA_PATH"); + lua_pushfstring(L, "%s/%s", rpmConfigDir(), "/lua/?.lua;?.lua"); + lua_rawset(L, LUA_GLOBALSINDEX); + return 0; +} diff --git a/m4/gettext.m4 b/m4/gettext.m4 new file mode 100644 index 0000000..91c345e --- /dev/null +++ b/m4/gettext.m4 @@ -0,0 +1,419 @@ +# gettext.m4 serial 59 (gettext-0.16.1) +dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2006. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], + ifelse([$1], [external], + ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), + [yes])) + define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + gt_NEEDS_INIT + AM_GNU_GETTEXT_NEED([$2]) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX + + dnl Set USE_NLS. + AC_REQUIRE([AM_NLS]) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl Add a version number to the cache macros. + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], + [AC_TRY_LINK([#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings;], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], + [eval "$gt_func_gnugettext_libc=yes"], + [eval "$gt_func_gnugettext_libc=no"])]) + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + [$gt_func_gnugettext_libintl], + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_TRY_LINK([#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [eval "$gt_func_gnugettext_libintl=yes"], + [eval "$gt_func_gnugettext_libintl=no"]) + dnl Now see whether libintl exists and depends on libiconv. + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + AC_MSG_RESULT([$gt_source]) + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE(HAVE_DCGETTEXT, 1, + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATOBJEXT) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + AC_SUBST(INTLOBJS) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST(INTLLIBS) + + dnl Make all documented variables known to autoconf. + AC_SUBST(LIBINTL) + AC_SUBST(LTLIBINTL) + AC_SUBST(POSUB) +]) + + +dnl Checks for special options needed on MacOS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in MacOS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + gt_cv_func_CFPreferencesCopyAppValue, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#include ], + [CFPreferencesCopyAppValue(NULL, NULL)], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, + [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in MacOS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], + [gt_cv_func_CFLocaleCopyCurrent=yes], + [gt_cv_func_CFLocaleCopyCurrent=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, + [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) +]) + + +dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. +m4_define([gt_NEEDS_INIT], +[ + m4_divert_text([DEFAULTS], [gt_needs=]) + m4_define([gt_NEEDS_INIT], []) +]) + + +dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) +AC_DEFUN([AM_GNU_GETTEXT_NEED], +[ + m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff --git a/m4/iconv.m4 b/m4/iconv.m4 new file mode 100644 index 0000000..654c415 --- /dev/null +++ b/m4/iconv.m4 @@ -0,0 +1,101 @@ +# iconv.m4 serial AM4 (gettext-0.11.3) +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_func_iconv=yes) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_lib_iconv=yes + am_cv_func_iconv=yes) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST(LIBICONV) + AC_SUBST(LTLIBICONV) +]) + +AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL(am_cv_proto_iconv, [ + AC_TRY_COMPILE([ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([$]{ac_t:- + }[$]am_cv_proto_iconv) + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi +]) diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4 new file mode 100644 index 0000000..96c4e2c --- /dev/null +++ b/m4/lib-ld.m4 @@ -0,0 +1,110 @@ +# lib-ld.m4 serial 3 (gettext-0.13) +dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(acl_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) diff --git a/m4/lib-link.m4 b/m4/lib-link.m4 new file mode 100644 index 0000000..f95b7ba --- /dev/null +++ b/m4/lib-link.m4 @@ -0,0 +1,644 @@ +# lib-link.m4 serial 9 (gettext-0.16) +dnl Copyright (C) 2001-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ(2.50) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + undefine([Name]) + undefine([NAME]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + undefine([Name]) + undefine([NAME]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, +dnl hardcode_direct, hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib$1-prefix], +[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib + --without-lib$1-prefix don't search for lib$1 in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" \ + && { test -f "$additional_libdir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$additional_libdir/lib$name.dll.a"; }; }; then + found_dir="$additional_libdir" + if test -f "$additional_libdir/lib$name.$shlibext"; then + found_so="$additional_libdir/lib$name.$shlibext" + else + found_so="$additional_libdir/lib$name.dll.a" + fi + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" \ + && { test -f "$dir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$dir/lib$name.dll.a"; }; }; then + found_dir="$dir" + if test -f "$dir/lib$name.$shlibext"; then + found_so="$dir/lib$name.$shlibext" + else + found_so="$dir/lib$name.dll.a" + fi + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4 new file mode 100644 index 0000000..a8684e1 --- /dev/null +++ b/m4/lib-prefix.m4 @@ -0,0 +1,185 @@ +# lib-prefix.m4 serial 5 (gettext-0.15) +dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing +dnl the basename of the libdir, either "lib" or "lib64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. The current + dnl practice is that on a system supporting 32-bit and 64-bit instruction + dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit + dnl libraries go under $prefix/lib. We determine the compiler's default + dnl mode by looking at the compiler's library search path. If at least + dnl of its elements ends in /lib64 or points to a directory whose absolute + dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the + dnl default, namely "lib". + acl_libdirstem=lib + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi +]) diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 0000000..88de383 --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,7835 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 0000000..17cfd51 --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,369 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 0000000..9000a05 --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 0000000..9c7b5d4 --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3293 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4]) +m4_define([LT_PACKAGE_REVISION], [1.3293]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4' +macro_revision='1.3293' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 0000000..c573da9 --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,98 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/m4/nls.m4 b/m4/nls.m4 new file mode 100644 index 0000000..7967cc2 --- /dev/null +++ b/m4/nls.m4 @@ -0,0 +1,31 @@ +# nls.m4 serial 3 (gettext-0.15) +dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ(2.50) + +AC_DEFUN([AM_NLS], +[ + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) +]) diff --git a/m4/po.m4 b/m4/po.m4 new file mode 100644 index 0000000..00133ef --- /dev/null +++ b/m4/po.m4 @@ -0,0 +1,428 @@ +# po.m4 serial 13 (gettext-0.15) +dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ(2.50) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + AC_REQUIRE([AM_NLS])dnl + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([MSGFMT_015]) +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl Installation directories. + dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we + dnl have to define it here, so that it can be used in po/Makefile. + test -n "$localedir" || localedir='${datadir}/locale' + AC_SUBST([localedir]) + + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < "$ac_file.tmp" + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1996. + +AC_PREREQ(2.50) + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[ +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + [[\\/]]* | ?:[[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in ifelse([$5], , $PATH, [$5]); do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) diff --git a/macros.in b/macros.in new file mode 100644 index 0000000..3a5bbcd --- /dev/null +++ b/macros.in @@ -0,0 +1,1074 @@ +#/*! \page config_macros Default configuration: @RPMCONFIGDIR@/macros +# \verbatim +# +# This is a global RPM configuration file. All changes made here will +# be lost when the rpm package is upgraded. Any per-system configuration +# should be added to /etc/rpm/macros, while per-user configuration should +# be added to ~/.rpmmacros. +# +#============================================================================== +# Macro naming conventions (preliminary): +# +# Macros that begin with an underscore are "local" in the sense that +# they (if used) will not be exported in rpm headers. Some macros +# that don't start with an underscore (but look like they should) +# are compatible with macros generated by rpm-2.5.x and will be made +# more consistent in a future release. +# + +#============================================================================== +# ---- A macro that expands to nothing. +# +%nil %{!?nil} + +#============================================================================== +# ---- filesystem macros. +# +%_usr @prefix@ +%_usrsrc %{_usr}/src +%_var @localstatedir@ + +#============================================================================== +# ---- Generally useful path macros. +# +%__awk @AWK@ +%__bzip2 @__BZIP2@ +%__cat @__CAT@ +%__chgrp @__CHGRP@ +%__chmod @__CHMOD@ +%__chown @__CHOWN@ +%__cp @__CP@ +%__cpio @__CPIO@ +%__file @__FILE@ +%__gpg @__GPG@ +%__grep @__GREP@ +%__gzip @__GZIP@ +%__id @__ID@ +%__id_u %{__id} -u +%__install @__INSTALL@ +%__ln_s @LN_S@ +%__lrzip @__LRZIP@ +%__lzip @__LZIP@ +# Deprecated, use %__xz instead. +%__lzma %__xz --format=lzma +%__xz @__XZ@ +%__make @__MAKE@ +%__mkdir @__MKDIR@ +%__mkdir_p @__MKDIR_P@ +%__mv @__MV@ +%__patch @__PATCH@ +%__perl @__PERL@ +%__python @__PYTHON@ +%__restorecon @__RESTORECON@ +%__rm @__RM@ +%__rsh @__RSH@ +%__sed @__SED@ +%__semodule @__SEMODULE@ +%__ssh @__SSH@ +%__tar @__TAR@ +%__unzip @__UNZIP@ + +#============================================================================== +# ---- Build system path macros. +# +%__ar @AR@ +%__as @AS@ +%__cc @__CC@ +%__cpp @CPP@ +%__cxx @CXX@ +%__ld @__LD@ +%__nm @__NM@ +%__objcopy @__OBJCOPY@ +%__objdump @__OBJDUMP@ +%__ranlib @RANLIB@ +%__remsh %{__rsh} +%__strip @__STRIP@ + +# XXX avoid failures if tools are not installed when rpm is built. +%__libtoolize libtoolize +%__aclocal aclocal +%__autoheader autoheader +%__automake automake +%__autoconf autoconf + +#============================================================================== +# Conditional build stuff. + +# Check if symbol is defined. +# Example usage: %if %{defined with_foo} && %{undefined with_bar} ... +%defined() %{expand:%%{?%{1}:1}%%{!?%{1}:0}} +%undefined() %{expand:%%{?%{1}:0}%%{!?%{1}:1}} + +# Shorthand for %{defined with_...} +%with() %{expand:%%{?with_%{1}:1}%%{!?with_%{1}:0}} +%without() %{expand:%%{?with_%{1}:0}%%{!?with_%{1}:1}} + +# Handle conditional builds. %bcond_with is for case when feature is +# default off and needs to be activated with --with ... command line +# switch. %bcond_without is for the dual case. +# +# %bcond_with foo defines symbol with_foo if --with foo was specified on +# command line. +# %bcond_without foo defines symbol with_foo if --without foo was *not* +# specified on command line. +# +# For example (spec file): +# +# (at the beginning) +# %bcond_with extra_fonts +# %bcond_without static +# (and later) +# %if %{with extra_fonts} +# ... +# %else +# ... +# %endif +# %if ! %{with static} +# ... +# %endif +# %ifdef %{with static} +# ... +# %endif +# %{?with_static: ... } +# %{!?with_static: ... } +# %{?with_extra_fonts: ... } +# %{!?with_extra_fonts: ... } + +# +# The bottom line: never use without_foo, _with_foo nor _without_foo, only +# with_foo. This way changing default set of bconds for given spec is just +# a matter of changing single line in it and syntax is more readable. +%bcond_with() %{expand:%%{?_with_%{1}:%%global with_%{1} 1}} +%bcond_without() %{expand:%%{!?_without_%{1}:%%global with_%{1} 1}} +# +#============================================================================== +# ---- Required rpmrc macros. +# Macros that used to be initialized as a side effect of rpmrc parsing. +# These are the default values that can be overridden by other +# (e.g. per-platform, per-system, per-packager, per-package) macros. +# +# The directory where rpm's configuration and scripts live +%_rpmconfigdir %{getconfdir} + +# The directory where sources/patches will be unpacked and built. +%_builddir %{_topdir}/BUILD + +# The interpreter used for build scriptlets. +%_buildshell /bin/sh + +# The path to the bzip2 executable (legacy, use %{__bzip2} instead). +%_bzip2bin %{__bzip2} + +# The location of the rpm database file(s). +%_dbpath %{_var}/lib/rpm + +# The location of the rpm database file(s) after "rpm --rebuilddb". +%_dbpath_rebuild %{_dbpath} + +%_keyringpath %{_dbpath}/pubkeys/ + +# +# Path to script that creates debug symbols in a /usr/lib/debug +# shadow tree. +# +# A spec file can %%define _find_debuginfo_opts to pass options to +# the script. See the script for details. +# +%__debug_install_post \ + %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\ +%{nil} + +# Template for debug information sub-package. +%debug_package \ +%ifnarch noarch\ +%global __debug_package 1\ +%package debug\ +Summary: Debug information for package %{name}\ +Group: Development/Debug\ +AutoReqProv: 0\ +%description debug\ +This package provides debug information for package %{name}.\ +Debug information is useful when developing applications that use this\ +package or when debugging this package.\ +%files debug -f debugfiles.list\ +%defattr(-,root,root)\ +%endif\ +%{nil} + +%_defaultdocdir %{_datadir}/doc + +# The path to the gzip executable (legacy, use %{__gzip} instead). +%_gzipbin %{__gzip} + +# The Unix time of the latest kept changelog entry in binary packages. +# Any older entry is not packaged in binary packages. +%_changelog_trimtime 0 + +# The directory where newly built binary packages will be written. +%_rpmdir %{_topdir}/RPMS + +# A template used to generate the output binary package file name +# (legacy). +%_rpmfilename %{_build_name_fmt} + +# The directory where sources/patches from a source package will be +# installed. This is also where sources/patches are found when building. +%_sourcedir %{_topdir}/SOURCES + +# The directory where the spec file from a source package will be +# installed. +%_specdir %{_topdir}/SPECS + +# The directory where newly built source packages will be written. +%_srcrpmdir %{_topdir}/SRPMS + +# The directory where buildroots will be created. +%_buildrootdir %{_topdir}/BUILDROOT + +# Build root path, where %install installs the package during build. +%buildroot %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch} + +# Directory where temporaray files can be created. +%_tmppath %{_var}/tmp + +# Path to top of build area. +%_topdir %{getenv:HOME}/rpmbuild + +# The path to the unzip executable (legacy, use %{__unzip} instead). +%_unzipbin %{__unzip} + +#============================================================================== +# ---- Optional rpmrc macros. +# Macros that are initialized as a side effect of rpmrc and/or spec +# file parsing. +# +# The sub-directory (relative to %{_builddir}) where sources are compiled. +# This macro is set after processing %setup, either explicitly from the +# value given to -n or the default name-version. +# +#%buildsubdir + +# Configurable distribution information, same as Distribution: tag in a +# specfile. +# +#%distribution + +# Configurable distribution URL, same as DistURL: tag in a specfile. +# The URL will be used to supply reliable information to tools like +# rpmfind. +# +# Note: You should not configure with disturl (or build packages with +# the DistURL: tag) unless you are willing to supply content in a +# yet-to-be-determined format at the URL specified. +# +#%disturl + +# Configurable bug URL, same as BugURL: tag in a specfile. +# The URL will be used to supply reliable information to where +# to file bugs. +# +#%bugurl + +# Boolean (i.e. 1 == "yes", 0 == "no") that controls whether files +# marked as %doc should be installed. +#%_excludedocs + +# The port and machine name of a FTP proxy host running TIS firewall. +# +#%_ftpport +#%_ftpproxy + +# The signature to use and the location of configuration files for +# signing packages with GNU gpg. +# +#%_gpg_name +#%_gpg_path + +# The port and machine name of an HTTP proxy host. +# +#%_httpport +#%_httpproxy + +# The PATH put into the environment before running %pre/%post et al. +# +%_install_script_path /sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin + +# A colon separated list of desired locales to be installed; +# "all" means install all locale specific files. +# +%_install_langs all + +# The value of CLASSPATH in build scriptlets (iff configured). +# +#%_javaclasspath all + +# Import packaging conventions from jpackage.org (prefixed with _ +# to avoid name collisions). +# +%_javadir %{_datadir}/java +%_javadocdir %{_datadir}/javadoc + +# A colon separated list of paths where files should *not* be installed. +# Usually, these are network file system mount points. +# +#%_netsharedpath + +# (experimental) +# The type of pattern match used on rpmdb iterator selectors: +# "default" simple glob-like regex, periods will be escaped, +# splats will have period prepended, full "^...$" match +# required. Also, file path tags will use glob(7). +# "strcmp" compare strings +# "regex" regex(7) patterns using regcomp(3)/regexec(3) +# "glob" glob(7) patterns using fnmatch(3) +# +%_query_selector_match default + +# Configurable packager information, same as Packager: in a specfile. +# +#%packager + +# Compression type and level for source/binary package payloads. +# "w9.gzdio" gzip level 9 (default). +# "w9.bzdio" bzip2 level 9. +# "w7.xzdio" xz level 7, xz's default. +# "w7.lzdio" lzma-alone level 7, lzma's default +# +#%_source_payload w9.gzdio +#%_binary_payload w9.gzdio + +# Algorithm to use for generating file checksum digests on build. +# If not specified or 0, MD5 is used. +# WARNING: non-MD5 is backwards incompatible, don't enable lightly! +# The supported algorithms may depend on NSS version, as of NSS +# 3.11.99.5 the following are supported: +# 1 MD5 (default) +# 2 SHA1 +# 8 SHA256 +# 9 SHA384 +# 10 SHA512 +# +#%_source_filedigest_algorithm 1 +#%_binary_filedigest_algorithm 1 + +# Configurable vendor information, same as Vendor: in a specfile. +# +#%vendor + +# Default fuzz level for %patch in spec file. +%_default_patch_fuzz 0 + +# Default patch flags +%_default_patch_flags -s + +#============================================================================== +# ---- Build configuration macros. +# +# Script gets packaged file list on input and buildroot as first parameter. +# Returns list of unpackaged files, i.e. files in $RPM_BUILD_ROOT not packaged. +# +# Note: Disable (by commenting out) for legacy compatibility. +%__check_files %{_rpmconfigdir}/check-files %{buildroot} + +# +# Should unpackaged files in a build root terminate a build? +# +# Note: The default value should be 0 for legacy compatibility. +%_unpackaged_files_terminate_build 1 + +# +# Should missing %doc files in the build directory terminate a build? +# +# Note: The default value should be 0 for legacy compatibility. +%_missing_doc_files_terminate_build 1 + +# +# Should binaries in noarch packages terminate a build? +%_binaries_in_noarch_packages_terminate_build 1 + +# +# Program to call for each successfully built and written binary package. +# The package name is passed to the program as a command-line argument. +# +#%_build_pkgcheck %{_bindir}/rpmlint + +# +# Program to call for the whole binary package set after build. +# The package set is passed to the program via command-line arguments. +# +#%_build_pkgcheck_set %{_bindir}/rpmlint + +# +# Program to call for successfully built and written SRPM. +# The package name is passed to the program as a command-line argument. +# +#%_build_pkgcheck_srpm %{_bindir}/rpmlint + +# +# Should the build of packages fail if package checker (if defined) returns +# non-zero exit status? +# +#%_nonzero_exit_pkgcheck_terminate_build 1 + +# +# Should an ELF file processed by find-debuginfo.sh having no build ID +# terminate a build? This is left undefined to disable it and defined to +# enable. +# +#%_missing_build_ids_terminate_build 1 + +# +# Use internal dependency generator rather than external helpers? +%_use_internal_dependency_generator 1 + +# +# Filter GLIBC_PRIVATE Provides: and Requires: +%_filter_GLIBC_PRIVATE 0 + +# Desired selinux policy tree +%__policy_tree %{expand:%%global __policy_tree %{lua:\ +t="targeted"\ +f = io.open("/etc/selinux/config")\ +if f then\ + for l in f:lines() do\ + if "SELINUXTYPE=" == string.sub(l,0,12) then t=string.sub(l,13); end\ + end\ + f:close()\ +end\ +print (t)\ +}}%{__policy_tree} + +# Path to selinux file context patterns. +%__file_context_path /etc/selinux/%{__policy_tree}/contexts/files/file_contexts + +# Directories whose contents should be considered as documentation. +%__docdir_path %{_datadir}/doc:%{_datadir}/man:%{_datadir}/info:%{_datadir}/gtk-doc/html:%{?_docdir}:%{?_mandir}:%{?_infodir}:%{?_javadocdir}:/usr/doc:/usr/man:/usr/info:/usr/X11R6/man + +# +# Path to selinux file context patterns used to add +# RPMTAG_FILECONTEXTS to packages when building. +# +# Undefined, missing or %{nil} will disable. +%_build_file_context_path %{nil} + +# +# Path to selinux file context patterns used to set +# (or override package content) file contexts when installing. +# +# Undefined, missing or %{nil} will use package content (if available). +%_install_file_context_path %{__file_context_path} + +# +# Path to selinux file context patterns used to verify +# file contexts on file system. +# +# Undefined, missing or %{nil} will use package content (if available). +%_verify_file_context_path %{__file_context_path} + +# +# Path to scripts to autogenerate package dependencies, +# +# Note: Used iff _use_internal_dependency_generator is zero. +#%__find_provides %{_rpmconfigdir}/rpmdeps --provides +#%__find_requires %{_rpmconfigdir}/rpmdeps --requires +%__find_provides %{_rpmconfigdir}/find-provides +%__find_requires %{_rpmconfigdir}/find-requires +#%__find_conflicts ??? +#%__find_obsoletes ??? + +# +# Path to file attribute classifications for automatic dependency +# extraction, used when _use_internal_dependency_generator +# is used (on by default). Files can have any number of attributes +# attached to them, and dependencies are separately extracted for +# each attribute. +# +# To define a new file attribute called "myattr", add a file named +# "myattr" to this directory, defining the requires and/or provides +# finder script(s) + magic and/or path pattern regex(es). +# provides finder and +# %__myattr_requires path + args to requires finder script for +# %__myattr_provides path + args to provides finder script for +# %__myattr_magic libmagic classification match regex +# %__myattr_path path based classification match regex +# %__myattr_flags flags to control behavior (just "exeonly" for now) +# %__myattr_exclude_magic exclude by magic regex +# %__myattr_exclude_path exclude by path regex +# +%_fileattrsdir %{_rpmconfigdir}/fileattrs + +#============================================================================== +# ---- Database configuration macros. +# Macros used to configure Berkley db parameters. +# +# rpmdb macro configuration values are a colon (or white space) separated +# list of tokens, with an optional '!' negation to explicitly disable bit +# values, or a "=value" if a parameter. A per-tag value is used (e.g. +# %_dbi_config_Packages) if defined, otherwise a per-rpmdb default +# (e.g. %_dbi_config). +# +# Here's a short list of the tokens, with a guess of whether the option is +# useful: +# (nothing) currently used in rpm, known to work. +# "+++" under development, will be supported in rpm eventually. +# "???" I have no clue, you're mostly on your own. +# +# If you do find yourself inclined to fiddle, here's what I see (shrug): +# 1) Only the value of mp_size has any serious impact on overall performance, +# and you will need ~256Kb to handle a typical machine install. +# 2) Only the Packages hash, because of the size of the values (i.e. headers), +# will ever need tuning. Diddle the pagesize if you're interested, although +# I believe that you will find pagesize=512 "best". +# 3) Adding nofsync increases speed, but risks total data loss. Fiddle shared +# and/or mp_size instead. +# +# token works? Berkeley db flag or value +#================================================== +#---------------------- DBENV tunable values: +# mmapsize=16Mb DBENV->set_mp_mmapsize +# cachesize=1Mb DBENV->set_cachesize, DB->set_cachesize +#---------------------- DB->open bits: +# nommap ??? DB_NOMMAP +#----------------------- rpmdb specific configuration: +# lockdbfd (always on for Packages) Use fcntl(2) locking ? +# nofsync Disable fsync(2) call performed after db3 writes? +# + +# Misc BDB tuning options +%__dbi_other mp_mmapsize=128Mb mp_size=64Mb + +%_dbi_config %{?__dbi_other} + +# "Packages" should have shared/exclusive fcntl(2) lock using "lockdbfd". +%_dbi_config_Packages %{?_dbi_config} lockdbfd + +#============================================================================== +# ---- GPG/PGP/PGP5 signature macros. +# Macro(s) to hold the arguments passed to GPG/PGP for package +# signing and verification. +# +%__gpg_check_password_cmd %{__gpg} \ + gpg --batch --no-verbose --passphrase-fd 3 -u "%{_gpg_name}" -so - + +%__gpg_sign_cmd %{__gpg} \ + gpg --batch --no-verbose --no-armor --passphrase-fd 3 \ + %{?_gpg_digest_algo:--digest-algo %{_gpg_digest_algo}} \ + --no-secmem-warning \ + -u "%{_gpg_name}" -sbo %{__signature_filename} %{__plaintext_filename} + +# XXX rpm >= 4.1 verifies signatures internally +#%__gpg_verify_cmd %{__gpg} \ +# gpg --batch --no-verbose --verify --no-secmem-warning \ +# %{__signature_filename} %{__plaintext_filename} +# +# XXX rpm-4.1 verifies prelinked libraries using a prelink undo helper. +# Normally this macro is defined in /etc/rpm/macros.prelink, installed +# with the prelink package. If the macro is undefined, then prelinked +# shared libraries contents are MD5 digest verified (as usual), rather +# than MD5 verifying the output of the prelink undo helper. +# +# Note: The 2nd token is used as argv[0] and "library" is a +# placeholder that will be deleted and replaced with the appropriate +# library file path. +#%__prelink_undo_cmd /usr/sbin/prelink prelink -y library + +# Horowitz Key Protocol server configuration +# +%_hkp_keyserver http://pgp.mit.edu +%_hkp_keyserver_query %{_hkp_keyserver}:11371/pks/lookup?op=get&search=0x + +#============================================================================== +# ---- Transaction macros. +# Macro(s) used to parameterize transactions. +# +# The output binary package file name template used when building +# binary packages. +# +# XXX Note: escaped %% for use in headerSprintf() +%_build_name_fmt %%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm + +# The default transaction color. This value is a set of bits to +# determine file and dependency affinity for this arch. +# 0 uncolored (i.e. use only arch as install hint) +# 1 Elf32 permitted +# 2 Elf64 permitted +%_transaction_color @RPMCANONCOLOR@ + +# Verify digest/signature flags for various rpm modes: +# 0x30300 (_RPMVSF_NODIGESTS) --nohdrchk if set, don't check digest(s) +# 0xc0c00 (_RPMVSF_NOSIGNATURES) --nosignature if set, don't check signature(s) +# 0xf0000 (_RPMVSF_NOPAYLOAD) --nolegacy if set, check header+payload (if possible) +# 0x00f00 (_RPMVSF_NOHEADER) --nohdrchk if set, don't check rpmdb headers +# +# For example, the value 0xf0c00 (=0xf0000+0xc0c00) disables legacy +# digest/signature checking, disables signature checking, but attempts +# digest checking, also when retrieving headers from the database. +# +# You also can do: +# >>> hex(rpm._RPMVSF_NOSIGNATURES) +# '0xc0c00' +# or: +# >>> hex(rpm._RPMVSF_NOSIGNATURES|rpm._RPMVSF_NOPAYLOAD) +# '0xf0c00' +# at the python prompt for example, after "import rpm". +# +# The checking overhead is ~11ms per header for digests/signatures; +# each header from the database is checked only when first encountered +# for each database open. +# +# Note: the %_vsflags_erase applies to --upgrade/--freshen modes as +# well as --erase. +# +%__vsflags 0xf0000 +%_vsflags_build %{__vsflags} +%_vsflags_erase %{__vsflags} +%_vsflags_install %{__vsflags} +%_vsflags_query %{__vsflags} +%_vsflags_rebuilddb %{__vsflags} +%_vsflags_verify %{__vsflags} + +# +# Default output format string for rpm -qa +# +# XXX Note: escaped %% for use in headerFormat() +%_query_all_fmt %%{nvra} + +# +# Default path to the file used for transaction fcntl lock. +%_rpmlock_path %{_dbpath}/.rpm.lock + +#============================================================================== +# ---- per-platform macros. +# Macros that are specific to an individual platform. The values here +# will be used if the per-platform macro file does not exist.. +# +%_arch @RPMCANONARCH@ +%_build_arch @RPMCANONARCH@ +%_vendor @RPMCANONVENDOR@ +%_os @RPMCANONOS@ +%_gnu @RPMCANONGNU@ +%_target_platform %{_target_cpu}-%{_vendor}-%{_target_os}%{?_gnu} + +# +# Define a generic value for optflags. Normally overridden by per-target macros. +%optflags -O2 + +# +# ISA dependency marker, none for noarch and name-bitness for others +%_isa %{?__isa:(%{__isa})}%{!?__isa:%{nil}} + +# +# Define per-arch and per-os defaults. Normally overridden by per-target macros. +%__arch_install_post %{nil} +%__os_install_post %{___build_post} + +#============================================================================== +# ---- Scriptlet template templates. +# Global defaults used for building scriptlet templates. +# + +%___build_shell %{?_buildshell:%{_buildshell}}%{!?_buildshell:/bin/sh} +%___build_args -e +%___build_cmd %{?_sudo:%{_sudo} }%{?_remsh:%{_remsh} %{_remhost} }%{?_remsudo:%{_remsudo} }%{?_remchroot:%{_remchroot} %{_remroot} }%{___build_shell} %{___build_args} +%___build_pre \ + RPM_SOURCE_DIR=\"%{u2p:%{_sourcedir}}\"\ + RPM_BUILD_DIR=\"%{u2p:%{_builddir}}\"\ + RPM_OPT_FLAGS=\"%{optflags}\"\ + RPM_ARCH=\"%{_arch}\"\ + RPM_OS=\"%{_os}\"\ + export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS\ + RPM_DOC_DIR=\"%{_docdir}\"\ + export RPM_DOC_DIR\ + RPM_PACKAGE_NAME=\"%{name}\"\ + RPM_PACKAGE_VERSION=\"%{version}\"\ + RPM_PACKAGE_RELEASE=\"%{release}\"\ + export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\ + LANG=C\ + export LANG\ + unset CDPATH DISPLAY ||:\ + %{?buildroot:RPM_BUILD_ROOT=\"%{u2p:%{buildroot}}\"\ + export RPM_BUILD_ROOT}\ + %{?_javaclasspath:CLASSPATH=\"%{_javaclasspath}\"\ + export CLASSPATH}\ + \ + %{verbose:set -x}%{!verbose:exec > /dev/null}\ + umask 022\ + cd \"%{u2p:%{_builddir}}\"\ + + +#%___build_body %{nil} +%___build_post exit 0 + +%___build_template #!%{___build_shell}\ +%{___build_pre}\ +%{nil} + +#%{___build_body}\ +#%{___build_post}\ +#%{nil} + +#============================================================================== +# ---- Scriptlet templates. +# Macro(s) that expand to a command and script that is executed. +# CAVEAT: All macro expansions must fit in a BUFSIZ (8192 byte) buffer. +# +%__spec_prep_shell %{___build_shell} +%__spec_prep_args %{___build_args} +%__spec_prep_cmd %{___build_cmd} +%__spec_prep_pre %{___build_pre} +%__spec_prep_body %{___build_body} +%__spec_prep_post %{___build_post} +%__spec_prep_template #!%{__spec_prep_shell}\ +%{__spec_prep_pre}\ +%{nil} + +#%{__spec_prep_body}\ +#%{__spec_prep_post}\ +#%{nil} + +%__spec_build_shell %{___build_shell} +%__spec_build_args %{___build_args} +%__spec_build_cmd %{___build_cmd} +%__spec_build_pre %{___build_pre} +%__spec_build_body %{___build_body} +%__spec_build_post %{___build_post} +%__spec_build_template #!%{__spec_build_shell}\ +%{__spec_build_pre}\ +%{nil} + +#%{__spec_build_body}\ +#%{__spec_build_post}\ +#%{nil} + +%__spec_install_shell %{___build_shell} +%__spec_install_args %{___build_args} +%__spec_install_cmd %{___build_cmd} +%__spec_install_pre %{___build_pre} +%__spec_install_body %{___build_body} +%__spec_install_post\ +%{?__debug_package:%{__debug_install_post}}\ +%{__arch_install_post}\ +%{__os_install_post}\ +%{nil} +%__spec_install_template #!%{__spec_install_shell}\ +%{__spec_install_pre}\ +%{nil} + +#%{__spec_install_body}\ +#%{__spec_install_post}\ +#%{nil} + +%__spec_check_shell %{___build_shell} +%__spec_check_args %{___build_args} +%__spec_check_cmd %{___build_cmd} +%__spec_check_pre %{___build_pre} +%__spec_check_body %{___build_body} +%__spec_check_post %{___build_post} +%__spec_check_template #!%{__spec_check_shell}\ +%{__spec_check_pre}\ +%{nil} + +#%{__spec_check_body}\ +#%{__spec_check_post}\ +#%{nil} + +#%__spec_autodep_shell %{___build_shell} +#%__spec_autodep_args %{___build_args} +#%__spec_autodep_cmd %{___build_cmd} +#%__spec_autodep_pre %{___build_pre} +#%__spec_autodep_body %{___build_body} +#%__spec_autodep_post %{___build_post} +#%__spec_autodep_template #!%{__spec_autodep_shell}\ +#%{__spec_autodep_pre}\ +#%{nil} + +#%{__spec_autodep_body}\ +#%{__spec_autodep_post}\ +#%{nil} + +%__spec_clean_shell %{___build_shell} +%__spec_clean_args %{___build_args} +%__spec_clean_cmd %{___build_cmd} +%__spec_clean_pre %{___build_pre} +%__spec_clean_body %{___build_body} +%__spec_clean_post %{___build_post} +%__spec_clean_template #!%{__spec_clean_shell}\ +%{__spec_clean_pre}\ +%{nil} + +#%{__spec_clean_body}\ +#%{__spec_clean_post}\ +#%{nil} + +%__spec_rmbuild_shell %{___build_shell} +%__spec_rmbuild_args %{___build_args} +%__spec_rmbuild_cmd %{___build_cmd} +%__spec_rmbuild_pre %{___build_pre} +%__spec_rmbuild_body %{___build_body} +%__spec_rmbuild_post %{___build_post} +%__spec_rmbuild_template #!%{__spec_rmbuild_shell}\ +%{__spec_rmbuild_pre}\ +%{nil} + +#%{__spec_rmbuild_body}\ +#%{__spec_rmbuild_post}\ +#%{nil} + +# XXX We don't expand pre/post install scriptlets (yet). +#%__spec_pre_pre %{nil} +#%__spec_pre_post %{nil} +#%__spec_post_pre %{nil} +#%__spec_post_post %{nil} +#%__spec_preun_pre %{nil} +#%__spec_preun_post %{nil} +#%__spec_postun_pre %{nil} +#%__spec_postun_post %{nil} +#%__spec_triggerpostun_pre %{nil} +#%__spec_triggerpostun_post %{nil} +#%__spec_triggerun_pre %{nil} +#%__spec_triggerun_post %{nil} +#%__spec_triggerin_pre %{nil} +#%__spec_triggerin_post %{nil} + +#============================================================================== +# ---- configure macros. +# Macro(s) slavishly copied from autoconf's config.status. +# +%_prefix @prefix@ +%_exec_prefix %{_prefix} +%_bindir %{_exec_prefix}/bin +%_sbindir %{_exec_prefix}/sbin +%_libexecdir %{_exec_prefix}/libexec +%_datadir %{_prefix}/share +%_sysconfdir /etc +%_sharedstatedir %{_prefix}/com +%_localstatedir %{_prefix}/var +%_lib lib +%_libdir %{_exec_prefix}/%{_lib} +%_includedir %{_prefix}/include +%_infodir %{_datadir}/info +%_mandir %{_datadir}/man + +#============================================================================== +# ---- config.guess platform macros. +# Macro(s) similar to the tokens used by configure. +# +%_build %{_host} +%_build_alias %{_host_alias} +%_build_cpu %{_host_cpu} +%_build_vendor %{_host_vendor} +%_build_os %{_host_os} +%_host @host@ +%_host_alias @host_alias@%{nil} +%_host_cpu @host_cpu@ +%_host_vendor @host_vendor@ +%_host_os @host_os@ +%_target %{_host} +%_target_alias %{_host_alias} +%_target_cpu %{_host_cpu} +%_target_vendor %{_host_vendor} +%_target_os %{_host_os} + +#============================================================================== +# ---- specfile macros. +# Macro(s) here can be used reliably for reproducible builds. +# (Note: Above is the goal, below are the macros under development) +# +# The configure macro runs autoconf configure script with platform specific +# directory structure (--prefix, --libdir etc) and compiler flags +# such as CFLAGS. +# +# The configure macro should be invoked as %configure (rather than %{configure}) +# because the rest of the arguments will be expanded using %*. +# +%_configure ./configure +%configure \ + CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ + CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ + FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; \ + %{_configure} --host=%{_host} --build=%{_build} \\\ + --program-prefix=%{?_program_prefix} \\\ + --prefix=%{_prefix} \\\ + --exec-prefix=%{_exec_prefix} \\\ + --bindir=%{_bindir} \\\ + --sbindir=%{_sbindir} \\\ + --sysconfdir=%{_sysconfdir} \\\ + --datadir=%{_datadir} \\\ + --includedir=%{_includedir} \\\ + --libdir=%{_libdir} \\\ + --libexecdir=%{_libexecdir} \\\ + --localstatedir=%{_localstatedir} \\\ + --sharedstatedir=%{_sharedstatedir} \\\ + --mandir=%{_mandir} \\\ + --infodir=%{_infodir} + +#------------------------------------------------------------------------------ +# The make install analogue of %configure for modern autotools: +%make_install %{__make} install DESTDIR=%{?buildroot} + +#------------------------------------------------------------------------------ +# Former make install analogue, kept for compatibility and for old/broken +# packages that don't support DESTDIR properly. +%makeinstall \ + %{__make} \\\ + prefix=%{?buildroot:%{buildroot}}%{_prefix} \\\ + exec_prefix=%{?buildroot:%{buildroot}}%{_exec_prefix} \\\ + bindir=%{?buildroot:%{buildroot}}%{_bindir} \\\ + sbindir=%{?buildroot:%{buildroot}}%{_sbindir} \\\ + sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir} \\\ + datadir=%{?buildroot:%{buildroot}}%{_datadir} \\\ + includedir=%{?buildroot:%{buildroot}}%{_includedir} \\\ + libdir=%{?buildroot:%{buildroot}}%{_libdir} \\\ + libexecdir=%{?buildroot:%{buildroot}}%{_libexecdir} \\\ + localstatedir=%{?buildroot:%{buildroot}}%{_localstatedir} \\\ + sharedstatedir=%{?buildroot:%{buildroot}}%{_sharedstatedir} \\\ + mandir=%{?buildroot:%{buildroot}}%{_mandir} \\\ + infodir=%{?buildroot:%{buildroot}}%{_infodir} \\\ + install + +#------------------------------------------------------------------------------ +# The GNUconfigure macro does the following: +# update config.guess and config.sub. +# regenerate all autoconf/automake files +# optionally change to a directory (make the directory if requested). +# run configure with correct prefix, platform, and CFLAGS. +# optionally restore current directory. +# +# Based on autogen.sh from GNOME and orginal GNUconfigure +# +%GNUconfigure(MCs:) \ + CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS; \ + LDFLAGS="${LDFLAGS:-%{-s:-s}}" ; export LDFLAGS; \ + %{-C:_mydir="`pwd`"; %{-M: %{__mkdir} -p %{-C*};} cd %{-C*}} \ + dirs="`find ${_mydir} -name configure.in -print`"; export dirs; \ + for coin in `echo ${dirs}` \ +do \ + dr=`dirname ${coin}`; \ +if test -f ${dr}/NO-AUTO-GEN; then \ + : \ +else \ + macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < ${coin}`; \ + ( cd ${dr}; \ + aclocalinclude="${ACLOCAL_FLAGS}"; \ + for k in ${macrodirs}; do \ + if test -d ${k}; then \ + aclocalinclude="${aclocalinclude} -I ${k}"; \ + ##else \ + ## echo "**Warning**: No such directory \`${k}'. Ignored." \ + fi \ + done \ + if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then \ + if grep "sed.*POTFILES" configure.in >/dev/null; then \ + : do nothing -- we still have an old unmodified configure.in \ + else \ + test -r ${dr}/aclocal.m4 || touch ${dr}/aclocal.m4; \ + echo "no" | gettextize --force --copy; \ + test -r ${dr}/aclocal.m4 && %{__chmod} u+w ${dr}/aclocal.m4; \ + fi \ + fi \ + if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then \ + %{__libtoolize} --force --copy; \ + fi \ + aclocal ${aclocalinclude}; \ + if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then \ + %{__autoheader}; \ + fi \ + echo "Running automake --gnu ${am_opt} ..."; \ + %{__automake} --add-missing --gnu ${am_opt}; \ + %{__autoconf}; \ + ); \ + fi \ +done \ + %{-C:${_mydir}}%{!-C:.}/configure --prefix=%{_prefix} --exec-prefix=%{_exec_prefix} --bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} --datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} --libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} --sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} --infodir=%{_infodir} %* ; \ + %{-C:cd ${_mydir}; unset _mydir} + +%patches %{lua: for i, p in ipairs(patches) do print(p.." ") end} +%sources %{lua: for i, s in ipairs(sources) do print(s.." ") end} + +#------------------------------------------------------------------------------ +# Useful perl macros (from Artur Frysiak ) +# +# For example, these can be used as (from ImageMagick.spec from PLD site) +# [...] +# BuildPrereq: perl +# [...] +# %package perl +# Summary: libraries and modules for access to ImageMagick from perl +# Group: Development/Languages/Perl +# Requires: %{name} = %{version} +# %requires_eq perl +# [...] +# %install +# rm -fr $RPM_BUILD_ROOT +# install -d $RPM_BUILD_ROOT/%{perl_sitearch} +# [...] +# %files perl +# %defattr(644,root,root,755) +# %{perl_sitearch}/Image +# %dir %{perl_sitearch}/auto/Image +# +%requires_eq() %(LC_ALL="C" echo '%*' | xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not") +%perl_sitearch %(eval "`%{__perl} -V:installsitearch`"; echo $installsitearch) +%perl_sitelib %(eval "`%{__perl} -V:installsitelib`"; echo $installsitelib) +%perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch) +%perl_vendorlib %(eval "`%{__perl} -V:installvendorlib`"; echo $installvendorlib) +%perl_archlib %(eval "`%{__perl} -V:installarchlib`"; echo $installarchlib) +%perl_privlib %(eval "`%{__perl} -V:installprivlib`"; echo $installprivlib) + +#------------------------------------------------------------------------------ +# Useful python macros for determining python version and paths +# +%python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib())") +%python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1))") +%python_version %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])") + +#------------------------------------------------------------------------------ +# arch macro for all Intel i?86 compatibile processors +# (Note: This macro (and it's analogues) will probably be obsoleted when +# rpm can use regular expressions against target platforms in macro +# conditionals. +# +%ix86 i386 i486 i586 i686 pentium3 pentium4 athlon geode + +#------------------------------------------------------------------------------ +# arch macro for all supported ARM processors +%arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l + +#------------------------------------------------------------------------------ +# arch macro for all supported Sparc processors +%sparc sparc sparcv8 sparcv9 sparcv9v sparc64 sparc64v + +#------------------------------------------------------------------------------ +# arch macro for all supported Alpha processors +%alpha alpha alphaev56 alphaev6 alphaev67 + +#------------------------------------------------------------------------ +# Use in %install to generate locale specific file lists. For example, +# +# %install +# ... +# %find_lang %{name} +# ... +# %files -f %{name}.lang +# +%find_lang %{_rpmconfigdir}/find-lang.sh %{buildroot} + +# Commands + opts to use for retrieving remote files +# Proxy opts can be set through --httpproxy/--httpport popt aliases, +# for any special local needs use %__urlhelper_localopts in system-wide +# or per-user macro configuration. +%__urlhelpercmd @__CURL@ +%__urlhelperopts --silent --show-error --fail --location -o +%__urlhelper_proxyopts %{?_httpproxy:--proxy %{_httpproxy}%{?_httpport::%{_httpport}}}%{!?_httpproxy:%{nil}} +%_urlhelper %{__urlhelpercmd} %{?__urlhelper_localopts} %{?__urlhelper_proxyopts} %{__urlhelperopts} + +#------------------------------------------------------------------------------ +# Collection specific macros +%__plugindir %{_libdir}/rpm-plugins +%__collection_font %{__plugindir}/exec.so /usr/bin/fc-cache +%__collection_java %{__plugindir}/exec.so /usr/bin/rebuild-gcj-db +%__collection_sepolicy %{__plugindir}/sepolicy.so +%__collection_sepolicy_flags 1 + +# \endverbatim +#*/ diff --git a/misc/Makefile.am b/misc/Makefile.am new file mode 100644 index 0000000..e06fcac --- /dev/null +++ b/misc/Makefile.am @@ -0,0 +1,14 @@ +# Makefile for misc library. + +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include +AM_CPPFLAGS += -I$(top_srcdir)/misc + +EXTRA_DIST = \ + fnmatch.c fnmatch.h \ + glob.c glob.h \ + stpcpy.c stpncpy.c + +noinst_LTLIBRARIES = libmisc.la + +libmisc_la_SOURCES = fts.c fts.h +libmisc_la_LIBADD = @LTLIBOBJS@ diff --git a/misc/Makefile.in b/misc/Makefile.in new file mode 100644 index 0000000..9cb772b --- /dev/null +++ b/misc/Makefile.in @@ -0,0 +1,597 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile for misc library. + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = misc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in fnmatch.c \ + glob.c stpcpy.c stpncpy.c +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libmisc_la_DEPENDENCIES = @LTLIBOBJS@ +am_libmisc_la_OBJECTS = fts.lo +libmisc_la_OBJECTS = $(am_libmisc_la_OBJECTS) +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libmisc_la_SOURCES) +DIST_SOURCES = $(libmisc_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ + -I$(top_builddir)/include -I$(top_srcdir)/misc +EXTRA_DIST = \ + fnmatch.c fnmatch.h \ + glob.c glob.h \ + stpcpy.c stpncpy.c + +noinst_LTLIBRARIES = libmisc.la +libmisc_la_SOURCES = fts.c fts.h +libmisc_la_LIBADD = @LTLIBOBJS@ +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign misc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign misc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libmisc.la: $(libmisc_la_OBJECTS) $(libmisc_la_DEPENDENCIES) + $(LINK) $(libmisc_la_OBJECTS) $(libmisc_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fnmatch.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/glob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/stpcpy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/stpncpy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fts.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf $(DEPDIR) ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf $(DEPDIR) ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/misc/fnmatch.c b/misc/fnmatch.c new file mode 100644 index 0000000..77fbd93 --- /dev/null +++ b/misc/fnmatch.c @@ -0,0 +1,611 @@ +/* Copyright (C) 1991-1993, 1996-1999, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +# include "system.h" +# include + +/* Find the first occurrence of C in S or the final NUL byte. */ +static inline char * +__strchrnul (const char *s, int c) +{ + const unsigned char *char_ptr; + const unsigned long int *longword_ptr; + unsigned long int longword, magic_bits, charmask; + + c = (unsigned char) c; + + /* Handle the first few characters by reading one character at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *)s; ((unsigned long int) char_ptr + & (sizeof (longword) - 1)) != 0; + ++char_ptr) + if (*char_ptr == c || *char_ptr == '\0') + return (void *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to 8-byte longwords. */ + + longword_ptr = (unsigned long int *) char_ptr; + + /* Bits 31, 24, 16, and 8 of this number are zero. Call these bits + the "holes." Note that there is a hole just to the left of + each byte, with an extra at the end: + + bits: 01111110 11111110 11111110 11111111 + bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD + + The 1-bits make sure that carries propagate to the next 0-bit. + The 0-bits provide holes for carries to fall into. */ + switch (sizeof (longword)) + { + case 4: magic_bits = 0x7efefeffL; break; + case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break; + default: + abort (); + } + + /* Set up a longword, each of whose bytes is C. */ + charmask = c | (c << 8); + charmask |= charmask << 16; + if (sizeof (longword) > 4) + /* Do the shift in two steps to avoid a warning if long has 32 bits. */ + charmask |= (charmask << 16) << 16; + if (sizeof (longword) > 8) + abort (); + + /* Instead of the traditional loop which tests each character, + we will test a longword at a time. The tricky part is testing + if *any of the four* bytes in the longword in question are zero. */ + for (;;) + { + /* We tentatively exit the loop if adding MAGIC_BITS to + LONGWORD fails to change any of the hole bits of LONGWORD. + + 1) Is this safe? Will it catch all the zero bytes? + Suppose there is a byte with all zeros. Any carry bits + propagating from its left will fall into the hole at its + least significant bit and stop. Since there will be no + carry from its most significant bit, the LSB of the + byte to the left will be unchanged, and the zero will be + detected. + + 2) Is this worthwhile? Will it ignore everything except + zero bytes? Suppose every byte of LONGWORD has a bit set + somewhere. There will be a carry into bit 8. If bit 8 + is set, this will carry into bit 16. If bit 8 is clear, + one of bits 9-15 must be set, so there will be a carry + into bit 16. Similarly, there will be a carry into bit + 24. If one of bits 24-30 is set, there will be a carry + into bit 31, so all of the hole bits will be changed. + + The one misfire occurs when bits 24-30 are clear and bit + 31 is set; in this case, the hole at bit 31 is not + changed. If we had access to the processor carry flag, + we could close this loophole by putting the fourth hole + at bit 32! + + So it ignores everything except 128's, when they're aligned + properly. + + 3) But wait! Aren't we looking for C as well as zero? + Good point. So what we do is XOR LONGWORD with a longword, + each of whose bytes is C. This turns each byte that is C + into a zero. */ + + longword = *longword_ptr++; + + /* Add MAGIC_BITS to LONGWORD. */ + if ((((longword + magic_bits) + + /* Set those bits that were unchanged by the addition. */ + ^ ~longword) + + /* Look at only the hole bits. If any of the hole bits + are unchanged, most likely one of the bytes was a + zero. */ + & ~magic_bits) != 0 || + + /* That caught zeroes. Now test for C. */ + ((((longword ^ charmask) + magic_bits) ^ ~(longword ^ charmask)) + & ~magic_bits) != 0) + { + /* Which of the bytes was C or zero? + If none of them were, it was a misfire; continue the search. */ + + const unsigned char *cp = (const unsigned char *) (longword_ptr - 1); + + if (*cp == c || *cp == '\0') + return (char *) cp; + if (*++cp == c || *cp == '\0') + return (char *) cp; + if (*++cp == c || *cp == '\0') + return (char *) cp; + if (*++cp == c || *cp == '\0') + return (char *) cp; + if (sizeof (longword) > 4) + { + if (*++cp == c || *cp == '\0') + return (char *) cp; + if (*++cp == c || *cp == '\0') + return (char *) cp; + if (*++cp == c || *cp == '\0') + return (char *) cp; + if (*++cp == c || *cp == '\0') + return (char *) cp; + } + } + } + + /* This should never happen. */ + return NULL; +} + +/* For platform which support the ISO C amendement 1 functionality we + support user defined character classes. */ +#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) +/* Solaris 2.5 has a bug: must be included before . */ +# include +# include +#endif + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#if defined _LIBC || !defined __GNU_LIBRARY__ + + +# if defined STDC_HEADERS || !defined isascii +# define ISASCII(c) 1 +# else +# define ISASCII(c) isascii(c) +# endif + +#ifdef isblank +# define ISBLANK(c) (ISASCII (c) && isblank (c)) +#else +# define ISBLANK(c) ((c) == ' ' || (c) == '\t') +#endif +#ifdef isgraph +# define ISGRAPH(c) (ISASCII (c) && isgraph (c)) +#else +# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) +#endif + +#define ISPRINT(c) (ISASCII (c) && isprint (c)) +#define ISDIGIT(c) (ISASCII (c) && isdigit (c)) +#define ISALNUM(c) (ISASCII (c) && isalnum (c)) +#define ISALPHA(c) (ISASCII (c) && isalpha (c)) +#define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) +#define ISLOWER(c) (ISASCII (c) && islower (c)) +#define ISPUNCT(c) (ISASCII (c) && ispunct (c)) +#define ISSPACE(c) (ISASCII (c) && isspace (c)) +#define ISUPPER(c) (ISASCII (c) && isupper (c)) +#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) + +# define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) + +# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) +/* The GNU C library provides support for user-defined character classes + and the functions from ISO C amendement 1. */ +# ifdef CHARCLASS_NAME_MAX +# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX +# else +/* This shouldn't happen but some implementation might still have this + problem. Use a reasonable default value. */ +# define CHAR_CLASS_MAX_LENGTH 256 +# endif + +# ifdef _LIBC +# define IS_CHAR_CLASS(string) __wctype (string) +# else +# define IS_CHAR_CLASS(string) wctype (string) +# endif +# else +# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ + +# define IS_CHAR_CLASS(string) \ + (STREQ (string, "alpha") || STREQ (string, "upper") \ + || STREQ (string, "lower") || STREQ (string, "digit") \ + || STREQ (string, "alnum") || STREQ (string, "xdigit") \ + || STREQ (string, "space") || STREQ (string, "print") \ + || STREQ (string, "punct") || STREQ (string, "graph") \ + || STREQ (string, "cntrl") || STREQ (string, "blank")) +# endif + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +# if !defined _LIBC && !defined getenv +extern char *getenv (); +# endif + +# ifndef errno +extern int errno; +# endif + +/* Match STRING against the filename pattern PATTERN, returning zero if + it matches, nonzero if not. */ +static int +#ifdef _LIBC +internal_function +#endif +internal_fnmatch (const char *pattern, const char *string, + int no_leading_period, int flags) +{ + register const char *p = pattern, *n = string; + register unsigned char c; + +/* Note that this evaluates C many times. */ +# ifdef _LIBC +# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) +# else +# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c)) +# endif + + while ((c = *p++) != '\0') + { + c = FOLD (c); + + switch (c) + { + case '?': + if (*n == '\0') + return FNM_NOMATCH; + else if (*n == '/' && (flags & FNM_FILE_NAME)) + return FNM_NOMATCH; + else if (*n == '.' && no_leading_period + && (n == string + || (n[-1] == '/' && (flags & FNM_FILE_NAME)))) + return FNM_NOMATCH; + break; + + case '\\': + if (!(flags & FNM_NOESCAPE)) + { + c = *p++; + if (c == '\0') + /* Trailing \ loses. */ + return FNM_NOMATCH; + c = FOLD (c); + } + if (FOLD ((unsigned char) *n) != c) + return FNM_NOMATCH; + break; + + case '*': + if (*n == '.' && no_leading_period + && (n == string + || (n[-1] == '/' && (flags & FNM_FILE_NAME)))) + return FNM_NOMATCH; + + for (c = *p++; c == '?' || c == '*'; c = *p++) + { + if (*n == '/' && (flags & FNM_FILE_NAME)) + /* A slash does not match a wildcard under FNM_FILE_NAME. */ + return FNM_NOMATCH; + else if (c == '?') + { + /* A ? needs to match one character. */ + if (*n == '\0') + /* There isn't another character; no match. */ + return FNM_NOMATCH; + else + /* One character of the string is consumed in matching + this ? wildcard, so *??? won't match if there are + less than three characters. */ + ++n; + } + } + + if (c == '\0') + /* The wildcard(s) is/are the last element of the pattern. + If the name is a file name and contains another slash + this does mean it cannot match. If the FNM_LEADING_DIR + flag is set and exactly one slash is following, we have + a match. */ + { + int result = (flags & FNM_FILE_NAME) == 0 ? 0 : FNM_NOMATCH; + + if (flags & FNM_FILE_NAME) + { + const char *slashp = strchr (n, '/'); + + if (flags & FNM_LEADING_DIR) + { + if (slashp != NULL + && strchr (slashp + 1, '/') == NULL) + result = 0; + } + else + { + if (slashp == NULL) + result = 0; + } + } + + return result; + } + else + { + const char *endp; + + endp = __strchrnul (n, (flags & FNM_FILE_NAME) ? '/' : '\0'); + + if (c == '[') + { + int flags2 = ((flags & FNM_FILE_NAME) + ? flags : (flags & ~FNM_PERIOD)); + + for (--p; n < endp; ++n) + if (internal_fnmatch (p, n, + (no_leading_period + && (n == string + || (n[-1] == '/' + && (flags + & FNM_FILE_NAME)))), + flags2) + == 0) + return 0; + } + else if (c == '/' && (flags & FNM_FILE_NAME)) + { + while (*n != '\0' && *n != '/') + ++n; + if (*n == '/' + && (internal_fnmatch (p, n + 1, flags & FNM_PERIOD, + flags) == 0)) + return 0; + } + else + { + int flags2 = ((flags & FNM_FILE_NAME) + ? flags : (flags & ~FNM_PERIOD)); + + if (c == '\\' && !(flags & FNM_NOESCAPE)) + c = *p; + c = FOLD (c); + for (--p; n < endp; ++n) + if (FOLD ((unsigned char) *n) == c + && (internal_fnmatch (p, n, + (no_leading_period + && (n == string + || (n[-1] == '/' + && (flags + & FNM_FILE_NAME)))), + flags2) == 0)) + return 0; + } + } + + /* If we come here no match is possible with the wildcard. */ + return FNM_NOMATCH; + + case '[': + { + /* Nonzero if the sense of the character class is inverted. */ + static int posixly_correct; + register int not; + char cold; + + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + if (*n == '\0') + return FNM_NOMATCH; + + if (*n == '.' && no_leading_period && (n == string + || (n[-1] == '/' + && (flags + & FNM_FILE_NAME)))) + return FNM_NOMATCH; + + if (*n == '/' && (flags & FNM_FILE_NAME)) + /* `/' cannot be matched. */ + return FNM_NOMATCH; + + not = (*p == '!' || (posixly_correct < 0 && *p == '^')); + if (not) + ++p; + + c = *p++; + for (;;) + { + unsigned char fn = FOLD ((unsigned char) *n); + + if (!(flags & FNM_NOESCAPE) && c == '\\') + { + if (*p == '\0') + return FNM_NOMATCH; + c = FOLD ((unsigned char) *p); + ++p; + + if (c == fn) + goto matched; + } + else if (c == '[' && *p == ':') + { + /* Leave room for the null. */ + char str[CHAR_CLASS_MAX_LENGTH + 1]; + size_t c1 = 0; +# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) + wctype_t wt; +# endif + const char *startp = p; + + for (;;) + { + if (c1 == CHAR_CLASS_MAX_LENGTH) + /* The name is too long and therefore the pattern + is ill-formed. */ + return FNM_NOMATCH; + + c = *++p; + if (c == ':' && p[1] == ']') + { + p += 2; + break; + } + if (c < 'a' || c >= 'z') + { + /* This cannot possibly be a character class name. + Match it as a normal range. */ + p = startp; + c = '['; + goto normal_bracket; + } + str[c1++] = c; + } + str[c1] = '\0'; + +# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) + wt = IS_CHAR_CLASS (str); + if (wt == 0) + /* Invalid character class name. */ + return FNM_NOMATCH; + + if (__iswctype (__btowc ((unsigned char) *n), wt)) + goto matched; +# else + if ((STREQ (str, "alnum") && ISALNUM ((unsigned char) *n)) + || (STREQ (str, "alpha") && ISALPHA ((unsigned char) *n)) + || (STREQ (str, "blank") && ISBLANK ((unsigned char) *n)) + || (STREQ (str, "cntrl") && ISCNTRL ((unsigned char) *n)) + || (STREQ (str, "digit") && ISDIGIT ((unsigned char) *n)) + || (STREQ (str, "graph") && ISGRAPH ((unsigned char) *n)) + || (STREQ (str, "lower") && ISLOWER ((unsigned char) *n)) + || (STREQ (str, "print") && ISPRINT ((unsigned char) *n)) + || (STREQ (str, "punct") && ISPUNCT ((unsigned char) *n)) + || (STREQ (str, "space") && ISSPACE ((unsigned char) *n)) + || (STREQ (str, "upper") && ISUPPER ((unsigned char) *n)) + || (STREQ (str, "xdigit") && ISXDIGIT ((unsigned char) *n))) + goto matched; +# endif + } + else if (c == '\0') + /* [ (unterminated) loses. */ + return FNM_NOMATCH; + else + { + c = FOLD (c); + normal_bracket: + if (c == fn) + goto matched; + + cold = c; + c = *p++; + + if (c == '-' && *p != ']') + { + /* It is a range. */ + char lo[2]; + char fc[2]; + unsigned char cend = *p++; + if (!(flags & FNM_NOESCAPE) && cend == '\\') + cend = *p++; + if (cend == '\0') + return FNM_NOMATCH; + + lo[0] = cold; + lo[1] = '\0'; + fc[0] = fn; + fc[1] = '\0'; + if (strcoll (lo, fc) <= 0) + { + char hi[2]; + hi[0] = FOLD (cend); + hi[1] = '\0'; + if (strcoll (fc, hi) <= 0) + goto matched; + } + + c = *p++; + } + } + + if (c == ']') + break; + } + + if (!not) + return FNM_NOMATCH; + break; + + matched: + /* Skip the rest of the [...] that already matched. */ + while (c != ']') + { + if (c == '\0') + /* [... (unterminated) loses. */ + return FNM_NOMATCH; + + c = *p++; + if (!(flags & FNM_NOESCAPE) && c == '\\') + { + if (*p == '\0') + return FNM_NOMATCH; + /* XXX 1003.2d11 is unclear if this is right. */ + ++p; + } + else if (c == '[' && *p == ':') + { + do + if (*++p == '\0') + return FNM_NOMATCH; + while (*p != ':' || p[1] == ']'); + p += 2; + c = *p; + } + } + if (not) + return FNM_NOMATCH; + } + break; + + default: + if (c != FOLD ((unsigned char) *n)) + return FNM_NOMATCH; + } + + ++n; + } + + if (*n == '\0') + return 0; + + if ((flags & FNM_LEADING_DIR) && *n == '/') + /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ + return 0; + + return FNM_NOMATCH; + +# undef FOLD +} + + +int +fnmatch (const char *pattern, const char *string, int flags) +{ + return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags); +} + +#endif /* _LIBC or not __GNU_LIBRARY__. */ diff --git a/misc/fnmatch.h b/misc/fnmatch.h new file mode 100644 index 0000000..c0fd6a9 --- /dev/null +++ b/misc/fnmatch.h @@ -0,0 +1,85 @@ +/* Copyright (C) 1991,92,93,96,97,98,99,2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _FNMATCH_H +#define _FNMATCH_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 +# if !defined __GLIBC__ || !defined __P +# undef __P +# define __P(protos) protos +# endif +#else /* Not C++ or ANSI C. */ +# undef __P +# define __P(protos) () +/* We can get away without defining `const' here only because in this file + it is used only inside the prototype for `fnmatch', which is elided in + non-ANSI C where `const' is problematical. */ +#endif /* C++ or ANSI C. */ + +#ifndef const +# if (defined __STDC__ && __STDC__) || defined __cplusplus +# define __const const +# else +# define __const +# endif +#endif + +/* We #undef these before defining them because some losing systems + (HP-UX A.08.07 for example) define these in . */ +#undef FNM_PATHNAME +#undef FNM_NOESCAPE +#undef FNM_PERIOD + +/* Bits set in the FLAGS argument to `fnmatch'. */ +#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */ +#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ +#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */ + +#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE +# define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ +# define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ +# define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ +# define FNM_EXTMATCH (1 << 5) /* Use ksh-like extended matching. */ +#endif + +/* Value returned by `fnmatch' if STRING does not match PATTERN. */ +#define FNM_NOMATCH 1 + +/* This value is returned if the implementation does not support + `fnmatch'. Since this is not the case here it will never be + returned but the conformance test suites still require the symbol + to be defined. */ +#ifdef _XOPEN_SOURCE +# define FNM_NOSYS (-1) +#endif + +/* Match NAME against the filename pattern PATTERN, + returning zero if it matches, FNM_NOMATCH if not. */ +extern int fnmatch __P ((__const char *__pattern, __const char *__name, + int __flags)); + +#ifdef __cplusplus +} +#endif + +#endif /* fnmatch.h */ diff --git a/misc/fts.c b/misc/fts.c new file mode 100644 index 0000000..9fbefe3 --- /dev/null +++ b/misc/fts.c @@ -0,0 +1,1137 @@ +/*- + * Copyright (c) 1990, 1993, 1994 + * The Regents of the University of California. 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. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; +#endif /* LIBC_SCCS and not lint */ + +#if defined(_LIBC) +#include +#include +#include +#include +#include +#include "misc/fts.h" +#include +#include +#include +#else +#if defined(hpux) +# define _INCLUDE_POSIX_SOURCE +# define __errno_location() (&errno) +# define dirfd(dirp) -1 +# define stat64 stat +# define _STAT_VER 0 +# define __fxstat64(_stat_ver, _fd, _sbp) fstat((_fd), (_sbp)) +#endif +#if defined(sun) +# define __errno_location() (&errno) +# define dirfd(dirp) -1 +# define _STAT_VER 0 +# define __fxstat64(_stat_ver, _fd, _sbp) fstat((_fd), (_sbp)) +#endif +#if defined(__APPLE__) +# define __errno_location() (__error()) +# define _STAT_VER 0 +# define __fxstat64(_stat_ver, _fd, _sbp) fstat64((_fd), (_sbp)) +#endif +#include "system.h" +#include +#include +#include +#include "misc/fts.h" +# define __set_errno(val) (*__errno_location ()) = (val) +# define __open open +# define __close close +# define __fchdir fchdir +#endif + + +/* Largest alignment size needed, minus one. + Usually long double is the worst case. */ +#ifndef ALIGNBYTES +#define ALIGNBYTES (__alignof__ (long double) - 1) +#endif +/* Align P to that size. */ +#ifndef ALIGN +#define ALIGN(p) (((unsigned long int) (p) + ALIGNBYTES) & ~ALIGNBYTES) +#endif + + +static FTSENT * fts_alloc(FTS * sp, const char * name, int namelen); +static FTSENT * fts_build(FTS * sp, int type); +static void fts_lfree(FTSENT * head); +static void fts_load(FTS * sp, FTSENT * p); +static size_t fts_maxarglen(char * const * argv); +static void fts_padjust(FTS * sp, FTSENT * head); +static int fts_palloc(FTS * sp, size_t more); +static FTSENT * fts_sort(FTS * sp, FTSENT * head, int nitems); +static uint16_t fts_stat(FTS * sp, FTSENT * p, int follow); +static int fts_safe_changedir(FTS * sp, FTSENT * p, int fd, + const char * path); + +#ifndef MAX +#define MAX(a, b) ({ __typeof__ (a) _a = (a); \ + __typeof__ (b) _b = (b); \ + _a > _b ? _a : _b; }) +#endif + +#define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2]))) + +#define CLR(opt) (sp->fts_options &= ~(opt)) +#define ISSET(opt) (sp->fts_options & (opt)) +#define SET(opt) (sp->fts_options |= (opt)) + +#define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && __fchdir(fd)) + +/* fts_build flags */ +#define BCHILD 1 /* fts_children */ +#define BNAMES 2 /* fts_children, names only */ +#define BREAD 3 /* fts_read */ + +FTS * +Fts_open(char * const * argv, int options, + int (*compar) (const FTSENT **, const FTSENT **)) +{ + register FTS *sp; + register FTSENT *p, *root; + register int nitems; + FTSENT *parent, *tmp = NULL; + int len; + + /* Options check. */ + if (options & ~FTS_OPTIONMASK) { + __set_errno (EINVAL); + return (NULL); + } + + /* Allocate/initialize the stream */ + if ((sp = malloc(sizeof(*sp))) == NULL) + return (NULL); + memset(sp, 0, sizeof(*sp)); + sp->fts_compar = (int (*) (const void *, const void *)) compar; + sp->fts_opendir = opendir; + sp->fts_readdir = readdir; + sp->fts_closedir = closedir; + sp->fts_stat = stat; + sp->fts_lstat = lstat; + sp->fts_options = options; + + /* Logical walks turn on NOCHDIR; symbolic links are too hard. */ + if (ISSET(FTS_LOGICAL)) + SET(FTS_NOCHDIR); + + /* + * Start out with 1K of path space, and enough, in any case, + * to hold the user's paths. + */ +#ifndef MAXPATHLEN +#define MAXPATHLEN 1024 +#endif + if (fts_palloc(sp, MAX(fts_maxarglen(argv), MAXPATHLEN))) + goto mem1; + + /* Allocate/initialize root's parent. */ + if ((parent = fts_alloc(sp, "", 0)) == NULL) + goto mem2; + parent->fts_level = FTS_ROOTPARENTLEVEL; + + /* Allocate/initialize root(s). */ + for (root = NULL, nitems = 0; *argv != NULL; ++argv, ++nitems) { + /* Don't allow zero-length paths. */ + if ((len = strlen(*argv)) == 0) { + __set_errno (ENOENT); + goto mem3; + } + + p = fts_alloc(sp, *argv, len); + if (p == NULL) + goto mem3; + p->fts_level = FTS_ROOTLEVEL; + p->fts_parent = parent; + p->fts_accpath = p->fts_name; + p->fts_info = fts_stat(sp, p, ISSET(FTS_COMFOLLOW)); + + /* Command-line "." and ".." are real directories. */ + if (p->fts_info == FTS_DOT) + p->fts_info = FTS_D; + + /* + * If comparison routine supplied, traverse in sorted + * order; otherwise traverse in the order specified. + */ + if (compar) { + p->fts_link = root; + root = p; + } else { + p->fts_link = NULL; + if (root == NULL) + tmp = root = p; + else { + if (tmp != NULL) /* XXX can't happen */ + tmp->fts_link = p; + tmp = p; + } + } + } + if (compar && nitems > 1) + root = fts_sort(sp, root, nitems); + + /* + * Allocate a dummy pointer and make fts_read think that we've just + * finished the node before the root(s); set p->fts_info to FTS_INIT + * so that everything about the "current" node is ignored. + */ + if ((sp->fts_cur = fts_alloc(sp, "", 0)) == NULL) + goto mem3; + sp->fts_cur->fts_link = root; + sp->fts_cur->fts_info = FTS_INIT; + + /* + * If using chdir(2), grab a file descriptor pointing to dot to ensure + * that we can get back here; this could be avoided for some paths, + * but almost certainly not worth the effort. Slashes, symbolic links, + * and ".." are all fairly nasty problems. Note, if we can't get the + * descriptor we run anyway, just more slowly. + */ + if (!ISSET(FTS_NOCHDIR) + && (sp->fts_rfd = __open(".", O_RDONLY, 0)) < 0) + SET(FTS_NOCHDIR); + + return (sp); + +mem3: fts_lfree(root); + free(parent); +mem2: free(sp->fts_path); +mem1: free(sp); + return (NULL); +} + +static void +fts_load(FTS * sp, FTSENT * p) +{ + register int len; + register char *cp; + + /* + * Load the stream structure for the next traversal. Since we don't + * actually enter the directory until after the preorder visit, set + * the fts_accpath field specially so the chdir gets done to the right + * place and the user can access the first node. From fts_open it's + * known that the path will fit. + */ + len = p->fts_pathlen = p->fts_namelen; + memmove(sp->fts_path, p->fts_name, len + 1); + if ((cp = strrchr(p->fts_name, '/')) && (cp != p->fts_name || cp[1])) { + len = strlen(++cp); + memmove(p->fts_name, cp, len + 1); + p->fts_namelen = len; + } + p->fts_accpath = p->fts_path = sp->fts_path; + sp->fts_dev = p->fts_dev; +} + +int +Fts_close(FTS * sp) +{ + register FTSENT *freep, *p; + int saved_errno; + + if (sp == NULL) + return 0; + + /* + * This still works if we haven't read anything -- the dummy structure + * points to the root list, so we step through to the end of the root + * list which has a valid parent pointer. + */ + if (sp->fts_cur) { + for (p = sp->fts_cur; p->fts_level >= FTS_ROOTLEVEL;) { + freep = p; + p = p->fts_link != NULL ? p->fts_link : p->fts_parent; + free(freep); + } + free(p); + } + + /* Free up child linked list, sort array, path buffer. */ + if (sp->fts_child) + fts_lfree(sp->fts_child); + if (sp->fts_array) + free(sp->fts_array); + free(sp->fts_path); + + /* Return to original directory, save errno if necessary. */ + if (!ISSET(FTS_NOCHDIR)) { + saved_errno = __fchdir(sp->fts_rfd) ? errno : 0; + (void)__close(sp->fts_rfd); + + /* Set errno and return. */ + if (saved_errno != 0) { + /* Free up the stream pointer. */ + free(sp); + __set_errno (saved_errno); + return (-1); + } + } + + /* Free up the stream pointer. */ + free(sp); + return (0); +} + +/* + * Special case of "/" at the end of the path so that slashes aren't + * appended which would cause paths to be written as "....//foo". + */ +#define NAPPEND(p) \ + (p->fts_path[p->fts_pathlen - 1] == '/' \ + ? p->fts_pathlen - 1 : p->fts_pathlen) + +FTSENT * +Fts_read(FTS * sp) +{ + register FTSENT *p; + register FTSENT *tmp; + register int instr; + register char *t; + int saved_errno; + + /* If finished or unrecoverable error, return NULL. */ + if (sp == NULL || sp->fts_cur == NULL || ISSET(FTS_STOP)) + return (NULL); + + /* Set current node pointer. */ + p = sp->fts_cur; + + /* Save and zero out user instructions. */ + instr = p->fts_instr; + p->fts_instr = FTS_NOINSTR; + + /* Any type of file may be re-visited; re-stat and re-turn. */ + if (instr == FTS_AGAIN) { + p->fts_info = fts_stat(sp, p, 0); + return (p); + } + + /* + * Following a symlink -- SLNONE test allows application to see + * SLNONE and recover. If indirecting through a symlink, have + * keep a pointer to current location. If unable to get that + * pointer, follow fails. + */ + if (instr == FTS_FOLLOW && + (p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE)) { + p->fts_info = fts_stat(sp, p, 1); + if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { + if ((p->fts_symfd = __open(".", O_RDONLY, 0)) < 0) { + p->fts_errno = errno; + p->fts_info = FTS_ERR; + } else + p->fts_flags |= FTS_SYMFOLLOW; + } + return (p); + } + + /* Directory in pre-order. */ + if (p->fts_info == FTS_D) { + /* If skipped or crossed mount point, do post-order visit. */ + if (instr == FTS_SKIP || + (ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev)) { + if (p->fts_flags & FTS_SYMFOLLOW) + (void)__close(p->fts_symfd); + if (sp->fts_child) { + fts_lfree(sp->fts_child); + sp->fts_child = NULL; + } + p->fts_info = FTS_DP; + return (p); + } + + /* Rebuild if only read the names and now traversing. */ + if (sp->fts_child != NULL && ISSET(FTS_NAMEONLY)) { + CLR(FTS_NAMEONLY); + fts_lfree(sp->fts_child); + sp->fts_child = NULL; + } + + /* + * Cd to the subdirectory. + * + * If have already read and now fail to chdir, whack the list + * to make the names come out right, and set the parent errno + * so the application will eventually get an error condition. + * Set the FTS_DONTCHDIR flag so that when we logically change + * directories back to the parent we don't do a chdir. + * + * If haven't read do so. If the read fails, fts_build sets + * FTS_STOP or the fts_info field of the node. + */ + if (sp->fts_child != NULL) { + if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) { + p->fts_errno = errno; + p->fts_flags |= FTS_DONTCHDIR; + for (p = sp->fts_child; p != NULL; + p = p->fts_link) + p->fts_accpath = + p->fts_parent->fts_accpath; + } + } else if ((sp->fts_child = fts_build(sp, BREAD)) == NULL) { + if (ISSET(FTS_STOP)) + return (NULL); + return (p); + } + p = sp->fts_child; + sp->fts_child = NULL; + goto name; + } + + /* Move to the next node on this level. */ +next: tmp = p; + if ((p = p->fts_link) != NULL) { + free(tmp); + + /* + * If reached the top, return to the original directory (or + * the root of the tree), and load the paths for the next root. + */ + if (p->fts_level == FTS_ROOTLEVEL) { + if (FCHDIR(sp, sp->fts_rfd)) { + SET(FTS_STOP); + return (NULL); + } + fts_load(sp, p); + return (sp->fts_cur = p); + } + + /* + * User may have called fts_set on the node. If skipped, + * ignore. If followed, get a file descriptor so we can + * get back if necessary. + */ + if (p->fts_instr == FTS_SKIP) + goto next; + if (p->fts_instr == FTS_FOLLOW) { + p->fts_info = fts_stat(sp, p, 1); + if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { + if ((p->fts_symfd = + __open(".", O_RDONLY, 0)) < 0) { + p->fts_errno = errno; + p->fts_info = FTS_ERR; + } else + p->fts_flags |= FTS_SYMFOLLOW; + } + p->fts_instr = FTS_NOINSTR; + } + +name: t = sp->fts_path + NAPPEND(p->fts_parent); + *t++ = '/'; + memmove(t, p->fts_name, p->fts_namelen + 1); + return (sp->fts_cur = p); + } + + /* Move up to the parent node. */ + p = tmp->fts_parent; + free(tmp); + + if (p->fts_level == FTS_ROOTPARENTLEVEL) { + /* + * Done; free everything up and set errno to 0 so the user + * can distinguish between error and EOF. + */ + free(p); + __set_errno (0); + return (sp->fts_cur = NULL); + } + + /* NUL terminate the pathname. */ + sp->fts_path[p->fts_pathlen] = '\0'; + + /* + * Return to the parent directory. If at a root node or came through + * a symlink, go back through the file descriptor. Otherwise, cd up + * one directory. + */ + if (p->fts_level == FTS_ROOTLEVEL) { + if (FCHDIR(sp, sp->fts_rfd)) { + SET(FTS_STOP); + return (NULL); + } + } else if (p->fts_flags & FTS_SYMFOLLOW) { + if (FCHDIR(sp, p->fts_symfd)) { + saved_errno = errno; + (void)__close(p->fts_symfd); + __set_errno (saved_errno); + SET(FTS_STOP); + return (NULL); + } + (void)__close(p->fts_symfd); + } else if (!(p->fts_flags & FTS_DONTCHDIR) && + fts_safe_changedir(sp, p->fts_parent, -1, "..")) { + SET(FTS_STOP); + return (NULL); + } + p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP; + return (sp->fts_cur = p); +} + +/* + * Fts_set takes the stream as an argument although it's not used in this + * implementation; it would be necessary if anyone wanted to add global + * semantics to fts using fts_set. An error return is allowed for similar + * reasons. + */ +int +Fts_set(FTS * sp, FTSENT * p, int instr) +{ + if (instr != 0 && instr != FTS_AGAIN && instr != FTS_FOLLOW && + instr != FTS_NOINSTR && instr != FTS_SKIP) { + __set_errno (EINVAL); + return (1); + } + p->fts_instr = instr; + return (0); +} + +FTSENT * +Fts_children(FTS * sp, int instr) +{ + register FTSENT *p; + int fd; + + if (instr != 0 && instr != FTS_NAMEONLY) { + __set_errno (EINVAL); + return (NULL); + } + + /* Set current node pointer. */ + p = sp->fts_cur; + + /* + * Errno set to 0 so user can distinguish empty directory from + * an error. + */ + __set_errno (0); + + /* Fatal errors stop here. */ + if (ISSET(FTS_STOP)) + return (NULL); + + /* Return logical hierarchy of user's arguments. */ + if (p->fts_info == FTS_INIT) + return (p->fts_link); + + /* + * If not a directory being visited in pre-order, stop here. Could + * allow FTS_DNR, assuming the user has fixed the problem, but the + * same effect is available with FTS_AGAIN. + */ + if (p->fts_info != FTS_D /* && p->fts_info != FTS_DNR */) + return (NULL); + + /* Free up any previous child list. */ + if (sp->fts_child != NULL) + fts_lfree(sp->fts_child); + + if (instr == FTS_NAMEONLY) { + SET(FTS_NAMEONLY); + instr = BNAMES; + } else + instr = BCHILD; + + /* + * If using chdir on a relative path and called BEFORE fts_read does + * its chdir to the root of a traversal, we can lose -- we need to + * chdir into the subdirectory, and we don't know where the current + * directory is, so we can't get back so that the upcoming chdir by + * fts_read will work. + */ + if (p->fts_level != FTS_ROOTLEVEL || p->fts_accpath[0] == '/' || + ISSET(FTS_NOCHDIR)) + return (sp->fts_child = fts_build(sp, instr)); + + if ((fd = __open(".", O_RDONLY, 0)) < 0) + return (NULL); + sp->fts_child = fts_build(sp, instr); + if (__fchdir(fd)) + return (NULL); + (void)__close(fd); + return (sp->fts_child); +} + +/* + * This is the tricky part -- do not casually change *anything* in here. The + * idea is to build the linked list of entries that are used by fts_children + * and fts_read. There are lots of special cases. + * + * The real slowdown in walking the tree is the stat calls. If FTS_NOSTAT is + * set and it's a physical walk (so that symbolic links can't be directories), + * we can do things quickly. First, if it's a 4.4BSD file system, the type + * of the file is in the directory entry. Otherwise, we assume that the number + * of subdirectories in a node is equal to the number of links to the parent. + * The former skips all stat calls. The latter skips stat calls in any leaf + * directories and for any files after the subdirectories in the directory have + * been found, cutting the stat calls by about 2/3. + */ +static FTSENT * +fts_build(FTS * sp, int type) +{ + register struct dirent *dp; + register FTSENT *p, *head; + register int nitems; + FTSENT *cur, *tail; + DIR *dirp; + void *oldaddr; + int cderrno, descend, len, level, maxlen, nlinks, saved_errno, + nostat, doadjust; + char *cp; + + /* Set current node pointer. */ + cur = sp->fts_cur; + + /* + * Open the directory for reading. If this fails, we're done. + * If being called from fts_read, set the fts_info field. + */ +#if defined FTS_WHITEOUT && 0 + if (ISSET(FTS_WHITEOUT)) + oflag = DTF_NODUP|DTF_REWIND; + else + oflag = DTF_HIDEW|DTF_NODUP|DTF_REWIND; +#else +# define __opendir2(path, flag) (*sp->fts_opendir) (path) +#endif + if ((dirp = __opendir2(cur->fts_accpath, oflag)) == NULL) { + if (type == BREAD) { + cur->fts_info = FTS_DNR; + cur->fts_errno = errno; + } + return (NULL); + } + + /* + * Nlinks is the number of possible entries of type directory in the + * directory if we're cheating on stat calls, 0 if we're not doing + * any stat calls at all, -1 if we're doing stats on everything. + */ + if (type == BNAMES) { + nlinks = 0; + /* Be quiet about nostat, GCC. */ + nostat = 0; + } else if (ISSET(FTS_NOSTAT) && ISSET(FTS_PHYSICAL)) { + nlinks = cur->fts_nlink - (ISSET(FTS_SEEDOT) ? 0 : 2); + nostat = 1; + } else { + nlinks = -1; + nostat = 0; + } + +#ifdef notdef + (void)printf("nlinks == %d (cur: %d)\n", nlinks, cur->fts_nlink); + (void)printf("NOSTAT %d PHYSICAL %d SEEDOT %d\n", + ISSET(FTS_NOSTAT), ISSET(FTS_PHYSICAL), ISSET(FTS_SEEDOT)); +#endif + /* + * If we're going to need to stat anything or we want to descend + * and stay in the directory, chdir. If this fails we keep going, + * but set a flag so we don't chdir after the post-order visit. + * We won't be able to stat anything, but we can still return the + * names themselves. Note, that since fts_read won't be able to + * chdir into the directory, it will have to return different path + * names than before, i.e. "a/b" instead of "b". Since the node + * has already been visited in pre-order, have to wait until the + * post-order visit to return the error. There is a special case + * here, if there was nothing to stat then it's not an error to + * not be able to stat. This is all fairly nasty. If a program + * needed sorted entries or stat information, they had better be + * checking FTS_NS on the returned nodes. + */ + cderrno = 0; + if (nlinks || type == BREAD) { + if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) { + if (nlinks && type == BREAD) + cur->fts_errno = errno; + cur->fts_flags |= FTS_DONTCHDIR; + descend = 0; + cderrno = errno; + (void) (*sp->fts_closedir) (dirp); + dirp = NULL; + } else + descend = 1; + } else + descend = 0; + + /* + * Figure out the max file name length that can be stored in the + * current path -- the inner loop allocates more path as necessary. + * We really wouldn't have to do the maxlen calculations here, we + * could do them in fts_read before returning the path, but it's a + * lot easier here since the length is part of the dirent structure. + * + * If not changing directories set a pointer so that can just append + * each new name into the path. + */ + len = NAPPEND(cur); + if (ISSET(FTS_NOCHDIR)) { + cp = sp->fts_path + len; + *cp++ = '/'; + } else { + /* GCC, you're too verbose. */ + cp = NULL; + } + len++; + maxlen = sp->fts_pathlen - len; + + level = cur->fts_level + 1; + + /* Read the directory, attaching each entry to the `link' pointer. */ + doadjust = 0; + for (head = tail = NULL, nitems = 0; + dirp && (dp = (*sp->fts_readdir) (dirp));) + { + if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name)) + continue; + + if ((p = fts_alloc(sp, dp->d_name, (int)_D_EXACT_NAMLEN (dp))) == NULL) + goto mem1; + if (_D_EXACT_NAMLEN (dp) >= maxlen) {/* include space for NUL */ + oldaddr = sp->fts_path; + if (fts_palloc(sp, _D_EXACT_NAMLEN (dp) + len + 1)) { + /* + * No more memory for path or structures. Save + * errno, free up the current structure and the + * structures already allocated. + */ +mem1: saved_errno = errno; + if (p) + free(p); + fts_lfree(head); + (void) (*sp->fts_closedir) (dirp); + cur->fts_info = FTS_ERR; + SET(FTS_STOP); + __set_errno (saved_errno); + return (NULL); + } + /* Did realloc() change the pointer? */ + if (oldaddr != sp->fts_path) { + doadjust = 1; + if (ISSET(FTS_NOCHDIR)) + cp = sp->fts_path + len; + } + maxlen = sp->fts_pathlen - len; + } + + if (len + _D_EXACT_NAMLEN (dp) >= UINT16_MAX) { + /* + * In an FTSENT, fts_pathlen is a uint16_t so it is + * possible to wraparound here. If we do, free up + * the current structure and the structures already + * allocated, then error out with ENAMETOOLONG. + */ + free(p); + fts_lfree(head); + (void) (*sp->fts_closedir) (dirp); + cur->fts_info = FTS_ERR; + SET(FTS_STOP); + __set_errno (ENAMETOOLONG); + return (NULL); + } + p->fts_level = level; + p->fts_parent = sp->fts_cur; + p->fts_pathlen = len + _D_EXACT_NAMLEN (dp); + +#if defined FTS_WHITEOUT && 0 + if (dp->d_type == DT_WHT) + p->fts_flags |= FTS_ISW; +#endif + + if (cderrno) { + if (nlinks) { + p->fts_info = FTS_NS; + p->fts_errno = cderrno; + } else + p->fts_info = FTS_NSOK; + p->fts_accpath = cur->fts_accpath; + } else if (nlinks == 0 +#if defined DT_DIR && defined _DIRENT_HAVE_D_TYPE + || (nostat && + dp->d_type != DT_DIR && dp->d_type != DT_UNKNOWN) +#endif + ) { + p->fts_accpath = + ISSET(FTS_NOCHDIR) ? p->fts_path : p->fts_name; + p->fts_info = FTS_NSOK; + } else { + /* Build a file name for fts_stat to stat. */ + if (ISSET(FTS_NOCHDIR)) { + p->fts_accpath = p->fts_path; + memmove(cp, p->fts_name, p->fts_namelen + 1); + } else + p->fts_accpath = p->fts_name; + /* Stat it. */ + p->fts_info = fts_stat(sp, p, 0); + + /* Decrement link count if applicable. */ + if (nlinks > 0 && (p->fts_info == FTS_D || + p->fts_info == FTS_DC || p->fts_info == FTS_DOT)) + --nlinks; + } + + /* We walk in directory order so "ls -f" doesn't get upset. */ + p->fts_link = NULL; + if (head == NULL) + head = tail = p; + else { + tail->fts_link = p; + tail = p; + } + ++nitems; + } + if (dirp) + (void) (*sp->fts_closedir) (dirp); + + /* + * If realloc() changed the address of the path, adjust the + * addresses for the rest of the tree and the dir list. + */ + if (doadjust) + fts_padjust(sp, head); + + /* + * If not changing directories, reset the path back to original + * state. + */ + if (ISSET(FTS_NOCHDIR)) { + if (len == sp->fts_pathlen || nitems == 0) + --cp; + if (cp != NULL) /* XXX can't happen */ + *cp = '\0'; + } + + /* + * If descended after called from fts_children or after called from + * fts_read and nothing found, get back. At the root level we use + * the saved fd; if one of fts_open()'s arguments is a relative path + * to an empty directory, we wind up here with no other way back. If + * can't get back, we're done. + */ + if (descend && (type == BCHILD || !nitems) && + (cur->fts_level == FTS_ROOTLEVEL ? + FCHDIR(sp, sp->fts_rfd) : + fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) { + cur->fts_info = FTS_ERR; + SET(FTS_STOP); + return (NULL); + } + + /* If didn't find anything, return NULL. */ + if (!nitems) { + if (type == BREAD) + cur->fts_info = FTS_DP; + return (NULL); + } + + /* Sort the entries. */ + if (sp->fts_compar && nitems > 1) + head = fts_sort(sp, head, nitems); + return (head); +} + +static uint16_t +fts_stat(FTS * sp, FTSENT * p, int follow) +{ + register FTSENT *t; + register dev_t dev; + register ino_t ino; + struct stat *sbp, sb; + int saved_errno; + + /* If user needs stat info, stat buffer already allocated. */ + sbp = ISSET(FTS_NOSTAT) ? &sb : p->fts_statp; + +#if defined FTS_WHITEOUT && 0 + /* check for whiteout */ + if (p->fts_flags & FTS_ISW) { + if (sbp != &sb) { + memset(sbp, '\0', sizeof (*sbp)); + sbp->st_mode = S_IFWHT; + } + return (FTS_W); + } +#endif + + /* + * If doing a logical walk, or application requested FTS_FOLLOW, do + * a stat(2). If that fails, check for a non-existent symlink. If + * fail, set the errno from the stat call. + */ + if (ISSET(FTS_LOGICAL) || follow) { + if ((*sp->fts_stat) (p->fts_accpath, sbp)) { + saved_errno = errno; + if (!(*sp->fts_lstat) (p->fts_accpath, sbp)) { + __set_errno (0); + return (FTS_SLNONE); + } + p->fts_errno = saved_errno; + goto err; + } + } else if ((*sp->fts_lstat) (p->fts_accpath, sbp)) { + p->fts_errno = errno; +err: memset(sbp, 0, sizeof(*sbp)); + return (FTS_NS); + } + + if (S_ISDIR(sbp->st_mode)) { + /* + * Set the device/inode. Used to find cycles and check for + * crossing mount points. Also remember the link count, used + * in fts_build to limit the number of stat calls. It is + * understood that these fields are only referenced if fts_info + * is set to FTS_D. + */ + dev = p->fts_dev = sbp->st_dev; + ino = p->fts_ino = sbp->st_ino; + p->fts_nlink = sbp->st_nlink; + + if (ISDOT(p->fts_name)) + return (FTS_DOT); + + /* + * Cycle detection is done by brute force when the directory + * is first encountered. If the tree gets deep enough or the + * number of symbolic links to directories is high enough, + * something faster might be worthwhile. + */ + for (t = p->fts_parent; + t->fts_level >= FTS_ROOTLEVEL; t = t->fts_parent) + if (ino == t->fts_ino && dev == t->fts_dev) { + p->fts_cycle = t; + return (FTS_DC); + } + return (FTS_D); + } + if (S_ISLNK(sbp->st_mode)) + return (FTS_SL); + if (S_ISREG(sbp->st_mode)) + return (FTS_F); + return (FTS_DEFAULT); +} + +static FTSENT * +fts_sort(FTS * sp, FTSENT * head, int nitems) +{ + register FTSENT **ap, *p; + + /* + * Construct an array of pointers to the structures and call qsort(3). + * Reassemble the array in the order returned by qsort. If unable to + * sort for memory reasons, return the directory entries in their + * current order. Allocate enough space for the current needs plus + * 40 so don't realloc one entry at a time. + */ + if (nitems > sp->fts_nitems) { + struct _ftsent **a; + + sp->fts_nitems = nitems + 40; + if ((a = realloc(sp->fts_array, + (size_t)(sp->fts_nitems * sizeof(*sp->fts_array)))) == NULL) + { + free(sp->fts_array); + sp->fts_array = NULL; + sp->fts_nitems = 0; + return (head); + } + sp->fts_array = a; + } + for (ap = sp->fts_array, p = head; p != NULL; p = p->fts_link) + *ap++ = p; + qsort((void *)sp->fts_array, nitems, sizeof(*sp->fts_array), + sp->fts_compar); + for (head = *(ap = sp->fts_array); --nitems; ++ap) + ap[0]->fts_link = ap[1]; + ap[0]->fts_link = NULL; + return (head); +} + +static FTSENT * +fts_alloc(FTS * sp, const char * name, int namelen) +{ + register FTSENT *p; + size_t len; + + /* + * The file name is a variable length array and no stat structure is + * necessary if the user has set the nostat bit. Allocate the FTSENT + * structure, the file name and the stat structure in one chunk, but + * be careful that the stat structure is reasonably aligned. Since the + * fts_name field is declared to be of size 1, the fts_name pointer is + * namelen + 2 before the first possible address of the stat structure. + */ + len = sizeof(*p) + namelen; + if (!ISSET(FTS_NOSTAT)) + len += sizeof(*p->fts_statp) + ALIGNBYTES; + if ((p = malloc(len)) == NULL) + return (NULL); + + /* Copy the name and guarantee NUL termination. */ + memmove(p->fts_name, name, namelen); + p->fts_name[namelen] = '\0'; + + if (!ISSET(FTS_NOSTAT)) + p->fts_statp = (struct stat *)ALIGN(p->fts_name + namelen + 2); + p->fts_namelen = namelen; + p->fts_path = sp->fts_path; + p->fts_errno = 0; + p->fts_flags = 0; + p->fts_instr = FTS_NOINSTR; + p->fts_number = 0; + p->fts_pointer = NULL; + return (p); +} + +static void +fts_lfree(FTSENT * head) +{ + register FTSENT *p; + + /* Free a linked list of structures. */ + while ((p = head)) { + head = head->fts_link; + free(p); + } +} + +/* + * Allow essentially unlimited paths; find, rm, ls should all work on any tree. + * Most systems will allow creation of paths much longer than MAXPATHLEN, even + * though the kernel won't resolve them. Add the size (not just what's needed) + * plus 256 bytes so don't realloc the path 2 bytes at a time. + */ +static int +fts_palloc(FTS * sp, size_t more) +{ + char *p; + + sp->fts_pathlen += more + 256; + /* + * Check for possible wraparound. In an FTS, fts_pathlen is + * a signed int but in an FTSENT it is an unsigned short. + * We limit fts_pathlen to UINT16_MAX to be safe in both cases. + */ + if (sp->fts_pathlen < 0 || sp->fts_pathlen >= UINT16_MAX) { + if (sp->fts_path) { + free(sp->fts_path); + sp->fts_path = NULL; + } + sp->fts_path = NULL; + __set_errno (ENAMETOOLONG); + return (1); + } + p = realloc(sp->fts_path, sp->fts_pathlen); + if (p == NULL) { + free(sp->fts_path); + sp->fts_path = NULL; + return 1; + } + sp->fts_path = p; + return 0; +} + +/* + * When the path is realloc'd, have to fix all of the pointers in structures + * already returned. + */ +static void +fts_padjust(FTS * sp, FTSENT * head) +{ + FTSENT *p; + char *addr = sp->fts_path; + +#define ADJUST(p) do { \ + if ((p)->fts_accpath != (p)->fts_name) { \ + (p)->fts_accpath = \ + (char *)addr + ((p)->fts_accpath - (p)->fts_path); \ + } \ + (p)->fts_path = addr; \ +} while (0) + /* Adjust the current set of children. */ + for (p = sp->fts_child; p != NULL; p = p->fts_link) + ADJUST(p); + + /* Adjust the rest of the tree, including the current level. */ + for (p = head; p->fts_level >= FTS_ROOTLEVEL;) { + ADJUST(p); + p = p->fts_link ? p->fts_link : p->fts_parent; + } +} + +static size_t +fts_maxarglen(char * const * argv) +{ + size_t len, max; + + for (max = 0; *argv; ++argv) + if ((len = strlen(*argv)) > max) + max = len; + return (max + 1); +} + +/* + * Change to dir specified by fd or p->fts_accpath without getting + * tricked by someone changing the world out from underneath us. + * Assumes p->fts_dev and p->fts_ino are filled in. + */ +static int +fts_safe_changedir(FTS * sp, FTSENT * p, int fd, const char * path) +{ + int ret, oerrno, newfd; + struct stat64 sb; + + newfd = fd; + if (ISSET(FTS_NOCHDIR)) + return (0); + if (fd < 0 && (newfd = __open(path, O_RDONLY, 0)) < 0) + return (-1); + if (__fxstat64(_STAT_VER, newfd, &sb)) { + ret = -1; + goto bail; + } + if (p->fts_dev != sb.st_dev || p->fts_ino != sb.st_ino) { + __set_errno (ENOENT); /* disinformation */ + ret = -1; + goto bail; + } + ret = __fchdir(newfd); +bail: + oerrno = errno; + if (fd < 0) + (void)__close(newfd); + __set_errno (oerrno); + return (ret); +} diff --git a/misc/fts.h b/misc/fts.h new file mode 100644 index 0000000..47c650e --- /dev/null +++ b/misc/fts.h @@ -0,0 +1,209 @@ +/* + * Copyright (c) 1989, 1993 + * The Regents of the University of California. 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. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. + * + * @(#)fts.h 8.3 (Berkeley) 8/14/94 + */ + +#ifndef _FTS_H +#define _FTS_H 1 + +#include + +#if defined(__GLIBC__) +#include +#else + +# define __THROW +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + +#if defined(hpux) +# define _D_EXACT_NAMLEN(d) ((d)->d_namlen) +# define _INCLUDE_POSIX_SOURCE +# define _LARGEFILE64_SOURCE +#endif + +#if defined(sun) +# define _D_EXACT_NAMLEN(d) ((d)->d_reclen) +#endif + +#if defined(__APPLE__) +# define _D_EXACT_NAMLEN(d) (strlen((d)->d_name)) +#endif + +#endif + +#include +#include +#include +#include + +typedef struct { + struct _ftsent *fts_cur; /*!< current node */ + struct _ftsent *fts_child; /*!< linked list of children */ + struct _ftsent **fts_array; /*!< sort array */ + dev_t fts_dev; /*!< starting device # */ + char *fts_path; /*!< path for this descent */ + int fts_rfd; /*!< fd for root */ + int fts_pathlen; /*!< sizeof(path) */ + int fts_nitems; /*!< elements in the sort array */ + int (*fts_compar) (const void *, const void *); /*!< compare fn */ + + DIR * (*fts_opendir) (const char * path); + struct dirent * (*fts_readdir) (DIR * dir); + int (*fts_closedir) (DIR * dir); + int (*fts_stat) (const char * path, struct stat * st); + int (*fts_lstat) (const char * path, struct stat * st); + +#define FTS_COMFOLLOW 0x0001 /* follow command line symlinks */ +#define FTS_LOGICAL 0x0002 /* logical walk */ +#define FTS_NOCHDIR 0x0004 /* don't change directories */ +#define FTS_NOSTAT 0x0008 /* don't get stat info */ +#define FTS_PHYSICAL 0x0010 /* physical walk */ +#define FTS_SEEDOT 0x0020 /* return dot and dot-dot */ +#define FTS_XDEV 0x0040 /* don't cross devices */ +#define FTS_WHITEOUT 0x0080 /* return whiteout information */ +#define FTS_OPTIONMASK 0x00ff /* valid user option mask */ + +#define FTS_NAMEONLY 0x0100 /* (private) child names only */ +#define FTS_STOP 0x0200 /* (private) unrecoverable error */ + int fts_options; /*!< fts_open options, global flags */ +} FTS; + +typedef struct _ftsent { + struct _ftsent *fts_cycle; /*!< cycle node */ + struct _ftsent *fts_parent; /*!< parent directory */ + struct _ftsent *fts_link; /*!< next file in directory */ + long fts_number; /*!< local numeric value */ + void *fts_pointer; /*!< local address value */ + char *fts_accpath; /*!< access path */ + char *fts_path; /*!< root path */ + int fts_errno; /*!< errno for this node */ + int fts_symfd; /*!< fd for symlink */ + uint16_t fts_pathlen; /*!< strlen(fts_path) */ + uint16_t fts_namelen; /*!< strlen(fts_name) */ + + ino_t fts_ino; /*!< inode */ + dev_t fts_dev; /*!< device */ + nlink_t fts_nlink; /*!< link count */ + +#define FTS_ROOTPARENTLEVEL -1 +#define FTS_ROOTLEVEL 0 + short fts_level; /*!< depth (-1 to N) */ + +#define FTS_D 1 /* preorder directory */ +#define FTS_DC 2 /* directory that causes cycles */ +#define FTS_DEFAULT 3 /* none of the above */ +#define FTS_DNR 4 /* unreadable directory */ +#define FTS_DOT 5 /* dot or dot-dot */ +#define FTS_DP 6 /* postorder directory */ +#define FTS_ERR 7 /* error; errno is set */ +#define FTS_F 8 /* regular file */ +#define FTS_INIT 9 /* initialized only */ +#define FTS_NS 10 /* stat(2) failed */ +#define FTS_NSOK 11 /* no stat(2) requested */ +#define FTS_SL 12 /* symbolic link */ +#define FTS_SLNONE 13 /* symbolic link without target */ +#define FTS_W 14 /* whiteout object */ + uint16_t fts_info; /*!< user flags for FTSENT structure */ + +#define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */ +#define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */ + uint16_t fts_flags; /*!< private flags for FTSENT structure */ + +#define FTS_AGAIN 1 /* read node again */ +#define FTS_FOLLOW 2 /* follow symbolic link */ +#define FTS_NOINSTR 3 /* no instructions */ +#define FTS_SKIP 4 /* discard node */ + uint16_t fts_instr; /*!< fts_set() instructions */ + + struct stat *fts_statp; /*!< stat(2) information */ + char fts_name[1]; /*!< file name */ +} FTSENT; + +__BEGIN_DECLS + +/** + * Return list of children of the current node. + * @param sp file hierarchy state + * @param instr + * @return file set member + */ +RPM_GNUC_INTERNAL +FTSENT *Fts_children (FTS * sp, int instr) __THROW +; + +/** + * Destroy a file hierarchy traversal handle. + * @param sp file hierarchy state + * @return 0 on sucess, -1 on error + */ +RPM_GNUC_INTERNAL +int Fts_close (FTS * sp) __THROW +; + +/** + * Create a handle for file hierarchy traversal. + * @param argv paths that compose a logical file hierarchy + * @param options traversal options + * @param compar traversal ordering (or NULL) + * @return file hierarchy state (or NULL on error) + */ +RPM_GNUC_INTERNAL +FTS *Fts_open (char * const * argv, int options, + int (*compar) (const FTSENT **, const FTSENT **)) __THROW + ; + +/** + * Return next node in the file hierarchy traversal. + * @param sp file hierarchy state + * @return file set member + */ +RPM_GNUC_INTERNAL +FTSENT *Fts_read (FTS * sp) __THROW +; + +/** + * Modify the traversal for a file set member. + * @param sp file hierarchy state + * @param p file set member + * @param instr new disposition for file set member + * @return 0 on sucess, -1 on error + */ +RPM_GNUC_INTERNAL +int Fts_set (FTS * sp, FTSENT * p, int instr) __THROW +; + +__END_DECLS + +#endif /* fts.h */ diff --git a/misc/glob.c b/misc/glob.c new file mode 100644 index 0000000..3bebe9e --- /dev/null +++ b/misc/glob.c @@ -0,0 +1,1160 @@ + +/* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* AIX requires this to be the first thing in the file. */ +#if defined _AIX && !defined __GNUC__ + #pragma alloca +#endif + + +# include "system.h" + +# include +# include +# include +# include +# include /* S_ISDIR */ + +#define __alloca alloca +#define __stat stat +#define NAMLEN(_d) NLENGTH(_d) + +#if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__ +/* Posix does not require that the d_ino field be present, and some + systems do not provide it. */ +# define REAL_DIR_ENTRY(dp) 1 +#else +# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) +#endif /* POSIX */ + +#include +#ifndef __set_errno +# define __set_errno(val) errno = (val) +#endif + +/* Outcomment the following line for production quality code. */ +/* #define NDEBUG 1 */ + +#define GLOB_INTERFACE_VERSION 1 + +static inline const char *next_brace_sub __P ((const char *begin)); +static int glob_in_dir __P ((const char *pattern, const char *directory, + int flags, + int (*errfunc) (const char *, int), + glob_t *pglob)); +static int prefix_array __P ((const char *prefix, char **array, size_t n)); +static int collated_compare __P ((const __ptr_t, const __ptr_t)); + + +/* Find the end of the sub-pattern in a brace expression. We define + this as an inline function if the compiler permits. */ +static inline const char * +next_brace_sub (const char *begin) +{ + unsigned int depth = 0; + const char *cp = begin; + + while (1) + { + if (depth == 0) + { + if (*cp != ',' && *cp != '}' && *cp != '\0') + { + if (*cp == '{') + ++depth; + ++cp; + continue; + } + } + else + { + while (*cp != '\0' && (*cp != '}' || depth > 0)) + { + if (*cp == '}') + --depth; + ++cp; + } + if (*cp == '\0') + /* An incorrectly terminated brace expression. */ + return NULL; + + continue; + } + break; + } + + return cp; +} + +static int __glob_pattern_p (const char *pattern, int quote); + +/* Do glob searching for PATTERN, placing results in PGLOB. + The bits defined above may be set in FLAGS. + If a directory cannot be opened or read and ERRFUNC is not nil, + it is called with the pathname that caused the error, and the + `errno' value from the failing call; if it returns non-zero + `glob' returns GLOB_ABORTED; if it returns zero, the error is ignored. + If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. + Otherwise, `glob' returns zero. */ +int +glob (const char *pattern, int flags, + int (*errfunc) __P ((const char *, int)), glob_t *pglob) +{ + const char *filename; + const char *dirname; + size_t dirlen; + int status; + int oldcount; + + if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0) + { + __set_errno (EINVAL); + return -1; + } + + if (flags & GLOB_BRACE) + { + const char *begin = strchr (pattern, '{'); + if (begin != NULL) + { + /* Allocate working buffer large enough for our work. Note that + we have at least an opening and closing brace. */ + int firstc; + char *alt_start; + const char *p; + const char *next; + const char *rest; + size_t rest_len; +#ifdef __GNUC__ + char onealt[strlen (pattern) - 1]; +#else + char *onealt = (char *) xmalloc (strlen (pattern) - 1); + if (onealt == NULL) + { + if (!(flags & GLOB_APPEND)) + globfree (pglob); + return GLOB_NOSPACE; + } +#endif + + /* We know the prefix for all sub-patterns. */ +#ifdef HAVE_MEMPCPY + alt_start = mempcpy (onealt, pattern, begin - pattern); +#else + memcpy (onealt, pattern, begin - pattern); + alt_start = &onealt[begin - pattern]; +#endif + + /* Find the first sub-pattern and at the same time find the + rest after the closing brace. */ + next = next_brace_sub (begin + 1); + if (next == NULL) + { + /* It is an illegal expression. */ +#ifndef __GNUC__ + free (onealt); +#endif + return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); + } + + /* Now find the end of the whole brace expression. */ + rest = next; + while (*rest != '}') + { + rest = next_brace_sub (rest + 1); + if (rest == NULL) + { + /* It is an illegal expression. */ +#ifndef __GNUC__ + free (onealt); +#endif + return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); + } + } + /* Please note that we now can be sure the brace expression + is well-formed. */ + rest_len = strlen (++rest) + 1; + + /* We have a brace expression. BEGIN points to the opening {, + NEXT points past the terminator of the first element, and END + points past the final }. We will accumulate result names from + recursive runs for each brace alternative in the buffer using + GLOB_APPEND. */ + + if (!(flags & GLOB_APPEND)) + { + /* This call is to set a new vector, so clear out the + vector so we can append to it. */ + pglob->gl_pathc = 0; + pglob->gl_pathv = NULL; + } + firstc = pglob->gl_pathc; + + p = begin + 1; + while (1) + { + int result; + + /* Construct the new glob expression. */ +#ifdef HAVE_MEMPCPY + mempcpy (mempcpy (alt_start, p, next - p), rest, rest_len); +#else + memcpy (alt_start, p, next - p); + memcpy (&alt_start[next - p], rest, rest_len); +#endif + + result = glob (onealt, + ((flags & ~(GLOB_NOCHECK|GLOB_NOMAGIC)) + | GLOB_APPEND), errfunc, pglob); + + /* If we got an error, return it. */ + if (result && result != GLOB_NOMATCH) + { +#ifndef __GNUC__ + free (onealt); +#endif + if (!(flags & GLOB_APPEND)) + globfree (pglob); + return result; + } + + if (*next == '}') + /* We saw the last entry. */ + break; + + p = next + 1; + next = next_brace_sub (p); + assert (next != NULL); + } + +#ifndef __GNUC__ + free (onealt); +#endif + + if (pglob->gl_pathc != firstc) + /* We found some entries. */ + return 0; + else if (!(flags & (GLOB_NOCHECK|GLOB_NOMAGIC))) + return GLOB_NOMATCH; + } + } + + /* Find the filename. */ + filename = strrchr (pattern, '/'); +#if defined __MSDOS__ || defined WINDOWS32 + /* The case of "d:pattern". Since `:' is not allowed in + file names, we can safely assume that wherever it + happens in pattern, it signals the filename part. This + is so we could some day support patterns like "[a-z]:foo". */ + if (filename == NULL) + filename = strchr (pattern, ':'); +#endif /* __MSDOS__ || WINDOWS32 */ + if (filename == NULL) + { + /* This can mean two things: a simple name or "~name". The latter + case is nothing but a notation for a directory. */ + if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && pattern[0] == '~') + { + dirname = pattern; + dirlen = strlen (pattern); + + /* Set FILENAME to NULL as a special flag. This is ugly but + other solutions would require much more code. We test for + this special case below. */ + filename = NULL; + } + else + { + filename = pattern; +#ifdef _AMIGA + dirname = ""; +#else + dirname = "."; +#endif + dirlen = 0; + } + } + else if (filename == pattern) + { + /* "/pattern". */ + dirname = "/"; + dirlen = 1; + ++filename; + } + else + { + char *newp; + dirlen = filename - pattern; +#if defined __MSDOS__ || defined WINDOWS32 + if (*filename == ':' + || (filename > pattern + 1 && filename[-1] == ':')) + { + char *drive_spec; + + ++dirlen; + drive_spec = (char *) __alloca (dirlen + 1); +#ifdef HAVE_MEMPCPY + *((char *) mempcpy (drive_spec, pattern, dirlen)) = '\0'; +#else + memcpy (drive_spec, pattern, dirlen); + drive_spec[dirlen] = '\0'; +#endif + /* For now, disallow wildcards in the drive spec, to + prevent infinite recursion in glob. */ + if (__glob_pattern_p (drive_spec, !(flags & GLOB_NOESCAPE))) + return GLOB_NOMATCH; + /* If this is "d:pattern", we need to copy `:' to DIRNAME + as well. If it's "d:/pattern", don't remove the slash + from "d:/", since "d:" and "d:/" are not the same.*/ + } +#endif + newp = (char *) __alloca (dirlen + 1); +#ifdef HAVE_MEMPCPY + *((char *) mempcpy (newp, pattern, dirlen)) = '\0'; +#else + memcpy (newp, pattern, dirlen); + newp[dirlen] = '\0'; +#endif + dirname = newp; + ++filename; + + if (filename[0] == '\0' +#if defined __MSDOS__ || defined WINDOWS32 + && dirname[dirlen - 1] != ':' + && (dirlen < 3 || dirname[dirlen - 2] != ':' + || dirname[dirlen - 1] != '/') +#endif + && dirlen > 1) + /* "pattern/". Expand "pattern", appending slashes. */ + { + int val = glob (dirname, flags | GLOB_MARK, errfunc, pglob); + if (val == 0) + pglob->gl_flags = ((pglob->gl_flags & ~GLOB_MARK) + | (flags & GLOB_MARK)); + return val; + } + } + + if (!(flags & GLOB_APPEND)) + { + pglob->gl_pathc = 0; + pglob->gl_pathv = NULL; + } + + oldcount = pglob->gl_pathc; + +#ifndef VMS + if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~') + { + if (dirname[1] == '\0' || dirname[1] == '/') + { + /* Look up home directory. */ + const char *home_dir = getenv ("HOME"); +# ifdef _AMIGA + if (home_dir == NULL || home_dir[0] == '\0') + home_dir = "SYS:"; +# else +# ifdef WINDOWS32 + if (home_dir == NULL || home_dir[0] == '\0') + home_dir = "c:/users/default"; /* poor default */ +# else + if (home_dir == NULL || home_dir[0] == '\0') + { + int success; + char *name; +# if defined HAVE_GETLOGIN_R || defined _LIBC + size_t buflen = sysconf (_SC_LOGIN_NAME_MAX) + 1; + + if (buflen == 0) + /* `sysconf' does not support _SC_LOGIN_NAME_MAX. Try + a moderate value. */ + buflen = 20; + name = (char *) __alloca (buflen); + + success = getlogin_r (name, buflen) >= 0; +# else + success = (name = getlogin ()) != NULL; +# endif + if (success) + { + struct passwd *p; +# if defined HAVE_GETPWNAM_R || defined _LIBC + size_t pwbuflen = sysconf (_SC_GETPW_R_SIZE_MAX); + char *pwtmpbuf; + struct passwd pwbuf; + int save = errno; + + if (pwbuflen == -1) + /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX. + Try a moderate value. */ + pwbuflen = 1024; + pwtmpbuf = (char *) __alloca (pwbuflen); + + while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p) + != 0) + { + if (errno != ERANGE) + { + p = NULL; + break; + } + pwbuflen *= 2; + pwtmpbuf = (char *) __alloca (pwbuflen); + __set_errno (save); + } +# else + p = getpwnam (name); +# endif + if (p != NULL) + home_dir = p->pw_dir; + } + } + if (home_dir == NULL || home_dir[0] == '\0') + { + if (flags & GLOB_TILDE_CHECK) + return GLOB_NOMATCH; + else + home_dir = "~"; /* No luck. */ + } +# endif /* WINDOWS32 */ +# endif + /* Now construct the full directory. */ + if (dirname[1] == '\0') + dirname = home_dir; + else + { + char *newp; + size_t home_len = strlen (home_dir); + newp = (char *) __alloca (home_len + dirlen); +# ifdef HAVE_MEMPCPY + mempcpy (mempcpy (newp, home_dir, home_len), + &dirname[1], dirlen); +# else + memcpy (newp, home_dir, home_len); + memcpy (&newp[home_len], &dirname[1], dirlen); +# endif + dirname = newp; + } + } +# if !defined _AMIGA && !defined WINDOWS32 + else + { + char *end_name = strchr (dirname, '/'); + const char *user_name; + const char *home_dir; + + if (end_name == NULL) + user_name = dirname + 1; + else + { + char *newp; + newp = (char *) __alloca (end_name - dirname); +# ifdef HAVE_MEMPCPY + *((char *) mempcpy (newp, dirname + 1, end_name - dirname)) + = '\0'; +# else + memcpy (newp, dirname + 1, end_name - dirname); + newp[end_name - dirname - 1] = '\0'; +# endif + user_name = newp; + } + + /* Look up specific user's home directory. */ + { + struct passwd *p; +# if defined HAVE_GETPWNAM_R || defined _LIBC + size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX); + char *pwtmpbuf; + struct passwd pwbuf; + int save = errno; + + if (buflen == -1) + /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX. Try a + moderate value. */ + buflen = 1024; + pwtmpbuf = (char *) __alloca (buflen); + + while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) != 0) + { + if (errno != ERANGE) + { + p = NULL; + break; + } + buflen *= 2; + pwtmpbuf = __alloca (buflen); + __set_errno (save); + } +# else + p = getpwnam (user_name); +# endif + if (p != NULL) + home_dir = p->pw_dir; + else + home_dir = NULL; + } + /* If we found a home directory use this. */ + if (home_dir != NULL) + { + char *newp; + size_t home_len = strlen (home_dir); + size_t rest_len = end_name == NULL ? 0 : strlen (end_name); + newp = (char *) __alloca (home_len + rest_len + 1); +# ifdef HAVE_MEMPCPY + *((char *) mempcpy (mempcpy (newp, home_dir, home_len), + end_name, rest_len)) = '\0'; +# else + memcpy (newp, home_dir, home_len); + memcpy (&newp[home_len], end_name, rest_len); + newp[home_len + rest_len] = '\0'; +# endif + dirname = newp; + } + else + if (flags & GLOB_TILDE_CHECK) + /* We have to regard it as an error if we cannot find the + home directory. */ + return GLOB_NOMATCH; + } +# endif /* Not Amiga && not WINDOWS32. */ + } +#endif /* Not VMS. */ + + /* Now test whether we looked for "~" or "~NAME". In this case we + can give the answer now. */ + if (filename == NULL) + { + struct stat st; + + /* Return the directory if we don't check for error or if it exists. */ + if ((flags & GLOB_NOCHECK) + || (((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_stat) (dirname, &st) + : __stat (dirname, &st)) == 0 + && S_ISDIR (st.st_mode))) + { + pglob->gl_pathv + = (char **) xrealloc (pglob->gl_pathv, + (pglob->gl_pathc + + ((flags & GLOB_DOOFFS) ? + pglob->gl_offs : 0) + + 1 + 1) * + sizeof (char *)); + if (pglob->gl_pathv == NULL) + return GLOB_NOSPACE; + + if (flags & GLOB_DOOFFS) + while (pglob->gl_pathc < pglob->gl_offs) + pglob->gl_pathv[pglob->gl_pathc++] = NULL; + +#if defined HAVE_STRDUP || defined _LIBC + pglob->gl_pathv[pglob->gl_pathc] = xstrdup (dirname); +#else + { + size_t len = strlen (dirname) + 1; + char *dircopy = xmalloc (len); + if (dircopy != NULL) + pglob->gl_pathv[pglob->gl_pathc] = memcpy (dircopy, dirname, + len); + } +#endif + if (pglob->gl_pathv[pglob->gl_pathc] == NULL) + { + free (pglob->gl_pathv); + return GLOB_NOSPACE; + } + pglob->gl_pathv[++pglob->gl_pathc] = NULL; + pglob->gl_flags = flags; + + return 0; + } + + /* Not found. */ + return GLOB_NOMATCH; + } + + if (__glob_pattern_p (dirname, !(flags & GLOB_NOESCAPE))) + { + /* The directory name contains metacharacters, so we + have to glob for the directory, and then glob for + the pattern in each directory found. */ + glob_t dirs; + register int i; + + if ((flags & GLOB_ALTDIRFUNC) != 0) + { + /* Use the alternative access functions also in the recursive + call. */ + dirs.gl_opendir = pglob->gl_opendir; + dirs.gl_readdir = pglob->gl_readdir; + dirs.gl_closedir = pglob->gl_closedir; + dirs.gl_stat = pglob->gl_stat; + dirs.gl_lstat = pglob->gl_lstat; + } + + status = glob (dirname, + ((flags & (GLOB_ERR | GLOB_NOCHECK | GLOB_NOESCAPE + | GLOB_ALTDIRFUNC)) + | GLOB_NOSORT | GLOB_ONLYDIR), + errfunc, &dirs); + if (status != 0) + return status; + + /* We have successfully globbed the preceding directory name. + For each name we found, call glob_in_dir on it and FILENAME, + appending the results to PGLOB. */ + for (i = 0; i < dirs.gl_pathc; ++i) + { + int old_pathc; + +#ifdef SHELL + { + /* Make globbing interruptible in the bash shell. */ + extern int interrupt_state; + + if (interrupt_state) + { + globfree (&dirs); + globfree (&files); + return GLOB_ABORTED; + } + } +#endif /* SHELL. */ + + old_pathc = pglob->gl_pathc; + status = glob_in_dir (filename, dirs.gl_pathv[i], + ((flags | GLOB_APPEND) + & ~(GLOB_NOCHECK | GLOB_ERR)), + errfunc, pglob); + if (status == GLOB_NOMATCH) + /* No matches in this directory. Try the next. */ + continue; + + if (status != 0) + { + globfree (&dirs); + globfree (pglob); + return status; + } + + /* Stick the directory on the front of each name. */ + if (prefix_array (dirs.gl_pathv[i], + &pglob->gl_pathv[old_pathc], + pglob->gl_pathc - old_pathc)) + { + globfree (&dirs); + globfree (pglob); + return GLOB_NOSPACE; + } + } + + flags |= GLOB_MAGCHAR; + + /* We have ignored the GLOB_NOCHECK flag in the `glob_in_dir' calls. + But if we have not found any matching entry and thie GLOB_NOCHECK + flag was set we must return the list consisting of the disrectory + names followed by the filename. */ + if (pglob->gl_pathc == oldcount) + { + /* No matches. */ + if (flags & GLOB_NOCHECK) + { + size_t filename_len = strlen (filename) + 1; + char **new_pathv; + struct stat st; + + /* This is an pessimistic guess about the size. */ + pglob->gl_pathv + = (char **) xrealloc (pglob->gl_pathv, + (pglob->gl_pathc + + ((flags & GLOB_DOOFFS) ? + pglob->gl_offs : 0) + + dirs.gl_pathc + 1) * + sizeof (char *)); + if (pglob->gl_pathv == NULL) + { + globfree (&dirs); + return GLOB_NOSPACE; + } + + if (flags & GLOB_DOOFFS) + while (pglob->gl_pathc < pglob->gl_offs) + pglob->gl_pathv[pglob->gl_pathc++] = NULL; + + for (i = 0; i < dirs.gl_pathc; ++i) + { + const char *dir = dirs.gl_pathv[i]; + size_t dir_len = strlen (dir); + + /* First check whether this really is a directory. */ + if (((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_stat) (dir, &st) : __stat (dir, &st)) != 0 + || !S_ISDIR (st.st_mode)) + /* No directory, ignore this entry. */ + continue; + + pglob->gl_pathv[pglob->gl_pathc] = xmalloc (dir_len + 1 + + filename_len); + if (pglob->gl_pathv[pglob->gl_pathc] == NULL) + { + globfree (&dirs); + globfree (pglob); + return GLOB_NOSPACE; + } + +#ifdef HAVE_MEMPCPY + mempcpy (mempcpy (mempcpy (pglob->gl_pathv[pglob->gl_pathc], + dir, dir_len), + "/", 1), + filename, filename_len); +#else + memcpy (pglob->gl_pathv[pglob->gl_pathc], dir, dir_len); + pglob->gl_pathv[pglob->gl_pathc][dir_len] = '/'; + memcpy (&pglob->gl_pathv[pglob->gl_pathc][dir_len + 1], + filename, filename_len); +#endif + ++pglob->gl_pathc; + } + + pglob->gl_pathv[pglob->gl_pathc] = NULL; + pglob->gl_flags = flags; + + /* Now we know how large the gl_pathv vector must be. */ + new_pathv = (char **) xrealloc (pglob->gl_pathv, + ((pglob->gl_pathc + 1) + * sizeof (char *))); + if (new_pathv != NULL) + pglob->gl_pathv = new_pathv; + } + else + return GLOB_NOMATCH; + } + + globfree (&dirs); + } + else + { + status = glob_in_dir (filename, dirname, flags, errfunc, pglob); + if (status != 0) + return status; + + if (dirlen > 0) + { + /* Stick the directory on the front of each name. */ + int ignore = oldcount; + + if ((flags & GLOB_DOOFFS) && ignore < pglob->gl_offs) + ignore = pglob->gl_offs; + + if (prefix_array (dirname, + &pglob->gl_pathv[ignore], + pglob->gl_pathc - ignore)) + { + globfree (pglob); + return GLOB_NOSPACE; + } + } + } + + if (flags & GLOB_MARK) + { + /* Append slashes to directory names. */ + int i; + struct stat st; + for (i = oldcount; i < pglob->gl_pathc; ++i) + if (((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_stat) (pglob->gl_pathv[i], &st) + : __stat (pglob->gl_pathv[i], &st)) == 0 + && S_ISDIR (st.st_mode)) + { + size_t len = strlen (pglob->gl_pathv[i]) + 2; + char *new = xrealloc (pglob->gl_pathv[i], len); + if (new == NULL) + { + globfree (pglob); + return GLOB_NOSPACE; + } + strcpy (&new[len - 2], "/"); + pglob->gl_pathv[i] = new; + } + } + + if (!(flags & GLOB_NOSORT)) + { + /* Sort the vector. */ + int non_sort = oldcount; + + if ((flags & GLOB_DOOFFS) && pglob->gl_offs > oldcount) + non_sort = pglob->gl_offs; + + qsort ((__ptr_t) &pglob->gl_pathv[non_sort], + pglob->gl_pathc - non_sort, + sizeof (char *), collated_compare); + } + + return 0; +} + + +/* Free storage allocated in PGLOB by a previous `glob' call. */ +void +globfree (glob_t *pglob) +{ + if (pglob->gl_pathv != NULL) + { + register int i; + for (i = 0; i < pglob->gl_pathc; ++i) + if (pglob->gl_pathv[i] != NULL) + free ((__ptr_t) pglob->gl_pathv[i]); + free ((__ptr_t) pglob->gl_pathv); + } +} + + +/* Do a collated comparison of A and B. */ +static int +collated_compare (const __ptr_t a, const __ptr_t b) +{ + const char *const s1 = *(const char *const * const) a; + const char *const s2 = *(const char *const * const) b; + + if (s1 == s2) + return 0; + if (s1 == NULL) + return 1; + if (s2 == NULL) + return -1; + return strcoll (s1, s2); +} + + +/* Prepend DIRNAME to each of N members of ARRAY, replacing ARRAY's + elements in place. Return nonzero if out of memory, zero if successful. + A slash is inserted between DIRNAME and each elt of ARRAY, + unless DIRNAME is just "/". Each old element of ARRAY is freed. */ +static int +prefix_array (const char *dirname, char **array, size_t n) +{ + register size_t i; + size_t dirlen = strlen (dirname); +#if defined __MSDOS__ || defined WINDOWS32 + int sep_char = '/'; +# define DIRSEP_CHAR sep_char +#else +# define DIRSEP_CHAR '/' +#endif + + if (dirlen == 1 && dirname[0] == '/') + /* DIRNAME is just "/", so normal prepending would get us "//foo". + We want "/foo" instead, so don't prepend any chars from DIRNAME. */ + dirlen = 0; +#if defined __MSDOS__ || defined WINDOWS32 + else if (dirlen > 1) + { + if (dirname[dirlen - 1] == '/') + /* DIRNAME is "d:/". Don't prepend the slash from DIRNAME. */ + --dirlen; + else if (dirname[dirlen - 1] == ':') + { + /* DIRNAME is "d:". Use `:' instead of `/'. */ + --dirlen; + sep_char = ':'; + } + } +#endif + + for (i = 0; i < n; ++i) + { + size_t eltlen = strlen (array[i]) + 1; + char *new = (char *) xmalloc (dirlen + 1 + eltlen); + if (new == NULL) + { + while (i > 0) + free ((__ptr_t) array[--i]); + return 1; + } + +#ifdef HAVE_MEMPCPY + { + char *endp = (char *) mempcpy (new, dirname, dirlen); + *endp++ = DIRSEP_CHAR; + mempcpy (endp, array[i], eltlen); + } +#else + memcpy (new, dirname, dirlen); + new[dirlen] = DIRSEP_CHAR; + memcpy (&new[dirlen + 1], array[i], eltlen); +#endif + free ((__ptr_t) array[i]); + array[i] = new; + } + + return 0; +} + + +/* We must not compile this function twice. */ +#if !defined _LIBC || !defined NO_GLOB_PATTERN_P +/* Return nonzero if PATTERN contains any metacharacters. + Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ +static int +__glob_pattern_p (const char *pattern, int quote) +{ + register const char *p; + int open = 0; + + for (p = pattern; *p != '\0'; ++p) + switch (*p) + { + case '?': + case '*': + return 1; + + case '\\': + if (quote && p[1] != '\0') + ++p; + break; + + case '[': + open = 1; + break; + + case ']': + if (open) + return 1; + break; + } + + return 0; +} +# ifdef _LIBC +weak_alias (__glob_pattern_p, glob_pattern_p) +# endif +#endif + + +/* Like `glob', but PATTERN is a final pathname component, + and matches are searched for in DIRECTORY. + The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done. + The GLOB_APPEND flag is assumed to be set (always appends). */ +static int +glob_in_dir (const char *pattern, const char *directory, int flags, + int (*errfunc) __P ((const char *, int)), glob_t *pglob) +{ + __ptr_t stream = NULL; + + struct globlink + { + struct globlink *next; + char *name; + }; + struct globlink *names = NULL; + size_t nfound; + int meta; + int save; + + meta = __glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE)); + if (meta == 0) + { + if (flags & (GLOB_NOCHECK|GLOB_NOMAGIC)) + /* We need not do any tests. The PATTERN contains no meta + characters and we must not return an error therefore the + result will always contain exactly one name. */ + flags |= GLOB_NOCHECK; + else + { + /* Since we use the normal file functions we can also use stat() + to verify the file is there. */ + struct stat st; + size_t patlen = strlen (pattern); + size_t dirlen = strlen (directory); + char *fullname = (char *) __alloca (dirlen + 1 + patlen + 1); + +# ifdef HAVE_MEMPCPY + mempcpy (mempcpy (mempcpy (fullname, directory, dirlen), + "/", 1), + pattern, patlen + 1); +# else + memcpy (fullname, directory, dirlen); + fullname[dirlen] = '/'; + memcpy (&fullname[dirlen + 1], pattern, patlen + 1); +# endif + if (((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_stat) (fullname, &st) + : __stat (fullname, &st)) == 0) + /* We found this file to be existing. Now tell the rest + of the function to copy this name into the result. */ + flags |= GLOB_NOCHECK; + } + + nfound = 0; + } + else + { + if (pattern[0] == '\0') + { + /* This is a special case for matching directories like in + "*a/". */ + names = (struct globlink *) __alloca (sizeof (struct globlink)); + names->name = (char *) xmalloc (1); + if (names->name == NULL) + goto memory_error; + names->name[0] = '\0'; + names->next = NULL; + nfound = 1; + meta = 0; + } + else + { + stream = ((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_opendir) (directory) + : (__ptr_t) opendir (directory)); + if (stream == NULL) + { + if (errno != ENOTDIR + && ((errfunc != NULL && (*errfunc) (directory, errno)) + || (flags & GLOB_ERR))) + return GLOB_ABORTED; + nfound = 0; + meta = 0; + } + else + { + int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0) + | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0) +#if defined _AMIGA || defined VMS + | FNM_CASEFOLD +#endif + ); + nfound = 0; + flags |= GLOB_MAGCHAR; + + while (1) + { + const char *name; + size_t len; + struct dirent *d = ((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_readdir) (stream) + : readdir ((DIR *) stream)); + if (d == NULL) + break; + if (! REAL_DIR_ENTRY (d)) + continue; + +#ifdef HAVE_STRUCT_DIRENT_D_TYPE + /* If we shall match only directories use the information + provided by the dirent call if possible. */ + if ((flags & GLOB_ONLYDIR) + && d->d_type != DT_UNKNOWN && d->d_type != DT_DIR) + continue; +#endif + + name = d->d_name; + + if (fnmatch (pattern, name, fnm_flags) == 0) + { + struct globlink *new = (struct globlink *) + __alloca (sizeof (struct globlink)); + len = NAMLEN (d); + new->name = (char *) xmalloc (len + 1); + if (new->name == NULL) + goto memory_error; +#ifdef HAVE_MEMPCPY + *((char *) mempcpy ((__ptr_t) new->name, name, len)) + = '\0'; +#else + memcpy ((__ptr_t) new->name, name, len); + new->name[len] = '\0'; +#endif + new->next = names; + names = new; + ++nfound; + } + } + } + } + } + + if (nfound == 0 && (flags & GLOB_NOCHECK)) + { + size_t len = strlen (pattern); + nfound = 1; + names = (struct globlink *) __alloca (sizeof (struct globlink)); + names->next = NULL; + names->name = (char *) xmalloc (len + 1); + if (names->name == NULL) + goto memory_error; +#ifdef HAVE_MEMPCPY + *((char *) mempcpy (names->name, pattern, len)) = '\0'; +#else + memcpy (names->name, pattern, len); + names->name[len] = '\0'; +#endif + } + + if (nfound != 0) + { + pglob->gl_pathv + = (char **) xrealloc (pglob->gl_pathv, + (pglob->gl_pathc + + ((flags & GLOB_DOOFFS) ? pglob->gl_offs : 0) + + nfound + 1) * + sizeof (char *)); + if (pglob->gl_pathv == NULL) + goto memory_error; + + if (flags & GLOB_DOOFFS) + while (pglob->gl_pathc < pglob->gl_offs) + pglob->gl_pathv[pglob->gl_pathc++] = NULL; + + for (; names != NULL; names = names->next) + pglob->gl_pathv[pglob->gl_pathc++] = names->name; + pglob->gl_pathv[pglob->gl_pathc] = NULL; + + pglob->gl_flags = flags; + } + + save = errno; + if (stream != NULL) + { + if (flags & GLOB_ALTDIRFUNC) + (*pglob->gl_closedir) (stream); + else + closedir ((DIR *) stream); + } + __set_errno (save); + + return nfound == 0 ? GLOB_NOMATCH : 0; + + memory_error: + { + int save = errno; + if (flags & GLOB_ALTDIRFUNC) + (*pglob->gl_closedir) (stream); + else + closedir ((DIR *) stream); + __set_errno (save); + } + while (names != NULL) + { + if (names->name != NULL) + free ((__ptr_t) names->name); + names = names->next; + } + return GLOB_NOSPACE; +} diff --git a/misc/glob.h b/misc/glob.h new file mode 100644 index 0000000..a52d109 --- /dev/null +++ b/misc/glob.h @@ -0,0 +1,196 @@ +/* Copyright (C) 1991, 92, 95, 96, 97, 98, 2000 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _GLOB_H +#define _GLOB_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +#undef __ptr_t +#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 +# if !defined __GLIBC__ || !defined __P || !defined __PMT +# undef __P +# undef __PMT +# define __P(protos) protos +# define __PMT(protos) protos +# if !defined __GNUC__ || __GNUC__ < 2 +# undef __const +# define __const const +# endif +# endif +# define __ptr_t void * +#else /* Not C++ or ANSI C. */ +# undef __P +# undef __PMT +# define __P(protos) () +# define __PMT(protos) () +# undef __const +# define __const +# define __ptr_t char * +#endif /* C++ or ANSI C. */ + +/* We need `size_t' for the following definitions. */ +#if !defined(__size_t) && !defined(_BSD_SIZE_T_DEFINED_) +# if defined __GNUC__ && __GNUC__ >= 2 +typedef __SIZE_TYPE__ __size_t; +# ifdef _XOPEN_SOURCE +typedef __SIZE_TYPE__ size_t; +# endif +# else +/* This is a guess. */ +typedef unsigned long int __size_t; +# endif +#else +/* The GNU CC stddef.h version defines __size_t as empty. We need a real + definition. */ +# undef __size_t +# define __size_t size_t +#endif + +/* Bits set in the FLAGS argument to `glob'. */ +#define GLOB_ERR (1 << 0)/* Return on read errors. */ +#define GLOB_MARK (1 << 1)/* Append a slash to each name. */ +#define GLOB_NOSORT (1 << 2)/* Don't sort the names. */ +#define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */ +#define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */ +#define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */ +#define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ +#define GLOB_PERIOD (1 << 7)/* Leading `.' can be matched by metachars. */ + +#if (!defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _BSD_SOURCE \ + || defined _GNU_SOURCE) +# define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ +# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ +# define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ +# define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */ +# define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */ +# define GLOB_ONLYDIR (1 << 13)/* Match only directories. */ +# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error + if the user name is not available. */ +# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ + GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ + GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \ + GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK) +#else +# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ + GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ + GLOB_PERIOD) +#endif + +/* Error returns from `glob'. */ +#define GLOB_NOSPACE 1 /* Ran out of memory. */ +#define GLOB_ABORTED 2 /* Read error. */ +#define GLOB_NOMATCH 3 /* No matches found. */ +#define GLOB_NOSYS 4 /* Not implemented. */ +#ifdef _GNU_SOURCE +/* Previous versions of this file defined GLOB_ABEND instead of + GLOB_ABORTED. Provide a compatibility definition here. */ +# define GLOB_ABEND GLOB_ABORTED +#endif + +/* Structure describing a globbing run. */ +#if !defined _AMIGA && !defined VMS /* Buggy compiler. */ +struct stat; +#endif +typedef struct + { + __size_t gl_pathc; /* Count of paths matched by the pattern. */ + char **gl_pathv; /* List of matched pathnames. */ + __size_t gl_offs; /* Slots to reserve in `gl_pathv'. */ + int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ + + /* If the GLOB_ALTDIRFUNC flag is set, the following functions + are used instead of the normal file access functions. */ + void (*gl_closedir) __PMT ((void *)); + struct dirent *(*gl_readdir) __PMT ((void *)); + __ptr_t (*gl_opendir) __PMT ((__const char *)); + int (*gl_lstat) __PMT ((__const char *, struct stat *)); + int (*gl_stat) __PMT ((__const char *, struct stat *)); + } glob_t; + +#ifdef _LARGEFILE64_SOURCE +struct stat64; +typedef struct + { + __size_t gl_pathc; + char **gl_pathv; + __size_t gl_offs; + int gl_flags; + + /* If the GLOB_ALTDIRFUNC flag is set, the following functions + are used instead of the normal file access functions. */ + void (*gl_closedir) __PMT ((void *)); + struct dirent64 *(*gl_readdir) __PMT ((void *)); + __ptr_t (*gl_opendir) __PMT ((__const char *)); + int (*gl_lstat) __PMT ((__const char *, struct stat64 *)); + int (*gl_stat) __PMT ((__const char *, struct stat64 *)); + } glob64_t; +#endif + +/* Do glob searching for PATTERN, placing results in PGLOB. + The bits defined above may be set in FLAGS. + If a directory cannot be opened or read and ERRFUNC is not nil, + it is called with the pathname that caused the error, and the + `errno' value from the failing call; if it returns non-zero + `glob' returns GLOB_ABEND; if it returns zero, the error is ignored. + If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. + Otherwise, `glob' returns zero. */ +#if _FILE_OFFSET_BITS != 64 +extern int glob __P ((__const char *__pattern, int __flags, + int (*__errfunc) (__const char *, int), + glob_t *__pglob)); + +/* Free storage allocated in PGLOB by a previous `glob' call. */ +extern void globfree __P ((glob_t *__pglob)); +#else +# if __GNUC__ >= 2 +extern int glob __P ((__const char *__pattern, int __flags, + int (*__errfunc) (__const char *, int), + glob_t *__pglob)) __asm__ ("glob64"); + +extern void globfree __P ((glob_t *__pglob)) __asm__ ("globfree64"); +# else +# define glob glob64 +# define globfree globfree64 +# endif +#endif + +#ifdef _LARGEFILE64_SOURCE +extern int glob64 __P ((__const char *__pattern, int __flags, + int (*__errfunc) (__const char *, int), + glob64_t *__pglob)); + +extern void globfree64 __P ((glob64_t *__pglob)); +#endif + + +#ifdef _GNU_SOURCE +/* Return nonzero if PATTERN contains any metacharacters. + Metacharacters can be quoted with backslashes if QUOTE is nonzero. + + This function is not part of the interface specified by POSIX.2 + but several programs want to use it. */ +extern int glob_pattern_p __P ((__const char *__pattern, int __quote)); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* glob.h */ diff --git a/misc/stpcpy.c b/misc/stpcpy.c new file mode 100644 index 0000000..167d22d --- /dev/null +++ b/misc/stpcpy.c @@ -0,0 +1,51 @@ +/* Copyright (C) 1992, 1995, 1997 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to bug-glibc@prep.ai.mit.edu. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#undef __stpcpy +#undef stpcpy + +#ifndef weak_alias +# define __stpcpy stpcpy +#endif + +/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ +char * +__stpcpy (dest, src) + char *dest; + const char *src; +{ + register char *d = dest; + register const char *s = src; + + do + *d++ = *s; + while (*s++ != '\0'); + + return d - 1; +} +#ifdef weak_alias +weak_alias (__stpcpy, stpcpy) +#endif diff --git a/misc/stpncpy.c b/misc/stpncpy.c new file mode 100644 index 0000000..cb218e3 --- /dev/null +++ b/misc/stpncpy.c @@ -0,0 +1,101 @@ +/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to bug-glibc@prep.ai.mit.edu. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* This is almost copied from strncpy.c, written by Torbjorn Granlund. */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef _LIBC +# include +#else +# include +#endif + +#ifndef weak_alias +# define __stpncpy stpncpy +#endif + +/* Copy no more than N characters of SRC to DEST, returning the address of + the terminating '\0' in DEST, if any, or else DEST + N. */ +char * +__stpncpy (dest, src, n) + char *dest; + const char *src; + size_t n; +{ + char c; + char *s = dest; + + if (n >= 4) + { + size_t n4 = n >> 2; + + for (;;) + { + c = *src++; + *dest++ = c; + if (c == '\0') + break; + c = *src++; + *dest++ = c; + if (c == '\0') + break; + c = *src++; + *dest++ = c; + if (c == '\0') + break; + c = *src++; + *dest++ = c; + if (c == '\0') + break; + if (--n4 == 0) + goto last_chars; + } + n -= dest - s; + goto zero_fill; + } + + last_chars: + n &= 3; + if (n == 0) + return dest; + + for (;;) + { + c = *src++; + --n; + *dest++ = c; + if (c == '\0') + break; + if (n == 0) + return dest; + } + + zero_fill: + while (n-- > 0) + dest[n] = '\0'; + + return dest - 1; +} +#ifdef weak_alias +weak_alias (__stpncpy, stpncpy) +#endif diff --git a/missing b/missing new file mode 100755 index 0000000..28055d2 --- /dev/null +++ b/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 0000000..ef7e16f --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,161 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2006-05-11.19 + +# Original author: Noah Friedman +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' +IFS=" "" $nl" +errstatus=0 +dirmode= + +usage="\ +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to ." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" + exit $? + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --version) + echo "$0 $scriptversion" + exit $? + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error. This is a problem when calling mkinstalldirs +# from a parallel make. We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in + '') + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + test -d ./-p && rmdir ./-p + test -d ./--version && rmdir ./--version + fi + ;; + *) + if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && + test ! -d ./--version; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + else + # Clean up after NextStep and OpenStep mkdir. + for d in ./-m ./-p ./--version "./$dirmode"; + do + test -d $d && rmdir $d + done + fi + ;; +esac + +for file +do + case $file in + /*) pathcomp=/ ;; + *) pathcomp= ;; + esac + oIFS=$IFS + IFS=/ + set fnord $file + shift + IFS=$oIFS + + for d + do + test "x$d" = x && continue + + pathcomp=$pathcomp$d + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr= + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp=$pathcomp/ + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/packaging/Makefile b/packaging/Makefile new file mode 100644 index 0000000..f1f6486 --- /dev/null +++ b/packaging/Makefile @@ -0,0 +1,6 @@ +PKG_NAME := rpm +SPECFILE = $(addsuffix .spec, $(PKG_NAME)) +YAMLFILE = $(addsuffix .yaml, $(PKG_NAME)) + +include /usr/share/packaging-tools/Makefile.common + diff --git a/packaging/autodeps.diff b/packaging/autodeps.diff new file mode 100644 index 0000000..bbe7715 --- /dev/null +++ b/packaging/autodeps.diff @@ -0,0 +1,261 @@ +--- ./autodeps/linux.prov.orig 2011-07-12 11:28:13.000000000 +0000 ++++ ./autodeps/linux.prov 2011-07-18 16:47:39.000000000 +0000 +@@ -2,60 +2,72 @@ + + # This script reads filenames from STDIN and outputs any relevant provides + # information that needs to be included in the package. ++IFS=$'\n' ++filelist=($(cat)) + +-filelist=`sed "s/['\"]/\\\&/g"` +- +-solist=$(echo $filelist | grep "\\.so" | grep -v "^/lib/ld.so" | \ +- xargs file -L 2>/dev/null | grep "ELF.*shared object" | cut -d: -f1) ++solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \ ++ tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \ ++ cut -d: -f1)) + pythonlist= + tcllist= ++monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) + + # + # --- Alpha does not mark 64bit dependencies + case `uname -m` in +- alpha*) mark64="" ;; +- *) mark64="()(64bit)" ;; ++ alpha*) mark64=false ;; ++ *) mark64=true ;; + esac + + # + # --- Library sonames and weak symbol versions (from glibc). +-for f in $solist; do +- soname=$(objdump -p $f | awk '/SONAME/ {print $2}') ++for f in "${solist[@]}"; do ++ soname=$(objdump -p "$f" | awk '/SONAME/ {print $2}') ++ [ -n "$soname" -a -L "$f" ] && continue ++ [ -z "$soname" ] && soname="${f##*/}" + +- lib64=`if file -L $f 2>/dev/null | \ +- grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` +- if [ "$soname" != "" ]; then +- if [ ! -L $f ]; then +- echo $soname$lib64 +- objdump -p $f | awk ' +- BEGIN { START=0 ; } +- /Version definitions:/ { START=1; } +- /^[0-9]/ && (START==1) { print $4; } +- /^$/ { START=0; } +- ' | \ +- grep -v $soname | \ +- while read symbol ; do +- echo "$soname($symbol)`echo $lib64 | sed 's/()//'`" +- done +- fi ++ if $mark64 && file -L "$f" 2>/dev/null | grep "ELF 64-bit" >/dev/null; then ++ lib64="()(64bit)" slib64="(64bit)" + else +- echo ${f##*/}$lib64 ++ lib64= slib64= + fi ++ echo "$soname$lib64" ++ objdump -p "$f" | awk ' ++ BEGIN { START=0 ; } ++ /Version definitions:/ { START=1; } ++ /^[0-9]/ && (START==1) { print $4; } ++ /^$/ { START=0; } ++ ' | \ ++ while read symbol ; do ++ echo "$soname($symbol)$slib64" ++ done + done | sort -u + + # + # --- Perl modules. + [ -x /usr/lib/rpm/perl.prov ] && +- echo $filelist | tr '[:blank:]' \\n | grep '\.pm$' | /usr/lib/rpm/perl.prov | sort -u ++ printf "%s\n" "${filelist[@]}" | grep '\.pm$' | /usr/lib/rpm/perl.prov | sort -u + + # + # --- Python modules. + [ -x /usr/lib/rpm/python.prov -a -n "$pythonlist" ] && +- echo $pythonlist | tr '[:blank:]' \\n | /usr/lib/rpm/python.prov | sort -u ++ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.prov | sort -u + + # + # --- Tcl modules. + [ -x /usr/lib/rpm/tcl.prov -a -n "$tcllist" ] && +- echo $tcllist | tr '[:blank:]' \\n | /usr/lib/rpm/tcl.prov | sort -u ++ printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.prov | sort -u ++ ++# ++# --- Mono exes/dlls ++: ${MONO_PREFIX=/usr} ++if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then ++ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-provides || echo "WARNING: MONO RPM PROVIDES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2 ++fi ++ ++# ++# --- Kernel module exported symbols ++[ -x /usr/lib/rpm/find-provides.ksyms ] && ++ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@" + + exit 0 +--- ./autodeps/linux.req.orig 2011-07-15 09:32:41.000000000 +0000 ++++ ./autodeps/linux.req 2011-07-18 16:51:24.000000000 +0000 +@@ -18,20 +18,21 @@ fi + + # + # --- Grab the file manifest and classify files. +-#filelist=`sed "s/['\"]/\\\&/g"` +-filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"` +-exelist=`echo $filelist | xargs -r file | \ ++#filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"` ++filelist=($(grep -Ev '/usr/doc/|/usr/share/doc/')) ++exelist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \ + grep -Ev ":.* (commands|script)[, ]" | \ +- grep ":.*executable" | cut -d: -f1` +-scriptlist=`echo $filelist | xargs -r file | \ +- grep -E ":.* (commands|script)[, ]" | cut -d: -f1` +-liblist=`echo $filelist | xargs -r file | \ +- grep ":.*shared object" | cut -d : -f1` ++ grep ":.*executable" | cut -d: -f1)) ++scriptlist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \ ++ grep -E ":.* (commands|script)[, ]" | cut -d: -f1)) ++liblist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \ ++ grep ":.*shared object" | cut -d : -f1)) + +-interplist= +-perllist= +-pythonlist= +-tcllist= ++interplist=() ++perllist=() ++pythonlist=() ++tcllist=() ++monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) + + # + # --- Alpha does not mark 64bit dependencies +@@ -43,12 +44,12 @@ esac + if [ "$needed" -eq 0 ]; then + # + # --- Executable dependency sonames. +- for f in $exelist; do +- [ -r $f -a -x $f ] || continue +- lib64=`if file -L $f 2>/dev/null | \ ++ for f in "${exelist[@]}"; do ++ [ -r "$f" -a -x "$f" ] || continue ++ lib64=`if file -L "$f" 2>/dev/null | \ + grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` +- ldd $f | awk '/=>/ { +- if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) { ++ ldd "$f" | awk '/=>/ { ++ if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /linux-gate.so/) { + gsub(/'\''"/,"\\&",$1); + printf "%s'$lib64'\n", $1 + } +@@ -57,12 +58,12 @@ if [ "$needed" -eq 0 ]; then + + # + # --- Library dependency sonames. +- for f in $liblist; do +- [ -r $f ] || continue +- lib64=`if file -L $f 2>/dev/null | \ ++ for f in "${liblist[@]}"; do ++ [ -r "$f" ] || continue ++ lib64=`if file -L "$f" 2>/dev/null | \ + grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` +- ldd $f | awk '/=>/ { +- if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) { ++ ldd "$f" | awk '/=>/ { ++ if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /linux-gate.so/) { + gsub(/'\''"/,"\\&",$1); + printf "%s'$lib64'\n", $1 + } +@@ -72,30 +73,30 @@ fi + + # + # --- Script interpreters. +-for f in $scriptlist; do +- [ -r $f -a -x $f ] || continue +- interp=`head -n 1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1` +- interplist="$interplist $interp" ++for f in "${scriptlist[@]}"; do ++ [ -r "$f" -a -x "$f" ] || continue ++ interp=`head -n 1 "$f" | sed -ne 's/^\#\![ ]*//p' | cut -d" " -f1` ++ interplist=("${interplist[@]}" "$interp") + case $interp in +- */perl) perllist="$perllist $f" ;; ++ */perl) perllist=("${perllist[@]}" "$f") ;; + esac + done +-[ -n "$interplist" ] && { echo "$interplist" | tr '[:blank:]' \\n | sort -u ; } ++[ -n "$interplist" ] && { printf "%s\n" "${interplist[@]}" | sort -u ; } + + # + # --- Add perl module files to perllist. +-for f in $filelist; do +- [ -r $f -a "${f%.pm}" != "${f}" ] && perllist="$perllist $f" ++for f in "${filelist[@]}"; do ++ [ -r "$f" -a "${f%.pm}" != "${f}" ] && perllist=("${perllist[@]}" "$f") + done + + # + # --- Weak symbol versions (from glibc). + [ -n "$mark64" ] && mark64="(64bit)" +-for f in $liblist $exelist ; do +- [ -r $f ] || continue +- lib64=`if file -L $f 2>/dev/null | \ ++for f in "${liblist[@]}" "${exelist[@]}" ; do ++ [ -r "$f" ] || continue ++ lib64=`if file -L "$f" 2>/dev/null | \ + grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` +- objdump -p $f | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; } ++ objdump -p "$f" | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; } + /^$/ { START=0; } + /^Dynamic Section:$/ { START=1; } + (START==1) && /NEEDED/ { +@@ -112,7 +113,7 @@ for f in $liblist $exelist ; do + sub(/:/, "", $3); + LIBNAME=$3; + } +- (START==2) && (LIBNAME!="") && ($4!="") && (($4~/^GLIBC_*/) || ($4~/^GCC_*/)) { ++ (START==2) && (LIBNAME!="") && ($4!="") { + print LIBNAME "(" $4 ")'$lib64'"; + } + ' +@@ -120,17 +121,29 @@ done | sort -u + + # + # --- Perl modules. +-[ -x /usr/lib/rpm/perl.req -a -n "$perllist" ] && \ +- echo $perllist | tr '[:blank:]' \\n | /usr/lib/rpm/perl.req | sort -u ++#[ -x /usr/lib/rpm/perl.req -a -n "$perllist" ] && \ ++# printf "%s\n" "${perllist[@]}" | /usr/lib/rpm/perl.req | sort -u + + # + # --- Python modules. + [ -x /usr/lib/rpm/python.req -a -n "$pythonlist" ] && \ +- echo $pythonlist | tr '[:blank:]' \\n | /usr/lib/rpm/python.req | sort -u ++ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.req | sort -u + + # + # --- Tcl modules. + [ -x /usr/lib/rpm/tcl.req -a -n "$tcllist" ] && \ +- echo $tcllist | tr '[:blank:]' \\n | /usr/lib/rpm/tcl.req | sort -u ++ printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.req | sort -u ++ ++# ++# --- Mono exes/dlls ++: ${MONO_PREFIX=/usr} ++if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then ++ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-requires || echo "WARNING: MONO RPM REQUIRES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2 ++fi ++ ++# ++# --- Kernel module imported symbols ++[ -x ${0%/*}/find-requires.ksyms ] && ++ printf "%s\n" "${filelist[@]}" | ${0%/*}/find-requires.ksyms "$@" + + exit 0 diff --git a/packaging/beecrypt-4.1.2.diff b/packaging/beecrypt-4.1.2.diff new file mode 100644 index 0000000..6f9c261 --- /dev/null +++ b/packaging/beecrypt-4.1.2.diff @@ -0,0 +1,46 @@ +--- beecrypt-4.1.2/Makefile.am.orig 2004-12-22 07:06:31.000000000 +0000 ++++ beecrypt-4.1.2/Makefile.am 2006-11-24 14:08:27.000000000 +0000 +@@ -49,7 +49,7 @@ libaltdir=$(prefix)/lib@LIBALT@ + + libalt_LTLIBRARIES = libbeecrypt.la + +-libbeecrypt_la_SOURCES = aes.c base64.c beecrypt.c blockmode.c blockpad.c blowfish.c dhaes.c dldp.c dlkp.c dlpk.c dlsvdp-dh.c dsa.c elgamal.c endianness.c entropy.c fips186.c hmac.c hmacmd5.c hmacsha1.c hmacsha256.c md5.c hmacsha384.c hmacsha512.c memchunk.c mp.c mpbarrett.c mpnumber.c mpprime.c mtprng.c pkcs1.c pkcs12.c rsa.c rsakp.c rsapk.c sha1.c sha256.c sha384.c sha512.c sha_k.c timestamp.c cppglue.cxx ++libbeecrypt_la_SOURCES = aes.c base64.c beecrypt.c blockmode.c blockpad.c blowfish.c dhaes.c dldp.c dlkp.c dlpk.c dlsvdp-dh.c dsa.c elgamal.c endianness.c entropy.c fips186.c hmac.c hmacmd5.c hmacsha1.c hmacsha256.c md5.c hmacsha384.c hmacsha512.c memchunk.c mp.c mpbarrett.c mpnumber.c mpprime.c mtprng.c pkcs1.c pkcs12.c rsa.c rsakp.c rsapk.c sha1.c sha256.c sha384.c sha512.c sha_k.c timestamp.c + libbeecrypt_la_DEPENDENCIES = $(BEECRYPT_OBJECTS) + libbeecrypt_la_LIBADD = aesopt.lo blowfishopt.lo mpopt.lo sha1opt.lo + libbeecrypt_la_LDFLAGS = -no-undefined -version-info $(LIBBEECRYPT_LT_CURRENT):$(LIBBEECRYPT_LT_REVISION):$(LIBBEECRYPT_LT_AGE) +@@ -62,5 +62,11 @@ EXTRA_DIST = BENCHMARKS BUGS CONTRIBUTOR + + DISTCLEANFILES = mpopt.s aesopt.s blowfishopt.s sha1opt.s + ++BUILT_SOURCES = listobjs ++ ++.PHONY: listobjs ++listobjs: ++ @echo $(libbeecrypt_la_OBJECTS) $(libbeecrypt_la_LIBADD) > $@ ++ + bench: + (cd tests && $(MAKE) $(AM_MAKEFLAGS) bench) +--- beecrypt-4.1.2/base64.c.orig 2004-12-19 20:21:04.000000000 +0000 ++++ beecrypt-4.1.2/base64.c 2006-11-24 14:08:27.000000000 +0000 +@@ -253,7 +253,6 @@ char* b64encode(const void* data, size_t + unsigned c; + + if (s == NULL) return NULL; +- if (*s == '\0') return calloc(1, sizeof(*t)); + + if (ns == 0) ns = strlen((const char*) s); + nt = ((ns + 2) / 3) * 4; +--- beecrypt-4.1.2/c++/io/DataOutputStream.cxx.orig 2004-11-04 12:38:15.000000000 +0000 ++++ beecrypt-4.1.2/c++/io/DataOutputStream.cxx 2006-11-24 14:09:35.000000000 +0000 +@@ -126,8 +126,8 @@ void DataOutputStream::writeLong(javalon + void DataOutputStream::writeChar(javaint v) throw (IOException) + { + _lock.lock(); +- out.write((v >> 8) && 0xff); +- out.write((v ) && 0xff); ++ out.write((v >> 8) & 0xff); ++ out.write((v ) & 0xff); + written += 2; + _lock.unlock(); + } diff --git a/packaging/beecrypt-4.1.2.tar.bz2 b/packaging/beecrypt-4.1.2.tar.bz2 new file mode 100644 index 0000000..4a839bc Binary files /dev/null and b/packaging/beecrypt-4.1.2.tar.bz2 differ diff --git a/packaging/build_pack_4.9.1_fix.patch b/packaging/build_pack_4.9.1_fix.patch new file mode 100644 index 0000000..15eac53 --- /dev/null +++ b/packaging/build_pack_4.9.1_fix.patch @@ -0,0 +1,39 @@ +From 312524af520d725d65722006c88b75ac14d37ec4 Mon Sep 17 00:00:00 2001 +From: Elena, Reshetova +Date: Mon, 20 Feb 2012 15:44:34 +0200 +Subject: [PATCH] Fix for build_pack functionality + +--- + build/pack.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/build/pack.c b/build/pack.c +index 981a03e..34e260d 100644 +--- a/build/pack.c ++++ b/build/pack.c +@@ -48,8 +48,10 @@ static rpmRC cpio_doio(FD_t fdo, Header h, CSA_t csa, + int xx, i; + + { char *fmode = rpmExpand(fmodeMacro, NULL); +- if (!(fmode && fmode[0] == 'w')) ++ if (!(fmode && fmode[0] == 'w')) { ++ if (fmode) free(fmode); + fmode = xstrdup("w9.gzdio"); ++ } + (void) Fflush(fdo); + cfd = Fdopen(fdDup(Fileno(fdo)), fmode); + fmode = _free(fmode); +@@ -142,9 +144,9 @@ static StringBuf addFileToTagAux(rpmSpec spec, + } + appendStringBuf(sb, buf); + } +- (void) fclose(f); + + exit: ++ if (f) fclose(f); + free(fn); + + return sb; +-- +1.7.4.1 + diff --git a/packaging/buildidprov.diff b/packaging/buildidprov.diff new file mode 100644 index 0000000..6674d50 --- /dev/null +++ b/packaging/buildidprov.diff @@ -0,0 +1,54 @@ +From: Jan Blunck +Subject: Let debuginfo packages provide the build-id + +This patch lets debuginfo packages provide build-id like follows: + + debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517 + +Users can therefore ask zypper to install the correct debuginfo package with: + + zypper install -C "debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517" + +Index: autodeps/linux.prov +=================================================================== +--- autodeps/linux.prov.orig ++++ autodeps/linux.prov +@@ -5,6 +5,9 @@ + IFS=$'\n' + filelist=($(cat)) + ++debuginfolist=($(printf "%s\n" "${filelist[@]}" | grep "/usr/lib/debug/")) ++filelist=($(printf "%s\n" "${filelist[@]}" | grep -v "/usr/lib/debug/")) ++ + solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \ + tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \ + cut -d: -f1)) +@@ -71,6 +74,11 @@ done | sort -u + printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u + + # ++# --- debuginfo files ++[ -x /usr/lib/rpm/debuginfo.prov -a -n "$debuginfolist" ] && ++ printf "%s\n" "${debuginfolist[@]}" | /usr/lib/rpm/debuginfo.prov | sort -u ++ ++# + # --- Mono exes/dlls + : ${MONO_PREFIX=/usr} + if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then +Index: scripts/debuginfo.prov +=================================================================== +--- /dev/null ++++ scripts/debuginfo.prov +@@ -0,0 +1,12 @@ ++#!/bin/sh ++ ++while read instfile ; do ++ case $instfile in ++ */usr/lib/debug/.build-id/*.debug) ++ if [ -f "$instfile" ] ; then ++ BUILDID=$(echo $instfile | sed -ne 's|.*/usr/lib/debug/.build-id/\([0-9a-f]*\)/\([0-9a-f]*\)\.debug|\1\2|p') ++ echo "debuginfo(build-id) = $BUILDID" ++ fi ++ ;; ++ esac ++done diff --git a/packaging/db-4.8.30.tar.gz b/packaging/db-4.8.30.tar.gz new file mode 100644 index 0000000..21a743f Binary files /dev/null and b/packaging/db-4.8.30.tar.gz differ diff --git a/packaging/db.diff b/packaging/db.diff new file mode 100644 index 0000000..dbfb293 --- /dev/null +++ b/packaging/db.diff @@ -0,0 +1,82 @@ +--- db/db/db.c.orig 2010-04-12 20:25:22.000000000 +0000 ++++ db/db/db.c 2011-05-12 11:38:59.000000000 +0000 +@@ -646,6 +646,8 @@ __env_mpool(dbp, fname, flags) + MAKE_INMEM(dbp); + return (ret); + } ++ if (LF_ISSET(DB_NOFSYNC) && mpf->mfp) ++ F_SET(mpf->mfp, MP_NOFSYNC); + + /* + * Set the open flag. We use it to mean that the dbp has gone +--- db/db/db_iface.c.orig 2010-04-12 20:25:22.000000000 +0000 ++++ db/db/db_iface.c 2011-05-12 11:21:32.000000000 +0000 +@@ -1230,6 +1230,7 @@ __db_open_arg(dbp, txn, fname, dname, ty + #define OKFLAGS \ + (DB_AUTO_COMMIT | DB_CREATE | DB_EXCL | DB_FCNTL_LOCKING | \ + DB_MULTIVERSION | DB_NOMMAP | DB_NO_AUTO_COMMIT | DB_RDONLY | \ ++ DB_NOFSYNC | \ + DB_RDWRMASTER | DB_READ_UNCOMMITTED | DB_THREAD | DB_TRUNCATE) + if ((ret = __db_fchk(env, "DB->open", flags, OKFLAGS)) != 0) + return (ret); +--- db/dbinc/mp.h.orig 2010-04-12 20:25:22.000000000 +0000 ++++ db/dbinc/mp.h 2011-05-12 12:01:32.000000000 +0000 +@@ -467,6 +467,7 @@ struct __mpoolfile { + #define MP_FAKE_UOC 0x080 /* Unlink_on_close field: fake flag. */ + #define MP_NOT_DURABLE 0x100 /* File is not durable. */ + #define MP_TEMP 0x200 /* Backing file is a temporary. */ ++#define MP_NOFSYNC 0x400 /* Don't fsync */ + u_int32_t flags; + }; + +--- db/dbinc_auto/api_flags.in.orig 2011-05-12 11:40:57.000000000 +0000 ++++ db/dbinc_auto/api_flags.in 2011-05-12 11:55:10.000000000 +0000 +@@ -83,6 +83,7 @@ + #define DB_NOORDERCHK 0x00000002 + #define DB_NOPANIC 0x00000800 + #define DB_NO_AUTO_COMMIT 0x00001000 ++#define DB_NOFSYNC 0x00040000 + #define DB_ODDFILESIZE 0x00000080 + #define DB_ORDERCHKONLY 0x00000004 + #define DB_OVERWRITE 0x00001000 +--- db/dist/s_config.orig 2010-04-12 20:25:23.000000000 +0000 ++++ db/dist/s_config 2011-05-12 12:00:34.000000000 +0000 +@@ -8,7 +8,8 @@ trap 'rm -f aclocal.m4 ; exit 0' 0 1 2 3 + . ./RELEASE + + echo "autoconf: building aclocal.m4..." +-cat aclocal/*.m4 aclocal_java/*.m4 > aclocal.m4 ++cat aclocal/*.m4 aclocal_java/*.m4 > acinclude.m4 ++aclocal + + echo "autoconf: running autoheader to build config.hin..." + rm -f config.hin +--- db/mp/mp_sync.c.orig 2010-04-12 20:25:34.000000000 +0000 ++++ db/mp/mp_sync.c 2011-05-12 11:36:58.000000000 +0000 +@@ -578,7 +578,7 @@ done: /* + if (ret == 0 && required_write) { + if (dbmfp == NULL) + ret = __memp_sync_files(env); +- else ++ else if (!F_ISSET(dbmfp->mfp, MP_NOFSYNC)) + ret = __os_fsync(env, dbmfp->fhp); + } + +@@ -665,7 +665,7 @@ __memp_sync_file(env, mfp, argp, countp, + "%s: unable to flush", (char *) + R_ADDR(dbmp->reginfo, mfp->path_off)); + } +- } else ++ } else if (!F_ISSET(dbmfp->mfp, MP_NOFSYNC)) + ret = __os_fsync(env, dbmfp->fhp); + + /* +@@ -801,6 +801,8 @@ __memp_mf_sync(dbmp, mfp, locked) + COMPQUIET(hp, NULL); + env = dbmp->env; + ++ if (F_ISSET(mfp, MP_NOFSYNC)) ++ return 0; + /* + * We need to be holding the hash lock: we're using the path name + * and __memp_nameop might try and rename the file. diff --git a/packaging/debugsource-package.diff b/packaging/debugsource-package.diff new file mode 100644 index 0000000..f8e2dfe --- /dev/null +++ b/packaging/debugsource-package.diff @@ -0,0 +1,73 @@ +Subject: Split sources for debugging into separate -debugsource package + +At the moment the -debuginfo package also include the sources where used to +build the binary. The patches moves them into a separate package -debugsource. + +Index: macros.in +=================================================================== +--- macros.in.orig ++++ macros.in +@@ -180,15 +180,27 @@ + %debug_package \ + %ifnarch noarch\ + %global __debug_package 1\ +-%package debug\ ++%package debuginfo\ + Summary: Debug information for package %{name}\ + Group: Development/Debug\ + AutoReqProv: 0\ +-%description debug\ ++%description debuginfo\ + This package provides debug information for package %{name}.\ + Debug information is useful when developing applications that use this\ + package or when debugging this package.\ +-%files debug -f debugfiles.list\ ++%files debuginfo -f debugfiles.list\ ++%defattr(-,root,root)\ ++\ ++%package debugsource\ ++Summary: Debug sources for package %{name}\ ++Group: Development/Debug\ ++AutoReqProv: 0\ ++Requires: %{name}-debuginfo = %{version}-%{release}\ ++%description debugsource\ ++This package provides debug sources for package %{name}.\ ++Debug sources are useful when developing applications that use this\ ++package or when debugging this package.\ ++%files debugsource -f debugsources.list\ + %defattr(-,root,root)\ + %endif\ + %{nil} +Index: scripts/find-debuginfo.sh +=================================================================== +--- scripts/find-debuginfo.sh.orig ++++ scripts/find-debuginfo.sh +@@ -187,8 +187,8 @@ set -o pipefail + strict_error=ERROR + $strict || strict_error=WARNING + +-# Strip ELF binaries +-find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z | ++# Strip ELF binaries (and no static libraries) ++find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) ! -name "*.a" -print0 | sort -z | + xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' | + while read nlinks inum f; do + case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in +@@ -300,10 +300,16 @@ if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o - + + (cd "${RPM_BUILD_ROOT}/usr" + test ! -d lib/debug || find lib/debug ! -type d +- test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1 + ) | sed 's,^,/usr/,' >> "$LISTFILE" + fi + ++: > "$SOURCEFILE" ++if [ -d "${RPM_BUILD_ROOT}/usr/src" ]; then ++ (cd "${RPM_BUILD_ROOT}/usr" ++ test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1 ++ ) | sed 's,^,/usr/,' >> "$SOURCEFILE" ++fi ++ + # Append to $1 only the lines from stdin not already in the file. + append_uniq() + { diff --git a/packaging/debugsubpkg.diff b/packaging/debugsubpkg.diff new file mode 100644 index 0000000..3545fdb --- /dev/null +++ b/packaging/debugsubpkg.diff @@ -0,0 +1,321 @@ +Create a debuginfo package for each subpackage. + +Index: build/files.c +=================================================================== +--- build/files.c.orig ++++ build/files.c +@@ -20,6 +20,10 @@ + #include /* rpmDoDigest() */ + #include + ++#if HAVE_GELF_H ++#include ++#endif ++ + #include "rpmio/rpmio_internal.h" /* XXX rpmioSlurp */ + #include "rpmio/base64.h" + #include "misc/fts.h" +@@ -2105,13 +2109,237 @@ exit: + return rc; + } + ++#if HAVE_GELF_H && HAVE_LIBELF ++/* Query the build-id from the ELF file NAME and store it in the newly ++ allocated *build_id array of size *build_id_size. Returns -1 on ++ error. */ ++ ++int ++getELFBuildId (const char *name, ++ unsigned char **id, size_t *id_size) ++{ ++ int fd, i; ++ Elf *elf; ++ GElf_Ehdr ehdr; ++ Elf_Data *build_id = NULL; ++ size_t build_id_offset = 0, build_id_size = 0; ++ ++ /* Now query the build-id of the file and add the ++ corresponding links in the .build-id tree. ++ The following code is based on tools/debugedit.c. */ ++ fd = open (name, O_RDONLY); ++ if (fd < 0) ++ return -1; ++ elf = elf_begin (fd, ELF_C_READ_MMAP, NULL); ++ if (elf == NULL) ++ { ++ fprintf (stderr, "cannot open ELF file: %s", ++ elf_errmsg (-1)); ++ close (fd); ++ return -1; ++ } ++ if (elf_kind (elf) != ELF_K_ELF ++ || gelf_getehdr (elf, &ehdr) == NULL ++ || (ehdr.e_type != ET_DYN ++ && ehdr.e_type != ET_EXEC ++ && ehdr.e_type != ET_REL)) ++ { ++ elf_end (elf); ++ close (fd); ++ return -1; ++ } ++ for (i = 0; i < ehdr.e_shnum; ++i) ++ { ++ Elf_Scn *s = elf_getscn (elf, i); ++ GElf_Shdr shdr; ++ Elf_Data *data; ++ Elf32_Nhdr nh; ++ Elf_Data dst = ++ { ++ .d_version = EV_CURRENT, .d_type = ELF_T_NHDR, ++ .d_buf = &nh, .d_size = sizeof nh ++ }; ++ Elf_Data src = dst; ++ ++ gelf_getshdr (s, &shdr); ++ if (shdr.sh_type != SHT_NOTE ++ || !(shdr.sh_flags & SHF_ALLOC)) ++ continue; ++ ++ /* Look for a build-ID note here. */ ++ data = elf_rawdata (s, NULL); ++ src.d_buf = data->d_buf; ++ assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr)); ++ while (data->d_buf + data->d_size - src.d_buf > (int) sizeof nh ++ && elf32_xlatetom (&dst, &src, ehdr.e_ident[EI_DATA])) ++ { ++ Elf32_Word len = sizeof nh + nh.n_namesz; ++ len = (len + 3) & ~3; ++ ++ if (nh.n_namesz == sizeof "GNU" && nh.n_type == 3 ++ && !memcmp (src.d_buf + sizeof nh, "GNU", sizeof "GNU")) ++ { ++ build_id = data; ++ build_id_offset = src.d_buf + len - data->d_buf; ++ build_id_size = nh.n_descsz; ++ break; ++ } ++ ++ len += nh.n_descsz; ++ len = (len + 3) & ~3; ++ src.d_buf += len; ++ } ++ ++ if (build_id != NULL) ++ break; ++ } ++ ++ if (build_id == NULL) ++ return -1; ++ ++ *id = malloc (build_id_size); ++ *id_size = build_id_size; ++ memcpy (*id, build_id->d_buf + build_id_offset, build_id_size); ++ ++ elf_end (elf); ++ close (fd); ++ ++ return 0; ++} ++ ++ ++static rpmTag copyTagsForDebug[] = { ++ RPMTAG_EPOCH, ++ RPMTAG_VERSION, ++ RPMTAG_RELEASE, ++ RPMTAG_LICENSE, ++ RPMTAG_PACKAGER, ++ RPMTAG_DISTRIBUTION, ++ RPMTAG_DISTURL, ++ RPMTAG_VENDOR, ++ RPMTAG_ICON, ++ RPMTAG_URL, ++ RPMTAG_CHANGELOGTIME, ++ RPMTAG_CHANGELOGNAME, ++ RPMTAG_CHANGELOGTEXT, ++ RPMTAG_PREFIXES, ++ RPMTAG_RHNPLATFORM, ++ RPMTAG_OS, ++ RPMTAG_DISTTAG, ++ RPMTAG_CVSID, ++ RPMTAG_ARCH, ++ 0 ++}; ++ ++static void addDebuginfoPackage(rpmSpec spec, Package pkg, char *buildroot) ++{ ++ const char *a; ++ ++ elf_version(EV_CURRENT); ++ a = headerGetString(pkg->header, RPMTAG_ARCH); ++ if (strcmp(a, "noarch") != 0 && strcmp(a, "src") != 0 && strcmp(a, "nosrc") != 0) ++ { ++ Package dbg; ++ rpmfi fi = pkg->cpioList; ++ char tmp[1024]; ++ const char *name; ++ ARGV_t files = NULL; ++ int seen_build_id = 0; ++ ++ /* Check if the current package has files with debug info ++ and record them. */ ++ fi = rpmfiInit (fi, 0); ++ while (rpmfiNext (fi) >= 0) ++ { ++ const char *base; ++ int i; ++ unsigned char *build_id; ++ size_t build_id_size = 0; ++ struct stat sbuf; ++ ++ name = rpmfiFN (fi); ++ /* Skip leading buildroot. */ ++ base = name + strlen (buildroot); ++ /* Pre-pend %buildroot/usr/lib/debug and append .debug. */ ++ snprintf (tmp, 1024, "%s/usr/lib/debug%s.debug", ++ buildroot, base); ++ /* If that file exists we have debug information for it. */ ++ if (access (tmp, F_OK) != 0) ++ continue; ++ ++ /* Append the file list preamble. */ ++ if (!files) ++ { ++ argvAdd(&files, "%defattr(-,root,root)"); ++ argvAdd(&files, "%dir /usr/lib/debug"); ++ } ++ /* Add the files main debug-info file. */ ++ snprintf (tmp, 1024, "/usr/lib/debug/%s.debug", base); ++ argvAdd(&files, tmp); ++ ++ /* Do not bother to check build-ids for symbolic links. ++ We'll handle them for the link target. */ ++ if (lstat (name, &sbuf) == -1 ++ || S_ISLNK (sbuf.st_mode)) ++ continue; ++ ++ /* Try to gather the build-id from the binary. */ ++ if (getELFBuildId (name, &build_id, &build_id_size) == -1) ++ continue; ++ ++ /* If we see build-id links for the first time add the ++ directory. */ ++ if (!seen_build_id) ++ argvAdd(&files, "%dir /usr/lib/debug/.build-id"); ++ ++ /* From the build-id construct the two links pointing back ++ to the debug information file and the binary. */ ++ snprintf (tmp, 1024, "/usr/lib/debug/.build-id/%02x/", ++ build_id[0]); ++ for (i = 1; i < build_id_size; ++i) ++ sprintf (tmp + strlen (tmp), "%02x", build_id[i]); ++ argvAdd(&files, tmp); ++ sprintf (tmp + strlen (tmp), ".debug"); ++ argvAdd(&files, tmp); ++ ++ free (build_id); ++ } ++ ++ /* If there are debuginfo files for this package add a ++ new debuginfo package. */ ++ if (files) ++ { ++ dbg = newPackage (spec); ++ headerNVR (pkg->header, &name, NULL, NULL); ++ /* Set name, summary and group. */ ++ snprintf (tmp, 1024, "%s-debuginfo", name); ++ headerPutString(dbg->header, RPMTAG_NAME, tmp); ++ snprintf (tmp, 1024, "Debug information for package %s", name); ++ headerPutString(dbg->header, RPMTAG_SUMMARY, tmp); ++ snprintf (tmp, 1024, "This package provides debug information for package %s.\n" ++ "Debug information is useful when developing applications that use this\n" ++ "package or when debugging this package.", name); ++ headerPutString(dbg->header, RPMTAG_DESCRIPTION, tmp); ++ headerPutString(dbg->header, RPMTAG_GROUP, "Development/Debug"); ++ /* Inherit other tags from parent. */ ++ headerCopyTags (pkg->header, dbg->header, copyTagsForDebug); ++ ++ /* Build up the files list. */ ++ dbg->fileList = files; ++ } ++ } ++} ++#endif ++ + rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags, + int installSpecialDoc, int test) + { + Package pkg; + rpmRC rc = RPMRC_OK; ++ char *buildroot; + + check_fileList = newStringBuf(); ++ buildroot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL); + genSourceRpmName(spec); + + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { +@@ -2127,8 +2355,12 @@ rpmRC processBinaryFiles(rpmSpec spec, r + rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr); + free(nvr); + +- if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK || +- (rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK) ++ if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK) ++ goto exit; ++#if HAVE_GELF_H && HAVE_LIBELF ++ addDebuginfoPackage(spec, pkg, buildroot); ++#endif ++ if ((rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK) + goto exit; + + a = headerGetString(pkg->header, RPMTAG_ARCH); +Index: scripts/find-debuginfo.sh +=================================================================== +--- scripts/find-debuginfo.sh.orig ++++ scripts/find-debuginfo.sh +@@ -267,19 +267,11 @@ while read nlinks inum f; do + fi + done || exit + +-# For each symlink whose target has a .debug file, +-# make a .debug symlink to that file. +-find $RPM_BUILD_ROOT ! -path "${debugdir}/*" -type l -print | +-while read f +-do +- t=$(readlink -m "$f").debug +- f=${f#$RPM_BUILD_ROOT} +- t=${t#$RPM_BUILD_ROOT} +- if [ -f "$debugdir$t" ]; then +- echo "symlinked /usr/lib/debug$t to /usr/lib/debug${f}.debug" +- debug_link "/usr/lib/debug$t" "${f}.debug" +- fi +-done ++# We used to make a .debug symlink for each symlink whose target ++# has a .debug file to that file. This is not necessary because ++# the debuglink section contains only the destination of those links. ++# Creating those links anyway results in debuginfo packages for ++# devel packages just because of the .so symlinks in them. + + if [ -s "$SOURCEFILE" ]; then + mkdir -p "${RPM_BUILD_ROOT}/usr/src/debug" +Index: macros.in +=================================================================== +--- macros.in.orig ++++ macros.in +@@ -180,17 +180,6 @@ + %debug_package \ + %ifnarch noarch\ + %global __debug_package 1\ +-%package debuginfo\ +-Summary: Debug information for package %{name}\ +-Group: Development/Debug\ +-AutoReqProv: 0\ +-%description debuginfo\ +-This package provides debug information for package %{name}.\ +-Debug information is useful when developing applications that use this\ +-package or when debugging this package.\ +-%files debuginfo -f debugfiles.list\ +-%defattr(-,root,root)\ +-\ + %package debugsource\ + Summary: Debug sources for package %{name}\ + Group: Development/Debug\ diff --git a/packaging/device-sec-policy b/packaging/device-sec-policy new file mode 100644 index 0000000..626b905 --- /dev/null +++ b/packaging/device-sec-policy @@ -0,0 +1,48 @@ + + + + +mQENBE6MJTABCAC6pAFNW9tCbLQtgmwxzNf7ftSL5RrsjVTlPtpyeFLhxSmqmeHr +KB10C6Co1zYB/fW8zvGXU613g3WEo4SKlS2lnOVBxviet0qn58zwCQASbdFYtckk +thtkxiSInoKbj4n/Z+hHB9dvcyqcWqp2IFQEDDpxgP4KuzCvvj6W+e9EtYsdGt9P +ZHsVjIAe0w+j7Hs4Q7FYWD+mdQAjgBsLlc16Ci8EPYnvBL/xdbJ3Ryfi59tTdfGG +HnwpjM2J1WshooyvsOtHZU+T1nHtuegEzdRMVFo502Lkb60dJRsREE2iyPWFX2TE +ZdaQqUMmkPaROUlWhGBSWIKbOVARwWBn94KDABEBAAG0CXJvb3QudGVzdIkBPgQT +AQIAKAUCTowlMAIbAwUJA8JnAAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ +TTk+Qq2l7P210wgApKVLpdve9jDsy/y//gSAGvfA4fXFuGhHkH5+QW7L+QkUAo0Z +vv0KB0Pw5qZjV+k8jlq3Q3f/vcIEKxc40d0coa3m+bUlL2vy0+0gLSTiZ4MNFAk5 +LvJgEj+7ks75/qtJVWfCZeXo9NiugSoW9D+jNflmfstd8k2wT2ucH7IJHHzK1lGm +vZHXeJeSULRHiibVyK5cG+NH/1Akuxkgo2jOzqhLjhp4/UiJlyAD0k/J4ULfmWp8 +C9/sIhWBoS5OcrtMVQtUMTx85I2dEC/01hnfLUk8mi5VscLu3xQoJ9hNrMEgji6H +S+MmxcPGnVziEA0Z7VNN6DpuG/xZ1i9fgXXVfLkBDQROjCUwAQgA6fyD7eqaoah/ +za0X+Xv3o1y52UHmeHMmyzM/W4UlVsd01h7KzSHWyQKHi0i0pxRtUj+pkV+r+QjV +BiAowq2HVpyXsmre29PEgAuIVv6/pZjfZEWFKjSDsvdXpS+mT+J6LjRxYh7ZbGvv +SR3hMiMocWYENj13XDRw5USGhC0UxlmmMfjQfWJ6eHeQTiyZWW+CZUAJ2IbEkPVP +nBDH/fTuVMfOo4g0HwqUSJmwV47BPLec1ArSaPG1YgKX1Y+UYoNfUvo/ieiF59At +A8UbjQMzZggIfkvJsDL8U5n4ojFL8Rs/aMYuH76OlA4wuKPAnBSt+fVBnjaAAadf +FCy/CHZt/wARAQABiQElBBgBAgAPBQJOjCUwAhsMBQkDwmcAAAoJEE05PkKtpez9 +S7IH/j44MxOP6dAycQAreWVAzdMiw82DjP7c6jMxYZj8ss1x++iO5GW82qm0WJ6h +IOEdll+wBhPX0acKvE4KrlNzfsB2WzDRwOyiZfuSQI0J3Jrytj8zyCVKwHTsI8VC +RkOzaMYsEqmPc+ve+wxxcwWXC0EtoyhMRjRZlMy55IeJcEfM8bcE4wcsyotsura6 +o1fmU223Xj1k5xXxDvXalPUoXnhvsev7kMBnIQRac194qkSkTzVXGLGu5Ng7Bfxl +BMhf6RSk31+Q43ASbn4ralnswMhsHSatJIeasbHyvsTJzMnfEoSdpb8/dQI8KnHf +tRrR5cbqmVr8tkFjS/QK6TWfNMM= + + + + + + + + + + + + + + + + + + + diff --git a/packaging/disableperl.patch b/packaging/disableperl.patch new file mode 100644 index 0000000..f5937b0 --- /dev/null +++ b/packaging/disableperl.patch @@ -0,0 +1,18 @@ +Index: rpm-4.9.1/fileattrs/perl.attr +=================================================================== +--- rpm-4.9.1.orig/fileattrs/perl.attr ++++ rpm-4.9.1/fileattrs/perl.attr +@@ -1,3 +1,3 @@ +-%__perl_requires %{_rpmconfigdir}/perl.req ++#%__perl_requires %{_rpmconfigdir}/perl.req + %__perl_magic ^.*perl .*$ + %__perl_flags exeonly +Index: rpm-4.9.1/fileattrs/perllib.attr +=================================================================== +--- rpm-4.9.1.orig/fileattrs/perllib.attr ++++ rpm-4.9.1/fileattrs/perllib.attr +@@ -1,3 +1,3 @@ + %__perllib_provides %{_rpmconfigdir}/perl.prov +-%__perllib_requires %{_rpmconfigdir}/perl.req ++#%__perllib_requires %{_rpmconfigdir}/perl.req + %__perllib_magic ^Perl[[:digit:]] module source.* diff --git a/packaging/eu-strip.patch b/packaging/eu-strip.patch new file mode 100644 index 0000000..bacef74 --- /dev/null +++ b/packaging/eu-strip.patch @@ -0,0 +1,69 @@ +Index: rpm-4.9.1/scripts/find-debuginfo.sh +=================================================================== +--- rpm-4.9.1.orig/scripts/find-debuginfo.sh ++++ rpm-4.9.1/scripts/find-debuginfo.sh +@@ -95,13 +95,18 @@ debugdir="${RPM_BUILD_ROOT}/usr/lib/debu + + strip_to_debug() + { +- local g= + local r= + $strip_r && r=--reloc-debug-sections +- $strip_g && case "$(file -bi "$2")" in +- application/x-sharedlib*) g=-g ;; ++ case $2 in ++ *.ko) ++ # don't attempt to create a minimal backtrace binary for ++ # kernel modules as this just causes the stripping process ++ # to be skipped entirely ++ eu-strip --remove-comment $r -f "$1" "$2" || exit ++ ;; ++ *) ++ eu-strip --remove-comment -g -f "$1" "$2" || exit + esac +- eu-strip --remove-comment $r $g -f "$1" "$2" || exit + chmod 444 "$1" || exit + } + +@@ -229,8 +234,6 @@ while read nlinks inum f; do + fi + + echo "extracting debug info from $f" +- mode=$(stat -c %a "$f") +- chmod +w "$f" + id=$($(DEBUGEDIT=$(which debugedit 2>/dev/null); \ + echo ${DEBUGEDIT:-/usr/lib/rpm/debugedit}) -b "$RPM_BUILD_DIR" \ + -d /usr/src/debug -i -l "$SOURCEFILE" "$f") || exit +@@ -250,25 +253,13 @@ while read nlinks inum f; do + esac + + mkdir -p "${debugdn}" +- objcopy --only-keep-debug $f $debugfn || : +- ( +- shopt -s extglob +- strip_option="--strip-all" +- case "$f" in +- *.ko) +- strip_option="--strip-debug" ;; +- *$STRIP_KEEP_SYMTAB*) +- if test -n "$STRIP_KEEP_SYMTAB"; then +- strip_option="--strip-debug" +- fi +- ;; +- esac +- if test "$NO_DEBUGINFO_STRIP_DEBUG" = true ; then +- strip_option= +- fi +- objcopy --add-gnu-debuglink=$debugfn -R .comment -R .GCC.command.line $strip_option $f +- chmod $mode $f +- ) || : ++ if test -w "$f"; then ++ strip_to_debug "${debugfn}" "$f" ++ else ++ chmod u+w "$f" ++ strip_to_debug "${debugfn}" "$f" ++ chmod u-w "$f" ++ fi + + if [ -n "$id" ]; then + make_id_link "$id" "$dn/$(basename $f)" diff --git a/packaging/fileattrs.diff b/packaging/fileattrs.diff new file mode 100644 index 0000000..9b616ae --- /dev/null +++ b/packaging/fileattrs.diff @@ -0,0 +1,46 @@ +--- ./fileattrs/Makefile.am.orig 2011-07-12 11:28:13.000000000 +0000 ++++ ./fileattrs/Makefile.am 2011-07-18 17:29:11.000000000 +0000 +@@ -5,7 +5,8 @@ include $(top_srcdir)/rpm.am + fattrsdir = $(rpmconfigdir)/fileattrs + + fattrs_DATA = \ +- desktop.attr elf.attr font.attr libtool.attr perl.attr perllib.attr \ +- pkgconfig.attr python.attr ocaml.attr script.attr mono.attr ++ elf.attr font.attr libtool.attr perl.attr perllib.attr \ ++ pkgconfig.attr python.attr ocaml.attr script.attr mono.attr \ ++ debuginfo.attr elflib.attr firmware.attr ksyms.attr + + EXTRA_DIST = $(fattrs_DATA) +--- ./fileattrs/debuginfo.attr.orig 2011-07-18 17:29:11.000000000 +0000 ++++ ./fileattrs/debuginfo.attr 2011-07-18 17:29:11.000000000 +0000 +@@ -0,0 +1,2 @@ ++%__debuginfo_provides %{_rpmconfigdir}/debuginfo.prov ++%__debuginfo_path ^/usr/lib/debug/ +--- ./fileattrs/elf.attr.orig 2011-07-15 09:32:41.000000000 +0000 ++++ ./fileattrs/elf.attr 2011-07-18 17:31:52.000000000 +0000 +@@ -1,4 +1,5 @@ + %__elf_provides %{_rpmconfigdir}/elfdeps --provides %{?__filter_GLIBC_PRIVATE:--filter-private} + %__elf_requires %{_rpmconfigdir}/elfdeps --requires %{?__filter_GLIBC_PRIVATE:--filter-private} +-%__elf_magic ^(sticky )?ELF (32|64)-bit.*$ ++%__elf_magic ^(setuid )?(setgid )?(sticky )?ELF (32|64)-bit.*executable + %__elf_flags exeonly ++%__elf_exclude_path ^/usr/lib/debug/ +--- ./fileattrs/elflib.attr.orig 2011-07-18 17:29:11.000000000 +0000 ++++ ./fileattrs/elflib.attr 2011-07-18 17:32:28.000000000 +0000 +@@ -0,0 +1,4 @@ ++%__elflib_provides %{_rpmconfigdir}/elfdeps --assume-exec --provides %{?__filter_GLIBC_PRIVATE:--filter-private} ++%__elflib_requires %{_rpmconfigdir}/elfdeps --assume-exec --requires %{?__filter_GLIBC_PRIVATE:--filter-private} ++%__elflib_magic ^(setuid )?(setgid )?(sticky )?ELF (32|64)-bit.*shared object ++%__elflib_exclude_path ^/usr/lib/debug/ +--- ./fileattrs/firmware.attr.orig 2011-07-18 17:29:11.000000000 +0000 ++++ ./fileattrs/firmware.attr 2011-07-18 17:29:11.000000000 +0000 +@@ -0,0 +1,2 @@ ++%__firmware_provides %{_rpmconfigdir}/firmware.prov ++%__firmware_path /lib/firmware/ +--- ./fileattrs/ksyms.attr.orig 2011-07-18 17:29:11.000000000 +0000 ++++ ./fileattrs/ksyms.attr 2011-07-18 17:29:11.000000000 +0000 +@@ -0,0 +1,4 @@ ++%__ksyms_provides %{_rpmconfigdir}/find-provides.ksyms %name ++%__ksyms_requires %{_rpmconfigdir}/find-requires.ksyms %name ++%__ksyms_supplements %{_rpmconfigdir}/find-supplements.ksyms %name ++%__ksyms_path (/lib/modules/.*\.ko(\.gz)?)|(/boot/vmlinu[xz].*)$ diff --git a/packaging/find-docs.sh b/packaging/find-docs.sh new file mode 100644 index 0000000..c1dd130 --- /dev/null +++ b/packaging/find-docs.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +usage () { +cat << EOF +Usage: $0 TOP_DIR + +EOF +exit 1 +} + +if [ -z "$1" ] ; then usage +elif [ $1 = / ] ; then echo $0: expects non-/ argument for '$1' 1>&2 +elif [ ! -d $1 ] ; then + echo $0: $1: no such directory + exit 1 +else TOP_DIR="`echo $1|sed -e 's:/$::'`" +fi +shift + +DOC_NAME=documentation.list +touch $DOC_NAME + +find $TOP_DIR -type f -o -type l | sed ' +s:'"$TOP_DIR"':: +s:\(.*/man/man./.*\.[0-9]\):%doc \1: +s:\(.*/gtk-doc/html/.*\):%doc \1: +s:\(.*/info/.*\info.*\):%doc \1: +s:^\([^%].*\):: +/^$/d' >> $DOC_NAME + + +exit 0 diff --git a/packaging/finddebuginfo.diff b/packaging/finddebuginfo.diff new file mode 100644 index 0000000..3d1245e --- /dev/null +++ b/packaging/finddebuginfo.diff @@ -0,0 +1,119 @@ +--- ./scripts/find-debuginfo.sh.orig 2010-12-03 12:11:57.000000000 +0000 ++++ ./scripts/find-debuginfo.sh 2011-05-11 14:46:18.000000000 +0000 +@@ -127,6 +127,20 @@ debug_link() + link_relative "$t" "$l" "$RPM_BUILD_ROOT" + } + ++# Compare two binaries but ignore the .note.gnu.build-id section ++elfcmp() ++{ ++ local tmp1=$(mktemp -t ${1##*/}.XXXXXX) ++ local tmp2=$(mktemp -t ${2##*/}.XXXXXX) ++ ++ objcopy -R .note.gnu.build-id -R .gnu_debuglink $1 $tmp1 ++ objcopy -R .note.gnu.build-id -R .gnu_debuglink $2 $tmp2 ++ cmp -s $tmp1 $tmp2 ++ local res=$? ++ rm -f $tmp1 $tmp2 ++ return $res ++} ++ + # Make a build-id symlink for id $1 with suffix $3 to file $2. + make_id_link() + { +@@ -145,7 +159,7 @@ make_id_link() + local other=$(readlink -m "$root_idfile") + other=${other#$RPM_BUILD_ROOT} + if cmp -s "$root_idfile" "$RPM_BUILD_ROOT$file" || +- eu-elfcmp -q "$root_idfile" "$RPM_BUILD_ROOT$file" 2> /dev/null; then ++ elfcmp "$root_idfile" "$RPM_BUILD_ROOT$file" ; then + # Two copies. Maybe one has to be setuid or something. + echo >&2 "*** WARNING: identical binaries are copied, not linked:" + echo >&2 " $file" +@@ -174,12 +188,18 @@ strict_error=ERROR + $strict || strict_error=WARNING + + # Strip ELF binaries +-find "$RPM_BUILD_ROOT" ! -path "${debugdir}/*.debug" -type f \ +- \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \ +- -print | +-file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p' | +-xargs --no-run-if-empty stat -c '%h %D_%i %n' | ++find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z | ++xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' | + while read nlinks inum f; do ++ case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in ++ *debuglink*) continue ;; ++ *debug*) ;; ++ *gnu.version*) ++ echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!" ++ continue ++ ;; ++ *) continue ;; ++ esac + get_debugfn "$f" + [ -f "${debugfn}" ] && continue + +@@ -200,8 +220,11 @@ while read nlinks inum f; do + fi + + echo "extracting debug info from $f" +- id=$(/usr/lib/rpm/debugedit -b "$RPM_BUILD_DIR" -d /usr/src/debug \ +- -i -l "$SOURCEFILE" "$f") || exit ++ mode=$(stat -c %a "$f") ++ chmod +w "$f" ++ id=$($(DEBUGEDIT=$(which debugedit 2>/dev/null); \ ++ echo ${DEBUGEDIT:-/usr/lib/rpm/debugedit}) -b "$RPM_BUILD_DIR" \ ++ -d /usr/src/debug -i -l "$SOURCEFILE" "$f") || exit + if [ -z "$id" ]; then + echo >&2 "*** ${strict_error}: No build ID note found in $f" + $strict && exit 2 +@@ -218,13 +241,25 @@ while read nlinks inum f; do + esac + + mkdir -p "${debugdn}" +- if test -w "$f"; then +- strip_to_debug "${debugfn}" "$f" +- else +- chmod u+w "$f" +- strip_to_debug "${debugfn}" "$f" +- chmod u-w "$f" +- fi ++ objcopy --only-keep-debug $f $debugfn || : ++ ( ++ shopt -s extglob ++ strip_option="--strip-all" ++ case "$f" in ++ *.ko) ++ strip_option="--strip-debug" ;; ++ *$STRIP_KEEP_SYMTAB*) ++ if test -n "$STRIP_KEEP_SYMTAB"; then ++ strip_option="--strip-debug" ++ fi ++ ;; ++ esac ++ if test "$NO_DEBUGINFO_STRIP_DEBUG" = true ; then ++ strip_option= ++ fi ++ objcopy --add-gnu-debuglink=$debugfn -R .comment -R .GCC.command.line $strip_option $f ++ chmod $mode $f ++ ) || : + + if [ -n "$id" ]; then + make_id_link "$id" "$dn/$(basename $f)" +@@ -253,12 +288,14 @@ if [ -s "$SOURCEFILE" ]; then + # stupid cpio creates new directories in mode 0700, fixup + find "${RPM_BUILD_ROOT}/usr/src/debug" -type d -print0 | + xargs --no-run-if-empty -0 chmod a+rx ++ find "${RPM_BUILD_ROOT}/usr/src/debug" -type f -print0 | ++ xargs --no-run-if-empty -0 chmod a+r + fi + + if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o -d "${RPM_BUILD_ROOT}/usr/src" ]; then + ((nout > 0)) || + test ! -d "${RPM_BUILD_ROOT}/usr/lib" || +- (cd "${RPM_BUILD_ROOT}/usr/lib"; find debug -type d) | ++ (cd "${RPM_BUILD_ROOT}/usr/lib"; test ! -d debug || find debug -type d) | + sed 's,^,%dir /usr/lib/,' >> "$LISTFILE" + + (cd "${RPM_BUILD_ROOT}/usr" diff --git a/packaging/firmware.diff b/packaging/firmware.diff new file mode 100644 index 0000000..aa35bb3 --- /dev/null +++ b/packaging/firmware.diff @@ -0,0 +1,37 @@ +Index: autodeps/linux.prov +=================================================================== +--- autodeps/linux.prov.orig ++++ autodeps/linux.prov +@@ -12,6 +12,7 @@ pythonlist= + tcllist= + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) + mimetypelist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(desktop)\$")) ++firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/")) + + # + # --- Alpha does not mark 64bit dependencies +@@ -65,6 +66,11 @@ done | sort -u + printf "%s\n" "${mimetypelist[@]}" | /usr/lib/rpm/mimetypes.prov | sort -u + + # ++# --- firmware files ++[ -x /usr/lib/rpm/firmware.prov -a -n "$firmwarelist" ] && ++ printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u ++ ++# + # --- Mono exes/dlls + : ${MONO_PREFIX=/usr} + if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then +Index: scripts/firmware.prov +=================================================================== +--- /dev/null ++++ scripts/firmware.prov +@@ -0,0 +1,8 @@ ++#!/bin/sh ++# Add firmware files in /lib/firmware into RPM provides ++ ++while read instfile ; do ++ case $instfile in ++ */lib/firmware/*) test -f "$instfile" && echo "firmware(${instfile##*/lib/firmware/})" ;; ++ esac ++done diff --git a/packaging/fontprovides.diff b/packaging/fontprovides.diff new file mode 100644 index 0000000..a8ceade --- /dev/null +++ b/packaging/fontprovides.diff @@ -0,0 +1,50 @@ +--- ./autodeps/linux.prov.orig 2011-05-11 16:39:09.000000000 +0000 ++++ ./autodeps/linux.prov 2011-05-11 16:40:49.000000000 +0000 +@@ -16,6 +16,8 @@ tcllist= + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) + mimetypelist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(desktop)\$")) + firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/")) ++pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$')) ++fontlist=($(printf "%s\n" "${filelist[@]}" | egrep -i "/usr/share/fonts/.*\.(ttf|otf|pfa)$")) + + # + # --- Alpha does not mark 64bit dependencies +@@ -86,6 +88,16 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo + fi + + # ++# --- pkgconfig provides ++[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] && ++ printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -P | sort -u ++ ++# ++# --- font provides ++[ -x /usr/lib/rpm/fontconfig.prov -a -n "$fontlist" ] && ++ printf "%s\n" "${fontlist[@]}" | /usr/lib/rpm/fontconfig.prov | sort -u ++ ++# + # --- Kernel module exported symbols + [ -x /usr/lib/rpm/find-provides.ksyms ] && + printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@" +--- ./autodeps/linux.req.orig 2011-05-11 16:39:09.000000000 +0000 ++++ ./autodeps/linux.req 2011-05-11 16:40:49.000000000 +0000 +@@ -34,6 +34,7 @@ perllist=() + pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..')) + tcllist=() + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) ++pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$')) + + # + # --- Alpha does not mark 64bit dependencies +@@ -143,6 +144,11 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo + fi + + # ++# --- pkgconfig requires ++[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] && ++ printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -R | sort -u ++ ++# + # --- Kernel module imported symbols + [ -x ${0%/*}/find-requires.ksyms ] && + printf "%s\n" "${filelist[@]}" | ${0%/*}/find-requires.ksyms "$@" diff --git a/packaging/lib_rpmdb_4.9.1_fix.patch b/packaging/lib_rpmdb_4.9.1_fix.patch new file mode 100644 index 0000000..4d151b4 --- /dev/null +++ b/packaging/lib_rpmdb_4.9.1_fix.patch @@ -0,0 +1,78 @@ +From 653849e098fa3b8e30fc93e12a57fb75b958fa1a Mon Sep 17 00:00:00 2001 +From: Elena, Reshetova +Date: Mon, 20 Feb 2012 15:47:41 +0200 +Subject: [PATCH] Fix for lib rpmdb functionality + +--- + lib/rpmdb.c | 13 ++++++++----- + 1 files changed, 8 insertions(+), 5 deletions(-) + +diff --git a/lib/rpmdb.c b/lib/rpmdb.c +index 50bb6b1..74cbfef 100644 +--- a/lib/rpmdb.c ++++ b/lib/rpmdb.c +@@ -225,7 +225,7 @@ static inline void dbiGrowSet(dbiIndexSet set, unsigned int nrecs) + */ + static int dbt2set(dbiIndex dbi, DBT * data, dbiIndexSet * setp) + { +- int _dbbyteswapped = dbiByteSwapped(dbi); ++ int _dbbyteswapped; + const char * sdbir; + dbiIndexSet set; + unsigned int i; +@@ -239,6 +239,8 @@ static int dbt2set(dbiIndex dbi, DBT * data, dbiIndexSet * setp) + return 0; + } + ++ _dbbyteswapped = dbiByteSwapped(dbi); ++ + set = xcalloc(1, sizeof(*set)); + dbiGrowSet(set, data->size / itype); + set->count = data->size / itype; +@@ -288,7 +290,7 @@ static int dbt2set(dbiIndex dbi, DBT * data, dbiIndexSet * setp) + */ + static int set2dbt(dbiIndex dbi, DBT * data, dbiIndexSet set) + { +- int _dbbyteswapped = dbiByteSwapped(dbi); ++ int _dbbyteswapped; + char * tdbir; + unsigned int i; + dbiIndexType itype = dbiType(dbi); +@@ -303,6 +305,8 @@ static int set2dbt(dbiIndex dbi, DBT * data, dbiIndexSet set) + } + tdbir = data->data = xmalloc(data->size); + ++ _dbbyteswapped = dbiByteSwapped(dbi); ++ + switch (itype) { + default: + case DBI_SECONDARY: +@@ -1650,7 +1654,7 @@ static rpmRC miVerifyHeader(rpmdbMatchIterator mi, const void *uh, size_t uhlen) + return rpmrc; + + /* Don't bother re-checking a previously read header. */ +- if (mi->mi_db->db_checked) { ++ if (mi->mi_db && mi->mi_db->db_checked) { + if (intHashHasEntry(mi->mi_db->db_checked, mi->mi_offset)) + rpmrc = RPMRC_OK; + } +@@ -1686,6 +1690,7 @@ Header rpmdbNextIterator(rpmdbMatchIterator mi) + size_t keylen; + int rc; + int xx; ++ union _dbswap mi_offset; + + if (mi == NULL) + return NULL; +@@ -1711,8 +1716,6 @@ top: + uhlen = 0; + + do { +- union _dbswap mi_offset; +- + if (mi->mi_set) { + if (!(mi->mi_setx < mi->mi_set->count)) + return NULL; +-- +1.7.4.1 + diff --git a/packaging/libsymlink.attr b/packaging/libsymlink.attr new file mode 100644 index 0000000..8bb6404 --- /dev/null +++ b/packaging/libsymlink.attr @@ -0,0 +1,4 @@ +# Make libfoo.so symlinks require the soname-provide of the target library +%__libsymlink_requires %{_rpmconfigdir}/elfdeps --provides --soname-only +%__libsymlink_magic ^symbolic link to `.*lib.*\.so\..*'$ +%__libsymlink_exclude_path ^.*[[:digit:]]$ diff --git a/packaging/macros b/packaging/macros new file mode 100644 index 0000000..0592502 --- /dev/null +++ b/packaging/macros @@ -0,0 +1,312 @@ +# Per-platform rpm configuration file. + +#============================================================================== +# ---- per-platform macros. +# +%_vendor tizen +%_os linux +%_target_platform %{_target_cpu}-%{_vendor}-%{_target_os}%{?_gnu} + +###_enable_debug_packages 1 + +# Default fuzz level for %patch in spec file. +%_default_patch_fuzz 2 +%_enable_debug_packages 1 + +#============================================================================== +# ---- configure and makeinstall. +# +%configure \ + CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ + CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ + FFLAGS="${FFLAGS:-%optflags -I%_fmoddir}" ; export FFLAGS ; \ + ./configure --build=%{_build} --host=%{_host} \\\ + --target=%{_target_platform} \\\ + --program-prefix=%{?_program_prefix} \\\ + --prefix=%{_prefix} \\\ + --exec-prefix=%{_exec_prefix} \\\ + --bindir=%{_bindir} \\\ + --sbindir=%{_sbindir} \\\ + --sysconfdir=%{_sysconfdir} \\\ + --datadir=%{_datadir} \\\ + --includedir=%{_includedir} \\\ + --libdir=%{_libdir} \\\ + --libexecdir=%{_libexecdir} \\\ + --localstatedir=%{_localstatedir} \\\ + --sharedstatedir=%{_sharedstatedir} \\\ + --mandir=%{_mandir} \\\ + --infodir=%{_infodir} + + +%reconfigure \ + CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ + CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ + FFLAGS="${FFLAGS:-%optflags -I%_fmoddir}" ; export FFLAGS ; \ + autoreconf -v --install --force || exit 1 \ + ./configure --build=%{_build} --host=%{_host} \\\ + --target=%{_target_platform} \\\ + --program-prefix=%{?_program_prefix} \\\ + --prefix=%{_prefix} \\\ + --exec-prefix=%{_exec_prefix} \\\ + --bindir=%{_bindir} \\\ + --sbindir=%{_sbindir} \\\ + --sysconfdir=%{_sysconfdir} \\\ + --datadir=%{_datadir} \\\ + --includedir=%{_includedir} \\\ + --libdir=%{_libdir} \\\ + --libexecdir=%{_libexecdir} \\\ + --localstatedir=%{_localstatedir} \\\ + --sharedstatedir=%{_sharedstatedir} \\\ + --mandir=%{_mandir} \\\ + --infodir=%{_infodir} + +%autogen \ + CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ + CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ + FFLAGS="${FFLAGS:-%optflags -I%_fmoddir}" ; export FFLAGS ; \ + ./autogen.sh --build=%{_build} --host=%{_host} \\\ + --target=%{_target_platform} \\\ + --program-prefix=%{?_program_prefix} \\\ + --prefix=%{_prefix} \\\ + --exec-prefix=%{_exec_prefix} \\\ + --bindir=%{_bindir} \\\ + --sbindir=%{_sbindir} \\\ + --sysconfdir=%{_sysconfdir} \\\ + --datadir=%{_datadir} \\\ + --includedir=%{_includedir} \\\ + --libdir=%{_libdir} \\\ + --libexecdir=%{_libexecdir} \\\ + --localstatedir=%{_localstatedir} \\\ + --sharedstatedir=%{_sharedstatedir} \\\ + --mandir=%{_mandir} \\\ + --infodir=%{_infodir} + + +%makeinstall \ + %{__make} \\\ + prefix=%{?buildroot:%{buildroot}}%{_prefix} \\\ + exec_prefix=%{?buildroot:%{buildroot}}%{_exec_prefix} \\\ + bindir=%{?buildroot:%{buildroot}}%{_bindir} \\\ + sbindir=%{?buildroot:%{buildroot}}%{_sbindir} \\\ + sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir} \\\ + datadir=%{?buildroot:%{buildroot}}%{_datadir} \\\ + includedir=%{?buildroot:%{buildroot}}%{_includedir} \\\ + libdir=%{?buildroot:%{buildroot}}%{_libdir} \\\ + libexecdir=%{?buildroot:%{buildroot}}%{_libexecdir} \\\ + localstatedir=%{?buildroot:%{buildroot}}%{_localstatedir} \\\ + sharedstatedir=%{?buildroot:%{buildroot}}%{_sharedstatedir} \\\ + mandir=%{?buildroot:%{buildroot}}%{_mandir} \\\ + infodir=%{?buildroot:%{buildroot}}%{_infodir} \\\ + install + +%make_install \ + %{__make} \\\ + DESTDIR=%{?buildroot:%{buildroot}} \\\ + INSTALL_ROOT=%{?buildroot:%{buildroot}} \\\ + install \ + rm -f %{?buildroot:%{buildroot}}%{_infodir}/dir \ + find %{?buildroot:%{buildroot}} -regex ".*\\.la$" | xargs rm -f -- \ + %{!?keepstatic:find %{?buildroot:%{buildroot}} -regex ".*\\.a$" | xargs rm -f --} + +%_smp_mflags %([ -z "$RPM_BUILD_NCPUS" ] \\\ + && RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"; \\\ + [ "$RPM_BUILD_NCPUS" -gt 1 ] && echo "-j$RPM_BUILD_NCPUS") + + +%install_info(:-:) \ + ALL_ARGS=(%{**}) \ + NUM_ARGS=${#ALL_ARGS[@]} \ + if test -x sbin/install-info ; then \ + if test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \ + sbin/install-info "${ALL_ARGS[@]}" \ + fi \ + fi ; + +%install_info_delete(:-:) \ + ALL_ARGS=(%{**}) \ + NUM_ARGS=${#ALL_ARGS[@]} \ + if test -x sbin/install-info ; then \ + if ! test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \ + sbin/install-info --quiet --delete "${ALL_ARGS[@]}" \ + fi ; \ + fi ; + +#============================================================================== +# ---- Build policy macros. +# +#--------------------------------------------------------------------- +# Expanded at end of %install scriptlet. +# + +%__arch_install_post /usr/lib/rpm/check-buildroot + +%__os_install_post \ + /usr/lib/rpm//brp-compress \ + %{!?__debug_package:/usr/lib/rpm/brp-strip %{__strip}} \ + /usr/lib/rpm/brp-strip-static-archive %{__strip} \ + /usr/lib/rpm/brp-strip-comment-note %{__strip} %{__objdump} \ + /usr/lib/rpm/brp-python-bytecompile \ + /usr/lib/rpm/brp-python-hardlink \ + %{!?disable_docs_package:/usr/lib/rpm/tizen/find-docs.sh %{buildroot}} \ +%{nil} + +# /usr/lib/rpm/tizen/brp-implant-ident-static + +%__spec_install_post\ + %{?__debug_package:%{__debug_install_post}}\ + %{__arch_install_post}\ + %{__os_install_post}\ +%{nil} + + +%lang_package \ +%package locale \ +Summary: Translations and Locale for package %{name}\ +Group: Translations\ +AutoReqProv: 0\ +%description locale\ +This package provides translations for package %{name}.\ +%files locale -f %{name}.lang\ +%defattr(-,root,root,-)\ +%{nil} + + +%docs_package \ +%package docs \ +Summary: Documentation for package %{name}\ +Group: Documentation\ +AutoReqProv: 0\ +%description docs\ +This package provides documentation for package %{name}.\ +%files docs -f documentation.list\ +%defattr(-,root,root,-)\ +%{nil} + + + +# Bad hack to set $LANG to C during all RPM builds +%prep \ +%%prep\ +LANG=C\ +export LANG\ +unset DISPLAY\ +%{nil} + +%build %%build\ +LANG=C\ +export LANG\ +unset DISPLAY\ +CFLAGS="%optflags" ; export CFLAGS ; \ +CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ +FFLAGS="${FFLAGS:-%optflags -I%_fmoddir}" ; export FFLAGS ; \ +LD_AS_NEEDED=1; export LD_AS_NEEDED ; \ +%{nil} + +%install %{?_enable_debug_packages:%{?buildsubdir:%{debug_package}}}\ +%%install\ +LANG=C\ +export LANG\ +unset DISPLAY\ +rm -rf %{?buildroot:%{buildroot}} \ +mkdir -p %{?buildroot:%{buildroot}} \ +%{nil} + +%check %%check\ +unset DISPLAY\ +%{nil} + +%clean %%clean\ +rm -rf %{?buildroot:%{buildroot}} \ +%{nil} + +%find_lang /usr/lib/rpm/find-lang.sh %{buildroot} +%find_docs /usr/lib/rpm/tizen/find-docs.sh %{buildroot} + +# +# use internal dep generator? +%_use_internal_dependency_generator 1 + +# +# Should missing %doc files terminate a build? +%_missing_doc_files_terminate_build 1 +# +# Should missing buildids terminate a build? +%_missing_build_ids_terminate_build 1 + +# +# Should unpackaged files in a build root terminate a build? +%_unpackaged_files_terminate_build 1 + +%__global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security + +# Disable lookups +%_hkp_keyserver %{nil} + + +#============================================================================== +# ---- default icons directories as per the icon theme freedesktop spec + +%_iconstheme hicolor +%_iconsbasedir %{_datadir}/icons/%{_iconstheme} + +# +# The following is a bit heavy and will be removed +# +%_icons16dir %{_iconsbasedir}/16x16/apps +%_icons22dir %{_iconsbasedir}/22x22/apps +%_icons48dir %{_iconsbasedir}/48x48/apps +%_icons64dir %{_iconsbasedir}/64x64/apps +%_icons96dir %{_iconsbasedir}/96x96/apps +%_icons192dir %{_iconsbasedir}/192x192/apps +%_iconsscaldir %{_iconsbasedir}/scalable/apps + + +# +# Tizen icons +# +# %1 the name of the icon (typically the name of the package). RedHat +# requires 3 icons sizes (48, 32, 16), all should be present. +%tizen_icons() \ +install -D -m 644 %1-48.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/48x48/apps/%{name}.png\ +install -D -m 644 %1-32.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/%{name}.png\ +install -D -m 644 %1-16.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/apps/%{name}.png\ +%{nil} + + +#============================================================================== +# ---- default .desktop directories per the desktop-entry freedesktop.org spec + +%_desktopdir %{_datadir}/applications + +#============================================================================== +# ---- Generic auto req/prov filtering macros +# +# http://fedoraproject.org/wiki/PackagingDrafts/AutoProvidesAndRequiresFiltering + +# prevent anything matching from being scanned for provides +%filter_provides_in(P) %{expand: \ +%global __filter_prov_cmd %{?__filter_prov_cmd} %{__grep} -v %{-P} '%*' | \ +} + +# prevent anything matching from being scanned for requires +%filter_requires_in(P) %{expand: \ +%global __filter_req_cmd %{?__filter_req_cmd} %{__grep} -v %{-P} '%*' | \ +} + +# filter anything matching out of the provides stream +%filter_from_provides() %{expand: \ +%global __filter_from_prov %{?__filter_from_prov} | %{__sed} -e '%*' \ +} + +# filter anything matching out of the requires stream +%filter_from_requires() %{expand: \ +%global __filter_from_req %{?__filter_from_req} | %{__sed} -e '%*' \ +} + +# actually set up the filtering bits +%filter_setup %{expand: \ +%global _use_internal_dependency_generator 0 \ +%global __deploop() while read FILE; do /usr/lib/rpm/rpmdeps -%{1} ${FILE}; done | /bin/sort -u \ +%global __find_provides /bin/sh -c "%{?__filter_prov_cmd} %{__deploop P} %{?__filter_from_prov}" \ +%global __find_requires /bin/sh -c "%{?__filter_req_cmd} %{__deploop R} %{?__filter_from_req}" \ +} diff --git a/packaging/mimetype.diff b/packaging/mimetype.diff new file mode 100644 index 0000000..ff1fd96 --- /dev/null +++ b/packaging/mimetype.diff @@ -0,0 +1,24 @@ +Index: autodeps/linux.prov +=================================================================== +--- autodeps/linux.prov.orig ++++ autodeps/linux.prov +@@ -11,6 +11,7 @@ solist=($(printf "%s\n" "${filelist[@]}" + pythonlist= + tcllist= + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) ++mimetypelist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(desktop)\$")) + + # + # --- Alpha does not mark 64bit dependencies +@@ -59,6 +60,11 @@ done | sort -u + printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.prov | sort -u + + # ++# --- mimetypes in .desktop files ++[ -x /usr/lib/rpm/mimetypes.prov -a -n "$mimetypelist" ] && ++ printf "%s\n" "${mimetypelist[@]}" | /usr/lib/rpm/mimetypes.prov | sort -u ++ ++# + # --- Mono exes/dlls + : ${MONO_PREFIX=/usr} + if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then diff --git a/packaging/no_rep_autop.diff b/packaging/no_rep_autop.diff new file mode 100644 index 0000000..3211173 --- /dev/null +++ b/packaging/no_rep_autop.diff @@ -0,0 +1,12 @@ +It seems to be gone... + +--- lib/Makefile.am.orig 2011-05-12 12:59:42.000000000 +0000 ++++ lib/Makefile.am 2011-05-12 12:59:59.000000000 +0000 +@@ -126,7 +126,6 @@ rpmdb_printlog_LDADD = \ + $(top_builddir)/db3/fileops_autop.o \ + $(top_builddir)/db3/hash_autop.o \ + $(top_builddir)/db3/qam_autop.o \ +- $(top_builddir)/db3/rep_autop.o \ + $(top_builddir)/db3/txn_autop.o \ + $(top_builddir)/db3/util_sig.o \ + librpm.la diff --git a/packaging/optflags.patch b/packaging/optflags.patch new file mode 100644 index 0000000..98f8c1c --- /dev/null +++ b/packaging/optflags.patch @@ -0,0 +1,77 @@ +Index: rpm-4.9.1/rpmrc.in +=================================================================== +--- rpm-4.9.1.orig/rpmrc.in ++++ rpm-4.9.1/rpmrc.in +@@ -12,10 +12,10 @@ + # "fat" binary with both archs, for Darwin + optflags: fat -O2 -g -arch i386 -arch ppc + +-optflags: i386 -O2 -g -march=i386 -mtune=i686 +-optflags: i486 -O2 -g -march=i486 +-optflags: i586 -O2 -g -march=i586 +-optflags: i686 -O2 -g -march=i686 ++Optflags: i386 %{__global_cflags} -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables ++Optflags: i486 %{__global_cflags} -m32 -march=i486 -fasynchronous-unwind-tables ++Optflags: i586 %{__global_cflags} -m32 -march=core2 -mssse3 -mtune=atom -mfpmath=sse -fasynchronous-unwind-tables -fno-omit-frame-pointer ++Optflags: i686 %{__global_cflags} -m32 -march=core2 -mssse3 -mtune=atom -mfpmath=sse -fasynchronous-unwind-tables -fno-omit-frame-pointer + optflags: pentium3 -O2 -g -march=pentium3 + optflags: pentium4 -O2 -g -march=pentium4 + optflags: athlon -O2 -g -march=athlon +@@ -58,18 +58,19 @@ optflags: hppa2.0 -O2 -g -mpa-risc-1-0 + optflags: mips -O2 -g + optflags: mipsel -O2 -g + +-optflags: armv3l -O2 -g -march=armv3 +-optflags: armv4b -O2 -g -march=armv4 +-optflags: armv4l -O2 -g -march=armv4 +-optflags: armv4tl -O2 -g -march=armv4t +-optflags: armv5tel -O2 -g -march=armv5te +-optflags: armv5tejl -O2 -g -march=armv5te +-optflags: armv6l -O2 -g -march=armv6 +-optflags: armv7l -O2 -g -march=armv7 +-optflags: armv7hl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -mno-thumb +-optflags: armv7nhl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=neon -mno-thumb +-optflags: armv7thl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -mthumb +-optflags: armv7tnhl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=neon -mthumb ++optflags: armv3l %{__global_cflags} -fsigned-char -march=armv3 ++optflags: armv4b %{__global_cflags} -fsigned-char -march=armv4 ++optflags: armv4l %{__global_cflags} -fsigned-char -march=armv4 ++optflags: armv4tl %{__global_cflags} -march=armv4t ++optflags: armv5tejl %{__global_cflags} -march=armv5te ++Optflags: armv5tel %{__global_cflags} -fmessage-length=0 -march=armv5te -mlittle-endian ++Optflags: armv6l %{__global_cflags} -fmessage-length=0 -march=armv6 -mlittle-endian -mfpu=vfp -mfloat-abi=softfp -D__SOFTFP__ ++Optflags: armv7l %{__global_cflags} -fmessage-length=0 -march=armv7-a -mtune=cortex-a8 -mlittle-endian -mfpu=vfpv3 -mfloat-abi=softfp -D__SOFTFP__ -mthumb -Wa,-mimplicit-it=thumb ++optflags: armv7hl %{__global_cflags} -fmessage-length=0 -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -mno-thumb ++optflags: armv7nhl %{__global_cflags} -fmessage-length=0 -march=armv7-a -mfloat-abi=hard -mfpu=neon -mno-thumb ++optflags: armv7thl %{__global_cflags} -fmessage-length=0 -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -mthumb ++optflags: armv7tnhl %{__global_cflags} -fmessage-length=0 -march=armv7-a -mfloat-abi=hard -mfpu=neon -mthumb ++ + + optflags: atarist -O2 -g -fomit-frame-pointer + optflags: atariste -O2 -g -fomit-frame-pointer +@@ -209,17 +210,17 @@ os_canon: MacOSX: macosx 21 + ############################################################# + # For a given uname().machine, the default build arch + +-buildarchtranslate: osfmach3_i686: i386 +-buildarchtranslate: osfmach3_i586: i386 ++buildarchtranslate: osfmach3_i686: i586 ++buildarchtranslate: osfmach3_i586: i586 + buildarchtranslate: osfmach3_i486: i386 + buildarchtranslate: osfmach3_i386: i386 + +-buildarchtranslate: athlon: i386 +-buildarchtranslate: geode: i386 +-buildarchtranslate: pentium4: i386 +-buildarchtranslate: pentium3: i386 +-buildarchtranslate: i686: i386 +-buildarchtranslate: i586: i386 ++buildarchtranslate: athlon: i586 ++buildarchtranslate: geode: i586 ++buildarchtranslate: pentium4: i586 ++buildarchtranslate: pentium3: i586 ++buildarchtranslate: i686: i586 ++buildarchtranslate: i586: i586 + buildarchtranslate: i486: i386 + buildarchtranslate: i386: i386 + diff --git a/packaging/pythondeps.diff b/packaging/pythondeps.diff new file mode 100644 index 0000000..90bf61f --- /dev/null +++ b/packaging/pythondeps.diff @@ -0,0 +1,44 @@ +--- ./autodeps/linux.prov.orig 2011-05-11 15:59:31.000000000 +0000 ++++ ./autodeps/linux.prov 2011-05-11 16:39:09.000000000 +0000 +@@ -11,7 +11,7 @@ filelist=($(printf "%s\n" "${filelist[@] + solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \ + tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \ + cut -d: -f1)) +-pythonlist= ++pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/bin/python.\..$')) + tcllist= + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) + mimetypelist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(desktop)\$")) +@@ -55,8 +55,8 @@ done | sort -u + + # + # --- Python modules. +-[ -x /usr/lib/rpm/python.prov -a -n "$pythonlist" ] && +- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.prov | sort -u ++[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] && ++ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -P | sort -u + + # + # --- Tcl modules. +--- ./autodeps/linux.req.orig 2011-05-11 14:28:45.000000000 +0000 ++++ ./autodeps/linux.req 2011-05-11 16:39:09.000000000 +0000 +@@ -31,7 +31,7 @@ liblist=($(printf "%s\0" "${filelist[@]} + + interplist=() + perllist=() +-pythonlist=() ++pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..')) + tcllist=() + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) + +@@ -127,8 +127,8 @@ done | sort -u + + # + # --- Python modules. +-[ -x /usr/lib/rpm/python.req -a -n "$pythonlist" ] && \ +- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.req | sort -u ++[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] && \ ++ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -R | sort -u + + # + # --- Tcl modules. diff --git a/packaging/remove-translations.patch b/packaging/remove-translations.patch new file mode 100644 index 0000000..6555226 --- /dev/null +++ b/packaging/remove-translations.patch @@ -0,0 +1,20 @@ +--- ./scripts/find-lang.sh.orig 2011-05-11 16:45:30.000000000 +0000 ++++ ./scripts/find-lang.sh 2011-05-11 16:55:14.000000000 +0000 +@@ -122,6 +122,17 @@ fi + MO_NAME_NEW=$MO_NAME.tmp.$$ + rm -f $MO_NAME_NEW + ++# remove languages we do not yet support - but give out statistics ++find $TOP_DIR/usr/share/locale/ -maxdepth 1 -type d | sed 's:'"$TOP_DIR"/usr/share/locale/'::; /^$/d' | while read dir; do ++ if ! rpm -ql filesystem | egrep -q "/usr/share/locale/$dir"$; then ++ find $TOP_DIR/usr/share/locale/$dir -name *.mo | sed 's:'"$TOP_DIR"'::' | while read file; do ++ echo -n "removing translation $file: " ++ msgunfmt "$TOP_DIR/$file" | msgfmt --statistics -o /dev/null - ++ done ++ rm -rf $TOP_DIR/usr/share/locale/$dir ++ fi ++done ++ + find $TOP_DIR -type f -o -type l|sed ' + s:'"$TOP_DIR"':: + '"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3: diff --git a/packaging/rpm-4.5.90-gstreamer-provides.patch b/packaging/rpm-4.5.90-gstreamer-provides.patch new file mode 100644 index 0000000..a9ebfe2 --- /dev/null +++ b/packaging/rpm-4.5.90-gstreamer-provides.patch @@ -0,0 +1,16 @@ +diff --git a/build/rpmfc.c b/build/rpmfc.c +index 94fb68e..525915b 100644 +--- a/build/rpmfc.c ++++ b/build/rpmfc.c +@@ -1093,6 +1093,11 @@ assert(s != NULL); + free(buf); + } + ++ /* Add possible GStreamer provides */ ++ if (!fc->skipProv && isDSO) { ++ xx = rpmfcHelper(fc, 'P', "gstreamer"); ++ } ++ + exit: + soname = _free(soname); + if (elf) (void) elf_end(elf); diff --git a/packaging/rpm-4.5.90-pkgconfig-path.patch b/packaging/rpm-4.5.90-pkgconfig-path.patch new file mode 100644 index 0000000..07ce123 --- /dev/null +++ b/packaging/rpm-4.5.90-pkgconfig-path.patch @@ -0,0 +1,13 @@ +diff --git a/macros.in b/macros.in +index 830072a..bdce7f4 100644 +--- a/macros.in ++++ b/macros.in +@@ -805,6 +805,8 @@ print (t)\ + export RPM_BUILD_ROOT}\ + %{?_javaclasspath:CLASSPATH=\"%{_javaclasspath}\"\ + export CLASSPATH}\ ++ PKG_CONFIG_PATH=\"%{_libdir}/pkgconfig:%{_datadir}/pkgconfig\"\ ++ export PKG_CONFIG_PATH\ + \ + %{verbose:set -x}%{!verbose:exec > /dev/null}\ + umask 022\ diff --git a/packaging/rpm-4.7.90-devel-autodep.patch b/packaging/rpm-4.7.90-devel-autodep.patch new file mode 100644 index 0000000..84e5cee --- /dev/null +++ b/packaging/rpm-4.7.90-devel-autodep.patch @@ -0,0 +1,157 @@ +diff -up rpm-4.7.90.git9278/build/rpmfc.c.devel-autodep rpm-4.7.90.git9278/build/rpmfc.c +--- rpm-4.7.90.git9278/build/rpmfc.c.devel-autodep 2009-09-01 10:45:07.000000000 +0300 ++++ rpm-4.7.90.git9278/build/rpmfc.c 2009-09-01 11:00:15.000000000 +0300 +@@ -501,7 +501,7 @@ static const struct rpmfcTokens_s const + { "GLS_BINARY_LSB_FIRST", RPMFC_WHITE|RPMFC_INCLUDE }, + { " DB ", RPMFC_WHITE|RPMFC_INCLUDE }, + +- { "symbolic link to", RPMFC_SYMLINK }, ++ { "symbolic link to", RPMFC_SYMLINK|RPMFC_INCLUDE }, + { "socket", RPMFC_DEVICE }, + { "special", RPMFC_DEVICE }, + { " text", RPMFC_TEXT|RPMFC_INCLUDE }, +@@ -663,6 +663,105 @@ rpmds rpmfcRequires(rpmfc fc) + + + /** ++ * Ensure that symlinks for shared libs generate a dep on the shared lib ++ * @param fc file classifier ++ * @return 0 on success ++ */ ++static int rpmfcSYMLINK(rpmfc fc) ++{ ++ const char * fn = fc->fn[fc->ix]; ++ struct stat sb; ++ int fdno; ++ ++ if (fc->skipReq) ++ return 0; ++ ++ if (stat(fn, &sb) < 0) ++ return -1; ++ if (S_ISLNK(sb.st_mode)) ++ return -1; ++ ++ fdno = open(fn, O_RDONLY); ++ if (fdno < 0) { ++ return fdno; ++ } ++ ++#if HAVE_GELF_H && HAVE_LIBELF ++ Elf * elf = NULL; ++ GElf_Ehdr ehdr_mem, * ehdr; ++ int isElf64 = 0; ++ int i, cnt; ++ char * soname = NULL; ++ rpmds ds; ++ ++ (void) elf_version(EV_CURRENT); ++ elf = NULL; ++ if ((elf = elf_begin (fdno, ELF_C_READ_MMAP, NULL)) == NULL ++ || elf_kind(elf) != ELF_K_ELF ++ || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL ++ || ehdr->e_type != ET_DYN) ++ goto exit; ++ ++/* alpha uses /lib, not /lib64 so don't add (64bit) deps */ ++#if !defined(__alpha__) ++ isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64; ++#endif ++ ++ for (i = 0; i < ehdr->e_phnum; ++i) { ++ GElf_Phdr phdr_mem; ++ GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); ++ GElf_Shdr shdr_mem; ++ Elf_Data * data = NULL; ++ Elf_Scn * scn; ++ GElf_Shdr *shdr; ++ ++ if (phdr == NULL || phdr->p_type != PT_DYNAMIC) ++ continue; ++ ++ scn = gelf_offscn(elf, phdr->p_offset); ++ shdr = gelf_getshdr(scn, &shdr_mem); ++ ++ if (shdr != NULL && shdr->sh_type == SHT_DYNAMIC) ++ data = elf_getdata (scn, NULL); ++ if (data == NULL) ++ continue; ++ ++ for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) { ++ GElf_Dyn dynmem; ++ GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem); ++ char *depname = NULL; ++ ++ if (dyn == NULL) ++ break; ++ if (dyn->d_tag != DT_SONAME) ++ continue; ++ ++ /* add the soname to package deps */ ++ soname = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val); ++ if (soname == NULL) ++ break; ++ ++ rasprintf(&depname, "%s%s", soname, isElf64 ? "()(64bit)" : ""); ++ /* Add to package dependencies. */ ++ ds = rpmdsSingle(RPMTAG_REQUIRENAME, depname, "", ++ RPMSENSE_FIND_REQUIRES); ++ free(depname); ++ ++ rpmdsMerge(&fc->requires, ds); ++ rpmfcAddFileDep(&fc->ddict, fc->ix, ds); ++ ds = rpmdsFree(ds); ++ break; ++ } ++ } ++exit: ++ if (elf) (void) elf_end(elf); ++ close(fdno); ++ return 0; ++#endif ++ return -1; ++} ++ ++/** + * Extract script dependencies. + * @param fc file classifier + * @return 0 on success +@@ -1118,6 +1217,7 @@ static const struct rpmfcApplyTbl_s cons + RPMFC_PERL|RPMFC_PYTHON|RPMFC_MONO|RPMFC_OCAML| + RPMFC_PKGCONFIG|RPMFC_LIBTOOL) }, + { rpmfcMISC, RPMFC_FONT|RPMFC_TEXT }, ++ { rpmfcSYMLINK, RPMFC_SYMLINK }, + { NULL, 0 } + }; + +@@ -1138,6 +1238,7 @@ rpmRC rpmfcApply(rpmfc fc) + int ix; + int i; + int xx; ++ int skipping = 0; + + /* Generate package and per-file dependencies. */ + for (fc->ix = 0; fc->fn[fc->ix] != NULL; fc->ix++) { +@@ -1192,11 +1293,13 @@ rpmRC rpmfcApply(rpmfc fc) + default: + break; + case 'P': ++ skipping = fc->skipProv; + ds = rpmdsSingle(RPMTAG_PROVIDENAME, N, EVR, Flags); + dix = rpmdsFind(fc->provides, ds); + ds = rpmdsFree(ds); + break; + case 'R': ++ skipping = fc->skipReq; + ds = rpmdsSingle(RPMTAG_REQUIRENAME, N, EVR, Flags); + dix = rpmdsFind(fc->requires, ds); + ds = rpmdsFree(ds); +@@ -1218,7 +1321,7 @@ assert(dix >= 0); + previx = ix; + xx = argiAdd(&fc->fddictx, ix, argiCount(fc->ddictx)-1); + } +- if (fc->fddictn && fc->fddictn->vals) ++ if (fc->fddictn && fc->fddictn->vals && !skipping) + fc->fddictn->vals[ix]++; + } + diff --git a/packaging/rpm-4.8.0-tilde.patch b/packaging/rpm-4.8.0-tilde.patch new file mode 100644 index 0000000..1132c37 --- /dev/null +++ b/packaging/rpm-4.8.0-tilde.patch @@ -0,0 +1,61 @@ +Index: rpm-4.8.0-beta1/lib/rpmvercmp.c +=================================================================== +--- rpm-4.8.0-beta1.orig/lib/rpmvercmp.c ++++ rpm-4.8.0-beta1/lib/rpmvercmp.c +@@ -33,12 +33,16 @@ int rpmvercmp(const char * a, const char + + /* loop through each version segment of str1 and str2 and compare them */ + while (*one && *two) { +- while (*one && !risalnum(*one)) one++; +- while (*two && !risalnum(*two)) two++; ++ while (*one && !risalnum(*one) && *one != '~') one++; ++ while (*two && !risalnum(*two) && *two != '~') two++; + + /* If we ran to the end of either, we are finished with the loop */ + if (!(*one && *two)) break; + ++ /* If exactly one side has a tilde, it is decided. */ ++ if ((*one == '~') ^ (*two == '~')) ++ break; ++ + str1 = one; + str2 = two; + +@@ -103,6 +107,11 @@ int rpmvercmp(const char * a, const char + /* this catches the case where all numeric and alpha segments have */ + /* compared identically but the segment sepparating characters were */ + /* different */ ++ if (*two == '~') ++ return 1; ++ else if (*one == '~') ++ return -1; ++ + if ((!*one) && (!*two)) return 0; + + /* whichever version still has characters left over wins */ +Index: rpm-4.8.0-beta1/build/parsePreamble.c +=================================================================== +--- rpm-4.8.0-beta1.orig/build/parsePreamble.c ++++ rpm-4.8.0-beta1/build/parsePreamble.c +@@ -523,7 +523,7 @@ static int handlePreambleTag(rpmSpec spe + case RPMTAG_VERSION: + case RPMTAG_RELEASE: + SINGLE_TOKEN_ONLY; +- if (rpmCharCheck(spec, field, strlen(field), "._+%{}") != RPMRC_OK) return RPMRC_FAIL; ++ if (rpmCharCheck(spec, field, strlen(field), "~._+%{}") != RPMRC_OK) return RPMRC_FAIL; + headerPutString(pkg->header, tag, field); + break; + case RPMTAG_URL: +Index: rpm-4.8.0-beta1/build/parseReqs.c +=================================================================== +--- rpm-4.8.0-beta1.orig/build/parseReqs.c ++++ rpm-4.8.0-beta1/build/parseReqs.c +@@ -168,7 +168,7 @@ rpmRC parseRCPOT(rpmSpec spec, Package p + } + EVR = xmalloc((ve-v) + 1); + rstrlcpy(EVR, v, (ve-v) + 1); +- if (rpmCharCheck(spec, EVR, ve-v, ".-_+:%{}")) goto exit; ++ if (rpmCharCheck(spec, EVR, ve-v, "~.-_+:%{}")) goto exit; + re = ve; /* ==> next token after EVR string starts here */ + } else + EVR = NULL; diff --git a/packaging/rpm-4.9.0-tizen-arm.patch b/packaging/rpm-4.9.0-tizen-arm.patch new file mode 100644 index 0000000..fb1dfbc --- /dev/null +++ b/packaging/rpm-4.9.0-tizen-arm.patch @@ -0,0 +1,88 @@ +Index: rpm-4.9.0/macros.in +=================================================================== +--- rpm-4.9.0.orig/macros.in ++++ rpm-4.9.0/macros.in +@@ -1032,7 +1032,7 @@ done \ + + #------------------------------------------------------------------------------ + # arch macro for all supported ARM processors +-%arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l ++%arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l armv7hl armv7nhl armv7tnhl armv7thl + + #------------------------------------------------------------------------------ + # arch macro for all supported Sparc processors +Index: rpm-4.9.0/rpmrc.in +=================================================================== +--- rpm-4.9.0.orig/rpmrc.in ++++ rpm-4.9.0/rpmrc.in +@@ -66,6 +66,10 @@ optflags: armv5tel -O2 -g -march=armv5te + optflags: armv5tejl -O2 -g -march=armv5te + optflags: armv6l -O2 -g -march=armv6 + optflags: armv7l -O2 -g -march=armv7 ++optflags: armv7hl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -mno-thumb ++optflags: armv7nhl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=neon -mno-thumb ++optflags: armv7thl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -mthumb ++optflags: armv7tnhl -O2 -g -march=armv7-a -mfloat-abi=hard -mfpu=neon -mthumb + + optflags: atarist -O2 -g -fomit-frame-pointer + optflags: atariste -O2 -g -fomit-frame-pointer +@@ -140,6 +144,11 @@ arch_canon: armv5tel: armv5tel 12 + arch_canon: armv5tejl: armv5tejl 12 + arch_canon: armv6l: armv6l 12 + arch_canon: armv7l: armv7l 12 ++arch_canon: armv7hl: armv7hl 12 ++arch_canon: armv7nhl: armv7nhl 12 ++arch_canon: armv7thl: armv7thl 12 ++arch_canon: armv7tnhl: armv7tnhl 12 ++ + + arch_canon: m68kmint: m68kmint 13 + arch_canon: atarist: m68kmint 13 +@@ -248,6 +257,10 @@ buildarchtranslate: armv5tel: armv5tel + buildarchtranslate: armv5tejl: armv5tejl + buildarchtranslate: armv6l: armv6l + buildarchtranslate: armv7l: armv7l ++buildarchtranslate: armv7hl: armv7hl ++buildarchtranslate: armv7nhl: armv7nhl ++buildarchtranslate: armv7thl: armv7thl ++buildarchtranslate: armv7tnhl: armv7tnhl + + buildarchtranslate: atarist: m68kmint + buildarchtranslate: atariste: m68kmint +@@ -336,6 +349,10 @@ arch_compat: armv5tel: armv4tl + arch_compat: armv4tl: armv4l + arch_compat: armv4l: armv3l + arch_compat: armv3l: noarch ++arch_compat: armv7tnhl: armv7nhl armv7thl ++arch_compat: armv7nhl: armv7hl ++arch_compat: armv7thl: armv7hl ++arch_compat: armv7hl: noarch + + arch_compat: atarist: m68kmint noarch + arch_compat: atariste: m68kmint noarch +@@ -441,6 +458,11 @@ buildarch_compat: armv4tl: armv4l + buildarch_compat: armv4l: armv3l + buildarch_compat: armv3l: noarch + ++buildarch_compat: armv7tnhl: armv7nhl armv7thl ++buildarch_compat: armv7nhl: armv7hl ++buildarch_compat: armv7thl: armv7hl ++buildarch_compat: armv7hl: noarch ++ + buildarch_compat: hppa2.0: hppa1.2 + buildarch_compat: hppa1.2: hppa1.1 + buildarch_compat: hppa1.1: hppa1.0 +Index: rpm-4.9.0/installplatform +=================================================================== +--- rpm-4.9.0.orig/installplatform ++++ rpm-4.9.0/installplatform +@@ -19,7 +19,8 @@ RPMRC_GNU="`$RPM --eval '%{_gnu}'`" + case "$arch" in + i[3456]86|pentium[34]|athlon|geode) SUBSTS='s_i386_i386_ s_i386_i486_ s_i386_i586_ s_i386_i686_ s_i386_pentium3_ s_i386_pentium4_ s_i386_athlon_ s_i386_geode_' ;; + alpha*) SUBSTS='s_alpha_alpha_ s_alpha_alphaev5_ s_alpha_alphaev56_ s_alpha_alphapca56_ s_alpha_alphaev6_ s_alpha_alphaev67_' ;; +- arm*) SUBSTS='s_arm_arm_ s_arm_armv3l_ s_arm_armv4l_ s_arm_armv4tl_ s_arm_armv5tel_ s_arm_armv5tejl_ s_arm_armv6l_ s_arm_armv7l_' ;; ++ arm*) SUBSTS='s_arm_arm_ s_arm_armv3l_ s_arm_armv4l_ s_arm_armv4tl_ s_arm_armv5tel_ s_arm_armv5tejl_ s_arm_armv6l_ s_arm_armv7l_ s_arm_armv7hl_ s_arm_armv7nhl_ s_arm_armv7tnhl ++ _ s_arm_armv7thl_' ;; + sh4*) SUBSTS='s_sh4_sh4_ s_sh4_sh4a_' ;; + sparc*) SUBSTS='s_sparc\(64\|64v\|v9v\|v9\)_sparc_ s_sparc64_sparcv9_;s_sparc\([^v]\|$\)_sparcv9\1_ s_sparcv9_sparc64_;s_sparc\([^6]\|$\)_sparc64\1_' ;; + powerpc*|ppc*) SUBSTS='s_ppc64_ppc_ s_ppc\([^6ip]\|$\)_ppc64\1_ s_ppc\([^6ip]\|$\)_ppciseries_ s_ppc\([^6ip]\|$\)_ppcpseries_ s_ppc\([^6ip]\|$\)_ppc64iseries_ s_ppc\([^6ip]\|$\)_ppc64pseries_' ;; diff --git a/packaging/rpm-beecrypt.diff b/packaging/rpm-beecrypt.diff new file mode 100644 index 0000000..55036f7 --- /dev/null +++ b/packaging/rpm-beecrypt.diff @@ -0,0 +1,1725 @@ +--- ./config.h.in.orig 2011-07-15 09:37:41.000000000 +0000 ++++ ./config.h.in 2011-07-18 16:34:29.000000000 +0000 +@@ -13,6 +13,9 @@ + /* Define to 1 if you have the `basename' function. */ + #undef HAVE_BASENAME + ++/* Define to 1 if you have the header file. */ ++#undef HAVE_BEECRYPT_API_H ++ + /* Define as 1 if you bzip2 1.0 */ + #undef HAVE_BZ2_1_0 + +@@ -77,7 +80,7 @@ + /* Define as 1 if your zlib has gzseek() */ + #undef HAVE_GZSEEK + +-/* Define if you have the iconv() function. */ ++/* Define if you have the iconv() function and it works. */ + #undef HAVE_ICONV + + /* Define to 1 if you have the header file. */ +@@ -227,6 +230,10 @@ + */ + #undef LT_OBJDIR + ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#undef LT_OBJDIR ++ + /* Define to 1 if `major', `minor', and `makedev' are declared in . + */ + #undef MAJOR_IN_MKDEV +@@ -311,6 +318,9 @@ + /* Build with acl support? */ + #undef WITH_ACL + ++/* Build with beecrypt instead of nss3 support? */ ++#undef WITH_BEECRYPT ++ + /* Build with capability support? */ + #undef WITH_CAP + +--- ./configure.ac.orig 2011-07-15 09:37:20.000000000 +0000 ++++ ./configure.ac 2011-07-18 16:34:29.000000000 +0000 +@@ -252,12 +252,43 @@ AC_CHECK_HEADERS([dwarf.h], [ + AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes]) + + #================= ++# Check for beecrypt library if requested. ++AC_ARG_WITH(beecrypt, [ --with-beecrypt build with beecrypt support ],,[with_beecrypt=yes]) ++AC_ARG_WITH(internal_beecrypt, [ --with-internal-beecrypt build with internal beecrypt library ],,[with_internal_beecrypt=yes]) ++AM_CONDITIONAL([WITH_INTERNAL_BEECRYPT],[test "$with_internal_beecrypt" = yes]) ++if test "$with_internal_beecrypt" = yes ; then ++ with_beecrypt=yes ++fi ++AM_CONDITIONAL([WITH_BEECRYPT],[test "$with_beecrypt" = yes]) ++ ++WITH_BEECRYPT_INCLUDE= ++WITH_BEECRYPT_LIB= ++if test "$with_beecrypt" = yes ; then ++ AC_DEFINE(WITH_BEECRYPT, 1, [Build with beecrypt instead of nss3 support?]) ++ if test "$with_internal_beecrypt" = yes ; then ++ WITH_BEECRYPT_INCLUDE="-I\$(top_srcdir)/beecrypt" ++ AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the header file.]) ++ else ++ AC_CHECK_LIB(beecrypt, mpfprintln, [ ++ WITH_BEECRYPT_LIB="-lbeecrypt" ++ ],[ ++ AC_MSG_ERROR([missing required library 'beecrypt']) ++ ]) ++ AC_CHECK_HEADER([beecrypt/api.h], [AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the header file.]) ++ ]) ++ fi ++fi ++AC_SUBST(WITH_BEECRYPT_LIB) ++AC_SUBST(WITH_BEECRYPT_INCLUDE) ++ ++#================= + # Check for NSS library. + # We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS + # have a header named nss.h... so make extra check for NSS's sechash.h + # which we use too and hopefully is slightly more unique to NSS. + WITH_NSS_INCLUDE= + WITH_NSS_LIB= ++if test "$with_beecrypt" != yes ; then + AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [ + AC_MSG_ERROR([missing required NSPR / NSS header]) + ]) +@@ -266,6 +297,7 @@ AC_CHECK_LIB(nss3, NSS_NoDB_Init, [ + ], [ + AC_MSG_ERROR([missing required NSS library 'nss3']) + ]) ++fi + AC_SUBST(WITH_NSS_INCLUDE) + AC_SUBST(WITH_NSS_LIB) + +--- ./rpmio/Makefile.am.orig 2011-07-15 09:36:33.000000000 +0000 ++++ ./rpmio/Makefile.am 2011-07-18 16:36:35.000000000 +0000 +@@ -2,6 +2,7 @@ + + AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/ + AM_CPPFLAGS += @WITH_NSS_INCLUDE@ ++AM_CPPFLAGS += @WITH_BEECRYPT_INCLUDE@ + AM_CPPFLAGS += @WITH_POPT_INCLUDE@ + AM_CPPFLAGS += -I$(top_srcdir)/misc + AM_CPPFLAGS += -DRPMCONFIGDIR="\"@RPMCONFIGDIR@\"" +@@ -17,10 +18,17 @@ librpmio_la_SOURCES = \ + rpmstring.c rpmfileutil.c \ + rpmkeyring.c + ++if WITH_BEECRYPT ++librpmio_la_SOURCES += digest_beecrypt.c ++else ++librpmio_la_SOURCES += digest_nss.c ++endif ++ + librpmio_la_LDFLAGS = -version-info 2:1:0 + librpmio_la_LIBADD = \ + ../misc/libmisc.la \ + @WITH_NSS_LIB@ \ ++ @WITH_BEECRYPT_LIB@ \ + @WITH_BZ2_LIB@ \ + @WITH_ZLIB_LIB@ \ + @WITH_LIBELF_LIB@ \ +@@ -28,6 +36,15 @@ librpmio_la_LIBADD = \ + @WITH_LZMA_LIB@ \ + -lpthread + ++if WITH_INTERNAL_BEECRYPT ++librpmio_la_LIBADD += $(libbeecrypt_la) ++ ++libbeecrypt_la = $(top_builddir)/beecrypt/libbeecrypt_nolibdir.la ++ ++$(top_builddir)/beecrypt/libbeecrypt_nolibdir.la: $(top_builddir)/beecrypt/libbeecrypt.la ++ sed -e 's/libdir=.*/libdir=/' < $(top_builddir)/beecrypt/libbeecrypt.la > $(top_builddir)/beecrypt/libbeecrypt_nolibdir.la ++endif ++ + if WITH_LUA + AM_CPPFLAGS += -I$(top_srcdir)/luaext/ + AM_CPPFLAGS += @LUA_CFLAGS@ +--- ./rpmio/base64.c.orig 2011-07-12 11:28:13.000000000 +0000 ++++ ./rpmio/base64.c 2011-07-18 16:34:29.000000000 +0000 +@@ -4,8 +4,11 @@ + #include + #include + ++#include "system.h" ++ + #include "rpmio/base64.h" + ++#ifndef WITH_BEECRYPT + + static char base64_encode_value(char value_in) + { +@@ -253,3 +256,4 @@ int main(int argc, char *argv[]) + } + #endif + ++#endif /* WITH_BEECRYPT */ +--- ./rpmio/digest.c.orig 2011-07-12 11:28:13.000000000 +0000 ++++ ./rpmio/digest.c 2011-07-18 16:34:29.000000000 +0000 +@@ -4,25 +4,12 @@ + + #include "system.h" + ++#include + #include "rpmio/digest.h" ++#include "rpmio/rpmio_internal.h" + + #include "debug.h" + +-#ifdef SHA_DEBUG +-#define DPRINTF(_a) fprintf _a +-#else +-#define DPRINTF(_a) +-#endif +- +- +-/** +- * MD5/SHA1 digest private data. +- */ +-struct DIGEST_CTX_s { +- rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ +- HASHContext *hashctx; /*!< Internal NSS hash context. */ +- int algo; /*!< Used hash algorithm */ +-}; + + #define DIGESTS_MAX 11 + struct rpmDigestBundle_s { +@@ -109,138 +96,3 @@ DIGEST_CTX rpmDigestBundleDupCtx(rpmDige + return dup; + } + +-DIGEST_CTX +-rpmDigestDup(DIGEST_CTX octx) +-{ +- DIGEST_CTX nctx = NULL; +- if (octx) { +- HASHContext *hctx = HASH_Clone(octx->hashctx); +- if (hctx) { +- nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx)); +- nctx->hashctx = hctx; +- } +- } +- return nctx; +-} +- +-RPM_GNUC_PURE +-static HASH_HashType getHashType(int hashalgo) +-{ +- switch (hashalgo) { +- case PGPHASHALGO_MD5: +- return HASH_AlgMD5; +- break; +- case PGPHASHALGO_MD2: +- return HASH_AlgMD2; +- break; +- case PGPHASHALGO_SHA1: +- return HASH_AlgSHA1; +- break; +- case PGPHASHALGO_SHA256: +- return HASH_AlgSHA256; +- break; +- case PGPHASHALGO_SHA384: +- return HASH_AlgSHA384; +- break; +- case PGPHASHALGO_SHA512: +- return HASH_AlgSHA512; +- break; +- case PGPHASHALGO_RIPEMD160: +- case PGPHASHALGO_TIGER192: +- case PGPHASHALGO_HAVAL_5_160: +- default: +- return HASH_AlgNULL; +- break; +- } +-} +- +-size_t +-rpmDigestLength(int hashalgo) +-{ +- return HASH_ResultLen(getHashType(hashalgo)); +-} +- +-DIGEST_CTX +-rpmDigestInit(int hashalgo, rpmDigestFlags flags) +-{ +- HASH_HashType type = getHashType(hashalgo); +- HASHContext *hashctx = NULL; +- DIGEST_CTX ctx = NULL; +- +- if (type == HASH_AlgNULL || rpmInitCrypto() < 0) +- goto exit; +- +- if ((hashctx = HASH_Create(type)) != NULL) { +- ctx = xcalloc(1, sizeof(*ctx)); +- ctx->flags = flags; +- ctx->algo = hashalgo; +- ctx->hashctx = hashctx; +- HASH_Begin(ctx->hashctx); +- } +- +-DPRINTF((stderr, "*** Init(%x) ctx %p hashctx %p\n", flags, ctx, ctx->hashctx)); +-exit: +- return ctx; +-} +- +-int +-rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len) +-{ +- size_t partlen; +- const unsigned char *ptr = data; +- +- if (ctx == NULL) +- return -1; +- +-DPRINTF((stderr, "*** Update(%p,%p,%zd) hashctx %p \"%s\"\n", ctx, data, len, ctx->hashctx, ((char *)data))); +- partlen = ~(unsigned int)0xFF; +- while (len > 0) { +- if (len < partlen) { +- partlen = len; +- } +- HASH_Update(ctx->hashctx, ptr, partlen); +- ptr += partlen; +- len -= partlen; +- } +- return 0; +-} +- +-int +-rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii) +-{ +- unsigned char * digest; +- unsigned int digestlen; +- +- if (ctx == NULL) +- return -1; +- digestlen = HASH_ResultLenContext(ctx->hashctx); +- digest = xmalloc(digestlen); +- +-DPRINTF((stderr, "*** Final(%p,%p,%p,%zd) hashctx %p digest %p\n", ctx, datap, lenp, asAscii, ctx->hashctx, digest)); +-/* FIX: check rc */ +- HASH_End(ctx->hashctx, digest, (unsigned int *) &digestlen, digestlen); +- +- /* Return final digest. */ +- if (!asAscii) { +- if (lenp) *lenp = digestlen; +- if (datap) { +- *datap = digest; +- digest = NULL; +- } +- } else { +- if (lenp) *lenp = (2*digestlen) + 1; +- if (datap) { +- const uint8_t * s = (const uint8_t *) digest; +- *datap = pgpHexStr(s, digestlen); +- } +- } +- if (digest) { +- memset(digest, 0, digestlen); /* In case it's sensitive */ +- free(digest); +- } +- HASH_Destroy(ctx->hashctx); +- memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ +- free(ctx); +- return 0; +-} +- +--- ./rpmio/digest.h.orig 2011-07-12 11:28:13.000000000 +0000 ++++ ./rpmio/digest.h 2011-07-18 16:34:29.000000000 +0000 +@@ -1,11 +1,6 @@ + #ifndef _RPMDIGEST_H + #define _RPMDIGEST_H + +-#include +-#include +-#include +-#include +- + #include + #include "rpmio/base64.h" + +@@ -42,8 +37,18 @@ struct pgpDig_s { + struct pgpDigParams_s pubkey; + + /* DSA/RSA parameters */ +- SECKEYPublicKey *keydata; +- SECItem *sigdata; ++ void *keydata; ++ void *sigdata; + }; + ++void pgpCleanRSADSA(pgpDig dig); ++ ++int pgpSetSigMpiRSA(pgpDig dig, int num, const uint8_t *p); ++int pgpSetPubMpiRSA(pgpDig dig, int num, const uint8_t *p); ++int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen); ++ ++int pgpSetSigMpiDSA(pgpDig dig, int num, const uint8_t *p); ++int pgpSetPubMpiDSA(pgpDig dig, int num, const uint8_t *p); ++int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen); ++ + #endif /* _RPMDIGEST_H */ +--- ./rpmio/digest_beecrypt.c.orig 2011-07-18 16:34:29.000000000 +0000 ++++ ./rpmio/digest_beecrypt.c 2011-07-18 16:34:29.000000000 +0000 +@@ -0,0 +1,493 @@ ++#include "system.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#if HAVE_BEECRYPT_API_H ++#include ++#include ++#include ++#endif ++ ++#include ++#include "rpmio/digest.h" ++#include "rpmio/rpmio_internal.h" ++ ++#include "debug.h" ++ ++/* interface to beecrpyt crypto framework */ ++ ++/**************************** init ************************************/ ++ ++int rpmInitCrypto(void) { ++ return 0; ++} ++ ++int rpmFreeCrypto(void) { ++ return 0; ++} ++ ++/**************************** helpers ************************************/ ++ ++static inline unsigned int pgpMpiBits(const uint8_t *p) ++{ ++ return ((p[0] << 8) | p[1]); ++} ++ ++static inline size_t pgpMpiLen(const uint8_t *p) ++{ ++ return (2 + ((pgpMpiBits(p)+7)>>3)); ++} ++ ++static inline char * pgpHexCvt(char *t, const byte *s, int nbytes) ++ /*@modifies *t @*/ ++{ ++ static char hex[] = "0123456789abcdef"; ++ while (nbytes-- > 0) { ++ unsigned int i; ++ i = *s++; ++ *t++ = hex[ (i >> 4) & 0xf ]; ++ *t++ = hex[ (i ) & 0xf ]; ++ } ++ *t = '\0'; ++ return t; ++} ++ ++static const char * pgpMpiHex(const byte *p) ++{ ++ static char prbuf[2048]; ++ char *t = prbuf; ++ t = pgpHexCvt(t, p+2, pgpMpiLen(p)-2); ++ return prbuf; ++} ++ ++static int pgpHexSet(int lbits, mpnumber * mpn, const byte * p) ++{ ++ unsigned int mbits = pgpMpiBits(p); ++ unsigned int nbits; ++ unsigned int nbytes; ++ char *t; ++ unsigned int ix; ++ ++ nbits = (lbits > mbits ? lbits : mbits); ++ nbytes = ((nbits + 7) >> 3); ++ t = xmalloc(2*nbytes+1); ++ ix = 2 * ((nbits - mbits) >> 3); ++ ++ if (ix > 0) memset(t, (int)'0', ix); ++ strcpy(t+ix, pgpMpiHex(p)); ++ (void) mpnsethex(mpn, t); ++ t = _free(t); ++ return 0; ++} ++ ++void pgpCleanRSADSA(pgpDig dig) ++{ ++ if (!dig) ++ return; ++ if (dig->keydata) { ++ dig->keydata= _free(dig->keydata); ++ } ++ if (dig->sigdata) { ++ dig->sigdata = _free(dig->sigdata); ++ } ++} ++ ++ ++/****************************** RSA **************************************/ ++ ++struct pgpDigSigRSA_s { ++ mpnumber c; ++}; ++ ++struct pgpDigPubRSA_s { ++ rsapk rsa_pk; ++}; ++ ++int ++pgpSetSigMpiRSA(pgpDig dig, int num, const uint8_t *p) ++{ ++ struct pgpDigSigRSA_s *sig; ++ if (num != 0) ++ return 1; ++ if (!dig->sigdata) ++ dig->sigdata = xcalloc(1, sizeof(*sig)); ++ sig = dig->sigdata; ++ if (!sig) ++ return 1; ++ (void) mpnsethex(&sig->c, pgpMpiHex(p)); ++ return 0; ++} ++ ++int ++pgpSetPubMpiRSA(pgpDig dig, int num, const uint8_t *p) ++{ ++ struct pgpDigPubRSA_s *pub; ++ ++ if (!dig->keydata) ++ dig->keydata = xcalloc(1, sizeof(*pub)); ++ pub = dig->keydata; ++ if (!pub) ++ return 1; ++ switch(num) { ++ case 0: ++ (void) mpbsethex(&pub->rsa_pk.n, pgpMpiHex(p)); ++ return 0; ++ case 1: ++ (void) mpnsethex(&pub->rsa_pk.e, pgpMpiHex(p)); ++ return 0; ++ default: ++ return 1; ++ } ++} ++ ++static inline unsigned char nibble(char c) ++{ ++ if (c >= '0' && c <= '9') ++ return (c - '0'); ++ if (c >= 'A' && c <= 'F') ++ return (c - 'A') + 10; ++ if (c >= 'a' && c <= 'f') ++ return (c - 'a') + 10; ++ return 0; ++} ++ ++int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen) ++{ ++ const char * prefix = NULL; ++ int res; ++ mpnumber rsahm; ++ struct pgpDigSigRSA_s *sig; ++ struct pgpDigPubRSA_s *pub; ++ ++ sig = dig->sigdata; ++ pub = dig->keydata; ++ if (!sig || !pub) ++ return 1; ++ ++ switch (dig->signature.hash_algo) { ++ case PGPHASHALGO_MD5: ++ prefix = "3020300c06082a864886f70d020505000410"; ++ break; ++ case PGPHASHALGO_SHA1: ++ prefix = "3021300906052b0e03021a05000414"; ++ break; ++ case PGPHASHALGO_MD2: ++ prefix = "3020300c06082a864886f70d020205000410"; ++ break; ++ case PGPHASHALGO_SHA256: ++ prefix = "3031300d060960864801650304020105000420"; ++ break; ++ case PGPHASHALGO_SHA384: ++ prefix = "3041300d060960864801650304020205000430"; ++ break; ++ case PGPHASHALGO_SHA512: ++ prefix = "3051300d060960864801650304020305000440"; ++ break; ++ /* fallthrough for unsupported / unknown types */ ++ default: ++ return 1; ++ } ++ ++ /* Generate RSA modulus parameter. */ ++ { unsigned int nbits = MP_WORDS_TO_BITS(sig->c.size); ++ unsigned int nb = (nbits + 7) >> 3; ++ byte *buf, *bp; ++ ++ if (nb < 3) ++ return 1; ++ buf = xmalloc(nb); ++ memset(buf, 0xff, nb); ++ buf[0] = 0x00; ++ buf[1] = 0x01; ++ bp = buf + nb - strlen(prefix)/2 - hashlen - 1; ++ if (bp < buf) ++ return 1; ++ *bp++ = 0; ++ for (; *prefix; prefix += 2) ++ *bp++ = (nibble(prefix[0]) << 4) | nibble(prefix[1]); ++ memcpy(bp, hash, hashlen); ++ mpnzero(&rsahm); ++ (void) mpnsetbin(&rsahm, buf, nb); ++ buf = _free(buf); ++ } ++#if HAVE_BEECRYPT_API_H ++ res = rsavrfy(&pub->rsa_pk.n, &pub->rsa_pk.e, &sig->c, &rsahm) == 1 ? 0 : 1; ++#else ++ res = rsavrfy(&pub->rsa_pk, &rsahm, &sig->c) == 1 ? 0 : 1; ++#endif ++ mpnfree(&rsahm); ++ return res; ++} ++ ++ ++/****************************** DSA **************************************/ ++ ++struct pgpDigSigDSA_s { ++ mpnumber r; ++ mpnumber s; ++}; ++ ++struct pgpDigPubDSA_s { ++ mpbarrett p; ++ mpbarrett q; ++ mpnumber g; ++ mpnumber y; ++}; ++ ++int ++pgpSetSigMpiDSA(pgpDig dig, int num, const uint8_t *p) ++{ ++ struct pgpDigSigDSA_s *sig; ++ ++ if (!dig->sigdata) ++ dig->sigdata = xcalloc(1, sizeof(*sig)); ++ sig = dig->sigdata; ++ if (!sig) ++ return 1; ++ switch(num) { ++ case 0: ++ return pgpHexSet(160, &sig->r, p); ++ case 1: ++ return pgpHexSet(160, &sig->s, p); ++ default: ++ return 1; ++ } ++} ++ ++int ++pgpSetPubMpiDSA(pgpDig dig, int num, const uint8_t *p) ++{ ++ struct pgpDigPubDSA_s *pub; ++ ++ if (!dig->keydata) ++ dig->keydata = xcalloc(1, sizeof(*pub)); ++ pub = dig->keydata; ++ if (!pub) ++ return 1; ++ switch(num) { ++ case 0: ++ mpbsethex(&pub->p, pgpMpiHex(p)); ++ return 0; ++ case 1: ++ mpbsethex(&pub->q, pgpMpiHex(p)); ++ return 0; ++ case 2: ++ mpnsethex(&pub->g, pgpMpiHex(p)); ++ return 0; ++ case 3: ++ mpnsethex(&pub->y, pgpMpiHex(p)); ++ return 0; ++ default: ++ return 1; ++ } ++} ++ ++int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen) ++{ ++ struct pgpDigSigDSA_s *sig; ++ struct pgpDigPubDSA_s *pub; ++ mpnumber hm; ++ int res; ++ ++ sig = dig->sigdata; ++ pub = dig->keydata; ++ if (!sig || !pub) ++ return 1; ++ mpnzero(&hm); ++ mpnsetbin(&hm, hash, hashlen); ++ res = dsavrfy(&pub->p, &pub->q, &pub->g, &hm, &pub->y, &sig->r, &sig->s) == 1 ? 0 : 1; ++ mpnfree(&hm); ++ return res; ++} ++ ++/**************************** digest ************************************/ ++ ++#ifdef SHA_DEBUG ++#define DPRINTF(_a) fprintf _a ++#else ++#define DPRINTF(_a) ++#endif ++ ++/** ++ * MD5/SHA1 digest private data. ++ */ ++struct DIGEST_CTX_s { ++ rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ ++ int algo; /*!< Used hash algorithm */ ++ uint32_t datalen; /*!< No. bytes in block of plaintext data. */ ++ uint32_t paramlen; /*!< No. bytes of digest parameters. */ ++ uint32_t digestlen; /*!< No. bytes of digest. */ ++ void * param; /*!< Digest parameters. */ ++ int (*Reset) (void * param) ++ /*@modifies param @*/; /*!< Digest initialize. */ ++ int (*Update) (void * param, const byte * data, size_t size) ++ /*@modifies param @*/; /*!< Digest transform. */ ++ int (*Digest) (void * param, /*@out@*/ byte * digest) ++ /*@modifies param, digest @*/; /*!< Digest finish. */ ++}; ++ ++DIGEST_CTX ++rpmDigestDup(DIGEST_CTX octx) ++{ ++ DIGEST_CTX nctx; ++ nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx)); ++ nctx->param = memcpy(xcalloc(1, nctx->paramlen), octx->param, nctx->paramlen); ++ return nctx; ++} ++ ++size_t ++rpmDigestLength(int hashalgo) ++{ ++ switch (hashalgo) { ++ case PGPHASHALGO_MD5: ++ return 16; ++ case PGPHASHALGO_SHA1: ++ return 20; ++#if HAVE_BEECRYPT_API_H ++ case PGPHASHALGO_SHA256: ++ return 32; ++ case PGPHASHALGO_SHA384: ++ return 48; ++ case PGPHASHALGO_SHA512: ++ return 64; ++#endif ++ default: ++ return 0; ++ } ++} ++ ++DIGEST_CTX ++rpmDigestInit(int hashalgo, rpmDigestFlags flags) ++{ ++ DIGEST_CTX ctx = xcalloc(1, sizeof(*ctx)); ++ int xx; ++ ++ ctx->flags = flags; ++ ctx->algo = hashalgo; ++ ++ switch (hashalgo) { ++ case PGPHASHALGO_MD5: ++ ctx->digestlen = 16; ++ ctx->datalen = 64; ++ ctx->paramlen = sizeof(md5Param); ++ ctx->param = xcalloc(1, ctx->paramlen); ++ ctx->Reset = (void *) md5Reset; ++ ctx->Update = (void *) md5Update; ++ ctx->Digest = (void *) md5Digest; ++ break; ++ case PGPHASHALGO_SHA1: ++ ctx->digestlen = 20; ++ ctx->datalen = 64; ++ ctx->paramlen = sizeof(sha1Param); ++ ctx->param = xcalloc(1, ctx->paramlen); ++ ctx->Reset = (void *) sha1Reset; ++ ctx->Update = (void *) sha1Update; ++ ctx->Digest = (void *) sha1Digest; ++ break; ++#if HAVE_BEECRYPT_API_H ++ case PGPHASHALGO_SHA256: ++ ctx->digestlen = 32; ++ ctx->datalen = 64; ++ ctx->paramlen = sizeof(sha256Param); ++ ctx->param = xcalloc(1, ctx->paramlen); ++ ctx->Reset = (void *) sha256Reset; ++ ctx->Update = (void *) sha256Update; ++ ctx->Digest = (void *) sha256Digest; ++ break; ++ case PGPHASHALGO_SHA384: ++ ctx->digestlen = 48; ++ ctx->datalen = 128; ++ ctx->paramlen = sizeof(sha384Param); ++ ctx->param = xcalloc(1, ctx->paramlen); ++ ctx->Reset = (void *) sha384Reset; ++ ctx->Update = (void *) sha384Update; ++ ctx->Digest = (void *) sha384Digest; ++ break; ++ case PGPHASHALGO_SHA512: ++ ctx->digestlen = 64; ++ ctx->datalen = 128; ++ ctx->paramlen = sizeof(sha512Param); ++ ctx->param = xcalloc(1, ctx->paramlen); ++ ctx->Reset = (void *) sha512Reset; ++ ctx->Update = (void *) sha512Update; ++ ctx->Digest = (void *) sha512Digest; ++ break; ++#endif ++ case PGPHASHALGO_RIPEMD160: ++ case PGPHASHALGO_MD2: ++ case PGPHASHALGO_TIGER192: ++ case PGPHASHALGO_HAVAL_5_160: ++ default: ++ free(ctx); ++ return NULL; ++ } ++ ++ xx = (*ctx->Reset) (ctx->param); ++ ++DPRINTF((stderr, "*** Init(%x) ctx %p param %p\n", flags, ctx, ctx->param)); ++ return ctx; ++} ++ ++/* LCL: ctx->param may be modified, but ctx is abstract @*/ ++int ++rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len) ++{ ++ if (ctx == NULL) ++ return -1; ++ ++DPRINTF((stderr, "*** Update(%p,%p,%d) param %p \"%s\"\n", ctx, data, len, ctx->param, ((char *)data))); ++ return (*ctx->Update) (ctx->param, data, len); ++} ++ ++int ++rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii) ++{ ++ byte * digest; ++ char * t; ++ int i; ++ ++ if (ctx == NULL) ++ return -1; ++ digest = xmalloc(ctx->digestlen); ++ ++DPRINTF((stderr, "*** Final(%p,%p,%p,%d) param %p digest %p\n", ctx, datap, lenp, asAscii, ctx->param, digest)); ++ /* FIX: check rc */ ++ (void) (*ctx->Digest) (ctx->param, digest); ++ ++ /* Return final digest. */ ++ if (!asAscii) { ++ if (lenp) *lenp = ctx->digestlen; ++ if (datap) { ++ *datap = digest; ++ digest = NULL; ++ } ++ } else { ++ if (lenp) *lenp = (2*ctx->digestlen) + 1; ++ if (datap) { ++ const byte * s = (const byte *) digest; ++ static const char hex[] = "0123456789abcdef"; ++ ++ *datap = t = xmalloc((2*ctx->digestlen) + 1); ++ for (i = 0 ; i < ctx->digestlen; i++) { ++ *t++ = hex[ (unsigned)((*s >> 4) & 0x0f) ]; ++ *t++ = hex[ (unsigned)((*s++ ) & 0x0f) ]; ++ } ++ *t = '\0'; ++ } ++ } ++ if (digest) { ++ memset(digest, 0, ctx->digestlen); /* In case it's sensitive */ ++ free(digest); ++ } ++ memset(ctx->param, 0, ctx->paramlen); /* In case it's sensitive */ ++ free(ctx->param); ++ memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ ++ free(ctx); ++ return 0; ++} +--- ./rpmio/digest_nss.c.orig 2011-07-18 16:34:29.000000000 +0000 ++++ ./rpmio/digest_nss.c 2011-07-18 16:34:29.000000000 +0000 +@@ -0,0 +1,500 @@ ++#include ++#include ++#include ++#include ++ ++#include "system.h" ++ ++#include ++#include "rpmio/rpmio_internal.h" ++#include "rpmio/digest.h" ++ ++#include "debug.h" ++ ++/* interface to nss crypto framework */ ++ ++/**************************** init ************************************/ ++ ++static int _crypto_initialized = 0; ++static int _new_process = 1; ++ ++/* ++ * Only flag for re-initialization here, in the common case the child ++ * exec()'s something else shutting down NSS here would be waste of time. ++ */ ++static void at_forkchild(void) { ++ _new_process = 1; ++} ++ ++int rpmInitCrypto(void) { ++ int rc = 0; ++ ++ /* Lazy NSS shutdown for re-initialization after fork() */ ++ if (_new_process && _crypto_initialized) { ++ rpmFreeCrypto(); ++ } ++ ++ /* Initialize NSS if not already done */ ++ if (!_crypto_initialized) { ++ if (NSS_NoDB_Init(NULL) != SECSuccess) { ++ rc = -1; ++ } else { ++ _crypto_initialized = 1; ++ } ++ } ++ ++ /* Register one post-fork handler per process */ ++ if (_new_process) { ++ if (pthread_atfork(NULL, NULL, at_forkchild) != 0) { ++ rpmlog(RPMLOG_WARNING, _("Failed to register fork handler: %m\n")); ++ } ++ _new_process = 0; ++ } ++ return rc; ++} ++ ++int rpmInitCrypto(void) { ++ int rc = 0; ++ ++ if (!_crypto_initialized) { ++ if (NSS_NoDB_Init(NULL) != SECSuccess) { ++ rc = -1; ++ } else { ++ _crypto_initialized = 1; ++ } ++ } ++ return rc; ++} ++ ++int rpmFreeCrypto(void) ++{ ++ int rc = 0; ++ if (_crypto_initialized) { ++ rc = (NSS_Shutdown() != SECSuccess); ++ _crypto_initialized = 0; ++ } ++ return rc; ++} ++ ++/**************************** helpers ************************************/ ++ ++static SECKEYPublicKey *pgpNewPublicKey(KeyType type) ++{ ++ PRArenaPool *arena; ++ SECKEYPublicKey *key; ++ ++ arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); ++ if (arena == NULL) ++ return NULL; ++ ++ key = PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey)); ++ ++ if (key == NULL) { ++ PORT_FreeArena(arena, PR_FALSE); ++ return NULL; ++ } ++ ++ key->keyType = type; ++ key->pkcs11ID = CK_INVALID_HANDLE; ++ key->pkcs11Slot = NULL; ++ key->arena = arena; ++ return key; ++} ++ ++static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p) ++{ ++ size_t nbytes = pgpMpiLen(p)-2; ++ ++ if (item == NULL) { ++ if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL) ++ return item; ++ } else { ++ if (arena != NULL) ++ item->data = PORT_ArenaGrow(arena, item->data, item->len, nbytes); ++ else ++ item->data = PORT_Realloc(item->data, nbytes); ++ ++ if (item->data == NULL) { ++ if (arena == NULL) ++ SECITEM_FreeItem(item, PR_TRUE); ++ return NULL; ++ } ++ } ++ ++ memcpy(item->data, p+2, nbytes); ++ item->len = nbytes; ++ return item; ++} ++ ++static int pgpMpiSet(unsigned int lbits, ++ void *dest, const uint8_t * p, const uint8_t * pend) ++{ ++ unsigned int mbits = pgpMpiBits(p); ++ unsigned int nbits; ++ size_t nbytes; ++ char *t = dest; ++ unsigned int ix; ++ ++ if ((p + ((mbits+7) >> 3)) > pend) ++ return 1; ++ ++ if (mbits > lbits) ++ return 1; ++ ++ nbits = (lbits > mbits ? lbits : mbits); ++ nbytes = ((nbits + 7) >> 3); ++ ix = (nbits - mbits) >> 3; ++ ++ if (ix > 0) memset(t, '\0', ix); ++ memcpy(t+ix, p+2, nbytes-ix); ++ ++ return 0; ++} ++ ++void pgpCleanRSADSA(pgpDig dig) ++{ ++ if (!dig) ++ return; ++ if (dig->keydata) { ++ SECKEY_DestroyPublicKey(dig->keydata); ++ dig->keydata = NULL; ++ } ++ if (dig->sigdata) { ++ SECITEM_ZfreeItem(dig->sigdata, PR_TRUE); ++ dig->sigdata = NULL; ++ } ++} ++ ++/****************************** RSA **************************************/ ++ ++int ++pgpSetSigMpiRSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend) ++{ ++ SECItem *sig; ++ ++ if (num != 0) ++ return 1; ++ sig = dig->rsasigdata; ++ sig = pgpMpiItem(NULL, sig, p); ++ dig->rsasigdata = sig; ++ if (sig == NULL) ++ return 1; ++ return 0; ++} ++ ++int ++pgpSetPubMpiRSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend) ++{ ++ SECKEYPublicKey *pub; ++ ++ if (!dig->keydata) ++ dig->keydata = pgpNewPublicKey(rsaKey); ++ pub = dig->keydata; ++ if (!pub) ++ return 1; ++ switch(num) { ++ case 0: ++ pgpMpiItem(pub->arena, &pub->u.rsa.modulus, p); ++ return 0; ++ case 1: ++ pgpMpiItem(pub->arena, &pub->u.rsa.publicExponent, p); ++ return 0; ++ default: ++ return 1; ++ } ++} ++ ++int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen) ++{ ++ SECOidTag sigalg; ++ SECItem digest; ++ SECKEYPublicKey *pub; ++ SECItem *sig; ++ SECItem *newsig = NULL; ++ size_t siglen; ++ int res; ++ ++ switch (dig->hash_algo) { ++ case PGPHASHALGO_MD5: ++ sigalg = SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION; ++ break; ++ case PGPHASHALGO_SHA1: ++ sigalg = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION; ++ break; ++ case PGPHASHALGO_MD2: ++ sigalg = SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION; ++ break; ++ case PGPHASHALGO_SHA256: ++ sigalg = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION; ++ break; ++ case PGPHASHALGO_SHA384: ++ sigalg = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION; ++ break; ++ case PGPHASHALGO_SHA512: ++ sigalg = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION; ++ break; ++ /* fallthrough for unsupported / unknown types */ ++ default: ++ sigalg = SEC_OID_UNKNOWN; ++ break; ++ } ++ digest.type = siBuffer; ++ digest.data = hash; ++ digest.len = hashlen; ++ ++ pub = dig->keydata; ++ sig = dig->sigdata; ++ siglen = SECKEY_SignatureLen(dig->keydata); ++ ++ /* Zero-pad signature data up to expected size if necessary */ ++ if (siglen > sig->len) { ++ size_t pad = siglen - sig->len; ++ if ((newsig = SECITEM_AllocItem(NULL, NULL, siglen)) == NULL) { ++ return 1; ++ } ++ memset(newsig->data, 0, pad); ++ memcpy(newsig->data+pad, sig->data, sig->len); ++ sig = newsig; ++ } ++ ++ if (VFY_VerifyDigest(&digest, pub, sig, sigalg, NULL) == SECSuccess) ++ res = 0; ++ else ++ res = 1; ++ ++ if (newsig) { ++ SECITEM_ZfreeItem(newsig, 1); ++ } ++ return res; ++} ++ ++ ++/****************************** DSA **************************************/ ++ ++int ++pgpSetSigMpiDSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend) ++{ ++ SECItem *sig, *new; ++ ++ switch(num) { ++ case 0: ++ sig = SECITEM_AllocItem(NULL, NULL, 2*DSA_SUBPRIME_LEN); ++ dig->sigdata = sig; ++ memset(sig->data, 0, 2*DSA_SUBPRIME_LEN); ++ pgpMpiSet(DSA_SUBPRIME_LEN*8, sig->data, p, pend); ++ return 0; ++ case 1: ++ sig = dig->sigdata; ++ if (!sig) ++ return 1; ++ pgpMpiSet(DSA_SUBPRIME_LEN*8, sig->data + DSA_SUBPRIME_LEN, p, pend); ++ new = SECITEM_AllocItem(NULL, NULL, 0); ++ if (!new) ++ return 1; ++ if (DSAU_EncodeDerSig(new, sig) != SECSuccess) ++ return 1; ++ SECITEM_FreeItem(sig, PR_TRUE); ++ dig->sigdata = new; ++ return 0; ++ default: ++ return 1; ++ } ++} ++ ++int ++pgpSetPubMpiDSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend) ++{ ++ SECKEYPublicKey *pub; ++ ++ if (!dig->keydata) ++ dig->keydata = pgpNewPublicKey(dsaKey); ++ pub = dig->keydata; ++ if (!pub) ++ return 1; ++ switch(num) { ++ case 0: ++ pgpMpiItem(pub->arena, &pub->u.dsa.params.prime, p); ++ return 0; ++ case 1: ++ pgpMpiItem(pub->arena, &pub->u.dsa.params.subPrime, p); ++ return 0; ++ case 2: ++ pgpMpiItem(pub->arena, &pub->u.dsa.params.base, p); ++ return 0; ++ case 3: ++ pgpMpiItem(pub->arena, &pub->u.dsa.publicValue, p); ++ return 0; ++ default: ++ return 1; ++ } ++} ++ ++int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen) ++{ ++ SECItem digest; ++ SECKEYPublicKey *pub; ++ SECItem *sig; ++ ++ sig = dig->sigdata; ++ pub = dig->keydata; ++ digest.type = siBuffer; ++ digest.data = hash; ++ digest.len = hashlen; ++ if (VFY_VerifyDigest(&digest, pub, sig, SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST, NULL) == SECSuccess) ++ return 0; ++ else ++ return 1; ++} ++ ++ ++/**************************** digest ************************************/ ++ ++ ++#ifdef SHA_DEBUG ++#define DPRINTF(_a) fprintf _a ++#else ++#define DPRINTF(_a) ++#endif ++ ++ ++/** ++ * MD5/SHA1 digest private data. ++ */ ++struct DIGEST_CTX_s { ++ rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ ++ HASHContext *hashctx; /*!< Internal NSS hash context. */ ++ int algo; /*!< Used hash algorithm */ ++}; ++ ++DIGEST_CTX ++rpmDigestDup(DIGEST_CTX octx) ++{ ++ DIGEST_CTX nctx; ++ nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx)); ++ nctx->hashctx = HASH_Clone(octx->hashctx); ++ if (nctx->hashctx == NULL) { ++ fprintf(stderr, "HASH_Clone failed\n"); ++ exit(EXIT_FAILURE); /* FIX: callers do not bother checking error return */ ++ } ++ return nctx; ++} ++ ++RPM_GNUC_PURE ++static HASH_HashType getHashType(int hashalgo) ++{ ++ switch (hashalgo) { ++ case PGPHASHALGO_MD5: ++ return HASH_AlgMD5; ++ break; ++ case PGPHASHALGO_MD2: ++ return HASH_AlgMD2; ++ break; ++ case PGPHASHALGO_SHA1: ++ return HASH_AlgSHA1; ++ break; ++ case PGPHASHALGO_SHA256: ++ return HASH_AlgSHA256; ++ break; ++ case PGPHASHALGO_SHA384: ++ return HASH_AlgSHA384; ++ break; ++ case PGPHASHALGO_SHA512: ++ return HASH_AlgSHA512; ++ break; ++ case PGPHASHALGO_RIPEMD160: ++ case PGPHASHALGO_TIGER192: ++ case PGPHASHALGO_HAVAL_5_160: ++ default: ++ return HASH_AlgNULL; ++ break; ++ } ++} ++ ++size_t ++rpmDigestLength(int hashalgo) ++{ ++ return HASH_ResultLen(getHashType(hashalgo)); ++} ++ ++DIGEST_CTX ++rpmDigestInit(int hashalgo, rpmDigestFlags flags) ++{ ++ HASH_HashType type; ++ HASHContext *hashctx = NULL; ++ DIGEST_CTX ctx = NULL; ++ ++ if (type == HASH_AlgNULL || rpmInitCrypto() < 0) ++ return NULL; ++ ++ if ((hashctx = HASH_Create(type)) == NULL) ++ return NULL; ++ ctx = xcalloc(1, sizeof(*ctx)); ++ ctx->flags = flags; ++ ctx->algo = hashalgo; ++ ctx->hashctx = hashctx; ++ HASH_Begin(ctx->hashctx); ++ ++DPRINTF((stderr, "*** Init(%x) ctx %p hashctx %p\n", flags, ctx, ctx->hashctx)); ++ return ctx; ++} ++ ++int ++rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len) ++{ ++ size_t partlen; ++ const unsigned char *ptr = data; ++ ++ if (ctx == NULL) ++ return -1; ++ ++DPRINTF((stderr, "*** Update(%p,%p,%zd) hashctx %p \"%s\"\n", ctx, data, len, ctx->hashctx, ((char *)data))); ++ partlen = ~(unsigned int)0xFF; ++ while (len > 0) { ++ if (len < partlen) { ++ partlen = len; ++ } ++ HASH_Update(ctx->hashctx, ptr, partlen); ++ ptr += partlen; ++ len -= partlen; ++ } ++ return 0; ++} ++ ++int ++rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii) ++{ ++ unsigned char * digest; ++ unsigned int digestlen; ++ ++ if (ctx == NULL) ++ return -1; ++ digestlen = HASH_ResultLenContext(ctx->hashctx); ++ digest = xmalloc(digestlen); ++ ++DPRINTF((stderr, "*** Final(%p,%p,%p,%zd) hashctx %p digest %p\n", ctx, datap, lenp, asAscii, ctx->hashctx, digest)); ++/* FIX: check rc */ ++ HASH_End(ctx->hashctx, digest, (unsigned int *) &digestlen, digestlen); ++ ++ /* Return final digest. */ ++ if (!asAscii) { ++ if (lenp) *lenp = digestlen; ++ if (datap) { ++ *datap = digest; ++ digest = NULL; ++ } ++ } else { ++ if (lenp) *lenp = (2*digestlen) + 1; ++ if (datap) { ++ const uint8_t * s = (const uint8_t *) digest; ++ *datap = pgpHexStr(s, digestlen); ++ } ++ } ++ if (digest) { ++ memset(digest, 0, digestlen); /* In case it's sensitive */ ++ free(digest); ++ } ++ HASH_Destroy(ctx->hashctx); ++ memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ ++ free(ctx); ++ return 0; ++} +--- ./rpmio/rpmpgp.c.orig 2011-07-15 09:32:41.000000000 +0000 ++++ ./rpmio/rpmpgp.c 2011-07-18 16:42:25.000000000 +0000 +@@ -20,9 +20,6 @@ static int _debug = 0; + + static int _print = 0; + +-static int _crypto_initialized = 0; +-static int _new_process = 1; +- + typedef const struct pgpValTbl_s { + int val; + char const * const str; +@@ -315,89 +312,6 @@ int pgpValTok(pgpValTbl vs, const char * + } while ((++vs)->val != -1); + return vs->val; + } +-/** +- * @return 0 on success +- */ +-static int pgpMpiSet(const char * pre, unsigned int lbits, +- uint8_t *dest, const uint8_t * p, const uint8_t * pend) +-{ +- unsigned int mbits = pgpMpiBits(p); +- unsigned int nbits; +- size_t nbytes; +- uint8_t *t = dest; +- unsigned int ix; +- +- if ((p + ((mbits+7) >> 3)) > pend) +- return 1; +- +- if (mbits > lbits) +- return 1; +- +- nbits = (lbits > mbits ? lbits : mbits); +- nbytes = ((nbits + 7) >> 3); +- ix = (nbits - mbits) >> 3; +- +-if (_debug) +-fprintf(stderr, "*** mbits %u nbits %u nbytes %zu ix %u\n", mbits, nbits, nbytes, ix); +- if (ix > 0) memset(t, '\0', ix); +- memcpy(t+ix, p+2, nbytes-ix); +-if (_debug) +-fprintf(stderr, "*** %s %s\n", pre, pgpHexStr(dest, nbytes)); +- +- return 0; +-} +- +-/** +- * @return NULL on error +- */ +-static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p) +-{ +- size_t nbytes = pgpMpiLen(p)-2; +- +- if (item == NULL) { +- if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL) +- return item; +- } else { +- if (arena != NULL) +- item->data = PORT_ArenaGrow(arena, item->data, item->len, nbytes); +- else +- item->data = PORT_Realloc(item->data, nbytes); +- +- if (item->data == NULL) { +- if (arena == NULL) +- SECITEM_FreeItem(item, PR_TRUE); +- return NULL; +- } +- } +- +- memcpy(item->data, p+2, nbytes); +- item->len = nbytes; +- return item; +-} +-/*@=boundswrite@*/ +- +-static SECKEYPublicKey *pgpNewPublicKey(KeyType type) +-{ +- PRArenaPool *arena; +- SECKEYPublicKey *key; +- +- arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); +- if (arena == NULL) +- return NULL; +- +- key = PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey)); +- +- if (key == NULL) { +- PORT_FreeArena(arena, PR_FALSE); +- return NULL; +- } +- +- key->keyType = type; +- key->pkcs11ID = CK_INVALID_HANDLE; +- key->pkcs11Slot = NULL; +- key->arena = arena; +- return key; +-} + + /** \ingroup rpmpgp + * Is buffer at beginning of an OpenPGP packet? +@@ -593,29 +507,16 @@ static int pgpPrtSigParams(pgpTag tag, u + { + const uint8_t * pend = h + hlen; + size_t i; +- SECItem dsaraw; +- unsigned char dsabuf[2*DSA_SUBPRIME_LEN]; + char *mpi; + +- dsaraw.type = 0; +- dsaraw.data = dsabuf; +- dsaraw.len = sizeof(dsabuf); +- + for (i = 0; p < pend; i++, p += pgpMpiLen(p)) { + if (pubkey_algo == PGPPUBKEYALGO_RSA) { + if (i >= 1) break; + if (_dig && + (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT)) + { +- switch (i) { +- case 0: /* m**d */ +- _dig->sigdata = pgpMpiItem(NULL, _dig->sigdata, p); +- if (_dig->sigdata == NULL) +- return 1; +- break; +- default: +- break; +- } ++ if (pgpSetSigMpiRSA(_dig, i, p)) ++ return 1; + } + pgpPrtStr("", pgpSigRSA[i]); + } else if (pubkey_algo == PGPPUBKEYALGO_DSA) { +@@ -623,30 +524,8 @@ static int pgpPrtSigParams(pgpTag tag, u + if (_dig && + (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT)) + { +- int xx; +- xx = 0; +- switch (i) { +- case 0: +- memset(dsaraw.data, '\0', 2*DSA_SUBPRIME_LEN); +- /* r */ +- xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data, p, pend); +- break; +- case 1: /* s */ +- xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data + DSA_SUBPRIME_LEN, p, pend); +- if (_dig->sigdata != NULL) +- SECITEM_FreeItem(_dig->sigdata, PR_FALSE); +- else if ((_dig->sigdata=SECITEM_AllocItem(NULL, NULL, 0)) == NULL) { +- xx = 1; +- break; +- } +- if (DSAU_EncodeDerSig(_dig->sigdata, &dsaraw) != SECSuccess) +- xx = 1; +- break; +- default: +- xx = 1; +- break; +- } +- if (xx) return xx; ++ if (pgpSetSigMpiDSA(_dig, i, p)) ++ return 1; + } + pgpPrtStr("", pgpSigDSA[i]); + } else { +@@ -842,49 +721,11 @@ static const uint8_t * pgpPrtPubkeyParam + char * mpi; + if (pubkey_algo == PGPPUBKEYALGO_RSA) { + if (i >= 2) break; +- if (_dig) { +- if (_dig->keydata == NULL) { +- _dig->keydata = pgpNewPublicKey(rsaKey); +- if (_dig->keydata == NULL) +- return NULL; +- } +- switch (i) { +- case 0: /* n */ +- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.modulus, p); +- break; +- case 1: /* e */ +- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.publicExponent, p); +- break; +- default: +- break; +- } +- } ++ pgpSetPubMpiRSA(_dig, i, p); + pgpPrtStr("", pgpPublicRSA[i]); + } else if (pubkey_algo == PGPPUBKEYALGO_DSA) { + if (i >= 4) break; +- if (_dig) { +- if (_dig->keydata == NULL) { +- _dig->keydata = pgpNewPublicKey(dsaKey); +- if (_dig->keydata == NULL) +- return NULL; +- } +- switch (i) { +- case 0: /* p */ +- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.prime, p); +- break; +- case 1: /* q */ +- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.subPrime, p); +- break; +- case 2: /* g */ +- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.base, p); +- break; +- case 3: /* y */ +- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.publicValue, p); +- break; +- default: +- break; +- } +- } ++ pgpSetPubMpiDSA(_dig, i, p); + pgpPrtStr("", pgpPublicDSA[i]); + } else if (pubkey_algo == PGPPUBKEYALGO_ELGAMAL_ENCRYPT) { + if (i >= 3) break; +@@ -1269,15 +1110,7 @@ void pgpCleanDig(pgpDig dig) + memset(&dig->signature, 0, sizeof(dig->signature)); + memset(&dig->pubkey, 0, sizeof(dig->pubkey)); + +- if (dig->keydata != NULL) { +- SECKEY_DestroyPublicKey(dig->keydata); +- dig->keydata = NULL; +- } +- +- if (dig->sigdata != NULL) { +- SECITEM_ZfreeItem(dig->sigdata, PR_TRUE); +- dig->sigdata = NULL; +- } ++ pgpCleanRSADSA(dig); + } + return; + } +@@ -1319,39 +1152,6 @@ int pgpPrtPkts(const uint8_t * pkts, siz + return 0; + } + +-static SECOidTag getSigAlg(pgpDigParams sigp) +-{ +- SECOidTag sigalg = SEC_OID_UNKNOWN; +- if (sigp->pubkey_algo == PGPPUBKEYALGO_DSA) { +- /* assume SHA1 for now, NSS doesn't have SECOID's for other types */ +- sigalg = SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST; +- } else if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) { +- switch (sigp->hash_algo) { +- case PGPHASHALGO_MD5: +- sigalg = SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION; +- break; +- case PGPHASHALGO_MD2: +- sigalg = SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION; +- break; +- case PGPHASHALGO_SHA1: +- sigalg = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION; +- break; +- case PGPHASHALGO_SHA256: +- sigalg = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION; +- break; +- case PGPHASHALGO_SHA384: +- sigalg = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION; +- break; +- case PGPHASHALGO_SHA512: +- sigalg = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION; +- break; +- default: +- break; +- } +- } +- return sigalg; +-} +- + char *pgpIdentItem(pgpDigParams digp) + { + char *id = NULL; +@@ -1409,30 +1209,12 @@ rpmRC pgpVerifySig(pgpDig dig, DIGEST_CT + if (dig->keydata == NULL) { + res = RPMRC_NOKEY; + } else { +- SECItem digest = { .type = siBuffer, .data = hash, .len = hashlen }; +- SECItem *sig = dig->sigdata; +- +- /* Zero-pad RSA signature to expected size if necessary */ + if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) { +- size_t siglen = SECKEY_SignatureLen(dig->keydata); +- if (siglen > sig->len) { +- size_t pad = siglen - sig->len; +- if ((sig = SECITEM_AllocItem(NULL, NULL, siglen)) == NULL) { +- goto exit; +- } +- memset(sig->data, 0, pad); +- memcpy(sig->data+pad, dig->sigdata->data, dig->sigdata->len); +- } +- } +- +- /* XXX VFY_VerifyDigest() is deprecated in NSS 3.12 */ +- if (VFY_VerifyDigest(&digest, dig->keydata, sig, +- getSigAlg(sigp), NULL) == SECSuccess) { +- res = RPMRC_OK; +- } +- +- if (sig != dig->sigdata) { +- SECITEM_ZfreeItem(sig, 1); ++ if (!pgpVerifyRSA(dig, hash, hashlen)) ++ res = RPMRC_OK; ++ } else if (sigp->pubkey_algo == PGPPUBKEYALGO_DSA) { ++ if (!pgpVerifyDSA(dig, hash, hashlen)) ++ res = RPMRC_OK; + } + } + +@@ -1620,50 +1402,3 @@ char * pgpArmorWrap(int atype, const uns + return val; + } + +-/* +- * Only flag for re-initialization here, in the common case the child +- * exec()'s something else shutting down NSS here would be waste of time. +- */ +-static void at_forkchild(void) +-{ +- _new_process = 1; +-} +- +-int rpmInitCrypto(void) { +- int rc = 0; +- +- /* Lazy NSS shutdown for re-initialization after fork() */ +- if (_new_process && _crypto_initialized) { +- rpmFreeCrypto(); +- } +- +- /* Initialize NSS if not already done */ +- if (!_crypto_initialized) { +- if (NSS_NoDB_Init(NULL) != SECSuccess) { +- rc = -1; +- } else { +- _crypto_initialized = 1; +- } +- } +- +- /* Register one post-fork handler per process */ +- if (_new_process) { +- if (pthread_atfork(NULL, NULL, at_forkchild) != 0) { +- rpmlog(RPMLOG_WARNING, _("Failed to register fork handler: %m\n")); +- } +- _new_process = 0; +- } +- return rc; +-} +- +-int rpmFreeCrypto(void) +-{ +- int rc = 0; +- if (_crypto_initialized) { +- rc = (NSS_Shutdown() != SECSuccess); +- _crypto_initialized = 0; +- } +- return rc; +-} +- +- diff --git a/packaging/rpm-gst-provides.patch b/packaging/rpm-gst-provides.patch new file mode 100644 index 0000000..afbc2a6 --- /dev/null +++ b/packaging/rpm-gst-provides.patch @@ -0,0 +1,14 @@ +Index: ./autodeps/linux.prov +=================================================================== +--- ./autodeps/linux.prov ++++ ./autodeps/linux.prov +@@ -102,4 +102,9 @@ fi + [ -x /usr/lib/rpm/find-provides.ksyms ] && + printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@" + ++# ++# --- GStreamer provides, codecs ++[ -x /usr/lib/rpm/gstreamer-provides ] && ++ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/gstreamer-provides | sort -u ++ + exit 0 diff --git a/packaging/rpm-macros.patch b/packaging/rpm-macros.patch new file mode 100644 index 0000000..8f3e1a2 --- /dev/null +++ b/packaging/rpm-macros.patch @@ -0,0 +1,57 @@ +Index: rpm-4.9.0/configure.ac +=================================================================== +--- rpm-4.9.0.orig/configure.ac ++++ rpm-4.9.0/configure.ac +@@ -831,6 +831,7 @@ unknown|pc|ibm|redhat|pld|mandrake|conec + test -f /etc/redhat-release && RPMCANONVENDOR=redhat + test -f /etc/SuSE-release && RPMCANONVENDOR=suse + test -f /etc/pld-release && RPMCANONVENDOR=pld ++ test -f /etc/tizen-release && RPMCANONVENDOR=tizen + test -f /etc/mandrake-release && RPMCANONVENDOR=mandrake + test -f /etc/conectiva-release && RPMCANONVENDOR=conectiva + test -f /etc/lvr-release && RPMCANONVENDOR=lvr +Index: rpm-4.9.0/platform.in +=================================================================== +--- rpm-4.9.0.orig/platform.in ++++ rpm-4.9.0/platform.in +@@ -76,6 +76,26 @@ + @redhat@#%defattr(-,root,root,-)\ + @redhat@#%{nil} + ++@tizen@#--------------------------------------------------------------------- ++@tizen@# Expanded at end of %prep ++@tizen@# ++@tizen@%__id_u @__ID_U@ ++@tizen@%__chown_Rhf @__CHOWN_RHF@ ++@tizen@%__chgrp_Rhf @__CHGRP_RHF@ ++@tizen@%_fixperms %{__chmod} -Rf @FIXPERMS@ ++@tizen@%__os_install_post \ ++@tizen@ %{_rpmconfigdir}/brp-compress \ ++@tizen@ %{_rpmconfigdir}/brp-strip %{__strip} \ ++@tizen@ %{_rpmconfigdir}/brp-strip-static-archive %{__strip} \ ++@tizen@ %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump} \ ++@tizen@ %{_rpmconfigdir}/tizen/find-docs.sh %{buildroot}\ ++@tizen@%{nil} ++@tizen@#--------------------------------------------------------------------- ++@tizen@# Always use %defattr(-,root,root) in %files (added in rpm-4.0.4) ++@tizen@# ++@tizen@#%files(n:f:) %%files%{?-f: -f %{-f*}}%{?-n: -n %{-n*}} %{?1}\ ++@tizen@#%defattr(-,root,root,-)\ ++@tizen@#%{nil} + + @apple@#--------------------------------------------------------------------- + @apple@# Apple Darwin vendor specific macros +Index: rpm-4.9.0/installplatform +=================================================================== +--- rpm-4.9.0.orig/installplatform ++++ rpm-4.9.0/installplatform +@@ -126,6 +126,9 @@ for SUBST in $SUBSTS ; do + redhat) + VENDORSED='-e s,^@redhat@,,' + ;; ++ tizen) ++ VENDORSED='-e s,^@tizen@,,' ++ ;; + apple) + VENDORSED='-e s,^@apple@,,' + ;; diff --git a/packaging/rpm-python.manifest b/packaging/rpm-python.manifest new file mode 100644 index 0000000..017d22d --- /dev/null +++ b/packaging/rpm-python.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/packaging/rpm-python.spec b/packaging/rpm-python.spec new file mode 100644 index 0000000..a55899a --- /dev/null +++ b/packaging/rpm-python.spec @@ -0,0 +1,78 @@ +# build against xz? +%bcond_without xz +# build against python +%bcond_without python +# sqlite backend is pretty useless +%bcond_with sqlite +# just for giggles, option to build with internal Berkeley DB +%bcond_with int_bdb + +%define rpmhome /usr/lib/rpm + +%define rpmver 4.9.1 + + +Summary: The RPM package management system +Name: rpm-python +Version: %{rpmver} +Release: 1 +BuildRequires: python-devel +%{expand:%(sed -n -e '/^Source1001:/d' -e '/^Source0:/,/^##PYTHON##/p' <%_sourcedir/rpm.spec)} +Source100: rpm.spec +Source1001: packaging/rpm-python.manifest +Requires: popt >= 1.10.2.1 +Requires: curl +Requires: rpm = %{version} +BuildRequires: db4-devel + + +# XXX generally assumed to be installed but make it explicit as rpm +# is a bit special... +BuildRequires: gawk +BuildRequires: elfutils-devel >= 0.112 +BuildRequires: elfutils-libelf-devel +BuildRequires: readline-devel zlib-devel +BuildRequires: nss-devel +# The popt version here just documents an older known-good version +BuildRequires: popt-devel >= 1.10.2 +BuildRequires: libfile-devel +BuildRequires: gettext-devel +BuildRequires: ncurses-devel +BuildRequires: bzip2-devel >= 0.9.0c-2 +BuildRequires: liblua-devel >= 5.1 +BuildRequires: libcap-devel +BuildRequires: xz-devel >= 4.999.8 +BuildRequires: uthash-devel +BuildRequires: libxml2-devel +BuildRequires: libattr-devel +BuildRequires: pkgconfig(libsmack) + + +%description +The RPM Package Manager (RPM) is a powerful command line driven +package management system capable of installing, uninstalling, +verifying, querying, and updating software packages. Each software +package consists of an archive of files along with information about +the package like its version, a description, etc. + +%prep +%{expand:%(sed -n -e '/^%%prep/,/^%%install/p' <%_sourcedir/rpm.spec | sed -e '1d' -e '$d')} +%install +rm -rf $RPM_BUILD_ROOT + +make DESTDIR="$RPM_BUILD_ROOT" install +find "%{buildroot}" -not -type d -and -not -path %{buildroot}%{_libdir}/python%{py_ver}/site-packages/rpm/\* -print0 | xargs -0 rm +pushd $RPM_BUILD_ROOT/%py_sitedir/rpm +rm -f _rpmmodule.a _rpmmodule.la +python %py_libdir/py_compile.py *.py +python -O %py_libdir/py_compile.py *.py +popd + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%manifest rpm-python.manifest +%defattr(-,root,root) +%{_libdir}/python* + diff --git a/packaging/rpm-shorten-changelog.patch b/packaging/rpm-shorten-changelog.patch new file mode 100644 index 0000000..b5f20b2 --- /dev/null +++ b/packaging/rpm-shorten-changelog.patch @@ -0,0 +1,92 @@ +Index: rpm-4.9.0/build/pack.c +=================================================================== +--- rpm-4.9.0.orig/build/pack.c ++++ rpm-4.9.0/build/pack.c +@@ -671,6 +671,63 @@ static rpmRC checkPackages(char *pkgchec + return RPMRC_OK; + } + ++static void trimChangelog(Header h) ++{ ++ static int oneshot; ++ static int cuttime, minnum, maxnum; ++ int * times; ++ char ** names = 0, ** texts = 0; ++ int i, keep, count = 0; ++ ++ if (!oneshot) { ++ char *binarychangelogtrim = rpmExpand("%{?_binarychangelogtrim}", NULL); ++ oneshot = 1; ++ if (binarychangelogtrim && *binarychangelogtrim) { ++ maxnum = atoi(binarychangelogtrim); ++ binarychangelogtrim = strchr(binarychangelogtrim, ','); ++ if (binarychangelogtrim) ++ binarychangelogtrim++; ++ } ++ if (binarychangelogtrim && *binarychangelogtrim) { ++ cuttime = atoi(binarychangelogtrim); ++ binarychangelogtrim = strchr(binarychangelogtrim, ','); ++ if (binarychangelogtrim) ++ binarychangelogtrim++; ++ } ++ if (binarychangelogtrim && *binarychangelogtrim) { ++ minnum = atoi(binarychangelogtrim); ++ binarychangelogtrim = strchr(binarychangelogtrim, ','); ++ } ++ } ++ if (!cuttime && !minnum && !maxnum) { ++ return; ++ } ++ if (!headerGetEntry(h, RPMTAG_CHANGELOGTIME, NULL, (void **) ×, &count)) ++ return; ++ if ((!cuttime || count <= minnum) && (!maxnum || count <= maxnum)) { ++ return; ++ } ++ keep = count; ++ if (maxnum && keep > maxnum) ++ keep = maxnum; ++ if (cuttime) { ++ for (i = 0; i < keep; i++) { ++ if (i >= minnum && times[i] < cuttime) ++ break; ++ } ++ keep = i; ++ } ++ if (keep >= count) ++ return; ++ headerGetEntry(h, RPMTAG_CHANGELOGNAME, NULL, (void **) &names, &count); ++ headerGetEntry(h, RPMTAG_CHANGELOGTEXT, NULL, (void **) &texts, &count); ++ headerModifyEntry(h, RPMTAG_CHANGELOGTIME, RPM_INT32_TYPE, times, keep); ++ headerModifyEntry(h, RPMTAG_CHANGELOGNAME, RPM_STRING_ARRAY_TYPE, names, keep); ++ headerModifyEntry(h, RPMTAG_CHANGELOGTEXT, RPM_STRING_ARRAY_TYPE, texts, keep); ++ free(names); ++ free(texts); ++} ++ + rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating) + { + struct cpioSourceArchive_s csabuf; +@@ -680,6 +737,7 @@ rpmRC packageBinaries(rpmSpec spec, cons + Package pkg; + char *pkglist = NULL; + ++ trimChangelog(spec->packages->header); + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + char *fn; + +Index: rpm-4.9.0/build/parseChangelog.c +=================================================================== +--- rpm-4.9.0.orig/build/parseChangelog.c ++++ rpm-4.9.0/build/parseChangelog.c +@@ -168,6 +168,11 @@ static rpmRC addChangelog(Header h, ARGV + return RPMRC_FAIL; + } + ++ /* workaround old suse oddity */ ++ if (*s == '-' && s[1] == ' ') { ++ s += 2; ++ } ++ + /* name */ + name = s; + while (*s != '\0') s++; diff --git a/packaging/rpm.changes b/packaging/rpm.changes new file mode 100644 index 0000000..2ce3727 --- /dev/null +++ b/packaging/rpm.changes @@ -0,0 +1,117 @@ +* Fri Dec 14 2012 Elena Reshetova - 4.9.0 +- Fixing issues in security plugin found during the fuzzing + - Adding check for ac domain name + - Adding verification for xml parcer return code in msmProcessDefine and sub-functions + +* Wed Dec 5 2012 Elena Reshetova - 4.9.0 +- Making upgrade policy more restrictive: only packages from more trusted sources can overwrite the packages + +* Thu Nov 29 2012 Elena Reshetova - 4.9.0 +- Device security policy now includes * and ^ domains + +* Mon Nov 12 2012 Elena Reshetova - 4.9.0 +- Changes to the security plugin + - Minor fix for the sw source processing + - Add a check for the magic_t cookie initialization + - Adding a hook to label unowned directories + - Fix for the transmutable attribute setting + +* Tue Sep 11 2012 Elena Reshetova - 4.9.0 +- Changes to the security plugin + - Moving the place of the FSM_CLOSED hook in order to ignore the hardlinks + +* Thu Sep 6 2012 Elena Reshetova - 4.9.0 +- Changes to the security plugin + - Using libmagic instead of file utility to check file's content + +* Wed Sep 5 2012 Elena Reshetova - 4.9.0 +- Changes to the security plugin + - Removing the fopen check before setting xattr + - Changing fsetxattr to lsetxattr + +* Tue Sep 4 2012 Elena Reshetova - 4.9.0 +- Changes to the security plugin + - Adding an option to specify wildcards in file paths (bug TDIS-121) + - Adding a possibility to specify more fine-grained permits (bug TDIS-120) + - Minor cosmetic fixes + +* Tue Aug 21 2012 William Douglas submit/trunk/2012-08-08.064212@aa8ef92 +- Revert 88da3b2439b41193f3d964db7d4a7f0e8321c8f1 + +* Wed Aug 08 2012 Elena Reshetova - 4.9.0 +- Changes to the security plugin + - Moving the setup of xattr to the FSM_CLOSED hook + - Adding a new ac domain "Isolated" to the policy + - Using "Isolated" domain in cases when default labels of the files can't be determined + +* Mon Aug 06 2012 William Douglas build/2012-07-30.142546@9c7636b +[ William Douglas ] +- Keep function symbols for backtraces. + +* Mon Aug 06 2012 Elena Reshetova - 4.9.0 +- Changes to the security plugin + - Fix the smack directory creation when subdir is present + - Add a check for access type lenght + - Small code rearrangments + +* Mon Jul 30 2012 Elena Reshetova - 4.9.0 +- Changes to the security plugin + - Cosmetic change to msmFreePointer function + - Adding more log on errors + - Removing the decription tags + - Verifying the allowed characters in label, domain and access type + - Not allowing sections in manifest to repeat + - Improving handling of hash lists + +* Fri Jul 24 2012 Elena Reshetova - 4.9.0 +- Fixing the handling of all_packages uthash list +- Changing the free functions to use msmFreePointer in order to delete safely +- Changing the request handling in order to allow only one domain name inside a request section +- Changing the allowed length of the label or domain to be 255 + +* Fri Jul 12 2012 Elena Reshetova - 4.9.0 +- Fixing the path handling in plugin during labelling phase +- Fixing the sw source retrival in case verify hook isn't called + +* Fri Jul 10 2012 Elena Reshetova - 4.9.0 +- Fixing rpm-security-plugin bug PTSEC-22: dbus manifest is not generated correctly +- Fixing rpm-security-plugin bug PTSEC-24: package upgrade removes the file from /etc/smack/accesses.d + +* Wed Jul 04 2012 Anas Nashif 6bf3412 +- remove auto dependencies + +* Mon Jun 25 2012 Anas Nashif ab35aed +- update release +- require bzip2-devel >= 1.0.5 + +* Mon Jun 25 2012 Anas Nashif 70cc161 +- require bzip2-devel >= 1.0.5 + +* Thu Jun 21 2012 Anas Nashif 6863478 +- fixed optflags and perl auto-dependencies + +* Thu Jun 21 2012 Anas Nashif c290eab +- disable perl auto requires +- fixed optflags + +* Wed Jun 20 2012 Elena, Reshetova dd9dc00 +- fixing pre/posttrans scripts calls and plugin + +* Fri Jun 15 2012 Ryan Ware bf466c3 +- Version 4.9.0, release to OBS + +* Tue Jun 12 2012 Elena, Reshetova 733aadb +- Fixng rpm-security-plugin bugs (PTSEC-19, PTSEC-20, PTSEC-21) + +* Wed May 30 2012 Ryan Ware 91057db +- Add default Smack manifest for rpm.spec +- Add default Smack manifest for rpm-python.spec + +* Tue May 29 2012 Elena, Reshetova 3257c01 +- adding fixes for exec label handling and fixing plugin dependencies + +* Mon May 21 2012 Kim Kibum dec48cf +- Upload Tizen:Base source +[ Hyesook Choi ] +- Initial empty repository + diff --git a/packaging/rpm.manifest b/packaging/rpm.manifest new file mode 100644 index 0000000..017d22d --- /dev/null +++ b/packaging/rpm.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/packaging/rpm.spec b/packaging/rpm.spec new file mode 100644 index 0000000..2380dd3 --- /dev/null +++ b/packaging/rpm.spec @@ -0,0 +1,378 @@ +# run internal testsuite? +%bcond_without check + + +Name: rpm +Version: 4.9.1 +Release: 4 +Summary: The RPM package management system +Url: http://www.rpm.org/ +Group: System/Base +Source0: http://rpm.org/releases/rpm-4.9.x/rpm-%{version}.tar.bz2 +Source1: libsymlink.attr +Source11: db-4.8.30.tar.gz +Source20: macros +Source21: find-docs.sh +Source22: device-sec-policy +Source1001: packaging/rpm.manifest + +Patch1: db.diff +# quilt patches start here +Patch3: rpm-4.5.90-pkgconfig-path.patch +Patch4: rpm-4.5.90-gstreamer-provides.patch +Patch5: rpm-4.8.0-tilde.patch +Patch6: rpm-macros.patch +Patch7: rpm-4.9.0-tizen-arm.patch +Patch10: remove-translations.patch +Patch11: rpm-shorten-changelog.patch +Patch12: no_rep_autop.diff +Patch13: finddebuginfo.diff +Patch14: debugsource-package.diff +Patch15: debugsubpkg.diff +Patch24: autodeps.diff +Patch49: mimetype.diff +Patch52: firmware.diff +Patch56: buildidprov.diff +Patch64: pythondeps.diff +Patch65: fontprovides.diff +Patch66: rpm-gst-provides.patch +Patch76: fileattrs.diff +Patch80: optflags.patch +Patch81: build_pack_4.9.1_fix.patch +Patch82: lib_rpmdb_4.9.1_fix.patch +Patch83: rpmbuild_4.9.1_fix.patch +Patch84: rpmbuild_rpmfc_4.9.1_fix.patch +Patch85: rpmio_base64_4.9.1_fix.patch +Patch86: rpmlib_format_value_4.9.1_fix.patch +Patch87: security_4.9.1.patch +Patch90: disableperl.patch +Patch100: eu-strip.patch + +# Partially GPL/LGPL dual-licensed and some bits with BSD +# SourceLicense: (GPLv2+ and LGPLv2+ with exceptions) and BSD +License: GPLv2+ +##PYTHON## + +Requires: curl + +BuildRequires: bzip2-devel >= 1.0.5 +BuildRequires: elfutils-devel >= 0.112 +BuildRequires: elfutils-libelf-devel +BuildRequires: libfile-devel +BuildRequires: gettext-tools +BuildRequires: libcap-devel +BuildRequires: liblua-devel >= 5.1 +BuildRequires: pkgconfig(ncurses) +# The popt version here just documents an older known-good version +BuildRequires: popt-devel >= 1.10.2 +BuildRequires: readline-devel +BuildRequires: xz-devel >= 4.999.8 +BuildRequires: zlib-devel +BuildRequires: nss-devel +BuildRequires: uthash-devel +BuildRequires: libxml2-devel +BuildRequires: libattr-devel +BuildRequires: pkgconfig(libsmack) + + +%description +The RPM Package Manager (RPM) is a powerful command line driven +package management system capable of installing, uninstalling, +verifying, querying, and updating software packages. Each software +package consists of an archive of files along with information about +the package like its version, a description, etc. + +%package libs +License: GPLv2+ and LGPLv2+ with exceptions +Summary: Libraries for manipulating RPM packages +Group: Development/Libraries +Requires: rpm = %{version} + +%description libs +This package contains the RPM shared libraries. + +%package devel +License: GPLv2+ and LGPLv2+ with exceptions +Summary: Development files for manipulating RPM packages +Group: Development/Libraries +Requires: libfile-devel +Requires: rpm = %{version} + +%description devel +This package contains the RPM C library and header files. These +development files will simplify the process of writing programs that +manipulate RPM packages and databases. These files are intended to +simplify the process of creating graphical package managers or any +other tools that need an intimate knowledge of RPM packages in order +to function. + +This package should be installed if you want to develop programs that +will manipulate RPM packages and databases. + +%package build +Summary: Scripts and executable programs used to build packages +Group: Development/Tools +Requires: binutils +Requires: bzip2 +Requires: /bin/cpio +Requires: diffutils +Requires: elfutils >= 0.128 +Requires: file +Requires: /bin/find +Requires: /bin/awk +Requires: /bin/grep +Requires: /bin/gzip +Requires: lzma +Requires: patch >= 2.5 +Requires: pkgconfig +Requires: rpm = %{version} +Requires: /bin/sed +Requires: unzip +Requires: xz + +%description build +The rpm-build package contains the scripts and executable programs +that are used to build packages using the RPM Package Manager. + + +%package security-plugin +Summary: MSM security plugin for rpm +Group: Development/Libraries +Requires: rpm = %{version}-%{release} + +%description security-plugin +This package contains the MSM security plugin for rpm that performs +security-related functionality. + +%prep +%setup -q -n rpm-%{version} +tar xzf %{SOURCE11} +ln -s db-4.8.30 db +chmod -R u+w db/* +rm -f rpmdb/db.h + +%patch1 -p0 +%patch3 -p1 -b .pkgconfig-path +#%patch4 -p1 -b .gstreamer-prov +%patch5 -p1 -b .tilde +%patch6 -p1 -b .vendor +%patch7 -p1 -b .arm +%patch10 -p1 +%patch11 -p1 +%patch12 -p0 +%patch13 -p0 +%patch14 -p0 +#%patch15 -p0 +#%patch24 -p0 +#%patch49 -p0 +#%patch52 -p0 +#%patch56 -p0 +#%patch64 -p0 +#%patch65 -p0 +#%patch66 -p0 +#%patch76 -p0 +%patch80 -p1 +%patch81 -p1 +%patch82 -p1 +%patch83 -p1 +%patch84 -p1 +%patch85 -p1 +%patch86 -p1 +%patch87 -p1 -b .msm +#%patch90 -p1 +%patch100 -p1 + + +rm -f m4/libtool.m4 +rm -f m4/lt*.m4 + +%build +cp %{SOURCE1001} . +CPPFLAGS="$CPPFLAGS `pkg-config --cflags nss`" +CFLAGS="%{optflags}" +export CPPFLAGS CFLAGS LDFLAGS + +# Using configure macro has some unwanted side-effects on rpm platform +# setup, use the old-fashioned way for now only defining minimal paths. + +libtoolize -f -c +./autogen.sh \ + --prefix=%{_prefix} \ + --sysconfdir=%{_sysconfdir} \ + --localstatedir=%{_localstatedir} \ + --sharedstatedir=%{_localstatedir}/lib \ + --libdir=%{_libdir} \ +%if %{with python} + --enable-python \ +%endif + --with-lua \ + --with-cap \ + --with-msm + +make %{?_smp_mflags} + +%install + +%make_install +find %{buildroot} -regex ".*\\.la$" | xargs rm -f -- + +mkdir -p %{buildroot}%{_sysconfdir}/rpm +mkdir -p %{buildroot}%{_libdir}/rpm +install -m 644 %{SOURCE1} %{buildroot}%{_libdir}/rpm/fileattrs/libsymlink.attr +install -m 644 %{SOURCE22} ${RPM_BUILD_ROOT}%{_sysconfdir}/device-sec-policy +mkdir -p %{buildroot}%{_localstatedir}/lib/rpm + +#install -m 755 scripts/firmware.prov %{buildroot}%{_prefix}/lib/rpm +#install -m 755 scripts/debuginfo.prov %{buildroot}%{_prefix}/lib/rpm + +for dbi in \ + Basenames Conflictname Dirnames Group Installtid Name Packages \ + Providename Provideversion Requirename Requireversion Triggername \ + Filedigests Pubkeys Sha1header Sigmd5 Obsoletename \ + __db.001 __db.002 __db.003 __db.004 __db.005 __db.006 __db.007 \ + __db.008 __db.009 +do + touch %{buildroot}%{_localstatedir}/lib/rpm/$dbi +done + +#macros + +mkdir -p %{buildroot}%{_libdir}/rpm/tizen +install -m 755 %{SOURCE21} %{buildroot}%{_libdir}/rpm/tizen +install -m 644 %{SOURCE20} %{buildroot}%{_libdir}/rpm/tizen + +# avoid dragging in tonne of perl libs for an unused script +chmod 0644 %{buildroot}/%{_libdir}/rpm/perldeps.pl + +rm -rf %{buildroot}%{_mandir}/*/man? +%clean +rm -rf %{buildroot} + +%if %{with check} +%check +make check +%endif + +%remove_docs +rm -rf %{buildroot}/usr/share/man +%find_lang rpm + +%post libs -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + +%posttrans +# XXX this is klunky and ugly, rpm itself should handle this +dbstat=/usr/lib/rpm/rpmdb_stat +if [ -x "$dbstat" ]; then + if "$dbstat" -e -h /var/lib/rpm 2>&1 | grep -q "doesn't match environment version \| Invalid argument"; then + rm -f /var/lib/rpm/__db.* + fi +fi +exit 0 + + +%files -f rpm.lang +%manifest rpm.manifest +%defattr(-,root,root,-) +%doc GROUPS COPYING CREDITS +%exclude /usr/lib/rpm/rpmdb_loadcvt +%dir %{_sysconfdir}/rpm + +%attr(0755, root, root) %dir %{_localstatedir}/lib/rpm +%attr(0644, root, root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_localstatedir}/lib/rpm/* +%attr(0755, root, root) %dir %{_libdir}/rpm + +/bin/rpm +%{_bindir}/rpmkeys +%{_bindir}/rpmspec +%{_bindir}/rpm2cpio +%{_bindir}/rpmdb +%{_bindir}/rpmsign +%{_bindir}/rpmquery +%{_bindir}/rpmverify + +%{_libdir}/rpm-plugins/exec.so +%{_libdir}/rpm-plugins/sepolicy.so + +%{_libdir}/rpm/macros +%{_libdir}/rpm/tizen/macros +%{_libdir}/rpm/rpmpopt* +%{_libdir}/rpm/rpmrc + +%{_libdir}/rpm/rpmdb_* +%{_libdir}/rpm/rpm.daily +%{_libdir}/rpm/rpm.log +%{_libdir}/rpm/rpm2cpio.sh +%{_libdir}/rpm/tgpg + +%{_libdir}/rpm/platform + +%files libs +%manifest rpm.manifest +%defattr(-,root,root) +%{_libdir}/librpm*.so.* + +%files build +%manifest rpm.manifest +%defattr(-,root,root) +%{_bindir}/rpmbuild +%{_bindir}/gendiff + +%{_libdir}/rpm/fileattrs/*.attr +%{_libdir}/rpm/script.req + +%{_libdir}/rpm/brp-* +%{_libdir}/rpm/check-buildroot +%{_libdir}/rpm/check-files +%{_libdir}/rpm/check-prereqs +%{_libdir}/rpm/check-rpaths* +%{_libdir}/rpm/debugedit +%{_libdir}/rpm/elfdeps +%{_libdir}/rpm/find-debuginfo.sh +%{_libdir}/rpm/tizen/find-docs.sh +%{_libdir}/rpm/find-lang.sh +%{_libdir}/rpm/find-provides +%{_libdir}/rpm/find-requires +%{_libdir}/rpm/javadeps +%{_libdir}/rpm/mono-find-provides +%{_libdir}/rpm/mono-find-requires +%{_libdir}/rpm/ocaml-find-provides.sh +%{_libdir}/rpm/ocaml-find-requires.sh +%{_libdir}/rpm/osgideps.pl +%{_libdir}/rpm/perldeps.pl +%{_libdir}/rpm/libtooldeps.sh +%{_libdir}/rpm/pkgconfigdeps.sh +%{_libdir}/rpm/perl.prov +#%{_libdir}/rpm/debuginfo.prov +#%{_libdir}/rpm/firmware.prov +%{_libdir}/rpm/perl.req +%{_libdir}/rpm/tcl.req +%{_libdir}/rpm/pythondeps.sh +%{_libdir}/rpm/rpmdeps +%{_libdir}/rpm/config.guess +%{_libdir}/rpm/config.sub +%{_libdir}/rpm/mkinstalldirs +%{_libdir}/rpm/desktop-file.prov +%{_libdir}/rpm/fontconfig.prov + +%{_libdir}/rpm/macros.perl +%{_libdir}/rpm/macros.python +%{_libdir}/rpm/macros.php + + + +%files devel +%manifest rpm.manifest +%defattr(-,root,root) +%{_includedir}/rpm +%{_libdir}/librp*[a-z].so +%{_bindir}/rpmgraph +%{_libdir}/pkgconfig/rpm.pc + + +%files security-plugin +%manifest rpm.manifest +%defattr(-,root,root) +%{_libdir}/rpm-plugins/msm.so +%config(noreplace) %{_sysconfdir}/device-sec-policy + diff --git a/packaging/rpmbuild_4.9.1_fix.patch b/packaging/rpmbuild_4.9.1_fix.patch new file mode 100644 index 0000000..fb46271 --- /dev/null +++ b/packaging/rpmbuild_4.9.1_fix.patch @@ -0,0 +1,24 @@ +From f1ccce85da03399b7c33c35b3573df2b84d92ac7 Mon Sep 17 00:00:00 2001 +From: Elena, Reshetova +Date: Mon, 20 Feb 2012 15:48:49 +0200 +Subject: [PATCH] Fix for rpmbuild functionality + +--- + rpmbuild.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/rpmbuild.c b/rpmbuild.c +index 856798a..0165f30 100644 +--- a/rpmbuild.c ++++ b/rpmbuild.c +@@ -248,6 +248,7 @@ static int isSpecFile(const char * specfile) + if (f == NULL || ferror(f)) { + rpmlog(RPMLOG_ERR, _("Unable to open spec file %s: %s\n"), + specfile, strerror(errno)); ++ if (f) fclose(f); + return 0; + } + count = fread(buf, sizeof(buf[0]), sizeof(buf), f); +-- +1.7.4.1 + diff --git a/packaging/rpmbuild_rpmfc_4.9.1_fix.patch b/packaging/rpmbuild_rpmfc_4.9.1_fix.patch new file mode 100644 index 0000000..cf68be8 --- /dev/null +++ b/packaging/rpmbuild_rpmfc_4.9.1_fix.patch @@ -0,0 +1,158 @@ +From 3a0d3dea6d7cd4d66144ee6a68e91e327adaf874 Mon Sep 17 00:00:00 2001 +From: Elena, Reshetova +Date: Mon, 20 Feb 2012 15:50:05 +0200 +Subject: [PATCH] Fix for rpmbuild rpmfc functionality + +--- + build/rpmfc.c | 127 +++++++++++++++++++++++++++++---------------------------- + 1 files changed, 64 insertions(+), 63 deletions(-) + +diff --git a/build/rpmfc.c b/build/rpmfc.c +index a779b6a..698d485 100644 +--- a/build/rpmfc.c ++++ b/build/rpmfc.c +@@ -681,79 +681,80 @@ void rpmfcPrint(const char * msg, rpmfc fc, FILE * fp) + int dx; + int fx; + +-int nprovides; +-int nrequires; ++ int nprovides; ++ int nrequires; + + if (fp == NULL) fp = stderr; + + if (msg) + fprintf(fp, "===================================== %s\n", msg); + +-nprovides = rpmdsCount(fc->provides); +-nrequires = rpmdsCount(fc->requires); +- +- if (fc) +- for (fx = 0; fx < fc->nfiles; fx++) { +-assert(fx < fc->fcdictx->nvals); +- cx = fc->fcdictx->vals[fx]; +-assert(fx < fc->fcolor->nvals); +- fcolor = fc->fcolor->vals[fx]; +- ARGV_t fattrs = fc->fattrs[fx]; +- +- fprintf(fp, "%3d %s", fx, fc->fn[fx]); +- if (fcolor != RPMFC_BLACK) ++ if (fc) { ++ nprovides = rpmdsCount(fc->provides); ++ nrequires = rpmdsCount(fc->requires); ++ ++ for (fx = 0; fx < fc->nfiles; fx++) { ++ assert(fx < fc->fcdictx->nvals); ++ cx = fc->fcdictx->vals[fx]; ++ assert(fx < fc->fcolor->nvals); ++ fcolor = fc->fcolor->vals[fx]; ++ ARGV_t fattrs = fc->fattrs[fx]; ++ ++ fprintf(fp, "%3d %s", fx, fc->fn[fx]); ++ if (fcolor != RPMFC_BLACK) + fprintf(fp, "\t0x%x", fc->fcolor->vals[fx]); +- else ++ else + fprintf(fp, "\t%s", fc->cdict[cx]); +- if (fattrs) { +- char *attrs = argvJoin(fattrs, ","); +- fprintf(fp, " [%s]", attrs); +- free(attrs); +- } else { +- fprintf(fp, " [none]"); +- } +- fprintf(fp, "\n"); ++ if (fattrs) { ++ char *attrs = argvJoin(fattrs, ","); ++ fprintf(fp, " [%s]", attrs); ++ free(attrs); ++ } else { ++ fprintf(fp, " [none]"); ++ } ++ fprintf(fp, "\n"); + +- if (fc->fddictx == NULL || fc->fddictn == NULL) +- continue; ++ if (fc->fddictx == NULL || fc->fddictn == NULL) ++ continue; + +-assert(fx < fc->fddictx->nvals); +- dx = fc->fddictx->vals[fx]; +-assert(fx < fc->fddictn->nvals); +- ndx = fc->fddictn->vals[fx]; +- +- while (ndx-- > 0) { +- const char * depval; +- unsigned char deptype; +- unsigned ix; +- +- ix = fc->ddictx->vals[dx++]; +- deptype = ((ix >> 24) & 0xff); +- ix &= 0x00ffffff; +- depval = NULL; +- switch (deptype) { +- default: +-assert(depval != NULL); +- break; +- case 'P': +- if (nprovides > 0) { +-assert(ix < nprovides); +- (void) rpmdsSetIx(fc->provides, ix-1); +- if (rpmdsNext(fc->provides) >= 0) +- depval = rpmdsDNEVR(fc->provides); +- } +- break; +- case 'R': +- if (nrequires > 0) { +-assert(ix < nrequires); +- (void) rpmdsSetIx(fc->requires, ix-1); +- if (rpmdsNext(fc->requires) >= 0) +- depval = rpmdsDNEVR(fc->requires); ++ assert(fx < fc->fddictx->nvals); ++ dx = fc->fddictx->vals[fx]; ++ assert(fx < fc->fddictn->nvals); ++ ndx = fc->fddictn->vals[fx]; ++ ++ while (ndx-- > 0) { ++ const char * depval; ++ unsigned char deptype; ++ unsigned ix; ++ ++ ix = fc->ddictx->vals[dx++]; ++ deptype = ((ix >> 24) & 0xff); ++ ix &= 0x00ffffff; ++ depval = NULL; ++ switch (deptype) { ++ default: ++ assert(depval != NULL); ++ break; ++ case 'P': ++ if (nprovides > 0) { ++ assert(ix < nprovides); ++ (void) rpmdsSetIx(fc->provides, ix-1); ++ if (rpmdsNext(fc->provides) >= 0) ++ depval = rpmdsDNEVR(fc->provides); ++ } ++ break; ++ case 'R': ++ if (nrequires > 0) { ++ assert(ix < nrequires); ++ (void) rpmdsSetIx(fc->requires, ix-1); ++ if (rpmdsNext(fc->requires) >= 0) ++ depval = rpmdsDNEVR(fc->requires); ++ } ++ break; + } +- break; ++ if (depval) ++ fprintf(fp, "\t%s\n", depval); + } +- if (depval) +- fprintf(fp, "\t%s\n", depval); + } + } + } +-- +1.7.4.1 + diff --git a/packaging/rpmio_base64_4.9.1_fix.patch b/packaging/rpmio_base64_4.9.1_fix.patch new file mode 100644 index 0000000..71d8ef4 --- /dev/null +++ b/packaging/rpmio_base64_4.9.1_fix.patch @@ -0,0 +1,48 @@ +From 524ee5fa925cc40ff72ac79769f4c7e3f62e5092 Mon Sep 17 00:00:00 2001 +From: Elena, Reshetova +Date: Mon, 20 Feb 2012 15:50:55 +0200 +Subject: [PATCH] Fix for rpmio base64 handling + +--- + rpmio/base64.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/rpmio/base64.c b/rpmio/base64.c +index 6b006e1..3ebf2a5 100644 +--- a/rpmio/base64.c ++++ b/rpmio/base64.c +@@ -104,7 +104,7 @@ static int base64_decode_value(unsigned char value_in) + { + static const int decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51}; + value_in -= 43; +- if (value_in > sizeof(decoding)/sizeof(int)) ++ if (value_in >= sizeof(decoding)/sizeof(int)) + return -1; + return decoding[value_in]; + } +@@ -165,6 +165,7 @@ int b64decode(const char *in, void **out, size_t *outlen) + { + size_t outcnt = 0; + const char *inptr = in; ++ char *outptr; + + *out = NULL; + +@@ -189,12 +190,13 @@ int b64decode(const char *in, void **out, size_t *outlen) + + outcnt = (outcnt / 4) * 3; + +- *out = malloc(outcnt + 1); /* base64_decode_block can write one extra character */ ++ *out = outptr = malloc(outcnt + 2); /* base64_decode_block can write one extra character, reserve one more for null termination */ + + if (*out == NULL) + return 4; + + *outlen = base64_decode_block(in, inptr - in, *out); ++ outptr[*outlen] = '\0'; /* null terminate */ + + return 0; + } +-- +1.7.4.1 + diff --git a/packaging/rpmlib_format_value_4.9.1_fix.patch b/packaging/rpmlib_format_value_4.9.1_fix.patch new file mode 100644 index 0000000..ae0293c --- /dev/null +++ b/packaging/rpmlib_format_value_4.9.1_fix.patch @@ -0,0 +1,40 @@ +From 8a0cc408da4644b67af0b57fc2c8e75e182f0e48 Mon Sep 17 00:00:00 2001 +From: Elena, Reshetova +Date: Mon, 20 Feb 2012 15:51:50 +0200 +Subject: [PATCH] Fix for rpmlib format value + +--- + lib/headerfmt.c | 15 ++++++++------- + 1 files changed, 8 insertions(+), 7 deletions(-) + +diff --git a/lib/headerfmt.c b/lib/headerfmt.c +index 49c7047..05048f7 100644 +--- a/lib/headerfmt.c ++++ b/lib/headerfmt.c +@@ -631,15 +631,16 @@ static char * formatValue(headerSprintfArgs hsa, sprintfTag tag, int element) + val = xstrdup("(none)"); + } + +- need = strlen(val); ++ if (val) { ++ need = strlen(val); + +- if (val && need > 0) { +- t = hsaReserve(hsa, need); +- te = stpcpy(t, val); +- hsa->vallen += (te - t); ++ if (need > 0) { ++ t = hsaReserve(hsa, need); ++ te = stpcpy(t, val); ++ hsa->vallen += (te - t); ++ } ++ free(val); + } +- free(val); +- + return (hsa->val + hsa->vallen); + } + +-- +1.7.4.1 + diff --git a/packaging/security_4.9.1.patch b/packaging/security_4.9.1.patch new file mode 100644 index 0000000..9967063 --- /dev/null +++ b/packaging/security_4.9.1.patch @@ -0,0 +1,5575 @@ +diff -Nuarp rpm/build/files.c rpm-security/build/files.c +--- rpm/build/files.c 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/build/files.c 2012-10-01 10:29:50.283983646 +0300 +@@ -827,6 +827,7 @@ static VFA_t virtualFileAttributes[] = { + { "%readme", 0, RPMFILE_README }, + { "%license", 0, RPMFILE_LICENSE }, + { "%pubkey", 0, RPMFILE_PUBKEY }, ++ { "%manifest", 0, RPMFILE_SECMANIFEST }, + { NULL, 0, 0 } + }; + +@@ -894,7 +895,7 @@ static rpmRC parseForSimple(rpmSpec spec + if (fl->currentFlags & RPMFILE_DOC) { + rstrscat(&specialDocBuf, " ", s, NULL); + } else +- if (fl->currentFlags & RPMFILE_PUBKEY) ++ if (fl->currentFlags & (RPMFILE_PUBKEY|RPMFILE_SECMANIFEST)) + { + *fileName = s; + } else { +@@ -1612,6 +1613,14 @@ static rpmRC processMetadataFile(Package + apkt = pgpArmorWrap(PGPARMOR_PUBKEY, pkt, pktlen); + break; + } ++ case RPMTAG_SECMANIFEST: ++ if ((xx = rpmioSlurp(fn, &pkt, &pktlen)) != 0 || pkt == NULL) { ++ rpmlog(RPMLOG_ERR, _("%s: Security manifest file read failed.\n"), fn); ++ goto exit; ++ } ++ apkt = b64encode(pkt, pktlen, -1); ++ rpmlog(RPMLOG_INFO, _("Aptk: %s\n"), apkt); ++ break; + } + + if (!apkt) { +@@ -1868,6 +1877,8 @@ static rpmRC processPackageFiles(rpmSpec + dupAttrRec(&fl.cur_ar, specialDocAttrRec); + } else if (fl.currentFlags & RPMFILE_PUBKEY) { + (void) processMetadataFile(pkg, &fl, fileName, RPMTAG_PUBKEYS); ++ } else if (fl.currentFlags & RPMFILE_SECMANIFEST) { ++ (void) processMetadataFile(pkg, &fl, fileName, RPMTAG_SECMANIFEST); + } else { + (void) processBinaryFile(pkg, &fl, fileName); + } +diff -Nuarp rpm/build/parsePreamble.c rpm-security/build/parsePreamble.c +--- rpm/build/parsePreamble.c 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/build/parsePreamble.c 2012-10-01 10:29:50.287983644 +0300 +@@ -216,7 +216,7 @@ static int addSource(rpmSpec spec, Packa + *fieldp = '\0'; + + nump = fieldp_backup; +- SKIPSPACE(nump); ++ if (nump) SKIPSPACE(nump); + if (nump == NULL || *nump == '\0') { + num = flag == RPMBUILD_ISSOURCE ? 0 : INT_MAX; + } else { +@@ -891,6 +891,7 @@ static struct PreambleRec_s const preamb + {RPMTAG_BUGURL, 0, 0, LEN_AND_STR("bugurl")}, + {RPMTAG_COLLECTIONS, 0, 0, LEN_AND_STR("collections")}, + {RPMTAG_ORDERFLAGS, 2, 0, LEN_AND_STR("orderwithrequires")}, ++ {RPMTAG_SECMANIFEST, 0, 0, LEN_AND_STR("manifest")}, + {0, 0, 0, 0} + }; + +diff -Nuarp rpm/configure.ac rpm-security/configure.ac +--- rpm/configure.ac 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/configure.ac 2012-10-01 10:29:50.291983643 +0300 +@@ -653,6 +653,65 @@ AC_SUBST(WITH_SELINUX_LIB) + AC_SUBST(WITH_SEMANAGE_LIB) + AM_CONDITIONAL(SELINUX,[test "$with_selinux" = yes]) + ++# msm ++WITH_MSM_LIB= ++WITH_MSM_INCLUDE= ++AC_ARG_WITH(msm, [AS_HELP_STRING([--with-msm],[build with msm support])], ++[case "$with_msm" in ++yes|no) ;; ++*) AC_MSG_ERROR([invalid argument to --with-msm]) ++ ;; ++esac], ++[with_msm=no]) ++ ++AS_IF([test "$with_msm" = yes],[ ++# AC_CHECK_HEADER([libxml2/libxml/xmlreader.h],[ ++ save_LIBS="$LIBS" ++ AC_CHECK_LIB([xml2],[xmlReaderForMemory],[],[ ++ AC_MSG_ERROR([--with-msm given, but xmlReaderForMemory not found in libxml2])]) ++ LIBS="$save_LIBS" ++# ],[ ++# AC_MSG_ERROR([--with-msm given, but libxml2/libxml/xmlreader.h not found]) ++# ]) ++ AC_CHECK_HEADER([sys/capability.h],[ ++ save_LIBS="$LIBS" ++ AC_CHECK_LIB([cap],[cap_set_file],[],[ ++ AC_MSG_ERROR([--with-msm given, but cap_set_file not found in libcap])]) ++ LIBS="$save_LIBS" ++ ],[ ++ AC_MSG_ERROR([--with-msm given, but sys/capability.h not found]) ++ ]) ++ AC_CHECK_HEADER([attr/xattr.h],[ ++ save_LIBS="$LIBS" ++ AC_CHECK_LIB([attr],[setxattr],[],[ ++ AC_MSG_ERROR([--with-msm given, but setxattr not found in libattr])]) ++ LIBS="$save_LIBS" ++ ],[ ++ AC_MSG_ERROR([--with-msm given, but attr/xattr.h not found]) ++ ]) ++ AC_CHECK_HEADER([uthash.h],[ ++ save_LIBS="$LIBS" ++ LIBS="$save_LIBS" ++ ],[ ++ AC_MSG_ERROR([--with-msm given, but uthash.h not found]) ++ ]) ++ AC_CHECK_HEADER([sys/smack.h],[ ++ save_LIBS="$LIBS" ++ LIBS="$save_LIBS" ++ ],[ ++ AC_MSG_ERROR([--with-msm given, but smack.h not found]) ++ ]) ++]) ++ ++AS_IF([test "$with_msm" = yes],[ ++ AC_DEFINE(WITH_MSM, 1, [Build with msm support?]) ++ WITH_MSM_LIB="`xml2-config --libs` -lcap -lattr -lsmack -lmagic" ++ WITH_MSM_INCLUDE="`xml2-config --cflags`" ++]) ++AC_SUBST(WITH_MSM_LIB) ++AC_SUBST(WITH_MSM_INCLUDE) ++AM_CONDITIONAL(MSM,[test "$with_msm" = yes]) ++ + # libcap + WITH_CAP_LIB= + AC_ARG_WITH(cap, [AS_HELP_STRING([--with-cap],[build with capability support])], +@@ -732,6 +791,11 @@ AS_IF([test "$enable_plugins" = yes],[ + ]) + AM_CONDITIONAL(ENABLE_PLUGINS,[test "$enable_plugins" = yes]) + ++AC_ARG_ENABLE(security, [AS_HELP_STRING([--disable-security],[build without security plugin support])],,[enable_security=yes]) ++AS_IF([test "$enable_security" = yes],[ ++ AC_DEFINE(ENABLE_SECURITY, 1, [Build with security plugin support?]) ++]) ++AM_CONDITIONAL(ENABLE_SECURITY,[test "$enable_security" = yes]) + + with_dmalloc=no + AC_ARG_WITH(dmalloc, [AS_HELP_STRING([--with-dmalloc],[build with dmalloc debugging support])]) +@@ -878,5 +942,6 @@ AC_CONFIG_FILES([Makefile + luaext/Makefile + tests/Makefile + plugins/Makefile ++ security/Makefile + ]) + AC_OUTPUT +diff -Nuarp rpm/lib/fsm.c rpm-security/lib/fsm.c +--- rpm/lib/fsm.c 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/fsm.c 2012-10-01 10:36:53.175964792 +0300 +@@ -28,6 +28,8 @@ + #include "lib/rpmts_internal.h" /* rpmtsSELabelFoo() only */ + #include "lib/rpmug.h" + ++#include "lib/rpmsecurity.h" ++ + #include "debug.h" + + #define _FSM_DEBUG 0 +@@ -800,6 +802,11 @@ static int expandRegular(FSM_t fsm) + if (rc) + goto exit; + ++ /* Call security plugin to update file status. */ ++ rc = rpmsecurityCallFsmUpdated(fsm); ++ if (rc) ++ goto exit; ++ + rc = fsmNext(fsm, FSM_WRITE); + if (rc) + goto exit; +@@ -1127,7 +1134,7 @@ static int fsmCommitLinks(FSM_t fsm) + break; + } + +- for (i = 0; i < fsm->li->nlink; i++) { ++ for (i = 0; fsm->li && i < fsm->li->nlink; i++) { + if (fsm->li->filex[i] < 0) continue; + fsm->ix = fsm->li->filex[i]; + rc = fsmMapPath(fsm); +@@ -1263,6 +1270,9 @@ static int fsmMkdirs(FSM_t fsm) + } + } + ++ /* Call plugin hook to label the directory */ ++ rc = rpmsecurityCallDirLabel(fsm, rc); ++ + if (fsm->fcontext == NULL) + rpmlog(RPMLOG_DEBUG, + "%s directory created with perms %04o, no context.\n", +@@ -1654,6 +1664,13 @@ static int fsmStage(FSM_t fsm, fileStage + break; + } + ++ /* Call security plugin to start up for a file. */ ++ rc = rpmsecurityCallFsmOpened(fsm); ++ if (rc) { ++ (void) fsmNext(fsm, FSM_UNDO); ++ break; ++ } ++ + /* Extract file from archive. */ + rc = fsmNext(fsm, FSM_PROCESS); + if (rc) { +@@ -2026,6 +2043,12 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS + /* + * Set file security context (if not disabled). + */ ++ ++ /* Call security plugin with return code to finish the file. */ ++ if (!rc) { ++ rc = rpmsecurityCallFsmClosed(fsm, rc); ++ } ++ + if (!rc && !getuid()) { + rc = fsmMapFContext(fsm); + if (!rc) { +diff -Nuarp rpm/lib/Makefile.am rpm-security/lib/Makefile.am +--- rpm/lib/Makefile.am 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/Makefile.am 2012-10-01 10:29:50.295983643 +0300 +@@ -36,7 +36,8 @@ librpm_la_SOURCES = \ + verify.c rpmlock.c rpmlock.h misc.h \ + rpmscript.h rpmscript.c legacy.c merge.c \ + rpmchroot.c rpmchroot.h \ +- rpmplugins.c rpmplugins.h rpmug.c rpmug.h ++ rpmplugins.c rpmplugins.h rpmug.c rpmug.h \ ++ rpmsecurity.c rpmsecurity.h + + librpm_la_LDFLAGS = -version-info 2:1:0 + +diff -Nuarp rpm/lib/package.c rpm-security/lib/package.c +--- rpm/lib/package.c 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/package.c 2012-10-01 10:29:50.295983643 +0300 +@@ -18,6 +18,8 @@ + #include "rpmio/rpmio_internal.h" /* fd digest bits */ + #include "lib/header_internal.h" /* XXX headerCheck */ + ++#include "lib/rpmsecurity.h" ++ + #include "debug.h" + + static int _print_pkts = 0; +@@ -698,7 +700,10 @@ static rpmRC rpmpkgRead(rpmKeyring keyri + + /** @todo Implement disable/enable/warn/error/anal policy. */ + rc = rpmVerifySignature(keyring, &sigtd, dig, ctx, &msg); +- ++ ++ /* Call security plugin to verify the signature. */ ++ rc = rpmsecurityCallVerify(keyring, &sigtd, dig, rc); ++ + switch (rc) { + case RPMRC_OK: /* Signature is OK. */ + rpmlog(RPMLOG_DEBUG, "%s: %s", fn, msg); +diff -Nuarp rpm/lib/rpmfi.h rpm-security/lib/rpmfi.h +--- rpm/lib/rpmfi.h 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/rpmfi.h 2012-10-01 10:29:50.299983645 +0300 +@@ -60,6 +60,7 @@ enum rpmfileAttrs_e { + RPMFILE_EXCLUDE = (1 << 9), /*!< from %%exclude, internal */ + RPMFILE_UNPATCHED = (1 << 10), /*!< placeholder (SuSE) */ + RPMFILE_PUBKEY = (1 << 11), /*!< from %%pubkey */ ++ RPMFILE_SECMANIFEST = (1 << 12), /*!< from %%manifest */ + }; + + typedef rpmFlags rpmfileAttrs; +diff -Nuarp rpm/lib/rpmscript.c rpm-security/lib/rpmscript.c +--- rpm/lib/rpmscript.c 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/rpmscript.c 2012-10-01 10:29:50.299983645 +0300 +@@ -14,6 +14,8 @@ + #include "rpmio/rpmlua.h" + #include "lib/rpmscript.h" + ++#include "lib/rpmsecurity.h" ++ + #include "debug.h" + + /** +@@ -162,7 +164,8 @@ static void doScriptExec(int selinux, AR + } + + if (xx == 0) { +- xx = execv(argv[0], argv); ++ /* Exec the scriptlet through security plugin */ ++ xx = rpmsecurityCallScriptExec(argv); + } + } + _exit(127); /* exit 127 for compatibility with bash(1) */ +@@ -286,7 +289,7 @@ exit: + if (fn) { + if (!rpmIsDebug()) + xx = unlink(fn); +- fn = _free(fn); ++ if (fn) fn = _free(fn); + } + return rc; + } +diff -Nuarp rpm/lib/rpmsecurity.c rpm-security/lib/rpmsecurity.c +--- rpm/lib/rpmsecurity.c 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/lib/rpmsecurity.c 2012-10-01 10:39:43.959957177 +0300 +@@ -0,0 +1,281 @@ ++#include "system.h" ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define STR1(x) #x ++#define STR(x) STR1(x) ++ ++struct rpmSecurity_s { ++ void *handle; ++ rpmRC (*SECURITYHOOK_INIT_FUNC)(rpmts, const char *); ++ rpmRC (*SECURITYHOOK_FILE_CONFLICT_FUNC)(rpmts, rpmte, rpmfi, Header, rpmfi, int); ++ rpmRC (*SECURITYHOOK_PRE_TSM_FUNC)(rpmts); ++ rpmRC (*SECURITYHOOK_VERIFY_FUNC)(rpmKeyring, rpmtd, pgpDig, rpmRC); ++ rpmRC (*SECURITYHOOK_PRE_PSM_FUNC)(rpmte); ++ rpmRC (*SECURITYHOOK_SCRIPT_EXEC_FUNC)(ARGV_const_t); ++ rpmRC (*SECURITYHOOK_FSM_OPENED_FUNC)(FSM_t); ++ rpmRC (*SECURITYHOOK_FSM_UPDATED_FUNC)(FSM_t); ++ rpmRC (*SECURITYHOOK_FSM_CLOSED_FUNC)(FSM_t, int); ++ rpmRC (*SECURITYHOOK_FSM_DIR_LABEL_FUNC)(FSM_t, int); ++ rpmRC (*SECURITYHOOK_POST_PSM_FUNC)(rpmte, char*, int); ++ rpmRC (*SECURITYHOOK_POST_TSM_FUNC)(rpmts); ++ rpmRC (*SECURITYHOOK_CLEANUP_FUNC)(void); ++ int count; ++ rpmts ts; ++}; ++ ++static rpmSecurity securityPlugin = NULL; ++ ++rpmRC rpmsecurityCallInit(const char *opts); ++rpmRC rpmsecurityCallCleanup(void); ++ ++#define RPMSECURITY_GET_HOOK_FUNC(hook) \ ++ *(void **)(&securityPlugin->hook) = dlsym(securityPlugin->handle, STR(hook)); \ ++ if ((error = dlerror()) != NULL) { \ ++ rpmlog(RPMLOG_ERR, _("Failed to resolve security plugin symbol %s: %s\n"), STR(hook), error); \ ++ goto fail; \ ++ } ++ ++static rpmRC rpmsecurityAdd(const char *path, const char *opts, rpmts ts) ++{ ++ char *error; ++ void *handle = dlopen(path, RTLD_LAZY); ++ if (!handle) { ++ rpmlog(RPMLOG_DEBUG, _("Failed to dlopen %s %s\n"), path, dlerror()); ++ return RPMRC_OK; /* in case plug‌in isn't avalible in the configuration */ ++ } ++ securityPlugin = xcalloc(1, sizeof(*securityPlugin)); ++ if (!securityPlugin) { ++ rpmlog(RPMLOG_ERR, _("Failed to allocate security plugin %s\n"), path); ++ goto fail; ++ } ++ securityPlugin->handle = handle; ++ securityPlugin->count++; ++ securityPlugin->ts = ts; ++ ++ /* Security plugin really has to have all the hooks. This means that */ ++ /* if the interface is changed, all plugins have to be changed which */ ++ /* in general is not nice. However, a security plugin must be aware of */ ++ /* all the hooks declaring empty functions if it doesn't need them. */ ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_INIT_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_FILE_CONFLICT_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_PRE_TSM_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_VERIFY_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_PRE_PSM_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_SCRIPT_EXEC_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_FSM_OPENED_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_FSM_UPDATED_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_FSM_CLOSED_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_FSM_DIR_LABEL_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_POST_PSM_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_POST_TSM_FUNC); ++ RPMSECURITY_GET_HOOK_FUNC(SECURITYHOOK_CLEANUP_FUNC); ++ ++ return rpmsecurityCallInit(opts); ++ ++ fail: ++ if (handle) dlclose(handle); ++ if (securityPlugin) { ++ free(securityPlugin); ++ securityPlugin = NULL; ++ } ++ return RPMRC_FAIL; ++} ++ ++rpmRC rpmsecuritySetupPlugin(rpmts ts) ++{ ++ char *path; ++ char *options; ++ int rc = RPMRC_FAIL; ++ ++ if (securityPlugin) { ++ securityPlugin->count++; ++ return RPMRC_OK; ++ } ++ ++ path = rpmExpand("%{?__security_plugin}", NULL); ++ if (!path || rstreq(path, "")) { ++/* enforce security by default #ifdef ENFORCE_SECURITY */ ++ rpmlog(RPMLOG_ERR, _("Failed to expand %%__security_plugin macro\n")); ++/* #else ++ rpmlog(RPMLOG_INFO, _("Failed to expand %%__security_plugin macro\n")); ++#endif */ ++ goto exit; ++ } ++ ++ /* split the options from the path */ ++#define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; } ++#define SKIPNONSPACE(s) { while (*(s) && !risspace(*(s))) (s)++; } ++ options = path; ++ SKIPNONSPACE(options); ++ if (risspace(*options)) { ++ *options = '\0'; ++ options++; ++ SKIPSPACE(options); ++ } ++ if (*options == '\0') { ++ options = NULL; ++ } ++ rc = rpmsecurityAdd(path, options, ts); ++ exit: ++ if (path) free(path); ++ return rc; ++} ++ ++int rpmsecurityPluginAdded(void) ++{ ++ return (securityPlugin != NULL); ++} ++ ++rpmSecurity rpmsecurityFreePlugin() ++{ ++ if (securityPlugin) { ++ securityPlugin->count--; ++ if (!securityPlugin->count) { ++ rpmsecurityCallCleanup(); ++ dlclose(securityPlugin->handle); ++ free(securityPlugin); ++ securityPlugin = NULL; ++ } ++ } ++ return securityPlugin; ++} ++ ++#define RPMSECURITY_SET_HOOK_FUNC(hook) \ ++ hookFunc = securityPlugin->hook; \ ++ if (rpmtsFlags(securityPlugin->ts) & RPMTRANS_FLAG_TEST) { \ ++ return RPMRC_OK; \ ++ } \ ++ rpmlog(RPMLOG_DEBUG, "Security: calling hook %s in security plugin\n", STR(hook)); ++ ++rpmRC rpmsecurityCallInit(const char *opts) ++{ ++ rpmRC (*hookFunc)(rpmts, const char *); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_INIT_FUNC); ++ return hookFunc(securityPlugin->ts, opts); ++} ++ ++rpmRC rpmsecurityCallCleanup(void) ++{ ++ rpmRC (*hookFunc)(void); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_CLEANUP_FUNC); ++ return hookFunc(); ++} ++ ++rpmRC rpmsecurityCallPreTsm(rpmts ts) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(rpmts); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_PRE_TSM_FUNC); ++ return hookFunc(ts); ++ } ++ return RPMRC_OK; ++} ++ ++rpmRC rpmsecurityCallPostTsm(rpmts ts) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(rpmts); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_POST_TSM_FUNC); ++ return hookFunc(ts); ++ } ++ return RPMRC_OK; ++} ++ ++rpmRC rpmsecurityCallPrePsm(rpmte te) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(rpmte); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_PRE_PSM_FUNC); ++ return hookFunc(te); ++ } ++ return RPMRC_OK; ++} ++ ++rpmRC rpmsecurityCallPostPsm(rpmte te, char* rootDir, int rpmrc) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(rpmte, char*, int); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_POST_PSM_FUNC); ++ return hookFunc(te, rootDir, rpmrc); ++ } ++ return rpmrc; ++} ++ ++rpmRC rpmsecurityCallScriptExec(ARGV_const_t argv) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(ARGV_const_t); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_SCRIPT_EXEC_FUNC); ++ return hookFunc(argv); ++ } ++ return execv(argv[0], argv); ++} ++ ++rpmRC rpmsecurityCallFsmOpened(FSM_t fsm) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(FSM_t); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_FSM_OPENED_FUNC); ++ return hookFunc(fsm); ++ } ++ return RPMRC_OK; ++} ++ ++rpmRC rpmsecurityCallFsmUpdated(FSM_t fsm) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(FSM_t); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_FSM_UPDATED_FUNC); ++ return hookFunc(fsm); ++ } ++ return RPMRC_OK; ++} ++ ++rpmRC rpmsecurityCallFsmClosed(FSM_t fsm, int rpmrc) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(FSM_t, int); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_FSM_CLOSED_FUNC); ++ return hookFunc(fsm, rpmrc); ++ } ++ return rpmrc; ++} ++ ++rpmRC rpmsecurityCallDirLabel(FSM_t fsm, int rpmrc) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(FSM_t, int); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_FSM_DIR_LABEL_FUNC); ++ return hookFunc(fsm, rpmrc); ++ } ++ return rpmrc; ++} ++ ++rpmRC rpmsecurityCallVerify(rpmKeyring keyring, rpmtd sigtd, ++ pgpDig dig, rpmRC rpmrc) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(rpmKeyring, rpmtd, pgpDig, rpmRC); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_VERIFY_FUNC); ++ return hookFunc(keyring, sigtd, dig, rpmrc); ++ } ++ return rpmrc; ++} ++ ++rpmRC rpmsecurityCallFileConflict(rpmts ts, rpmte te, rpmfi fi, ++ Header oldHeader, rpmfi oldFi, int rpmrc) ++{ ++ if (securityPlugin) { ++ rpmRC (*hookFunc)(rpmts, rpmte, rpmfi, Header, rpmfi, int); ++ RPMSECURITY_SET_HOOK_FUNC(SECURITYHOOK_FILE_CONFLICT_FUNC); ++ return hookFunc(ts, te, fi, oldHeader, oldFi, rpmrc); ++ } ++ return rpmrc; ++} +diff -Nuarp rpm/lib/rpmsecurity.h rpm-security/lib/rpmsecurity.h +--- rpm/lib/rpmsecurity.h 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/lib/rpmsecurity.h 2012-10-01 10:37:47.415962375 +0300 +@@ -0,0 +1,170 @@ ++#ifndef _SECURITY_H ++#define _SECURITY_H ++ ++#include ++#include ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** \ingroup rpmsecurity ++ * ++ * General flow of code in rpm: ++ * ++ * The first hook SECURITYHOOK_INIT_FUNC is called right after keyring is ++ * loaded and database indexes are opened. ++ * ++ * At the time rpm prepares packages for installation, it might call ++ * SECURITYHOOK_FILE_CONFLICT_FUNC if some new package has conflicting files. ++ * Security plugin can then decide if overwrite is allowed or not. After ++ * conflict resolving rpm calls SECURITYHOOK_PRE_TSM_FUNC. ++ * ++ * The actual package processing starts by calling SECURITYHOOK_VERIFY_FUNC ++ * where security plugin can verify the package signature (right after rpm ++ * has done it's own signature verifying). ++ ++ * Then SECURITYHOOK_PRE_PSM_FUNC is called to start installing/removing ++ * the package. In the beginning of installation process there may be call ++ * to SECURITYHOOK_SCRIPT_EXEC_FUNC if package spec has a pre installation ++ * script. Then SECURITYHOOK_FSM_OPENED_FUNC, SECURITYHOOK_FSM_UPDATED_FUNC ++ * and SECURITYHOOK_FSM_CLOSED_FUNC are called for each installed file to ++ * make it possible to calculate hashes for the files (or use the sum ++ * in rpm package). At the end of installation process there may be call ++ * to SECURITYHOOK_SCRIPT_EXEC_FUNC if package spec has a post installation ++ * script. Finally SECURITYHOOK_POST_PSM_FUNC is called to wrap up package ++ * processing. ++ * ++ * SECURITYHOOK_POST_TSM_FUNC is called when all packages have been processed. ++ * ++ * Finally SECURITYHOOK_CLEANUP_FUNC is called to free used resources. ++ */ ++ ++/** \ingroup rpmsecurity ++ * Add and open security plugin, calls SECURITYHOOK_INIT_FUNC. ++ * This is the place for the plugin to initialize itself, load ++ * possible configuration files etc. ++ * @param ts ts element ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecuritySetupPlugin(rpmts ts); ++ ++/** \ingroup rpmsecurity ++ * Call the security file conflict plugin hook. ++ * This hook is called whenever there is a file conflict. ++ * @param ts transaction set ++ * @param te transaction element ++ * @param fi new file ++ * @param oldHeader old header ++ * @param oldFi old file ++ * @param rpmrc success from RPM ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallFileConflict(rpmts ts, rpmte te, rpmfi fi, ++ Header oldHeader, rpmfi oldFi, int rpmrc); ++ ++/** \ingroup rpmsecurity ++ * Call the security pre tsm plugin hook. ++ * This hook is called before the transaction state machine is started. ++ * @param ts transaction set ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallPreTsm(rpmts ts); ++ ++/** \ingroup rpmsecurity ++ * Call the security verify plugin hook. ++ * This hook is called right after RPM has verified package signature. ++ * @param keyring RPM keyring ++ * @param sigtd signature tag ++ * @param dig PGP digest ++ * @param rpmrc success from RPM ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallVerify(rpmKeyring keyring, rpmtd sigtd, ++ pgpDig dig, rpmRC rpmrc); ++ ++/** \ingroup rpmsecurity ++ * Call the security pre psm plugin hook. ++ * This hook is called before the package state machine is started. ++ * @param te transaction element in question ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallPrePsm(rpmte te); ++ ++/** \ingroup rpmsecurity ++ * Call the security script exec plugin hook. ++ * Script execution takes place in child process context. ++ * @param argv script command line arguments ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallScriptExec(ARGV_const_t argv); ++ ++/** \ingroup rpmsecurity ++ * Call the security file opened plugin hook. ++ * This hook is called before the file state machine is started. ++ * @param fsm fsm in question ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallFsmOpened(FSM_t fsm); ++ ++/** \ingroup rpmsecurity ++ * Call the security file updated plugin hook. ++ * This hook is called during the file state machine is running. ++ * @param fsm fsm in question ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallFsmUpdated(FSM_t fsm); ++ ++/** \ingroup rpmsecurity ++ * Call the security file closed plugin hook. ++ * This hook is called after the file state machine has finished. ++ * @param fsm fsm in question ++ * @param rpmrc success from RPM ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallFsmClosed(FSM_t fsm, int rpmrc); ++ ++/** \ingroup rpmsecurity ++ * Call the security dir labelling plugin hook. ++ * This hook is called for each dir not explicitly included into the package ++ * @param fsm fsm in question ++ * @param rpmrc success from RPM ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallDirLabel(FSM_t fsm, int rpmrc); ++ ++/** \ingroup rpmsecurity ++ * Call the security post psm plugin hook. ++ * This hook is called after the package state machine has finished. ++ * @param te transaction element in question ++ * @param rootDir root directory for installation ++ * @param rpmrc success from RPM ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallPostPsm(rpmte te, char* rootDir, int rpmrc); ++ ++/** \ingroup rpmsecurity ++ * Call the security post tsm plugin hook. ++ * This hook is called after the transaction state machine has finished. ++ * @param ts transaction set ++ * @return RPMRC_OK on success, RPMRC_FAIL otherwise ++ */ ++rpmRC rpmsecurityCallPostTsm(rpmts ts); ++ ++/** \ingroup rpmsecurity ++ * Destroy security plugin structure, calls SECURITYHOOK_CLEANUP_FUNC. ++ * Plugin can save new state and new configuration in cleanup. ++ * @return NULL always ++ */ ++rpmSecurity rpmsecurityFreePlugin(void); ++ ++/** \ingroup rpmsecurity ++ * Determine if a security plugin has been added already. ++ * @return 1 if security plugin has already been added, 0 otherwise ++ */ ++int rpmsecurityPluginAdded(void); ++#ifdef __cplusplus ++} ++#endif ++#endif /* _SECURITY_H */ +diff -Nuarp rpm/lib/rpmtag.h rpm-security/lib/rpmtag.h +--- rpm/lib/rpmtag.h 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/rpmtag.h 2012-10-01 10:29:50.303983646 +0300 +@@ -299,7 +299,8 @@ typedef enum rpmTag_e { + RPMTAG_ORDERNAME = 5035, /* s[] */ + RPMTAG_ORDERVERSION = 5036, /* s[] */ + RPMTAG_ORDERFLAGS = 5037, /* i[] */ +- ++ RPMTAG_SECMANIFEST = 5038, /* s[] security manifest file */ ++ RPMTAG_SECSWSOURCE = 5039, /* s[] security software source */ + RPMTAG_FIRSTFREE_TAG /*!< internal */ + } rpmTag; + +diff -Nuarp rpm/lib/rpmte.c rpm-security/lib/rpmte.c +--- rpm/lib/rpmte.c 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/rpmte.c 2012-10-01 10:29:50.303983646 +0300 +@@ -14,7 +14,9 @@ + #include + + #include "lib/rpmplugins.h" ++#include "lib/rpmsecurity.h" + #include "lib/rpmte_internal.h" ++#include "lib/rpmts_internal.h" + + #include "debug.h" + +@@ -895,7 +897,7 @@ int rpmteProcess(rpmte te, pkgGoal goal) + /* Only install/erase resets pkg file info */ + int scriptstage = (goal != PKG_INSTALL && goal != PKG_ERASE); + int reset_fi = (scriptstage == 0); +- int failed = 1; ++ int failed = 0; + + /* Dont bother opening for elements without pre/posttrans scripts */ + if (goal == PKG_PRETRANS || goal == PKG_POSTTRANS) { +@@ -909,7 +911,17 @@ int rpmteProcess(rpmte te, pkgGoal goal) + } + + if (rpmteOpen(te, reset_fi)) { +- failed = rpmpsmRun(te->ts, te, goal); ++ /* Call security plugin to set te for next operations */ ++ /* But do not call plugin for the pre/posttrans scripts */ ++ if (goal != PKG_PRETRANS && goal != PKG_POSTTRANS) ++ failed = rpmsecurityCallPrePsm(te); ++ if (!failed) { ++ failed = rpmpsmRun(te->ts, te, goal); ++ /* Call security plugin to finish any te related tasks */ ++ /* But do not call plugin for the pre/posttrans scripts */ ++ if (goal != PKG_PRETRANS && goal != PKG_POSTTRANS) ++ failed = rpmsecurityCallPostPsm(te, te->ts->rootDir, failed); ++ } + rpmteClose(te, reset_fi); + } + +diff -Nuarp rpm/lib/rpmts.c rpm-security/lib/rpmts.c +--- rpm/lib/rpmts.c 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/rpmts.c 2012-10-01 10:29:50.303983646 +0300 +@@ -24,6 +24,7 @@ + #include "lib/rpmal.h" + #include "lib/rpmchroot.h" + #include "lib/rpmplugins.h" ++#include "lib/rpmsecurity.h" + #include "lib/rpmts_internal.h" + #include "lib/rpmte_internal.h" + #include "lib/misc.h" +@@ -630,6 +631,8 @@ rpmts rpmtsFree(rpmts ts) + ts->installLangs = argvFree(ts->installLangs); + + ts->plugins = rpmpluginsFree(ts->plugins); ++ /* Free security plugin here also. */ ++ rpmsecurityFreePlugin(); + + if (_rpmts_stats) + rpmtsPrintStats(ts); +diff -Nuarp rpm/lib/rpmtypes.h rpm-security/lib/rpmtypes.h +--- rpm/lib/rpmtypes.h 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/rpmtypes.h 2012-10-01 10:29:50.303983646 +0300 +@@ -78,6 +78,7 @@ typedef struct rpmPubkey_s * rpmPubkey; + typedef struct rpmKeyring_s * rpmKeyring; + + typedef struct rpmPlugins_s * rpmPlugins; ++typedef struct rpmSecurity_s * rpmSecurity; + + typedef struct rpmgi_s * rpmgi; + +diff -Nuarp rpm/lib/transaction.c rpm-security/lib/transaction.c +--- rpm/lib/transaction.c 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/lib/transaction.c 2012-10-01 10:29:50.307983646 +0300 +@@ -21,6 +21,8 @@ + #include "lib/rpmts_internal.h" + #include "rpmio/rpmhook.h" + ++#include "lib/rpmsecurity.h" ++ + /* XXX FIXME: merge with existing (broken?) tests in system.h */ + /* portability fiddles */ + #if STATFS_IN_SYS_STATVFS +@@ -354,6 +356,9 @@ static int handleInstInstalledFile(const + } + } + ++ /* Call security plugin to check the file conflict. */ ++ rConflicts = rpmsecurityCallFileConflict(ts, p, fi, otherHeader, otherFi, rConflicts); ++ + if (rConflicts) { + char *altNEVR = headerGetAsString(otherHeader, RPMTAG_NEVRA); + rpmteAddProblem(p, RPMPROB_FILE_CONFLICT, altNEVR, rpmfiFN(fi), +@@ -1420,6 +1425,13 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rp + goto exit; + } + ++ /* Setup the security plugin */ ++ if (rpmsecuritySetupPlugin(ts)) { ++/* enforce security by default #ifdef ENFORCE_SECURITY */ ++ goto exit; ++/* #endif */ ++ } ++ + rpmtsSetupCollections(ts); + + /* Check package set for problems */ +@@ -1452,9 +1464,15 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rp + tsprobs = rpmpsFree(tsprobs); + rpmtsCleanProblems(ts); + ++ /* Call security plugin */ ++ rpmsecurityCallPreTsm(ts); ++ + /* Actually install and remove packages, get final exit code */ + rc = rpmtsProcess(ts) ? -1 : 0; + ++ /* Call security plugin */ ++ rpmsecurityCallPostTsm(ts); ++ + /* Run post-transaction scripts unless disabled */ + if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOST))) { + rpmlog(RPMLOG_DEBUG, "running post-transaction scripts\n"); +diff -Nuarp rpm/macros.in rpm-security/macros.in +--- rpm/macros.in 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/macros.in 2012-10-01 10:29:50.307983646 +0300 +@@ -1070,5 +1070,7 @@ done \ + %__collection_sepolicy %{__plugindir}/sepolicy.so + %__collection_sepolicy_flags 1 + ++%__security_plugin %{__plugindir}/msm.so ++ + # \endverbatim + #*/ +diff -Nuarp rpm/Makefile.am rpm-security/Makefile.am +--- rpm/Makefile.am 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/Makefile.am 2012-10-01 10:29:50.311983646 +0300 +@@ -29,7 +29,11 @@ if ENABLE_PLUGINS + SUBDIRS += plugins + endif + +-DIST_SUBDIRS = po misc luaext rpmio lib sign build python scripts fileattrs doc tests plugins ++if ENABLE_SECURITY ++SUBDIRS += security ++endif ++ ++DIST_SUBDIRS = po misc luaext rpmio lib sign build python scripts fileattrs doc tests plugins security + + pkgconfigdir = $(libdir)/pkgconfig + +@@ -76,6 +80,8 @@ pkginclude_HEADERS += lib/rpmte.h + pkginclude_HEADERS += lib/rpmts.h + pkginclude_HEADERS += lib/rpmtypes.h + pkginclude_HEADERS += lib/rpmvf.h ++pkginclude_HEADERS += lib/rpmplugins.h ++pkginclude_HEADERS += lib/rpmsecurity.h + + pkginclude_HEADERS += sign/rpmsign.h + +diff -Nuarp rpm/preinstall.am rpm-security/preinstall.am +--- rpm/preinstall.am 2012-08-08 09:33:56.000000000 +0300 ++++ rpm-security/preinstall.am 2012-10-01 10:29:50.311983646 +0300 +@@ -114,6 +114,14 @@ include/rpm/rpmvf.h: lib/rpmvf.h include + $(INSTALL_DATA) $(top_srcdir)/lib/rpmvf.h include/rpm/rpmvf.h + BUILT_SOURCES += include/rpm/rpmvf.h + CLEANFILES += include/rpm/rpmvf.h ++include/rpm/rpmplugins.h: lib/rpmplugins.h include/rpm/$(dirstamp) ++ $(INSTALL_DATA) $(top_srcdir)/lib/rpmplugins.h include/rpm/rpmplugins.h ++BUILT_SOURCES += include/rpm/rpmplugins.h ++CLEANFILES += include/rpm/rpmplugins.h ++include/rpm/rpmsecurity.h: lib/rpmsecurity.h include/rpm/$(dirstamp) ++ $(INSTALL_DATA) $(top_srcdir)/lib/rpmsecurity.h include/rpm/rpmsecurity.h ++BUILT_SOURCES += include/rpm/rpmsecurity.h ++CLEANFILES += include/rpm/rpmsecurity.h + include/rpm/rpmsign.h: sign/rpmsign.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/sign/rpmsign.h include/rpm/rpmsign.h + BUILT_SOURCES += include/rpm/rpmsign.h +diff -Nuarp rpm/security/Makefile.am rpm-security/security/Makefile.am +--- rpm/security/Makefile.am 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/security/Makefile.am 2012-10-01 10:29:50.315983644 +0300 +@@ -0,0 +1,24 @@ ++# Makefile for rpm library. ++ ++include $(top_srcdir)/rpm.am ++ ++AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/ ++AM_CPPFLAGS += -I$(top_srcdir)/misc ++AM_CPPFLAGS += -DLOCALEDIR="\"$(localedir)\"" ++AM_CPPFLAGS += -DSYSCONFDIR="\"$(sysconfdir)\"" ++AM_CPPFLAGS += -DLOCALSTATEDIR="\"$(localstatedir)\"" ++AM_CPPFLAGS += -DLIBRPMALIAS_FILENAME="\"rpmpopt-${VERSION}\"" ++if MSM ++AM_CPPFLAGS += @WITH_MSM_INCLUDE@ ++endif ++AM_LDFLAGS = -avoid-version -module -shared ++ ++pluginsdir = $(libdir)/rpm-plugins ++ ++if MSM ++plugins_LTLIBRARIES = msm.la ++endif ++if MSM ++msm_la_SOURCES = security.h msm.h msm.c msmconfig.c msmmanifest.c msmxattr.c msmmatch.c ++msm_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la @WITH_MSM_LIB@ ++endif +diff -Nuarp rpm/security/Makefile.msm rpm-security/security/Makefile.msm +--- rpm/security/Makefile.msm 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/security/Makefile.msm 2012-10-01 10:29:50.315983644 +0300 +@@ -0,0 +1,15 @@ ++CC=gcc ++CFLAGS=-g -Wall ++LDFLAGS=-lxml2 -lcap -lattr -lrpmio -lsmack ++INCLUDES=-I/usr/include/libxml2 -I.. ++ ++all: msmmatch ++ ++msmmatch: msmmatch.o ++ $(CC) -o $@ $^ $(LDFLAGS) ++ ++.c.o: ++ $(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@ ++ ++clean: ++ rm msmmatch *.o +diff -Nuarp rpm/security/msm.c rpm-security/security/msm.c +--- rpm/security/msm.c 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/security/msm.c 2012-10-01 10:53:48.919919507 +0300 +@@ -0,0 +1,896 @@ ++/* ++ * This file is part of MSM security plugin ++ * Greatly based on the code of MSSF security plugin ++ * ++ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++ * ++ * Contact: Tero Aho ++ * ++ * Copyright (C) 2011 -2012 Intel Corporation. ++ * ++ * Contact: Elena Reshetova ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ */ ++ ++#include "debug.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "rpmio/base64.h" ++#include "rpmio/rpmio.h" ++ ++#include "msm.h" ++ ++typedef struct fileconflict { ++ const char *path; ++ sw_source_x *sw_source; ++ UT_hash_handle hh; ++} fileconflict; ++ ++typedef struct packagecontext { ++ char *data; /*!< base64 manifest data */ ++ manifest_x *mfx; /*!< parsed manifest data */ ++ rpmte te; /*!< related te */ ++ struct packagecontext *next; /*!< next in linked list */ ++ struct smack_accesses *smack_accesses; /*!< handle to smack_accesses */ ++} packagecontext; ++ ++static rpmts ts = NULL; ++static int rootSWSource= 0; ++static manifest_x *root = NULL; /* pointer to device security policy file */ ++static packagecontext *context = NULL; ++static sw_source_x *current = NULL; ++static packagecontext *contextsHead = NULL; ++static packagecontext *contextsTail = NULL; ++static fileconflict *allfileconflicts = NULL; ++static char* ownSmackLabel = NULL; ++static int SmackEnabled = 0; ++static magic_t cookie = NULL; ++ ++rpmRC SECURITYHOOK_INIT_FUNC(rpmts _ts, const char *_opts) ++{ ++ ts = _ts; ++ int res = 0; ++ ++ rpmlog(RPMLOG_INFO, "reading device security policy from %s\n", DEVICE_SECURITY_POLICY); ++ root = msmProcessDevSecPolicyXml(DEVICE_SECURITY_POLICY); ++ ++ if (root) { ++ if (msmSetupSWSources(NULL, root, NULL)) { ++ rpmlog(RPMLOG_ERR, "Failed to setup device security policy from %s\n", ++ DEVICE_SECURITY_POLICY); ++ return RPMRC_FAIL; ++ } ++ } else { ++ /* Do not allow plug-in to proceed without security policy existing */ ++ rpmlog(RPMLOG_ERR, "Failed to process sw sources from %s\n", ++ DEVICE_SECURITY_POLICY); ++ return RPMRC_FAIL; ++ } ++ ++ /* check its own security context and store it for the case when packages without manifest will be installed */ ++ struct stat buf; ++ ++ if (stat(SMACK_LOAD_PATH, &buf) == 0) { ++ res = smack_new_label_from_self(&ownSmackLabel); ++ SmackEnabled = 1; ++ if (res != 0) { ++ rpmlog(RPMLOG_ERR, "Failed to obtain rpm security context\n"); ++ return RPMRC_FAIL; ++ } ++ } else { ++ rpmlog(RPMLOG_INFO, "Smack disabled in kernel. Going to the image build mode. \n"); ++ ownSmackLabel = strdup("_"); ++ SmackEnabled = 0; ++ } ++ ++ if (stat(SMACK_RULES_PATH, &buf) != 0) { ++ rpmlog(RPMLOG_INFO, "A directory for writing smack rules is missing. Creating one.\n"); ++ mode_t mode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH; // 644 -rwer--r-- ++ if (stat(SMACK_RULES_PATH_BEG, &buf) != 0) { ++ if (mkdir(SMACK_RULES_PATH_BEG, mode) != 0) { ++ rpmlog(RPMLOG_ERR, "Failed to create a sub-directory for smack rules\n"); ++ return RPMRC_FAIL; ++ } ++ } ++ if (mkdir(SMACK_RULES_PATH, mode) != 0){ ++ rpmlog(RPMLOG_ERR, "Failed to create a directory for smack rules\n"); ++ return RPMRC_FAIL; ++ } ++ } ++ ++ rpmlog(RPMLOG_DEBUG, "rpm security context: %s\n", ownSmackLabel); ++ ++ cookie = magic_open(0); ++ if (!cookie) ++ return RPMRC_FAIL; ++ ++ if (magic_load(cookie, NULL) != 0) { ++ rpmlog(RPMLOG_ERR, "cannot load magic database - %s\n", magic_error(cookie)); ++ magic_close(cookie); ++ return RPMRC_FAIL; ++ } ++ ++ return RPMRC_OK; ++} ++ ++static int findSWSourceByName(sw_source_x *sw_source, void *param) ++{ ++ const char *name = (const char *)param; ++ return strcmp(sw_source->name, name); ++} ++ ++static char *getFilePath(const char *dirName, const char *baseName) ++{ ++ char *fullName = NULL; ++ size_t len = 0; ++ ++ if (!dirName) return fullName; ++ len = strlen(dirName); ++ ++ if (baseName) { ++ if (dirName[len-1] == '/') { ++ len += strlen(baseName); ++ fullName = malloc(len+1); ++ if (fullName) ++ sprintf(fullName, "%s%s", dirName, baseName); ++ } else { ++ len += strlen(baseName) + 1; ++ fullName = malloc(len+1); ++ if (fullName) ++ sprintf(fullName, "%s/%s", dirName, baseName); ++ } ++ } else { ++ fullName = malloc(len+1); ++ if (fullName) ++ sprintf(fullName, "%s", dirName); ++ } ++ return fullName; ++} ++ ++rpmRC SECURITYHOOK_FILE_CONFLICT_FUNC(rpmts ts, rpmte te, rpmfi fi, ++ Header oldHeader, rpmfi oldFi, ++ int rpmrc) ++{ ++ fileconflict *fc; ++ ++ const char *name = headerGetString(oldHeader, RPMTAG_SECSWSOURCE); ++ if (!name || !root) { ++ return rpmrc; /* no sw source(s) - abnormal state */ ++ } ++ ++ sw_source_x *sw_source = msmSWSourceTreeTraversal(root->sw_sources, findSWSourceByName, (void *)name); ++ if (!sw_source) ++ return rpmrc; /* no old sw_source - abnormal state */ ++ ++ const char *path = getFilePath(rpmfiDN(fi), rpmfiBN(fi)); ++ if (!path) return RPMRC_FAIL; ++ ++ HASH_FIND(hh, allfileconflicts, path, strlen(path), fc); ++ if (!fc) { ++ /* Add new file conflict into hash */ ++ fc = xcalloc(1, sizeof(*fc)); ++ if (!fc) return RPMRC_FAIL; ++ fc->path = path; ++ fc->sw_source = sw_source; ++ HASH_ADD_KEYPTR(hh, allfileconflicts, path, strlen(path), fc); ++ } else { ++ /* Many packages have installed the same file */ ++ if (strcmp(sw_source->rankkey, fc->sw_source->rankkey) <= 0) { ++ /* Change sw source to the higher ranked one */ ++ fc->sw_source = sw_source; ++ } ++ msmFreePointer((void**)&path); ++ } ++ ++ if (rpmtsFilterFlags(ts) & RPMPROB_FILTER_REPLACEOLDFILES) { ++ /* Conflict has been noted, now return ok. It will be actually */ ++ /* resolved later when conflicting package signature is verified */ ++ /* and sw_source is known. */ ++ return RPMRC_OK; ++ } ++ return rpmrc; ++} ++ ++rpmRC SECURITYHOOK_PRE_TSM_FUNC(rpmts _ts) ++{ ++ packagecontext *ctx = context; ++ if (!ctx) return RPMRC_FAIL; ++ ++ return RPMRC_OK; ++} ++ ++static int findSWSourceBySignature(sw_source_x *sw_source, void *param) ++{ ++ origin_x *origin; ++ keyinfo_x *keyinfo; ++ pgpDig dig = (pgpDig)param; ++ ++ for (origin = sw_source->origins; origin; origin = origin->prev) { ++ for (keyinfo = origin->keyinfos; keyinfo; keyinfo = keyinfo->prev) { ++ pgpDig ddig = pgpNewDig(); ++ if (pgpPrtPkts(keyinfo->keydata, keyinfo->keylen, ddig, 0)) { ++ rpmlog(RPMLOG_INFO, "invalid sw source key\n"); ++ pgpFreeDig(ddig); ++ return -1; ++ } ++ /* Compare all fields of RSA key. */ ++ if (SECITEM_ItemsAreEqual(&dig->keydata->u.rsa.publicExponent, &ddig->keydata->u.rsa.publicExponent) && ++ SECITEM_ItemsAreEqual(&dig->keydata->u.rsa.modulus, &ddig->keydata->u.rsa.modulus)) { ++ pgpFreeDig(ddig); ++ return 0; ++ } ++ pgpFreeDig(ddig); ++ } ++ } ++ return 1; ++} ++ ++rpmRC SECURITYHOOK_VERIFY_FUNC(rpmKeyring keyring, rpmtd sigtd, ++ pgpDig dig, rpmRC rpmrc) ++{ ++ current = NULL; ++ ++#if 0 ++ if (!root) { ++ if (rpmrc == RPMRC_NOKEY) { ++ rpmlog(RPMLOG_INFO, "package verified as root sw source\n"); ++ rootSWSource = 1; /* accept any signed package as root */ ++ return RPMRC_OK; ++ } ++ rpmlog(RPMLOG_ERR, "No device security policy, cannot verify signature\n"); ++ return rpmrc; ++ } ++ ++ ++// make currently that even non-signed package with root policy will be treated as trusted ++ ++ if (!root) { ++ rpmlog(RPMLOG_INFO, "package verified as root sw source\n"); ++ rootSWSource = 1; /* accept any signed package as root */ ++ return RPMRC_OK; ++ } ++ ++//------------------ ++#endif ++ ++ if (!root) { ++ rpmlog(RPMLOG_INFO, "No device policy found\n"); ++ rootSWSource = 1; /* accept any signed package as root */ ++ return rpmrc; ++ } ++ ++ if (rpmrc == RPMRC_NOKEY) { ++ /* No key, revert to unknown sw source. */ ++ rpmlog(RPMLOG_INFO, "no key for signature, cannot search sw source\n"); ++ goto exit; ++ } ++ if (rpmrc) { ++ /* RPM failed to verify signature */ ++ rpmlog(RPMLOG_ERR, "Invalid signature, cannot search sw source\n"); ++ return rpmrc; ++ } ++ if (sigtd->tag != RPMSIGTAG_RSA) { ++ /* Not RSA, revert to unknown sw source. */ ++ rpmlog(RPMLOG_INFO, "no RSA signature, cannot search sw source\n"); ++ goto exit; ++ } ++ current = msmSWSourceTreeTraversal(root->sw_sources, findSWSourceBySignature, dig); ++ if (current) ++ rpmlog(RPMLOG_INFO, "signature matches sw source %s\n", current->name); ++ else ++ rpmlog(RPMLOG_INFO, "valid signature but no matching sw source\n"); ++ ++ exit: ++ if (!current) { ++ current = msmSWSourceTreeTraversal(root->sw_sources, findSWSourceByName, (void *)"_default_"); ++ if (current) ++ rpmlog(RPMLOG_INFO, "using _default_ sw source\n"); ++ else { // for now in case default sw source isn't there yet, allow to think that it is coming from root ++ current = msmSWSourceTreeTraversal(root->sw_sources, findSWSourceByName, (void *)"root"); ++ if (current) ++ rpmlog(RPMLOG_INFO, "using _root_ sw source now for testing\n"); ++ } ++ } ++ ++ return rpmrc; ++} ++ ++static packagecontext *msmNew(rpmte te) ++{ ++ Header h; ++ struct rpmtd_s msm; ++ int count; ++ packagecontext *ctx = NULL; ++ const char *sw_source = NULL; ++ ++ rpmtdReset(&msm); ++ ++ h = rpmteHeader(te); ++ if (!h) return NULL; ++ ++ ctx = xcalloc(1, sizeof(*ctx)); ++ if (!ctx) { ++ goto exit1; ++ } ++ ctx->te = te; ++ ++ if (!headerIsEntry(h, RPMTAG_SECMANIFEST)) { ++ goto exit1; ++ } ++ ++ if (!headerGet(h, RPMTAG_SECMANIFEST, &msm, HEADERGET_MINMEM)) { ++ goto exit1; ++ } ++ ++ count = rpmtdCount(&msm); ++ if (count != 1) { ++ goto exit2; ++ } ++ ++ ctx->data = xstrdup(rpmtdNextString(&msm)); ++ rpmlog(RPMLOG_INFO, "%s manifest b64 data: %.40s...\n", ++ rpmteN(ctx->te), ctx->data); ++ ++ if (rpmteType(ctx->te) == TR_ADDED) { ++ /* Save sw_source name into database, we need it when package */ ++ /* is removed because signature verify is not called then. */ ++ if (current) sw_source = current->name; ++ else if (rootSWSource) sw_source = rpmteN(ctx->te); ++ ++ if (!sw_source || !headerPutString(h, RPMTAG_SECSWSOURCE, sw_source)) { ++ rpmlog(RPMLOG_ERR, "Failed to save sw source for %s, sw_source: %s\n", ++ rpmteN(ctx->te), sw_source); ++ msmFreePointer((void**)&ctx->data); ++ msmFreePointer((void**)&ctx); ++ } ++ } ++ ++ ++ exit2: ++ rpmtdFreeData(&msm); ++ exit1: ++ headerFree(h); ++ ++ return ctx; ++} ++ ++static packagecontext *msmAddTE(rpmte te) ++{ ++ packagecontext *ctx = msmNew(te); ++ if (ctx) { ++ /* add the new policy to the list */ ++ if (!contextsHead) { ++ contextsHead = ctx; ++ contextsTail = ctx; ++ } else { ++ if (rpmteType(te) == TR_ADDED) { ++ /* add to the end of the list */ ++ contextsTail->next = ctx; ++ contextsTail = ctx; ++ } else { ++ /* add to the beginning of the list */ ++ ctx->next = contextsHead; ++ contextsHead = ctx; ++ } ++ } ++ } ++ return ctx; ++} ++ ++rpmRC SECURITYHOOK_PRE_PSM_FUNC(rpmte te) ++{ ++ packagecontext *ctx = NULL; ++ manifest_x *mfx = NULL; ++ char *xml = NULL; ++ size_t xmllen; ++ rpmRC rc = RPMRC_OK; ++ int ret = 0; ++ ++ if (!root && !rootSWSource) { ++ /* no sw source config, just exit */ ++ goto exit; ++ } ++ ++ if (!current) { ++ /* this means that verify hook has not been called */ ++ current = msmSWSourceTreeTraversal(root->sw_sources, findSWSourceByName, (void *)"_default_"); ++ if (current) ++ rpmlog(RPMLOG_INFO, "using _default_ sw source\n"); ++ else { ++ rpmlog(RPMLOG_ERR, "Default source isn't availiable. Package source can't be determined. Abort installation\n"); ++ goto fail; ++ } ++ } ++ ++ ctx = msmAddTE(te); ++ if (!ctx) { ++ rpmlog(RPMLOG_ERR, "Failed to create security context for %s\n", ++ rpmteNEVRA(te)); ++ goto fail; ++ } ++ ++ if (rpmteType(ctx->te) == TR_REMOVED) { ++ ++ /* Verify hook is not called before remove, */ ++ /* so get the sw_source name from package header */ ++ Header h = rpmteHeader(te); ++ if (h) { ++ const char *name = headerGetString(h, RPMTAG_SECSWSOURCE); ++ if (name) { ++ current = msmSWSourceTreeTraversal(root->sw_sources, findSWSourceByName, (void *)name); ++ rpmlog(RPMLOG_INFO, "removing %s from sw source %s\n", ++ rpmteN(ctx->te), name); ++ } ++ headerFree(h); ++ } ++ /* if (!current) { ++ rpmlog(RPMLOG_INFO, "no sw source for removing %s\n", rpmteN(ctx->te)); ++ goto exit; ++ }*/ ++ } ++ ++ if (!ctx->data) { ++ rpmlog(RPMLOG_INFO, "No manifest in this package. Creating default one\n"); ++ ++ /* create default manifest manually. Make the package to belong to the domain where rpm is running */ ++ ++ mfx = calloc(1, sizeof(manifest_x)); ++ if (!mfx) goto fail; ++ mfx->sw_source = current; ++ mfx->name = strdup(rpmteN(ctx->te)); ++ mfx->request = calloc(1, sizeof(request_x)); ++ if (!mfx->request) { ++ msmFreePointer((void**)&mfx->name); ++ msmFreePointer((void**)&mfx); ++ goto fail; ++ } ++ mfx->request->ac_domain = strdup(ownSmackLabel); ++ rpmlog(RPMLOG_DEBUG, "Done with manifest creation\n"); ++ ++ } else { ++ if (b64decode(ctx->data, (void **) &xml, &xmllen) != 0) { ++ rpmlog(RPMLOG_ERR, "Failed to decode manifest for %s\n", ++ rpmteN(ctx->te)); ++ goto fail; ++ } ++ ++ rpmlog(RPMLOG_INFO, "parsing %s manifest: \n%s", rpmteN(ctx->te), xml); ++ mfx = msmProcessManifestXml(xml, xmllen, current, rpmteN(ctx->te)); ++ ++ if (!mfx) { ++ rpmlog(RPMLOG_ERR, "Failed to parse manifest for %s\n", ++ rpmteN(ctx->te)); ++ goto fail; ++ } ++ } ++ ++ ++ ctx->mfx = mfx; ++ ++ int res = smack_accesses_new(&(ctx->smack_accesses)); ++ if (res != 0) { ++ rpmlog(RPMLOG_ERR, "Failed to create smack access set\n"); ++ goto fail; ++ } ++ ++ if (rpmteType(ctx->te) == TR_ADDED) { ++ ++ rpmlog(RPMLOG_DEBUG, "Installing the package\n"); ++ ++ package_x *package = NULL; ++ ++ if (rootSWSource) { ++ /* this is the first package */ ++ package = msmCreatePackage(mfx->name, mfx->sw_sources, ++ mfx->provides, NULL); ++ } else if (mfx->sw_source) { ++ /* all packages must have sw_source */ ++ package = msmCreatePackage(mfx->name, mfx->sw_source, ++ mfx->provides, NULL); ++ } else { ++ rpmlog(RPMLOG_ERR, "Package doesn't have a sw source. Abnormal situation. Abort.\n"); ++ goto fail; ++ } ++ ++ if (!package) { ++ rpmlog(RPMLOG_ERR, "Package could not be created. \n"); ++ goto fail; ++ } ++ ++ mfx->provides = NULL; /* owned by package now */ ++ ++ if (!package->sw_source) { /* this must never happen */ ++ rpmlog(RPMLOG_ERR, "Install failed. Check that configuration has at least root sw source installed.\n"); ++ msmFreePackage(package); ++ package = NULL; ++ goto fail; ++ } ++ ++ rpmlog(RPMLOG_INFO, "adding %s manifest data to system, package_name %s\n", ++ rpmteN(ctx->te), package->name); ++ ++ if (msmSetupPackages(ctx->smack_accesses, package, package->sw_source)) { ++ rpmlog(RPMLOG_ERR, "Package setup failed for %s\n", rpmteN(ctx->te) ); ++ msmFreePackage(package); ++ package = NULL; ++ goto fail; ++ } ++ ++ if (rootSWSource) { ++ /* current is root */ ++ root = ctx->mfx; ++ } ++ ++ rpmlog(RPMLOG_DEBUG, "Starting the security setup...\n"); ++ unsigned int smackLabel = 0; ++ ++ if (rootSWSource || ctx->mfx->sw_source) { ++ if (ctx->mfx->sw_sources) { ++ smackLabel = 1; /* setting this one on since this manifest doesn't have any define/request section */ ++ ret = msmSetupSWSources(ctx->smack_accesses, ctx->mfx, ts); ++ if (ret) { ++ rpmlog(RPMLOG_ERR, "SW source setup failed for %s\n", ++ rpmteN(ctx->te)); ++ msmCancelPackage(ctx->mfx->name); ++ goto fail; ++ } ++ } ++ if (ctx->mfx->define) { ++ if (ctx->mfx->define->name) ++ smackLabel = 1; ++ ret = msmSetupDefine(ctx->smack_accesses, ctx->mfx); ++ if (ret) { ++ rpmlog(RPMLOG_ERR, "AC domain setup failed for %s\n", ++ rpmteN(ctx->te)); ++ msmCancelPackage(ctx->mfx->name); ++ goto fail; ++ } ++ } ++ if (ctx->mfx->request) { ++ if (ctx->mfx->request->ac_domain) ++ smackLabel = 1; ++ ret = msmSetupRequests(ctx->mfx); ++ if (ret) { ++ rpmlog(RPMLOG_ERR, "Request setup failed for %s\n", ++ rpmteN(ctx->te)); ++ msmCancelPackage(ctx->mfx->name); ++ goto fail; ++ } ++ } ++ if (ctx->smack_accesses) { ++ ret = msmSetupSmackRules(ctx->smack_accesses, ctx->mfx->name, 0, SmackEnabled); ++ smack_accesses_free(ctx->smack_accesses); ++ ctx->smack_accesses = NULL; ++ if (ret) { ++ rpmlog(RPMLOG_ERR, "Setting up smack rules for %s failed\n", ++ rpmteN(ctx->te)); ++ msmCancelPackage(ctx->mfx->name); ++ goto fail; ++ } ++ } ++ if (package->provides) { ++ ret = msmSetupDBusPolicies(package); ++ if (ret) { ++ rpmlog(RPMLOG_ERR, "Setting up dbus policies for %s failed\n", ++ rpmteN(ctx->te)); ++ msmCancelPackage(ctx->mfx->name); ++ goto fail; ++ } ++ } ++ ++ /* last check is needed in order to catch in advance ++ the situation when no ac domain defined or requested */ ++ if (smackLabel == 0) { ++ rpmlog(RPMLOG_ERR, "No ac domain defined or requested for package %s. Abort.\n", rpmteN(ctx->te)); ++ msmCancelPackage(ctx->mfx->name); ++ goto fail; ++ } ++ } ++ ++ ++ } else if (rpmteDependsOn(ctx->te)) { /* TR_REMOVED */ ++ rpmlog(RPMLOG_INFO, "upgrading package %s by %s\n", ++ rpmteNEVR(ctx->te), rpmteNEVR(rpmteDependsOn(ctx->te))); ++ } else if (mfx->sw_sources) { ++ rpmlog(RPMLOG_ERR, "Cannot remove sw source package %s\n", ++ rpmteN(ctx->te)); ++ goto fail; ++ } ++ ++ rpmlog(RPMLOG_DEBUG, "Finished with pre psm hook \n"); ++ ++ goto exit; ++ ++ fail: /* error, cancel the rpm operation */ ++ rc = RPMRC_FAIL; ++ ++ exit: /* success, continue rpm operation */ ++ context = ctx; ++ msmFreePointer((void**)&xml); ++ ++ return rc; ++} ++ ++rpmRC SECURITYHOOK_SCRIPT_EXEC_FUNC(ARGV_const_t argv) ++{ ++ /* no functionality yet for scripts, just execute it like it is */ ++ return execv(argv[0], argv); ++} ++ ++rpmRC SECURITYHOOK_FSM_OPENED_FUNC(FSM_t fsm) ++{ ++ ++ //check if there any conflicts that prevent file being written to the disk ++ ++ fileconflict *fc; ++ packagecontext *ctx = context; ++ if (!ctx) return RPMRC_FAIL; ++ ++ char* fullpath = getFilePath(fsm->dirName, fsm->baseName); ++ if (!fullpath) return RPMRC_FAIL; ++ rpmlog(RPMLOG_DEBUG, "Constructed file name: %s\n", fullpath); ++ HASH_FIND(hh, allfileconflicts, fullpath, strlen(fullpath), fc); ++ msmFreePointer((void**)&fullpath); ++ ++ if (fc) { ++ /* There is a conflict, see if we are not allowed to overwrite */ ++ if (!current || (strcmp(current->rankkey, fc->sw_source->rankkey) > 0)) { ++ rpmlog(RPMLOG_ERR, "%s has file conflict in %s from sw source %s\n", ++ rpmteN(ctx->te), fc->path, fc->sw_source->name); ++ return RPMRC_FAIL; ++ } ++ rpmlog(RPMLOG_INFO, "%s from %s overwrites %s from %s\n", ++ rpmteN(ctx->te), current->name, fc->path, fc->sw_source->name); ++ } ++ ++ return RPMRC_OK; ++} ++ ++rpmRC SECURITYHOOK_FSM_UPDATED_FUNC(FSM_t fsm) ++{ ++ ++ packagecontext *ctx = context; ++ if (!ctx) return RPMRC_FAIL; ++ ++ //no need to have any hashes calculation now ++ ++ return RPMRC_OK; ++} ++ ++rpmRC SECURITYHOOK_FSM_CLOSED_FUNC(FSM_t fsm, int rpmrc) ++{ ++ ++ packagecontext *ctx = context; ++ if (!ctx) return RPMRC_FAIL; ++ if (rpmrc) return rpmrc; ++ ++ rpmlog(RPMLOG_DEBUG, "Started with FSM_CLOSED_FUNC hook for file dir name: %s, base name %s \n", fsm->dirName, fsm->baseName); ++ ++ if (ctx->mfx) { ++ file_x *file = xcalloc(1, sizeof(*file)); ++ if (file) { ++ file->path = getFilePath(fsm->dirName, fsm->baseName); ++ LISTADD(ctx->mfx->files, file); ++ if (rpmteType(ctx->te) == TR_ADDED) { ++ if (msmSetFileXAttributes(ctx->mfx, file->path, cookie) < 0) { ++ rpmlog(RPMLOG_ERR, "Setting of extended attributes failed for file %s from package %s\n", ++ file->path, rpmteN(ctx->te)); ++ return RPMRC_FAIL; ++ } ++ } ++ ++ } else ++ return RPMRC_FAIL; ++ } else { ++ rpmlog(RPMLOG_ERR, "Manifest is missing while it should be present for the package %s\n", ++ rpmteN(ctx->te)); ++ return RPMRC_FAIL; ++ } ++ ++ rpmlog(RPMLOG_DEBUG, "Finished with FSM_CLOSED_FUNC hook for file dir name: %s, base name %s \n", fsm->dirName, fsm->baseName); ++ return RPMRC_OK; ++} ++ ++rpmRC SECURITYHOOK_FSM_DIR_LABEL_FUNC(FSM_t fsm, int rpmrc) ++{ ++ packagecontext *ctx = context; ++ if (!ctx) return RPMRC_FAIL; ++ if (rpmrc) return rpmrc; ++ ++ rpmlog(RPMLOG_DEBUG, "Started with FSM_DIR_LABEL_FUNC hook for file fsm->path: %s \n", fsm->path); ++ if (ctx->mfx) { ++ if (msmSetFileXAttributes(ctx->mfx, fsm->path, cookie) < 0) { ++ rpmlog(RPMLOG_ERR, "Setting of extended attributes failed for dir %s from package %s\n", ++ fsm->path, rpmteN(ctx->te)); ++ rpmrc = RPMRC_FAIL; ++ } ++ ++ } else { ++ rpmlog(RPMLOG_ERR, "Manifest is missing while it should be present for the package %s\n", ++ rpmteN(ctx->te)); ++ return RPMRC_FAIL; ++ } ++ ++ rpmlog(RPMLOG_DEBUG, "Finished with FSM_DIR_LABEL_FUNC hook for file fsm->path: %s \n", fsm->path); ++ return rpmrc; ++} ++ ++ ++rpmRC SECURITYHOOK_POST_PSM_FUNC(rpmte te, char* rootDir, int rpmrc) ++{ ++ ++ int ret = 0; ++ packagecontext *ctx = context; ++ if (!ctx) return RPMRC_FAIL; ++ ++ if (rpmrc) { ++ /* failure in rpm psm, rollback */ ++ if (rpmteType(ctx->te) == TR_ADDED) ++ msmCancelPackage(ctx->mfx->name); ++ goto exit; ++ } ++ ++ if (!ctx->mfx){ ++ rpmlog(RPMLOG_ERR, "Manifest is missing while it should be present for the package %s\n", ++ rpmteN(ctx->te)); ++ goto exit; ++ } ++ ++ if (rootSWSource) { ++ /* current is root */ ++ root = context->mfx; ++ } ++ ++ ++ if (rpmteType(ctx->te) == TR_REMOVED) { ++ if (ctx->mfx->sw_source) { ++ if (rpmteDependsOn(ctx->te)) { ++ rpmlog(RPMLOG_INFO, "upgrading %s manifest data\n", ++ rpmteN(ctx->te)); ++ } else { ++ rpmlog(RPMLOG_INFO, "removing %s manifest data\n", ++ rpmteN(ctx->te)); ++ if (ctx->mfx->define || ctx->mfx->provides || ctx->mfx->sw_sources) { ++ msmRemoveRules(ctx->smack_accesses, ctx->mfx, SmackEnabled); ++ } ++ msmRemoveConfig(ctx->mfx); ++ } ++ } ++ ++ } ++ ++ exit: ++ current = NULL; ++ ++ if (ret) { ++ return RPMRC_FAIL; ++ } ++ return rpmrc; ++} ++ ++rpmRC SECURITYHOOK_POST_TSM_FUNC(rpmts _ts) ++{ ++ ++ packagecontext *ctx = context; ++ if (!ctx) return RPMRC_FAIL; ++ return RPMRC_OK; ++} ++ ++static packagecontext *msmFree(packagecontext *ctx) ++{ ++ ++ while (ctx) { ++ packagecontext *next = ctx->next; ++ msmFreePointer((void**)&ctx->data); ++ ctx->mfx = msmFreeManifestXml(ctx->mfx); ++ if (ctx->smack_accesses) smack_accesses_free(ctx->smack_accesses); ++ msmFreePointer((void**)&ctx); ++ ctx = next; ++ } ++ ++ return NULL; ++ ++} ++ ++rpmRC SECURITYHOOK_CLEANUP_FUNC(void) ++{ ++ ++ msmFreeInternalHashes(); // free hash structures first ++ ++ if (root) { ++ msmSaveDeviceSecPolicyXml(root); ++ if (!rootSWSource) root = msmFreeManifestXml(root); ++ } ++ ++ ts = NULL; ++ ++ contextsHead = contextsTail = msmFree(contextsHead); ++ contextsHead = contextsTail = NULL; ++ ++ if (allfileconflicts) { ++ fileconflict *fc, *temp; ++ HASH_ITER(hh, allfileconflicts, fc, temp) { ++ HASH_DELETE(hh, allfileconflicts, fc); ++ msmFreePointer((void**)&fc->path); ++ msmFreePointer((void**)&fc); ++ } ++ } ++ ++ msmFreePointer((void**)&ownSmackLabel); ++ if (cookie) magic_close(cookie); ++ ++ return RPMRC_OK; ++} ++ ++const char *msmQueryPackageFile(const char *rfor, ++ const char **dname, const char **pname) ++{ ++ int match = 0; ++ const char *path = NULL; ++ ++ if (ts) { ++ char *sep = strchr(rfor, ':'); ++ if (sep && sep[1] == ':' && sep[2] == '/') ++ path = &sep[2]; ++ if (!path) return NULL; ++ ++ rpmdbMatchIterator mi = rpmtsInitIterator(ts, RPMTAG_BASENAMES, path, 0); ++ if (!mi) ++ mi = rpmtsInitIterator(ts, RPMTAG_PROVIDENAME, path, 0); ++ if (mi) { ++ Header h; ++ const char *name, *sw_source; ++ while ((h = rpmdbNextIterator(mi))) { ++ rpmdbCheckSignals(); ++ name = headerGetString(h, RPMTAG_NAME); ++ sw_source = headerGetString(h, RPMTAG_SECSWSOURCE); ++ if (name && sw_source) { ++ match = !strncmp(rfor, name, path - rfor - 2); ++ rpmlog(RPMLOG_INFO, "file %s belongs to package %s in sw source %s %s\n", path, name, sw_source, (match ? "(matched request)" : "")); ++ if (match) { ++ *pname = xstrdup(name); ++ *dname = xstrdup(sw_source); ++ break; ++ } ++ } ++ } ++ mi = rpmdbFreeIterator(mi); ++ } ++ } ++ return match ? path : NULL; ++} ++ ++void msmFreePointer(void** ptr) ++{ ++ if (*ptr) ++ free(*ptr); ++ *ptr = NULL; ++ return; ++} +diff -Nuarp rpm/security/msmconfig.c rpm-security/security/msmconfig.c +--- rpm/security/msmconfig.c 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/security/msmconfig.c 2012-10-01 10:29:50.323983642 +0300 +@@ -0,0 +1,264 @@ ++/* ++ * This file is part of MSM security plugin ++ * Greatly based on the code of MSSF security plugin ++ * ++ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++ * ++ * Contact: Ilhan Gurel ++ * ++ * Copyright (C) 2011 - 2012 Intel Corporation. ++ * ++ * Contact: Elena Reshetova ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ */ ++ ++#include ++ ++#include "rpmio/base64.h" ++ ++#include "msm.h" ++ ++typedef enum credType_e { ++ CRED_ALLOWMATCHES = 0, ++ CRED_ALLOW = 1, ++ CRED_DENYMATCHES = 2, ++ CRED_DENY = 3, ++ CRED_PROVIDE = 4 ++} credType; ++ ++/** ++ * Serializes key data ++ * @todo Problem with getting keydata ++ * @param parent XML node ++ * @param keyinfo keyinfo structure ++ * @return none ++ */ ++static void msmHandleKeyinfo(xmlNode *parent, keyinfo_x *keyinfo) ++{ ++ char *enc = NULL; ++ ++ if (!parent) ++ return; ++ ++ while (keyinfo) { ++ xmlNode *node = xmlNewNode(NULL, BAD_CAST "keyinfo"); ++ ++ /* b64 encode keydata first */ ++ if ((enc = b64encode(keyinfo->keydata, keyinfo->keylen, -1)) != NULL) { ++ xmlAddChild(node, xmlNewText(BAD_CAST "\n")); ++ xmlAddChild(node, xmlNewText(BAD_CAST enc)); ++ msmFreePointer((void**)&enc); ++ } ++ ++ xmlAddChild(parent, node); ++ keyinfo = keyinfo->prev; ++ } ++} ++ ++/** ++ * Serializes ac_domain data ++ * @param parent XML node ++ * @param type Type (allow, deny,..) ++ * @param ac_domain ac_domain structure ++ * @return none ++ */ ++static void msmHandleACDomains(xmlNode *parent, credType type, ++ ac_domain_x *ac_domain) ++{ ++ if (!ac_domain || !parent) ++ return; ++ ++ xmlNode *node = NULL; ++ ++ if ((type == CRED_ALLOWMATCHES) || (type == CRED_ALLOW)) { ++ node = xmlNewNode(NULL, BAD_CAST "allow"); ++ } else if ((type == CRED_DENYMATCHES) || (type == CRED_DENY)) { ++ node = xmlNewNode(NULL, BAD_CAST "deny"); ++ } else if (type == CRED_PROVIDE) { ++ node = parent; ++ } else { ++ return; ++ } ++ ++ while (ac_domain) { ++ xmlNode *childnode = xmlNewNode(NULL, BAD_CAST "ac_domain"); ++ if ((type == CRED_ALLOWMATCHES) || (type == CRED_DENYMATCHES)) { ++ xmlNewProp(childnode, BAD_CAST "match", BAD_CAST ac_domain->match); ++ } else { ++ xmlNewProp(childnode, BAD_CAST "name", BAD_CAST ac_domain->name); ++ if (ac_domain->type) ++ xmlNewProp(childnode, BAD_CAST "policy", BAD_CAST ac_domain->type); ++ if (ac_domain->plist) ++ xmlNewProp(childnode, BAD_CAST "plist", BAD_CAST ac_domain->plist); ++ } ++ xmlAddChild(node, childnode); ++ if (type == CRED_ALLOW || type == CRED_DENY) ++ ac_domain = ac_domain->hh.next; ++ else ++ ac_domain = ac_domain->prev; ++ } ++ ++ if (type != CRED_PROVIDE) ++ xmlAddChild(parent, node); ++} ++ ++/** ++ * Serializes origin data ++ * @param parent XML node ++ * @param origin origin structure ++ * @return none ++ */ ++static void msmHandleOrigin(xmlNode *parent, origin_x *origin) ++{ ++ if (!parent) ++ return; ++ ++ while (origin) { ++ xmlNode *node = xmlNewNode(NULL, BAD_CAST "origin"); ++ xmlAddChild(parent, node); ++ msmHandleKeyinfo(node, origin->keyinfos); ++ origin = origin->prev; ++ } ++} ++ ++/** ++ * Serializes provides data ++ * @param parent XML node ++ * @param provide provide structure ++ * @return none ++ */ ++static void msmHandleProvide(xmlNode *parent, provide_x *provide) ++{ ++ if (!parent) ++ return; ++ ++ while (provide) { ++ if (provide->ac_domains) { ++ xmlNode *node = xmlNewNode(NULL, BAD_CAST "provide"); ++ xmlAddChild(parent, node); ++ msmHandleACDomains(node, CRED_PROVIDE, provide->ac_domains); ++ if (provide->origin) { ++ xmlNode *childnode = xmlNewNode(NULL, BAD_CAST "for"); ++ xmlNewProp(childnode, BAD_CAST "origin", BAD_CAST provide->origin); ++ xmlAddChild(node, childnode); ++ } ++ } ++ provide = provide->prev; ++ } ++} ++ ++/** ++ * Serializes packages data ++ * @param parent XML node ++ * @param package package structure ++ * @return none ++ */ ++static void msmHandlePackage(xmlNode *parent, package_x *package) ++{ ++ if (!parent) ++ return; ++ ++ while (package) { ++ if (!package->newer) { ++ xmlNode *node = xmlNewNode(NULL, BAD_CAST "package"); ++ xmlNewProp(node, BAD_CAST "name", BAD_CAST package->name); ++ if (package->modified) ++ xmlNewProp(node, BAD_CAST "modified", BAD_CAST package->modified); ++ xmlAddChild(parent, node); ++ msmHandleProvide(node, package->provides); ++ } ++ package = package->prev; ++ } ++} ++ ++/** ++ * Serializes sw source data ++ * @param parent XML node ++ * @param sw_source sw_source structure ++ * @return none ++ */ ++static void msmHandleSWSource(xmlNode *parent, sw_source_x *sw_source) ++{ ++ #define MAX_DEPTH 10 ++ xmlNode *node[MAX_DEPTH]; ++ sw_source_x *temp; ++ int depth = 0; ++ ++ if (!sw_source || !parent) ++ return; ++ ++ node[0] = parent; ++ ++ while (sw_source) { ++ depth = 1; /* recalculate depth */ ++ for (temp = sw_source->parent; temp; temp = temp->parent) depth++; ++ if (!sw_source->newer && depth < MAX_DEPTH) { ++ node[depth] = xmlNewNode(NULL, BAD_CAST "sw_source"); ++ xmlNewProp(node[depth], BAD_CAST "name", BAD_CAST sw_source->name); ++ xmlNewProp(node[depth], BAD_CAST "rankkey", BAD_CAST sw_source->rankkey); ++ xmlAddChild(node[depth-1], node[depth]); ++ msmHandleOrigin(node[depth], sw_source->origins); ++ msmHandleACDomains(node[depth], CRED_ALLOWMATCHES, sw_source->allowmatches); ++ msmHandleACDomains(node[depth], CRED_ALLOW, sw_source->allows); ++ msmHandleACDomains(node[depth], CRED_DENYMATCHES, sw_source->denymatches); ++ msmHandleACDomains(node[depth], CRED_DENY, sw_source->denys); ++ msmHandlePackage(node[depth], sw_source->packages); ++ if (sw_source->older) { ++ /* packages still belong to this sw_source */ ++ msmHandlePackage(node[depth], sw_source->older->packages); ++ } ++ } ++ sw_source = sw_source->next; ++ } ++} ++ ++/** ++ * Saves sw_source configuration into /etc/dev-sec-policy. ++ * @param mfx data to serialize ++ * @return RPMRC_OK or RPMRC_FAIL ++ */ ++rpmRC msmSaveDeviceSecPolicyXml(manifest_x *mfx) ++{ ++ FILE *outFile; ++ rpmRC rc = RPMRC_OK; ++ ++ /* if data doesn't have sw_source information, no need to do anything */ ++ if (mfx && mfx->sw_sources) { ++ sw_source_x *sw_source; ++ xmlDoc *doc = xmlNewDoc( BAD_CAST "1.0"); ++ xmlNode *rootnode = xmlNewNode(NULL, BAD_CAST "config"); ++ xmlDocSetRootElement(doc, rootnode); ++ ++ LISTHEAD(mfx->sw_sources, sw_source); ++ msmHandleSWSource(rootnode, sw_source); ++ ++ outFile = fopen(DEVICE_SECURITY_POLICY, "w"); ++ if (outFile) { ++ xmlElemDump(outFile, doc, rootnode); ++ fclose(outFile); ++ } else { ++ rpmlog(RPMLOG_ERR, "Unable to write device security policy%s\n", ++ DEVICE_SECURITY_POLICY); ++ rc = RPMRC_FAIL; ++ } ++ xmlFreeDoc(doc); ++ xmlCleanupParser(); ++ } ++ ++ return rc; ++} ++ +diff -Nuarp rpm/security/msm.h rpm-security/security/msm.h +--- rpm/security/msm.h 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/security/msm.h 2012-10-01 10:29:50.323983642 +0300 +@@ -0,0 +1,469 @@ ++/* ++ * This file is part of MSM security plugin ++ * Greatly based on the code of MSSF security plugin ++ * ++ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++ * ++ * Contact: Tero Aho ++ * ++ * Copyright (C) 2011 - 2012 Intel Corporation. ++ * ++ * Contact: Elena Reshetova ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ */ ++ ++#ifndef MSM_H ++#define MSM_H ++ ++#include "security.h" ++ ++#define IMA "security.ima" ++#define SMACK64TRANSMUTE "security.SMACK64TRANSMUTE" ++#define SMACK64 "security.SMACK64" ++#define SMACK64EXEC "security.SMACK64EXEC" ++ ++#define SMACK_RULES_PATH "/etc/smack/accesses.d/" ++#define SMACK_RULES_PATH_BEG "/etc/smack/" ++#define DEVICE_SECURITY_POLICY "/etc/device-sec-policy" ++#define SMACK_LOAD_PATH "/smack/load" ++ ++#define SMACK_ISOLATED_LABEL "Isolated" ++ ++#define SMACK_LABEL_LENGTH 255 ++#define SMACK_ACCESS_TYPE_LENGHT 5 ++#define SMACK_UNINSTALL 1 ++#define RANK_LIMIT 10000 ++ ++#define DBUS_SERVICE 1 ++#define DBUS_PATH 2 ++#define DBUS_INTERFACE 3 ++#define DBUS_METHOD 4 ++#define DBUS_SIGNAL 5 ++ ++#include ++#include ++#include ++#include ++ ++/** \ingroup msm ++ * List definitions. ++ * All lists are doubly-linked, the last element is stored to list pointer, ++ * which means that lists must be looped using the prev pointer, or by ++ * calling LISTHEAD first to go to start in order to use the next pointer. ++ */ ++#define LISTADD(list, node) \ ++ do { \ ++ (node)->prev = (list); \ ++ if (list) (node)->next = (list)->next; \ ++ else (node)->next = NULL; \ ++ if (list) (list)->next = (node); \ ++ (list) = (node); \ ++ } while (0); ++ ++#define NODEADD(node1, node2) \ ++ do { \ ++ (node2)->prev = (node1); \ ++ (node2)->next = (node1)->next; \ ++ if ((node1)->next) (node1)->next->prev = (node2); \ ++ (node1)->next = (node2); \ ++ } while (0); ++ ++#define LISTCAT(list, first, last) \ ++ if ((first) && (last)) { \ ++ (first)->prev = (list); \ ++ (list) = (last); \ ++ } ++ ++#define LISTDEL(list, node) \ ++ do { \ ++ if ((node)->prev) (node)->prev->next = (node)->next; \ ++ if ((node)->next) (node)->next->prev = (node)->prev; \ ++ if (!((node)->prev) && !((node)->next)) (list) = NULL; \ ++ } while (0); ++ ++#define LISTHEAD(list, node) \ ++ for ((node) = (list); (node)->prev; (node) = (node)->prev); ++ ++#define LISTTAIL(list, node) \ ++ for ((node) = (list); (node)->next; (node) = (node)->next); ++ ++/** \ingroup msm ++ * Structure definitions. ++ * These structures represent the parsed security manifest of a package. ++ */ ++ ++ ++typedef struct file_x { ++ const char *path; /* file path */ ++ ino_t ino; /* file inode */ ++ unsigned char digest[SHA1_LENGTH]; ++ struct file_x *prev; ++ struct file_x *next; ++} file_x; ++ ++typedef struct filesystem_x { ++ const char *path; /* filesystem object absolute path */ ++ const char *label; /* SMACK64 xattr */ ++ const char *exec_label; /* SMACK64EXEC xattr */ ++ const char *type; /* can be set as TRANSMUTABLE for directory */ ++ struct filesystem_x *prev; ++ struct filesystem_x *next; ++ } filesystem_x; ++ ++typedef struct ac_domain_x { /* structure for storing ac domain */ ++ const char *name; /* ac domain name */ ++ const char *match; ++ const char *type; /* ac domain policy type: "shared" or "restricted" or "NULL" (private) */ ++ const char *plist; /* list of packages that allowed to request domain, if policy is "restricted" */ ++ const char *pkg_name; /* package that defined ac domain */ ++ struct ac_domain_x *prev; ++ struct ac_domain_x *next; ++ struct sw_source_x *sw_source; /* sw source of the package that defined the domain */ ++ const char *origin; ++ UT_hash_handle hh; ++ int allowed; ++ struct ac_domain_x *older; /* previous version in upgrades */ ++ struct ac_domain_x *newer; /* the newer upgraded version */ ++} ac_domain_x; ++ ++typedef struct annotation_x { ++ const char *name; ++ const char *value; ++} annotation_x; ++ ++typedef struct member_x { ++ int type; ++ const char *name; ++ struct annotation_x *annotation; ++ struct member_x *prev; ++ struct member_x *next; ++} member_x; ++ ++typedef struct interface_x { ++ const char *name; ++ struct annotation_x *annotation; ++ struct member_x *members; ++ struct interface_x *prev; ++ struct interface_x *next; ++} interface_x; ++ ++typedef struct node_x { ++ const char *name; ++ struct annotation_x *annotation; ++ struct member_x *members; ++ struct interface_x *interfaces; ++ struct node_x *prev; ++ struct node_x *next; ++} node_x; ++ ++typedef struct dbus_x { ++ const char *name; ++ const char *own; ++ const char *bus; ++ struct annotation_x *annotation; ++ struct node_x *nodes; ++ struct dbus_x *prev; ++ struct dbus_x *next; ++} dbus_x; ++ ++typedef struct provide_x { ++ const char *name; /* _system_ or NULL */ ++ struct ac_domain_x *ac_domains; ++ struct filesystem_x *filesystems; ++ struct dbus_x *dbuss; ++ const char *origin; ++ struct provide_x *prev; ++ struct provide_x *next; ++} provide_x; ++ ++typedef struct request_x { ++ const char *ac_domain; ++} request_x; ++ ++typedef struct keyinfo_x { ++ const unsigned char *keydata; ++ size_t keylen; ++ struct keyinfo_x *prev; ++ struct keyinfo_x *next; ++} keyinfo_x; ++ ++typedef struct access_x { ++ const char *data; ++ const char *type; ++ struct access_x *prev; ++ struct access_x *next; ++} access_x; ++ ++typedef struct origin_x { ++ const char *type; ++ struct keyinfo_x *keyinfos; ++ struct access_x *accesses; ++ struct origin_x *prev; ++ struct origin_x *next; ++} origin_x; ++ ++typedef struct constraint_x { ++ const char *name; ++ const char *value; ++ struct constraint_x *prev; ++ struct constraint_x *next; ++} constraint_x; ++ ++typedef struct d_request_x { ++ const char *label_name; ++ const char *ac_type; ++ struct d_request_x *prev; ++ struct d_request_x *next; ++} d_request_x; ++ ++typedef struct d_permit_x { ++ const char *label_name; ++ const char *to_label_name; ++ const char *ac_type; ++ struct d_permit_x *prev; ++ struct d_permit_x *next; ++} d_permit_x; ++ ++typedef struct d_provide_x { ++ const char *label_name; ++ struct d_provide_x *prev; ++ struct d_provide_x *next; ++} d_provide_x; ++ ++typedef struct define_x { ++ const char *name; /* ac domain name */ ++ const char *policy; ++ const char *plist; /* list of packages that are allowed to request the ac domain */ ++ struct d_request_x *d_requests; ++ struct d_permit_x *d_permits; ++ struct d_provide_x *d_provides; ++} define_x; ++ ++typedef struct package_x { ++ const char *name; /* package name */ ++ struct sw_source_x *sw_source; /* package sw source */ ++ struct provide_x *provides; ++ const char *modified; /* internal packages */ ++ struct package_x *prev; ++ struct package_x *next; ++ UT_hash_handle hh; ++ struct package_x *older; /* previous version in upgrades */ ++ struct package_x *newer; /* the newer upgraded version */ ++} package_x; ++ ++typedef struct sw_source_x { ++ const char *name; ++ const char *rankkey; ++ struct package_x *packages; /* config processing */ ++ struct ac_domain_x *allowmatches; /* list of allow wildcards */ ++ struct ac_domain_x *allows; /* hash of allowed ac domains */ ++ struct ac_domain_x *denymatches; /* list of deny wildcards */ ++ struct ac_domain_x *denys; /* hash of denied ac domains */ ++ struct origin_x *origins; ++ struct sw_source_x *prev; ++ struct sw_source_x *next; ++ struct sw_source_x *parent; ++ struct sw_source_x *older; /* previous version in upgrades */ ++ struct sw_source_x *newer; /* the newer upgraded version */ ++} sw_source_x; ++ ++typedef struct manifest_x { /*package manifest */ ++ struct sw_source_x *sw_source; /* package sw source */ ++ const char *name; /* package name */ ++ struct provide_x *provides; /* assign section */ ++ struct request_x *request; /* request section */ ++ struct sw_source_x *sw_sources; /*defined software sources(non-NULL only for configuration manifests)*/ ++ struct define_x *define; /* define section */ ++ struct file_x *files; /* installed files */ ++} manifest_x; ++ ++/** \ingroup msm ++ * Frees the given pointer and sets it to NULL ++ * @param ptr address of pointer to be freed ++ * @return ++ */ ++void msmFreePointer(void **ptr); ++ ++/** \ingroup msm ++ * Process package security manifest. ++ * @param buffer xml data buffer ++ * @param size buffer length ++ * @param current sw source for package ++ * @param packagename name of the package ++ * @return pointer to structure on success ++ */ ++manifest_x *msmProcessManifestXml(const char *buffer, int size, sw_source_x *current, const char *packagename); ++ ++/** \ingroup msm ++ * Process device security policy file. ++ * @param filename file name ++ * @return pointer to structure on success ++ */ ++manifest_x *msmProcessDevSecPolicyXml(const char *filename); ++ ++/** \ingroup msm ++ * Free all structures reserved during manifest processing. ++ * @param mfx pointer to structure ++ */ ++manifest_x* msmFreeManifestXml(manifest_x * mfx); ++ ++/** \ingroup msm ++ * Go through all sw sources in manifest, import keys to RPM keyring. ++ * @param smack_accesses smack_accesses handle for setting smack rules ++ * @param mfx package manifest ++ * @param ts rpm transaction set ++ * @return 0 on success, else -1 ++ */ ++int msmSetupSWSources(struct smack_accesses *smack_accesses, manifest_x *mfx, rpmts ts); ++ ++ ++/** \ingroup msm ++ * Create package structure for package being installed. ++ * @param name package name ++ * @param sw_source package sw source ++ * @param provides provided ac domains ++ * @param modified for internal packages ++ * @return allocated and initialized package struct ++ */ ++package_x *msmCreatePackage(const char *name, sw_source_x *sw_source, provide_x *provides, const char *modified); ++ ++/** \ingroup msm ++ * Go through all provides in manifest, add provided ac domains to hash. ++ * @param packages pointer to packages list ++ * @param sw_source link to sw source in device security policy ++ * @param rule_set rule set for setting smack rules ++ * @return 0 on success, else -1 ++ */ ++int msmSetupPackages(struct smack_accesses *smack_accesses, package_x *packages, sw_source_x *sw_source); ++ ++/** \ingroup msm ++ * Setup define section of manifest ++ * @param smack_accesses smack_accesses handle for setting smack rules ++ * @param mfx package manifest ++ * @return 0 on success, else -1 ++ */ ++int msmSetupDefine(struct smack_accesses *smack_accesses, manifest_x *mfx); ++ ++/** \ingroup msm ++ * Setup smack rules according to the manifest ++ * @param smack_accesses smack_accesses handle for setting smack rules ++ * @param package_name package name ++ * @param flag flag to indicate installation or uninstallation ++ * @param SmackEnabled flag to indicate Smack presence in the kernel ++ * @return 0 on success, else -1 ++ */ ++int msmSetupSmackRules(struct smack_accesses *smack_accesses, const char* package_name, int flag, int SmackEnabled); ++ ++/** \ingroup msm ++ * Check previous installation of package. ++ * @param name package name ++ * @return package or NULL ++ */ ++package_x *msmCheckPackage(const char *name); ++ ++/** \ingroup msm ++ * Cancel the installation of package (rules and config data). ++ * @param name package name ++ */ ++void msmCancelPackage(const char *name); ++ ++/** \ingroup msm ++ * Free package structure. ++ * @param package package ++ * @return next package in list or NULL ++ */ ++package_x *msmFreePackage(package_x *package); ++ ++/** \ingroup msm ++ * Set extended attributes of the file based on manifest. ++ * @param mfx package manifest ++ * @param filepath path of the file ++ * @param cookie magic cookie ++ * @return 0 on success, else -1 ++ */ ++int msmSetFileXAttributes(manifest_x *mfx, const char* filepath, magic_t cookie); ++ ++/** \ingroup msm ++ * Set setup the request section of manifest. ++ * @param mfx package manifest ++ * @return 0 on success, else -1 ++ */ ++int msmSetupRequests(manifest_x *mfx); ++ ++/** \ingroup msm ++ * Package is removed, remove all related Smack rules. ++ * @param mfx package manifest ++ * @param smack_accesses smack_accesses handle for setting smack rules ++ * @param SmackEnabled flag to indicate Smack presence in the kernel ++ */ ++void msmRemoveRules(struct smack_accesses *smack_accesses, manifest_x *mfx, int SmackEnabled); ++ ++/** \ingroup msm ++ * Setup DBus policies for package ++ * @param package package ++ */ ++int msmSetupDBusPolicies(package_x *package); ++ ++ ++/** \ingroup msm ++ * Package is removed, remove related data in device security policy. ++ * @param mfx package manifest ++ */ ++void msmRemoveConfig(manifest_x *mfx); ++ ++/** \ingroup msm ++ * String compare which allows wildcards (* and ?) in s2. ++ * @param s1 string to compare ++ * @param s2 string to compare ++ * @return 0 if s1 matches s2 ++ */ ++int strwcmp(const char *s1, const char *s2); ++ ++/** \ingroup msm ++ * Saves configuration into /etc/dev-sec-policy. ++ * @param mfx data to serialize ++ * @return RPMRC_OK or RPMRC_FAIL ++ */ ++rpmRC msmSaveDeviceSecPolicyXml(manifest_x *root); ++ ++/** \ingroup msm ++ * Depth first tree traversal for sw source tree. ++ * @param sw_sources sw source tree ++ * @param func function to call for each sw source until 0 is returned ++ * @param param parameter for the function ++ * @return matching sw source or NULL ++ */ ++sw_source_x *msmSWSourceTreeTraversal(sw_source_x *sw_sources, int (func)(sw_source_x *, void *), void *param); ++ ++/** \ingroup msm ++ * Free internal hashes. ++ */ ++void msmFreeInternalHashes(void); ++ ++/** \ingroup msm ++ * Query that requested package really owns the file. ++ * @param rfor request for 'package::/file/path' ++ * @param sw_sname sw source name, caller must free ++ * @param pname package name, caller must free ++ * @return pointer to the path part in rfor, or NULL if file ++ * is not owned by the specified package ++ */ ++const char *msmQueryPackageFile(const char *rfor, ++ const char **sw_sname, const char **pname); ++ ++ ++#endif +diff -Nuarp rpm/security/msmmanifest.c rpm-security/security/msmmanifest.c +--- rpm/security/msmmanifest.c 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/security/msmmanifest.c 2012-10-01 10:29:50.323983642 +0300 +@@ -0,0 +1,1500 @@ ++/* ++ * This file is part of MSM security plugin ++ * Greatly based on the code of MSSF security plugin ++ * ++ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++ * ++ * Contact: Tero Aho ++ * ++ * Copyright (C) 2011 -2012 Intel Corporation. ++ * ++ * Contact: Elena Reshetova ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "msm.h" ++ ++#include "rpmio/base64.h" ++ ++/* We'll support only the basic set of characters */ ++#define ASCII(s) (const char *)s ++#define XMLCHAR(s) (const xmlChar *)s ++ ++ ++static int msmVerifyAccessType(const char* type) ++{ ++ int res = 0, idx = 0; ++ ++ if (type) { ++ if (strlen(type) > SMACK_ACCESS_TYPE_LENGHT) { ++ rpmlog(RPMLOG_ERR, "Lenght of the access type is bigger than allowed value: %s\n", type); ++ return -1; ++ } ++ while ( type[idx] != '\0' ){ ++ if ((type[idx] !='a') && (type[idx]!='r') && (type[idx]!='w') && ++ (type[idx]!='x') && (type[idx]!='t') && (type[idx] !='-')) { ++ rpmlog(RPMLOG_ERR, "Not allowed character in access type: %s\n", type); ++ res = -1; ++ break; ++ } ++ idx++; ++ } ++ } else return -1; ++ return res; ++} ++ ++static int msmVerifySmackLabel(const char* label) ++{ ++ int res = 0, idx = 0; ++ ++ if (label) { ++ if (strlen(ASCII(label)) > SMACK_LABEL_LENGTH) { //smack limitation on lenght ++ rpmlog(RPMLOG_ERR, "Domain or label name %s lenght is longer than defined SMACK_LABEL_LENGTH\n", label); ++ return -1; ++ } ++ if (strlen(ASCII(label)) == 0){ ++ rpmlog(RPMLOG_ERR, "An attempt to define an empty domain or label name\n"); ++ return -1; ++ } ++ if (label[0] == '-') { ++ rpmlog(RPMLOG_ERR, "Dash is not allowed as first character in smack label: %s\n", label); ++ return -1; ++ } ++ while ( label[idx] != '\0' ){ ++ if ((label[idx] =='\"') || (label[idx] =='\'') || (label[idx] =='/') || ++ (label[idx] =='\\') || (label[idx] > '~') || (label[idx] <= ' ')) { ++ rpmlog(RPMLOG_ERR, "Not allowed character in smack label: %s, position: %d \n", label, idx); ++ res = -1; ++ break; ++ } ++ idx++; ++ } ++ } else return -1; ++ ++ return res; ++} ++ ++static int msmVerifyLabelPrefix(const char* sub_label, const char* domain_name) ++{ ++ char *tmp = NULL; ++ char sep[]= "::"; ++ ++ tmp = calloc(strlen(domain_name) + 3, sizeof (const char)); ++ if (!tmp) ++ return -1; ++ ++ strncpy(tmp, domain_name, strlen(domain_name)); ++ strncpy(tmp + strlen(domain_name), sep, 2); ++ ++ if (strstr(ASCII(sub_label), tmp) != ASCII(sub_label)) { //sub label name should be prefixed by domain name and "::" ++ rpmlog(RPMLOG_ERR, "Label name %s isn't prefixed by domain name %s\n", ASCII(sub_label), domain_name); ++ msmFreePointer((void**)&tmp); ++ return -1; ++ } ++ ++ msmFreePointer((void**)&tmp); ++ return 0; ++ ++} ++ ++static int msmNextChildElement(xmlTextReaderPtr reader, int depth) ++{ ++ int ret = xmlTextReaderRead(reader); ++ int cur = xmlTextReaderDepth(reader); ++ while (ret == 1) { ++ /* ++ rpmlog(RPMLOG_DEBUG, "node %s %d\n", ++ ASCII(xmlTextReaderConstName(reader)), ++ xmlTextReaderDepth(reader)); ++ */ ++ switch (xmlTextReaderNodeType(reader)) { ++ case XML_READER_TYPE_ELEMENT: ++ case XML_READER_TYPE_TEXT: ++ if (cur == depth+1) ++ return 1; ++ break; ++ case XML_READER_TYPE_END_ELEMENT: ++ if (cur == depth) ++ return 0; ++ break; ++ default: ++ if (cur <= depth) ++ return 0; ++ break; ++ } ++ ret = xmlTextReaderRead(reader); ++ cur = xmlTextReaderDepth(reader); ++ } ++ return ret; ++} ++ ++static ac_domain_x *msmFreeACDomain(ac_domain_x *ac_domain) ++{ ++ if (ac_domain) { ++ ac_domain_x *prev = ac_domain->prev; ++ msmFreePointer((void**)&ac_domain->name); ++ msmFreePointer((void**)&ac_domain->type); ++ msmFreePointer((void**)&ac_domain->match); ++ msmFreePointer((void**)&ac_domain->plist); ++ msmFreePointer((void**)&ac_domain); ++ return prev; ++ } else return NULL; ++} ++ ++static annotation_x *msmProcessAnnotation(xmlTextReaderPtr reader) ++{ ++ const xmlChar *name, *value; ++ ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ value = xmlTextReaderGetAttribute(reader, XMLCHAR("value")); ++ rpmlog(RPMLOG_DEBUG, "annotation %s %s\n", ASCII(name), ASCII(value)); ++ ++ if (name && value) { ++ annotation_x *annotation = calloc(1, sizeof(annotation_x)); ++ if (annotation) { ++ annotation->name = ASCII(name); ++ annotation->value = ASCII(value); ++ return annotation; ++ } ++ } ++ msmFreePointer((void**)&name); ++ msmFreePointer((void**)&value); ++ return NULL; ++} ++ ++static int msmProcessMember(xmlTextReaderPtr reader, member_x *member) ++{ ++ const xmlChar *node, *name; ++ int ret, depth; ++ ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ rpmlog(RPMLOG_DEBUG, "member %s\n", ASCII(name)); ++ member->name = ASCII(name); ++ ++ if (!name) return -1; ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "annotation")) { ++ annotation_x *annotation = msmProcessAnnotation(reader); ++ if (annotation) { ++ member->annotation = annotation; ++ } else return -1; ++ } else return -1; ++ ++ if (ret < 0) return -1; ++ } ++ return ret; ++} ++ ++static int msmProcessInterface(xmlTextReaderPtr reader, interface_x *interface) ++{ ++ const xmlChar *node, *name; ++ int ret, depth; ++ ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ rpmlog(RPMLOG_DEBUG, "interface %s\n", ASCII(name)); ++ interface->name = ASCII(name); ++ ++ if (!name) return -1; ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "method")) { ++ member_x *member = calloc(1, sizeof(member_x)); ++ if (member) { ++ member->type = DBUS_METHOD; ++ ret = msmProcessMember(reader, member); ++ LISTADD(interface->members, member); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "signal")) { ++ member_x *member = calloc(1, sizeof(member_x)); ++ if (member) { ++ member->type = DBUS_SIGNAL; ++ ret = msmProcessMember(reader, member); ++ LISTADD(interface->members, member); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "annotation")) { ++ annotation_x *annotation = msmProcessAnnotation(reader); ++ if (annotation) { ++ interface->annotation = annotation; ++ } else return -1; ++ } else return -1; ++ ++ if (ret < 0) return -1; ++ } ++ return ret; ++} ++ ++static int msmProcessNode(xmlTextReaderPtr reader, node_x *nodex) ++{ ++ const xmlChar *node, *name; ++ int ret, depth; ++ ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ rpmlog(RPMLOG_DEBUG, "node %s\n", ASCII(name)); ++ nodex->name = ASCII(name); ++ ++ if (!name) return -1; ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "interface")) { ++ interface_x *interface = calloc(1, sizeof(interface_x)); ++ if (interface) { ++ ret = msmProcessInterface(reader, interface); ++ LISTADD(nodex->interfaces, interface); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "method")) { ++ member_x *member = calloc(1, sizeof(member_x)); ++ if (member) { ++ member->type = DBUS_METHOD; ++ ret = msmProcessMember(reader, member); ++ LISTADD(nodex->members, member); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "signal")) { ++ member_x *member = calloc(1, sizeof(member_x)); ++ if (member) { ++ member->type = DBUS_SIGNAL; ++ ret = msmProcessMember(reader, member); ++ LISTADD(nodex->members, member); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "annotation")) { ++ annotation_x *annotation = msmProcessAnnotation(reader); ++ if (annotation) { ++ nodex->annotation = annotation; ++ } else return -1; ++ } else return -1; ++ ++ if (ret < 0) return -1; ++ } ++ return ret; ++} ++ ++static int msmProcessDBus(xmlTextReaderPtr reader, dbus_x *dbus) ++{ ++ const xmlChar *node, *name, *own, *bus; ++ int ret, depth; ++ ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ own = xmlTextReaderGetAttribute(reader, XMLCHAR("own")); ++ bus = xmlTextReaderGetAttribute(reader, XMLCHAR("bus")); ++ rpmlog(RPMLOG_DEBUG, "dbus %s %s %s\n", ASCII(name), ASCII(own), ASCII(bus)); ++ dbus->name = ASCII(name); ++ dbus->own = ASCII(own); ++ dbus->bus = ASCII(bus); ++ ++ if (!name || !bus) return -1; ++ if (strcmp(dbus->bus, "session") && strcmp(dbus->bus, "system")) ++ return -1; ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "node")) { ++ node_x *nodex = calloc(1, sizeof(node_x)); ++ if (nodex) { ++ ret = msmProcessNode(reader, nodex); ++ LISTADD(dbus->nodes, nodex); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "annotation")) { ++ annotation_x *annotation = msmProcessAnnotation(reader); ++ if (annotation) { ++ dbus->annotation = annotation; ++ } else return -1; ++ } else return -1; ++ ++ if (ret < 0) return -1; ++ } ++ return ret; ++} ++ ++static ac_domain_x *msmProcessACDomain(xmlTextReaderPtr reader, sw_source_x *sw_source, const char* pkg_name) ++{ ++ const xmlChar *name, *match, *policy, *plist; ++ ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ match = xmlTextReaderGetAttribute(reader, XMLCHAR("match")); ++ policy = xmlTextReaderGetAttribute(reader, XMLCHAR("policy")); ++ plist = xmlTextReaderGetAttribute(reader, XMLCHAR("plist")); ++ rpmlog(RPMLOG_DEBUG, "ac_domain %s match %s policy %s plist %s\n", ASCII(name), ASCII(match), ASCII(policy), ASCII(plist)); ++ ++ if (!((!name && !match) || (name && match))) { ++ ac_domain_x *ac_domain = calloc(1, sizeof(ac_domain_x)); ++ if (ac_domain) { ++ ac_domain->name = ASCII(name); ++ ac_domain->match = ASCII(match); ++ ac_domain->type = ASCII(policy); ++ ac_domain->plist = ASCII(plist); ++ ac_domain->sw_source = sw_source; ++ ac_domain->pkg_name = pkg_name; ++ return ac_domain; ++ } ++ } ++ rpmlog(RPMLOG_ERR, "Mandatory argument is missing for ac domain definition\n"); ++ rpmlog(RPMLOG_ERR, "ac_domain %s match %s policy %s plist %s\n", ASCII(name), ASCII(match), ASCII(policy), ASCII(plist)); ++ msmFreePointer((void**)&name); ++ msmFreePointer((void**)&match); ++ msmFreePointer((void**)&policy); ++ msmFreePointer((void**)&plist); ++ return NULL; ++} ++ ++static filesystem_x *msmProcessFilesystem(xmlTextReaderPtr reader) ++{ ++ const xmlChar *path, *label, *type, *exec_label; ++ ++ path = xmlTextReaderGetAttribute(reader, XMLCHAR("path")); ++ label = xmlTextReaderGetAttribute(reader, XMLCHAR("label")); ++ exec_label = xmlTextReaderGetAttribute(reader, XMLCHAR("exec_label")); ++ type = xmlTextReaderGetAttribute(reader, XMLCHAR("type")); ++ ++ rpmlog(RPMLOG_DEBUG, "filesystem path %s label %s exec label %s type %s\n", ++ ASCII(path), ASCII(label), ASCII(exec_label), ASCII(type)); ++ ++ if (path && (label || exec_label)) { ++ if ((label) && (msmVerifySmackLabel(ASCII(label)) < 0)) { ++ goto fail; ++ } ++ if ((exec_label) && (msmVerifySmackLabel(ASCII(exec_label)) < 0)) { ++ goto fail; ++ } ++ ++ filesystem_x *filesystem = calloc(1, sizeof(filesystem_x)); ++ if (filesystem) { ++ filesystem->path = ASCII(path); ++ filesystem->label = ASCII(label); ++ filesystem->exec_label = ASCII(exec_label); ++ filesystem->type = ASCII(type); ++ return filesystem; ++ } ++ ++ } else { ++ rpmlog(RPMLOG_ERR, "Mandatory argument is missing for filesystem assign request\n"); ++ rpmlog(RPMLOG_ERR, "filesystem path %s label %s exec label %s\n", ++ ASCII(path), ASCII(label), ASCII(exec_label)); ++ } ++ ++fail: ++ msmFreePointer((void**)&path); ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&exec_label); ++ msmFreePointer((void**)&type); ++ return NULL; ++} ++ ++static int msmProcessProvide(xmlTextReaderPtr reader, provide_x *provide, sw_source_x *current, manifest_x *mfx, const char* pkg_name) ++{ ++ const xmlChar *node, *name, *origin; ++ int ret, depth; ++ ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ rpmlog(RPMLOG_DEBUG, "assign %s\n", ASCII(name)); ++ provide->name = ASCII(name); ++ ++ if (provide->name && ++ (strcmp(provide->name, "_system_") || mfx->sw_source->parent)) ++ return -1; /* only _system_ is accepted from root sw source */ ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "dbus")) { ++ dbus_x *dbus = calloc(1, sizeof(dbus_x)); ++ if (dbus) { ++ ret = msmProcessDBus(reader, dbus); ++ LISTADD(provide->dbuss, dbus); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "ac_domain")) { ++ ac_domain_x *ac_domain = msmProcessACDomain(reader, current, pkg_name); ++ if (ac_domain) { ++ const char *name = ac_domain->name; ++ LISTADD(provide->ac_domains, ac_domain); ++ if (!name) return -1; ++ if (mfx && !provide->name) { ++ ac_domain->name = malloc(strlen(mfx->name) + 2 + ++ strlen(name) + 1); ++ sprintf((char *)ac_domain->name, "%s::%s", mfx->name, name); ++ msmFreePointer((void**)&name); ++ } ++ } else return -1; ++ ++ } else if (!strcmp(ASCII(node), "for")) { ++ origin = xmlTextReaderGetAttribute(reader, XMLCHAR("origin")); ++ rpmlog(RPMLOG_DEBUG, "for %s\n", ASCII(origin)); ++ if (!origin) return -1; ++ if (provide->origin) { ++ msmFreePointer((void**)&origin); ++ return -1; ++ } ++ provide->origin = ASCII(origin); ++ if (strcmp(ASCII(origin), "trusted") && ++ strcmp(ASCII(origin), "current") && ++ strcmp(ASCII(origin), "all")) ++ return -1; ++ ++ } else if (!strcmp(ASCII(node), "filesystem")) { ++ filesystem_x *filesystem = msmProcessFilesystem(reader); ++ if (filesystem) { ++ LISTADD(provide->filesystems, filesystem); ++ } else return -1; ++ ++ } else { ++ rpmlog(RPMLOG_ERR, "No allowed element in assign section: %s\n", ASCII(node)); ++ return -1; ++ } ++ ++ if (ret < 0) return ret; ++ } ++ ++ return ret; ++} ++ ++static int msmProcessPackage(xmlTextReaderPtr reader, package_x *package, sw_source_x *current) ++{ ++ const xmlChar *node, *name, *modified; ++ int ret, depth; ++ ++ /* config processing */ ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ modified = xmlTextReaderGetAttribute(reader, XMLCHAR("modified")); ++ rpmlog(RPMLOG_DEBUG, "package %s %s\n", name, modified); ++ ++ package->name = ASCII(name); ++ package->modified = ASCII(modified); ++ package->sw_source = current; ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "provide")) { ++ provide_x *provide = calloc(1, sizeof(provide_x)); ++ if (provide) { ++ LISTADD(package->provides, provide); ++ ret = msmProcessProvide(reader, provide, current, NULL, package->name); ++ } else return -1; ++ } else return -1; ++ ++ if (ret < 0) return ret; ++ } ++ return ret; ++} ++ ++static int msmProcessRequest(xmlTextReaderPtr reader, request_x *request) ++{ ++ const xmlChar *node, *name; ++ int ret, depth, requestPresent = 0; ++ ++ rpmlog(RPMLOG_DEBUG, "request \n"); ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "domain")) { ++ if (requestPresent) { ++ rpmlog(RPMLOG_ERR, "A second domain defined inside a request section. Abort package installation\n"); ++ return -1; ++ } ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ rpmlog(RPMLOG_DEBUG, "ac domain name %s\n", ASCII(name)); ++ if (name) { ++ request->ac_domain = ASCII(name); ++ requestPresent = 1; ++ } else { ++ rpmlog(RPMLOG_ERR, "No ac domain name defined in request.\n"); ++ return -1; ++ } ++ } else { ++ rpmlog(RPMLOG_ERR, "Not allowed element in request section: %s\n", ASCII(node)); ++ return -1; ++ } ++ } ++ ++ return ret; ++} ++ ++static int msmProcessDRequest(xmlTextReaderPtr reader, define_x *define) ++{ ++ const xmlChar *node = NULL, *label = NULL, *type = NULL; ++ int ret, depth; ++ ++ rpmlog(RPMLOG_DEBUG, "request\n"); ++ ++ if (!define->name) { ++ rpmlog(RPMLOG_ERR, "An attempt to define a domain without a name. Abort.\n"); ++ return -1; ++ } ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "smack")) { ++ label = xmlTextReaderGetAttribute(reader, XMLCHAR("request")); ++ type = xmlTextReaderGetAttribute(reader, XMLCHAR("type")); ++ rpmlog(RPMLOG_DEBUG, "request label %s type %s\n", ASCII(label), ASCII(type)); ++ if (label && type) { ++ if (msmVerifyAccessType(ASCII(type)) < 0) { ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&type); ++ return -1; ++ } ++ if (msmVerifySmackLabel(ASCII(label)) < 0) { ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&type); ++ return -1; ++ } ++ d_request_x *request = calloc(1, sizeof(d_request_x)); ++ if (request) { ++ request->label_name = ASCII(label); ++ request->ac_type = ASCII(type); ++ LISTADD(define->d_requests, request); ++ } else { ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&type); ++ return -1; ++ } ++ ++ } else { ++ rpmlog(RPMLOG_ERR, "One of the mandatory arguments for domain request is missing. Abort installation\n"); ++ rpmlog(RPMLOG_ERR, "smack request label %s type %s\n", ASCII(label), ASCII(type)); ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&type); ++ return -1; ++ } ++ } else { ++ rpmlog(RPMLOG_ERR, "Not allowed element in domain request section: %s\n", ASCII(node)); ++ return -1; ++ } ++ if (ret < 0) return ret; ++ } ++ ++ return ret; ++} ++ ++static int msmProcessDPermit(xmlTextReaderPtr reader, define_x *define) ++{ ++ const xmlChar *node, *label, *type, *to_label; ++ int ret, depth; ++ ++ rpmlog(RPMLOG_DEBUG, "permit\n"); ++ ++ if (!define->name) { ++ rpmlog(RPMLOG_ERR, "An attempt to define a domain without a name. Abort.\n"); ++ return -1; ++ } ++ ++ depth = xmlTextReaderDepth(reader); ++ ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "smack")) { ++ label = xmlTextReaderGetAttribute(reader, XMLCHAR("permit")); ++ to_label = xmlTextReaderGetAttribute(reader, XMLCHAR("to")); ++ type = xmlTextReaderGetAttribute(reader, XMLCHAR("type")); ++ rpmlog(RPMLOG_DEBUG, "permit %s to %s type %s\n", ASCII(label), ASCII(to_label), ASCII(type)); ++ ++ if (label && type) { ++ if (msmVerifyAccessType(ASCII(type)) < 0) { ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&to_label); ++ msmFreePointer((void**)&type); ++ return -1; ++ } ++ if (msmVerifySmackLabel(ASCII(label)) < 0) { ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&to_label); ++ msmFreePointer((void**)&type); ++ return -1; ++ } ++ if ((to_label) && (msmVerifyLabelPrefix(ASCII(to_label), define->name) < 0)) { ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&to_label); ++ msmFreePointer((void**)&type); ++ return -1; ++ } ++ d_permit_x *permit = calloc(1, sizeof(d_permit_x)); ++ if (permit) { ++ permit->label_name = ASCII(label); ++ permit->to_label_name = ASCII(to_label); ++ permit->ac_type = ASCII(type); ++ LISTADD(define->d_permits, permit); ++ } else { ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&to_label); ++ msmFreePointer((void**)&type); ++ return -1; ++ } ++ ++ } else { ++ rpmlog(RPMLOG_ERR, "One of the mandatory arguments for domain permit is missing. Abort installation\n"); ++ rpmlog(RPMLOG_ERR, "smack permit label %s type %s\n", ASCII(label), ASCII(type)); ++ msmFreePointer((void**)&label); ++ msmFreePointer((void**)&to_label); ++ msmFreePointer((void**)&type); ++ return -1; ++ } ++ } else { ++ rpmlog(RPMLOG_ERR, "Not allowed element in domain permit section: %s\n", ASCII(node)); ++ return -1; ++ } ++ if (ret < 0) return ret; ++ } ++ ++ return ret; ++} ++ ++static int msmProcessDProvide(xmlTextReaderPtr reader, define_x *define) ++{ ++ const xmlChar *node, *label; ++ int ret = 0, depth; ++ ++ rpmlog(RPMLOG_DEBUG, "provide\n"); ++ ++ if (!define->name) { ++ rpmlog(RPMLOG_ERR, "An attempt to define a domain without a name. Abort.\n"); ++ return -1; ++ } ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "label")) { ++ label = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ rpmlog(RPMLOG_DEBUG, "label %s \n", ASCII(label)); ++ ++ if (label) { ++ if (msmVerifySmackLabel(ASCII(label)) < 0) { ++ msmFreePointer((void**)&label); ++ return -1; ++ } ++ ++ if (msmVerifyLabelPrefix(ASCII(label), define->name) < 0) { ++ msmFreePointer((void**)&label); ++ return -1; ++ } ++ ++ d_provide_x *provide = calloc(1, sizeof(d_provide_x)); ++ if (provide) { ++ provide->label_name = ASCII(label); ++ LISTADD(define->d_provides, provide); ++ } else { ++ msmFreePointer((void**)&label); ++ return -1; ++ } ++ ++ } else { ++ rpmlog(RPMLOG_INFO, "Label name is empty. Label provide is ignored\n"); ++ continue; ++ } ++ } else { ++ rpmlog(RPMLOG_ERR, "Not allowed element in domain provide section: %s\n", ASCII(node)); ++ return -1; ++ } ++ if (ret < 0) return ret; ++ } ++ ++ return ret; ++} ++ ++static int msmProcessDefine(xmlTextReaderPtr reader, define_x *define, manifest_x *mfx, sw_source_x *current) ++{ ++ const xmlChar *node, *name, *policy, *plist; ++ int ret, depth, domainPresent = 0; ++ ++ rpmlog(RPMLOG_DEBUG, "define\n"); ++ ++ depth = xmlTextReaderDepth(reader); ++ ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "domain")) { ++ if (domainPresent) { ++ rpmlog(RPMLOG_ERR, "Only one domain is allowed per define section. Abort installation\n"); ++ return -1; ++ } ++ domainPresent = 1; ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ policy = xmlTextReaderGetAttribute(reader, XMLCHAR("policy")); ++ plist = xmlTextReaderGetAttribute(reader, XMLCHAR("plist")); ++ rpmlog(RPMLOG_DEBUG, "domain %s policy %s plist %s\n", ++ ASCII(name), ASCII(policy), ASCII(plist)); ++ ++ if (name) { ++ ++ if (msmVerifySmackLabel(ASCII(name)) < 0){ ++ msmFreePointer((void**)&name); ++ msmFreePointer((void**)&policy); ++ msmFreePointer((void**)&plist); ++ return -1; ++ } ++ ++ define->name = ASCII(name); ++ define->policy = ASCII(policy); ++ define->plist = ASCII(plist); ++ ++ // store defined ac domain name ++ ac_domain_x *ac_domain = calloc(1, sizeof(ac_domain_x)); ++ if (ac_domain) { ++ if (define->name) { ++ ac_domain->name = strdup(define->name); ++ } ++ ac_domain->match = strdup("trusted"); // hardcode trusted policy for ac domain definition ++ if (define->policy) { ++ ac_domain->type = strdup(define->policy); ++ } ++ if (define->plist) { ++ ac_domain->plist = strdup(define->plist); ++ } ++ ac_domain->sw_source = current; ++ ac_domain->pkg_name = mfx->name; ++ if (!mfx->provides){ ++ provide_x *provide = calloc(1, sizeof(provide_x)); ++ if (provide) { ++ LISTADD(mfx->provides, provide); ++ } else { ++ if (ac_domain) { ++ msmFreeACDomain(ac_domain); ++ return -1; ++ } ++ } ++ } ++ LISTADD(mfx->provides->ac_domains, ac_domain); ++ } else return -1; ++ ++ } else { ++ rpmlog(RPMLOG_ERR, "Domain name must be defined. Abort installation\n"); ++ msmFreePointer((void**)&policy); ++ msmFreePointer((void**)&plist); ++ return -1; ++ } ++ } else if (!strcmp(ASCII(node), "request")) { ++ int res = msmProcessDRequest(reader, define); ++ if (res < 0) return res; ++ ++ } else if (!strcmp(ASCII(node), "permit")) { ++ int res = msmProcessDPermit(reader, define); ++ if (res < 0) return res; ++ ++ } else if (!strcmp(ASCII(node), "provide")) { ++ int res = msmProcessDProvide(reader, define); ++ if (res < 0) return res; ++ } else { ++ rpmlog(RPMLOG_ERR, "Not allowed element in domain define section: %s\n", ASCII(node)); ++ return -1; ++ } ++ ++ if (ret < 0) return ret; ++ } ++ return ret; ++} ++ ++static int msmProcessKeyinfo(xmlTextReaderPtr reader, origin_x *origin) ++{ ++ const xmlChar *keydata; ++ keyinfo_x *keyinfo; ++ int ret, depth; ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ keydata = xmlTextReaderConstValue(reader); ++ rpmlog(RPMLOG_DEBUG, "keyinfo %.40s...\n", ASCII(keydata)); ++ if (!keydata) return -1; ++ keyinfo = calloc(1, sizeof(keyinfo_x)); ++ if (keyinfo) { ++ if ((ret = b64decode(ASCII(keydata), (void **)&keyinfo->keydata, &keyinfo->keylen))) { ++ rpmlog(RPMLOG_ERR, "Failed to decode keyinfo %s, %d\n", keydata, ret); ++ ret = -1; ++ } ++ LISTADD(origin->keyinfos, keyinfo); ++ } else return -1; ++ ++ if (ret < 0) return ret; ++ } ++ return ret; ++} ++ ++static access_x *msmProcessAccess(xmlTextReaderPtr reader, origin_x *origin) ++{ ++ const xmlChar *data, *type; ++ ++ data = xmlTextReaderGetAttribute(reader, XMLCHAR("data")); ++ type = xmlTextReaderGetAttribute(reader, XMLCHAR("type")); ++ rpmlog(RPMLOG_DEBUG, "access %s %s\n", ASCII(data), ASCII(type)); ++ ++ if (data) { ++ access_x *access = calloc(1, sizeof(access_x)); ++ if (access) { ++ access->data = ASCII(data); ++ access->type = ASCII(type); ++ return access; ++ } ++ } ++ msmFreePointer((void**)&data); ++ msmFreePointer((void**)&type); ++ return NULL; ++} ++ ++static int msmProcessOrigin(xmlTextReaderPtr reader, origin_x *origin) ++{ ++ const xmlChar *node, *type; ++ int ret, depth; ++ ++ type = xmlTextReaderGetAttribute(reader, XMLCHAR("type")); ++ rpmlog(RPMLOG_DEBUG, "origin %s\n", ASCII(type)); ++ origin->type = ASCII(type); ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "keyinfo")) { ++ ret = msmProcessKeyinfo(reader, origin); ++ } else if (!strcmp(ASCII(node), "access")) { ++ access_x *access = msmProcessAccess(reader, origin); ++ if (access) { ++ LISTADD(origin->accesses, access); ++ } else return -1; ++ } else return -1; ++ ++ if (ret < 0) return ret; ++ } ++ return ret; ++} ++ ++static int msmProcessDeny(xmlTextReaderPtr reader, sw_source_x *sw_source) ++{ ++ const xmlChar *node; ++ int ret, depth; ++ ++ rpmlog(RPMLOG_DEBUG, "deny\n"); ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "ac_domain")) { ++ ac_domain_x *ac_domain = msmProcessACDomain(reader, sw_source, NULL); ++ if (ac_domain) { ++ if (ac_domain->name) { ++ HASH_ADD_KEYPTR(hh, sw_source->denys, ac_domain->name, ++ strlen(ac_domain->name), ac_domain); ++ } else { ++ LISTADD(sw_source->denymatches, ac_domain); ++ } ++ } else return -1; ++ } else return -1; ++ if (ret < 0) return ret; ++ } ++ return ret; ++} ++ ++static int msmProcessAllow(xmlTextReaderPtr reader, sw_source_x *sw_source) ++{ ++ const xmlChar *node; ++ int ret, depth; ++ ++ rpmlog(RPMLOG_DEBUG, "allow\n"); ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "deny")) { ++ ret = msmProcessDeny(reader, sw_source); ++ } else if (!strcmp(ASCII(node), "ac_domain")) { ++ ac_domain_x *ac_domain = msmProcessACDomain(reader, sw_source, NULL); ++ if (ac_domain) { ++ if (ac_domain->name) { ++ HASH_ADD_KEYPTR(hh, sw_source->allows, ac_domain->name, ++ strlen(ac_domain->name), ac_domain); ++ } else { ++ LISTADD(sw_source->allowmatches, ac_domain); ++ } ++ } else return -1; ++ } else return -1; ++ if (ret < 0) return ret; ++ } ++ return ret; ++} ++ ++static int msmFindSWSourceByName(sw_source_x *sw_source, void *param) ++{ ++ const char *name = (const char *)param; ++ return strcmp(sw_source->name, name); ++} ++ ++static int msmProcessSWSource(xmlTextReaderPtr reader, sw_source_x *sw_source, const char *parentkey, manifest_x *mfx) ++{ ++ const xmlChar *name, *node, *rank, *rankkey; ++ sw_source_x *current; ++ int ret, depth, len; ++ int rankval = 0; ++ ++ /* config processing */ ++ current = sw_source; ++ ++ name = xmlTextReaderGetAttribute(reader, XMLCHAR("name")); ++ rank = xmlTextReaderGetAttribute(reader, XMLCHAR("rank")); ++ rankkey = xmlTextReaderGetAttribute(reader, XMLCHAR("rankkey")); ++ rpmlog(RPMLOG_DEBUG, "sw source %s rank %s key %s\n", ++ ASCII(name), ASCII(rank), ASCII(rankkey)); ++ ++ sw_source->name = ASCII(name); ++ ++ if (rankkey) { ++ /* config processing */ ++ sw_source->rankkey = ASCII(rankkey); ++ } else { ++ if (rank) { ++ rankval = atoi(ASCII(rank)); ++ msmFreePointer((void**)&rank); /* rankkey is used from now on */ ++ } ++ } ++ if (!sw_source->name) return -1; /* sw source must have name */ ++ if (!mfx && rankkey) return -1; /* manifest cannot set rankkey itself */ ++ ++ if (!mfx) { ++ sw_source_x *old = msmSWSourceTreeTraversal(sw_source->parent, msmFindSWSourceByName, (void *)sw_source->name); ++ if (old && old->parent != sw_source->parent) { ++ if (!old->parent && old == sw_source->parent) { ++ /* root sw source upgrade (it's signed by root) */ ++ parentkey = ""; ++ } else { ++ rpmlog(RPMLOG_ERR, "SW source called %s has already been installed\n", ++ sw_source->name); ++ return -1; /* sw_source names are unique (allow upgrade though) */ ++ } ++ } ++ /* rank algorithm is copied from harmattan dpkg wrapper */ ++ if (rankval > RANK_LIMIT) rankval = RANK_LIMIT; ++ if (rankval < -RANK_LIMIT) rankval = -RANK_LIMIT; ++ rankval += RANK_LIMIT; ++ ++ len = strlen(parentkey) + 1 + 5 + 1 + 5 + 1 + strlen(sw_source->name) + 1; ++ if (!(sw_source->rankkey = malloc(len))) return -1; ++ sprintf((char *)sw_source->rankkey, "%s/%05d/%05d.%s", ++ parentkey, rankval, RANK_LIMIT, sw_source->name); ++ } ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "allow")) { ++ ret = msmProcessAllow(reader, sw_source); ++ } else if (!strcmp(ASCII(node), "deny")) { ++ ret = msmProcessDeny(reader, sw_source); ++ } else if (!strcmp(ASCII(node), "origin")) { ++ origin_x *origin = calloc(1, sizeof(origin_x)); ++ if (origin) { ++ LISTADD(sw_source->origins, origin); ++ ret = msmProcessOrigin(reader, origin); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "package")) { ++ /* config processing */ ++ if (!mfx) return -1; ++ package_x *package = calloc(1, sizeof(package_x)); ++ if (package) { ++ LISTADD(sw_source->packages, package); ++ ret = msmProcessPackage(reader, package, current); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "sw_source")) { ++ /* config processing */ ++ if (!mfx) return -1; ++ sw_source_x *sw_source = calloc(1, sizeof(sw_source_x)); ++ if (sw_source) { ++ sw_source->parent = current; ++ LISTADD(mfx->sw_sources, sw_source); ++ } else return -1; ++ ret = msmProcessSWSource(reader, sw_source, "", mfx); ++ } else return -1; ++ ++ if (ret < 0) return ret; ++ } ++ return ret; ++} ++ ++static int msmProcessMsm(xmlTextReaderPtr reader, manifest_x *mfx, sw_source_x *current) ++{ ++ const xmlChar *node; ++ int ret, depth; ++ int assignPresent = 0, requestPresent = 0, definePresent = 0; /* there must be only one section per manifest */ ++ mfx->sw_source = current; ++ ++ rpmlog(RPMLOG_DEBUG, "manifest\n"); ++ ++ depth = xmlTextReaderDepth(reader); ++ while ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "assign")) { ++ if (assignPresent) { ++ rpmlog(RPMLOG_ERR, "A second assign section in manifest isn't allowed. Abort installation.\n"); ++ return -1; ++ } ++ assignPresent = 1; ++ provide_x *provide = calloc(1, sizeof(provide_x)); ++ if (provide) { ++ LISTADD(mfx->provides, provide); ++ ret = msmProcessProvide(reader, provide, current, mfx, NULL); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "define")) { ++ if (definePresent) { ++ rpmlog(RPMLOG_ERR, "A second request section in manifest isn't allowed. Abort installation.\n"); ++ return -1; ++ } ++ definePresent = 1; ++ mfx->define = calloc(1, sizeof(define_x)); ++ if (mfx->define) { ++ ret = msmProcessDefine(reader, mfx->define, mfx, current); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "request")) { ++ if (requestPresent) { ++ rpmlog(RPMLOG_ERR, "A second request section in manifest isn't allowed. Abort installation.\n"); ++ return -1; ++ } ++ requestPresent = 1; ++ mfx->request = calloc(1, sizeof(request_x)); ++ if (mfx->request) { ++ ret = msmProcessRequest(reader, mfx->request); ++ } else return -1; ++ } else if (!strcmp(ASCII(node), "sw_source")) { ++ sw_source_x *sw_source = calloc(1, sizeof(sw_source_x)); ++ if (sw_source) { ++ char parentkey[256] = { 0 }; ++ sw_source->parent = current; ++ if (sw_source->parent) { ++ snprintf(parentkey, sizeof(parentkey), ++ "%s", sw_source->parent->rankkey); ++ char *sep = strrchr(parentkey, '/'); ++ if (sep) *sep = '\0'; ++ } ++ LISTADD(mfx->sw_sources, sw_source); ++ ret = msmProcessSWSource(reader, sw_source, parentkey, NULL); ++ } else return -1; ++ } else return -1; ++ ++ if (ret < 0) return ret; ++ } ++ ++ return ret; ++} ++ ++static int msmProcessConfig(xmlTextReaderPtr reader, manifest_x *mfx) ++{ ++ const xmlChar *node; ++ int ret, depth; ++ ++ rpmlog(RPMLOG_DEBUG, "config\n"); ++ ++ depth = xmlTextReaderDepth(reader); ++ if ((ret = msmNextChildElement(reader, depth))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "sw_source")) { ++ mfx->sw_sources = calloc(1, sizeof(sw_source_x)); ++ if (!mfx->sw_sources) return -1; ++ ret = msmProcessSWSource(reader, mfx->sw_sources, "", mfx); ++ } else return -1; ++ } ++ return ret; ++} ++ ++static int msmProcessManifest(xmlTextReaderPtr reader, manifest_x *mfx, sw_source_x *current) ++{ ++ const xmlChar *node; ++ int ret; ++ ++ if ((ret = msmNextChildElement(reader, -1))) { ++ node = xmlTextReaderConstName(reader); ++ if (!node) return -1; ++ ++ if (!strcmp(ASCII(node), "manifest")) { ++ ret = msmProcessMsm(reader, mfx, current); ++ } else if (!strcmp(ASCII(node), "config")) { ++ ret = msmProcessConfig(reader, mfx); ++ } else return -1; ++ } ++ return ret; ++} ++ ++static filesystem_x *msmFreeFilesystem(filesystem_x *filesystem) ++{ ++ if (filesystem) { ++ filesystem_x *prev = filesystem->prev; ++ msmFreePointer((void**)&filesystem->path); ++ msmFreePointer((void**)&filesystem->label); ++ msmFreePointer((void**)&filesystem->exec_label); ++ msmFreePointer((void**)&filesystem->type); ++ msmFreePointer((void**)&filesystem); ++ return prev; ++ } else ++ return NULL; ++ ++} ++ ++static member_x *msmFreeMember(member_x *member) ++{ ++ ++ if (member) { ++ member_x *prev = member->prev; ++ msmFreePointer((void**)&member->name); ++ if (member->annotation) { ++ msmFreePointer((void**)&member->annotation->name); ++ msmFreePointer((void**)&member->annotation->value); ++ msmFreePointer((void**)&member->annotation); ++ } ++ msmFreePointer((void**)&member); ++ return prev; ++ } else ++ return NULL; ++ ++} ++ ++static interface_x *msmFreeInterface(interface_x *interface) ++{ ++ ++ member_x *member; ++ ++ if (interface) { ++ interface_x *prev = interface->prev; ++ msmFreePointer((void**)&interface->name); ++ if (interface->annotation) { ++ msmFreePointer((void**)&interface->annotation->name); ++ msmFreePointer((void**)&interface->annotation->value); ++ msmFreePointer((void**)&interface->annotation); ++ } ++ for (member = interface->members; member; member = msmFreeMember(member)); ++ msmFreePointer((void**)&interface); ++ return prev; ++ } else ++ return NULL; ++ ++} ++ ++static node_x *msmFreeNode(node_x *node) ++{ ++ member_x *member; ++ interface_x *interface; ++ ++ if (node) { ++ node_x *prev = node->prev; ++ msmFreePointer((void**)&node->name); ++ if (node->annotation) { ++ msmFreePointer((void**)&node->annotation->name); ++ msmFreePointer((void**)&node->annotation->value); ++ msmFreePointer((void**)&node->annotation); ++ } ++ for (member = node->members; member; member = msmFreeMember(member)); ++ for (interface = node->interfaces; interface; interface = msmFreeInterface(interface)); ++ msmFreePointer((void**)&node); ++ return prev; ++ } else ++ return NULL; ++ ++} ++ ++static dbus_x *msmFreeDBus(dbus_x *dbus) ++{ ++ node_x *node; ++ ++ if (dbus) { ++ dbus_x *prev = dbus->prev; ++ msmFreePointer((void**)&dbus->name); ++ msmFreePointer((void**)&dbus->own); ++ msmFreePointer((void**)&dbus->bus); ++ if (dbus->annotation) { ++ msmFreePointer((void**)&dbus->annotation->name); ++ msmFreePointer((void**)&dbus->annotation->value); ++ msmFreePointer((void**)&dbus->annotation); ++ } ++ for (node = dbus->nodes; node; node = msmFreeNode(node)); ++ msmFreePointer((void**)&dbus); ++ return prev; ++ } else return NULL; ++} ++ ++static provide_x *msmFreeProvide(provide_x *provide) ++{ ++ ac_domain_x *ac_domain; ++ filesystem_x *filesystem; ++ provide_x *prev = provide->prev; ++ dbus_x *dbus; ++ ++ if (provide) { ++ for (ac_domain = provide->ac_domains; ac_domain; ac_domain = msmFreeACDomain(ac_domain)); ++ if (provide->filesystems) ++ for (filesystem = provide->filesystems; filesystem; filesystem = msmFreeFilesystem(filesystem)); ++ msmFreePointer((void**)&provide->name); ++ msmFreePointer((void**)&provide->origin); ++ for (dbus = provide->dbuss; dbus; dbus = msmFreeDBus(dbus)); ++ msmFreePointer((void**)&provide); ++ } ++ return prev; ++} ++ ++static file_x *msmFreeFile(file_x *file) ++{ ++ file_x *prev = file->prev; ++ msmFreePointer((void**)&file->path); ++ msmFreePointer((void**)&file); ++ return prev; ++} ++ ++package_x *msmFreePackage(package_x *package) ++{ ++ provide_x *provide; ++ package_x *prev = package->prev; ++ for (provide = package->provides; provide; provide = msmFreeProvide(provide)); ++ msmFreePointer((void**)&package->name); ++ msmFreePointer((void**)&package->modified); ++ msmFreePointer((void**)&package); ++ return prev; ++} ++ ++static keyinfo_x *msmFreeKeyinfo(keyinfo_x *keyinfo) ++{ ++ keyinfo_x *prev = keyinfo->prev; ++ msmFreePointer((void**)&keyinfo->keydata); ++ msmFreePointer((void**)&keyinfo); ++ return prev; ++} ++ ++static access_x *msmFreeAccess(access_x *access) ++{ ++ access_x *prev = access->prev; ++ msmFreePointer((void**)&access->data); ++ msmFreePointer((void**)&access->type); ++ msmFreePointer((void**)&access); ++ return prev; ++} ++ ++static origin_x *msmFreeOrigin(origin_x *origin) ++{ ++ keyinfo_x *keyinfo; ++ access_x *access; ++ origin_x *prev = origin->prev; ++ for (keyinfo = origin->keyinfos; keyinfo; keyinfo = msmFreeKeyinfo(keyinfo)); ++ for (access = origin->accesses; access; access = msmFreeAccess(access)); ++ msmFreePointer((void**)&origin->type); ++ msmFreePointer((void**)&origin); ++ return prev; ++} ++ ++static sw_source_x *msmFreeSWSource(sw_source_x *sw_source) ++{ ++ package_x *package; ++ ac_domain_x *ac_domain, *temp; ++ origin_x *origin; ++ sw_source_x *next = sw_source->next; ++ ++ rpmlog(RPMLOG_DEBUG, "freeing sw source %s\n", sw_source->name); ++ ++ for (package = sw_source->packages; package; package = msmFreePackage(package)); ++ for (ac_domain = sw_source->allowmatches; ac_domain; ac_domain = msmFreeACDomain(ac_domain)); ++ if (sw_source->allows) { ++ HASH_ITER(hh, sw_source->allows, ac_domain, temp) { ++ HASH_DELETE(hh, sw_source->allows, ac_domain); ++ msmFreeACDomain(ac_domain); ++ } ++ } ++ ++ for (ac_domain = sw_source->denymatches; ac_domain; ac_domain = msmFreeACDomain(ac_domain)); ++ if (sw_source->denys) { ++ HASH_ITER(hh, sw_source->denys, ac_domain, temp) { ++ HASH_DELETE(hh, sw_source->denys, ac_domain); ++ msmFreeACDomain(ac_domain); ++ } ++ } ++ for (origin = sw_source->origins; origin; origin = msmFreeOrigin(origin)); ++ msmFreePointer((void**)&sw_source->name); ++ msmFreePointer((void**)&sw_source->rankkey); ++ msmFreePointer((void**)&sw_source); ++ return next; ++} ++ ++static d_request_x *msmFreeDRequest(d_request_x *d_request) ++{ ++ d_request_x *next = d_request->next; ++ rpmlog(RPMLOG_DEBUG, "freeing domain request %s\n", d_request->label_name); ++ msmFreePointer((void**)&d_request->label_name); ++ msmFreePointer((void**)&d_request->ac_type); ++ msmFreePointer((void**)&d_request); ++ return next; ++} ++ ++static d_permit_x *msmFreeDPermit(d_permit_x *d_permit) ++{ ++ d_permit_x *next = d_permit->next; ++ rpmlog(RPMLOG_DEBUG, "freeing domain permit %s\n", d_permit->label_name); ++ msmFreePointer((void**)&d_permit->label_name); ++ msmFreePointer((void**)&d_permit->to_label_name); ++ msmFreePointer((void**)&d_permit->ac_type); ++ msmFreePointer((void**)&d_permit); ++ return next; ++} ++ ++static d_provide_x *msmFreeDProvide(d_provide_x *d_provide) ++{ ++ d_provide_x *next = d_provide->next; ++ rpmlog(RPMLOG_DEBUG, "freeing domain provide %s\n", d_provide->label_name); ++ msmFreePointer((void**)&d_provide->label_name); ++ msmFreePointer((void**)&d_provide); ++ return next; ++} ++ ++manifest_x* msmFreeManifestXml(manifest_x* mfx) ++{ ++ provide_x *provide; ++ file_x *file; ++ sw_source_x *sw_source; ++ d_request_x *d_request; ++ d_permit_x *d_permit; ++ d_provide_x *d_provide; ++ ++ rpmlog(RPMLOG_DEBUG, "in msmFreeManifestXml\n"); ++ if (mfx) { ++ if (mfx->provides) ++ for (provide = mfx->provides; provide; provide = msmFreeProvide(provide)); ++ rpmlog(RPMLOG_DEBUG, "after freeing provides\n"); ++ if (mfx->request) { ++ msmFreePointer((void**)&mfx->request->ac_domain); ++ msmFreePointer((void**)&mfx->request); ++ } ++ rpmlog(RPMLOG_DEBUG, "after freeing requests\n"); ++ for (file = mfx->files; file; file = msmFreeFile(file)); ++ rpmlog(RPMLOG_DEBUG, "after freeing files\n"); ++ if (mfx->sw_sources) { ++ LISTHEAD(mfx->sw_sources, sw_source); ++ for (; sw_source; sw_source = msmFreeSWSource(sw_source)); ++ } ++ msmFreePointer((void**)&mfx->name); ++ rpmlog(RPMLOG_DEBUG, "after freeing name\n"); ++ if (mfx->define) { ++ msmFreePointer((void**)&mfx->define->name); ++ msmFreePointer((void**)&mfx->define->policy); ++ msmFreePointer((void**)&mfx->define->plist); ++ if (mfx->define->d_requests) { ++ LISTHEAD(mfx->define->d_requests, d_request); ++ for (; d_request; d_request = msmFreeDRequest(d_request)); ++ } ++ rpmlog(RPMLOG_DEBUG, "after freeing define requests\n"); ++ if (mfx->define->d_permits) { ++ LISTHEAD(mfx->define->d_permits, d_permit); ++ for (; d_permit; d_permit = msmFreeDPermit(d_permit)); ++ } ++ rpmlog(RPMLOG_DEBUG, "after freeing define permits\n"); ++ if (mfx->define->d_provides) { ++ LISTHEAD(mfx->define->d_provides, d_provide); ++ for (; d_provide; d_provide = msmFreeDProvide(d_provide)); ++ } ++ rpmlog(RPMLOG_DEBUG, "after freeing provides\n"); ++ msmFreePointer((void**)&mfx->define); ++ } ++ ++ rpmlog(RPMLOG_DEBUG, "after freeing defines \n"); ++ msmFreePointer((void**)&mfx); ++ } ++ return mfx; ++} ++ ++manifest_x *msmProcessManifestXml(const char *buffer, int size, sw_source_x *current, const char *packagename) ++{ ++ xmlTextReaderPtr reader; ++ manifest_x *mfx = NULL; ++ ++ reader = xmlReaderForMemory(buffer, size, NULL, NULL, 0); ++ ++ if (reader) { ++ mfx = calloc(1, sizeof(manifest_x)); ++ if (mfx) { ++ mfx->name = strdup(packagename); ++ if (msmProcessManifest(reader, mfx, current) < 0) { ++ /* error in parcing. Let's display some hint where we failed */ ++ rpmlog(RPMLOG_DEBUG, "Syntax error in processing manifest in the above line\n"); ++ mfx = msmFreeManifestXml(mfx); ++ } ++ } ++ xmlFreeTextReader(reader); ++ } else { ++ rpmlog(RPMLOG_ERR, "Unable to create xml reader\n"); ++ } ++ return mfx; ++} ++ ++manifest_x *msmProcessDevSecPolicyXml(const char *filename) ++{ ++ xmlTextReaderPtr reader; ++ manifest_x *mfx = NULL; ++ ++ reader = xmlReaderForFile(filename, NULL, 0); ++ ++ if (reader) { ++ mfx = calloc(1, sizeof(manifest_x)); ++ if (mfx) { ++ if (msmProcessManifest(reader, mfx, NULL) < 0) { ++ mfx = msmFreeManifestXml(mfx); ++ } ++ } ++ xmlFreeTextReader(reader); ++ } else { ++ rpmlog(RPMLOG_ERR, "Unable to open device security policy %s\n", filename); ++ } ++ return mfx; ++} +diff -Nuarp rpm/security/msmmatch.c rpm-security/security/msmmatch.c +--- rpm/security/msmmatch.c 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/security/msmmatch.c 2012-10-01 10:29:50.327983644 +0300 +@@ -0,0 +1,71 @@ ++/* ++ * This file is part of MSM security plugin ++ * Greatly based on the code of MSSF security plugin ++ * ++ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++ * ++ * Contact: Tero Aho ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "msm.h" ++ ++/* Wild card strcmp, wild cards * and ? allowed in s1 */ ++int strwcmp(const char *s1, const char *s2) ++{ ++ char *c1 = (char *)s1; ++ char *c2 = (char *)s2; ++ char *star = NULL; ++ int ok = 0; ++ ++ if (!s1 || !s2) return 1; ++ ++ while (*c2) { ++ if (*c1 == '*') { ++ if (star && (c1 - star) != ok) ++ goto fail; ++ c1++; ++ star = c1; ++ ok = 0; ++ } ++ if (*c1 == '?') { ++ c1++; ++ c2++; ++ continue; ++ } ++ if (*c1 == *c2) { ++ c1++; ++ c2++; ++ ok++; ++ } else if (star) { ++ c1 = star; ++ c2++; ++ ok = 0; ++ } else goto fail; ++ } ++ if (*c1 == '\0' && *c2 == '\0' && (!star || (c1 - star) == ok)) ++ return 0; ++ fail: ++ return (*c1 < *c2 ? -1 : 1); ++} ++ +diff -Nuarp rpm/security/msmxattr.c rpm-security/security/msmxattr.c +--- rpm/security/msmxattr.c 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/security/msmxattr.c 2012-10-01 10:29:50.327983644 +0300 +@@ -0,0 +1,1323 @@ ++/* ++ * This file is part of MSM security plugin ++ * Greatly based on the code of MSSF security plugin ++ * ++ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++ * ++ * Contact: Tero Aho ++ * ++ * Copyright (C) 2011 - 2012 Intel Corporation. ++ * ++ * Contact: Elena Reshetova ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "msm.h" ++ ++static ac_domain_x *all_ac_domains = NULL; /* hash of all provided ac domains */ ++static package_x *allpackages = NULL; /* hash of all installed packages */ ++ ++void msmFreeInternalHashes(void) ++{ ++ if (all_ac_domains) { ++ HASH_CLEAR(hh,all_ac_domains); ++ } ++ ++ if (allpackages) { ++ HASH_CLEAR(hh,allpackages); ++ } ++} ++ ++static int msmCheckACDomainRules(ac_domain_x *ac_domain, ++ sw_source_x *requested, sw_source_x *provided) ++{ ++ sw_source_x *sw_source; ++ ++ /* go through sw source and its parents: ac domains must not match */ ++ /* deny or deny wildcards and must match allow or allow wildcards */ ++ /* in the whole path up to the level of the providing sw source */ ++ ++ for (sw_source = requested; sw_source->parent && sw_source->parent != sw_source; sw_source = sw_source->parent) { ++ ac_domain_x *denied; ++ ac_domain_x *allowed; ++ /* check first if requested ac domain is denied */ ++ HASH_FIND(hh, sw_source->denys, ac_domain->name, strlen(ac_domain->name), denied); ++ if (denied) return 0; /* matched deny */ ++ for (denied = sw_source->denymatches; denied; denied = denied->prev) ++ if (!strwcmp(denied->match, ac_domain->name)) ++ return 0; /* matched deny wildcard */ ++ ++ /* not denied, now check if it's in allows or allowmatches */ ++ HASH_FIND(hh, sw_source->allows, ac_domain->name, strlen(ac_domain->name), allowed); ++ if (allowed) continue; /* matched allow */ ++ for (allowed = sw_source->allowmatches; allowed; allowed = allowed->prev) ++ if (!strwcmp(allowed->match, ac_domain->name)) ++ break; /* matched allow wildcard */ ++ if (allowed) continue; /* matched allow wildcard */ ++ ++ if (strcmp(sw_source->rankkey, provided->rankkey) <= 0) ++ return 1; /* ranked higher (or same sw source), allow */ ++ return 0; /* not mentioned, deny */ ++ } ++ return 1; /* still here, allow for root sw source */ ++} ++ ++static int msmCheckLabelProvisioning(manifest_x *mfx, const char* label) ++{ ++ ++ d_provide_x *provide = NULL; ++ ++ if ((mfx) && (label) && (mfx->define) && (mfx->define->d_provides)) { ++ for (provide = mfx->define->d_provides; provide; provide = provide->prev) { ++ if ( strcmp(provide->label_name, label) == 0 ) ++ return 0; ++ } ++ } ++ rpmlog(RPMLOG_ERR, "Label %s hasn't been provided in the manifest\n", label); ++ return -1; ++} ++ ++static int msmSetSmackRules(struct smack_accesses *smack_accesses, ac_domain_x *ac_domains, const char *aid) ++{ ++ ac_domain_x *ac_domain; ++ int ret = 0; ++ ++ if (!smack_accesses) return ret; ++ ++ for (ac_domain = ac_domains; ac_domain; ac_domain = ac_domain->prev) { ++ if (ac_domain->allowed) { ++ ret = smack_accesses_add(smack_accesses, aid, ac_domain->name, "rw"); ++ if (ret < 0) { ++ rpmlog(RPMLOG_ERR, "smack_add failed for %s %s\n", ++ aid, ac_domain->name); ++ return ret; ++ } ++ }/* else if (!ac_domain->allowed && !ac_domain->newer) { ++ // remove not allowed rule in case something has changed ++ smack_rule_set_remove(rule_set, aid, ac_domain->name, NULL); ++ }*/ ++ } ++ return ret; ++ ++} ++ ++static int msmIsProvideAllowed(ac_domain_x *provided, sw_source_x *sw_source, const char *origin) ++{ ++ ++ /* first check provided ac_domain attributes */ ++ if (provided->sw_source == sw_source) { ++ /* allowed always if ac_domain is provided in the same sw source */ ++ return 1; ++ } else if (origin && !strcmp(origin, "current")) { ++ /* denied if ac_domain is only meant for current sw source */ ++ return 0; ++ } ++ if (origin && !strcmp(origin, "all")) { ++ /* ac_domain is allowed for all sw sources */ ++ return 1; ++ } ++ if (!origin || !strcmp(origin, "trusted")) { ++ if (strcmp(sw_source->rankkey, provided->sw_source->rankkey) < 0) { ++ /* higher ranked sw sources are allowed if ac_domain is trusted */ ++ return 1; ++ } /* else flow through to check denys and allows below */ ++ } else return 0; ++ ++ return msmCheckACDomainRules(provided, sw_source, provided->sw_source); ++} ++ ++static int msmSetSmackProvide(struct smack_accesses *smack_accesses, provide_x *provide, sw_source_x *sw_source) ++{ ++ ac_domain_x *ac_domain; ++ sw_source_x *current = sw_source; ++ int ret = -1; ++ ++ if (!provide || (!provide->ac_domains)) return 0; ++ ++ /* set smack rules for all sw sources */ ++ LISTHEAD(current, sw_source); ++ for (; sw_source; sw_source = sw_source->next) { ++ if (!sw_source->newer) { ++ for (ac_domain = provide->ac_domains; ac_domain; ac_domain = ac_domain->prev) { ++ ac_domain->allowed = msmIsProvideAllowed(ac_domain, sw_source, ac_domain->origin); ++ rpmlog(RPMLOG_INFO, "%s ac_domain %s provided in %s for %s\n", (ac_domain->allowed ? "allowing" : "not allowing"), ++ ac_domain->name, ac_domain->sw_source->name, sw_source->name); ++ } ++ if (smack_accesses) ++ ret = msmSetSmackRules(smack_accesses, provide->ac_domains, sw_source->name); ++ else ++ ret = 0; ++ } ++ } ++ return ret; ++} ++ ++static int msmSetupZypperRepo(access_x *access, sw_source_x *sw_source) ++{ ++ struct stat sb; ++ char path[NAME_MAX+1]; ++ FILE *file = NULL; ++ char data[512]; ++ int ret = -1; ++ ++ /* NOTE: Creating zypper repos manually here! */ ++ /* A library call would be the correct way, but calling c++ from c */ ++ /* is not nice. On the other hand, now there is no libzypp dependency. */ ++ ++ char *sysconfdir = rpmExpand("%{?_sysconfdir}", NULL); ++ if (!sysconfdir || !strcmp(sysconfdir, "")) { ++ rpmlog(RPMLOG_ERR, "Failed to expand %%_sysconfdir macro\n"); ++ goto exit; ++ } ++ snprintf(path, sizeof(path), "%s/zypp", sysconfdir); ++ if (stat(path, &sb) == -1) { ++ rpmlog(RPMLOG_ERR, "Failed to stat %s: %s\n", ++ path, strerror(errno)); ++ goto exit; ++ } ++ snprintf(path, sizeof(path), "%s/zypp/repos.d", sysconfdir); ++ if (stat(path, &sb) == -1) { ++ if (mkdir(path, 0755) == -1) { ++ rpmlog(RPMLOG_ERR, "Failed to create %s: %s\n", ++ path, strerror(errno)); ++ goto exit; ++ } ++ } ++ snprintf(path, sizeof(path), "%s/zypp/repos.d/%s.repo", ++ sysconfdir, sw_source->name); ++ file = fopen(path, "w"); ++ if (!file) { ++ rpmlog(RPMLOG_ERR, "Failed to open %s: %s\n", ++ path, strerror(errno)); ++ goto exit; ++ } ++ snprintf(data, sizeof(data), ++ "[%s]\n" ++ "name=%s\n" ++ "enabled=1\n" ++ "autorefresh=0\n" ++ "baseurl=%s\n" ++ "type=%s\n" ++ "keeppackages=0\n", ++ sw_source->name, sw_source->name, access->data, ++ (access->type ? access->type : "NONE")); ++ ++ if (fputs(data, file) == EOF) { ++ rpmlog(RPMLOG_ERR, "Failed to write %s: %s\n", ++ path, strerror(errno)); ++ goto exit; ++ } ++ rpmlog(RPMLOG_INFO, "added zypper repository %s for sw source %s\n", ++ path, sw_source->name); ++ ++ ret = 0; ++ exit: ++ if (file) fclose(file); ++ msmFreePointer((void**)&sysconfdir); ++ ++ return ret; ++} ++ ++static int msmSetSmackSWSource(struct smack_accesses *smack_accesses, sw_source_x *sw_source) ++{ ++ package_x *package, *temp; ++ provide_x *provide; ++ ++ if (!allpackages) return 0; ++ ++ if (sw_source->older) { ++ ac_domain_x *ac_domain, *temp; ++ /* remove old domain rules in case of upgrade */ ++ //smack_rule_set_remove_by_subject(rule_set, sw_source->name, NULL); ++ /* make sure domain's credentials point to upgraded domain */ ++ HASH_ITER(hh, all_ac_domains, ac_domain, temp) { ++ if (ac_domain->sw_source == sw_source->older) ++ ac_domain->sw_source = sw_source; ++ } ++ } ++ ++ /* iterate through all packages to create smack rules for the domain */ ++ HASH_ITER(hh, allpackages, package, temp) { ++ if (sw_source->older) { ++ /* make sure domain's packages point to upgraded domain */ ++ if (package->sw_source == sw_source->older) ++ package->sw_source = sw_source; ++ } ++ if (!package->newer) { ++ for (provide = package->provides; provide; provide = provide->prev) { ++ if (msmSetSmackProvide(smack_accesses, provide, package->sw_source)) ++ return -1; ++ } ++ } ++ } ++ return 0; ++} ++ ++int msmSetupSWSources(struct smack_accesses *smack_accesses, manifest_x *mfx, rpmts ts) ++{ ++ sw_source_x *sw_source; ++ origin_x *origin; ++ keyinfo_x *keyinfo; ++ access_x *access; ++ ac_domain_x *allow; ++ ac_domain_x *deny; ++ ac_domain_x *ac_domain; ++ int ret; ++ rpmRC rc; ++ ++ LISTHEAD(mfx->sw_sources, sw_source); ++ ++ while (sw_source) { ++ sw_source_x *next = sw_source->next; ++ sw_source_x *parent = sw_source->parent; ++ if (ts) { ++ for (origin = sw_source->origins; origin; origin = origin->prev) { ++ for (keyinfo = origin->keyinfos; keyinfo; keyinfo = keyinfo->prev) { ++ rpmlog(RPMLOG_INFO, "setting keyinfo for sw source %s\n", ++ sw_source->name); ++ rc = rpmtsImportPubkey(ts, keyinfo->keydata, keyinfo->keylen); ++ if (rc != RPMRC_OK) { ++ rpmlog(RPMLOG_ERR, "Key import failed for sw source %s\n", ++ sw_source->name); ++ return rc; ++ } ++ } ++ for (access = origin->accesses; access; access = access->prev) { ++ rpmlog(RPMLOG_INFO, "setting access %s for sw source %s\n", ++ access->data, sw_source->name); ++ if (origin->type && !strcmp(origin->type, "ZYPPER")) { ++ ret = msmSetupZypperRepo(access, sw_source); ++ if (ret) { ++ rpmlog(RPMLOG_ERR, ++ "Failed to set access %s for sw source %s\n", ++ access->data, sw_source->name); ++ return ret; ++ } ++ } ++ } ++ } ++ } else { ++ ++ /* config processing */ ++ ret = msmSetupPackages(NULL, sw_source->packages, NULL); ++ if (ret) { ++ rpmlog(RPMLOG_ERR, "Setup packages failed for sw source %s\n", ++ sw_source->name); ++ return ret; ++ } ++ } ++ if (ts) { ++ for (allow = sw_source->allows; allow; allow = allow->hh.next) { ++ HASH_FIND(hh, all_ac_domains, allow->name, strlen(allow->name), ac_domain); ++ if (ac_domain) { ++ rpmlog(RPMLOG_INFO, "sw source %s allows access to ac domain %s\n", ++ sw_source->name, allow->name); ++ } else { ++ rpmlog(RPMLOG_WARNING, "sw source %s allows access to ac domain %s which doesn't exist\n", ++ sw_source->name, allow->name); ++ } ++ } ++ for (allow = sw_source->allowmatches; allow; allow = allow->prev) ++ rpmlog(RPMLOG_INFO, "sw source %s allows access to ac domain match %s\n", ++ sw_source->name, allow->match); ++ ++ for (deny = sw_source->denys; deny; deny = deny->hh.next) { ++ HASH_FIND(hh, all_ac_domains, deny->name, strlen(deny->name), ac_domain); ++ if (ac_domain) { ++ rpmlog(RPMLOG_INFO, "sw source %s denies access to ac domain %s\n", ++ sw_source->name, deny->name); ++ } else { ++ rpmlog(RPMLOG_WARNING, "sw source %s denies access to ac domain %s which doesn't exist\n", ++ sw_source->name, deny->name); ++ } ++ } ++ for (deny = sw_source->denymatches; deny; deny = deny->prev) ++ rpmlog(RPMLOG_INFO, "sw source %s denies access to ac domain match %s\n", ++ sw_source->name, deny->match); ++ ++ if (parent) { ++ if (strcmp(parent->name, sw_source->name)) { ++ sw_source_x *older; ++ for (older = parent; older; older = older->next) { ++ if (!strcmp(sw_source->name, older->name)) { ++ sw_source->older = older; ++ older->newer = sw_source; ++ break; ++ } ++ } ++ } else if (!parent->parent) { ++ /* root sw_source upgrade */ ++ sw_source->older = parent; ++ parent->newer = sw_source; ++ sw_source->parent = NULL; ++ } else return -1; ++ ++ LISTDEL(mfx->sw_sources, sw_source); /* take out from sw sources list */ ++ NODEADD(parent, sw_source); /* add to sw source tree */ ++ } ++ ++ /* set smack rules for the new/upgraded sw source */ ++ ret = msmSetSmackSWSource(smack_accesses, sw_source); ++ if (ret) { ++ rpmlog(RPMLOG_ERR, "Setting smack rules failed for sw source %s\n", ++ sw_source->name); ++ return ret; ++ } ++ ++ } ++ sw_source = next; ++ } ++ return 0; ++} ++ ++static void msmRemoveDBusConfig(package_x *package, dbus_x *dbuss) ++{ ++ dbus_x *dbus; ++ ++ for (dbus = dbuss; dbus; dbus = dbus->prev) { ++ char path[NAME_MAX+1]; ++ snprintf(path, sizeof(path), "/etc/dbus-1/%s.d/manifest.%s.conf", ++ dbus->bus, package->name); ++ unlink(path); ++ } ++} ++ ++static int msmSetupDBusRule(FILE *file, const char *creds, int type, const char *service, const char *name, const char *parentType, const char *parentValue) ++{ ++ char data[1024]; ++ ++ if (creds && *creds) { ++ switch (type) { ++ case DBUS_SERVICE: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n", ++ name, creds, name); ++ break; ++ case DBUS_PATH: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n", ++ service, name, service, name, creds, ++ service, name, service, name); ++ break; ++ case DBUS_INTERFACE: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n", ++ service, name, service, name, creds, ++ service, name, service, name); ++ break; ++ case DBUS_METHOD: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n", ++ service, parentType, parentValue, name, creds, ++ service, parentType, parentValue, name); ++ break; ++ case DBUS_SIGNAL: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n", ++ service, parentType, parentValue, name, creds, ++ service, parentType, parentValue, name); ++ break; ++ default: ++ return -1; ++ } ++ } else { ++ switch (type) { ++ case DBUS_SERVICE: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n", ++ name); ++ break; ++ case DBUS_PATH: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n" ++ " \n", ++ service, name, service, name); ++ break; ++ case DBUS_INTERFACE: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n" ++ " \n", ++ service, name, service, name); ++ break; ++ case DBUS_METHOD: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n", ++ service, parentType, parentValue, name); ++ break; ++ case DBUS_SIGNAL: ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n", ++ service, parentType, parentValue, name); ++ break; ++ default: ++ return -1; ++ } ++ } ++ if (fputs(data, file) == EOF) { ++ rpmlog(RPMLOG_ERR, "Failed to write DBus rule %s: %s\n", ++ data, strerror(errno)); ++ return -1; ++ } ++ return 0; ++} ++ ++static int msmSetupDBusConfig(package_x *package, dbus_x *dbus, int phase) ++{ ++ char path[NAME_MAX+1]; ++ FILE *file = NULL; ++ char data[512]; ++ node_x *node; ++ interface_x *interface; ++ member_x *member; ++ int ret = -1; ++ ++ char *sysconfdir = rpmExpand("%{?_sysconfdir}", NULL); ++ if (!sysconfdir || !strcmp(sysconfdir, "")) { ++ rpmlog(RPMLOG_ERR, "Failed to expand %%_sysconfdir macro\n"); ++ goto exit; ++ } ++ snprintf(path, sizeof(path), "%s/dbus-1/%s.d/manifest.%s.conf", ++ sysconfdir, dbus->bus, package->name); ++ ++ file = fopen(path, phase ? "a" : "w"); ++ if (!file) { ++ rpmlog(RPMLOG_ERR, "Cannot open %s: %s\n", path, strerror(errno)); ++ goto exit; ++ } ++ ++ if (phase == 0) { ++ snprintf(data, sizeof(data), ++ "\n" ++ "\n" ++ "\n", ++ rpmEVR); ++ if (fputs(data, file) == EOF) { ++ rpmlog(RPMLOG_ERR, "Failed to write %s: %s\n", ++ path, strerror(errno)); ++ goto exit; ++ } ++ } ++ ++ if (phase >= 0) { ++ if (dbus->own) { ++ snprintf(data, sizeof(data), ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n" ++ " \n", ++ dbus->name, dbus->own, dbus->name); ++ if (fputs(data, file) == EOF) { ++ rpmlog(RPMLOG_ERR, "Failed to write %s: %s\n", ++ path, strerror(errno)); ++ goto exit; ++ } ++ } ++ if (dbus->annotation) { ++ msmSetupDBusRule(file, dbus->annotation->value, DBUS_SERVICE, ++ NULL, dbus->name, NULL, NULL); ++ } ++ for (node = dbus->nodes; node; node = node->prev) { ++ if (node->annotation) { ++ msmSetupDBusRule(file, node->annotation->value, DBUS_PATH, ++ dbus->name, node->name, NULL, NULL); ++ } ++ for (member = node->members; member; member = member->prev) { ++ if (member->annotation) { ++ msmSetupDBusRule(file, member->annotation->value, member->type, ++ dbus->name, member->name, ++ "path", node->name); ++ } ++ } ++ for (interface = node->interfaces; interface; interface = interface->prev) { ++ if (interface->annotation) { ++ msmSetupDBusRule(file, interface->annotation->value, DBUS_INTERFACE, ++ dbus->name, interface->name, NULL, NULL); ++ } ++ for (member = interface->members; member; member = member->prev) { ++ if (member->annotation) { ++ msmSetupDBusRule(file, member->annotation->value, member->type, ++ dbus->name, member->name, ++ "interface", interface->name); ++ } ++ } ++ } ++ } ++ } ++ ++ if (phase < 0) { ++ snprintf(data, sizeof(data), "\n"); ++ if (fputs(data, file) == EOF) { ++ rpmlog(RPMLOG_ERR, "Failed to write %s: %s\n", ++ path, strerror(errno)); ++ goto exit; ++ } ++ rpmlog(RPMLOG_INFO, "wrote dbus config %s\n", path); ++ } ++ ret = 0; ++ ++ exit: ++ if (file) fclose(file); ++ if (ret) unlink(path); ++ msmFreePointer((void**)&sysconfdir); ++ ++ return ret; ++} ++ ++static int msmIsRequestAllowed(manifest_x *mfx, ac_domain_x *provided) ++{ ++ ++ if (mfx->sw_source == provided->sw_source) { ++ /* allowed always if ac domain is provided in the same sw source */ ++ return 1; ++ } else if (provided->origin && !strcmp(provided->origin, "current")) { ++ /* denied if ac domain is only meant for current sw source */ ++ return 0; ++ } ++ if (provided->origin && !strcmp(provided->origin, "all")) { ++ /* ac_domain is allowed for all sw sources */ ++ return 1; ++ } ++ if (!provided->origin || !strcmp(provided->origin, "trusted")) { ++ if (strcmp(mfx->sw_source->rankkey, provided->sw_source->rankkey) < 0) { ++ /* higher ranked sw sources are allowed if ac domain is trusted */ ++ return 1; ++ } /* else flow through to check denys and allows below */ ++ } else return 0; ++ ++ return msmCheckACDomainRules(provided, mfx->sw_source, provided->sw_source); ++} ++ ++static int msmCheckDomainJoinPossibility(manifest_x *mfx, ac_domain_x *defined_ac_domain) ++{ ++ ++ char *tmp = NULL, *pch = NULL; ++ unsigned int found = 0; ++ ++ if ((!mfx) || (!defined_ac_domain)) ++ return -1; ++ ++ if (defined_ac_domain->type) { ++ if (strcmp(defined_ac_domain->type, "restricted") == 0) { ++ if (defined_ac_domain->plist) { ++ tmp = calloc(strlen(defined_ac_domain->plist) + 1, sizeof(char)); ++ if (!tmp) return -1; ++ strncpy(tmp, defined_ac_domain->plist, strlen(defined_ac_domain->plist)); ++ pch = strtok (tmp, ", "); ++ while (pch != NULL) ++ { ++ if (strcmp(pch, mfx->name) == 0) { ++ found = 1; ++ break; ++ } ++ pch = strtok(NULL, ", "); ++ } ++ msmFreePointer((void**)&tmp); ++ } ++ if (found != 1) { ++ rpmlog(RPMLOG_ERR, "Request for a domain name %s isn't allowed ", mfx->request->ac_domain); ++ rpmlog(RPMLOG_ERR, "because ac domain is marked as restricted\n"); ++ return -1; ++ } ++ } else if (strcmp(defined_ac_domain->type, "shared") == 0) { ++ return 0; ++ } else { ++ // domain hasn't been marked as shared ++ rpmlog(RPMLOG_ERR, "Request for a domain name %s isn't allowed ", mfx->request->ac_domain); ++ rpmlog(RPMLOG_ERR, "because ac domain is marked as private\n"); ++ return -1; ++ } ++ } else { ++ // by default ac domains are private ++ rpmlog(RPMLOG_ERR, "Request for a domain name %s isn't allowed ", mfx->request->ac_domain); ++ rpmlog(RPMLOG_ERR, "because ac domain is marked as private\n"); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++int msmSetupRequests(manifest_x *mfx) ++{ ++ ++ ac_domain_x *defined_ac_domain = NULL; ++ ++ if ((!mfx) || (!mfx->request) || (!mfx->request->ac_domain)) ++ return -1; ++ ++ HASH_FIND(hh, all_ac_domains, mfx->request->ac_domain, strlen(mfx->request->ac_domain), defined_ac_domain); ++ if (!defined_ac_domain){ // request for a undefined domain. ++ rpmlog(RPMLOG_ERR, "Request for a domain name %s that hasn't been yet defined by any package\n", mfx->request->ac_domain); ++ return -1; ++ } ++ ++ //now check that the package can join the requested AC domain ++ ++ if (mfx->define){ ++ rpmlog(RPMLOG_DEBUG, "mfx->define->name %s mfx->request->ac_domain %s\n", mfx->define->name, mfx->request->ac_domain); ++ if (strcmp(mfx->define->name, mfx->request->ac_domain) == 0) ++ //ac domain is requested from the same package where it was define. This case is always allowed ++ return 0; ++ } ++ ++ //need to check if developer allowed other packages to join this domain ++ if (msmCheckDomainJoinPossibility(mfx, defined_ac_domain) < 0 ) ++ return -1; ++ ++ // now checking if security policy allows to join this domain ++ if (msmIsRequestAllowed(mfx, defined_ac_domain)) { ++ rpmlog(RPMLOG_INFO, "Request for a domain name %s is allowed based on package sw source\n", mfx->request->ac_domain); ++ return 0; ++ ++ } else { ++ rpmlog(RPMLOG_ERR, "Request for a domain name %s isn't allowed based on package sw source\n", mfx->request->ac_domain); ++ return -1; ++ } ++} ++ ++static int msmSetupProvides(struct smack_accesses *smack_accesses, package_x *package) ++{ ++ provide_x *provide; ++ ac_domain_x *ac_domain; ++ ++ for (provide = package->provides; provide; provide = provide->prev) { ++ for (ac_domain = provide->ac_domains; ac_domain; ac_domain = ac_domain->prev) { ++ ac_domain_x *current_d = NULL; ++ ac_domain->origin = provide->origin; ++ ++ HASH_FIND(hh, all_ac_domains, ac_domain->name, strlen(ac_domain->name), current_d); ++ ++ if (current_d) { /* ac domain has been previously defined */ ++ ++ if (strcmp(ac_domain->pkg_name, current_d->pkg_name) == 0) { /* check that it was provided by same package */ ++ HASH_DELETE(hh, all_ac_domains, current_d); ++ HASH_ADD_KEYPTR(hh, all_ac_domains, ac_domain->name, strlen(ac_domain->name), ac_domain); ++ current_d->newer = ac_domain; ++ ac_domain->older = current_d; ++ rpmlog(RPMLOG_INFO, "package %s upgraded ac domain %s\n", ac_domain->pkg_name, ac_domain->name); ++ ++ } else { ++ rpmlog(RPMLOG_ERR, "package %s can't upgrade ac domain %s previously defined in package %s\n", ++ ac_domain->pkg_name, ac_domain->name, current_d->pkg_name); ++ return -1; ++ } ++ } else { ++ HASH_ADD_KEYPTR(hh, all_ac_domains, ac_domain->name, strlen(ac_domain->name), ac_domain); ++ rpmlog(RPMLOG_INFO, "package %s defined ac domain %s\n", ac_domain->pkg_name, ac_domain->name); ++ } ++ } ++ int ret = msmSetSmackProvide(smack_accesses, provide, package->sw_source); ++ ++ if (ret < 0) { ++ rpmlog(RPMLOG_ERR, "Failed to set smack rules for provide\n"); ++ return -1; ++ } ++ } ++ return 0; ++} ++ ++int msmSetupDBusPolicies(package_x *package) ++{ ++ ++ dbus_x *session = NULL; ++ dbus_x *system = NULL; ++ provide_x *provide; ++ dbus_x *dbus; ++ ++ for (provide = package->provides; provide; provide = provide->prev) { ++ for (dbus = provide->dbuss; dbus; dbus = dbus->prev) { ++ if (!strcmp(dbus->bus, "session")) { ++ msmSetupDBusConfig(package, dbus, session ? 1 : 0); ++ session = dbus; ++ } else if (!strcmp(dbus->bus, "system")) { ++ msmSetupDBusConfig(package, dbus, system ? 1 : 0); ++ system = dbus; ++ } else return -1; ++ } ++ if (session) msmSetupDBusConfig(package, session, -1); ++ if (system) msmSetupDBusConfig(package, system, -1); ++ session = system = NULL; ++ } ++ return 0; ++ ++} ++ ++static int msmCheckDomainRequestOrPermit(manifest_x *mfx, const char* domain) ++{ ++ ++ ac_domain_x *defined_ac_domain = NULL; ++ char* name = NULL; ++ ++ if ((!mfx) || (!domain)) ++ return -1; ++ ++ name = calloc(strlen(domain) + 1, sizeof(char)); ++ if (!name) return -1; ++ strncpy(name, domain, strlen(domain)); ++ strtok(name, ":"); // remove label name if present ++ rpmlog(RPMLOG_DEBUG, "label name %s domain name %s \n", domain, name); ++ ++ HASH_FIND(hh, all_ac_domains, name, strlen(name), defined_ac_domain); ++ if (!defined_ac_domain) { // request or permit for an undefined domain. ++ rpmlog(RPMLOG_ERR, "A domain name %s hasn't been yet defined by any package. Can't verify if it is allowed\n", name); ++ msmFreePointer((void**)&name); ++ return -1; ++ } ++ ++ //now check that this ac_domain can be requested ++ ++ if ((mfx->define) && (mfx->define->name)) { ++ rpmlog(RPMLOG_DEBUG, "mfx->define->name %s domain %s\n", mfx->define->name, name); ++ if (strcmp(mfx->define->name, name) == 0) { ++ // AC domain access is requested or permitted from the same package where it was defined. ++ // This case is always allowed ++ msmFreePointer((void**)&name); ++ return 0; ++ } ++ } ++ ++ // no need to check if developer allowed other packages to request/permit this domain ++ // because this isn't a request to belong to a domain, but request/permit for domain access ++ ++ if (msmIsRequestAllowed(mfx, defined_ac_domain)) { ++ // request or permit is allowed by domain policy ++ rpmlog(RPMLOG_DEBUG, "Request/Permit to access a domain name %s is allowed based on package sw source\n", name); ++ msmFreePointer((void**)&name); ++ return 0; ++ ++ } else { ++ rpmlog(RPMLOG_ERR, "Request/Permit to access a domain name %s isn't allowed based on package sw source\n", name); ++ msmFreePointer((void**)&name); ++ return -1; ++ } ++} ++ ++int msmSetupDefine(struct smack_accesses *smack_accesses, manifest_x *mfx) ++{ ++ d_request_x *d_request; ++ d_permit_x *d_permit; ++ ac_domain_x * defined_ac_domain = NULL; ++ int ret; ++ ++ if ( (!mfx) || (!mfx->define) || (!mfx->define->name)) { ++ rpmlog(RPMLOG_ERR, "Failed to setup define with empty name\n"); ++ return -1; ++ } ++ ++ /* need to check if domain hasn't been already defined by other package */ ++ ++ HASH_FIND(hh, all_ac_domains, mfx->define->name, strlen(mfx->define->name), defined_ac_domain); ++ if ((defined_ac_domain) && (defined_ac_domain->pkg_name)) { // this domain has been previously defined ++ if (strcmp(defined_ac_domain->pkg_name, mfx->name) != 0) { ++ rpmlog(RPMLOG_ERR, "Attempt to define a domain name %s that has been already defined by package %s\n", ++ mfx->define->name, defined_ac_domain->pkg_name); ++ return -1; ++ } ++ ++ } ++ ++ if (mfx->define->d_requests) { ++ for (d_request = mfx->define->d_requests; d_request; d_request = d_request->prev) { ++ // first check if the current's package sw source can grant access to requested domain ++ if ( msmCheckDomainRequestOrPermit(mfx, d_request->label_name) < 0 ) ++ return -1; ++ if ( smack_accesses_add(smack_accesses, mfx->define->name, d_request->label_name, d_request->ac_type) < 0 ) { ++ rpmlog(RPMLOG_ERR, "Failed to set smack rules for domain requests\n"); ++ return -1; ++ } ++ ++ } ++ } ++ ++ if (mfx->define->d_permits) { ++ for (d_permit = mfx->define->d_permits; d_permit; d_permit = d_permit->prev) { ++ // first check if the current's package sw source can grant access to permited domain ++ if ( msmCheckDomainRequestOrPermit(mfx, d_permit->label_name) < 0 ) ++ return -1; ++ if (!d_permit->to_label_name) ++ ret = smack_accesses_add(smack_accesses, d_permit->label_name, mfx->define->name, d_permit->ac_type); ++ else { ++ if ( msmCheckLabelProvisioning(mfx, d_permit->to_label_name) < 0 ) ++ return -1; ++ ret = smack_accesses_add(smack_accesses, d_permit->label_name, d_permit->to_label_name, d_permit->ac_type); ++ } ++ if (ret < 0) { ++ rpmlog(RPMLOG_ERR, "Failed to set smack rules for domain permits\n"); ++ return -1; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++package_x *msmCreatePackage(const char *name, sw_source_x *sw_source, provide_x *provides, const char *modified) ++{ ++ if (!name) return NULL; ++ ++ package_x *package = calloc(1, sizeof(package_x)); ++ if (package) { ++ package->name = strdup(name); ++ if (!package->name) goto exit; ++ package->sw_source = sw_source; ++ package->provides = provides; ++ if (modified) { ++ package->modified = strdup(modified); ++ if (!package->modified) goto exit; ++ } ++ } ++ return package; ++ ++ exit: ++ msmFreePointer((void**)&package->name); ++ msmFreePointer((void**)&package->modified); ++ msmFreePointer((void**)&package); ++ ++ return NULL; ++} ++ ++int msmSetupSmackRules(struct smack_accesses *smack_accesses, const char* package_name, int flag, int SmackEnabled) ++{ ++ int ret = 0; ++ char * buffer = calloc(strlen(SMACK_RULES_PATH) + strlen(package_name) + 1, sizeof(char)); ++ if (!buffer) return -1; ++ strncpy(buffer, SMACK_RULES_PATH, strlen(SMACK_RULES_PATH)); ++ strncpy(buffer + strlen(SMACK_RULES_PATH), package_name, strlen(package_name)); ++ rpmlog(RPMLOG_DEBUG, "smack rule file path %s, SmackEnabled %d\n", buffer, SmackEnabled); ++ ++ if (flag == SMACK_UNINSTALL) { /* uninstallation case */ ++ FILE* fd = fopen(buffer, "r"); ++ if (fd) { ++ rpmlog(RPMLOG_DEBUG, "uninstall case \n"); ++ struct smack_accesses *old_rule_set = NULL; ++ ret = smack_accesses_new(&old_rule_set); ++ if (ret != 0) return -1; ++ ret = smack_accesses_add_from_file(old_rule_set, fileno(fd)); ++ if (ret == 0) { ++ if (SmackEnabled == 1) ++ ret = smack_accesses_clear(old_rule_set); /* deletes rules from kernel */ ++ ++ } ++ smack_accesses_free(old_rule_set); ++ fclose(fd); ++ remove(buffer); /* delete rules file from system */ ++ } ++ } else { /*installation case */ ++ /* first attempt to clean previous version of rules, if exists */ ++ FILE* fd = fopen(buffer, "r"); ++ if (fd) { ++ struct smack_accesses *old_rule_set = NULL; ++ ret = smack_accesses_new(&old_rule_set); ++ if (ret != 0) return -1; ++ ret = smack_accesses_add_from_file(old_rule_set, fileno(fd)); ++ if (ret == 0) { ++ if (SmackEnabled == 1) ++ ret = smack_accesses_clear(old_rule_set); /* deletes old rules from kernel */ ++ } ++ fclose(fd); ++ smack_accesses_free(old_rule_set); ++ } ++ /* now write new rules to the system */ ++ fd = fopen(buffer, "w"); ++ if (!fd) { ++ rpmlog(RPMLOG_ERR, "Can't write smack rules\n"); ++ return -1; ++ } ++ ret = smack_accesses_save(smack_accesses, fileno(fd)); ++ rpmlog(RPMLOG_DEBUG, "ret in installation %d\n", ret); ++ if (!ret) { ++ if (SmackEnabled == 1) ++ ret = smack_accesses_apply(smack_accesses); ++ } ++ fclose(fd); ++ } ++ ++ free(buffer); ++ if (ret) ++ return -1; ++ return 0; ++ ++} ++ ++int msmSetupPackages(struct smack_accesses *smack_accesses, package_x *packages, sw_source_x *sw_source) ++{ ++ package_x *package, *first = NULL; ++ char *p_rankkey, *c_rankkey; ++ for (package = packages; package; package = package->prev) { ++ package_x *current_p; ++ rpmlog(RPMLOG_DEBUG, "before HASH_FIND, package->name %s\n", package->name); ++ HASH_FIND(hh, allpackages, package->name, strlen(package->name), current_p); ++ rpmlog(RPMLOG_DEBUG, "after HASH_FIND\n"); ++ if (current_p) { ++ if (!current_p->sw_source) { ++ return -1; ++ } ++ p_rankkey = strdup(package->sw_source->rankkey); ++ c_rankkey = strdup(current_p->sw_source->rankkey); ++ p_rankkey = strtok(p_rankkey, "."); ++ c_rankkey = strtok(c_rankkey, "."); ++ /* this is an upgrade, remove old one from config */ ++ if ((strcmp(p_rankkey, c_rankkey) < 0) || ++ (strcmp(package->sw_source->name, current_p->sw_source->name) == 0)) { ++ HASH_DELETE(hh, allpackages, current_p); ++ rpmlog(RPMLOG_INFO, "sw source %s upgraded package %s previously provided in sw source %s\n", ++ package->sw_source->name, package->name, current_p->sw_source->name); ++ current_p->newer = package; ++ package->older = current_p; ++ } else { ++ /* upgrade from lower or similary ranked sw source is not allowed */ ++ rpmlog(RPMLOG_ERR, "sw source %s tried to upgrade package %s previously provided in sw source %s\n", ++ package->sw_source->name, package->name, current_p->sw_source->name); ++ return -1; ++ } ++ msmFreePointer((void**)&p_rankkey); ++ msmFreePointer((void**)&c_rankkey); ++ } else { ++ if (sw_source) { ++ rpmlog(RPMLOG_INFO, "sw source %s provided package %s\n", package->sw_source->name, package->name); ++ } ++ } ++ rpmlog(RPMLOG_DEBUG, "before HASH_ADD_KEYPTR\n"); ++ HASH_ADD_KEYPTR(hh, allpackages, package->name, strlen(package->name), package); ++ /* set sw source smack rules*/ ++ if ((msmSetupProvides(smack_accesses, package)) < 0 ) { ++ msmCancelPackage(package->name); ++ return -1; ++ } ++ first = package; ++ } ++ if (sw_source && packages) { ++ /* catenate list to sw_source config */ ++ LISTCAT(sw_source->packages, first, packages); ++ } ++ return 0; ++} ++ ++package_x *msmCheckPackage(const char *name) ++{ ++ package_x *package = NULL; ++ ++ if (name) ++ HASH_FIND(hh, allpackages, name, strlen(name), package); ++ ++ return package; ++} ++ ++static void msmCancelACDomain(const char *name) ++{ ++ if (name) { ++ ac_domain_x *domain; ++ HASH_FIND(hh, all_ac_domains, name, strlen(name), domain); ++ if (domain) { ++ HASH_DELETE(hh, all_ac_domains, domain); ++ if (domain->older) { ++ /* resume previous version */ ++ HASH_ADD_KEYPTR(hh, all_ac_domains, domain->older->name, strlen(domain->older->name), domain->older); ++ domain->older->older = domain->older->newer; ++ domain->older->newer = NULL; ++ domain->newer = domain->older; ++ domain->older = NULL; ++ } else { ++ /* no previous, just take this one out */ ++ domain->newer = domain; ++ } ++ } ++ } ++} ++ ++void msmCancelPackage(const char *name) ++{ ++ provide_x *provide; ++ ac_domain_x *ac_domain; ++ ++ if (name) { ++ package_x *package; ++ HASH_FIND(hh, allpackages, name, strlen(name), package); ++ if (package) { ++ HASH_DELETE(hh, allpackages, package); ++ if (package->older) { ++ /* resume previous version */ ++ HASH_ADD_KEYPTR(hh, allpackages, package->older->name, strlen(package->older->name), package->older); ++ package->older->older = package->older->newer; ++ package->older->newer = NULL; ++ package->newer = package->older; ++ package->older = NULL; ++ } else { ++ /* no previous, just take this one out */ ++ package->newer = package; ++ } ++ /* need to clean up the all_ac_domain list, too */ ++ for (provide = package->provides; provide; provide = provide->prev) { ++ for (ac_domain = provide->ac_domains; ac_domain; ac_domain = ac_domain->prev) ++ msmCancelACDomain(ac_domain->name); ++ } ++ } ++ } ++} ++ ++static int is_executable(const char* path, magic_t cookie) ++{ ++ const char* buffer = NULL; ++ int result = -1; ++ char* ptr = NULL; ++ ++ if ((!path) || (!cookie)) ++ return result; ++ ++ buffer = magic_file(cookie, path); ++ ++ rpmlog(RPMLOG_DEBUG, "buffer: %s\n", buffer); ++ ++ if (buffer != NULL) { ++ ptr = strstr(buffer,"executable"); ++ if (ptr) result = 0; ++ ptr = strstr(buffer,"ELF"); ++ if (ptr) result = 0; ++ } ++ ++ return result; ++} ++ ++int msmSetFileXAttributes(manifest_x *mfx, const char* filepath, magic_t cookie) ++{ ++ provide_x *provide = NULL; ++ filesystem_x *filesystem = NULL; ++ size_t len = 0, match = 0; ++ const char *label = NULL; ++ const char *exec_label = NULL; ++ const char *type = NULL; ++ const char isolatedLabel[] = SMACK_ISOLATED_LABEL; ++ struct stat st; ++ ++ if (!filepath) return -1; ++ if (mfx->name) { ++ package_x *package = msmCheckPackage(mfx->name); ++ if (!package) ++ return -1; ++ for (provide = package->provides; provide; provide = provide->prev) { ++ for (filesystem = provide->filesystems; filesystem; filesystem = filesystem->prev) { ++ if (!strcmp(filepath, filesystem->path)) { ++ /* exact match */ ++ label = filesystem->label; ++ exec_label = filesystem->exec_label; ++ if (filesystem->type) type = filesystem->type; ++ goto found; ++ } ++ ++ len = strlen(filesystem->path); ++ rpmlog(RPMLOG_DEBUG, "filesystem->path: %s, length %d\n", filesystem->path, len); ++ rpmlog(RPMLOG_DEBUG, "filesystem->path + len - 1: %s\n", filesystem->path + len - 1); ++ if (len > match) { ++ if ((!strncmp(filepath, filesystem->path, len)) && (filesystem->type)) { ++ /* partial match and the directory marked as transmutable*/ ++ label = filesystem->label; ++ exec_label = filesystem->exec_label; ++ match = len; ++ } ++ if (!strncmp(filesystem->path + len - 1, "*", 1)) { ++ if (!strncmp(filepath, filesystem->path, len - 1)) { ++ /* partial match and the path is marked with wildcard*/ ++ label = filesystem->label; ++ exec_label = filesystem->exec_label; ++ match = len - 1; ++ } ++ } ++ } ++ } ++ } ++ } else ++ return -1; ++ ++ found: ++ if ((!label) || (!exec_label)) { ++ /* no match, use default label of AC domain */ ++ if (mfx->request) { //AC domain is requested in manifest ++ if (mfx->request->ac_domain) { ++ if (!label) label = mfx->request->ac_domain; ++ if (!exec_label) exec_label = mfx->request->ac_domain; ++ } else { ++ rpmlog(RPMLOG_INFO, "Request for AC domain is empty. Can't identify default file label\n"); ++ rpmlog(RPMLOG_INFO, "File will be labelled with the label \"Isolated\"\n"); ++ if (!label) label = isolatedLabel; ++ if (!exec_label) exec_label = isolatedLabel; ++ } ++ } else if (mfx->define) { // AC domain defined in manifest ++ if (mfx->define->name) { ++ if (!label) label = mfx->define->name; ++ if (!exec_label) exec_label = mfx->define->name; ++ } else { ++ rpmlog(RPMLOG_INFO, "Define for AC domain is empty. Can't identify default file label\n"); ++ rpmlog(RPMLOG_INFO, "File will be labelled with the label \"Isolated\"\n"); ++ if (!label) label = isolatedLabel; ++ if (!exec_label) exec_label = isolatedLabel; ++ } ++ } else { // no request or definition of domain ++ rpmlog(RPMLOG_INFO, "Both define and request sections are empty. Can't identify default file label\n"); ++ rpmlog(RPMLOG_INFO, "File will be labelled with the label \"Isolated\"\n"); ++ if (!label) label = isolatedLabel; ++ if (!exec_label) exec_label = isolatedLabel; ++ } ++ } ++ ++ ++ rpmlog(RPMLOG_INFO, "setting SMACK64 %s for %s\n", label, filepath); ++ ++ if (lsetxattr(filepath, SMACK64, label, strlen(label), 0) < 0 ) { ++ rpmlog(RPMLOG_ERR, "Failed to set SMACK64 %s for %s: %s\n", ++ label, filepath, strerror(errno)); ++ } ++ ++ if ((is_executable(filepath, cookie)) == 0) { ++ if ((exec_label) && (strcmp(exec_label, "none") == 0)) { ++ // do not set SMACK64EXEC ++ rpmlog(RPMLOG_INFO, "not setting SMACK64EXEC for %s as requested in manifest\n", filepath); ++ } else { ++ rpmlog(RPMLOG_INFO, "setting SMACK64EXEC %s for %s\n", exec_label, filepath); ++ if (lsetxattr(filepath, SMACK64EXEC, exec_label, strlen(exec_label), 0) < 0 ) { ++ rpmlog(RPMLOG_ERR, "Failed to set SMACK64EXEC %s for %s: %s\n", ++ exec_label, filepath, strerror(errno)); ++ } ++ } ++ } ++ ++ if (type) { //marked as transmutable+ ++ if ((lstat(filepath, &st) != -1) && (S_ISDIR(st.st_mode))) { //check that it is a directory ++ char at_true[] = "TRUE"; ++ rpmlog(RPMLOG_INFO, "setting SMACK64TRANSMUTE %s for %s\n", at_true, filepath); ++ if ( lsetxattr(filepath, SMACK64TRANSMUTE, at_true, strlen(at_true), 0) < 0 ) { ++ rpmlog(RPMLOG_ERR, "Failed to set SMACK64TRANSMUTE %s for %s: %s\n", ++ at_true, filepath, strerror(errno)); ++ } ++ } else { ++ rpmlog(RPMLOG_DEBUG, "No setting up of transmute attr for a non-directory, path %s\n", ++ filepath); ++ } ++ ++ } ++ ++ ++ ++ return 0; ++ ++} ++ ++void msmRemoveRules(struct smack_accesses *smack_accesses, manifest_x *mfx, int SmackEnabled) ++{ ++ provide_x *provide; ++ package_x *package; ++ ++ HASH_FIND(hh, allpackages, mfx->name, strlen(mfx->name), package); ++ if (!package) ++ return; ++ ++ if ((mfx->define) || (mfx->sw_sources)) { ++ /* remove smack rule file and rule set from kernel */ ++ rpmlog(RPMLOG_DEBUG, "removing smack rules for %s\n", mfx->name); ++ msmSetupSmackRules(smack_accesses, mfx->name, SMACK_UNINSTALL, SmackEnabled); ++ } ++ ++ for (provide = mfx->provides; provide; provide = provide->prev) { ++ if (provide->dbuss && !package->older) ++ msmRemoveDBusConfig(package, provide->dbuss); ++ ++ } ++ ++} ++ ++void msmRemoveConfig(manifest_x *mfx) ++{ ++ package_x *package; ++ ++ HASH_FIND(hh, allpackages, mfx->name, strlen(mfx->name), package); ++ if (package) { ++ if (!package->older) { ++ /* set newer to remove from config list */ ++ package->newer = package; ++ rpmlog(RPMLOG_INFO, "removing package for %s\n", mfx->name); ++ } ++ } ++} ++ ++sw_source_x *msmSWSourceTreeTraversal(sw_source_x *sw_sources, int (func)(sw_source_x *, void *), void *param) ++{ ++ sw_source_x *sw_source; ++ ++ if (sw_sources) { ++ LISTHEAD(sw_sources, sw_source); ++ /* sw source tree is actually a list ordered into tree traversal path */ ++ for (; sw_source; sw_source = sw_source->next) ++ if (!sw_source->newer) ++ if (!(func)(sw_source, param)) return sw_source; ++ } ++ return NULL; ++} ++ +diff -Nuarp rpm/security/security.h rpm-security/security/security.h +--- rpm/security/security.h 1970-01-01 02:00:00.000000000 +0200 ++++ rpm-security/security/security.h 2012-10-01 10:29:50.327983644 +0300 +@@ -0,0 +1,26 @@ ++#include "system.h" ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "rpmio/digest.h" ++#include "lib/rpmsecurity.h" ++ ++rpmRC SECURITYHOOK_INIT_FUNC(rpmts ts, const char *opts); ++rpmRC SECURITYHOOK_CLEANUP_FUNC(void); ++rpmRC SECURITYHOOK_PRE_TSM_FUNC(rpmts _ts); ++rpmRC SECURITYHOOK_POST_TSM_FUNC(rpmts _ts); ++rpmRC SECURITYHOOK_PRE_PSM_FUNC(rpmte _te); ++rpmRC SECURITYHOOK_POST_PSM_FUNC(rpmte _te, char * rootDir, int rpmrc); ++rpmRC SECURITYHOOK_SCRIPT_EXEC_FUNC(ARGV_const_t argv); ++rpmRC SECURITYHOOK_FSM_OPENED_FUNC(FSM_t fsm); ++rpmRC SECURITYHOOK_FSM_UPDATED_FUNC(FSM_t fsm); ++rpmRC SECURITYHOOK_FSM_CLOSED_FUNC(FSM_t fsm, int rpmrc); ++rpmRC SECURITYHOOK_FSM_DIR_LABEL_FUNC(FSM_t fsm, int rpmrc); ++rpmRC SECURITYHOOK_VERIFY_FUNC(rpmKeyring keyring, rpmtd sigtd, ++ pgpDig dig, rpmRC rpmrc); ++rpmRC SECURITYHOOK_FILE_CONFLICT_FUNC(rpmts ts, rpmte te, rpmfi fi, ++ Header oldHeader, rpmfi oldFi, int rpmrc); diff --git a/platform.in b/platform.in new file mode 100644 index 0000000..a04d8fc --- /dev/null +++ b/platform.in @@ -0,0 +1,145 @@ +# Per-platform rpm configuration file. + +#============================================================================== +# ---- per-platform macros. +# +%_arch @RPMCANONARCH@ +%_vendor @RPMCANONVENDOR@ +%_os @RPMCANONOS@ +%_gnu @RPMRC_GNU@ +%_target_platform %{_target_cpu}-%{_vendor}-%{_target_os} +%optflags @RPMRC_OPTFLAGS@ + +%__isa_name @ISANAME@ +%__isa_bits @ISABITS@ +%__isa %{__isa_name}-%{__isa_bits} + +#============================================================================== +# ---- configure macros. +# +%_prefix @prefix@ +%_exec_prefix @exec_prefix@ +%_bindir @bindir@ +%_sbindir @sbindir@ +%_libexecdir @libexecdir@ +%_datarootdir @datarootdir@ +%_datadir @datadir@ +%_sysconfdir @sysconfdir@ +%_sharedstatedir @sharedstatedir@ +%_localstatedir @localstatedir@ +%_lib @LIB@ +%_libdir @exec_prefix@/@LIB@ +%_includedir @includedir@ +%_oldincludedir @oldincludedir@ +%_infodir @infodir@ +%_mandir @mandir@ +%_initddir %{_sysconfdir}/rc.d/init.d +# Deprecated misspelling, present for backwards compatibility. +%_initrddir %{_initddir} + +%_defaultdocdir %{_datadir}/doc + +%_smp_mflags %([ -z "$RPM_BUILD_NCPUS" ] \\\ + && RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"; \\\ + [ "$RPM_BUILD_NCPUS" -gt 1 ] && echo "-j$RPM_BUILD_NCPUS") + +#============================================================================== +# ---- Build policy macros. +# +#--------------------------------------------------------------------- +# Expanded at end of %install scriptlet. +# + +%__arch_install_post @ARCH_INSTALL_POST@ + +%__os_install_post \ + %{_rpmconfigdir}/brp-compress \ + %{_rpmconfigdir}/brp-strip %{__strip} \ + %{_rpmconfigdir}/brp-strip-static-archive %{__strip} \ + %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump} \ +%{nil} + +%__spec_install_post\ + %{?__debug_package:%{__debug_install_post}}\ + %{__arch_install_post}\ + %{__os_install_post}\ +%{nil} + +@redhat@#--------------------------------------------------------------------- +@redhat@# Expanded at end of %prep +@redhat@# +@redhat@%_fixperms %{__chmod} -Rf @FIXPERMS@ +@redhat@#--------------------------------------------------------------------- +@redhat@# Always use %defattr(-,root,root) in %files (added in rpm-4.0.4) +@redhat@# +@redhat@#%files(n:f:) %%files%{?-f: -f %{-f*}}%{?-n: -n %{-n*}} %{?1}\ +@redhat@#%defattr(-,root,root,-)\ +@redhat@#%{nil} + + +@apple@#--------------------------------------------------------------------- +@apple@# Apple Darwin vendor specific macros +@apple@# +@apple@%_use_internal_dependency_generator 0 +@apple@%__so dylib + + +@mandrake@#--------------------------------------------------------------------- +@mandrake@# Mandrake vendor specific macros +@mandrake@# XXX Add a support e-mail address here, please. +@mandrake@# +@mandrake@# XXX These values, particularly vendor, need to be regularized, please. +@mandrake@%_vendor MandrakeSoft +@mandrake@%_real_vendor mandrake +@mandrake@%_target_platform %{_target_cpu}-%{_real_vendor}-%{_target_os} +@mandrake@ +@mandrake@# XXX I'll make these the default linux values soon as I can. +@mandrake@%_libexecdir %{_libdir} +@mandrake@%_localstatedir %{_var}/lib +@mandrake@ +@mandrake@# XXX A copy of brp-mandrake, please. I'd suggest break down by +@mandrake@# functionality rather than vendor . +@mandrake@%__os_install_post \ +@mandrake@ %{_rpmconfigdir}/brp-mandrake \ +@mandrake@%{nil} +@mandrake@ +@mandrake@# make +@mandrake@%_make_bin make +@mandrake@%make if [ -z "$NPROCS" -a -f /proc/stat ]; then NPROCS=`grep -Ec ^cpu[0-9]+ /proc/stat || :`; fi \ +@mandrake@if [ -z "$NPROCS" -o "$NPROCS" -le "0" ]; then \ +@mandrake@ NPROCS=1 \ +@mandrake@fi \ +@mandrake@%{_make_bin} -j$NPROCS +@mandrake@ +@mandrake@# Menu directories +@mandrake@%_menudir %{_libdir}/menu +@mandrake@%_iconsdir %{_datadir}/icons +@mandrake@%_miconsdir %{_datadir}/icons/mini +@mandrake@%_liconsdir %{_datadir}/icons/large +@mandrake@ +@mandrake@# Update Menu +@mandrake@%_update_menus_bin %{_bindir}/update-menus +@mandrake@%update_menus if [ -x %{_update_menus_bin} ]; then %{_update_menus_bin} || true ; fi +@mandrake@ +@mandrake@# Clean Menu +@mandrake@%clean_menus if [ "$1" = "0" -a -x %{_update_menus_bin} ]; then %{_update_menus_bin} || true ; fi +@mandrake@ +@mandrake@# Update Window Managers session. +@mandrake@%_fndsession_bin %{_sbindir}/fndSession +@mandrake@%make_session if [ -x %{_fndsession_bin} ]; then %{_fndsession_bin} || true ; fi +@mandrake@ +@mandrake@# Where install-info is located +@mandrake@%__install_info /sbin/install-info +@mandrake@ +@mandrake@# Macros to install info-files. +@mandrake@%_install_info() %{__install_info} %{_infodir}/%{1}%{_extension} --dir=%{_infodir}/dir\; +@mandrake@ +@mandrake@# Macros to remove info-files. (keep the "alone on its line ';'") +@mandrake@%_remove_install_info() if [ "$1" = "0" ]; then %{__install_info} \\\ +@mandrake@ %{_infodir}/%{1}%{_extension} --dir=%{_infodir}/dir --remove ; fi\ +@mandrake@%{nil} +@mandrake@ +@mandrake@# Games macros +@mandrake@%_gamesdir games +@mandrake@%_gamesbindir %{_prefix}/%{_gamesdir} +@mandrake@%_gamesdatadir %{_datadir}/%{_gamesdir} diff --git a/plugins/Makefile.am b/plugins/Makefile.am new file mode 100644 index 0000000..69230de --- /dev/null +++ b/plugins/Makefile.am @@ -0,0 +1,23 @@ +# Makefile for rpm library. + +include $(top_srcdir)/rpm.am + +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/ +AM_CPPFLAGS += -I$(top_srcdir)/misc +AM_CPPFLAGS += -DLOCALEDIR="\"$(localedir)\"" +AM_CPPFLAGS += -DSYSCONFDIR="\"$(sysconfdir)\"" +AM_CPPFLAGS += -DLOCALSTATEDIR="\"$(localstatedir)\"" +AM_CPPFLAGS += -DLIBRPMALIAS_FILENAME="\"rpmpopt-${VERSION}\"" + +AM_LDFLAGS = -avoid-version -module -shared + +pluginsdir = $(libdir)/rpm-plugins + +plugins_LTLIBRARIES = exec.la sepolicy.la + +exec_la_SOURCES = plugin.h exec.c +exec_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la + +sepolicy_la_SOURCES = plugin.h sepolicy.c +sepolicy_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la @WITH_SELINUX_LIB@ @WITH_SEMANAGE_LIB@ + diff --git a/plugins/Makefile.in b/plugins/Makefile.in new file mode 100644 index 0000000..1fb6b98 --- /dev/null +++ b/plugins/Makefile.in @@ -0,0 +1,658 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile for rpm library. + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/rpm.am +subdir = plugins +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pluginsdir)" +LTLIBRARIES = $(plugins_LTLIBRARIES) +exec_la_DEPENDENCIES = $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la +am_exec_la_OBJECTS = exec.lo +exec_la_OBJECTS = $(am_exec_la_OBJECTS) +sepolicy_la_DEPENDENCIES = $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la +am_sepolicy_la_OBJECTS = sepolicy.lo +sepolicy_la_OBJECTS = $(am_sepolicy_la_OBJECTS) +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(exec_la_SOURCES) $(sepolicy_la_SOURCES) +DIST_SOURCES = $(exec_la_SOURCES) $(sepolicy_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Internal binaries +rpmlibexecdir = $(prefix)/lib/rpm + +# Host independent config files +rpmconfigdir = $(prefix)/lib/rpm +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ + -I$(top_builddir)/include/ -I$(top_srcdir)/misc \ + -DLOCALEDIR="\"$(localedir)\"" \ + -DSYSCONFDIR="\"$(sysconfdir)\"" \ + -DLOCALSTATEDIR="\"$(localstatedir)\"" \ + -DLIBRPMALIAS_FILENAME="\"rpmpopt-${VERSION}\"" +AM_LDFLAGS = -avoid-version -module -shared +pluginsdir = $(libdir)/rpm-plugins +plugins_LTLIBRARIES = exec.la sepolicy.la +exec_la_SOURCES = plugin.h exec.c +exec_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la +sepolicy_la_SOURCES = plugin.h sepolicy.c +sepolicy_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la @WITH_SELINUX_LIB@ @WITH_SEMANAGE_LIB@ +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/rpm.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign plugins/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign plugins/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pluginsLTLIBRARIES: $(plugins_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pluginsdir)" || $(MKDIR_P) "$(DESTDIR)$(pluginsdir)" + @list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pluginsdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pluginsdir)"; \ + } + +uninstall-pluginsLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(plugins_LTLIBRARIES)'; test -n "$(pluginsdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pluginsdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pluginsdir)/$$f"; \ + done + +clean-pluginsLTLIBRARIES: + -test -z "$(plugins_LTLIBRARIES)" || rm -f $(plugins_LTLIBRARIES) + @list='$(plugins_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +exec.la: $(exec_la_OBJECTS) $(exec_la_DEPENDENCIES) + $(LINK) -rpath $(pluginsdir) $(exec_la_OBJECTS) $(exec_la_LIBADD) $(LIBS) +sepolicy.la: $(sepolicy_la_OBJECTS) $(sepolicy_la_DEPENDENCIES) + $(LINK) -rpath $(pluginsdir) $(sepolicy_la_OBJECTS) $(sepolicy_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepolicy.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(pluginsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginsLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginsLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginsLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pluginsLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pluginsLTLIBRARIES \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-pluginsLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/plugins/exec.c b/plugins/exec.c new file mode 100644 index 0000000..49a4cae --- /dev/null +++ b/plugins/exec.c @@ -0,0 +1,51 @@ +#include "plugin.h" + +#include + +static char * options; +static char * name; + +rpmPluginHook PLUGIN_HOOKS = \ + PLUGINHOOK_INIT | \ + PLUGINHOOK_CLEANUP | \ + PLUGINHOOK_COLL_POST_ANY; + +rpmRC PLUGINHOOK_INIT_FUNC(rpmts ts, const char *name, const char *opts) +{ + options = strdup(opts); + name = strdup(name); + return RPMRC_OK; +} + +rpmRC PLUGINHOOK_CLEANUP_FUNC(void) +{ + options = _free(options); + name = _free(name); + return RPMRC_OK; +} + +rpmRC PLUGINHOOK_COLL_POST_ANY_FUNC(void) +{ + rpmRC rc = RPMRC_FAIL; + + if (rpmChrootIn()) { + goto exit; + } + + if (options) { + int status = system(options); + if (!WIFEXITED(status) || WEXITSTATUS(status)) { + rpmlog(RPMLOG_ERR, "%s collection action failed\n", name); + goto exit; + } + } + + rc = RPMRC_OK; + + exit: + if (rpmChrootOut()) { + rc = RPMRC_FAIL; + } + + return rc; +} diff --git a/plugins/plugin.h b/plugins/plugin.h new file mode 100644 index 0000000..5156f93 --- /dev/null +++ b/plugins/plugin.h @@ -0,0 +1,15 @@ +#include "system.h" + +#include +#include +#include + +#include "lib/rpmplugins.h" +#include "lib/rpmchroot.h" + +rpmRC PLUGINHOOK_INIT_FUNC(rpmts ts, const char * name, const char * opts); +rpmRC PLUGINHOOK_CLEANUP_FUNC(void); +rpmRC PLUGINHOOK_OPENTE_FUNC(rpmte te); +rpmRC PLUGINHOOK_COLL_POST_ANY_FUNC(void); +rpmRC PLUGINHOOK_COLL_POST_ADD_FUNC(void); +rpmRC PLUGINHOOK_COLL_PRE_REMOVE_FUNC(void); diff --git a/plugins/sepolicy.c b/plugins/sepolicy.c new file mode 100644 index 0000000..7f8ba5d --- /dev/null +++ b/plugins/sepolicy.c @@ -0,0 +1,680 @@ +#include "plugin.h" + +#if WITH_SELINUX + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "rpmio/base64.h" +#include "lib/rpmte_internal.h" +#include "lib/rpmts_internal.h" /* rpmtsSELabelFoo() */ + +rpmPluginHook PLUGIN_HOOKS = \ + PLUGINHOOK_INIT | \ + PLUGINHOOK_CLEANUP | \ + PLUGINHOOK_OPENTE | \ + PLUGINHOOK_COLL_POST_ADD | \ + PLUGINHOOK_COLL_PRE_REMOVE; + +typedef enum sepolAction { + SEPOL_ACTION_IGNORE, + SEPOL_ACTION_INSTALL, + SEPOL_ACTION_REMOVE +} sepolAction; + +typedef struct sepol { + char *data; /*!< policy data */ + char *name; /*!< policy names */ + ARGV_t types; /*!< policy types */ + uint32_t flags; /*!< policy flags */ + sepolAction action; /*!< install/remove/ignore */ + struct sepol *next; /*!< next in linked list */ +} sepol; + +typedef struct sepoltrans { + int execsemodule; /*!< 0 = use libsemanage to install policy; non-zero = use semodule */ + semanage_handle_t *sh; /*!< handle to libsemanage, only used when execsemodule is zero */ + char *semodulepath; /*!< path to semodule binary */ + ARGV_t semodargs; /*!< argument list to pass to semodule, only used when execsemodule is non-zero */ + ARGV_t filelist; /*!< list of temporary files that have been written to disk during the transaction */ + int changes; /*!< number of changes made during the transaction */ +} sepoltrans; + + +static char * name; +static rpmts ts; + +static sepol * policiesHead; +static sepol * policiesTail; + + +static sepol *sepolNew(rpmte te); +static sepol *sepolFree(sepol * pol); +static int sepolHasType(const sepol * pol, const char *type); + +static rpmRC sepolPreparePolicies(sepol * pols, const char *policytype); +static rpmRC sepolWritePolicy(const sepol * pol, char **path); +static rpmRC sepolLoadPolicies(const sepol * pols); + +static sepoltrans *sepoltransNew(void); +static sepoltrans *sepoltransFree(sepoltrans * pt); + +static rpmRC sepoltransInstall(sepoltrans * pt, const sepol * pol); +static rpmRC sepoltransRemove(sepoltrans * pt, const sepol * pol); +static rpmRC sepoltransCommit(sepoltrans * pt); + + +static sepol *sepolNew(rpmte te) +{ + sepol *head = NULL; + sepol *ret = NULL; + sepolAction action; + Header h; + struct rpmtd_s policies, names, types, typesidx, flags; + int i, j; + int count; + + rpmtdReset(&policies); + rpmtdReset(&names); + rpmtdReset(&types); + rpmtdReset(&typesidx); + rpmtdReset(&flags); + + h = rpmteHeader(te); + if (!h) { + goto exit; + } + + if (!headerIsEntry(h, RPMTAG_POLICIES)) { + goto exit; + } + + if (!headerGet(h, RPMTAG_POLICIES, &policies, HEADERGET_MINMEM)) { + goto exit; + } + + count = rpmtdCount(&policies); + if (count <= 0) { + goto exit; + } + + if (!headerGet(h, RPMTAG_POLICYNAMES, &names, HEADERGET_MINMEM) + || rpmtdCount(&names) != count) { + goto exit; + } + + if (!headerGet(h, RPMTAG_POLICYFLAGS, &flags, HEADERGET_MINMEM) + || rpmtdCount(&flags) != count) { + goto exit; + } + + if (!headerGet(h, RPMTAG_POLICYTYPES, &types, HEADERGET_MINMEM)) { + goto exit; + } + + if (!headerGet(h, RPMTAG_POLICYTYPESINDEXES, &typesidx, HEADERGET_MINMEM) + || rpmtdCount(&types) != rpmtdCount(&typesidx)) { + goto exit; + } + + action = (rpmteType(te) == TR_ADDED) ? SEPOL_ACTION_INSTALL : SEPOL_ACTION_REMOVE; + + for (i = 0; i < count; i++) { + sepol *pol = xcalloc(1, sizeof(*pol)); + pol->next = head; + head = pol; + + pol->data = xstrdup(rpmtdNextString(&policies)); + pol->name = xstrdup(rpmtdNextString(&names)); + pol->flags = *rpmtdNextUint32(&flags); + pol->action = action; + + for (j = 0; j < rpmtdCount(&types); j++) { + uint32_t index = ((uint32_t *) typesidx.data)[j]; + if (index < 0 || index >= count) { + goto exit; + } + if (index != i) { + continue; + } + argvAdd(&pol->types, rpmtdNextString(&types)); + } + argvSort(pol->types, NULL); + } + + ret = head; + + exit: + headerFree(h); + + rpmtdFreeData(&policies); + rpmtdFreeData(&names); + rpmtdFreeData(&types); + rpmtdFreeData(&typesidx); + rpmtdFreeData(&flags); + + if (!ret) { + sepolFree(head); + } + + return ret; +} + +static sepol *sepolFree(sepol * pol) +{ + while (pol) { + sepol *next = pol->next; + + pol->data = _free(pol->data); + pol->name = _free(pol->name); + pol->types = argvFree(pol->types); + pol->next = NULL; + _free(pol); + + pol = next; + } + + return NULL; +} + +int sepolHasType(const sepol * pol, const char *type) +{ + if (!pol || !type) { + return 0; + } + + return (argvSearch(pol->types, type, NULL) != NULL) || + (argvSearch(pol->types, RPMPOL_TYPE_DEFAULT, NULL) != NULL); +} + +static rpmRC sepolPreparePolicies(sepol * pols, const char *policytype) +{ + sepol *pol; + rpmRC rc = RPMRC_OK; + + for (pol = pols; pol; pol = pol->next) { + if (!sepolHasType(pol, policytype)) { + pol->action = SEPOL_ACTION_IGNORE; + } + } + + return rc; +} + +static rpmRC sepolWritePolicy(const sepol * pol, char **path) +{ + char *tmppath = NULL; + FD_t fd = NULL; + char *policy = NULL; + size_t policylen; + rpmRC rc = RPMRC_FAIL; + + if (b64decode(pol->data, (void **) &policy, &policylen) != 0) { + rpmlog(RPMLOG_ERR, _("Failed to decode policy for %s\n"), + pol->name); + goto exit; + } + + fd = rpmMkTempFile(NULL, &tmppath); + if (fd == NULL || Ferror(fd)) { + rpmlog(RPMLOG_ERR, _("Failed to create temporary file for %s: %s\n"), + pol->name, strerror(errno)); + goto exit; + } + + if (!Fwrite(policy, sizeof(*policy), policylen, fd)) { + rpmlog(RPMLOG_ERR, _("Failed to write %s policy to file %s\n"), + pol->name, tmppath); + goto exit; + } + + *path = tmppath; + rc = RPMRC_OK; + + exit: + if (fd) + Fclose(fd); + _free(policy); + if (rc != RPMRC_OK) + _free(tmppath); + + return rc; +} + +static rpmRC sepolLoadPolicies(const sepol * pols) +{ + const sepol *pol; + sepoltrans *pt; + rpmRC rc = RPMRC_FAIL; + + pt = sepoltransNew(); + if (!pt) { + rc = RPMRC_FAIL; + goto err; + } + + for (pol = pols; pol; pol = pol->next) { + switch (pol->action) { + case SEPOL_ACTION_REMOVE: + rc = sepoltransRemove(pt, pol); + break; + case SEPOL_ACTION_INSTALL: + rc = sepoltransInstall(pt, pol); + break; + case SEPOL_ACTION_IGNORE: + default: + rc = RPMRC_OK; + break; + } + + if (rc != RPMRC_OK) { + goto err; + } + } + + rc = sepoltransCommit(pt); + if (rc != RPMRC_OK) { + goto err; + } + + err: + pt = sepoltransFree(pt); + + return rc; +} + +static sepoltrans *sepoltransNew(void) +{ + sepoltrans *pt = xcalloc(1, sizeof(*pt)); + pt->semodulepath = rpmExpand("%{__semodule}", NULL); + pt->execsemodule = (!rpmChrootDone() && access(pt->semodulepath, X_OK) == 0); + pt->changes = 0; + + if (pt->execsemodule) { + argvAdd(&pt->semodargs, "semodule"); + } else { + pt->sh = semanage_handle_create(); + if (!pt->sh) { + rpmlog(RPMLOG_ERR, _("Failed to create semanage handle\n")); + goto err; + } + semanage_set_create_store(pt->sh, 1); + semanage_set_check_contexts(pt->sh, 0); + if (semanage_connect(pt->sh) < 0) { + rpmlog(RPMLOG_ERR, _("Failed to connect to policy handler\n")); + goto err; + } + if (semanage_begin_transaction(pt->sh) < 0) { + rpmlog(RPMLOG_ERR, _("Failed to begin policy transaction: %s\n"), + errno ? strerror(errno) : ""); + goto err; + } + semanage_set_reload(pt->sh, !rpmChrootDone()); + } + + return pt; + + err: + if (pt->sh) { + if (semanage_is_connected(pt->sh)) { + semanage_disconnect(pt->sh); + } + semanage_handle_destroy(pt->sh); + } + pt = _free(pt); + + return pt; +} + +static sepoltrans *sepoltransFree(sepoltrans * pt) +{ + ARGV_t file; + + if (!pt) { + return NULL; + } + + for (file = pt->filelist; file && *file; file++) { + if (unlink(*file) < 0) { + rpmlog(RPMLOG_WARNING, _("Failed to remove temporary policy file %s: %s\n"), + *file, strerror(errno)); + } + } + argvFree(pt->filelist); + + if (pt->execsemodule) { + argvFree(pt->semodargs); + } else { + semanage_disconnect(pt->sh); + semanage_handle_destroy(pt->sh); + } + + pt->semodulepath = _free(pt->semodulepath); + + pt = _free(pt); + return NULL; +} + +static rpmRC sepoltransInstall(sepoltrans * pt, const sepol * pol) +{ + rpmRC rc = RPMRC_OK; + char *path = NULL; + + rc = sepolWritePolicy(pol, &path); + if (rc != RPMRC_OK) { + return rc; + } + argvAdd(&pt->filelist, path); + + if (pt->execsemodule) { + const char *flag = (pol->flags & RPMPOL_FLAG_BASE) ? "-b" : "-i"; + if (argvAdd(&pt->semodargs, flag) < 0 || argvAdd(&pt->semodargs, path) < 0) { + rc = RPMRC_FAIL; + } + } else { + if (pol->flags & RPMPOL_FLAG_BASE) { + if (semanage_module_install_base_file(pt->sh, path) < 0) { + rc = RPMRC_FAIL; + } + } else { + if (semanage_module_install_file(pt->sh, path) < 0) { + rc = RPMRC_FAIL; + } + } + } + + if (rc != RPMRC_OK) { + rpmlog(RPMLOG_ERR, _("Failed to install policy module: %s (%s)\n"), + pol->name, path); + } else { + pt->changes++; + } + + _free(path); + + return rc; +} + +static rpmRC sepoltransRemove(sepoltrans * pt, const sepol * pol) +{ + rpmRC rc = RPMRC_OK; + + if (pol->flags & RPMPOL_FLAG_BASE) { + return RPMRC_FAIL; + } + + if (pt->execsemodule) { + if (argvAdd(&pt->semodargs, "-r") < 0 || argvAdd(&pt->semodargs, pol->name) < 0) { + rc = RPMRC_FAIL; + } + } else { + if (semanage_module_remove(pt->sh, (char *) pol->name) < 0) { + rc = RPMRC_FAIL; + } + } + + if (rc != RPMRC_OK) { + rpmlog(RPMLOG_ERR, _("Failed to remove policy module: %s\n"), + pol->name); + } else { + pt->changes++; + } + + return rc; +} + +static rpmRC sepoltransCommit(sepoltrans * pt) +{ + rpmRC rc = RPMRC_OK; + + if (pt->changes == 0) { + return rc; + } + + if (pt->execsemodule) { + int status; + pid_t pid = fork(); + int fd; + + switch (pid) { + case -1: + rpmlog(RPMLOG_ERR, _("Failed to fork process: %s\n"), + strerror(errno)); + rc = RPMRC_FAIL; + break; + case 0: + fd = open("/dev/null", O_RDWR); + dup2(fd, STDIN_FILENO); + dup2(fd, STDOUT_FILENO); + dup2(fd, STDERR_FILENO); + execv(pt->semodulepath, pt->semodargs); + rpmlog(RPMLOG_ERR, _("Failed to execute %s: %s\n"), + pt->semodulepath, strerror(errno)); + exit(1); + default: + waitpid(pid, &status, 0); + if (!WIFEXITED(status)) { + rpmlog(RPMLOG_ERR, _("%s terminated abnormally\n"), + pt->semodulepath); + rc = RPMRC_FAIL; + } else if (WEXITSTATUS(status)) { + rpmlog(RPMLOG_ERR, _("%s failed with exit code %i\n"), + pt->semodulepath, WEXITSTATUS(status)); + rc = RPMRC_FAIL; + } + } + } else { + if (semanage_commit(pt->sh) < 0) { + rpmlog(RPMLOG_ERR, _("Failed to commit policy changes\n")); + rc = RPMRC_FAIL; + } + } + + return rc; +} + +static rpmRC sepolRelabelFiles(void) +{ + rpmRC rc = RPMRC_OK; + pid_t pid; + int fd; + int status; + char *restoreconPath = rpmExpand("%{__restorecon}", NULL); + + if (!restoreconPath) { + rpmlog(RPMLOG_ERR, _("Failed to expand restorecon path")); + return RPMRC_FAIL; + } + + /* execute restorecon -R / */ + pid = fork(); + switch (pid) { + case -1: + rpmlog(RPMLOG_ERR, _("Failed to fork process: %s\n"), + strerror(errno)); + rc = RPMRC_FAIL; + break; + case 0: + fd = open("/dev/null", O_RDWR); + dup2(fd, STDIN_FILENO); + dup2(fd, STDOUT_FILENO); + dup2(fd, STDERR_FILENO); + execl(restoreconPath, "restorecon", "-R", "/", NULL); + rpmlog(RPMLOG_ERR, _("Failed to execute %s: %s\n"), restoreconPath, + strerror(errno)); + exit(1); + default: + waitpid(pid, &status, 0); + if (!WIFEXITED(status)) { + rpmlog(RPMLOG_ERR, _("%s terminated abnormally\n"), + restoreconPath); + rc = RPMRC_FAIL; + } else if (WEXITSTATUS(status)) { + rpmlog(RPMLOG_ERR, _("%s failed with exit code %i\n"), + restoreconPath, WEXITSTATUS(status)); + rc = RPMRC_FAIL; + } + } + + _free(restoreconPath); + + return rc; +} + +static rpmRC sepolGo() +{ + semanage_handle_t *sh; + int existingPolicy; + char *policytype = NULL; + rpmRC rc = RPMRC_FAIL; + + static int performed = 0; + if (performed) { + return RPMRC_OK; + } + performed = 1; + + if (rpmChrootIn()) { + goto exit; + } + + if (selinux_getpolicytype(&policytype) < 0) { + goto exit; + } + + sepolPreparePolicies(policiesHead, policytype); + + /* determine if this is the first time installing policy */ + sh = semanage_handle_create(); + existingPolicy = (semanage_is_managed(sh) == 1); + semanage_handle_destroy(sh); + + /* now load the policies */ + rc = sepolLoadPolicies(policiesHead); + + /* re-init selinux and re-read the files contexts, since things may have changed */ + selinux_reset_config(); + if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOCONTEXTS)) { + if (rpmtsSELabelInit(ts, selinux_file_context_path()) == RPMRC_OK) { + /* if this was the first time installing policy, every package before + * policy was installed will be mislabeled (e.g. semodule). So, relabel + * the entire filesystem if this is the case */ + if (!existingPolicy) { + if (sepolRelabelFiles() != RPMRC_OK) { + rpmlog(RPMLOG_WARNING, _("Failed to relabel filesystem. Files may be mislabeled\n")); + } + } + } else { + rpmlog(RPMLOG_WARNING, _("Failed to reload file contexts. Files may be mislabeled\n")); + } + } + + exit: + if (rpmChrootOut()) { + rc = RPMRC_FAIL; + } + + _free(policytype); + + return rc; +} + +static rpmRC sepolAddTE(rpmte te) +{ + sepol *pol; + sepol *polTail; + + if (!rpmteHasCollection(te, name)) { + return RPMRC_OK; + } + + pol = sepolNew(te); + if (!pol) { + /* something's wrong with the policy information, either missing or + * corrupt. abort */ + rpmlog(RPMLOG_ERR, _("Failed to extract policy from %s\n"), + rpmteNEVRA(te)); + return RPMRC_FAIL; + } + + /* find the tail of pol */ + polTail = pol; + while (polTail->next) { + polTail = polTail->next; + } + + /* add the new policy to the list */ + if (!policiesHead) { + policiesHead = pol; + policiesTail = polTail; + } else { + if (rpmteType(te) == TR_ADDED) { + /* add to the end of the list */ + policiesTail->next = pol; + policiesTail = polTail; + } else { + /* add to the beginning of the list */ + polTail->next = policiesHead; + policiesHead = pol; + } + } + + return RPMRC_OK; +} + +#endif /* WITH_SELINUX */ + + +rpmRC PLUGINHOOK_INIT_FUNC(rpmts _ts, const char *_name, const char *_opts) +{ +#if WITH_SELINUX + ts = _ts; + name = strdup(_name); + policiesHead = policiesTail = NULL; +#endif + return RPMRC_OK; +} + +rpmRC PLUGINHOOK_CLEANUP_FUNC(void) +{ +#if WITH_SELINUX + _free(name); + ts = NULL; + policiesHead = policiesTail = sepolFree(policiesHead); +#endif + return RPMRC_OK; +} + +rpmRC PLUGINHOOK_OPENTE_FUNC(rpmte te) +{ + rpmRC rc = RPMRC_OK; +#if WITH_SELINUX + rc = sepolAddTE(te); +#endif + return rc; +} + +rpmRC PLUGINHOOK_COLL_POST_ADD_FUNC(void) +{ + rpmRC rc = RPMRC_OK; +#if WITH_SELINUX + rc = sepolGo(); +#endif + return rc; +} + +rpmRC PLUGINHOOK_COLL_PRE_REMOVE_FUNC(void) +{ + rpmRC rc = RPMRC_OK; +#if WITH_SELINUX + rc = sepolGo(); +#endif + return rc; +} diff --git a/po/ChangeLog b/po/ChangeLog new file mode 100644 index 0000000..bc697cb --- /dev/null +++ b/po/ChangeLog @@ -0,0 +1,6 @@ +2002-02-10 gettextize + + * Makefile.in.in: Upgrade to gettext-0.10.40. + * cat-id-tbl.c: Remove file. + * stamp-cat-id: Remove file. + diff --git a/po/LINGUAS b/po/LINGUAS new file mode 100644 index 0000000..4bb5196 --- /dev/null +++ b/po/LINGUAS @@ -0,0 +1 @@ +ca cs da de es fi fr is it ja ko ms nb nl pl pt pt_BR ru sk sl sr sr@latin sv tr zh_TW diff --git a/po/Makefile.in.in b/po/Makefile.in.in new file mode 100644 index 0000000..5022b8b --- /dev/null +++ b/po/Makefile.in.in @@ -0,0 +1,403 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.16 + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datarootdir = @datarootdir@ +datadir = @datadir@ +localedir = @localedir@ +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# @install_sh@ does not start with $(SHELL), so we add it. +# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) @install_sh@ -d +install_sh = $(SHELL) @install_sh@ +MKDIR_P = @MKDIR_P@ +mkdir_p = @mkdir_p@ + +GMSGFMT_ = @GMSGFMT@ +GMSGFMT_no = @GMSGFMT@ +GMSGFMT_yes = @GMSGFMT_015@ +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = @MSGFMT@ +MSGFMT_no = @MSGFMT@ +MSGFMT_yes = @MSGFMT_015@ +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = @XGETTEXT@ +XGETTEXT_no = @XGETTEXT@ +XGETTEXT_yes = @XGETTEXT_015@ +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) +MSGMERGE = msgmerge +MSGMERGE_UPDATE = @MSGMERGE@ --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-@USE_NLS@ + +all-yes: stamp-po +all-no: + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + $(mkdir_p) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + $(mkdir_p) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && $(SHELL) ./config.status $(subdir)/$@.in po-directories + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/po/Makevars b/po/Makevars new file mode 100644 index 0000000..32692ab --- /dev/null +++ b/po/Makevars @@ -0,0 +1,41 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..b6df9a8 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,94 @@ +# List of files which contain translatable strings. + +# Package source files + +cliutils.c +rpm2cpio.c +rpmqv.c +rpmbuild.c +rpmdb.c +rpmkeys.c +rpmsign.c +rpmspec.c +build/build.c +build/expression.c +build/files.c +build/misc.c +build/pack.c +build/parseBuildInstallClean.c +build/parseChangelog.c +build/parseDescription.c +build/parseFiles.c +build/parsePolicies.c +build/parsePreamble.c +build/parsePrep.c +build/parseReqs.c +build/parseScript.c +build/parseSpec.c +build/policies.c +build/reqprov.c +build/rpmfc.c +build/spec.c +lib/cpio.c +lib/depends.c +lib/formats.c +lib/fsm.c +lib/legacy.c +lib/manifest.c +lib/misc.c +lib/order.c +lib/package.c +lib/poptALL.c +lib/poptI.c +lib/poptQV.c +lib/psm.c +lib/query.c +lib/rpmal.c +lib/rpmchecksig.c +lib/rpmchroot.c +lib/rpmds.c +lib/rpmfi.c +lib/rpmgi.c +lib/rpminstall.c +lib/rpmlead.c +lib/rpmlock.c +lib/rpmplugins.c +lib/rpmprob.c +lib/rpmps.c +lib/rpmrc.c +lib/rpmscript.c +lib/rpmtd.c +lib/rpmte.c +lib/rpmts.c +lib/rpmvercmp.c +lib/signature.c +lib/transaction.c +lib/verify.c +lib/fprint.c +lib/header.c +lib/headerfmt.c +lib/merge.c +lib/rpmdb.c +lib/tagexts.c +lib/tagname.c +lib/backend/db3.c +lib/backend/dbconfig.c +plugins/exec.c +plugins/sepolicy.c +python/rpmts-py.c +rpmio/argv.c +rpmio/digest.c +rpmio/macro.c +rpmio/rpmfileutil.c +rpmio/rpmlua.c +rpmio/rpmio.c +rpmio/rpmlog.c +rpmio/rpmmalloc.c +rpmio/rpmpgp.c +rpmio/rpmstring.c +rpmio/rpmsq.c +rpmio/rpmsw.c +rpmio/url.c +sign/rpmgensig.c +tools/rpmdeps.c +tools/rpmgraph.c diff --git a/po/Rules-quot b/po/Rules-quot new file mode 100644 index 0000000..9c2a995 --- /dev/null +++ b/po/Rules-quot @@ -0,0 +1,47 @@ +# Special Makefile rules for English message catalogs with quotation marks. + +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot + +.SUFFIXES: .insert-header .po-update-en + +en@quot.po-create: + $(MAKE) en@quot.po-update +en@boldquot.po-create: + $(MAKE) en@boldquot.po-update + +en@quot.po-update: en@quot.po-update-en +en@boldquot.po-update: en@boldquot.po-update-en + +.insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +en@quot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header + +en@boldquot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header + +mostlyclean: mostlyclean-quot +mostlyclean-quot: + rm -f *.insert-header diff --git a/po/boldquot.sed b/po/boldquot.sed new file mode 100644 index 0000000..4b937aa --- /dev/null +++ b/po/boldquot.sed @@ -0,0 +1,10 @@ +s/"\([^"]*\)"/“\1â€/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“â€/""/g +s/“/“/g +s/â€/â€/g +s/‘/‘/g +s/’/’/g diff --git a/po/ca.gmo b/po/ca.gmo new file mode 100644 index 0000000..d9cb6d5 Binary files /dev/null and b/po/ca.gmo differ diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..97276a0 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,4497 @@ +# Catalan translation of rpm +# Copyright (C) 2007 Free Software Foundation +# This file is distributed under the same license as the rpm package. +# Xavier Conde Rueda , 2007. +# Asef Eid , 2007. +# Abel Plana Planagumà , 2007 +# Gerard Sánchez Gil , 2007. +# +# This file is translated according to the glossary and style guide of +# Softcatalà. If you plan to modify this file, please read first the page +# of the Catalan translation team for the Fedora project at: +# http://www.softcatala.org/projectes/fedora/ +# and contact the previous translator +# +# Aquest fitxer s'ha de traduir d'acord amb el recull de termes i la guia +# d'estil de Softcatalà. Si voleu modificar aquest fitxer, llegiu si +# us plau la pàgina de catalanització del projecte Fedora a: +# http://www.softcatala.org/projectes/fedora/ +# i contacteu l'anterior traductor/a. +# +msgid "" +msgstr "" +"Project-Id-Version: rpm\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2009-04-25 17:36+0100\n" +"Last-Translator: Agustí Grau \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "Versió de l'RPM %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Copyright (c) 1998 - 2002 Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" +"Aquest programari es pot distribuir lliurement d'acord amb els termes de la " +"Llicència Pública General GNU\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "Ha fallat la creació d'una canonada per a --pipe: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "ha fallat l'execució\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "l'argument no és un paquet RPM\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "s'ha produït un error en llegir la capçalera del paquet\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "no s'ha pogut tornar a obrir les dades de càrrega: %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "comprova paquets en el grup" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Opcions de consulta (amb -q o --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Opcions de verificació (amb -V o --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Opcions d'instal·lació/actualització/supressió:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Opcions comunes per a tots els modes d'rpm i executables:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "només es pot realitzar un tipus de consulta/verificació alhora" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "indicadors inesperats de la consulta" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "format inesperat de la consulta" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "font inesperada de la consulta" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "només es pot especificar un mode principal" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"només es poden forçar la instal·lació, l'actualització, l'rmsource i l'rmspec" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "només es poden reubicar els fitxers durant la instal·lació d'un paquet" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "no es pot utilitzar l'opció --prefix amb --relocate o --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"només es poden utilitzar les opcions --relocate i --excludepath quan " +"s'estiguin instal·lant paquets nous" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "" +"només es pot utilitzar l'opció --prefix quan s'estiguin instal·lant paquets " +"nous" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "els arguments a --prefix han de començar amb una /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "" +"només es pot especificar l'opció --hash (-h) durant la instal·lació d'un " +"paquet" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "" +"només es pot especificar l'opció --percent durant la instal·lació d'un paquet" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "" +"només es pot especificar l'opció --replacepkgs durant la instal·lació d'un " +"paquet" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "" +"només es pot especificar l'opció --excludedocs durant la instal·lació d'un " +"paquet" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "" +"només es pot especificar l'opció --includedocs durant la instal·lació d'un " +"paquet" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "només es pot especificar una opció entre --excludedocs i --includedocs" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "" +"només es pot especificar l'opció --ignorearch durant la instal·lació d'un " +"paquet" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "" +"només es pot especificar l'opció --ignoreos durant la instal·lació d'un " +"paquet" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "" +"només es pot especificar l'opció --ignoresize durant la instal·lació d'un " +"paquet" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" +"només es pot especificar l'opció --allmatches durant la supressió d'un paquet" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "" +"només es pot especificar l'opció --allfiles durant la instal·lació d'un " +"paquet" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" +"només es pot especificar l'opció --justdb durant la instal·lació i supressió " +"d'un paquet" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"només es poden especificar les opcions d'inhabilitació d'scripts durant la " +"instal·lació i supressió d'un paquet" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"només es poden especificar les opcions d'inhabilitació de l'activador durant " +"la instal·lació i supressió d'un paquet" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"només es pot especificar l'opció --test durant la instal·lació, la supressió " +"i el muntatge d'un paquet" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "" +"només es pot especificar l'opció --justdb durant la instal·lació i supressió " +"d'un paquet" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "els arguments a --root (-r) han de començar per /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "no s'han donat paquets per a suprimir" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "no s'han donat paquets per a instal·lar" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "no s'han donat arguments per a consultar" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "no s'han donat arguments per a verificar" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "el buildroot ja s'ha especificat, s'està ignorant %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"munta amb %prep (desempaqueta els fonts i aplica els pedaços) des del " +"" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"munta amb %build (%prep, després compila) des del " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"munta amb %install (%prep, %build i després instal·la) des del " + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "verifica la secció %files de " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "munta els paquets de codi font i binaris de " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "munta només el paquet binari de " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "munta només el paquet font de " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"munta amb %prep (desempaqueta els fonts i aplica els pedaços) des de " +"l'" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "munta amb %build (%prep, després compila) des de l'" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "munta amb %install (%prep, %build, instal·la) des de l'" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "verifica la secció %files des de l'" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "munta els paquets font i binari des de l'" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "munta el paquet binari des de l' només" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "munta els paquets font només des de l'" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "munta els paquets binaris des de " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "munta amb %install (%prep, %build i instal·la) des del " + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "omet l'arrel de compilació" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "suprimeix l'arbre del muntatge en acabar" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ignora ExcludeArch: directives del fitxer d'especificació" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "depura la màquina d'estat de fitxers" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "no executis cap fase del muntatge" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "no verifiquis les dependències del muntatge" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" +"genera les capçaleres de paquets compatibles amb l'antic empaquetament rpm2 " +"i 3" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "no acceptis els msgstr d'i18N des d'un fitxer d'especificació" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "suprimeix els fonts en acabar" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "suprimeix el fitxer d'especificació en acabar" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "vés directament a l'etapa especificada (només per a c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "omet plataforma objectiu" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" +"Opcions de muntatge amb [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Han fallat les dependències de muntatge:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "No s'ha pogut obrir el fitxer d'especificacions %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "No s'ha pogut obrir un conducte per al tar: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "No s'ha pogut llegir el fitxer d'especificacions des de %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "No s'ha pogut canviar el nom de %s per %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "No s'ha pogut obtenir l'estat de %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "El fitxer %s no és un fitxer regular.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "El fitxer %s no sembla un fitxer d'especificacions.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "S'estan muntant les plataformes destí: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "S'està muntant per al destí %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "initialitza la base de dades" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"torna a muntar les llistes invertides de la base de dades des de les " +"capçaleres de paquets instal·lades" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "verifica els fitxers de la base de dades" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Opcions de la base de dades:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "verifica la signatura dels paquets" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "importa una clau pública armada" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Opcions de la signatura:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "no s'han donat arguments" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "instal·la paquets" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "signa els paquets (igual que --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "suprimeix les signatures dels paquets" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Opcions de la signatura:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "No es pot executar %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Heu d'establir «%%_gpg_name» al vostre fitxer de macros\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Introduïu la contrasenya:" + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "La contrasenya és correcta.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "La verificació de la contrasenya ha fallat\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "consulta un fitxer d'especificació" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "consulta un fitxer d'especificació" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "utilitza el format de consulta següent" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Opcions de la signatura:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "no s'han donat arguments per a consultar" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "No s'ha pogut obrir el fitxer temporal.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Executant(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Ha fallat l'execució de %s (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "L'estat de sortida de %s (%s) és erroni\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"Errors del muntatge de l'RPM:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "error de sintaxi mentre s'analitzava ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "error de sintaxi mentre s'analitzava &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "error de sintaxi mentre s'analitzava ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "error d'anàlisi a l'expressió\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "no hi ha hagut coincidències (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- només als nombres\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! només als nombres\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "els tipus han de coincidir\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / no és disponible per a les cadenes\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- no és disponible per a les cadenes\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& i || no són disponibles per a les cadenes\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "error de sintaxi a l'expressió\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Manca '(' a %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Manca ')' a %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "L'element %s no és vàlid: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "Manca %s a %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "%s() va seguit d'un caràcter que no és un espai en blanc: %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Sintaxi incorrecta: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Especificació de mode incorrecta: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Especificació de dirmode incorrecta: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "La longitud del locale és inhabitual: \"%.*s\" a %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Locale %.*s duplicat a %%lang(%s)\n" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "Capacitat invàlida: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "No s'ha muntat amb disponibilitat de fitxers\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Només un argument per a %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Dos fitxers en una línia: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "El fitxer ha de començar amb \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "No es pot mesclar el %%doc especial amb altres formularis: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "L'algorisme %u de resum del fitxer és desconegut, s'està usant MD5\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "El fitxer apareix dues vegades: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s la supressió de %s ha fallat: %s \n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "L'enllaç simbòlic apunta al BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "No s'ha trobat el fitxer: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "No s'ha trobat el fitxer: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "El fitxer %s és massa gran per a les dades\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: no es pot carregar l'etiqueta incorrecta (%d).\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: ha fallat la clau pública.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: no és una clau pública armada.\n" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "No s'ha expandit la macro %%%s\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "El fitxer ha de començar amb \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "No es permet el glob: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "El glob no ha trobat el fitxer: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "El glob no ha trobat el fitxer: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "línia: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Fitxer no vàlid: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Propietari/grup incorrecte: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "S'està comprovant fitxers no empaquetats: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Hi ha fitxers instal·lats però no empaquetats:\n" +"%s" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "S'està processant els fitxers: %s-%s-%s.%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "Els binaris dependents de l'arquitectura estan en el paquet noarch\n" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "ha fallat la creació de l'arxiu en el fitxer %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "ha fallat la creació d'un arxiu: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "Ha fallat l'escriptura del cpio_copy: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "ha fallat la lectura de cpio_copy: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: línia: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "El nom de màquina no es pot fer canònic: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "No s'ha pogut obrir el fitxer a PreIn: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "No s'ha pogut obrir el fitxer a PreUn: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "No s'ha pogut obrir el fitxer PreTrans: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "No s'ha pogut obrir el fitxer PostIn: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "No s'ha pogut obrir el fitxer PostUn: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "No s'ha pogut obrir el fitxer PostTrans: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "No s'ha pogut obrir el fitxer VerifyScript: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "No s'ha pogut obrir el fitxer d'script de Trigger: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Compressió de dades desconeguda: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "No es pot crear la regió de capçalera no modificable.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "No s'ha pogut escriure la capçalera temporal\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Dades CSA invàlides\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "No es pot tornar a carregar la capçalera de signatura.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "No es pot obrir %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "No es pot escriure el paquet: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "No s'ha pogut obrir el sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "No es pot llegir la capçalera de %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "No es pot escriure la capçalera a %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "No s'ha pogut llegir les dades de %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "No s'ha pogut escriure les dades de %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "S'ha escrit: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "S'està executant: \"%s\":\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Ha fallat l'execució de \"%s\" .\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Ha fallat la verificació del paquet \"%s\".\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "No es pot generar el nom de fitxer de sortida per al paquet %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "no es pot crear %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "línia %d: segon %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "les entrades del %%changelog han de començar amb *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "l'entrada de %%changelog no és completa\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "la data de %%changelog no és correcta: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "el %%changelog no està en ordre cronològic descendent\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "manca el nom a %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "no hi ha descripció a %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "línia %d: s'ha produït un error en analitzar %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "línia %d: opció incorrecta %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "línia %d: massa noms: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "línia %d: no existeix Package: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "línia %d: segona descripció\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "línia %d: s'ha produït un error en analitzar %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "línia %d: s'ha produït un error en analitzar %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "línia %d: número incorrecte: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "línia %d: Numero dolent%s número: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "línia %d: número %s incorrecte: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d definit múltiples vegades\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "S'ha exclòs l'arquitectura: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "No s'inclou l'arquitectura: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "S'ha exclòs el SO: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "No s'ha inclòs el SO: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "El camp %s ha de ser present al paquet: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "L'entrada %s és duplicada al paquet: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "_docdir_fmt no és vàlid: %s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "No s'ha pogut obrir la icona %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "No s'ha pogut llegir la icona %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "El tipus d'icona és desconegut: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "línia %d: l'etiqueta pren un únic testimoni: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "línia %d: caràcter «-» no permès a %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "línia %d: caràcter «-» no permès a %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "línia %d: caràcter «-» no permès a %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "línia %d: l'etiqueta és malament formada: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "línia %d: l'etiqueta és buida: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "línia %d: els prefixos no poden acabar en «/»: %s \n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "línia %d: «Docdir» ha de començar per «/»: %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "línia %d: el camp Epoch ha d'ésser un nombre sense signe: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "línia %d: %s és incorrecte: qualificadors: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "línia %d: el format de «BuildArchitecture» és incorrecte: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "linia %d: Només els subpaquets noarch estan suportats: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "S'ha produït un error intern: l'etiqueta %d és incorrecta\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "línia %d: es requereix la versió: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "L'especificació del paquet és incorrecta: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "El paquet ja existeix: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "línia %d: l'etiqueta és desconeguda: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} no pot estar buit\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} no pot ésser \"/\"\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "La font és incorrecta: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "No existeix el pedaç número %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "%%patch sense l'etiqueta \"Patch:\" corresponent\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "No existeix la font número %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "Falta l'etiqueta \"Source:\" en el fitxer d'especificacions\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "No s'ha pogut baixar «nosource» %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Hi ha hagut un error en analitzar %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "línia %d: l'argument a %%setup és incorrecte: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "línia %d: l'opció de %%setup %s és incorrecta: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "El número de pedaç %s no és vàlid: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "línia %d: segon %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"línia %d: els símbols de dependència han de començar per un caràcter " +"alfanumèric, «_» o «/»: %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "línia %d: no es permeten els noms de fitxer versionalts: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "línia %d: es requereix la versió: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "línia %d: número incorrecte: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "línia %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "línia %d: els activadors han de tenir --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "línia %d: s'ha produït un error en analitzar %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "línia %d: l'script intern ha d'acabar en «>»: %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "línia %d: el programa d'script ha de començar per «/»: %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "línia %d: Segon %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "línia %d: l'script intern no està disponible: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "línia %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "No es pot obrir %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "%%if sense tancar\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean retorna %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: s'ha obtingut un %%else sense %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: s'ha obtingut un %%endif sense %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "sentència %%include mal formada\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "No s'ha trobat cap arquitectura compatible per al muntatge\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "El paquet no té %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "No s'ha pogut llegir el fitxer d'especificacions des de %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "No s'ha pogut llegir el fitxer d'especificacions des de %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "No s'ha pogut llegir el fitxer d'especificacions des de %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "No s'ha pogut obrir un conducte per al tar: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Hi ha hagut un error en analitzar %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Executant(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Manca %s a %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Massa arguments a la línia de dades a %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "S'està processant els fitxers: %s-%s-%s.%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "línia %d: número incorrecte: %s\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "No s'ha pogut crear la canonada per a %s: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "No s'ha pogut executar %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "No s'ha pogut crear el procés fill de «%s»: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "ha fallat %s: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "ha fallat en escriure totes les dades a %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "Ha fallat la conversió de %s a enter gran.\n" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "el gpg no ha escrit la signatura\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "Ha fallat magic_open(0x%x): %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "Ha fallat magic_load: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Ha fallat el reconeixement del fitxer \"%s\": mode %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "S'està cercant %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Ha fallat la cerca de %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "" +"ha fallat la consulta del fitxer d'especificació %s, no es pot analitzar\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(error 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Valor màgic incorrecte" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Capçalera dolenta/il·legible" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "La mida de la capçalera és massa gran" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Tipus de fitxer desconegut" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Manquen els enllaços durs" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "No hi ha coincidència de resums" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Error intern" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "El fitxer de l'arxiu no és a la capçalera" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " ha fallat - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "el paquet %s ja s'ha afegit, s'està ignorant %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "el paquet %s ja es va afegir, s'està reemplaçant per %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(no és una xifra)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(no és base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(tipus invàlid)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(no és un blob)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(tipus d'XML invàlid)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(no és una signatura d'OpenPGP)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "reemplaçat " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "no instal·lat " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "xarxa compartida" + +#: lib/formats.c:600 +#, fuzzy +msgid "wrong color" +msgstr "color incorrecte " + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "manca %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(%3d desconegut) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(no és una xifra)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "l'usuari %s no existeix - usant el root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "el grup %s no existeix - s'està usant el root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" +"no s'ha trobat el fitxer d'arxiu %s a la llista de fitxers de capçalera\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s desat com a %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s ha fallat la supressió del directori %s: el directori no és buit\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s ha fallat la supressió del directori %s: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s la supressió de %s ha fallat: %s \n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s creat com a %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "s'està ometent %s amb una firma V%u no verificable\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "mida del blob(%d): dolenta, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"etiqueta[%d]: dolenta, etiqueta %d tipus %d desplaçament %d compte %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"desplaçament de regió: dolent, etiqueta %d tipus %d desplaçament %d compte " +"%d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"tros de regió: dolenta, etiqueta %d tipus %d desplaçament %d compte %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "la dimensió de la regió: dolenta, ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "capçalera SHA1: dolenta, no és hexadecimal\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "capçalera RSA: dolenta, no és binària\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "capçalera DSA: dolenta, no és binària\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "capçalera dimensió (%d): dolenta, la lectura ha retornat %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "capçalera màgica: dolenta\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" +"capçalera d'etiquetes: dolentes, número d'etiquetes (%d) fora de rang\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "capçalera de dades: dolenta, número de bytes(%d) fora de rang\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "capçalera blob(%zd): dolenta, la lectura ha retornat %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "càrrega de la capçalera: dolenta\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: El rpmReadSignature ha fallat: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: No hi ha signatura disponible\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: El headerRead ha fallat: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: El Fread ha fallat: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s és un Delta RPM i no es pot instal·lar directament\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Les dades (%s) no estan disponibles al paquet %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "predefineix MACRO amb el valor EXPR" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "'MACRO EXPR'" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "defineix la MACRO amb el valor EXPR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "imprimeix l'expansió de la macro de l'EXPR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "'EXPR'" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "llegeix en comptes dels fitxers per defecte" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "no verifiquis els resums dels fitxers" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "no verifiquis les capçaleres de la base de dades en obtenir-les" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "no verifiquis les signatures del paquet" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "envia de la sortida estàndard a CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "utilitza ROOT com a directori d'alt nivell" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "mostra etiquetes de consulta conegudes" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "mostra rpmrc final i la configuració de macros" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "proporciona sortides menys detallades" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "proporciona sortides més detallades" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "escriu la versió d'RPM que s'està usant" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "depura la màquina d'estats del fitxer de dades" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "depura l'E/S de l'rpmio" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: la taula d'opcions no està ben configurada (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "els camins exclosos han de començar per /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "les reubicacions han de començar per /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "les reubicacions han de contenir =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "les reubicacions han de tenir un / seguit de =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"instal·la tots els fitxers, fins i tot configuracions que podrien ser " +"ignorades" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"suprimeix tots els paquets que coincideixen amb (normalment es " +"genera un error si especifica múltiples paquets)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "reubica els fitxers en un paquet no reubicable" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "escriu els bucles de dependències com a avís" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "suprimeix (desinstal·la) un paquet" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "no instal·lis fitxers de configuració" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "no instal·lis documentació" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "ignora fitxers amb un component inicial " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "abreviatura de --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "actualitza els paquets si ja estan instal·lats" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "escriu marques durant la instal·lació de paquets (millor amb -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "no verifiquis l'arquitectura del paquet" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "no verifiquis el sistema operatiu del paquet" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "no comprovis l'espai en disc abans d'instal·lar" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "instal·la documentació" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "instal·la paquets" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "actualitza la base de dades, però no modifiquis el sistema de fitxers" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "no verifiquis les dependències dels paquets" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "no verificar els resums dels fitxers" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "no verificar els resums dels fitxers (obsolet)" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "no instal·lis els contexts de seguretat dels fitxers" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" +"no reordenis la instal·lació dels paquets per a satisfer les dependències" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "no executis els scriptlets del paquet" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "no executis cap scriptlet %%pre" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "no executis cap scriptlet %%post" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "no executis cap scriptlet %%preun" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "no executis cap scriptlet %%postun" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "no executis cap scriptlet invocat per aquest paquet" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "no executis cap scriptlet %%triggerprein" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "no executis cap scriptlet %%triggerin" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "no executis cap scriptlet %%triggerun" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "no executis cap scriptlet %%triggerpostun" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"actualitza a una versió antiga del paquet (--force ho fa automàticament en " +"les actualitzacions)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "escriu els percentatges com a instal·lació de paquets" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "reubica el paquet a , si és reubicable" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "reubica els fitxers del camí al " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "ignora els conflictes de fitxers entre paquets" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "reinstal·la si el paquet ja està present" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "no instal·lis, però digues si funcionarà correctament o no" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "actualitza paquets" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "comprova tots els paquets" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "mode de comprovació de signatura" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "comprova a quins paquets pertany aquest fitxer" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "comprova paquets en el grup" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "comprova un paquet" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "comprova quins paquets tenen identificador" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "comprova paquets amb identificació de capçalera" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "mode de consulta" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "comprova una instància de capçalera" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "comprova els paquets de la transacció d'instal·lació" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "consulta els paquets exigits pel paquet" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "mode de verificació" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "comprova les relacions de dependència dels paquets" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "comprova els paquets que satisfan les relacions de dependència" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "no passis els arguments" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" +"no processis els fitxers que no pertanyin al paquet com a fitxers manifest" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "mostra tots els fitxers de configuració" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "mostra llista de fitxers de documentació" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "mostra informació bàsica del fitxer" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "mostra tots els fitxers del paquet" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "omet fitxers %%ghost" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "mostra l'estat dels fitxers de la llista" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "no comprovis la mida dels fitxers" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "no comprovis l'enllaç simbòlic dels fitxers" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "no comprovis qui és el propietari dels fitxers" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "no comprovis a quin grup pertanyen els fitxers" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "no comprovis la data de modificació dels fitxers" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "no comprovis el mode dels fitxers" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "no verifiquis les capacitats dels fitxers" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "no comprovis els contextos de seguretat dels fitxers" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "no comprovis els fitxers del paquet" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "no comprovis les relacions de dependència del paquet" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "no executis els scripts de verificació" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "falta l'arquitecutra per a %s a %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "s'espera un paquet de codi font, però s'ha trobat un de binari\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "el paquet font no conté un fitxer .spec\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "ha fallat el desempaquetat de l'arxiu%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " al fitxer " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "ha fallat %s al fitxer %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "ha fallat %s: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "format incorrecte: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(no conté fitxers)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "reemplaçat " + +#: lib/query.c:166 +msgid "not installed " +msgstr "no instal·lat " + +#: lib/query.c:169 +msgid "net shared " +msgstr "xarxa compartida" + +#: lib/query.c:172 +msgid "wrong color " +msgstr "color incorrecte " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(cap estat) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(%3d desconegut) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "el paquet no té propietari dels fitxers/llistes de grup\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "el paquet no té ni propietari de fitxer ni llistes d'id\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "el grup %s no conté cap paquet\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "cap paquet dispara %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "%s mal format: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "cap paquet concorda amb %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "cap paquet necessita %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "cap paquet proporciona %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "fitxer %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "el fitxer %s no pertany a cap paquet\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "número de paquet invàlid: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "el registre %lu no es pot llegir\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "no s'ha instal·lat el paquet %s\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "etiqueta desconeguda: «%s»\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: ha fallat la importació.\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: no és una clau pública armada.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: ha fallat la lectura de la importació (%d).\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: ha fallat headerRead\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"%s: la regió de capçalera inmutable no s'ha pogut llegir. El paquet és " +"corrupte?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "s'està ignorant el paquet %s amb signatura no verificable V%u\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NO ÉS CORRECTE" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "D'ACORD" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (CLAUS NO TROBADES:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (CLAUS NO FIABLES:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: ha fallat l'apertura: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "No s'ha pogut canviar el directori root: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s ha fallat la supressió del directori %s: el directori no és buit\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "No s'ha pogut canviar el directori root: %m\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "No s'ha pogut canviar el directori root: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NO " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "SÃ" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" +"Les dependències PreReq:, Provides:, i Obsoletes: disposen de versionatge." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"els noms de fitxer s'han emmagatzemat com una tupla (dirName,baseName," +"dirIndex), no com a camí" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "les dades del paquet es poden comprimir amb el bzip2." + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "Les dades del paquet es poden comprimir amb xz." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "Les dades del paquet es poden comprimir amb bzip2." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "els fitxer de les dades del paquet tenen el prefix «./»." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" +"no s'ha proporcionat implícitament el nom-versió-alliberament del paquet." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "les etiquetes de la capçalera sempre s'ordenen després de carregar-se." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "l'íntèrpret de l'scriptlet pot emprar arguments de la capçalera." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" +"es pot instal·lar un conjunt d'enllaços durs a fitxer sense que estiguin " +"complets." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" +"els scriptlets del paquet poden accedir la base de dades rpm durant la " +"instal·lació" + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "es poden emprar scripts en lua." + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "l'algorisme de resum de fitxer és configurable per paquet" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "suport per a capacitats de fitxer POSIX.1e" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "" +"els scriptlets del paquet poden accedir la base de dades rpm durant la " +"instal·lació" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "ha fallat l'apertura de %s: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: no és un paquet rpm (o un manifest de paquet)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "S'està preparant..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "S'està preparant els paquets per a la instal·lació..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Dependències fallides:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: no és un paquet rpm (o un manifest de paquet): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "no es pot instal·lar %s\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "S'està obtenint %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "S'està ometent %s - ha fallat la transferència\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "el paquet %s no és reubicable\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "s'ha produït un error en llegir del fitxer %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "el fitxer %s necessita una nova versió d'RPM\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" especifica múltiples paquets:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "no es pot obrir %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "S'està instal·lant %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "no és un paquet rpm" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "tipus de signatura invàlida" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "versió d'empaquetat RPM no suportada" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "ha fallat la lectura: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "no és un paquet rpm" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "No s'ha pogut crear un bloqueig de transacció a %s (%s)\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "s'està esperant per un bloqueig de transacció a %s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "no s'ha pogut obrir %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "No s'ha pogut canviar el nom de %s per %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "No s'ha pogut canviar el nom de %s per %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "diferent" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "el paquet %s és per a arquitectures %s" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "el paquet %s és per a sistemes operatius %s" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "el paquet %s ja s'ha instal·lat" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "el camí %s del paquet %s no és reubicable" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "el fitxer %s té un conflicte amb els intents d'instal·lació de %s i %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"el fitxer %s de la instal·lació de %s té un conflicte amb un fitxer del " +"paquet %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "ja s'ha instal·lat el paquet %s, que és més nou que %s" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"el paquet a instal·lar %s necessita %%cB al sistema de fitxers %s" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"el paquet a instal·lar %s necessita % nodes-i al sistema de fitxers " +"%s" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "el paquet %s és requerit per %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(instalat) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s té conflictes amb %s%s" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "el paquet %s és requerit per %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "error desconegut %d en manipular el paquet %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "falten el segon ':' a %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "falta el nom d'arquitectura a %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Línia de dades incompleta a %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Massa arguments a la línia de dades a %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Número d'arquitectura/S.O. incorrecte: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Línia per defecte incorrecta a %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Massa arguments a la línia per defecte a %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "manca ':' (trobat a 0x%02x) a %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "manca un argument per a %s a %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "no s'ha pogut obrir %s a %s:%d: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "falta l'arquitecutra per a %s a %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "opció incorrecte '%s' a %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Sistema desconegut: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "contacteu amb %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "No s'ha pogut obrir %s per a lectura: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "No s'ha pogut canviar el directori root: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "no s'ha muntat la disponibilitat per a emprar scriptlets \n" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "No s'ha pogut crear el fitxer temporal per a %s: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "S'ha produït un error en duplicar el descriptor de fitxer: %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "Ha fallat l'scriptlet %s, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s ha fallat l'scriplet, senyal %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "Ha fallat l'scriptlet %s, estat de sortida %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "Format desconegut" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(instalat) " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "no es pot obrir la base de dades Packages a %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "hi ha un '(' de més a l'etiqueta del paquet: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "falta '(' a l'etiqueta del paquet: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "falta ')' a l'etiqueta del paquet: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: ha fallat la lectura de la clau pública.\n" + +#: lib/rpmts.c:1034 +#, fuzzy +msgid "transaction" +msgstr "crea un conjunt de transaccions" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "mida sigh(%d): dolenta, la lectura ha retornat %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "magic sigh: dolent\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "etiquetes sigh: dolentes, número d'etiquetes(%d) fora de rang\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "dades sigh: dolentes, número de bytes(%d) fora de rang\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "blob sigh(%d): dolent, lectura ha retornat %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"etiqueta sigh[%d]: dolenta, etiqueta %d tipus %d desplaçament %d compte %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "càrrega sigh: dolenta\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "emplenat sigh(%zd): dolent, s'han llegit %zd bytes\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigSize sigh(%zd): dolent, ha fallat fstat(2)\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"La regió inmutable de la capçalera no s'ha pogut llegir. És possible que el " +"paquet sigui corrupte\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "Resum MD5:" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "Capçalera de resum SHA1:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Capçalera " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Verifiqueu la signatura: paràmetres dolents\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Signatura: desconeguda (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s ha fallat\n" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "manca %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Dependències insatisfetes per a %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "manca { després de %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "manca } després de %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "el format de l'etiqueta és buit" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "el nom de l'etiqueta és buit" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "etiqueta desconeguda" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "s'esperava ] al final de la matriu" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "no s'esperava ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "no s'esperava }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "s'esperava ? a l'expressió" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "s'esperava { després de ? a l'expressió" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "s'esperava } a l'expressió" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "s'esperava : després de ? a la subexpressió" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "s'esperava { després de : a l'expressió" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "s'esperava | al final de l'expressió" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "iterador de matrius emprat amb matrius de mides diferents" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "no es pot obrir l'índex de %s emprant db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "no s'ha establert cap dbpath\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "s'ha produït un error (%d) en obtenir «%s» registres de l'índex %s\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: s'està ignorant" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "s'ha produït un error (%d) en emmagatzemar el registre #%d a %s\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: ha fallat regexec: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: ha fallat regcomp: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: s'està ignorant" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: s'ha obtingut la capçalera #%u malmesa -- s'està ignorant.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "s'ha produït un error (%d) en obtenir «%s» registres de l'índex %s\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "" +"error(%d) en establir el registre de la capçalera #%d per a la supressió de " +"%s\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "" +"error(%d) en establir el registre de la capçalera #%d per a la supressió de " +"%s\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: no s'ha pogut llegir la capçalera a 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "error(%d) en establir els registres «%s» de l'índex %s\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "error(%d) en emmagatzemar el registre «%s» en %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "error(%d) en suprimir el registre «%s» de %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "error(%d) en assignar la instància de nou paquet\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "error(%d) en emmagatzemar el registre %s a %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "no s'ha establert el dbpath" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "ha fallat en crear el directori %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "la capçalera #%u de la base de dades és incorrecta -- s'ignorarà.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "no es pot afegir el registre originalment a %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"no s'ha pogut remuntar la base de dades: es continua fent servir la base de " +"dades original\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "no s'ha pogut reemplaçar la base de dades antiga amb la nova\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "reemplaçeu els fitxers a %s amb fitxers de %s per a recuperar-ho" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "no s'ha pogut suprimir el directori %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d error(%d) de %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d error(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "no es pot obtenir el blocatge %s a %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "compartit" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "exclusiu" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "verificat índex de bd %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "opció de la bd no reconeguda: s'ignora «%s».\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s té un valor numèric invàlid, s'ignorarà\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s té un valor de tipus «long» massa gran o massa petit, s'ignorarà\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" +"%s té un valor de tipus «enter» massa llarg o massa petit, s'ignorarà\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "No s'ha pogut llegir el fitxer d'especificacions des de %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "No s'ha pogut crear el fitxer temporal per a %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "No s'ha pogut llegir el fitxer d'especificacions des de %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "no s'ha pogut crear %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "No s'ha pogut connectar al servidor" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "no s'ha pogut obrir %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "no s'ha pogut suprimir el directori %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "No s'ha pogut canviar el nom de %s per %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "No es pot llegir %s: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "no s'ha pogut obrir %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "no s'ha pogut crear %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "La macro %%%s té un cos inacabat\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "No s'ha expandit la macro %%%s\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "No s'ha pogut llegir el fitxer d'especificacions des de %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" +"S'ha produït un error: ha fallat la crida de retorn del python %s, s'està " +"avortant\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== actiu %d buit %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(buit)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(buit)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "La macro %%%s té un cos inacabat\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "La macro %%%s té un nom invàlid (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "La macro %%%s té opcions inacabades\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "La macro %%%s té un cos buit\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "No s'ha expandit la macro %%%s\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "La macro %%%s té un nom invàlid (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "La macro %%%s (%s) no s'ha emprat sota el nivell %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Opció desconeguda %c a %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "%c sense terminar: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Un %% precedeix una macro que no es pot analitzar\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "S'ha produït un error en crear el fitxer temporal %s: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Fitxer %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "El fitxer %s fa menys de %u bytes\n" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "no s'ha pogut crear el directori" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "sintaxi invàlida en l'scriptlet lua: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "sintaxi invàlida en l'script lua: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "ha fallat l'script lua: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "sintaxi invàlida en el ftixer lua: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "Ha fallat el hook lua: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(cap error)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "error fatal: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "error: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "avís: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "l'assignació de memòria (%u bytes) ha retornat NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "%sV%d %s firma: %s, ID de la clau %s\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(cap error)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "No s'ha pogut llegir el fitxer d'especificacions des de %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: ha fallat l'Fwrite: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: ha fallat l'Fflush: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "No s'ha pogut crear una canonada per a la signatura: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "ha fallat l'execució del gpg (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "el gpg no ha escrit la signatura\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "no es pot llegir la signatura\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "Ha fallat rpmMkTemp\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: ha fallat writeLead: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: ha fallat rpmWriteSignature: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "ha fallat l'apertura de %s: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: ha fallat la lectura del manifest: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "no verifiquis la signatura de la capçalera i les dades" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: massa uid\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: massa uid\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: massa uid\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: massa gid\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: massa gid\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: massa gid\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "ignora les relacions del noms de paquets [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "afegeix els paquets suggerits a la transacció" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "no suggereixis resolucions de dependències fallides" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "No s'ha pogut canviar al directori %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "només es pot especificar l'opció --nodeps durant el muntatge, la " +#~ "reconstrucció, la recompilació, la instal·lació, la supressió i la " +#~ "verificació d'un paquet" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "només es pot especificar l'opció --root (-r) durant la instal·lació, " +#~ "supressió, consulta i reconstrucció d'una base de dades" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "detecta conflictes de fitxers entre paquets" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d no disponible\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "ja existeix la base de dades temporal %s\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "comprova els paquets amb identificació de fitxer" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "L'especificació de %%_signature al fitxer macro no és vàlida.\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: ja va ser signat per la clau amb ID %s, s'està ignorant\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Sobreiximent del búfer objectiu\n" + +#~ msgid "no files to sign\n" +#~ msgstr "cap fitxer per signar\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "no s'ha pogut accedir al fitxer %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "" +#~ "només es pot utilitzar l'opció --sign durant el muntatge d'un paquet" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "no verifiquis les signatures GPG V3 DSA" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "no verifiquis les signatures PGP V3 RSA/MD5" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "signa els paquets (igual que --resign)" + +#~ msgid "generate signature" +#~ msgstr "genera la signatura" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Especificació invàlida de %%_signature al fitxer de macros\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "Error del TIMECHECK: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "genera capçaleres compatibles amb l'empaquetament rpm4" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "S'ha produït un error intern en el processament d'arguments (%d)\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: ha fallat la clau pública.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: obre %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: ha fallat l'fseek: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s no és un paquet RPM\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: s'està llegint la capçalera de %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "S'està generant la signatura: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "genera la signatura PGP/GPG" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "no s'han donat fitxers de paquets per a reconstruir" + +#~ msgid "no spec files given for build" +#~ msgstr "no s'han donat fitxers d'especificacions per a muntar" + +#~ msgid "no tar files given for build" +#~ msgstr "no s'han donat fitxers tar per a muntar" + +#~ msgid "%s failed\n" +#~ msgstr "%s ha fallat\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "La profunditat de la recursió (%d) és més gran que el màxim (%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: nom d'etiqueta no reconegut: s'ignorarà «%s»\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: s'està ignorant" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib proporciona)" + +#~ msgid "(cached)" +#~ msgstr "(a la memòria cau)" + +#~ msgid "(db files)" +#~ msgstr "(fitxers db)" + +#~ msgid "(db provides)" +#~ msgstr "(db proporciona)" + +#~ msgid "(added files)" +#~ msgstr "(fitxers afegits)" + +#~ msgid "(added provide)" +#~ msgstr "(l'afegit proporciona)" + +#~ msgid "url port must be a number\n" +#~ msgstr "el port de la url ha de ser un número\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Opcions per recórrer l'arbre de fitxers (amb --ftswalk)" + +#~ msgid "follow command line symlinks" +#~ msgstr "segueix els enllaços simbòlics de la línia d'ordres" + +#~ msgid "logical walk" +#~ msgstr "camí lògic" + +#~ msgid "don't change directories" +#~ msgstr "no canviïs als directoris" + +#~ msgid "don't get stat info" +#~ msgstr "no adquireixis informació d'estat" + +#~ msgid "physical walk" +#~ msgstr "camí físic" + +#~ msgid "return dot and dot-dot" +#~ msgstr "retorna punt i punt-punt" + +#~ msgid "don't cross devices" +#~ msgstr "no creuis dispositius" + +#~ msgid "return whiteout information" +#~ msgstr "retorn sense informació" + +#~ msgid "debug package state machine" +#~ msgstr "depura la màquina d'estat de paquets" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "comprova els paquets des del principi del recorregut de l'arbre" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "comprova els paquets de l'HDLIST del sistema" + +#~ msgid "do not order transaction set" +#~ msgstr "no ordenis les transaccions" + +#~ msgid "do not read headers" +#~ msgstr "no llegeixis les capçaleres" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "El fitxer no concorda amb el prefix (%s): %s\n" + +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "No s'ha pogut obtenir el nom de dependència actual.\n" + +#~ msgid "Unable to get current dependency epoch-version-release.\n" +#~ msgstr "" +#~ "No s'ha pogut aconseguir la dependència actual epoc-version-release.\n" + +#~ msgid "File count from file info doesn't match file in container.\n" +#~ msgstr "" +#~ "El compte de fitxers des de la informació del fitxer no coincideix amb el " +#~ "fitxer en el contenidor.\n" + +#~ msgid "Container not of string array data type.\n" +#~ msgstr "El contenidor no és del tipus vector de cadenes.\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "usa fluxos per a la màquina d'estat de paquets" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: l'scriptlet %s ha fallat (%d), s'està ignorant %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctt() no ha retornat la mida: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() no ha retornat els punts de muntatge: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "no s'ha obtingut l'estat de %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "el fitxer %s és en un dispositiu desconegut\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "empra fluxos per a la màquina d'estat de fitxers" + +#~ msgid "cannot open %s index\n" +#~ msgstr "no es pot obrir l'índex %s\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "" +#~ "No s'ha pogut obtenir un bloqueig en la base de dades %s, reintentant... " +#~ "(%d)\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Ha fallat l'initDB de %s(%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "No s'ha pogut obrir la base de dades: %s\n" + +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "No s'ha pogut determinar l'«endianess» de la BD.\n" + +#~ msgid "Unknown system error" +#~ msgstr "S'ha produït un error de sistema desconegut" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "No s'ha trobat la macro %%%.*s, s'ignorarà\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: ha fallat la lectura de la política *.te.\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "línia %d: segona llista de %%files\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "La dependència \"B\" necessita un temps (suposant el mateix temps que \"A" +#~ "\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "No es disposa del tipus de dada %d\n" + +#~ msgid "line %d: Illegal char '-' in %s: %s\n" +#~ msgstr "línia %d: caràcter «-» no permès a %s: %s\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "La sintaxi antiga no és disponible: %s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "s'està suprimint %s «%s» de les relacions d'ordenació.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "Bucle:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "ha fallat rpmtsOrder, manquen %d elements\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "Mida de capçalera més dades:" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Opcions d'origen (amb --query o --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "no s'ha trobat pgp:" + +#~ msgid "pgp failed\n" +#~ msgstr "ha fallat el pgp\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "el pgp no ha escrit la signatura\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Heu d'establir «%%_pgp_name» al vostre fitxer de macros\n" + +#~ msgid "Unknown" +#~ msgstr "Desconegut" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s firma: %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "%sV%d Firma DSA: %s, clau ID %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d firma DSA: %s\n" + +#~ msgid "skipping header with unverifiable V%u signature\n" +#~ msgstr "s'està evitant la capçalera amb signatura no verificable V%u \n" + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "no es pot obrir el fitxer %s: %s\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "Suma MD5 incorrecta: no està disponible\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "«BuildRoot» no pot ser <«/»: %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "El fitxer d'especificació no pot utilitzar «BuildRoot»\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "cerca cadenes traduïdes en el catàleg del fitxer d'especificació" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "genera capçaleres compatibles amb l'empaquetat antic rpm2 i 3" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "no es pot crear %%%s %s\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "no es pot escriure a %%%s %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "no es pot consultar %s: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "ha fallat l'execució\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "depura la gestió de la memòria cau d'URL" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "" +#~ "substitueix les seccions referents a la internacionalització del fitxer " +#~ "d'especificació" + +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "no puc obrir la base de dades Solve a %s\n" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " Resolucions suggerides:\n" + +#~ msgid "(index out of range)" +#~ msgstr "(índex fora de rang)" + +#~ msgid "Success" +#~ msgstr "Correcte" + +#~ msgid "Bad server response" +#~ msgstr "Resposta incorrecta del servidor" + +#~ msgid "Server I/O error" +#~ msgstr "Error d'E/S del servidor" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "No s'ha pogut resoldre l'adreça del servidor" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "No s'ha pogut resoldre el nom de l'adreça del servidor" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "No s'ha pogut establir la connexió de dades del servidor" + +#~ msgid "I/O error to local file" +#~ msgstr "Error d'E/S al fitxer local" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "S'ha produït un error en establir el servidor remot a mode passiu" + +#~ msgid "File not found on server" +#~ msgstr "No s'ha trobat el fitxer al servidor" + +#~ msgid "Abort in progress" +#~ msgstr "S'està interrompent" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Error desconegut o inesperat" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "" +#~ "no actualitzis la base de dades de la memòria cau, només escriu els " +#~ "camins dels paquets" + +#~ msgid "File tree walk options:" +#~ msgstr "Opcions del recorregut de fitxers de l'arbre:" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: la macro %%{_cache_dbpath} està mal configurada.\n" + +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: ha fallat l'operació de la memòria cau: ec %d.\n" + +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: ha fallat headerGetEntry\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "ha fallat l'expansió de %s a %s:%d «%s»\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "No es pot expandir %s\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "No es pot llegir %s, el valor de HOME és massa llarg.\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "ha fallat la lectura de cpio_copy: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "S'ha arribat al límit per a %%docdir\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "línia %d: es necessita un argument per a %%patch -b: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "línia %d: es necessita un argument per a %%patch -z: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "línia %d: l'argument per a %%patch -F és incorrecte: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "línia %d: es necessita un argument per a %%patch -p: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "línia %d: l'argument a %%patch -p és incorrecte: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "Hi ha massa pedaços\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "línia %d: l'argument a %%patch és incorrecte: %s\n" + +#~ msgid "debug option/argument processing" +#~ msgstr "depura el processament d'opcions/arguments" + +#~ msgid "skip %%license files" +#~ msgstr "omet fitxers %%license" + +#~ msgid "skip %%readme files" +#~ msgstr "omet fitxers %%readme" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "ha fallat la lectura: %s (%d)\n" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "" +#~ "desa els fitxers de paquets suprimits reanomenant-los en subdirectoris" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "desa els fitxers de paquets suprimits en reempaquetar" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Unable to reload signature header\n" +#~ msgstr "No es pot tornar a carregar la capçalera de la signatura\n" + +#~ msgid "Repackaging..." +#~ msgstr "S'està reempaquetant..." + +#~ msgid "Repackaging erased files..." +#~ msgstr "S'està reempaquetant els fitxer esborrats..." + +#~ msgid "Upgrading..." +#~ msgstr "S'està actualitzant..." + +#~ msgid "Upgrading packages..." +#~ msgstr "S'està actualitzant els paquets..." + +#~ msgid "Cleaning up repackaged packages:\n" +#~ msgstr "S'està esborrant els paquets reempaquetats:\n" + +#~ msgid "\tRemoving %s:\n" +#~ msgstr "\tS'està esborrant %s:\n" + +#~ msgid "Could not get install element database instance!\n" +#~ msgstr "" +#~ "No s'ha pogut obtenir la instància de l'element d'instal·lació de la base " +#~ "de dades.\n" + +#~ msgid "\tAdded from install element %s.\n" +#~ msgstr "\tS'ha afegit de l'element d'instal·lació %s.\n" + +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "S'ha produït un error en reempaquetar el paquet\n" + +#~ msgid "Add failed. Could not read package header.\n" +#~ msgstr "No s'ha pogut afegir. No es pot llegir la capçalera de paquet.\n" + +#~ msgid "Add failed in rpmpsmStage().\n" +#~ msgstr "No s'ha pogut afegir a rpmpsmStage().\n" + +#~ msgid "Add failed. Could not get file list.\n" +#~ msgstr "No s'ha pogut afegir. No es pot obtenir la llista de fitxers.\n" + +#~ msgid "Erase failed failed in rpmpsmStage().\n" +#~ msgstr "No s'ha pogut suprmir a rpmpsmStage().\n" + +#, fuzzy +#~ msgid "\texecv(%s) pid %d\n" +#~ msgstr "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" + +#, fuzzy +#~ msgid "\twaitpid(%d) rc %d status %x\n" +#~ msgstr "%s: waitpid(%d) rc %d estat %x segs %u.%03u\n" + +#~ msgid " Obsoletes: %s\t\terases %s\n" +#~ msgstr " Fa obsolet: %s\t\tsuprimeix %s\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== s'està gravant les relacions d'ordenació\n" + +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== només els successors (%d bytes)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== s'està continuant l'ordenació ...\n" + +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "%5d 0x%04x %s %s\n" + +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========== Directoris no inclosos explícitament en el paquet:\n" + +#~ msgid "%10d %s\n" +#~ msgstr "%10d %s\n" + +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "%s el directori s'ha creat amb permisos %04o, sense context.\n" + +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "%s el directori s'ha creat amb permisos %04o, context %s.\n" + +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "S'estan afegint %d arguments del manifest.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "inhabilita l'ús de libio(3) API" + +#~ msgid "%s: waitpid(%d) rc %d status %x secs %u.%03u\n" +#~ msgstr "%s: waitpid(%d) rc %d estat %x segs %u.%03u\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) s'està executant l'scriptlet .\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) s'està ignorant el «%s» redundant.\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) %ssynchronous scriptlet start\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) s'ha iniciat l'scriptlet %ssíncron\n" + +#~ msgid "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" +#~ msgstr "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" + +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s té %d fitxers, prova = %d\n" + +#~ msgid "Attempting to mark %s as installed in score board(%p).\n" +#~ msgstr "" +#~ "S'està intentant marcar %s com a instal·lat a la taula de puntuacions" +#~ "(%p).\n" + +#~ msgid "Attempting to mark %s as erased in score board(%p).\n" +#~ msgstr "" +#~ "S'està intentant marcar %s com a esborrat a la taula de puntuació(%p).\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "número de registre de paquet: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "el paquet %s no ha satisfet %s: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s s'ha ignorat perquè manca el senyalador missingok\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== reubicacions\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d exclou %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d reubica %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "s'està excloent %s %s\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "s'està reubicant %s a %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "s'està reubicant el directori %s a %s\n" + +#~ msgid "Adding goal: %s\n" +#~ msgstr "S'està afegint un objectiu: %s\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... com a %s\n" + +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "\ts'ha afegit el paquet font [%d]\n" + +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "\ts'ha afegit el paquet binari [%d]\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "s'ha trobat %d paquets font i %d paquets binaris\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "s'està instal·lant els paquets binaris\n" + +#~ msgid "Adding: %s\n" +#~ msgstr "S'està afegint: %s\n" + +#~ msgid "Suggesting: %s\n" +#~ msgstr "Suggerència: %s\n" + +#~ msgid "mounted filesystems:\n" +#~ msgstr "sistemes de fitxers muntats:\n" + +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "%5d 0x%08x %8u %12ld %12ld %s\n" + +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "\tS'està assignant espai per a %d entrades\n" + +#~ msgid "\t\tEntry address: %p\n" +#~ msgstr "\t\tAdreça de l'entrada: %p\n" + +#~ msgid "\tRefcount is zero...will free\n" +#~ msgstr "\tEl nombre de referències és zero... s'alliberarà\n" + +#~ msgid "\tFound entry at address: %p\n" +#~ msgstr "\tS'ha trobat una entrada a l'adreça: %p\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "Mida esperada: %12d = cap(%d)+sigs(%d)+farciment(%d)+dades(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " Mida real: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Signatura: mida(%d)+farciment(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "Mida de la signatura del PGP: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "S'han rebut %d bytes de la signatura PGP\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "Mida de la signatura del GPG: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "S'han rebut %d bytes de la signatura del GPG\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "s'està excloent el directori %s\n" + +#~ msgid "Getting repackaged header from transaction element\n" +#~ msgstr "" +#~ "S'està obtenint la capçalera reempaquetada de l'element de la transacció\n" + +#~ msgid "\tLooking for %s...\n" +#~ msgstr "\tS'està cercant %s...\n" + +#~ msgid "\tMatches found.\n" +#~ msgstr "\tS'han trobat coincidències.\n" + +#~ msgid "\tNo matches found.\n" +#~ msgstr "\tNo s'han trobat coincidències.\n" + +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "\tNo s'ha trobat el paquet reempaquetat.\n" + +#~ msgid "\tREMOVETID matched INSTALLTID.\n" +#~ msgstr "\tREMOVETID coincideix amb INSTALLTID.\n" + +#~ msgid "\t\tName: %s.\n" +#~ msgstr "\t\tNom: %s.\n" + +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "\tEl paquet reempaquetat era %s...\n" + +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "\tS'ha afegit la capçalera del paquet reempaquetat: %s.\n" + +#~ msgid "\tAdded erase element.\n" +#~ msgstr "\tS'ha afegit l'element de supressió.\n" + +#~ msgid "\tFound existing upgrade element.\n" +#~ msgstr "\tS'ha trobat l'element d'actualització existent.\n" + +#~ msgid "\tNot adding erase element for %s.\n" +#~ msgstr "\tNo s'està afegint l'element de supressió per a %s.\n" + +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "\tS'ha afegit el paquet reempaquetat %s.\n" + +#~ msgid "\tAdded from erase element %s.\n" +#~ msgstr "\tS'ha afegit des de l'element de supressió %s.\n" + +#~ msgid "\tNo repackaged package...nothing to do.\n" +#~ msgstr "\tNo s'ha reempaquetat el paquet... res a fer.\n" + +#~ msgid "sanity checking %d elements\n" +#~ msgstr "s'està fent la comprovació de sanitat de %d elements\n" + +#~ msgid "running pre-transaction scripts\n" +#~ msgstr "s'està executant els scripts anteriors a la transacció\n" + +#~ msgid "computing file dispositions\n" +#~ msgstr "s'està calculant les disposicions dels fitxers\n" + +#~ msgid "running post-transaction scripts\n" +#~ msgstr "s'està executant els scripts posteriors a la transacció\n" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "tancat entorn de bd %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "suprimit entorn de bd %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "obrint entorn de bd %s/%s %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "tancat índex de bd %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "obrint índex de bd %s/%s %s mode=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "blocat índex bd %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "s'està suprimint «%s» de l'índex %s.\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "s'està suprimint %d entrades de l'índex %s.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "s'està afegint «%s» a l'índex de %s.\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "s'estan afegint %d entrades a l'índex %s.\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "s'està suprimint %s després del remuntatge del db3.\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "s'està remuntant la base de dades %s a %s\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "s'està creant el directori %s\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "s'està creant el directori %s: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "s'està obrint la base de dades antiga amb dbapi %d\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "s'està obrint la nova base de dades amb dbapi %d\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "s'està suprimint el directori %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "tancat índex de bd %s/%s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "obrint índex de bd %s/%s %s mode=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: llegeix %s: %s\n" + +#~ msgid "Unable to write final header\n" +#~ msgstr "No es pot escriure la capçalera final\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "aquesta versió d'RPM no implementa l'empaquetament de la versió 1\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "aquesta versió d'RPM només permet empaquetar amb valors <=4\n" + +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: no es pot signar un empaquetat v1\n" + +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: no es pot tornar a signar un empaquetat v2\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: cap signatura disponible (v1.0 RPM)\n" + +#~ msgid "package %s pre-transaction syscall(s): %s failed: %s" +#~ msgstr "" +#~ "crides de sistema anteriors a la transacció del paquet %s: ha fallat %s: " +#~ "%s" + +#~ msgid "Please contact rpm-maint@lists.rpm.org\n" +#~ msgstr "Si us plau, contacteu amb rpm-maint@listis.rpm.org\n" + +#~ msgid "%s: no newline on line number %d (only read %s)\n" +#~ msgstr "%s: no hi ha final de línia a la línia %d (només s'ha llegit %s)\n" + +#~ msgid "%s: line number %d is missing fields (only read %s)\n" +#~ msgstr "%s: manquen camps a la línia número %d (només s'ha llegit %s)\n" + +#~ msgid "" +#~ "%s: unable to compile regular expression %s on line number %d: %s\n" +#~ msgstr "" +#~ "%s: no es pot compilar l'expressió regular %s a la línia número %d: %s\n" + +#~ msgid "%s: invalid type specifier %s on line number %d\n" +#~ msgstr "%s: tipus d'especificador %s invàlid a la línia %d\n" + +#~ msgid "%s: invalid context %s on line number %d\n" +#~ msgstr "%s: context invàlid %s a la línia %d\n" + +#~ msgid "" +#~ "unshared posix mutexes found(%d), adding DB_PRIVATE, using fcntl lock\n" +#~ msgstr "" +#~ "s'han trobat %d mútexs posix sense compartir, s'està afegint DB_PRIVATE, " +#~ "s'està emprant el blocatge amb fcntl\n" + +#~ msgid "logging into %s as %s, pw %s\n" +#~ msgstr "s'està entrant a %s com a %s, contrasenya %s\n" + +#~ msgid "warning: u %p ctrl %p nrefs != 0 (%s %s)\n" +#~ msgstr "avís: u %p ctrl %p nrefs != 0 (%s %s)\n" + +#~ msgid "warning: u %p data %p nrefs != 0 (%s %s)\n" +#~ msgstr "avís: u %p data %p nrefs != 0 (%s %s)\n" + +#~ msgid "warning: _url_cache[%d] %p nrefs(%d) != 1 (%s %s)\n" +#~ msgstr "avís: _url_cache[%d] %p nrefs(%d) != 1 (%s %s)\n" + +#~ msgid "Password for %s@%s: " +#~ msgstr "Contrasenya per a %s@%s: " + +#~ msgid "error: %sport must be a number\n" +#~ msgstr "error: %sport ha de ser un número\n" + +#~ msgid "debug FTP/HTTP data stream" +#~ msgstr "depura el flux de dades FTP/HTTP" + +#~ msgid "debug argv collections" +#~ msgstr "depura les col·leccions d'arguments" + +#~ msgid "debug WebDAV data stream" +#~ msgstr "depura el flux de dades WebDAV" + +#~ msgid "use anaconda \"presentation order\"" +#~ msgstr "utilitza l'«ordre de presentació» de l'anaconda" diff --git a/po/cs.gmo b/po/cs.gmo new file mode 100644 index 0000000..f769459 Binary files /dev/null and b/po/cs.gmo differ diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..eb81a11 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,4184 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.0.3\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2001-07-24 10:02+0100\n" +"Last-Translator: Jindrich Novy \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM verze %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Copyright (C) 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Tento program lze volnÄ› šířit podle podmínek GNU GPL\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "vytvoÅ™ení roury pro --pipe selhalo: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "spuÅ¡tÄ›ní selhalo\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "parametr není RPM balíÄek\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "chyba pÅ™i pÅ™i Ätení hlaviÄky balíÄku\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "nemohu znovu otevřít payload: %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "dotaz/ověření balíÄků ve skupinÄ›" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Volby dotazů (s -q nebo --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Vollby kontroly (s -V nebo --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Volby pro Instalaci/Aktualizaci/Mazání:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "SpoleÄné volby pro vÅ¡echny rpm režimy a spustitelné soubory:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "najednou lze provést jen jeden typ dotazu Äi ověření" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "neoÄekávaný příznak pro dotaz" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "neoÄekávaný formát dotazu" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "neoÄekávaný zdroj dotazu" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "specifikovat lze jen jeden hlavní režim" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"vynucena může být jen instalace, aktualizace, smazání zdrojových kódů a spec " +"souboru" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "soubory mohou být pÅ™emístÄ›ny jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "nemohu použít --prefix s --relocate nebo --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate a --excludepath je možno použít jen pÅ™i instalaci nových balíÄků" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix je možno použít jen pÅ™i instalaci nových balíÄků" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "parametry pro --prefix musejí zaÄínat znakem /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "použít lze jen jeden z parametrů --excludedocs a --includedocs" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles může být použit jen pÅ™i instalaci balíÄků" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb může být použit jen pÅ™i instalaci a odstraňování balíÄků" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"volba pro potlaÄení skriptů může být použita jen pÅ™i instalaci nebo pÅ™i " +"odstraňování balíÄků" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"volba pro potlaÄení triggerů může být použita jen pÅ™i instalaci nebo " +"odstraňování balíÄků" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "--test může být použit jen pÅ™i instalaci, odstraňování a sestavování" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb může být použit jen pÅ™i instalaci a odstraňování balíÄků" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "parametry pro --root (-r) musejí zaÄínat znakem /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "nezadány žádné balíÄky pro vymazání" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "nezadány žádné balíÄky pro instalaci" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "k dotazu nezadány žádné parametry" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "pro kontrolu nezadány žádné balíÄky" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot byl již nastaven, ignoruji %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"sestavení podle %prep (rozbalení zdrojových kódů a aplikace patchů) podle " +"" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "sestavení podle %build (%prep, pak kompilace) podle " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"sestavení podle %install (%prep, %build, pak install) podle " + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "kontrola Äásti %files ve " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "vytvoÅ™ení zdrojového a binárního balíÄku podle " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "vytvoÅ™ení pouze binárního balíÄku podle " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "vytvoÅ™ení zdrojového balíÄku podle " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"sestavení podle %prep (rozbalení zdrojových kódů, aplikace patchů) z " +"" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "sestavení podle %build (%prep, pak kompilace) z " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "sestavení podle %%install (%prep, %build, pak install) z " + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "kontrola Äásti %files z " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "vytvoÅ™ení zdrojového a binárního balíÄku z " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "vytvoÅ™ení pouze binárního balíÄku z " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "vytvoÅ™ení pouze zdrojového balíÄku z " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "vytvoÅ™ení binárního balíÄku ze " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "sestavení podle %%install (vÄetnÄ› %prep, %build) ze " + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "build root pÅ™edefinován" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "po dokonÄení odstranit sestavovací strom" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ignorovat ExcludeArch: direktivy ve spec souboru" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "ladit nástroj stavu souborů" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "nespouÅ¡tÄ›t žádné etapy vytváření balíÄku" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "nekontrolovat závislosti balíÄků" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "generovat hlaviÄky balíÄků kompatibilní s RPM verze 2 a 3" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "neakceptovat i18N popisky ze spec souboru" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "po dokonÄení odstranit zdrojové kódy" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "po dokonÄení odstranit spec soubor" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "pÅ™eskoÄit přímo na urÄenou etapu (pouze pro c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "cílová platforma pÅ™edefinována" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" +"Sestavovací volby s [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Chybné závislosti pÅ™i sestavování:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Nelze otevřít spec soubor %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Nelze otevřít rouru pro tar: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Nelze Äíst spec soubor z %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Nelze pÅ™ejmenovat %s na %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "nemohu zjistit stav %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Soubor %s není obyÄejný soubor.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Nezdá se, že by %s byl spec soubor.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Sestavuji cílové platformy: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Sestavuji pro cíl %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "inicializuj databázi" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "znovu sestav obrácené seznamy z instalovaných hlaviÄek balíÄků" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "zkontrolovat databázové soubory" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Volby databáze:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "ověřit podpis v balíÄku" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "importuj obrnÄ›ný veÅ™ejný klíÄ" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Volby signatury:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "nezadány žádné parametry" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "nainstalovat balíÄky" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "podepsat balíÄek (identické s --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "vymazat podpisy balíÄku" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Volby signatury:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Nemohu spustit %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Je nutné nastavit \"%%_gpg_name\" ve vaÅ¡em souboru maker\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Vložte heslovou frázi: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Heslová fráze je v pořádku.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Chybná heslová fráze\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "dotaz na spec soubor" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "dotaz na spec soubor" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "použij následující formát dotazů" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Volby signatury:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "k dotazu nezadány žádné parametry" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Nelze otevřít doÄasný soubor.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "ProvádÄ›ní(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "SpuÅ¡tÄ›ní %s selhalo (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Å patný návratový kód z %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"chyby sestavení RPM:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "chyba syntaxe pÅ™i zpracování ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "chyba syntaxe pÅ™i zpracování &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "chyba syntaxe pÅ™i zpracování ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "chyba pÅ™i parsování ve výrazu\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "nedoplnÄ›ná (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- jen na Äíslech\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! jen na Äíslech\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "typy musí souhlasit\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / nejsou podporovány pro Å™etÄ›zce\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- není podporováno pro Å™etÄ›zce\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& a || není podporováno pro Å™etÄ›zce\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "chyba syntaxe ve výrazu\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Chybí '(' v %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Chybí ')' v %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Neplatný %s token: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "ChybÄ›jící %s v %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Následuje neprázdný znak %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Å patná syntaxe: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Å patná práva spec: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Å patná práva adresáře: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Neobvyklá délka locale: \"%.*s\" v %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Duplicitní locale %.*s v %%lang(%s)\n" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Neplatný %s token: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Jen jeden parametr pro %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Dva soubory na jednom řádku: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Soubor musí zaÄínat na \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Nelze míchat speciální %%doc s ostatnímí formami: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Soubor uveden dvakrát: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s unlink %s selhal: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Symbolická linka ukazuje na BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Soubor nenalezen: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Soubor nenalezen: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: nemohu nahrát neznámou znaÄku (%d).\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: Ätení veÅ™ejného klíÄe selhalo.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: není obrnÄ›ný veÅ™ejný klíÄ.\n" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "Selhalo vyhodnocení makra %%%s\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Soubor potÅ™ebuje úvodní \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Glob není dovolen: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Soubor nenalezen globem: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Soubor nenalezen globem: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Nemohu otevřít %%files soubor %s: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "řádek: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Å patný soubor: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Å patný vlastník/skupina: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Kontroluji nezabalené soubory: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Nalezeny instalované, ale nezabalené soubory:\n" +"%s" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "Zpracovávám soubory: %s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "vytváření archívu selhalo na souboru %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "vytváření archívu selhalo: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "zápis cpio_copy selhal: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "Ätení cpio_copy selhalo: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: řádek: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Nemohu získat jméno poÄítaÄe: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Nemohu otevřít PreIn soubor: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Nemohu otevřít PreUn soubor: %s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Nemohu otevřít PreIn soubor: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Nemohu otevřít PostIn soubor: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Nemohu otevřít PostUn soubor: %s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Nemohu otevřít PostIn soubor: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Nemohu otevřít VerifyScript soubor: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Nemohu otevřít soubor se spuÅ¡tí (trigger): %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Neznámá komprese payloadu: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Nemohu vytvoÅ™it nezmÄ›nitelný region hlaviÄky.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Nemohu zapsat doÄasnou hlaviÄku\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Å patná CSA data\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Nemohu znovu pÅ™eÄíst hlaviÄku podpisu.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Nemohu otevřít %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Nemohu zapsat balíÄek: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Nemohu otevřít cíl pro podepsání %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Nemohu pÅ™eÄíst hlaviÄku z %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Nemohu zapsat hlaviÄku do %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Nemohu pÅ™eÄíst payload z %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Nemohu zapsat payload do %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Zapsáno: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "ProvádÄ›ní(%s): %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "SpuÅ¡tÄ›ní %s selhalo (%s): %s\n" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Chybná heslová fráze\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Nemohu vygenerovat jméno souboru pro balíÄek %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "nemohu vytvoÅ™it %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "řádek: %d: druhý %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "Položky v %%changelog musí zaÄínat znakem *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "nekompletní položka v %%changelog\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "Å¡patný datum v %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog není seÅ™azen sestupnÄ› podle Äasu\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "chybÄ›jící jméno v %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "žádný popis v %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "řádek %d: Chyba pÅ™i parsování %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "řádek %d: Å¡patná volba %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "řádek %d: PříliÅ¡ mnoho jmen: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "řádek %d: BalíÄek neexistuje: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "řádek %d: Druhé description\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "řádek %d: Chyba pÅ™i parsování %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "řádek %d: Chyba pÅ™i parsování %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "řádek %d: Å patné Äíslo: %s\n" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "řádek %d: Å patné Äíslo %s: %d\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "řádek %d: Å patné Äíslo %s: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "\"%s\" specifikuje více balíÄků\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Architektura je vyÅ™azena: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Architektura není zahrnuta: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "OS je vyÅ™azen: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "OS není zahrnut: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "Položka %s musí být v balíÄku přítomna: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Duplikovaná položka %s v balíÄku: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "Å¡patný _docdir_fmt: %s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Nemohu otevřít ikonu %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Nemohu pÅ™eÄíst ikonu %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Neznámý typ ikony: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "řádek %d: ZnaÄka má jen jeden token: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "řádek %d: Nepřípustný znak '-' v %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "řádek %d: Nepřípustný znak '-' v %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "řádek %d: Nepřípustný znak '-' v %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "řádek %d: PoÄkozená znaÄka: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "řádek %d: Prázdná znaÄka: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "řádek %d: Prefixy nesmí konÄit znakem \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "řádek %d: Docdir musí zaÄínat na '/': %s\n" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "řádek %d: Položka Epoch musí být Äíslo: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "řádek %d: Å patné urÄení %s: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "řádek %d: Å patný formát BuildArchitecture: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Interní chyba: Å patná znaÄka: %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "řádek %d: Vyžadována verze: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Å patná specifikace balíÄku: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "BalíÄek již existuje: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "řádek %d: Neznámá znaÄka: %s\n" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "BuildRoot nemůže být prázdný\n" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "BuildRoot nemůže být \"/\"\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Å patný zdrojový soubor: %s: %s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "Patch Äíslo %d neexistuje\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "Zdroj Äíslo %d neexistuje\n" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "zdrojový balíÄek neobsahuje .spec soubor\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Nemohu naÄíst nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Chyba pÅ™i parsování %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "řádek %d: Å patný parametr v %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "řádek %d: Å patná volba v %%setup %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +# c-format +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "Neplatné Äíslo záplaty %s: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "řádek %d: druhý %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"řádek %d: Položky v závislostech musí zaÄínat alfanumerickým znakem, '_' " +"nebo '/': %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "řádek %d: Jméno s verzí není dovoleno: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "řádek %d: Vyžadována verze: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "řádek %d: Å patné Äíslo: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "řádek %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "řádek %d: spouÅ¡tÄ› (triggery) musí mít --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "řádek %d: Chyba pÅ™i parsování %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "řádek %d: vnitÅ™ní skript musí konÄit na '>': %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "řádek %d: jméno skriptu musí zaÄínat na '/': %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "řádek %d: Druhý %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "řádek %d: nepodporovaný interní skript: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "řádek %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Nemohu otevřít %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "NeuzavÅ™ený %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean vrátil %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: %%else bez poÄíteÄního %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: %%endif bez poÄáteÄního %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "poÅ¡kozený příkaz %%include\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Nenalezeny žádné kompatibilní architektury pro sestavení\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "BalíÄek nemá žádné %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Nelze Äíst spec soubor z %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Nelze Äíst spec soubor z %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Nelze Äíst spec soubor z %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Nelze otevřít rouru pro tar: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Chyba pÅ™i parsování %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "ProvádÄ›ní(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "ChybÄ›jící %s v %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "PříliÅ¡ mnoho argumentů na datovém řádku na %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Zpracovávám soubory: %s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "řádek %d: Å patné Äíslo: %s\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Nemohu vytvoÅ™it rouru pro %s: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Nemohu spustit %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Nemohu provést fork %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s selhalo: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "Nemohu zapsat vÅ¡echna data do %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "gpg selhal pÅ™i zápisu podpisu\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) selhalo: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load selhal: %s\n" + +#: build/rpmfc.c:999 +#, fuzzy, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "magic_file(ms, \"%s\") selhal: mód %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Hledám %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Selhalo vyhledání %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "dotaz na spec soubor %s selhal, nemohu parsovat\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(chyba: 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Å patné magické Äíslo" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Å patná nebo neÄitelná hlaviÄka" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Velikost hlaviÄky je pÅ™iliÅ¡ velká" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Neznámý typ souboru" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "ChybÄ›jící hardlink(y)" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "MD5 souÄet nesouhlasí" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Interní chyba" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "Soubor z archivu není v hlaviÄce" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr "selhal - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "balíÄek %s byl již pÅ™idán, pÅ™eskakuji %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "balíÄek %s byl již pÅ™idán, nahrazuji ho s %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(není Äíslo)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(není base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(neplatný typ)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(není blob)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(neplatný typ xml)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(není OpenPGP podpis)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normální " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "nahrazen " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "neinstalován " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "sdílen v síti " + +#: lib/formats.c:600 +#, fuzzy +msgid "wrong color" +msgstr "Å¡patná barva " + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "chybí %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(neznámý %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(není Äíslo)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "uživatel %s neexistuje - použit uživatel root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "skupina %s neexistuje - použita skupina root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "soubor z archivu %s nebyl nalezen v seznamu souborů v hlaviÄce\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s uloženo jako %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s odstranÄ›ní %s selhalo: Adresář není prázdný\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir %s selhal: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s unlink %s selhal: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s vytvoÅ™en jako %s\n" + +#: lib/package.c:192 +#, fuzzy, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "pÅ™eskakuji balíÄek %s s neověřitelným V%u podpisem\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "velikost blobu(%d): Å PATNÃ, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "znaÄka[%d]: Å PATNÃ, znaÄka %d typ %d offset %d poÄet %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "offset regionu: Å PATNÃ, znaÄka %d typ %d offset %d poÄet %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "trailer regionu: Å PATNÃ, znaÄka %d typ %d offset %d poÄet %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "velikost regionu: Å PATNÃ, ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: Å PATNÃ, není v hexa\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr RSA: Å PATNÃ, není binární\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr DSA: Å PATNÃ, není binární\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hdr velikost (%d): Å PATNÃ, Ätení vrátilo %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "hdr magic: Å PATNÃ\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "hdr znaÄky: Å PATNÉ, poÄet znaÄek (%d) mimo rozsah\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "hdr data: Å PATNÃ, bajtů (%d) mimo rozsah\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr blob(%zd): Å PATNÃ, Ätení vrátilo %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "nahrátí hdr: Å PATNÉ\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature selhalo: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Žádný podpis k dispozici\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead selhal: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread selhalo: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s is a Delta RPM a nemůže být přímo instalován\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Nepodporovaný payload (%s) in balíÄku %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "pÅ™edefinuj s hodnotou " + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "' '" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "definuj s hodnotou " + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "vypsat expanzi makra " + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "''" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "Äíst místo implicitního souboru" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "nekontrolovat souhrny balíÄku" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "nekontrolovat získané hlaviÄky databáze" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "nekontrolovat podpisy balíÄku" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "odeslat stdout do " + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "použít jako adresář nejvyšší úrovnÄ›" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "zobrazit známé znaÄky pro dotazy" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "zobrazit finální konfiguraci rpmrc a maker" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "poskytnout výstu s ménÄ› detaily" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "poskytnout detailnÄ›jší výstup" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "vypsat používanou verzi rpm" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "ladit nástroj stavu souboru payload" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "ladit rpmio I/O" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: tabulka voleb Å¡patnÄ› nakonfigurována (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "vynechané cesty musí zaÄínat znakem /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "pÅ™emístÄ›ní musejí zaÄínat znakem /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "pÅ™emístÄ›ní musejí obsahovat =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "pÅ™emístÄ›ní musejí mít za znakem = znak /" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"nainstalovat vÅ¡echny soubory i konfigurace, které by se jinak mohly vynechat" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"odstranit vÅ¡echny balíÄky odpovídající (obvykle se generuje chyba, " +"specifikuje-li více balíÄků)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "pÅ™emístÄ›ní souborů v nepÅ™emístitelném balíÄku" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "zobraz závislostní smyÄky jako varování" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "smazat (deinstalovat) balíÄek" + +#: lib/poptI.c:131 +msgid "+" +msgstr "" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "neinstaluj konfiguraÄní soubory" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "neinstalovat dokumentaci" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "pÅ™eskoÄit soubory s úvodní cestou " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "zkratka pro --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "aktualizace balíÄku jestliže je již nainstalován" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "bÄ›hem instalace balíÄku zobrazit dvojité křížky (dobré s -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "nekontrolovat architekturu balíÄku" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "nekontrolovat operaÄní systém balíÄku" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "nekontrolovat volné místo na disku pÅ™ed instalací" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "nainstalovat dokumentaci" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "nainstalovat balíÄky" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "upravit databázi, ale neupravovat systém souborovů" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "nekontrolovat závislosti balíÄků" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "nekontrolovat MD5 souborů v balíÄku" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "nekontrolovat MD5 souborů v balíÄku" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "neinstalovat bezpeÄnostní kontexty souboru" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "pro vyÅ™eÅ¡ení závislostí nemÄ›nit poÅ™adí instalace balíÄků" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "nespouÅ¡tÄ›t žádné skripty urÄené pro balíÄky" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "nespouÅ¡tÄ›t žádné skripty (jsou-li nÄ›jaké)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "nespouÅ¡tÄ›t žádné skripty (jsou-li nÄ›jaké)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "nespouÅ¡tÄ›t žádné skripty (jsou-li nÄ›jaké)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "nespouÅ¡tÄ›t žádné skripty (jsou-li nÄ›jaké)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "nespouÅ¡tÄ›t žádné skripty aktivované tímto balíÄkem" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "nespouÅ¡tÄ›t žádné skripty urÄené pro balíÄky" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "nespouÅ¡tÄ›t žádné instalaÄní skripty" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "nespouÅ¡tÄ›t žádné instalaÄní skripty" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "nespouÅ¡tÄ›t žádné instalaÄní skripty" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"aktualizovat na starou verzi balíÄku (--force to dÄ›lá pÅ™i aktualizacích " +"automaticky)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "bÄ›hem instalace balíÄku zobrazit procenta" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "pÅ™emístit soubory do , jsou-li pÅ™emístitelné" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "pÅ™emístit soubory ze do " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "ignoruj souborové konflikty mezi balíÄky" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "pÅ™einstalovat, i když je již balíÄek přítomen" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "neinstalovat ale sdÄ›lit, zda-li by to fungovalo Äi nikoli" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "aktualizace balíÄku" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "dotázat/ověřit vÅ¡echny balíÄky" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "režim rpm checksig" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "dotaz/ověření balíÄků vlastnícího soubor" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "dotaz/ověření balíÄků ve skupinÄ›" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "dotázat/ověřit soubor balíÄku" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "dotaz/ověření balíÄků s identifikátorem balíÄku" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "dotaz/ověření balíÄků s hlaviÄkovým identifikátorem" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "režim dotazů" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "dotaz/ověření hlaviÄkové instance" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "dotaz/ověření balíÄků z instalaÄní transakce" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "dotaz na balíÄky aktivované balíÄkem" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "režim kontroly" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "dotaz/ověření balíÄků vyžadujících závislost" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "dotaz/ověření balíÄků poskytujících závislost" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "neseparuj argumenty" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "nezpracovávej nebalíÄkové soubory jako seznamy" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "vypsat vÅ¡echny konfiguraÄní soubory" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "vypsat vÅ¡echny soubory s dokumentací" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "zobrazit základní informace o souborech" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "vypsat soubory v balíÄku" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "vynechat %%ghost soubory" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "zobrazit stav vypsaných souborů" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "nekontrolovat velikost souborů" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "nekontrolovat cesty symbolických linek" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "nekontrolovat vlastníka souborů" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "nekontrolovat skupinu souborů" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "nekontrolovat Äas zmÄ›ny souboru" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "nekontrolovat mód souborů" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "nekontrolovat velikost souborů" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "nekontrolovat bezpeÄnostní kontexty souboru" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "nekontrolovat soubory v balíÄku" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "nekontrolovat závislosti balíÄků" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "nespouÅ¡tÄ›t kontrolní skripty" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "chybí arcitektura pro %s na %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "oÄekávám balíÄek se zdrojovými kódy, nalezen vÅ¡ak binární\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "zdrojový balíÄek neobsahuje .spec soubor\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "rozbalování archívu selhalo %s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " na souboru " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s selhal na souboru %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s selhalo: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "nesprávný formát: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(neobsahuje žádné soubory)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normální " + +#: lib/query.c:163 +msgid "replaced " +msgstr "nahrazen " + +#: lib/query.c:166 +msgid "not installed " +msgstr "neinstalován " + +#: lib/query.c:169 +msgid "net shared " +msgstr "sdílen v síti " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "Å¡patná barva " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(chybí stav) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(neznámý %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "balíÄek nemá vlastníka souboru ani seznamy skupin\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "balíÄek nemá vlastníka souboru ani seznamy id\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "skupina %s neobsahuje žádné balíÄky\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "žádný balíÄek neaktivuje %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "poÅ¡kozený %s: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "žádný balíÄek se neshoduje s %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "žádný balíÄek nevyžaduje %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "žádný balíÄek neposkytuje %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "soubor %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "soubor %s nevlastní žádný balíÄek\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "neplatné Äíslo balíÄku: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "záznam %lu nelze pÅ™eÄíst\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "balíÄek %s není nainstalován\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "neznámá znaÄka: \"%s\"\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: import selhal.\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: není obrnÄ›ný veÅ™ejný klíÄ.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: importní Ätení selhalo(%d).\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead selhal\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"%s: NezmÄ›nitelná oblast hlaviÄky nemůže být Ätena. PoÅ¡kozený balíÄek?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "pÅ™eskakuji balíÄek %s s neověřitelným V%u podpisem\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NENà OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr "(CHYBÄšJÃCà KLÃÄŒE:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr "(NEDÅ®VÄšRYHODNÉ KLÃÄŒE:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: otevÅ™ení selhalo: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Není možné zmÄ›nit koÅ™enový adresář: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s odstranÄ›ní %s selhalo: Adresář není prázdný\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Není možné zmÄ›nit koÅ™enový adresář: %m\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Není možné zmÄ›nit koÅ™enový adresář: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NE " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "ANO" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "PreReq:, Provides:, a Obsoletes: verze pro podporu závislostí." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "jména souborů uložená jako diName,baseName,dirIndex, ne jako cesta." + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "payload balíÄku může být komprimován pomocí bzip2." + +#: lib/rpmds.c:873 +#, fuzzy +msgid "package payload can be compressed using xz." +msgstr "payload balíÄku může být komprimován pomocí lzma." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "payload balíÄku může být komprimován pomocí lzma." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "soubory payloadu balíÄku mají pÅ™edponu \"./\"." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "NVR balíÄku není implicitnÄ› zprostÅ™edkována." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "znaÄky hlaviÄky jsou vždy setřízeny po nahrátí." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "interpret skriptletů může použít argumenty z hlaviÄky." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "hardlinkovaný soubor může být instalován bez toho, aby byl kompletní." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "skriptlety balíÄku mohou pÅ™istupovat k rpm databázi pÅ™i instalaci." + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "interní podpora pro lua skripty." + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "skriptlety balíÄku mohou pÅ™istupovat k rpm databázi pÅ™i instalaci." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "otevÅ™ení %s selhalo: %s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: není rpm balíÄkem (nebo seznamem balíÄků): %s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "PÅ™ipravuji..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "PÅ™ipravuji balíÄky pro instalaci..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Selhalé závislosti:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: není rpm balíÄkem (nebo seznamem balíÄků): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s nemůže být nainstalován\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Získávám %s\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "pÅ™eskakuji %s - pÅ™enost selhal - %s\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "balíÄek %s není pÅ™emístitelný\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "chyba pÅ™i vytváření doÄasného souboru %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "soubor %s vyžaduje novÄ›jší verzi RPM\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" specifikuje více balíÄků\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "nemohu otevřít %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Instaluji: %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "není rpm balíÄek" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "nepovolený typ podpisu" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "nepodporovaná verze RPM balíÄku" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "Ätení selhalo: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "není rpm balíÄek" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "nemohu vytvoÅ™it transakÄní zámek pro %s (%s)\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "Äekám na transakÄní zámek pro %s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "nemohu otevřít %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Nelze pÅ™ejmenovat %s na %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Nelze pÅ™ejmenovat %s na %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "jiný" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "balíÄek %s je urÄený pro architekturu %s" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "balíÄek %s je urÄený pro operaÄní systém %s" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "balíÄek %s je již nainstalován" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "cesta %s v balíÄku %s není pÅ™emístitelná" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "soubor %s způsobuje konflikt mezi instalovaným %s a %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "soubor %s z instalace %s koliduje se souborem z balíÄku %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "balíÄek %s (který je novÄ›jší, než %s) je již nainstalován" + +#: lib/rpmprob.c:148 +#, fuzzy, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "instalace balíÄku %s potÅ™ebuje %%cB na systému souborů %s" + +#: lib/rpmprob.c:158 +#, fuzzy, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "instalace balíÄku %s potÅ™ebuje % inodů na systému souborů %s" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s je potÅ™eba pro %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(instalován) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s koliduje s %s%s" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s je potÅ™eba pro %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "neznámá chyba %d vznikla pÅ™i manipulaci s balíÄkem %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "chybí druhé ':' na %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "chybí jméno architektury na %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Neúplný datový řádek %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "PříliÅ¡ mnoho argumentů na datovém řádku na %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Å patné Äíslo architektury nebo operaÄního systému: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Neúplný implicitní řádek na %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "PříliÅ¡ mnoho argumentů v implicitním řádku na %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "chybÄ›jící ':' (nalezeno 0x%02x) na %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "chybí argument pro %s na %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "nemohu otevřít %s na %s:%d: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "chybí arcitektura pro %s na %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "Å¡patný parametr'%s' na %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Neznámý systém: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Prosím kontaktujte %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Nemohu otevřít %s pro Ätení: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Není možné zmÄ›nit koÅ™enový adresář: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Nemohu vytvoÅ™it rouru pro %s: %m\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Nemohu vytvoÅ™it rouru pro %s: %m\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s scriptlet selhal, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s skriplet selhal, signál %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "provedení %s skripletu selhalo, návratový kód: %d\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "Neznámý" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(instalován) " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "nemohu otevřít Packages databázi v %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "nadbyteÄná '(' v názvu balíÄku: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "chybÄ›jící '(' v názvu balíÄku: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "chybÄ›jící ')' v názvu balíÄku: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: Ätení veÅ™ejného klíÄe selhalo.\n" + +#: lib/rpmts.c:1034 +#, fuzzy +msgid "transaction" +msgstr "vytvoÅ™ transakÄní sestavu" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "sigh velikost(%d): Å PATNÃ, Ätení vrátilo %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sigh magic: Å PATNÃ\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sigh znaÄky: Å PATNÉ, poÄet znaÄek(%d) mimo rozsah\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sigh data: Å PATNÃ, poÄet bajtů(%d) mimo rozsah\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sigh blob(%d): Å PATNÃ, Ätení vrátilo %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "sigh znaÄka[%d]: Å¡PATNÃ, znaÄka %d typ %d offset %d poÄet %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "sigh nahání: Å¡PATNÉ\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh zarovnání(%zd): Å PATNÉ, Ätení %zd bajtů\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh sigSize(%zd): Å PATNÃ, fstat(2) selhal\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "NezmÄ›nitelná oblast hlaviÄky nemůže být Ätena. PoÅ¡kozený balíÄek?\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "MD5 digest:" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "SHA1 digest v hlaviÄce:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "HlaviÄka " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Skontrolujte podpis: Å PATNÉ PARAMETRY\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Podpis: NEZNÃMà (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s selhalo\n" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "chybí %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "NesplnÄ›né závislosti pro %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "chybí { po %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "po %{ chybí }" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "prázdný formát znaÄky" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "prázdné jméno znaÄky" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "neznámá znaÄka" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "na konci pole oÄekáváno ]" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "neoÄekávaná ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "neoÄekávaná }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "ve výrazu oÄekáván ?" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "ve výrazu je po ? oÄekávána {" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "ve výrazu je oÄekávána }" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "v podvýrazu je po ? oÄekávána :" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "ve výrazu je po : oÄekávána {" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "na konci výrazu je oÄekáváno |" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "iterátor pole použitý s poli jiné délky" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "nemohu otevřít %s index pomocí db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "nebyla nastavena dbpath\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "chyba(%d) získávání \"%s\" záznamů z %s indexu\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: pÅ™eskakuji" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "chyba(%d) ukládání záznamu #%d do %s\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec selhal: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp selhal: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: pÅ™eskakuji" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: poÅ¡kozená hlaviÄka #%u získáno -- pÅ™eskakuji.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "chyba(%d) získávání \"%s\" záznamů z %s indexu\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "chyba(%d) pÅ™i nastavování hlaviÄky #%d záznamu pro %s odstranÄ›ní\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "chyba(%d) pÅ™i nastavování hlaviÄky #%d záznamu pro %s odstranÄ›ní\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: nemohu Äíst hlaviÄku na 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "chyba(%d) nastavování \"%s\" záznamů z %s indexu\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "chyba(%d) pÅ™i ukládání záznamu \"%s\" do %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "chyba(%d) v odstraňování \"%s\" z %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "chyba(%d) pÅ™i alokaci nové instance balíÄku\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "chyba(%d) pÅ™i ukládání záznamu %s do %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "žádný dbpath nebyl nastaven" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "selhání pÅ™i vytváření adresáře %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "hlaviÄka #%u v databázi je Å¡patná -- pÅ™eskakuji.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "nemohu pÅ™idat záznam původnÄ› na %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "selhalo znovusestavení databáze: původní databáze zůstává na místÄ›\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "selhalo nahrazení staré databáze novou databází!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "nahraÄ soubory v %s soubory z %s k obnovení" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "selhalo odstranÄ›ní adresáře %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d chyba(%d) z %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d chyba(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "nemohu získat zámek %s na %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "sdílen" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "exkluzivní" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "nerozpoznaný db parametr: \"%s\" ignorován.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s má neplatnou Äíselnou hodnotu, pÅ™eskakuji\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s má příliÅ¡ velkou nebo příliÅ¡ malou long hodnotu, pÅ™eskakuji\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s má příliÅ¡ velkou nebo příliÅ¡ malou int hodnotu, pÅ™eskakuji\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Nelze Äíst spec soubor z %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Nemohu vytvoÅ™it rouru pro %s: %m\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Nelze Äíst spec soubor z %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "nemohu zjistit stav %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Selhalo pÅ™ipojování k serveru" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "nemohu otevřít %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "selhalo odstranÄ›ní adresáře %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Nelze pÅ™ejmenovat %s na %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Chyba Ätení %s: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "nemohu otevřít %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "nemohu zjistit stav %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "Makro %%%s má neukonÄené tÄ›lo\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "Selhalo vyhodnocení makra %%%s\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Nelze Äíst spec soubor z %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktivní %d prázdné %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(prázdné)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(prázdné)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Makro %%%s má neukonÄené tÄ›lo\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Makro %%%s má nepřípustné jméno (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Makro %%%s má neukonÄené parametry\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "Makro %%%s má prázdné tÄ›lo\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Selhalo vyhodnocení makra %%%s\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Makro %%%s má nedovolené jméno (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Makro %%%s (%s) nebylo použito pod úrovní %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Neznámý parametr %c v %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "NeukonÄené %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Po %% následuje nezpracovatelné makro\n" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "chyba pÅ™i vytváření doÄasného souboru %s\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, fuzzy, c-format +msgid "File %s: %s\n" +msgstr "soubor %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "selhání pÅ™i vytváření adresáře %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "neplatná syntax v lua skriptletu: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "neplatná syntax v lua skriptu: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "lua skript selhal: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "neplatné syntax v lua souboru: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "lua obsloužení selhalo: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(žádná chyba)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "fatální chyba:" + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "chyba: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "varování: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "alokace pamÄ›ti (%u bajtů) vrátila NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "%sV%d %s podpis: %s, ID klíÄe %s\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(žádná chyba)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Nelze Äíst spec soubor z %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite selhalo: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush selhal: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "Nemohu vytvoÅ™it rouru pro podepsání: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "spuÅ¡tÄ›ní gpg selhalo (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg selhal pÅ™i zápisu podpisu\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "nemohu pÅ™eÄíst podpis\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "rpmMkTemp selhal\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead selhalo: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: Fwrite selhalo: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "otevÅ™ení %s selhalo: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: Ätení seznamu selhalo: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "neověřuj podpis hlaviÄky a payloadu" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: příliÅ¡ mnoho UID\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: příliÅ¡ mnoho UID\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: příliÅ¡ mnoho UID\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: příliÅ¡ mnoho GID\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: příliÅ¡ mnoho GID\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: příliÅ¡ mnoho GID\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "ignoruj relace balíÄku [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "pÅ™idej doporuÄené balíÄky do transakce" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "nedoporuÄovat chybÄ›jící reÅ¡ení závislosti" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Nemohu zmÄ›nit adresář na %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps může být použit jen pÅ™i sestavování, rekompilaci, instalaci, " +#~ "odstraňování a kontrole" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) může být použit jen pÅ™i instalaci, odstraňování, dotazech " +#~ "nebo znovuvytvoÅ™ení databáze" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "detekuj konflikty souborů mezi balíÄky" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d není dostupné\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "doÄasná databáze %s již existuje\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "dotaz/ověření balíÄků se souborovým identifikátorem" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Å patná %%_signature spec v souboru maker.\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: už byl podepsán klíÄem ID %s, pÅ™eskakuji\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "PÅ™eteÄení cílového bufferu\n" + +#~ msgid "no files to sign\n" +#~ msgstr "žádné soubory k podepsání\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "přístup k souboru %s se nezdaÅ™il\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign může být použit jen pÅ™i sestavování balíÄků" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "nekontrolovat GPG V3 DSA podpisy" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "nekontrolovat PGP V3 RSA/MD5 podpisy" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "podepsat balíÄky (identické s --resign)" + +#~ msgid "generate signature" +#~ msgstr "generovat PGP/GPG podpis" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Å patná %%_signature spec v souboru maker\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK selhal: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "generovat hlaviÄky kompatibilní s RPM verze 4" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Interní chyba pÅ™i zpracování parametrů (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: Ätení veÅ™ejného klíÄe selhalo.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: otevÅ™ení %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek selhal: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s není RPM balíÄek\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: Ätení hlaviÄky z %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Generuji podpis: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "generovat PGP/GPG podpis" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "ke znovusestavení nezadány žádné balíÄky" + +#~ msgid "no spec files given for build" +#~ msgstr "pro sestavení nezadány žádné spec soubory" + +#~ msgid "no tar files given for build" +#~ msgstr "pro sestavení nezadány žádné tar soubory" + +#~ msgid "%s failed\n" +#~ msgstr "%s selhalo\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Hloubka rekurze(%d) vÄ›tší než max(%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: nerozpoznané jméno zmaÄky: \"%s\" ignorováno\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: pÅ™eskakuji" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib poskytuje)" + +#~ msgid "(cached)" +#~ msgstr "(keÅ¡ováno)" + +#~ msgid "(db files)" +#~ msgstr "(db soubory)" + +#~ msgid "(db provides)" +#~ msgstr "(db poskytuje)" + +#~ msgid "(added files)" +#~ msgstr "(pÅ™idané soubory)" + +#~ msgid "(added provide)" +#~ msgstr "(pÅ™idáno poskytuje)" + +#~ msgid "url port must be a number\n" +#~ msgstr "url port musí být Äíslo\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Volby průchodu souborovým stromem (s --ftswalk):" + +#~ msgid "follow command line symlinks" +#~ msgstr "následuj symbolické odkazy z příkazové řádky" + +#~ msgid "logical walk" +#~ msgstr "logický průchod" + +#~ msgid "don't change directories" +#~ msgstr "neměň adresáře" + +#~ msgid "don't get stat info" +#~ msgstr "nezjiÅ¡Å¥uj stat informace" + +#~ msgid "physical walk" +#~ msgstr "fyzický průchod" + +#~ msgid "return dot and dot-dot" +#~ msgstr "vraÅ¥ teÄku a teÄku-teÄku" + +#~ msgid "don't cross devices" +#~ msgstr "nekřížuj zařízení" + +#~ msgid "return whiteout information" +#~ msgstr "vraÅ¥ 'whiteout' informace" + +#~ msgid "debug package state machine" +#~ msgstr "ladit nástroj stavu balíÄku" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "dotaz/ověření balíÄků z průchodu NEJVYÅ Å ÃHO souboru stromu" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "dotaz/ověření balíÄků ze systémového HDLISTu" + +#~ msgid "do not order transaction set" +#~ msgstr "netÅ™iÄ transakÄní sestavu" + +#~ msgid "do not read headers" +#~ msgstr "neÄti hlaviÄky" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Soubor nesouhlasí s prefixem (%s): %s\n" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "Není možné zmÄ›nit koÅ™enový adresář: %m\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "použij vlákna pro nástroj stavu balíÄků" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: scriptlet %s selhal (%d), pÅ™eskakuji %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() nevrátil velikost: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() nevrátil přípojné body: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "nemohu zjistit stav %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "soubor %s je na neznámém zařízení\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "použij vlákna pro nástroj stavu souborů" + +#~ msgid "cannot open %s index\n" +#~ msgstr "nemohu otevřít %s index\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "Není možné získat zámek na db %s, zkouším znovu... (%d)\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Nemohu initDB %s (%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Nemohu otevřít databázi: %s\n" + +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Nemohu zjistit poÅ™adí bajtů (endianess) databáze.\n" + +#~ msgid "Unknown system error" +#~ msgstr "Neznámá systémová chyba" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Makro %%%.*s nenalezeno, pÅ™eskakuji\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: selhalo naÄítání *.te politiky.\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "řádek %d: Druhý seznam %%files\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "Závislost \"B\" potÅ™ebuje epochu (pÅ™edpokládáno stejné jako \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Datový typ %d není podporován\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "Zastaralá syntax není podporována: %s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "odstraňuji %s \"%s\" z tsort relací.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "SMYÄŒKA:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "rpmtsOrder selhal, %d elementů zbývá\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "Velikost hlaviÄky a payload:" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Volby zdroje (s --query nebo --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp nenalezeno: " + +#~ msgid "skipping header with unverifiable V%u signature\n" +#~ msgstr "pÅ™eskakuji hlaviÄku s neověřitelným V%u podpisem\n" + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "nemohu otevřít soubor %s: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp selhalo\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp selhalo v zápisu signatury\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Je nutné nastavit \"%%_pgp_name\" ve vaÅ¡em souboru maker\n" + +#~ msgid "Unknown" +#~ msgstr "Neznámý" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s podpis: %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "%sV%d DSA podpis: %s, ID klíÄe %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d DSA podpis: %s\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "Å patný MD5 digest: NEPODPOROVÃNO\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot nemůže být \"/\": %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Spec soubor nemůže použít BuildRoot\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "vyhledat i18N Å™etÄ›zce ve specfile katalogu" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "generovat hlaviÄky balíÄků kompatibilní s RPM verze 2 a 3" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "nemohu vytvoÅ™it %s: %s\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "nemohu zapsat do %%%s %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "nemohu provést dotaz %s: %s\n" + +#~ msgid "(encoding failed)" +#~ msgstr "(kódování selhalo)" + +#~ msgid "debug URL cache handling" +#~ msgstr "ladit manipulaci s URL cache" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "nahradit i18n sekce do spec souboru" + +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "nemohu otevřít Solve databázi v %s\n" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " DoporuÄené Å™eÅ¡ení:\n" + +#~ msgid "(index out of range)" +#~ msgstr "(index mimo rozsah)" + +#~ msgid "Success" +#~ msgstr "ÚspÄ›ch" + +#~ msgid "Bad server response" +#~ msgstr "Å patná odpovÄ›Ä serveru" + +#~ msgid "Server I/O error" +#~ msgstr "Chyba vstup/výstup serveru" + +#~ msgid "Server timeout" +#~ msgstr "PÅ™ekroÄení Äasového limitu na serveru" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Nemohu vyhledat adresu serveru" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Nemohu vyhledat jméno serveru" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Selhalo navázání datového spojení se serverem" + +#~ msgid "I/O error to local file" +#~ msgstr "Chyba vstup/výstup k lokálnímu souboru" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Chyba nastavené vzdáleného serveru do pasivního režimu" + +#~ msgid "File not found on server" +#~ msgstr "Soubor na serveru nenalezen" + +#~ msgid "Abort in progress" +#~ msgstr "Pobíhá zruÅ¡ení" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Neznámá nebo neoÄekávaná chyba" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "neaktualizuj keÅ¡ databáze, jenom vypiÅ¡ cesty balíÄků" + +#~ msgid "File tree walk options:" +#~ msgstr "Parametry souborového průchodu stromem:" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: %%{_cache_dbpath} makro je Å¡patnÄ› nastaveno.\n" + +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: operace s keší selhala: ec %d.\n" + +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: hederGetEntry selhal\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "rozvinutí %s selhalo na %s:%d \"%s\"\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "Není možné rozvinout %s\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "Nemohu pÅ™eÄíst %s, HOME je příliÅ¡ velký.\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s rmdir %s selhal: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "Dosažen limit pro %%docdir\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "řádek %d: K %%patch -b potÅ™ebuji parametr: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "řádek %d: K %%patch -z potÅ™ebuji parametr: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "řádek %d: Å patný parametr pro %%patch -p: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "řádek %d: K %%patch -p potÅ™ebuji parametr: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "řádek %d: Å patný parametr pro %%patch -p: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "PříliÅ¡ mnoho patchů!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "řádek %d: Å patný parametr pro %%patch: %s\n" + +#, fuzzy +#~ msgid "debug option/argument processing" +#~ msgstr "Interní chyba pÅ™i zpracování parametrů (%d) :-(\n" + +#~ msgid "skip %%license files" +#~ msgstr "vynechat %%license soubory" + +#~ msgid "skip %%readme files" +#~ msgstr "vynechat %%readme soubory" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "%s: Fread selhalo: %s\n" + +#, fuzzy +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "poruÅ¡ený rollback Äas" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "uchovat smazané soubory pÅ™esunem do podadresáře" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "uchovat smazané soubory pomocí pÅ™ebalení" + +#, fuzzy +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "odinstalovat nové balíÄky, reinstalovat staré balíÄky zpÄ›t do data" + +#~ msgid "" +#~ msgstr "" + +#, fuzzy +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Nemohu pÅ™eÄíst hlaviÄku z %s: %s\n" + +#, fuzzy +#~ msgid "Upgrading packages..." +#~ msgstr "aktualizace balíÄku" + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "RPM verze %s\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "chyba pÅ™i pÅ™i Ätení hlaviÄky balíÄku\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== ukládání tsort relací\n" + +#, fuzzy +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== tsorting balíÄků (poÅ™adí, #pÅ™edchůdce, #následovník, hloubka)\n" + +#, fuzzy +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== pouze úspěšné (poÅ™adí dle prezentace)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== pokraÄuje tsort ...\n" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "Soubor %4d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========= Adresáře, které nebyly explicitnÄ› zaÅ™azeny do balíÄku:\n" + +#, fuzzy +#~ msgid "%10d %s\n" +#~ msgstr "%9d %s\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "vytvoÅ™en adresář %s s právy %04o.\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "vytvoÅ™en adresář %s s právy %04o.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "zakázat použití libio(3) API" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: spouÅ¡tím %s skript(y) (pokud existují)\n" + +#, fuzzy +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s-%s-%s obsahuje %d souborů, test = %d\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "záznam balíÄku Äíslo: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#, fuzzy +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "balíÄek %s-%s-%s má nesplnÄ›né požadavky: %s\n" + +#, fuzzy +#~ msgid "========== relocations\n" +#~ msgstr "========== ukládání tsort relací\n" + +#, fuzzy +#~ msgid "%5d exclude %s\n" +#~ msgstr "OS je vyÅ™azen: %s\n" + +#, fuzzy +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%s vytvoÅ™en jako %s\n" + +#, fuzzy +#~ msgid "excluding %s %s\n" +#~ msgstr "ProvádÄ›ní(%s): %s\n" + +#, fuzzy +#~ msgid "relocating %s to %s\n" +#~ msgstr "ProvádÄ›ní(%s): %s\n" + +#, fuzzy +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "nemohu provést dotaz %s: %s\n" + +#, fuzzy +#~ msgid "Adding goal: %s\n" +#~ msgstr "Hledám %s: (použit %s)...\n" + +#, fuzzy +#~ msgid " ... as %s\n" +#~ msgstr "%s uloženo jako %s\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "nainstalovat balíÄek" + +#, fuzzy +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "vytvoÅ™ení zdrojového a binárního balíÄku z " + +#, fuzzy +#~ msgid "installing binary packages\n" +#~ msgstr "nainstalovat balíÄek" + +#, fuzzy +#~ msgid "Adding: %s\n" +#~ msgstr "řádek: %s\n" + +#, fuzzy +#~ msgid "Suggesting: %s\n" +#~ msgstr "RPM verze %s\n" + +#, fuzzy +#~ msgid "mounted filesystems:\n" +#~ msgstr "získávám seznam pÅ™ipojených systémů souborů\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "Soubor %4d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "ProvádÄ›ní(%s): %s\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "oÄekávám balíÄek se zdrojovými kódy, nalezen vÅ¡ak binární\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "žádný balíÄek neaktivuje %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "odstraňuji %s-%s-%s \"%s\" z tsort relací.\n" + +#, fuzzy +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "odstraňuji %s-%s-%s \"%s\" z tsort relací.\n" + +#, fuzzy +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "znovu vytvoÅ™it databázi z existující databáze" + +#, fuzzy +#~ msgid "creating directory %s\n" +#~ msgstr "chyba pÅ™i vytváření doÄasného souboru %s\n" + +#, fuzzy +#~ msgid "creating directory %s: %s\n" +#~ msgstr "nemohu provést dotaz %s: %s\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: Ätení %s: %s\n" + +#, fuzzy +#~ msgid "Unable to write final header\n" +#~ msgstr "Nemohu zapsat hlaviÄku do %s: %s\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "práce s balíÄky verze 1 není podporována touto verzí RPM\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "tato verze RPM podporuje práci s balíÄky s verzí <= 4\n" diff --git a/po/da.gmo b/po/da.gmo new file mode 100644 index 0000000..433653e Binary files /dev/null and b/po/da.gmo differ diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..0ed1217 --- /dev/null +++ b/po/da.po @@ -0,0 +1,4269 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.0.3\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2001-04-05 23:03GMT\n" +"Last-Translator: Claus Hindsgaul \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9alpha\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, fuzzy, c-format +msgid "%s: %s\n" +msgstr "fil %s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM version %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, fuzzy, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Dette program kan frit distribueres under betingelserne i GNU GPL" + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "arkivoprettelse mislykkedes ved fil %s: %s\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "eksekvering mislykkedes\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "parameter er ikke en RPM-pakke\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "fejl ved læsning af hovedet på pakke\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "kan ikke genåbne pakkeindhold: %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "forespørg/verificér pakke(r) i gruppen" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Forespørgselstilvalg (med -q eller --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Verifikationstilvalg (med -V eller --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +#, fuzzy +msgid "Common options for all rpm modes and executables:" +msgstr "Fælles tilvalg for alle rpm-tilstande:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "kun én af forespørgsel/verificér kan udføres ad gangen" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "uventet forespørgselsflag" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "uventet forespørgselsformat" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "uventet forespørgselskilde" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "kun ét hovedtilvalg kan angives" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "kun installation, opgradering, rmsource og rmspec kan tvinges igennem" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "filer kan kun omrokeres under installation" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "--relocate og --excludepath kan kun bruges, når nye pakker installeres" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix kan kun bruges, når nye pakker installeres" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "parametre til --prefix skal starte med et /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) kan kun angives ved installation" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent kan kun angives ved installation" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs kan kun angives ved installation" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs kan kun angives ved installation" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs kan kun angives ved installation" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "kun én af --excludedocs og --includedocs kan angives" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch kan kun angives ved installation" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos kan kun angives ved installation" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize kan kun angives ved installation" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches kan kun angives ved installation" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles kan kun angives ved installation" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb kan kun angives ved installation og sletning" + +#: rpmqv.c:221 +#, fuzzy +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "--justdb kan kun angives ved installation og sletning" + +#: rpmqv.c:226 +#, fuzzy +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "--notriggers kan kun angives ved installation og sletning af pakker" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "--test kan kun angives ved installation, sletning og opbygning" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb kan kun angives ved installation og sletning" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "parameteren til --root (-r) skal starte med et /" + +#: rpmqv.c:256 +#, fuzzy +msgid "no packages given for erase" +msgstr "ingen pakker angivet ved installation" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "ingen pakker angivet ved installation" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "ingen parametre angivet ved forespørgsel" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "ingen parametre angivet ved verifikation" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "" +"buildroot allerede angivet, ignorerer %s\n" +"\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "opbyg gennem %prep (udpak kilder og påfør lapper) ud fra " + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "opbyg gennem %build (%prep, så oversæt) ud fra " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "opbyg gennem %install (%prep, %build, så installér) ud fra " + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "verificér afsnittet %files ud fra " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "opbyg kilde- og binærpakke ud fra " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "opbyg kun binærpakke ud fra " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "opbyg kun kildepakke ud fra " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "opbyg gennem %prep (udpak kilder og påfør lapper) ud fra " + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "opbyg gennem %build (%prep, så oversæt) ud fra " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "opbyg gennem %install (%prep, %build, så installér) ud fra " + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "verificér afsnittet %files fra " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "opbyg kilde- og binærpakker ud fra " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "opbyg kun binærpakke ud fra " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "opbyg kun kildepakke ud fra " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "opbyg binærpakke ud fra " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"opbyg gennem %install (%prep, %build, så installér) ud fra " + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "gennemtving opbygningsrod" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "fjern bygge-træ ved afslutning" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ignorér 'ExcludeArch':-angivelser fra spec-fil" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "udfør ingen stadier af opbygningen" + +#: rpmbuild.c:180 +#, fuzzy +msgid "do not verify build dependencies" +msgstr "undlad at tjekke pakkers afhængighedskrav" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" +"generér pakkehoved(er), der er kompatible med (gamle) rpm[23]-indpakninger" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "acceptér ikke i18N msgstr'er fra spec-fil" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "fjern kilder ved afslutning" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "fjern spec-fil ved afslutning" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "spring direkte til angivet stadium (kun for c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "gennemtving målplatform" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "Opbygningstilvalg med [ | | ]:" + +#: rpmbuild.c:231 +#, fuzzy +msgid "Failed build dependencies:\n" +msgstr "afhængighedskrav for pakkeopbygning kunne ikke imødekommes:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Kan ikke åbne spec-fil %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Kunne ikke åbne tar-videreførsel: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Kunne ikke læse spec-fil fra %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Kunne ikke omdøbe %s til %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "kunne ikke finde %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Filen %s er ikke en regulær fil.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Filen %s synes ikke at være en spec-fil.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Opbygger mål-platforme: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Opbygger for mål %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "initialisér database" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "genopbyg omvendte databaselister ud fra installerede pakkehoveder" + +#: rpmdb.c:27 +#, fuzzy +msgid "verify database files" +msgstr "forespørg en spec-fil" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Databasetilvalg:" + +#: rpmkeys.c:23 +#, fuzzy +msgid "verify package signature(s)" +msgstr "verificér pakkesignatur" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Signaturtilvalg" + +#: rpmkeys.c:61 rpmsign.c:144 +#, fuzzy +msgid "no arguments given" +msgstr "ingen parametre angivet ved forespørgsel" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "installér pakke" + +#: rpmsign.c:27 +#, fuzzy +msgid "sign package(s) (identical to --addsign)" +msgstr "underskriv en pakke (slet nuværende signatur)" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "verificér pakkesignatur" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Signaturtilvalg" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, fuzzy, c-format +msgid "Could not exec %s: %s\n" +msgstr "Kunne ikke udføre %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Du skal angive \"%%_gpg_name\" i din makrofil\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Indtast adgangskode: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Adgangskode godkendt.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Adgangskode ikke godkendt\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "forespørg en spec-fil" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "forespørg en spec-fil" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "brug følgende forespørgselsformat" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Signaturtilvalg" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "ingen parametre angivet ved forespørgsel" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Kunne ikke åbne midlertidig fil.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Udfører(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Udførelse af %s mislykkedes (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Fejl-afslutningsstatus fra %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"RPM opbygningsfejl:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "syntaksfejl under tolkning af ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "syntaksfejl under tolkning af &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "syntaksfejl under tolkning af ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "tolkningsfejl i udtryk\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "uparret (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- kun for tal\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! kun for tal\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "typer skal passe sammen\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / understøttes ikke for strenge\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- understøttes ikke for strenge\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& og || understøttes ikke for strenge\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "syntaksfejl i udtryk\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Manglende '(' i %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Manglende ')' i %s %s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Ugyldigt %s-symbol: %s\n" + +#: build/files.c:443 +#, fuzzy, c-format +msgid "Missing %s in %s %s\n" +msgstr "Manglende '(' i %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Ikke-mellemrum efterfølger %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Ugyldig syntaks: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Ugyldig tilstandsangivelse: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Ugyldig dirmode-spec: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Anormal locale-længde: \"%.*s\" i %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Dobbelt locale %.*s i %%lang(%s)\n" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Ugyldigt %s-symbol: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Kun et parameter for %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "To filer på én linie: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Fil skal begynde med \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Kan ikke blande special-%%doc med andre former: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Fil angivet to gange: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "åbning af %s mislykkedes %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Symbolsk lænke peger på BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Fil ikke fundet: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Fil ikke fundet: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, fuzzy, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: readLead mislykkedes\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "Makroen %%%s kunne ikke udfoldes\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Fil kræver foranstillet \"/\": %s\n" + +#: build/files.c:1688 +#, fuzzy, c-format +msgid "Glob not permitted: %s\n" +msgstr "linie %d: Filnavn ikke tilladt: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Fil ikke fundet med glob: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Fil ikke fundet med glob: %s\n" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Kunne ikke åbne '%%files'-fil %s: %s\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "linie: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Ugyldig fil: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Ugyldig ejer/gruppe: %s\n" + +#: build/files.c:2095 +#, fuzzy, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "udpakning af arkiv mislykkedes%s%s: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "Gennemløber filer: %s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "arkivoprettelse mislykkedes ved fil %s: %s\n" + +#: build/pack.c:86 +#, fuzzy, c-format +msgid "create archive failed: %s\n" +msgstr "arkivoprettelse mislykkedes ved fil %s: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy-skrivning mislykkedes: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy-læsning mislykkedes: %s\n" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "linie: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Kunne ikke kanonisere værtsnavn: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Kunne ikke åbne 'PreIn'-fil: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Kunne ikke åbne 'PreUn'-fil: %s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Kunne ikke åbne 'PreIn'-fil: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Kunne ikke åbne 'PostIn'-fil: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Kunne ikke åbne 'PostUn'-fil: %s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Kunne ikke åbne 'PostIn'-fil: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Kunne ikke åbne 'VerifyScript'-fil: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Kunne ikke åbne skriptfilen Trigger: %s\n" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Ukendt ikontype: %s\n" + +#: build/pack.c:395 +#, fuzzy +msgid "Unable to create immutable header region.\n" +msgstr "Kunne ikke læse hoved fra %s: %s\n" + +#: build/pack.c:415 +#, fuzzy +msgid "Unable to write temp header\n" +msgstr "Kunne ikke skrive hoved til %s: %s\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Ugyldige CSA-data\n" + +#: build/pack.c:491 +#, fuzzy +msgid "Unable to reload signature header.\n" +msgstr "Kunne ikke læse hoved fra %s: %s\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Kunne ikke åbne %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Kunne ikke skrive pakke: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Kunne ikke åbne sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Kunne ikke læse hoved fra %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Kunne ikke skrive hoved til %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Kunne ikke læse pakkeindhold fra %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Kunne ikke skrive pakkeindhold til %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Skrev: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "Udfører(%s): %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Udførelse af %s mislykkedes (%s): %s\n" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Adgangskode ikke godkendt\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Kunne ikke generere filnavn til oprettelse af pakke %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "kan ikke oprette %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "linie %d: anden %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "'%%changelog'-indgange skal starte med *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "ufærdig '%%changelog'-indgang\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "ugyldig dato i %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, fuzzy, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog ikke i omvendt kronologisk rækkefølge\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "navn mangler i %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "ingen beskrivelse i %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "linie %d: Fejl ved tolkning af %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "linie %d: Ugyldigt tilvalg %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "line %d: For mange navne: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "line %d: Pakken eksisterer ikke: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "linie %d: Anden beskrivelse\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "linie %d: Fejl ved tolkning af %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "linie %d: Fejl ved tolkning af %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "linie %d: Ugyldigt tal: %s\n" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "linie %d: Ugyldigt 'no%s'-tal: %d\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "linie %d: Ugyldigt %s-tal: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "\"%s\" angiver flere pakker\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Arkitekturen er ekskluderet: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Arkitekturen er ikke inkluderet: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "OS er ekskluderet: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "OS is ikke inkluderet: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "'%s'-felt skal være tilstede i pakke : %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Flere '%s'-indgange i pakke: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Kunne ikke åbne ikon %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Kunne ikke læse ikon %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Ukendt ikontype: %s\n" + +#: build/parsePreamble.c:587 +#, fuzzy, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "linie %d: Ugyldigt tilvalg %s: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "linie %d: Ugyldigt tegn '-' i %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "linie %d: Ugyldigt tegn '-' i %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "linie %d: Ugyldigt tegn '-' i %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "linie %d: Forkert udformet mærke: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "linie %d: Tomt mærke: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "linie %d: Præfikser kan ikke ende på \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "linie %d: Docdir skal starte med '/': %s\n" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "linie %d: Epoch/Serial-felter skal være et nummer: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "linie %d: Ugyldig %s: angivere: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "linie %d: Ugyldigt 'BuildArchitecture'-format: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Intern fejl: Falsk mærke %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "linie %d: Version kræves %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Ugyldig pakkeangivelse: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Pakken eksisterer allerede: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "linie %d: Ukendt mærke: %s\n" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "BuildRoot kan ikke være \"/\": %s\n" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "BuildRoot kan ikke være \"/\": %s\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Ugyldig kilde: %s: %s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "Ingen lap nummer %d\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "Ingen kilde nummer %d\n" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "kildepakke indeholder ingen .spec-fil\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Kunne ikke hente nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Fejl ved tolking af %%setup: %s\n" + +#: build/parsePrep.c:288 +#, fuzzy, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "linie %d: Ugyldigt parameter til %%setup %c: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "linie %d: Ugyldigt '%%setup'-tilvalg %s: %s\n" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "fil %s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "ugyldigt pakkenummer: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "linie %d: anden %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"linie %d: Afhængigheds-symbol skal starte med alfanumerisk, '_' eller '/': " +"%s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "linie %d: Filnavn med version ikke tilladt: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "linie %d: Version kræves %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "linie %d: Ugyldigt tal: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "linie %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "linie %d: udløsere skal have --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "linie %d: Fejl under tolkning af %s: %s\n" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "linie %d: skriptprogram skal starte med '/': %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "linie %d: skriptprogram skal starte med '/': %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "linie %d: Anden %s\n" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "linie %d: Fejl ved tolkning af %%description: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "linie %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "" +"Kunne ikke åbne %s: %s\n" +"\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "Ikke-lukket %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean returnerer %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: Fik et %%else uden et %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: Fik et %%endif uden et %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "forkert udført '%%include'-kommando\n" + +#: build/parseSpec.c:639 +#, fuzzy +msgid "No compatible architectures found for build\n" +msgstr "Ingen arkitekturer, der kan opbygges\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Pakke har ingen %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Kunne ikke læse spec-fil fra %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Kunne ikke læse spec-fil fra %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Kunne ikke læse spec-fil fra %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Kunne ikke åbne tar-videreførsel: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Fejl ved tolking af %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Udfører(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Manglende '(' i %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "For mange parametre på datalinie ved %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Gennemløber filer: %s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "linie %d: Ugyldigt tal: %s\n" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Kunne ikke fraspalte ny proces til %s: %s\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Kunne ikke udføre %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Kunne ikke fraspalte ny proces til %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s mislykkedes\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "kunne ikke skrive alle data til %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "gpg kunne ikke skrive signaturen\n" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "åbning af %s mislykkedes %s\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "fjernelse af %s mislykkedes: %s\n" + +#: build/rpmfc.c:999 +#, fuzzy, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "fjernelse af %s mislykkedes: %s\n" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "Finder %s: (benytter %s)...\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Kunne ikke finde %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "forespørgsel af spec-fil %s mislykkedes, kunne ikke tolkes\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(fejl 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Ugyldigt magisk tal" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Ugyldigt/ulæseligt hoved" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Hovedstørrelse er for stor" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Ukendt filtype" + +#: lib/cpio.c:225 +#, fuzzy +msgid "Missing hard link(s)" +msgstr "Manglende hård lænke" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "MD5-sum stemmer ikke" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Intern fejl" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " mislykkedes - " + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "pakken %s er allerede installeret" + +#: lib/depends.c:245 +#, fuzzy, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "pakken %s er allerede installeret" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(ikke et tal)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +#, fuzzy +msgid "(not base64)" +msgstr "(ikke et tal)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "" + +#: lib/formats.c:376 lib/formats.c:462 +#, fuzzy +msgid "(not a blob)" +msgstr "(ikke et tal)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "" + +#: lib/formats.c:485 +#, fuzzy +msgid "(not an OpenPGP signature)" +msgstr "overspring eventuelle PGP-signaturer" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "erstattet " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "ej installeret" + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "ej delt " + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "manglende %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(ukendt %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(ikke et tal)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "bruger %s eksisterer ikke - bruger root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "gruppe %s eksisterer ikke - bruger root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s gemt som %s\n" + +#: lib/fsm.c:1977 +#, fuzzy, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "kan ikke fjerne %s - katalog ikke tomt\n" + +#: lib/fsm.c:1983 +#, fuzzy, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "fjernelse (rmdir) af %s mislykkedes: %s\n" + +#: lib/fsm.c:1997 +#, fuzzy, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "åbning af %s mislykkedes %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s oprettet som %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature mislykkedes\n" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Ingen tilgængelig signatur\n" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: readLead mislykkedes\n" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread mislykkedes: %s\n" + +#: lib/package.c:794 +#, fuzzy, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s kunne ikke installeres\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +#, fuzzy +msgid "print macro expansion of EXPR" +msgstr "udlæs makroudvidelse af +" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +#, fuzzy +msgid "read instead of default file(s)" +msgstr "læs i stedet for standard makrofil(er)" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +#, fuzzy +msgid "don't verify package digest(s)" +msgstr "undlad at tjekke pakkers afhængighedskrav" + +#: lib/poptALL.c:176 +#, fuzzy +msgid "don't verify database header(s) when retrieved" +msgstr "tjek ikke pakkens arkitektur" + +#: lib/poptALL.c:178 +#, fuzzy +msgid "don't verify package signature(s)" +msgstr "verificér pakkesignatur" + +#: lib/poptALL.c:181 +#, fuzzy +msgid "send stdout to CMD" +msgstr "send standard-ud til " + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +#, fuzzy +msgid "use ROOT as top level directory" +msgstr "brug som topniveau-katalog" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "vis kendte forespørgselsmærker" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "vis den endelige rpmrc og makrokonfiguration" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "medtag mindre detaljerede oplysninger" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "medtag mere detaljerede oplysninger" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "vis versionen af rpm som benyttes" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "aflus rpmio I/O" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "udeladte stier skal begynde med et /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "omrokeringer skal starte med et /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "omrokeringer skal indeholde et =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "i omrokeringer skal = efterfølges af /" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"installér alle filer -- også konfigurationsfiler, der ellers skulle " +"overspringes" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"fjern alle pakker, som passer med (normalt ville det medføre en " +"fejl, hvis angav flere pakker)" + +#: lib/poptI.c:123 +#, fuzzy +msgid "relocate files in non-relocatable package" +msgstr "omdirigér filer i ikke-omdirigérbar pakke" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "slet (afinstallér) pakke" + +#: lib/poptI.c:131 +#, fuzzy +msgid "+" +msgstr "" + +#: lib/poptI.c:134 lib/poptI.c:171 +#, fuzzy +msgid "do not install configuration files" +msgstr "vis alle konfigurationsfiler" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "installér ikke dokumentation" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "overspring filer med foranstillet komponent " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "forkortelse for --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +#, fuzzy +msgid "upgrade package(s) if already installed" +msgstr "opgradér pakke, hvis den allerede er installeret" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "udlæs #'er efterhånden som pakken installeres (virker sammen med -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "tjek ikke pakkens arkitektur" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "tjek ikke pakkens operativsystem" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "tjek ikke om der er diskplads, før der installeres" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "installér dokumentation" + +#: lib/poptI.c:164 +#, fuzzy +msgid "install package(s)" +msgstr "installér pakke" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "opdatér databasen, men rør ikke filsystemet" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "undlad at tjekke pakkers afhængighedskrav" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "vis alle konfigurationsfiler" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" +"ændr ikke pakkernes installationsrækkefølge for at opfylde afhængigheder" + +#: lib/poptI.c:191 +#, fuzzy +msgid "do not execute package scriptlet(s)" +msgstr "udfør ingen pakkespecifikke skripter" + +#: lib/poptI.c:195 +#, fuzzy, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "udfør ikke eventuelle skripter" + +#: lib/poptI.c:198 +#, fuzzy, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "udfør ikke eventuelle skripter" + +#: lib/poptI.c:201 +#, fuzzy, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "udfør ikke eventuelle skripter" + +#: lib/poptI.c:204 +#, fuzzy, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "udfør ikke eventuelle skripter" + +#: lib/poptI.c:207 +#, fuzzy +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "udfør ikke småskripter, der måtte udløses af denne pakke" + +#: lib/poptI.c:210 +#, fuzzy, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "udfør ingen pakkespecifikke skripter" + +#: lib/poptI.c:213 +#, fuzzy, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "udfør ingen installations-småskripter" + +#: lib/poptI.c:216 +#, fuzzy, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "udfør ingen installations-småskripter" + +#: lib/poptI.c:219 +#, fuzzy, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "udfør ingen installations-småskripter" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"opgradér til en ældre version af pakken (--force gør ikke dette automatisk " +"ved opgraderinger)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "vis procenter efterhånden som pakken installeres" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "omdirigér pakken til , hvis omdirigérbar" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +#, fuzzy +msgid "relocate files from path to " +msgstr "omdirigér filer fra til " + +#: lib/poptI.c:237 +#, fuzzy +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "geninstallér hvis pakken allerede er installeret" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "installér ikke, men fortæl om det ville lykkes eller ej" + +#: lib/poptI.c:248 +#, fuzzy +msgid "upgrade package(s)" +msgstr "opgradér pakke" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "forespørg/verificér alle pakker" + +#: lib/poptQV.c:69 +#, fuzzy +msgid "rpm checksig mode" +msgstr "rpm verifikationstilstand" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "forespørg/verificér pakke(r), der ejer filen" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "forespørg/verificér pakke(r) i gruppen" + +#: lib/poptQV.c:75 +#, fuzzy +msgid "query/verify a package file" +msgstr "forespørg/verificér alle pakker" + +#: lib/poptQV.c:78 +#, fuzzy +msgid "query/verify package(s) with package identifier" +msgstr "forespørg/verificér pakke(r), der ejer filen" + +#: lib/poptQV.c:80 +#, fuzzy +msgid "query/verify package(s) with header identifier" +msgstr "forespørg/verificér pakke(r), der ejer filen" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "rpm forespørgselstilstand" + +#: lib/poptQV.c:85 +#, fuzzy +msgid "query/verify a header instance" +msgstr "forespørg/verificér pakke(r), der ejer filen" + +#: lib/poptQV.c:87 +#, fuzzy +msgid "query/verify package(s) from install transaction" +msgstr "forespørg/verificér pakke(r) i gruppen" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "forespørg pakke(r), der udløses af pakken" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "rpm verifikationstilstand" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "forespørg/verificér pakke(r), der stiller et krav" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "forespørg/verificér pakke(r), der tilfredsstiller et krav" + +#: lib/poptQV.c:98 +#, fuzzy +msgid "do not glob arguments" +msgstr "ingen parametre angivet ved forespørgsel" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "vis alle konfigurationsfiler" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "vis alle dokumentationsfiler" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "vis grundlæggende filinformation" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "vis liste over filerne i pakken" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "vis filernes status" + +#: lib/poptQV.c:209 +#, fuzzy +msgid "don't verify size of files" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptQV.c:212 +#, fuzzy +msgid "don't verify symlink path of files" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptQV.c:215 +#, fuzzy +msgid "don't verify owner of files" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptQV.c:218 +#, fuzzy +msgid "don't verify group of files" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +#, fuzzy +msgid "don't verify mode of files" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "verificér ikke filerne i pakke" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +#, fuzzy +msgid "don't verify package dependencies" +msgstr "undlad at tjekke pakkers afhængighedskrav" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +#, fuzzy +msgid "don't execute verify script(s)" +msgstr "udfør ikke eventuelt %verifyscript" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "manglende arkitektur for %s ved %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "kildepakke forventet, binær fundet\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "kildepakke indeholder ingen .spec-fil\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "udpakning af arkiv mislykkedes%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " for fil " + +#: lib/psm.c:967 +#, fuzzy, c-format +msgid "%s failed on file %s: %s\n" +msgstr "kunne ikke åbne %s: %s\n" + +#: lib/psm.c:970 +#, fuzzy, c-format +msgid "%s failed: %s\n" +msgstr "%s mislykkedes\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "ugyldigt format: %s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(indeholder ingen filer)" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "erstattet " + +#: lib/query.c:166 +msgid "not installed " +msgstr "ej installeret" + +#: lib/query.c:169 +msgid "net shared " +msgstr "ej delt " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(ingen status)" + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(ukendt %3d) " + +#: lib/query.c:198 +#, fuzzy +msgid "package has not file owner/group lists\n" +msgstr "pakke har hverken filejerskabs- eller id-lister\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "pakke har hverken filejerskabs- eller id-lister\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "gruppe %s indeholder ingen pakker\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "ingen pakker udløser %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, fuzzy, c-format +msgid "malformed %s: %s\n" +msgstr "Kunne ikke læse %s: %s.\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, fuzzy, c-format +msgid "no package matches %s: %s\n" +msgstr "ingen pakker udløser %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "ingen pakker kræver %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "ingen pakker tilfører %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "fil %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "filen %s tilhører ingen pakke\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "ugyldigt pakkenummer: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "post %d kunne ikke læses\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "pakken %s er ikke installeret\n" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "ukendt mærke" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: readLead mislykkedes\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: readLead mislykkedes\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: readLead mislykkedes\n" + +#: lib/rpmchecksig.c:116 +#, fuzzy, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: readLead mislykkedes\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "IKKE O.K." + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "O.K." + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (MANGLENDE NØGLER: " + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (IKKE-BETROEDE NØGLER:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: åbning mislykkedes: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "kunne ikke fjerne katalog %s: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "kan ikke fjerne %s - katalog ikke tomt\n" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "kunne ikke fjerne katalog %s: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "kunne ikke fjerne katalog %s: %s\n" + +#: lib/rpmds.c:403 +#, fuzzy +msgid "NO " +msgstr "IKKE O.K." + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +#, fuzzy +msgid "internal support for lua scripts." +msgstr "- understøttes ikke for strenge\n" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "pakken %s er allerede installeret" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "åbning af %s mislykkedes %s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "ingen pakker udløser %s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Forbereder..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Forbereder pakker til installation..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +#, fuzzy +msgid "Failed dependencies:\n" +msgstr "afhængighedskrav, der ikke kunne imødekommes:\n" + +#: lib/rpminstall.c:305 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "ingen pakker udløser %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s kunne ikke installeres\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Modtager %s\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "overspringer %s - overførsel mislykkedes - %s\n" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "pakke %s kan ikke omrokeres\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "fejl ved læsning fra filen %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "filen %s kræver en nyere version af RPM\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" angiver flere pakker\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "kunne ikke åbne %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Installerer %s\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "parameter er ikke en RPM-pakke\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s: Ingen tilgængelig signatur\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "læsning mislykkedes: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "parameter er ikke en RPM-pakke\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "kan ikke opnå %s lås på %s/%s\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "kan ikke opnå %s lås på %s/%s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "kunne ikke åbne %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Kunne ikke omdøbe %s til %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Kunne ikke omdøbe %s til %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "" + +#: lib/rpmprob.c:115 +#, fuzzy, c-format +msgid "package %s is intended for a %s architecture" +msgstr "pakken %s hører til en anden arkitektur" + +#: lib/rpmprob.c:120 +#, fuzzy, c-format +msgid "package %s is intended for a %s operating system" +msgstr "pakken %s hører til et andet operativsystem" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "pakken %s er allerede installeret" + +#: lib/rpmprob.c:128 +#, fuzzy, c-format +msgid "path %s in package %s is not relocatable" +msgstr "sti %s i pakke %s kan ikke omrokeres" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "filen %s skaber konflikt mellem den forsøgte installation af %s og %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"filen %s fra installationen af %s skaber konflikt med fil fra pakken %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "pakke %s (som er nyere end %s) er allerede installeret" + +#: lib/rpmprob.c:148 +#, fuzzy, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "installation af pakke %s kræver %%cb på %s-filsystemet" + +#: lib/rpmprob.c:158 +#, fuzzy, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "installation af pakken %s kræver % inode'r på %s-filsystemet" + +#: lib/rpmprob.c:162 +#, fuzzy, c-format +msgid "%s is needed by %s%s" +msgstr " kræves af %s-%s-%s\n" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +#, fuzzy +msgid "(installed) " +msgstr "ej installeret" + +#: lib/rpmprob.c:167 +#, fuzzy, c-format +msgid "%s conflicts with %s%s" +msgstr " skaber konflikt med %s-%s-%s\n" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr " kræves af %s-%s-%s\n" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "ukendt fejl %d under arbejdet med pakken %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "manglende andet ':' ved %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "manglende navn på arkitektur ved %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Ufærdig datalinie ved %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "For mange parametre på datalinie ved %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Ugyldigt arch/os-tal: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Ufuldstændig standardlinie ved %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "For mange parametre i standardlinie ved %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "manglende ':' (fandt 0x%02x) ved %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "manglende parameter til %s ved %s:%d\n" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "kan ikke åbne %s ved %s:%d: %s\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "manglende arkitektur for %s ved %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "ugyldig tilvalg '%s' ved %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "" +"Ukendt system: %s\n" +"\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Kunne ikke åbne %s for læsning: %s.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "kunne ikke fjerne katalog %s: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Kunne ikke fraspalte ny proces til %s: %s\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Kunne ikke fraspalte ny proces til %s: %s\n" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "overspringer installation af %s-%s-%s, %%pre-småskript fejlede rc %d\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "" +"kørsel af småskriptet %s fra %s-%s-%s mislykkedes, afslutningsstatus %d\n" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "" +"kørsel af småskriptet %s fra %s-%s-%s mislykkedes, afslutningsstatus %d\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "ukendt mærke" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "ej installeret" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "kunne ikke åbne Packages-database i %s\n" + +#: lib/rpmts.c:193 +#, fuzzy, c-format +msgid "extra '(' in package label: %s\n" +msgstr "ugyldigt pakkenummer: %s\n" + +#: lib/rpmts.c:211 +#, fuzzy, c-format +msgid "missing '(' in package label: %s\n" +msgstr "Manglende '(' i %s %s\n" + +#: lib/rpmts.c:219 +#, fuzzy, c-format +msgid "missing ')' in package label: %s\n" +msgstr "ugyldigt pakkenummer: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: readLead mislykkedes\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "verificér ikke filerne i pakke" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, fuzzy, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Signaturfyld : %d\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s mislykkedes\n" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "manglende %s" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Ikke-tilfredsstillede afhængighedskrav for %s-%s-%s: " + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "manglende { efter %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "manglende } efter %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "tomt mærkeformat" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "tomt mærkenavn" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "ukendt mærke" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] forventet ved slutningen af tabel" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "uventet ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "uventet }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? forventet i udtryk" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ forventet efter ? i udtryk" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} forventet i udtryk" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": forventet efter ?-underudtryk" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ forventet efter : i udtryk" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| forventet ved slutningen af udtryk" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "kan ikke åbne '%s'-indeks ved brug af db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "der er ikke sat nogen dbpath\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "fejl(%d) ved hentning af \"%s\"-poster fra '%s'-indekset\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, fuzzy, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "fejl(%d) ved gemning af post %s i %s\n" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: Fread mislykkedes: %s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: åbning mislykkedes: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "fejl(%d) ved hentning af \"%s\"-poster fra '%s'-indekset\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "fejl(%d) ved hentning af \"%s\"-poster fra '%s'-indekset\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "fejl(%d) ved hentning af \"%s\"-poster fra '%s'-indekset\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: kan ikke læse hoved ved 0x%x\n" + +#: lib/rpmdb.c:2434 +#, fuzzy, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "fejl(%d) ved hentning af \"%s\"-poster fra '%s'-indekset\n" + +#: lib/rpmdb.c:2453 +#, fuzzy, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "fejl(%d) ved gemning af post %s i %s\n" + +#: lib/rpmdb.c:2463 +#, fuzzy, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "fejl(%d) ved fjernelse af post %s fra %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "fejl(%d) under allokering af ny pakkeinstans\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "fejl(%d) ved gemning af post %s i %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "der ikke sat nogen dbpath" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "kunne ikke fjerne katalog %s: %s\n" + +#: lib/rpmdb.c:2897 +#, fuzzy, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "post nummer %d i databasen er fejlbehæftet -- overspringer.\n" + +#: lib/rpmdb.c:2911 +#, fuzzy, c-format +msgid "cannot add record originally at %u\n" +msgstr "kunne ikke tilføje posten, der tidligere var ved %d\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "kunne ikke genopbygge database: original-databasen beholdes\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "kunne ikke erstatte gammel database med ny database!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "erstat filer i %s med filer fra %s for at genoprette" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "kunne ikke fjerne katalog %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d fejl(%d) fra %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d fejl(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "kan ikke opnå %s lås på %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "delt" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "eksklusiv" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "lukkede db-indeks %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, fuzzy, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "ukendt db-tilvalg: \"%s\" ignoreret\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s har ugyldig talværdi, overspringes\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s har for stor eller lille 'long'-værdi, overspringes\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s har for stor eller lille heltalsværdi, overspringes\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Kunne ikke læse spec-fil fra %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Kunne ikke fraspalte ny proces til %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Kunne ikke læse spec-fil fra %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "kunne ikke oprette %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Kunne ikke etablere en forbindelse til serveren" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "kunne ikke åbne %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "kunne ikke fjerne katalog %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Kunne ikke omdøbe %s til %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Kunne ikke læse %s: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "kunne ikke åbne %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "kunne ikke oprette %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "Makroen %%%s har et uafsluttet indhold (body)\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "Makroen %%%s kunne ikke udfoldes\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Kunne ikke læse spec-fil fra %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktiv %d tom %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(tom)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(tom)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Makroen %%%s har et uafsluttet indhold (body)\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Makroen %%%s har et ugyldig navn (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Makroen %%%s har uafsluttede parametre\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "Makroen %%%s har intet indhold\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Makroen %%%s kunne ikke udfoldes\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Makroen %%%s har ugyldigt navn (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Makro %%%s (%s) blev ikke brugt under niveau %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Ukendt tilvalg %c i %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "Uafsluttet %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Et %% efterfølges af en makro, der ikke kan tolkes\n" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "fejl ved oprettelse af midlertidig fil %s\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Fil %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Filen %s er mindre end %u byte\n" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "kunne ikke fjerne katalog %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, fuzzy, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "- understøttes ikke for strenge\n" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "- understøttes ikke for strenge\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: Fwrite mislykkedes: %s\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "ugyldigt pakkenummer: %s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: Fread mislykkedes: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(ingen fejl)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "fatal fejl: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "fejl: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "advarsel: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "hukommelsesallokering (%u byte) returnerede NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "Ingen signatur\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(ingen fejl)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Kunne ikke læse spec-fil fra %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite mislykkedes: %s\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fread mislykkedes: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "eksekvering mislykkedes\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg kunne ikke skrive signaturen\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "kunne ikke læse signaturen\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "makeTempFile mislykkedes\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead mislykkedes: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature mislykkedes: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "åbning af %s mislykkedes %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: læs manifest mislykkedes: %s\n" + +#: tools/rpmgraph.c:220 +#, fuzzy +msgid "don't verify header+payload signature" +msgstr "verificér pakkesignatur" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: for mange uid'er\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: for mange uid'er\n" + +#, fuzzy +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUnameS: for mange uid'er\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: for mange gid'er\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: for mange gid'er\n" + +#, fuzzy +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGnameS: for mange gid'er\n" + +#, fuzzy +#~ msgid "add suggested packages to transaction" +#~ msgstr "forespørg/verificér pakke(r) i gruppen" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Kunne ikke udføre %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps kan kun angives ved opbygning, genopbygning, genoversættelse, " +#~ "installation, sletning og verifikation" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) kan kun angives ved installation, sletning, forespørgsel og " +#~ "genopbygning af databasen" + +#, fuzzy +#~ msgid "detect file conflicts between packages" +#~ msgstr "omdirigér filer i ikke-omdirigérbar pakke" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "den midlertidige database %s eksisterer allerede\n" + +#, fuzzy +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "forespørg/verificér pakke(r), der ejer filen" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Ugyldig angivelse af %%_signature i makrofil.\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Overløb i målbuffer\n" + +#~ msgid "no files to sign\n" +#~ msgstr "ingen filer at underskrive\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "kan ikke tilgå filen %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign kan kun bruges ved pakkeopbygning" + +#, fuzzy +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "verificér ikke filerne i pakke" + +#, fuzzy +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "verificér ikke filerne i pakke" + +#, fuzzy +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "underskriv en pakke (slet nuværende signatur)" + +#, fuzzy +#~ msgid "generate signature" +#~ msgstr "generér PGP/GPG-signatur" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Ugyldig angivelse af '%%_signature'-spec i makrofil.\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK-fejl: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "generér hoveder, der er kompatible med rpm4-indpakningsversionen" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Intern fejl i parameterfortolkningen (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: readLead mislykkedes\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: åbn %s: %s\n" + +#, fuzzy +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fread mislykkedes: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s er ikke nogen RPM-pakke\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: læser hoved fra %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Genererer signatur: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "generér PGP/GPG-signatur" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "ingen pakkefiler angivet til genopbygning" + +#~ msgid "no spec files given for build" +#~ msgstr "ingen spec-fil angivet til opbygning" + +#~ msgid "no tar files given for build" +#~ msgstr "ingen tar-arkiver angivet til opbygning" + +#~ msgid "%s failed\n" +#~ msgstr "%s mislykkedes\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Rekursionsdybde(%d) overskrider maks(%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: ukendt mærkenavn: \"%s\" ignoreret\n" + +#, fuzzy +#~ msgid "(rpmlib provides)" +#~ msgstr "%s: %-45s JA (rpmlib tilfører)\n" + +#, fuzzy +#~ msgid "(db files)" +#~ msgstr "ugyldig db-fil %s\n" + +#, fuzzy +#~ msgid "(db provides)" +#~ msgstr "%s: %-45s JA (db tilfører)\n" + +#, fuzzy +#~ msgid "(added files)" +#~ msgstr "ugyldig db-fil %s\n" + +#, fuzzy +#~ msgid "(added provide)" +#~ msgstr "%s: %-45s JA (tilføjede 'provide')\n" + +#~ msgid "url port must be a number\n" +#~ msgstr "url-port skal være et tal\n" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "" +#~ "opretter kataloget %s\n" +#~ "\n" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "forespørg/verificér pakke(r) i gruppen" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "forespørg/verificér pakke(r) i gruppen" + +#, fuzzy +#~ msgid "do not read headers" +#~ msgstr "%s: kan ikke læse hoved ved 0x%x\n" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Fil passer ikke til præfiks (%s): %s\n" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "kunne ikke fjerne katalog %s: %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() returnerede ingen størrelse: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() returnerede ingen monteringspunkter: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "kunne ikke finde %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "fil %s er på en ukendt enhed\n" + +#~ msgid "cannot open %s index\n" +#~ msgstr "kan ikke åbne '%s'-indeks\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "" +#~ "Kunne ikke åbne %s: %s\n" +#~ "\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "" +#~ "Kunne ikke åbne %s: %s\n" +#~ "\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Kunne ikke åbne midlertidig fil.\n" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "" +#~ "Ukendt system: %s\n" +#~ "\n" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Makroen %%%.*s blev ikke fundet, overspringer\n" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: readLead mislykkedes\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "linie %d: Anden '%%files'-liste\n" + +#, fuzzy +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "\"B\"-afhængighed kræver en epoke (antager samme som \"A\")\n" +#~ "\tA %s\tB %s\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Datatype %d understøttes ikke\n" + +#, fuzzy +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "fjerne %s-%s-%s \"%s\" fra tsort-relationer.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "LØKKE:\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "Hovedstørrelse er for stor" + +#, fuzzy +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Verifikationstilvalg (med -V eller --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp ikke fundet: " + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "kunne ikke åbne fil %s: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp fejlede\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp kunne ikke skrive signatur\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Du skal angive \"%%_pgp_name\" i din makrofil\n" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "ukendt mærke" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "Ingen signatur\n" + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "Ingen signatur\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot kan ikke være \"/\": %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Spec-fil kan ikke bruge BuildRoot\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "slå i18N-strenge op i spec-fil katalog" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "" +#~ "generér hoveder, der er kompatible med (gamle) rpm[23]-" +#~ "indpakningsversioner" + +#, fuzzy +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "kan ikke oprette %s: %s\n" + +#, fuzzy +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "kunne ikke skrive til %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "kunne ikke forespørge %s: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "eksekvering mislykkedes\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "aflus URL-bufferhåndtering" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "erstat i18n-sektioner i spec-fil" + +#, fuzzy +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "kan ikke åbne rpm-database i %s\n" + +#~ msgid "Success" +#~ msgstr "Succes" + +#~ msgid "Bad server response" +#~ msgstr "Ugyldigt svar fra server" + +#~ msgid "Server I/O error" +#~ msgstr "I/O-fejl for server" + +#~ msgid "Server timeout" +#~ msgstr "Tidsudløb for server" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Kunne ikke skaffe serverens IP-addresse" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Kunne ikke slå serverens navn op" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Kunne ikke etablere en data-forbindelse til serveren" + +#~ msgid "I/O error to local file" +#~ msgstr "I/O-fejl i lokal fil" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Kunne ikke sætte fjernserveren i passiv tilstand" + +#~ msgid "File not found on server" +#~ msgstr "Fil ikke fundet på server" + +#~ msgid "Abort in progress" +#~ msgstr "Afbryder programmet" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Ukendt eller uventet fejl" + +#, fuzzy +#~ msgid "File tree walk options:" +#~ msgstr "Signaturtilvalg" + +#, fuzzy +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: åbning mislykkedes: %s\n" + +#, fuzzy +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: readLead mislykkedes\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "%s-udvidelse mislykkedes ved %s:%d \"%s\"\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "Kan ikke udfolde %s\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "Kunne ikke læse %s, HOME er for stor.\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "fjernelse af %s mislykkedes: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "Træfningsgrænse for %%docdir\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "linie %d: Kræver parameter til %%patch -b: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "linie %d: Kræver parameter til %%patch -z: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "linie %d: Ugyldigt parameter til %%patch -p: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "linie %d: Kræver parameter til %%patch -p: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "linie %d: Ugyldigt parameter til %%patch -p: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "For mange lapper (patches)!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "linie %d: Ugyldigt parameter til %%patch: %s\n" + +#, fuzzy +#~ msgid "debug option/argument processing" +#~ msgstr "Intern fejl i parameterfortolkningen (%d) :-(\n" + +#, fuzzy +#~ msgid "skip %%readme files" +#~ msgstr "%s: readLead mislykkedes\n" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "læsning mislykkedes: %s (%d)\n" + +#, fuzzy +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Kunne ikke læse hoved fra %s: %s\n" + +#, fuzzy +#~ msgid "Repackaging..." +#~ msgstr "Forbereder..." + +#, fuzzy +#~ msgid "Upgrading..." +#~ msgstr "Forbereder..." + +#, fuzzy +#~ msgid "Upgrading packages..." +#~ msgstr "opgradér pakke" + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "Modtager %s\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "fejl ved læsning af hovedet på pakke\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== gemmer tsort-relationer\n" + +#, fuzzy +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== kun efterfølgere (præsentationsrækkefølge)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== fortsætter tsort ...\n" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "Fil %4d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "%10d %s\n" +#~ msgstr "linie %d: %s\n" + +#, fuzzy +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "tilføjer %d indgange til '%s'-indekset.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "undlad at benytte libio(3)-API" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "kører postinstallations-skript (hvis det findes)\n" + +#, fuzzy +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "pakke: %s-%s-%s filer test = %d\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "pakkens post-nummer: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#, fuzzy +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "pakke %s-%s-%s krav ikke opfyldt: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s oversprunget grundet manglende ok-flag\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== gemmer omrokeringer\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d ekskluderer %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d omrokerer %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "ekskluderer %s %s\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "omrokerer %s til %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "omrokerer kataloget %s til %s\n" + +#, fuzzy +#~ msgid "Adding goal: %s\n" +#~ msgstr "Finder %s: (benytter %s)...\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... som %s\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "installerer binærpakker\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "fandt %d kilde- og %d binærpakker\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "installerer binærpakker\n" + +#, fuzzy +#~ msgid "Adding: %s\n" +#~ msgstr "linie: %s\n" + +#, fuzzy +#~ msgid "Suggesting: %s\n" +#~ msgstr "" +#~ "kilder i: %s\n" +#~ "\n" + +#, fuzzy +#~ msgid "mounted filesystems:\n" +#~ msgstr "henter liste over monterede filsystemer\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "Fil %4d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "omrokerer %s til %s\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "Forventet størrelse: %12d = indled(%d)+sign(%d)+fyld(%d)+data(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " Faktisk størrelse: %12d\n" + +#, fuzzy +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Signaturstørrelse: %d\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "PGP-signaturstørrelse: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "Fik %d byte af PGP-signatur\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "GPG-signaturstørrelse: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "Fik %d byte GPG-signatur\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "ekskluderer kataloget %s\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "kildepakke forventet, binær fundet\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "ingen pakker udløser %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "running pre-transaction scripts\n" +#~ msgstr "kører præinstallations-skript (hvis det findes)\n" + +#, fuzzy +#~ msgid "running post-transaction scripts\n" +#~ msgstr "kører skriptet postuninstall (hvis det findes)\n" + +#, fuzzy +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "lukkede db-miljø %s/%s\n" + +#, fuzzy +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "fjernede db-miljø %s/%s\n" + +#, fuzzy +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "åbner db-miljø %s/%s %s\n" + +#, fuzzy +#~ msgid "closed db index %s/%s\n" +#~ msgstr "lukkede db-indeks %s/%s\n" + +#, fuzzy +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "åbner db-indeks %s/%s %s mode=0x%x\n" + +#, fuzzy +#~ msgid "locked db index %s/%s\n" +#~ msgstr "låste db-index %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "fjerner \"%s\" fra %s-indekset.\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "fjerne %d indgange fra %s-indekset.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "" +#~ "tilføjer \"%s\" til '%s'-indekset.\n" +#~ "\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "tilføjer %d indgange til '%s'-indekset.\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "fjerner %s efter vellykket genopbygning af db3.\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "genopbygger database %s over i %s\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "" +#~ "opretter kataloget %s\n" +#~ "\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "opretter kataloget %s: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "åbner gammel database med dbapi %d\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "åbner ny database med dbapi %d\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "fjerner kataloget %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "lukket db-fil %s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "åbner db-indeks %s/%s %s mode=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: læs %s: %s\n" + +#, fuzzy +#~ msgid "Unable to write final header\n" +#~ msgstr "Kunne ikke skrive hoved til %s: %s\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "indpakningsversion 1 understøttes ikke af denne udgave af RPM\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "" +#~ "kun indpakninger med hovedversion <= 4 understøttes af denne udgave af " +#~ "RPM\n" + +#, fuzzy +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: Kan ikke underskrive v1.0 RPM\n" + +#, fuzzy +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: Kan ikke genunderskrive v2.0 RPM\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: Ingen tilgængelig signatur (v1.0 RPM)\n" diff --git a/po/de.gmo b/po/de.gmo new file mode 100644 index 0000000..99e4203 Binary files /dev/null and b/po/de.gmo differ diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..761bd96 --- /dev/null +++ b/po/de.po @@ -0,0 +1,4443 @@ +# Translation of RPM to German (Deutsch) +# Copyright (C) 1997-2009 - Red Hat, Inc. +# This file is distributed under the same license as the RPM package. +# Karl Eichwalder , 1997,1998. +# Robert Scheck , 2004,2005. +# Fabian Affolter , 2008,2009. +# +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.4.2\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2009-01-11 01:27+0100\n" +"Last-Translator: Fabian Affolter \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: German\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM-Version %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Copyright (C) 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" +"Dieses Programm darf unter den Bedingungen der GNU GPL frei weiterverbreitet " +"werden\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "erzeugen einer Pipe für --pipe fehlgeschlagen: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "Ausführung fehlgeschlagen\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "Argument ist kein RPM-Paket\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "Fehler beim Lesen des Paket-Headers\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "Kann Nutzdaten nicht erneut öffnen: %s\n" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "Abfragen/überprüfen der Paketauswahl:" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Abfrage-Optionen (mit -q oder --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Ãœberprüfungsoptionen (mit -V oder --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Installations-/Aktualisierungs-/Deinstallationsoptionen:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Gemeinsame Optionen für alle RPM-Modi und Ausführungen:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "" +"Nur eine Art von Abfragen/Ãœberprüfungen kann jeweils durchgeführt werden" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "Unerwartete Abfrage-Parameter" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "Unerwartetes Abfrage-Format" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "Unerwartete Abfrage-Quelle" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "Nur ein wichtiger Modus kann angegeben werden" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"Nur Installation, Aktualisierung, \"rmsource\" und \"rmspec\" können " +"erzwungen werden" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "Dateien können nur bei der Paket-Installation verschoben werden" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" +"--prefix kann nicht zusammen mit --relocate oder --excludepath verwendet " +"werden" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate und --excludepath dürfen nur bei der Installation neuer Pakete " +"benutzt werden" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix darf nur bei der Installation neuer Pakete benutzt werden" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "Argumente für --prefix müssen mit einem / beginnen" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) darf nur während der Paket-Installation angegeben werden" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent darf nur während der Paket-Installation angegeben werden" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs darf nur während der Paket-Installation angegeben werden" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs darf nur während der Paket-Installation angegeben werden" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs darf nur während der Paket-Installation angegeben werden" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "entweder --excludedocs oder --includedocs darf angegeben werden" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch darf nur während der Paket-Installation angegeben werden" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos darf nur während der Paket-Installation angegeben werden" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize darf nur während der Paket-Installation angegeben werden" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" +"--allmatches darf nur während der Paket-Deinstallation angegeben werden" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles darf nur während der Paket-Installation angegeben werden" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" +"--justdb darf nur während der Paket-Installation oder -Deinstallation " +"angegeben werden" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"Optionen zum Deaktivieren von Skripten können nur während der Paket-" +"Installation oder -Deinstallation angegeben werden" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"Optionen zum Deaktivieren von Trigger können nur während der Paket-" +"Installation oder -Deinstallation angegeben werden" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test darf nur während der Paket-Installation, -Deinstallation und -" +"Erstellung angegeben werden" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "" +"--justdb darf nur während der Paket-Installation oder -Deinstallation " +"angegeben werden" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "Argumente für --root (-r) müssen mit einem / beginnen" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "Es wurden keine Pakete für die Deinstallation angegeben" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "Es wurden keine Pakete für die Installation angegeben" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "Es wurden keine Argumente für die Abfrage angegeben" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "Es wurden keine Argumente für die Ãœberprüfung angegeben" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "BuildRoot wurde bereits angegeben, ignoriere %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"%prep (Quellen entpacken, Patches übernehmen) der durchlaufen" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"%build (%prep, anschliessendes Kompilieren) der durchlaufen" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"%install (%prep, %build, anschliessendes Installieren) der " +"durchlaufen" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "Ãœberprüfe %files-Abschnitt der " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "Baue Source- und Binär-Paket von " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "Baue nur ein Binär-Paket von " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "Baue nur ein Source-Paket von " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"%prep (Quellen entpacken, Patches übernehmen) des durchlaufen" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"%build (%prep, anschliessendes Kompilieren) des durchlaufen" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"%install (%prep, %build, anschliessendes Installieren) des " +"durchlaufen" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "Ãœberprüfe %files-Abschnitt des " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "Baue Source- und Binär-Paket vom " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "Baue nur ein Binär-Paket vom " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "Baue nur ein Source-Paket vom " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "Baue ein Binär-Paket vom " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"%install (%prep, %build, anschliessendes Installieren) des " +"durchlaufen" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "Ãœberschreibe BuildRoot" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "Erstellungsdateibaum nach Beendigung löschen" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ExcludeArch ignorieren: Anweisungen der Spec-Datei" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "Debugge Datei-Status" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "Keine der Phasen des Erstellungsvorganges ausführen" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "Keine Ãœberprüfung der Paket-Abhängigkeiten" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" +"Generiere Paket-Header, die mit veralteten RPM-Paketen (v2/3) kompatibel sind" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "Keine i18n-Ãœbersetzungen der Spec-Datei zulassen" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "Quelldateien nach Beendigung löschen" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "Spec-Datei nach Beendigung löschen" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "Springe direkt zur angegeben Phase (nur für c, i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "Ãœberschreibe Zielplattform" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" +"Erstellungsoptionen mit [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Fehlgeschlagene Paket-Abhängigkeiten:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Die Spec-Datei %s kann nicht geöffnet werden: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Die Tar-Pipe konnte nicht geöffnet werden: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Konnte Spec-Datei von %s nicht lesen\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Konnte %s nicht in %s umbenennen: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "Aufruf von stat für %s nicht möglich: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Die Datei %s ist keine normale Datei.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Die Datei %s scheint keine Spec-Datei zu sein.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Baue für die Zielplattform(en): %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Baue für das Ziel %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "Initialisiere Datenbank" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"Erstelle invertierte Datenbank-Liste anhand der installierten Paket-Header" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "Ãœberprüfe Datenbank-Dateien" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Datenbank-Optionen:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "Ãœberprüfe Paket-Signatur(en)" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "Importiere einen gepanzerten öffentlichen Schlüssel" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Signatur-Optionen:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "Es wurden keine Argumente angegeben" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "Installiere Paket(e)" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "Signiere Paket(e) (identisch mit --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "Lösche Paket-Signatur(en)" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Signatur-Optionen:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Konnte %s nicht ausführen: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "\"%%_gpg_name\" muss in der Makro-Datei gesetzt sein\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Bitte das Passwort eingeben: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Das Passwort ist richtig.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Die Passwort-Ãœberprüfung ist fehlgeschlagen\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "Abfragen einer Spec-Datei" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "Abfragen einer Spec-Datei" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "Folgendes Abfrage-Format benutzen" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Signatur-Optionen:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "Es wurden keine Argumente für die Abfrage angegeben" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Kann temporäre Datei nicht öffnen.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Ausführung(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Ausführung von %s fehlgeschlagen (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Fehler-Status beim Beenden von %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"Fehler beim Bauen des RPM:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "Syntax-Fehler beim Parsen von ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "Syntax-Fehler beim Parsen von &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "Syntax-Fehler beim Parsen von ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "Fehler beim Parsen des Ausdrucks\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "Unerwartete (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- nur bei Zahlen\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! nur bei Zahlen\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "Typen müssen übereinstimmen\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / nicht unterstützt für Strings\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- nicht unterstützt für Strings\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& und || nicht unterstützt für Strings\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "Syntax-Fehler im Ausdruck\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Fehlende '(' bei %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Fehlende ')' bei %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Ungültiges %s Zeichen: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "Fehlendes %s bei %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Druckbarem Zeichen folgt %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Ungültiger Syntax: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Ungültige Dateiberechtigungen: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Ungültige Verzeichnisberechtigungen: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Ungewöhnliche Länge der Lokalisierung \"%.*s\" in %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Doppelte Lokalisierung %.*s in %%lang(%s)\n" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "Ungültige Fähigkeit: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "Dateifähigkeits-Unterstützung nicht eingebaut\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Nur ein Argument für %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Zwei Dateien in einer Zeile: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Datei muss mit \"/\" beginnen: %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "%%doc kann nicht mit anderen Formaten gemischt werden: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "Unbekannter Datei--Auszug-Algorithmus %u, gehe zurück zu MD5\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Datei doppelt aufgelistet: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s trennen von %s fehlgeschlagen: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Symbolischer Link zeigt auf den BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "Spezifikation fordert ausdrückliche Dateiattribute für: %s\n" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Datei nicht gefunden: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Datei nicht gefunden: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "Datei %s zu gross für Nutzlast\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: Kann den unbekannten Tag (%d) nicht laden.\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: Lesen des öffentlichen Schlüssels fehlgeschlagen.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: Ist kein gepanzerter öffentlicher Schlüssel.\n" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "Makro %%%s konnte nicht erweitert werden\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Datei benötigt führenden \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "\"Glob\" hat keine Berechtigung für: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Datei von \"glob\" nicht gefunden: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Datei von \"glob\" nicht gefunden: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Datei %s aus %%files konnte nicht geöffnet: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "Zeile: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Ungültige Datei: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Ungültiger Eigentümer/Gruppe: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Prüfe auf nicht gepackte Datei(en): %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Installierte (aber nicht gepackte) Datei(en) gefunden:\n" +"%s" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "Verarbeite Pakete: %s-%s-%s.%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "Architekturabhängige Binärdateien in noarch-Paket\n" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "Erstellen des Archivs fehlgeschlagen bei der Datei %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "Erstellen des Archivs fehlgeschlagen: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy schreiben fehlgeschlagen: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy lesen fehlgeschlagen: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: Zeile: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Rechnername konnte nicht erkannt werden: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Konnte PreIn-Datei nicht öffnen: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Konnte PreUn-Datei nicht öffnen: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Konnte PreTrans-Datei nicht öffnen: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Konnte PostIn-Datei nicht öffnen: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Konnte PostUn-Datei nicht öffnen: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Konnte PostTrans-Datei nicht öffnen: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Konnte VerifyScript-Datei nicht öffnen: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Konnte Trigger-Script nicht öffnen: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Unbekannte Nutzdaten.Kompression: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Konnte keine unveränderliche Header-Region erstellen.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Kann den temporären Header nicht schreiben\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Ungültige CSA-Daten\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Kann den Header der Signatur nicht erneut laden.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Konnte %s nicht öffnen: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Kann das Paket nicht schreiben: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Konnte Signatur-Ziel %s nicht öffnen: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Konnte Header von %s nicht lesen: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Konnte Header nicht nach %s schreiben: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Konnte Nutzdaten von %s nicht lesen: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Konnte Nutzdaten nicht nach %s schreiben: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Erstellt: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "Ausschluss \"%s\":\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Ausschluss von \"%s\" fehlgeschlagen.\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Paket-Prüfung \"%s\" fehlgeschlagen.\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Konnte den Dateinamen für das Paket %s nicht generieren: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "Kann Datei %s nicht erstellen: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "Zeile %d: Zweites %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog-Einträge müssen mit einem * beginnen\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "Unvollständiger %%changelog-Eintrag\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "Ungültiges Datum im %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog ist nicht in absteigender Reihenfolge\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "Fehlender Name im %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "Keine Beschreibung im %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "Zeile %d: Fehler beim Parsen von %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "Zeile %d: Ungültige Option %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "Zeile %d: Zu viele Namen: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "Zeile: %d: Paket existiert nicht: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "Zeile %d: Zweite Beschreibung\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "Zeile %d: Fehler beim Parsen von %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "Zeile %d: Fehler beim Parsen von %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "Zeile %d: Ungültige Nummer: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "Zeile %d: Ungültige no%s-Nummer: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "Zeile %d: Ungültige %s Nummer: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d bezeichnet mehrere Male\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Architektur ist ausgeschlossen: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Architektur ist nicht einbezogen: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "Betriebssystem ist ausgeschlossen: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "Betriebssystem ist nicht einbezogen: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "%s-Feld muss im Paket vorhanden sein: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Doppelte %s-Einträge im Paket: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "illegal _docdir_fmt: %s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Kann Icon %s nicht öffnen: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Kann Icon %s nicht lesen: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Unbekannter Icon-Typ: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "Zeile %d: Tag benötigt nur ein Zeichen: %s\n" + +#: build/parsePreamble.c:607 +#, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "Zeile %d: Ungültiges Zeichen '%c' in: %s\n" + +#: build/parsePreamble.c:610 +#, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "Zeile %d: Ungültiges Zeichen in: %s\n" + +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "Zeile %d: Ungültiges Zeichen \"..\" in: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "Zeile %d: Missgebildeter Tag: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "Zeile %d: Leerer Tag: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "Zeile %d: Präfixe dürfen nicht mit einem \"/\" enden: %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "" +"Zeile %d: Das Dokumentationsverzeichnis muss mit einem \"/\" beginnen: %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "Zeile %d: Das Epoch-Feld muss eine vorzeichenlose Zahl sein: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "Zeile %d: Ungültig %s: Kennzeichner: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "Zeile %d: Ungültiges BuildArchitecture-Format: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "Zeile %d: Nur noarch-Unterpakete werden unterstützt: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Interner Fehler: Falscher Tag %d\n" + +#: build/parsePreamble.c:909 +#, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "Zeile %d: %s ist veraltet: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Ungültige Paket-Spezifikation: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Paket ist bereits vorhanden: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "Zeile %d: Unbekannter Tag: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} kann nicht leer sein\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} kann nicht \"/\" sein\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Ungültige Quelle: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "Keine Patch-Nummer %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "%%patch ohne korrespondierenden \"Patch:\"-Tag\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "Keine Source-Nummer %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "Kein \"Source\"-Tag in Spec-Datei\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Konnte NoSource %s nicht herunterladen: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Fehler beim Parsen von %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "Zeile %d: Ungültiges Argument für %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "Zeile %d: Ungültige %%setup-Option %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "Ungültige Patch-Nummer %s: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "Zeile %d: Zweites %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"Zeile %d: Abhängigkeiten müssen alphanumerisch, mit '_' oder '/' beginnen: " +"%s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "Zeile %d: Versionsabhängiger Dateiname nicht zulässig: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "Zeile %d: Version benötigt: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "Zeile %d: Ungültige Nummer: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "Zeile %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "Zeile %d: Trigger benötigen --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "Zeile %d: Fehler beim Parsen von %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "Zeile %d: Internes Skript muss mit '>' enden: %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "Zeile %d: Skript/Programm muss mit '/' beginnen: %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "Zeile %d: Zweites %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "Zeile %d: Nicht unterstütztes internes Skript: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "Zeile %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Öffnen von %s fehlgeschlagen: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "Nicht geschlossenes %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean liefert %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: %%else ohne %%if erhalten\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: %%endif ohne %%if erhalten\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "Missgebildete %%include-Anweisung\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Keine für das Bauen kompatible Architektur gefunden\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Paket hat keine %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Konnte Spec-Datei von %s nicht lesen\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Konnte Spec-Datei von %s nicht lesen\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Konnte Spec-Datei von %s nicht lesen\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Die Tar-Pipe konnte nicht geöffnet werden: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Fehler beim Parsen von %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Ausführung(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Fehlendes %s bei %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Zu viele Argumente in der Datenzeile bei %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Verarbeite Pakete: %s-%s-%s.%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "Zeile %d: Ungültige Nummer: %s\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Konnte keine Pipe für %s erzeugen: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Konnte %s nicht ausführen: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Konnte fork %s nicht ausführen: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s fehlgeschlagen: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "Konnte nicht all Daten nach %s schreiben\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "Umwandlung von %s in einen langen Integer fehlgeschlagen.\n" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "GPG konnte die Signatur nicht schreiben\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) fehlgeschlagen: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load fehlgeschlagen: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Erkennung der Datei \"%s\" fehlgeschlagen: Modus %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Finde %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Fehlgeschlagenes zu finden %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "Abfragen der Spec-Datei %s fehlgeschlagen, kann nicht geparst werden\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(Fehler 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Ungültige Magic" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Ungültiger Header" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Header zu gross" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Unbekannter Datei-Typ" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Fehlende harte Verlinkung(en)" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "Prüfsumme stimmt nicht überein" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Interner Fehler" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "Archiv-Datei nicht im Header" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " fehlgeschlagen - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "Paket %s wurde bereits hinzugefügt, überspringe %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "Paket %s würde bereits hinzugefügt, ersetze es durch %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(keine Nummer)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(nicht Base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(ungültiger Typ)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(kein Blob)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(ungültiger XML-Typ)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(keine OpenPGP-Signatur)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "ersetzt " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "nicht installiert" + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "geshared " + +#: lib/formats.c:600 +#, fuzzy +msgid "wrong color" +msgstr "falsche Farbe " + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "fehlend %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(unbekannt %3d)" + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(keine Nummer)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "Benutzer %s existiert nicht - benutze Root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "Gruppe %s existiert nicht - benutze Root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "Archiv-Datei %s wurde nicht in der Header-Dateiliste gefunden\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s als %s gesichert\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s rmdir von %s fehlgeschlagen: Verzeichnis ist nicht leer\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir von %s fehlgeschlagen: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s trennen von %s fehlgeschlagen: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s erstellt als %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "überspringe Paket %s mit nicht überprüfbarer V%u Signatur\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "Blob-Grösse(%d): UNGÃœLTIG, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "Tag[%d]: UNGÃœLTIG, Tag %d, Typ %d, Offset %d, Count %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "Regionsoffset: UNGÃœLTIG, Tag %d, Typ %d, Offset %d, Zähler %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "Regionstrailer: UNGÃœLTIG, Tag %d, Typ %d, Offset %d, Zähler %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "Regionsgrösse: UNGÃœLTIG, ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: UNGÃœLTIG, nicht hexadezimal\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr RSA: UNGÃœLTIG, nicht binär\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr DSA: UNGÃœLTIG, nicht binär\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hdr Grösse(%d): UNGÃœLTIG, lesen lieferte %d zurück\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "hdr magic: UNGÃœLTIG\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "hdr Tags: UNGÃœLTIG, Nummer der Tags (%d) ausserhalb des Bereichs\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "hdr Tags: UNGÃœLTIG, Nummer der Bytes (%d) ausserhalb des Bereichs\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr Blob(%zd): UNGÃœLTIG, lesen lieferte %d zurück\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "hdr Load: UNGÃœLTIG\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature fehlgeschlagen: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Keine Signatur verfügbar\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead fehlgeschlagen: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread fehlgeschlagen: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s ist ein Delta RPM und kann nicht direkt installiert werden\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Nicht unterstütze Nutzlast (%s) in Paket %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "MAKRO mit Wert AUSDRUCK vordefinieren" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "'MAKRO AUSDRUCK'" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "MAKRO mit Wert AUSDRUCK definieren" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "Makro-Ausdehnung des AUSDRUCKS anzeigen" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "'AUSDRUCK'" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "lese anstatt der Standard-Datei(en)" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "Paket-Kurzfassung nicht überprüfen" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "Datenbank-Header beim Abrufen nicht überprüfen" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "Paket-Signatur(en) nicht überprüfen" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "Sende Standardausgabe an CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "benutze WURZELVERZEICHNIS als oberstes Verzeichnis" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "WURZELVERZEICHNIS" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "Zeige bekannte Abfrage-Tags" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "Zeige endgültige rpmrc- und Makro-Konfiguration" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "Zeige weniger informative Ausgabe" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "Zeige detailliertere Ausgabe" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "Zeige benutzte RPM-Version" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "Debugge Nutzdaten-Dateistatus" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "Debugge rpmio Ein-/Ausgabe" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: Optionstabelle ist falsch konfiguriert (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "Ausgeschlossene Pfade müssen mit einem / beginnen" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "Verschiebungen müssen mit einem / beginnen" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "Verschiebungen müssen ein = enthalten" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "Verschiebungen müssen einen / nach dem = enthalten" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"Installiere alle Dateien, sogar Konfigurationsdateien, die sonst " +"möglicherweise übersprungen werden" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"Entferne alle Pakete, die mit übereinstimmen (normalerweise wird " +"eine Fehlermeldung angezeigt, wenn auf mehrere Pakete zutrifft)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "Verschiebe Dateien eines nicht verschiebbaren Pakets" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "Zeige Abhängigkeitsschleifen als Warnung" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "Lösche (deinstalliere) Paket" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "Installiere keine Konfigurationsdateien" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "Installiere keine Dokumentation" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "Ãœberspringe Dateien mit beginnendem " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "Abkürzung für --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "Aktualisiere Paket(e), wenn bereits installiert" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "Zeige Rautezeichen während der Installation (empfehlenswert mit -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "Keine Ãœberprüfung der Paket-Architektur" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "Keine Ãœberprüfung des Paket-Betriebssystems" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "Keine Ãœberprüfung des Festplattenspeichers vor der Installation" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "Installiere Dokumentation" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "Installiere Paket(e)" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "Aktualisiere die Datenbank, aber verändere nichts im Dateisystem" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "Keine Ãœberprüfung der Paket-Abhängigkeiten" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "Keine Ãœberprüfung der Prüfsumme der Dateien" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "Keine Ãœberprüfung der Prüfsumme der Dateien (veraltet)" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "Installiere keine Sicherheitskontext-Dateien" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" +"Paket-Installation nicht neu sortieren, um die Abhängigkeiten zu erfüllen" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "Keine Paket-Scriptlets ausführen" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "%%pre-Scriptlet nicht ausführen (wenn vorhanden)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "%%post-Scriptlet nicht ausführen (wenn vorhanden)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "%%preun-Scriptlet nicht ausführen (wenn vorhanden)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "%%postun-Scriptlet nicht ausführen (wenn vorhanden)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "Keine Scriptlets dieses Pakets ausführen" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "%%triggerprein-Scriptlets nicht ausführen" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "%%triggerin-Scriptlets nicht ausführen" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "%%triggerun-Scriptlets nicht ausführen" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "%%triggerpostun-Scriptlets nicht ausführen" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"Aktualisierung auf eine alte Version des Pakets (--force macht das bei " +"Aktualisierungen automatisch)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "Zeige Prozentangabe bei der Paket-Installation" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "" +"Verschiebe das Paket, wenn es verschiebbar ist, in das Verzeichnis " +"" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "verschiebe Dateien von nach " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "Ignoriere Datei-Konflikte zwischen Paketen" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "Installiere erneut, wenn das Paket bereits vorhanden ist" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "Nicht installieren - nur anzeigen, ob es funktionieren würde" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "Paket(e) aktualisieren" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "Abfrage aller Pakete" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "Abfrage-Modus der Signatur" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "Abfragen/überprüfen eines Pakets, das die Datei besitzt" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "Abfragen/überprüfen eines Pakets einer Gruppe" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "Abfragen/überprüfen einer Paket-Datei" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "Abfragen/überprüfen von Paketen mit der Paket-Kennung" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "Abfragen/überprüfen von Paketen mit Header-Kennung" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "Abfrage-Modus" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "Abfragen/überprüfen einer Header-Instanz" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "Abfragen/überprüfen von Paketen einer Installation" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "Abfragen eines Pakets gesteuert vom Paket" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "Ãœberprüfungsmodus" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "Abfrage nach Paketen, die die Fähigkeit benötigen" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "Abfrage nach Paketen, die die Fähigkeit bereitstellen" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "\"Globe\" nicht nach Argumenten" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "Dateien nicht als Paket-Liste verarbeiten" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "Alle Konfigurationsdateien anzeigen" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "Alle Dokumentationsdateien anzeigen" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "Grundlegende Datei-Informationen auflisten" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "Alle Dateien im Paket auflisten" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "Ãœberspringe %%ghost-Dateien" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "Anzeigen der Zustände der aufgelisteten Dateien" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "Keine Grössenüberprüfung der Dateien" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "Keine Ãœberprüfung der symbolischen Links der Dateien" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "Keine Ãœberprüfung der Eigentümer der Dateien" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "Keine Ãœberprüfung der Gruppen der Dateien" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "Keine Ãœberprüfung der letzten Bearbeitungszeit der Dateien" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "Keine Ãœberprüfung der Berechtigungen der Dateien" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "Keine Fähigkeitsprüfung der Dateien" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "Keine Ãœberprüfung des Sicherheitskontexts" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "Keine Ãœberprüfung der Dateien im Paket" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "Keine Ãœberprüfung der Paket-Abhängigkeiten" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "Kein(e) Ãœberprüfungsskript(e) ausführen" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "Fehlende Architektur für %s bei %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "Source-Paket erwartet, Binär-Paket entdeckt\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "Source-Paket enthält keine Spec-Datei\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "Entpacken des Archivs fehlgeschlagen%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " bei Datei " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s fehlgeschlagen bei Datei %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s fehlgeschlagen: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "Ungültiges Format: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(enthält keine Dateien)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "ersetzt " + +#: lib/query.c:166 +msgid "not installed " +msgstr "nicht installiert" + +#: lib/query.c:169 +msgid "net shared " +msgstr "geshared " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "falsche Farbe " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(kein Status) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(unbekannt %3d)" + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "Paket hat keine Eigentümer-/Gruppen-Liste\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "Paket weder Eigentümer- noch ID-Liste\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "Gruppe %s enthält keine Pakete\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "Keine Paket-Trigger %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "Missgebildet: %s: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "Kein Paket stimmt mit %s überein: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "Kein Paket benötigt %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "Kein Paket bietet %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "Datei %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "Die Datei %s gehört zu keinem Paket\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "Ungültige Paket-Nummer: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "Eintrag %lu konnte nicht gelesen werden\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "Das Paket %s ist nicht installiert\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "Unbekannter Tag: \"%s\"\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: Importieren fehlgeschlagen\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: Ist kein gepanzerter öffentlicher Schlüssel.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: Importieren fehlgeschlagen (%d).\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead fehlgeschlagen\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"%s: Immuner Header-Bereich konnte nicht gelesen werden. Korruptes Paket?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "überspringe Paket %s nicht überprüfbaren V%u Signatur\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NICHT OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (FEHLENDE SCHLÃœSSEL:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (UNBESTÄTIGTE SCHLÃœSSEL:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: Öffnen fehlgeschlagen: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Wechseln des Wurzel.Verzeichnis fehlgeschlagen: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s rmdir von %s fehlgeschlagen: Verzeichnis ist nicht leer\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Wechseln des Wurzel.Verzeichnis fehlgeschlagen: %m\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Wechseln des Wurzel.Verzeichnis fehlgeschlagen: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NEIN " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "JA" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "PreReq:, Provides:, und Obsoletes: unterstützen Versionen." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"Dateiname(n) als (dirName,baseName,dirIndex)-Tupel gespeichert, nicht als " +"Pfad." + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "Paket-Nutzdaten können mit bzip2 komprimiert werden." + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "Paket-Nutzdaten können mit xz komprimiert werden." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "Paket-Nutzdaten können mit lzma komprimiert werden." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "Dateien der Paket-Nutzdaten haben \"./\" als Präfix" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "Paket Name-Version-Release wird nicht unbedingt bereitgestellt." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "Header-Tags werden immer nach dem Laden sortiert." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "Der Scriptlet-Interpreter kann Argumente aus dem Header benutzen." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" +"Eine harte Verlinkung kann auch ohne eine komplette Installation angelegt " +"werden." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" +"Paket-Scriptlets können während der Installation auf die RPM-Datenbank " +"zugreifen." + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "Interne Unterstützung für LUA-Scripte" + +# Gefällt mir nicht...bessere Vorschläge? Fabian +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "Datei-Prüfsummen-Algorithmus ist pro Paket konfigurierbar" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "Unterstützung für POSIX.1e-Dateifähigkeiten" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "" +"Paket-Scriptlets können während der Installation auf die RPM-Datenbank " +"zugreifen." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "Öffnen von %s fehlgeschlagen: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: Kein RPM-Paket (oder Paket-Liste)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Vorbereiten..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Vorbereiten der Pakete für die Installation..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Fehlgeschlagende Abhängigkeiten:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: Kein RPM-Paket (oder Paket-Liste): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s kann nicht installiert werden\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Empfange %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "überspringe %s - Ãœbertragung fehlgeschlagen\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "Paket %s ist nicht verschiebbar\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "Fehler beim Lesen von Datei %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "Die Datei %s benötigt eine neuere RPM-Version\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" bezeichnet mehrere Pakete:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "Kann %s nicht öffnen: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Installiere %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "ist kein RPM-Paket" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "Illegaler Signatur-Typ" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "nicht unterstützte RPM-Paket-Version" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "Lesen fehlgeschlagen: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "ist kein RPM-Paket" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "Kann Transaktions-Blockierung nicht erstellen auf %s (%s)\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "warte auf Transaktions-Blockierung %s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "Öffnen von %s fehlgeschlagen: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Konnte %s nicht in %s umbenennen: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Konnte %s nicht in %s umbenennen: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "unterschiedlich" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "Das Paket %s ist für die Architektur %s vorgesehen" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "Das Paket %s ist für das Betriebssystem %s vorgesehen" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "Das Paket %s ist bereits installiert" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "Der Pfad %s im Paket %s ist nicht verschiebbar" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" +"Datei %s kollidiert zwischen den versuchten Installationen von %s und %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"Datei %s aus der Installation von %s kollidiert mit der Datei aus dem Paket " +"%s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "Paket %s (welches neuer als %s ist) ist bereits installiert" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"Installation des Pakets %s benötigt %%cB auf dem %s-Dateisystem" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"Installation des Pakets %s benötigt %-Inodes auf dem %s-Dateisystem" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s wird benötigt von %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(installiert) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s kollidiert mit %s%s" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s wird benötigt von %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "Unbekannter Fehler %d trat während dem Verarbeiten des Pakets %s auf" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "Fehlender zweiter ':' bei %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "Fehlender Architektur-Name bei %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Unvollständige Datenzeile bei %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Zu viele Argumente in der Datenzeile bei %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Ungültige Architektur/Betriebssystem-Nummer: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Unvollständige Standardzeile bei %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Zu viele Argumente in der Standardzeile bei %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "Fehlender ':' (0x%02x gefunden) bei %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "Fehlendes Argument für %s bei %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "Kann %s bei %s:%d nicht öffnen: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "Fehlende Architektur für %s bei %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "Ungültige Option '%s' bei %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Unbekanntes System: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Bitte (in Englisch) %s kontaktieren\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Kann %s nicht zum Lesen öffnen: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Wechseln des Wurzel.Verzeichnis fehlgeschlagen: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "-Scriptlet-Unterstützung nicht eingebaut\n" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Konnte keine temporäre Datei erzeugen für %s: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Konnte Datei-Beschreiber nicht duplizieren: %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s Scriptlet fehlgeschlagen, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s Scriptlet fehlgeschlagen, Signal %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s Scriptlet fehlgeschlagen, Beenden-Status %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "Unbekanntes Format" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(installiert) " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "Kann Paket-Datenbank in %s nicht öffnen\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "Zusätzliche '(' im Paket-Bezeichnung: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "Fehlende '(' im Paket-Label: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "Fehlende ')' im Paket-Bezeichung: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: Lesen des öffentlichen Schlüssels fehlgeschlagen.\n" + +#: lib/rpmts.c:1034 +#, fuzzy +msgid "transaction" +msgstr "Erstelle Transaktionsset" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "sigh-Grösse(%d): UNGÃœLTIG, lesen lieferte %d zurück\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sigh Magic: UNGÃœLTIG\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sigh-Tags: UNGÃœLTIG, Nummer der Tags (%d) ausserhalb des Bereichs\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sigh-Daten: UNGÃœLTIG, Nummer der Bytes (%d) ausserhalb des Bereichs\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sigh-Blob(%d): UNGÃœLTIG, lesen lieferte %d zurück\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "sigh-Tag[%d]: UNGÃœLTIG, Tag %d, Typ %d, Offset %d, Zähler %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "sigh-Load: UNGÃœLTIG\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh-Pad(%zd): UNGÃœLTIG, lese %zd Byte\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh sigSize(%zd): UNGÃœLTIG, fstat(2) fehlgeschlagen\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "Immuner Header-Bereich konnte nicht gelesen werden. Korruptes Paket?\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "MD5-Kurzfassung: " + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "SHA1-Kurzfassung des Headers: " + +#: lib/signature.c:489 +msgid "Header " +msgstr "Header " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Ãœberprüfe Signatur: UNGÃœLTIGE PARAMETER\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Signatur: UNBEKANNT (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s fehlgeschlagen\n" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "fehlend %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Unerfüllte Abhängigkeiten für %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "Fehlende { nach %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "Fehlende } nach %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "Leeres Tag-Format" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "Unbekannter Tag" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "Unbekannter Tag" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] erwartet am Ende des Arrays" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "Unerwartete ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "Unerwartete }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? im Ausdruck erwartet" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ nach dem ? im Ausdruck erwartet" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} im Ausdruck erwartet" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": erwartet ein ? im Unterausdruck" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ nach dem : im Ausdruck erwartet" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| am Ende des Ausdrucks erwartet" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "Zählvariable wird mit ungleich grossem Array benutzt" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "Kann den %s-Index nicht öffnen, benutze db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "Kein Datenbank-Pfad wurde gesetzt\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "Fehler(%d) beim Lesen \"%s\"-Einträgen des %s-Indexes\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: Ãœberspringe" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "Fehler(%d) beim Speichern des Eintrags #%d in %s\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec fehlgeschlagen: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp fehlgeschlagen: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: Ãœberspringe" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: Beschädigten Header #%u erhalten -- überspringe.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "Fehler(%d) beim Lesen \"%s\"-Einträgen des %s-Indexes\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "Fehler(%d) beim Markieren des Header-Eintrags #%d zur %s Entfernung\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "Fehler(%d) beim Markieren des Header-Eintrags #%d zur %s Entfernung\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: Kann den Header bei 0x%x nicht lesen\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "Fehler(%d) beim Setzen von \"%s\"-Einträgen des %s-Indexes\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "Fehler(%d) beim Speichern des Eintrags \"%s\" in %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "Fehler(%d) beim Entfernen des Eintrags \"%s\" aus %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "Fehler(%d) beim Reservieren einer neuen Paket-Instanz\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "Fehler(%d) beim Speichern des Eintrags %s in %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "Kein Datenbank-Pfad wurde gesetzt" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "Erzeugen des Verzeichnises %s fehlgeschlagen: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "Header #%u in der Datenbank ist ungültig -- überspringe.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "Kann ursprünglichen Eintrag %u nicht hinzufügen\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"Neu bauen der Datenbank fehlgeschlagen: Datenbank verbleibt entsprechend\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "Konnte die alte Datenbank nicht durch die neue ersetzen!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "Ersetze Dateien in %s mit Dateien aus %s für eine Wiederherstellung" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "Entfernen des Verzeichnisses %s fehlgeschlagen: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d-Fehler (%d) von %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d-Fehler (%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "Keine %s-Sperre auf %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "verteilt" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "exklusiv" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "Verified DB-Index %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "Unbekannte Datenbank-Option: \"%s\" ignoriert.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s hat einen ungültigen numerischen Wert, übersprungen\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s hat einen zu grossen oder zu kleinen Wert, übersprungen\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s hat einen zu grossen oder zu kleinen Integer-Wert, übersprungen\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Konnte Spec-Datei von %s nicht lesen\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Konnte keine temporäre Datei erzeugen für %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Konnte Spec-Datei von %s nicht lesen\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "Fehler beim Erstellen von %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Verbindung zum Server fehlgeschlagen" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "Öffnen von %s fehlgeschlagen: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "Entfernen des Verzeichnisses %s fehlgeschlagen: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Konnte %s nicht in %s umbenennen: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Fehlgeschlagenes Lesen von %s: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "Öffnen von %s fehlgeschlagen: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "Fehler beim Erstellen von %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "Makro %%%s hat keinen terminierten Hauptteil\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "Makro %%%s konnte nicht erweitert werden\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Konnte Spec-Datei von %s nicht lesen\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "Fehler: Python-Callback %s fehlgeschlagen, abbrechen!\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktiv %d leer %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(leer)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(leer)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Makro %%%s hat keinen terminierten Hauptteil\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Makro %%%s hat einen ungültigen Namen (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Makro %%%s hat keine terminierten Optionen\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "Makro %%%s hat einen leeren Hauptteil\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Makro %%%s konnte nicht erweitert werden\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Makro %%%s hat einen ungültigen Namen (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Makro %%%s (%s) wurde nicht unter Level %d benutzt\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Unbekannte Option %c in %s (%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "Nicht terminiertes %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Ein %% ist gefolgt von einem nicht parsbaren Makro\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "Fehler beim Erstellen der temporären Datei %s: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Datei %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Datei %s ist kleiner als %u Byte\n" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "Erzeugen des Verzeichnises fehlgeschlagen" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "Ungültige Syntax in lua-Scriptlet: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "Ungültige Syntax in lua-Script: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "lua-Script fehlgeschlagen: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "Ungültige Syntax in lua-Datei: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "lua hook fehlgeschlagen: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(kein Fehler)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "Schwerwiegender Fehler: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "Fehler: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "Warnung: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "Speicherbelegung (%u Byte) lieferte NULL zurück.\n" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "V%d %s/%s %s, Schlüssel-ID %s" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(keine)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Konnte Zweig-Handler nicht registrieren: %m\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite fehlgeschlagen: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush fehlgeschlagen: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "Konnte kein Pipe zum Signieren erzeugen: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "GPG fehlgeschlagen (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "GPG konnte die Signatur nicht schreiben\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "Konnte die Signatur nicht lesen\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "rpmMk Temp fehlgeschlagen\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead fehlgeschlagen: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature fehlgeschlagen: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "Öffnen von %s fehlgeschlagen: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: Lesen der Paket-Liste fehlgeschlagen: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "Keine Ãœberprüfung der Header- und Nutzdaten-Signatur" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: Zu viele Benutzer-IDs\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: Zu viele Benutzer-IDs\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: Zu viele Benutzer-IDs\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: Zu viele Gruppen-IDs\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: Zu viele Gruppen-IDs\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: Zu viele Gruppen-IDs\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "Ignoriere Paketnamensrelation(en) [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "Füge vorgeschlagene Pakete zur Transaktion hinzu" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "Keine Vorschläge für fehlende Abhängigkeitsauflösungen" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Konnte nicht chdir zu %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps darf nur während der Paket-Installation, -Deinstallation, -" +#~ "Ãœberprüfung und -Erstellung angegeben werden" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) darf nur während der Paket-Installation, -Deinstallation, -" +#~ "Abfragen und während Datenbank-Neuerstellungen angegeben werden" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "Erkenne Datei-Konflikte zwischen Paketen" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d nicht verfügbar\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "Temporäre Datenbank %s existiert bereits\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "Abfragen/überprüfen von Paketen mit Datei-Kennung" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Ungültige %%_signature in der Makro-Datei.\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: wurde bereits mit dem Schlüssel %s signiert, überspringe es\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Ãœberlauf des Zielpuffers\n" + +#~ msgid "no files to sign\n" +#~ msgstr "Keine Dateien zu signieren\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "Kann auf die Datei %s nicht zugreifen\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign darf nur während der Paket-Erstellung benutzt werden" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "Keine Ãœberprüfung der GPG V3 DSA-Signatur(en)" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "Keine Ãœberprüfung der PGP V3 RSA/MD5-Signatur(en)" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "Signiere Paket(e) (identisch mit --resign)" + +#~ msgid "generate signature" +#~ msgstr "Erzeuge Signatur" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Ungültige %%_signature-Spezifikation in der Makro-Datei\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK fehlgeschlagen: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "Generiere mit RPM4-Paketen kompatible Header" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Interner Fehler beim Verarbeiten der Argumente (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: Lesen des öffentlichen Schlüssels fehlgeschlagen.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: Öffne %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek fehlgeschlagen: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s ist kein RPM-Paket\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: Lese Header von %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Erzeuge Signatur: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "Erstelle PGP-/GPG-Signatur" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "Es wurden keine Paket-Dateien für die Neuerstellung angegeben" + +#~ msgid "no spec files given for build" +#~ msgstr "Es wurde keine Spec-Datei für die Erstellung angegeben" + +#~ msgid "no tar files given for build" +#~ msgstr "Es wurde keine Tar-Datei für die Erstellung angegeben" + +#~ msgid "%s failed\n" +#~ msgstr "%s fehlgeschlagen\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Rekursionstiefe (%d) ist grösser als Maximum (%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: Unbekannter Tag-Name: \"%s\" ignoriert\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: Ãœberspringe" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib bietet an)" + +#~ msgid "(cached)" +#~ msgstr "(zwischengespeichert)" + +#~ msgid "(db files)" +#~ msgstr "(Datenbank-Dateien)" + +#~ msgid "(db provides)" +#~ msgstr "(Datenbank bietet an)" + +#~ msgid "(added files)" +#~ msgstr "(hinzugefügte Dateien)" + +#~ msgid "(added provide)" +#~ msgstr "(angebotene Fähigkeit hinzugefügt)" + +#~ msgid "url port must be a number\n" +#~ msgstr "URL-Port muss eine Zahl sein\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Optionen zum Durchlaufen des Dateibaumes (mit --ftswalk):" + +#~ msgid "follow command line symlinks" +#~ msgstr "Folge symbolischen Links der Kommandozeile" + +#~ msgid "logical walk" +#~ msgstr "Logischer Lauf" + +#~ msgid "don't change directories" +#~ msgstr "Verzeichnisse nicht wechseln" + +#~ msgid "don't get stat info" +#~ msgstr "Keine Informationen beim Aufruf von stat" + +#~ msgid "physical walk" +#~ msgstr "Physikalischer Lauf" + +#~ msgid "return dot and dot-dot" +#~ msgstr "Liefere Punkt und Punkt-Punkt zurück" + +#~ msgid "don't cross devices" +#~ msgstr "Geräte nicht kreuzen" + +#~ msgid "return whiteout information" +#~ msgstr "Rückgabe liefert keine Information" + +#~ msgid "debug package state machine" +#~ msgstr "Debugge Paket-Status" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "Abfragen/überprüfen von mit Durchlaufen des Dateibaumes von OBEN" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "Abfragen/überprüfen von Paketen der System-HDLIST" + +#~ msgid "do not order transaction set" +#~ msgstr "Keine Sortierung des Transaktionssets" + +#~ msgid "do not read headers" +#~ msgstr "Header nicht lesen" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Datei stimmt nicht mit dem Präfix überein (%s): %s\n" + +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "Beziehen des aktuellen Abhängigkeitsnamen nicht möglich.\n" + +#~ msgid "Unable to get current dependency epoch-version-release.\n" +#~ msgstr "" +#~ "Beziehen des aktuellen Abhängigkeit epoch-verion-release nicht möglich.\n" + +#~ msgid "File count from file info doesn't match file in container.\n" +#~ msgstr "" +#~ "Datei-Zählung von Datei-Info stimmt nicht mit der Datei im Container " +#~ "überein.\n" + +#~ msgid "Container not of string array data type.\n" +#~ msgstr "Container besteht nicht aus einen String-Array-Datentypen.\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "Benutze Threads für Paket-Status" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: %s Scriptlet fehlgeschlagen (%d), überspringe %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() lieferte keinen Rückgabwert: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() lieferte keine Einhängepunkte: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "Aufruf von stat für %s nicht möglich: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "Datei %s ist auf einem unbekannten Gerät\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "Benutze Thread für den Dateistatus" + +#~ msgid "cannot open %s index\n" +#~ msgstr "Kann den %s-Index nicht öffnen\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "Blockierung der db %s nicht möglich, neuer Versuch ... (%d)\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "initDB %s fehlgeschlagen (%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Öffnen von Datenbank fehlgeschlagen: %s\n" + +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "DB Byte-Reihenfolge kann nicht bestimmt werden.\n" + +#~ msgid "Unknown system error" +#~ msgstr "Unbekannter System-Fehler" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Makro %%%.*s nicht gefunden, überspringe\n" + +#, fuzzy +#~ msgid "Only regular file can be %%ghost: %s\n" +#~ msgstr "Nur reguläre Datein kann %%Geist sein: %s\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: Lesen der *.te-Richtlinie fehlgeschlagen.\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "Zeile %d: Zweite %%files-Liste\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "Die \"B\"-Abhängigkeit benötigt eine Epoche (vermutlich die gleiche " +#~ "Epoche als \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Daten-Typ %d nicht unterstützt\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "Alter Syntax wird nicht mehr unterstützt: %s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "Entferne %s \"%s\" von tsort-Relationen.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "SCHLEIFE:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "rpmtsOrder fehlgeschlagen, %d Elemente verbleiben\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "Header+Nutzdaten-Grösse: " + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Quell-Optionen (mit --query oder --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "PGP nicht gefunden: " + +#~ msgid "skipping header with unverifiable V%u signature\n" +#~ msgstr "überspringe Header mit nicht überprüfbaren V%u Signatur\n" + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "Kann Datei %s nicht öffnen: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "PGP fehlgeschlagen\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "PGP konnte die Signatur nicht schreiben\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "\"%%_pgp_name\" muss in der Makro-Datei gesetzt sein\n" + +#~ msgid "Unknown" +#~ msgstr "Unbekannt" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s Signatur: %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "%sV%d DSA-Signatur: %s, Schlüssel-ID %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d DSA-Signatur: %s\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "Fehlerhafte MD5-Kurzfassung: NICHT UNTERSTÃœTZT\n" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "Kann %%%s %s nicht erstellen\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "Kann nicht nach %%%s %s schreiben\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "i18n-Ãœbersetzungen im Spec-Datei-Katalog nachschlagen" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "" +#~ "Generiere Header, die mit veralteten RPM-Paketen (v2/3) kompatibel sind" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "Der BuildRoot kann nicht \"/\" sein: %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Spec-Datei kann den BuildRoot nicht benutzen\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "%s kann nicht abgefragt werden: %s\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "Debugge Zwischenspeicher-Verwaltung der URLs" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "Austauschen von i18n-Abschnitten in der Spec-Datei" + +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "Kann Datenbank zum Auflösen in %s nicht öffnen\n" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " Vorgeschlagene Auflösungen:\n" + +#~ msgid "(index out of range)" +#~ msgstr "(Index ausserhalb des Bereichs)" + +#~ msgid "Success" +#~ msgstr "Erfolg" + +#~ msgid "Bad server response" +#~ msgstr "Ungültige Server-Antwort" + +#~ msgid "Server I/O error" +#~ msgstr "Ein-/Ausgabe-Fehler des Servers" + +#~ msgid "Server timeout" +#~ msgstr "Server-Timeout" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Server-Adresse konnte nicht aufgelöst werden" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Server-Name konnte nicht aufgelöst werden" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Aufbau einer Datenverbindung zum Server fehlgeschlagen" + +#~ msgid "I/O error to local file" +#~ msgstr "Ein-/Ausgabe-Fehler in lokale Datei" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Server-Fehler beim Wechseln in den passiven Modus" + +#~ msgid "File not found on server" +#~ msgstr "Datei auf dem Server nicht gefunden" + +#~ msgid "Abort in progress" +#~ msgstr "Abbruch wird durchgeführt" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Unbekannter oder unerwarteter Fehler" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "Cache-Datenbank nicht aktualisieren, nur Paket-Pfade ausgeben" + +#~ msgid "File tree walk options:" +#~ msgstr "Optionen zum Durchlaufen des Dateibaumes:" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: Makro %%{_cache_dbpath} ist falsch konfiguriert.\n" + +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: Cache-Operation(en) fehlgeschlagen: Fehler-Code %d.\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "Grenze für %%docdir erreicht\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "Zeile %d: Benötige Argument für %%patch -b: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "Zeile %d: Benötige Argument für %%patch -z: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "Zeile %d: Ungültiges Argument für %%patch -F: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "Zeile %d: Benötige Argument für %%patch -p: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "Zeile %d: Ungültiges Argument für %%patch -p: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "Zu viele Patches!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "Zeile %d: Ungültiges Argument für %%patch: %s\n" + +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: headerGetEntry fehlgeschlagen\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "Erweiterung von %s bei %s:%d \"%s\" fehlgeschlagen\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "Kann %s nicht erweitern\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "Kann %s nicht lesen, HOME ist zu gross.\n" + +#~ msgid "getcwd failed: %m\n" +#~ msgstr "getcwd fehlgeschlagen: %m\n" + +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "URL-Helfer fehlgeschlagen: %s (%d)\n" + +#~ msgid "debug option/argument processing" +#~ msgstr "Debugge Verarbeitung der Optionen/Argumente" + +#~ msgid "skip %%license files" +#~ msgstr "Ãœberspringe %%license-Dateien" + +#~ msgid "skip %%readme files" +#~ msgstr "Ãœberspringe %%readme-Dateien" + +#~ msgid "rollback takes a time/date stamp argument" +#~ msgstr "Rollback benötigt einen Datums-/Zeitstempel als Argument" + +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "Missgebildeter Datums-/Zeitstempel für ein Rollback" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "" +#~ "Gelöschte Paket-Dateien durch umbenennen im Unterverzeichnis sichern" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "" +#~ "Sichern der gelöschten Paket-Dateien durch erneutes Bauen des Pakets" + +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "" +#~ "Deinstalliere neue(s), installiere alte(s) Paket(e), zurück zum " + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Kann den Header der Signatur nicht erneut laden\n" + +#~ msgid "Repackaging..." +#~ msgstr "Erneut packen..." + +#~ msgid "Repackaging erased files..." +#~ msgstr "Erneutes packen gelöschter Dateien..." + +#~ msgid "Upgrading..." +#~ msgstr "Aktualisiere..." + +#~ msgid "Upgrading packages..." +#~ msgstr "Aktualisiere Pakete..." + +#~ msgid "Rollback packages (+%d/-%d) to %-24.24s (0x%08x):\n" +#~ msgstr "Rollback-Pakete (+%d/-%d) bis %-24.24s (0x%08x):\n" + +#~ msgid "Cleaning up repackaged packages:\n" +#~ msgstr "Aufräumen bei neu gebauten Paketen:\n" + +#~ msgid "\tRemoving %s:\n" +#~ msgstr "\tEntferne %s:\n" + +#~ msgid "Transaction failed...rolling back\n" +#~ msgstr "Transaktion fehlgeschlagen...mache Rollback\n" + +#~ msgid "Could not order auto-rollback transaction!\n" +#~ msgstr "Konnte Auto-Rollback-Transaktion nicht sortieren!\n" + +#~ msgid "Could not get install element database instance!\n" +#~ msgstr "Keine Datenbank-Instanz des Installationselements!\n" + +#~ msgid "Could not get header for auto-rollback transaction!\n" +#~ msgstr "Keine Header der Transaktion für das Auto-Rollback!\n" + +#~ msgid "\tAdded from install element %s.\n" +#~ msgstr "\tVom Installationselement %s hinzugefügt.\n" + +#~ msgid "Could not get repackaged header for auto-rollback transaction!\n" +#~ msgstr "Kein erneut gepackter Header für Transaktion des Auto-Rollbacks!\n" + +#~ msgid "Could not add erase element to auto-rollback transaction.\n" +#~ msgstr "" +#~ "Konnte das Deinstallationselement für Transaktion des Auto-Rollbacks " +#~ "nicht hinzufügen.\n" + +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "Fehler beim Lesen des erneut gepackten Pakets!\n" + +#~ msgid "Add failed. Could not read package header.\n" +#~ msgstr "Hinzufügen fehlgeschlagen. Konnte den Paket-Header nicht lesen.\n" + +#~ msgid "Add failed in rpmpsmStage().\n" +#~ msgstr "Hinzufügen fehlgeschlagen bei rpmpsmStage().\n" + +#~ msgid "Add failed. Could not get file list.\n" +#~ msgstr "Hinzufügen fehlgeschlagen. Konnte keine Dateiliste bekommen.\n" + +#~ msgid "Erase failed failed in rpmpsmStage().\n" +#~ msgstr "Löschen fehlgeschlagen bei rpmpsmStage().\n" + +#~ msgid " Obsoletes: %s\t\terases %s\n" +#~ msgstr " Veraltetes: %s\t\tDeinstallationen %s\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== zeichne tsort-Relationen auf\n" + +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== tsorting Pakete (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" + +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== Nur Nachfolger (%d Bytes)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== setze tsort fort...\n" + +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "%5d 0x%04x %s %s\n" + +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "" +#~ "========== Nicht ausdrücklich eingeschlossene Verzeichnisse im Paket:\n" + +#~ msgid "%10d %s\n" +#~ msgstr "%10d %s\n" + +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "Verzeichnis %s mit Berechtigungen %04o erstellt, kein Kontext.\n" + +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "Verzeichnis %s mit Berechtigungen %04o erstellt, Kontext %s.\n" + +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "Füge %d Argumente aus Paket-Liste hinzu.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "Deaktiviere Benutzung der libio(3) API" + +#~ msgid "%s: waitpid(%d) rc %d status %x secs %u.%03u\n" +#~ msgstr "%s: waitpid(%d), rc %d, Status %x, %u.%03u Sekunden\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) führt ein -Skriptlet aus.\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) überspringt redundante(s) \"%s\".\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) %ssynchronous scriptlet start\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) %ssynchronous Skriptlet gestartet\n" + +#~ msgid "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" +#~ msgstr "%s: %s(%s-%s-%s.%s)\texecv(%s), PID %d\n" + +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s hat %d Dateien, Test = %d\n" + +#~ msgid "Attempting to mark %s as installed in score board(%p).\n" +#~ msgstr "Versuche %s im Score-Board(%p) als installiert zu markieren.\n" + +#~ msgid "Attempting to mark %s as erased in score board(%p).\n" +#~ msgstr "Versuche %s im Score-Board(%p) als deinstalliert zu markieren.\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "Nummer des Paket-Eintrags: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "Paket %s hat unerfüllte %s: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s durch \"missingok flag\" übersprungen\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== Verschiebungen\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d schliesse %s aus\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d verschiebe %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "Ausschliessen %s %s\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "Verschiebe %s nach %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "Verschiebe Verzeichnis %s nach %s\n" + +#~ msgid "Adding goal: %s\n" +#~ msgstr "Füge Ziel hinzu: %s\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... als %s\n" + +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "\tSource-Paket hinzugefügt [%d]\n" + +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "\tBinär-Paket hinzugefügt [%d]\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "%d Source- und %d Binär-Pakete gefunden\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "Installiere Binär-Pakete\n" + +#~ msgid "Adding: %s\n" +#~ msgstr "Füge hinzu: %s\n" + +#~ msgid "Suggesting: %s\n" +#~ msgstr "Schlage vor: %s\n" + +#~ msgid "mounted filesystems:\n" +#~ msgstr "Eingehängte Dateisysteme:\n" + +#~ msgid " i dev bsize bavail iavail mount point\n" +#~ msgstr "" +#~ " i Gerät B-Grösse B verfügbar I verf. Einhängepunkt\n" + +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "%5d 0x%08x %8u %12ld %12ld %s\n" + +#~ msgid "Creating transaction score board(%p, %p)\n" +#~ msgstr "Erstelle Score-Board für Transaktionen(%p, %p)\n" + +#~ msgid "\tScore board address: %p\n" +#~ msgstr "\tScore-Board-Adresse: %p\n" + +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "\tReserviere Speicherplatz für %d Einträge\n" + +#~ msgid "\tAdding entry for %s to score board.\n" +#~ msgstr "\tFüge Eintrag für %s zum Score-Board.\n" + +#~ msgid "\t\tEntry address: %p\n" +#~ msgstr "\t\tEinstiegsadresse: %p\n" + +#~ msgid "\tUpdating entry for %s in score board.\n" +#~ msgstr "\tAktualisiere Eintrag für %s im Score-Board.\n" + +#~ msgid "May free Score board(%p)\n" +#~ msgstr "Möglicherweise freies Score-Board(%p)\n" + +#~ msgid "\tRefcount is zero...will free\n" +#~ msgstr "\tRefcount ist null...ist frei\n" + +#~ msgid "Looking in score board(%p) for %s\n" +#~ msgstr "Schaue im Score-Board(%p) nach %s\n" + +#~ msgid "\tFound entry at address: %p\n" +#~ msgstr "\tEinstiegsadresse gefunden: %p\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "Erwartete Grösse: %12d = lead(%d)+sigs(%d)+pad(%d)+data(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " Aktuelle Grösse: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Signatur: size(%d)+pad(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "PGP-Signaturgrösse: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "%d Byte der PGP-Signatur erhalten\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "GPG-Signaturgrösse: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "%d Byte der GPG-Signatur erhalten\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "Schliesse Verzeichnis %s aus\n" + +#~ msgid "Getting repackaged header from transaction element\n" +#~ msgstr "Hole erneut gepackten Header des Transaktionselements\n" + +#~ msgid "\tLooking for %s...\n" +#~ msgstr "\tSuche nach %s...\n" + +#~ msgid "\tMatches found.\n" +#~ msgstr "\tÃœbereinstimmungen gefunden.\n" + +#~ msgid "\tNo matches found.\n" +#~ msgstr "\tKeine Ãœbereinstimmungen gefunden.\n" + +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "\tErneut gebautes Paket nicht gefunden.\n" + +#~ msgid "\tREMOVETID matched INSTALLTID.\n" +#~ msgstr "\tREMOVETID entspricht INSTALLTID.\n" + +#~ msgid "\t\tName: %s.\n" +#~ msgstr "\t\tName: %s.\n" + +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "\tErneut gebautes Paket war %s...\n" + +#~ msgid "Adding install element to auto-rollback transaction.\n" +#~ msgstr "" +#~ "Installationselement zur Transaktion für das Auto-Rollback hinzugefügt.\n" + +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "\tErneut gepackten Paket-Header hinzugefügt: %s.\n" + +#~ msgid "\tAdded erase element.\n" +#~ msgstr "\tDeinstallationselement hinzugefügt.\n" + +#~ msgid "Add erase element to auto-rollback transaction.\n" +#~ msgstr "" +#~ "Deinstallationselement für Transaktion des Auto-Rollbacks hinzufügen.\n" + +#~ msgid "\tFound existing upgrade element.\n" +#~ msgstr "\tBereits vorhandenes Aktualisierungselement gefunden.\n" + +#~ msgid "\tNot adding erase element for %s.\n" +#~ msgstr "\tKein Deinstallationselement für %s hinzufügen.\n" + +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "\tErneut gepacktes Paket %s hinzugefügt.\n" + +#~ msgid "\tAdded from erase element %s.\n" +#~ msgstr "\tVom Deinstallationselement %s hinzugefügt.\n" + +#~ msgid "\tNo repackaged package...nothing to do.\n" +#~ msgstr "\tKein erneut gepacktes Paket...nichts zu tun.\n" + +#~ msgid "sanity checking %d elements\n" +#~ msgstr "Gesundheitsprüfung von %d Elementen\n" + +#~ msgid "running pre-transaction scripts\n" +#~ msgstr "Führe Pre-Transaktionsskripte aus\n" + +#~ msgid "computing %d file fingerprints\n" +#~ msgstr "Berechne %d Datei-Fingerabdrücke\n" + +#~ msgid "computing file dispositions\n" +#~ msgstr "Berechne Dateianordnungen\n" + +#~ msgid "Creating auto-rollback transaction\n" +#~ msgstr "Erstelle Transaktion für ein Auto-Rollback\n" + +#~ msgid "running post-transaction scripts\n" +#~ msgstr "Führe Post-Transaktionsskripte aus\n" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "Closed DB-Umgebung %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "Removed DB-Umgebung %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "Offene DB-Umgebung %s/%s %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "Closed DB-Index %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "Öffne DB-Index %s/%s %s Mode=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "Gesperrter DB-Index %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "Entferne \"%s\" aus dem %s-Index.\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "Entferne %d Einträge aus dem %s-Index.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "Füge \"%s\" zum %s-Index.\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "Füge %d Einträge zum %s-Index.\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "Entferne %s nach erfolgreicher db3-Neuerstellung\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "Baue Datenbank %s in %s neu\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "Erstelle Verzeichnis %s\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "Erstelle Verzeichnis %s: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "Öffne alte Datenbank mit dbapi %d\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "Öffne neue Datenbank mit dbapi %d\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "Entferne Verzeichnis %s\n" + +#~ msgid "closed sql db %s\n" +#~ msgstr "Schliesse SQL-DB %s\n" + +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "Öffne SQL-DB %s (%s) Mode=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: Lese %s: %s\n" + +#~ msgid "Unable to write final header\n" +#~ msgstr "Kann den entgültigen Header nicht schreiben\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "Paket-Version 1 wird von dieser RPM-Version nicht unterstützt\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "" +#~ "Nur Pakete mit Versionsnummern <= 4 werden von dieser RPM-Version " +#~ "unterstützt\n" + +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: Kann keine v1-Pakete signieren\n" + +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: Kann keine v2-Pakete erneut signieren\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: Keine Signatur verfügbar (v1.0 RPM)\n" diff --git a/po/en@boldquot.header b/po/en@boldquot.header new file mode 100644 index 0000000..fedb6a0 --- /dev/null +++ b/po/en@boldquot.header @@ -0,0 +1,25 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# diff --git a/po/en@quot.header b/po/en@quot.header new file mode 100644 index 0000000..a9647fc --- /dev/null +++ b/po/en@quot.header @@ -0,0 +1,22 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# diff --git a/po/es.gmo b/po/es.gmo new file mode 100644 index 0000000..6ee105b Binary files /dev/null and b/po/es.gmo differ diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..fd133b5 --- /dev/null +++ b/po/es.po @@ -0,0 +1,3905 @@ +# Fedora Spanish translation of rpm.master. +# This file is distributed under the same license as the rpm.master package. +# +# Oscar Bacho , 2009. +# Héctor Daniel Cabrera , 2009, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: rpm.rpm-4-7-x.rpm\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2010-09-13 12:31-0300\n" +"Last-Translator: Héctor Daniel Cabrera \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 0.3\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: ARGENTINA\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "versión RPM %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Derechos Reservados (C) 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" +"Este programa puede ser redistribuido libremente bajo los términos de la " +"licencia GNU GPL\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "falló la creación de la tuberia para --pipe: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "falló exec\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "el argumento no es un paquete RPM\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "error al leer encabezado del paquete\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "no se puede volver a abri la carga útil: %s\n" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "Opciones de la selección de paquetes a consultar/verificar:" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Opciones de consulta (con -q o --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Opciones de verificación (con -V o --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Opciones de Instalación/Actualización/Remoción:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Opciones comunes para todos los modos rpm y ejecutables:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "solo un tipo de consulta/verificación puede ser ejecutado a la vez" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "opciones de consulta inesperadas" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "formato de consulta inesperado" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "fuente de consulta inesperado" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "solo puede especificarse un modo principal" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"solo las opciones de instalación, actualización, rmsource y rmspec pueden " +"ser forzadas" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "" +"los archivos solo pueden ser reubicados durante la instalación del paquete" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "no se puede utilizar --prefix con --relocate o --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate y --excludepath solo pueden ser utilizados cuando se instalan " +"nuevos paquetes" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix solo puede ser utilizado al instalar nuevos paquetes" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "los argumentos de --prefix deber iniciar con una /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "" +"--hash (-h) solo puede ser especificado durante la instalación del paquete" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "" +"--percent solo puede ser especificado durante la instalación del paquete" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "" +"--replacepkgs solo puede ser especificado durante la instalación del paquete" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "" +"--excludedocs solo puede ser especificado durante la instalación del paquete" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "" +"--includedocs solo puede ser especificado durante la instalación del paquete" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "solo se puede especificar una opción: --excludedocs o --includedocs" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "" +"--ignorearch solo puede ser especificado durante la instalación del paquete" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "" +"--ignoreos solo puede ser especificado durante la instalación del paquete" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "" +"--ignoresize solo puede ser especificado durante la instalación del paquete" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" +"--allmatches solo puede ser especificado durante la eliminación del paquete" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "" +"--allfiles solo puede ser especificado durante la instalación del paquete" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" +"--justdb solo puede ser especificado durante la instalación y eliminación " +"del paquete" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"las opciones para desactivar scripts sólo pueden ser especificadas durante " +"la instalación y eliminación del paquete" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"las opciones de desactivación de detonante sólo pueden ser especificadas " +"durante la instalación y eliminación del paquete" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test sólo puede ser especificado durante instalación, eliminación, y " +"construcción del paquete" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "" +"--justdb solo puede ser especificado durante la instalación y eliminación " +"del paquete" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "los argumentos de --root (-r) deben iniciar con una /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "no ha sido indicado ningún paquete para ser eliminado" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "no ha sido indicado ningún paquete para la instalación" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "no ha sido indicado ningún argumento para la consulta" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "no ha sido indicado ningún argumento para la verificación" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot ya especificado, ignorando %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"construir a través de %prep (desempaquetar fuentes y aplicar parches) desde " +"" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "construir a través de %build (%prep, luego compilar) desde " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"construir a través de %install (%prep, %build, luego instalar) desde " +"" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "verificar la sección %files de " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "construir paquetes binarios y fuente desde " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "construir paquetes binarios únicamente desde " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "construir paquete fuente únicamente desde " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"construir a través de %prep (desempaquetar fuentes y aplicar parches) desde " +"" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "construir a través de %build (%prep, luego compilar) desde " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"construir a través de %install (%prep, %build, luego instalar) desde " +"" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "verificar sección %files desde " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "construir paquetes binarios y fuente desde " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "construir paquete binario únicamente desde " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "construir paquete fuente desde " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "construir paquete binario desde " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"construir a través de %install (%prep, %build, luego instalar) desde " +"" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "sobreescribir construcción de root" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "remover árbol de construcción al finalizar" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ignorar directivas ExcludeArch desde el archivo spec" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "depurar archivo de la máquina de estado" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "no ejecutar ningún nivel de la construcción" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "no verificar dependencias de la construcción" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" +"genera encabezado(s) de paquete(s) compatible(s) con el empaquetamiento rpm " +"v3 (legado)" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "no aceptar msgstr i18N desde el archivo spec" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "eliminar fuentes al finalizar" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "eliminar el archivo spec al finalizar" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "Ir a etapa especificada (solo para c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "sobreescribir plataforma de destino" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" +"Opciones de construcción con [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Fallo al construir las dependencias:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "No se puede abrir el archivo spec %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Falló la apertura de la tuberia para tar: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Falló la lectura del archivo spec desde %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Falló al renombrar %s to %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "falló la llamada stat sobre %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "El archivo %s no es un archivo regular.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "El archivo %s no parece ser un archivo spec.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Construyendo las plataformas de destino: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Construyendo para el destino %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "inicializar base de datos" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"reconstruir lista invertida de la base de datos desde los encabezados de " +"paquetes instalados" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "verificar archivos de la base de datos" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Opciones de la base de datos:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "verificar firma(s) del paquete" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "importar una llave pública con armadura" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "lista las llaves del administrador de llaves RPM" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Opciones de firma:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "no ha sido indicado ningún argumento" + +#: rpmsign.c:25 +msgid "sign package(s)" +msgstr "firma paquete(s)" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "firmar paquete(s) (idéntico a --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "eliminar las firmas del paquete" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Opciones de firma:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "No se pudo ejecutar %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Debe establecer \"%%_gpg_name\" en su archivo de macro\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Introduzca la frase de acceso:" + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "La frase de acceso es correcta\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Falló la verificación de la frase de acceso\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "consultar un archivo spec" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "consultar un archivo spec" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "utilizar el siguiente formato de consulta" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Opciones de firma:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "no ha sido indicado ningún argumento para la consulta" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "No es posible abrir archivo temporal.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Ejecutando(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Falló exec sobre %s (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Estado de salida erróneo de %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"Errores de construcción RPM:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "error de sintaxis durante el análisis ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "error de sintaxis durante el análisis &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "error de sintaxis durante el análisis ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "error de análisis en la expresión\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "no coincidente (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- solo en números\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! solo en números\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "los tipos deben coincidir\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / no está soportado en cadenas\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- no está soportado en cadenas\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& y || no están soportados en cadenas\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "error de sintaxis en la expresión\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "'(' ausente en %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "')' ausente en %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Elemento %s no válido: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "%s ausente en %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Ningún espacio en blanco después de %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Sintaxis errónea: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "modo spec erróneo: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "dirmode spec erróneo: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "tamaño de localización inusual: \"%.*s\" en %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Localización duplicada %.*s en %%lang(%s)\n" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "Capacidad inválida %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "Soporte para la capacidad del archivo no construido\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Solo un argumento para %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Dos archivos en una línea: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Los archivos deben iniciar con \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "No se puede mezclar %%doc especial con otros formatos: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "Algoritmo de resumen de archivo %u desconocido, regresando a MD5\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Archivo listado dos veces: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s desenlace de %s fallido: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "El enlace simbólico apunta a BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" +"Atributos de archivo explícito solicitados en las especificaciones para: %s\n" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Archivo no encontrado: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Archivo no encontrado: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "Archivo %s muy largo para carga útil\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: no se puede cargar, etiqueta (%d) desconocida.\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: falló la lectura de la clave publica.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: no es una clave pública con armadura.\n" + +#: build/files.c:1618 +#, c-format +msgid "%s: failed to encode\n" +msgstr "%s: falló la codificación\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "El archivo necesita comenzar con \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Glob no permitido: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Archivo no encontrado por glob: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Archivo no encontrado por glob: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "No se pudo abrir el archivo %%files %s: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "línea: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Archivo erróneo: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "propietario/grupo erróneo: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Comprobando si hay archivos desempaquetados: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Se encontraron archivos instalados (pero desempaquetados):\n" +"%s" + +#: build/files.c:2139 +#, c-format +msgid "Processing files: %s\n" +msgstr "Procesando archivos: %s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" +"Binarios dependientes de la arquitectura en paquetes sin arquitectura\n" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "falló la creación del archivador en el fichero %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "falló la creación del archivador: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "falló escritura cpio_copy: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "falló lectura cpio_copy: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: línea: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "No se pudo canonizar el nombre de host: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "No se pudo abrir el archivo PreIn: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "No se pudo abrir el archivo PreUn: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "No se pudo abrir el archivo PreTrans: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "No se pudo abrir el archivo PostIn: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "No se pudo abrir el archivo PostUn: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "No se pudo abrir el archivo PostTrans: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "No se pudo abrir el archivo VerifyScript: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "No se pudo abrir el archivo guión Trigger: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Compresion de carga útil desconocida: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "No ha sido posible crear la región inmutable del encabezado.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Incapaz de escribir el encabezado temporal\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Datos CSA erróneos\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Incapaz de recargar el encabezado de la firma\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "No se pudo abrir %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "No ha sido possible escribir el paquete: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "No ha sido posible abrir sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "No ha sido posible leer el encabezado de %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "No ha sido possible escribir el encabezado de %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "No ha sido posible leer la carga útil de %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "No ha sido possible escribir la carga útil de %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Escrito: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "Ejecutando \"%s\":\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Falló la ejecución de \"%s\":\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Falló la verificación \"%s\" del paquete\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "" +"No se pudo generar el nombre de archivo de salida para el paquete %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "no es posible crear %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "línea %d: segundo %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "entradas %%changelog deben iniciar con *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "entrada %%changelog incompleta\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "fecha errónea en %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog no está en orden cronológico descendente\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "nombre ausente en %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "ninguna descripción en %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "línea %d: Error al analizar %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "línea %d: Opción errónea %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "línea %d: Demasiados nombres: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "línea %d: El paquete no existe: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "línea %d: Segunda descripción\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "línea %d: Error al analizar %%files: %s\n" + +#: build/parsePolicies.c:32 +#, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "línea %d: Error al analizar %%policies: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "línea %d: Número erróneo: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "línea %d: Número no%s erróneo: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "línea %d: Número %s erróneo: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d definido múltiples veces\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "La arquitectura es excluida: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "La arquitectura no es incluida: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "SO es excluido: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "SO no es incluido: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "el campo %s debe estar presente en el paquete: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Duplicar entradas %s en el paquete: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "ilegal _docdir_fmt:%s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "No ha sido posible abrir el icono %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "No ha sido posible leer el icono %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Tipo de icono desconocido: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "línea %d: La etiqueta solo recibe patrones individuales: %s\n" + +#: build/parsePreamble.c:607 +#, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "línea %d: Carácter '%c' ilegal en: %s\n" + +#: build/parsePreamble.c:610 +#, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "línea %d: Carácter ilegal en: %s\n" + +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "línea %d: Secuencia \"..\" ilegal en: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "línea %d: Etiqueta mal formada: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "línea %d: Etiqueta vacía: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "línea %d: Los prefijos deben finalizar en \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "línea %d: Docdir debe iniciar con '/': %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "línea %d: El campo epoch debe ser un número sin signo: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "línea %d: %s erróneo: calificadores: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "línea %d: Formato BuildArchitecture erróneo: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "linea %d: Solo existe soporte para subpaquetes sin arquitectura: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Error interno: Etiqueta errónea %d\n" + +#: build/parsePreamble.c:909 +#, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "línea %d: %s se encuentra obsoleta: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Especificación de paquete errónea: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "El paquete ya existe: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "línea %d: Etiqueta desconocida: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} no puede ser vacío\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{BuildRoot} no puede ser \"/\"\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Fuente errónea: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "Ningún número de parche %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "%%patch sin etiqueta \"Patch:\" correspondientes\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "Ningún número fuente %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "No hay etiqueta \"Source:\" en el archivo spec\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "No se pudo descargar nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Error al analizar %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "línea %d: Argumento erróneo para %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "línea %d: opción %%setup errónea %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "Número de parche %s inválido: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "línea %d: segundo %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"línea %d: Elementos de dependencias deben iniciar con un valor alfanumérico, " +"'_' o '/': %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "línea %d: El nombre de archivo versionado no es permitido: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "línea %d: Versión requerida: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "línea %d: dependencia no válida: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "línea %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "línea %d: los detonantes deben tener --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "línea %d: Error al analizar %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "línea %d: el script interno debe finalizar con '>': %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "línea %d: los scripts ejecutables debe iniciar con '/': %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "línea %d: Segundo %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "línea %d: script interno no soportado: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "línea %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "No ha sido posible abrir %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "Sin cerrar %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean retornó %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: Tiene un %%else sin %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: Tiene un %%endif sin %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "declaración %%include malformada\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "No se encontraron arquitecturas compatibles para la construcción\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "El paquete no tiene %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" +"El módulo '%s' de políticas se encuentra duplicado con tipos que se " +"superponen\n" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "Los módulos base '%s' y '%s' poseen tipos que se suporponen\n" + +#: build/policies.c:100 +msgid "Failed to get policies from header\n" +msgstr "Falló al obtener poíticas del encabezado\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "%%semodule necesita una ruta de archivo\n" + +#: build/policies.c:162 +#, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Falló al leer el archivo de política: %s\n" + +#: build/policies.c:169 +#, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Falló al codificar el archivo de política: %s\n" + +#: build/policies.c:186 +#, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Falló al determinar el nombre de la política: %s\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" +"El tipo '%s' ha sido ofrecido con otro tipos en %%semodule %s. Compactando " +"tipos a '%s'.\n" + +#: build/policies.c:245 +#, c-format +msgid "Error parsing %s: %s\n" +msgstr "Error analizando %s: %s\n" + +#: build/policies.c:251 +#, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Se espera marca de %%semodule: %s\n" + +#: build/policies.c:261 +#, c-format +msgid "Missing module path in line: %s\n" +msgstr "No se encuentra ruta de módulo en la línea: %s\n" + +#: build/policies.c:267 +#, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Demasiados argumentos en la línea: %s\n" + +#: build/policies.c:305 +#, c-format +msgid "Processing policies: %s\n" +msgstr "Procesando políticas: %s\n" + +#: build/rpmfc.c:107 +#, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "Ignorando regex no válido %s\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "No se pudo crear una tuberia para %s: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "No se pudo ejecutar la llamada exec %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "No se pudo ejecutar la llamada al sistema fork para %s: %s\n" + +#: build/rpmfc.c:343 +#, c-format +msgid "%s failed: %x\n" +msgstr "Falló %s: %x\n" + +#: build/rpmfc.c:347 +#, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "falló la escritura de todos los datos a %s: %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "Falló la conversión de %s a entero largo.\n" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "No han sido configurados atributos de archivo\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "falló magic_open(0x%x): %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "falló magic_load: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Falló la identificación del archivo \"%s\": modo %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Buscando %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Falló la búsqueda de %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "la consulta del archivo spec %s falló, no se pudo analizar\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(error 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Magic erróneo" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Encabezado erróneo/imposible de leer" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "El tamaño del encabezado es demasiado extenso" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Tipo de archivo desconocido" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "No se encuentra el Enlace fijo" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "El digest no coincide" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Error interno" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "El fichero del archivo no se encuentra en el encabezado" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " falló - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "el paquete %s ya fue añadido, omitiendo %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "el paquete %s ya fue añadido, reemplazando con %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(no es un número)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(no base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(tipo no válido)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(no es un blob)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(tipo xml no válido)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(no es una firma OpenPGP)" + +#: lib/formats.c:588 +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +msgid "replaced" +msgstr "reemplazado" + +#: lib/formats.c:594 +msgid "not installed" +msgstr "no instalado" + +#: lib/formats.c:597 +msgid "net shared" +msgstr "compartido en red" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "color incorrecto" + +#: lib/formats.c:603 +msgid "missing" +msgstr "no se encuentra" + +#: lib/formats.c:606 +msgid "(unknown)" +msgstr "(desconocido) " + +#: lib/formats.c:645 +msgid "(not a string)" +msgstr "(no es una cadena)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "usuario %s no existe - utilizando root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "grupo %s no existe - utilizando root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" +"el fichero de archivo %s no se encontró en la lista del encabezado del " +"archivo\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s guardado como %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s rmdir de %s falló: el directorio no está vacío\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir de %s falló: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s desenlace de %s fallido: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s creado como %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "omitiendo %s con firma V%u no verificable\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "tamaño de blob(%d): INVALIDO, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"tag[%d]: INVALIDADO, etiqueta %d, ipo %d desplazamiento %d contador %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"region offset: INVALIDO, etiqueta %d tipo %d desplazamiento %d contador %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"region trailer: INVALIDO, etiqueta %d tipo %d desplazamiento %d contador %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "region size: INVALIDO, rill(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: INVALIDO, no es hexadecimal\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr RSA: UNVALIDO, no es binario\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr DSA: UNVALIDO, no es binario\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hdr size(%d): INVALIDO, la lectura retorno %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "hdr magic: INVALIDO\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "hdr tags: INVALIDO, numero de etiquetas(%d) fuera del rango\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "datos de encabezado: INVALIDO, número de bytes(%d) fuera del rango\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr blob(%zd): INVALIDO, la lectura regreso %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "hdr load: INVALIDO\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature falló: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: ninguna firma disponible\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead falló: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread falló: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s es un RPM Delta y no puede ser instalado directamente\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Carga útil (%s) no soportada en el paquete %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "predefine MACRO con valor EXPR" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "'MACRO EXPR'" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "define MACRO con valor EXPR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "imprimir expansión de macro de EXPR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "'EXPR'" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "leer en vez del archivo(s) predeterminado" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "no verificar resumen del paquete(s)" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "" +"no verificar la base de datos de lo(s) encabezado(s) cuando sean recuperadas" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "no verificar la firma(s) del paquete" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "enviar stdout a CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "utilizar ROOT como el directorio superior" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "mostrar etiquetas de consulta conocidas" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "mostrar configuración rpmrc y macro final" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "proporcionar salida menos detallada" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "proporcionar salida más detallada" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "imprimir la versión de rpm que está siendo utilizada" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "depurar archivo de carga de la máquina de estado" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "depurar E/S rpmio" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: misconfiguración de la opción table (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "las rutas de exclusión deben iniciar con una /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "realocaciones deben iniciar con una /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "realocaciones deben contener un =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "realocaciones deben tener una / después de =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"instalar todos los archivos, incluso los de configuración, que de otra " +"manera serían salteados." + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"remueve todos los paquetes que coincidan con (normalmente un " +"error es generado si especifica multiples paquetes) " + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "reubicar archivos en un paquete no reubicable" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "mostrar bucles de dependencias como advertencias" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "borrar (desinstalar) paquete" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "no instalar los archivos de configuración" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "no instalar documentación" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "omitir archivos con el componente inicial " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "abreviatura para --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "actualizar paquete(s) si ya están instalados" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "imprimir marcas hash como durante la instalación del paquete (con -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "no verificar arquitectura del paquete" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "no verificar sistema operativo del paquete" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "no verificar espacio de disco antes de la instalación" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "instalar documentación" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "instalar paquete(s)" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "actualizar la base de datos, mas no modificar el sistema de archivos" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "no verificar las dependencias del paquete" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "no verificar el digest de los archivos" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "no verificar el digest de los archivos (obsoleto)" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "no instalar contextos de seguridad del archivo" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "no reordenar la instalación de paquetes para satisfacer dependencias" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "no ejecutar scriptlet(s) del paquete" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "no ejecutar %%pre scriptlet (si hay)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "no ejecutar %%post scriptlet (si hay)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "no ejecutar %%preun scriptlet (si hay)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "no ejecutar %%postun scriptlet (si hay)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "no ejecutar ningún scriptlet detonado por este paquete" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "no ejecutar ningún %%triggerprein scriptlet(s)" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "no ejecutar ningún %%triggerin scriptlet(s)" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "no ejecutar ningún %%triggerun scriptlet(s)" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "no ejecutar ningún %%triggerpostun scriptlet(s)" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "no realizar ninguna acción de colección" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"actualiza a una versión antigua del paquete (--force en actualizaciones hace " +"esto automaticamente)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "imprimir porcentaje mientras se instala el paquete" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "realojar el paquete a si éste es realojable" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "realojar archivos de la ruta a " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "ignorar conflictos entre paquetes referentes a archivos " + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "reinstalar si el paquete ya está presente" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "no instalar, pero señalar si se puede o no" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "actualizar paquete(s)" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "consultar/verificar todos los paquetes" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "modo rpm checksig" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "consultar/verificar archivo propietario de paquete(s)" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "consultar/verificar paquete(s) en grupo" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "consultar/verificar un archivo de paquete" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "consultar/verificar paquete(s) con identificador de paquete" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "consultar/verificar paquete(s)con identificador de cabecera" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "modo de consulta rpm" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "consultar/verificar una instancia de la cabecera" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "consultar/verificar paquete(s) de la transacción de la instalación" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "consultar los paquetes lanzados por el paquete" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "modo de verificación de rpm" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "consultar/verificar los paquetes que requieren una dependencia" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "consultar/verificar paquetes que proporcionan una dependencia" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "ningún argumento para glob" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "no procese los archivos que no pertenecen al paquete como manifiestos" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "listar todos los archivos de configuración" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "listar todos los archivos de documentación" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "Volcar información de archivo básica" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "listar archivos del paquete" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "saltar archivos %%ghost" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "mostrar el estado de los archivos listados" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "no verificar el tamaño de los archivos" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "no verificar la ruta symlink de los archivos" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "no verificar el propietario de los archivos" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "no verificar el grupo de los archivos" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "no verificar el tiempo de modificación de los archivos" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "no verificar el modo de los archivos" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "no verificar las capacidades de los archivos" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "no verificar los contextos de seguridad del archivo" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "no verificar los archivos en el paquete" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "no verificar las dependencias de paquetes" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "no ejecutar scripts de verificación" + +#: lib/psm.c:212 +#, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "No se encuentran características rpmlib para %s:\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "se esperaba el paquete fuente, paquete binario encontrado\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "el paquete fuente no contiene archivo .spec\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "falló el desempaquetado de archivos %s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " en archivo" + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "falló %s en archivo %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "falló %s: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "formato incorrecto: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(no contiene archivos)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "reemplazado" + +#: lib/query.c:166 +msgid "not installed " +msgstr "no instalado" + +#: lib/query.c:169 +msgid "net shared " +msgstr "compartido en red" + +#: lib/query.c:172 +msgid "wrong color " +msgstr "color incorrecto" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(sin estado)" + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(desconocido %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "el paquete no tiene lista de propietario/grupo de archivo\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "el paquete no tiene ni lista de propietario de archivos ni id\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "grupo %s no contiene ningún paquete\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "sin detonante de paquetes %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "%s mal formado: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "ningún paquete coincide con %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "ningún paquete requiere %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "ningún paquete proporciona %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "archivo %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "el archivo %s no es propiedad de ningún paquete\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "número de paquete inválido: %s\n" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "el registro %u no pudo ser leído\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "el paquete %s no está instalado\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "etiqueta desconocida:\"%s\"\n" + +#: lib/rpmchecksig.c:43 +#, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: falló la importación de la llave %d\n" + +#: lib/rpmchecksig.c:47 +#, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: la llave %d no es una llave pública protegida.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: falló la lectura para importar(%d).\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead falló\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"%s: la cabecera de región no modificable no pudo ser leída. ¿Estará corrupto " +"el paquete?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "omitiendo paquete %s con firma V%u inverificable\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NO ESTA BIEN" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "BIEN" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (FALTAN LAS CLAVES:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (CLAVES NO CONFIABLES:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: falló la apertura: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "No es posible restablecer el directorio raíz: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s: no se ha definido chroot de directorio\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "No se puede cambiar el directorio raíz: %m\n" + +#: lib/rpmchroot.c:95 +#, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "No es posible restablecer el directorio raíz: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NO " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "SI" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "PreReq:, Provides:, y Obsoletes: dependencias soportan versiones." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"nombres de archivos almacenados como (dirName,baseName,dirIndex) \"tuple\", " +"no como ruta." + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "la carga del paquete puede ser comprimida utilizando bzip2." + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "la carga del paquete puede ser comprimida utilizando xz." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "la carga del paquete puede ser comprimida tilizando bzip2. " + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "los archivos de carga del paquete tienen el prefijo \"./\"." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" +"nombre-versión-lanzamiento del paquete no se proporciona implícitamente." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" +"las etiquetas del encabezado son siempre ordenadas después de ser cargadas." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "el intérprete de scriptlet puede utilizar argumentos del encabezado." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" +"un conjunto de enlaces fijos de archivo puede ser instalado aunque no se " +"haya completado." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" +"scriplets de paquete pueden acceder a la base de datos rpm mientras se está " +"imstalando." + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "soporte interno para scripts lua." + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "el algoritmo de digest se puede configurar por paquete" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "soporte para capacidades de archivo POSIX1e." + +#: lib/rpmds.c:911 +msgid "package scriptlets can be expanded at install time." +msgstr "" +"los scriptlets de los paquetes pueden ser expandidos en el momento de la " +"instalación." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "la apertura de %s falló: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: no es un paquete rpm (o manifiesto de paquete)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Preparando..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Preparando paquetes para la instalación..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Error de dependencias:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: no es un paquete rpm (o manifiesto de paquete): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s no puede ser instalado\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Recuperando %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "omitiendo %s - transferencia fallida\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "paquete %s no es reubicable\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "error al leer del archivo %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "el archivo %s requiere una version de RPM más reciente\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" especifica varios paquetes:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "no se puede abrir %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Instalando %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "no es un paquete rpm" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "tipo de firma ilegal" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "versión del paquete RPM no soportada" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "falló la lectura: %s (%d)\n" + +#: lib/rpmlead.c:126 +msgid "not an rpm package\n" +msgstr "no es un paquete rpm\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "no es posible crear el bloqueo %s sobre %s (%s)\n" + +#: lib/rpmlock.c:106 +#, c-format +msgid "waiting for %s lock on %s\n" +msgstr "esperando el bloqueo %s sobre %s\n" + +#: lib/rpmplugins.c:60 +#, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "Falló al abrir dl %s %s\n" + +#: lib/rpmplugins.c:67 +#, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Falló al resolver el símbolo %s: %s\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "Falló al expandir macro de %%__collection_%s\n" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "El complemento %s no ha sido cargado\n" + +#: lib/rpmplugins.c:150 +#, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Falló al resolver el símbolo %s de complemento %s: %s\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "diferente" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "el paquete %s está destinado para la arquitectura %s" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "el paquete %s está destinado para el sistema operativo %s" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "el paquete %s ya está instalado" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "la ruta %s en el paquete %s no es reubicable" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "conflicto del archivo %s entre instalaciones intentadas de %s y %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"el archivo %s de la instalación de %s entra en conflicto con el archivo del " +"paquete %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "el paquete %s (que es más nuevo que %s) ya está instalado" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"para la instalación del paquete %s es necesario %%cB en el sistema " +"de archivos %s" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"para la instalación del paquete %s es necesario % inodos en el " +"sistema de archivos %s" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s es necesario por %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(instalado) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s entra en conflicto con %s%s" + +#: lib/rpmprob.c:172 +#, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s es sustituido por %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "" +"se encontró el error desconocido %d mientras se manipulaba el paquete %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "segundo ':' omitido en %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "nombre de arquitectura omitida en %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Línea de datos incompleta en %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Demasiados argumentos en la línea de datos en %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Número de arq/os erróneo: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Línea determinada incompleta en %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Demasiados argumentos en la línea predeterminada en %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "':' faltante (se encontró 0x%02x) en %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "falta argumento para %s en %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "no se puede abrir %s en %s:%d: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "falta la arquitectura para %s en %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "opción errónea '%s' en %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Sistema desconocido: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Por favor contacte %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "No se puede abrir %s para lectura: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "No es posible restablecer el directorio raíz: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" +"soporte interno para macro de inclución de guiones , no fue construido\n" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "No se pudo crear un archivo temporal para %s: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "No se pudo duplicar el descritor de archivo %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s: macro de ejecución de guión fallido, waitpid(%d) rd %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s: macro de ejecución de guión fallido, señal %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s: macro de ejecución de guión fallido, estado de terminación %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "formato desconocido" + +#: lib/rpmte.c:820 +msgid "install" +msgstr "instalar " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "borrar" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "no se puede abrir la base de datos Packages en %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "'(' extra en la etiqueta del paquete: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "'(' ausente en la etiqueta del paquete: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "')' ausente en la etiqueta del paquete: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: lectura de la clave publica fallida.\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "transacción" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "sigh size(%d): INVALIDO, la lectura devolvió %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sigh magic: INVALIDO\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sigh tags: INVALIDO, número de etiquetas(%d) fuera del rango\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sigh data: INVALIDO, número de bytes(%d) fuera del rango\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sigh blob(%d): INVALIDO, la lectura devolvió %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"sigh tag[%d]: INVALIDO, etiqueta %d tipo %d desplazamiento %d contador %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "sigh load: INVALIDO\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh pad(%zd): INVALIDO, lectura de %zd bytes\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh sigSize(%zd): INVALIDO, fstat(2) falló\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"No se pudo leer la región inmutable del encabezado. ¿El paquete esta " +"corrupto?\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "Resumen MD5: " + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "Resumen SHA1 del encabezado:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Encabezado" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Verificar firma: PARÃMETROS ERRÓNEOS\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Firma: DESCONOCIDA (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "ignorado" + +#: lib/transaction.c:1388 +msgid "failed" +msgstr "falló" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "falta %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Dependencias no satisfechas para %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "falta { después de %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "falta } después %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "formato de etiqueta vacío" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "nombre de etiqueta vacío" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "etiqueta desconocida" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] esperado al final del arreglo" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "] inesperado" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "} inesperado" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "se esperaba ? en la expresión" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "se esperaba { después de ? en la expresión" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "se esperaba } en la expresión" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "se esperaba : después de la subexpresión ?" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "se esperaba { después de : en la expresión" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "se esperaba | al final de la expresión" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "iterador de arreglo usado con arreglos de diferente tamaño" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "no se pudo abrir índice %s utilizando db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "no se ha establecido dbpath\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "error(%d) obteniendo registros \"%s\" del índice %s\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: omitiendo" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "error(%d) almacenando registro #%d en %s\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec falló: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp falló: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: omitiendo" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: encabezado dañado #%u recuperada -- omitiendo.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "error(%d) obteniendo registros \"%s\" del índice %s\n" + +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "error(%d) estableciendo registro de encabezado #%d\n" + +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "error(%d) eliminando registro de encabezado #%d\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: no se pudo leer encabezado en 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "error(%d) estableciendo registros \"%s\" desde índice %s\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "error(%d) almacenando registros \"%s\" en %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "error(%d) eliminando registro \"%s\" de %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "error(%d) asignando nueva instancia de paquete\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "error(%d) almacenando registro %s en %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "no se ha establecido dbpath" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "no se pudo crear el directorio %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "encabezado #%u erróneo en la base de datos -- omitiendo.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "no se puede añadir el registro original en %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"falló la reconstrucción de la base de datos: la base de datos original " +"permanece en su lugar\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "" +"¡falló el remplazo de la base de datos antigua con la nueva base de datos!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "reemplazar archivos en %s con los archivos de %s a recuperar" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "falló la eliminación del directorio %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d error(%d) de %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d error(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "no se pudo obtener bloqueo %s en %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "compartido" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "exclusivo" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "opciones db no reconocidas: \"%s\" ignorado.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s tiene un valor numérico no válido, omitido\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "" +"%s tiene un valor largo demasiado grande o demasiado pequeño, omitido\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" +"%s tiene un valor entero demasiado grande o demasiado pequeño, omitido\n" + +#: plugins/sepolicy.c:220 +#, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Falló al decodificar la política para %s\n" + +#: plugins/sepolicy.c:227 +#, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Falló al crear archivo temporal para %s: %s\n" + +#: plugins/sepolicy.c:233 +#, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Falló al escribir la política %s en el archivo %s\n" + +#: plugins/sepolicy.c:305 +msgid "Failed to create semanage handle\n" +msgstr "Falló al crear manipulador de semanage\n" + +#: plugins/sepolicy.c:311 +msgid "Failed to connect to policy handler\n" +msgstr "Falló al conectar con el manipulador de políticas\n" + +#: plugins/sepolicy.c:315 +#, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "Falló iniciar transacción de política: %s\n" + +#: plugins/sepolicy.c:346 +#, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "Falló al eliminar el archivo de política temporal %s: %s\n" + +#: plugins/sepolicy.c:394 +#, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Falló al instalar módulo de política: %s (%s)\n" + +#: plugins/sepolicy.c:424 +#, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Falló al eliminar el módulo de política: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, c-format +msgid "Failed to fork process: %s\n" +msgstr "Falló al bifurcar el proceso: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, c-format +msgid "Failed to execute %s: %s\n" +msgstr "Falló al ejecutar %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, c-format +msgid "%s terminated abnormally\n" +msgstr "%s finalizó de manera anormal\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, c-format +msgid "%s failed with exit code %i\n" +msgstr "%s falló con un código de salida %i\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "Falló al enviar modificaciones de política\n" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "Falló al expandir el camino restoreconf" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" +"Falló al re etiquetar el sistema de archivos. Lor archivos podrían " +"encontrarse mal etiquetados\n" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" +"Falló al recargar el contexto de archivo. Los archivos podrían estar mal " +"etiquetados\n" + +#: plugins/sepolicy.c:602 +#, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Falló al extraer la política desde %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "error: falló el retorno de la llamada %s de python, abortando!\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== activo %d vacío %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(vacío)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(vacío)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "El macro %%%s tiene un cuerpo incompleto\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "El macro %%%s tiene un nombre ilegal (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "El macro %%%s tiene opciones no terminadas\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "El macro %%%s tiene un cuerpo vacío\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Falló la expansión del macro macro %%%s\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "El macro %%%s tiene un nombre ilegal (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "El macro %%%s (%s) no fue utilizado debajo del nivel %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Opción desconocida %c en %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" +"Demasiados niveles de recursión en la expansión macro. Esto seguramente haya " +"sido provocado por una declaración macro recursiva.\n" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "No terminado %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Un %% está seguido por un macro no analizable\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "error al crear el archivo temporal %s: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Archivo %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "El archivo %s tiene menos de %u bytes\n" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "falló al crear el directorio" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "sintaxis no válida en el macro de ejecución de scriptlet lua: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "sintaxis no valida en el scriptlet lua: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "falló el scriptlet lua: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "sintaxis no valida en el archivo de scriptlet lua: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "falló el enlace de lua: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(ningún error)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "error fatal:" + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "error: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "advertencia:" + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "la asignación de memoria (%u bytes) retornó NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "V%d %s/%s %s, ID de clave %s" + +#: rpmio/rpmpgp.c:1369 +msgid "(none)" +msgstr "(ninguno)" + +#: rpmio/rpmpgp.c:1652 +#, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Falló al intentar registrar el manipulador de fork: %m\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite falló: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush fallido: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "Algoritmo de hash PGP no soportado %d\n" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "Algoritmo de llave pública PGP no soportado %d\n" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "No se pudo crear la tuberia para firmar: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "falló la llamada al sistema exec para gpg (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg falló al escribir la firma\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "incapaz de leer la firma\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "faló makeTempFile\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead falló: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature falló: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "la apertura de %s falló: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: falló la lectura del manifiesto: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "no verificar firma de encabezado+carga" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: demasiados uid's\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: demasiados uid's\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: demasiados uid's\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: demasiados gid's\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: demasiados gid's\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: demasiados gid's\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "ignorar relación de nombre de paquete [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "agregar los paquetes sugeridos a la transacción" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "no sugerir resolución de dependencias ausentes" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "No se pudo cambiar al directorio %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps sólo puede ser especificado durante la construcción, re-" +#~ "construcción, recompilación, instalación, eliminación y verificación del " +#~ "paquete" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) sólo puede ser especificado durante instalación, eliminación, " +#~ "consulta y re-construcción de la base de datos" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "detectar conflictos de archivos entre paquetes" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d no disponible\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "la base de datos temporal %s ya existe\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "consultar/verificar paquete(s) con archivo identificador " + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "%%_signature spec no válido en el archivo macro.\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: ya fue firmado por la llave ID %s, omitiendo\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Desborde del búfer de destino\n" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Error interno en el procesamiento del argumento (%d) :-(\n" + +#~ msgid "no files to sign\n" +#~ msgstr "ningún archivo para firmar\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "no se puede acceder al archivo %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign solo puede ser utilizado durante la construcción del paquete" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "ningún paquete proporcionado para la reconstrucción" + +#~ msgid "no spec files given for build" +#~ msgstr "no ha sido indicado ningún archivo spec para la construcción" + +#~ msgid "no tar files given for build" +#~ msgstr "no ha sido indicado ningún archivo tar para la construcción" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "Falló TIMECHECK: %s\n" + +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: falló la lectura del archivo de política.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: abrir %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek fallido: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s no es un paquete RPM\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: leyendo encabezado de %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Generando la firma: %d\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "generar encabezados compatibles con el empaquetado rpm4" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "generar firma PGP/GPG" + +#~ msgid "%s failed\n" +#~ msgstr "%s fallido\n" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "no verificar firmas GPG V3 DSA" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "no verificar firmas PGP V3 RSA/MD5" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "firmar paquetes (idéntico a --resign)" + +#~ msgid "generate signature" +#~ msgstr "generar firma" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "spec %%_signature no válido en archivo de macro\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "" +#~ "La profundidad de recursión (%d) es mayor que el máximo permitido (%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: nombre de etiqueta no reconocida: \"%s\" ignorado\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: omitiendo" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib proporciona)" + +#~ msgid "(cached)" +#~ msgstr "(en caché)" + +#~ msgid "(db files)" +#~ msgstr "(archivos db)" + +#~ msgid "(db provides)" +#~ msgstr "(db proporciona)" + +#~ msgid "(added files)" +#~ msgstr "(archivos añadidos)" + +#~ msgid "(added provide)" +#~ msgstr "(provisión añadida)" + +#~ msgid "url port must be a number\n" +#~ msgstr "el puerto url debe ser un número\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Opciones de recorrido por el árbol de archivos (con --ftwalk):" + +#~ msgid "follow command line symlinks" +#~ msgstr "seguir los enlaces simbólicos de la línea de comandos" + +#~ msgid "logical walk" +#~ msgstr "recorrido lógico" + +#~ msgid "don't change directories" +#~ msgstr "no cambiar directorios" + +#~ msgid "don't get stat info" +#~ msgstr "no obtener información estadistica" + +#~ msgid "physical walk" +#~ msgstr "recorrido físico" + +#~ msgid "return dot and dot-dot" +#~ msgstr "retornar punto y dos puntos" + +#~ msgid "don't cross devices" +#~ msgstr "no cruzar dispositivos" + +#~ msgid "return whiteout information" +#~ msgstr "retornar sin información" + +#~ msgid "debug package state machine" +#~ msgstr "depurar la máquina de estados del paquete" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "consultar/verificar paquete(s) desde la raíz del árbol recorrido" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "consultar/verificar paquete(s) desde el HDLIST del sistema" + +#~ msgid "do not order transaction set" +#~ msgstr "no ordenar grupo de transaciones" + +#~ msgid "do not read headers" +#~ msgstr "no se puede leer la cabecera" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "El archivo no coincide con el prefijo (%s): %s\n" + +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "No ha sido posible traer el nombre de la dependencia actual\n" + +#~ msgid "Unable to get current dependency epoch-version-release.\n" +#~ msgstr "" +#~ "No se pudo obtener la dependencia actual época-versión-lanzamiento.\n" + +#~ msgid "File count from file info doesn't match file in container.\n" +#~ msgstr "" +#~ "El número de archivos desde la información no coincide con los archivos " +#~ "en el contenedor.\n" + +#~ msgid "Container not of string array data type.\n" +#~ msgstr "No es un contenedor del tipo de dato arreglo de cadenas.\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "utilize hilos para la máquina de estados del paquete" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: scriptlet %s fallido (%d), omitiendo %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() falló al retornar tamaño: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() falló al retornar puntos de montaje: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "falló stat %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "el archivo %s está en un dispositivo desconocido\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "utilize hilos para la máquina de estados del archivo" + +#~ msgid "cannot open %s index\n" +#~ msgstr "no se puede abrir índice %s\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "" +#~ "No es posible optener un bloqueo sobre la base de datos %s, " +#~ "reintentando... (%d)\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "No se puede initDB %s (%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "No se puede abrir la base de datos: %s\n" + +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "" +#~ "No se puede determina el formato de almacenamiento de la base de datos\n" + +#~ msgid "Unknown system error" +#~ msgstr "Error del sistema desconocido" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "La Macro %%%.*s no se encontró, omitiendo\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: falló la lectura de la politica *.te\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "línea %d: Segunda lista de %%files\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "La dependencia \"B\" necesita una era -epoch- (asumiendo la misma era de " +#~ "\"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Tipo de datos %d no soportado\n" + +#~ msgid "line %d: Illegal char '-' in %s: %s\n" +#~ msgstr "línea %d: Carácter ilegal '-' en %s: %s\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "Sintaxis obsoleta no soportada: %s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "removiendo %s \"%s\" de relaciones tsort.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "LOOP:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "falló rpmtsOrder, permanecen %d elementos\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "Tamaño Cabecera+Carga Útil:" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Opciones de fuentes (con --query o --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "no se encontró la pgp:" + +#~ msgid "skipping header with unverifiable V%u signature\n" +#~ msgstr "omitiendo cabecera con firma V%u inverificable\n" + +#~ msgid "pgp failed\n" +#~ msgstr "falló pgp\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "falló pgp al escribir la firma\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Debe establecer \"%%_pgp_name\" en su archivo de macro\n" + +#~ msgid "Unknown" +#~ msgstr "Desconocido" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s firma: %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "%sV%d firma DSA: %s, identificador de clave %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d firma DSA: %s\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "Resumen MD5 incompleto: NO SOPORTADO\n" diff --git a/po/fi.gmo b/po/fi.gmo new file mode 100644 index 0000000..247c80f Binary files /dev/null and b/po/fi.gmo differ diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..6667219 --- /dev/null +++ b/po/fi.po @@ -0,0 +1,3767 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm-4.4.90\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2008-03-11 11:15+0200\n" +"Last-Translator: Panu Matilainen \n" +"Language-Team: Finnish\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM versio %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Tätä ohjelmaa voi vapaasti levittää GNU GPL:n puittessa\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "putken luominen --pipe:lle epäonnistui: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "suoritus epäonnistui\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "parametri ei ole RPM paketti\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "virhe luettaessa otsikkotietoa paketista\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "kuorman uudelleenavaus ei onnistu: %s\n" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "Kysely/tarkistus pakettivalitsimet" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Kyselyvalitsimet (-q tai --query yhteydessä)" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Tarkistusvalitsimet (-V tai --verify yhteydessä)" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Asennus-, päivitys- ja poistovalitsimet:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Yhteiset valitsimet kaikille rpm moodeille:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "vain yhden tyyppinen kysely/tarkistus voidaan suorittaa kerralla" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "odottamattomia kyselyvalintoja" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "odottamaton kyselyn muotoilu" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "odottamaton kyselyn lähde" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "vain yksi päätila voidaan määritellä" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "vain asennus, päivitys, rmsource ja rmspec voidaan pakottaa" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "tiedostoja voidaan siirtää toiselle polulle vain asennettaessa" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "--prefix valintaa ei voi käyttää --relocate tai --excludepath kanssa" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate ja --excludepath: voidaan käyttää vain uusia paketteja " +"asennettaessa" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix: voidaan käyttää vain uusia paketteja asennettaessa" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "--prefix parametrien pitää alkaa /-merkillä" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h): voidaan käyttää vain paketteja asennettaessa" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent: voidaan käyttää vain paketteja asennettaessa" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs: voidaan käyttää vain paketteja asennettaessa" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs: voidaan käyttää vain paketteja asennettaessa" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs: voidaan käyttää vain paketteja asennettaessa" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "vain toinen --excludedocs tai --includedocs voidaan antaa" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch: voidaan käyttää vain paketteja asennettaessa" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos: voidaan käyttää vain paketteja asennettaessa" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize: voidaan käyttää vain paketteja asennettaessa" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches: voidaan käyttää vain paketteja poistettaessa" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles: voidaan käyttää vain paketteja asennettaessa" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" +"--justdb: voidaan käyttää vain paketteja asennettaessa tai poistettaessa" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"skriptien estovalintoja voidaan käyttää vain paketteja asennettaessa tai " +"poistettaessa" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"laukaisimien estovalintoja voidaan käyttää vain paketteja asennettaessa tai " +"poistettaessa" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test: voidaan käyttää vain paketteja asennettaessa, poistettaessa ja " +"käännettäessä" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "" +"--justdb: voidaan käyttää vain paketteja asennettaessa tai poistettaessa" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "parametrit --root (-r):lle alettava /-merkillä" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "poistolle ei määritelty paketteja" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "asennukselle ei määritelty paketteja" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "kyselylle ei annettu parametrejä" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "tarkistukselle ei annettu parametrejä" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot on jo määritelty, %s:ää ei huomioida\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "käännä %prep-osioon asti spec-tiedostosta" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "käännä %build-osioon asti (%prep ja %build) spec-tiedostosta" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"käännä %install-osioon asti (%prep, %build ja %install) spec-tiedostosta" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "tarkista %files-osio spec-tiedostosta" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "käännä lähde- ja binääripaketit spec-tiedostosta" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "käännä vain binääripaketti spec-tiedostosta" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "käännä vain lähdepaketti spec-tiedostosta" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "käännä %prep-osioon asti tar-tiedostosta" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "käännä %build-osioon asti (%prep ja %build) tar-tiedostosta" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"käännä %install-osioon asti (%prep, %build ja %install) tar-tiedostosta" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "tarkista %files-osio tar-tiedostosta" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "käännä lähde- ja binääripaketit tar-tiedostosta" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "käännä vain binääripaketti tar-tiedostosta" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "käännä vain lähdepaketti tar-tiedostosta" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "käännä binääripaketti lähdepaketista" + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "käännä %install-osioon asti (%prep, %build ja %install) lähdepaketista" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "ohita käännösjuuri" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "poista käännöspuu, kun valmis" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "jätä ExcludeArch-directiivit huomioimatta" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "älä suorita mitään käännöksen vaiheita" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "älä tarkista käännösriippuvuuksia" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "poista lähdekoodit kun valmis" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "poista määrittelytiedosto kun valmis" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "siirry suoraan määriteltyyn vaiheeseen (vain c ja i yhteydessä)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "ohita kohdealusta" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "Käännösvalitsimet:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Puuttuvia käännösriippuvuuksia:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "En voi avata spec-tiedostoa %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "tar-putken avaus epäonnistui: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Spec-tiedoston avaaminen %s:sta epäonnistui\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Uudelleen nimeäminen %s -> %s epäonnistui: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "%s:n stat epäonnistui: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Tiedosto %s ole tavallinen tiedosto.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Tiedosto %s ei vaikuta spec-tiedostolta.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Käännetään kohdealustoille: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Käännetään kohteelle %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "alusta tietokanta" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "rakenna tietokanta uudestaan asennettujen pakettien tiedoista" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "tarkista tietokanta" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Tietokantavalitsimet:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "tarkista paketin allekirjoitus" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Allekirjoitusvalitsimet:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "ei annettu parametrejä" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "asenna paketteja" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "allekirjoita paketti (hylkää nykyinen allekirjoitus)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "poista paketin allekirjoitus" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Allekirjoitusvalitsimet:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "%s:ää ei voitu suorittaa: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Sinun pitää asettaa \"gpg_name:\" makrotiedostossasi\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Syötä salasana: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Salasana täsmää.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Salasanan tarkistus epäonnistui\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "kysele määrittelytiedostoa" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "kysele määrittelytiedostoa" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "käytä seuraava kyselyformaattia" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Allekirjoitusvalitsimet:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "kyselylle ei annettu parametrejä" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "En voi avata väliaikaistiedostoa.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Suoritetaan(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "%s:n suoritus epäonnistui (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"RPM käännösvirheitä:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "syntaksivirhe jäsentäessä ==:aa\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "syntaksivirhe jäsentäessä &&:aa\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "syntaksivirhe jäsentäessä ||:aa\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "jäsennysvirhe lausekkeessa\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "pariton (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- vain numeroissa\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! vain numeroissa\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "tyyppien täytyy olla yhtenevät\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / ei tuettu merkkijonoille\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- ei tuettu merkkijoinoille\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& ja || ei tuettu merkkijoinoille\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "syntaksivirhe lausekkeessa\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Puuttuva '(' %s %s:ssä\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "puuttuva ')' %s:(%s:ssä\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Virheellinen %s merkki: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "Puuttuva %s %s %s:ssä\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Virheellinen syntaksi: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Virheellinen oikeusmäärittely %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Virheellinen hakemisto-oikeusmäärittely %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Epätavallinen locale-pituus: \"%.*s\" %%lang(%s):ssä\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Kaksi tiedostoa yhdellä rivillä %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Tiedostojen täytyy alkaa \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Tiedosto lueteltu kahdesti: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s:n avaus ei onnistunut: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Symbolinen linkki osoittaa BuildRoot:iin: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Tiedostoa ei löytynyt: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Tiedostoa ei löytynyt: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: julkisen avaimen luku epäonnistui\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: ei ole panssaroitu julkinen avain.\n" + +#: build/files.c:1618 +#, c-format +msgid "%s: failed to encode\n" +msgstr "" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Tiedosto tarvitsee aloitusmerkin \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Täydennys ei sallittu: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Tiedostoa ei löytynyt täydennyksellä: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Tiedostoa ei löytynyt täydennyksellä: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "%%files tiedostoa %s ei voitu avata: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "rivi: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Virheellinen tiedosto: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Virheellinen omistaja/ryhmä: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Tarkistetaan paketoimattomia tiedostoja: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Löytyi asennettuja (mutta paketoimattomia) tiedostoja:\n" +"%s" + +#: build/files.c:2139 +#, c-format +msgid "Processing files: %s\n" +msgstr "Käsitellään tiedostoja: %s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "arkiston luominen epäonnistui: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy kirjoitus epäonnistui: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy luku epäonnistui: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: rivi: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "PreIn-tiedostoa ei voitu avata: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "PreUn-tiedostoa ei voitu avata: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "PreTrans-tiedostoa ei voitu avata: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "PostIn-tiedostoa ei voitu avata: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "PostUn-tiedostoa ei voitu avata: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "PostTrans-tiedostoa ei voitu avata: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "VerifyScript-tiedostoa ei voitu avata: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Trigger-tiedostoa ei voitu avata: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Tuntematon kuorman pakkaus: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Tilapäisotsikon kirjoitus ei onnistu\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Allekirjoitusotsikon uudelleenlataus ei onnistu\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "%s:aa ei voitu avata: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Pakettia ei voitu kirjoittaa: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Otsikkotiedon lukeminen %s:stä epäonnistui: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Otsikkotiedon kirjoittaminen %s:n epäonnistui: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Kuorman luku %s:stä ei onnistu: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Kuorman kirjoitus %s:ään ei onnistu: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Kirjoitettiin: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "Suoritetaan \"%s\":\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "%s:n suoritus epäonnistui.\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Paketin tarkistus \"%s\" epäonnistui.\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Tiedostonimen muodostus paketille %s ei onnistu: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "%s:n luonti ei onnistu: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "rivi %d: toinen %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog merkintöjen täytyy alkaa *:llä\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "epätäydellinen merkintä %%changelog:issa\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "virheellinen päivämäärä %%changelog:issa: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog ei ole kronologisessa järjestyksessä\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "puuttuva nimi %%changelog:issa\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "ei kuvausta %%changelog:issa\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "rivi %d: virhe jäsennettäessä %%description-osiota %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "rivi %d: virheellinen valinta %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "rivi %d: liikaa nimiä: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "line %d: pakettia ei ole olemassa: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "line %d: toinen %%description-osio\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "rivi %d: virhe jäsennettäessä %%files-osiota: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "rivi %d: virhe jäsennettäessä %%files-osiota: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "rivi %d: virheellinen numero: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d määritelty useita kertoja\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Arkkitehtuuri on poissuljettu: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Arkkitehtuuri ei ole mukaanluettu: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "Käyttöjärjestelmä on poissuljettu: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "Käyttöjärjestelmä ei ole mukaanluettu: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "kenttä %s on vaadittu kenttä paketissa: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Useita %s-merkintöjä paketissa: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Ikonia %s ei voida avata: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Ikonia %s ei voida lukea: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Tuntematon ikonityyppi: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "" + +#: build/parsePreamble.c:607 +#, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "rivi %d: laiton merkki '%c' %s:ssä\n" + +#: build/parsePreamble.c:610 +#, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "rivi %d: laiton merkki %s:ssä\n" + +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "rivi %d: laiton merkkijono \"..\" %s:ssä\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "rivi %d: Epoch-kentän täytyy olla etumerkitön numero: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "rivi %d: virheellinen käännösarkkitehtuurin muoto: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "" + +#: build/parsePreamble.c:909 +#, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Virheellinen pakettimäärittely: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Paketti on jo olemassa: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "rivi %d: tuntematon nimiö: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} ei voi olla tyhjä\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} ei voi olla \"/\"\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Virheellinen lähde: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "Ei patchia numero %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "Ei lähdettä numero %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Virhe jäsennettäessä %%setup-osiota: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "rivi %d: virheellinen argumentti %%setup:ille: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "rivi %d: virheellinen %%setup valitsin %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "Virheellinen patch-numero %s: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "rivi %d: toinen %%prep-osio\n" + +#: build/parseReqs.c:112 +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "rivi %d: versioitu tiedostonimi ei ole sallittu: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "rivi %d: versio vaaditaan: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "rivi %d: virheellinen riippuvuus: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "rivi %d: %s:\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "rivi %d: laukaisimissa pitää olla --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "rivi %d: virhe jäsennettäessä %s:ää: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "rivi %d: sisäisen skriptin täytyy päättyä '>':n: %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "rivi %d: skriptitulkin täytyy alkaa '/':lla: %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "rivi %d: toinen %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "rivi %d: %s:\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Ei voi avata %s:ää: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "Sulkematon %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d parseExpressionBoolean palautti %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: %%else ilman %%if:iä\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: %%endif ilman %%if:iä\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "virheellinen %%include-lause\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Ei yhteensopivia arkkitehtureeja käännökselle\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Paketissa ei ole %%description-osiota: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Spec-tiedoston avaaminen %s:sta epäonnistui\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Spec-tiedoston avaaminen %s:sta epäonnistui\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Spec-tiedoston avaaminen %s:sta epäonnistui\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "tar-putken avaus epäonnistui: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Virhe jäsennettäessä %%setup-osiota: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Suoritetaan(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Puuttuva %s %s %s:ssä\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Liian monta parametriä datarivillä %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Käsitellään tiedostoja: %s\n" + +#: build/rpmfc.c:107 +#, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Ei voitu luoda putkea %s:lle: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Ei voitu suorittaa %s:ää: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Ei voitu suorittaa %s:ää: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s epäonnistui: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "kaiken tiedon kirjoittaminen %s:ään ei onnistunut\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) epäonnistui: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load epäonnistui: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Tiedoston \"%s\" tunnistaminen epäonnistui: moodi %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Etsitään %s:ää: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "%s:ää ei löytynyt\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "määrittelytiedoston %s kysely epäonnistui\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(virhe 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Virheellinen otsikkotieto" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Otsikkotieto liian suuri" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Tuntematon tiedostotyyppi" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "Tarkistussumma ei täsmää" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Sisäinen virhe" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " epäonnistui - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "paketti %s on jo lisätty, ohitetaan %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "paketti %s oli jo lisätty, korvataan %s:lla\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(ei ole luku)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(ei ole base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(virheellinen tyyppi)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(ei ole binääridataa)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(virheellinen xml-tyyppi)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(ei ole OpenPGP-allekirjoitus)" + +#: lib/formats.c:588 +msgid "normal" +msgstr "normaali" + +#: lib/formats.c:591 +msgid "replaced" +msgstr "korvattu" + +#: lib/formats.c:594 +msgid "not installed" +msgstr "ei asennettu" + +#: lib/formats.c:597 +msgid "net shared" +msgstr "verkkojaettu" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "väärä väri" + +#: lib/formats.c:603 +msgid "missing" +msgstr "" + +#: lib/formats.c:606 +msgid "(unknown)" +msgstr "(tuntematon)" + +#: lib/formats.c:645 +msgid "(not a string)" +msgstr "(ei ole merkkijono)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "käyttäjää %s ei ole olemassa, käytetään käyttäjää root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "ryhmää %s ei ole olemassa, käytetään ryhmää root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s talletettiin %s:nä\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s %s rmdir epäonnistui - hakemisto ei ole tyhjä\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s %s:n rmdir epäonnistui: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s luotu %s:na\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "ohitetaan %s jonka V%u allekirjoitusta ei voida varmentaa\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature epäonnistui: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Ei allekirjoitusta saatavilla\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: otsikon luku epäonnistui: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Tiedoston luku epäonnistui: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s on Delta RPM eikä sitä voida suoraan asentaa\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Tuntematon kuorma (%s) paketissa %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "lue vakiotiedostojen sijaan" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "älä tarkista pakettien tarkistussummia" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "älä tarkista otsikkotietoja haettaessa tietokanssata" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "älä tarkista paketin allekirjoitusta" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "lähetä vakiotuloste :lle" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "käytä ylimpänä hakemistona" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "näytä tunnetut kyselymuodot" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "näytä lopullinen rpmrc ja makro-konfiguraatio" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "tulosta vähemmän yksityiskohtia" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "tulosta enemmän yksityiskohtia" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "tulosta käytetyn rpm:n versio" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "siirtojen pitää alkaa /-merkillä" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "siirroissa pitää olla =-merkki" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "siirroissa pitää olla / =-merkin jälkeen" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"asenna kaikki tiedostot, myös konfiguraatiot, jotka muuten ehkä ohitettaisiin" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"poista kaikki paketit, joiden nimeä vastaa (tavallisesti, jos " +" määrittää useita paketteja, tulee virhe)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "poista paketti" + +#: lib/poptI.c:131 +msgid "+" +msgstr "" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "älä asenna konfigurointiedostoja" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "älä asenna dokumentointia" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "ohita -alkuiset tiedostot" + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "lyhenne parametreille --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "päivitä vain jo asennetut paketit" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "tulosta risuaitaa paketin asentuessa (-v:n kanssa hyvä)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "älä tarkista paketin arkkitehtuuria" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "älä tarkista paketin käyttöjärjestelmää" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "älä tarkista levytilaa ennen asennusta" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "asenna dokumentaatio" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "asenna paketteja" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "päivitä tietokanta, mutta älä muuta tiedostojärjestelmää" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "älä tarkista paketin riippuvuuksia" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "älä tarkista tiedostojen tarkistussummia" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "älä tarkista tiedostojen tarkistussummia" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "älä muuta asennusjärjestystä riippuvuuksien tyydyttämiseksi" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "älä suorita pakettikohtaisia skriptejä" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "älä suorita %%pre-scriptiä" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "älä suorita %%post-scriptiä" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "älä suorita %%preun-scriptiä" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "älä suorita %%postun scriptiä" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "älä suorita tämän paketin laukaisemia skriptejä" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "älä suorita %%triggerprein skriptejä" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "älä suorita %%triggerin skriptejä" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "älä suorita %%triggerun scriptejä" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "älä suorita %%triggerpostun scriptejä" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"päivitä vanhempaan versioon (--force päivitettäessä tekee tämän " +"automaattisesti)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "tulosta asennuksen eteneminen prosentteina" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "siirrä paketti hakemistoon , jos siirrettävissä" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "siirrä tiedostot hakemistosta hakemistoon " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "älä huomioi tiedostokonflikteja pakettien välillä" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "asenna uudelleen, jos paketti on jo asennettu" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "älä asenna, mutta kerro onnistuisiko se" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "päivitä paketteja" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "kysele/tarkista kaikki paketit" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "rpm allekirjoituksen tarkistustila" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "kysele/tarkista pakettia, jonka omistuksessa on" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "kysele/tarkista paketteja ryhmässä" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "kysele/tarkista pakettitiedostoa" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "rpm kyselytila" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "rpm tarkistustila" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "kysele/tarkista paketteja, jotka vaativat ominaisuutta" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "kysele/tarkista paketteja, jotka tarjoavat ominaisuuden" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "luettele kaikki konfiguraatiotiedostot" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "luettele kaikki dokumentaatiotiedostot" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "luettele paketin tiedostot" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "ohita %%ghost tiedostot" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "näytä lueteltujen tiedostojen tilat" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "älä tarkista tiedostojen kokoa" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "älä tarkista tiedostojen symbolisen linkin polkua" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "älä tarkista tiedostojen omistajaa" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "älä tarkista tiedostojen ryhmää" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "älä tarkista tiedostojen muutosaikaa" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "älä tarkista tiedostojen oikeuksia" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "älä tarkista paketin tiedostoja" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "älä tarkista paketin riippuvuuksia" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "älä suorita tarkistusskriptejä" + +#: lib/psm.c:212 +#, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "arkiston %s%s purkaminen epäonnistui: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " tiedostolle " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s epäonnistui tiedostolle %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s epäonnistui: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "virheelinen muoto: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(ei sisällä tiedostoja)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normaali " + +#: lib/query.c:163 +msgid "replaced " +msgstr "korvattu " + +#: lib/query.c:166 +msgid "not installed " +msgstr "ei asennettu " + +#: lib/query.c:169 +msgid "net shared " +msgstr "verkkojaettu " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "väärä väri " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(ei tilaa) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(tuntematon %3d)" + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "ryhmässä %s ei ole paketteja\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "mikään paketti ei laukaise %s:a\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "epämuodostunut %s: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "mikään paketti ei tarvitse %s:a\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "mikään paketti ei tarjoa %s:a\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "tiedosto %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "tiedostoa %s ei omista mikään paketti\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "virheellinen paketin numero: %s\n" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "tietuetta %u ei voitu lukea\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "paketti %s ei ole asennettu\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "tuntematon nimiö: \"%s\"\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: julkisen avaimen luku epäonnistui\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: ei ole panssaroitu julkinen avain.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead epäonnistui\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "ohitetaan paketti %s jonka V%u allekirjoitusta ei voida varmentaa\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "EI OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr "(PUUTTUVIA AVAIMIA:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr "" + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (EPÄLUOTETTAVIA AVAIMIA:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr "" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: avaus epäonnistui: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Juurihakemiston palautus ei onnistu: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s: juurihakemistoa ei ole asetettu\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Juurihakemiston vaihto ei onnistu: %m\n" + +#: lib/rpmchroot.c:95 +#, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Juurihakemiston palautus ei onnistu: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "EI " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "KYLLÄ " + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +msgid "package scriptlets can be expanded at install time." +msgstr "" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "%s:n avaus ei onnistunut: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: ei ole rpm paketti (tai pakettilista)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Valmistellaan..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Valmistellaan paketteja asennukseen..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Puuttuvia riippuvuuksia:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: ei ole rpm paketti (tai pakettilista): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s:ää ei voida asentaa\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Haetaan %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "ohitetaan %s - siirto epäonnistui\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "paketti %s ei ole uudelleensijoitettava\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "virhe luettaessa tiedostosta %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "tiedosto %s vaatii uudemmat version RPM:stä\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" määrittää useita paketteja:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "virhe: en voi avata %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Asennetaan %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "ei ole RPM paketti" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "laiton allekirjoitustyyppi" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "RPM pakettiversio ei ole tuettu" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "luku epäonnistui: %s (%d)\n" + +#: lib/rpmlead.c:126 +msgid "not an rpm package\n" +msgstr "ei ole RPM paketti\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "%s-lukon luonti %s:een ei onnistu (%s)\n" + +#: lib/rpmlock.c:106 +#, c-format +msgid "waiting for %s lock on %s\n" +msgstr "odotetaan %s-lukkoa %s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "%s:n avaus epäonnistui: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Uudelleen nimeäminen %s -> %s epäonnistui: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Uudelleen nimeäminen %s -> %s epäonnistui: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "eri" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "paketti %s on tarkoittettu %s-arkkitehtuurille" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "paketti %s on tarkoitettu %s-käyttöjärjestelmälle" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "paketti %s on jo asennettuna" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "polku %s paketissa %s ei ole uudelleensijoitettava" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "paketti %s (joka on uudempi kuin %s) on jo asennettuna" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"paketin %s asennus tarvitsee %%c tavua tiedostojärjestelmällä %s" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"paketin %s asennus tarvitsee % inodea tiedostojärjestelmällä %s" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(asennettu) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s on ristiriidassa %s-%s:n kanssa" + +#: lib/rpmprob.c:172 +#, c-format +msgid "%s is obsoleted by %s%s" +msgstr "" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "tuntematon virhe %d käsitellessä pakettia %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "toinen ':' puuttuu, %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "puuttuva arkkitehtuurin nimi, %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Epätäydellinen datarivi, %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Liian monta parametriä datarivillä %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Virheellinen arkkitehtuuri/käyttöjärjestelmä numero: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Epätäydellinen oletusrivi, %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Liian monta parametriä oletusrivillä %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "puuttuva ':' (löydettiin 0x%02x): %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "puuttuva argumentti %s:lle: %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "en voi avata %s:aa %s:%d:ssä: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Tuntematon järjestelmä: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Ota yhteyttä %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "En voi avata %s luettavaksi: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Juurihakemiston palautus ei onnistu: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Ei voitu luoda tilapäistiedostoa %s:lle: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s scripti epäonnistui, waitpid(%d) palautti %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s skripti epäonnistui, signaali %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s skripti epäonnistui, palautti %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "Tuntematon formaatti" + +#: lib/rpmte.c:820 +msgid "install" +msgstr "" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "Pakettitietokantaa %s ei voida avata\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: julkisen avaimen luku epäonnistui.\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Otsikko " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +msgid "failed" +msgstr "epäonnistui" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "puuttuva %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Tyydyttämättömiä riippuvuuksia %s:lle:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "puuttuva '{' '%':n jälkeen" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "puuttuva '{' '%{':n jälkeen" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "tyhjä nimiön formaatti" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "tyhjä nimiön nimi" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "tuntematon nimiö" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "']' puuttuu taulukkomäärittelyn lopusta" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "odottamaton ']'" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "odottamaton '}'" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "odotin '?'-merkkiä ilmauksessa" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "odotin '{' '?'-merkin jälkeen lausekkeessa" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "odotin '}'-merkkiä lausekkeessa" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "odotin ':' '?'-merkin jälkeen ali-lausekkeessa " + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "odotin '{' ':'-merkin jälkeen lausekkeessa " + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "odotin '}'-merkkiä ilmauksen lopussa" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "indeksin %s avaus db%d:llä ei onnistu - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "dbpath ei ole asetettu\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "virhe(%d) haettaessa \"%s\" tietueita indeksistä %s\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: ohitetaan" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "virhe(%d) tallennettaessa tietuetta #%d %s:ään\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec epäonnistui: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp epäonnistui: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: ohitetaan" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: ohitetaan vioittunut otsikkotietue #%u.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "virhe(%d) haettaessa \"%s\" tietueita indeksistä %s\n" + +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "virhe(%d) lisättäessä otsikkon #%d tietuetta\n" + +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "virhe(%d) poistettaessa otsikon #%d tietuetta\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: otsikkoa ei voida lukea (0x%x)\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "virhe(%d) asetettaessa \"%s\" tietuetita indeksistä %s\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "virhe(%d) tallennettaessa tietuetta %s %s:ään\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "virhe(%d) poistettaessa tietuetta %s %s:stä\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "virhe(%d) varattaessa uutta paketti-instanssia\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "virhe(%d) tallennettaessa tietuetta %s %s:ään\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "dbpath ei ole asetettu" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "hakemiston %s luonti epäonnistui: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "tietue numero %u tietokannassa viallinen -- ohitetaan.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "alkupäisen tietueen %u lisäys ei onnistu\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"tietokannan uudelleenrakennus epäonnistui: alkuperäinen kanta paikallaan\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "vanhan tietokannan korvaus uudella epäonnistui!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "korvaa tiedostot %s:ssä tiedostoilla %s:stä korjataksesi" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "hakemiston %s poisto epäonnistui: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "en saa %s lukitusta tietokantaan %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "jaettua" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "poissulkevaa" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Spec-tiedoston avaaminen %s:sta epäonnistui\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Ei voitu luoda tilapäistiedostoa %s:lle: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Spec-tiedoston avaaminen %s:sta epäonnistui\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "%s:n luonti epäonnistui: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Yhteyden muodostus palvelimeen epäonnistui" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "%s:n avaus epäonnistui: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "hakemiston %s poisto epäonnistui: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Uudelleen nimeäminen %s -> %s epäonnistui: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "En voi lukea %s: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "%s:n avaus epäonnistui: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "%s:n luonti epäonnistui: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "Makrossa %%%s on päättämätön runko\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "%s epäonnistui tiedostolle %s: %s\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Spec-tiedoston avaaminen %s:sta epäonnistui\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktiivisia %d tyhjiä %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(tyhjä)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(tyhjä)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Makrossa %%%s on päättämätön runko\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Makron %%%s nimi on laiton (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Makrossa %%%s on päättämättömiä valitsimia\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "Makron %%%s runko on tyhjä\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Makron %%%s laajennos ei onnistunut\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Makron %%%s nimi on laiton (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Makroa %%%s (%s) ei käytetty tason %d alla\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Tuntematon valitsin %c %s(%s):ssä\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "Päättämätön %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "%% seuraa makro jota ei voida jäsentää\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "virhe luotaessa tilapäistä tiedostoa %s: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Tiedosto %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "hakemiston luonti epäonnistui" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "virheellinen syntaksi lua-skriptissä: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "virheellinen syntaksi lua-skriptissä: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "lua-skripti epäonnistui: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "virheellinen syntaksi lua-tiedostossa: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "lua-koukku epäonnistui: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(ei virhettä)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "vakava virhe: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "virhe: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "varoitus: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "muistin varaus (%u tavua) palautti NULL:in.\n" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "" + +#: rpmio/rpmpgp.c:1369 +msgid "(none)" +msgstr "(ei mitään)" + +#: rpmio/rpmpgp.c:1652 +#, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite epäonnistui: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush epäonnistui: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "gpg:n suoritus epäonnistui (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg ei voinut kirjoittaa allekirjoitusta\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "en voinut lukea allekirjoitusta\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "rpmMkTemp epäonnistui\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead epäonnistui: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature epäonnistui: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "%s:n avaus ei onnistunut: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: pakettilistan luku epäonnistui: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "älä tarkista otsikon ja kuorman allekirjoitusta" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "lisää ehdotetut paketit transaktioon" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Siirtyminen hakemistoon %s ei onnistunut: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps: voidaan käyttää vain paketteja asennettaessa, poistettaessa tai " +#~ "tarkistettaessa" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r): voidaan käyttää vain paketteja asennettaessa, poistettaessa, " +#~ "kyseltäessä ja tietokannan uudelleenluonnissa" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "havaitse tiedostokonfliktit pakettien välillä" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "väliaikainen tietokanta %s on jo olemassa\n" + +#~ msgid "no files to sign\n" +#~ msgstr "ei tiedostoja allekirjoitettavaksi\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "en voinut avata tiedostoa %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign: voidaan käyttää vain paketteja käännettäessä" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "älä tarkista GPG V3 DSA allekirjoituksia" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "älä tarkista PGP V3 RSA/MD5 allekirjoituksia" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "allekirjoita paketti (hylkää nykyinen allekirjoitus)" + +#~ msgid "generate signature" +#~ msgstr "luo allekirjoitus" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Sisäinen virhe argumenttien käsittelyssä (%d)\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: avaus %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek epäonnistui: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s ei ole RPM paketti\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: luetaan otsikkotietoa %s:stä\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Luodaan allekirjoitusta: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "generoi PGP/GPG-allekirjoitus" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "uudelleenkäännolle ei määritelty paketteja" + +#~ msgid "no spec files given for build" +#~ msgstr "käännökselle ei annettu määrittelytiedostoja" + +#~ msgid "no tar files given for build" +#~ msgstr "käännökselle ei määritelty tar-tiedostoja" + +#~ msgid "%s failed\n" +#~ msgstr "%s epäonnistui\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Rekursiosyvyys (%d) ylittää maksimin (%d)\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: ohitetaan" + +#~ msgid "url port must be a number\n" +#~ msgstr "url portin pitää olla luku\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Hakemistopuuvalitsimet (--ftswalk yhteydessä):" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: %s skripti epäonnistui (%d), ohitetaan %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() ei palauttanut kokoa: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() ei palauttanut kohteita: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "%s:n stat epäonnistui: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "tiedosto %s sijaitsee tuntemattomalla laitteella\n" + +#~ msgid "cannot open %s index\n" +#~ msgstr "indeksin %s avaus ei onnistu\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "En saa lukitusta tietokantaan %s, yritetään uudelleen... (%d)\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Tietokannan %s alustus ei onnistu (%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Tietokantaa ei voi avata: %s\n" + +#~ msgid "Unknown system error" +#~ msgstr "Tuntematon järjestelmäverhe" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Makroa %%%.*s ei löydy, ohitetaan\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "line %d: toinen %%files-osio\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Tietotyyppi %d ei ole tuettu\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "pakettien järjestäminen epäonnistui, %d elementtiä jäljellä\n" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Lähdevalitsimet (--query tai --verify yhteydessä):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp:tä ei löytynyt" + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "en voinut avata tiedostoa %s: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp epäonnistui\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp ei voinut kirjoittaa allekirjoitusta\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Sinun pitää asettaa \"pgp_name:\" makrotiedostossasi\n" + +#~ msgid "Unknown" +#~ msgstr "Tuntematon" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s allekirjoitus: %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "%sV%d DSA allekirjoitus: %s, avain %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d DSA allekirjoitus: %s\n" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "ei voida luoda %%%s:ää %s\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "ei voida kirjoittaa %%%s:ään %s\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot ei voi olla \"/\": %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Spec tiedosto ei tue BuildRoot:ia\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "%s:n kysely ei onnistu: %s\n" + +#~ msgid "(encoding failed)" +#~ msgstr "(koodaus epäonnistui)" + +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "Ratkaisutietokantaa %s ei voida avata\n" + +#~ msgid "Success" +#~ msgstr "Onnistui" + +#~ msgid "Bad server response" +#~ msgstr "Virheellinen palvelimen vastaus" + +#~ msgid "Server I/O error" +#~ msgstr "Palvelimen I/O-virhe" + +#~ msgid "Server timeout" +#~ msgstr "Palvelimen aikakatkaisu" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Palvelimen osoitetta ei löytynyt" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Palvelimen nimeä ei löytynyt" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Datayhteyden muodostus palvelimeen epäonnistui" + +#~ msgid "I/O error to local file" +#~ msgstr "Paikallisen tiedoston IO-virhe" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Virhe asetettaessa palvelinta passiiviseen tilaan" + +#~ msgid "File not found on server" +#~ msgstr "Tiedostoa ei löytynyt palvelimelta" + +#~ msgid "Abort in progress" +#~ msgstr "Keskeytys meneillään" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Tuntematon tai odottamaton virhe" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "älä päivitä tietokantaa, tulosta vain pakettien polut" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: %%{_cache_dbpath} makro on väärin konfiguroitu.\n" + +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: välimuistioperaatio epäonnistui: %d\n" + +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: headerGetEntry epäonnistui\n" + +#~ msgid "getcwd failed: %m\n" +#~ msgstr "getcwd epäonnistui: %m\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "rivi %d: %%patch -b tarvitsee argumentin: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "rivi %d: %%patch -z tarvitsee argumentin: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "rivi %d: virheellinen argumentti %%patch -F:lle: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "rivi %d: %%patch -p tarvitsee argumentin: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "rivi %d: Virheellinen argumentti %%patch -p:lle: %s\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "rivi %d: Virheellinen argumentti %%patch:ille: %s\n" + +#~ msgid "skip %%license files" +#~ msgstr "ohita %%license tiedostot" + +#~ msgid "skip %%readme files" +#~ msgstr "ohita %%readme tiedostot" + +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "URL avustaja epäonnistui: %s (%d)\n" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Allekirjoitusotsikon uudelleenlataus ei onnistu\n" + +#~ msgid "Repackaging..." +#~ msgstr "Uudelleenpaketoidaan..." + +#~ msgid "Repackaging erased files..." +#~ msgstr "Uudelleenpaketoiden poistettuja tiedostoja..." + +#~ msgid "Upgrading..." +#~ msgstr "Päivitetään..." + +#~ msgid "Upgrading packages..." +#~ msgstr "Päivitetään paketteja..." + +#~ msgid "Cleaning up repackaged packages:\n" +#~ msgstr "Siivotaan uudelleenpaketoituja paketteja:\n" + +#~ msgid "\tRemoving %s:\n" +#~ msgstr "\tPoistetaan %s\n" diff --git a/po/fr.gmo b/po/fr.gmo new file mode 100644 index 0000000..b8d9e5b Binary files /dev/null and b/po/fr.gmo differ diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..767942b --- /dev/null +++ b/po/fr.po @@ -0,0 +1,4373 @@ +# A French translation for rpm messages +# Copyright (C) 2003 Free Software Foundation, Inc. +# This file is distributed under the same license as the RPM package. +# RPM French Translation , 2003. +# JBJ : THANX A LOT !!! +# +# N'hésitez pas à m'envoyez un courriel si vous avez des +# suggestions/corrections. +# +msgid "" +msgstr "" +"Project-Id-Version: RPM 4.2.1\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2003-07-06 01:36+0200\n" +"Last-Translator: RPM French Translation \n" +"Language-Team: RPM French Translation \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM version %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" +"Ce programme peut être librement redistribué sous les termes de la licence " +"GNU GPL\n" + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "Echec de la création de l'archive: %s\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "echec de l'exec\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "l'argument n'est pas un paquetage RPM\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "erreur dans la lecteur de l'entête du paquetage\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "Impossible de ré-ouvrir la charge utile: %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "vérifier/questionner le(s) paquetage(s) d'un même groupe" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Options de requêtes (avec -q ou --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Options de vérifications (avec -V ou --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Options d'installation/désinstallation/mise à jour:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Options communes a tous les modes et executables rpm:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "un seul type de requête/vérification à la fois" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "option de requête inattendue" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "format de requête inattendu" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "source de requête inattendue" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "un seul mode majeur peut être specifié" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"seuls l'installation, la mise à jour, rmsource et rmspec peuvent être forcés" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "les fichiers ne peuvent être relogés qu'à l'installation" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "impossible d'utiliser --prefix avec --relocate ou --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate et --excludepath ne peuvent être utilisés qu'à l'installation de " +"nouveaux paquetages" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "" +"--prefix ne peut être utilisé qu'à l'installation de nouveaux paquetages" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "les arguments de --prefix doivent commencer par un /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) ne peut être utilisé qu'à l'installation de paquetages" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent ne peut être utilisé qu'à l'installation de paquetages" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs ne peut être utilisé qu'à l'installation de paquetages" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs ne peut être utilisé qu'à l'installation de paquetages" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs ne peut être utilisé qu'à l'installation de paquetages" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "utiliser --excludedocs _OU_ --includedocs (pas les 2)" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch ne peut être utilisé qu'à l'installation de paquetages" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos ne peut être utilisé qu'à l'installation de paquetages" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize ne peut être utilisé qu'à l'installation de paquetages" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" +"--allmatches ne peut être utilisé qu'à la désinstallation de paquetages" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles ne peut être utilisé qu'à l'installation de paquetages" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" +"--justdb ne peut être utilisé qu'à l'installation/la désinstallation de " +"paquetages" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"les options désactivant les scripts ne peuvent être utilisées qu'à la (dés)" +"installation" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"les options desactivant les triggers ne peuvent être utilisées qu'à la (dés)" +"installation" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test ne peut être spécifié que pour la (dés)installation et la construction" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "" +"--justdb ne peut être utilisé qu'à l'installation/la désinstallation de " +"paquetages" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "les arguments ed --root (-r) doivent commencer par un /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "n'a aucun paquetage à désinstaller" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "n'a aucun paquetage à installer" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "aucun argument fourni à la requête" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "aucun argument fourni à la vérification" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot déjà spécifié, %s ignoré\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"construction jusqu'à la section %prep (deballage des sources et applications " +"des patchs) du " + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"construction jusqu'à la section %build (%prep, et compilation) du " +"" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"construction jusqu'à la section %install (%prep, %build, et installation) du " +"" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "vérifier la section %files du " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "" +"construire les paquetages sources et binaires à partir du " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "construction du paquetage binaire seulement à partir du " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "construction du paquetage source seulement à partir du " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"construire jusqu'à la section %prep (déballage des sources et application " +"des patchs) à partir du " + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"construire jusqu'à la section %build (%prep, puis compilation) à partir du " +"" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"construire jusqu'à la section %build (%prep, %build, puis installation) à " +"partir du " + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "vérifier la section %files à partir du " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "construire les paquetages source et binaire à partir du " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "construire seulement le paquetage binaire à partir du " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "construire seulement le paquetage source à partir du " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "construire le paquetage binaire à partir du " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"construire jusqu'à la section %install (%prep, %build, et installation) à " +"partir du " + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "surcharger le buildroot" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "effacer l'arborescence de construction une fois terminé" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ignorer les directives ExcludeArch: du fichier spec" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "déboguer la machine à états de fichiers (déballage)" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "n'exécuter aucune étape de la construction" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "ne pas vérifier les dépendances de construction" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "générer un(des) entête(s) compatible(s) avec l'emballage rpm[23]" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "ne pas accepter les msgstr de l'i18n du specfile" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "effacer les sources une fois terminé" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "effacer le fichier spec une fois terminé" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "aller directement à l'étape spécifiée (seulement pour c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "surcharger la plate-forme cible" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" +"Options de construction avec [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Dépendances de construction manquantes:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Impossible d'ouvrir le fichier spec %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Impossible d'ouvrir le pipe de tar: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Impossible de lire le fichier spec à %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Impossible de renommer %s en %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "échec de stat sur %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Fichier %s non régulier.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Le fichier %s ne semble pas être un fichier spec.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Construction pour plate-formes cibles: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Construction pour cible %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "initialiser la base de données" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"refaire les listes inversées de la base de données à partir des entêtes des " +"paquetages installés" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "vérifier les fichiers de la base de données" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Options de la base de données" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "vérifier la(les) signature(s) du paquetage" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "importer une clé publique blindé" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Otions de signatures" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "aucun argument fourni" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "installer le(s) paquetage(s)" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "signer le(s) paquetage(s) (identique à --addsign)" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "vérifier la(les) signature(s) du paquetage" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Otions de signatures" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Impossible d'exécuter %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "" +"Vous devez affecter une valeur à \"%%_gpg_name\" dans votre fichier de " +"macros\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Entrez la phrase de passe: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Phrase de passe bonne.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Mauvaise phrase de passe\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "questionner un fichier spec" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "questionner un fichier spec" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "utiliser le format de requête suivant" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Otions de signatures" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "aucun argument fourni à la requête" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Incapable d'ouvrir un fichier temporaire.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Exécution_de(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "L'exec de %s a échoué (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Mauvais status de sortie pour %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"Erreur de construction de RPM:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "erreur de syntaxe en analysant ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "erreur de syntaxe en analysant &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "erreur de syntaxe en analysant ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "erreur de syntaxe dans l'expression\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "( non fermée\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- seulement sur des nombres\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! seulement sur des nombres\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "les types doivent correspondre\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / non supportés sur des chaînes de caractères\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- non supporté sur des chaînes de caractères\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& et || ne sont pas supportés sur des chaînes de caractères\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "erreur de syntaxe dans l'expression\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "'(' manquante dans %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "')' manquante dans %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Lexème %s invalide: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "%s manquant(e) dans %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "espace non-blanc suivant %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Mauvaise syntaxe: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Mauvais mode spec: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Mauvais dirmode spec: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Mauvaise longueur de la locale: \"%.*s\" dans %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Deux fois la même locale %.*s dans %%lang(%s)\n" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Lexème %s invalide: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Un seul argument pour %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Deux fichiers sur une seule ligne: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Le fichier doit commencer par \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Ne peut mélanger un %%doc spécial avec d'autre formes: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Fichier listé deux fois: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s n'a pu délier %s: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Lien symbolique pointant sur BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Fichier non trouvé: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Fichier non trouvé: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: échec de la lecture de la clé publique.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s n'est pas une clé publique blindée.\n" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "La macro %%%s ne peut être expansée\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Le fichier non précédé d'un \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Substitution non permise: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Fichier non trouvé par la substitution: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Fichier non trouvé par la substitution: %s\n" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Ne peut ouvrir le fichier donné à %%files %s: %s\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "Ligne: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Mauvais fichier: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Mauvais possesseur/groupe: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Vérification des fichiers non empaquetés: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Fichier(s) installé(s) (mais non empaquetés):\n" +"%s" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "Traitement des fichiers: %s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "impossible de créer l'archive %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "Echec de la création de l'archive: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "Echec d'écriture cpio_copy: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "Echec de lecture cpio_copy: %s\n" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "Ligne: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Ne peut canoniser le nom d'hôte: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Impossible d'ouvrir le fichier PreIn: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Impossible d'ouvrir le fichier PreUn: %s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Impossible d'ouvrir le fichier PreIn: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Impossible d'ouvrir le fichier PostIn: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Impossible d'ouvrir le fichier PostUn: %s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Impossible d'ouvrir le fichier PostIn: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Impossible d'ouvrir le fichier VerifyScript: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Impossible d'ouvrir le fichier du script Trigger: %s\n" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Type d'icône inconnu: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Impossible de créer la partie immuable de l'entête.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Impossible d'écrire un entête temporaire\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Mauvaises données CSA\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Impossible de recharger l'entête de la signature.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Impossible d'ouvrir %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Impossible d'écrire le paquetage: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Impossible d'ouvrir sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Impossible de lire l'entête dans %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Impossible d'écrire l'entête dans %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Impossible de lire la charge utile dans %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Impossible d'écrire la charge utile dans %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Ecrit: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "Exécution_de(%s): %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "L'exec de %s a échoué (%s): %s\n" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Mauvaise phrase de passe\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Ne peut générer le nom de fichier pour le package %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "Ne peut créer %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "ligne %d: deuxième %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "les entrées dans le %%changelog doivent commencer par *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "entrée de %%changelog incomplète\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "mauvaise date dans %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "le %%changelog n'est pas dans l'ordre chronologique descendant\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "nom manquant dans le %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "absence de description dans le %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "ligne %d: erreur dans l'analyxe syntaxique de la %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "ligne %d: mauvaise option %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "ligne %d: trop de noms: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "ligne %d: package inexistant: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "ligne %d: deuxième description\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "ligne %d: erreur dans l'analyse syntaxique de %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "ligne %d: erreur dans l'analyse syntaxique de %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "ligne %d: mauvais nombre: %s\n" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "ligne %d: mauvais numéro de no%s: %d\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "ligne %d: mauvais numéro %s: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "\"%s\" spécifie plusieurs paquetages\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Architecture excluse: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Architecture non incluse: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "OS exclus: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "OS non inclus: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "Le champ %s doit être présent dans le paquetage: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Entrée dupliquée %s dans le paquetage: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Impossible d'ouvrir l'icône %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Impossible de lire l'icône %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Type d'icône inconnu: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "ligne %d: le tag n'accepte qu'un seul lexème: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "ligne %d: caractère '-' illégal dans %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "ligne %d: caractère '-' illégal dans %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "ligne %d: caractère '-' illégal dans %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "ligne %d: tag malformé: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "ligne %d: tag vide: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "ligne %d: les prefixes ne doivent pas finir par un \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "ligne %d: le docdir doit commencer par un '/': %s\n" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "ligne %d: le champ Epoch/Serial doit être un nombre: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "ligne %d: Mauvais %s: qualifiers: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "ligne %d: mauvais format pour BuildArchitecture: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Erreur interne: tag bidon %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "ligne %d: Version requise: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Mauvaise specification de paquetage: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Paquetage déjà existant: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "ligne %d: tag inconnu: %s\n" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "BuildRoot ne peut pas être \"/\": %s\n" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "BuildRoot ne peut pas être \"/\": %s\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Mauvaise source: %s: %s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "Pas de numéro de patch %d\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "Pas de numéro de source %d\n" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "le paquetage source ne contient pas de fichier .spec\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Impossible de télécharger la non-source %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Erreur d'analyse syntaxique du %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "ligne %d: mauvais argument à %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "ligne %d: mauvaise option à %%setup %s: %s\n" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "numéro de paquetage invalide: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "ligne %d: deuxième %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"ligne %d: le lexème de dépendance doit commencer par un alphanumérique, '_' " +"ou '/': %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "ligne %d: version interdite dans le nom de fichier: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "ligne %d: Version requise: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "ligne %d: mauvais nombre: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "ligne %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "ligne %d: les triggers doivent avoir --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "ligne %d: erreur d'analyse syntaxique %s: %s\n" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "ligne %d: le nom du script doit commencer par un '/': %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "ligne %d: le nom du script doit commencer par un '/': %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "ligne %d: deuxième %s\n" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "ligne %d: erreur dans l'analyxe syntaxique de la %%description: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "ligne %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Impossible d'ouvrir %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "%%if non terminé\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean retourne %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: j'ai là un %%else sans %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: j'ai là un %%endif sans %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "%%include malformé\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Pas d'architecture compatible pour construction\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Le paquetage n'a pas de %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Impossible de lire le fichier spec à %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Impossible de lire le fichier spec à %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Impossible de lire le fichier spec à %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Impossible d'ouvrir le pipe de tar: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Erreur d'analyse syntaxique du %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Exécution_de(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "%s manquant(e) dans %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Trop d'arguments dans la ligne de données à %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Traitement des fichiers: %s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "ligne %d: mauvais nombre: %s\n" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Impossible d'ouvrir %s: %s\n" + +#: build/rpmfc.c:247 +#, fuzzy, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Impossible d'exécuter %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, fuzzy, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Impossible d'ouvrir %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "échec %s: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "Impossible d'écrire la charge utile dans %s: %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "échec de gpg à ecrire la signature\n" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "échec de l'ouverture de %s: %s\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "%s échec du rmdir sur %s: %s\n" + +#: build/rpmfc.c:999 +#, fuzzy, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "%s échec du rmdir sur %s: %s\n" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "Fichier %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, fuzzy, c-format +msgid "Failed to find %s:\n" +msgstr "Impossible de lire %s: %s.\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "" +"échec de la requête sur le fichier spec %s, impossible de faire l'analyser " +"syntaxique\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(erreur 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Mauvaise magie, blah" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Entête mauvais ou illisible" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Entête trop gros" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Type de fichier inconnu" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "lien(s) dur(s) manquant(s)" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "la somme MD5 ne correspond pas" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Erreur interne" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "L'entête ne contient pas le fichier archive" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " échec - " + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "le paquetage %s a déjà été rajouté, replacé par %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "le paquetage %s a déjà été rajouté, replacé par %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(n'est pas un nombre)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(pas base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(type invalide)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(spa un blob ça)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(type xml invalide)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(pas une signature OpenPGP)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "remplacé " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "non installé " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "sur le réseau " + +#: lib/formats.c:600 +#, fuzzy +msgid "wrong color" +msgstr "fausse couleur" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "manquant %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(%3d iconnu) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(n'est pas un nombre)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "utilisateur %s inexistant - utilisation de root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "groupe %s inexistant - utilisation de root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "l'archive %s n'était pas dans la liste de fichiers d'entêtes\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s sauvé en tant que %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s échec du rmdir sur %s : répertoire non-vide\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s échec du rmdir sur %s: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s n'a pu délier %s: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s créé en tant que %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: MAUVAIS, non hexa\n" + +#: lib/package.c:322 +#, fuzzy +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr SDA: MAUVAIS, non binaire\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr SDA: MAUVAIS, non binaire\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hdr taille(%d): PASBON, la lecture renvoie %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, fuzzy, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr blob(%d): PASBON, la lecture renvoie %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: échec de rpmReadSignature: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: aucune signature disponible\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead a échoué: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread a échoué: %s\n" + +#: lib/package.c:794 +#, fuzzy, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s ne peut être installé\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "prédéfinir la MACRO avec l'EXPRression" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "'MACRO EXPR'" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "definit MACRO ayant pour valeur EXPR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "affiche la macro-expansion d'EXPR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "'EXPR'" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "Lire au lieu du(des) fichier(s) par défaut" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "ne pas vérifier les sommes de hachage du paquetage" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "ne pas vérifier l'entête de la base de données à la récupération" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "ne pas vérifier la(les) signature(s) du paquetage" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "envoyer la sortie standard à CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "utiliser RACINE comme répertoire racine" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "RACINE" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "afficher les tags de requête connus" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "afficher la configuration finale des macros et rpmrc" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "afficher moins de détails" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "afficher plus de détails" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "afficher la version de rpm utilisé" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "déboguer la machine à états du fichier de la charge utile" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "déboguer les E/S de rpmio" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: table d'option mal configurée (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "les chemins d'exclusions doivent commencer par un /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "les relogements doivent commencer par un /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "les relogement doivent contenir un =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "dans les relogements un / doit suivre le =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"installer tous les fichiers, meme si les configurations disent le contraire" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"retirer tous les paquetages qui correspondent à (normalement on " +"retourne une erreur si le correspond à plusieurs paquetages" + +#: lib/poptI.c:123 +#, fuzzy +msgid "relocate files in non-relocatable package" +msgstr "reloger des fichiers d'un paquetage non relogeable" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "désinstaller un paquetage" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "ne pas installer les fichiers de configuration" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "ne pas installer la documentation" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "sauter les fichiers commence par le indiqué" + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "raccourci pour --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "met à jour le(s) paquetage(s) déjà installé(s)" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "" +"afficher des marqueurs au fur et à mesure que le paquetage s'installe (avec -" +"v c'est bien(tm))" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "ne pas vérifier l'architecture du paquetage" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "ne pas vérifier le système d'exploitation du paquetage" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "ne pas vérifier l'espace disque avant l'installation" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "installer la documentation" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "installer le(s) paquetage(s)" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "" +"mettre à jour la base données, mais ne pas modifier le système de fichiers" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "ne pas vérifier les dépendances du paquetage" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "ne pas vérifier les sommes MD5 des fichiers" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "ne pas vérifier les sommes MD5 des fichiers" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "ne pas installer les fichiers de configuration" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" +"ne pas ré-arranger l'ordre d'installation des paquetages pour satisfaire les " +"dépendances" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "ne pas exécuter le(s) scriptlet(s) du paquetages" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "ne pas exécuter le scriptlet %%pre (s'il existe)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "ne pas exécuter le scriptlet %%post (s'il existe)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "ne pas exécuter le scriptlet %%preun (s'il existe)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "ne pas exécuter le scriptlet %%postun (s'il existe)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "n'exécuter aucun scriptlet trigger activé par ce paquetage" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "n'exécuter aucun scriplet %%triggerprein" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "n'exécuter aucun scriplet %%triggerin" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "n'exécuter aucun scriptlet %%triggerun" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "n'exécuter aucun scriptlet %%triggerpostun" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"mettre à jour avec un paquetage plus ancien (une m-à-j avec --force fait ça " +"automatiquement" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "afficher le pourcentage d'installation du paquetage" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "reloge le paquetage vers , si relogeable" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "reloge les fichiers du chemin vers " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "réinstalle si le paquetage est déjà installé" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "n'installe pas, mais dit si ça marcherait ou pas" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "mises à jour des paquetages" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "vérifier/demander à tous les paquetages" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "mode rpm vérifsign" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "vérifier/demander un package possèdant un fichier" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "vérifier/questionner le(s) paquetage(s) d'un même groupe" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "vérifier/questionner un fichier paquetage" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "" +"questionner/vérifier le(s) paquetage(s) grâce à un identifieur de paquetage" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "" +"questionner/vérifier le(s) paquetage(s) grâce à un identifieur d'entête" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "mode de requête de rpm" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "questionner/vérifier une instance d'entête" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "" +"questionner/vérifier le(s) paquetage(s) à partir de la transaction " +"d'installation" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "questionner le(s) paquetage(s) surveillé(s) par le paquetage" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "mode de vérification de rpm" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "vérifier/demander le(s) paquetage(s) qui requier(en)t une dépendance" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "vérifier/demander le(s) paquetage(s) qui fourni(ssen)t une dépendance" + +#: lib/poptQV.c:98 +#, fuzzy +msgid "do not glob arguments" +msgstr "aucun argument fourni" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "lister les fichiers de configuration" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "lister les fichiers documents" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "débite les informations de base des fichiers" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "lister les fichiers du paquetage" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "éviter les fichiers fantômes %%ghost" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "affiche la liste des fichiers et leur état" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "ne pas vérifier la taille des fichiers" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "ne pas vérifier le chemin du lien symbolique des fichiers" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "ne pas vérifier le possesseur des fichiers" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "ne pas vérifier le groupe possesseur des fichiers" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "ne pas vérifier les dates de modification des fichiers" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "ne pas vérifier les permissions des fichiers" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "ne pas vérifier la taille des fichiers" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "ne pas vérifier les fichiers du paquetage" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "ne pas vérifier les fichiers du paquetage" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "ne pas vérifier les dépendances du paquetage" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "ne pas exécuter le(s) script(s) de vérification" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "architecture manquante pour %s à %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "paquetage source attendu, paquetage binaire trouvé\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "le paquetage source ne contient pas de fichier .spec\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "échec du déballage de l'archive %s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " dans fichier " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "échec de %s sur le fichier %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "échec %s: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "format incorrect: %s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(ne contient pas de fichier)" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "remplacé " + +#: lib/query.c:166 +msgid "not installed " +msgstr "non installé " + +#: lib/query.c:169 +msgid "net shared " +msgstr "sur le réseau " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "fausse couleur" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(pas d'état) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(%3d iconnu) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "le paquetage n'as pas de liste de possesseurs/groupes de fichiers\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "" +"le paquetage n'a ni la liste des id ni celle des possesseurs de fichiers\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "le groupe %s ne contient aucun paquetage\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "aucun paquetage ne surveille %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "%s malformé: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "aucun paquetage ne correspond à %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "aucun paquetage ne requiert %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "aucun paquetage ne fournit %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "fichier %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "le fichier %s n'appartient à aucun paquetage\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "numéro de paquetage invalide: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "impossible de lire l'article %u\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "le paquetage %s n'est pas installé\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "tag inconnu: \"%s\"\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: échec de l'import.\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s n'est pas une clé publique blindée.\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: échec de la lecture d'import.\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: échec de headerRead\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "PAS OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (CLES MANQUANTES:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (CLES NONCREDIBLE:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: échec de l'ouverture: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Ne peut détruire le répertoire %s: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s échec du rmdir sur %s : répertoire non-vide\n" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Ne peut détruire le répertoire %s: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Ne peut détruire le répertoire %s: %s\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NON" + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "OUI" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" +"Les dépendances de type PreReq:, Provides: et Obsoletes: supportent les " +"versions." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"Le(s) nom(s) de fichier sont stockés en tant que triplets (NomRep,NomFich," +"IndexRep), pas en tant que chemin." + +#: lib/rpmds.c:868 +#, fuzzy +msgid "package payload can be compressed using bzip2." +msgstr "La charge utile du paquetage est compressée avec bzip2." + +#: lib/rpmds.c:873 +#, fuzzy +msgid "package payload can be compressed using xz." +msgstr "La charge utile du paquetage est compressée avec bzip2." + +#: lib/rpmds.c:876 +#, fuzzy +msgid "package payload can be compressed using lzma." +msgstr "La charge utile du paquetage est compressée avec bzip2." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" +"le(s) fichier(s) de la charge utile du paquetage ont \"./\" comme préfixe." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "le nom-version-révision du paquetage n'est pas implicitement fourni." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "les tags d'entête sont toujours triés après avoir été chargés." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" +"l'interprète du scriptlet peut utiliser des arguments à partir des entêtes." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "un lien en dur pourrait être installé sans être complet." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" +"les scriptlets du paquetage pourrait accéder à la base de données rpm " +"pendant l'installation." + +#: lib/rpmds.c:899 +#, fuzzy +msgid "internal support for lua scripts." +msgstr "- non supporté sur des chaînes de caractères\n" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "" +"les scriptlets du paquetage pourrait accéder à la base de données rpm " +"pendant l'installation." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "échec de l'ouverture de %s: %s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: n'est pas un paquetage rpm (ni une list de paquetages): %s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Préparation... " + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Préparation des paquetages pour l'installation..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Dépendances requises:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: n'est pas un paquetage rpm (ni une list de paquetages): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s ne peut être installé\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Récupération de %s\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "%s ignoré - échec du téléchargement - %s\n" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "le paquetage %s n'est pas relogeable\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "erreur en lisant %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "le fichier %s demande une version plus récente de RPM\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" spécifie plusieurs paquetages\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "impossible d'ouvrir %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Installation de %s\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "%s: n'est pas un paquetage rpm\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s: aucune signature disponible\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "échec de lecture: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "%s: n'est pas un paquetage rpm\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "impossible d'avoir le verrou %s sur %s/%s\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "impossible d'avoir le verrou %s sur %s/%s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "impossible d'ouvrir %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Impossible de renommer %s en %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Impossible de renommer %s en %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "différent" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "le paquetage %s est prévu pour une archicture %s" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "le paquetage %s est prévu pour le système d'exploitation %s" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "paquetage %s déjà installé" + +#: lib/rpmprob.c:128 +#, fuzzy, c-format +msgid "path %s in package %s is not relocatable" +msgstr "le chemin %s du paquetage %s n'est pas relogeable" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" +"le fichier %s entre en conflit avec les tentatives d'installation de %s et %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"le fichier %s de l'installation de %s entre en conflit avec le fichier du " +"paquetage %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "le paquetage %s (plus récent que %s) est déjà installé" + +#: lib/rpmprob.c:148 +#, fuzzy, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"installer le paquetage %s nécessite %%co sur le système de fichiers " +"%s" + +#: lib/rpmprob.c:158 +#, fuzzy, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"installer le paquetage %s nécessite % i-noeuds sur le système de " +"fichiers %s" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s est nécessaire pour %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(déjà installé) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s entre en conflit avec %s%s" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s est nécessaire pour %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "erreur %d inconnue rencontrée en manipulant le paquetage %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "il manque un second ':' à %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "architecture manquante à %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Ligne de données incomplète à %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Trop d'arguments dans la ligne de données à %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Mauvais numéro d'arch/OS: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "valeur par défaut imcomplète à la ligne %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Trop d'arguments pour la valeur par défaut de la ligne %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "':' manquant (trouvé 0x%02x) à %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "argument manquant pour %s à %s:%d\n" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "Impossible d'ouvrir %s à %s:%d: %s\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "architecture manquante pour %s à %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "mauvaise option '%s' à %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "système inconnu: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Contactez %s\n" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Impossible d'ouvrir %s en lecture: %s.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Ne peut détruire le répertoire %s: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Impossible d'ouvrir %s: %s\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Impossible d'ouvrir %s: %s\n" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s(%s-%s-%s) échec du scriptlet, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s(%s-%s-%s) échec du scriplet, code de sortie %d\n" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s(%s-%s-%s) échec du scriplet, code de sortie %d\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "tag inconnu" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(déjà installé) " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "impossible d'ouvrir la base de données Package dans %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "'(' supplémentaire dans le label du paquetage: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "'(' manquante dans le label du paquetage: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "')' manquante dans le label du paquetage: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: échec de la lecture de la clé publique.\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "taille du sigh(%d): PASBON, la lecture retourne %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, fuzzy, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh pad(%d): PASBON, %d octets lus\n" + +#: lib/signature.c:227 +#, fuzzy, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "taille du sigh(%d): PASBON, la lecture retourne %d\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +#, fuzzy +msgid "MD5 digest:" +msgstr "Somme MD5: " + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "Hachage de l'entête SHA1: " + +#: lib/signature.c:489 +msgid "Header " +msgstr "Entête " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Verification de signature: MAUVAIS PARAMETRES\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Signature: INCONNUE (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "échec %s: %s\n" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "manquant %c %s" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "dépendances non satisfaites pour %s: " + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "{ manquant après %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "} manquant après %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "tag format vide" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "tag name vide" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "tag inconnu" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] attendu à la fin du tableau" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "] innatendu" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "} innatendu" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? attendu dans l'expression" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ attendu après ? dans l'expression" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} attendu dnas l'expression" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": attendu derrière la sous-expression de ?" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ attendu après : dans l'expression" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| attendu a la fin de l'expression" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "itérateur de tableau utilisé avec des tableaux de tailles différentes" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "ne peut ouvrir l'index %s en utilisant db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "aucun dbpath n'a été fourni\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "erreur(%d) en attrapant les articles \"%s\" de l'index %s\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: on saute" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "erreur(%d) en stockant l'article nº%d dans %s\n" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: échec de fseek: %s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: échec de l'ouverture: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: on saute" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: l'entête nº%u endommagé a été téléchargé -- ignoré.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "erreur(%d) en attrapant les articles \"%s\" de l'index %s\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "" +"erreur(%d) en affectant l'article de l'entête nº%d pour l'enlèvement de %s\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "" +"erreur(%d) en affectant l'article de l'entête nº%d pour l'enlèvement de %s\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: impossible de lire l'entête à 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "erreur(%d) en affectant les articles \"%s\" de l'index %s\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "erreur(%d) en stockant l'article \"%s\" dans %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "erreur(%d) en enlevant l'article \"%s\" de %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "erreur(%d) en allouant une nouvelle instance de paquetage\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "erreur(%d) en stockant l'article %s dans %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "aucun dbpath fourni" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "Ne peut détruire le répertoire %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "l'entête nº%u dans la base de données n'est pas bon -- ignoré.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "impossible d'ajouter l'article qui était au départ à %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"Ne peut reconstruire la base de données: la base originale reste telle " +"qu'elle est\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "Ne peut remplacer la vieille base de données par la nouvelle!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "" +"remplacer les fichiers dans %s avec les fichiers de %s pour faire une " +"récupération" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "Ne peut détruire le répertoire %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "erreur db%d(%d) de %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "erreur db%d(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "impossible d'avoir le verrou %s sur %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "partagé" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "exclusif" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "vérif. db index %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "options de db inconnues: \"%s\" ignoré.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s est une valeur numérique invalide, ignoré\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s est une valeur 'long' trop petite ou trop grande, ignoré\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s est une valeur entière trop petite ou trop grande, ignoré\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Impossible de lire le fichier spec à %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Impossible d'ouvrir %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Impossible de lire le fichier spec à %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "échec de la création de %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Impossible de se connecter au serveur" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "impossible d'ouvrir %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "Ne peut détruire le répertoire %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Impossible de renommer %s en %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Impossible de lire %s: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "impossible d'ouvrir %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "échec de la création de %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "La macro %%%s a un corps sans fin\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "La macro %%%s ne peut être expansée\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Impossible de lire le fichier spec à %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== %d actif(s) %d vide(s)\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(vide)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(vide)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "La macro %%%s a un corps sans fin\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "La macro %%%s a un nom illégal (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "La macro %%%s a des options non-terminées\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "La macro %%%s a un corps vide\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "La macro %%%s ne peut être expansée\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "La macro %%%s a un nom illégal (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "La macro %%%s (%s) n'est plus utilisée en dessous du niveau %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Option inconnue %c dans %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "%c non terminé: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Un %% est suivi d'une macro in-analysable\n" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "erreur en créant le fichier temporaire %s\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Fichier %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Le fichier %s est plus petit que %u octets\n" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "Ne peut détruire le répertoire %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, fuzzy, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "- non supporté sur des chaînes de caractères\n" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "- non supporté sur des chaînes de caractères\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: échec de Fwrite: %s\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "numéro de paquetage invalide: %s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: échec de fseek: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(pas d'erreur)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "erreur fatale: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "erreur: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "attention: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "l'allocation de mémoire (%u octets) a retourné NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "signature V3 DSA: " + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(pas d'erreur)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Impossible de lire le fichier spec à %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: échec de Fwrite: %s\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: échec de fseek: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "echec de l'exec\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "échec de gpg à ecrire la signature\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "impossible de lire la signature\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "échec de makeTempFile\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: échec de writeLead: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: échec de rpmWriteSignature: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "échec de l'ouverture de %s: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: échec de la lecture de la liste de paquetages: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "ne pas vérifier la signature de l'entete+charge_utile" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: trop d'uid\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: trop d'uid\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: trop d'uid\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: trop de gid\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: trop de gid\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: trop de gid\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "" +#~ "ignorer la(les) relation(s) entre les noms de paquetages [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "rajouter à la transaction les paquetages suggérés" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "ne pas suggérer de résolution pour les dépendances manquantes" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Impossible d'exécuter %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps ne peut être spécifié que pour la (re)construction, la " +#~ "recompilation, l'(dés)installation, et la vérification" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) ne peut être utilisé que pour la (dés)installation, les " +#~ "requêtes et la reconstruction de la base de données" + +#, fuzzy +#~ msgid "detect file conflicts between packages" +#~ msgstr "reloger des fichiers d'un paquetage non relogeable" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "la base de données temporarire %s existe déjà\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "" +#~ "questionner/vérifier le(s) paquetage(s) grâce à un identifieur de fichier" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "%%_signature invalide and le fichier de macros.\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: déjà signé par la clé d'ID %s, ignoré\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Tampon cible en surcharge\n" + +#~ msgid "no files to sign\n" +#~ msgstr "aucun fichier à signer\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "ne peut accéder au fichier %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign est réservé à la construction d'un paquetage" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "ne pas vérifier la(les) signature(s) GPG V3 DSA" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "ne pas vérifier la(les) signature(s) PGP V3 RSA/MD5" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "signer le(s) paquetage(s) (identique à --resign)" + +#~ msgid "generate signature" +#~ msgstr "génération de signature" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "%%_signature spécifiée invalide dans le fichier de macros\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "échec du TIMECHECK: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "générer un entête compatible avec l'emballage rpm4" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Erreur interne au traitement de l'argument (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: échec de la lecture de la clé publique.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: ouverture de %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: échec de fseek: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s n'est pas un paquetage RPM\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: lecture de l'entête de %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Génération de la signature: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "générer une signature PGP/GPG" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "aucun paquetage spécifié pour reconstruction" + +#~ msgid "no spec files given for build" +#~ msgstr "aucun fichier spec spécifié pour construction" + +#~ msgid "no tar files given for build" +#~ msgstr "aucun fichier tar spécifié pour construction" + +#, fuzzy +#~ msgid "%s failed\n" +#~ msgstr "échec %s: %s\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Profondeur de récursion(%d) plus grande que le max(%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: nom de tag non-reconnu: \"%s\" ignoré\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: on saute" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(fourni par rpmlib)" + +#~ msgid "(cached)" +#~ msgstr "(caché)" + +#~ msgid "(db files)" +#~ msgstr "(fourni par fichiers db)" + +#~ msgid "(db provides)" +#~ msgstr "(fourni par la db)" + +#~ msgid "(added files)" +#~ msgstr "(fichiers ajoutés)" + +#~ msgid "(added provide)" +#~ msgstr "(fourniture ajoutée)" + +#~ msgid "url port must be a number\n" +#~ msgstr "le port dans l'url doit être un nombre\n" + +#, fuzzy +#~ msgid "follow command line symlinks" +#~ msgstr "suivre les liens symboliques de la ligne de commande" + +#, fuzzy +#~ msgid "logical walk" +#~ msgstr "marche logique" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "ne pas modifier les répertoires" + +#, fuzzy +#~ msgid "don't get stat info" +#~ msgstr "ne pas prendre les info stat" + +#, fuzzy +#~ msgid "physical walk" +#~ msgstr "marche physique" + +#, fuzzy +#~ msgid "return dot and dot-dot" +#~ msgstr "renvoyer point et point-point" + +#, fuzzy +#~ msgid "don't cross devices" +#~ msgstr "ne mélanger pas les périphériques" + +#, fuzzy +#~ msgid "return whiteout information" +#~ msgstr "ne pas renvoyer d'information" + +#~ msgid "debug package state machine" +#~ msgstr "déboguer la machine à état du paquetage" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "" +#~ "questionner/vérifier le(s) paquetage(s) à partir de la transaction " +#~ "d'installation" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "" +#~ "questionner/vérifier le(s) paquetage(s) à partir de la transaction " +#~ "d'installation" + +#, fuzzy +#~ msgid "do not read headers" +#~ msgstr "%s: impossible de lire l'entête à 0x%x\n" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Le fichier ne correpond pas à prefix (%s): %s\n" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "Ne peut détruire le répertoire %s: %s\n" + +#, fuzzy +#~ msgid "use threads for package state machine" +#~ msgstr "déboguer la machine à état du paquetage" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: échec du scriptlet %s (%d), on saute %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() n'a pas pu renvoyer la taille: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() n'a pu renvoyer les points de montage: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "échec de stat sur %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "le fichier %s est sur un périphérique inconnu\n" + +#, fuzzy +#~ msgid "use threads for file state machine" +#~ msgstr "déboguer la machine à états du fichier de la charge utile" + +#~ msgid "cannot open %s index\n" +#~ msgstr "ne peut ouvrir l'index %s\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Impossible d'ouvrir %s: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Impossible d'ouvrir %s: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Incapable d'ouvrir un fichier temporaire.\n" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "système inconnu: %s\n" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Macro %%%.*s non trouvé, ignoré\n" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: échec de la lecture de la clé publique.\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "ligne %d: deuxième liste %%files\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "La dépendance \"B\" a besoin d'une epoch (on suppose qu'elle est la même " +#~ "que pour \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "type de données %d non supporté\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "on enlève %s \"%s\" des relations de Ttri.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "BOUCLE:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "échec de rpmtsOrder, %d éléments toujours présents\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "Taille de Entête+Charge_utile: " + +#, fuzzy +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Options de vérifications (avec -V ou --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp non trouvé: " + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "ne peut ouvrir le fichier %s: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "échec de pgp\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp incapable d'écrire la signature\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "" +#~ "Vous devez affecter une valeur à \"%%_pgp_name\" dans votre fichier de " +#~ "macros\n" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "tag inconnu" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "signature V3 DSA: " + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "signature V3 DSA: " + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "Somme MD5 erronée: NONSUPPORTE\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot ne peut pas être \"/\": %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Le fichier spec ne peut pas utiliser BuildRoot\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "" +#~ "chercher les chaînes de caractères i18n dans le catalogue du fichier spec" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "générer un entête compatible avec l'emballage rpm[23]" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "impossible de créer %%%s %s\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "impossible d'écrire dans %%%s %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "ne peut faire la requête sur %s: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "echec de l'exec\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "déboguer la manipulation de cache d'URL" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "substituer les section i18n dans le fichier spec" + +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "Impossible d'ouvrir la base de données Solve dans %s\n" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " Résolutions suggérées:\n" + +#~ msgid "(index out of range)" +#~ msgstr "(index hors bornes)" + +#~ msgid "Success" +#~ msgstr "Succès" + +#~ msgid "Bad server response" +#~ msgstr "Mauvaise réponse du serveur" + +#~ msgid "Server I/O error" +#~ msgstr "Erreur d'E/S avec le serveur" + +#~ msgid "Server timeout" +#~ msgstr "Timeout du serveur" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Impossible de résoudre l'adresse IP du serveur" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Impossible de retrouver le nom d'hôte du serveur" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Impossible d'établir une connexion de données avec le serveur" + +#~ msgid "I/O error to local file" +#~ msgstr "erreur d'E/S dans le fichier local" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Erreur en mettant le serveur distant en mode passif" + +#~ msgid "File not found on server" +#~ msgstr "Fichier non trouvé sur le serveur" + +#~ msgid "Abort in progress" +#~ msgstr "Abandon en cours" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Erreur inconnue ou inattendue" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "" +#~ "ne pas mettre à jour le cache de la base de données, afficher seulement " +#~ "les chemins du paquetage" + +#, fuzzy +#~ msgid "File tree walk options:" +#~ msgstr "Otions de signatures" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: la macro %%{_cache_dbpath} est mal configurée.\n" + +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: échec de l'opération sur le cache: ec %d.\n" + +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: échec de headerGetEntry\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "échec de l'expansion de %s à %s:%d \"%s\"\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "Impossible d'expanser %s\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "Impossible de lire %s, HOME trop gros.\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s échec du rmdir sur %s: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "Limite atteinte pour %%docdir\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "ligne %d: %%patch -b a besoin d'un argument: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "ligne %d: %%patch -z a besoin d'un argument: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "ligne %d: mauvais argument à %%patch: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "ligne %d: %%patch -p a besoin d'un argument: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "ligne %d: mauvais argument à %%patch: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "Trop de patchs !!!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "ligne %d: mauvais argument a %%patch: %s\n" + +#~ msgid "debug option/argument processing" +#~ msgstr "déboguer le traitement des options/arguments" + +#~ msgid "skip %%license files" +#~ msgstr "éviter les fichiers %%license" + +#~ msgid "skip %%readme files" +#~ msgstr "éviter les fichier %%readme" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "échec de lecture: %s (%d)\n" + +#~ msgid "rollback takes a time/date stamp argument" +#~ msgstr "le roulement arrière prend comme argument une date" + +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "argument date du roulement arrière malformé" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "" +#~ "sauver les fichiers du paquetage désinstallé en les renommant dans un " +#~ "sous-répertoire" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "" +#~ "sauvegarder les fichiers du paquetage désinstallé en les ré-empaquetant" + +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "" +#~ "désinstaller le(s) nouveau(x), ré-installer le(s) vieux paquetages, comme " +#~ "c'était le cas pour cette " + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Impossible de recharger l'entête de signature\n" + +#~ msgid "Repackaging..." +#~ msgstr "Ré-emballage..." + +#~ msgid "Repackaging erased files..." +#~ msgstr "Ré-emballage des fichiers effacés..." + +#~ msgid "Upgrading..." +#~ msgstr "Mise à jour..." + +#~ msgid "Upgrading packages..." +#~ msgstr "Mise à jour des paquetages..." + +#~ msgid "Rollback packages (+%d/-%d) to %-24.24s (0x%08x):\n" +#~ msgstr "" +#~ "Roulement arrière des paquetages (+%d/-%d) jusqu'à %-24.24s (0x%08x):\n" + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "Récupération de %s\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "erreur dans la lecteur de l'entête du paquetage\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== enregistrement des relations de Ttri\n" + +#, fuzzy +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== Ttri des paquetages (ordre, #prédécesseurs, #succeseurs, " +#~ "arbre, profondeur)\n" + +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== successeurs seulement (%d octets)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== continuation du Ttri ...\n" + +#, fuzzy +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "" +#~ "========== Répertoires non explicitement inclus dans le paquetage:\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "le répertoire %s a été créé avec les permissions %04o.\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "le répertoire %s a été créé avec les permissions %04o.\n" + +#, fuzzy +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "rajout de %d entrées à l'index %s.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "utilisation de l'API libio(3) désactivée" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: %s(%s-%s-%s) début du scriplet %ssynchrone\n" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n" +#~ msgstr "%s: %s(%s-%s-%s) redondance ignorée \"%s\".\n" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) %ssynchronous scriptlet start\n" +#~ msgstr "%s: %s(%s-%s-%s) début du scriplet %ssynchrone\n" + +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s avait %d fichiers, test = %d\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "numéro d'article de paquetage: %u\n" + +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "le paquetage %s a un(e) %s non-satisfaites: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s ignoré à cause du drapeau missingok\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== relogements\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d exclus %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d reloge %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "exclusion de %s %s\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "relogement de %s vers %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "relogement du répertoire %s vers %s\n" + +#~ msgid "Adding goal: %s\n" +#~ msgstr "Nouveau but: %s\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... en tant que %s\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "installation des paquetages binaires\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "%d paquetage(s) source(s) et %d paquetage(s) binaire(s) trouvé(s)\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "installation des paquetages binaires\n" + +#~ msgid "Adding: %s\n" +#~ msgstr "Ajout de: %s\n" + +#~ msgid "Suggesting: %s\n" +#~ msgstr "Suggestion: %s\n" + +#~ msgid "mounted filesystems:\n" +#~ msgstr "systèmes de fichiers montés:\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "%5d 0x%04x %5u %12ld %12ld %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "relogement de %s vers %s\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "Taille attendue: %12d = tête(%d)+sigs(%d)+pad(%d)+données(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr "Taille actuelle: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Signature: taille(%d)+pad(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "Taille sig PGP: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "J'ai %d octets de sig PGP\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "Taille sig GPG: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "J'ai %d octets de sig GPG\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "répertoire %s exclus\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "paquetage source attendu, paquetage binaire trouvé\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "aucun paquetage ne correspond à %s: %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "" + +#~ msgid "sanity checking %d elements\n" +#~ msgstr "vérification de santé de %d éléments\n" + +#~ msgid "computing %d file fingerprints\n" +#~ msgstr "calcul de %d empreintes de fichier\n" + +#~ msgid "computing file dispositions\n" +#~ msgstr "calcul de la disposition des fichiers\n" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "fermeture db environnement %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "enlèvement db environnement %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "ouverture db environnement %s/%s %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "fermeture index db %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "ouverture index db %s/%s %s mode=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "verrouillage index db %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "enlèvement \"%s\" à l'index %s.\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "enlèvement de %d entrées à l'index %s.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "rajout de \"%s\" à l'index %s.\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "rajout de %d entrées à l'index %s.\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "enlèvement de %s après la reconstruction réussie en db3.\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "reconstruction de la base de données de %s en %s\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "création du répertoire %s\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "création du répertoire %s: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "ouverture d'une vieille base de données avec dbapi %d\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "ouverture d'une nouvelle base de données avec dbapi %d\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "destruction du répertoire %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "fermeture index db %s/%s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "ouverture index db %s/%s %s mode=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: lecture de %s: %s\n" + +#~ msgid "Unable to write final header\n" +#~ msgstr "Impossible d'écrire l'entête définitif\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "" +#~ "la version 1 de l'emballage n'est pas supportée par cette version de RPM\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "" +#~ "seuls les emaballages avec un numéro de version majeur <= 4 sont " +#~ "supportés par cette version de rpm\n" + +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: ne peut signer un emballage v1\n" + +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: ne peut resigner un emballage v2\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: Aucune signature disponible (v1.0 RPM)\n" diff --git a/po/insert-header.sin b/po/insert-header.sin new file mode 100644 index 0000000..b26de01 --- /dev/null +++ b/po/insert-header.sin @@ -0,0 +1,23 @@ +# Sed script that inserts the file called HEADER before the header entry. +# +# At each occurrence of a line starting with "msgid ", we execute the following +# commands. At the first occurrence, insert the file. At the following +# occurrences, do nothing. The distinction between the first and the following +# occurrences is achieved by looking at the hold space. +/^msgid /{ +x +# Test if the hold space is empty. +s/m/m/ +ta +# Yes it was empty. First occurrence. Read the file. +r HEADER +# Output the file's contents by reading the next line. But don't lose the +# current line while doing this. +g +N +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/is.gmo b/po/is.gmo new file mode 100644 index 0000000..a6316fb Binary files /dev/null and b/po/is.gmo differ diff --git a/po/is.po b/po/is.po new file mode 100644 index 0000000..3579cbf --- /dev/null +++ b/po/is.po @@ -0,0 +1,3720 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.0.3\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2001-07-12 13:25+0000\n" +"Last-Translator: Richard Allen \n" +"Language-Team: is \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM útgáfa %s\n" + +#: cliutils.c:31 +#, fuzzy, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Höfundarréttur (C) 1998-2000 - Red Hat Inc" + +#: cliutils.c:32 +#, fuzzy, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Þessu má dreifa frjálst samkvæmt skilmálum GNU GPL" + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "safnskráarsmíð brást: %s\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "" + +#: rpmqv.c:153 +msgid "only installation and upgrading may be forced" +msgstr "" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" + +#: rpmqv.c:230 +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" + +#: rpmqv.c:234 +msgid "--test may only be specified during package installation and erasure" +msgstr "" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot þegar skilgreind, hunsa %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "" + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "" + +#: rpmbuild.c:180 +#, fuzzy +msgid "do not verify build dependencies" +msgstr "ekki skoða pakkaskilyrðin" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" + +#: rpmbuild.c:231 +#, fuzzy +msgid "Failed build dependencies:\n" +msgstr "gat ekki útbúið pakkaskilyrði:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Get ekki opnað spec skrána %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Gat ekki opnað pípu í tar: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Gat ekki lesið spec skrá frá %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Gat ekki endurnefnt %s sem %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "gat ekki skoðað %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Skráin %s er ekki venjuleg skrá.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Skráin %s virðist ekki vera specskrá.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Þýði fyrir markkerfi: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Þýði fyrir markkerfi %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "" + +#: rpmkeys.c:23 +#, fuzzy +msgid "verify package signature(s)" +msgstr "búa til undirskrift" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +msgid "Keyring options:" +msgstr "" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "setja inn pakka" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "búa til undirskrift" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, fuzzy, c-format +msgid "Could not exec %s: %s\n" +msgstr "Gat ekki keyrt %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "" + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "" + +#: rpmspec.c:26 +msgid "parse spec file(s) to stdout" +msgstr "" + +#: rpmspec.c:28 +msgid "query spec file(s)" +msgstr "" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "" + +#: rpmspec.c:45 +msgid "Spec options:" +msgstr "" + +#: rpmspec.c:90 +msgid "no arguments given for parse" +msgstr "" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Get ekki opnað tempi skrá.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Gat ekki keyrt %s (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "vantar '(' í %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "vantar ')' í %s %s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Ógilt %s tákn: %s\n" + +#: build/files.c:443 +#, fuzzy, c-format +msgid "Missing %s in %s %s\n" +msgstr "vantar '(' í %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Ógilt %s tákn: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Tvær skrár á einni línu: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Skráin er tvítekin: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s gat ekki eytt %s: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Skráin fannst ekki: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Skráin fannst ekki: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, fuzzy, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: Fseek brást: %s\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "%s brást\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "" + +#: build/files.c:1688 +#, fuzzy, c-format +msgid "Glob not permitted: %s\n" +msgstr "Gat ekki opnað PreUn skrá: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Skráin fannst ekki með 'glob': %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Skráin fannst ekki með 'glob': %s\n" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Gat ekki opnað %%files skrána %s: %s\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "lína: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Ógild skrá %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "%s brást\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "safnskráarsmíð brást á skrá %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "safnskráarsmíð brást: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "lína: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Gat ekki opnað PreIn skrá: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Gat ekki opnað PreUn skrá: %s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Gat ekki opnað PreIn skrá: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Gat ekki opnað PostIn skrá: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Gat ekki opnað PostUn skrá: %s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Gat ekki opnað PostIn skrá: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Get ekki opnað VerifyScript skrá: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Óþekkt tegund táknmyndar: %s\n" + +#: build/pack.c:395 +#, fuzzy +msgid "Unable to create immutable header region.\n" +msgstr "Get ekki lesið haus úr %s: %s\n" + +#: build/pack.c:415 +#, fuzzy +msgid "Unable to write temp header\n" +msgstr "Gat ekki ritað haus í %s: %s\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "" + +#: build/pack.c:491 +#, fuzzy +msgid "Unable to reload signature header.\n" +msgstr "Get ekki lesið haus úr %s: %s\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Get ekki ritað í pakka: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Get ekki opnað sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Get ekki lesið haus úr %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Gat ekki ritað haus í %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Get ekki lesið innihald %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Get ekki ritað innihald í %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Skrifaði: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "lína %d: %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Gat ekki keyrt %s (%s): %s\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "lína %d: Óleyfilegur rofi %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "lína %d: Villa við þáttun %s: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "lína %d: Óleyfilegur rofi %s: %s\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Get ekki opnað táknmynd %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Gat ekki lesið táknmynd %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Óþekkt tegund táknmyndar: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "lína %d: Tag tekur einungis eitt tákn: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "lína %d: Ólöglegt tákn '-' í %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "lína %d: Ólöglegt tákn '-' í %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "lína %d: Ólöglegt tákn '-' í %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "lína %d: Skemmt tag: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "lína %d: Tómt tag: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "lína %d: Epoch/Serial svæðið verður að innihalda tölu: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "lína %d: Óleyfilegur rofi %s: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Slæmt ílag: %s: %s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "Ógilt %s tákn: %s\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "pakkinn inniheldur enga .spec skrá\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "lína %d: Ógilt viðfang við %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "Ógilt %s tákn: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "" + +#: build/parseReqs.c:112 +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" + +#: build/parseReqs.c:137 +msgid "Versioned file name not permitted" +msgstr "" + +#: build/parseReqs.c:154 +msgid "Version required" +msgstr "" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "lína %d: Óleyfilegur rofi %s: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "lína %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "lína %d: Villa við þáttun %s: %s\n" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "lína %d: Epoch/Serial svæðið verður að innihalda tölu: %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "lína %d: Skemmt tag: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "lína %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Get ekki opnað %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Gat ekki lesið spec skrá frá %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Gat ekki lesið spec skrá frá %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Gat ekki lesið spec skrá frá %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Gat ekki opnað pípu í tar: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "lína %d: Villa við þáttun %s: %s\n" + +#: build/policies.c:251 +#, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "vantar '(' í %s %s\n" + +#: build/policies.c:267 +#, c-format +msgid "Too many arguments in line: %s\n" +msgstr "" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "%s brást\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "lína %d: Óleyfilegur rofi %s: %s\n" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Gat ekki búið til undirferli (fork) %s: %s\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Gat ekki keyrt %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Gat ekki búið til undirferli (fork) %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s brást\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "gat ekki ritað öll gögn í %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "gpg get ekki lesið undirskriftina\n" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "%s brást\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "%s rmdir %s brást: %s\n" + +#: build/rpmfc.c:999 +#, fuzzy, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "%s rmdir %s brást: %s\n" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "Skrá %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "gat ekki fundið %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Harðar tengingar vantar" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr "" + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "get ekki opnað pakka gagnagrunn í\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "" + +#: lib/formats.c:485 +#, fuzzy +msgid "(not an OpenPGP signature)" +msgstr "búa til undirskrift" + +#: lib/formats.c:588 +msgid "normal" +msgstr "" + +#: lib/formats.c:591 +msgid "replaced" +msgstr "" + +#: lib/formats.c:594 +msgid "not installed" +msgstr "" + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "deildann" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "vantar %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "Óþekkt tegund táknmyndar: %s\n" + +#: lib/formats.c:645 +msgid "(not a string)" +msgstr "" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s vistað sem %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir %s brást: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s gat ekki eytt %s: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s búið til sem %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s rmdir %s brást: %s\n" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: Fseek brást: %s\n" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +#, fuzzy +msgid "print macro expansion of EXPR" +msgstr "prenta útvíkkun fjölva +" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +#, fuzzy +msgid "don't verify package digest(s)" +msgstr "ekki skoða pakkaskilyrðin" + +#: lib/poptALL.c:176 +#, fuzzy +msgid "don't verify database header(s) when retrieved" +msgstr "ekki skoða pakkaskilyrðin" + +#: lib/poptALL.c:178 +#, fuzzy +msgid "don't verify package signature(s)" +msgstr "ekki skoða pakkaskilyrðin" + +#: lib/poptALL.c:181 +#, fuzzy +msgid "send stdout to CMD" +msgstr "senda frálag í " + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "sýna endanlega rpmrc og stillingar fjölva" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "prenta útgáfunúmer rpm sem verið er að nota" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +#, fuzzy +msgid "do not install configuration files" +msgstr "birta einungis stillingaskrár (innifelur -l)" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "" + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "" + +#: lib/poptI.c:164 +#, fuzzy +msgid "install package(s)" +msgstr "setja inn pakka" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "ekki yfirfara MD5 undirritun skráa" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "ekki yfirfara MD5 undirritun skráa" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "birta einungis stillingaskrár (innifelur -l)" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "" + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "uppfæra pakka" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "" + +#: lib/poptQV.c:75 +#, fuzzy +msgid "query/verify a package file" +msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#: lib/poptQV.c:78 +#, fuzzy +msgid "query/verify package(s) with package identifier" +msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#: lib/poptQV.c:80 +#, fuzzy +msgid "query/verify package(s) with header identifier" +msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "" + +#: lib/poptQV.c:85 +#, fuzzy +msgid "query/verify a header instance" +msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#: lib/poptQV.c:87 +#, fuzzy +msgid "query/verify package(s) from install transaction" +msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "fyrirspurn/yfirferð á pakkana sem hafa pakkaþarfir" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "fyrirspurn/yfirferð á pakkana sem uppfylla þarfir annara pakka" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "ekki yfirfara stærð skráa" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "ekki yfirfara symlink slóð skráa" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "ekki yfirfara eiganda skráa" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "ekki yfirfara hop skráa" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "ekki yfirfara heimildir skráa" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "ekki yfirfara stærð skráa" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "ekki yfirfara skrárnar í pakkanum" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "ekki yfirfara skrárnar í pakkanum" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "ekki skoða pakkaskilyrðin" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "viðfang vantar fyrir %s á %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "pakkinn inniheldur enga .spec skrá\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "" + +#: lib/psm.c:849 +msgid " on file " +msgstr "" + +#: lib/psm.c:967 +#, fuzzy, c-format +msgid "%s failed on file %s: %s\n" +msgstr "gat ekki opnað %s: %s\n" + +#: lib/psm.c:970 +#, fuzzy, c-format +msgid "%s failed: %s\n" +msgstr "%s brást\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "" + +#: lib/query.c:160 +msgid "normal " +msgstr "" + +#: lib/query.c:163 +msgid "replaced " +msgstr "" + +#: lib/query.c:166 +msgid "not installed " +msgstr "" + +#: lib/query.c:169 +msgid "net shared " +msgstr "" + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "" + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "" + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, fuzzy, c-format +msgid "malformed %s: %s\n" +msgstr "Get ekki lesið %s: %s.\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, fuzzy, c-format +msgid "no package matches %s: %s\n" +msgstr "get ekki opnað pakka gagnagrunn í\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "Óþekkt tegund táknmyndar: %s\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: Fseek brást: %s\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: Fseek brást: %s\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: Fseek brást: %s\n" + +#: lib/rpmchecksig.c:116 +#, fuzzy, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: Fseek brást: %s\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr "" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr "" + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr "" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr "" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "gat ekki búið til %s: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%5d færa %s -> %s\n" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "gat ekki búið til %s: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "gat ekki búið til %s: %s\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "" + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +msgid "package scriptlets can be expanded at install time." +msgstr "" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "get ekki opnað pakka gagnagrunn í\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "" + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "" + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +#, fuzzy +msgid "Failed dependencies:\n" +msgstr "gat ekki útbúið pakkaskilyrði:\n" + +#: lib/rpminstall.c:305 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "get ekki opnað pakka gagnagrunn í\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "Skráin %s er ekki venjuleg skrá.\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "get ekki opnað pakka gagnagrunn í\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "búa til undirskrift" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "get ekki opnað pakka gagnagrunn í\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "gat ekki búið til %%%s %s\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "%5d færa %s -> %s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "gat ekki opnað %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Gat ekki endurnefnt %s sem %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Gat ekki endurnefnt %s sem %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "" + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "" + +#: lib/rpmprob.c:172 +#, c-format +msgid "%s is obsoleted by %s%s" +msgstr "" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "vantar seinni ':' á %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "viðfang vantar fyrir %s á %s:%d\n" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "get ekki opnað %s á %s:%d: %s\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "ólöglegur rofi '%s' á %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Get ekki opnað %s til lesturs: %s.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "gat ekki búið til %s: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Gat ekki búið til undirferli (fork) %s: %s\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Gat ekki búið til undirferli (fork) %s: %s\n" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s brást\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s brást\n" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s brást\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "Óþekkt tegund táknmyndar: %s\n" + +#: lib/rpmte.c:820 +msgid "install" +msgstr "" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "get ekki opnað pakka gagnagrunn í %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:211 +#, fuzzy, c-format +msgid "missing '(' in package label: %s\n" +msgstr "vantar '(' í %s %s\n" + +#: lib/rpmts.c:219 +#, fuzzy, c-format +msgid "missing ')' in package label: %s\n" +msgstr "vantar '(' í %s %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: Fseek brást: %s\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "ekki yfirfara SHA1 undirritunina" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s brást\n" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "vantar %s" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Óuppfyllt pakkaskilyrði fyrir %s-%s-%s: " + +#: lib/headerfmt.c:342 +#, fuzzy +msgid "missing { after %" +msgstr "vantar %s" + +#: lib/headerfmt.c:364 +#, fuzzy +msgid "missing } after %{" +msgstr "vantar %s" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "" + +#: lib/headerfmt.c:393 +#, fuzzy +msgid "unknown tag" +msgstr "Óþekkt tegund táknmyndar: %s\n" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "get ekki opnað %s index með db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: Fseek brást: %s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: Fseek brást: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2228 +#, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "" + +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "" + +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "gat ekki búið til %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "deildann" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "einka" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Gat ekki lesið spec skrá frá %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Gat ekki búið til undirferli (fork) %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Gat ekki lesið spec skrá frá %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "gat ekki búið til %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Gat ekki tengst þjóninum" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "gat ekki opnað %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "Gat ekki endurnefnt %s sem %s: %m\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Gat ekki endurnefnt %s sem %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Get ekki lesið %s: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "gat ekki opnað %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "gat ekki búið til %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, c-format +msgid "%s terminated abnormally\n" +msgstr "" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "%s brást\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Gat ekki lesið spec skrá frá %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== virkt %d tómt %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(tómt)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(tómt)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Óþekkt viðfang %c í %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Skrá %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Skráin %s er minni en %u bæti\n" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "gat ekki búið til %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s brást\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: Fseek brást: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(engin villa)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "banvæn villa: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "villa: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "aðvörun: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "minnisfrátekt (%u bæta) skilaði NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(engin villa)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Gat ekki lesið spec skrá frá %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fseek brást: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "ggp brást\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg get ekki lesið undirskriftina\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "get ekki lesið undirskriftina\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "pgp brást\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "%s brást\n" + +#: tools/rpmgraph.c:143 +#, fuzzy, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s rmdir %s brást: %s\n" + +#: tools/rpmgraph.c:220 +#, fuzzy +msgid "don't verify header+payload signature" +msgstr "ekki skoða pakkaskilyrðin" + +#, fuzzy +#~ msgid "add suggested packages to transaction" +#~ msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Gat ekki keyrt %s: %s\n" + +#, fuzzy +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#, fuzzy +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "ekki yfirfara SHA1 undirritunina" + +#, fuzzy +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "ekki yfirfara MD5 undirritun skráa" + +#~ msgid "generate signature" +#~ msgstr "búa til undirskrift" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: Fseek brást: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek brást: %s\n" + +#~ msgid "%s failed\n" +#~ msgstr "%s brást\n" + +#~ msgid "url port must be a number\n" +#~ msgstr "gátt slóðar verður að vera tala\n" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "fyrirspurn/yfirferð á pakkann sam á skrá" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "gat ekki búið til %s: %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() skilaði ekki stærð: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "gat ekki skoðað %s: %s\n" + +#~ msgid "cannot open %s index\n" +#~ msgstr "get ekki opnað %s index\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Get ekki opnað %s: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Get ekki opnað %s: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Get ekki opnað tempi skrá.\n" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "Óþekkt eða óvænt villa" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Fjölvi %%%.*s fannst ekki. Sleppi\n" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: Fseek brást: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp brást\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp gat ekki lesið undirskriftina\n" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "búa til undirskrift" + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "búa til undirskrift" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "get ekki ritað í %%%s %s\n" + +#, fuzzy +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "get ekki opnað pakka gagnagrunn í %s\n" + +#~ msgid "Success" +#~ msgstr "Tókst" + +#~ msgid "Bad server response" +#~ msgstr "Þjónninn svaraði rangt" + +#~ msgid "Server I/O error" +#~ msgstr "Les/ritvilla á þjóninum" + +#~ msgid "Server timeout" +#~ msgstr "Þjónninn tímaði út" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Gat ekki flett upp vistfangi þjónsins" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Gat ekki flett upp heiti þjónsins" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Gat ekki opnað gagnatengingu við þjóninn" + +#~ msgid "I/O error to local file" +#~ msgstr "Les/ritvilla í skrána" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Ekki tókst að fá þjóninn í \"passive\" ham" + +#~ msgid "File not found on server" +#~ msgstr "Skráin fannst ekki á þjóninum" + +#~ msgid "Abort in progress" +#~ msgstr "Er að hætta við" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Óþekkt eða óvænt villa" + +#, fuzzy +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: Fseek brást: %s\n" + +#, fuzzy +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: gat ekki lesið manifest: %s\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s rmdir %s brást: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "lína %d: Ógilt viðfang við %%setup: %s\n" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "ggp brást\n" + +#, fuzzy +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Get ekki lesið haus úr %s: %s\n" + +#, fuzzy +#~ msgid "Upgrading packages..." +#~ msgstr "uppfæra pakka" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "Skrá %s: %s\n" + +#, fuzzy +#~ msgid "%10d %s\n" +#~ msgstr "%9d %s\n" + +#, fuzzy +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "get ekki opnað pakka gagnagrunn í\n" + +#, fuzzy +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d færa %s -> %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d færa %s -> %s\n" + +#, fuzzy +#~ msgid "Adding goal: %s\n" +#~ msgstr "Skrá %s: %s\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "Get ekki ritað í pakka: %s\n" + +#, fuzzy +#~ msgid "Adding: %s\n" +#~ msgstr "lína: %s\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "Skrá %s: %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "%5d færa %s -> %s\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "get ekki opnað pakka gagnagrunn í\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "Get ekki ritað í pakka: %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "Get ekki ritað í pakka: %s\n" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "lokaði gagnagrunnsumhverfi %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "fjarlægði gagnagrunnsumhverfi %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "opna gagnagrunnsumhverfi %s/%s %s\n" + +#, fuzzy +#~ msgid "Unable to write final header\n" +#~ msgstr "Gat ekki ritað haus í %s: %s\n" diff --git a/po/it.gmo b/po/it.gmo new file mode 100644 index 0000000..791ae9d Binary files /dev/null and b/po/it.gmo differ diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..8844fe5 --- /dev/null +++ b/po/it.po @@ -0,0 +1,4289 @@ +# translation of it.po to +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# +# Francesco Tombolini , 2008. +# Silvio Pierro ,2008. +# Guido Grazioli , 2010. +msgid "" +msgstr "" +"Project-Id-Version: it\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2010-11-10 16:56+0200\n" +"Last-Translator: Guido Grazioli \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);X-Generator: KAider 0.1\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM versione %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Copyright (C) 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" +"Questo programma può essere ridistribuito liberamente sotto i termini della " +"GNU GPL\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "creazione di una pipe per --pipe fallita: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "exec fallito\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "l'argomento non è un pacchetto RPM\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "errore durante la lettura dell'intestazione dal pacchetto\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "impossibile riaprire il payload: %s\n" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "Opzioni di selezione pacchetti per le operazioni Query/Verify:" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Opzioni d'interrogazione (con -q o --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Opzioni di verifica (con -V o --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Opzioni Installa/Aggiorna/Rimuovi:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Opzioni comuni per tutte le modalità e gli eseguibili rpm:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "è possibile eseguire solo un tipo di interrogazione/verifica per volta" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "flag di interrogazione inaspettati" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "formato di interrogazione inaspettato" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "origine d'interrogazione inaspettata" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "è possibile specificare solo una modalità principale" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"è possibile forzare solo i processi di installazione, aggiornamento, " +"rmsource e rmspec" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "" +"i file possono essere riposizionati solo durante l'installazione del " +"pacchetto" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "impossibile usare --prefix con --relocate o --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate e --excludepath possono essere usati solo quando si installano " +"nuovi pacchetti" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix può essere usato solo quando si installano nuovi pacchetti" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "gli argomenti per --prefix devono iniziare con /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "" +"--hash (-h) può essere specificato solo durante l'installazione del pacchetto" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "" +"--percent può essere specificato solo durante l'installazione del pacchetto" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "" +"--replacepkgs può essere specificato solo durante l'installazione del " +"pacchetto" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "" +"--excludedocs può essere specificato solo durante l'installazione del " +"pacchetto" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "" +"--includedocs può essere specificato solo durante l'installazione del " +"pacchetto" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "è possibile specificare solo uno tra --excludedocs e --includedocs" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "" +"--ignorearch può essere specificato solo durante l'installazione del " +"pacchetto" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "" +"--ignoreos può essere specificato solo durante l'installazione del pacchetto" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "" +"--ignoresize può essere specificato solo durante l'installazione del " +"pacchetto" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" +"--allmatches può essere specificato solo durante la rimozione del pacchetto" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "" +"--allfiles può essere specificato solo durante l'installazione del pacchetto" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" +"--justdb può essere specificato solo durante l'installazione e la rimozione " +"del pacchetto" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"le opzioni per la disabilitazione dello script possono essere specificate " +"solo durante l'installazione e la rimozione del pacchetto" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"le opzioni di disabilitazione dell'attivazione possono essere specificate " +"solo durante l'installazione e la rimozione del pacchetto" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test può essere specificato solo durante l'installazione, rimozione e " +"creazione del pacchetto" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "" +"--justdb può essere specificato solo durante l'installazione e la rimozione " +"del pacchetto" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "gli argomenti per --root (-r) devono iniziare con /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "non è stato specificato alcun pacchetto per la rimozione" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "non è stato specificato alcun pacchetto per l'installazione" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "non è stato specificato alcun argomento per l'interrogazione" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "non è stato specificato alcun argomento per la verifica" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot è già specificato, ignora %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"compila attraverso %prep (scompatta i sorgenti e applica le patch) da " +"" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "compila attraverso %build (%prep, e poi compila) da " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"compila attraverso %install (%prep, %build, e poi installa) da " + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "verifica sezione %files da " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "compila i pacchetti binari e sorgente da " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "compila solo il pacchetto binario da " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "compila solo il pacchetto sorgente da " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"compila attraverso %prep (scompatta i sorgenti ed applica le patch) da " +"" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "compila attraverso %build (%prep, e poi compila) da " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "compila attraverso %install (%prep, %build, poi installa) da " + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "verifica la sezione %files da " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "compila i pacchetti binari e sorgenti da " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "compila solo il pacchetto binario da " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "compila solo il pacchetto sorgente da " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "compila il pacchetto binario da " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"compila attraverso %install (%prep, %build, poi installa) da " + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "annulla la build root" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "rimuovere l'albero di compilazione quando terminato" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ignora ExcludeArch: direttive dal file spec" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "macchina a stati del file di debug" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "non eseguire alcuna fase del processo di compilazione" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "non verificare le dipendenze di compilazione" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "genera pacchetti con intestazioni compatibili con rpm v3 (legacy)" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "non accettare i msgtr di i18N da specfile" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "rimuovi i sorgenti quando terminato" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "rimuovi specfile quando terminato" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "salta fino alla fase specificata (solo per c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "annulla la piattaforma target" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" +"Opzioni di compilazione 'Build' con [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Compilazione dipendenze fallita:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Impossibile aprire il file spec %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Impossibile aprire tar pipe: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Impossibile leggere il file spec da %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Impossibile rinominare %s in %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "impossibile eseguire lo stat di %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Il file %s non è un file regolare.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Il file %s non sembra essere uno specfile.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Creazione piattaforme target in corso: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Creazione per il target %s in corso\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "inizializza database" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"ricompila gli elenchi invertiti del database dalle intestazioni dei " +"pacchetti installati" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "verifica dei file del database" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Opzioni del database:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "verifica firma(e) del pacchetto" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "importa una armored public key" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "elenca le chiavi del keyring RPM" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Opzioni della firma:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "non è stato specificato alcun argomento" + +#: rpmsign.c:25 +msgid "sign package(s)" +msgstr "firma i pacchetti" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "firma pacchetto/i (identico a --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "cancella le firme del pacchetto" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Opzioni della firma:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Impossibile eseguire %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "È necessario impostare \"%%_gpg_name\" nel file macro\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Inserire la frase chiave:" + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "La frase chiave risulta valida.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Controllo frase chiave fallito\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "interrogare un file spec" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "interrogare un file spec" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "usare il seguente formato di interrogazione" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Opzioni della firma:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "non è stato specificato alcun argomento per l'interrogazione" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Impossibile aprire il file temp.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Esecuzione(%s) in corso: %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Esecuzione di %s fallita (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Stato d'uscita errato da %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"Errori di compilazione RPM:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "errore di sintassi durante l'analisi di ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "errore di sintassi durante l'analisi di &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "errore di sintassi durante l'analisi di ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "errore d'analisi nella espressione\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "non corrispondente (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- solo sui numeri\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! solo sui numeri\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "i diversi tipi devono corrispondere\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / non supportato per le stringhe\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- non supportato per le stringhe\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& e || non supportati per le stringhe\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "errore di sintassi nell'espressione\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "'(' mancante in %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "')' mancante in %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Token %s non valido: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "%s mancante in %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Caratteri non validi seguono %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Sintassi non corretta: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Spec della modalità errata: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Spec dirmode errata: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Lunghezza locale inusuale: \"%.*s\" in %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Locale doppio %.*s in %%lang(%s)\n" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "Capability non valida: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "Supporto alle file capabilities non disponibile\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Un solo argomento per %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Due file su di una riga: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Il file deve iniziare con \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Impossibile unire %%doc speciali con altri formati: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "Algoritmo digest file sconosciuto %u , ritorno a MD5\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "File elencato due volte: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "scollegamento %s di %s fallito: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Il Symlink punta alla BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "Attributi dei file espliciti richiesti nello spec file per: %s\n" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "File non trovato: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "File non trovato: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "File %s troppo grande per il payload\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: impossibile caricare tag sconosciuto (%d).\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: lettura chiave pubblica fallita.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: non è una chiave pubblica con formato 'armored'.\n" + +#: build/files.c:1618 +#, c-format +msgid "%s: failed to encode\n" +msgstr "%s: errore durante l'encoding\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Il file deve essere preceduto da \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Glob non permesso: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "File non trovato da glob: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "File non trovato da glob: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Impossibile aprire %%files file %s: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "riga: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "File errato: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Proprietario/gruppo errato: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Controllo per file scompattato/i in corso: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Trovato/i file installati (ma scompattati):\n" +"%s" + +#: build/files.c:2139 +#, c-format +msgid "Processing files: %s\n" +msgstr "Elaborazione file: %s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "Binari dipendenti dall'architettura presenti in un pacchetto noarch\n" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "creazione archivio fallita sul file %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "creazione archivio fallita: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "scrittura cpio_copy fallita: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "lettura cpio_copy fallita: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: linea: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Impossibile regolarizzare l'hostname: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Impossibile aprire file PreIn: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Impossibile aprire file PreUn: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Impossibile aprire file PreTrans: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Impossibile aprire file PostIn: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Impossibile aprire file PostUn: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Impossibile aprire file PostTrans: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Impossibile aprire file VerifyScript: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Impossibile aprire file script Trigger: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Compressione payload sconosciuta: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Impossibile creare una regione dell'intestazione immutabile.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Impossibile salvare intestazione di temp\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Dati CSA errati\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Impossibile ricaricare intestazione della firma.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Impossibile aprire %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Impossibile scrivere il pacchetto: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Impossibile aprire sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Impossibile leggere intestazione da %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Impossibile salvare intestazione su %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Impossibile leggere payload da %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Impossibile salvare payload su %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Scritto: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "Esecuzione \"%s\":\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Esecuzione di \"%s\" fallita.\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Controllo pacchetto \"%s\" fallito.\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Impossibile generare nome del file di output per il pacchetto %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "impossibile creare %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "riga %d: secondo %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "le voci %%changelog devono iniziare con *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "voce %%changelog incompleta\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "data errata in %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog non è in ordine cronologico decrescente\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "nome mancante in %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "nessuna descrizione in %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "riga %d: Errore durante l'analisi di %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "riga %d: Opzione errata %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "riga %d: Troppi nomi: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "riga %d: Pacchetto non esistente: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "riga %d: Seconda descrizione\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "riga %d: Errore nell'analisi dei %%files: %s\n" + +#: build/parsePolicies.c:32 +#, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "riga %d: Errore nel parsing di %%policies: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "riga %d: Numero errato: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "riga %d: Numero no%s errato: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "riga %d: Numero %s errato: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d specificato più volte\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "L'architettura è esclusa: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "L'architettura non è inclusa: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "OS è escluso: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "OS non è incluso: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "il campo %s deve essere presente nel pacchetto: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Voci %s duplicate nel pacchetto: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "illegal _docdir_fmt: %s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Impossibile aprire l'icona %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Impossibile leggere l'icona %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Tipo di icona sconosciuto: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "riga %d: Il tag necessita di un solo token: %s\n" + +#: build/parsePreamble.c:607 +#, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "riga %d: Carattere '%c' illegale in: %s\n" + +#: build/parsePreamble.c:610 +#, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "riga %d: Carattere illegale in: %s\n" + +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "riga %d: Sequenza \"..\" illegale in: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "riga %d: Etichetta malformata: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "riga %d: Etichetta vuota: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "riga %d: I prefissi non devono finire con \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "riga %d: Docdir deve iniziare con '/': %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "riga %d: Il campo Epoch deve essere un numero: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "riga %d: %s errati: qualificatori: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "riga %d: Formato BuildArchitecture errato: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "riga %d: Sono supportati solo sottopacchetti noarch: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Errore interno: Etichetta Bogus %d\n" + +#: build/parsePreamble.c:909 +#, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "riga %d: %s è deprecato: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Specifiche errate del pacchetto: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Il pacchetto è già esistente: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "riga %d: Tag sconosciuto: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} non può essere vuota\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} non può essere \"/\"\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Origine errata: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "Nessuna patch con numero %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "Macro %%patch senza il corrispondente tag \"Patch:\"\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "Nessun numero sorgente %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "Nessun tag \"Source:\" nello spec file\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Impossibile scaricare nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Errore nell'analisi del %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "riga %d: Arg errato su %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "riga %d: Opzione di %%setup errata %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "Numero patch non valido %s: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "riga %d: secondo %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"riga %d: I token della dipendenza devono iniziare con i caratteri alfa-" +"numerici, '_' o '/': %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "riga %d: Versione nome del file non permessa: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "riga %d: Versione necessaria: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "riga %d: dipendenza non valida: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "riga %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "riga %d: i trigger devono presentare --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "riga %d: Errore nell'analisi di %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "linea %d: uno script interno deve terminare con '>': %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "riga %d: il programma script deve iniziare con '/': %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "riga %d: Secondo %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "linea %d: script interno non supportato: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "riga %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Impossibile aprire %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "Non chiuso %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean ritorna %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: Possiede un %%else con nessun %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: Possiede un %%endif con nessun %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "istruzione %%include malformata\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "" +"Non è stata trovata alcuna architettura compatibile per la compilazione\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Il pacchetto non possiede alcuna %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "Modulo di policy '%s' duplicato con tipi in overlapping\n" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "Moduli base '%s' e '%s' hanno tipi in overlapping\n" + +#: build/policies.c:100 +msgid "Failed to get policies from header\n" +msgstr "Impossibile leggere le policies dall'intestazione\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "%%semodule richiede un percorso file\n" + +#: build/policies.c:162 +#, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Impossibile leggere il file policy: %s\n" + +#: build/policies.c:169 +#, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Impossibile codificare il file policy: %s\n" + +#: build/policies.c:186 +#, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Impossibile determinare il nome della policy: %s\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" +"Tipo '%s' impostato con altri tipi in %%semodule %s. Compattazione dei tipi " +"in '%s'.\n" + +#: build/policies.c:245 +#, c-format +msgid "Error parsing %s: %s\n" +msgstr "Errore nel parsing di %s: %s\n" + +#: build/policies.c:251 +#, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Atteso tag %%semodule: %s\n" + +#: build/policies.c:261 +#, c-format +msgid "Missing module path in line: %s\n" +msgstr "Percorso del modulo mancante alla linea: %s\n" + +#: build/policies.c:267 +#, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Troppi argomenti alla linea: %s\n" + +#: build/policies.c:305 +#, c-format +msgid "Processing policies: %s\n" +msgstr "Elaborazione policies: %s\n" + +#: build/rpmfc.c:107 +#, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "Viene ignorata la regex non valida %s\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Impossibile creare la pipe per %s: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Impossibile eseguire %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Impossibile biforcare %s: %s\n" + +#: build/rpmfc.c:343 +#, c-format +msgid "%s failed: %x\n" +msgstr "%s fallito: %x\n" + +#: build/rpmfc.c:347 +#, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "impossibile salvare tutti i dati su %s: %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "Conversione di %s a long integer fallita.\n" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "Non è configurato alcun attributo dei file\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) fallita: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load fallita: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Identificazione file \"%s\" fallita: modalità %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Ricerca di %s in corso: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Impossibile trovare %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "interrogazione di specfile %s fallita, impossibile analizzare\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(errore 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Bad magic" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Intestazione errata/illeggibile" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Dimensione intestazione troppo grande" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Tipo di file sconosciuto" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Link Hard mancante/i" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "Digest non corrispondente" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Errore interno" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "File archive non è nell'intestazione" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " fallito - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "il pacchetto %s è già stato aggiunto, salto %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "il pacchetto %s è stato già aggiunto, sostituzione con %s in corso\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(non è un numero)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(non base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(tipo non valido)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(non è un blob)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(tipo xml non valido)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(non è una firma OpenPGP)" + +#: lib/formats.c:588 +msgid "normal" +msgstr "normale" + +#: lib/formats.c:591 +msgid "replaced" +msgstr "sostituito" + +#: lib/formats.c:594 +msgid "not installed" +msgstr "non installato" + +#: lib/formats.c:597 +msgid "net shared" +msgstr "condivisa su rete" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "colore errato" + +#: lib/formats.c:603 +msgid "missing" +msgstr "mancanti" + +#: lib/formats.c:606 +msgid "(unknown)" +msgstr "(sconosciuto)" + +#: lib/formats.c:645 +msgid "(not a string)" +msgstr "(non è una stringa)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "l'utente %s non esiste - utilizzazione utente root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "il gruppo %s non esiste - utilizzazione utente root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" +"file archive %s non è stato trovato nell'elenco dei file di intestazione\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s salvato cme %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s rmdir di %s fallito: La cartella non è vuota\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir di %s fallito: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "scollegamento %s di %s fallito: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s creato come %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "salto il pacchetto %s con firma V%u non verificabile\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "blob dimensione(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "tag[%d]: BAD, tag %d tipo %d offset %d conteggio %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "offset regione: BAD, tag %d tipo %d offset %d conteggio %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "trailer regione: BAD, tag %d tipo %d offset %d conteggio %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "dimensione regione: BAD, ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: BAD, non hex\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr RSA: BAD, non binario\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr DSA: BAD, non binario\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hdr dimensione(%d): BAD, la lettura restituisce %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "hdr magic: BAD\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "hdr tags: BAD, num. di tag(%d) fuori range\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "hdr data: BAD, num. di byte(%d) fuori range\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr blob(%zd): BAD, la lettura restituisce %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "hdr load: BAD\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature fallita: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Nessuna firma disponibile\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead fallita: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread fallito: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s è un Delta RPM e non può essere installato direttamente\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Payload non supportato (%s) nel pacchetto %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "predefinisci MACRO con un valore EXPR" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "'MACRO EXPR'" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "definisci MACRO con un valore EXPR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "stapare espansione macro di EXPR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "'EXPR'" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "leggi invece del file predefinito/i" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "non verificare il digest del pacchetto/i" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "non verificare l'intestazione/i del database una volta ripristinata" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "non verificare la firma/e del pacchetto" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "invia stdout a CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "usa ROOT come cartella top level" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "visualizza etichette di interrogazione conosciute" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "visualizza la configurazione finale di rpmrc e macro" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "fornisci un output meno dettagliato" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "fornisci un output più dettagliato" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "visualizza la versione di rpm utilizzata" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "macchina di stato del file payload di debug" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "debug rpmio I/O" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: tabella opzioni configurata in modo errato (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "i percorsi exclude devono iniziare con una /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "riposizionamenti devono iniziare con una /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "riposizionamenti devono contenere un =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "i riposizionamenti devono avere una / che segue =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"installare tutti i file, anche le configurazioni che possono altrimenti " +"essere saltate" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"rimuovere tutti i pacchetti corrispondenti a (normalmente viene " +"generato un errore se con vengono specificati pacchetti multipli)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "riposiziona i file in un pacchetto non-riposizionabile" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "mostra le dipendenze cicliche come avviso" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "rimuovi (disinstalla) il pacchetto" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "non installare i file di configurazione" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "non installare la documentazione" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "salta i file che presentano un componente che li precede " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "abbreviazione di --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "aggiorna il pacchetto/i se già installati" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "" +"mostra i caratteri hash durante l'installazione del pacchetto (utile con -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "non verificare l'architettura del pacchetto" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "non verificare il sistema operativo del pacchetto" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "non controllare lo spazio del disco prima dell'installazione" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "installa documentazione" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "installa i pacchetto/i" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "aggiorna il database, senza modificare il filesystem" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "non verificare le dipendenze dei pacchetti" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "non verificare il digest dei file" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "non verificare il digest dei file (obsoleto)" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "non installare contesti di sicurezza dei file" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" +"non riordinare l'installazione dei pacchetti per soddisfare le dipendenze" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "non eseguire le scriptlet dei pacchetti" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "non eseguire alcun scriptlet %%pre (se esistenti)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "non eseguire alcun scriptlet %%post (se esistenti)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "non eseguire alcun scriptlet %%preun (se esistenti)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "non eseguire alcun scriptlet %%postun (se esistenti)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "non eseguire alcun scriptlet causato/i da questo pacchetto" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "non eseguire alcun scriptlet %%triggerprein" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "non eseguire alcun scriptlet %%triggerin" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "non eseguire alcun scriptlet %%triggerun" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "non eseguire alcun scriptlet %%triggerpostun" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "non eseguire azioni sulle collezioni" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"aggiorna ad una versione più vecchia del pacchetto (sugli aggiornamenti --" +"force esegue questa operazione automaticamente)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "mostra le percentuali durante l'installazioni dei pacchetti" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "riposiziona il pacchetto su , se riposizionabile" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "riposiziona i file dal percorso a " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "ignora i file in conflitto fra pacchetti" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "installa nuovamente se il pacchetto è già presente" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "non installare, ma indicare se funziona oppure no" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "aggiorna il pacchetto/i" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "interrogare/verificare tutti i pacchetti" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "modalità rpm checksig" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "interrogare/verificare a quale pacchetto/i appartiene il file" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "interrogare/verificare il pacchetto/i in un gruppo" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "interrogare/verificare un file del pacchetto" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "" +"interrogare/verificare il pacchetto/i con un identificatore del pacchetto" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "" +"interrogare/verificare il pacchetto/i con un identificatore di intestazione" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "modalità interrogazione rpm" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "interrogare/verificare una istanza dell'intestazione" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "" +"interrogare/verificare il pacchetto/i dalla transazione di installazione" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "interroga il pacchetto/i azionato dal pacchetto" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "modalità verifica rpm" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "interrogare/verificare il pacchetto/i che necessita di una dipendenza" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "interrogare/verificare il pacchetto/i che fornisce una dipendenza" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "non eseguire il glob degli argomenti" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "non processare i file non-package come manifest" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "elenca tutti i file di configurazione" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "elenca tutti i file di documentazione" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "emettere le informazioni di base dei file" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "elenca i file in un pacchetto" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "salta file %%ghost" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "visualizza gli stati dei file elencati" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "non verificare la dimensione dei file" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "non verificare il percorso symlink dei file" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "non verificare il proprietario dei file" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "non verificare il gruppo dei file" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "non verificare l'ora di modifica dei file" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "non verificare la modalità dei file" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "non verificare le capabilities dei file" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "non verificare i contesti di sicurezza dei file" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "non verificare i file nel pacchetto" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "non verificare le dipendenze del pacchetto" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "non eseguire gli script di verifica" + +#: lib/psm.c:212 +#, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "Funzionalità rpmlib mancanti per %s:\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "pacchetto sorgente atteso, trovato binario\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "il pacchetto sorgente non contiene alcun file .spec\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "estrazione archivio fallita%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " sul file " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s fallito sul file %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s fallito: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "formato non corretto: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(non contiene file)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normale " + +#: lib/query.c:163 +msgid "replaced " +msgstr "sostituito " + +#: lib/query.c:166 +msgid "not installed " +msgstr "non installato " + +#: lib/query.c:169 +msgid "net shared " +msgstr "rete condivisa " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "colore errato " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(nessuno stato) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(sconosciuto %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "il pacchetto non possiede alcun elenco gruppo/proprietario dei file\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "" +"il pacchetto non possiede ne un proprietario del file ne un elenco id\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "il gruppo %s non contiene alcun pacchetto\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "nessun pacchetto attiva %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "%s malformato: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "nessun pacchetto corrisponde a %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "nessun pacchetto necessita di %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "nessun pacchetto fornisce %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "file %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "il file %s non è posseduto da alcun pacchetto\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "numero del pacchetto non valido: %s\n" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "il record %u non può essere letto\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "il pacchetto %s non è stato installato\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "tag sconosciuto: \"%s\"\n" + +#: lib/rpmchecksig.c:43 +#, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: importazione chiave %d fallita.\n" + +#: lib/rpmchecksig.c:47 +#, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: chiave pubblica %d non con formato 'armored'.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: lettura importazione fallita(%d).\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead fallito\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"%s: La regione header immutabile non può essere letta. Pacchetto corrotto?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "salto il pacchetto %s con firma V%u non verificabile\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NON OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (CHIAVI MANCANTI:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (CHIAVI NON FIDATE:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: apertura fallita: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Impossibile ripristinare directory root: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s: la directory chroot non è impostata\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Impossibile cambiare directory root: %m\n" + +#: lib/rpmchroot.c:95 +#, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Impossibile ripristinare directory root: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NO " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "SI" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" +"Supporto alla versione per le dipendenze PreReq:, Provides: e Obsoletes:." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"file name conservati come tuple (dirName,baseName,dirIndex), non come " +"percorsi." + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "il payload del pacchetto può essere compresso utilizzando bzip2." + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "il payload del pacchetto può essere compresso utilizzando xz." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "il payload del pacchetto può essere compresso utilizzando lzma." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "il/i file payload del pacchetto presentano un prefisso \"./\"" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" +"il nome-versione-release del pacchetto non viene implicitamente fornito." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" +"i tag delle intestazioni vengono sempre ordinate dopo il loro caricamento." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" +"l'interprete di scriptlet può utilizzare gli argomenti presenti " +"nell'intestazione." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "un set di file hardlink può essere installato senza che sia completo." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" +"le scriptlet del pacchetto potrebbero accedere al database rpm durante " +"l'installazione." + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "supporto interno per gli script lua." + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "l'algoritmo digest di checksum dei file è configurabile per pacchetto" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "supporto per le file capabilities POSIX.1e" + +#: lib/rpmds.c:911 +msgid "package scriptlets can be expanded at install time." +msgstr "" +"le scriptlet del pacchetto possono essere espanse durante l'installazione." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "apertura di %s fallita: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: non è un pacchetto rpm (o un manifest del pacchetto)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Preparazione in corso..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Preparazione pacchetti per l'installazione..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Dipendenze fallite:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: non è un pacchetto rpm (o un manifest del pacchetto): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s non può essere installato\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Ripristino di %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "omissione di %s - trasferimento fallito\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "il pacchetto %s non è riposizionabile\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "errore di lettura dal file %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "il file %s necessita di una versione più recente di RPM\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" specifica pacchetti multipli:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "impossibile aprire %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Installazione di %s in corso\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "non è un pacchetto rpm" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "tipo di firma illegale" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "versione del pacchetto RPM non supportata" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "lettura fallita: %s (%d)\n" + +#: lib/rpmlead.c:126 +msgid "not an rpm package\n" +msgstr "non è un pacchetto rpm\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "impossibile creare il lock %s su %s (%s)\n" + +#: lib/rpmlock.c:106 +#, c-format +msgid "waiting for %s lock on %s\n" +msgstr "attesa del lock %s su %s\n" + +#: lib/rpmplugins.c:60 +#, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "Impossibile eseguire dlopen di %s %s\n" + +#: lib/rpmplugins.c:67 +#, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Impossibile risolvere il simbolo %s: %s\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "Impossibile espandere la macro %%__collection_%s\n" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "Plugin %s non caricato\n" + +#: lib/rpmplugins.c:150 +#, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Impossibile risolvere nel plugin %s il simbolo %s: %s\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "diverso" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "il pacchetto %s è destinato ad una architettura %s" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "il pacchetto %s è destinato ad un sistema operativo %s" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "il pacchetto %s è già installato" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "il percorso %s nel pacchetto %s non è riposizionabile" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" +"il file %s entra in conflitto durante il tentativo d'installazione di %s e %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"il file %s dell'installazione di %s entra in conflitto con il file del " +"pacchetto %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "" +"il pacchetto %s (il quale risulta essere più recente di %s) è già installato" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"l'installazione del pacchetto %s necessita di %%cB sul filesystem %s" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"l'installazione del pacchetto %s necessita di % inode sul filesystem " +"%s" + +# fix bug 450663 +# (team-it-rev080611) +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s necessario a %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(installato) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s entra in conflitto con %s%s" + +# fix bug 450663 +# (team-it-rev080611) +#: lib/rpmprob.c:172 +#, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s reso obsoleto da %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "" +"si è verificato un errore sconosciuto %d durante la manipolazione del " +"pacchetto %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "secondo ':' mancante su %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "nome architettura mancante su %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Riga dati incompleta su %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Troppi argomenti sulla riga dati di %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Numero arch/OS errato: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Riga di default incompleta su %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Troppi argomenti nella riga di default su %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "':' mancanti (trovato 0x%02x) su %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "argomento mancante per %s su %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "impossibile aprire %s su %s:%d: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "architettura mancante per %s su %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "opzione errata '%s' su %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Sistema sconosciuto: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Si prega di contattare %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Impossibile aprire %s per la lettura: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Impossibile ripristinare directory root: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "supporto agli scriptlet non disponibile\n" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Impossibile creare il file temporaneo per %s: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Impossibile duplicare il file descriptor: %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "scriptlet %s fallita, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "scriptlet %s fallita, segnale %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "scriptlet %s fallita, uscita con stato %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "Formato sconosciuto" + +#: lib/rpmte.c:820 +msgid "install" +msgstr "installa" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "elimina" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "impossibile aprire il database dei pacchetti in %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "'(' extra nell'etichetta del pacchetto: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "'(' mancante nell'etichetta del pacchetto: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "')' mancante nell'etichetta del pacchetto: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: lettura chiave pubblica fallita.\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "transazione" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "dimensione(%d) sigh: BAD, la lettura ha restituito %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sigh magic: BAD\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sigh tags: BAD, no. di tags(%d) fuori range\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sigh data: BAD, no. di bytes(%d) fuori range\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sigh blob(%d): BAD, la lettura ha restituito %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "sigh tag[%d]: BAD, tag %d tipo %d offset %d conteggio %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "carico sigh: BAD\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh pad(%zd): BAD, lettura %zd byte\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh sigSize(%zd): BAD, fstat(2) fallito\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"Impossibile leggere la regione immutabile dell'header. Pacchetto corrotto?\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "MD5 digest:" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "Digest SHA1 header:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Header " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Verifica firma: PARAMETRI ERRATI\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Firma: SCONOSCIUTA (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "saltato" + +#: lib/transaction.c:1388 +msgid "failed" +msgstr "fallito" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "%c %s mancanti" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Dipendenze non soddisfatte per %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "{ mancante dopo %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "} mancante dopo %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "formato tag vuoto" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "nome tag vuoto" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "tag sconosciuto" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] previsto alla fine dell'array" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "] inaspettata" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "} inaspettata" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? previsto nell'espressione" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ previsto dopo ? nell'espressione" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} previsto nell'espressione" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": previsto dopo l'espressione secondaria ?" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ previsto dopo : nell'espressione" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| previsto alla fine dell'espressione" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "iteratore di array usato con array di dimensioni differenti" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "Generazione di %d indici mancanti, prego attendere...\n" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "impossibile aprire l'indice %s utilizando db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "non è stato impostato alcun dbpath\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "errore(%d) durante l'acquisizione dei record \"%s\" dall'indice %s\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: salto" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "errore(%d) nella memorizzazione del record #%d in %s\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec fallito: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp fallito: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: salto" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: intestazione #%u danneggiata -- viene omessa.\n" + +#: lib/rpmdb.c:2228 +#, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "errore(%d) durante l'acquisizione dei record \"%s\" dall'indice %s\n" + +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "errore(%d) nell'impostazione del record #%d dell'intestazione\n" + +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "errore(%d) nell'eliminazione del record dell'intestazione #%d\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: impossibile leggere intestazione 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "errore(%d) nell'impostazione dei record \"%s\" dall'indice %s\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "errore(%d) nella memorizzazione del record \"%s\" in %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "errore(%d) nella rimozione del record \"%s\" da %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "errore(%d) nell'allocazione di una nuova istanza del pacchetto\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "errore(%d) nella memorizzazione del record %s in %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "non è stato impostato alcun dbpath" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "impossibile creare la cartella %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "l'intestazione #%u nel database non è valida -- viene omessa.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "impossibile aggiungere il record originariamente su %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "ricompilazione database fallita: il database originale rimane in uso\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "sostituzione del vecchio database con il nuovo database fallita!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "per eseguire un ripristino sostituire i file in %s con i file di %s" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "rimozione della directory %s fallita: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d errore(%d) da %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d errore(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "impossibile ottenere il %s su %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "condiviso" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "esclusivo" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "tipo indice %x non valido su %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "opzione db non riconosciuta: \"%s\" ignorata.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s presenta un valore numeric non valido, omesso\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s presenta un valore long troppo grande o troppo piccolo, omesso\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s presenta un valore integer troppo grande o troppo piccolo, omesso\n" + +#: plugins/sepolicy.c:220 +#, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Impossibile decodificare la policy per %s\n" + +#: plugins/sepolicy.c:227 +#, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Impossibile creare il file temporaneo per %s: %s\n" + +#: plugins/sepolicy.c:233 +#, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Impossibile scrivere la plicy %s nel file %s\n" + +#: plugins/sepolicy.c:305 +msgid "Failed to create semanage handle\n" +msgstr "Errore nella creazione dell'handle semanage\n" + +#: plugins/sepolicy.c:311 +msgid "Failed to connect to policy handler\n" +msgstr "Errore nella connessione all'handler di policy\n" + +#: plugins/sepolicy.c:315 +#, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "Errore nell'inizializzazione della policy transaction: %s\n" + +#: plugins/sepolicy.c:346 +#, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "Impossibile rimuovere il temporaneo %s della policy: %s\n" + +#: plugins/sepolicy.c:394 +#, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Impossibile installare il modulo di policy: %s (%s)\n" + +#: plugins/sepolicy.c:424 +#, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Impossibile rimuovere il modulo di policy: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, c-format +msgid "Failed to fork process: %s\n" +msgstr "Errore durante il fork del processo: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, c-format +msgid "Failed to execute %s: %s\n" +msgstr "Impossibile eseguire %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, c-format +msgid "%s terminated abnormally\n" +msgstr "%s è terminato in modo anomalo\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, c-format +msgid "%s failed with exit code %i\n" +msgstr "%s fallito con codice di errore %i\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "Errore durante il commit delle modifiche alla policy\n" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "Impossibile espandere il percorso restorecon" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" +"Errore durante il relabel del filesystem. I file potrebbero avere label non " +"corrette\n" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" +"Errore nel caricamento dei file context. I file potrebbero avere label non " +"corrette\n" + +#: plugins/sepolicy.c:602 +#, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Impossibile estrarre la policy da %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "errore: callback python %s fallito, interruzione!\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== %d attivo %d vuoto\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(vuoto)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(vuoto)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "La macro %%%s presenta un corpo incompleto\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "La macro %%%s presenta un nome illegale (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "La macro %%%s presenta delle opzioni incomplete\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "La macro %%%s presenta contenuto vuoto\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Impossibile espandere la macro %%%s\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "La macro %%%s presenta un nome illegale (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "La macro %%%s (%s) non è stata utilizzata sotto il livello %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Opzione %c sconosciuta in %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" +"Troppo livelli di ricorsione nell'espansione della macro. Si tratta " +"probabilmente di una macro definita ricorsivamente.\n" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "%c non terminato: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Un %% è seguito da una macro sconosciuta\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "errore nella creazione del file temporaneo %s: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "File %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "File %s è più piccolo di %u byte\n" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "impossibile creare la directory" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "sintassi non valida nella scriptlet lua: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "sintassi non valida nello script lua: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "lua script fallito: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "sintassi non valida nel file lua: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "lua hook fallito: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(nessun errore)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "errore fatale: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "errore: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "avvertimento: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "allocazione memoria (%u byte) ha ritornato NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "V%d %s/%s %s, ID chiave %s" + +#: rpmio/rpmpgp.c:1369 +msgid "(none)" +msgstr "(nessuno)" + +#: rpmio/rpmpgp.c:1652 +#, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Impossibile registrare l'handler per il fork: %m\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite fallito: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush fallito: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "Algoritmo hash PGP %d non supportato\n" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "Algoritmo chiave pubblica PGP %d non supportato\n" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "Impossibile creare la pipe per la firma: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "esecuzione gpg fallita (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg non è riuscito a salvare la firma\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "impossibile leggere la firma\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "rpmMkTemp fallito\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead fallito: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature fallito: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "apertura di %s fallita: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: lettura manifesto fallita: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "non verificare firma header+payload" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: troppi uid\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: troppi uid\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: troppi uid\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: troppi gid\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: troppi gid\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: troppi gid\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "ignora il rapporto/i del nome del pacchetto [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "aggiungere i pacchetti suggeriti alla transazione" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "non suggerire alcuna risoluzione delle dipendenze mancanti" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Impossibile chdir in %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps può essere specificato solo durante la creazione, ricreazione, " +#~ "ricompilazione, installazione, eliminazione e verifica del pacchetto" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) può essere specificato solo durante l'installazione, la " +#~ "rimozione, l'interrogazione e nei processi di ricreazione del database" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "rileva i conflitti dei file fra pacchetti" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d non disponibile\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "il database temporaneo %s è già esistente\n" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Errore interno durante la processazione dell'argomento (%d) :-(\n" + +#~ msgid "no files to sign\n" +#~ msgstr "nessun file da firmare\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "impossibile accedere il file %s\n" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Spec %%_signature invalida nel file macro.\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "è possibile usare --sign solo durante la compilazione del pacchetto" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "" +#~ "non è stato specificato alcun file del pacchetto per la ricompilazione" + +#~ msgid "no spec files given for build" +#~ msgstr "non è stato specificato alcun file spec per la compilazione" + +#~ msgid "no tar files given for build" +#~ msgstr "non è stato specificato alcun file tar per la compilazione" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "Errore TIMECHECK: %s\n" + +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: errore lettura file di policy.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: apri %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek fallito: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s non è un pacchetto RPM\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: lettura intestazione da %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Generazione firma in corso: %d\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "genera le intestazioni compatibili con il packaging di rpm4" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "genera la firma PGP/GPG" + +#~ msgid "%s failed\n" +#~ msgstr "%s fallito\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "interrogare/verificare il pacchetto/i con un identificatore di file" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "non verificare la firma/e GPG V3 DSA" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "non verificare la firma/e PGP V3 RSA/MD5" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "firma pacchetto/i (identico a --resign)" + +#~ msgid "generate signature" +#~ msgstr "genera firma" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "" +#~ "%s: è stato già firmato dall'ID %s della chiave, omissione in corso\n" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Specifica %%_signature non valida nel file macro\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Profondità di ricorsione(%d) maggiore del valore massimo(%d)\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Target buffer overflow\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: nome etichetta non riconosciuto: \"%s\" ignorato\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: salto" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib provides)" + +#~ msgid "(cached)" +#~ msgstr "(cached)" + +#~ msgid "(db files)" +#~ msgstr "(file db)" + +#~ msgid "(db provides)" +#~ msgstr "(db provides)" + +#~ msgid "(added files)" +#~ msgstr "(file aggiunti)" + +#~ msgid "(added provide)" +#~ msgstr "(provisioning aggiunto)" + +#~ msgid "url port must be a number\n" +#~ msgstr "la porta url deve essere un numero\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Opzioni vista albero dei file (con --ftswalk):" + +#~ msgid "follow command line symlinks" +#~ msgstr "seguire symlink della linea di comando" + +#~ msgid "logical walk" +#~ msgstr "percorso logico" + +#~ msgid "don't change directories" +#~ msgstr "non cambiare le cartelle" + +#~ msgid "don't get stat info" +#~ msgstr "non ottenere informazioni stat" + +#~ msgid "physical walk" +#~ msgstr "percorso fisico" + +#~ msgid "return dot and dot-dot" +#~ msgstr "restituisci punto e punto-punto" + +#~ msgid "don't cross devices" +#~ msgstr "non incrociare i dispositivi" + +#~ msgid "return whiteout information" +#~ msgstr "ritorna senza alcuna informazione" + +#~ msgid "debug package state machine" +#~ msgstr "debug macchina stato di pacchetto" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "" +#~ "interrogare/verificare il pacchetto/i dall'inizio del percorso ad albero" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "interrogare/verificare il pacchetto/i dal system HDLIST" + +#~ msgid "do not order transaction set" +#~ msgstr "non ordinare il set di transazione" + +#~ msgid "do not read headers" +#~ msgstr "non leggere gli header" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Il file non corrisponde al prefisso (%s): %s\n" + +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "Impossibile cambiare directory root: %m\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "usa i thread per la macchina di stato di pacchetto" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: scriptlet %s fallito (%d), omissione %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() non ha ritornato alcuna dimensione: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() non ha ritornato alcun mount point: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "impossibile visualizzare statistiche per %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "file %s è su di un dispositivo sconosciuto\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "usa i thread per la macchina di stato dei file" + +#~ msgid "cannot open %s index\n" +#~ msgstr "impossibile aprire l'indice %s\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "Impossibile ottenere il lock sul db %s, ritento... (%d)\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Impossibile effettuare initDB %s (%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Impossibile aprire il database: %s\n" + +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Impossibile determinare l'endian del DB.\n" + +#~ msgid "Unknown system error" +#~ msgstr "Errore di sistema sconosciuto" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Macro %%%.*s non trovata, omissione in corso\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: lettura policy *.te fallita.\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "riga %d: Secondo elenco di %%files\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "La dipendenza \"B\" necessita di un'epoca (assumendo una stessa epoca di " +#~ "\"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Tipo di dati %d non supportati\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "La sintassi obsoleta non è supportata: %s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "rimozione di %s \"%s\" dalle relazioni tsort in corso.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "LOOP:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "rpmtsOrder fallito, %d elementi rimanenti\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "Dimensione Header+Payload:" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Opzioni sorgente (con --query o --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp non trovato: " + +#~ msgid "skipping header with unverifiable V%u signature\n" +#~ msgstr "salto header con firma non verificabile V%u \n" + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "impossibile aprire il file %s: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp fallito\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp non è riuscito a salvare la firma\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "È necessario impostare \"%%_pgp_name\" nel file macro\n" + +#~ msgid "Unknown" +#~ msgstr "Sconosciuta" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "firma %sV%d %s : %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "firma DSA %sV%d : %s, ID chiave %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "firma DSA %sV%d : %s\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "MD5 digest discontinuo: NON SUPPORTATO\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot non può essere \"/\": %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Il file spec non può utilizzare BuildRoot\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "cerca le stringhe i18N nel catalogo specfile" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "" +#~ "ganara le intestazioni compatibili con il (legacy) rpm[23] packaging" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "impossibile creare %%%s %s\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "impossibile scrivere su %%%s %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "impossibile interrogare %s: %s\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "gestione cache URL di debug" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "sostituire le sezioni i18n nel file spec" + +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "impossibile aprire il database di Solve in %s\n" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " Risoluzioni consigliate:\n" + +#~ msgid "Success" +#~ msgstr "Successo" + +#~ msgid "Bad server response" +#~ msgstr "Risposta incorretta del server" + +#~ msgid "Server I/O error" +#~ msgstr "Errore I/O del server" + +#~ msgid "Server timeout" +#~ msgstr "Timeout del server" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Impossibile ricercare l'indirizzo host del server" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Impossibile ricercare il nome host del server" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Tentativo fallito di stabilire un collegamento dati col server" + +#~ msgid "I/O error to local file" +#~ msgstr "Errore I/O sul file locale" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Errore nell'impostazione del server remoto in modalità passiva" + +#~ msgid "File not found on server" +#~ msgstr "File non trovato sul server" + +#~ msgid "Abort in progress" +#~ msgstr "Interruzione in corso" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Errore sconosciuto o inatteso" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "" +#~ "non aggiornare il database della cache, visualizzare solo i percorsi del " +#~ "pacchetto" + +#~ msgid "File tree walk options:" +#~ msgstr "Opzioni navigazione albero dei file:" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: %%{_cache_dbpath} macro non è configurata correttamente.\n" + +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: operazione cache fallita: ec %d.\n" + +#~ msgid "(encoding failed)" +#~ msgstr "exec fallito\n" + +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: headerGetEntry fallito\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "espansione %s su %s fallita:%d \"%s\"\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "Impossibile espandere %s\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "Impossibile leggere %s, HOME è troppo grande.\n" + +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s rmdir di %s fallito: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "Limite di processazione per %%docdir\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "riga %d: Arg necessario per %%patch -b: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "riga %d: Arg necessario per %%patch -z: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "riga %d: Arg errato per %%patch -p: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "riga %d: Arg necessario per %%patch -p: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "riga %d: Arg errato per %%patch -p: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "Troppi patch!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "riga %d: Arg errato per %%patch: %s\n" + +#~ msgid "debug option/argument processing" +#~ msgstr "processazione argomento/opzione di debug" + +#~ msgid "skip %%license files" +#~ msgstr "salta file %%licens" + +#~ msgid "skip %%readme files" +#~ msgstr "salta file %%readme" + +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "lettura fallita: %s (%d)\n" + +#~ msgid "rollback takes a time/date stamp argument" +#~ msgstr "il rollback accetta un argomento data/ora" + +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "argomento data/ora di rollback malformato" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "" +#~ "salva i file del pacchetto rimosso rinominandoli in una sotto-directory" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "salva i file del pacchetto rimosso rieseguendo il packaging" + +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "disinstallare nuovo, reinstallare vecchio, pacchetti, dal " + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Impossibile ricaricare l'intestazione della firma\n" + +#~ msgid "Repackaging..." +#~ msgstr "Repackaging..." + +#~ msgid "Repackaging erased files..." +#~ msgstr "Repackaging dei file rimossi..." + +#~ msgid "Upgrading..." +#~ msgstr "Aggiornamento in corso..." + +#~ msgid "Upgrading packages..." +#~ msgstr "Aggiornamento pacchetti in corso..." + +#~ msgid "Rollback packages (+%d/-%d) to %-24.24s (0x%08x):\n" +#~ msgstr "Rollback dei pacchetti (+%d/-%d) fino a %-24.24s (0x%08x):\n" + +#~ msgid "\tRemoving %s:\n" +#~ msgstr "Ripristino di %s\n" + +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "errore durante la lettura dell'intestazione dal pacchetto\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== registrazione relazioni tsort\n" + +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== tsorting dei pacchetti (ordine, #predecessori, #successori, " +#~ "albero, profondità)\n" + +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== solo successori (in ordine di presentazione)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== continuazione tsort ...\n" + +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "File%5d: %07o %s.%s\t %s\n" + +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========== Directory non incluse in modo specifico nel pacchetto:\n" + +#~ msgid "%10d %s\n" +#~ msgstr "%10d %s\n" + +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "Directory %s creata con permessi %04o.\n" + +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "Directory %s creata con permessi %04o.\n" + +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "aggiunta di voci %d all'indice %s.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "disabilita l'uso di libio(3) API" + +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: esecuzione scriptlet %s in corso\n" + +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s presenta i file %d, test = %d\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "numero record del pacchetto: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "il pacchetto %s presenta un %s non soddisfatto/i: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s omesso/a a causa della mancanza del flag ok\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== riposizionamenti\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "esclude %5d in %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d riposiziona %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "esclusione %s %s in corso\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "riposizionamento di %s su %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "riposizionamento directory %s su %s\n" + +#~ msgid "Adding goal: %s\n" +#~ msgstr "Ricerca di %s in corso: %s\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... come %s\n" + +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "" + +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "installazione pacchetti binari in corso\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "trovati sorgente %d e pacchetti binari %d\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "installazione pacchetti binari in corso\n" + +#~ msgid "Adding: %s\n" +#~ msgstr "riga: %s\n" + +#~ msgid "Suggesting: %s\n" +#~ msgstr "Ripristino di %s\n" + +#~ msgid "mounted filesystems:\n" +#~ msgstr "acquisizione elenco dei filesystem montati in corso\n" + +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "riposizionamento di %s su %s\n" + +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "Dimensione prevista: %12d = lead(%d)+sigs(%d)+pad(%d)+data(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " Dimensione attuale: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Firma: size(%d)+pad(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "Dimensione firma PGP: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "In possesso di %d bytes della firma PGP\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "Dimensione firma GPG: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "In possesso di %d bytes della firma GPG\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "esclusione directory %s in corso\n" + +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "pacchetto sorgente atteso, trovato binario\n" + +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "nessun pacchetto corrisponde a %s: %s\n" + +#~ msgid "sanity checking %d elements\n" +#~ msgstr "controllo correttezza degli elementi %d\n" + +#~ msgid "computing %d file fingerprints\n" +#~ msgstr "elaborazione impronte file %d\n" + +#~ msgid "computing file dispositions\n" +#~ msgstr "elaborazione disposizioni file\n" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "ambiente db %s/%s chiuso\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "ambiente db %s/%s rimosso\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "apertura ambiente db %s/%s %s in corso\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "chiuso indice db %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "apertura indice db in corso %s/%s %s modalità=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "bloccato indice db %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "rimozione \"%s\" dall'indice %s.\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "rimozione voci %d dall'indice %s.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "aggiunta di \"%s\" all'indice %s.\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "aggiunta di voci %d all'indice %s.\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "rimozione di %s in corso dopo aver ricompilato db3.\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "ricompilazione di %s del database in %s in corso\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "creazione directory %s in corso\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "creazione directory %s in corso: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "apertura vecchio database con dbapi %d in corso\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "apertura nuovo database con dbapi %d in corso\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "rimozione %s della directory in corso\n" + +#~ msgid "closed sql db %s\n" +#~ msgstr "chiuso indice db %s/%s\n" + +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "apertura indice db in corso %s/%s %s modalità=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: leggi %s: %s\n" + +#~ msgid "Unable to write final header\n" +#~ msgstr "Impossibile salvare intestazione finale\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "" +#~ "il packaging della versione 1 non è supportato su questa versione di RPM\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "" +#~ "solo il packaging con numeri maggiori <= 4 viene supportato su questa " +#~ "versione di RPM\n" + +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: Impossibile firmare il packaging v1\n" + +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: Impossibile rifirmare il packaging v2\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: Nessuna firma disponibile (v1.0 RPM)\n" diff --git a/po/ja.gmo b/po/ja.gmo new file mode 100644 index 0000000..8d5250d Binary files /dev/null and b/po/ja.gmo differ diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..8c5332b --- /dev/null +++ b/po/ja.po @@ -0,0 +1,4428 @@ +# A Japanese translation for rpm messages +# This file is distributed under the same license as the RPM package. +# +# based on original Japanese catalogue (for rpm-3.0.6) by +# Kanda Mitsru +# and re-written. +# MATSUBAYASHI Kohji , 2002. +# Tadashi Jokagi , 2005. +# SEKINE Tatsuo , 2005. +# Tadashi Jokagi , 2010. +# Hajime Taira , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: rpm-4.8\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2010-09-21 01:05+0900\n" +"Last-Translator: Hajime Taira \n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.3.1\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Copyright (C) 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "ã“ã®ãƒ—ログラム㯠GNU GPL ã®ä¸‹ã§è‡ªç”±ã«é…布ã§ãã¾ã™ã€‚\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "--pipe ã§ã®ãƒ‘イプ作æˆã«å¤±æ•—: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "実行失敗\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "引数㯠RPM パッケージã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "パッケージã®ãƒ˜ãƒƒãƒ€ãƒ¼èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "ペイロードをå†é–‹ã‘ã¾ã›ã‚“: %s\n" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "パッケージセレクションをå•ã„åˆã‚ã›/検証ã™ã‚‹ã‚ªãƒ—ション:" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "å•ã„åˆã‚ã›ã‚ªãƒ—ション (-q ã¾ãŸã¯ --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "検証オプション (-V ã¾ãŸã¯ --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "インストール/アップグレード/アンインストールオプション:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "全モード・コマンドã§å…±é€šã®ã‚ªãƒ—ション:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "å•ã„åˆã‚ã›/検証ã¯ä¸€åº¦ã«ä¸€ã¤ã—ã‹å®Ÿè¡Œã§ãã¾ã›ã‚“。" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "予期ã›ã¬å•ã„åˆã‚ã›ã®ãƒ•ãƒ©ã‚°" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "予期ã›ã¬å•ã„åˆã‚ã›ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "予期ã›ã¬å•ã„åˆã‚ã›ã®ã‚½ãƒ¼ã‚¹" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "一ã¤ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰ã®ã¿ã‚’指定ã—ã¦ä¸‹ã•ã„" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"インストールã€ã‚¢ãƒƒãƒ—グレードã€ã‚½ãƒ¼ã‚¹å‰Šé™¤ã€ã‚¹ãƒšãƒƒã‚¯ãƒ•ã‚¡ã‚¤ãƒ«å‰Šé™¤æ™‚ã®ã¿å¼·åˆ¶ã§ã" +"ã¾ã™ã€‚" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "ファイルã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã«ã®ã¿å†é…ç½®ã§ãã¾ã™ã€‚" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "--prefix 㯠--relocate ã‚„ --excludepath ã¨ã¯åŒæ™‚ã«ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate 㨠--excludepath ã¯æ–°ã—ã„パッケージをインストールã™ã‚‹æ™‚ã®ã¿ä½¿ç”¨ã§" +"ãã¾ã™ã€‚" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix ã¯æ–°è¦ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "--prefix ã®å¼•æ•°ã¯ / ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "--excludedocs 㨠--includedocs ã¯åŒæ™‚ã«ã¯æŒ‡å®šã§ãã¾ã›ã‚“。" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches ã¯ãƒ‘ッケージ削除時ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb ã¯ãƒ‘ッケージ インストール・削除時ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"スクリプトを無効ã«ã™ã‚‹ã‚ˆã†ãªã‚ªãƒ—ションã¯ã€ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€å‰Šé™¤æ™‚ã®" +"ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"トリガーを無効ã«ã™ã‚‹ã‚ˆã†ãªã‚ªãƒ—ションã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€å‰Šé™¤æ™‚ã®ã¿æŒ‡" +"定ã§ãã¾ã™ã€‚" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "--test ã¯ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«/削除/作æˆæ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb ã¯ãƒ‘ッケージ インストール・削除時ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "--root (-r) ã®å¼•æ•°ã¯ / ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "アンインストールã™ã‚‹ãƒ‘ッケージãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "インストールã™ã‚‹ãƒ‘ッケージãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "å•ã„åˆã‚ã›ã®ãŸã‚ã®å¼•æ•°ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "検証ã®ãŸã‚ã®å¼•æ•°ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "BuildRoot ã¯æ—¢ã«æŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ã€‚%s を無視ã—ã¾ã™\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr " ã® %prep (ソース展開㨠patch ã®é©ç”¨) ã¾ã§å®Ÿè¡Œ" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr " ã® %build (%prep ã¨ã‚³ãƒ³ãƒ‘イル) ã¾ã§å®Ÿè¡Œ" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr " ã® %install (%prep, %build, インストール) ã¾ã§å®Ÿè¡Œ" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr " ã® %files セクションを検証" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr " ã‚’å…ƒã«ã€ãƒã‚¤ãƒŠãƒª/ソースパッケージ作æˆ" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr " ã‚’å…ƒã«ã€ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã®ã¿ä½œæˆ" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr " ã‚’å…ƒã«ã€ã‚½ãƒ¼ã‚¹ãƒ‘ッケージã®ã¿ä½œæˆ" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr " ã‹ã‚‰ %prep (ソース展開ã¨ãƒ‘ッãƒé©ç”¨) ã¾ã§å®Ÿè¡Œ" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr " ã‹ã‚‰ %build (%prep ã¨ã‚³ãƒ³ãƒ‘イル) ã¾ã§å®Ÿè¡Œ" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr " ã‹ã‚‰ %install (%prep, %build, インストール) ã¾ã§å®Ÿè¡Œ" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr " ã‹ã‚‰ %files セクションを検証" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr " ã‚’å…ƒã«ã€ãƒã‚¤ãƒŠãƒª/ソースパッケージを作æˆ" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr " ã‚’å…ƒã«ã€ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã®ã¿ã‚’作æˆ" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr " ã‚’å…ƒã«ã€ã‚½ãƒ¼ã‚¹ãƒ‘ッケージã®ã¿ã‚’作æˆ" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr " ã‚’å…ƒã«ãƒã‚¤ãƒŠãƒªãƒ‘ッケージを作æˆ" + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr " ã‹ã‚‰ %install (%prep, %build, インストール) ã¾ã§å®Ÿè¡Œ" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "build root を強制指定" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "パッケージ作æˆå¾Œãƒ„リーを削除" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "spec ファイル㮠ExcludeArch: を無視" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "ファイル状態マシーンã®ãƒ‡ãƒãƒƒã‚°" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "ビルドã®ã©ã®æ®µéšŽã‚‚実行ã—ãªã„" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "ビルドä¾å­˜æ€§ã‚’検証ã—ãªã„" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "(å¤ã„) rpm[23] パッケージング互æ›ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’生æˆ" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "specfile ã‹ã‚‰ i18N msgstr ã‚’å—ã‘付ã‘ãªã„" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "終了後ソースを削除ã—ã¾ã™ã€‚" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "終了時㫠spec ファイルを削除" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "指定ã—ãŸéŽç¨‹ã¾ã§ã‚¹ã‚­ãƒƒãƒ—ã—ã¾ã™ (c, i ã§ã®ã¿æœ‰åŠ¹)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "ターゲットプラットフォームを強制指定" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "[ | | ] ã¨ã®ãƒ“ルドオプション:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "ビルドä¾å­˜æ€§ã®å¤±æ•—:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "spec ファイル %s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "tar パイプã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "%s ã‹ã‚‰ spec ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "%s ã‚’ %s ã«åå‰ã‚’変更ã§ãã¾ã›ã‚“ã§ã—ãŸ: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "stat %s ã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "%s ã¯é€šå¸¸ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "ファイル %s 㯠spec ファイルã§ã¯ãªã„よã†ã§ã™ã€‚\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "ビルド対象プラットフォーム: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "ターゲット %s 用ã«ãƒ“ルド中\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "データベースをåˆæœŸåŒ–ã—ã¾ã™ã€‚" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"インストールã•ã‚ŒãŸãƒ‘ッケージヘッダーã‹ã‚‰ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’å†æ§‹ç¯‰" +"ã—ã¾ã™ã€‚" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "データベースã®æ¤œè¨¼ã‚’è¡Œã„ã¾ã™ã€‚" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "データベース オプション:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "ç½²åã®æ¤œè¨¼ã‚’è¡Œã„ã¾ã™ã€‚" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "ASCII 化ã•ã‚ŒãŸå…¬é–‹éµã‚’å–ã‚Šè¾¼ã¿ã¾ã™ã€‚" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "ç½²åオプション:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "引数ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "パッケージをインストールã—ã¾ã™ã€‚" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "パッケージã«ç½²åã™ã‚‹ (--addsign ã¨åŒä¸€ã§ã™)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "パッケージã®ç½²åを削除ã™ã‚‹" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "ç½²åオプション:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "%s を実行ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "マクロファイル内㧠\"%%_gpg_name\" を設定ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "パスフレーズã®å…¥åŠ›: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "パスフレーズã¯æ­£å¸¸ã§ã™ã€‚\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "パスフレーズã®ãƒã‚§ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "spec ファイルをå•ã„åˆã‚ã›ã¾ã™ã€‚" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "spec ファイルをå•ã„åˆã‚ã›ã¾ã™ã€‚" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "以下ã®å•ã„åˆã‚ã›æ›¸å¼ã‚’使用ã—ã¾ã™ã€‚" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "ç½²åオプション:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "å•ã„åˆã‚ã›ã®ãŸã‚ã®å¼•æ•°ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "一時ファイルを開ã‘ã¾ã›ã‚“。\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "実行中(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "%s ã®å®Ÿè¡Œã«å¤±æ•— (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "%s ã®ä¸æ­£ãªçµ‚了ステータス (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"RPM ビルドã®ã‚¨ãƒ©ãƒ¼:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "構文解æžä¸­ã®æ–‡æ³•ã‚¨ãƒ©ãƒ¼ ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "構文解æžä¸­ã®æ–‡æ³•ã‚¨ãƒ©ãƒ¼ &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "構文解æžä¸­ã®æ–‡æ³•ã‚¨ãƒ©ãƒ¼ ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "å¼ä¸­ã§æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "( ãŒä¸€è‡´ã—ã¾ã›ã‚“\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- ã¯æ•°ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! ã¯æ•°ã«ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "åž‹ã¯ä¸€è‡´ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / ã¯æ–‡å­—列ã«ã¯ä½¿ãˆã¾ã›ã‚“\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- ã¯æ–‡å­—列ã«ã¯ä½¿ãˆã¾ã›ã‚“\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& 㨠|| ã¯æ–‡å­—列ã«ã¯ä½¿ãˆã¾ã›ã‚“\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "å¼ä¸­ã§æ–‡æ³•ã‚¨ãƒ©ãƒ¼\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "%s ã« '(' ãŒã‚ã‚Šã¾ã›ã‚“ %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "%s(%s ã®å¾Œã« ')' ãŒã‚ã‚Šã¾ã›ã‚“\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "無効ãªãƒˆãƒ¼ã‚¯ãƒ³ %s: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "%s ㌠%s %s ã«ã‚ã‚Šã¾ã›ã‚“\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "%s() ã«ç¶šã空白ãŒã‚ã‚Šã¾ã›ã‚“: %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "文法エラー: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "ä¸æ­£ãªãƒ¢ãƒ¼ãƒ‰æŒ‡å®š: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "ä¸æ­£ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¢ãƒ¼ãƒ‰æŒ‡å®š: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "異常ãªãƒ­ã‚±ãƒ¼ãƒ«é•·: \"%.*s (%%lang(%s))\"\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "ロケール %.*s ã®é‡è¤‡ãŒ %%lang(%s) ã«ã‚ã‚Šã¾ã™ã€‚\n" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "ä¸æ­£ãªã‚±ãƒ¼ãƒ‘ビリティã§ã™: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "ファイル ケーパビリティã®ã‚µãƒãƒ¼ãƒˆãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã›ã‚“\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "%%docdir ã®å¼•æ•°ã¯ 1 ã¤ã®ã¿ã§ã™\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "1 行㫠2 ã¤ã®ãƒ•ã‚¡ã‚¤ãƒ«: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "ファイル㯠\"/\" ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "ä»–ã®ãƒ•ã‚©ãƒ¼ãƒ ã§ç‰¹åˆ¥ãª %%doc ã‚’æ··ãœã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" +"ä¸æ˜Žãªãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆ アルゴリズム %u ã§ã™ã€‚MD5 ã«ãƒ•ã‚©ãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã¾" +"ã™ã€‚\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "ファイルãŒ2回表記ã•ã‚Œã¦ã„ã¾ã™: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s %s ã® unlink ã«å¤±æ•—: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "シンボリックリンク㌠BuildRoot を指ã—ã¦ã„ã¾ã™: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "%s ã® spec ファイルã«ã¯æ˜Žç¤ºçš„ãªãƒ•ã‚¡ã‚¤ãƒ«å±žæ€§ãŒå¿…è¦ã§ã™ã€‚\n" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "ペイロードã®ãŸã‚ã®ãƒ•ã‚¡ã‚¤ãƒ« %s ãŒå¤§ãã™ãŽã¾ã™\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: ä¸æ˜Žãªã‚¿ã‚° (%d) を読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: 公開éµã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: ASCII å½¢å¼ã®å…¬é–‹éµã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: build/files.c:1618 +#, c-format +msgid "%s: failed to encode\n" +msgstr "%s: エンコードã«å¤±æ•—\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "ファイルã¯å…ˆé ­ã« \"/\" ãŒå¿…è¦ã§ã™: %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Glob ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ (by glob): %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ (by glob): %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "%%files ã®ãƒ•ã‚¡ã‚¤ãƒ« %s ã‚’é–‹ã‘ã¾ã›ã‚“: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "%s行目: \n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "ä¸æ­£ãªãƒ•ã‚¡ã‚¤ãƒ«: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "ä¸æ­£ãªæ‰€æœ‰è€…/グループ: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "伸張ファイルã®æ¤œæŸ»ä¸­: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"インストール済ã¿(ãŸã ã—未伸張)ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ:\n" +"%s" + +#: build/files.c:2139 +#, c-format +msgid "Processing files: %s\n" +msgstr "ファイルã®å‡¦ç†ä¸­: %s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "noarch パッケージ内ã«ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ä¾å­˜ã®ãƒã‚¤ãƒŠãƒªãƒ¼\n" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "ファイル %s ã§ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–作æˆã«å¤±æ•—: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "アーカイブ作æˆã«å¤±æ•—: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy ã§æ›¸ãè¾¼ã¿ã«å¤±æ•—: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy ã§èª­ã¿è¾¼ã¿ã«å¤±æ•—: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: è¡Œ: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "ホストåã‚’æ­£å¼ãªã‚‚ã®ã«ã§ãã¾ã›ã‚“: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "PreIn ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "PreUn ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "PreTrans ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "PostIn ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "PostUn ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "PostTrans ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "VerifyScript ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "TriggerScript ファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "ä¸æ˜Žãªãƒšã‚¤ãƒ­ãƒ¼ãƒ‰åœ§ç¸®: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "ä¸å¤‰ãƒ˜ãƒƒãƒ€ãƒ¼é ˜åŸŸã‚’作æˆã§ãã¾ã›ã‚“。\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "一時ヘッダーã®æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“。\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "ä¸æ­£ãª CSA データ\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "ç½²åヘッダーã®å†èª­ã¿è¾¼ã¿ãŒã§ãã¾ã›ã‚“。\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "パッケージã®æ›¸ãè¾¼ã¿ã«å¤±æ•—: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "sigtarget %s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "%s ã‹ã‚‰ãƒ˜ãƒƒãƒ€ãƒ¼èª­ã¿è¾¼ã¿ã«å¤±æ•—: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "%s ã¸ã®ãƒ˜ãƒƒãƒ€ãƒ¼æ›¸ãè¾¼ã¿ã«å¤±æ•—: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "%s ã‹ã‚‰ Payload 読ã¿è¾¼ã¿ã«å¤±æ•—: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "%s ã¸ã® Payload 書ãè¾¼ã¿ã«å¤±æ•—: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "書ãè¾¼ã¿å®Œäº†: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "「%sã€ã‚’実行ã—ã¦ã„ã¾ã™:\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "「%sã€ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "パッケージ \"%s\" ã®ãƒã‚§ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "パッケージ %s ã®å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«åを生æˆã§ãã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "%s を作æˆã§ãã¾ã›ã‚“: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "%d 行目: 2番目㮠%s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog エントリ㯠* ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "ä¸å®Œå…¨ãª %%changelog エントリ\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "%%changelog 中ã®ä¸æ­£ãªæ—¥ä»˜: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog ã¯æ—¥ä»˜ã®æ–°ã—ã„é †ã«ä¸¦ã‚“ã§ã„ã¾ã›ã‚“\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "%%changelog 中ã«åå‰ãŒã‚ã‚Šã¾ã›ã‚“\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "%%changelog 中ã«èª¬æ˜ŽãŒã‚ã‚Šã¾ã›ã‚“\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "%d 行目: %%description ã®è§£æžã‚¨ãƒ©ãƒ¼: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "%d 行目: ä¸æ­£ãªã‚ªãƒ—ション %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "%d 行目: åå‰ãŒå¤šã™ãŽã¾ã™: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "%d 行目: パッケージãŒå­˜åœ¨ã—ã¾ã›ã‚“: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "%d 行目: 2番目ã®èª¬æ˜Ž\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "%d 行目: %%files ã®è§£æžã‚¨ãƒ©ãƒ¼: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "%d 行目: %%files ã®è§£æžã‚¨ãƒ©ãƒ¼: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "%d 行目: ä¸æ­£ãªç•ªå·: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "%d 行目: ä¸æ­£ãª no%s 番å·: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "%d 行目: ä¸æ­£ãª %s 番å·: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d ã¯è¤‡æ•°å›žæ•°æŒ‡å®šã—ã¦ã„ã¾ã™\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "アーキテクãƒãƒ£ã¯é™¤å¤–ã•ã‚Œã¦ã„ã¾ã™: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "アーキテクãƒãƒ£ã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "OS ã¯é™¤å¤–ã•ã‚Œã¦ã„ã¾ã™: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "OS ã¯å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "%s フィールドãŒãƒ‘ッケージ中ã«å¿…è¦ã§ã™: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "パッケージ中㫠%s エントリãŒé‡è¤‡ã—ã¦ã„ã¾ã™: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "_docdir_fmt ãŒä¸æ­£ã§ã™: %s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "アイコン %s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "アイコン %s を読むã“ã¨ãŒã§ãã¾ã›ã‚“: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "ä¸æ˜Žãªã‚¢ã‚¤ã‚³ãƒ³ã‚¿ã‚¤ãƒ—: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "%d 行目: ã‚¿ã‚°ã¯ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ 1ã¤ã—ã‹ã¨ã‚Šã¾ã›ã‚“: %s\n" + +#: build/parsePreamble.c:607 +#, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "%d 行目: ä¸æ­£ãªæ–‡å­— '%c' : %s\n" + +#: build/parsePreamble.c:610 +#, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "%d 行目: ä¸æ­£ãªæ–‡å­— '-' : %s\n" + +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "%d 行目: ä¸æ­£ãªã‚·ãƒ¼ã‚±ãƒ³ã‚¹ 「..〠: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "%d 行目: ä¸å®Œå…¨ãªå½¢ã®ã‚¿ã‚°: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "%d 行目: 空ã®ã‚¿ã‚°: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "%d 行目: Prefix 㯠\"/\" ã§çµ‚ã‚ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“: %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "%d 行目: Docdir 㯠'/' ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "%d 行目: Epoch フィールドã¯æ•°å­—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "%d 行目: ä¸æ­£ãªä¿®é£¾å­ %s : %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "%d 行目: ä¸æ­£ãª BuildArchtecture フォーマット: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "%d 行目: noarch サブ パッケージã§ã®ã¿ã‚µãƒãƒ¼ãƒˆ: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "内部エラー: ã«ã›ã®ã‚¿ã‚° %d\n" + +#: build/parsePreamble.c:909 +#, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "%d 行目: %s ã¯éžæŽ¨å¥¨: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "ä¸æ­£ãªãƒ‘ッケージã®æŒ‡å®š: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "パッケージã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "%d 行目: ä¸æ˜Žãªã‚¿ã‚°: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} を空ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} ã‚’ \"\" ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "ä¸æ­£ãªã‚½ãƒ¼ã‚¹: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "パッãƒç•ªå· %u ã¯ã‚ã‚Šã¾ã›ã‚“\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "\"Patch:\" ã‚¿ã‚°ã«è©²å½“ã—ãªã„ %%patch\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "ã‚½ãƒ¼ã‚¹ç•ªå· %u ã¯ã‚ã‚Šã¾ã›ã‚“\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "spec ファイルã«ã€ŒSource:ã€ã‚¿ã‚°ãŒã‚ã‚Šã¾ã›ã‚“\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "nosource %s をダウンロードã§ãã¾ã›ã‚“: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "%%setup ã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "%d 行目: %%setup ã¸ã®ä¸æ­£ãªå¼•æ•°: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "%d 行目: ä¸æ­£ãª %%setup オプション %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "無効ãªãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ç•ªå· %s: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "%d 行目: ãµãŸã¤ç›®ã® %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"%d 行目: ä¾å­˜æ€§ã‚’表ã™èªžã¯è‹±æ•°å­—ã‹ã€'_'ã€'/' ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "%d 行目: ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»˜ã‘ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«åã®ä¸è¨±å¯: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "%d 行目: ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¿…é ˆ: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "%d 行目: ä¸æ­£ãªä¾å­˜æ€§: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "%d 行目: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "%d 行目: トリガーã«ã¯ -- ãŒãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "%d 行目: %s ã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "%d 行目: 内部スクリプト㯠'>' ã§çµ‚ã‚らãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "%d 行目: スクリプトプログラム㯠'/' ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "%d 行目: 2番目㮠%s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "%d 行目: 未サãƒãƒ¼ãƒˆã®å†…部スクリプト: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "%d 行目: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "%%if ãŒé–‰ã˜ã¦ã„ã¾ã›ã‚“\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean ㌠%d ã‚’è¿”ã—ã¾ã—ãŸã€‚\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: %%if ãŒãªã„ã®ã« %%else ãŒã‚ã‚Šã¾ã™\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: %%if ãŒãªã„ã®ã« %%endif ãŒã‚ã‚Šã¾ã™\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "ãŠã‹ã—㪠%%include è¡Œã§ã™\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "作æˆ(build)å¯èƒ½ãªäº’æ›ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã¯ã‚ã‚Šã¾ã›ã‚“\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "パッケージã«ã¯ %%description ãŒã‚ã‚Šã¾ã›ã‚“: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "%s ã‹ã‚‰ spec ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "%s ã‹ã‚‰ spec ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "%s ã‹ã‚‰ spec ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "tar パイプã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "%%setup ã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "実行中(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "%s ㌠%s %s ã«ã‚ã‚Šã¾ã›ã‚“\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "%s:%d ã§ãƒ‡ãƒ¼ã‚¿è¡Œã«å¼•æ•°ãŒå¤šã™ãŽã¾ã™\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "ファイルã®å‡¦ç†ä¸­: %s\n" + +#: build/rpmfc.c:107 +#, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "ä¸æ­£ãªæ­£è¦è¡¨ç¾ %s を無視ã—ã¾ã™\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "%s ã®ãŸã‚ã®ãƒ‘イプ作æˆãŒã§ãã¾ã›ã‚“: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "%s を実行ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "%s ã®ãƒ•ã‚©ãƒ¼ã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s: 失敗: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "%s ã¸å…¨ãƒ‡ãƒ¼ã‚¿ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "%s ã®æ•´æ•°(long int)ã¸ã®å¤‰æ›ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "構æˆã™ã¹ãファイル属性ãŒã‚ã‚Šã¾ã›ã‚“。\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +# ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ç¢ºèª +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "ファイル \"%s\" ã®æ‰¿èªã«å¤±æ•—ã—ã¾ã—ãŸ: モード %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "%s を検索ã—ã¦ã„ã¾ã™: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "%s ã®æ¤œç´¢ã«å¤±æ•—ã—ã¾ã—ãŸ:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "スペックファイル %s ã®å•ã„åˆã‚ã›ã«å¤±æ•—ã—ã¾ã—ãŸã€‚解æžã§ãã¾ã›ã‚“。\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(エラー 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "ä¸æ­£ãªãƒžã‚¸ãƒƒã‚¯" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "ä¸æ­£ãª/ä¸å¯èª­ãªãƒ˜ãƒƒãƒ€ãƒ¼" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "ヘッダーサイズãŒå¤§ãã™ãŽã¾ã™ã€‚" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "ä¸æ˜Žãªãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "ダイジェストãŒé©åˆã—ã¾ã›ã‚“" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "内部エラー" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "アーカイブファイルãŒãƒ˜ãƒƒãƒ€ãƒ¼ã«ã‚ã‚Šã¾ã›ã‚“。" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr "失敗 - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "パッケージ %s ã¯æ—¢ã«è¿½åŠ ã•ã‚Œã¦ã„ã¾ã™ã€‚%s を飛ã°ã—ã¾ã™ã€‚\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "パッケージ %s ã¯æ—¢ã«è¿½åŠ ã•ã‚Œã¦ã„ã¾ã™ã€‚ %s ã¨ç½®æ›ã—ã¾ã™ã€‚\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(æ•°å­—ã§ã¯ã‚ã‚Šã¾ã›ã‚“)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(base64 ã§ã¯ã‚ã‚Šã¾ã›ã‚“)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(ä¸æ­£ãªã‚¿ã‚¤ãƒ—)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(blob ã§ã¯ã‚ã‚Šã¾ã›ã‚“)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(ä¸æ­£ãª XML タイプ)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(OpenPGP ç½²åã§ã¯ã‚ã‚Šã¾ã›ã‚“)" + +#: lib/formats.c:588 +msgid "normal" +msgstr "通常" + +#: lib/formats.c:591 +msgid "replaced" +msgstr "ç½®æ›" + +#: lib/formats.c:594 +msgid "not installed" +msgstr "未インストール" + +#: lib/formats.c:597 +msgid "net shared" +msgstr "ãƒãƒƒãƒˆå…±æœ‰" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "é–“é•ã£ãŸè‰²" + +#: lib/formats.c:603 +msgid "missing" +msgstr "見ã¤ã‹ã‚Šã¾ã›ã‚“" + +#: lib/formats.c:606 +msgid "(unknown)" +msgstr "(ä¸æ˜Ž) " + +#: lib/formats.c:645 +msgid "(not a string)" +msgstr "(文字列ã§ãªã„)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "ユーザー %s ã¯å­˜åœ¨ã—ã¾ã›ã‚“ - root を使用ã—ã¾ã™\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "グループ %s ã¯å­˜åœ¨ã—ã¾ã›ã‚“ - root を使用ã—ã¾ã™\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "アーカイブファイル %s ãŒãƒ˜ãƒƒãƒ€ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ãƒªã‚¹ãƒˆã«ã‚ã‚Šã¾ã›ã‚“。\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s 㯠%s ã¨ã—ã¦ä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s %s ã® rmdir ã«å¤±æ•—: ディレクトリãŒç©ºã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s %s ã® rmdir ã«å¤±æ•—: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s %s ã® unlink ã«å¤±æ•—: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s 㯠%s ã¨ã—ã¦ä½œæˆã•ã‚Œã¾ã—ãŸã€‚\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "%s ã«è¨¼æ˜Žã§ããªã„ V%u ç½²åãŒã¤ã„ã¦ã„ãŸãŸã‚スキップã—ã¾ã—ãŸã€‚\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "blob サイズ (%d): 異常ã§ã™ã€‚8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "ã‚¿ã‚°[%d]: 異常ã§ã™ã€‚tag %d type %d offset %d count %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "リージョン オフセット: 異常ã§ã™ã€‚tag %d type %d offset %d count %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "リージョン ヘッダー以é™: 異常ã§ã™ã€‚tag %d type %d offset %d count %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "リージョン容é‡: 異常ã§ã™ã€‚ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "SHA1 ヘッダー: 異常ã§ã™ã€‚16 進数ã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "RSA ヘッダー: 異常ã§ã™ã€‚ãƒã‚¤ãƒŠãƒªã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "DSA ヘッダー: 異常ã§ã™ï¼Žãƒã‚¤ãƒŠãƒªã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "ヘッダー容é‡(%d): 異常ã§ã™ã€‚読ã¿è¾¼ã¿çµæžœã¯ %d ã§ã™ã€‚\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "ヘッダー マジック: 異常ã§ã™ã€‚\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "ヘッダー ã‚¿ã‚°: 異常ã§ã™ã€‚ã‚¿ã‚°(%d)ã®ç•ªå·ãŒç¯„囲外ã§ã™ã€‚\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "ヘッダー データ: 異常ã§ã™ã€‚ãƒã‚¤ãƒˆæ•°(%d)ãŒç¯„囲外ã§ã™ã€‚\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "ヘッダー blob(%zd): 異常ã§ã™ã€‚読ã¿è¾¼ã¿çµæžœã¯ %d ã§ã™ã€‚\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "ヘッダー ロード: 異常ã§ã™ã€‚\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature ã«å¤±æ•—ã—ã¾ã—ãŸ: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: ç½²åãŒã‚ã‚Šã¾ã›ã‚“。\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead ã«å¤±æ•—ã—ã¾ã—ãŸ: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s ã¯ãƒ‡ãƒ«ã‚¿ RPM ã§ã€ç›´æŽ¥ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã›ã‚“。\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "パッケージ %s 内ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ペイロード (%s) ã§ã™ã€‚\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "値 EXPR ã‚’æŒã¤ãƒžã‚¯ãƒ­ã‚’予ã‚定義ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "'MACRO EXPR'" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "値 EXPR ã‚’æŒã¤ MACRO を定義ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "EXPR ã®ãƒžã‚¯ãƒ­ã‚’展開ã—ãŸçµæžœã‚’表示ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "'EXPR'" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "デフォルトファイルã®ä»£ã‚り㫠を読ã¿è¾¼ã¿ã¾ã™ã€‚" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "パッケージダイジェストã®æ¤œè¨¼ã‚’ã—ã¾ã›ã‚“。" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "å–å¾—ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’検証ã—ã¾ã›ã‚“。" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "パッケージ署åã®æ¤œè¨¼ã‚’ã—ã¾ã›ã‚“。" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "標準出力を CMD ã«é€ä¿¡ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "ROOT をトップ ディレクトリーã¨ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "å…¨å•ã„åˆã‚ã›ã‚¿ã‚°ã‚’表示ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "最終的㪠rpmrc ã¨ãƒžã‚¯ãƒ­ã®è¨­å®šã‚’表示ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "詳細ã§ãªã„出力をæä¾›ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "より詳細ãªå‡ºåŠ›ã‚’æä¾›ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "使用ã—ã¦ã„ã‚‹ rpm ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã—ã¾ã™ã€‚" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "ペイロードã®ãƒ•ã‚¡ã‚¤ãƒ«çŠ¶æ…‹ãƒžã‚·ãƒ³ã®ãƒ‡ãƒãƒƒã‚°" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "rpmio 入出力ã®ãƒ‡ãƒãƒƒã‚°" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: オプション テーブルã®è¨­å®šãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“ (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "除外ã™ã‚‹ãƒ‘ス㯠/ ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "å†é…置㯠/ ã‹ã‚‰å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "å†é…置㯠= ã‚’å«ã‚“ã§ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "å†é…置㯠= ã®æ¬¡ã« / ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "設定ãŒã‚¹ã‚­ãƒƒãƒ—を指示ã—ã¦ã„ã¦ã‚‚ã€å…¨ãƒ•ã‚¡ã‚¤ãƒ«ã‚’インストールã—ã¾ã™ã€‚" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +" ã¨ä¸€è‡´ã™ã‚‹ãƒ‘ッケージ全ã¦ã‚’削除ã—ã¾ã™(通常㯠ãŒè¤‡æ•°ã®ãƒ‘ッ" +"ケージを指ã™å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "å†é…ç½®ä¸å¯èƒ½ãªãƒ‘ッケージã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å†é…ç½®ã—ã¾ã™ã€‚" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "ä¾å­˜ã®ãƒ«ãƒ¼ãƒ—を警告ã¨ã—ã¦è¡¨ç¤ºã—ã¾ã™ã€‚" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "パッケージを削除 (アンインストール) ã—ã¾ã™ã€‚" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "設定ファイルをインストールã—ã¾ã›ã‚“。" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "ドキュメントをインストールã—ã¾ã›ã‚“。" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "パス 中ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’スキップã—ã¾ã™ã€‚" + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "--replacepkgs 㨠--replacefiles を短縮ã—ãŸã‚‚ã®" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "æ—¢ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ¸ˆã¿ã®å ´åˆã®ã¿ã‚¢ãƒƒãƒ—グレード" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "" +"パッケージをインストールã«ã¤ã‚Œã¦ '#' を表示ã—ã¾ã™ (-v ã¨ä½¿ç”¨ã™ã‚‹ã¨è‰¯ã„)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "パッケージã®å¯¾è±¡ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã‚’検証ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "パッケージ対象 OS ã®æ¤œè¨¼ã‚’è¡Œã„ã¾ã›ã‚“。" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "インストールå‰ã®ãƒ‡ã‚£ã‚¹ã‚¯å®¹é‡ãƒã‚§ãƒƒã‚¯ã‚’è¡Œã„ã¾ã›ã‚“。" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "ドキュメントをインストールã—ã¾ã™ã€‚" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "パッケージをインストールã—ã¾ã™ã€‚" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "データベースを更新ã—ã¾ã™ãŒã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã®å¤‰æ›´ã¯è¡Œã„ã¾ã›ã‚“。" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "パッケージã®ä¾å­˜é–¢ä¿‚ã®æ¤œè¨¼ã‚’è¡Œã„ã¾ã›ã‚“。" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "ファイルã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã‚’検証ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "ファイルã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã‚’検証ã—ã¾ã›ã‚“ (æ—§å¼)。" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "ファイルã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ コンテキストをインストールã—ã¾ã›ã‚“。" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "ä¾å­˜æ€§ã‚’満ãŸã™ç‚ºã®ãƒ‘ッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«é †åºã‚’変更ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "パッケージ指定ã®ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "%%pre スクリプトを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "%%post スクリプトを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "%%preun スクリプトを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "%%postun スクリプトを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "ã“ã®ãƒ‘ッケージã«ã‚ˆã£ã¦ãƒˆãƒªã‚¬ãƒ¼ã•ã‚Œã‚‹ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "%%triggerprein スクリプトを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "%%triggerin スクリプトを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "%%triggerun スクリプトを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "%%triggerpostun スクリプトを実行ã—ã¾ã›ã‚“。" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "ã„ã‹ãªã‚‹åŽé›†æ´»å‹•ã‚‚è¡Œã‚ãªã„ã§ãã ã•ã„。" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"å¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ‘ッケージã«ã‚¢ãƒƒãƒ—グレードã—ã¾ã™(アップグレード時㮠--force " +"ã¯ã“れを自動的ã«è¡Œã„ã¾ã™)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "インストールã™ã‚‹éš›ã«ãƒ‘ーセント表示を行ã„ã¾ã™ã€‚" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "パッケージãŒå†é…ç½®å¯èƒ½ãªã‚‰ã°ã€ ã«å†é…ç½®ã—ã¾ã™ã€‚" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "パス ã‹ã‚‰ãƒ‘ス ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å†é…ç½®ã•ã›ã¾ã™ã€‚" + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "パッケージ間ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ç«¶åˆã‚’無視ã—ã¾ã™ã€‚" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "æ—¢ã«å­˜åœ¨ã™ã‚‹ãƒ‘ッケージã§ã‚‚å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "インストールã›ãšã«ã€ãƒ†ã‚¹ãƒˆã®ã¿ã‚’è¡Œã„ã¾ã™ã€‚" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "パッケージをアップグレードã—ã¾ã™ã€‚" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "ã™ã¹ã¦ã®ãƒ‘ッケージã«ã¤ã„ã¦å•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "rpm ã®ç½²å検査モード" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr " を所有ã—ã¦ã„るパッケージをå•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "グループã«æ‰€å±žã™ã‚‹ãƒ‘ッケージをå•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "パッケージファイルã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "パッケージ ID ã§å•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "ヘッダー ID ã§ãƒ‘ッケージをå•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "rpm å•ã„åˆã‚ã›ãƒ¢ãƒ¼ãƒ‰" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "ヘッダー インスタンスã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "" +"インストール トランザクションã‹ã‚‰ã®ãƒ‘ッケージã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "パッケージã«ã‚ˆã£ã¦ãƒˆãƒªã‚¬ãƒ¼ã•ã‚Œã‚‹ãƒ‘ッケージをå•ã„åˆã‚ã›ã¾ã™ã€‚" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "RPM 検証モード" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "ä¾å­˜æ€§ã‚’è¦æ±‚ã™ã‚‹ãƒ‘ッケージã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "ä¾å­˜æ€§ã‚’æä¾›ã™ã‚‹ãƒ‘ッケージã®å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "引数を glob パターンã¨ã—ã¦ã¿ãªã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "リスト内ã®éžãƒ‘ッケージファイルを処ç†ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "å…¨ã¦ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’列挙ã—ã¾ã™ã€‚" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "å…¨ã¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’列挙ã—ã¾ã™ã€‚" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "基本的ãªãƒ•ã‚¡ã‚¤ãƒ«æƒ…報をダンプã—ã¾ã™ã€‚" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "パッケージ中ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’列挙ã—ã¾ã™ã€‚" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "%%ghost ファイルをスキップã—ã¾ã™ã€‚" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "列挙ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã®çŠ¶æ…‹ã‚’表示ã—ã¾ã™ã€‚" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "ファイル容é‡ã‚’検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "ファイルã®ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã‚’検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "ファイルã®æ‰€æœ‰è€…を検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "ファイルã®æ‰€æœ‰ã‚°ãƒ«ãƒ¼ãƒ—を検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "ファイルã®æœ€çµ‚更新日を検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "ファイルã®ãƒ¢ãƒ¼ãƒ‰ã‚’検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "ファイルã®ã‚±ãƒ¼ãƒ‘ビリティ (capability) を検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "ファイルã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ コンテキストを検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "パッケージ中ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "パッケージã®ä¾å­˜é–¢ä¿‚を検証ã—ã¾ã›ã‚“。" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "検証スクリプトを実行ã—ã¾ã›ã‚“。" + +#: lib/psm.c:212 +#, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "%s ã® rpmlib 機能ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "ソースパッケージãŒæœŸå¾…ã•ã‚Œã¾ã™ãŒã€ã“ã‚Œã¯ãƒã‚¤ãƒŠãƒªãƒ‘ッケージã§ã™\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "ソースパッケージ㫠.spec ファイルãŒã‚ã‚Šã¾ã›ã‚“\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "アーカイブã®ä¼¸é•·ã«å¤±æ•—%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr ": ファイル " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s: ファイル %s ã§å¤±æ•—: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s: 失敗: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "ä¸æ­£ãªæ›¸å¼: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(ファイルãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "通常 " + +#: lib/query.c:163 +msgid "replaced " +msgstr "ç½®æ› " + +#: lib/query.c:166 +msgid "not installed " +msgstr "未インストール" + +#: lib/query.c:169 +msgid "net shared " +msgstr "ãƒãƒƒãƒˆå…±æœ‰ " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "é–“é•ã£ãŸè‰² " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(状態ãªã—) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(未知㮠%3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "パッケージã¯ãƒ•ã‚¡ã‚¤ãƒ«æ‰€æœ‰è€…/グループ一覧をæŒã£ã¦ã„ã¾ã›ã‚“。\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "パッケージã¯ãƒ•ã‚¡ã‚¤ãƒ«æ‰€æœ‰è€…ã‚‚ id リストもæŒã£ã¦ã„ã¾ã›ã‚“\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "グループ %s ã«å±žã™ã‚‹ãƒ‘ッケージã¯å­˜åœ¨ã—ã¾ã›ã‚“。\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "%s をトリガーã™ã‚‹ãƒ‘ッケージãŒå­˜åœ¨ã—ã¾ã›ã‚“。\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "ä¸æ­£ãª %s ã®æŒ‡å®š: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "%s ã«ä¸€è‡´ã™ã‚‹ãƒ‘ッケージã¯å­˜åœ¨ã—ã¾ã›ã‚“: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "%s ã‚’å¿…è¦ã¨ã™ã‚‹ãƒ‘ッケージã¯å­˜åœ¨ã—ã¾ã›ã‚“。\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "%s ã‚’æä¾›ã™ã‚‹ãƒ‘ッケージã¯å­˜åœ¨ã—ã¾ã›ã‚“。\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "ファイル %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "ファイル %s ã¯ã©ã®ãƒ‘ッケージã«ã‚‚属ã—ã¦ã„ã¾ã›ã‚“。\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "無効ãªãƒ‘ッケージ番å·: %s\n" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "レコード %u ã¯èª­ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "パッケージ %s ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "ä¸æ˜Žãªã‚¿ã‚°: \"%s\"\n" + +#: lib/rpmchecksig.c:43 +#, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: キー %d ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: lib/rpmchecksig.c:47 +#, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: キー %d 㯠ASCII å½¢å¼ã®å…¬é–‹éµã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: インãƒãƒ¼ãƒˆèª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ(%d)。\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"%s: ä¸å¤‰ã®ãƒ˜ãƒƒãƒ€ãƒ¼é ˜åŸŸãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚パッケージãŒå£Šã‚Œã¦ã„ã¾ã›ã‚“" +"ã‹ï¼Ÿ\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" +"パッケージ %s ã«è¨¼æ˜Žã§ããªã„ V%u ç½²åãŒã¤ã„ã¦ã„ã‚‹ãŸã‚スキップã—ã¾ã—ãŸã€‚\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "OK ã§ã¯ã‚ã‚Šã¾ã›ã‚“。" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr "(見ã¤ã‹ã‚‰ãªã„éµ:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr "(ä¿¡é ¼ã§ããªã„éµ:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: オープンã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "ルート ディレクトリーã®å¾©å…ƒã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s: chroot ディレクトリーãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "ルート ディレクトリーã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n" + +#: lib/rpmchroot.c:95 +#, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "ルート ディレクトリーã®å¾©å…ƒã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NO " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "YES" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" +"「PreReq:ã€ã€ŒProvides:ã€ã€ŒObsoletes:ã€ã®ä¾å­˜é–¢ä¿‚をサãƒãƒ¼ãƒˆã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"ファイルåãŒã€ãƒ‘スã§ã¯ãªã (dirName, baseName, dirIndex) ã®çµ„ã§æ ¼ç´ã•ã‚Œã¾ã™ã€‚" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "パッケージ ペイロード㌠bzip2 を用ã„ã¦åœ§ç¸®ã§ãã¾ã™ã€‚" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "パッケージ ペイロード㌠xz を用ã„ã¦åœ§ç¸®ã§ãã¾ã™ã€‚" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "パッケージ ペイロード㌠lzma を用ã„ã¦åœ§ç¸®ã§ãã¾ã™ã€‚" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "パッケージ ペイロード ファイルãŒã€Œ./ã€æŽ¥é ­èªžã‚’æŒã£ã¦ã„ã¾ã™ã€‚" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "「パッケージå-ãƒãƒ¼ã‚¸ãƒ§ãƒ³-リリースã€ãŒæš—é»™ã§æä¾›ã•ã‚Œã¾ã›ã‚“。" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "ヘッダー ã‚¿ã‚°ãŒèª­ã¿è¾¼ã¾ã‚ŒãŸå¾Œã€å¸¸ã«ã‚½ãƒ¼ãƒˆã•ã‚Œã¾ã™ã€‚" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "スクリプト インタプリターãŒãƒ˜ãƒƒãƒ€ãƒ¼ã‹ã‚‰å¼•æ•°ã‚’使用ã§ãã¾ã™ã€‚" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ ファイル群ãŒå®Œå…¨ã§ãªãã¦ã‚‚インストールã§ãã¾ã™ã€‚" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" +"インストール中ã«ã€ãƒ‘ッケージスクリプト㌠rpm データベースã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚" + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "lua スクリプトã®å†…部サãƒãƒ¼ãƒˆã€‚" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "ファイルã®ãƒ€ã‚¤ã‚¸ã‚§ã‚¹ãƒˆã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã¯ãƒ‘ッケージ毎ã®è¨­å®šã§ã™" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "POSIX..1e ファイル ケーパビリティ (capability) ã®ãŸã‚ã®ã‚µãƒãƒ¼ãƒˆ" + +#: lib/rpmds.c:911 +msgid "package scriptlets can be expanded at install time." +msgstr "パッケージã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚é–“ã‚’é•·ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: RPM パッケージ(ã¾ãŸã¯ãƒ‘ッケージã®ãƒªã‚¹ãƒˆ)ã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "準備ã—ã¦ã„ã¾ã™..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’準備ã—ã¦ã„ã¾ã™..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "ä¾å­˜æ€§ã®æ¬ å¦‚:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: RPM パッケージ(ã¾ãŸã¯ãƒ‘ッケージã®ãƒªã‚¹ãƒˆ)ã§ã¯ã‚ã‚Šã¾ã›ã‚“: %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s をインストールã§ãã¾ã›ã‚“。\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "%s ã‚’å–得中\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "%s をスキップã—ã¾ã™ - 転é€ã«å¤±æ•—ã—ã¾ã—ãŸ\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "パッケージ %s ã¯å†é…ç½®ã§ãã¾ã›ã‚“。\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "ファイル %s ã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "ファイル %s ã«ã¯ã‚ˆã‚Šæ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® RPM ãŒå¿…è¦ã§ã™ã€‚\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" ã¯è¤‡æ•°ã®ãƒ‘ッケージを指定ã—ã¦ã„ã¾ã™:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "%s をインストール中ã§ã™ã€‚\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "rpm パッケージã§ã¯ã‚ã‚Šã¾ã›ã‚“。" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "ç½²åã®ç¨®é¡žãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ RPM パッケージã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "読ã¿è¾¼ã¿ã®å¤±æ•—: %s (%d)\n" + +#: lib/rpmlead.c:126 +msgid "not an rpm package\n" +msgstr "rpm パッケージã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "%s ロックを(%s 上ã«ï¼‰ä½œæˆã§ãã¾ã›ã‚“。(%s)\n" + +#: lib/rpmlock.c:106 +#, c-format +msgid "waiting for %s lock on %s\n" +msgstr "%s ロックを待ã£ã¦ã„ã¾ã™ã€‚(%s 上)\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n" + +#: lib/rpmplugins.c:67 +#, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "シンボル %s ã®è§£æ±ºã«å¤±æ•—: %s\n" + +# ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ç¢ºèª +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "%%__collection_%s マクロã®æ‹¡å¼µã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "シンボル %s ã®è§£æ±ºã«å¤±æ•—: %s\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "ç•°ãªã‚‹" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "パッケージ %s 㯠%s アーキテクãƒãƒ£å‘ã‘ã§ã™" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "パッケージ %s 㯠%s OS å‘ã‘ã§ã™" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "パッケージ %s ã¯æ—¢ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã™ã€‚" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "パス %s (%s パッケージ) ã¯å†é…ç½®ã§ãã¾ã›ã‚“。" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "ファイル %s 㯠%s 㨠%s ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ç«¶åˆã—ã¦ã„ã¾ã™ã€‚" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"ファイル %s (パッケージ %s ã‹ã‚‰) ã¯ã€ãƒ‘ッケージ %s ã‹ã‚‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¨ç«¶åˆã—ã¦ã„" +"ã¾ã™ã€‚" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "パッケージ %s (%s より新ã—ã„ã‚‚ã®) ã¯æ—¢ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã™ã€‚" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"パッケージ %s ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«ã¯ %%cB ã®é ˜åŸŸãŒ %s ファイスシステム上" +"ã«å¿…è¦ã§ã™ã€‚" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"パッケージ %s ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«ã¯ % ã® inode ㌠%s ファイスシステム上" +"ã«å¿…è¦ã§ã™ã€‚" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s 㯠%s%s ã«å¿…è¦ã¨ã•ã‚Œã¦ã„ã¾ã™" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(インストール済ã¿)" + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s 㯠%s%s ã¨ç«¶åˆã—ã¾ã™ã€‚" + +#: lib/rpmprob.c:172 +#, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s 㯠%s%s ã«ã‚ˆã£ã¦ä¸è¦ã¨ã•ã‚Œã¦ã„ã¾ã™" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ %d ãŒãƒ‘ッケージ %s æ“作中ã«ç™ºç”Ÿã—ã¾ã—ãŸ" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "2番目㮠':' ãŒã‚ã‚Šã¾ã›ã‚“ (%s:%d ã§)\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "%s:%d ã«ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£åãŒã‚ã‚Šã¾ã›ã‚“\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "%s:%d ã§ãƒ‡ãƒ¼ã‚¿è¡ŒãŒä¸å®Œå…¨ã§ã™\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "%s:%d ã§ãƒ‡ãƒ¼ã‚¿è¡Œã«å¼•æ•°ãŒå¤šã™ãŽã¾ã™\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "ä¸æ­£ãª arch/os 番å·: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "%s:%d ã§ä¸å®Œå…¨ãªãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¡Œ\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "%s:%d ã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¡Œã«å¼•æ•°ãŒå¤šã™ãŽã¾ã™\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "':' ãŒã‚ã‚Šã¾ã›ã‚“ (0x%02x ãŒè¦‹ã¤ã‹ã£ãŸ) (%s:%d)\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "%s ã®å¼•æ•°ãŒã‚ã‚Šã¾ã›ã‚“ (%s:%d)\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "%s ãŒé–‹ã‘ã¾ã›ã‚“ (%s:%d): %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "%s 用ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ (%s:%d)\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "ä¸æ­£ãªã‚ªãƒ—ションã§ã™: '%s' (%s:%d)\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "ä¸æ˜Žãªã‚·ã‚¹ãƒ†ãƒ : %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "%s ã«é€£çµ¡ã—ã¦ãã ã•ã„。\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "%s を読ã¿è¾¼ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“: %m。\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "ルート ディレクトリーã®å¾©å…ƒã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr " スクリプトã¯çµ„ã¿è¾¼ã¿ã§ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“\n" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "%s ã®ä¸€æ¬¡ãƒ•ã‚¡ã‚¤ãƒ«ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "ファイル ディスクリプターã®è¤‡è£½ãŒã§ãã¾ã›ã‚“: %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s スクリプトã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚waitpid (%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s スクリプトã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚シグナル %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s スクリプトã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸã€‚終了ステータス %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "ä¸æ˜Žãªæ›¸å¼" + +#: lib/rpmte.c:820 +msgid "install" +msgstr "インストール" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "削除" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "%s ã«ã‚ã‚‹ Package データベースを開ã‘ã¾ã›ã‚“。\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "パッケージラベル中ã«ä½™åˆ†ãªã€Œ(ã€ãŒã‚ã‚Šã¾ã™: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "パッケージラベル中ã«ã€Œ(ã€ãŒã‚ã‚Šã¾ã›ã‚“: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "パッケージラベル中ã«ã€Œ)ã€ãŒã‚ã‚Šã¾ã›ã‚“: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: 公開éµã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "トランザクション" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "ç½²åã®å®¹é‡ (%d): 異常ã€read ㌠%d ã‚’è¿”ã—ã¾ã—ãŸ\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "ç½²åã®ç›®å°: ä¸æ­£\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "ç½²åã‚¿ã‚°: 異常ã€ã‚¿ã‚°ã®æ•° (%d) ãŒç¯„囲外ã§ã™ã€‚\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "ç½²åデータ: 異常ã€ãƒã‚¤ãƒˆæ•° (%d) ãŒç¯„囲外ã§ã™ã€‚\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "ç½²å blob(%d): 異常ã€read ㌠%d ã‚’è¿”ã—ã¾ã—ãŸã€‚\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "ç½²åã‚¿ã‚°[%d]: ä¸æ­£ã€ã‚¿ã‚° %d タイプ %d オフセット %d カウント %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "ç½²åã®èª­ã¿è¾¼ã¿: ä¸æ­£ã€‚\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "ç½²åã® pad 容é‡(%zd): 異常ã€%zd ãƒã‚¤ãƒˆèª­ã¿è¾¼ã¿ã¾ã—ãŸã€‚\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "ç½²åã®å®¹é‡(%zd): 異常ã€fstat(2) ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"ä¸å¤‰ãªãƒ˜ãƒƒãƒ€ãƒ¼é ˜åŸŸã‚’読むã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚パッケージãŒå£Šã‚Œã¦ã„ã¾ã›ã‚“" +"ã‹ï¼Ÿ\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "MD5 ダイジェスト:" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "ヘッダー SHA1 ダイジェスト:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "ヘッダー " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "ç½²å確èª: 異常ãªãƒ‘ラメータã§ã™ã€‚\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "ç½²å: 未知(%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "スキップã—ãŸ" + +#: lib/transaction.c:1388 +msgid "failed" +msgstr "失敗" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "%c %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "%s ã®ãŸã‚ã®ä¾å­˜æ€§ã‚’満ãŸã—ã¦ã„ã¾ã›ã‚“。\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "% ã®å¾Œã« { ãŒã‚ã‚Šã¾ã›ã‚“。" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "%{ ã®å¾Œã« } ãŒã‚ã‚Šã¾ã›ã‚“。" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "空ã®ã‚¿ã‚°ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "空ã®ã‚¿ã‚°å" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "ä¸æ˜Žãªã‚¿ã‚°" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "é…列ã®å¾Œã« ] ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "予期ã›ã¬ ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "予期ã›ã¬ }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "å¼ä¸­ã§ ? ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "å¼ä¸­ã§ ? ã®å¾Œã« { ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "å¼ä¸­ã« } ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "? サブå¼ã®å¾Œã« : ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "å¼ä¸­ã§ : ã®å¾Œã« { ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "å¼ã®çµ‚ã‚ã‚Šã« | ãŒæœŸå¾…ã•ã‚Œã¾ã™ã€‚" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "é…列ã®ç¹°ã‚Šè¿”ã—指定ãŒã€ã‚µã‚¤ã‚ºãŒç•°ãªã‚‹é…列ã®é–“ã§ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "%s インデックスを db%d ã§é–‹ã‘ã¾ã›ã‚“ - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "dbpath ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "エラー(%d) - レコード \"%s\" å–得時 (%s インデックスã‹ã‚‰)\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: スキップã—ã¾ã™ã€‚" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "エラー(%d) - レコード #%d ã‚’ %s ã«æ ¼ç´æ™‚\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: æ­£è¦è¡¨ç¾ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: スキップã—ã¾ã™ã€‚" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "" +"rpmdb: ç ´æã—ãŸãƒ˜ãƒƒãƒ€ãƒ¼ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ #%u ã‚’å–å¾—ã—ã¾ã—ãŸã€‚スキップã—ã¾ã™ã€‚\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "エラー(%d) - レコード \"%s\" å–得時 (%s インデックスã‹ã‚‰)\n" + +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "エラー(%d) - ヘッダー #%d レコードã®è¿½åŠ æ™‚\n" + +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "エラー(%d) - ヘッダー #%d レコードã®å‰Šé™¤æ™‚\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: ヘッダーを読むã“ã¨ãŒã§ãã¾ã›ã‚“ (0x%x)\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "エラー(%d) - \"%s\" ã®ãƒ¬ã‚³ãƒ¼ãƒ‰è¨­å®šæ™‚ (%s インデックスã‹ã‚‰)\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "エラー(%d) - レコード \"%s\" ã‚’ %s ã«æ ¼ç´æ™‚\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "エラー(%d) - レコード \"%s\" ã‚’ %s ã‹ã‚‰å‰Šé™¤æ™‚\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "エラー(%d) - æ–°ã—ã„パッケージインスタンスã®å‰²ã‚Šå½“ã¦æ™‚\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "エラー(%d) - レコード %s ã‚’ %s ã«ã‚¹ãƒˆã‚¢æ™‚\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "dbpath ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "ディレクトリー %s ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "データベース中ã®ãƒ˜ãƒƒãƒ€ãƒ¼ #%u ã¯ä¸æ­£ã§ã™ -- スキップã—ã¾ã™ã€‚\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "元々 %u ã«ã‚ã£ãŸãƒ¬ã‚³ãƒ¼ãƒ‰ã‚’追加ã§ãã¾ã›ã‚“。\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "データベースã®å†æ§‹ç¯‰ã«å¤±æ•—: オリジナルã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯æ®‹ã£ã¦ã„ã¾ã™ã€‚\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "å¤ã„データベースを新ã—ã„データベースã§ç½®ãæ›ãˆã‚‹ã®ã«å¤±æ•—!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "復元ã™ã‚‹ã«ã¯ %s 内ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ %s 内ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§ç½®ãæ›ãˆã¦ä¸‹ã•ã„" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "ディレクトリー %s ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d エラー (%d) (%s ã«ãŠã„ã¦): %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d エラー (%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "%sロックをç²å¾—ã§ãã¾ã›ã‚“ (%s/%s)\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "共有" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "排他" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "データベースインデックス %s/%s を検証ã—ã¾ã—ãŸã€‚\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "ä¸æ˜Žãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚ªãƒ—ション: \"%s\" ã¯ç„¡è¦–ã—ã¾ã™ã€‚\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s ã«ã¯ä¸æ­£ãªæ•°å€¤ãŒã‚ã‚Šã¾ã™ã€‚スキップã—ã¾ã™\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s ã«ã¯å¤§ã/å°ã•éŽãŽã‚‹long値ãŒã‚ã‚Šã¾ã™ã€‚スキップã—ã¾ã™\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s ã«ã¯å¤§ã/å°ã•éŽãŽã‚‹æ•´æ•°å€¤ãŒã‚ã‚Šã¾ã™ã€‚スキップã—ã¾ã™\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "%s ã‹ã‚‰ spec ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "%s ã®ä¸€æ¬¡ãƒ•ã‚¡ã‚¤ãƒ«ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "%s ã‹ã‚‰ spec ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "%s ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "サーãƒã¨ã®æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸã€‚" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "ディレクトリー %s ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "シンボル %s ã®è§£æ±ºã«å¤±æ•—: %s\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "シンボルã®è§£æ±ºã«å¤±æ•—: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "%s ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "マクロ %%%s ã¯ãƒœãƒ‡ã‚£ãŒçµ‚端ã—ã¦ã„ã¾ã›ã‚“。\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "%s: エンコードã«å¤±æ•—\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +# ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ç¢ºèª +#: plugins/sepolicy.c:492 +#, fuzzy +msgid "Failed to expand restorecon path" +msgstr "%%__collection_%s マクロã®æ‹¡å¼µã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "%s ã‹ã‚‰ spec ファイルã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "エラー: Python ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ %s ã«å¤±æ•—ã—ã¾ã—ãŸã€‚中止ã—ã¾ã™!\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== 有効 %d 空 %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(空)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(空)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "マクロ %%%s ã¯ãƒœãƒ‡ã‚£ãŒçµ‚端ã—ã¦ã„ã¾ã›ã‚“。\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "マクロ %%%s ã¯ä¸æ­£ãªåå‰ã§ã™ (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "マクロ %%%s ã¯ã‚ªãƒ—ションãŒçµ‚端ã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "マクロ %%%s ã®ãƒœãƒ‡ã‚£ã¯ç©ºã§ã™ã€‚\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "マクロ %%%s ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "マクロ %%%s ã¯ä¸æ­£ãªåå‰ã§ã™ (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "マクロ %%%s (%s) ã¯ãƒ¬ãƒ™ãƒ« %d 未満ã§ä½¿ç”¨ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "ä¸æ˜Žãªã‚ªãƒ—ション %c (%s(%s)中ã«)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "終端ã•ã‚Œã¦ã„ãªã„ %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "%% ã®å¾Œã‚ã«æ§‹æ–‡è§£æžã§ããªã„マクロãŒç¶šã„ã¦ã„ã¾ã™ã€‚\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "一時ファイル %s ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "ファイル %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "ファイル %s 㯠%u ãƒã‚¤ãƒˆã‚ˆã‚Šå°ã•ããªã£ã¦ã„ã¾ã™ã€‚\n" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "ディレクトリーã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "lua スクリプトã§ä¸æ­£ãªæ–‡æ³•ãŒã‚ã‚Šã¾ã—ãŸ: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "lua スクリプトã§ä¸æ­£ãªæ–‡æ³•ãŒã‚ã‚Šã¾ã—ãŸ: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "lua スクリプトã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "lua ファイルã«ä¸æ­£ãªæ–‡æ³•ãŒã‚ã‚Šã¾ã—ãŸ: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "lua ã®ãƒ•ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(エラーãªã—)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "致命的ãªã‚¨ãƒ©ãƒ¼: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "エラー: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "警告: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "メモリ割り当㦠(%u ãƒã‚¤ãƒˆ) ㌠NULL ã‚’è¿”ã—ã¾ã—ãŸã€‚\n" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "V%d %s/%s %sã€éµ ID %s" + +#: rpmio/rpmpgp.c:1369 +msgid "(none)" +msgstr "(ãªã—)" + +#: rpmio/rpmpgp.c:1652 +#, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "フォーク ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®ç™»éŒ²ã«å¤±æ•—ã—ã¾ã—ãŸ: %m\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„ PGP ãƒãƒƒã‚·ãƒ¥ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ  %d\n" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„ PGP 公開éµã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ  %d\n" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "ç½²åã®ãŸã‚ã®ãƒ‘イプ作æˆãŒã§ãã¾ã›ã‚“: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "gpg ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—㟠(%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg ãŒç½²åを書ã込むã®ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "ç½²åを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "rpmMkTemp ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "%s ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: manifest ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "ヘッダーã¨ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ç½²åを検証ã—ã¾ã›ã‚“。" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: uid ãŒå¤šã™ãŽã¾ã™ã€‚\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: uid ãŒå¤šã™ãŽã¾ã™ã€‚\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: uid ãŒå¤šã™ãŽã¾ã™ã€‚\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: gid ãŒå¤šã™ãŽã¾ã™ã€‚\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: gid ãŒå¤šã™ãŽã¾ã™ã€‚\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: gid ãŒå¤šã™ãŽã¾ã™ã€‚\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "パッケージåã®é–¢ä¿‚を無視ã—ã¾ã™ [%d]\t%s → %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "トランザクションã«æ案パッケージを追加ã—ã¾ã™ã€‚" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "ä¸è¶³ã™ã‚‹ä¾å­˜é–¢ä¿‚ã®è§£æ±ºã‚’æ案ã—ã¾ã›ã‚“。" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "%s ã«ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã‚’移動ã§ãã¾ã›ã‚“: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps ã¯ãƒ‘ッケージã®ä½œæˆã€ãƒªãƒ“ルドã€ãƒªã‚³ãƒ³ãƒ‘イルã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€å‰Šé™¤ã€" +#~ "検証時ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€å‰Šé™¤ã€å•ã„åˆã‚ã›ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹å†æ§‹ç¯‰æ™‚ã®ã¿æŒ‡å®š" +#~ "ã§ãã¾ã™" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "パッケージ間ã§ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ç«¶åˆã‚’検知ã—ã¾ã™ã€‚" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "一時的ãªãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ %s ã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "ファイル ID ã§ãƒ‘ッケージをå•ã„åˆã‚ã›/検証ã—ã¾ã™ã€‚" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "å¼•æ•°å‡¦ç† (%d) ã§ã®å†…部エラー :-(\n" + +#~ msgid "no files to sign\n" +#~ msgstr "ç½²åã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "ファイル %s ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。\n" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "マクロ ファイル中ã®ç„¡åŠ¹ãª %%_signature 指定。\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign ã¯ãƒ‘ッケージ作æˆæ™‚ã®ã¿æŒ‡å®šã§ãã¾ã™ã€‚" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "リビルドã™ã‚‹ãƒ‘ッケージãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#~ msgid "no spec files given for build" +#~ msgstr "ビルドã®ãŸã‚ã® spec ファイルãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#~ msgid "no tar files given for build" +#~ msgstr "ビルドã®ãŸã‚ã® tar ファイルãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK 失敗: %s\n" + +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: ãƒãƒªã‚·ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: %s ã®ã‚ªãƒ¼ãƒ—ン: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s 㯠RPM パッケージã§ã¯ã‚ã‚Šã¾ã›ã‚“\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: %s ã‹ã‚‰ãƒ˜ãƒƒãƒ€ãƒ¼ã®èª­ã¿è¾¼ã¿ä¸­\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "ç½²åã®ä½œæˆä¸­: %d\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "rpm4 パッケージング互æ›ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’生æˆ" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "PGP/GPG ç½²åを生æˆã—ã¾ã™ã€‚" + +#~ msgid "%s failed\n" +#~ msgstr "%s ã«å¤±æ•—ã—ã¾ã—ãŸ\n" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "GPG V3 RSA ç½²åを検証ã—ã¾ã›ã‚“。" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "PGP V3 RSA/MD5 ç½²åを検証ã—ã¾ã›ã‚“。" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "パッケージã«ç½²åã—ã¾ã™ (--resign ã¨åŒä¸€ã§ã™)" + +#~ msgid "generate signature" +#~ msgstr "ç½²åを生æˆã—ã¾ã™ã€‚" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: キー ID %s ã«ã‚ˆã‚Šæ—¢ã«ç½²åã•ã‚Œã¦ã„ã¾ã™ã€‚スキップã—ã¾ã™ã€‚\n" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "マクロファイル中ã®ä¸æ­£ãª %%_signature\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "å†å¸°ã®æ·±ã• (%d) ãŒæœ€å¤§å€¤ (%d) より大ãããªã£ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "ターゲットãƒãƒƒãƒ•ã‚¡ã®ã‚ªãƒ¼ãƒãƒ•ãƒ­ãƒ¼ã§ã™ã€‚\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: ä¸æ˜Žãªã‚¿ã‚°å: \"%s\" ã¯ç„¡è¦–ã—ã¾ã™\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: スキップã—ã¾ã™ã€‚" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib æä¾›)" + +#~ msgid "(cached)" +#~ msgstr "(キャッシュ済ã¿)" + +#~ msgid "(db files)" +#~ msgstr "(files データベース)" + +#~ msgid "(db provides)" +#~ msgstr "(provides データベース" + +#~ msgid "(added files)" +#~ msgstr "(files ã«è¿½åŠ æ¸ˆã¿)" + +#~ msgid "(added provide)" +#~ msgstr "(provideã«è¿½åŠ æ¸ˆã¿)" + +#~ msgid "url port must be a number\n" +#~ msgstr "url ãƒãƒ¼ãƒˆã¯æ•°å­—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "ファイルツリー探索オプション (--ftswalk):" + +#, fuzzy +#~ msgid "follow command line symlinks" +#~ msgstr "FTS_COMFOLLOW: コマンドラインã®ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã‚’追ã„ã‹ã‘ã¾ã™" + +#, fuzzy +#~ msgid "logical walk" +#~ msgstr "FTS_LOGICAL: è«–ç†æŽ¢ç´¢" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "FTS_NOCHDIR: ディレクトリを変更ã—ã¾ã›ã‚“。" + +#, fuzzy +#~ msgid "don't get stat info" +#~ msgstr "FTS_NOSTAT: ステータス情報をå–å¾—ã—ã¾ã›ã‚“。" + +#, fuzzy +#~ msgid "physical walk" +#~ msgstr "FTS_PHYSICAL: 物ç†æŽ¢ç´¢" + +#, fuzzy +#~ msgid "return dot and dot-dot" +#~ msgstr "FTS_SEEDOT: ドット(.)ã¨ãƒ‰ãƒƒãƒˆãƒ‰ãƒƒãƒˆ(..)ã‚’è¿”ã—ã¾ã™ã€‚" + +#, fuzzy +#~ msgid "don't cross devices" +#~ msgstr "FTS_XDEV: ä»–ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã‚’探索ã—ã¾ã›ã‚“。" + +#, fuzzy +#~ msgid "return whiteout information" +#~ msgstr "FTS_WHITEOUT: 修正ã•ã‚ŒãŸæƒ…報を返ã—ã¾ã™ã€‚" + +#~ msgid "debug package state machine" +#~ msgstr "パッケージ状態マシンã®ãƒ‡ãƒãƒƒã‚°" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "ファイルツリー探索ã®å…ˆé ­ã‹ã‚‰ã€å•ã„åˆã‚ã›/検証ã—ã¾ã™" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "システム㮠HDLIST ã‹ã‚‰å•ã„åˆã‚ã›/検証をã—ã¾ã™ã€‚" + +#~ msgid "do not order transaction set" +#~ msgstr "トランザクションセットを並ã³æ›¿ãˆã¾ã›ã‚“。" + +#~ msgid "do not read headers" +#~ msgstr "ヘッダーを読ã¿è¾¼ã¿ã¾ã›ã‚“。" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "ファイル㯠prefix (%s) ã¨ä¸€è‡´ã—ã¾ã›ã‚“: %s\n" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "ディレクトリ %s ã®å‰Šé™¤å¤±æ•—: %s\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "パッケージ状態マシンã«ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’利用ã™ã‚‹" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "" +#~ "%s: スクリプト %s ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—㟠(%d)。%s をスキップã—ã¾ã™ã€‚\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() ã§ã‚µã‚¤ã‚ºã®å–å¾—ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() ã§ãƒžã‚¦ãƒ³ãƒˆãƒã‚¤ãƒ³ãƒˆã®å–å¾—ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "stat %s ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "ファイル %s ã¯ä¸æ˜Žãªãƒ‡ãƒã‚¤ã‚¹ä¸Šã«ã‚ã‚Šã¾ã™ã€‚\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "ファイル状態マシンã«ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’利用ã™ã‚‹" + +#~ msgid "cannot open %s index\n" +#~ msgstr "%s インデックスを開ã‘ã¾ã›ã‚“。\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "一時ファイルを開ã‘ã¾ã›ã‚“。\n" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "ä¸æ˜Žãªã‚·ã‚¹ãƒ†ãƒ : %s\n" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "マクロ %%%.*s ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。スキップã—ã¾ã™ã€‚\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: *.te ãƒãƒªã‚·ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "%d 行目: 2番目㮠%%files リスト\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "\"B\" ã®ä¾å­˜æ€§ã¯ epoch ã‚’å¿…è¦ã¨ã—ã¾ã™ (\"A\" ã¨åŒã˜ã§ã‚ã‚‹ã¨ä»®å®šã—ã¦)\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "データタイプ %d ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "æ—§æ¥ã®æ§‹æ–‡ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¾ã›ã‚“: %s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "tsort 関係ã‹ã‚‰ %s \"%s\" を削除ã—ã¾ã™ã€‚\n" + +#~ msgid "LOOP:\n" +#~ msgstr "ループ:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "rpmtsOrder ã«å¤±æ•—, 残り %d 個\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "ヘッダーã¨ãƒšã‚¤ãƒ­ãƒ¼ãƒ‰ã‚µã‚¤ã‚º:" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "ソースオプション (--query ã¾ãŸã¯ --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp ãŒè¦‹ä»˜ã‹ã‚Šã¾ã›ã‚“: " + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "ファイル %s ã‚’é–‹ã‘ã¾ã›ã‚“: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp 失敗\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp ãŒç½²åを書ã込むã®ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "マクロファイル内㧠\"%%_pgp_name\" を設定ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。\n" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "ä¸æ˜Žãªã‚¿ã‚°" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "V4 DSA ç½²å: " + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "V3 DSA ç½²å: " + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "MD5 ダイジェストãŒç ´æ: サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot 㯠\"/\" ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“: %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "spec ファイル㯠BuildRoot を使用ã§ãã¾ã›ã‚“。\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "specfile カタログã‹ã‚‰ i18N 文字列を検索ã™ã‚‹" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "(å¤ã„) rpm[23] パッケージング互æ›ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’生æˆã—ã¾ã™ã€‚" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "%%%s ã‚’ %s ã«ä½œæˆã§ãã¾ã›ã‚“。\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "%%%s ã‚’ %s ã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "%s ã‚’å•ã„åˆã‚ã›ã§ãã¾ã›ã‚“: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "実行失敗\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "URL キャッシュãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã®ãƒ‡ãƒãƒƒã‚°" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "spec ファイル㮠i18n 部分を書ãæ›ãˆã¾ã™ã€‚" + +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "%s ã«ã‚ã‚‹ Solve データベースを開ã‘ã¾ã›ã‚“。\n" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " 解決ã®æ案:\n" + +#~ msgid "(index out of range)" +#~ msgstr "(インデックスãŒç¯„囲外)" + +#~ msgid "Success" +#~ msgstr "æˆåŠŸ" + +#~ msgid "Bad server response" +#~ msgstr "サーãƒã‹ã‚‰ã®ä¸æ­£ãªå¿œç­”。" + +#~ msgid "Server I/O error" +#~ msgstr "サームI/O エラーã§ã™ã€‚" + +#~ msgid "Server timeout" +#~ msgstr "サーãƒãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸã€‚" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "サーãƒã®ãƒ›ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’調ã¹ã‚‰ã‚Œã¾ã›ã‚“。" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "サーãƒã®ãƒ›ã‚¹ãƒˆåを調ã¹ã‚‰ã‚Œã¾ã›ã‚“。" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "サーãƒã¨ã®ãƒ‡ãƒ¼ã‚¿æŽ¥ç¶šç¢ºç«‹ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" + +#~ msgid "I/O error to local file" +#~ msgstr "ローカルファイル㮠I/O エラーã§ã™ã€‚" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "リモートサーãƒã‚’ passive モードã«è¨­å®šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#~ msgid "File not found on server" +#~ msgstr "サーãƒä¸Šã«ãƒ•ã‚¡ã‚¤ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" + +#~ msgid "Abort in progress" +#~ msgstr "処ç†ä¸­ã®ä¸­æ–­" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "ä¸æ˜Žã¾ãŸã¯äºˆæœŸã›ã¬ã‚¨ãƒ©ãƒ¼" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "" +#~ "キャッシュデータベースを更新ã—ã¾ã›ã‚“。パッケージパスã®è¡¨ç¤ºã®ã¿ã§ã™ã€‚" + +#~ msgid "File tree walk options:" +#~ msgstr "ファイルツリー探索オプション:" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: %%{_cache_dbpath} マクロã¯è¨­å®šãƒŸã‚¹ã§ã™ã€‚\n" + +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: キャッシュæ“作ã«å¤±æ•—ã—ã¾ã—ãŸ: ec %d。\n" + +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: headerGetEntry ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "%s ã®å±•é–‹ã«å¤±æ•—ã—ã¾ã—㟠(%s:%d) \"%s\"\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "%s を展開ã§ãã¾ã›ã‚“。\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "%s を読ã¿è¾¼ã‚ã¾ã›ã‚“。HOME ãŒå¤§ãã™ãŽã¾ã™ã€‚\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s %s ã® rmdir ã«å¤±æ•—: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "%%docdir ã®é™ç•Œã«é”ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "%d 行目: %%patch -b ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "%d 行目: %%patch -z ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "%d 行目: %%patch -p ã¸ã®ä¸æ­£ãªå¼•æ•°: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "%d 行目: %%patch -p ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "%d 行目: %%patch -p ã¸ã®ä¸æ­£ãªå¼•æ•°: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "パッãƒãŒå¤šã™ãŽã¾ã™!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "%d 行目: %%patch ã¸ã®ä¸æ­£ãªå¼•æ•°: %s\n" + +#~ msgid "debug option/argument processing" +#~ msgstr "オプション/引数処ç†ä¸­ã®ãƒ‡ãƒãƒƒã‚°" + +#~ msgid "skip %%license files" +#~ msgstr "%%license ファイルをスキップã—ã¾ã™ã€‚" + +#~ msgid "skip %%readme files" +#~ msgstr "%%readme ファイルをスキップã—ã¾ã™ã€‚" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "読ã¿è¾¼ã¿ã®å¤±æ•—: %s (%d)\n" + +#~ msgid "rollback takes a time/date stamp argument" +#~ msgstr "ロールãƒãƒƒã‚¯ã«ã¯æ—¥ä»˜/時刻スタンプã®æŒ‡å®šãŒå¿…è¦ã§ã™" + +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "ロールãƒãƒƒã‚¯ã®æ™‚刻/日付スタンプã®å½¢å¼ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "削除ã•ã‚ŒãŸãƒ‘ッケージをã€ã‚µãƒ–ディレクトリã«åå‰ã‚’変ãˆã¦ä¿å­˜ã—ã¾ã™ã€‚" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "å†ãƒ‘ッケージã™ã‚‹ã“ã¨ã§å‰Šé™¤ã—ãŸãƒ‘ッケージをä¿å­˜ã—ã¾ã™ã€‚" + +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "" +#~ " ã®çŠ¶æ…‹ã«æˆ»ã™ãŸã‚ã€æ–°ã—ã„パッケージを削除ã—ã€å¤ã„パッケージをå†ã‚¤ãƒ³" +#~ "ストールã—ã¾ã™ã€‚" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Unable to reload signature header\n" +#~ msgstr "ç½²åヘッダーã®å†èª­ã¿è¾¼ã¿ãŒã§ãã¾ã›ã‚“。\n" + +#~ msgid "Repackaging..." +#~ msgstr "å†ãƒ‘ッケージ中..." + +#~ msgid "Repackaging erased files..." +#~ msgstr "削除ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã®å†ãƒ‘ッケージ中..." + +#~ msgid "Upgrading..." +#~ msgstr "アップグレード中..." + +#~ msgid "Upgrading packages..." +#~ msgstr "パッケージをアップグレード中..." + +#~ msgid "Rollback packages (+%d/-%d) to %-24.24s (0x%08x):\n" +#~ msgstr "パッケージ (+%d/-%d) ã‚’ %-24.24s ã¸ãƒ­ãƒ¼ãƒ«ãƒãƒƒã‚¯(0x%08x):\n" + +#~ msgid "Cleaning up repackaged packages:\n" +#~ msgstr "å†ãƒ‘ッケージã•ã‚ŒãŸãƒ‘ッケージを削除中:\n" + +#~ msgid "\tRemoving %s:\n" +#~ msgstr "\t%s を削除中:\n" + +#~ msgid "Transaction failed...rolling back\n" +#~ msgstr "トランザクションã«å¤±æ•—ã—ã¾ã—ãŸ...ロールãƒãƒƒã‚¯ä¸­\n" + +#~ msgid "Could not order auto-rollback transaction!\n" +#~ msgstr "自動ロールãƒãƒƒã‚¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’é †åºä»˜ã‘ã§ãã¾ã›ã‚“ã§ã—ãŸ!\n" + +#~ msgid "Could not get install element database instance!\n" +#~ msgstr "インストールè¦ç´ ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ!\n" + +#~ msgid "Could not get header for auto-rollback transaction!\n" +#~ msgstr "" +#~ "自動ロールãƒãƒƒã‚¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚\n" + +#~ msgid "\tAdded from install element %s.\n" +#~ msgstr "\tインストールè¦ç´  %s ã‹ã‚‰è¿½åŠ ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "Could not get repackaged header for auto-rollback transaction!\n" +#~ msgstr "" +#~ "自動ロールãƒãƒƒã‚¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®å†ãƒ‘ッケージヘッダーをå–å¾—ã§ãã¾ã›ã‚“ã§ã—" +#~ "ãŸ!\n" + +#~ msgid "Could not add erase element to auto-rollback transaction.\n" +#~ msgstr "自動ロールãƒãƒƒã‚¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«å‰Šé™¤è¦ç´ ã‚’追加ã§ãã¾ã›ã‚“。\n" + +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "å†ãƒ‘ッケージã•ã‚ŒãŸãƒ‘ッケージã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ!\n" + +#~ msgid "Add failed. Could not read package header.\n" +#~ msgstr "追加ã«å¤±æ•—ã—ã¾ã—ãŸã€‚パッケージヘッダーを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚\n" + +#~ msgid "Add failed in rpmpsmStage().\n" +#~ msgstr "rpmpsmStage() ã§è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "Add failed. Could not get file list.\n" +#~ msgstr "追加ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ファイル一覧ã®å–å¾—ãŒã§ãã¾ã›ã‚“。\n" + +#~ msgid "Erase failed failed in rpmpsmStage().\n" +#~ msgstr "rpmpsmStage() ã§å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" + +#, fuzzy +#~ msgid "\twaitpid(%d) rc %d status %x\n" +#~ msgstr "%s: waitpid(%d) rc %d 状態 %x 秒 %u.%03u\n" + +#~ msgid " Obsoletes: %s\t\terases %s\n" +#~ msgstr " Obsoletes: %s\t\t%s を削除ã—ã¾ã™\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== tsort 関係を記録ã—ã¦ã„ã¾ã™\n" + +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== パッケージを tsort (順番ã€å…ˆè¡Œæ•°ã€å¾Œç¶šæ•°ã€ãƒ„リーã€æ·±ã•ã€å¹…) ã—" +#~ "ã¦ã„ã¾ã™\n" + +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== 後続ã®ã¿ (%d ãƒã‚¤ãƒˆ)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== tsort を続行中...\n" + +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "%5d 0x%04x %s %s\n" + +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========== ディレクトリã¯ã€ãƒ‘ッケージã«æ˜Žç¤ºçš„ã«å«ã¾ã‚Œã¦ã„ã¾ã›ã‚“:\n" + +#~ msgid "%10d %s\n" +#~ msgstr "%10d %s\n" + +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "" +#~ "ディレクトリ %s ãŒãƒ‘ーミッション %04o ã§ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã—ã§ä½œæˆã•ã‚Œã¾ã—" +#~ "ãŸã€‚\n" + +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "" +#~ "ディレクトリ %s ãŒãƒ‘ーミッション %04o ã§ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆ %s ã§ä½œæˆã•ã‚Œã¾ã—" +#~ "ãŸã€‚\n" + +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "リストã‹ã‚‰å¼•æ•°ã‚’ %d 個追加ã—ã¾ã™ã€‚\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "libio(3) API ã®ä½¿ç”¨ã‚’無効ã«ã—ã¾ã™ã€‚" + +#~ msgid "%s: waitpid(%d) rc %d status %x secs %u.%03u\n" +#~ msgstr "%s: waitpid(%d) rc %d 状態 %x 秒 %u.%03u\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) スクリプトを実行ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) 余計㪠\"%s\" をスキップã—ã¾ã—ãŸã€‚\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) %ssynchronous scriptlet start\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) %s åŒæœŸã‚¹ã‚¯ãƒªãƒ—トを開始ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" +#~ msgstr "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" + +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s 㯠%d ファイルをå«ã¿ã€ãƒ†ã‚¹ãƒˆ = %d ã§ã™ã€‚\n" + +#, fuzzy +#~ msgid "Attempting to mark %s as installed in score board(%p).\n" +#~ msgstr "" +#~ "削除ã•ã‚ŒãŸã‚‚ã®ã¨ã—ã¦ãƒžãƒ¼ã‚¯ %s を付ã‘よã†ã¨ã—ã¦ã„ã¾ã™(スコアボード (%p) " +#~ "内)。\n" + +#, fuzzy +#~ msgid "Attempting to mark %s as erased in score board(%p).\n" +#~ msgstr "" +#~ "削除ã•ã‚ŒãŸã‚‚ã®ã¨ã—ã¦ãƒžãƒ¼ã‚¯ %s を付ã‘よã†ã¨ã—ã¦ã„ã¾ã™(スコアボード (%p) " +#~ "内)。\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "パッケージレコード番å·: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "パッケージ %s 㯠%s を満ãŸã—ã¾ã›ã‚“: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s 㯠missingok フラグã®ãŸã‚スキップã—ã¾ã™\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== å†é…ç½®\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d 除外ã—ã¦ã„ã¾ã™ %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d å†é…ç½®ã—ã¦ã„ã¾ã™ %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "%s %s を除外ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "%s ã‚’ %s ã«å†é…ç½®ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "ディレクトリ %s ã‚’ %s ã«å†é…ç½®ã—ã¦ã„ã¾ã™\n" + +#~ msgid "Adding goal: %s\n" +#~ msgstr "目標を追加: %s\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... (%s ã¨ã—ã¦)\n" + +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "\tソースパッケージを追加ã—ã¾ã—㟠[%d]\n" + +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "\tãƒã‚¤ãƒŠãƒªãƒ‘ッケージを追加ã—ã¾ã—㟠[%d]\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "" +#~ "%d 個ã®ã‚½ãƒ¼ã‚¹ãƒ‘ッケージ㨠%d 個ã®ãƒã‚¤ãƒŠãƒªãƒ‘ッケージãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "ãƒã‚¤ãƒŠãƒªãƒ‘ッケージをインストール中\n" + +#~ msgid "Adding: %s\n" +#~ msgstr "追加中: %s\n" + +#~ msgid "Suggesting: %s\n" +#~ msgstr "æ案中: %s\n" + +#~ msgid "mounted filesystems:\n" +#~ msgstr "マウント済ã¿ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ :\n" + +#~ msgid " i dev bsize bavail iavail mount point\n" +#~ msgstr " i dev bsize bavail iavail mount point\n" + +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "%5d 0x%08x %8u %12ld %12ld %s\n" + +#~ msgid "Creating transaction score board(%p, %p)\n" +#~ msgstr "トランザクションスコアボードを作æˆä¸­(%p, %p)\n" + +#~ msgid "\tScore board address: %p\n" +#~ msgstr "\tスコアボードã®ã‚¢ãƒ‰ãƒ¬ã‚¹: %p\n" + +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "\t%d エントリ分ã®é ˜åŸŸã‚’割当ã¦ä¸­\n" + +#~ msgid "\tAdding entry for %s to score board.\n" +#~ msgstr "\t%s ã®ã‚¨ãƒ³ãƒˆãƒªã‚’スコアボードã«è¿½åŠ ä¸­ã§ã™ã€‚\n" + +#~ msgid "\t\tEntry address: %p\n" +#~ msgstr "\t\tエントリã®ã‚¢ãƒ‰ãƒ¬ã‚¹: %p\n" + +#~ msgid "\tUpdating entry for %s in score board.\n" +#~ msgstr "\tスコアボード㫠%s ã®ã‚¨ãƒ³ãƒˆãƒªã‚’更新中ã§ã™ã€‚\n" + +#~ msgid "May free Score board(%p)\n" +#~ msgstr "スコアボード (%p) を解放よã†ã¨ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "\tRefcount is zero...will free\n" +#~ msgstr "\tå‚照カウント 0 ... 解放ã—ã¾ã™ã€‚\n" + +#~ msgid "Looking in score board(%p) for %s\n" +#~ msgstr "スコアボード (%p) ã®ä¸­ã§ %s ã‚’å‚ç…§ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "\tFound entry at address: %p\n" +#~ msgstr "\tアドレス %p ã§ã‚¨ãƒ³ãƒˆãƒªã‚’見ã¤ã‘ã¾ã—ãŸã€‚\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "期待ã•ã‚Œã‚‹ã‚µã‚¤ã‚º: %12d = lead(%d)+sigs(%d)+pad(%d)+data(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " 実際ã®ã‚µã‚¤ã‚º: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "ç½²å: size(%d)+pad(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "PGP ç½²åサイズ: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "PGP ç½²åã® %d ãƒã‚¤ãƒˆã‚’å–å¾—\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "GPG ç½²åサイズ: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "GPG ç½²åã® %d ãƒã‚¤ãƒˆã‚’å–å¾—\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "ディレクトリã®é™¤å¤–: %s\n" + +#~ msgid "Getting repackaged header from transaction element\n" +#~ msgstr "" +#~ "トランザクションã®è¦ç´ ã‹ã‚‰å†ãƒ‘ッケージã•ã‚ŒãŸãƒ˜ãƒƒãƒ€ãƒ¼ã‚’å–å¾—ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "\tLooking for %s...\n" +#~ msgstr "\t%s を検索中...\n" + +#~ msgid "\tMatches found.\n" +#~ msgstr "\t一致を見ã¤ã‘ã¾ã—ãŸã€‚\n" + +#~ msgid "\tNo matches found.\n" +#~ msgstr "\t一致ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。\n" + +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "\tå†ãƒ‘ッケージã•ã‚ŒãŸãƒ‘ッケージãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!\n" + +#~ msgid "\tREMOVETID matched INSTALLTID.\n" +#~ msgstr "\tREMOVETID ㌠INSTALLTID ã«ä¸€è‡´ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "\t\tName: %s.\n" +#~ msgstr "\t\tåå‰: %s.\n" + +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "\tå†ãƒ‘ッケージã•ã‚ŒãŸãƒ‘ッケージ㯠%s ã§ã™...\n" + +#, fuzzy +#~ msgid "Adding install element to auto-rollback transaction.\n" +#~ msgstr "自動ロールãƒãƒƒã‚¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã« %s を追加ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "\tå†ãƒ‘ッケージã•ã‚ŒãŸãƒ‘ッケージヘッダーを追加ã—ã¾ã—ãŸ: %s.\n" + +#~ msgid "\tAdded erase element.\n" +#~ msgstr "\t削除è¦ç´ ã‚’追加ã—ã¾ã—ãŸã€‚\n" + +#, fuzzy +#~ msgid "Add erase element to auto-rollback transaction.\n" +#~ msgstr "自動ロールãƒãƒƒã‚¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«å‰Šé™¤è¦ç´ ã‚’追加ã§ãã¾ã›ã‚“。\n" + +#, fuzzy +#~ msgid "\tFound existing upgrade element.\n" +#~ msgstr "\t削除è¦ç´ ã‚’追加ã—ã¾ã—ãŸã€‚\n" + +#, fuzzy +#~ msgid "\tNot adding erase element for %s.\n" +#~ msgstr "\t削除è¦ç´ ã‚’追加ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "\tå†ãƒ‘ッケージã•ã‚ŒãŸãƒ‘ッケージ %s を追加ã—ã¾ã—ãŸã€‚\n" + +#, fuzzy +#~ msgid "\tAdded from erase element %s.\n" +#~ msgstr "\t削除è¦ç´ ã‚’追加ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "\tNo repackaged package...nothing to do.\n" +#~ msgstr "\tå†ãƒ‘ッケージã•ã‚ŒãŸãƒ‘ッケージãŒã‚ã‚Šã¾ã›ã‚“...何もã—ã¾ã›ã‚“。\n" + +#~ msgid "sanity checking %d elements\n" +#~ msgstr "%d 個ã®è¦ç´ ã®å¥å…¨æ€§ãƒã‚§ãƒƒã‚¯ä¸­\n" + +#~ msgid "running pre-transaction scripts\n" +#~ msgstr "トランザクションå‰ã®ã‚¹ã‚¯ãƒªãƒ—トを実行中\n" + +#~ msgid "computing %d file fingerprints\n" +#~ msgstr "%d ファイルã®æŒ‡ç´‹ã‚’計算ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "computing file dispositions\n" +#~ msgstr "ファイルã®æ€§è³ªã‚’計算ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "Creating auto-rollback transaction\n" +#~ msgstr "自動ロールãƒãƒƒã‚¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "running post-transaction scripts\n" +#~ msgstr "トランザクション後ã®ã‚¹ã‚¯ãƒªãƒ—トを実行中\n" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "データベース環境 %s/%s ã‚’é–‰ã˜ã¾ã—ãŸ\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "データベース環境 %s/%s を削除ã—ã¾ã—ãŸã€‚\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "データベース環境 %s/%s をオープンã—ã¾ã™ %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "データベースインデックス %s/%s ã‚’é–‰ã˜ã¾ã—ãŸ\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "データベースインデックス %s/%s をオープンã—ã¾ã™ %s (mode=0x%x)\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "データベースインデックス %s/%s をロックã—ã¾ã—ãŸã€‚\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "\"%s\" ã‚’ %s インデックスã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "%d エントリを %s インデックスã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "\"%s\" ã‚’ %s インデックスã«è¿½åŠ ã—ã¾ã™ã€‚\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "%d エントリを %s インデックスã«è¿½åŠ ã—ã¾ã™ã€‚\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "db3 å†æ§‹ç¯‰ãŒæˆåŠŸã—ãŸå¾Œã§ %s を削除ã—ã¾ã™ã€‚\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "データベース %s ã‚’ %s ã¨ã—ã¦å†æ§‹ç¯‰ã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "ディレクトリã®ä½œæˆ: %s\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "ディレクトリã®ä½œæˆ: %s: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "å¤ã„データベースを dbapi %d ã§ã‚ªãƒ¼ãƒ—ンã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "æ–°ã—ã„データベースを dbapi %d ã§ã‚ªãƒ¼ãƒ—ンã—ã¦ã„ã¾ã™ã€‚\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "ディレクトリã®å‰Šé™¤: %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "データベースインデックス %s/%s ã‚’é–‰ã˜ã¾ã—ãŸ\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "データベースインデックス %s/%s をオープンã—ã¾ã™ %s (mode=0x%x)\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: %s ã®èª­ã¿è¾¼ã¿: %s\n" + +#~ msgid "Unable to write final header\n" +#~ msgstr "ヘッダーã®çµ‚端ã®æ›¸ãè¾¼ã¿ãŒã§ãã¾ã›ã‚“。\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "" +#~ "ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® RPM ã§ã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1 ã®ãƒ‘ッケージングã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›" +#~ "ã‚“\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "" +#~ "ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® RPM ã§ã¯ãƒ¡ã‚¸ãƒ£ãƒ¼ç•ªå· <=4 ã®ãƒ‘ッケージ作æˆã®ã¿ã‚µãƒãƒ¼ãƒˆã—ã¦" +#~ "ã„ã¾ã™\n" + +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: v1.0 ã® RPM パッケージã«ã¯ç½²åã§ãã¾ã›ã‚“。\n" + +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: v2.0 ã® RPM パッケージã«ã¯å†ç½²åã§ãã¾ã›ã‚“。\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: ç½²åãŒã‚ã‚Šã¾ã›ã‚“ (v1.0 RPM)\n" diff --git a/po/ko.gmo b/po/ko.gmo new file mode 100644 index 0000000..26ed7c4 Binary files /dev/null and b/po/ko.gmo differ diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..398676f --- /dev/null +++ b/po/ko.po @@ -0,0 +1,4286 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.0.4\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2002-03-04 17:17+0900\n" +"Last-Translator: Jong-Hoon Ryu \n" +"Language-Team: GNU Translation project \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-KR\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM ¹öÀü - %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, fuzzy, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "ÀÌ ÇÁ·Î±×·¥Àº GNU Public License ³»¿¡¼­ ÀÚÀ¯·Ó°Ô Àç¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "¾ÆÄ«ÀÌºê »ý¼º¿¡ ½ÇÆÐÇÔ: %s\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "½ÇÇà¿¡ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "Àμö °ªÀ¸·Î RPM ÆÐÅ°Áö°¡ ÁöÁ¤µÇ¾î¾ß ÇÕ´Ï´Ù\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "ÆÐÅ°ÁöÀÇ Çì´õ¸¦ Àд µµÁß ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "payload¸¦ ´Ù½Ã ¿­ ¼ö ¾øÀ½: %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "±×·ì ¾ÈÀÇ ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "ÁúÀÇ ¿É¼Ç (-q ¶Ç´Â --query ¿É¼Ç°ú ÇÔ²² »ç¿ë):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "°ËÁõ ¿É¼Ç (-V ¶Ç´Â --verify ¿É¼Ç°ú ÇÔ²² »ç¿ë):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "¼³Ä¡/¾÷±×·¹À̵å/»èÁ¦ ¿É¼Ç:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +#, fuzzy +msgid "Common options for all rpm modes and executables:" +msgstr "¸ðµç rpm ¸ðµå¿¡¼­ÀÇ ÀϹÝÀûÀÎ ¿É¼Ç:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "ÁúÀÇ/°ËÁõ À¯ÇüÀº °¢°¢ ´Ù¸¥ À¯Çü°ú µ¿½Ã¿¡ ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "ºÎÀûÀýÇÑ ÁúÀÇ Ç÷¡±× ÀÔ´Ï´Ù" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "ºÎÀûÀýÇÑ ÁúÀÇ Çü½Ä ÀÔ´Ï´Ù" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "ºÎÀûÀýÇÑ ÁúÀÇ ¼Ò½º ÀÔ´Ï´Ù" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "ÇϳªÀÇ ÁÖ(major) ¸ðµå¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "¼³Ä¡, ¾÷±×·¹À̵å, ¼Ò½º »èÁ¦, spec ÆÄÀÏ »èÁ¦½Ã¿¡¸¸ ¼öÇàµË´Ï´Ù" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÆÄÀÏÀ» Àç¹èÄ¡ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate ¿Í --excludepath ¿É¼ÇÀº ÃÖ½ÅÀÇ ÆÐÅ°Áö¸¦ ¼³Ä¡ÇÒ ¶§¿¡¸¸ »ç¿ëÇÒ ¼ö ÀÖ" +"½À´Ï´Ù" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix ¿É¼ÇÀº ÃÖ½ÅÀÇ ÆÐÅ°Áö¸¦ ¼³Ä¡ÇÒ ¶§¿¡¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "--prefix ¿É¼ÇÀÇ Àμö´Â ¹Ýµå½Ã '/' ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "--excludedocs ¿Í --includedocs ¿É¼Ç¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches ¿É¼ÇÀº ÆÐÅ°Áö »èÁ¦½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡¿Í »èÁ¦½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "½ºÅ©¸³Æ® ÇØÁ¦ ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡¿Í »èÁ¦½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "Æ®¸®°Å ÇØÁ¦ ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡¿Í »èÁ¦½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "--test ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡, »èÁ¦, Á¦À۽ÿ¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡¿Í »èÁ¦½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "--root (-r) ¿É¼ÇÀÇ Àμö´Â ¹Ýµå½Ã '/' ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "»èÁ¦ÇÒ ÆÐÅ°Áö°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "¼³Ä¡ÇÒ ÆÐÅ°Áö°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "ÁúÀÇ¿¡ ÇÊ¿äÇÑ Àμö°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "°ËÁõ¿¡ ÇÊ¿äÇÑ Àμö°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot´Â ÀÌ¹Ì ÁöÁ¤µÇ¾î ÀÖ½À´Ï´Ù, %s(À»)¸¦ ¹«½ÃÇÕ´Ï´Ù\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "ÀÇ %prep (¼Ò½º¸¦ Ç®°í ÆÐÄ¡¸¦ Àû¿ëÇÏ´Â °úÁ¤)À¸·Î Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "ÀÇ %build (%prep°ú ÄÄÆÄÀÏÇÏ´Â °úÁ¤)À¸·Î Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "ÀÇ %install (%prep, %build¿Í ¼³Ä¡ÇÏ´Â °úÁ¤)À¸·Î Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "ÀÇ %files Ç׸ñ(section)À» °Ë»çÇÕ´Ï´Ù" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "·Î ¼Ò½º¿Í ¹ÙÀ̳ʸ® ÆÐÅ°Áö¸¦ Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "·Î ¹ÙÀ̳ʸ® ÆÐÅ°Áö ¸¸À» Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "·Î ¼Ò½º ÆÐÅ°Áö ¸¸À» Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "À» %prep (¼Ò½º¸¦ Ç®°í ÆÐÄ¡¸¦ Àû¿ëÇÏ´Â °úÁ¤)À¸·Î Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "À» %build (%prep°ú ÄÄÆÄÀÏÇÏ´Â °úÁ¤)À¸·Î Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "À» %install (%prep, %build¿Í ¼³Ä¡ÇÏ´Â °úÁ¤)À¸·Î Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "ÀÇ %files Ç׸ñ(section)À» °Ë»çÇÕ´Ï´Ù" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "·Î ¼Ò½º¿Í ¹ÙÀ̳ʸ® ÆÐÅ°Áö¸¦ Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "·Î ¹ÙÀ̳ʸ® ÆÐÅ°Áö ¸¸À» Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "·Î ¼Ò½º ÆÐÅ°Áö ¸¸À» Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "<¼Ò½º ÆÐÅ°Áö>·Î ¹ÙÀ̳ʸ® ÆÐÅ°Áö¸¦ Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "<¼Ò½º ÆÐÅ°Áö>" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"<¼Ò½º ÆÐÅ°Áö>¸¦ %install (%prep, %build¿Í ¼³Ä¡ÇÏ´Â °úÁ¤)À¸·Î Á¦ÀÛÇÕ´Ï´Ù" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "buildroot¸¦ ±³Ã¼(override)ÇÕ´Ï´Ù" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "ÆÐÅ°Áö Á¦ÀÛ ÈÄ¿¡ ¼Ò½º ÆÄÀÏÀ» Ç®°í ÀÛ¾÷ÇÑ µð·ºÅ丮¸¦ »èÁ¦ÇÕ´Ï´Ù" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ExcludeArch¸¦ ¹«½ÃÇÔ: spec ÆÄÀÏ¿¡¼­ ÁöÁ¤(directive)µË´Ï´Ù" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "ÄÄÇ»ÅÍÀÇ »óÅÂ(state) ÆÄÀÏÀ» µð¹ö±× ÇÕ´Ï´Ù" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "ÆÐÅ°Áö Á¦ÀÛÀÇ ¾î¶°ÇÑ ´Ü°èµµ ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "ÆÐÅ°Áö Á¦ÀÛ ÀÇÁ¸¼ºÀ» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "(±âÁ¸ÀÇ) rpm[23] ÆÐŰ¡°ú ȣȯÇÏ´Â ÆÐÅ°Áö Çì´õ¸¦ »ý¼ºÇÕ´Ï´Ù" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "specÆÄÀÏÀÇ i18N msgstrÀ» »ç¿ë(accept)ÇÏÁö ¾Ê½À´Ï´Ù" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "ÆÐÅ°Áö Á¦ÀÛ ÈÄ¿¡ ¼Ò½º ÆÄÀÏÀ» »èÁ¦ÇÕ´Ï´Ù" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "ÆÐÅ°Áö Á¦ÀÛ ÈÄ¿¡ specÆÄÀÏÀ» »èÁ¦ÇÕ´Ï´Ù" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "ÁöÁ¤µÈ ´Ü°è·Î ¹Ù·Î ÁøÇàÇÕ´Ï´Ù (c,i ¿¡¼­¸¸ »ç¿ë °¡´É)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "¸ñÇ¥´ë»ó(target) Ç÷§ÆûÀ» ±³Ã¼(override)ÇÕ´Ï´Ù" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" +"´ÙÀ½°ú ÇÔ²² »ç¿ëÇÏ´Â Á¦ÀÛ ¿É¼Ç [ | | <¼Ò½º ÆÐÅ°Áö> ]:" + +#: rpmbuild.c:231 +#, fuzzy +msgid "Failed build dependencies:\n" +msgstr "ÀÇÁ¸¼º ¹®Á¦·Î ÀÎÇØ Á¦ÀÛ¿¡ ½ÇÆÐÇÔ:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "%s spec ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "tar ÆÄÀÌÇÁ¸¦ ¿©´Âµ¥ ½ÇÆÐÇÔ: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "%s¿¡¼­ spec ÆÄÀÏÀ» Àдµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "%sÀÇ À̸§À» %s(À¸)·Î º¯°æÇϴµ¥ ½ÇÆÐÇÔ: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "%sÀÇ »óÅÂ(stat)¸¦ Ç¥½ÃÇϴµ¥ ½ÇÆÐÇÔ: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "%s ÆÄÀÏÀº Á¤±Ô(regular) ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "%s ÆÄÀÏÀº spec ÆÄÀÏÀÌ ¾Æ´Ñ °Í °°½À´Ï´Ù.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "¸ñÇ¥´ë»ó(target) Ç÷§ÆûÀ¸·Î Á¦ÀÛ Áß: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "%s(À»)¸¦ Á¦ÀÛÇÏ°í ÀÖ½À´Ï´Ù\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "µ¥ÀÌÅͺ£À̽º¸¦ ÃʱâÈ­ ÇÕ´Ï´Ù" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"¼³Ä¡µÈ ÆÐÅ°Áö Çì´õ¿¡¼­ »ó¹ÝµÈ ¸ñ·Ï(inverted lists)ÀÇ µ¥ÀÌÅͺ£À̽º¸¦ À籸Ãà ÇÕ" +"´Ï´Ù" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "µ¥ÀÌÅͺ£À̽º ÆÄÀÏÀ» °Ë»çÇÕ´Ï´Ù" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "µ¥ÀÌÅͺ£À̽º ¿É¼Ç:" + +#: rpmkeys.c:23 +#, fuzzy +msgid "verify package signature(s)" +msgstr "ÆÐÅ°ÁöÀÇ ¼­¸íÀ» °Ë»çÇÕ´Ï´Ù" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "¼­¸í ¿É¼Ç:" + +#: rpmkeys.c:61 rpmsign.c:144 +#, fuzzy +msgid "no arguments given" +msgstr "ÁúÀÇ¿¡ ÇÊ¿äÇÑ Àμö°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "ÆÐÅ°Áö¸¦ ¼³Ä¡ÇÕ´Ï´Ù" + +#: rpmsign.c:27 +#, fuzzy +msgid "sign package(s) (identical to --addsign)" +msgstr "ÆÐÅ°Áö¿¡ ¼­¸íÇÕ´Ï´Ù (±âÁ¸ÀÇ ¼­¸íÀº »èÁ¦µË´Ï´Ù)" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "ÆÐÅ°ÁöÀÇ ¼­¸íÀ» °Ë»çÇÕ´Ï´Ù" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "¼­¸í ¿É¼Ç:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "%s(À»)¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "¸ÅÅ©·Î ÆÄÀÏ ¾È¿¡ ¹Ýµå½Ã \"%%_gpg_name\"À» ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Æнº ±¸¹®(pass phrase) ÀÔ·Â: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Æнº ±¸¹®(pass phrase)ÀÌ ÀÏÄ¡ÇÕ´Ï´Ù.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Æнº ±¸¹®(pass phrase)ÀÌ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "spec ÆÄÀÏ¿¡ ´ëÇØ ÁúÀÇÇÕ´Ï´Ù" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "spec ÆÄÀÏ¿¡ ´ëÇØ ÁúÀÇÇÕ´Ï´Ù" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "´ÙÀ½ÀÇ ÁúÀÇ Çü½ÄÀ» »ç¿ëÇϽʽÿä" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "¼­¸í ¿É¼Ç:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "ÁúÀÇ¿¡ ÇÊ¿äÇÑ Àμö°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Àӽà ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "½ÇÇà Áß(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "%sÀÇ ½ÇÇà¿¡ ½ÇÆÐÇÔ (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "%sÀÇ À߸øµÈ Á¾·á »óȲ (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"RPM Á¦ÀÛ ¿À·ù:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "'==' À» ó¸®(parsing)ÇÏ´Â µµÁß ±¸¹® ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "'&&' À» ó¸®(parsing)ÇÏ´Â µµÁß ±¸¹® ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "'||' À» ó¸®(parsing)ÇÏ´Â µµÁß ±¸¹® ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "Ç¥Çö½Ä¿¡¼­ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "'(' °¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "'-' ´Â ¼ýÀÚ¿¡¸¸ »ç¿ëÇÕ´Ï´Ù\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "'!' ´Â ¼ýÀÚ¿¡¸¸ »ç¿ëÇÕ´Ï´Ù\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "À¯ÇüÀº ¹Ýµå½Ã ÀÏÄ¡ÇØ¾ß ÇÕ´Ï´Ù\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "'* /' ´Â ¹®ÀÚ¿­¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "'-' ´Â ¹®ÀÚ¿­¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "'&&' ¿Í '||' ´Â ¹®ÀÚ¿­¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "Ç¥Çö½Ä¿¡¼­ ±¸¹® ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "%s %s¿¡ '(' °¡ ¾ø½À´Ï´Ù\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "%s(%s¿¡ ')' °¡ ¾ø½À´Ï´Ù\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "ºÎÀûÇÕÇÑ %s ÅäÅ«: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "%2$s %3$s¿¡ %1$s °¡ ¾ø½À´Ï´Ù\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "%s() ´ÙÀ½¿¡ °ø¹éÀÌ ¾øÀ½: %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "À߸øµÈ ±¸¹®: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "À߸øµÈ ¸ðµå spec: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "À߸øµÈ dir¸ðµå spec: %s(%s)\n" + +#: build/files.c:713 +#, fuzzy, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "ºñÁ¤»óÀûÀÎ ·ÎÄÉÀÏ ±æÀÌ: %%lang(%2$s)¿¡ \"%1$.*s\"\n" + +#: build/files.c:723 +#, fuzzy, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "%%lang(%2$s)¿¡ Áߺ¹µÈ ·ÎÄÉÀÏ %1$.*s°¡ Á¸ÀçÇÕ´Ï´Ù\n" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "ºÎÀûÇÕÇÑ %s ÅäÅ«: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "%%docdir¿¡ ÇϳªÀÇ Àμö¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "ÇϳªÀÇ Çà¿¡ µÎ°³ÀÇ ÆÄÀÏÀÌ Á¸ÀçÇÔ: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "ÆÄÀÏÀº ¹Ýµå½Ã \"/\" ·Î ½ÃÀÛÇؾßÇÔ: %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "ƯÁ¤ %%docÀ» ´Ù¸¥ Çü½Ä°ú ÇÔ²² »ç¿ëÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "ÆÄÀÏ ¸ñ·ÏÀÌ Áߺ¹µÊ: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s %s ¸µÅ© ÇØÁ¦¿¡ ½ÇÆÐÇÔ: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "BuildRoot¿¡ ½Éº¼¸¯¸µÅ©ÇÔ: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "ÆÄÀÏÀ» ãÀ» ¼ö ¾øÀ½: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "ÆÄÀÏÀ» ãÀ» ¼ö ¾øÀ½: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, fuzzy, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "¸ÅÅ©·Î %%%s(À»)¸¦ È®Àå(expand)Çϴµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "ÆÄÀÏÀº \"/\" ·Î ½ÃÀÛÇؾßÇÔ: %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "GlobÀ» »ç¿ëÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "globÀ¸·Î ÆÄÀÏÀ» ãÀ» ¼ö ¾øÀ½: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "globÀ¸·Î ÆÄÀÏÀ» ãÀ» ¼ö ¾øÀ½: %s\n" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "%s ÆÄÀÏÀÇ %%files¸¦ ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "Çà: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "À߸øµÈ ÆÄÀÏ: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "À߸øµÈ ¼ÒÀ¯ÀÚ/±×·ì: %s\n" + +#: build/files.c:2095 +#, fuzzy, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "¾ÆÄ«À̺긦 Ǫ´Âµ¥ ½ÇÆÐÇÔ%s%s: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "ÆÄÀÏ Ã³¸® Áß: %s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "%s ÆÄÀÏÀÇ ¾ÆÄ«À̺긦 »ý¼ºÇϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "¾ÆÄ«ÀÌºê »ý¼º¿¡ ½ÇÆÐÇÔ: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy ÀÛ¼º¿¡ ½ÇÆÐÇÔ: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy Àб⿡ ½ÇÆÐÇÔ: %s\n" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "Çà: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "È£½ºÆ®¸íÀ» Á¤±ÔÈ­(canonicalize) ÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "PreIn ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "PreUn ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "PreIn ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "PostIn ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "PostUn ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "PostIn ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "VerifyScript ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Æ®¸®°Å ½ºÅ©¸³Æ® ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "¾Ë ¼ö ¾ø´Â ¾ÆÀÌÄÜ À¯Çü: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "°íÁ¤ Çì´õ ¿µ¿ª(immutable header region)À» »ý¼ºÇÒ ¼ö ¾ø½À´Ï´Ù.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "ÀÓ½Ã(temp) Çì´õ¸¦ ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "À߸øµÈ CSA µ¥ÀÌÅÍ\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "¼­¸í(signature) Çì´õ¸¦ ´Ù½Ã Àоî¿Ã ¼ö ¾ø½À´Ï´Ù.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "%s(À»)¸¦ ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "ÆÐÅ°Áö¸¦ ÀÛ¼ºÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "¼­¸íÇÒ ´ë»ó %s(À»)¸¦ ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "%sÀÇ Çì´õ¸¦ ÀÐÀ» ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "%s¿¡ Çì´õ¸¦ ÀÛ¼ºÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "%sÀÇ payload¸¦ ÀÐÀ» ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "%s¿¡ payload¸¦ ÀÛ¼ºÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "ÀÛ¼º: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "½ÇÇà Áß(%s): %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "%sÀÇ ½ÇÇà¿¡ ½ÇÆÐÇÔ (%s): %s\n" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Æнº ±¸¹®(pass phrase)ÀÌ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "%s ÆÐÅ°ÁöÀÇ Ãâ·Â ÆÄÀϸíÀ» »ý¼ºÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "%s(À»)¸¦ »ý¼ºÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "%d ¹ø° Çà: µÎ¹ø° %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog Ç׸ñ(entry)Àº ¹Ýµå½Ã '*' ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "%%changelog Ç׸ñ(entry)ÀÌ ¿ÏÀüÇÏÁö ¾Ê½À´Ï´Ù\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "%%changelog¿¡ À߸øµÈ ³¯Â¥: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog°¡ ³¯Â¥(chronological) ¼øÀ¸·Î µÇ¾îÀÖÁö ¾Ê½À´Ï´Ù\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "%%changelog¿¡ À̸§ÀÌ ºüÁ®ÀÖ½À´Ï´Ù\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "%%changelog¿¡ ³»¿ë(description)ÀÌ ¾ø½À´Ï´Ù\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "%d ¹ø° Çà: %%description¿¡¼­ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "%d ¹ø° Çà: %s(Àº)´Â À߸øµÈ ¿É¼ÇÀÔ´Ï´Ù: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "%d ¹ø° Çà: À̸§ÀÌ ³Ê¹« ¸¹½À´Ï´Ù: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "%d ¹ø° Çà: ÆÐÅ°Áö°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "%d ¹ø° Çà: µÎ¹ø° ³»¿ë(description)\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "%d ¹ø° Çà: %%files¿¡¼­ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "%d ¹ø° Çà: %%files¿¡¼­ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "%d ¹ø° Çà: À߸øµÈ ¼ýÀÚÀÔ´Ï´Ù: %s\n" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "%d ¹ø° Çà: no%s(Àº)´Â À߸øµÈ ¼ýÀÚÀÔ´Ï´Ù: %d\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "%d ¹ø° Çà: %s(Àº)´Â À߸øµÈ ¼ýÀÚÀÔ´Ï´Ù: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "\"%s\" ¿©·¯°³ÀÇ ÆÐÅ°Áö¸¦ ÁöÁ¤ÇÕ´Ï´Ù\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "¾ÆÅ°ÅØÃÄ°¡ Á¦¿ÜµÊ: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "¾ÆÅ°ÅØÃÄ°¡ Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ½: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "¿î¿µÃ¼Á¦°¡ Á¦¿ÜµÊ: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "¿î¿µÃ¼Á¦°¡ Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ½: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "ÆÐÅ°Áö¿¡ ¹Ýµå½Ã %s Ç׸ñ(field)À» Æ÷ÇÔÇؾßÇÔ: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "ÆÐÅ°Áö¿¡ %s Ç׸ñ(entry)ÀÌ Áߺ¹µÇ¾î ÀÖÀ½: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "%s ¾ÆÀÌÄÜÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "%s ¾ÆÀÌÄÜÀ» ÀÐÀ» ¼ö ¾øÀ½: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "¾Ë ¼ö ¾ø´Â ¾ÆÀÌÄÜ À¯Çü: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "%d ¹ø° Çà: ű׿¡ ÇϳªÀÇ ÅäÅ«¸¸ ÀÖ½À´Ï´Ù: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "%d ¹ø° Çà: %s¿¡ ºÎÀûÇÕÇÑ ¹®ÀÚ '-' °¡ ÀÖÀ½: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "%d ¹ø° Çà: %s¿¡ ºÎÀûÇÕÇÑ ¹®ÀÚ '-' °¡ ÀÖÀ½: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "%d ¹ø° Çà: %s¿¡ ºÎÀûÇÕÇÑ ¹®ÀÚ '-' °¡ ÀÖÀ½: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "%d ¹ø° Çà: ¿Ã¹Ù¸£Áö ¸øÇÑ Å±×ÀÔ´Ï´Ù: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "%d ¹ø° Çà: űװ¡ ºñ¾îÀÖ½À´Ï´Ù: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "%d ¹ø° Çà: Prefixes´Â Àý´ë \"/\" ·Î ³¡³ª¼­´Â ¾ÈµË´Ï´Ù: %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "%d ¹ø° Çà: DocdirÀº ¹Ýµå½Ã '/' ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù: %s\n" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "%d ¹ø° Çà: Epoch/Serial Ç׸ñ(field)Àº ¹Ýµå½Ã ¼ýÀÚÀ̾î¾ß ÇÕ´Ï´Ù: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "%d ¹ø° Çà: À߸øµÈ %s: ¼ö½ÄÀÚ(qualifier): %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "%d ¹ø° Çà: À߸øµÈ BuildArchitecture Çü½ÄÀÔ´Ï´Ù: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "³»ºÎ ¿À·ù: º¸°Å½º(Bogus) ÅÂ±× %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "%d ¹ø° Çà: ¹öÀüÀÌ ÇÊ¿äÇÕ´Ï´Ù: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "À߸øµÈ ÆÐÅ°Áö ÁöÁ¤: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "ÆÐÅ°Áö°¡ ÀÌ¹Ì Á¸ÀçÇÔ: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "%d ¹ø° Çà: ¾Ë ¼ö ¾ø´Â ű×ÀÔ´Ï´Ù: %s\n" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "BuildRoot¸¦ \"/\" ·Î ÁöÁ¤ÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "BuildRoot¸¦ \"/\" ·Î ÁöÁ¤ÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "À߸øµÈ ¼Ò½º: %s: %s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "ÆÐÄ¡ ¹øÈ£ %d°¡ ¾ø½À´Ï´Ù\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "¼Ò½º ¹øÈ£ %d°¡ ¾ø½À´Ï´Ù\n" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "¼Ò½º ÆÐÅ°Áö¿¡ .spec ÆÄÀÏÀÌ Æ÷ÇԵǾî ÀÖÁö ¾Ê½À´Ï´Ù\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "nosource %s(À»)¸¦ ´Ù¿î·ÎµåÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "%%setup¿¡¼­ ¿À·ù ¹ß»ý: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "%d ¹ø° Çà: %%setup¿¡ À߸øµÈ Àμö°¡ ÀÖ½À´Ï´Ù: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "%d ¹ø° Çà: %%setup¿¡ À߸øµÈ %s ¿É¼Ç: %s\n" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "ºÎÀûÇÕÇÑ ÆÐÅ°Áö ¹øÈ£: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "%d ¹ø° Çà: µÎ¹ø° %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"%d ¹ø° Çà: ÀÇÁ¸¼º ÅäÅ«(token)Àº ¹Ýµå½Ã '¹®ÀÚ-¼ýÀÚ Á¶ÇÕ', '_' ¶Ç´Â '/' ·Î ½Ã" +"ÀÛÇØ¾ß ÇÕ´Ï´Ù: %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "%d ¹ø° Çà: ¹öÀüÀÌ ¸í½ÃµÈ ÆÄÀϸíÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "%d ¹ø° Çà: ¹öÀüÀÌ ÇÊ¿äÇÕ´Ï´Ù: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "%d ¹ø° Çà: À߸øµÈ ¼ýÀÚÀÔ´Ï´Ù: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "%d ¹ø° Çà: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "%d ¹ø° Çà: Æ®¸®°Å´Â ¹Ýµå½Ã '--' ¸¦ Æ÷ÇÔÇØ¾ß ÇÕ´Ï´Ù: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "%d ¹ø° Çà: %s¿¡¼­ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù: %s\n" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "%d ¹ø° Çà: ½ºÅ©¸³Æ® ÇÁ·Î±×·¥Àº ¹Ýµå½Ã '/' ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù: %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "%d ¹ø° Çà: ½ºÅ©¸³Æ® ÇÁ·Î±×·¥Àº ¹Ýµå½Ã '/' ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù: %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "%d ¹ø° Çà: µÎ¹ø° %s\n" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "%d ¹ø° Çà: %%description¿¡¼­ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "%d ¹ø° Çà: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "%s(À»)¸¦ ¿­ ¼ö ¾øÀ½: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "%%if°¡ ´ÝÈ÷Áö ¾Ê¾Ò½À´Ï´Ù\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean¿¡¼­ %d °ªÀÌ ¹ÝȯµÇ¾ú½À´Ï´Ù\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: %%else°¡ %%if ¾øÀÌ »ç¿ëµÇ¾ú½À´Ï´Ù\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: %%endif°¡ %%if ¾øÀÌ »ç¿ëµÇ¾ú½À´Ï´Ù\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "%%include ¹®ÀÌ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "ÆÐÅ°Áö Á¦ÀÛ¿¡ ȣȯÇÏ´Â ¾ÆÅ°ÅØÃĸ¦ ãÀ» ¼ö ¾ø½À´Ï´Ù\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "ÆÐÅ°Áö¿¡ %%descriptionÀÌ ¾øÀ½: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "%s¿¡¼­ spec ÆÄÀÏÀ» Àдµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "%s¿¡¼­ spec ÆÄÀÏÀ» Àдµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "%s¿¡¼­ spec ÆÄÀÏÀ» Àдµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "tar ÆÄÀÌÇÁ¸¦ ¿©´Âµ¥ ½ÇÆÐÇÔ: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "%%setup¿¡¼­ ¿À·ù ¹ß»ý: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "½ÇÇà Áß(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "%2$s %3$s¿¡ %1$s °¡ ¾ø½À´Ï´Ù\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "%sÀÇ µ¥ÀÌÅÍ Ç׸ñ(line)¿¡ Àμö°¡ ³Ê¹« ¸¹À½:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "ÆÄÀÏ Ã³¸® Áß: %s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "%d ¹ø° Çà: À߸øµÈ ¼ýÀÚÀÔ´Ï´Ù: %s\n" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "%s(À»)¸¦ fork ÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "%s(À»)¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "%s(À»)¸¦ fork ÇÒ ¼ö ¾øÀ½: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s(ÀÌ)°¡ ½ÇÆÐÇÔ: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "%s¿¡ ¸ðµç ÀڷḦ ±â·ÏÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "gpg ¼­¸íÀ» ÀÛ¼ºÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "%s(À»)¸¦ ¿©´Âµ¥ ½ÇÆÐÇÔ: %s\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "%s %s µð·ºÅ丮 »èÁ¦¿¡ ½ÇÆÐÇÔ: %s\n" + +#: build/rpmfc.c:999 +#, fuzzy, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "%s %s µð·ºÅ丮 »èÁ¦¿¡ ½ÇÆÐÇÔ: %s\n" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "%s(À»)¸¦ ã´Â Áß: (%s »ç¿ë)...\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "%s(À»)¸¦ ã´Âµ¥ ½ÇÆÐÇÔ:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "" +"%s spec ÆÄÀÏÀ» ÁúÀÇÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù, ÆÄÀÏÀ» ó¸®(parse)ÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(¿À·ù 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "À߸øµÈ magic ÀÔ´Ï´Ù" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "À߸øµÈ/ÀÐÀ» ¼ö ¾ø´Â Çì´õÀÔ´Ï´Ù" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Çì´õÀÇ Å©±â°¡ ³Ê¹« Å®´Ï´Ù" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "¾Ë ¼ö ¾ø´Â ÆÄÀÏ À¯ÇüÀÔ´Ï´Ù" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "ÇÏµå ¸µÅ©¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "MD5 ÇÕ°è°¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "³»ºÎ ¿À·ù" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "Çì´õ¿¡ ¾ÆÄ«À̺ê ÆÄÀÏÀÌ ¾ø½À´Ï´Ù" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " ½ÇÆÐÇÔ - " + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "%s ÆÐÅ°Áö´Â ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ½À´Ï´Ù" + +#: lib/depends.c:245 +#, fuzzy, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "%s ÆÐÅ°Áö´Â ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ½À´Ï´Ù" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(¼ýÀÚ°¡ ¾Æ´Õ´Ï´Ù)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(base64°¡ ¾Æ´Õ´Ï´Ù)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(ºÎÀûÇÕÇÑ Å¸ÀÔ)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(BLOB[Binary Large OBject]ÀÌ ¾Æ´Õ´Ï´Ù)" + +#: lib/formats.c:415 +#, fuzzy +msgid "(invalid xml type)" +msgstr "(ºÎÀûÇÕÇÑ Å¸ÀÔ)" + +#: lib/formats.c:485 +#, fuzzy +msgid "(not an OpenPGP signature)" +msgstr "¾î¶°ÇÑ PGP ¼­¸íµµ °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "Á¤»ó(normal) " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "±³Ã¼µÊ(replaced) " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "¼³Ä¡µÇ¾î ÀÖÁö ¾ÊÀ½ " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "net °øÀ¯µÊ " + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "´ÙÀ½À» ãÀ» ¼ö ¾øÀ½ %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(¾Ë ¼ö ¾ø´Â %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(¼ýÀÚ°¡ ¾Æ´Õ´Ï´Ù)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "%s »ç¿ëÀÚ°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù - root¸¦ ÀÌ¿ëÇÕ´Ï´Ù\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "%s ±×·ìÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù - root¸¦ ÀÌ¿ëÇÕ´Ï´Ù\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "Çì´õ ÆÄÀÏ ¸ñ·Ï¿¡¼­ ¾ÆÄ«À̺ê ÆÄÀÏ %s(À»)¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s(ÀÌ)°¡ %s(À¸)·Î ÀúÀåµÇ¾ú½À´Ï´Ù\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s %s µð·ºÅ丮 »èÁ¦¿¡ ½ÇÆÐÇÔ: ºó µð·ºÅ丮°¡ ¾Æ´Õ´Ï´Ù\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s %s µð·ºÅ丮 »èÁ¦¿¡ ½ÇÆÐÇÔ: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s %s ¸µÅ© ÇØÁ¦¿¡ ½ÇÆÐÇÔ: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s(ÀÌ)°¡ %s(À¸)·Î »ý¼ºµÇ¾ú½À´Ï´Ù\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignatureÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: À¯È¿ÇÑ ¼­¸íÀÌ ¾ø½À´Ï´Ù\n" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: FreadÀÌ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: lib/package.c:794 +#, fuzzy, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s(Àº)´Â ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +#, fuzzy +msgid "print macro expansion of EXPR" +msgstr "<Ç¥Çö½Ä>+ ÀÇ ¸ÅÅ©·Î È®ÀåÀ» Ãâ·ÂÇÕ´Ï´Ù" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +#, fuzzy +msgid "read instead of default file(s)" +msgstr "±âº» ¸ÅÅ©·Î ÆÄÀÏ ´ë½Å <ÆÄÀÏ:..>À» ÀоîµéÀÔ´Ï´Ù" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +#, fuzzy +msgid "don't verify package digest(s)" +msgstr "ÆÐÅ°ÁöÀÇ ÀÇÁ¸¼ºÀ» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptALL.c:176 +#, fuzzy +msgid "don't verify database header(s) when retrieved" +msgstr "ÆÐÅ°ÁöÀÇ ¾ÆÅ°ÅØÃĸ¦ °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptALL.c:178 +#, fuzzy +msgid "don't verify package signature(s)" +msgstr "ÆÐÅ°ÁöÀÇ ¼­¸íÀ» °Ë»çÇÕ´Ï´Ù" + +#: lib/poptALL.c:181 +#, fuzzy +msgid "send stdout to CMD" +msgstr "Ç¥ÁØÃâ·ÂÀ» <¸í·É>À¸·Î º¸³À´Ï´Ù" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +#, fuzzy +msgid "use ROOT as top level directory" +msgstr "<µð·ºÅ丮>¸¦ ÃÖ»óÀ§ µð·ºÅ丮·Î »ç¿ëÇÕ´Ï´Ù" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "ÁúÀÇ Å±׸¦ º¸¿©ÁÝ´Ï´Ù" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "ÇöÀç ¼³Á¤µÇ¾î ÀÖ´Â rpmrcÀÇ ³»¿ë°ú ¸ÅÅ©·Î¸¦ º¸¿©ÁÝ´Ï´Ù" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "ÀÚ¼¼ÇÑ Ãâ·ÂÀ» Á¦°øÇÕ´Ï´Ù" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "¾ÆÁÖ »ó¼¼ÇÑ Ãâ·ÂÀ» Á¦°øÇÕ´Ï´Ù" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "ÇöÀç »ç¿ëµÇ°í ÀÖ´Â rpm ¹öÀüÀ» Ç¥½ÃÇÕ´Ï´Ù" + +#: lib/poptALL.c:208 +#, fuzzy +msgid "debug payload file state machine" +msgstr "ÄÄÇ»ÅÍÀÇ »óÅÂ(state) ÆÄÀÏÀ» µð¹ö±× ÇÕ´Ï´Ù" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "rpmio ÀÔ/Ãâ·ÂÀ» µð¹ö±× ÇÕ´Ï´Ù" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "Á¦¿Ü½Ãų °æ·Î´Â ¹Ýµå½Ã '/' ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "Àç¹èÄ¡½Ã¿¡´Â ¹Ýµå½Ã '/' ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "Àç¹èÄ¡½Ã¿¡´Â ¹Ýµå½Ã '=' À» Æ÷ÇÔÇØ¾ß ÇÕ´Ï´Ù" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "Àç¹èÄ¡½Ã¿¡´Â ¹Ýµå½Ã '=' µÚ¿¡ '/' °¡ ¿Í¾ß ÇÕ´Ï´Ù" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"ƯÁ¤ ÆÄÀÏÀ» »ý·«Çϱâ À§ÇÑ ¼³Á¤ÀÌ Àû¿ëµÈ °æ¿ì¿¡µµ, ÆÐÅ°Áö ¾ÈÀÇ ¸ðµç ÆÄÀÏÀ» ¼³" +"Ä¡ÇÕ´Ï´Ù" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"<ÆÐÅ°Áö> À̸§°ú ÀÏÄ¡ÇÏ´Â ÆÐÅ°Áö´Â ¸ðµÎ Á¦°ÅÇÕ´Ï´Ù (<ÆÐÅ°Áö>¿¡ ¿©·¯°³ÀÇ ÆÐÅ°Áö" +"¸¦ µ¿½Ã¿¡ ÁöÁ¤ÇÒ °æ¿ì¿¡´Â ¿À·ù°¡ ¹ß»ýÇÕ´Ï´Ù)" + +#: lib/poptI.c:123 +#, fuzzy +msgid "relocate files in non-relocatable package" +msgstr "Àç¹èÄ¡ ±â´ÉÀÌ ¾ø´Â ÆÐÅ°ÁöÀÇ ÆÄÀÏÀ» Àç¹èÄ¡ÇÏ¿© ¼³Ä¡ÇÕ´Ï´Ù" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "ÆÐÅ°Áö¸¦ (Á¦°Å) »èÁ¦ÇÕ´Ï´Ù" + +#: lib/poptI.c:131 +msgid "+" +msgstr "<ÆÐÅ°Áö>+" + +#: lib/poptI.c:134 lib/poptI.c:171 +#, fuzzy +msgid "do not install configuration files" +msgstr "¸ðµç ¼³Á¤ ÆÄÀÏÀ» ³ª¿­ÇÕ´Ï´Ù" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "ÆÐÅ°Áö¿¡ Æ÷ÇÔµÈ ¹®¼­ ÆÄÀÏÀ» ¼³Ä¡ÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "<°æ·Î>·Î ½ÃÀ۵Ǵ ÆÄÀÏÀº ¼³Ä¡ÇÏÁö ¾Ê½À´Ï´Ù " + +#: lib/poptI.c:140 +msgid "" +msgstr "<°æ·Î>" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "--replacepkgs ¿Í --replacefiles ¿É¼ÇÀ» µ¿½Ã¿¡ »ç¿ëÇÕ´Ï´Ù" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "±âÁ¸¿¡ ¼³Ä¡µÈ ÆÐÅ°Áö¸¦ ¾÷±×·¹À̵å ÇÕ´Ï´Ù" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "<ÆÐÅ°ÁöÆÄÀÏ>+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "" +"ÆÐÅ°Áö ¼³Ä¡¸¦ Çؽø¶Å©(#)·Î Ç¥½ÃÇÕ´Ï´Ù (-v ¿É¼Ç°ú ÇÔ²² »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï" +"´Ù)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "ÆÐÅ°ÁöÀÇ ¾ÆÅ°ÅØÃĸ¦ °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "ÆÐÅ°ÁöÀÇ ¿î¿µÃ¼Á¦¸¦ °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "ÆÐÅ°Áö¸¦ ¼³Ä¡Çϱâ Àü¿¡ µð½ºÅ© °ø°£À» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "ÆÐÅ°Áö¿¡ Æ÷ÇÔµÈ ¹®¼­ ÆÄÀÏÀ» ¼³Ä¡ÇÕ´Ï´Ù" + +#: lib/poptI.c:164 +#, fuzzy +msgid "install package(s)" +msgstr "ÆÐÅ°Áö¸¦ ¼³Ä¡ÇÕ´Ï´Ù" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "ÆÄÀϽýºÅÛÀ» º¯°æÇÏÁö ¾Ê°í, µ¥ÀÌÅͺ£À̽º¸¦ °»½ÅÇÕ´Ï´Ù" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "ÆÐÅ°ÁöÀÇ ÀÇÁ¸¼ºÀ» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "ÆÄÀÏÀÇ MD5 Ãà¾à(digest)À» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "ÆÄÀÏÀÇ MD5 Ãà¾à(digest)À» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "¸ðµç ¼³Á¤ ÆÄÀÏÀ» ³ª¿­ÇÕ´Ï´Ù" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "ÀÇÁ¸¼ºÀÌ ÀÖ´Â ÆÐÅ°Áö¸¦ ¼³Ä¡Çϵµ·Ï Àç¿ä±¸ÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "ÆÐÅ°Áö ½ºÅ©¸³Æ²¸´(scriptlet)À» ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "%%pre ½ºÅ©¸³Æ²¸´(scriptlet)À» ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù (ÀÖÀ» °æ¿ì)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "%%post ½ºÅ©¸³Æ²¸´(scriptlet)À» ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù (ÀÖÀ» °æ¿ì)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "%%preun ½ºÅ©¸³Æ²¸´(scriptlet)À» ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù (ÀÖÀ» °æ¿ì)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "%%postun ½ºÅ©¸³Æ²¸´(scriptlet)À» ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù (ÀÖÀ» °æ¿ì)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "" +"ÀÌ ÆÐÅ°Áö¿¡ ÀÇÇØ »ý¼ºµÇ´Â(triggered) ¾î¶°ÇÑ ½ºÅ©¸³Æ²¸´(scriptlet)µµ ½ÇÇàÇÏÁö " +"¾Ê½À´Ï´Ù" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "¾î¶°ÇÑ %%triggerprein ½ºÅ©¸³Æ²¸´(scriptlet)µµ ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "¾î¶°ÇÑ %%triggerin ½ºÅ©¸³Æ²¸´(scriptlet)µµ ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "¾î¶°ÇÑ %%triggerun ½ºÅ©¸³Æ²¸´(scriptlet)µµ ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "¾î¶°ÇÑ %%triggerpostun ½ºÅ©¸³Æ²¸´(scriptlet)µµ ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"ÀÌÀü ¹öÀüÀÇ ÆÐÅ°Áö·Î ´Ù¿î±×·¹À̵å ÇÕ´Ï´Ù (--force ¿É¼ÇÀ» »ç¿ë½Ã¿¡´Â ÀÌ ¿É¼Ç" +"ÀÌ ÀÚµ¿À¸·Î Àû¿ëµË´Ï´Ù)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "ÆÐÅ°Áö ¼³Ä¡¸¦ ÆÛ¼¾Æ®(%)·Î Ç¥½ÃÇÕ´Ï´Ù" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "" +"Àç¹èÄ¡ ±â´ÉÀÌ ÀÖ´Â ÆÐÅ°ÁöÀÇ °æ¿ì, ÁöÁ¤ÇÑ <µð·ºÅ丮>·Î Àç¹èÄ¡ÇÏ¿© ¼³Ä¡ÇÕ´Ï´Ù" + +#: lib/poptI.c:234 +msgid "" +msgstr "<µð·ºÅ丮>" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "<ÀÌÀü°æ·Î>¿¡¼­ <»õ·Î¿î°æ·Î>·Î ÆÄÀÏÀ» Àç¹èÄ¡ ÇÕ´Ï´Ù" + +#: lib/poptI.c:237 +msgid "=" +msgstr "<ÀÌÀü°æ·Î>=<»õ·Î¿î°æ·Î>" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "ÆÐÅ°Áö°¡ ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ´Â °æ¿ì¿¡µµ ¼³Ä¡ÇÕ´Ï´Ù" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "ÆÐÅ°Áö¸¦ ¼³Ä¡ÇÏÁö ¾Ê°í, Á¦´ë·Î ¼³Ä¡µÇ´ÂÁö¸¸ È®ÀÎÇÕ´Ï´Ù" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "ÆÐÅ°Áö¸¦ ¾÷±×·¹À̵å ÇÕ´Ï´Ù" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "¸ðµç ÆÐÅ°Áö¿¡ ´ëÇØ ÁúÀÇ/°ËÁõÇÕ´Ï´Ù" + +#: lib/poptQV.c:69 +#, fuzzy +msgid "rpm checksig mode" +msgstr "rpm °ËÁõ ¸ðµå" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "ÆÄÀÏÀÌ µé¾îÀÖ´Â ÆÐÅ°Áö¿¡ ´ëÇØ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "±×·ì ¾ÈÀÇ ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#: lib/poptQV.c:75 +#, fuzzy +msgid "query/verify a package file" +msgstr "¸ðµç ÆÐÅ°Áö¿¡ ´ëÇØ ÁúÀÇ/°ËÁõÇÕ´Ï´Ù" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "ÆÐÅ°Áö ½Äº°ÀÚ(identifier)¸¦ »ç¿ëÇÏ¿© ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "Çì´õ ½Äº°ÀÚ(identifier)¸¦ »ç¿ëÇÏ¿© ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "rpm ÁúÀÇ ¸ðµå" + +#: lib/poptQV.c:85 +#, fuzzy +msgid "query/verify a header instance" +msgstr "Çì´õ ½Äº°ÀÚ(identifier)¸¦ »ç¿ëÇÏ¿© ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "¼³Ä¡ ³»¿ëÀ» ÅëÇØ ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "ÆÐÅ°Áö·Î ÀÎÇØ »ý¼ºµÇ´Â(triggered) ÆÐÅ°Áö¿¡ ´ëÇØ ÁúÀÇÇÕ´Ï´Ù" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "rpm °ËÁõ ¸ðµå" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "ÀÇÁ¸¼ºÀ» ÇÊ¿ä·Î ÇÏ´Â ÆÐÅ°Áö¿¡ ´ëÇØ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "ÀÇÁ¸¼ºÀ» Á¦°øÇÏ´Â ÆÐÅ°Áö¿¡ ´ëÇØ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#: lib/poptQV.c:98 +#, fuzzy +msgid "do not glob arguments" +msgstr "ÁúÀÇ¿¡ ÇÊ¿äÇÑ Àμö°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "¸ðµç ¼³Á¤ ÆÄÀÏÀ» ³ª¿­ÇÕ´Ï´Ù" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "¸ðµç ¹®¼­ ÆÄÀÏÀ» ³ª¿­ÇÕ´Ï´Ù" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "±âº» ÆÄÀÏ Á¤º¸¸¦ º¸¿©ÁÝ´Ï´Ù" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "ÆÐÅ°Áö ¾ÈÀÇ ÆÄÀÏÀ» ³ª¿­ÇÕ´Ï´Ù" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "%%ghost ÆÄÀÏÀ» »ý·«ÇÕ´Ï´Ù" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "³ª¿­µÈ ÆÄÀÏÀÇ »óÅÂ(state)¸¦ º¸¿©ÁÝ´Ï´Ù" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "ÆÄÀÏÀÇ ¿ë·®À» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "ÆÄÀÏÀÇ ½Éº¼¸¯ ¸µÅ© °æ·Î¸¦ °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ¸¦ °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "ÆÄÀÏÀÇ ±×·ìÀ» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "ÆÄÀÏÀÇ ÃÖÁ¾ º¯°æ ½Ã°£À» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "ÆÄÀÏÀÇ ¸ðµå¸¦ °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "ÆÄÀÏÀÇ ¿ë·®À» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "ÆÐÅ°Áö ¾ÈÀÇ ÆÄÀÏÀ» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "ÆÐÅ°Áö ¾ÈÀÇ ÆÄÀÏÀ» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "ÆÐÅ°ÁöÀÇ ÀÇÁ¸¼ºÀ» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +#, fuzzy +msgid "don't execute verify script(s)" +msgstr "%verifyscript¸¦ ½ÇÇàÇÏÁö ¾Ê½À´Ï´Ù (ÀÖÀ» °æ¿ì)" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "%2$s¿¡ %1$s(À»)¸¦ À§ÇÑ ¾ÆÅ°ÅØÃÄ°¡ ¾øÀ½:%3$d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "¼Ò½º ÆÐÅ°Áö°¡ ÇÊ¿äÇϸç, ¹ÙÀ̳ʸ®°¡ °Ë»öµÇ¾ú½À´Ï´Ù\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "¼Ò½º ÆÐÅ°Áö¿¡ .spec ÆÄÀÏÀÌ Æ÷ÇԵǾî ÀÖÁö ¾Ê½À´Ï´Ù\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "¾ÆÄ«À̺긦 Ǫ´Âµ¥ ½ÇÆÐÇÔ%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " ´ÙÀ½ ÆÄÀÏÀÇ " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%2$s ÆÄÀÏÀÇ %1$s(ÀÌ)°¡ ½ÇÆÐÇÔ: %3$s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s(ÀÌ)°¡ ½ÇÆÐÇÔ: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "¿Ã¹Ù¸£Áö ¸øÇÑ Çü½Ä: %s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(ÆÄÀÏÀÌ Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ½)" + +#: lib/query.c:160 +msgid "normal " +msgstr "Á¤»ó(normal) " + +#: lib/query.c:163 +msgid "replaced " +msgstr "±³Ã¼µÊ(replaced) " + +#: lib/query.c:166 +msgid "not installed " +msgstr "¼³Ä¡µÇ¾î ÀÖÁö ¾ÊÀ½ " + +#: lib/query.c:169 +msgid "net shared " +msgstr "net °øÀ¯µÊ " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(»óŸ¦ ¾Ë ¼ö ¾øÀ½) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(¾Ë ¼ö ¾ø´Â %3d) " + +#: lib/query.c:198 +#, fuzzy +msgid "package has not file owner/group lists\n" +msgstr "ÆÐÅ°Áö¿¡ ÆÄÀÏ ¼ÒÀ¯ÀÚ ¶Ç´Â id ¸ñ·ÏÀÌ ¾ø½À´Ï´Ù\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "ÆÐÅ°Áö¿¡ ÆÄÀÏ ¼ÒÀ¯ÀÚ ¶Ç´Â id ¸ñ·ÏÀÌ ¾ø½À´Ï´Ù\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "%s ±×·ìÀº ¾î¶² ÆÐÅ°Áö¿¡µµ Æ÷ÇԵǾî ÀÖÁö ¾Ê½À´Ï´Ù\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "%s(À»)¸¦ »ý¼ºÇÏ´Â(trigger) ÆÐÅ°Áö°¡ ¾ø½À´Ï´Ù\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "%s(ÀÌ)°¡ À߸øµÊ: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "%s(¿Í)°ú ÀÏÄ¡ÇÏ´Â ÆÐÅ°Áö°¡ ¾øÀ½: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "%s(À»)¸¦ ÇÊ¿ä·Î ÇÏ´Â ÆÐÅ°Áö°¡ ¾ø½À´Ï´Ù\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "%s(À»)¸¦ Á¦°øÇÏ´Â ÆÐÅ°Áö°¡ ¾ø½À´Ï´Ù\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "%s ÆÄÀÏ: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "%s ÆÄÀÏÀº ¾î¶² ÆÐÅ°Áö¿¡µµ µé¾îÀÖÁö ¾Ê½À´Ï´Ù\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "ºÎÀûÇÕÇÑ ÆÐÅ°Áö ¹øÈ£: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "±â·Ï(record) ¹øÈ£ %u(Àº)´Â ÀÐÀ» ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "%s ÆÐÅ°Áö°¡ ¼³Ä¡µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù\n" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "¾Ë ¼ö ¾ø´Â ÅÂ±× ÀÔ´Ï´Ù" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: lib/rpmchecksig.c:116 +#, fuzzy, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "¿Ã¹Ù¸£Áö ¾ÊÀ½" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "È®ÀÎ" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (Å°¸¦ ãÀ» ¼ö ¾øÀ½:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (Å°¸¦ ½Å·ÚÇÒ ¼ö ¾øÀ½:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: ¿©´Âµ¥ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "%s µð·ºÅ丮¸¦ »èÁ¦Çϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s %s µð·ºÅ丮 »èÁ¦¿¡ ½ÇÆÐÇÔ: ºó µð·ºÅ丮°¡ ¾Æ´Õ´Ï´Ù\n" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "%s µð·ºÅ丮¸¦ »èÁ¦Çϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "%s µð·ºÅ丮¸¦ »èÁ¦Çϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "¾Æ´Ï¿À" + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "¿¹" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +#, fuzzy +msgid "internal support for lua scripts." +msgstr "'-' ´Â ¹®ÀÚ¿­¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "%s ÆÐÅ°Áö´Â ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ½À´Ï´Ù" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "%s(À»)¸¦ ¿©´Âµ¥ ½ÇÆÐÇÔ: %s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s(¿Í)°ú ÀÏÄ¡ÇÏ´Â ÆÐÅ°Áö°¡ ¾øÀ½: %s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Áغñ Áß..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "¼³Ä¡ÇÒ ÆÐÅ°Áö¸¦ ÁغñÇÏ°í ÀÖ½À´Ï´Ù..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +#, fuzzy +msgid "Failed dependencies:\n" +msgstr "ÀÇÁ¸¼º ¹®Á¦·Î ÀÎÇØ ½ÇÆÐÇÔ:\n" + +#: lib/rpminstall.c:305 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s(¿Í)°ú ÀÏÄ¡ÇÏ´Â ÆÐÅ°Áö°¡ ¾øÀ½: %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s(Àº)´Â ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "%s(À»)¸¦ º¹±¸ÇÕ´Ï´Ù\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "%s(À»)¸¦ »ý·«ÇÕ´Ï´Ù - Àü¼Û(transfer)¿¡ ½ÇÆÐÇÔ - %s\n" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "%s ÆÐÅ°Áö´Â Àç¹èÄ¡ÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "%s ÆÄÀÏÀ» Àд µµÁß ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "%s ÆÄÀÏÀº ÃֽŠ¹öÀüÀÇ RPMÀ» ÇÊ¿ä·Î ÇÕ´Ï´Ù\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" ¿©·¯°³ÀÇ ÆÐÅ°Áö¸¦ ÁöÁ¤ÇÕ´Ï´Ù\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "%s(À»)¸¦ ¿­ ¼ö ¾øÀ½: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "%s(À»)¸¦ ¼³Ä¡ÇÕ´Ï´Ù\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "Àμö °ªÀ¸·Î RPM ÆÐÅ°Áö°¡ ÁöÁ¤µÇ¾î¾ß ÇÕ´Ï´Ù\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s: À¯È¿ÇÑ ¼­¸íÀÌ ¾ø½À´Ï´Ù\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "Àдµ¥ ½ÇÆÐÇÔ: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "Àμö °ªÀ¸·Î RPM ÆÐÅ°Áö°¡ ÁöÁ¤µÇ¾î¾ß ÇÕ´Ï´Ù\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "%2$s/%3$sÀÇ Àá±ÝµÈ(lock) %1$s(À»)¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "%2$s/%3$sÀÇ Àá±ÝµÈ(lock) %1$s(À»)¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "%s(À»)¸¦ ¿©´Âµ¥ ½ÇÆÐÇÔ: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "%sÀÇ À̸§À» %s(À¸)·Î º¯°æÇϴµ¥ ½ÇÆÐÇÔ: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "%sÀÇ À̸§À» %s(À¸)·Î º¯°æÇϴµ¥ ½ÇÆÐÇÔ: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "" + +#: lib/rpmprob.c:115 +#, fuzzy, c-format +msgid "package %s is intended for a %s architecture" +msgstr "%s(Àº)´Â ´Ù¸¥ ¾ÆÅ°ÅØÃĸ¦ À§ÇÑ ÆÐÅ°ÁöÀÔ´Ï´Ù" + +#: lib/rpmprob.c:120 +#, fuzzy, c-format +msgid "package %s is intended for a %s operating system" +msgstr "%s(Àº)´Â ´Ù¸¥ ¿î¿µÃ¼Á¦¸¦ À§ÇÑ ÆÐÅ°ÁöÀÔ´Ï´Ù" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "%s ÆÐÅ°Áö´Â ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ½À´Ï´Ù" + +#: lib/rpmprob.c:128 +#, fuzzy, c-format +msgid "path %s in package %s is not relocatable" +msgstr "%2$s ÆÐÅ°Áö ¾ÈÀÇ %1$s °æ·Î´Â Àç¹èÄ¡ÇÒ ¼ö ¾ø½À´Ï´Ù" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "%2$s(¿Í)°ú %3$sÀÇ ¼³Ä¡ °úÁ¤¿¡¼­ %1$s ÆÄÀÏÀÌ ¼­·Î Ãæµ¹ÇÕ´Ï´Ù" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "%2$s¿¡¼­ ¼³Ä¡µÇ´Â %1$s ÆÄÀÏÀº %3$s ÆÐÅ°ÁöÀÇ ÆÄÀÏ°ú Ãæµ¹ÇÕ´Ï´Ù" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "%s ÆÐÅ°Áö (%s º¸´Ù ÃÖ½ÅÀÇ ÆÐÅ°Áö)´Â ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ½À´Ï´Ù" + +#: lib/rpmprob.c:148 +#, fuzzy, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"%4$s ÆÄÀϽýºÅÛ »ó¿¡¼­ %1$s ÆÐÅ°Áö¸¦ ¼³Ä¡ÇÒ °æ¿ì¿¡´Â %2$ld%3$cb(ÀÌ)°¡ ÇÊ¿äÇÕ" +"´Ï´Ù" + +#: lib/rpmprob.c:158 +#, fuzzy, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"%3$s ÆÄÀϽýºÅÛ »ó¿¡¼­ %1$s ÆÐÅ°Áö¸¦ ¼³Ä¡ÇÒ °æ¿ì¿¡´Â %2$ldÀÇ ¾ÆÀ̳ëµå(inode)" +"°¡ ÇÊ¿äÇÕ´Ï´Ù" + +#: lib/rpmprob.c:162 +#, fuzzy, c-format +msgid "%s is needed by %s%s" +msgstr " (Àº)´Â %s-%s-%s ¿¡¼­ ÇÊ¿ä·Î ÇÕ´Ï´Ù\n" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +#, fuzzy +msgid "(installed) " +msgstr "¼³Ä¡µÇ¾î ÀÖÁö ¾ÊÀ½ " + +#: lib/rpmprob.c:167 +#, fuzzy, c-format +msgid "%s conflicts with %s%s" +msgstr " %s-%s-%s (¿Í)°ú Ãæµ¹ÇÕ´Ï´Ù\n" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr " (Àº)´Â %s-%s-%s ¿¡¼­ ÇÊ¿ä·Î ÇÕ´Ï´Ù\n" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "" +"%2$s ÆÐÅ°Áö¸¦ ó¸®ÇÏ´Â °úÁ¤¿¡¼­ ¾Ë ¼ö ¾ø´Â ¿À·ù %1$d(ÀÌ)°¡ ¹ß»ýÇß½À´Ï´Ù" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "%s¿¡ µÎ¹ø° ':' ÀÌ ¾øÀ½:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "%s¿¡ ¾ÆÅ°ÅØÃĸíÀÌ ¾øÀ½:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "%sÀÇ µ¥ÀÌÅÍ Ç׸ñ(line)ÀÌ ºÒÃæºÐÇÔ:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "%sÀÇ µ¥ÀÌÅÍ Ç׸ñ(line)¿¡ Àμö°¡ ³Ê¹« ¸¹À½:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "À߸øµÈ ¾ÆÅ°ÅØÃÄ/¿î¿µÃ¼Á¦ ¹øÈ£: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "%sÀÇ ±âº» Ç׸ñ(line)ÀÌ ºÒÃæºÐÇÔ:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "%sÀÇ ±âº» Ç׸ñ(line)¿¡ Àμö°¡ ³Ê¹« ¸¹À½:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "%2$s¿¡ ':' (0x%1$02x ãÀ½) ÀÌ ¾øÀ½:%3$d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "%2$s¿¡ %1$s(À»)¸¦ À§ÇÑ Àμö°¡ ¾øÀ½:%3$d\n" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "%2$sÀÇ %1$s(À»)¸¦ ¿­ ¼ö ¾øÀ½:%3$d: %4$s\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "%2$s¿¡ %1$s(À»)¸¦ À§ÇÑ ¾ÆÅ°ÅØÃÄ°¡ ¾øÀ½:%3$d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "%2$s¿¡ À߸øµÈ '%1$s' ¿É¼Ç:%3$d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "¾Ë ¼ö ¾ø´Â ½Ã½ºÅÛ: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "%s(À»)¸¦ ¿­ ¼ö ¾øÀ½: %s.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "%s µð·ºÅ丮¸¦ »èÁ¦Çϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "%s(À»)¸¦ fork ÇÒ ¼ö ¾øÀ½: %s\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "%s(À»)¸¦ fork ÇÒ ¼ö ¾øÀ½: %s\n" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "" +"%s: %s ½ºÅ©¸³Æ²¸´(scriptlet)ÀÌ ½ÇÆÐÇß½À´Ï´Ù (%d), %s-%s-%s(À»)¸¦ »ý·«ÇÕ´Ï´Ù\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "" +"%2$s-%3$s-%4$sÀÇ %1$s ½ºÅ©¸³Æ²¸´(scriptlet) ½ÇÇà¿¡ ½ÇÆÐÇß½À´Ï´Ù, Á¾·á »óȲ " +"%5$d\n" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "" +"%2$s-%3$s-%4$sÀÇ %1$s ½ºÅ©¸³Æ²¸´(scriptlet) ½ÇÇà¿¡ ½ÇÆÐÇß½À´Ï´Ù, Á¾·á »óȲ " +"%5$d\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "¾Ë ¼ö ¾ø´Â ÅÂ±× ÀÔ´Ï´Ù" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "¼³Ä¡µÇ¾î ÀÖÁö ¾ÊÀ½ " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "%s ¾ÈÀÇ ÆÐÅ°Áö µ¥ÀÌÅͺ£À̽º¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/rpmts.c:193 +#, fuzzy, c-format +msgid "extra '(' in package label: %s\n" +msgstr "ºÎÀûÇÕÇÑ ÆÐÅ°Áö ¹øÈ£: %s\n" + +#: lib/rpmts.c:211 +#, fuzzy, c-format +msgid "missing '(' in package label: %s\n" +msgstr "%s %s¿¡ '(' °¡ ¾ø½À´Ï´Ù\n" + +#: lib/rpmts.c:219 +#, fuzzy, c-format +msgid "missing ')' in package label: %s\n" +msgstr "ºÎÀûÇÕÇÑ ÆÐÅ°Áö ¹øÈ£: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "SHA1 Ãà¾à(digest) Çì´õ¸¦ °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, fuzzy, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "¼­¸í: size(%d)+pad(%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s(ÀÌ)°¡ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "´ÙÀ½À» ãÀ» ¼ö ¾øÀ½ %s" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "%s-%s-%s¿¡ ÀÇÁ¸¼º ¹®Á¦ ¹ß»ý: " + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "'%' µÚ¿¡ '{' °¡ ¾ø½À´Ï´Ù" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "'%{' µÚ¿¡ '}' °¡ ¾ø½À´Ï´Ù" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "ÅÂ±× Çü½ÄÀÌ ºñ¾îÀÖ½À´Ï´Ù" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "ÅÂ±× À̸§ÀÌ ºñ¾îÀÖ½À´Ï´Ù" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "¾Ë ¼ö ¾ø´Â ÅÂ±× ÀÔ´Ï´Ù" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "¹è¿­ÀÇ ³¡ºÎºÐ¿¡ ']' °¡ ¿Í¾ßÇÕ´Ï´Ù" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "ºÒÇÊ¿äÇÑ ']' °¡ ÀÖ½À´Ï´Ù" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "ºÒÇÊ¿äÇÑ '}' °¡ ÀÖ½À´Ï´Ù" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "Ç¥Çö½Ä¿¡ '?' °¡ ¿Í¾ßÇÕ´Ï´Ù" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "Ç¥Çö½ÄÀÇ '?' µÚ¿¡ '{' °¡ ¿Í¾ßÇÕ´Ï´Ù" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "Ç¥Çö½Ä¿¡ '}' °¡ ¿Í¾ßÇÕ´Ï´Ù" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "'?' ÇϺÎÇ¥Çö½Ä(subexpression) µÚ¿¡ ':' ÀÌ ¿Í¾ßÇÕ´Ï´Ù" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "Ç¥Çö½ÄÀÇ ':' µÚ¿¡ '{' °¡ ¿Í¾ßÇÕ´Ï´Ù" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "Ç¥Çö½ÄÀÇ ³¡ºÎºÐ¿¡ '|' °¡ ¿Í¾ßÇÕ´Ï´Ù" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "db%2$d(À»)¸¦ ÀÌ¿ëÇÏ¿© %1$s À妽º¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù - %3$s (%4$d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "db°æ·Î°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "" +"%3$s À妽º¿¡¼­ \"%2$s\" ·¹Äڵ带 ¾ò´Â µµÁß ¿À·ù(%1$d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, fuzzy, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "%3$s(À¸)·Î %2$s ·¹Äڵ带 ÀúÀåÇÏ´Â µµÁß ¿À·ù(%1$d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: FseekÀÌ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: ¿©´Âµ¥ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, fuzzy, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: ¼Õ»óµÈ Çì´õ #%u(ÀÌ)°¡ º¹±¸(retrieved)µÇ¾ú½À´Ï´Ù, »ý·«ÇÕ´Ï´Ù.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "" +"%3$s À妽º¿¡¼­ \"%2$s\" ·¹Äڵ带 ¾ò´Â µµÁß ¿À·ù(%1$d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "" +"%3$s À妽º¿¡¼­ \"%2$s\" ·¹Äڵ带 ¾ò´Â µµÁß ¿À·ù(%1$d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "" +"%3$s À妽º¿¡¼­ \"%2$s\" ·¹Äڵ带 ¾ò´Â µµÁß ¿À·ù(%1$d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: 0x%xÀÇ Çì´õ¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/rpmdb.c:2434 +#, fuzzy, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "" +"%3$s À妽º¿¡¼­ \"%2$s\" ·¹Äڵ带 ¾ò´Â µµÁß ¿À·ù(%1$d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:2453 +#, fuzzy, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "%3$s(À¸)·Î %2$s ·¹Äڵ带 ÀúÀåÇÏ´Â µµÁß ¿À·ù(%1$d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:2463 +#, fuzzy, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "%3$s¿¡¼­ %2$s ·¹Äڵ带 »èÁ¦ÇÏ´Â µµÁß ¿À·ù(%1$d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "»õ·Î¿î ÆÐÅ°Áö¸¦ ¹èÄ¡ÇÏ´Â µµÁß ¿À·ù(%d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "%3$s(À¸)·Î %2$s ·¹Äڵ带 ÀúÀåÇÏ´Â µµÁß ¿À·ù(%1$d)°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "db°æ·Î°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "%s µð·ºÅ丮¸¦ »èÁ¦Çϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: lib/rpmdb.c:2897 +#, fuzzy, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "µ¥ÀÌÅͺ£À̽ºÀÇ ·¹ÄÚµå ¹øÈ£ %u(ÀÌ)°¡ À߸øµÇ¾ú½À´Ï´Ù -- »ý·«ÇÕ´Ï´Ù.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "%u¿¡ óÀ½ºÎÅÍ ·¹Äڵ带 Ãß°¡ÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"µ¥ÀÌÅͺ£À̽º¸¦ À籸ÃàÇϴµ¥ ½ÇÆÐÇÔ: ¿øº» µ¥ÀÌÅͺ£À̽º´Â ±×´ë·Î À¯ÁöµË´Ï´Ù\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "ÀÌÀü µ¥ÀÌÅͺ£À̽º¸¦ »õ·Î¿î µ¥ÀÌÅͺ£À̽º·Î ±³Ã¼Çϴµ¥ ½ÇÆÐÇß½À´Ï´Ù!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "º¹±¸Çϱâ À§ÇØ %2$sÀÇ ÆÄÀÏÀ» %1$sÀÇ ÆÄÀÏ·Î ±³Ã¼ÇÕ´Ï´Ù" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "%s µð·ºÅ丮¸¦ »èÁ¦Çϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "%3$sÀÇ db%1$d ¿À·ù(%2$d): %4$s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d ¿À·ù(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "%2$s/%3$sÀÇ Àá±ÝµÈ(lock) %1$s(À»)¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "°øÀ¯µÊ" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "Æó¼âÀû(exclusive)" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "°ËÁõµÈ db À妽º %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "ÀÎÁõµÇÁö ¾ÊÀº db ¿É¼Ç: \"%s\"(À»)¸¦ ¹«½ÃÇÕ´Ï´Ù.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s(Àº)´Â ºÎÀûÇÕÇÑ ¼öÄ¡ °ªÀÔ´Ï´Ù, »ý·«ÇÕ´Ï´Ù\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s(Àº)´Â ³Ê¹« Å©°Å³ª ³Ê¹« ÀûÀº Á¤¼ö(long) °ªÀÔ´Ï´Ù, »ý·«ÇÕ´Ï´Ù\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s(Àº)´Â ³Ê¹« Å©°Å³ª ³Ê¹« ÀûÀº Á¤¼ö(int) °ªÀÔ´Ï´Ù, »ý·«ÇÕ´Ï´Ù\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "%s¿¡¼­ spec ÆÄÀÏÀ» Àдµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "%s(À»)¸¦ fork ÇÒ ¼ö ¾øÀ½: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "%s¿¡¼­ spec ÆÄÀÏÀ» Àдµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "%s(À»)¸¦ »ý¼ºÇϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "¼­¹ö¿¡ Á¢¼ÓÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "%s(À»)¸¦ ¿©´Âµ¥ ½ÇÆÐÇÔ: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "%s µð·ºÅ丮¸¦ »èÁ¦Çϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "%sÀÇ À̸§À» %s(À¸)·Î º¯°æÇϴµ¥ ½ÇÆÐÇÔ: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "%s(À»)¸¦ Àдµ¥ ½ÇÆÐÇÔ: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "%s(À»)¸¦ ¿©´Âµ¥ ½ÇÆÐÇÔ: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "%s(À»)¸¦ »ý¼ºÇϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "¸ÅÅ©·Î %%%s¿¡ Á¾·áµÇÁö ¾ÊÀº ³»¿ë(body)ÀÌ ÀÖ½À´Ï´Ù\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "¸ÅÅ©·Î %%%s(À»)¸¦ È®Àå(expand)Çϴµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "%s¿¡¼­ spec ÆÄÀÏÀ» Àдµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== %d È°¼º %d ºñ¾îÀÖÀ½\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(ºñ¾îÀÖÀ½)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(ºñ¾îÀÖÀ½)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "¸ÅÅ©·Î %%%s¿¡ Á¾·áµÇÁö ¾ÊÀº ³»¿ë(body)ÀÌ ÀÖ½À´Ï´Ù\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "¸ÅÅ©·Î %%%s¿¡ ºÎÀûÇÕÇÑ À̸§ÀÌ ÀÖ½À´Ï´Ù (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "¸ÅÅ©·Î %%%s¿¡ Á¾·áµÇÁö ¾ÊÀº ¿É¼ÇÀÌ ÀÖ½À´Ï´Ù\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "¸ÅÅ©·Î %%%s¿¡ ºñ¾îÀÖ´Â ³»¿ë(body)ÀÌ ÀÖ½À´Ï´Ù\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "¸ÅÅ©·Î %%%s(À»)¸¦ È®Àå(expand)Çϴµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "¸ÅÅ©·Î %%%s¿¡ ºÎÀûÇÕÇÑ À̸§ÀÌ ÀÖ½À´Ï´Ù (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "¸ÅÅ©·Î %%%s (%s)´Â ·¹º§ %d ÀÌÇÏ¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "%2$s(%3$s)¿¡ ¾Ë ¼ö ¾ø´Â ¿É¼Ç %1$c(ÀÌ)°¡ ÀÖ½À´Ï´Ù\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "%c(ÀÌ)°¡ Á¾·áµÇÁö ¾ÊÀ½: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "'%%' ´ÙÀ½¿¡ ó¸®ÇÒ ¼ö ¾ø´Â(unparseable) ¸ÅÅ©·Î°¡ ÀÖ½À´Ï´Ù\n" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "Àӽà ÆÄÀÏ %s(À»)¸¦ »ý¼ºÇÏ´Â µµÁß ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "%s ÆÄÀÏ: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "%s ÆÄÀÏÀÌ %u ¹ÙÀÌÆ® º¸´Ù Àû½À´Ï´Ù\n" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "%s µð·ºÅ丮¸¦ »èÁ¦Çϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#: rpmio/rpmlua.c:480 +#, fuzzy, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "'-' ´Â ¹®ÀÚ¿­¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "'-' ´Â ¹®ÀÚ¿­¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: FwriteÀÌ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "ºÎÀûÇÕÇÑ ÆÐÅ°Áö ¹øÈ£: %s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: FseekÀÌ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(¿À·ù ¾øÀ½)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "Ä¡¸íÀû ¿À·ù: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "¿À·ù: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "°æ°í: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "¸Þ¸ð¸® ÇÒ´ç °ª (%u ¹ÙÀÌÆ®)ÀÌ NULLÀ» ¹ÝȯÇÏ¿´½À´Ï´Ù.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "¼­¸íÀÌ ¾ø½À´Ï´Ù\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(¿À·ù ¾øÀ½)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "%s¿¡¼­ spec ÆÄÀÏÀ» Àдµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: FwriteÀÌ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: FseekÀÌ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "½ÇÇà¿¡ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg ¼­¸íÀ» ÀÛ¼ºÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "¼­¸íÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "makeTempFileÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignatureÀÌ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "%s(À»)¸¦ ¿©´Âµ¥ ½ÇÆÐÇÔ: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: Àдµ¥ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#: tools/rpmgraph.c:220 +#, fuzzy +msgid "don't verify header+payload signature" +msgstr "ÆÐÅ°ÁöÀÇ ¼­¸íÀ» °Ë»çÇÕ´Ï´Ù" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "»ç¿ëÀÚ À̸§ ¼³Á¤[getUname]: uid°¡ ³Ê¹« ¸¹½À´Ï´Ù\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "»ç¿ëÀÚ À̸§ ¼³Á¤[getUnameS]: uid°¡ ³Ê¹« ¸¹½À´Ï´Ù\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "»ç¿ëÀÚ id ¼³Á¤[getUidS]: uid°¡ ³Ê¹« ¸¹½À´Ï´Ù\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "±×·ì À̸§ ¼³Á¤[getGname]: gid°¡ ³Ê¹« ¸¹½À´Ï´Ù\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "±×·ì À̸§ ¼³Á¤[getGnameS]: gid°¡ ³Ê¹« ¸¹½À´Ï´Ù\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "±×·ì id ¼³Á¤[getGidS]: gid°¡ ³Ê¹« ¸¹½À´Ï´Ù\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "´ÙÀ½°ú °ü·ÃµÈ ÆÐÅ°Áö À̸§À» ¹«½ÃÇÕ´Ï´Ù [%d]\t%s -> %s\n" + +#, fuzzy +#~ msgid "add suggested packages to transaction" +#~ msgstr "¼³Ä¡ ³»¿ëÀ» ÅëÇØ ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "%s(À»)¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps ¿É¼ÇÀº ÆÐÅ°Áö Á¦ÀÛ, ÀçÁ¦ÀÛ(rebuild), ÀçÄÄÆÄÀÏ(recompile), ¼³Ä¡, " +#~ "»èÁ¦, °ËÁõ½Ã¿¡¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) ¿É¼ÇÀº ÆÐÅ°Áö ¼³Ä¡, »èÁ¦, ÁúÀÇ, µ¥ÀÌÅͺ£À̽º À籸Ãà½Ã¿¡¸¸ ÁöÁ¤" +#~ "ÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#, fuzzy +#~ msgid "detect file conflicts between packages" +#~ msgstr "Àç¹èÄ¡ ±â´ÉÀÌ ¾ø´Â ÆÐÅ°ÁöÀÇ ÆÄÀÏÀ» Àç¹èÄ¡ÇÏ¿© ¼³Ä¡ÇÕ´Ï´Ù" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "Àӽà µ¥ÀÌÅͺ£À̽º %s(ÀÌ)°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "ÆÄÀÏ ½Äº°ÀÚ(identifier)¸¦ »ç¿ëÇÏ¿© ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "¸ÅÅ©·Î ÆÄÀÏ¿¡ ºÎÀûÇÕÇÑ %%_signatureÀÇ ³»¿ëÀÌ ÀÖ½À´Ï´Ù.\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "¸ñÇ¥´ë»ó(Target) ¹öÆÛ ¿À¹öÇ÷οì\n" + +#~ msgid "no files to sign\n" +#~ msgstr "¼­¸íÇÒ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "%s ÆÄÀÏ¿¡ Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign ¿É¼ÇÀº ÆÐÅ°Áö Á¦À۽ÿ¡¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù" + +#, fuzzy +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "SHA1 Ãà¾à(digest) Çì´õ¸¦ °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#, fuzzy +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "ÆÄÀÏÀÇ MD5 Ãà¾à(digest)À» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù" + +#, fuzzy +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "ÆÐÅ°Áö¿¡ ¼­¸íÇÕ´Ï´Ù (±âÁ¸ÀÇ ¼­¸íÀº »èÁ¦µË´Ï´Ù)" + +#~ msgid "generate signature" +#~ msgstr "¼­¸íÀ» ÀÛ¼ºÇÕ´Ï´Ù" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "¸ÅÅ©·Î ÆÄÀÏ ¾È¿¡ ºÎÀûÇÕÇÑ %%_signature ³»¿ë(spec)ÀÌ ÀÖ½À´Ï´Ù\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK ½ÇÆÐ: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "rpm4 ÆÐŰ¡°ú ȣȯÇÏ´Â Çì´õ¸¦ »ý¼ºÇÕ´Ï´Ù" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Àμö 󸮰úÁ¤ (%d) µµÁß ³»ºÎ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "RPM Àбâ(readRPM): %s(À»)¸¦ ¿±´Ï´Ù: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: FseekÀÌ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "RPM Àбâ(readRPM): %s(Àº)´Â RPM ÆÐÅ°Áö°¡ ¾Æ´Õ´Ï´Ù\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "RPM Àбâ(readRPM): %s¿¡¼­ Çì´õ¸¦ Àаí ÀÖ½À´Ï´Ù\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "¼­¸í »ý¼º Áß: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "PGP/GPG ¼­¸íÀ» ÀÛ¼ºÇÕ´Ï´Ù" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "ÀçÁ¦ÀÛ(rebuild)ÇÒ ÆÐÅ°Áö ÆÄÀÏÀÌ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#~ msgid "no spec files given for build" +#~ msgstr "ÆÐÅ°Áö Á¦ÀÛ¿¡ ÇÊ¿äÇÑ spec ÆÄÀÏÀÌ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#~ msgid "no tar files given for build" +#~ msgstr "ÆÐÅ°Áö Á¦ÀÛ¿¡ ÇÊ¿äÇÑ tar ÆÄÀÏÀÌ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù" + +#~ msgid "%s failed\n" +#~ msgstr "%s(ÀÌ)°¡ ½ÇÆÐÇß½À´Ï´Ù\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "¹Ýº¹ Ƚ¼ö(%d)°¡ ÃÖ´ëÄ¡(%d) º¸´Ù Å®´Ï´Ù\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "" +#~ "DB ÅÂ±× ÃʱâÈ­[dbiTagsInit]: ÀÎÁõµÇÁö ¾ÊÀº ÅÂ±× À̸§: \"%s\"(Àº)´Â ¹«½ÃµË" +#~ "´Ï´Ù\n" + +#, fuzzy +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "" +#~ "rpmdb: ¼Õ»óµÈ Çì´õ #%u(ÀÌ)°¡ º¹±¸(retrieved)µÇ¾ú½À´Ï´Ù, »ý·«ÇÕ´Ï´Ù.\n" + +#, fuzzy +#~ msgid "(rpmlib provides)" +#~ msgstr "%s: %-45s ¿¹ (rpmlibÀÌ Á¦°øÇÔ)\n" + +#, fuzzy +#~ msgid "(db files)" +#~ msgstr "À߸øµÈ db ÆÄÀÏ %s\n" + +#, fuzzy +#~ msgid "(db provides)" +#~ msgstr "%s: %-45s ¿¹ (db°¡ Á¦°øÇÔ)\n" + +#, fuzzy +#~ msgid "(added files)" +#~ msgstr "À߸øµÈ db ÆÄÀÏ %s\n" + +#, fuzzy +#~ msgid "(added provide)" +#~ msgstr "%s: %-45s ¿¹ (Á¦°øÀÌ Ãß°¡µÊ)\n" + +#~ msgid "url port must be a number\n" +#~ msgstr "URL Æ÷Æ®´Â ¹Ýµå½Ã ¼ýÀÚÀ̾î¾ß ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "%s µð·ºÅ丮¸¦ »ý¼ºÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "debug package state machine" +#~ msgstr "ÄÄÇ»ÅÍÀÇ »óÅÂ(state) ÆÄÀÏÀ» µð¹ö±× ÇÕ´Ï´Ù" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "¼³Ä¡ ³»¿ëÀ» ÅëÇØ ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "¼³Ä¡ ³»¿ëÀ» ÅëÇØ ÆÐÅ°Áö¸¦ ÁúÀÇ/°ËÁõ ÇÕ´Ï´Ù" + +#, fuzzy +#~ msgid "do not read headers" +#~ msgstr "%s: 0x%xÀÇ Çì´õ¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù\n" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "ÆÄÀÏÀÌ prefix (%s)¿Í ÀÏÄ¡ÇÏÁö ¾ÊÀ½: %s\n" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "%s µð·ºÅ丮¸¦ »èÁ¦Çϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#, fuzzy +#~ msgid "use threads for package state machine" +#~ msgstr "ÄÄÇ»ÅÍÀÇ »óÅÂ(state) ÆÄÀÏÀ» µð¹ö±× ÇÕ´Ï´Ù" + +#, fuzzy +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "" +#~ "%s: %s ½ºÅ©¸³Æ²¸´(scriptlet)ÀÌ ½ÇÆÐÇß½À´Ï´Ù (%d), %s-%s-%s(À»)¸¦ »ý·«ÇÕ´Ï" +#~ "´Ù\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl()¿¡¼­ Å©±â¸¦ ¹ÝȯÇϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl()¿¡¼­ ¸¶¿îÆ®ÇÒ ÁöÁ¡À» ¹ÝȯÇϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "%sÀÇ »óÅÂ(stat)¸¦ Ç¥½ÃÇϴµ¥ ½ÇÆÐÇÔ: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "%s ÆÄÀÏÀº ¾Ë ¼ö ¾ø´Â ÀåÄ¡ »ó¿¡ ÀÖ½À´Ï´Ù\n" + +#, fuzzy +#~ msgid "use threads for file state machine" +#~ msgstr "ÄÄÇ»ÅÍÀÇ »óÅÂ(state) ÆÄÀÏÀ» µð¹ö±× ÇÕ´Ï´Ù" + +#~ msgid "cannot open %s index\n" +#~ msgstr "%s À妽º¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "%s(À»)¸¦ ¿­ ¼ö ¾øÀ½: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "%s(À»)¸¦ ¿­ ¼ö ¾øÀ½: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Àӽà ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù.\n" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "¾Ë ¼ö ¾ø´Â ½Ã½ºÅÛ: %s\n" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "¸ÅÅ©·Î %%%.*s¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù, »ý·«ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "%d ¹ø° Çà: µÎ¹ø° %%files ¸ñ·Ï\n" + +#, fuzzy +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "\"B\" ÀÇÁ¸¼ºÀº Áß¿ä½Ã µÇ´Â °Í(epoch)À» ÇÊ¿ä·Î ÇÕ´Ï´Ù (\"A\" ·Î °¡Á¤ÇÕ´Ï" +#~ "´Ù)\n" +#~ "\tA %s\tB %s\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "%d µ¥ÀÌÅÍ À¯ÇüÀº »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#, fuzzy +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "tsort °ü°è¿¡¼­ %s-%s-%s \"%s\"(À»)¸¦ »èÁ¦ÇÕ´Ï´Ù.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "·çÇÁ(LOOP):\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "Çì´õÀÇ Å©±â°¡ ³Ê¹« Å®´Ï´Ù" + +#, fuzzy +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "°ËÁõ ¿É¼Ç (-V ¶Ç´Â --verify ¿É¼Ç°ú ÇÔ²² »ç¿ë):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp¸¦ ãÀ» ¼ö ¾øÀ½: " + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "%s ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp°¡ ½ÇÆÐÇÔ\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp ¼­¸íÀ» ÀÛ¼ºÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "¸ÅÅ©·Î ÆÄÀÏ ¾È¿¡ ¹Ýµå½Ã \"%%_pgp_name\"À» ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "¾Ë ¼ö ¾ø´Â ÅÂ±× ÀÔ´Ï´Ù" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "¼­¸íÀÌ ¾ø½À´Ï´Ù\n" + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "¼­¸íÀÌ ¾ø½À´Ï´Ù\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "¼Õ»óµÈ MD5 Ãà¾à(digest): Áö¿øÇÏÁö ¾ÊÀ½\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot¸¦ \"/\" ·Î ÁöÁ¤ÇÒ ¼ö ¾øÀ½: %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Spec ÆÄÀÏÀº BuildRoot¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "specÆÄÀÏ ¸ñ·Ï(catalog)¿¡¼­ i18N ¹®ÀÚ¿­À» °Ë»öÇÕ´Ï´Ù" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "(±âÁ¸ÀÇ) rpm[23] ÆÐŰ¡°ú ȣȯÇÏ´Â Çì´õ¸¦ »ý¼ºÇÕ´Ï´Ù" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "%%%s %s(À»)¸¦ »ý¼ºÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "%%%s %s(À»)¸¦ ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "%s(À»)¸¦ ÁúÀÇÇÒ ¼ö ¾øÀ½: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "½ÇÇà¿¡ ½ÇÆÐÇß½À´Ï´Ù\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "URL ij½Ã Çڵ鸵À» µð¹ö±× ÇÕ´Ï´Ù" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "spec ÆÄÀÏ ¾ÈÀÇ i18n Ç׸ñ(section)À» ´ëü(substitute)ÇÕ´Ï´Ù" + +#, fuzzy +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "%sÀÇ rpm µ¥ÀÌÅͺ£À̽º¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù\n" + +#~ msgid "Success" +#~ msgstr "¼º°ø" + +#~ msgid "Bad server response" +#~ msgstr "À߸øµÈ ¼­¹ö ÀÀ´äÀÔ´Ï´Ù" + +#~ msgid "Server I/O error" +#~ msgstr "¼­¹ö ÀÔ/Ãâ·Â ¿À·ùÀÔ´Ï´Ù" + +#~ msgid "Server timeout" +#~ msgstr "¼­¹ö ´ë±â½Ã°£ÀÌ ÃÊ°úµÇ¾ú½À´Ï´Ù" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "¼­¹ö È£½ºÆ® ÁÖ¼Ò¸¦ °Ë»öÇÒ ¼ö ¾ø½À´Ï´Ù" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "¼­¹ö È£½ºÆ® À̸§À» °Ë»öÇÒ ¼ö ¾ø½À´Ï´Ù" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "¼­¹ö¿¡ µ¥ÀÌÅÍ Á¢¼ÓÀ» ½ÃµµÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù" + +#~ msgid "I/O error to local file" +#~ msgstr "·ÎÄà ÆÄÀÏ¿¡ ÀÔ/Ãâ·Â ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "" +#~ "¿ø°Ý ¼­¹ö¸¦ ¼öµ¿ ¸ðµå(passive mode)·Î ¼³Á¤ÇÏ´Â µµÁß ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù" + +#~ msgid "File not found on server" +#~ msgstr "¼­¹ö¿¡¼­ ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù" + +#~ msgid "Abort in progress" +#~ msgstr "ÁøÇàÀÌ ÁߴܵǾú½À´Ï´Ù" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "¾Ë ¼ö ¾ø´Â ȤÀº ¿¹»óÄ¡ ¸øÇÑ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù" + +#, fuzzy +#~ msgid "File tree walk options:" +#~ msgstr "¼­¸í ¿É¼Ç:" + +#, fuzzy +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: ¿©´Âµ¥ ½ÇÆÐÇß½À´Ï´Ù: %s\n" + +#, fuzzy +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: readLeadÀÌ ½ÇÆÐÇß½À´Ï´Ù\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "%2$sÀÇ %1$s È®Àå(expansion)¿¡ ½ÇÆÐÇÔ:%3$d \"%4$s\"\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "%s(À»)¸¦ È®Àå(expand)ÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "%s(À»)¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù, HOMEÀÌ ³Ê¹« Å®´Ï´Ù.\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s %s µð·ºÅ丮 »èÁ¦¿¡ ½ÇÆÐÇÔ: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "%%docdirÀÇ ÇÑ°è°¡ ÃÊ°úµÇ¾ú½À´Ï´Ù\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "%d ¹ø° Çà: %%patch -b ¿¡ Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "%d ¹ø° Çà: %%patch -z ¿¡ Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "%d ¹ø° Çà: %%patch -p ¿¡ À߸øµÈ Àμö°¡ ÀÖ½À´Ï´Ù: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "%d ¹ø° Çà: %%patch -p ¿¡ Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "%d ¹ø° Çà: %%patch -p ¿¡ À߸øµÈ Àμö°¡ ÀÖ½À´Ï´Ù: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "ÆÐÄ¡°¡ ³Ê¹« ¸¹½À´Ï´Ù!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "%d ¹ø° Çà: %%patch¿¡ À߸øµÈ Àμö°¡ ÀÖ½À´Ï´Ù: %s\n" + +#, fuzzy +#~ msgid "debug option/argument processing" +#~ msgstr "Àμö 󸮰úÁ¤ (%d) µµÁß ³»ºÎ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù :-(\n" + +#~ msgid "skip %%license files" +#~ msgstr "%%license ÆÄÀÏÀ» »ý·«ÇÕ´Ï´Ù" + +#~ msgid "skip %%readme files" +#~ msgstr "%%readme ÆÄÀÏÀ» »ý·«ÇÕ´Ï´Ù" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "Àдµ¥ ½ÇÆÐÇÔ: %s (%d)\n" + +#~ msgid "rollback takes a time/date stamp argument" +#~ msgstr "·Ñ¹é(rollback)ÀÇ Àμö´Â ½Ã°£/³¯Â¥ ½ºÅÆÇÁ ÀÔ´Ï´Ù" + +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "·Ñ¹é(rollback)ÀÇ ÀμöÀÎ ½Ã°£/³¯Â¥ ½ºÅÆÇÁ°¡ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "ÇϺÎ-µð·ºÅ丮·Î À̸§ º¯°æ½Ã »èÁ¦µÈ ÆÐÅ°Áö ÆÄÀÏÀ» ÀúÀåÇÕ´Ï´Ù" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "ÀçÆÐŰ¡(repackaging)À¸·Î ÀÎÇØ »èÁ¦µÇ´Â ÆÐÅ°Áö ÆÄÀÏÀ» ÀúÀåÇÕ´Ï´Ù" + +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "»õ·Î ¼³Ä¡ »èÁ¦, ÀÌÀü ¼³Ä¡ À缳ġ, ÆÐÅ°Áö, <³¯Â¥> º¹±¸(back to date)" + +#~ msgid "" +#~ msgstr "<³¯Â¥>" + +#, fuzzy +#~ msgid "Unable to reload signature header\n" +#~ msgstr "¼­¸í(signature) Çì´õ¸¦ ´Ù½Ã Àоî¿Ã ¼ö ¾ø½À´Ï´Ù.\n" + +#, fuzzy +#~ msgid "Repackaging..." +#~ msgstr "Áغñ Áß..." + +#, fuzzy +#~ msgid "Upgrading..." +#~ msgstr "Áغñ Áß..." + +#, fuzzy +#~ msgid "Upgrading packages..." +#~ msgstr "ÆÐÅ°Áö¸¦ ¾÷±×·¹À̵å ÇÕ´Ï´Ù" + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "%s(À»)¸¦ º¹±¸ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "ÆÐÅ°ÁöÀÇ Çì´õ¸¦ Àд µµÁß ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== tsort °ü°è¸¦ ±â·Ï(record)ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== ÆÐÅ°Áö¸¦ tsort ÇÕ´Ï´Ù (¼ø¼­, #¼±ÀÓÀÚ, #ÈÄÀÓÀÚ, Æ®¸®, ±íÀÌ" +#~ "[depth])\n" + +#, fuzzy +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== ÈÄÀÓÀÚ¸¸ [successors only] (Ç¥Çö ¼ø)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== tsort¸¦ ÁøÇàÇÕ´Ï´Ù...\n" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "ÆÄÀÏ%5d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========= ÆÐÅ°Áö¿¡ µð·ºÅ丮°¡ Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ½:\n" + +#, fuzzy +#~ msgid "%10d %s\n" +#~ msgstr "%9d %s\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "%2$04oÀÇ Çã°¡±Ç(perms)À» °¡Áø %1$s µð·ºÅ丮°¡ »ý¼ºµÇ¾ú½À´Ï´Ù.\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "%2$04oÀÇ Çã°¡±Ç(perms)À» °¡Áø %1$s µð·ºÅ丮°¡ »ý¼ºµÇ¾ú½À´Ï´Ù.\n" + +#, fuzzy +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "%2$s À妽º¿¡ %1$d Ç׸ñµé(entries)À» Ãß°¡ÇÕ´Ï´Ù.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "libio(3) APIÀÇ »ç¿ëÀ» ÇØÁ¦ÇÕ´Ï´Ù" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: %s ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÕ´Ï´Ù (ÀÖÀ» °æ¿ì)\n" + +#, fuzzy +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s-%s-%s¿¡ %dÀÇ ÆÄÀÏÀÌ ÀÖ½À´Ï´Ù, Å×½ºÆ® = %d\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "ÆÐÅ°Áö ±â·Ï(record) ¹øÈ£: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#, fuzzy +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "%s ÆÐÅ°ÁöÀÇ ÇÊ¿ä»çÇ×(³»¿ª)ÀÌ ¸¸Á·ÇÏÁö ¾ÊÀ½: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "missingok Ç÷¡±×·Î ÀÎÇØ %s(À»)¸¦ »ý·«ÇÕ´Ï´Ù\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== Àç¹èÄ¡\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d Á¦¿Ü %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d Àç¹èÄ¡ %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "%s %s(À»)¸¦ Á¦¿Ü½Ãŵ´Ï´Ù\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "%s(À»)¸¦ %s(À¸)·Î Àç¹èÄ¡ ÇÕ´Ï´Ù\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "%s µð·ºÅ丮¸¦ %s(À¸)·Î Àç¹èÄ¡ ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "Adding goal: %s\n" +#~ msgstr "%s(À»)¸¦ ã´Â Áß: (%s »ç¿ë)...\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... %s(À¸)·Î\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "<¼Ò½º ÆÐÅ°Áö>" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "¹ÙÀ̳ʸ® ÆÐÅ°Áö¸¦ ¼³Ä¡ÇÕ´Ï´Ù\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "%dÀÇ ¼Ò½º¿Í %dÀÇ ¹ÙÀ̳ʸ® ÆÐÅ°Áö°¡ °Ë»öµÇ¾ú½À´Ï´Ù\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "¹ÙÀ̳ʸ® ÆÐÅ°Áö¸¦ ¼³Ä¡ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "Adding: %s\n" +#~ msgstr "Çà: %s\n" + +#, fuzzy +#~ msgid "Suggesting: %s\n" +#~ msgstr "%s(À»)¸¦ º¹±¸ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "ÆÄÀÏ%5d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "%s(À»)¸¦ %s(À¸)·Î Àç¹èÄ¡ ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "¿¹»ó(Expected) ¿ë·®: %12d = lead(%d)+sigs(%d)+pad(%d)+data(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " ½ÇÁ¦ ¿ë·®: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "¼­¸í: size(%d)+pad(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "PGP ¼­¸í ¿ë·®: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "%d ¹ÙÀÌÆ®ÀÇ PGP ¼­¸íÀ» ¾ò¾ú½À´Ï´Ù\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "GPG ¼­¸í ¿ë·®: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "%d ¹ÙÀÌÆ®ÀÇ GPG ¼­¸íÀ» ¾ò¾ú½À´Ï´Ù\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "%s µð·ºÅ丮¸¦ Á¦¿Ü½Ãŵ´Ï´Ù\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "¼Ò½º ÆÐÅ°Áö°¡ ÇÊ¿äÇϸç, ¹ÙÀ̳ʸ®°¡ °Ë»öµÇ¾ú½À´Ï´Ù\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "%s(¿Í)°ú ÀÏÄ¡ÇÏ´Â ÆÐÅ°Áö°¡ ¾øÀ½: %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "<¼Ò½º ÆÐÅ°Áö>" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "<¼Ò½º ÆÐÅ°Áö>" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "´ÝÈù db ȯ°æ %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "»èÁ¦µÈ db ȯ°æ %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "¿©´ÂÁß db ȯ°æ %s/%s %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "´ÝÈù db À妽º %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "¿©´ÂÁß db À妽º %s/%s %s ¸ðµå=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "Àá±ÝµÈ db À妽º %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "%2$s À妽º¿¡¼­ \"%1$s\"(À»)¸¦ »èÁ¦ÇÕ´Ï´Ù.\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "%2$s À妽º¿¡¼­ %1$d Ç׸ñµé(entries)À» »èÁ¦ÇÕ´Ï´Ù.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "%2$s À妽º¿¡ \"%1$s\"(À»)¸¦ Ãß°¡ÇÕ´Ï´Ù.\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "%2$s À妽º¿¡ %1$d Ç׸ñµé(entries)À» Ãß°¡ÇÕ´Ï´Ù.\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "db3¸¦ À籸ÃàÇÑ ÈÄ¿¡ %s(À»)¸¦ »èÁ¦ÇÕ´Ï´Ù.\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "%2$s¿¡ %1$s µ¥ÀÌÅͺ£À̽º¸¦ À籸Ãà ÇÕ´Ï´Ù\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "%s µð·ºÅ丮¸¦ »ý¼ºÇÕ´Ï´Ù\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "%s µð·ºÅ丮¸¦ »ý¼ºÇÔ: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "dbapi %d·Î ÀÌÀü µ¥ÀÌÅͺ£À̽º¸¦ ¿±´Ï´Ù\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "dbapi %d·Î »õ·Î¿î µ¥ÀÌÅͺ£À̽º¸¦ ¿±´Ï´Ù\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "%s µð·ºÅ丮¸¦ »èÁ¦ÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "´ÝÈù db ÆÄÀÏ %s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "¿©´ÂÁß db À妽º %s/%s %s ¸ðµå=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "RPM Àбâ(readRPM): %s(À»)¸¦ ÀнÀ´Ï´Ù: %s\n" + +#~ msgid "Unable to write final header\n" +#~ msgstr "¸¶Áö¸·(final) Çì´õ¸¦ ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "ÀÌ RPM ¹öÀüÀº ÆÐŰ¡ ¹öÀü '1' À» Áö¿øÇÏÁö ¾Ê½À´Ï´Ù\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "" +#~ "ÀÌ RPM ¹öÀüÀº ÁÖ ¹øÈ£(major number)°¡ <= 4 ÀÎ ÆÐŰ¡ ¸¸À» Áö¿øÇÕ´Ï´Ù\n" + +#, fuzzy +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: v1.0 RPMÀº ¼­¸íÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#, fuzzy +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: v2.0 RPMÀº Àç-¼­¸íÇÒ ¼ö ¾ø½À´Ï´Ù\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: À¯È¿ÇÑ ¼­¸íÀÌ ¾ø½À´Ï´Ù (v1.0 RPM)\n" diff --git a/po/ms.gmo b/po/ms.gmo new file mode 100644 index 0000000..4b03921 Binary files /dev/null and b/po/ms.gmo differ diff --git a/po/ms.po b/po/ms.po new file mode 100644 index 0000000..0bd08eb --- /dev/null +++ b/po/ms.po @@ -0,0 +1,3703 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: rpm\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2008-06-14 00:38+0800\n" +"Last-Translator: Sharuzzaman Ahmat Raslan \n" +"Language-Team: Malay \n" +"Language: ms\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, fuzzy, c-format +msgid "RPM version %s\n" +msgstr "Sejarah versi" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "Cipta dan ubahsuai arkib" + +#: cliutils.c:62 +#, fuzzy, c-format +msgid "exec failed\n" +msgstr "Sambungan Gagal" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "" + +#: rpmqv.c:125 +#, fuzzy +msgid "unexpected query flags" +msgstr "Senggara dan pertanyaan pangkalan data SQL" + +#: rpmqv.c:128 +#, fuzzy +msgid "unexpected query format" +msgstr "Format Objek Embed" + +#: rpmqv.c:131 +#, fuzzy +msgid "unexpected query source" +msgstr "Fail Sumber 'Ada' (nama perisian)" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "" + +#: rpmqv.c:153 +msgid "only installation and upgrading may be forced" +msgstr "" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" + +#: rpmqv.c:230 +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" + +#: rpmqv.c:234 +msgid "--test may only be specified during package installation and erasure" +msgstr "" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "" + +#: rpmbuild.c:164 rpmbuild.c:167 +#, fuzzy +msgid "" +msgstr "Pelihat Pakej" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "" + +#: rpmbuild.c:176 +#, fuzzy +msgid "debug file state machine" +msgstr "Berbalik fail kepada keadaan akhir disimpan?" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "" + +#: rpmbuild.c:194 rpmspec.c:34 +#, fuzzy +msgid "override target platform" +msgstr "Pilih sasaran tandabuku daripada senarai." + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" + +#: rpmbuild.c:231 +#, fuzzy +msgid "Failed build dependencies:\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "" + +#: rpmbuild.c:342 +#, fuzzy, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: rpmbuild.c:417 +#, fuzzy, c-format +msgid "failed to stat %s: %m\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: rpmbuild.c:421 +#, fuzzy, c-format +msgid "File %s is not a regular file.\n" +msgstr "Fail %s adalah jenis tidak disokong pada masa ini" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "" + +#: rpmbuild.c:494 +#, fuzzy, c-format +msgid "Building target platforms: %s\n" +msgstr "Pilih sasaran tandabuku daripada senarai." + +#: rpmbuild.c:502 +#, fuzzy, c-format +msgid "Building for target %s\n" +msgstr "&Cari Bantuan" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "memulakan pengkalan data" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "sahkan fail pengkalan data" + +#: rpmdb.c:33 +#, fuzzy +msgid "Database options:" +msgstr "Pilihan Bina" + +#: rpmkeys.c:23 +#, fuzzy +msgid "verify package signature(s)" +msgstr "Lekang Tandatangan OpenPGP" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Pilihan Bina" + +#: rpmkeys.c:61 rpmsign.c:144 +#, fuzzy +msgid "no arguments given" +msgstr "(tiada cadangan ejaan)" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "Pelihat Pakej" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "Fail Pakej RPM" + +#: rpmsign.c:35 +#, fuzzy +msgid "Signature options:" +msgstr "Pilihan Bina" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Tidak dapat melaksana %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "" + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "Ralat mengimport fail %s" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "Ralat mengimport fail %s" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Pilihan Bina" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "(tiada cadangan ejaan)" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "" + +#: build/build.c:170 +#, fuzzy, c-format +msgid "Executing(%s): %s\n" +msgstr "Ralat melaksanakan skrip %s" + +#: build/build.c:177 +#, fuzzy, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Sambungan Gagal" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "" + +#: build/build.c:292 +#, fuzzy +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "&Sembunyi kesalahan ejaan dalam dokumen" + +#: build/expression.c:216 +#, fuzzy +msgid "syntax error while parsing ==\n" +msgstr "Ralat sintaks API Skype" + +#: build/expression.c:246 +#, fuzzy +msgid "syntax error while parsing &&\n" +msgstr "Ralat sintaks API Skype" + +#: build/expression.c:255 +#, fuzzy +msgid "syntax error while parsing ||\n" +msgstr "Ralat sintaks API Skype" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "" + +#: build/expression.c:369 +#, fuzzy +msgid "- only on numbers\n" +msgstr "&Sembunyi nombor baris" + +#: build/expression.c:385 +#, fuzzy +msgid "! only on numbers\n" +msgstr "&Sembunyi nombor baris" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +#, fuzzy +msgid "types must match\n" +msgstr "(padan sebarang dari berikut)" + +#: build/expression.c:440 +#, fuzzy +msgid "* / not suported for strings\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/expression.c:491 +#, fuzzy +msgid "- not suported for strings\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "" + +#: build/expression.c:671 +#, fuzzy +msgid "syntax error in expression\n" +msgstr "Ralat sintaks API Skype" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, fuzzy, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Sedang Diguna" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, fuzzy, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Sedang Diguna" + +#: build/files.c:334 build/files.c:637 +#, fuzzy, c-format +msgid "Invalid %s token: %s\n" +msgstr "Nama path tidak sah." + +#: build/files.c:443 +#, fuzzy, c-format +msgid "Missing %s in %s %s\n" +msgstr "Sedang Diguna" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "" + +#: build/files.c:532 +#, fuzzy, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Mengabaikan rpm buruk: %s" + +#: build/files.c:541 +#, fuzzy, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Mengabaikan rpm buruk: %s" + +#: build/files.c:553 +#, fuzzy, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Mengabaikan rpm buruk: %s" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Nama path tidak sah." + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "" + +#: build/files.c:902 +#, fuzzy, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Fail Teks dengan Nila Dipisah Koma (CSV)" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, fuzzy, c-format +msgid "File listed twice: %s\n" +msgstr "Ralat mengimport fail %s" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "Sambungan Gagal" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Fail %s tidak dijumpai" + +#: build/files.c:1388 +#, fuzzy, c-format +msgid "File not found: %s\n" +msgstr "Fail %s tidak dijumpai" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "Makro %%%s gagal untuk mengembang\n" + +#: build/files.c:1663 +#, fuzzy, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Ralat mengimport fail %s" + +#: build/files.c:1688 +#, fuzzy, c-format +msgid "Glob not permitted: %s\n" +msgstr "Fail %s tidak dijumpai" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Fail pertolongan tidak dijumpai\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, fuzzy, c-format +msgid "File not found by glob: %s\n" +msgstr "Fail pertolongan tidak dijumpai\n" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/files.c:1757 +#, fuzzy, c-format +msgid "line: %s\n" +msgstr "Baris" + +#: build/files.c:2033 +#, fuzzy, c-format +msgid "Bad file: %s: %s\n" +msgstr "Extension &fail:" + +#: build/files.c:2055 build/parsePrep.c:33 +#, fuzzy, c-format +msgid "Bad owner/group: %s\n" +msgstr "Mengabaikan rpm buruk: %s" + +#: build/files.c:2095 +#, fuzzy, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Bahagian hadapan untuk penciptaan fail audio" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "&Fail Terbaru" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "" + +#: build/pack.c:86 +#, fuzzy, c-format +msgid "create archive failed: %s\n" +msgstr "Cipta dan ubahsuai arkib" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "Baris" + +#: build/pack.c:175 +#, fuzzy, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Tak dapat membuka fail %s." + +#: build/pack.c:228 +#, fuzzy, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/pack.c:235 +#, fuzzy, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/pack.c:249 +#, fuzzy, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/pack.c:256 +#, fuzzy, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/pack.c:271 +#, fuzzy, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/pack.c:297 +#, fuzzy, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Tak dapat membuka fail %s untuk menulis" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Fail %s adalah dari jenis tidak diketahui" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "" + +#: build/pack.c:425 +#, fuzzy +msgid "Bad CSA data\n" +msgstr "Data Program Rosak" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "" + +#: build/pack.c:499 +#, fuzzy, c-format +msgid "Could not open %s: %s\n" +msgstr "Tak dapat membuka fail %s." + +#: build/pack.c:511 +#, fuzzy, c-format +msgid "Unable to write package: %s\n" +msgstr "Tidak dapat menulis kepada fail %s" + +#: build/pack.c:527 +#, fuzzy, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "" + +#: build/pack.c:552 +#, fuzzy, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Tidak dapat menulis kepada fail %s" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "" + +#: build/pack.c:571 +#, fuzzy, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Tidak dapat menulis kepada fail %s" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "Ralat melaksanakan skrip %s" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Sambungan Gagal" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "" + +#: build/pack.c:740 +#, fuzzy, c-format +msgid "cannot create %s: %s\n" +msgstr "Hasilkan fax" + +#: build/parseBuildInstallClean.c:35 +#, fuzzy, c-format +msgid "line %d: second %s\n" +msgstr "Tahap kedua..." + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "" + +#: build/parseChangelog.c:139 +#, fuzzy, c-format +msgid "incomplete %%changelog entry\n" +msgstr "Pengepos Kemasukan Blog" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, fuzzy, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "Mengabaikan rpm buruk: %s" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, fuzzy, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "Amaran: tandabuku yang anda berikan [%s] tidak wujud." + +#: build/parseDescription.c:74 +#, fuzzy, c-format +msgid "line %d: Second description\n" +msgstr "Log penerangan corak" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "Ralat mengira nilai!" + +#: build/parsePreamble.c:155 +#, fuzzy, c-format +msgid "line %d: Bad number: %s\n" +msgstr "Ubah jumlah lajur" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "Ubah jumlah lajur" + +#: build/parsePreamble.c:224 +#, fuzzy, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "Ubah jumlah lajur" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "Stat pakej Mandriva Linux" + +#: build/parsePreamble.c:401 +#, fuzzy, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Pilihan Semasa adalah Kosong" + +#: build/parsePreamble.c:406 +#, fuzzy, c-format +msgid "Architecture is not included: %s\n" +msgstr "Fail %s adalah jenis tidak disokong pada masa ini" + +#: build/parsePreamble.c:411 +#, fuzzy, c-format +msgid "OS is excluded: %s\n" +msgstr "Pilihan Semasa adalah Kosong" + +#: build/parsePreamble.c:416 +#, fuzzy, c-format +msgid "OS is not included: %s\n" +msgstr "Fail %s adalah jenis tidak disokong pada masa ini" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, fuzzy, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "" + +#: build/parsePreamble.c:573 +#, fuzzy, c-format +msgid "Unknown icon type: %s\n" +msgstr "Fail %s adalah dari jenis tidak diketahui" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "Ubah jumlah lajur" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "Tahap kedua..." + +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "" + +#: build/parsePreamble.c:641 +#, fuzzy, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "&Sembunyi nombor baris" + +#: build/parsePreamble.c:649 +#, fuzzy, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "Cipta dokumen kosong" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "Ubah jumlah lajur" + +#: build/parsePreamble.c:773 +#, fuzzy, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "Mengabaikan rpm buruk: %s" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "mencapah selepas versi %d daripada %s" + +#: build/parsePreamble.c:972 +#, fuzzy, c-format +msgid "Bad package specification: %s\n" +msgstr "Fail Pakej RPM" + +#: build/parsePreamble.c:978 +#, fuzzy, c-format +msgid "Package already exists: %s\n" +msgstr "Fail telah wujud. Tulisganti fail '%s'?" + +#: build/parsePreamble.c:1009 +#, fuzzy, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "&Sembunyi nombor baris" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "Clip Art tidak boleh dimuatkan" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "Clip Art tidak boleh dimuatkan" + +#: build/parsePrep.c:28 +#, fuzzy, c-format +msgid "Bad source: %s: %s\n" +msgstr "Fail Sumber C++" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "Ubah jumlah lajur" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "Ubah jumlah lajur" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "" + +#: build/parsePrep.c:173 +#, fuzzy, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Muatturun fail BitTorrent" + +#: build/parsePrep.c:277 +#, fuzzy, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Ralat mengira nilai!" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "Ubah jumlah lajur" + +#: build/parsePrep.c:502 +#, fuzzy, c-format +msgid "line %d: second %%prep\n" +msgstr "&Sembunyi nombor baris" + +#: build/parseReqs.c:112 +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" + +#: build/parseReqs.c:137 +msgid "Versioned file name not permitted" +msgstr "" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "mencapah selepas versi %d daripada %s" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "Ubah jumlah lajur" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "Baris" + +#: build/parseScript.c:192 +#, fuzzy, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "&Sembunyi nombor baris" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, fuzzy, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "Ralat mengira nilai!" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "" + +#: build/parseScript.c:258 +#, fuzzy, c-format +msgid "line %d: Second %s\n" +msgstr "Tahap kedua..." + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "" + +#: build/parseSpec.c:201 +#, fuzzy, c-format +msgid "line %d: %s\n" +msgstr "Baris" + +#: build/parseSpec.c:245 +#, fuzzy, c-format +msgid "Unable to open %s: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Ralat mengira nilai!" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Ralat melaksanakan skrip %s" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Sedang Diguna" + +#: build/policies.c:267 +#, c-format +msgid "Too many arguments in line: %s\n" +msgstr "" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "&Fail Terbaru" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "Ubah jumlah lajur" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Tak dapat membuka fail %s." + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "Gagal" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "Tidak dapat menulis kepada fail %s" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, fuzzy, c-format +msgid "Failed to find %s:\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "" + +#: lib/cpio.c:195 +#, fuzzy, c-format +msgid "(error 0x%x)" +msgstr "Ralat KMail" + +#: lib/cpio.c:199 +#, fuzzy +msgid "Bad magic" +msgstr "Mengabaikan rpm buruk: %s" + +#: lib/cpio.c:200 +#, fuzzy +msgid "Bad/unreadable header" +msgstr "&Pengepala dan Footer" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "" + +#: lib/cpio.c:224 +#, fuzzy +msgid "Unknown file type" +msgstr "Fail %s adalah dari jenis tidak diketahui" + +#: lib/cpio.c:225 +#, fuzzy +msgid "Missing hard link(s)" +msgstr "Fail Pautan Tetingkap" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "Jumlahkan Lajur Jadual" + +#: lib/cpio.c:227 +#, fuzzy +msgid "Internal error" +msgstr "Ralat KMail" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +#, fuzzy +msgid " failed - " +msgstr "Gagal" + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +#, fuzzy +msgid "(not a number)" +msgstr "Jumlah Lajur" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +#, fuzzy +msgid "(not base64)" +msgstr "Tiada" + +#: lib/formats.c:352 +#, fuzzy +msgid "(invalid type)" +msgstr "Jenis per&nomboran:" + +#: lib/formats.c:376 lib/formats.c:462 +#, fuzzy +msgid "(not a blob)" +msgstr "Tiada" + +#: lib/formats.c:415 +#, fuzzy +msgid "(invalid xml type)" +msgstr "Jenis Senarai Semasa" + +#: lib/formats.c:485 +#, fuzzy +msgid "(not an OpenPGP signature)" +msgstr "Lekang Tandatangan OpenPGP" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +msgid "replaced" +msgstr "" + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "Tiada" + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "Tidak boleh kongsi" + +#: lib/formats.c:600 +#, fuzzy +msgid "wrong color" +msgstr "Warna latarbelakang:" + +#: lib/formats.c:603 +msgid "missing" +msgstr "" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "Scorched 3D" + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "Jumlah Lajur" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, fuzzy, c-format +msgid "%s saved as %s\n" +msgstr "Mempuny&ai label" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "" + +#: lib/fsm.c:1983 +#, fuzzy, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "Sambungan Gagal" + +#: lib/fsm.c:1997 +#, fuzzy, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "Sambungan Gagal" + +#: lib/fsm.c:2019 +#, fuzzy, c-format +msgid "%s created as %s\n" +msgstr "Mempuny&ai label" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +#, fuzzy +msgid "hdr magic: BAD\n" +msgstr "Mengabaikan rpm buruk: %s" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +#, fuzzy +msgid "hdr load: BAD\n" +msgstr "Mengabaikan rpm buruk: %s" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "Sambungan Gagal" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, fuzzy, c-format +msgid "%s: No signature available\n" +msgstr "Lekang Tandatangan OpenPGP" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr "Sambungan Gagal" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, fuzzy, c-format +msgid "%s: Fread failed: %s\n" +msgstr "Sambungan Gagal" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +#, fuzzy +msgid "" +msgstr "&Fail" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "" + +#: lib/poptALL.c:181 +#, fuzzy +msgid "send stdout to CMD" +msgstr "Hantar emel ke senarai" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "" + +#: lib/poptALL.c:214 +#, fuzzy +msgid "debug rpmio I/O" +msgstr "Mod nyahpepijat" + +#: lib/poptALL.c:292 +#, fuzzy, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "Format Senarai Kandungan" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "" + +#: lib/poptI.c:67 +#, fuzzy +msgid "relocations must contain a =" +msgstr "Nama item tidak boleh mengandungi '/'" + +#: lib/poptI.c:70 +#, fuzzy +msgid "relocations must have a / following the =" +msgstr "(padan sebarang dari berikut)" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +#, fuzzy +msgid "erase (uninstall) package" +msgstr "Fail Pakej RPM" + +#: lib/poptI.c:131 +#, fuzzy +msgid "+" +msgstr "Pelihat Pakej" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "" + +#: lib/poptI.c:140 +#, fuzzy +msgid "" +msgstr "Laluan" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "" + +#: lib/poptI.c:161 +#, fuzzy +msgid "install documentation" +msgstr "Dokumentasi Fedora" + +#: lib/poptI.c:164 +#, fuzzy +msgid "install package(s)" +msgstr "Pelihat Pakej" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "Terima gantian yang dicadang" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "" + +#: lib/poptI.c:234 +#, fuzzy +msgid "" +msgstr "Dir Temp: " + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "" + +#: lib/poptI.c:237 +#, fuzzy +msgid "=" +msgstr "&Tetingkap Baru" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "" + +#: lib/poptI.c:248 +#, fuzzy +msgid "upgrade package(s)" +msgstr "Pelihat Pakej" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "" + +#: lib/poptQV.c:69 +#, fuzzy +msgid "rpm checksig mode" +msgstr "Fail Pakej RPM" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "" + +#: lib/poptQV.c:83 +#, fuzzy +msgid "rpm query mode" +msgstr "Fail Pakej RPM" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "" + +#: lib/poptQV.c:91 +#, fuzzy +msgid "rpm verify mode" +msgstr "Fail Pakej RPM" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +#, fuzzy +msgid "list all configuration files" +msgstr "Semua Fail dan Folder" + +#: lib/poptQV.c:173 +#, fuzzy +msgid "list all documentation files" +msgstr "Semua Fail dan Folder" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "" + +#: lib/poptQV.c:184 +#, fuzzy, c-format +msgid "skip %%ghost files" +msgstr "Semua Fail Imej" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "sahkan fail pengkalan data" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "" + +#: lib/psm.c:212 +#, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "" + +#: lib/psm.c:848 +#, fuzzy, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "Arkib Tar diGzipkan" + +#: lib/psm.c:849 +#, fuzzy +msgid " on file " +msgstr "Extension &fail:" + +#: lib/psm.c:967 +#, fuzzy, c-format +msgid "%s failed on file %s: %s\n" +msgstr "Ralat mengimport fail %s" + +#: lib/psm.c:970 +#, fuzzy, c-format +msgid "%s failed: %s\n" +msgstr "Gagal" + +#: lib/query.c:115 +#, fuzzy, c-format +msgid "incorrect format: %s\n" +msgstr "&Format Jadual" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "Semua Fail Imej" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "" + +#: lib/query.c:166 +#, fuzzy +msgid "not installed " +msgstr "Tiada" + +#: lib/query.c:169 +#, fuzzy +msgid "net shared " +msgstr "Tidak boleh kongsi" + +#: lib/query.c:172 +#, fuzzy +msgid "wrong color " +msgstr "Warna latarbelakang:" + +#: lib/query.c:175 +#, fuzzy +msgid "(no state) " +msgstr "Tiada Fail" + +#: lib/query.c:178 +#, fuzzy, c-format +msgid "(unknown %3d) " +msgstr "Scorched 3D" + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "" + +#: lib/query.c:326 +#, fuzzy, c-format +msgid "no package triggers %s\n" +msgstr "Fail Pakej RPM" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, fuzzy, c-format +msgid "no package matches %s: %s\n" +msgstr "Tiada padanan dijumpai. :-(" + +#: lib/query.c:385 +#, fuzzy, c-format +msgid "no package requires %s\n" +msgstr "Fail Pakej RPM" + +#: lib/query.c:394 +#, fuzzy, c-format +msgid "no package provides %s\n" +msgstr "Fail Pakej RPM" + +#: lib/query.c:424 +#, fuzzy, c-format +msgid "file %s: %s\n" +msgstr "&Fail" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "" + +#: lib/query.c:438 +#, fuzzy, c-format +msgid "invalid package number: %s\n" +msgstr "Ubah jumlah lajur" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "Clip Art tidak boleh dimuatkan" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, fuzzy, c-format +msgid "package %s is not installed\n" +msgstr "Fail %s adalah jenis tidak disokong pada masa ini" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "Fail %s adalah dari jenis tidak diketahui" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "Sambungan Gagal" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: gagal membaca manifest: %s\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: lib/rpmchecksig.c:116 +#, fuzzy, c-format +msgid "%s: headerRead failed\n" +msgstr "Sambungan Gagal" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +#, fuzzy +msgid "NOT OK" +msgstr "Tiada" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +#, fuzzy +msgid " (MISSING KEYS:" +msgstr "Kekunci Multimedia" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +#, fuzzy +msgid " (UNTRUSTED KEYS:" +msgstr "Kekunci Multimedia" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, fuzzy, c-format +msgid "%s: open failed: %s\n" +msgstr "Sambungan Gagal" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Tidak dapat untuk menukar direktori root: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, c-format +msgid "%s: chroot directory not set\n" +msgstr "" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Tidak dapat untuk menukar direktori root: %m\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Tidak dapat untuk menukar direktori root: %m\n" + +#: lib/rpmds.c:403 +#, fuzzy +msgid "NO " +msgstr "Tidak" + +#: lib/rpmds.c:403 +#, fuzzy +msgid "YES" +msgstr "Ya" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +msgid "package scriptlets can be expanded at install time." +msgstr "" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, fuzzy, c-format +msgid "open of %s failed: %s\n" +msgstr "Sambungan Gagal" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "" + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "" + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +#, fuzzy +msgid "Failed dependencies:\n" +msgstr "Sambungan Gagal" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, fuzzy, c-format +msgid "%s cannot be installed\n" +msgstr "Ralat - %s tidak dijumpai" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "Fail %s adalah jenis tidak disokong pada masa ini" + +#: lib/rpminstall.c:563 +#, fuzzy, c-format +msgid "error reading from file %s\n" +msgstr "Selit MathML dari fail" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "Stat pakej Mandriva Linux" + +#: lib/rpminstall.c:708 +#, fuzzy, c-format +msgid "cannot open %s: %s\n" +msgstr "Buka Fail" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "Fail Pakej RPM" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "Jenis Senarai Semasa" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, fuzzy, c-format +msgid "read failed: %s (%d)\n" +msgstr "Sambungan Gagal" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "Fail Pakej RPM" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "&Tetapan Halaman" + +#: lib/rpmlock.c:106 +#, c-format +msgid "waiting for %s lock on %s\n" +msgstr "" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "Fail HTML untuk dibuka" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: lib/rpmprob.c:109 +#, fuzzy +msgid "different" +msgstr "berbeza" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:162 +#, fuzzy, c-format +msgid "%s is needed by %s%s" +msgstr "Pilihan Semasa adalah Kosong" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "" + +#: lib/rpmprob.c:167 +#, fuzzy, c-format +msgid "%s conflicts with %s%s" +msgstr "Dengan penghujung:" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "Pilihan Semasa adalah Kosong" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "" + +#: lib/rpmrc.c:186 +#, fuzzy, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "Ulangmula nombor pada:" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "Ulangmula nombor pada:" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:602 +#, fuzzy, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "Ulangmula nombor pada:" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Sistem tidak diketahui: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Sila hubungi %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Tidak dapat membuka %s untuk dibaca: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Tidak dapat untuk menukar direktori root: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Tak dapat membuka fail %s." + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Tak dapat membuka fail %s." + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "Tidak Diketahui" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "Tiada" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "'(' tambahan dalam label pakej: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: gagal membaca manifest: %s\n" + +#: lib/rpmts.c:1034 +#, fuzzy +msgid "transaction" +msgstr "&Tetapan Halaman" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "magik sigh: BURUK\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "muatan sigh: BURUK\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "Digest SHA1 pengepala:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Pengepala" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Tandatangan: TIDAK DIKETAHUI (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "Gagal" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Kebergantungan tidak dipenuhi untuk %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "hilang { selepas %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "hilang } selepas %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "format tag kosong" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "nama tag kosong" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "tag tidak diketahui" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] dijangka dipenghujung tatasusunan" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? dijangka dalam ungkapan" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "| dijangka dalam ungkapan" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "| dijangka selepas ungkapan ?" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| dijangka pada penghujung ungkapan" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec gagal: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp gagal: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2228 +#, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "" + +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "" + +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "gagal untuk mencipta direktori %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "gagal untuk membuang direktori %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "ralat db%d (%d) dari %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "ralat db%d (%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "terkongsi" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Fail HTML untuk dibuka" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Tak dapat membuka fail %s." + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Tidak dapat menulis kepada fail %s" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Gagal untuk menyambung ke pelayan" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "gagal untuk membuang direktori %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "Fail HTML untuk dibuka" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, c-format +msgid "%s terminated abnormally\n" +msgstr "" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "Makro %%%s gagal untuk mengembang\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "gagal untuk mencipta direktori %s: %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktif %d kosong %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(kosong)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(kosong)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Makro %%%s gagal untuk mengembang\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Pilihan tidak diketahui %c dalam %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "Selit MathML dari fail" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, fuzzy, c-format +msgid "File %s: %s\n" +msgstr "&Fail" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "gagal untuk mencipta direktori %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "skrip lua gagal: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "pautan lua gagal: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(tiada ralat)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "ralat maut:" + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "ralat" + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "" + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "%sV%d tandatangan DSA: %s, ID kekunci %s\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(tiada ralat)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Gagal untuk mencari seksyen: %s" + +#: sign/rpmgensig.c:88 +#, fuzzy, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "Sambungan Gagal" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "Sambungan Gagal" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "Pelaksanaan gpg gagal (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "Sambungan Gagal" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, fuzzy, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "Sambungan Gagal" + +#: sign/rpmgensig.c:563 +#, fuzzy, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "Sambungan Gagal" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "Sambungan Gagal" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: gagal membaca manifest: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "&Lompat ke hiperlink" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "pengkalan data sementara %s telah wujud\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Buffer sasaran melimpah\n" + +#, fuzzy +#~ msgid "cannot access file %s\n" +#~ msgstr "Ralat mengimport fail %s" + +#, fuzzy +#~ msgid "generate signature" +#~ msgstr "Editor Tandatangan" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "Gagal untuk mencari seksyen: %s" + +#, fuzzy +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "Buka Fail" + +#, fuzzy +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "Sambungan Gagal" + +#, fuzzy +#~ msgid "Generating signature: %d\n" +#~ msgstr "Editor Tandatangan" + +#, fuzzy +#~ msgid "%s failed\n" +#~ msgstr "Gagal" + +#, fuzzy +#~ msgid "(db files)" +#~ msgstr "&Fail Terbaru" + +#, fuzzy +#~ msgid "(added files)" +#~ msgstr "&Fail Terbaru" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "Terima gantian yang dicadang" + +#, fuzzy +#~ msgid "return dot and dot-dot" +#~ msgstr "&Pengepala dan Footer" + +#, fuzzy +#~ msgid "don't cross devices" +#~ msgstr "Tiada peranti dikesan !" + +#, fuzzy +#~ msgid "return whiteout information" +#~ msgstr "Maklumat Peranti Terlampir" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "Tidak dapat untuk menukar direktori root: %m\n" + +#, fuzzy +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "Gagal untuk mencari seksyen: %s" + +#, fuzzy +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "Gagal untuk mencari seksyen: %s" + +#~ msgid "cannot open %s index\n" +#~ msgstr "tidak dapat membuka indeks %s\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Tidak dapat untuk initDB %s (%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Tidak dapat membuka pengkalan data: %s\n" + +#~ msgid "Unknown system error" +#~ msgstr "Ralat sistem tidak diketahui" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Makro %%%.*s tidak dijumpai, melangkau\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Jenis data %d tidak disokong\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "Saiz Pengepala+Muatan:" + +#, fuzzy +#~ msgid "pgp not found: " +#~ msgstr "Fail %s tidak dijumpai" + +#, fuzzy +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "Tak dapat membuka fail %s." + +#~ msgid "pgp failed\n" +#~ msgstr "pgp gagal\n" + +#~ msgid "Unknown" +#~ msgstr "Tidak Diketahui" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s tandatangan: %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d tandatangan DSA: %s\n" + +#, fuzzy +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "Clip Art tidak boleh dimuatkan" + +#, fuzzy +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "Hasilkan fax" + +#, fuzzy +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "Tidak dapat menulis kepada fail %s" + +#, fuzzy +#~ msgid "can't query %s: %s\n" +#~ msgstr "Nama item tidak boleh mengandungi '/'" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "Sambungan Gagal" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " Penyelesaian dicadangkan:\n" + +#~ msgid "(index out of range)" +#~ msgstr "(indeks diluar julat)" + +#~ msgid "Bad server response" +#~ msgstr "Jawapan pelayan buruk" + +#~ msgid "Server I/O error" +#~ msgstr "Ralat I/O pelayan" + +#~ msgid "Server timeout" +#~ msgstr "Pelayan masatamat" + +#~ msgid "I/O error to local file" +#~ msgstr "Ralat I/O ke fail tempatan" + +#~ msgid "File not found on server" +#~ msgstr "Fail tidak dijumpai pada pelayan" + +#~ msgid "Abort in progress" +#~ msgstr "Pembatalan sedang dilaksanakan" diff --git a/po/nb.gmo b/po/nb.gmo new file mode 100644 index 0000000..8724579 Binary files /dev/null and b/po/nb.gmo differ diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 0000000..82bd0e3 --- /dev/null +++ b/po/nb.po @@ -0,0 +1,3891 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.0.3\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2001-06-27 12:24+0200\n" +"Last-Translator: Kjartan Maraas \n" +"Language-Team: Norwegian \n" +"Language: no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM versjon %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, fuzzy, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" +"Dette progeammet kan redistribueres fritt under betingelsene gitt i GNU GPL" + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "feil under oppretting av arkiv %s\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "kjøring feilet\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "argumentet er ikke en RPM-pakke\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "feil under lesing av header fra pakke\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "kan ikke gjenåpne \"payload\": %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "spør/verifiser pakke(r) i gruppe" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "én type spørring/verifisering kan utføres om gangen" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "uventede flagg for spørring" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "ventet spørringsformat" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "uventet spørringskilde" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "kun ett større modi kan spesifiseres" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "kun installasjon, oppgradering, rmsource og rmspec kan tvinges" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "filer kan kun omplasseres under pakkeinstallasjon" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate og --excludepath kan kun brukes ved installasjon av nye pakker" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix kan kun brukes ved installasjon av nye pakker" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "argumenter til --prefix må begynne med en /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) kan kun spesifiseres under pakkeinstallasjon" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent kan kun spesifiseres under pakkeinstallasjon" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"skript som slår av alternativer kan kun spesifiseres under pakkeinstallasjon " +"og sletting" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"alternativer som slår av utløsing kan kun spesifiseres under " +"pakkeinstallasjon, og sletting" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "--percent kan kun spesifiseres under pakkeinstallasjon" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "" +"alternativer som slår av utløsing kan kun spesifiseres under " +"pakkeinstallasjon, og sletting" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "" + +#: rpmqv.c:256 +#, fuzzy +msgid "no packages given for erase" +msgstr "ingen pakker oppgitt for installering" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "ingen pakker oppgitt for installering" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "ingen argumenter oppgitt for spørring" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "ingen argumenter oppgitt for verifisering" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "Feil under lesing av spec fil fra %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"bygg gjennom %prep (pakk ut kildekoden og legg til patcher) fra " + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "bygg kilde- og binærpakker fra " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "spør pakke som eier " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"bygg gjennom %prep (pakk ut kildekoden og legg til patcher) fra " + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "verifiser %files seksjon fra " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "bygg kilde- og binærpakker fra " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "bygg binær-pakke fra " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "fjern byggtreet når ferdig" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "" + +#: rpmbuild.c:180 +#, fuzzy +msgid "do not verify build dependencies" +msgstr "ikke verifiser pakkeavhengigheter" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "generer headere som er kompatible med (gamle) rpm[23] pakker" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "fjern kildekoden når ferdig" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "hopp rett til spesifisert steg (kun for c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" + +#: rpmbuild.c:231 +#, fuzzy +msgid "Failed build dependencies:\n" +msgstr "feil med avhengigheter under bygging:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Kunne ikke åpne spec fil %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Kunne ikke åpne tar-rør: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Feil under lesing av spec-fil fra %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Feil under endring av navn fra %s til %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "kunne ikke kjøre stat på %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Fil %s er ikke en vanlig fil.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Fil %s ser ikke ut til å være en spec-fil.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Bygger målplattformene: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Bygger for mål %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "initier database" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "gjenoppbygg database inverterte lister fra installerte pakkers headere" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "" + +#: rpmkeys.c:23 +#, fuzzy +msgid "verify package signature(s)" +msgstr "verifiser pakkesignatur" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +msgid "Keyring options:" +msgstr "" + +#: rpmkeys.c:61 rpmsign.c:144 +#, fuzzy +msgid "no arguments given" +msgstr "ingen argumenter oppgitt for spørring" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "installer pakke" + +#: rpmsign.c:27 +#, fuzzy +msgid "sign package(s) (identical to --addsign)" +msgstr "signer en pakke (forkast nåværende signatur)" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "verifiser pakkesignatur" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, fuzzy, c-format +msgid "Could not exec %s: %s\n" +msgstr "Kunne ikke kjøre %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Skriv inn passord: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Passord er ok.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Passordsjekk feilet\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "spørring på spec-fil" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "spørring på spec-fil" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "" + +#: rpmspec.c:45 +msgid "Spec options:" +msgstr "" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "ingen argumenter oppgitt for spørring" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Kunne ikke åpne spec fil %s: %s\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Kjører(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Kjøring av %s feilet (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Ugyldig sluttstatus fra %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"RPM-feil under bygging:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "syntaksfeil under lesing av ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "syntaksfeil under lesing av &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "syntaksfeil under lesing av ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "feil under lesing av uttrykk\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "ubalansert (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- kun på tall\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! kun på tall\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "typene må være like\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / ikke støttet for strenger\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- ikke støttet for strenger\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& og || ikke støttet for strenger\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "syntaksfeil i uttrykk\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Mangler '(' i %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Mangler ')' i %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Ugyldig %s-tegn: %s\n" + +#: build/files.c:443 +#, fuzzy, c-format +msgid "Missing %s in %s %s\n" +msgstr "Mangler '(' i %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Ugyldig %s-tegn: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "To filer på én linje: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Filen må begynne med \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Kan ikke blande spesiell %%doc med andre skjema: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Fil listet to ganger: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s unlink av %s feilet: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Symbolsk lenke peker til BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Fil ikke funnet: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Fil ikke funnet: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, fuzzy, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: readLead feilet\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "%s feilet\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "" + +#: build/files.c:1688 +#, fuzzy, c-format +msgid "Glob not permitted: %s\n" +msgstr "linje %d: Filnavn ikke tillatt: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Fil ikke funnet: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Kunne ikke åpne spec fil %s: %s\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "Installerer %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Ugyldig fil %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Ugyldig eier/gruppe: %s\n" + +#: build/files.c:2095 +#, fuzzy, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "ingen pakke utløser %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "kan ikke aksessere fil %s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "feil under oppretting av arkiv %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy skriving feilet: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy: feil under lesing: %s\n" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "Installerer %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Kunne ikke åpne PreIn-fil: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Kunne ikke åpne PreUn-fil: %s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Kunne ikke åpne PreIn-fil: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Kunne ikke åpne PostIn-fil: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Kunne ikke åpne PostUn-fil: %s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Kunne ikke åpne PostIn-fil: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Kunne ikke åpne VerifyScript-fil: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Ukjent ikontype: %s\n" + +#: build/pack.c:395 +#, fuzzy +msgid "Unable to create immutable header region.\n" +msgstr "Kunne ikke åpne spec fil %s: %s\n" + +#: build/pack.c:415 +#, fuzzy +msgid "Unable to write temp header\n" +msgstr "Kunne ikke skrive header til %s: %s\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Ugyldige CSA-data\n" + +#: build/pack.c:491 +#, fuzzy +msgid "Unable to reload signature header.\n" +msgstr "Kunne ikke åpne spec fil %s: %s\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Kunne ikke åpne %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Kunne ikke skrive pakke: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Kunne ikke åpne sigmål %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Kunne ikke åpne spec fil %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Kunne ikke skrive header til %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Kunne ikke lese \"payload\" fra %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Kunne ikke skrive \"payload\" til %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Skrev: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "Kjører(%s): %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Kjøring av %s feilet (%s): %s\n" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Passordsjekk feilet\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "linje %d: Ugyldig flagg %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "linje %d: Feil under lesing av %%filer: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "linje %d: Feil under lesing av %%filer: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "linje %d: Ugyldig nummer: %s\n" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "linje %d: Ugyldig no%s nummer: %d\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "linje %d: Ugyldig %s-nummer: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "\"%s\" spesifiserer flere pakker\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "%s-felt må være tilstede i pakken: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Kunne ikke åpne ikon %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Kan ikke lese ikon %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Ukjent ikontype: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "linje %d: Tagg tar kun et enkelt tegn: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "linje %d: Ugyldig tegn '-' i %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "linje %d: Ugyldig tegn '-' i %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "linje %d: Ugyldig tegn '-' i %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "linje %d: Feilutformet tagg: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "linje %d: Tom tagg: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "linje %d: Prefiks må ikke slutte på \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "linje %d: Docdir må begynne med '/': %s\n" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "linje %d: Epoch/serienummer må være et tall: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "linje %d: Ugyldig %s: kvalifikatorer: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "linje %d: Ugyldig BuildArchitecture format: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Intern feil: Ugyldig tag %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "linje %d: Versjon kreves: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Ugyldig pakkespesifikasjon: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Pakke eksisterer allerede: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "linje %d: Ukjent tagg: %s\n" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "BuildRoot kan ikke være \"/\": %s\n" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "BuildRoot kan ikke være \"/\": %s\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "kunne ikke opprette %s: %s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "Ingen patch-nummer %d\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "Ingen kildenummer %d\n" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "kildepakke inneholder ikke en .spec-fil\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Kunne ikke laste ned ikke-kilde %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Feil under lesing av %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "linje %d: Ugyldig argument til %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "linje %d: Ugyldig %%setup flagg %s: %s\n" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "ugyldig pakkenummer: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "linje %d: %%prep for andre gang\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"linje %d: Avhengighetstegn må begynne med alfanumerisk tegn, '_' eller '/': " +"%s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "linje %d: Filnavn med versjon ikke tillatt: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "linje %d: Versjon kreves: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "linje %d: Ugyldig nummer: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "linje %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "linje %d: triggere må ha --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "linje %d: Feil under lesing av %s: %s\n" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "linje %d: skriptprogram må begynne med '/': %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "linje %d: skriptprogram må begynne med '/': %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "linje %d: Andre %s\n" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "linje %d: Feilutformet tagg: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "linje %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Kan ikke åpne %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "Åpen %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean returnerer %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: %%else uten %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: %%endif uten %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "ugyldig %%include utsagn\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Ingen kompatible arkitekturer funnet for bygging\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Pakken har ingen %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Feil under lesing av spec-fil fra %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Feil under lesing av spec-fil fra %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Feil under lesing av spec-fil fra %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Kunne ikke åpne tar-rør: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Feil under lesing av %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Kjører(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Mangler '(' i %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "For mange argumenter i datalinje ved %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "kan ikke aksessere fil %s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "linje %d: Ugyldig nummer: %s\n" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Kunne ikke kjøre %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s feilet\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "kunne ikke skrive alle data til %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "feil under åpning av %s: %s\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "%s rmdir av %s feilet: %s\n" + +#: build/rpmfc.c:999 +#, fuzzy, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "%s rmdir av %s feilet: %s\n" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "Fil %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Klarte ikke å finne %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(feil 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Ugyldig magi" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Ugyldig/ulesbar header" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "For stor header" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Ukjent filtype" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Mangler hard(e) lenke(er)" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "MD5-sum stemmer ikke" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Intern feil" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " feilet - " + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "pakke %s er allerede installert" + +#: lib/depends.c:245 +#, fuzzy, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "pakke %s er allerede installert" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "" + +#: lib/formats.c:485 +#, fuzzy +msgid "(not an OpenPGP signature)" +msgstr "hopp over PGP-signaturer" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "erstattet " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "ikke installert" + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "delt via nett " + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "mangler %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(ukjent %3d) " + +#: lib/formats.c:645 +msgid "(not a string)" +msgstr "" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s lagret som %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s rmdir av %s feilet: Katalogen er ikke tom\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir av %s feilet: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s unlink av %s feilet: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s opprettet som %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature feilet\n" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Ingen signatur tilgjengelig\n" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: readLead feilet\n" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread feilet: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +#, fuzzy +msgid "print macro expansion of EXPR" +msgstr "skriv ut makroutvidelsen av +" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +#, fuzzy +msgid "read instead of default file(s)" +msgstr "les i stedet for standard makrofil(er)" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +#, fuzzy +msgid "don't verify package digest(s)" +msgstr "ikke verifiser pakkeavhengigheter" + +#: lib/poptALL.c:176 +#, fuzzy +msgid "don't verify database header(s) when retrieved" +msgstr "ikke verifiser pakkearkitektur" + +#: lib/poptALL.c:178 +#, fuzzy +msgid "don't verify package signature(s)" +msgstr "verifiser pakkesignatur" + +#: lib/poptALL.c:181 +#, fuzzy +msgid "send stdout to CMD" +msgstr "send stdout til " + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +#, fuzzy +msgid "use ROOT as top level directory" +msgstr "bruk som toppnivåkatalog" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "vis kjente tagger for spørring" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "vis endelig rpmrc og makrokonfigurasjon" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "gi mindre detaljert info" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "gi mer detaljert info" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "skriv ut hvilken versjon av rpm som brukes" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "feilsøk rpmio I/U" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "eksluderingssti må begynne med en /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "relokasjoner må begynne med en /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "relokasjoner må inneholde et =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "relokasjoner må ha et / etter =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "installer alle filer, selv konfigurasjoner som ellers kan hoppes over" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"fjern alle pakker som er lik (normalt vil en feil genereres hvis " +" spesifiserer flere pakker)" + +#: lib/poptI.c:123 +#, fuzzy +msgid "relocate files in non-relocatable package" +msgstr "omplasser filer i ikke-omplasserbar pakke" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "slett (avinstaller) pakke" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +#, fuzzy +msgid "do not install configuration files" +msgstr "ikke installer dokumentasjon" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "ikke installer dokumentasjon" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "hopp over filer med innledende komponent " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "forkortning for --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "oppgrader pakke(r) hvis allerede installert" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "skriv ut skigarder etter som pakken installeres (nyttig med -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "ikke verifiser pakkearkitektur" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "ikke verifiser operativsystem for pakken" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "ikke sjekk diskplass før installasjon" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "installer dokumentasjon" + +#: lib/poptI.c:164 +#, fuzzy +msgid "install package(s)" +msgstr "installer pakke" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "oppdater databasen, men ikke modifiser filsystemet" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "ikke verifiser pakkeavhengigheter" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "ikke verifiser størrelse på filer" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "ikke verifiser størrelse på filer" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "ikke installer dokumentasjon" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "ikke ordne pakkeinstallasjon for å tilfredsstille avhengigheter" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "ikke kjør pakkespesifikke skriptlet" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "ikke kjør noen %%pre skriptlet (hvis noen)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "ikke kjør %%post skriptlet (hvis noen)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "ikke kjør %%preun skriptlet (hvis noen)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "ikke kjør %%postun skriptlet (hvis noen)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "Ikke kjør noen skriptlets som utløses av denne pakken" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "ikke kjør %%triggerprein skriptlets" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "ikke kjør %%triggerin skriptlets" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "ikke kjør %%triggerun skriplets" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "ikke kjør %%triggerpostun skriptlets" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"oppgrader til en gammel versjon av pakken (--force ved oppgraderinger gjør " +"dette automatisk)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "skriv ut prosentvis fremgang etter som pakken installeres" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "omplasser pakken til , hvis den er omplasserbar" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "omplasser filer fra sti til " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "reinstaller selv om pakken allerede er installert" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "ikke installer, men si ifra om det ville virke eller ikke" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "oppgrader pakke(r)" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "spør/verifiser alle pakker" + +#: lib/poptQV.c:69 +#, fuzzy +msgid "rpm checksig mode" +msgstr "rpm spørremodus" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "spør/verifiser pakke(r) som eier fil" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "spør/verifiser pakke(r) i gruppe" + +#: lib/poptQV.c:75 +#, fuzzy +msgid "query/verify a package file" +msgstr "spør/verifiser alle pakker" + +#: lib/poptQV.c:78 +#, fuzzy +msgid "query/verify package(s) with package identifier" +msgstr "spør/verifiser pakke(r) som eier fil" + +#: lib/poptQV.c:80 +#, fuzzy +msgid "query/verify package(s) with header identifier" +msgstr "spør/verifiser pakke(r) som eier fil" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "rpm spørremodus" + +#: lib/poptQV.c:85 +#, fuzzy +msgid "query/verify a header instance" +msgstr "spør/verifiser pakke(r) som eier fil" + +#: lib/poptQV.c:87 +#, fuzzy +msgid "query/verify package(s) from install transaction" +msgstr "spør/verifiser pakke(r) i gruppe" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "spør pakker utløst av " + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "spør etter etter pakker som trenger funksjonalitet" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "spør etter pakker som tilbyr funksjonalitet" + +#: lib/poptQV.c:98 +#, fuzzy +msgid "do not glob arguments" +msgstr "ingen argumenter oppgitt for spørring" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "ikke verifiser størrelse på filer" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "ikke verifiser sti til symbolske lenker for filer" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "ikke verifiser eier av filer" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "ikke verifiser gruppe for filer" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "ikke verifisert endringsdato for filer" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "ikke verifiser modus for filer" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "ikke verifiser størrelse på filer" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "ikke verifiser filer i pakke" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "ikke verifiser filer i pakke" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "ikke verifiser pakkeavhengigheter" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +#, fuzzy +msgid "don't execute verify script(s)" +msgstr "ikke kjør %verifyscript (hvis noen)" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "manglende arkitektur for %s ved %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "kildepakke forventet, binær funnet\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "kildepakke inneholder ikke en .spec-fil\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "" + +#: lib/psm.c:849 +msgid " on file " +msgstr "" + +#: lib/psm.c:967 +#, fuzzy, c-format +msgid "%s failed on file %s: %s\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: lib/psm.c:970 +#, fuzzy, c-format +msgid "%s failed: %s\n" +msgstr "%s feilet\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "ukorrekt format: %s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(inneholder ingen filer)" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "erstattet " + +#: lib/query.c:166 +msgid "not installed " +msgstr "ikke installert" + +#: lib/query.c:169 +msgid "net shared " +msgstr "delt via nett " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(ingen tilstand)" + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(ukjent %3d) " + +#: lib/query.c:198 +#, fuzzy +msgid "package has not file owner/group lists\n" +msgstr "pakken har verken fileier eller id-lister\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "pakken har verken fileier eller id-lister\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "gruppe %s inneholder ingen pakker\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "ingen pakke utløser %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, fuzzy, c-format +msgid "malformed %s: %s\n" +msgstr "kunne ikke opprette %s: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, fuzzy, c-format +msgid "no package matches %s: %s\n" +msgstr "ingen pakke utløser %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "ingen pakke krever %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "ingen pakke gir %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "fil %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "filen %s eies ikke av noen pakke\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "ugyldig pakkenummer: %s\n" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "pakke %s er ikke installert\n" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "linje %d: Ukjent tagg: %s\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: readLead feilet\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: readLead feilet\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: readLead feilet\n" + +#: lib/rpmchecksig.c:116 +#, fuzzy, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: readLead feilet\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "IKKE OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr "" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr "" + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr "" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr "" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: åpne feilet: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "kunne ikke opprette %s: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s rmdir av %s feilet: Katalogen er ikke tom\n" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "kunne ikke opprette %s: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "kunne ikke opprette %s: %s\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NEI" + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "JA" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +#, fuzzy +msgid "internal support for lua scripts." +msgstr "- ikke støttet for strenger\n" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "pakke %s er allerede installert" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "feil under åpning av %s: %s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "ingen pakke utløser %s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Forbereder..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Forbereder pakker for installasjon..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +#, fuzzy +msgid "Failed dependencies:\n" +msgstr "feilede avhengigheter:\n" + +#: lib/rpminstall.c:305 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "ingen pakke utløser %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Henter %s\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "hopper over %s - overføring feilet - %s\n" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "pakke %s kan ikke relokeres\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "feil under lesing fra fil %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "fil %s trenger en nyere versjon av RPM\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" spesifiserer flere pakker\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "kan ikke åpne %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Installerer %s\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "argumentet er ikke en RPM-pakke\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s: Ingen signatur tilgjengelig\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "lesing feilet: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "argumentet er ikke en RPM-pakke\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "kan ikke opprette %%%s %s\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "relokerer %s til %s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Feil under endring av navn fra %s til %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Feil under endring av navn fra %s til %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "" + +#: lib/rpmprob.c:115 +#, fuzzy, c-format +msgid "package %s is intended for a %s architecture" +msgstr "pakke %s er for en annen arkitektur" + +#: lib/rpmprob.c:120 +#, fuzzy, c-format +msgid "package %s is intended for a %s operating system" +msgstr "pakke %s er for et annet operativsystem" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "pakke %s er allerede installert" + +#: lib/rpmprob.c:128 +#, fuzzy, c-format +msgid "path %s in package %s is not relocatable" +msgstr "sti %s i pakke %s kan ikke relokeres" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:162 +#, fuzzy, c-format +msgid "%s is needed by %s%s" +msgstr " kreves av %s-%s-%s\n" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +#, fuzzy +msgid "(installed) " +msgstr "ikke installert" + +#: lib/rpmprob.c:167 +#, fuzzy, c-format +msgid "%s conflicts with %s%s" +msgstr " er i konflikt med %s-%s-%s\n" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr " kreves av %s-%s-%s\n" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "mangler andre ':' ved %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "manglende navn på arkitektur ved %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Ukomplett datalinje ved %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "For mange argumenter i datalinje ved %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Ukomplett standardlinje ved %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "mangler ':' (fant 0x%02X) ved %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "manglende argumentfor %s ved %s:%d\n" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "kan ikke åpne %s ved %s:%d %s\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "manglende arkitektur for %s ved %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "ugyldig flagg '%s' ved %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Kunne ikke åpne spec fil %s: %s\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "kunne ikke opprette %s: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s: Fwrite feilet: %s\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s: Fwrite feilet: %s\n" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s: Fwrite feilet: %s\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "Ukjent filtype" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "ikke installert" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "kan ikke åpne pakkedatabase i %s\n" + +#: lib/rpmts.c:193 +#, fuzzy, c-format +msgid "extra '(' in package label: %s\n" +msgstr "ugyldig pakkenummer: %s\n" + +#: lib/rpmts.c:211 +#, fuzzy, c-format +msgid "missing '(' in package label: %s\n" +msgstr "Mangler '(' i %s %s\n" + +#: lib/rpmts.c:219 +#, fuzzy, c-format +msgid "missing ')' in package label: %s\n" +msgstr "ugyldig pakkenummer: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: readLead feilet\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "ikke verifiser header SHA1 digest" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s feilet\n" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "mangler %s" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "feilede avhengigheter:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "mangler { etter %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "mangler } etter %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "" + +#: lib/headerfmt.c:393 +#, fuzzy +msgid "unknown tag" +msgstr "linje %d: Ukjent tagg: %s\n" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "" + +#: lib/headerfmt.c:425 +#, fuzzy +msgid "unexpected ]" +msgstr "uventede flagg for spørring" + +#: lib/headerfmt.c:435 +#, fuzzy +msgid "unexpected }" +msgstr "uventede flagg for spørring" + +#: lib/headerfmt.c:491 +#, fuzzy +msgid "? expected in expression" +msgstr "feil under lesing av uttrykk\n" + +#: lib/headerfmt.c:498 +#, fuzzy +msgid "{ expected after ? in expression" +msgstr "feil under lesing av uttrykk\n" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +#, fuzzy +msgid "} expected in expression" +msgstr "feil under lesing av uttrykk\n" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "" + +#: lib/headerfmt.c:536 +#, fuzzy +msgid "{ expected after : in expression" +msgstr "feil under lesing av uttrykk\n" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "kan ikke åpne %s-indeks ved bruk av db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, fuzzy, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "feil(%d) under lagring av post %s til %s\n" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: Fseek feilet: %s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: åpne feilet: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "feil(%d) under fjerning av post %s fra %s\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "feil(%d) under lagring av post %s til %s\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "feil(%d) under lagring av post %s til %s\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "" + +#: lib/rpmdb.c:2434 +#, fuzzy, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "feil(%d) under fjerning av post %s fra %s\n" + +#: lib/rpmdb.c:2453 +#, fuzzy, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "feil(%d) under lagring av post %s til %s\n" + +#: lib/rpmdb.c:2463 +#, fuzzy, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "feil(%d) under fjerning av post %s fra %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "feil(%d) under lagring av post %s til %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "kunne ikke opprette %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Feil under lesing av spec-fil fra %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Feil under lesing av spec-fil fra %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "kunne ikke opprette %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Feil under lesing av spec-fil fra %s\n" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "Feil under endring av navn fra %s til %s: %m\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Feil under endring av navn fra %s til %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "kunne ikke opprette %s: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "klarte ikke å åpne %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "kunne ikke opprette %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, c-format +msgid "%s terminated abnormally\n" +msgstr "" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "%s feilet\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Feil under lesing av spec-fil fra %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "feil under oppretting av midlertidig fil %s\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Fil %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Fil %s er mindre enn %u bytes\n" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "kunne ikke opprette %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, fuzzy, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "- ikke støttet for strenger\n" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "- ikke støttet for strenger\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: Fwrite feilet: %s\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "ugyldig pakkenummer: %s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: Fseek feilet: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "fatal feil: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "feil: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "advarsel: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "hopp over MD5-signaturer" + +#: rpmio/rpmpgp.c:1369 +msgid "(none)" +msgstr "" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Feil under lesing av spec-fil fra %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite feilet: %s\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fseek feilet: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "kjøring feilet\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "makeTempFile feilet\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead feilet: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature feilet: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "feil under åpning av %s: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: lesing av manifest feilet: %s\n" + +#: tools/rpmgraph.c:220 +#, fuzzy +msgid "don't verify header+payload signature" +msgstr "verifiser pakkesignatur" + +#, fuzzy +#~ msgid "add suggested packages to transaction" +#~ msgstr "spør/verifiser pakke(r) i gruppe" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Kunne ikke kjøre %s: %s\n" + +#, fuzzy +#~ msgid "detect file conflicts between packages" +#~ msgstr "omplasser filer i ikke-omplasserbar pakke" + +#, fuzzy +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "spør/verifiser pakke(r) som eier fil" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Overflyt i målbuffer\n" + +#~ msgid "no files to sign\n" +#~ msgstr "ingen filer å signere\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "kan ikke aksessere fil %s\n" + +#, fuzzy +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "ikke verifiser header SHA1 digest" + +#, fuzzy +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "signer en pakke (forkast nåværende signatur)" + +#~ msgid "generate signature" +#~ msgstr "generer signatur" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIDSJEKK feil: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "generer headere som er kompatible med rpm4 pakker" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Intern feil i argumentprosesseringen (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: readLead feilet\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek feilet: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s er ikke en RPM-pakke\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: leser header fra %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Genererer signatur: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "generer PGP/GPG signatur" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "ingen pakkefiler oppgitt for ombygging" + +#~ msgid "no spec files given for build" +#~ msgstr "ingen spec-fil oppgitt for bygging" + +#~ msgid "no tar files given for build" +#~ msgstr "ingen tar-fil oppgitt for bygging" + +#~ msgid "%s failed\n" +#~ msgstr "%s feilet\n" + +#~ msgid "url port must be a number\n" +#~ msgstr "url-port må være et tall\n" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "spør/verifiser pakke(r) i gruppe" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "spør/verifiser pakke(r) i gruppe" + +#, fuzzy +#~ msgid "do not read headers" +#~ msgstr "Ugyldig/ulesbar header" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "kunne ikke opprette %s: %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() feilet å returnere størrelse: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "feil under kjøring av stat på %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "fil %s er på en ukjent enhet\n" + +#~ msgid "cannot open %s index\n" +#~ msgstr "kan ikke åpne %s indeks\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Kan ikke åpne %s: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Kan ikke åpne %s: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Kunne ikke åpne spec fil %s: %s\n" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: readLead feilet\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Datatype %d ikke støttet\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "For stor header" + +#~ msgid "pgp not found: " +#~ msgstr "pgp ikke funnet: " + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "hopp over MD5-signaturer" + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "hopp over MD5-signaturer" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot kan ikke være \"/\": %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Spec-fil kan ikke bruke BuildRoot\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "kan ikke skrive til %%%s %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "kan ikke spørre på %s: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "kjøring feilet\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "feilsøk URL-cache håndtering" + +#, fuzzy +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "kan ikke åpne database i %s\n" + +#, fuzzy +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: åpne feilet: %s\n" + +#, fuzzy +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: readLead feilet\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "Kan ikke utvide %s\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s rmdir av %s feilet: %s\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "linje %d: Trenger argument til %%patch -b: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "linje %d: Trenger argument til %%patch -z: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "linje %d: Ugyldig argument til %%patch -p: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "linje %d: Trenger argument til %%patch -p: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "linje %d: Ugyldig argument til %%patch -p: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "For mange patcher!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "linje %d: Ugyldig argument til %%patch: %s\n" + +#, fuzzy +#~ msgid "debug option/argument processing" +#~ msgstr "Intern feil i argumentprosesseringen (%d) :-(\n" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "lesing feilet: %s (%d)\n" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "lagre slettede pakkefiler ved å endre navn til underkatalog" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "lagre slettede pakkefiler ved ompakking" + +#, fuzzy +#~ msgid "" +#~ msgstr "" + +#, fuzzy +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Kunne ikke åpne spec fil %s: %s\n" + +#, fuzzy +#~ msgid "Repackaging..." +#~ msgstr "Forbereder..." + +#, fuzzy +#~ msgid "Upgrading..." +#~ msgstr "Forbereder..." + +#, fuzzy +#~ msgid "Upgrading packages..." +#~ msgstr "oppgrader pakke(r)" + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "Henter %s\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "feil under lesing av header fra pakke\n" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "Fil %s: %s\n" + +#, fuzzy +#~ msgid "%10d %s\n" +#~ msgstr "%9d %s\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "slå av bruk av libio(3) API" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: kjører %s-skript (hvis noen)\n" + +#, fuzzy +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "pakke %s er i konflikt: %s\n" + +#, fuzzy +#~ msgid "%5d exclude %s\n" +#~ msgstr "eksluderer %s %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d omplasser %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "eksluderer %s %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "relokerer katalog %s til %s\n" + +#, fuzzy +#~ msgid "Adding goal: %s\n" +#~ msgstr "Fil %s: %s\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... som %s\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "installerer binærpakker\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "fant %d kilde- og %d binærpakker\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "installerer binærpakker\n" + +#, fuzzy +#~ msgid "Adding: %s\n" +#~ msgstr "Installerer %s\n" + +#, fuzzy +#~ msgid "Suggesting: %s\n" +#~ msgstr "Henter %s\n" + +#, fuzzy +#~ msgid "mounted filesystems:\n" +#~ msgstr "henter liste over monterte filsystemer\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "Fil %s: %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "relokerer %s til %s\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "ekskluderer katalog %s\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "kildepakke forventet, binær funnet\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "ingen pakke utløser %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "Unable to write final header\n" +#~ msgstr "Kunne ikke skrive header til %s: %s\n" + +#, fuzzy +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: kan ikke signere v1.0 RPM\n" + +#, fuzzy +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: Kan ikke signere v2.0 RPM på nytt\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: Ingen signatur tilgjengelig (v1.0 RPM)\n" diff --git a/po/nl.gmo b/po/nl.gmo new file mode 100644 index 0000000..9469052 Binary files /dev/null and b/po/nl.gmo differ diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..0b3b026 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,3476 @@ +# Dutch translation of rpm. +# Copyright (C) 2008 Free Software Foundation, Inc. +# This file is distributed under the same license as the rpm package. +# +# Peter van Egdom , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: rpm\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2008-09-03 22:17+0200\n" +"Last-Translator: Peter van Egdom \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM versie %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Copyright (C) 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "" + +#: rpmqv.c:153 +msgid "only installation and upgrading may be forced" +msgstr "" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" + +#: rpmqv.c:230 +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" + +#: rpmqv.c:234 +msgid "--test may only be specified during package installation and erasure" +msgstr "" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "" + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Database opties:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Database opties:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "" + +#: rpmsign.c:25 +msgid "sign package(s)" +msgstr "" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "" + +#: rpmsign.c:35 +#, fuzzy +msgid "Signature options:" +msgstr "Database opties:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "" + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "" + +#: rpmspec.c:26 +msgid "parse spec file(s) to stdout" +msgstr "" + +#: rpmspec.c:28 +msgid "query spec file(s)" +msgstr "" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Database opties:" + +#: rpmspec.c:90 +msgid "no arguments given for parse" +msgstr "" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Ontbrekende '(' in %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Ontbrekende ')' in %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "Ontbrekende %s in %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "lezen mislukt: %s (%d)\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, c-format +msgid "Directory not found: %s\n" +msgstr "" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, c-format +msgid "%s: failed to encode\n" +msgstr "" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Glob niet toegestaan: %s\n" + +#: build/files.c:1700 +#, c-format +msgid "Directory not found by glob: %s\n" +msgstr "" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "regel: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "bestand %s: %s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: regel: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "" + +#: build/parsePolicies.c:32 +#, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "" + +#: build/parsePreamble.c:607 +#, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "" + +#: build/parsePreamble.c:610 +#, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "" + +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "" + +#: build/parsePreamble.c:909 +#, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "" + +#: build/parseReqs.c:112 +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" + +#: build/parseReqs.c:137 +msgid "Versioned file name not permitted" +msgstr "" + +#: build/parseReqs.c:154 +msgid "Version required" +msgstr "" + +#: build/parseReqs.c:165 +msgid "invalid dependency" +msgstr "" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "regel %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "regel %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +msgid "Failed to get policies from header\n" +msgstr "" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "bestand %s: %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "bestand %s: %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "bestand %s: %s\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "bestand %s: %s\n" + +#: build/policies.c:251 +#, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Ontbrekende %s in %s %s\n" + +#: build/policies.c:267 +#, c-format +msgid "Too many arguments in line: %s\n" +msgstr "" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "bestand %s: %s\n" + +#: build/rpmfc.c:107 +#, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr " mislukt - " + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "bestand %s: %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(fout 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Onbekend bestandstype" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Ontbrekende hard link(s)" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Interne fout" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " mislukt - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(geen getal)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(geen OpenPGP handtekening)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normaal " + +#: lib/formats.c:591 +msgid "replaced" +msgstr "" + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "niet geïnstalleerd " + +#: lib/formats.c:597 +msgid "net shared" +msgstr "" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "ontbrekende %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(onbekende %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(geen getal)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "'MACRO EXPR'" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "'EXPR'" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "" + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "" + +#: lib/poptI.c:237 +msgid "=" +msgstr "" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "ontbrekende architectuur voor %s op %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "" + +#: lib/psm.c:849 +msgid " on file " +msgstr "" + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(bevat geen bestanden)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normaal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "" + +#: lib/query.c:166 +msgid "not installed " +msgstr "niet geïnstalleerd " + +#: lib/query.c:169 +msgid "net shared " +msgstr "" + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "" + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(onbekende %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "bestand %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "" + +#: lib/rpmchecksig.c:43 +#, c-format +msgid "%s: key %d import failed.\n" +msgstr "" + +#: lib/rpmchecksig.c:47 +#, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NIET OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (ONTBREKENDE SLEUTELS:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr "" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "" + +#: lib/rpmchroot.c:43 +#, c-format +msgid "Unable to open current directory: %m\n" +msgstr "" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, c-format +msgid "%s: chroot directory not set\n" +msgstr "" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "" + +#: lib/rpmchroot.c:95 +#, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NEE " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "JA" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "pakket %s is reeds geïnstalleerd" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "" + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "" + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "geen rpm pakket" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "lezen mislukt: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "geen rpm pakket" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "" + +#: lib/rpmlock.c:106 +#, c-format +msgid "waiting for %s lock on %s\n" +msgstr "" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "bestand %s: %s\n" + +#: lib/rpmplugins.c:67 +#, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "bestand %s: %s\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "verschillend" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "pakket %s is reeds geïnstalleerd" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(geïnstalleerd) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "" + +#: lib/rpmprob.c:172 +#, c-format +msgid "%s is obsoleted by %s%s" +msgstr "" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "ontbrekende architectuurnaam op %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "ontbrekende ':' (gevonden 0x%02x) op %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "ontbrekend argument voor %s op %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "ontbrekende architectuur voor %s op %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Onbekend systeem: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "" + +#: lib/rpmscript.c:69 +#, c-format +msgid "Unable to restore current directory: %m" +msgstr "" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "Onbekend" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(geïnstalleerd) " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "ontbrekende '(' in pakketlabel: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "ontbrekende ')' in pakketlabel: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr " mislukt - " + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "ontbrekende %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "ontbrekende { na %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "ontbrekende } na %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "onverwachte ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "onverwachte }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? verwacht in expressie" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ verwacht na ? in expressie" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} verwacht in expressie" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ verwacht na : in expressie" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2228 +#, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "" + +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "" + +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d fout(%d) van %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d fout(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "bestand %s: %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "bestand %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "bestand %s: %s\n" + +#: plugins/sepolicy.c:305 +msgid "Failed to create semanage handle\n" +msgstr "" + +#: plugins/sepolicy.c:311 +msgid "Failed to connect to policy handler\n" +msgstr "" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "bestand %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "bestand %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "bestand %s: %s\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "bestand %s: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "bestand %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "bestand %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, c-format +msgid "%s terminated abnormally\n" +msgstr "" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, c-format +msgid "%s failed with exit code %i\n" +msgstr "" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, c-format +msgid "Failed to extract policy from %s\n" +msgstr "" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== actief %d leeg %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(leeg)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(leeg)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Onbekende optie %c in %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, fuzzy, c-format +msgid "File %s: %s\n" +msgstr "bestand %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(geen fout)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "fatale fout: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "fout: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "waarschuwing: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(geen fout)" + +#: rpmio/rpmpgp.c:1652 +#, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "gpg uitvoeren mislukt (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr " mislukt - " + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: open %s: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s is geen RPM pakket\n" + +#~ msgid "Unknown system error" +#~ msgstr "Onbekende systeemfout" + +#~ msgid "LOOP:\n" +#~ msgstr "LOOP:\n" + +#~ msgid "Unknown" +#~ msgstr "Onbekend" diff --git a/po/pl.gmo b/po/pl.gmo new file mode 100644 index 0000000..2a421c9 Binary files /dev/null and b/po/pl.gmo differ diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..0b426a7 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,3532 @@ +# translation of pl.po to Polish +# Wojciech DrapiÅ„ski , 1999. +# PaweÅ‚ DziekoÅ„ski , 1999. +# Jakub Bogusz , 2002. +# Arkadiusz Miskiewicz , 2003. +# Piotr DrÄ…g , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: pl\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2010-11-19 09:13+0100\n" +"Last-Translator: Piotr DrÄ…g \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM wersja %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Copyright (C) 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" +"Ten program może być swobodnie rozpowszechniany na warunkach licencji GNU " +"GPL\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "utworzenie potoku dla --pipe nie powiodÅ‚o siÄ™: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "wykonanie nie powiodÅ‚o siÄ™\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "parametr nie jest pakietem RPM\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "bÅ‚Ä…d podczas odczytywania nagłówka z pakietu\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "nie można ponownie otworzyć danych: %s\n" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "Odpytanie/sprawdzenie opcji wyboru pakietów:" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Opcje zapytania (z -q lub --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Opcje sprawdzania (z -V lub --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Opcje instalacji/aktualizacji/usuwania:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Wspólne opcje dla wszystkich trybów i plików binarnych RPM:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "tylko jeden typ odpytywania/sprawdzania można wykonać na raz" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "nieoczekiwane flagi zapytania" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "nieoczekiwany format zapytania" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "nieoczekiwane źródÅ‚o zapytania" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "może być podany tylko jeden główny tryb pracy" + +#: rpmqv.c:153 +msgid "only installation and upgrading may be forced" +msgstr "tylko instalacjÄ™ i aktualizowanie można wymusić" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "pliki mogÄ… być przenoszone tylko podczas instalacji pakietu" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "nie można użyć --prefix z --relocate lub --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate i --excludepath można użyć tylko podczas instalowania nowych " +"pakietów" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix można użyć tylko podczas instalowania nowych pakietów" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "parametry dla --prefix muszÄ… zaczynać siÄ™ od /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) można podać tylko podczas instalacji pakietów" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent można podać tylko podczas instalacji pakietów" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs można podać tylko podczas instalacji pakietów" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs można podać tylko podczas instalacji pakietów" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs można podać tylko podczas instalacji pakietów" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "nie można jednoczeÅ›nie podać --excludedocs i --includedocs" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch można podać tylko podczas instalacji pakietów" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos można podać tylko podczas instalacji pakietów" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize można podać tylko podczas instalacji pakietów" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches można podać tylko podczas usuwania pakietów" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles można podać tylko podczas instalacji pakietów" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb można podać tylko podczas instalacji i usuwania pakietów" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"opcje wyÅ‚Ä…czajÄ…ce skrypty można podać tylko podczas instalacji i usuwania " +"pakietów" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"opcje wyÅ‚Ä…czajÄ…ce wyzwalacze można podać tylko podczas instalacji i usuwania " +"pakietów" + +#: rpmqv.c:230 +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--nodeps można podać tylko podczas instalacji, usuwania i sprawdzania " +"pakietów" + +#: rpmqv.c:234 +msgid "--test may only be specified during package installation and erasure" +msgstr "--test można podać tylko podczas instalacji i usuwania pakietów" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "parametry dla --root (-r) muszÄ… zaczynać siÄ™ od /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "nie podano pakietów do usuniÄ™cia" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "nie podano pakietów do zainstalowania" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "nie podano parametrów dla zapytania" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "nie podano parametrów dla sprawdzenia" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot zostaÅ‚ już podany, ignorowanie %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"zbudowanie przez %prep (rozpakowanie źródeÅ‚ i naÅ‚ożenie Å‚at) z " + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "zbudowanie przez %build (%prep i skompilowanie) z " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"zbudowanie przez %install (%prep, %build i zainstalowanie) z " + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "sprawdzenie sekcji %files z " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "zbudowanie pakietu źródÅ‚owego i binarnego z " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "zbudowanie tylko pakietu binarnego z " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "zbudowanie tylko pakietu źródÅ‚owego z " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"zbudowanie przez %prep (rozpakowanie źródeÅ‚ i naÅ‚ożenie Å‚at) z " + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "zbudowanie przez %build (%prep oraz skompilowanie) z " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"zbudowanie przez %install (%prep, %build i zainstalowanie) z " + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "sprawdzenie sekcji %files z " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "zbudowanie pakietu źródÅ‚owego i binarnego z " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "zbudowanie tylko pakietu binarnego z " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "zbudowanie tylko pakietu źródÅ‚owego z " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "zbudowanie pakietu binarnego z " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"zbudowanie przez %install (%prep, %build i zainstalowanie) z " +"" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "zastÄ…pienie build root" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "usuniÄ™cie drzewa budowania po ukoÅ„czeniu" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "zignorowanie dyrektywy ExcludeArch: z pliku spec" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "debugowanie maszyny stanów plików" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "bez wykonania żadnych etapów budowania" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "bez sprawdzania zależnoÅ›ci budowania" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" +"utworzenie nagłówków pakietu zgodnych z (przestarzaÅ‚ymi) pakietami RPM v3" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "bez akceptowania wpisów msgstr i18n z pliku spec" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "usuniÄ™cie źródeÅ‚ po ukoÅ„czeniu" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "usuniÄ™cie pliku spec po ukoÅ„czeniu" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "przejÅ›cie od razu do podanego etapu (tylko dla c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "zastÄ…pienie platformy docelowej" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "Opcje budowania z [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "NiespeÅ‚nione zależnoÅ›ci budowania:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Nie można otworzyć pliku spec %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Otwarcie potoku tar nie powiodÅ‚o siÄ™: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Odczytanie pliku spec z %s nie powiodÅ‚o siÄ™\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Zmiana nazwy %s na %s nie powiodÅ‚a siÄ™: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "wykonanie stat nie powiodÅ‚o siÄ™ %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Plik %s nie jest zwykÅ‚ym plikiem.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Plik %s nie wyglÄ…da na plik spec.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Budowanie dla platform docelowych: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Budowanie dla %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "zainicjowanie bazy danych" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"przebudowanie odwrotne listy w bazie danych z nagłówków zainstalowanych " +"pakietów" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "sprawdzenie plików bazy danych" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Opcje bazy danych:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "sprawdzenie podpisów pakietów" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "zaimportowanie opakowanego klucza publicznego" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "wyÅ›wietlenie listy kluczy z bazy kluczy RPM" + +#: rpmkeys.c:37 +msgid "Keyring options:" +msgstr "Opcje bazy kluczy:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "nie podano parametrów" + +#: rpmsign.c:25 +msgid "sign package(s)" +msgstr "podpisanie pakietów" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "podpisanie pakietów (identyczne z --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "usuniÄ™cie podpisów pakietów" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Opcje podpisu:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Nie można wykonać %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Należy ustawić \"%%_gpg_name\" w pliku makr\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "ProszÄ™ podać hasÅ‚o: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "HasÅ‚o jest dobre.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Sprawdzenie hasÅ‚a nie powiodÅ‚o siÄ™\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "odpytuje pliki spec" + +#: rpmspec.c:28 +msgid "query spec file(s)" +msgstr "odpytuje pliki spec" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" +"dziaÅ‚a na binarnych pakietach RPM utworzonych przez plik spec (domyÅ›lnie)" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "dziaÅ‚a na źródÅ‚owych pakietach RPM utworzonych przez plik spec" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "użycie nastÄ™pujÄ…cego formatu zapytania" + +#: rpmspec.c:45 +msgid "Spec options:" +msgstr "Opcje pliku spec:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "nie podano parametrów dla zapytania" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Nie można otworzyć pliku tymczasowego.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Wykonywanie(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Wykonanie %s nie powiodÅ‚o siÄ™ (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "BÅ‚Ä™dny stan wyjÅ›cia z %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"BÅ‚Ä™dy budowania pakietu RPM:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "bÅ‚Ä…d skÅ‚adni podczas przetwarzania ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "bÅ‚Ä…d skÅ‚adni podczas przetwarzania &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "bÅ‚Ä…d skÅ‚adni podczas przetwarzania ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "bÅ‚Ä…d przetwarzania w wyrażeniu\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "niesparowane (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- tylko na liczbach\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! tylko na liczbach\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "typy muszÄ… siÄ™ zgadzać\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / nie sÄ… obsÅ‚ugiwane dla ciÄ…gów\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- nie jest obsÅ‚ugiwane dla ciÄ…gów\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& i || nie sÄ… obsÅ‚ugiwane dla ciÄ…gów\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "bÅ‚Ä…d skÅ‚adni w wyrażeniu\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Brak \"(\" w %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Brak \")\" w %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "NieprawidÅ‚owy token %s: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "Brak %s w %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Brak biaÅ‚ego znaku po %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "BÅ‚Ä™dna skÅ‚adnia: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "BÅ‚Ä™dny tryb spec: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "BÅ‚Ä™dny tryb katalogu spec: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Niespotykana dÅ‚ugość lokalizacji \"%.*s\" w %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Powtórzona lokalizacja %.*s w %%lang(%s)\n" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "NieprawidÅ‚owa możliwość: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "ObsÅ‚uga możliwoÅ›ci plików nie jest wbudowana\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Tylko jeden parametr dla %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Dwa pliki w jednym wierszu: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Plik musi zaczynać siÄ™ od \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Nie można mieszać specjalnego %%doc z innymi formami: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "Nieznany algorytm skrótu pliku %u, używanie w zamian MD5\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Plik podany dwukrotnie: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "wykonanie %s unlink na %s nie powiodÅ‚o siÄ™: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "DowiÄ…zanie symboliczne wskazuje na BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "Wymagane sÄ… bezpoÅ›rednie atrybuty plików w spec dla: %s\n" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Nie odnaleziono pliku: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Nie odnaleziono pliku: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "Plik %s jest za duży dla danych\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: nie można wczytać nieznanego znacznika (%d).\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: odczytanie klucza publicznego nie powiodÅ‚o siÄ™.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: nie jest opakowanym kluczem publicznym.\n" + +#: build/files.c:1618 +#, c-format +msgid "%s: failed to encode\n" +msgstr "%s: odkodowanie nie powiodÅ‚o siÄ™\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Plik musi zaczynać siÄ™ od \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Wyrażenie regularne jest niedozwolone: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Nie odnaleziono pliku przez wyrażenie regularne: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Nie odnaleziono pliku przez wyrażenie regularne: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Nie można otworzyć pliku %s dla %%files: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "wiersz: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "BÅ‚Ä™dny plik: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "BÅ‚Ä™dny wÅ‚aÅ›ciciel/grupa: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Sprawdzanie niespakietowanych plików: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Odnaleziono zainstalowane (ale niespakietowane) pliki:\n" +"%s" + +#: build/files.c:2139 +#, c-format +msgid "Processing files: %s\n" +msgstr "Przetwarzanie plików: %s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "Pliki binarne zależne od architektury w pakiecie noarch\n" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "utworzenie archiwum nie powiodÅ‚o siÄ™ na pliku %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "utworzenie archiwum nie powiodÅ‚o siÄ™: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "zapisanie cpio_copy nie powiodÅ‚o siÄ™: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "odczytanie cpio_copy nie powiodÅ‚o siÄ™: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: wiersz: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Nie można ustalić kanonicznej nazwy komputera: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Nie można otworzyć pliku PreIn: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Nie można otworzyć pliku PreUn: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Nie można otworzyć pliku PreTrans: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Nie można otworzyć pliku PostIn: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Nie można otworzyć pliku PostUn: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Nie można otworzyć pliku PostTrans: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Nie można otworzyć pliku VerifyScript: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Nie można otworzyć skryptu Trigger: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Nieznana kompresja danych: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Nie można utworzyć niezmiennej części nagłówka.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Nie można zapisać tymczasowego nagłówka\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "BÅ‚Ä™dne dane CSA\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Nie można ponownie wczytać nagłówka podpisu.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Nie można otworzyć %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Nie można zapisać pakietu: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Nie można otworzyć sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Nie można odczytać nagłówka z %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Nie można zapisać nagłówka do %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Nie można odczytać danych z %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Nie można zapisać danych do %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Zapisano: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "Wykonywanie \"%s\":\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Wykonanie \"%s\" nie powiodÅ‚o siÄ™.\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Sprawdzenie pakietu \"%s\" nie powiodÅ‚o siÄ™.\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Nie można utworzyć wyjÅ›ciowej nazwy pliku dla pakietu %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "nie można utworzyć %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "wiersz %d: drugi %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "Wpisy %%changelog muszÄ… zaczynać siÄ™ od *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "niepeÅ‚ny wpis %%changelog\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "bÅ‚Ä™dna data w %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "Wpisy w %%changelog nie sÄ… w porzÄ…dku chronologicznym\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "brak nazwy w %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "brak opisu w %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "wiersz %d: bÅ‚Ä…d podczas przetwarzania %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "wiersz %d: bÅ‚Ä™dna opcja %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "wiersz %d: za dużo nazw: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "wiersz %d: pakiet nie istnieje: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "wiersz %d: drugi opis\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "wiersz %d: bÅ‚Ä…d podczas przetwarzania %%files: %s\n" + +#: build/parsePolicies.c:32 +#, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "wiersz %d: bÅ‚Ä…d podczas przetwarzania %%policies: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "wiersz %d: bÅ‚Ä™dny numer: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "wiersz %d: bÅ‚Ä™dny numer no%s: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "wiersz %d: bÅ‚Ä™dny numer %s: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d zostaÅ‚o okreÅ›lone wiele razy\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Architektura jest wykluczona: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Architektura nie jest doÅ‚Ä…czona: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "System operacyjny jest wykluczony: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "System operacyjny nie jest doÅ‚Ä…czony: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "Pole %s musi być obecne w pakiecie: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Powtórzone wpisy %s w pakiecie: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "niedozwolone _docdir_fmt: %s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Nie można otworzyć ikony %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Nie można odczytać ikony %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Nieznany typ ikony: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "wiersz %d: znacznik przyjmuje tylko jeden token: %s\n" + +#: build/parsePreamble.c:607 +#, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "wiersz %d: niedozwolony znak \"%c\" w: %s\n" + +#: build/parsePreamble.c:610 +#, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "wiersz %d: niedozwolony znak w: %s\n" + +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "wiersz %d: niedozwolona sekwencja \"..\" w: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "wiersz %d: bÅ‚Ä™dnie sformowany znacznik: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "wiersz %d: pusty znacznik: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "wiersz %d: przedrostki nie mogÄ… koÅ„czyć siÄ™ na \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "wiersz %d: Docdir musi zaczynać siÄ™ od \"/\": %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "wiersz %d: pole Epoch musi być niepodpisanÄ… liczbÄ…: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "wiersz %d: bÅ‚Ä™dne okreÅ›lenia %s: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "wiersz %d: bÅ‚Ä™dny format BuildArchitecture: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "wiersz %d: obsÅ‚ugiwane sÄ… tylko podpakiety noarch: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "WewnÄ™trzny bÅ‚Ä…d: faÅ‚szywy znacznik %d\n" + +#: build/parsePreamble.c:909 +#, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "wiersz %d: %s jest przestarzaÅ‚e: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "BÅ‚Ä™dna specyfikacja pakietu: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Pakiet już istnieje: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "wiersz %d: nieznany znacznik: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} nie może być puste\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} nie może być \"/\"\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "BÅ‚Ä™dne źródÅ‚o: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "Brak Å‚aty numer %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "%%patch bez odpowiadajÄ…cego mu znacznika \"Patch:\"\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "Brak źródÅ‚a numer %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "Brak znacznika \"Source:\" w pliku spec\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Nie można pobrać pliku nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "BÅ‚Ä…d podczas przetwarzania %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "wiersz %d: bÅ‚Ä™dny parametr dla %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "wiersz %d: bÅ‚Ä™dna opcja %%setup %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "NieprawidÅ‚owy numer Å‚aty %s: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "wiersz %d: drugie %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"wiersz %d: tokeny zależnoÅ›ci muszÄ… zaczynać siÄ™ od znaków alfanumerycznych, " +"\"_\" lub \"/\": %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "wiersz %d: wersja w nazwie pliku jest niedozwolona: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "wiersz %d: wersja jest wymagana: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "wiersz %d: nieprawidÅ‚owa zależność: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "wiersz %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "wiersz %d: wyzwalacze muszÄ… posiadać --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "wiersz %d: bÅ‚Ä…d podczas przetwarzania %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "wiersz %d: wewnÄ™trzny skrypt musi koÅ„czyć siÄ™ \">\": %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "wiersz %d: program skryptu musi zaczynać siÄ™ od \"/\": %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "wiersz %d: drugi %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "wiersz %d: wewnÄ™trzny skrypt jest nieobsÅ‚ugiwany: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "wiersz %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Nie można otworzyć %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "NiezamkniÄ™te %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean zwróciÅ‚o %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: napotkano %%else bez %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: napotkano %%endif bez %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "bÅ‚Ä™dnie sformowany wpis %%include\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Nie odnaleziono zgodnych architektur do zbudowania\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Pakiet nie posiada %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "ModuÅ‚ polityki \"%s\" posiada kopiÄ™ z pokrywajÄ…cymi siÄ™ typami\n" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "Podstawowe moduÅ‚y \"%s\" i \"%s\" posiadajÄ… pokrywajÄ…ce siÄ™ typy\n" + +#: build/policies.c:100 +msgid "Failed to get policies from header\n" +msgstr "Uzyskanie polityk z nagłówka nie powiodÅ‚o siÄ™\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "%%semodule wymaga Å›cieżki do pliku\n" + +#: build/policies.c:162 +#, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Odczytanie pliku polityki nie powiodÅ‚o siÄ™: %s\n" + +#: build/policies.c:169 +#, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Odkodowanie pliku polityki nie powiodÅ‚o siÄ™: %s\n" + +#: build/policies.c:186 +#, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Ustalenie nazwy polityki nie powiodÅ‚o siÄ™: %s\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" +"Typ \"%s\" zostaÅ‚ podany razem z innymi typami w %%semodule %s. " +"Kompaktowanie typów do \"%s\".\n" + +#: build/policies.c:245 +#, c-format +msgid "Error parsing %s: %s\n" +msgstr "BÅ‚Ä…d podczas przetwarzania %s: %s\n" + +#: build/policies.c:251 +#, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Oczekiwano znacznika %%semodule: %s\n" + +#: build/policies.c:261 +#, c-format +msgid "Missing module path in line: %s\n" +msgstr "Brak Å›cieżki do moduÅ‚u w wierszu: %s\n" + +#: build/policies.c:267 +#, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Za dużo parametrów w wierszu: %s\n" + +#: build/policies.c:305 +#, c-format +msgid "Processing policies: %s\n" +msgstr "Przetwarzanie polityk: %s\n" + +#: build/rpmfc.c:107 +#, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "Ignorowanie nieprawidÅ‚owego wyrażenia regularnego %s\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Nie można utworzyć potoku dla %s: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Nie można wykonać %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Nie można rozdzielić %s: %s\n" + +#: build/rpmfc.c:343 +#, c-format +msgid "%s failed: %x\n" +msgstr "%s nie powiodÅ‚o siÄ™: %x\n" + +#: build/rpmfc.c:347 +#, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "zapisanie wszystkich danych do %s nie powiodÅ‚o siÄ™: %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "Konwersja %s na dÅ‚ugÄ… liczbÄ™ caÅ‚kowitÄ… nie powiodÅ‚a siÄ™.\n" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "Brak skonfigurowanych atrybutów plików\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) nie powiodÅ‚o siÄ™: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load nie powiodÅ‚o siÄ™: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Rozpoznanie pliku \"%s\" nie powiodÅ‚o siÄ™: tryb %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Wyszukiwanie %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Odnalezienie %s nie powiodÅ‚o siÄ™:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "odpytanie pliku spec %s nie powiodÅ‚o siÄ™, nie można przetworzyć\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(bÅ‚Ä…d 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "BÅ‚Ä™dne magic" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "BÅ‚Ä™dny/nieczytelny nagłówek" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Rozmiar nagłówka jest za duży" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Nieznany typ pliku" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Brak twardych dowiÄ…zaÅ„" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "Skrót nie zgadza siÄ™" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "WewnÄ™trzny bÅ‚Ä…d" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "Plik archiwum nie znajduje siÄ™ w nagłówku" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " nie powiodÅ‚o siÄ™ - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "pakiet %s zostaÅ‚ już dodany, pomijanie %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "pakiet %s zostaÅ‚ już dodany, zastÄ™powanie %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(nie jest liczbÄ…)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(nie jest base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(nieprawidÅ‚owy typ)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(nie jest \"blob\")" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(nieprawidÅ‚owy typ XML)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(nie jest podpisem OpenPGP)" + +#: lib/formats.c:588 +msgid "normal" +msgstr "zwykÅ‚y" + +#: lib/formats.c:591 +msgid "replaced" +msgstr "zastÄ…piony" + +#: lib/formats.c:594 +msgid "not installed" +msgstr "niezainstalowany" + +#: lib/formats.c:597 +msgid "net shared" +msgstr "udostÄ™pniony w sieci" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "bÅ‚Ä™dny kolor" + +#: lib/formats.c:603 +msgid "missing" +msgstr "brak" + +#: lib/formats.c:606 +msgid "(unknown)" +msgstr "(nieznany)" + +#: lib/formats.c:645 +msgid "(not a string)" +msgstr "(nie jest ciÄ…giem)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "użytkownik %s nie istnieje - używanie roota\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "grupa %s nie istnieje - używanie roota\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "nie odnaleziono pliku archiwum %s na liÅ›cie plików w nagłówku\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s zapisano jako %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "wykonanie %s rmdir na %s nie powiodÅ‚o siÄ™: katalog nie jest pusty\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "wykonanie %s rmdir na %s nie powiodÅ‚o siÄ™: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "wykonanie %s unlink na %s nie powiodÅ‚o siÄ™: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s utworzono jako %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "pomijanie %s z podpisem V%u, którego nie można sprawdzić\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "rozmiar blob(%d): BÅĘDNY, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "znacznik[%d]: BÅĘDNY, znacznik %d typ %d offset %d licznik %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "offset obszaru: BÅĘDNY, znacznik %d typ %d offset %d licznik %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "koÅ„cówka obszaru: BÅĘDNA, znacznik %d typ %d offset %d licznik %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "rozmiar obszaru: BÅĘDNY, ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: BÅĘDNY, nie szesnastkowy\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr RSA: BÅĘDNY, nie binarny\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr DSA: BÅĘDNY, nie binarny\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hdr rozmiar(%d): BÅĘDNY, read zwróciÅ‚o %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "hdr magic: BÅĘDNE\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "hdr znacznik: BÅĘDNE, liczba znaczników(%d) poza zakresem\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "hdr dane: BÅĘDNE, liczba bajtów(%d) poza zakresem\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr blob(%zd): BÅĘDNY, read zwróciÅ‚o %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "hdr load: BÅĘDNY\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature nie powiodÅ‚o siÄ™: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: podpis jest niedostÄ™pny\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead nie powiodÅ‚o siÄ™: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread nie powiodÅ‚o siÄ™: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "" +"%s jest pakietem RPM Delta i nie może zostać bezpoÅ›rednio zainstalowany\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "NieobsÅ‚ugiwane dane (%s) w pakiecie %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "wczeÅ›niejsze okreÅ›lenie MAKRA z wartoÅ›ciÄ… WYRAÅ»ENIE" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "\"MAKRO WYRAÅ»ENIE\"" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "okreÅ›lenie MAKRA z wartoÅ›ciÄ… WYRAÅ»ENIE" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "wyÅ›wietlenie rozwiniÄ™cia makr z WYRAÅ»ENIA" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "\"WYRAÅ»ENIE\"" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "odczytanie zamiast domyÅ›lnych plików" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "bez sprawdzania skrótów pakietów" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "bez sprawdzania nagłówków bazy danych po pobraniu" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "bez sprawdzania podpisów pakietów" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "przekazanie standardowego wyjÅ›cia do POLECENIA" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "POLECENIE" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "użycie ROOTA jako katalogu najwyższego poziomu" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "użycie bazy danych w KATALOGU" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "KATALOG" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "wyÅ›wietlenie znanych znaczników zapytaÅ„" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "wyÅ›wietlenie ostatecznej konfiguracji rpmrc i makr" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "użycie mniej szczegółowego wyjÅ›cia" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "użycie bardziej szczegółowego wyjÅ›cia" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "wyÅ›wietlenie wersji używanego oprogramowania RPM" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "debugowanie maszyny stanu danych pliku" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "debugowanie wejÅ›cia/wyjÅ›cia rpmio" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: tabela opcji jest bÅ‚Ä™dnie skonfigurowana (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "Å›cieżki wyÅ‚Ä…czeÅ„ muszÄ… zaczynać siÄ™ od /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "przesuniÄ™cia muszÄ… zaczynać siÄ™ od /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "przesuniÄ™cia muszÄ… zawierać =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "przesuniÄ™cia muszÄ… zawierać / po =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"zainstalowanie wszystkich plików, nawet konfiguracyjnych, które w innym " +"przypadku by pominiÄ™to" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"usuniÄ™cie wszystkich pakietów, które zgadzajÄ… siÄ™ z (zwykle " +"tworzony jest bÅ‚Ä…d, jeÅ›li podaje wiele pakietów)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "przesuniÄ™cie plików w nieprzesuwalnym pakiecie" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "wyÅ›wietlenie pÄ™tli zależnoÅ›ci jako ostrzeżenie" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "usuniÄ™cie (odinstalowanie) pakietu" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "bez instalacji plików konfiguracyjnych" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "bez instalacji dokumentacji" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "pominiÄ™cie plików zaczynajÄ…cych siÄ™ od skÅ‚adnika <Å›cieżki> " + +#: lib/poptI.c:140 +msgid "" +msgstr "<Å›cieżka>" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "skrócona wersja --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "zaktualizowanie pakietów, jeÅ›li sÄ… już zainstalowane" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "wyÅ›wietlenie krzyżyków podczas instalacji pakietów (dobre z -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "bez sprawdzania architektury pakietu" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "bez sprawdzania systemu operacyjnego pakietu" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "bez sprawdzania pojemnoÅ›ci dysku przed zainstalowaniem" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "zainstalowanie dokumentacji" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "zainstalowanie pakietów" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "zaktualizowanie bazy danych, ale bez modyfikacji systemu plików" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "bez sprawdzania zależnoÅ›ci pakietu" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "bez sprawdzania skrótów plików" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "bez sprawdzania skrótów plików (przestarzaÅ‚e)" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "bez instalacji kontekstów bezpieczeÅ„stwa plików" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "bez zmieniania kolejnoÅ›ci instalacji pakietów, aby zapewnić zależnoÅ›ci" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "bez wykonania skryptów pakietów" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "bez wykonania skryptu %%pre (jeÅ›li jest)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "bez wykonania skryptu %%post (jeÅ›li jest)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "bez wykonania skryptu %%preun (jeÅ›li jest)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "bez wykonania skryptu %%postun (jeÅ›li jest)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "bez wykonania żadnych skryptów wyzwalanych przez ten pakiet" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "bez wykonania żadnych skryptów %%triggerprein" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "bez wykonania żadnych skryptów %%triggerin" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "bez wykonania żadnych skryptów %%triggerun" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "bez wykonania żadnych skryptów %%triggerpostun" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "bez wykonywania żadnych dziaÅ‚aÅ„ kolekcji" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"zaktualizowanie do poprzedniej wersji pakietu (--force podczas " +"aktualizowania robi to automatycznie)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "wyÅ›wietlenie stanu instalacji pakietu w procentach" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "przesuniÄ™cie pakietu do , jeÅ›li jest przesuwalny" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "przesuniÄ™cie plików z Å›cieżki do " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "zignorowanie konfliktów plików miÄ™dzy pakietami" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "zainstalowanie ponownie, jeÅ›li pakiet jest już zainstalowany" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "bez instalacji, podanie tylko czy instalacja zadziaÅ‚a czy nie" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "zaktualizowanie pakietów" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "odpytanie/sprawdzenie wszystkich pakietów" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "tryb sprawdzania podpisów pakietów RPM" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "odpytanie/sprawdzenie pakietów zawierajÄ…cych plik" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "odpytanie/sprawdzenie pakietów w grupie" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "odpytanie/sprawdzenie pliku pakietu" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "odpytanie/sprawdzenie pakietów z identyfikatorem pakietu" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "odpytanie/sprawdzenie pakietów z identyfikatorem nagłówka" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "tryb odpytywania pakietów RPM" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "odpytanie/sprawdzenie instancji nagłówka" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "odpytanie/sprawdzenie pakietów z transakcji instalacji" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "odpytanie pakietów wyzwalanych przez pakiet" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "tryb sprawdzania pakietów RPM" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "odpytanie/sprawdzenie pakietów wymagajÄ…cych zależnoÅ›ci" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "odpytanie/sprawdzenie pakietów dostarczajÄ…cych zależność" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "bez używania wyrażeÅ„ regularnych w parametrach" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "bez przetwarzania plików nie bÄ™dÄ…cych pakietami jako manifesty" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "wyÅ›wietlenie listy wszystkich plików konfiguracyjnych" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "wyÅ›wietlenie listy wszystkich plików dokumentacji" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "zrzucenie podstawowych informacji o pliku" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "wyÅ›wietlenie listy plików pakietu" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "pominiÄ™cie plików %%ghost" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "wyÅ›wietlenie stanu wyÅ›wietlonych plików" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "bez sprawdzania rozmiaru plików" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "bez sprawdzania Å›cieżek dowiÄ…zaÅ„ symbolicznych plików" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "bez sprawdzania wÅ‚aÅ›cicieli plików" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "bez sprawdzania grup plików" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "bez sprawdzania czasu modyfikacji plików" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "bez sprawdzania trybu plików" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "bez sprawdzania możliwoÅ›ci plików" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "bez sprawdzania kontekstów bezpieczeÅ„stwa plików" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "bez sprawdzania plików pakietu" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "bez sprawdzania zależnoÅ›ci pakietu" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "bez wykonania żadnych skryptów sprawdzania" + +#: lib/psm.c:212 +#, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "Brak funkcji rpmlib dla %s:\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "oczekiwano pakietu źródÅ‚owego, odnaleziono binarny\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "pakiet źródÅ‚owy nie zawiera pliku .spec\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "rozpakowanie archiwum nie powiodÅ‚o siÄ™%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " na pliku " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s nie powiódÅ‚ siÄ™ na pliku %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s nie powiodÅ‚o siÄ™: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "niepoprawny format: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(nie zawiera plików)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "zwykÅ‚y " + +#: lib/query.c:163 +msgid "replaced " +msgstr "zastÄ…piony " + +#: lib/query.c:166 +msgid "not installed " +msgstr "niezainstalowany " + +#: lib/query.c:169 +msgid "net shared " +msgstr "udostÄ™pniony w sieci " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "bÅ‚Ä™dny kolor " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(brak stanu) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(nieznany %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "pakiet nie posiada list wÅ‚aÅ›cicieli/grup plików\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "pakiet nie posiada list wÅ‚aÅ›cicieli ani identyfikatorów plików\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "grupa %s nie zawiera żadnych pakietów\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "brak pakietów wyzwalajÄ…cych %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "bÅ‚Ä™dnie sformowane %s: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "brak pakietów pasujÄ…cych do %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "brak pakietów wymagajÄ…cych %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "brak pakietów dostarczajÄ…cych %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "plik %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "plik %s nie należy do żadnego pakietu\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "nieprawidÅ‚owy numer pakietu: %s\n" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "nie można odczytać wpisu %u\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "pakiet %s nie jest zainstalowany\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "nieznany znacznik: \"%s\"\n" + +#: lib/rpmchecksig.c:43 +#, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: zaimportowanie klucza %d nie powiodÅ‚o siÄ™.\n" + +#: lib/rpmchecksig.c:47 +#, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: klucz %d nie jest opakowanym kluczem publicznym.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: zaimportowanie read nie powiodÅ‚o siÄ™(%d).\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead nie powiodÅ‚o siÄ™\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"%s: nie można odczytać niezmiennego regionu nagłówka. Uszkodzony pakiet?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "pomijanie pakietu %s z podpisem V%u, którego nie można sprawdzić\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NIE DOBRZE" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (BRAK KLUCZY:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (NIEZAUFANE KLUCZE:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: otwarcie nie powiodÅ‚o siÄ™: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Nie można przywrócić katalogu roota: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s: nie ustawiono katalogu chroot\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Nie można zmienić katalogu roota: %m\n" + +#: lib/rpmchroot.c:95 +#, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Nie można przywrócić katalogu roota: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NIE " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "TAK" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "ZależnoÅ›ci PreReq:, Provides: i Obsoletes: obsÅ‚ugujÄ… wersje." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"nazwy plików przechowano jako krotka (dirName,baseName,dirIndex), a nie jako " +"Å›cieżki." + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "dane pakietu mogÄ… zostać skompresowane używajÄ…c bzip2." + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "dane pakietu mogÄ… zostać skompresowane używajÄ…c xz." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "dane pakietu mogÄ… zostać skompresowane używajÄ…c lzma." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "pliki danych pakietu posiadajÄ… przedrostek \"./\"." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "pakiet nazwa-wersja-wydanie nie jest domyÅ›lnie dostarczany." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "znaczniki nagłówka sÄ… zawsze porzÄ…dkowane po wczytaniu." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "interpreter skryptów może używać parametrów z nagłówka." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "plik twardego dowiÄ…zania może zostać zainstalowany bez ukoÅ„czenia." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" +"skrypty pakietu mogÄ… odwoÅ‚ywać siÄ™ do bazy danych RPM podczas instalowania." + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "wewnÄ™trzna obsÅ‚uga skryptów Lua." + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "algorytm skrótu pliku jest konfigurowalny dla każdego pakietu osobno" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "obsÅ‚uga możliwoÅ›ci plików POSIX.1e" + +#: lib/rpmds.c:911 +msgid "package scriptlets can be expanded at install time." +msgstr "skrypty pakietu mogÄ… być rozszerzane w czasie instalacji." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "otwarcie %s nie powiodÅ‚o siÄ™: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: nie jest pakietem RPM (ani manifestem pakietu)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Przygotowywanie..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Przygotowywanie pakietów do instalacji..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "NiespeÅ‚nione zależnoÅ›ci:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: nie jest pakietem RPM (ani manifestem pakietu): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s nie może zostać zainstalowany\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Pobieranie %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "pomijanie %s - przesÅ‚anie nie powiodÅ‚o siÄ™\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "pakiet %s nie jest przesuwalny\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "bÅ‚Ä…d podczas odczytywania z pliku %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "plik %s wymaga nowszej wersji oprogramowania RPM\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" podaje wiele pakietów:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "nie można otworzyć %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Instalowanie %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "nie jest pakietem RPM" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "niedozwolony typ podpisu" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "nieobsÅ‚ugiwana wersja pakietu RPM" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "odczytanie nie powiodÅ‚o siÄ™: %s (%d)\n" + +#: lib/rpmlead.c:126 +msgid "not an rpm package\n" +msgstr "nie jest pakietem RPM\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "nie można utworzyć blokady %s na %s (%s)\n" + +#: lib/rpmlock.c:106 +#, c-format +msgid "waiting for %s lock on %s\n" +msgstr "oczekiwanie na blokadÄ™ %s na %s\n" + +#: lib/rpmplugins.c:60 +#, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "Wykonanie dlopen na %s %s nie powiodÅ‚o siÄ™\n" + +#: lib/rpmplugins.c:67 +#, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "RozwiÄ…zanie symbolu %s nie powiodÅ‚o siÄ™: %s\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "RozwiniÄ™cie makra %%__collection_%s nie powiodÅ‚o siÄ™\n" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "Wtyczka %s nie jest wczytana\n" + +#: lib/rpmplugins.c:150 +#, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "RozwiÄ…zanie wtyczki %s symbolu %s nie powiodÅ‚o siÄ™: %s\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "różne" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "pakiet %s jest przeznaczony dla architektury %s" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "pakiet %s jest przeznaczony dla systemu operacyjnego %s" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "pakiet %s jest już zainstalowany" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "Å›cieżka %s w pakiecie %s nie jest przesuwalna" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "plik %s jest w konflikcie miÄ™dzy instalowanymi %s i %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "plik %s z instalacji %s jest w konflikcie z plikiem z pakietu %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "pakiet %s (nowszy niż %s) jest już zainstalowany" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "instalowanie pakietu %s wymaga %%cB w systemie plików %s" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "instalowanie pakietu %s wymaga % i-wÄ™złów w systemie plików %s" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s jest wymagane przez %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(zainstalowane) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s jest w konflikcie z %s%s" + +#: lib/rpmprob.c:172 +#, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s jest zastÄ™powane przez %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "wystÄ…piÅ‚ nieznany bÅ‚Ä…d %d podczas manipulowania pakietem %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "brak drugiego \":\" w %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "brak nazwy architektury w %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "NiepeÅ‚ny wiersz danych w %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Za dużo parametrów w wierszu danych w %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "BÅ‚Ä™dny numer architektury/systemu operacyjnego: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "NiepeÅ‚ny domyÅ›lny wiersz w %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Za dużo parametrów w domyÅ›lnym wierszu w %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "brak \":\" (odnaleziono 0x%02x) w %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "brak parametru dla %s w %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "nie można otworzyć %s w %s:%d: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "brak architektury dla %s w %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "bÅ‚Ä™dna opcja \"%s\" w %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Nieznany system: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "ProszÄ™ skontaktować siÄ™ z %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Nie można otworzyć %s do odczytania: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Nie można przywrócić katalogu roota: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "ObsÅ‚uga skryptów nie jest wbudowana\n" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Nie można utworzyć pliku tymczasowego dla %s: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Nie można utworzyć kopii deskryptora pliku: %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "Skrypt %s nie powiódÅ‚ siÄ™, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "Skrypt %s nie powiódÅ‚ siÄ™, sygnaÅ‚ %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "Skrypt %s nie powiódÅ‚ siÄ™, stan wyjÅ›cia %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "Nieznany format" + +#: lib/rpmte.c:820 +msgid "install" +msgstr "instalacja" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "usuniÄ™cie" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "nie można otworzyć bazy danych pakietów w %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "dodatkowe \"(\" w etykiecie pakietu: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "brak \"(\" w etykiecie pakietu: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "brak \")\" w etykiecie pakietu: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: odczytanie klucza publicznego nie powiodÅ‚o siÄ™.\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "transakcji" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "sigh rozmiar(%d): BÅĘDNY, read zwróciÅ‚o %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sigh magic: BÅĘDNE\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sigh znaczników: BÅĘDNE, liczba znaczników(%d) poza zakresem\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sigh dane: BÅĘDNE, liczba bajtów(%d) poza zakresem\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sigh blob(%d): BÅĘDNY, read zwróciÅ‚o %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "sigh znacznik[%d]: BÅĘDNY, znacznik %d typ %d offset %d licznik %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "sigh wczytanie: BÅĘDNE\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh wyrównanie(%zd): BÅĘDNE, odczytano %zd bajtów\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh rozmiar podpisu(%zd): BÅĘDNY, fstat(2) nie powiodÅ‚o siÄ™\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "Nie można odczytać niezmiennego regionu nagłówka. Uszkodzony pakiet?\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "Skrót MD5:" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "Skrót SHA1 nagłówka:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Nagłówek " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Sprawdzenie podpisu: BÅĘDNE PARAMETRY\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Podpis: NIEZNANY (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "pominiÄ™to" + +#: lib/transaction.c:1388 +msgid "failed" +msgstr "nie powiodÅ‚o siÄ™" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "brak %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "NiespeÅ‚nione zależnoÅ›ci dla %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "brak { po %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "brak } po %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "pusty format znacznika" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "pusta nazwa znacznika" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "nieznany znacznik" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "oczekiwano ] na koÅ„cu tablicy" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "nieoczekiwane ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "nieoczekiwane }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "oczekiwano ? w wyrażeniu" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "oczekiwano { po ? w wyrażeniu" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "oczekiwano } w wyrażeniu" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "oczekiwano : po podwyrażeniu ?" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "oczekiwano { po : w wyrażeniu" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "oczekiwano | na koÅ„cu wyrażenia" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "iterator tablicy użyty na tablicach o różnych rozmiarach" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "Tworzenie %d brakujÄ…cych indeksów, proszÄ™ czekać...\n" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "nie można otworzyć indeksu %s używajÄ…c bazy danych%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "Å›cieżka bazy danych nie zostaÅ‚a ustawiona\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "bÅ‚Ä…d(%d) podczas otrzymywania wpisów \"%s\" z indeksu %s\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: pomijanie" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "bÅ‚Ä…d(%d) podczas zapisywania wpisu #%d do %s\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec nie powiodÅ‚o siÄ™: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp nie powiodÅ‚o siÄ™: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: pomijanie" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: pobrano uszkodzony nagłówek #%u - pomijanie.\n" + +#: lib/rpmdb.c:2228 +#, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "bÅ‚Ä…d(%d:%s) podczas pobierania nastÄ™pnego klucza z indeksu %s\n" + +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "bÅ‚Ä…d(%d) podczas dodawania wpisu nagłówka #%d\n" + +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "bÅ‚Ä…d(%d) podczas usuwania wpisu nagłówka #%d\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: nie można odczytać nagłówka pod 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "bÅ‚Ä…d(%d) podczas ustawiania wpisów \"%s\" z indeksu %s\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "bÅ‚Ä…d(%d) podczas zapisywania wpisu \"%s\" do %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "bÅ‚Ä…d(%d) usuwania wpisu \"%s\" z %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "bÅ‚Ä…d(%d) podczas przydzielania nowej instancji pakietu\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "bÅ‚Ä…d(%d) podczas zapisywania wpisu %s do %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "Å›cieżka bazy danych nie zostaÅ‚a ustawiona" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "utworzenie katalogu %s nie powiodÅ‚o siÄ™: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "nagłówek #%u w bazie danych jest bÅ‚Ä™dny - pomijanie.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "nie można dodać wpisu bÄ™dÄ…cego oryginalnie przy %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"przebudowanie bazy danych nie powiodÅ‚o siÄ™: oryginalna baza danych pozostaÅ‚a " +"na miejscu\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "zamiana poprzedniej bazy danych na nowÄ… nie powiodÅ‚a siÄ™.\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "aby odzyskać, należy zastÄ…pić pliki w %s plikami z %s" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "usuniÄ™cie katalogu %s nie powiodÅ‚o siÄ™: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "bÅ‚Ä…d bazy danych%d(%d) z %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "bÅ‚Ä…d bazy danych%d(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "nie można otrzymać blokady %s na %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "współdzielonej" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "wyÅ‚Ä…cznej" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "nieprawidÅ‚owy typ indeksu %x w %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "nierozpoznana opcja bazy danych: \"%s\" zignorowano.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s ma nieprawidÅ‚owÄ… wartość liczbowÄ…, pominiÄ™to\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s ma za dużą lub za maÅ‚Ä… wartość long, pominiÄ™to\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s ma za dużą lub za maÅ‚Ä… wartość caÅ‚kowitÄ…, pominiÄ™to\n" + +#: plugins/sepolicy.c:220 +#, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Odkodowanie polityki dla %s nie powiodÅ‚o siÄ™\n" + +#: plugins/sepolicy.c:227 +#, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Utworzenie pliku tymczasowego dla %s nie powiodÅ‚o siÄ™: %s\n" + +#: plugins/sepolicy.c:233 +#, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Zapisanie polityki %s do pliku %s nie powiodÅ‚o siÄ™\n" + +#: plugins/sepolicy.c:305 +msgid "Failed to create semanage handle\n" +msgstr "Utworzenie obsÅ‚ugi semanage nie powiodÅ‚o siÄ™\n" + +#: plugins/sepolicy.c:311 +msgid "Failed to connect to policy handler\n" +msgstr "PoÅ‚Ä…czenie z obsÅ‚ugÄ… polityki nie powiodÅ‚o siÄ™\n" + +#: plugins/sepolicy.c:315 +#, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "RozpoczÄ™cie transakcji polityki nie powiodÅ‚o siÄ™: %s\n" + +#: plugins/sepolicy.c:346 +#, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "UsuniÄ™cie tymczasowego pliku polityki %s nie powiodÅ‚o siÄ™: %s\n" + +#: plugins/sepolicy.c:394 +#, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Zainstalowanie moduÅ‚u polityki nie powiodÅ‚o siÄ™: %s (%s)\n" + +#: plugins/sepolicy.c:424 +#, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "UsuniÄ™cie moduÅ‚u polityki nie powiodÅ‚o siÄ™: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, c-format +msgid "Failed to fork process: %s\n" +msgstr "Rozdzielenie procesu nie powiodÅ‚o siÄ™: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, c-format +msgid "Failed to execute %s: %s\n" +msgstr "Wykonanie %s nie powiodÅ‚o siÄ™: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, c-format +msgid "%s terminated abnormally\n" +msgstr "%s zostaÅ‚o nienormalnie zakoÅ„czone\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, c-format +msgid "%s failed with exit code %i\n" +msgstr "%s nie powiodÅ‚o siÄ™ z kodem wyjÅ›cia %i\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "Wprowadzenie zmian w polityce nie powiodÅ‚o siÄ™\n" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "RozwiniÄ™cie makra restorecon nie powiodÅ‚o siÄ™" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" +"Ponowne nadanie etykiet systemowi plików nie powiodÅ‚o siÄ™. Pliki mogÄ… " +"posiadać bÅ‚Ä™dne etykiety\n" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" +"Ponowne wczytanie kontekstów plików nie powiodÅ‚o siÄ™. Pliki mogÄ… posiadać " +"bÅ‚Ä™dne etykiety\n" + +#: plugins/sepolicy.c:602 +#, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Wydobycie polityki z %s nie powiodÅ‚o siÄ™\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "bÅ‚Ä…d: wywoÅ‚anie jÄ™zyka Python %s nie powiodÅ‚o siÄ™, przerywanie.\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktywne %d puste %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(puste)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(puste)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Makro %%%s posiada niezakoÅ„czone ciaÅ‚o\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Makro %%%s posiada niedozwolonÄ… nazwÄ™ (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Makro %%%s posiada niezakoÅ„czone opcje\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "Makro %%%s posiada puste ciaÅ‚o\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "RozwiniÄ™cie makra %%%s nie powiodÅ‚o siÄ™\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Makro %%%s posiada niedozwolonÄ… nazwÄ™ (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Makro %%%s (%s) nie zostaÅ‚o użyte poniżej poziomu %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Nieznana opcja %c w %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" +"Za dużo poziomów rekurencji w rozwiniÄ™ciu makra. Prawdopodobnie jest to " +"spowodowane rekurencyjnÄ… deklaracjÄ… makra.\n" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "NiezakoÅ„czone %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Makro niemożliwe do przetworzenia po %%\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "bÅ‚Ä…d podczas tworzenia pliku tymczasowego %s: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Plik %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Plik %s jest mniejszy niż %u bajtów\n" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "utworzenie katalogu nie powiodÅ‚o siÄ™" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "nieprawidÅ‚owa skÅ‚adnia skryptu Lua: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "nieprawidÅ‚owa skÅ‚adnia skryptu Lua: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "skrypt Lua nie powiódÅ‚ siÄ™: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "nieprawidÅ‚owa skÅ‚adnia pliku Lua: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "hak Lua nie powiódÅ‚ siÄ™: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(brak bÅ‚Ä™du)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "krytyczny bÅ‚Ä…d: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "bÅ‚Ä…d: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "ostrzeżenie: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "przydzielenie pamiÄ™ci (%u bajtów) zwróciÅ‚o NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "V%d %s/%s %s, identyfikator klucza %s" + +#: rpmio/rpmpgp.c:1369 +msgid "(none)" +msgstr "(brak)" + +#: rpmio/rpmpgp.c:1652 +#, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Zarejestrowanie obsÅ‚ugi rozdzielenia nie powiodÅ‚o siÄ™: %m\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite nie powiodÅ‚o siÄ™: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush nie powiodÅ‚o siÄ™: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "NieobsÅ‚ugiwany algorytm mieszania PGP %d\n" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "NieobsÅ‚ugiwany algorytm klucza publicznego PGP %d\n" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "Nie można utworzyć potoku do podpisania: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "wykonanie gpg nie powiodÅ‚o siÄ™ (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "zapisanie podpisu przez gpg nie powiodÅ‚o siÄ™\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "nie można odczytać podpisu\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "rpmMkTemp nie powiodÅ‚o siÄ™\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead nie powiodÅ‚o siÄ™: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature nie powiodÅ‚o siÄ™: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "otwarcie %s nie powiodÅ‚o siÄ™: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: odczytanie manifestu nie powiodÅ‚o siÄ™: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "bez sprawdzania podpisu nagłówka+danych" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: za dużo UID-ów\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: za dużo UID-ów\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: za dużo UID-ów\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: za dużo GID-ów\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: za dużo GID-ów\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: za dużo GID-ów\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "zignorowanie relacji nazw pakietów [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "dodanie sugerowanych pakietów do transakcji" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "bez sugerowania sposobów speÅ‚nienia brakujÄ…cych zależnoÅ›ci" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Nie można wykonać chdir do %s: %s\n" diff --git a/po/pt.gmo b/po/pt.gmo new file mode 100644 index 0000000..9a77945 Binary files /dev/null and b/po/pt.gmo differ diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..7568d0e --- /dev/null +++ b/po/pt.po @@ -0,0 +1,4290 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2002-02-14 10:51+0000\n" +"Last-Translator: José Nuno Coelho Sanarra Pires \n" +"Language-Team: pt " +msgstr "" +"criar através do %prep (desempacotar o código e aplicar patches) do " +"" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "criar através do %build (%prep e depois compilar) do " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"criar através do %install (%prep, %build e depois instalar) do " + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "verificar a secção %files do " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "criar os pacotes binários e de código a partir do " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "criar só o pacote binário a partir do " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "criar só o pacote com código-fonte a partir do " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"criar através do %prep (desempacotar o código e aplicar patches) do " + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "criar através do %build (%prep e depois compilar) do " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"criar através do %install (%prep, %build e depois instalar) do " + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "verificar a secção %files do " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "criar os pacotes binários e de código a partir do " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "criar só o pacote binário a partir do " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "criar só o pacote com código-fonte a partir do " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "criar o pacote binário a partir do " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"criar através do %install (%prep, %build e depois instalar) do " + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "ignorar a raiz de criação" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "apagar as directorias de criação quando acabar" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ignorar as directivas ExcludeArch: do ficheiro spec" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "depurar máquina de estados de ficheiros" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "não executar nenhuma etapa da criação" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "não verificar as dependências de compilação" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "gerar um cabeçalho do pacote compatível com os pacotes do rpm[23]" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "não aceitar as mensagens de i18N do ficheiro spec" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "apagar o código-fonte quando acabar" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "apagar o ficheiro spec quando acabar" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "saltar directamente para a etapa indicada (só para c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "ignorar a plataforma-alvo" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "Opções de criação com [ | | ]:" + +#: rpmbuild.c:231 +#, fuzzy +msgid "Failed build dependencies:\n" +msgstr "não consegui construir dependências:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Não consegui abrir ficheiro spec %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Não consegui abrir o 'pipe' para o tar: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Não consegui ler o ficheiro spec do %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Não consegui mudar o nome de %s para %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "Não consegui analisar o %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "O ficheiro %s não é um ficheiro normal.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "O ficheiro %s não parece ser um ficheiro spec.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "A construir plataformas alvo: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "A construir para o alvo %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "inicializar a base de dados" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"reconstruir as listas invertidas da base dados com os cabeçalhos dos pacotes " +"instalados" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "verificar ficheiros da base de dados" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Opções da base de dados:" + +#: rpmkeys.c:23 +#, fuzzy +msgid "verify package signature(s)" +msgstr "verificar a assinatura do pacote" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Opções de assinatura:" + +#: rpmkeys.c:61 rpmsign.c:144 +#, fuzzy +msgid "no arguments given" +msgstr "não foram indicados argumentos para a pesquisa" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "instala o pacote" + +#: rpmsign.c:27 +#, fuzzy +msgid "sign package(s) (identical to --addsign)" +msgstr "assinar um pacote (retira a assinatura actual)" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "verificar a assinatura do pacote" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Opções de assinatura:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Não consegui executar %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Precisa definir o \"%%_gpg_name\" no seu ficheiro de macros\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Indique a palavra-chave: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "A palavra-chave está correcta.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "A verificação da palavra-chave falhou\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "pesquisar um ficheiro spec" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "pesquisar um ficheiro spec" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "usar o formato de pesquisa seguinte" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Opções de assinatura:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "não foram indicados argumentos para a pesquisa" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Não consegui abrir um ficheiro temporário.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "A executar(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "A execução de %s falhou (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Código de saída inválido do %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"Erros de criação do RPM:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "erro de sintaxe ao analisar o ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "erro de sintaxe ao analisar o &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "erro de sintaxe ao analisar o ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "erro de análise na expressão\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "( não correspondido\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- só em números\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! só em números\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "os tipos têm de corresponder\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / não suportados em cadeias de caracteres\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- não suportado em cadeias de caracteres\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& e || não suportados em cadeias de caracteres\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "erro de sintaxe na expressão\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Falta um '(' em %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Falta um ')' em %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Elemento %s inválido: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "Falta um %s em %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Carácter sem ser espaço a seguir a %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Sintaxe inválida: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Spec de modo inválido: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Spec de dirmode inválido: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Tamanho anormal do locale: \"%.*s\" no %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Locale %.*s duplicado no %%lang(%s)\n" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Elemento %s inválido: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Só um argumento no %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Dois ficheiros na mesma linha: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "O ficheiro tem de começar por \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Não é possível misturar o %%doc especial com outras formas: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Ficheiro listado duas vezes: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s unlink de %s falhou: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "A 'symlink' aponta para a BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Ficheiro não encontrado: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Ficheiro não encontrado: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, fuzzy, c-format +msgid "%s: public key read failed.\n" +msgstr ":%s: o readLead falhou\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "A macro %%%s não conseguiu ser expandida\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "O ficheiro precisa de começar por \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Glob não permitido: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Ficheiro não encontrado pelo glob: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Ficheiro não encontrado pelo glob: %s\n" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Não consegui abrir o ficheiro do %%files %s: %s\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "linha: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Ficheiro inválido: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Dono/grupo inválido: %s\n" + +#: build/files.c:2095 +#, fuzzy, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "a abertura do pacote falhou%s%s: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "A processar os ficheiros: %s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "a criação do pacote falhou no ficheiro %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "a criação do arquivo falhou: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "a escrita do cpio_copy falhou: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "a leitura do cpio_copy falhou: %s\n" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "linha: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Não consegui canonizar o nome da máquina: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Não consegui abrir o ficheiro PreIn: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Não consegui abrir o ficheiro PreUn: %s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Não consegui abrir o ficheiro PreIn: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Não consegui abrir o ficheiro PostIn: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Não consegui abrir o ficheiro PostUn: %s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Não consegui abrir o ficheiro PostIn: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Não consegui abrir o ficheiro VerifyScript: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Não consegui aceder ao 'script' Trigger: %s\n" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Tipo de ícone desconhecido: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Não consegui criar região imutável do cabeçalho.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "" +"Não consegui gravar o cabeçalho temporário\n" +"\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Dados de CSA inválidos\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Não consegui reler o cabeçalho do assinatura.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Não consigo aceder ao %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Não consegui gravar o pacote: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Não consegui abrir o sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Não consegui ler o cabeçalho de %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Não consegui gravar o cabeçalho de %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Não consegui ler o conteúdo de %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Não consegui escrever o conteúdo de %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Gravei: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "A executar(%s): %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "A execução de %s falhou (%s): %s\n" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "A verificação da palavra-chave falhou\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Não consigo gerar o ficheiro de saída para o pacote %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "não consigo criar o %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "linha %d: segundo %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "As entradas de %%changelog têm de começar por *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "entrada de %%changelog incompleta\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "data inválida no %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "O %%changelog não está na ordem cronológica descendente\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "falta o nome no %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "falta a descrição no %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "linha %d: Erro ao analisar a %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "linha %d: Opção inválida %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "linha %d: Demasiados nomes: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "linha %d: O pacote não existe: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "linha %d: Segunda descrição\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "linha %d: Erro ao analisar o %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "linha %d: Erro ao analisar o %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "linha %d: Número inválido: %s\n" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "linha %d: Número no%s inválido: %d\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "linha %d: Número %s inválido: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "o \"%s\" especifica vários pacotes\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "A arquitectura está excluída: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "A arquitectura não está incluída: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "O SO está excluído: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "O SO não está incluído: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "O campo %s tem de estar presente no pacote: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Entradas %s duplicadas no pacote: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Não consegui abrir o ícone %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Não consegui ler o ícone %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Tipo de ícone desconhecido: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "linha %d: Opção só recebe um parâmetro: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "linha %d: Carácter '-' ilegal no %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "linha %d: Carácter '-' ilegal no %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "linha %d: Carácter '-' ilegal no %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "Linha %d: Opção inválida: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "linha %d: Opção em branco: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "linha %d: Os prefixos não podem acabar em \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "linha %d: A docdir tem de começar por '/': %s\n" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "linha %d: O campo Epoch/Serial tem de ser um número: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "linha %d: Qualificadores %s: inválidos: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "linha %d: Formato da BuildArchitecture inválido: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Erro interno: Opção esquisita %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "linha %d: Necessária a versão: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Descrição do pacote inválida: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "O pacote já existe: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "linha %d: Opção desconhecida: %s\n" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "O BuildRoot não pode ser o \"/\": %s\n" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "O BuildRoot não pode ser o \"/\": %s\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Código-fonte inválido: %s: %s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "Sem número de 'patch' %d\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "Sem número de fonte %d\n" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "o pacote de código-fonte não contem um ficheiro .spec\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Não consigo transferir o nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Erro ao analisar o %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "linha %d: Argumento inválido para %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "linha %d: Opção inválida do %%setup %s: %s\n" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "número de pacote inválido: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "linha %d: segundo %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"linha %d: Os elementos de dependências têm de começar por alfanuméricos, '_' " +"ou '/': %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "linha %d: Nome do ficheiro com versão não permitido: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "linha %d: Necessária a versão: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "linha %d: Número inválido: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "linha %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "linha %d: os 'triggers' (que activam) têm de ter --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "linha %d: Erro ao analisar o %s: %s\n" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "linha %d: o programa de 'script' tem de começar por '/': %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "linha %d: o programa de 'script' tem de começar por '/': %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "linha %d: Segundo %s\n" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "linha %d: Erro ao analisar a %%description: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "linha %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Incapaz de aceder ao %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "%%if não fechado\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: o parseExpressionBoolean devolve %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: Descobri um %%else sem um %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: Descobri um %%endif sem um %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "instrução %%include desorganizada\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Não foram encontradas arquitecturas compatíveis para as quais criar\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "O pacote não tem uma %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Não consegui ler o ficheiro spec do %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Não consegui ler o ficheiro spec do %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Não consegui ler o ficheiro spec do %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Não consegui abrir o 'pipe' para o tar: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Erro ao analisar o %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "A executar(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Falta um %s em %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Demasiados argumentos na linha de dados em %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "A processar os ficheiros: %s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "linha %d: Número inválido: %s\n" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Não consegui executar à parte o %s: %s\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Não consegui executar o %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Não consegui executar à parte o %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s falhou: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "não consegui escrever todos os dados em %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "o gpg não conseguiu gravar a assinatura\n" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "o acesso ao %s falhou: %s\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "%s rmdir de %s falhou: %s\n" + +#: build/rpmfc.c:999 +#, fuzzy, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "%s rmdir de %s falhou: %s\n" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "A procurar o %s: (usando o %s)...\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Não consegui encontrar o %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "a pesquisa do ficheiro spec %s falhou, não consigo analisar\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(erro 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Código de integridade inválido" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Cabeçalho inválido/ilegível" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Tamanho do cabeçalho demasiado grande" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Tipo de ficheiro desconhecido" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Falta(m) o(s) 'hard link(s)'" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "erro na soma de MD5" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Erro interno" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "Ficheiro de arquivo não está no cabeçalho" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " falhou - " + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "o pacote %s já está instalado" + +#: lib/depends.c:245 +#, fuzzy, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "o pacote %s já está instalado" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(não é um número)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(não é um base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(tipo inválido)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(não é um blob)" + +#: lib/formats.c:415 +#, fuzzy +msgid "(invalid xml type)" +msgstr "(tipo inválido)" + +#: lib/formats.c:485 +#, fuzzy +msgid "(not an OpenPGP signature)" +msgstr "ignorar as assinaturas de PGP" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "substituído " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "não instalado " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "partilhado" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "falta %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(desconhecido %3d)" + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(não é um número)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "o utilizador %s não existe - a usar o root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "o grupo %s não existe - a usar o root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" +"o ficheiro de arquivo %s não foi encontrado na lista de ficheiros do " +"cabeçalho\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s gravado como %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s rmdir de %s falhou: Directoria não está vazia\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir de %s falhou: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s unlink de %s falhou: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s criado como %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: o rpmReadSignature falhou\n" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Nenhuma assinatura disponível\n" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr ":%s: o readLead falhou\n" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: O fread falhou: %s\n" + +#: lib/package.c:794 +#, fuzzy, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "o %s não pode ser instalado\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +#, fuzzy +msgid "print macro expansion of EXPR" +msgstr "imprimir a expansão da macro +" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +#, fuzzy +msgid "read instead of default file(s)" +msgstr "ler o em vez do(s) ficheiro(s) de macros por omissão" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +#, fuzzy +msgid "don't verify package digest(s)" +msgstr "não verificar as dependências do pacote" + +#: lib/poptALL.c:176 +#, fuzzy +msgid "don't verify database header(s) when retrieved" +msgstr "não verifica a arquitectura do pacote" + +#: lib/poptALL.c:178 +#, fuzzy +msgid "don't verify package signature(s)" +msgstr "verificar a assinatura do pacote" + +#: lib/poptALL.c:181 +#, fuzzy +msgid "send stdout to CMD" +msgstr "manda o stdout para " + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +#, fuzzy +msgid "use ROOT as top level directory" +msgstr "usa como a directoria de topo" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "mostrar as opções de pesquisa conhecidas" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "mostra a configuração final do rpmrc e das macros" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "devolver um resultado menos detalhado" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "devolver um resultado mais detalhado" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "imprime a versão do RPM que está a usar" + +#: lib/poptALL.c:208 +#, fuzzy +msgid "debug payload file state machine" +msgstr "depurar máquina de estados de ficheiros" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "depurar a E/S da rpmio" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "as directorias de exclusão têm de começar por /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "os novos locais têm de começar por /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "os novos locais têm de conter um =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "os novos locais têm de ter um / a seguir ao =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"instala todos os ficheiros, mesmo as configurações que de outro modo seriam " +"ignoradas" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"remove todos os pacotes que correspondam a (normalmente aparece um " +"erro se o especifica vários pacotes)" + +#: lib/poptI.c:123 +#, fuzzy +msgid "relocate files in non-relocatable package" +msgstr "muda os ficheiros de sítio num pacote de localização fixa" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "apaga (desinstala) o pacote" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +#, fuzzy +msgid "do not install configuration files" +msgstr "listar todos os ficheiros de configuração" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "não instala a documentação" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "ignorar os ficheiros com a componente inicial " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "abreviatura para --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "actualizar o pacote(s) se já estiver instalado" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "mostra cardinais enquanto o pacote instala (conveniente com o -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "não verifica a arquitectura do pacote" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "não verifica o sistema operativo do pacote" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "não verifica o espaço em disco antes de instalar" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "instala a documentação" + +#: lib/poptI.c:164 +#, fuzzy +msgid "install package(s)" +msgstr "instala o pacote" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "actualiza a base de dados, mas não altera o sistema de ficheiros" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "não verifica as dependências do pacote" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "não verificar o MD5 dos ficheiros" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "não verificar o MD5 dos ficheiros" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "listar todos os ficheiros de configuração" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" +"não reorganiza a instalação dos pacotes para satisfazer as dependências" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "não executar nenhuns scripts do pacote" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "não executar o script %%pre (se existir)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "não executar o script %%post (se existir)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "não executar o script %%preun (se existir)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "não executar o script %%postun (se existir)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "não executar nenhum dos scripts activados por este pacote" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "não executar nenhum dos scripts %%triggerprein" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "não executar nenhum dos scripts %%triggerin" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "não executar nenhum dos scripts %%triggerun" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "não executar nenhum dos scripts %%triggerpostun" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"actualiza para um versão antiga do pacote (o --force faz isto " +"automaticamente)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "mostra percentagens enquanto o pacote instala" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "muda o pacote para , se for possível" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "muda os ficheiros de para " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "reinstalar se o pacote já estiver presente" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "não instala, mas indica se iria funcionar ou não" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "actualizar pacote(s)" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "pesquisar/verificar todos os pacotes" + +#: lib/poptQV.c:69 +#, fuzzy +msgid "rpm checksig mode" +msgstr "modo de verificação do rpm" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "pesquisar/verificar o(s) pacote(s) que contém(êm) o ficheiro" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "pesquisar/verificar o(s) pacote(s) no grupo" + +#: lib/poptQV.c:75 +#, fuzzy +msgid "query/verify a package file" +msgstr "pesquisar/verificar todos os pacotes" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "pesquisar/verificar o(s) pacote(s) com o identificador do pacote" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "pesquisar/verificar o(s) pacote(s) com o identificador do cabeçalho" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "modo de pesquisa do rpm" + +#: lib/poptQV.c:85 +#, fuzzy +msgid "query/verify a header instance" +msgstr "pesquisar/verificar o(s) pacote(s) com o identificador do cabeçalho" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "pesquisar/verificar o(s) pacote(s) de transacção de instalação" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "pesquisar o(s) pacote(s) activados pelo pacote" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "modo de verificação do rpm" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "pesquisar/verificar o(s) pacote(s) que precisa duma dependência" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "pesquisar/verificar o(s) pacote(s) que oferecem uma dependência" + +#: lib/poptQV.c:98 +#, fuzzy +msgid "do not glob arguments" +msgstr "não foram indicados argumentos para a pesquisa" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "listar todos os ficheiros de configuração" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "listar todos os ficheiros de documentação" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "apresentar a informação básica do ficheiro" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "listar os ficheiros no pacote" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "ignorar ficheiros %%ghost" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "mostrar os estados dos ficheiros listados" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "não verificar os tamanho dos ficheiros" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "não verificar as ligações simbólicas dos ficheiros" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "não verificar o dono dos ficheiros" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "não verificar o grupo dos ficheiros" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "não verificar hora de modificação dos ficheiros" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "não verificar o modo dos ficheiros" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "não verificar os tamanho dos ficheiros" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "não verificar os ficheiros no pacote" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "não verificar os ficheiros no pacote" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "não verificar as dependências do pacote" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +#, fuzzy +msgid "don't execute verify script(s)" +msgstr "não executar o %verifyscript (se existir)" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "falta a arquitectura para o %s em %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "" +"esperava-se um pacote com código-fonte, foi encontrado um pacote binário\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "o pacote de código-fonte não contem um ficheiro .spec\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "a abertura do pacote falhou%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " no ficheiro " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s falhou no ficheiro %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s falhou: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "formato incorrecto: %s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(não contém ficheiros)" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "substituído " + +#: lib/query.c:166 +msgid "not installed " +msgstr "não instalado " + +#: lib/query.c:169 +msgid "net shared " +msgstr "partilhado" + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(sem estado) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(desconhecido %3d)" + +#: lib/query.c:198 +#, fuzzy +msgid "package has not file owner/group lists\n" +msgstr "o pacote nem tem um dono do ficheiro ou as listas de IDs\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "o pacote nem tem um dono do ficheiro ou as listas de IDs\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "o grupo %s não contém nenhum pacote\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "nenhum pacote activa o %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "malformado %s: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "nenhum pacote coincide com %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "nenhum pacote precisa do %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "nenhum pacote oferece o %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "ficheiro %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "o ficheiro %s não pertence a nenhum pacote\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "número de pacote inválido: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "o registo %u não pôde ser lido\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "o pacote %s não está instalado\n" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "opção desconhecida" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr ":%s: o readLead falhou\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr ":%s: o readLead falhou\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr ":%s: o readLead falhou\n" + +#: lib/rpmchecksig.c:116 +#, fuzzy, c-format +msgid "%s: headerRead failed\n" +msgstr ":%s: o readLead falhou\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NÃO-OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (FALTAM AS CHAVES:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (CHAVES SUSPEITAS:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: o acesso falhou: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "falhou a remoção da directoria %s: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s rmdir de %s falhou: Directoria não está vazia\n" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "falhou a remoção da directoria %s: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "falhou a remoção da directoria %s: %s\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NÃO" + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "SIM" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +#, fuzzy +msgid "internal support for lua scripts." +msgstr "- não suportado em cadeias de caracteres\n" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "o pacote %s já está instalado" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "o acesso ao %s falhou: %s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "nenhum pacote coincide com %s: %s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "A preparar..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "A preparar os pacotes para a instalação..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +#, fuzzy +msgid "Failed dependencies:\n" +msgstr "dependências falhadas:\n" + +#: lib/rpminstall.c:305 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "nenhum pacote coincide com %s: %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "o %s não pode ser instalado\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "A obter o %s\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "a ignorar o %s - a transferência falhou - %s\n" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "o pacote %s não pode ser mudado de sítio\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "erro ao ler do ficheiros %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "o %s precisa duma versão mais recente do RPM\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "o \"%s\" especifica vários pacotes\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "não consigo aceder ao %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "A instalar o %s\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "o argumento não é um pacote RPM\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s: Nenhuma assinatura disponível\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "a leitura falhou: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "o argumento não é um pacote RPM\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "não consigo trancar o %s no %s/%s\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "não consigo trancar o %s no %s/%s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "falhei ao aceder ao %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Não consegui mudar o nome de %s para %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Não consegui mudar o nome de %s para %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "" + +#: lib/rpmprob.c:115 +#, fuzzy, c-format +msgid "package %s is intended for a %s architecture" +msgstr "o pacote %s é para uma arquitectura diferente" + +#: lib/rpmprob.c:120 +#, fuzzy, c-format +msgid "package %s is intended for a %s operating system" +msgstr "o pacote %s é para um sistema operativo diferente" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "o pacote %s já está instalado" + +#: lib/rpmprob.c:128 +#, fuzzy, c-format +msgid "path %s in package %s is not relocatable" +msgstr "a directoria %s no pacote %s não pode ser mudada de sítio" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" +"o ficheiro %s está em conflito com as tentativas de instalação do %s e %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"o ficheiro %s da instalação do %s está em conflito com o ficheiro do pacote " +"%s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "o pacote %s (que é mais recente que o %s) já está instalado" + +#: lib/rpmprob.c:148 +#, fuzzy, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"a instalação do pacote %s precisa de %%cb no sistema de ficheiros %s" + +#: lib/rpmprob.c:158 +#, fuzzy, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"a instalação do pacote %s precisa de % 'inodes' no sistema de " +"ficheiros %s" + +#: lib/rpmprob.c:162 +#, fuzzy, c-format +msgid "%s is needed by %s%s" +msgstr " é necessário pelo %s-%s-%s\n" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +#, fuzzy +msgid "(installed) " +msgstr "não instalado " + +#: lib/rpmprob.c:167 +#, fuzzy, c-format +msgid "%s conflicts with %s%s" +msgstr " está em conflito com o %s-%s-%s\n" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr " é necessário pelo %s-%s-%s\n" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "encontrado o erro desconhecido %d ao manipular o pacote %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "falta o segundo ':' em %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "falta o nome da arquitectura em %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Linha de dados incompleta em %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Demasiados argumentos na linha de dados em %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Número de arq./SO errado: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Linha por omissão incompleta em %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Demasiados argumentos na linha por omissão em %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "falta um ':' (encontrado um 0x%02x) em %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "faltam argumentos para o %s em %s:%d\n" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "não consigo abrir o %s em %s:%d: %s\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "falta a arquitectura para o %s em %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "má opção '%s' em %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Sistema desconhecido: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Por favor contacte o %s\n" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Não consegui abrir o %s para leitura: %s.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "falhou a remoção da directoria %s: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Não consegui executar à parte o %s: %s\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Não consegui executar à parte o %s: %s\n" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s: %s script falhou (%d), a saltar %s-%s-%s\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "" +"a execução do 'scriptlet' %s do %s-%s-%s falhou com código de erro %d\n" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "" +"a execução do 'scriptlet' %s do %s-%s-%s falhou com código de erro %d\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "opção desconhecida" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "não instalado " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "não consigo abrir a base de dados Packages em %s\n" + +#: lib/rpmts.c:193 +#, fuzzy, c-format +msgid "extra '(' in package label: %s\n" +msgstr "número de pacote inválido: %s\n" + +#: lib/rpmts.c:211 +#, fuzzy, c-format +msgid "missing '(' in package label: %s\n" +msgstr "Falta um '(' em %s %s\n" + +#: lib/rpmts.c:219 +#, fuzzy, c-format +msgid "missing ')' in package label: %s\n" +msgstr "número de pacote inválido: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr ":%s: o readLead falhou\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "não verificar o SHA1 do cabeçalho" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, fuzzy, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Assinatura: tamanho(%d)+pad(%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "O %s falhou\n" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "falta %s" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Dependências não satisfeitas para o %s-%s-%s: " + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "falta um { depois do %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "falta um } depois do %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "formato da opção em branco" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "nome da opção em branco" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "opção desconhecida" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] esperado no fim do vector" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "] inesperado" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "} inesperado" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "esperado um ? na expressão" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "esperado um { a seguir ao ? na expressão" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "esperado um } na expressão" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "esperado um : a seguir à sub-expressão ?" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "esperado um { a seguir ao : na expressão" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "esperado um | no fim da expressão" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "não consigo abrir o índice de %s usando o db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "não foi definido o dbpath\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "erro(%d) ao obter os registos \"%s\" do índice %s\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, fuzzy, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "erro(%d) ao guardar o registo %s em %s\n" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: O Fseek falhou: %s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: o acesso falhou: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, fuzzy, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: recebida instância do cabeçalho #%u estragada, a ignorar.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "erro(%d) ao obter os registos \"%s\" do índice %s\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "erro(%d) ao obter os registos \"%s\" do índice %s\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "erro(%d) ao obter os registos \"%s\" do índice %s\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: não consigo ler o cabeçalho em 0x%x\n" + +#: lib/rpmdb.c:2434 +#, fuzzy, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "erro(%d) ao obter os registos \"%s\" do índice %s\n" + +#: lib/rpmdb.c:2453 +#, fuzzy, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "erro(%d) ao guardar o registo %s em %s\n" + +#: lib/rpmdb.c:2463 +#, fuzzy, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "erro(%d) ao remover o registo %s do %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "erro(%d) ao criar uma nova instância do pacote\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "erro(%d) ao guardar o registo %s em %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "não foi definido o dbpath" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "falhou a remoção da directoria %s: %s\n" + +#: lib/rpmdb.c:2897 +#, fuzzy, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "o número do registo %u na base de dados está errado -- a ignorar.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "não consigo adicionar o registo originalmente em %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"falhou a reconstrução da base de dados: a base de dados original mantém-se\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "falhou a substituição da base de dados antiga pela nova!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "substituir os ficheiros em %s por ficheiros de %s a recuperar" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "falhou a remoção da directoria %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "erro do db%d (%d) do %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "erro do db%d (%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "não consigo trancar o %s no %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "partilhado" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "exclusivo" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "verifiquei o índice do db %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "opção do db desconhecida: \"%s\" ignorada.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "O %s tem um valor numérico inválido, foi ignorado\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "O %s tem um valor demasiado elevado ou pequeno, foi ignorado\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "O %s tem um valor inteiro demasiado elevado ou pequeno, foi ignorado\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Não consegui ler o ficheiro spec do %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Não consegui executar à parte o %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Não consegui ler o ficheiro spec do %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "não consegui criar o %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Não consegui ligar ao servidor" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "falhei ao aceder ao %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "falhou a remoção da directoria %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Não consegui mudar o nome de %s para %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Não consegui ler o %s: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "falhei ao aceder ao %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "não consegui criar o %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "A macro %%%s tem o conteúdo incompleto\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "A macro %%%s não conseguiu ser expandida\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Não consegui ler o ficheiro spec do %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== activo %d vazio %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(vazio)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(vazio)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "A macro %%%s tem o conteúdo incompleto\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "A macro %%%s tem um nome inválido (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "A macro %%%s tem as opções incompletas\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "A macro %%%s tem o conteúdo em branco\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "A macro %%%s não conseguiu ser expandida\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "A macro %%%s tem um nome ilegal (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "A macro %%%s (%s) não foi usada abaixo do nível %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Opção desconhecida %c em %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "%c não terminado: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Segue-se uma macro impossível de analisar ao %%\n" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "erro ao criar o ficheiro temporário %s\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Ficheiro %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "O ficheiro %s tem menos de %u bytes\n" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "falhou a remoção da directoria %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, fuzzy, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "- não suportado em cadeias de caracteres\n" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "- não suportado em cadeias de caracteres\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: O fwrite falhou: %s\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "número de pacote inválido: %s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: O Fseek falhou: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(nenhum erro)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "erro fatal: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "erro: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "aviso: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "a alocação de memória (%u bytes) devolveu NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "Sem assinatura\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(nenhum erro)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Não consegui ler o ficheiro spec do %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: O fwrite falhou: %s\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: O Fseek falhou: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "o exec falhou\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "o gpg não conseguiu gravar a assinatura\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "incapaz de ler a assinatura\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "o makeTempFile falhou\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: o writeLead falhou: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: o rpmWriteSignature falhou: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "o acesso ao %s falhou: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: a leitura do manifesto falhou: %s\n" + +#: tools/rpmgraph.c:220 +#, fuzzy +msgid "don't verify header+payload signature" +msgstr "verificar a assinatura do pacote" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: demasiados uid's\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: demasiados uid's\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: demasiados uid's\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: demasiados gid's\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: demasiados gid's\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: demasiados gid's\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "ignorar relações entre o nome do pacote [%d]\t%s -> %s\n" + +#, fuzzy +#~ msgid "add suggested packages to transaction" +#~ msgstr "pesquisar/verificar o(s) pacote(s) de transacção de instalação" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Não consegui executar o %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "o --nodeps só pode ser indicado durante a criação, reconstrução, " +#~ "recompilação, instalação, remoção ou verificação do pacote" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "o --root (-r) só pode ser indicado durante a instalação, remoção ou " +#~ "pesquisa do pacote ou na reconstrução da base de dados" + +#, fuzzy +#~ msgid "detect file conflicts between packages" +#~ msgstr "muda os ficheiros de sítio num pacote de localização fixa" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "A base de dados temporária %s já existe\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "pesquisar/verificar o(s) pacote(s) com o identificador do ficheiro" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Spec %%_signature inválido no ficheiro de macros.\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Sobrecarga do tampão de destino\n" + +#~ msgid "no files to sign\n" +#~ msgstr "não existem ficheiros a assinar\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "não consigo aceder ao ficheiro %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "o --sign só pode ser usado na criação do pacote" + +#, fuzzy +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "não verificar o SHA1 do cabeçalho" + +#, fuzzy +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "não verificar o MD5 dos ficheiros" + +#, fuzzy +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "assinar um pacote (retira a assinatura actual)" + +#~ msgid "generate signature" +#~ msgstr "gerar a assinatura" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "'Spec' %%_signature inválido no ficheiro de macros\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "Falha no TIMECHECK: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "gerar os cabeçalhos compatíveis com o formato do rpm4" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Erro interno no processamento de argumentos (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr ":%s: o readLead falhou\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: aceder ao %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: O Fseek falhou: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: o %s não é um pacote RPM\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: a ler o cabeçalho do %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "A gerar a assinatura: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "gerar a assinatura PGP/GPG" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "não foram indicados pacotes para a reconstrução" + +#~ msgid "no spec files given for build" +#~ msgstr "não foram indicados ficheiros spec para a criação" + +#~ msgid "no tar files given for build" +#~ msgstr "não foram indicados ficheiros tar para a criação" + +#~ msgid "%s failed\n" +#~ msgstr "O %s falhou\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Nível de recursividade(%d) maior que o máximo(%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: nome de opção não reconhecido: \"%s\" ignorado\n" + +#, fuzzy +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdb: recebida instância do cabeçalho #%u estragada, a ignorar.\n" + +#, fuzzy +#~ msgid "(rpmlib provides)" +#~ msgstr "%s: %-45s SIM (oferecidos pela rpmlib)\n" + +#, fuzzy +#~ msgid "(db files)" +#~ msgstr "ficheiro db inválido %s\n" + +#, fuzzy +#~ msgid "(db provides)" +#~ msgstr "%s: %-45s SI (oferecidos pelo db)\n" + +#, fuzzy +#~ msgid "(added files)" +#~ msgstr "ficheiro db inválido %s\n" + +#, fuzzy +#~ msgid "(added provide)" +#~ msgstr "%s: %-45s SIM (oferecidos para adição)\n" + +#~ msgid "url port must be a number\n" +#~ msgstr "o porto do URL tem de ser um número\n" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "a criar a directoria %s\n" + +#, fuzzy +#~ msgid "debug package state machine" +#~ msgstr "depurar máquina de estados de ficheiros" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "pesquisar/verificar o(s) pacote(s) de transacção de instalação" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "pesquisar/verificar o(s) pacote(s) de transacção de instalação" + +#, fuzzy +#~ msgid "do not read headers" +#~ msgstr "%s: não consigo ler o cabeçalho em 0x%x\n" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "O ficheiro não corresponde ao prefixo (%s): %s\n" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "falhou a remoção da directoria %s: %s\n" + +#, fuzzy +#~ msgid "use threads for package state machine" +#~ msgstr "depurar máquina de estados de ficheiros" + +#, fuzzy +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: %s script falhou (%d), a saltar %s-%s-%s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "o mntctl() falhou ao devolver o tamanho: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "o mntctl() falhou ao devolver o número de pontos de montagem: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "Não consegui analisar o %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "o ficheiro %s está num dispositivo desconhecido\n" + +#, fuzzy +#~ msgid "use threads for file state machine" +#~ msgstr "depurar máquina de estados de ficheiros" + +#~ msgid "cannot open %s index\n" +#~ msgstr "não consigo abrir o índice do %s\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Incapaz de aceder ao %s: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Incapaz de aceder ao %s: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Não consegui abrir um ficheiro temporário.\n" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "Sistema desconhecido: %s\n" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "A macro %%%.*s não foi encontrada, por isso foi ignorada\n" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr ":%s: o readLead falhou\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "linha %d: Segunda lista de %%files\n" + +#, fuzzy +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "A dependência \"B\" precisa duma época (assumindo a mesma que \"A\")\n" +#~ "\t %s\tB %s\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "O tipo de dados %d não é suportado\n" + +#, fuzzy +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "a remover o %s-%s-%s \"%s\" das relações do tsort.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "CICLO:\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "Tamanho do cabeçalho demasiado grande" + +#, fuzzy +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Opções de verificação (com o -V ou o --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp não encontrado: " + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "não consigo aceder ao ficheiro %s: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "o pgp falhou\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "o pgp não conseguiu gravar a assinatura\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Precisa definir o \"%%_pgp_name\" no seu ficheiro de macros\n" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "opção desconhecida" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "Sem assinatura\n" + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "Sem assinatura\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "'Digest' MD5 estragado: NÃO SUPORTADO\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "O BuildRoot não pode ser o \"/\": %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "O ficheiro spec não pode usar a BuildRoot\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "procurar as mensagens de i18N no catálogo do ficheiro spec" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "gerar os cabeçalhos compatíveis com o formato do rpm[23]" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "não consigo criar o %%%s %s\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "não consigo escrever em %%%s %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "não consigo pesquisar o %s: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "o exec falhou\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "depurar a gestão da 'cache' de URLs" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "substituir as secções i18n no ficheiro spec" + +#, fuzzy +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "não consigo a base de dados do RPM em %s\n" + +#~ msgid "Success" +#~ msgstr "Sucesso" + +#~ msgid "Bad server response" +#~ msgstr "Resposta errada do servidor" + +#~ msgid "Server I/O error" +#~ msgstr "Erro de E/S do servidor" + +#~ msgid "Server timeout" +#~ msgstr "Tempo de espera pelo servidor expirado" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Incapaz de descobrir o endereço da máquina do servidor" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Incapaz de descobrir o nome da máquina do servidor" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Não consigo estabelecer uma ligação de dados ao servidor" + +#~ msgid "I/O error to local file" +#~ msgstr "Erro de E/S no ficheiro local" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Erro ao configurar o servidor remoto para o modo passivo" + +#~ msgid "File not found on server" +#~ msgstr "Ficheiro não encontrado no servidor" + +#~ msgid "Abort in progress" +#~ msgstr "Interrupção em progresso" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Erro desconhecido ou inesperado" + +#, fuzzy +#~ msgid "File tree walk options:" +#~ msgstr "Opções de assinatura:" + +#, fuzzy +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: o acesso falhou: %s\n" + +#, fuzzy +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr ":%s: o readLead falhou\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "a expansão do %s falhou em %s:%d \"%s\"\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "Não consigo expandir o %s\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "Não consigo ler o %s, a HOME é demasiado grande.\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s rmdir de %s falhou: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "Limite atingido para o %%docdir\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "linha %d: Necessário o argumento para o %%patch -b: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "linha %d: Necessário o argumento para o %%patch -z: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "linha %d: argumento inválido para o %%patch -p: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "linha %d: Necessário o argumento para o %%patch -z: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "linha %d: argumento inválido para o %%patch -p: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "Demasiadas 'patches'!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "linha %d: Argumento inválido para o %%patch: %s\n" + +#, fuzzy +#~ msgid "debug option/argument processing" +#~ msgstr "Erro interno no processamento de argumentos (%d) :-(\n" + +#~ msgid "skip %%license files" +#~ msgstr "ignorar ficheiro %%licence" + +#~ msgid "skip %%readme files" +#~ msgstr "ignorar ficheiros %%readme" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "a leitura falhou: %s (%d)\n" + +#~ msgid "rollback takes a time/date stamp argument" +#~ msgstr "'rollback' recebe como argumento uma hora/data" + +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "argumento hora/data inválido para 'rollback'" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "" +#~ "gravar os ficheiros do pacote apagado mudando o nome para sub-directoria" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "gravar ficheiros apagados reempacotando-os" + +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "desinstalador novo, reinstalar velho, pacote(s) voltar à " + +#~ msgid "" +#~ msgstr "" + +#, fuzzy +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Não consegui reler o cabeçalho do assinatura.\n" + +#, fuzzy +#~ msgid "Repackaging..." +#~ msgstr "A preparar..." + +#, fuzzy +#~ msgid "Upgrading..." +#~ msgstr "A preparar..." + +#, fuzzy +#~ msgid "Upgrading packages..." +#~ msgstr "actualizar pacote(s)" + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "A obter o %s\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "erro ao ler o cabeçalho do pacote\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "=========== a guardar as relações do tsort\n" + +#, fuzzy +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== ordenar pacotes (order, #predecessors, #succesors, tree, " +#~ "depth)\n" + +#, fuzzy +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== só os sucessores (ordem de apresentação)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== a prosseguir o tsort ...\n" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "Ficheiro%5d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========= Directorias não incluidas explicitamente no pacote:\n" + +#, fuzzy +#~ msgid "%10d %s\n" +#~ msgstr "%9d %s\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "directoria %s criada com as permissões %04o.\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "directoria %s criada com as permissões %04o.\n" + +#, fuzzy +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "a adicionar %d registos ao índice %s.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "desactivar o uso da API da libio(3)" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: a correr os scripts(s) %s (se existirem)\n" + +#, fuzzy +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s-%s-%s tem %d ficheiros, teste = %d\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "número de registo do pacote: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#, fuzzy +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "o pacote %s tem requisitos não satisfeitos: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s ignorado devido à opção missingok\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== mudanças de local\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d excluir o %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d mudar de local %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "a excluir o %s %s\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "a mudar o %s para %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "a mudar a directoria %s para %s\n" + +#, fuzzy +#~ msgid "Adding goal: %s\n" +#~ msgstr "A procurar o %s: (usando o %s)...\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... como %s\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "a instalar os pacotes binários\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "encontrados %d pacotes com código-fonte e %d binários\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "a instalar os pacotes binários\n" + +#, fuzzy +#~ msgid "Adding: %s\n" +#~ msgstr "linha: %s\n" + +#, fuzzy +#~ msgid "Suggesting: %s\n" +#~ msgstr "A obter o %s\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "Ficheiro%5d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "a mudar o %s para %s\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "" +#~ "Esperado um tamanho: %12d = início(%d)+assin.(%d)+'pad'(%d)+dados(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " Tamanho real: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Assinatura: tamanho(%d)+pad(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "tamanho da assinatura do PGP: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "Obtive %d bytes da assinatura PGP\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "Tamanho da assinatura do GPG: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "Obtive %d bytes da assinatura do GPG\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "a excluir a directoria %s\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "" +#~ "esperava-se um pacote com código-fonte, foi encontrado um pacote binário\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "nenhum pacote coincide com %s: %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "fechei o ambiente do db %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "removi o ambiente do db %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "a aceder ao ambiente do db %s/%s %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "fechei o índice do db %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "a abrir o índice do db %s/%s %s modo=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "tranquei o índice do db %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "a remover o \"%s\" do índice %s.\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "a remover %d registos do índice %s.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "a adicionar o \"%s\" ao índice %s.\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "a adicionar %d registos ao índice %s.\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "a remover o %s depois duma reconstrução bem sucedida do db3.\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "a reconstruir a base de dados %s em %s\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "a criar a directoria %s\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "a criar a directoria %s: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "a abrir a base de dados antiga com a dbapi %d\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "a abrir a base de dados nova com a dbapi %d\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "a remover a directoria %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "fechei o ficheiro do db %s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "a abrir o índice do db %s/%s %s modo=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: ler o %s: %s\n" + +#~ msgid "Unable to write final header\n" +#~ msgstr "Não consegui gravar o cabeçalho final\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "a versão 1 dos pacotes não é suportada por esta versão do RPM\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "" +#~ "só os pacotes com versão <= 4 são suportados por esta versão do RPM\n" + +#, fuzzy +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: Não consigo assinar o RPM v1.0\n" + +#, fuzzy +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: não consigo assinar de novo o RPM v2.0\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: Nenhuma assinatura disponível (RPM v1.0)\n" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo new file mode 100644 index 0000000..be12fbd Binary files /dev/null and b/po/pt_BR.gmo differ diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..40650a3 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,4688 @@ +# Brazilian Portuguese translation of RPM. +# This file is distributed under the same license as the RPM package. +# Arnaldo Carvalho de Melo , 1998. +# Igor Pires Soares , 2007,2008,2009. +# Taylon , 2010. +msgid "" +msgstr "" +"Project-Id-Version: rpm\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2010-09-13 10:11-0300\n" +"Last-Translator: Taylon \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Poedit-Language: Portuguese\n" +"X-Poedit-Country: BRAZIL\n" + +# , c-format +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM versão %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Copyright (C) 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" +"Este programa pode ser livremente redistribuído sob os termos da GNU GPL\n" + +# , c-format +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "a criação de um pipe para o --pipe falhou: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "a execução falhou\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "o argumento não é um pacote RPM\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "erro ao ler o cabeçalho do pacote\n" + +# , c-format +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "Não foi possível reabrir a carga útil: %s\n" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "Consultar/Verificar as opções de seleção do pacote:" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Opções de consulta (com -q ou --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Opções de verificação (com -V ou --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Opções de Instalação/Atualização/Remoção:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Opções comuns para todos os executáveis e modos rpm:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "somente um tipo de consulta/verificação pode ser feita por vez" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "sinalizador de consulta não esperado" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "formato de consulta não esperado" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "fonte de pesquisa não esperada" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "somente um modo principal pode ser especificado" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"somente a instalação, atualização, rmsource e rmspec podem ser forçados" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "" +"os arquivos somente podem ser realocados durante a instalação de pacotes" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "não é possível usar --prefix com --relocate ou --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate e --excludepath somente podem ser usados na instalação de novos " +"pacotes" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix somente pode ser usado na instalação de novos pacotes" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "argumentos para --prefix devem começar com uma /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "" +"--hash (-h) somente pode ser especificado durante instalação de pacotes" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "" +"--percent somente pode ser especificado durante a instalação de pacotes" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "" +"--replacepkgs somente pode ser especificado durante a instalação de pacotes" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "" +"--excludedocs somente pode ser especificado durante instalação de pacotes" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "" +"--includedocs somente pode ser especificado durante instalação de pacotes" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "somente um entre --excludedocs e --includedocs pode ser especificado" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "" +"--ignorearch somente pode ser especificado durante a instalação de pacotes" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "" +"--ignoreos somente pode ser especificado durante a instalação de pacotes" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "" +"--ignoresize somente pode ser especificado durante a instalação de pacotes" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" +"--allmatches somente pode ser especificado durante a remoção de pacotes" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "" +"--allfiles somente pode ser especificado durante a instalação de pacotes" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" +"--justdb somente pode ser especificado durante a instalação ou remoção de " +"pacotes" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"opções de desativação de scripts somente podem ser especificadas durante a " +"instalação ou remoção de pacotes" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"opções de desativação de disparador somente podem ser especificadas durante " +"a instalação ou remoção de pacotes" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test somente pode ser especificado durante a instalação, remoção e " +"construção de pacotes" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "" +"--justdb somente pode ser especificado durante a instalação ou remoção de " +"pacotes" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "os argumentos para --root (-r) devem começar com uma /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "nenhum pacote foi passado para remoção" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "nenhum pacote foi passado para instalação" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "nenhum argumento foi passado para consulta" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "nenhum argumento foi passado para verificação" + +# , c-format +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot já especificado, ignorando %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"construir através de %prep (desempacote os fontes e aplique as correções) a " +"partir do " + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"construir através de %build (%prep, então compile) a partir do " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"construir através de %install (%prep, %build, então instale) a partir do " +"" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "verificar seção %files do " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "construir os pacotes fontes e binários a partir do " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "construir pacote binário somente a partir do " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "construir pacote fonte somente a partir do " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"construir através de %prep (desempacote os fontes e aplique as correções) a " +"partir do " + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"construindo através de %build (%prep, então compile) a partir do " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"construir através de %install (%prep, %build, então instale) a partir do " +"" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "verificar seção %files do " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "construir os pacotes fontes e binários a partir do " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "construir pacote binário somente a partir do " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "construir pacote fonte somente a partir do " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "construir pacote binário a partir do " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"construir através de %install (%prep, %build, então instale) a partir do " +"" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "substituir raíz da construção" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "remover a árvore de construção quando terminar" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ignorar ExcludeArch: diretivas do arquivo spec" + +# , c-format +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "depurar máquina de estados do arquivo" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "não executar nenhum estágio da construção" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "não verificar dependências de construção" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" +"gerar cabeçalhos de pacotes compatíveis com o empacotamento do rpm[23] " +"(legado)" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "não aceitar msgstr's i18N do specfile" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "remover fontes ao finalizar" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "remover specfile ao finalizar" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "pule direto para o estágio especificado (somente para c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "substituir plataforma de destino" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "opções de construção com [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Falha ao construir dependências:\n" + +# , c-format +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Não foi possível abrir o arquivo spec %s: %s\n" + +# , c-format +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Não foi possível abrir o pipe do tar: %m\n" + +# , c-format +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Falha ao ler o arquivo spec de %s\n" + +# , c-format +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Falha ao renomear %s para %s: %m\n" + +# , c-format +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "falha ao iniciar %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "O arquivo %s não é um arquivo normal.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "O arquivo %s não parece ser um specfile.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Construindo plataformas de destino: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Construindo para o destino %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "Inicializar banco de dados" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"reconstruir as listas invertidas do banco de dados a partir dos cabeçalhos " +"dos pacotes instalados" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "verificar arquivos do banco de dados" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Opções de banco de dados:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "verificar a(s) assinatura(s) do pacote" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "importar uma chave pública blindada" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Opções de assinatura:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "nenhum argumento foi passado" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "instalar pacote(s)" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "assinar pacote(s) (idêntico ao --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "remover a assinatura dos pacotes" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Opções de assinatura:" + +# , c-format +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Não foi possível executar %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Você deve definir o \"%%_gpg_name\" no seu arquivo de macro\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Digite a senha: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Senha ok.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "A verificação da senha falhou\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "consultar um arquivo spec" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "consultar um arquivo spec" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "utilizar o seguinte formato de consulta" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Opções de assinatura:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "nenhum argumento foi passado para consulta" + +# , c-format +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Não foi possível abrir o arquivo temporário.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Executando (%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "A execução de %s falhou (%s): %s\n" + +# , c-format +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Status de saída de %s inválido (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"Erros na construção do RPM:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "erro de sintaxe ao analisar ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "erro de sintaxe ao analisar &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "erro de sintaxe ao analisar ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "erro de análise na expressão\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "( sem correspondência\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- somente em números\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! somente em números\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "os tipos devem corresponder\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / não são suportados para strings\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- não é suportado para strings\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& e || não são suportados para strings\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "erro de sintaxe na expressão\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "\"(\" faltando em %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "\"(\" faltando em %s(%s\n" + +# , c-format +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Token de %s inválido: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "%s faltando em %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "caractere de espaço após %s(): %s\n" + +# , c-format +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Sintaxe inválida: %s(%s)\n" + +# , c-format +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Modo spec inválido: %s(%s)\n" + +# , c-format +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Dirmode spec inválido: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Tamanho de localidade não usual: \"%.*s\" em %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Localidade %.*s duplicada em %%lang(%s)\n" + +# , c-format +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "Capacidade inválida: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "Suporte à capacidade de arquivo não embutida\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Apenas um argumento para %%docdir\n" + +# , c-format +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Dois arquivos em uma linha: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "O arquivo deve começar com uma \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Não é possível misturar %%doc especial com outras formas: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" +"Algoritmo de digest %u do arquivo é desconhecido, utilizando o MD5 como " +"alternativa\n" + +# , c-format +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Arquivo listado duas vezes: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s unlink de %s falhou: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Ligação simbólica aponta para BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "Os atributos explícitos do arquivo são necessário no spec para: %s\n" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Arquivo não encontrado: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Arquivo não encontrado: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "O arquivo %s é grande demais para a carga útil\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: não foi possível carregar a etiqueta desconhecida (%d).\n" + +# , c-format +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: falha ao ler a chave pública.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: não é uma chave pública blindada.\n" + +#: build/files.c:1618 +#, c-format +msgid "%s: failed to encode\n" +msgstr "%s: falha ao codificar\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "O arquivo precisa da \"/\" inicial: %s\n" + +# , c-format +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Glob não permitido: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "O arquivo não foi encontrado pelo glob: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "O arquivo não foi encontrado pelo glob: %s\n" + +# , c-format +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Não foi possível abrir %%files arquivo %s: %m\n" + +# , c-format +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "linha: %s\n" + +# , c-format +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Arquivo inválido: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Proprietário/grupo inválido: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Procurando por arquivos desempacotados: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Arquivo(s) instalado(s) (mas não empacotado(s)) encontrado(s):\n" +"%s" + +#: build/files.c:2139 +#, c-format +msgid "Processing files: %s\n" +msgstr "Processando arquivos: %s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "Binários dependentes de arquitetura no pacote noarch\n" + +# , c-format +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "a criação do pacote falhou no arquivo %s: %s\n" + +# , c-format +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "a criação do pacote falhou: %s\n" + +# , c-format +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "a gravação cpio_copy falhou: %s\n" + +# , c-format +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "a leitura cpio_copy falhou: %s\n" + +# , c-format +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: linha: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Não foi possível canonizar o nome de máquina: %s\n" + +# , c-format +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Não foi possível abrir o arquivo PreIn: %s\n" + +# , c-format +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Não foi possível abrir o arquivo PreUn: %s\n" + +# , c-format +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Não foi possível abrir o arquivo PreTrans: %s\n" + +# , c-format +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Não foi possível abrir o arquivo PostIn: %s\n" + +# , c-format +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Não foi possível abrir o arquivo PostUn: %s\n" + +# , c-format +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Não foi possível abrir o arquivo PostTrans: %s\n" + +# , c-format +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Não foi possível abrir o arquivo VerifyScript: %s\n" + +# , c-format +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Não foi possível abrir o arquivo do script Trigger: %s\n" + +# , c-format +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Compactação de carga útil desconhecida: %s\n" + +# , c-format +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Não foi possível criar uma região de cabeçalho imutável.\n" + +# , c-format +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Não foi possível gravar o cabeçalho temporário\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Dados CSA inválidos\n" + +# , c-format +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Não foi possível recarregar o cabeçalho da assinatura.\n" + +# , c-format +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Não foi possível abrir %s: %s\n" + +# , c-format +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Não foi possível gravar o pacote: %s\n" + +# , c-format +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Não foi possível abrir sigtarget %s: %s\n" + +# , c-format +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Não foi possível ler o cabeçalho a partir de %s: %s\n" + +# , c-format +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Não foi possível gravar o cabeçalho em %s: %s\n" + +# , c-format +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Não foi possível ler carga útil a partir de %s: %s\n" + +# , c-format +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Não foi possível gravar carga útil em %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Gravou: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "Executando \"%s\":\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "A execução de \"%s\" falhou.\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Falha na verificação \"%s\" do pacote.\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "" +"Não foi possível gerar o nome de arquivo de saída para o pacote %s: %s\n" + +# , c-format +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "Não foi possível criar %s: %s\n" + +# , c-format +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "linha %d: segundo %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "entradas do %%changelog devem começar com *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "entrada do %%changelog incompleta\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "data inválida no %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog não está na ordem cronológica decrescente\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "Nome faltando no %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "nenhuma descrição no %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "linha %d: Erro ao analisar %%description: %s\n" + +# , c-format +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "linha %d: Opção inválida %s: %s\n" + +# , c-format +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "linha %d: Nomes em excesso: %s\n" + +# , c-format +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "linha %d: O pacote não existe: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "linha %d: Segunda descrição\n" + +# , c-format +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "linha %d: Erro ao analisar %%files: %s\n" + +# , c-format +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "linha %d: Erro ao analisar %%files: %s\n" + +# , c-format +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "linha %d: Número inválido: %s\n" + +# , c-format +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "linha %d: Número %s inválido: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "linha %d: Número %s inválido: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d definido várias vezes\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "A arquitetura está excluída: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "A arquitetura não está excluída: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "O SO está excluído: %s\n" + +# , c-format +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "O SO não está incluído: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "o campo %s deve estar presente no pacote: %s\n" + +# , c-format +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Entrada %s duplicada no pacote: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "_docdir_fmt inválido: %s\n" + +# , c-format +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Não foi possível abrir o ícone %s: %s\n" + +# , c-format +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Não foi possível ler o ícone %s: %s\n" + +# , c-format +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Tipo de ícone desconhecido: %s\n" + +# , c-format +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "linha %d: A etiqueta toma apenas um token: %s\n" + +# , c-format +#: build/parsePreamble.c:607 +#, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "linha %d: caractere inválido \"%c\" em: %s\n" + +# , c-format +#: build/parsePreamble.c:610 +#, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "linha %d: caractere inválido em: %s\n" + +# , c-format +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "linha %d: caractere inválido \"..\" em: %s\n" + +# , c-format +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "linha %d: Etiqueta mal formada: %s\n" + +# , c-format +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "linha %d: Etiqueta vazia: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "linha %d: Os prefixos não podem terminar com \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "linha %d: O docdir deve começar com \"/\": %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "linha %d: campo Epoch deve ser um número sem sinal: %s\n" + +# , c-format +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "linha %d: %s inválido: qualificadores: %s\n" + +# , c-format +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "linha %d: formato BuildArchitecture inválido: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "linha %d: Somente subpacotes noarch são suportados: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Erro interno: tag %d falsa\n" + +# , c-format +#: build/parsePreamble.c:909 +#, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "linha %d: %s é obsoleto: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Especificação do pacote inválida: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "O pacote já existe: %s\n" + +# , c-format +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "linha %d: Etiqueta desconhecida: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} não pode ser vazio\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} não pode ser \"/\"\n" + +# , c-format +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Fonte inválida: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "Nenhum número de patch %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "%%patch não corresponde à etiqueta \"Patch:\"\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "Nenhum número de fonte %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "Nenhuma etiqueta \"Source:\" no arquivo .spec\n" + +# , c-format +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Não foi possível baixar nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Erro ao analisar %%setup: %s\n" + +# , c-format +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "linha %d: Argumento inválido para %%setup: %s\n" + +# , c-format +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "linha %d: Opção inválida %s de %%setup: %s\n" + +# , c-format +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "número da correção %s inválido: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "linha %d: segundo %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"linha %d: Tokens de dependências devem começar com um caractere " +"alfanumérico, \"_\" ou \"/\": %s\n" + +# , c-format +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "linha %d: Nome de arquivo versionado não permitido: %s\n" + +# , c-format +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "linha %d: Versão requerida: %s\n" + +# , c-format +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "linha %d: dependência inválida: %s\n" + +# , c-format +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "linha %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "linha %d: os disparadores devem ter --: %s\n" + +# , c-format +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "linha %d: Erro ao analisar %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "linha %d: o script interno deve terminar com \">\": %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "linha %d: o script deve começar com \"/\": %s\n" + +# , c-format +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "linha %d: Segundo %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "linha %d: script interno não suportado: %s\n" + +# , c-format +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "linha %d: %s\n" + +# , c-format +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Não foi possível abrir %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "%%if não fechado\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean retornou %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: Há um %%else sem um %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: Há um %%endif sem um %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "instrução %%include mal formada\n" + +# , c-format +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Nenhuma arquitetura compatível encontrada para a construção\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "O pacote não tem %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +# , c-format +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Falha ao ler o arquivo spec de %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +# , c-format +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Falha ao ler o arquivo spec de %s\n" + +# , c-format +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Falha ao ler o arquivo spec de %s\n" + +# , c-format +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Não foi possível abrir o pipe do tar: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Erro ao analisar %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Executando (%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "%s faltando em %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Argumentos em excesso na linha de dados em %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Processando arquivos: %s\n" + +# , c-format +#: build/rpmfc.c:107 +#, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "Ignorar regex inválida %s\n" + +# , c-format +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Não foi possível criar um pipe para %s: %m\n" + +# , c-format +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Não foi possível executar %s: %s\n" + +# , c-format +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Não foi possível bifurcar %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s falhou: %s\n" + +# , c-format +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "falha ao gravar todos os dados em %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "A conversão de %s para inteiro longo falhou.\n" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "Os atributos do arquivo não foram configurados\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) falhou: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load falhou: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Falha no reconhecimento do arquivo \"%s\": modo %06o %s\n" + +# , c-format +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Localizando %s: %s\n" + +# , c-format +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Falha ao localizar %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "a consulta ao specfile %s falhou, não foi possível analisá-lo\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(erro 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Magic inválido" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Cabeçalho inválido/impossível de ler" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Tamanho do cabeçalho muito grande" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Tipo de arquivo desconhecido" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Ligação(ões) absoluta(s) faltando" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "Digest incompatível" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Erro interno" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "Arquivo de pacote não está no cabeçalho" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " falhou - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "o pacote %s já foi adicionado, ignorando %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "o pacote %s já foi adicionado, substituindo por %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(não é um número)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(não é base 64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(tipo inválido)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(não é um blob)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(tipo xml inválido)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(não é uma assinatura OpenPGP)" + +#: lib/formats.c:588 +msgid "normal" +msgstr "normal" + +#: lib/formats.c:591 +msgid "replaced" +msgstr "substituído" + +#: lib/formats.c:594 +msgid "not installed" +msgstr "não instalado" + +#: lib/formats.c:597 +msgid "net shared" +msgstr "compartilhado pela rede" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "cor errada" + +# , c-format +#: lib/formats.c:603 +msgid "missing" +msgstr "faltando" + +#: lib/formats.c:606 +msgid "(unknown)" +msgstr "(desconhecido)" + +#: lib/formats.c:645 +msgid "(not a string)" +msgstr "(não é uma sequência)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "o usuário %s não existe - usando o root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "o grupo %s não existe - usando o root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "o pacote %s não foi encontrado na lista do arquivo de cabeçalho\n" + +# , c-format +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s salvo como %s\n" + +# , c-format +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s rmdir de %s falhou: O diretório não está vazio\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir de %s falhou: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s unlink de %s falhou: %s\n" + +# , c-format +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s criado como %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "ignorando %s com assinatura V%u não verificável\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "tamanho do blob(%d): INVÃLIDO, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "etiqueta[%d]: INVÃLIDA, etiqueta %d tipo %d offset %d contagem %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"offset da região: INVÃLIDA, etiqueta %d tipo %d offset %d contagem %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" +"trailer da região: INVÃLIDA, etiqueta %d tipo %d offset %d contagem %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "tamanho da região: INVÃLIDO, ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: INVÃLIDO, não é hexadecimal\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr RSA: INVÃLIDO, não é binário\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr DSA: INVÃLIDO, não é binário\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "tamanho hdr(%d): INVÃLIDO, a leitura retornou %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "magic hdr: INVÃLIDO\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "etiquetas hdr: INVÃLIDAS, número de etiquetas (%d) fora do intervalo\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "dados hdr: INVÃLIDOS, número de bytes (%d) fora do intervalo\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr blob(%zd): INVÃLIDO, a leitura retornou %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "carregamento hdr: INVÃLIDO\n" + +# , c-format +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature falhou: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Nenhuma assinatura disponível\n" + +# , c-format +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead falhou: %s" + +# , c-format +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread falhou: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s é um Delta RPM e não pode ser instalado diretamente\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Carga útil (%s) não suportada no pacote %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "predefinir MACRO com valor EXPR" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "\"MACRO EXPR\"" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "definir MACRO com valor EXPR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "imprimir expansão do macro da EXPR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "\"EXPR\"" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "ler ao invés do(s) arquivo(s) padrão" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "não verificar digest(s) dos pacotes" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "não verificar cabeçalho(s) do banco de dados ao recuperá-lo(s)" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "não verificar a(s) assinatura(s) do pacote" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "enviar stdout para CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "utilizar ROOT como o diretório de nível mais alto" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "exibir etiquetas de consulta conhecidas" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "exibir configuração final do rpmrc e do macro" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "fornece uma saída menos detalhada" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "fornece uma saída mais detalhada" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "mostra a versão do rpm que está sendo usada" + +# , c-format +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "depurar máquina de estados do arquivo de carga últil" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "depurar E/S rpmio" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: tabela de opções mal configurada (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "caminhos de exclusão devem começar com uma /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "realocações devem começar com uma /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "realocações devem conter um =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "realocações devem conter uma / após o =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"instala todos os arquivos, até configurações que poderiam ser ignoradas" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"remover todos os pacotes iguais ao (normalmente um erro é gerado se " +"o especificou múltiplos pacotes)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "realocar arquivos em pacotes não realocáveis" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "exibir loops de dependências como aviso" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "remover (desinstalar) pacote" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "não instalar arquivos de configuração" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "não instalar documentação" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "ignorar arquivos com componentes principais " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "atalho para --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "atualizar pacote(s) se já estiver(em) instalado(s)" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "exibir cerquilhas a medida que o pacote instala (bom com -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "não verificar a arquitetura do pacote" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "não verificar o sistema operacional do pacote" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "não verificar o espaço em disco antes de instalar" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "instalar a documentação" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "instalar pacote(s)" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "atualizar o banco de dados, mas não modificar o sistema de arquivos" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "não verificar as dependências do pacote" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "não verificar o digest dos arquivos" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "não verificar o digest dos arquivos (obsoleto)" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "não instalar contextos de segurança dos arquivos" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "não reordenar a instalação dos pacotes para satisfazer as dependências" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "não executar scriptlet(s) do pacote" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "não executar o scriptlet %%pre (se existir)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "não executar o scriptlet %%post (se existir)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "não executar o scriptlet %%preun (se existir)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "não executar o scriptlet %%postun (se existir)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "não executar nenhum scriptlet disparado por este pacote" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "não executar nenhum scriptlet %%triggerprein" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "não executar nenhum scriptlet %%triggerin" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "não executar nenhum scriptlet %%triggerun" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "não executar nenhum scriptlet %%triggerpostun" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "não realizar nenhuma ação de coleção" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"atualizar para uma versão mais antiga do pacote (--force em atualizações faz " +"isso automaticamente)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "exibir porcentagens na medida em que o pacote vai sendo instalado" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "realocar o pacote para , se for realocável" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "realocar arquivos do caminho para o " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "ignorar conflitos de arquivos entre pacotes" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "reinstalar se o pacote já estiver presente" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "não instalar, mas dizer se a instalação funcionaria ou não" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "atualizar pacote(s)" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "consultar/verificar todos os pacotes" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "modo checksig do rpm" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "consultar/verificar pacote(s) que detém o arquivo" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "consultar/verificar pacote(s) em um grupo" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "consultar/verificar um arquivo de pacote" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "consultar/verificar pacote(s) com um identificador de pacotes" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "consultar/verificar pacote(s) com um identificador de cabeçalhos" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "modo de consulta do rpm" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "consultar/verificar uma instância do cabeçalho" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "consultar/verificar pacote(s) da transação de instalação" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "consultar o(s) pacote(s) disparado pelo pacote" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "modo de verificação do rpm" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "consultar/verificar pacotes que precisam de uma dependência" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "consultar/verificar pacote(s) que fornecem uma dependência" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "não fazer glob com os argumentos" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "não processar arquivos que não são de pacotes como manifestos" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "listar todos os arquivos de configuração" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "listar todos os arquivos de documentação" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "descarregar informações básicas do arquivo" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "listar arquivos do pacote" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "ignorar arquivos %%ghost" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "exibir o estado dos arquivos listados" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "não verificar o tamanho dos arquivos" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "não verificar o caminho da ligação simbólica dos arquivos" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "não verificar o proprietário dos arquivos" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "não verificar o grupo dos arquivos" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "não verificar a hora de modificação dos arquivos" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "não verificar o modo dos arquivos" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "não verifica as capacidades dos arquivos" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "não verificar os contextos de segurança dos arquivos" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "não verificar os arquivos do pacote" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "não verificar as dependências do pacote" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "não executar script(s) de verificação" + +#: lib/psm.c:212 +#, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "Faltando recursos do rpmlib para %s:\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "um pacote fonte era esperado, mas um binário foi encontrado\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "o pacote fonte não contém um arquivo .spec\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "a descompactação do arquivo falhou %s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " no arquivo " + +# , c-format +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s falhou no arquivo %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s falhou: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "formato incorreto: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(não contém arquivos)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "substituído " + +#: lib/query.c:166 +msgid "not installed " +msgstr "não instalado " + +#: lib/query.c:169 +msgid "net shared " +msgstr "compartilhado pela rede " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "cor errada " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(sem estado) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(%3d desconhecido) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "o pacote não tem listas de proprietários/grupos\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "o pacote não tem listas de proprietários nem de ids\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "o grupo %s não contém nenhum pacote\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "nenhum disparador de pacote %s\n" + +# , c-format +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "%s malformado: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "nenhum pacote corresponde com %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "nenhum pacote requer %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "nenhum pacote fornece %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "arquivo %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "o arquivo %s não pertence a nenhum pacote\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "número de pacote inválido: %s\n" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "o registro %u não pôde ser lido\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "o pacote %s não está instalado\n" + +# , c-format +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "etiqueta desconhecida: \"%s\"\n" + +# , c-format +#: lib/rpmchecksig.c:43 +#, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: a importação da chave %d falhou.\n" + +#: lib/rpmchecksig.c:47 +#, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: %d não é uma chave pública blindada.\n" + +# , c-format +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: leitura de importação falhou (%d).\n" + +# , c-format +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead falhou\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"%s: A região de cabeçalho imutável não pôde ser lida. Pacote corrompido?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "ignorando pacote %s com assinatura V%u não verificável\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "Não está OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (CHAVES FALTANDO:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (CHAVES NÃO CONFIÃVEIS:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +# , c-format +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: falha ao abrir: %s\n" + +# , c-format +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Não foi possível restaurar o diretório raiz: %m\n" + +# , c-format +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s: diretório chroot não definido\n" + +# , c-format +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Não foi possível alterar o diretório raiz: %m\n" + +# , c-format +#: lib/rpmchroot.c:95 +#, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Não foi possível restaurar o diretório raiz: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NÃO " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "SIM" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" +"PreReq:, Capacidades: e Obsoletos: as dependências suportam as versões." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"Nome(s) de arquivo(s) armazenados como tuplas (dirName,baseName,dirIndex), " +"não como um caminho." + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "a carga útil do pacote pode ser compactada utilizando bzip2." + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "a carga útil do pacote pode ser compactada utilizando o xz." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "a carga útil do pacote pode ser compactada utilizando lzma." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "o(s) arquivo(s) da carga útil do pacote tem o prefixo \"./\"." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "o nome-versão-lançamento do pacote não está fornecido implicitamente." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" +"As etiquetas de cabeçalho sempre são classificadas após serem carregadas." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "o interpretador do scriptlet pode usar argumentos do cabeçalho." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" +"um conjunto de arquivos de ligação absoluta podem ser instalados sem estarem " +"completos." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" +"scriptlets de pacotes podem acessar o banco de dados rpm durante a " +"instalação." + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "suporte interno para scripts lua." + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "o algoritmo digest é configurável por pacote" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "suporte para as capacidades de arquivo do POSIX.1e" + +#: lib/rpmds.c:911 +msgid "package scriptlets can be expanded at install time." +msgstr "scriptlets de pacotes podem ser expandidos durante a instalação." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "falha ao abrir %s: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: não é um pacote rpm (ou um manifesto de pacote)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Preparando..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Preparando os pacotes para instalação..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Dependências não satisfeitas:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: não é um pacote rpm (ou um manifesto de pacote): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s não pode ser instalado\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Obtendo %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "ignorando %s - a transferência falhou\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "o pacote %s não é realocável\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "erro ao ler o arquivo %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "o arquivo %s requer uma versão mais recente do RPM\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" especifica múltiplos pacotes:\n" + +# , c-format +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "Não foi possível abrir %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Instalando %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "não é um pacote rpm" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "tipo inválido de assinatura" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "versão do pacote RPM não suportada" + +# , c-format +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "falha na leitura: %s (%d)\n" + +#: lib/rpmlead.c:126 +msgid "not an rpm package\n" +msgstr "não é um pacote rpm\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "não foi possível criar o bloqueio de transação %s em %s (%s)\n" + +#: lib/rpmlock.c:106 +#, c-format +msgid "waiting for %s lock on %s\n" +msgstr "esperando pelo bloqueio de transação %s em %s\n" + +# , c-format +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "Falha ao abrir o(a) %s: %s\n" + +# , c-format +#: lib/rpmplugins.c:67 +#, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Falha ao resolver o símbolo %s: %s\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "Falha ao expandir a macro %%__collection_%s\n" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +# , c-format +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Falha ao resolver o símbolo %s: %s\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "diferente" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "o pacote %s é destinado para a arquitetura %s" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "o pacote %s é destinado para o sistema operacional %s" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "o pacote %s já está instalado" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "o caminho %s no pacote %s não é realocável" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "o arquivo %s conflita entre a tentativa de instalação de %s e %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "o arquivo %s da instalação de %s conflita com o arquivo do pacote %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "o pacote %s (que é mais recente que o %s) já está instalado" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"a instalação do pacote %s precisa de %%cB no sistema de arquivos %s" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"a instalação do pacote %s precisa de % inodes no sistema de arquivos " +"%s" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s é requerido por %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(instalado) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s conflita com %s%s" + +#: lib/rpmprob.c:172 +#, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s tornou-se obsoleto pelo(a) %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "erro desconhecido %d encontrado ao manipular o pacote %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "segundo \":\" faltando em %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "nome da arquitetura faltando em %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Linha de dados incompleta em %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Argumentos em excesso na linha de dados em %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Número de arquitetura/SO inválido: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Linha padrão incompleta em %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Argumentos em excesso na linha padrão em %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "\":\" faltando (0x%02x encontrado) em %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "argumento faltando para %s em %s:%d\n" + +# , c-format +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "não foi possível abrir %s em %s:%d: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "arquitetura faltando para %s em %s:%d\n" + +# , c-format +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "opção inválida \"%s\" em %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Sistema desconhecido: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Por favor, contate %s\n" + +# , c-format +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Não foi possível abrir %s para leitura: %m.\n" + +# , c-format +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Não foi possível restaurar o diretório raiz: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "suporte a scriptlet não embutido\n" + +# , c-format +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Não foi possível criar um arquivo temporário para %s: %s\n" + +# , c-format +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Não foi possível duplicar o descritor do arquivo: %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "o scriptlet %s falhou, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "o scriptlet %s falhou, sinal %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "o scriptlet %s falhou, status de saída %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "Formato desconhecido" + +#: lib/rpmte.c:820 +msgid "install" +msgstr "instalar" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "apagar" + +# , c-format +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "não foi possível abrir o banco de dados de pacotes em %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "\"(\" extra no rótulo do pacote: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "\"(\" faltando no rótulo do pacote: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "\")\" faltando no rótulo do pacote: %s\n" + +# , c-format +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: falha na leitura da chave pública.\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "transação" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "sigh size(%d): INVÃLIDO, a leitura retornou %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sigh magic: INVÃLIDO\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sigh tags: INVÃLIDO, número de etiquetas (%d) fora do intervalo\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sigh data: INVÃLIDO, número de bytes (%d) fora do intervalo\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sigh blob(%d): INVÃLIDO, a leitura retornou %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "sigh tag[%d]: INVÃLIDO, etiqueta %d tipo %d offset %d contagem %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "sigh load: INVÃLIDO\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh pad(%zd): INVÃLIDO, %zd bytes lidos\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh sigSize(%zd): INVÃLIDO, fstat(2) falhou\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "A região de cabeçalho imutável não pôde ser lida. Pacote corrompido?\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "Digest MD5:" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "Digest do cabeçalho SHA1:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Cabeçalho " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Verificação de assinatura: PARÂMETROS INVÃLIDOS\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Assinatura: DESCONHECIDA (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "ignorado" + +#: lib/transaction.c:1388 +msgid "failed" +msgstr "falhou" + +# , c-format +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "%c %s faltando" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Dependências não satisfeitas para %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "{ faltando após %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "} faltando após %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "formato da etiqueta vazio" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "nome da etiqueta vazio" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "etiqueta desconhecida" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] esperado no fim da matriz" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "] não esperado" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "} não esperado" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? esperado na expressão" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ esperado após ? na expressão" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} esperado na expressão" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": esperado após a subexpressão ?" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ esperado após : na expressão" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| esperado no fim da expressão" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "iterador da matriz utilizado com diferentes tamanhos de matrizes" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +# , c-format +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "não foi possível abrir o índice %s usando o db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "nenhum dbpath foi definido\n" + +# , c-format +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "erro (%d) ao obter os registros \"%s\" a partir do índice %s\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: ignorando" + +# , c-format +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "erro (%d) ao armazenar o registro #%d em %s\n" + +# , c-format +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: o regexec falhou: %s\n" + +# , c-format +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: o regcomp falhou: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: ignorando" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: cabeçalho danificado #%u recuperado -- ignorando.\n" + +# , c-format +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "erro (%d) ao obter os registros \"%s\" a partir do índice %s\n" + +# , c-format +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "erro(%d) ao adicionar o registro de cabeçalho #%d\n" + +# , c-format +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "erro(%d) ao remover o registro de cabeçalho #%d\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: não foi possível ler o cabeçalho em 0x%x\n" + +# , c-format +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "erro (%d) ao definir registros \"%s\" a partir do índice %s\n" + +# , c-format +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "erro (%d) ao armazenar o registro \"%s\" em %s\n" + +# , c-format +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "erro (%d) ao remover o registro \"%s\" a partir de %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "erro (%d) ao alocar nova instância do pacote\n" + +# , c-format +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "erro (%d) ao armazenar o registro %s em %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "nenhum dbpath foi definido" + +# , c-format +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "falha ao criar o diretório %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "o cabeçalho #%u do banco de dados é inválido -- ignorando.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "não é possível adicionar o registro originalmente em %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"falha ao reconstruir o banco de dados: o banco de dados original permanece " +"no lugar\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "falha ao substituir o banco de dados velho pela novo!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "substituir arquivos em %s com arquivos de %s para recuperação" + +# , c-format +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "falha ao remover o diretório %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "erro db%d (%d) de %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "erro db%d (%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "não foi possível obter o bloqueio %s em %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "compartilhado" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "exclusivo" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "índice db verificado %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "opção db não reconhecida: \"%s\" ignorado.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s tem um valor numérico inválido, ignorado\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s tem valor inteiro longo muito grande ou muito pequeno, ignorado\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s tem um valor inteiro muito grande ou muito pequeno, ignorado\n" + +# , c-format +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Falha ao ler o arquivo spec de %s\n" + +# , c-format +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Não foi possível criar um arquivo temporário para %s: %s\n" + +# , c-format +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Falha ao ler o arquivo spec de %s\n" + +# , c-format +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "falha ao criar %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Falha ao conectar no servidor" + +# , c-format +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "Falha ao abrir o(a) %s: %s\n" + +# , c-format +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "falha ao remover o diretório %s: %s\n" + +# , c-format +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Falha ao resolver o símbolo %s: %s\n" + +# , c-format +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Falha ao resolver o símbolo: %s\n" + +# , c-format +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "Falha ao abrir o(a) %s: %s\n" + +# , c-format +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "falha ao criar %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "O macro %%%s tem um corpo incompleto\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "%s: falha ao codificar\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +#, fuzzy +msgid "Failed to expand restorecon path" +msgstr "Falha ao expandir a macro %%__collection_%s\n" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +# , c-format +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Falha ao ler o arquivo spec de %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "erro: retorno de chamada %s do python falhou, interrompendo!\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== %d ativo %d vazio\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(vazio)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(vazio)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "O macro %%%s tem um corpo incompleto\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "O macro %%%s tem um nome inválido (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "O macro %%%s tem opções incompletas\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "O macro %%%s tem um corpo vazio\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "O macro %%%s falhou ao expandir\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "O macro %%%s tem um nome inválido (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "O macro %%%s (%s) não foi usado abaixo do nível %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Opção desconhecida %c em %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +# , c-format +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "%c incompleto: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Um %% é seguido por um macro não analisável\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "erro ao criar o arquivo temporário %s: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Arquivo %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "O arquivo %s tem menos de %u bytes\n" + +# , c-format +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "falha ao criar o diretório" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "sintaxe inválida no scriptlet lua: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "sintaxe inválida no script lua: %s\n" + +# , c-format +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "falha no script lua: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "sintaxe inválida no arquivo lua: %s\n" + +# , c-format +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "falha na conexão lua: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(sem erros)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "erro fatal: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "erro: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "aviso: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "a alocação de memória (%u bytes) retornou NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "V%d %s/%s %s, ID da chave %s" + +#: rpmio/rpmpgp.c:1369 +msgid "(none)" +msgstr "(nada)" + +# , c-format +#: rpmio/rpmpgp.c:1652 +#, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Falha ao registrar o manipulador do fork: %m\n" + +# , c-format +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite falhou: %s\n" + +# , c-format +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush falhou: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "Algorítimo %d de hash PGP não suportado\n" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "Algorítimo %d de pubkey GPG não suportado\n" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "Não foi possível criar um canal para assinar: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "a execução do gpg falhou (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "o gpg falhou ao gravar a assinatura\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "não foi possível ler a assinatura\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "o rpmMkTemp falhou\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead falhou: %s\n" + +# , c-format +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature falhou: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "falha ao abrir %s: %s\n" + +# , c-format +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: falha na leitura do manifesto: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "não verificar a assinatura do cabeçalho+carga útil" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: uid's em excesso\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: uid's em excesso\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: uid's em excesso\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: gid's em excesso\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: gid's em excesso\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: gid's em excesso\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "ignorar relações do nome dos pacotes [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "adicionar pacotes sugeridos à transação" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "não sugerir a resolução de dependências não encontradas" + +# , c-format +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Não foi possível realizar o chdir para %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps somente pode ser especificado durante a construção, " +#~ "reconstrução, recompilação, instalação, remoção ou verificação de pacotes" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) somente pode ser especificado durante a instalação, remoção, " +#~ "consulta e reconstrução de bancos de dados" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "detectar conflitos de arquivo entre os pacotes" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d não disponível\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "o banco de dados temporário %s já existe\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "consultar/verificar pacote(s) com um identificador de arquivos" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Erro interno no processamento do argumento (%d) :-(\n" + +#~ msgid "no files to sign\n" +#~ msgstr "nenhum arquivo para assinar\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "não foi possível acessar o arquivo %s\n" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Especificação %%_signature inválida no arquivo macro.\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign somente pode ser usado durante a construção de pacotes" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "nenhum pacote foi passado para reconstrução" + +#~ msgid "no spec files given for build" +#~ msgstr "nenhum arquivo spec foi passado para construção" + +#~ msgid "no tar files given for build" +#~ msgstr "não foram passados arquivos tar para construção" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "Falha no TIMECHECK: %s\n" + +# , c-format +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: falha ao ler o arquivo de política.\n" + +# , c-format +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: abrir %s: %s\n" + +# , c-format +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek falhou: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s não é um pacote RPM\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: lendo cabeçalho a partir de %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Gerando assinatura: %d\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "gerar cabeçalhos compatíveis com o empacotamento do rpm4" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "gerar assinatura PGP/GPG" + +#~ msgid "%s failed\n" +#~ msgstr "%s falhou\n" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "não verificar assinatura(s) GPG V3 DSA" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "não verificar assinatura(s) PGP V3 RSA/MD5" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "assinar pacote(s) (idêntico ao --resign)" + +#~ msgid "generate signature" +#~ msgstr "gerar assinatura" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: já foi assinado pela chave de ID %s, ignorando\n" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Spec %%_signature inválido no arquivo macro\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Profundidade de recursão (%d) maior do que o máximo (%d)\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Estouro de buffer do destino\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: nome da etiqueta não reconhecido: \"%s\" ignorado\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: ignorando" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib fornece)" + +#~ msgid "(cached)" +#~ msgstr "(em cache)" + +# , c-format +#~ msgid "(db files)" +#~ msgstr "(arquivos db)" + +#~ msgid "(db provides)" +#~ msgstr "(db fornece)" + +# , c-format +#~ msgid "(added files)" +#~ msgstr "(arquivos adicionados)" + +#~ msgid "(added provide)" +#~ msgstr "(capacidade adicionada)" + +#~ msgid "url port must be a number\n" +#~ msgstr "a porta url deve ser um número\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Opções de caminhamento pela árvore de arquivos (com --ftswalk):" + +#~ msgid "follow command line symlinks" +#~ msgstr "seguir ligações simbólicas da linha de comandos" + +#~ msgid "logical walk" +#~ msgstr "caminhamento lógico" + +# , c-format +#~ msgid "don't change directories" +#~ msgstr "não alterar os diretórios" + +#~ msgid "don't get stat info" +#~ msgstr "não obter informações de estatísticas" + +#~ msgid "physical walk" +#~ msgstr "caminhamento físico" + +#~ msgid "return dot and dot-dot" +#~ msgstr "retornar ponto e ponto-ponto" + +#~ msgid "don't cross devices" +#~ msgstr "não cruzar dispositivos" + +#~ msgid "return whiteout information" +#~ msgstr "retornar informação whiteout" + +# , c-format +#~ msgid "debug package state machine" +#~ msgstr "depurar máquina de estados do pacote" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "" +#~ "consultar/verificar pacote(s) do topo do caminhamento da árvore de " +#~ "arquivos" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "consultar/verificar pacote(s) do sistema HDLIST" + +#~ msgid "do not order transaction set" +#~ msgstr "não ordenar o conjunto de transações" + +#~ msgid "do not read headers" +#~ msgstr "não ler os cabeçalhos" + +# , c-format +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "O arquivo não corresponde com o prefixo (%s): %s\n" + +# , c-format +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "Não foi possível obter o nome da dependência atual.\n" + +#~ msgid "Unable to get current dependency epoch-version-release.\n" +#~ msgstr "Não foi possível obter a dependência epoch-version-release atual.\n" + +#~ msgid "File count from file info doesn't match file in container.\n" +#~ msgstr "" +#~ "O contador de arquivos das informações do mesmo não correspondem ao do " +#~ "arquivo no container.\n" + +#~ msgid "Container not of string array data type.\n" +#~ msgstr "O container não é do tipo de dados vetor de string.\n" + +# , c-format +#~ msgid "use threads for package state machine" +#~ msgstr "utilizar threads para a máquina de estados do pacote" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: %s o scriptlet falhou (%d), ignorando %s\n" + +# , c-format +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() falhou ao retornar o tamanho: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() falhou ao retornar os pontos de montagem: %s\n" + +# , c-format +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "falha ao iniciar %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "o arquivo %s está em um dispositivo desconhecido\n" + +# , c-format +#~ msgid "use threads for file state machine" +#~ msgstr "utilizar threads para a máquina de estados do arquivo" + +# , c-format +#~ msgid "cannot open %s index\n" +#~ msgstr "não foi possível abrir o índice %s\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "" +#~ "Não foi possível obter o bloqueio do bd %s, tentando novamente... (%d)\n" + +# , c-format +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Não foi possível iniciar o BD %s (%d)\n" + +# , c-format +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Não foi possível abrir o banco de dados: %s\n" + +# , c-format +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Não foi possível determinar o \"endianess\" do BD.\n" + +#~ msgid "Unknown system error" +#~ msgstr "Erro de sistema desconhecido" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Macro %%%.*s não encontrado, ignorando\n" + +# , c-format +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: falha ao ler políticas *.te.\n" + +# , c-format +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "linha %d: Segunda lista %%files\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "A dependência \"B\" precisa de um período (assumindo o mesmo período que " +#~ "\"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "O tipo de dados %d não é suportado\n" + +# , c-format +#~ msgid "line %d: Illegal char '-' in %s: %s\n" +#~ msgstr "linha %d: caractere inválido \"-\" em %s: %s\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "Sintaxe legada não suportada: %s\n" + +# , c-format +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "removendo %s \"%s\" das relações do tsort.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "LOOP:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "rpmtsOrder falhou, permaneceram %d elementos\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "Tamanho da carga útil+cabeçalho:" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Opções de fonte (com --query ou --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp não encontrada: " + +#~ msgid "skipping header with unverifiable V%u signature\n" +#~ msgstr "ignorando cabeçalho com assinatura V%u não verificável\n" + +# , c-format +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "Não foi possível abrir o arquivo %s: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp falhou\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "o pgp falhou ao gravar a assinatura\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Você deve definir o \"%%_pgp_name\" no seu arquivo de macro\n" + +#~ msgid "Unknown" +#~ msgstr "Desconhecido" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s assinatura: %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "%sV%d assinatura DSA: %s, ID da chave %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d assinatura DSA: %s\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "Digest MD5 defeituoso: NÃO SUPORTADO\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot não pode ser \"/\": %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "O arquivo spec não pode utilizar o BuildRoot\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "procurar strings i18N no catálogo do specfile" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "gerar cabeçalhos compatíveis com o empacotamento (legado) rpm[23]" + +# , c-format +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "não foi possível criar %%%s %s\n" + +# , c-format +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "não foi possível gravar em %%%s %s\n" + +# , c-format +#~ msgid "can't query %s: %s\n" +#~ msgstr "Não foi possível consultar %s: %s\n" + +#~ msgid "(encoding failed)" +#~ msgstr "(falha na codificação)" + +#~ msgid "debug URL cache handling" +#~ msgstr "depurar tratamento de cache URL" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "substituir seções i18n no arquivo spec" + +# , c-format +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "não foi possível abrir o banco de dados Solve em %s\n" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " Resoluções sugeridas:\n" + +#~ msgid "(index out of range)" +#~ msgstr "(índice fora do intervalo)" + +#~ msgid "Success" +#~ msgstr "Sucesso" + +#~ msgid "Bad server response" +#~ msgstr "Resposta inválida do servidor" + +#~ msgid "Server I/O error" +#~ msgstr "Erro de E/S do servidor" + +#~ msgid "Server timeout" +#~ msgstr "Tempo esgotado para o servidor" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Não foi possível procurar o endereço de máquina do servidor" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Não foi possível procurar o nome de máquina do servidor" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Falha ao estabelecer a conexão de dados com o servidor" + +#~ msgid "I/O error to local file" +#~ msgstr "Erro de E/S para o arquivo local" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Erro ao configurar o servidor remoto para o modo passivo" + +#~ msgid "File not found on server" +#~ msgstr "Arquivo não encontrado no servidor" + +#~ msgid "Abort in progress" +#~ msgstr "Interrupção em andamento" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Erro desconhecido ou não esperado" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "" +#~ "não atualizar o cache do banco de dados, apenas imprimir os caminhos do " +#~ "pacote" + +#~ msgid "File tree walk options:" +#~ msgstr "Opções de caminhamento na árvore de arquivos:" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: o macro %%{_cache_dbpath} está mal configurado.\n" + +# , c-format +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: falha na operação do cache: ec %d.\n" + +# , c-format +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: headerGetEntry falhou\n" + +# , c-format +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "a expansão do %s falhou em %s:%d \"%s\"\n" + +# , c-format +#~ msgid "Cannot expand %s\n" +#~ msgstr "Não foi possível expandir %s\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "Não foi possível ler %s, HOME é muito grande.\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s rmdir de %s falhou: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "Limite alcançado para %%docdir\n" + +# , c-format +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "linha %d: É necessário um argumento para %%patch -b: %s\n" + +# , c-format +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "linha %d: É necessário um argumento para %%patch -z: %s\n" + +# , c-format +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "linha %d: Argumento inválido para %%patch -F: %s\n" + +# , c-format +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "linha %d: É necessário um argumento para %%patch -p: %s\n" + +# , c-format +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "linha %d: Argumento inválido para %%patch -p: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "Correções em excesso!\n" + +# , c-format +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "linha %d: Argumento inválido para %%patch: %s\n" + +#~ msgid "debug option/argument processing" +#~ msgstr "depurar processamento de opções/argumentos" + +#~ msgid "skip %%license files" +#~ msgstr "ignorar arquivos %%license" + +# , c-format +#~ msgid "skip %%readme files" +#~ msgstr "ignorar arquivos %%readme" + +# , c-format +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "falha na leitura: %s (%d)\n" + +#~ msgid "rollback takes a time/date stamp argument" +#~ msgstr "recuos levam um argumento de identificação de hora/data" + +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "argumento de identificação de hora/data do recuo mal formado" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "salvar arquivos de pacotes removidos renomeando em um subdiretório" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "salvar arquivos de pacotes removidos reempacotando-os" + +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "" +#~ "desinstalar novo(s) e reinstalar pacote(s) antigo(s), retornando a " + +#~ msgid "" +#~ msgstr "" + +# , c-format +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Não foi possível recarregar o cabeçalho de assinatura\n" + +#~ msgid "Repackaging..." +#~ msgstr "Reempacotando..." + +#~ msgid "Repackaging erased files..." +#~ msgstr "Reempacotando arquivos apagados..." + +#~ msgid "Upgrading..." +#~ msgstr "Atualizando..." + +#~ msgid "Upgrading packages..." +#~ msgstr "Atualizando pacotes..." + +#~ msgid "Rollback packages (+%d/-%d) to %-24.24s (0x%08x):\n" +#~ msgstr "Recuar pacotes (+%d/-%d) para %-24.24s (0x%08x):\n" + +#~ msgid "Cleaning up repackaged packages:\n" +#~ msgstr "Limpando pacotes reempacotados:\n" + +# "Project-Id-Version: rpm-2.5.3\n" +# "PO-Revision-Date: 1997-09-11 14:00 MET DST\n" +# "Last-Translator: Arnaldo Carvalho de Melo \n" +# "Language-Team: Portuguese \n" +# "MIME-Version: 1.0\n" +# "Content-Type: text/plain; charset=ISO-8859-1\n" +# "Content-Transfer-Encoding: 8-bit\n" +# , c-format +#~ msgid "\tRemoving %s:\n" +#~ msgstr "\tRemovendo %s:\n" + +#~ msgid "Transaction failed...rolling back\n" +#~ msgstr "A transação falhou... recuando\n" + +#~ msgid "Could not order auto-rollback transaction!\n" +#~ msgstr "Não foi possível ordenar a transação de auto-recuo!\n" + +#~ msgid "Could not get install element database instance!\n" +#~ msgstr "" +#~ "Não foi possível obter a instância do banco de dados do elemento de " +#~ "instalação!\n" + +#~ msgid "Could not get header for auto-rollback transaction!\n" +#~ msgstr "Não foi possível obter o cabeçalho da transação de auto-recuo!\n" + +#~ msgid "\tAdded from install element %s.\n" +#~ msgstr "\tAdicionado a partir do elemento de instalação %s.\n" + +#~ msgid "Could not get repackaged header for auto-rollback transaction!\n" +#~ msgstr "" +#~ "Não foi possível obter o cabeçalho reempacotado para a transação de auto-" +#~ "recuo!\n" + +#~ msgid "Could not add erase element to auto-rollback transaction.\n" +#~ msgstr "" +#~ "Não foi possível adicionar um elemento de remoção à transação de auto-" +#~ "recuo.\n" + +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "Falha ao ler o pacote reempacotado!\n" + +#~ msgid "Add failed. Could not read package header.\n" +#~ msgstr "A adição falhou. Não foi possível ler o cabeçalho do pacote.\n" + +#~ msgid "Add failed in rpmpsmStage().\n" +#~ msgstr "A adição falhou no rpmpsmStage().\n" + +#~ msgid "Add failed. Could not get file list.\n" +#~ msgstr "A adição falhou. Não foi possível obter a lista de arquivos.\n" + +#~ msgid "Erase failed failed in rpmpsmStage().\n" +#~ msgstr "A remoção falhou no rpmpsmStage().\n" + +#, fuzzy +#~ msgid "\twaitpid(%d) rc %d status %x\n" +#~ msgstr "%s: waitpid(%d) rc %d status %x segs %u.%03u\n" + +#~ msgid " Obsoletes: %s\t\terases %s\n" +#~ msgstr " Obsoletos: %s\t\tremove %s\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== gravando relações do tsort\n" + +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== tsorting dos pacotes (ordem, #predecessores, #sucessores, " +#~ "árvore, profundidade, extensão)\n" + +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== sucessores apenas (%d bytes)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== continuando tsort ...\n" + +# , c-format +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "%5d 0x%04x %s %s\n" + +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========== Diretórios não incluídos explicitamente no pacote:\n" + +# , c-format +#~ msgid "%10d %s\n" +#~ msgstr "%10d %s\n" + +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "diretório %s criado com permissões %04o, sem contexto.\n" + +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "diretório %s criado com permissões %04o, contexto %s.\n" + +# , c-format +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "adicionando %d argumentos do manifesto.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "desabilitar o uso da API libio(3)" + +#~ msgid "%s: waitpid(%d) rc %d status %x secs %u.%03u\n" +#~ msgstr "%s: waitpid(%d) rc %d status %x segs %u.%03u\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) executando scriptlet .\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) ignorando redundantes \"%s\".\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) %ssynchronous scriptlet start\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) início do scriptlet %ssynchronous\n" + +#~ msgid "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" +#~ msgstr "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" + +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s tem %d arquivos, teste = %d\n" + +#~ msgid "Attempting to mark %s as installed in score board(%p).\n" +#~ msgstr "Tentando marcar %s como instalado no placar (%p).\n" + +#~ msgid "Attempting to mark %s as erased in score board(%p).\n" +#~ msgstr "Tentando marcar %s como removido no placar (%p).\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "número de registro do pacote: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "o pacote %s tem %s não satisfeito: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s ignorado devido ao sinalizador missingok\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== realocações\n" + +# "Project-Id-Version: rpm-2.5.3\n" +# "PO-Revision-Date: 1997-09-11 14:00 MET DST\n" +# "Last-Translator: Arnaldo Carvalho de Melo \n" +# "Language-Team: Portuguese \n" +# "MIME-Version: 1.0\n" +# "Content-Type: text/plain; charset=ISO-8859-1\n" +# "Content-Transfer-Encoding: 8-bit\n" +# , c-format +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d exclui %s\n" + +# , c-format +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d realoca %s -> %s\n" + +# "Project-Id-Version: rpm-2.5.3\n" +# "PO-Revision-Date: 1997-09-11 14:00 MET DST\n" +# "Last-Translator: Arnaldo Carvalho de Melo \n" +# "Language-Team: Portuguese \n" +# "MIME-Version: 1.0\n" +# "Content-Type: text/plain; charset=ISO-8859-1\n" +# "Content-Transfer-Encoding: 8-bit\n" +# , c-format +#~ msgid "excluding %s %s\n" +#~ msgstr "excluindo %s %s\n" + +# , c-format +#~ msgid "relocating %s to %s\n" +#~ msgstr "realocando %s para %s\n" + +# , c-format +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "realocando diretório %s para %s\n" + +# , c-format +#~ msgid "Adding goal: %s\n" +#~ msgstr "Adicionando meta: %s\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... como %s\n" + +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "\tpacote fonte adicionado [%d]\n" + +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "\tpacote binário adicionado [%d]\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "foram encontrados %d pacotes fontes e %d binários\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "instalando pacotes binários\n" + +# , c-format +#~ msgid "Adding: %s\n" +#~ msgstr "Adicionando: %s\n" + +# "Project-Id-Version: rpm-2.5.3\n" +# "PO-Revision-Date: 1997-09-11 14:00 MET DST\n" +# "Last-Translator: Arnaldo Carvalho de Melo \n" +# "Language-Team: Portuguese \n" +# "MIME-Version: 1.0\n" +# "Content-Type: text/plain; charset=ISO-8859-1\n" +# "Content-Transfer-Encoding: 8-bit\n" +# , c-format +#~ msgid "Suggesting: %s\n" +#~ msgstr "Sugerindo: %s\n" + +#~ msgid "mounted filesystems:\n" +#~ msgstr "sistemas de arquivos montados:\n" + +#~ msgid " i dev bsize bavail iavail mount point\n" +#~ msgstr "" +#~ " i dis tamb bavail ponto de montagem iavail\n" + +# , c-format +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "%5d 0x%08x %8u %12ld %12ld %s\n" + +#~ msgid "Creating transaction score board(%p, %p)\n" +#~ msgstr "Criando placar (%p, %p) da transação\n" + +#~ msgid "\tScore board address: %p\n" +#~ msgstr "\tEndereço do placar: %p\n" + +# , c-format +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "\tAlocando espaço para %d entradas\n" + +#~ msgid "\tAdding entry for %s to score board.\n" +#~ msgstr "\tAdicionando entrada %s ao placar.\n" + +#~ msgid "\t\tEntry address: %p\n" +#~ msgstr "\t\tEndereço da entrada: %p\n" + +#~ msgid "\tUpdating entry for %s in score board.\n" +#~ msgstr "\tAtualizando entrada para o %s no placar.\n" + +#~ msgid "May free Score board(%p)\n" +#~ msgstr "Liberar placar (%p)\n" + +#~ msgid "\tRefcount is zero...will free\n" +#~ msgstr "\tRefcount é zero... irá liberar\n" + +#~ msgid "Looking in score board(%p) for %s\n" +#~ msgstr "Procurando no placar (%p) por %s\n" + +#~ msgid "\tFound entry at address: %p\n" +#~ msgstr "\tEntrada encontrada no endereço: %p\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "Tamanho esperado: %12d = lead(%d)+sigs(%d)+pad(%d)+data(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " Tamanho real: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Assinatura: tamanho(%d)+enchimento(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "Tamanho da assinatura PGP: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "%d bytes obtidos da assinatura PGP\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "Tamanho da assinatura GPG: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "%d bytes obtidos da assinatura GPG\n" + +# "Project-Id-Version: rpm-2.5.3\n" +# "PO-Revision-Date: 1997-09-11 14:00 MET DST\n" +# "Last-Translator: Arnaldo Carvalho de Melo \n" +# "Language-Team: Portuguese \n" +# "MIME-Version: 1.0\n" +# "Content-Type: text/plain; charset=ISO-8859-1\n" +# "Content-Transfer-Encoding: 8-bit\n" +# , c-format +#~ msgid "excluding directory %s\n" +#~ msgstr "excluindo diretório %s\n" + +#~ msgid "Getting repackaged header from transaction element\n" +#~ msgstr "" +#~ "Obtendo o cabeçalho reempacotado a partir do elemento da transação\n" + +#~ msgid "\tLooking for %s...\n" +#~ msgstr "\tProcurando por %s...\n" + +#~ msgid "\tMatches found.\n" +#~ msgstr "\tResultados encontrados.\n" + +#~ msgid "\tNo matches found.\n" +#~ msgstr "\tNenhum resultado encontrado.\n" + +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "\tPacote reempacotado não encontrado!\n" + +#~ msgid "\tREMOVETID matched INSTALLTID.\n" +#~ msgstr "\tREMOVETID coincide com INSTALLTID.\n" + +#~ msgid "\t\tName: %s.\n" +#~ msgstr "\t\tNome: %s.\n" + +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "\tO pacote reempacotado era %s...\n" + +#~ msgid "Adding install element to auto-rollback transaction.\n" +#~ msgstr "Adicionando elemento de instalação à transação de auto-recuo.\n" + +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "\tCabeçalho do pacote reempacotado adicionado: %s.\n" + +#~ msgid "\tAdded erase element.\n" +#~ msgstr "\tElemento de remoção adicionado.\n" + +#~ msgid "Add erase element to auto-rollback transaction.\n" +#~ msgstr "Adicionar um elemento de remoção à transação de auto-recuo.\n" + +#~ msgid "\tFound existing upgrade element.\n" +#~ msgstr "\tElemento de atualização existente encontrado.\n" + +#~ msgid "\tNot adding erase element for %s.\n" +#~ msgstr "\tNão está adicionando um elemento de remoção para %s.\n" + +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "\tPacote reempacotado %s adicionado.\n" + +#~ msgid "\tAdded from erase element %s.\n" +#~ msgstr "\tAdicionado a partir de um elemento de remoção %s.\n" + +#~ msgid "\tNo repackaged package...nothing to do.\n" +#~ msgstr "\tNenhum pacote reempacotado... nada a ser feito.\n" + +#~ msgid "sanity checking %d elements\n" +#~ msgstr "verificando a integridade de %d elementos\n" + +#~ msgid "running pre-transaction scripts\n" +#~ msgstr "executando scripts de pré-transação\n" + +#~ msgid "computing %d file fingerprints\n" +#~ msgstr "computando %d impressões digitais do arquivo\n" + +#~ msgid "computing file dispositions\n" +#~ msgstr "computando disposições dos arquivos\n" + +#~ msgid "Creating auto-rollback transaction\n" +#~ msgstr "Criando transação de auto-recuo\n" + +#~ msgid "running post-transaction scripts\n" +#~ msgstr "executando scripts de pós-transação\n" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "ambiente db fechado %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "ambiente db removido %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "abrindo ambiente db %s/%s %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "índice db fechado %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "abrindo índice db %s/%s %s mode=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "índice db bloqueado %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "removendo \"%s\" do índice de %s.\n" + +# , c-format +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "removendo %d entradas a partir do índice %s.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "adicionando \"%s\" ao índice de %s.\n" + +# , c-format +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "adicionando %d entradas ao índice %s.\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "removendo %s após a recompilação bem sucedida do db3.\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "reconstruindo o banco de dados %s em %s\n" + +# , c-format +#~ msgid "creating directory %s\n" +#~ msgstr "criando o diretório %s\n" + +# , c-format +#~ msgid "creating directory %s: %s\n" +#~ msgstr "criando o diretório %s: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "abrindo o banco de dados antigo com a dbapi %d\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "abrindo o novo banco de dados com a dbapi %d\n" + +# "Project-Id-Version: rpm-2.5.3\n" +# "PO-Revision-Date: 1997-09-11 14:00 MET DST\n" +# "Last-Translator: Arnaldo Carvalho de Melo \n" +# "Language-Team: Portuguese \n" +# "MIME-Version: 1.0\n" +# "Content-Type: text/plain; charset=ISO-8859-1\n" +# "Content-Transfer-Encoding: 8-bit\n" +# , c-format +#~ msgid "removing directory %s\n" +#~ msgstr "removendo o diretório %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "índice db fechado %s/%s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "abrindo índice db %s/%s %s mode=0x%x\n" diff --git a/po/quot.sed b/po/quot.sed new file mode 100644 index 0000000..0122c46 --- /dev/null +++ b/po/quot.sed @@ -0,0 +1,6 @@ +s/"\([^"]*\)"/“\1â€/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“â€/""/g diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin new file mode 100644 index 0000000..2436c49 --- /dev/null +++ b/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/rpm.pot b/po/rpm.pot new file mode 100644 index 0000000..2e079fb --- /dev/null +++ b/po/rpm.pot @@ -0,0 +1,3447 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "" + +#: rpmqv.c:41 +msgid "Query/Verify package selection options:" +msgstr "" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "" + +#: rpmqv.c:153 +msgid "only installation and upgrading may be forced" +msgstr "" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" + +#: rpmqv.c:230 +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" + +#: rpmqv.c:234 +msgid "--test may only be specified during package installation and erasure" +msgstr "" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "" + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +msgid "Keyring options:" +msgstr "" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "" + +#: rpmsign.c:25 +msgid "sign package(s)" +msgstr "" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "" + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "" + +#: rpmspec.c:26 +msgid "parse spec file(s) to stdout" +msgstr "" + +#: rpmspec.c:28 +msgid "query spec file(s)" +msgstr "" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "" + +#: rpmspec.c:45 +msgid "Spec options:" +msgstr "" + +#: rpmspec.c:90 +msgid "no arguments given for parse" +msgstr "" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "" + +#: build/files.c:1199 +#, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, c-format +msgid "Directory not found: %s\n" +msgstr "" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, c-format +msgid "%s: failed to encode\n" +msgstr "" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "" + +#: build/files.c:1700 +#, c-format +msgid "Directory not found by glob: %s\n" +msgstr "" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, c-format +msgid "Processing files: %s\n" +msgstr "" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "" + +#: build/parsePolicies.c:32 +#, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "" + +#: build/parsePreamble.c:607 +#, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "" + +#: build/parsePreamble.c:610 +#, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "" + +#: build/parsePreamble.c:616 +#, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "" + +#: build/parsePreamble.c:909 +#, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "" + +#: build/parseReqs.c:112 +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" + +#: build/parseReqs.c:137 +msgid "Versioned file name not permitted" +msgstr "" + +#: build/parseReqs.c:154 +msgid "Version required" +msgstr "" + +#: build/parseReqs.c:165 +msgid "invalid dependency" +msgstr "" + +#: build/parseReqs.c:181 +#, c-format +msgid "line %d: %s: %s\n" +msgstr "" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +msgid "Failed to get policies from header\n" +msgstr "" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, c-format +msgid "Failed to read policy file: %s\n" +msgstr "" + +#: build/policies.c:169 +#, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "" + +#: build/policies.c:186 +#, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, c-format +msgid "Error parsing %s: %s\n" +msgstr "" + +#: build/policies.c:251 +#, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "" + +#: build/policies.c:261 +#, c-format +msgid "Missing module path in line: %s\n" +msgstr "" + +#: build/policies.c:267 +#, c-format +msgid "Too many arguments in line: %s\n" +msgstr "" + +#: build/policies.c:305 +#, c-format +msgid "Processing policies: %s\n" +msgstr "" + +#: build/rpmfc.c:107 +#, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "" + +#: build/rpmfc.c:343 +#, c-format +msgid "%s failed: %x\n" +msgstr "" + +#: build/rpmfc.c:347 +#, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +msgid "No file attributes configured\n" +msgstr "" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "" + +#: lib/cpio.c:226 +msgid "Digest mismatch" +msgstr "" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr "" + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "" + +#: lib/formats.c:588 +msgid "normal" +msgstr "" + +#: lib/formats.c:591 +msgid "replaced" +msgstr "" + +#: lib/formats.c:594 +msgid "not installed" +msgstr "" + +#: lib/formats.c:597 +msgid "net shared" +msgstr "" + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +msgid "missing" +msgstr "" + +#: lib/formats.c:606 +msgid "(unknown)" +msgstr "" + +#: lib/formats.c:645 +msgid "(not a string)" +msgstr "" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "" + +#: lib/poptI.c:131 +msgid "+" +msgstr "" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "" + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +msgid "don't verify digest of files" +msgstr "" + +#: lib/poptI.c:181 +msgid "don't verify digest of files (obsolete)" +msgstr "" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "" + +#: lib/poptI.c:237 +msgid "=" +msgstr "" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "" + +#: lib/psm.c:212 +#, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "" + +#: lib/psm.c:849 +msgid " on file " +msgstr "" + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "" + +#: lib/query.c:160 +msgid "normal " +msgstr "" + +#: lib/query.c:163 +msgid "replaced " +msgstr "" + +#: lib/query.c:166 +msgid "not installed " +msgstr "" + +#: lib/query.c:169 +msgid "net shared " +msgstr "" + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "" + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "" + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "" + +#: lib/query.c:445 +#, c-format +msgid "record %u could not be read\n" +msgstr "" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "" + +#: lib/rpmchecksig.c:43 +#, c-format +msgid "%s: key %d import failed.\n" +msgstr "" + +#: lib/rpmchecksig.c:47 +#, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr "" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr "" + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr "" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr "" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "" + +#: lib/rpmchroot.c:43 +#, c-format +msgid "Unable to open current directory: %m\n" +msgstr "" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, c-format +msgid "%s: chroot directory not set\n" +msgstr "" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "" + +#: lib/rpmchroot.c:95 +#, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "" + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +msgid "package scriptlets can be expanded at install time." +msgstr "" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "" + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "" + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "" + +#: lib/rpmlead.c:126 +msgid "not an rpm package\n" +msgstr "" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "" + +#: lib/rpmlock.c:106 +#, c-format +msgid "waiting for %s lock on %s\n" +msgstr "" + +#: lib/rpmplugins.c:60 +#, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "" + +#: lib/rpmplugins.c:67 +#, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "" + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "" + +#: lib/rpmprob.c:172 +#, c-format +msgid "%s is obsoleted by %s%s" +msgstr "" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "" + +#: lib/rpmscript.c:69 +#, c-format +msgid "Unable to restore current directory: %m" +msgstr "" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "" + +#: lib/rpmte.c:820 +msgid "install" +msgstr "" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +msgid "failed" +msgstr "" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2228 +#, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "" + +#: lib/rpmdb.c:2334 +#, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "" + +#: lib/rpmdb.c:2343 +#, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" + +#: plugins/sepolicy.c:220 +#, c-format +msgid "Failed to decode policy for %s\n" +msgstr "" + +#: plugins/sepolicy.c:227 +#, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "" + +#: plugins/sepolicy.c:233 +#, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "" + +#: plugins/sepolicy.c:305 +msgid "Failed to create semanage handle\n" +msgstr "" + +#: plugins/sepolicy.c:311 +msgid "Failed to connect to policy handler\n" +msgstr "" + +#: plugins/sepolicy.c:315 +#, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "" + +#: plugins/sepolicy.c:346 +#, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "" + +#: plugins/sepolicy.c:394 +#, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "" + +#: plugins/sepolicy.c:424 +#, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, c-format +msgid "Failed to fork process: %s\n" +msgstr "" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, c-format +msgid "Failed to execute %s: %s\n" +msgstr "" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, c-format +msgid "%s terminated abnormally\n" +msgstr "" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, c-format +msgid "%s failed with exit code %i\n" +msgstr "" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, c-format +msgid "Failed to extract policy from %s\n" +msgstr "" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "" + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "" + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "" + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "" + +#: rpmio/rpmpgp.c:1361 +#, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "" + +#: rpmio/rpmpgp.c:1369 +msgid "(none)" +msgstr "" + +#: rpmio/rpmpgp.c:1652 +#, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "" + +#: sign/rpmgensig.c:577 +#, c-format +msgid "replacing %s failed: %s\n" +msgstr "" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "" diff --git a/po/ru.gmo b/po/ru.gmo new file mode 100644 index 0000000..3b39ba2 Binary files /dev/null and b/po/ru.gmo differ diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..900b4d3 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,4312 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.0.3\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2010-04-02 21:55+0800\n" +"Last-Translator: Misha Shnurapet \n" +"Language-Team: Black Cat Linux Team \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=KOI8-R\n" +"Content-Transfer-Encoding: 8bit\n" +"Date: 1999-04-03 12:20+0200\n" +"X-Generator: KBabel 0.9.6\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM ×ÅÒÓÉÑ %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "á×ÔÏÒÓËÉÅ ÐÒÁ×Á ¿ 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "üÔÕ ÐÒÏÇÒÁÍÍÕ ÍÏÖÎÏ Ó×ÏÂÏÄÎÏ ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÎÁ ÕÓÌÏ×ÉÑÈ GNU GPL\n" + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ ÁÒÈÉ×Á: %s\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "ÚÁÐÕÓË ÎÅ ÕÄÁÌÓÑ\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "ÚÁÄÁÎÎÙÊ ÁÒÇÕÍÅÎÔ ÎÅ Ñ×ÌÑÅÔÓÑ ÐÁËÅÔÏÍ RPM\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "ÏÛÉÂËÁ ÞÔÅÎÉÑ ÚÁÇÏÌÏ×ËÁ ÉÚ ÐÁËÅÔÁ\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏ×ÔÏÒÎÏ ÏÔËÒÙÔØ payload: %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔÙ × ÇÒÕÐÐÅ" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "ðÁÒÁÍÅÔÒÙ ÚÁÐÒÏÓÁ (Ó -q ÉÌÉ --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "ðÁÒÁÍÅÔÒÙ ÐÒÏ×ÅÒËÉ (Ó -V ÉÌÉ --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "ðÁÒÁÍÅÔÒÙ õÓÔÁÎÏ×ËÉ/ïÂÎÏ×ÌÅÎÉÑ/õÄÁÌÅÎÉÑ:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "ïÂÝÉÅ ÐÁÒÁÍÅÔÒÙ ÄÌÑ ×ÓÅÈ ÒÅÖÉÍÏ× É ËÏÍÐÏÎÅÎÔÏ× rpm:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "ÚÁ ÏÄÉÎ ÒÁÚ ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌÎÅÎ ÔÏÌØËÏ ÏÄÉÎ ÔÉÐ ÐÒÏ×ÅÒËÉ ÉÌÉ ÚÁÐÒÏÓÁ" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "ÎÅÏÖÉÄÁÎÎÙÅ ÆÌÁÇÉ ÚÁÐÒÏÓÁ" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ÆÏÒÍÁÔ ÚÁÐÒÏÓÁ" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ÉÓÔÏÞÎÉË ÚÁÐÒÏÓÁ" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÏÄÉÎ ÉÚ ÏÓÎÏ×ÎÙÈ ÒÅÖÉÍÏ×" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"ÐÒÉÎÕÄÉÔÅÌØÎÙÍÉ ÍÏÇÕÔ ÂÙÔØ ÔÏÌØËÏ ÕÓÔÁÎÏ×ËÁ, ÏÂÎÏ×ÌÅÎÉÅ, ÕÄÁÌÅÎÉÅ ÉÓÈÏÄÎÉËÏ× " +"É ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "ÆÁÊÌÙ ÍÏÇÕÔ ÂÙÔØ ÐÅÒÅÍÅÝÅÎÙ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "--prefix ÎÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ Ó --relocate ÉÌÉ --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"×ÁÒÉÁÎÔÙ --relocate É --excludepath ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ " +"ÎÏ×ÙÈ ÐÁËÅÔÏ×" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "×ÁÒÉÁÎÔ --prefix ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÎÏ×ÙÈ ÐÁËÅÔÏ×" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "ÁÒÇÕÍÅÎÔÙ ÄÌÑ --prefix ÄÏÌÖÎÙ ÎÁÞÉÎÁÔØÓÑ Ó /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "" +"ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎ ÔÏÌØËÏ ÏÄÉÎ ÉÚ ÐÁÒÁÍÅÔÒÏ× --excludedocs ÉÌÉ --" +"includedocs" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÄÁÌÅÎÉÉ ÐÁËÅÔÁ" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÉÌÉ ÕÄÁÌÅÎÉÉ ÐÁËÅÔÁ" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"ÐÁÒÁÍÅÔÒÙ ÚÁÐÒÅÔÁ ÓÃÅÎÁÒÉÅ× ÍÏÇÕÔ ÂÙÔØ ÕËÁÚÁÎÙ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÉÌÉ " +"ÕÄÁÌÅÎÉÉ ÐÁËÅÔÁ" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"ÐÁÒÁÍÅÔÒÙ ÚÁÐÒÅÔÁ ÔÒÉÇÇÅÒÏ× ÍÏÇÕÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÉÌÉ " +"ÕÄÁÌÅÎÉÉ ÐÁËÅÔÁ(Ï×)" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ, ÕÄÁÌÅÎÉÉ É ÓÂÏÒËÅ ÐÁËÅÔÁ" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÉÌÉ ÕÄÁÌÅÎÉÉ ÐÁËÅÔÁ" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "ÁÒÇÕÍÅÎÔÙ ÄÌÑ --root (-r) ÄÏÌÖÎÙ ÎÁÞÉÎÁÔØÓÑ Ó /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "ÎÅ ÚÁÄÁÎÙ ÐÁËÅÔÙ ÄÌÑ ÕÄÁÌÅÎÉÑ" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "ÎÅ ÚÁÄÁÎÙ ÐÁËÅÔÙ ÄÌÑ ÕÓÔÁÎÏ×ËÉ" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "ÎÅ ÚÁÄÁÎÙ ÁÒÇÕÍÅÎÔÙ ÚÁÐÒÏÓÁ" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "ÎÅ ÚÁÄÁÎÙ ÁÒÇÕÍÅÎÔÙ ÄÌÑ ×ÅÒÉÆÉËÁÃÉÉ" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot ÕÖÅ ÕËÁÚÁÎ, %s ÉÇÎÏÒÉÒÕÅÔÓÑ\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"×ÙÐÏÌÎÉÔØ ÐÏ ÓÔÁÄÉÀ %prep (ÒÁÚ×ÅÒÎÕÔØ ÉÓÈÏÄÎÉËÉ É ÎÁÌÏÖÉÔØ ÚÁÐÌÁÔÙ) ÉÚ <ÆÁÊÌ " +"ÓÐÅÃÉÆÉËÁÃÉÉ>" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "<ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ>" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"×ÙÐÏÌÎÉÔØ ÐÏ ÓÔÁÄÉÀ %build (%prep, ÚÁÔÅÍ ËÏÍÐÉÌÑÃÉÑ) ÉÚ <ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ>" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"×ÙÐÏÌÎÉÔØ ÐÏ ÓÔÁÄÉÀ %install (%prep, %build, ÚÁÔÅÍ ÕÓÔÁÎÏ×ËÁ) ÉÚ <ÆÁÊÌ " +"ÓÐÅÃÉÆÉËÁÃÉÉ>" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "ÐÒÏ×ÅÒÉÔØ ÒÁÚÄÅÌ %files ÉÚ <ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ>" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "ÓÏÂÒÁÔØ ÉÓÈÏÄÎÙÊ É Ä×ÏÉÞÎÙÊ ÐÁËÅÔÙ ÐÏ <ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ>" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "ÓÏÂÒÁÔØ Ä×ÏÉÞÎÙÊ ÐÁËÅÔ ÐÏ <ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ>" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "ÓÏÂÒÁÔØ ÉÓÈÏÄÎÙÊ ÐÁËÅÔ ÐÏ <ÆÁÊÌÕ ÓÐÅÃÉÆÉËÁÃÉÉ>" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"×ÙÐÏÌÎÉÔØ ÐÏ ÓÔÁÄÉÀ %prep (ÒÁÚ×ÅÒÎÕÔØ ÉÓÈÏÄÎÉËÉ É ÎÁÌÏÖÉÔØ ÚÁÐÌÁÔÙ) ÉÚ " +"<ÁÒÈÉ× tar>" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "<ÁÒÈÉ× tar>" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "×ÙÐÏÌÎÉÔØ ÐÏ ÓÔÁÄÉÀ %build (%prep, ÚÁÔÅÍ ËÏÍÐÉÌÑÃÉÑ) ÉÚ <ÁÒÈÉ× tar>" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"×ÙÐÏÌÎÉÔØ ÐÏ ÓÔÁÄÉÀ %install (%prep, %build, ÚÁÔÅÍ ÕÓÔÁÎÏ×ËÁ) ÉÚ <ÁÒÈÉ× tar>" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "ÐÒÏ×ÅÒÉÔØ ÓÅËÃÉÀ %files ÉÚ <ÁÒÈÉ× tar>" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "ÓÏÂÒÁÔØ ÉÓÈÏÄÎÙÊ É Ä×ÏÉÞÎÙÊ ÐÁËÅÔÙ ÉÚ <ÁÒÈÉ× tar>" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "ÓÏÂÒÁÔØ Ä×ÏÉÞÎÙÊ ÐÁËÅÔ ÉÚ <ÁÒÈÉ× tar>" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "ÓÏÂÒÁÔØ ÉÓÈÏÄÎÙÊ ÐÁËÅÔ ÉÚ <ÁÒÈÉ× tar>" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "ÓÏÂÒÁÔØ Ä×ÏÉÞÎÙÊ ÐÁËÅÔ ÉÚ <ÉÓÈÏÄÎÙÊ ÐÁËÅÔ>" + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "<ÉÓÈÏÄÎÙÊ ÐÁËÅÔ>" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"×ÙÐÏÌÎÉÔØ ÐÏ ÓÔÁÄÉÀ %install (%prep, %build, ÚÁÔÅÍ ÕÓÔÁÎÏ×ËÁ) ÉÚ <ÉÓÈÏÄÎÙÊ " +"ÐÁËÅÔ>" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "ÐÅÒÅÏÐÒÅÄÅÌÉÔØ build root" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "ÐÏÓÌÅ ÚÁ×ÅÒÛÅÎÉÑ ÕÄÁÌÉÔØ ÄÅÒÅ×Ï ÉÓÈÏÄÎÉËÏ×" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ÉÇÎÏÒÉÒÏ×ÁÔØ ExcludeArch: × ÆÁÊÌÅ ËÏÎÆÉÇÕÒÁÃÉÉ" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "ÏÔÌÁÄËÁ ÍÁÛÉÎÙ ÓÏÓÔÏÑÎÉÑ ÆÁÊÌÏ×" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "ÎÅ ×ÙÐÏÌÎÑÔØ ÎÉËÁËÉÈ ÜÔÁÐÏ× ÓÂÏÒËÉ" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÚÁ×ÉÓÉÍÏÓÔÉ ÐÁËÅÔÁ ÐÅÒÅÄ ÓÂÏÒËÏÊ" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" +"ÓÏÚÄÁÔØ ÚÁÇÏÌÏ×ÏË(ËÉ) ÐÁËÅÔÁ, ÓÏ×ÍÅÓÔÉÍÙÅ Ó (ÕÓÔÁÒÅ×ÛÉÍÉ) ÆÏÒÍÁÔÁÍÉ rpm[23]" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "ÉÇÎÏÒÉÒÏ×ÁÔØ ÓÔÒÏËÉ i18N ÉÚ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "ÐÏÓÌÅ ÚÁ×ÅÒÛÅÎÉÑ ÕÄÁÌÉÔØ ÉÓÈÏÄÎÉËÉ" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "ÐÏÓÌÅ ÚÁ×ÅÒÛÅÎÉÑ ÕÄÁÌÉÔØ ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "ÐÅÒÅÊÔÉ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ Ë ÕËÁÚÁÎÎÏÍÕ ÜÔÁÐÕ (ÔÏÌØËÏ ÄÌÑ c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "ÐÅÒÅÏÐÒÅÄÅÌÉÔØ ÃÅÌÅ×ÕÀ ÐÌÁÔÆÏÒÍÕ" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" +"ðÁÒÁÍÅÔÒÙ ÓÂÏÒËÉ Ó [ <ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ> | <ÔÁÒ ÁÒÈÉ×> | <ÉÓÈÏÄÎÙÊ ÐÁËÅÔ> ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "îÅÕÄÏ×ÌÅÔ×ÏÒÅÎÎÙÅ ÚÁ×ÉÓÉÍÏÓÔÉ ÓÂÏÒËÉ:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ËÁÎÁÌÁ tar: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ ÉÚ %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÉÍÅÎÏ×ÁÔØ %s × %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "îÅ ÏÂÙÞÎÙÊ ÆÁÊÌ: %s.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "æÁÊÌ %s ÎÅ ÐÏÈÏÖ ÎÁ ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "ðÌÁÔÆÏÒÍÙ ÄÌÑ ÓÂÏÒËÉ: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "óÂÏÒËÁ ÄÌÑ ÐÌÁÔÆÏÒÍÙ %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÂÁÚÕ ÄÁÎÎÙÈ" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"ÐÅÒÅÉÎÄÅËÓÉÒÏ×ÁÔØ ÂÁÚÕ ÉÎ×ÅÒÔÉÒÏ×ÁÎÎÙÈ ÓÐÉÓËÏ× ÉÚ ÕÓÔÁÎÏ×ÌÅÎÎÙÈ ÚÁÇÏÌÏ×ËÏ× " +"ÐÁËÅÔÏ×" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "ÐÒÏ×ÅÒÉÔØ ÆÁÊÌÙ ÂÁÚÙ ÄÁÎÎÙÈ" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "ðÁÒÁÍÅÔÒÙ ÂÁÚÙ ÄÁÎÎÙÈ" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "ÐÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ(É) ÐÁËÅÔÁ" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "ÉÍÐÏÒÔÉÒÏ×ÁÔØ ÏÔËÒÙÔÙÊ ËÌÀÞ" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "ðÁÒÁÍÅÔÒÙ ÐÏÄÐÉÓÉ:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "ÎÅ ÚÁÄÁÎÙ ÁÒÇÕÍÅÎÔÙ" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "ÕÓÔÁÎÏ×ÉÔØ ÐÁËÅÔ(Ù)" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "ÐÏÄÐÉÓÁÔØ ÐÁËÅÔ (ÔÏ ÖÅ ÓÁÍÏÅ ÞÔÏ --addsign)" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "ÐÒÏ×ÅÒÉÔØ ÐÏÄÐÉÓØ(É) ÐÁËÅÔÁ" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "ðÁÒÁÍÅÔÒÙ ÐÏÄÐÉÓÉ:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "÷Ù ÄÏÌÖÎÙ ÕÓÔÁÎÏ×ÉÔØ \"%%_gpg_name\" × ×ÁÛÅÍ ÍÁËÒÏÆÁÊÌÅ\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "÷×ÅÄÉÔÅ ËÌÀÞÅ×ÕÀ ÆÒÁÚÕ: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "ëÌÀÞÅ×ÁÑ ÆÒÁÚÁ ÐÒÉÎÑÔÁ.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "îÅ×ÅÒÎÁÑ ËÌÀÞÅ×ÁÑ ÆÒÁÚÁ\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "ÚÁÐÒÏÓÉÔØ ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "ÚÁÐÒÏÓÉÔØ ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "ÉÓÐÏÌØÚÕÊÔÅ ÓÌÅÄÕÀÝÉÊ ÆÏÒÍÁÔ ÚÁÐÒÏÓÁ" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "ðÁÒÁÍÅÔÒÙ ÐÏÄÐÉÓÉ:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "ÎÅ ÚÁÄÁÎÙ ÁÒÇÕÍÅÎÔÙ ÚÁÐÒÏÓÁ" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "÷ÙÐÏÌÎÑÅÔÓÑ(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "÷ÙÐÏÌÎÉÔØ %s ÎÅ ÕÄÁÌÏÓØ (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "îÅ×ÅÒÎÙÊ ËÏÄ ×ÏÚ×ÒÁÔÁ ÉÚ %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"ïÛÉÂËÉ ÓÂÏÒËÉ ÐÁËÅÔÏ×:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ ÐÒÉ ÁÎÁÌÉÚÅ ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ ÐÒÉ ÁÎÁÌÉÚÅ &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ ÐÒÉ ÁÎÁÌÉÚÅ ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "ÏÛÉÂËÁ ÁÎÁÌÉÚÁ ×ÙÒÁÖÅÎÉÑ\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "ÎÅÚÁËÒÙÔÁÑ (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- ÔÏÌØËÏ ÄÌÑ ÞÉÓÅÌ\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! ÔÏÌØËÏ ÄÌÑ ÞÉÓÅÌ\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "ÔÉÐÙ ÄÏÌÖÎÙ ÓÏ×ÐÁÄÁÔØ\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ÓÔÒÏË\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ÓÔÒÏË\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& É || ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ ÄÌÑ ÓÔÒÏË\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ×ÙÒÁÖÅÎÉÉ\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "ïÔÓÕÔÓÔ×ÕÅÔ '(' × %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ')' × %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "îÅ×ÅÒÎÙÊ ÔÏËÅÎ %s: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "ïÔÓÕÔÓÔ×ÕÅÔ %s × %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "îÅ ÐÒÏÂÅÌ ÓÌÅÄÕÅÔ ÐÏÓÌÅ %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "îÅ×ÅÒÎÙÊ ÓÉÎÔÁËÓÉÓ: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "îÅ×ÅÒÎÙÅ ÐÒÁ×Á: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "îÅ×ÅÒÎÙÅ ÐÒÁ×Á ÎÁ ËÁÔÁÌÏÇ %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "îÅÏÂÙÞÎÁÑ ÄÌÉÎÁ locale: \"%.*s\" × %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "äÕÂÌÉËÁÔ locale %.*s × %%lang(%s)\n" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "îÅ×ÅÒÎÙÊ ÔÏËÅÎ %s: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "ôÏÌØËÏ ÏÄÉÎ ÁÒÇÕÍÅÎÔ ÄÌÑ %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "ä×Á ÆÁÊÌÁ × ÏÄÎÏÊ ÓÔÒÏËÅ: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "æÁÊÌ ÄÏÌÖÅÎ ÎÁÞÉÎÁÔØÓÑ Ó \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "îÅÌØÚÑ ÓÍÅÛÉ×ÁÔØ ÓÐÅÃ. %%doc Ó ÄÒÕÇÉÍÉ ÆÏÒÍÁÍÉ: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "îÅ ÕÄÁÅÔÓÑ ÐÒÏ×ÅÒÉÔØ ÆÁÊÌ %u, ×ÏÚ×ÒÁÔ Ë MD5\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "æÁÊÌ ÕËÁÚÁÎ Ä×ÁÖÄÙ: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s ÎÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "óÉÍ×ÏÌÉÞÅÓËÁÑ ÓÓÙÌËÁ ÕËÁÚÙ×ÁÅÔ ÎÁ BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "æÁÊÌ ÎÅ ÎÁÊÄÅÎ: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "æÁÊÌ ÎÅ ÎÁÊÄÅÎ: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, fuzzy, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: ÏÛÉÂËÁ ÞÔÅÎÉÑ ×Ï ×ÒÅÍÑ ÉÍÐÏÒÔÉÒÏ×ÁÎÉÑ.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: ÜÔÏ ÎÅ ÏÔËÒÙÔÙÊ ËÌÀÞ.\n" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÒÁÓËÒÙÔØ ÍÁËÒÏÓ %%%s\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "æÁÊÌ ÄÏÌÖÅÎ ÎÁÞÉÎÁÔØÓÑ Ó \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Glob ÎÅ ÒÁÚÒÅÛÁÀÔÓÑ: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "æÁÊÌ ÎÅ ÎÁÊÄÅÎ: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "æÁÊÌ ÎÅ ÎÁÊÄÅÎ: %s\n" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ %%files %s: %s\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "ÓÔÒÏËÁ: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "îÅ×ÅÒÎÙÊ ÆÁÊÌ %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "îÅ×ÅÒÎÁÑ ÐÁÒÁ ×ÌÁÄÅÌÅÃ/ÇÒÕÐÐÁ: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "ðÒÏ×ÅÒËÁ ÎÁ ÎÅÕÐÁËÏ×ÁÎÎÙÊ(Å) ÆÁÊÌ(Ù): %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"ïÂÎÁÒÕÖÅÎ(Ù) ÕÓÔÁÎÏ×ÌÅÎÎÙÊ(Å) (ÎÏ ÎÅ ÕÐÁËÏ×ÁÎÎÙÊ(Å)) ÆÁÊÌ(Ù):\n" +"%s" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "ïÂÒÁÂÁÔÙ×ÁÀÔÓÑ ÆÁÊÌÙ: %s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "ä×ÏÉÞÎÙÅ ÄÁÎÎÙÅ Ó ÁÒÈÉÔÅËÕÔÒÏÊ × ÐÁËÅÔÅ noarch\n" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ ÁÒÈÉ×Á ÎÁ ÆÁÊÌÅ %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ ÁÒÈÉ×Á: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy: ÏÛÉÂËÁ ÚÁÐÉÓÉ: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy: ÏÛÉÂËÁ ÞÔÅÎÉÑ: %s\n" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "ÓÔÒÏËÁ: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ËÁÎÏÎÉÚÉÒÏ×ÁÔØ ÉÍÑ ËÏÍÐØÀÔÅÒÁ: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ PreIn: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ PreUn: %s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ PreIn: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ PostIn: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ PostUn: %s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ PostIn: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ VerifyScript: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ Trigger script: %s\n" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÐÉËÔÏÇÒÁÍÍÙ: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÍÅÓÔÉÔØ ÚÁÇÏÌÏ×ÏË × ÎÅÒÐÅÒÙ×ÎÕÀ ÏÂÌÁÓÔØ ÐÁÍÑÔÉ.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ×ÒÅÍÅÎÎÙÊ ÚÁÇÏÌÏ×ÏË\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "îÅ×ÅÒÎÙÅ ÄÁÎÎÙÅ CSA\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÚÁÇÒÕÚÉÔØ ÚÁÇÏÌÏ×ÏË ÐÏÄÐÉÓÉ.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÐÁËÅÔ: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÃÅÌØ ÐÏÄÐÉÓÉ %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË ÉÚ %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÚÁÇÏÌÏ×ÏË × %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÓÏÄÅÒÖÉÍÏÅ ÉÚ %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÓÏÄÅÒÖÉÍÏÅ × %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "úÁÐÉÓÁÎ: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "÷ÙÐÏÌÎÑÅÔÓÑ(%s): %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "÷ÙÐÏÌÎÉÔØ %s ÎÅ ÕÄÁÌÏÓØ (%s): %s\n" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "îÅ×ÅÒÎÁÑ ËÌÀÞÅ×ÁÑ ÆÒÁÚÁ\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÉÍÑ ÆÁÊÌÁ ÄÌÑ ÐÁËÅÔÁ %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "ÓÔÒÏËÁ %d: ×ÔÏÒÏÅ %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "ÚÁÐÉÓÉ %%changelog ÄÏÌÖÎÙ ÎÁÞÉÎÁÔØÓÑ Ó *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "ÎÅÐÏÌÎÁÑ ÚÁÐÉÓØ %%changelog\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "ÎÅ×ÅÒÎÁÑ ÄÁÔÁ × %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog ÎÅ × ÎÉÓÈÏÄÑÝÅÍ ÈÒÏÎÏÌÏÇÉÞÅÓËÏÍ ÐÏÒÑÄËÅ\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "ÐÒÏÐÕÝÅÎÏ ÉÍÑ × %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "ÎÅÔ ÏÐÉÓÁÎÉÑ × %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "ÓÔÒÏËÁ %d: ïÛÉÂËÁ ÁÎÁÌÉÚÁ %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÙÊ ÐÁÒÁÍÅÔÒ %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "ÓÔÒÏËÁ %d: óÌÉÛËÏÍ ÍÎÏÇÏ ÉÍÅÎ: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "ÓÔÒÏËÁ %d: ðÁËÅÔ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "ÓÔÒÏËÁ %d: ÷ÔÏÒÏÅ ÏÐÉÓÁÎÉÅ\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "ÓÔÒÏËÁ %d: ïÛÉÂËÁ ÒÁÚÂÏÒÁ %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "ÓÔÒÏËÁ %d: ïÛÉÂËÁ ÒÁÚÂÏÒÁ %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÏÅ ÞÉÓÌÏ: %s\n" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÏÅ ÞÉÓÌÏ no%s: %d\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÏÅ ÞÉÓÌÏ %s: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "\"%s\" ÚÁÄÁÅÔ ÎÅÓËÏÌØËÏ ÐÁËÅÔÏ×\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "áÒÈÉÔÅËÔÕÒÁ ÉÓËÌÀÞÅÎÁ: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "áÒÈÉÔÅËÔÕÒÁ ÎÅ ×ËÌÀÞÅÎÁ: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "ïó ÉÓËÌÀÞÅÎÁ: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "ïó ÎÅ ×ËÌÀÞÅÎÁ: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "ðÏÌÅ %s ÏÂÑÚÁÎÏ ÐÒÉÓÕÔÓÔ×Ï×ÁÔØ × ÐÁËÅÔÅ: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "ðÏ×ÔÏÒÑÀÝÉÅÓÑ ÚÁÐÉÓÉ %s × ÐÁËÅÔÅ: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÐÉËÔÏÇÒÁÍÍÕ %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÐÉËÔÏÇÒÁÍÍÕ %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÐÉËÔÏÇÒÁÍÍÙ: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "ÓÔÒÏËÁ %d: ñÒÌÙË ÔÒÅÂÕÅÔ ÔÏÌØËÏ ÏÄÉÎ ÁÒÇÕÍÅÎÔ: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ '-' × %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ '-' × %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ '-' × %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÙÊ ÔÜÇ: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "ÓÔÒÏËÁ %d: ðÕÓÔÏÊ ÔÜÇ: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "ÓÔÒÏËÁ %d: ðÒÅÆÉËÓ ÎÅ ÍÏÖÅÔ ÚÁËÁÎÞÉ×ÁÔØÓÑ ÎÁ \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "ÓÔÒÏËÁ %d: Docdir ÄÏÌÖÅÎ ÎÁÞÉÎÁÔØÓÑ Ó '/': %s\n" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "ÓÔÒÏËÁ %d: ðÏÌÅ Epoch/Serial ÄÏÌÖÎÏ ÂÙÔØ ÞÉÓÌÏÍ: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÏÅ ÞÉÓÌÏ %s: ÏÐÒÅÄÅÌÑÅÔ: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ BuildArchitecture: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: îÅÉÚ×ÅÓÔÎÙÊ ÑÒÌÙË %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "ÓÔÒÏËÁ %d: ôÒÅÂÕÅÔÓÑ ×ÅÒÓÉÑ: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "îÅ×ÅÒÎÁÑ ÓÐÅÃÉÆÉËÁÃÉÑ ÐÁËÅÔÁ: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "ðÁËÅÔ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅÉÚ×ÅÓÔÎÙÊ ÔÜÇ: %s\n" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "BuildRoot ÎÅ ÍÏÖÅÔ ÂÙÔØ \"/\": %s\n" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "BuildRoot ÎÅ ÍÏÖÅÔ ÂÙÔØ \"/\": %s\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "îÅ×ÅÒÎÙÊ ÉÓÈÏÄÎÉË: %s: %s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "îÅÔ ÚÁÐÌÁÔÙ ÎÏÍÅÒ %d\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "îÅÔ ÉÓÈÏÄÎÉËÁ ÎÏÍÅÒ %d\n" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "ÉÓÈÏÄÎÙÊ ÐÁËÅÔ ÎÅ ÓÏÄÅÒÖÉÔ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "ïÛÉÂËÁ ÁÎÁÌÉÚÁ %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ ÄÌÑ %%setup %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÙÊ ÐÁÒÁÍÅÔÒ %%setup %s: %s\n" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÐÁËÅÔÁ: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "ÓÔÒÏËÁ %d: ×ÔÏÒÏÊ %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"ÓÔÒÏËÁ %d: ôÏËÅÎÙ ÚÁ×ÉÓÉÍÏÓÔÅÊ ÄÏÌÖÎÙ ÎÁÞÉÎÁÔØÓÑ Ó ÂÕË×Ù, ÃÉÆÒÙ, '_' ÉÌÉ " +"'/': %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "ÓÔÒÏËÁ %d: ÷ÅÒÓÉÉ × ÉÍÅÎÁÈ ÆÁÊÌÏ× ÎÅÄÏÐÕÓÔÉÍÙ: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "ÓÔÒÏËÁ %d: ôÒÅÂÕÅÔÓÑ ×ÅÒÓÉÑ: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÏÅ ÞÉÓÌÏ: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "ÓÔÒÏËÁ %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "ÓÔÒÏËÁ %d: ÔÒÉÇÇÅÒÙ ÄÏÌÖÎÙ ÓÏÄÅÒÖÁÔØ --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "ÓÔÒÏËÁ %d: ïÛÉÂËÁ ÁÎÁÌÉÚÁ %s: %s\n" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "ÓÔÒÏËÁ %d: ðÒÏÇÒÁÍÍÙ × ÓÃÅÎÁÒÉÑÈ ÄÏÌÖÎÙ ÎÁÞÉÎÁÔØÓÑ Ó '/': %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "ÓÔÒÏËÁ %d: ðÒÏÇÒÁÍÍÙ × ÓÃÅÎÁÒÉÑÈ ÄÏÌÖÎÙ ÎÁÞÉÎÁÔØÓÑ Ó '/': %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "ÓÔÒÏËÁ %d: ÷ÔÏÒÏÅ %s\n" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "ÓÔÒÏËÁ %d: ïÛÉÂËÁ ÁÎÁÌÉÚÁ %%description: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "ÓÔÒÏËÁ %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "îÅÚÁËÒÙÔÙÊ %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean ËÏÄ ×ÏÚ×ÒÁÔÁ: %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: îÁÊÄÅÎ %%else ÂÅÚ %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: îÁÊÄÅÎ %%endif ÂÅÚ %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "ÎÅ×ÅÒÎÏÅ ÏÂßÑ×ÌÅÎÉÅ %%include\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "îÅ ÎÁÊÄÅÎÙ ÓÏ×ÍÅÓÔÉÍÙÅ ÁÒÈÉÔÅËÔÕÒÙ ÄÌÑ ÓÂÏÒËÉ.\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "ðÁËÅÔ ÎÅ ÉÍÅÅÔ %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ ÉÚ %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ ÉÚ %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ ÉÚ %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ËÁÎÁÌÁ tar: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "ïÛÉÂËÁ ÁÎÁÌÉÚÁ %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "÷ÙÐÏÌÎÑÅÔÓÑ(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "ïÔÓÕÔÓÔ×ÕÅÔ %s × %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ× × ÓÔÒÏËÅ ÄÁÎÎÙÈ × %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "ïÂÒÁÂÁÔÙ×ÁÀÔÓÑ ÆÁÊÌÙ: %s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÏÅ ÞÉÓÌÏ: %s\n" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "óÂÏÊ ×ÅÔ×ÌÅÎÉÑ %s: %s\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "óÂÏÊ ×ÅÔ×ÌÅÎÉÑ %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s ÎÅ ÕÄÁÌÏÓØ: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "ÚÁÐÉÓØ ×ÓÅÈ ÄÁÎÎÙÈ × %s ÎÅ ÕÄÁÌÁÓØ\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "ÏÛÉÂËÁ gpg ÐÒÉ ÚÁÐÉÓÉ ÐÏÄÐÉÓÉ\n" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "%s ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "éÄÅÔ ÐÏÉÓË %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "ÚÁÐÒÏÓ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ %s ÎÅ ÕÄÁÌÓÑ, ÎÅ×ÏÚÍÏÖÎÏ ÒÁÚÏÂÒÁÔØ ÆÁÊÌ\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(ÏÛÉÂËÁ 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "îÅ×ÅÒÎÙÊ magic" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "îÅ×ÅÒÎÙÊ/ÎÅÞÉÔÁÅÍÙÊ ÚÁÇÏÌÏ×ÏË" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "úÁÇÏÌÏ×ÏË ÓÌÉÛËÏÍ ×ÅÌÉË" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÆÁÊÌÁ" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ÖÅÓÔËÁÑ ÓÓÙÌËÁ" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "ËÏÎÔÒÏÌØÎÙÅ MD5-ÓÕÍÍÙ ÎÅ ÓÏ×ÐÁÄÁÀÔ" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "æÁÊÌ ÁÒÈÉ×Á ÎÅ ÎÁÊÄÅÎ × ÚÁÇÏÌÏ×ËÅ ÐÁËÅÔÁ" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " ÎÅ ÕÄÁÌÏÓØ - " + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "ÐÁËÅÔ %s ÕÖÅ ÂÙÌ ÄÏÂÁ×ÌÅÎ, ÚÁÍÅÎÑÅÔÓÑ %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "ÐÁËÅÔ %s ÕÖÅ ÂÙÌ ÄÏÂÁ×ÌÅÎ, ÚÁÍÅÎÑÅÔÓÑ %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(ÎÅ ÞÉÓÌÏ)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(ÎÅ base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(ÎÅÐÒÁ×ÉÌØÎÙÊ ÔÉÐ)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(not a blob)" + +#: lib/formats.c:415 +#, fuzzy +msgid "(invalid xml type)" +msgstr "(ÎÅÐÒÁ×ÉÌØÎÙÊ ÔÉÐ)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(ÎÅ ÐÏÄÐÉÓØ ÆÏÒÍÁÔÁ OpenPGP)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "ÎÏÒÍÁÌØÎÙÊ " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "ÚÁÍÅÎÅÎÎÙÊ " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "ÎÅ ÕÓÔÁÎÏ×ÌÅÎ " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "ÓÅÔÅ×ÏÊ " + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(ÎÅÉÚ×. %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(ÎÅ ÞÉÓÌÏ)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "ÐÏÌØÚÏ×ÁÔÅÌØ %s ÎÅ ÓÕÝÅÓÔ×ÕÅÔ - ÉÓÐÏÌØÚÕÅÔÓÑ root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "ÇÒÕÐÐÁ %s ÎÅ ÓÕÝÅÓÔ×ÕÅÔ - ÉÓÐÏÌØÚÕÅÔÓÑ root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "ÆÁÊÌ ÁÒÈÉ×Á %s ÎÅ ÎÁÊÄÅÎ × ÓÐÉÓËÅ ÆÁÊÌÏ× ÚÁÇÏÌÏ×ËÁ\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s ÓÏÈÒÁÎÅÎ ËÁË %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s ÎÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s: ËÁÔÁÌÏÇ ÎÅ ÐÕÓÔ\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s ÎÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s ÓÏÚÄÁÎ ËÁË %s\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: ÏÛÉÂËÁ rpmReadSignature\n" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: ðÏÄÐÉÓØ ÎÅÄÏÓÔÕÐÎÁ\n" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: ÏÛÉÂËÁ headerRead\n" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ Fread: %s\n" + +#: lib/package.c:794 +#, fuzzy, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s ÎÅ ÍÏÖÅÔ ÂÙÔØ ÕÓÔÁÎÏ×ÌÅÎ\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "ÐÒÅÏÐÒÅÄÅÌÉÔØ MACRO ÓÏ ÚÎÁÞÅÎÉÅÍ EXPR" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "'MACRO EXPR'" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "ÏÐÒÅÄÅÌÉÔØ MACRO ÓÏ ÚÎÁÞÅÎÉÅÍ EXPR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "×Ù×ÅÓÔÉ ÚÎÁÞÅÎÉÅ ÍÁËÒÏÓÁ EXPR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "'EXPR'" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ ×ÍÅÓÔÏ ÆÁÊÌÁ(Ï×) ÐÏ ÕÍÏÌÞÁÎÉÀ" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÄÁÊÄÖÅÓÔ ÐÁËÅÔÁ(Ï×)" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÚÁÇÏÌÏ×ËÉ, ÉÚ×ÌÅËÁÅÍÙÅ ÉÚ ÂÁÚÙ ÄÁÎÎÙÈ" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÐÏÄÐÉÓØ(É) × ÐÁËÅÔÅ(ÁÈ)" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "ÐÏÓÌÁÔØ ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ × CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "ÉÓÐÏÌØÚÏ×ÁÔØ ROOT ËÁË ËÏÒÎÅ×ÏÊ ËÁÔÁÌÏÇ" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "ÏÔÏÂÒÁÚÉÔØ ÉÚ×ÅÓÔÎÙÅ ËÌÀÞÉ ÚÁÐÒÏÓÁ" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "ÐÏËÁÚÁÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ rpmrc É ÍÁËÒÏÓÏ×" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "×Ù×ÏÄÉÔØ ÍÉÎÉÍÕÍ ÓÏÏÂÝÅÎÉÊ" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "×Ù×ÏÄÉÔØ ÂÏÌÅÅ ÄÅÔÁÌØÎÙÅ ÓÏÏÂÝÅÎÉÑ" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "×Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ ÜÔÏÊ ÐÒÇÒÁÍÍÙ" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "ÏÔÌÁÄËÁ ÍÁÛÉÎÙ ÓÏÓÔÏÑÎÉÑ ÐÒÉÓÏÅÄÉÎÅÎÎÙÈ ÆÁÊÌÏ× " + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "ÏÔÌÁÄËÁ ÐÒÏÃÅÓÓÁ ××ÏÄÁ/×Ù×ÏÄÁ rpmio" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: ÔÁÂÌÉÃÁ ÐÁÒÁÍÅÔÒÏ× ÎÅÐÒÁ×ÉÌØÎÏ ÎÁÓÔÒÏÅÎÁ (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "ÉÓËÌÀÞÅÎÉÑ ÄÏÌÖÎÙ ÎÁÞÉÎÁÔØÓÑ Ó /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "ÐÅÒÅÍÅÝÅÎÉÑ ÄÏÌÖÎÙ ÎÁÞÉÎÁÔØÓÑ Ó /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "ÐÅÒÅÍÅÝÅÎÉÑ ÄÏÌÖÎÙ ÓÏÄÅÒÖÁÔØ =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "ÐÅÒÅÍÅÝÅÎÉÑ ÄÏÌÖÎÙ ÉÍÅÔØ / ÐÏÓÌÅ =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"ÕÓÔÁÎÁ×ÌÉ×ÁÔØ ×ÓÅ ÆÁÊÌÙ, ÄÁÖÅ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÅ, ËÏÔÏÒÙÅ ÍÏÇÌÉ ÂÙ ÂÙÔØ " +"ÐÒÏÐÕÝÅÎÙ" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"ÕÄÁÌÉÔØ ×ÓÅ ÐÁËÅÔÙ, ÓÏ×ÐÁÄÁÀÝÉÅ Ó <ÐÁËÅÔ> (ÏÂÙÞÎÏ, ÅÓÌÉ <ÐÁËÅÔ> " +"ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÎÅÓËÏÌØËÉÍ ÐÁËÅÔÁÍ, ÇÅÎÅÒÉÒÕÅÔÓÑ ÏÛÉÂËÁ)" + +#: lib/poptI.c:123 +#, fuzzy +msgid "relocate files in non-relocatable package" +msgstr "ÐÅÒÅÍÅÓÔÉÔØ ÆÁÊÌÙ × ÎÅÐÅÒÅÍÅÝÁÅÍÏÍ ÐÁËÅÔÅ" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "ÕÄÁÌÉÔØ (ÄÅÉÎÓÔÁÌÌÉÒÏ×ÁÔØ) ÐÁËÅÔ" + +#: lib/poptI.c:131 +msgid "+" +msgstr "<ÐÁËÅÔ>+" + +#: lib/poptI.c:134 lib/poptI.c:171 +#, fuzzy +msgid "do not install configuration files" +msgstr "ÐÏËÁÚÁÔØ ×ÓÅ ÆÁÊÌÙ ËÏÎÆÉÇÕÒÁÃÉÉ" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "ÎÅ ÕÓÔÁÎÁ×ÌÉ×ÁÔØ ÄÏËÕÍÅÎÔÁÃÉÀ" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "ÐÒÏÐÕÓÔÉÔØ ÆÁÊÌÙ × ÐÕÔÉ <ÐÕÔØ>" + +#: lib/poptI.c:140 +msgid "" +msgstr "<ÐÕÔØ>" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "ÓÏËÒÁÝÅÎÉÅ ÄÌÑ --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "ÏÂÎÏ×ÉÔØ ÐÁËÅÔ(Ù) ÅÓÌÉ ÕÖÅ ÕÓÔÁÎÏ×ÌÅÎ" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "<ÆÁÊÌ ÐÁËÅÔÁ>+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "×Ù×ÏÄÉÔØ \"#\" ÐÏ ÍÅÒÅ ÕÓÔÁÎÏ×ËÉ ÐÁËÅÔÁ (ÈÏÒÏÛÏ Ó -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÁÒÈÉÔÅËÔÕÒÕ ÐÁËÅÔÁ" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÏÐÅÒÁÃÉÏÎÎÕÀ ÓÉÓÔÅÍÕ ÐÁËÅÔÁ" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÄÉÓËÏ×ÏÅ ÐÒÏÓÔÒÁÎÓÔ×Ï ÐÅÒÅÄ ÕÓÔÁÎÏ×ËÏÊ" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "ÕÓÔÁÎÏ×ÉÔØ ÄÏËÕÍÅÎÔÁÃÉÀ" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "ÕÓÔÁÎÏ×ÉÔØ ÐÁËÅÔ(Ù)" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "ÏÂÎÏ×ÉÔØ ÂÁÚÕ ÄÁÎÎÙÈ, ÎÏ ÎÅ ÍÏÄÉÆÉÃÉÒÏ×ÁÔØ ÆÁÊÌÏ×ÕÀ ÓÉÓÔÅÍÕ" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÚÁ×ÉÓÉÍÏÓÔÉ ÐÁËÅÔÁ" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÆÁÊÌÙ ÎÁ ËÏÎÔÒÏÌØÎÕÀ ÓÕÍÍÕ MD5" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÆÁÊÌÙ ÎÁ ËÏÎÔÒÏÌØÎÕÀ ÓÕÍÍÕ MD5" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "ÐÏËÁÚÁÔØ ×ÓÅ ÆÁÊÌÙ ËÏÎÆÉÇÕÒÁÃÉÉ" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "ÎÅ ÍÅÎÑÔØ ÐÏÒÑÄÏË ÕÓÔÁÎÏ×ËÉ ÐÁËÅÔÏ× ÄÌÑ ÕÄÏ×ÌÅÔ×ÏÒÅÎÉÑ ÚÁ×ÉÓÉÍÏÓÔÅÊ" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ ÎÉËÁËÉÈ ÓÃÅÎÁÒÉÅ× ÐÁËÅÔÁ(Ï×)" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ %%pre ÓÃÅÎÁÒÉÅ× (ÅÓÌÉ ÅÓÔØ)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ %%post ÓÃÅÎÁÒÉÅ× (ÅÓÌÉ ÅÓÔØ)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ %%preun ÓÃÅÎÁÒÉÅ× (ÅÓÌÉ ÅÓÔØ)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ %%postun ÓÃÅÎÁÒÉÅ× (ÅÓÌÉ ÅÓÔØ)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ ÔÒÉÇÇÅÒ-ÓÃÅÎÁÒÉÅ×, ×Ú×ÅÄÅÎÎÙÈ ÜÔÉÍ ÐÁËÅÔÏÍ" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ %%triggerprein ÓÃÅÎÁÒÉÅ×" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ %%triggerin ÓÃÅÎÁÒÉÅ×" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ %%triggerun ÓÃÅÎÁÒÉÅ×" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ %%triggerpostun ÓÃÅÎÁÒÉÅ×" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"ÏÔËÁÔ ÎÁ ÂÏÌÅÅ ÓÔÁÒÕÀ ×ÅÒÓÉÀ ÐÁËÅÔÁ (--force ÐÒÉ ÏÂÎÏ×ÌÅÎÉÉ ÄÅÌÁÅÔ ÜÔÏ " +"Á×ÔÏÍÁÔÉÞÅÓËÉ)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "×Ù×ÏÄÉÔØ ÐÒÏÃÅÎÔ ÇÏÔÏ×ÎÏÓÔÉ ÐÏ ÍÅÒÅ ÕÓÔÁÎÏ×ËÉ ÐÁËÅÔÁ" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "ÐÅÒÅÍÅÓÔÉÔØ ÐÁËÅÔ × <ËÁÔÁÌÏÇ>, ÅÓÌÉ ÐÁËÅÔ ÜÔÏ ÐÏÚ×ÏÌÑÅÔ" + +#: lib/poptI.c:234 +msgid "" +msgstr "<ËÁÔÁÌÏÇ>" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "ÐÅÒÅÍÅÓÔÉÔØ ÆÁÊÌÙ ÉÚ ÐÕÔÉ × " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "ÐÅÒÅÕÓÔÁÎÏ×ÉÔØ, ÅÓÌÉ ÐÁËÅÔ ÕÖÅ ÕÓÔÁÎÏ×ÌÅÎ" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "ÎÅ ÕÓÔÁÎÁ×ÌÉ×ÁÔØ, Á ÔÏÌØËÏ ÓÏÏÂÝÉÔØ, ÕÄÁÓÔÓÑ ÌÉ ÕÓÔÁÎÏ×ËÁ" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "ÏÂÎÏ×ÉÔØ ÐÁËÅÔ(Ù)" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ×ÓÅ ÐÁËÅÔÙ" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "ÒÅÖÉÍ ÐÒÏ×ÅÒËÉ ÐÏÄÐÉÓÉ" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔ, ËÏÔÏÒÏÍÕ ÐÒÉÎÁÄÌÅÖÉÔ ÆÁÊÌ" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔÙ × ÇÒÕÐÐÅ" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÆÁÊÌ ÐÁËÅÔÁ" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔ(Ù) ÐÏ ÉÄÅÎÔÉÆÉËÁÔÏÒÕ ÐÁËÅÔÁ" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔ(Ù), ÐÏ ÉÄÅÎÔÉÆÉËÁÔÏÒÕ ÚÁÇÏÌÏ×ËÁ" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "ÒÅÖÉÍ ÚÁÐÒÏÓÁ rpm" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÚÁÇÏÌÏ×ÏË" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔ(Ù) ÉÚ ÔÒÁÎÚÁËÃÉÉ ÕÓÔÁÎÏ×ËÉ" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "ÚÁÐÒÏÓÉÔØ ÐÁËÅÔÙ Ó ÔÒÉÇÇÅÒ-ÓÃÅÎÁÒÉÑÍÉ ÎÁ ÐÁËÅÔ" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "ÒÅÖÉÍ ÐÒÏ×ÅÒËÉ rpm" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "ÎÁÊÔÉ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔÙ, ÔÒÅÂÕÀÝÉÅ ÓÅÒ×ÉÓ" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "ÎÁÊÔÉ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔÙ, ÐÒÅÄÏÓÔÁ×ÌÑÀÝÉÅ ÓÅÒ×ÉÓ" + +#: lib/poptQV.c:98 +#, fuzzy +msgid "do not glob arguments" +msgstr "ÎÅ ÚÁÄÁÎÙ ÁÒÇÕÍÅÎÔÙ" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "ÐÏËÁÚÁÔØ ×ÓÅ ÆÁÊÌÙ ËÏÎÆÉÇÕÒÁÃÉÉ" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "ÐÏËÁÚÁÔØ ×ÓÅ ÆÁÊÌÙ ÄÏËÕÍÅÎÔÁÃÉÉ" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "ÐÏËÁÚÁÔØ ÏÓÎÏ×ÎÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÆÁÊÌÅ" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "ÐÏËÁÚÁÔØ ÓÐÉÓÏË ÆÁÊÌÏ× ÐÁËÅÔÁ" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "ÐÒÏÐÕÓÔÉÔØ ÆÁÊÌÙ %%ghost" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "ÐÏËÁÚÁÔØ ÓÏÓÔÏÑÎÉÅ ÐÅÒÅÞÉÓÌÅÎÎÙÈ ÆÁÊÌÏ×" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÒÁÚÍÅÒ ÆÁÊÌÏ×" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÐÕÔØ ÓÉÍ×ÏÌÉÞÅÓËÉÈ ÓÓÙÌÏË" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÈÏÚÑÉÎÁ ÆÁÊÌÏ×" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÇÒÕÐÐÕ ÆÁÊÌÏ×" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ×ÒÅÍÑ ÍÏÄÉÆÉËÁÃÉÉ ÆÁÊÌÏ×" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÐÒÁ×Á ÄÏÓÔÕÐÁ ÆÁÊÌÏ× ÐÁËÅÔÁ" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÒÁÚÍÅÒ ÆÁÊÌÏ×" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÆÁÊÌÙ ÐÁËÅÔÁ" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÆÁÊÌÙ ÐÁËÅÔÁ" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÚÁ×ÉÓÉÍÏÓÔÉ ÐÁËÅÔÁ" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "ÎÅ ÉÓÐÏÌÎÑÔØ ÓÃÅÎÁÒÉÊ(É) ÐÒÏ×ÅÒËÉ" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÁÒÈÉÔÅËÔÕÒÁ ÄÌÑ %s × %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "ÏÂÎÁÒÕÖÅÎ Ä×ÏÉÞÎÙÊ ÐÁËÅÔ ×ÍÅÓÔÏ ÏÖÉÄÁÅÍÏÇÏ ÉÓÈÏÄÎÏÇÏ\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "ÉÓÈÏÄÎÙÊ ÐÁËÅÔ ÎÅ ÓÏÄÅÒÖÉÔ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "ÒÁÓÐÁËÏ×ËÁ ÁÒÈÉ×Á ÎÅ ÕÄÁÌÁÓØ%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " ÎÁ ÆÁÊÌÅ " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s ÏÛÉÂËÁ ÎÁ ÆÁÊÌÅ %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s ÎÅ ÕÄÁÌÏÓØ: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "ÏÛÉÂËÁ × ÆÏÒÍÁÔÅ: %s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(ÎÅ ÓÏÄÅÒÖÉÔ ÆÁÊÌÏ×)" + +#: lib/query.c:160 +msgid "normal " +msgstr "ÎÏÒÍÁÌØÎÙÊ " + +#: lib/query.c:163 +msgid "replaced " +msgstr "ÚÁÍÅÎÅÎÎÙÊ " + +#: lib/query.c:166 +msgid "not installed " +msgstr "ÎÅ ÕÓÔÁÎÏ×ÌÅÎ " + +#: lib/query.c:169 +msgid "net shared " +msgstr "ÓÅÔÅ×ÏÊ " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(ÓÏÓÔ. ÎÅÔ) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(ÎÅÉÚ×. %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "ÐÁËÅÔ ÎÅ ÓÏÄÅÒÖÉÔ ÓÐÉÓËÏ× ×ÌÁÄÅÌØÃÅ×/ÇÒÕÐÐ-×ÌÁÄÅÌØÃÅ× ÆÁÊÌÏ×\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "ÐÁËÅÔ ÎÅ ÓÏÄÅÒÖÉÔ ÓÐÉÓËÏ× ÎÉ ÈÏÚÑÅ× ÆÁÊÌÏ×, ÎÉ ÉÈ ID\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "ÇÒÕÐÐÁ %s ÎÅ ÓÏÄÅÒÖÉÔ ÎÉËÁËÉÈ ÐÁËÅÔÏ×\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "ÎÉ ÏÄÉÎ ÉÚ ÐÁËÅÔÏ× ÎÅ ×Ú×ÏÄÉÔ ÔÒÉÇÇÅÒ %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "ÏÛÉÂËÁ ÆÏÒÍÁÔÁ %s: %s.\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "ÎÉ ÏÄÉÎ ÐÁËÅÔ ÎÅ ÐÏÄÈÏÄÉÔ Ë %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "ÎÉ ÏÄÉÎ ÉÚ ÐÁËÅÔÏ× ÎÅ ÔÒÅÂÕÅÔ %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "ÎÉ ÏÄÉÎ ÉÚ ÐÁËÅÔÏ× ÎÅ ÐÒÅÄÏÓÔÁ×ÌÑÅÔ %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "ÆÁÊÌ %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "ÆÁÊÌ %s ÎÅ ÐÒÉÎÁÄÌÅÖÉÔ ÎÉ ÏÄÎÏÍÕ ÉÚ ÐÁËÅÔÏ×\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÐÁËÅÔÁ: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÚÁÐÉÓØ %u\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "ÐÁËÅÔ %s ÎÅ ÕÓÔÁÎÏ×ÌÅÎ\n" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÜÇ" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: ÏÛÉÂËÁ ÉÍÐÏÒÔÉÒÏ×ÁÎÉÑ.\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: ÜÔÏ ÎÅ ÏÔËÒÙÔÙÊ ËÌÀÞ.\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: ÏÛÉÂËÁ ÞÔÅÎÉÑ ×Ï ×ÒÅÍÑ ÉÍÐÏÒÔÉÒÏ×ÁÎÉÑ.\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: ÏÛÉÂËÁ headerRead\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "îå ïë" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "ïë" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (ïôóõôóô÷õàô ëìàþé:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (îåô äï÷åòéñ ë ëìàþáí:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ ÏÔËÒÙÔÉÑ: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s ÎÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s: ËÁÔÁÌÏÇ ÎÅ ÐÕÓÔ\n" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "îåT" + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "äá" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "PreReq:, Provides:, É Obsoletes: ÚÁ×ÉÓÉÍÏÓÔÉ ÐÏÄÄÅÒÖÉ×ÁÀÔ ×ÅÒÓÉÉ." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "ÉÍÅÎÁ ÆÁÊÌÁ(Ï×) ÈÒÁÎÑÔÓÑ × ÆÏÒÍÁÔÅ (dirName,baseName,dirIndex)." + +#: lib/rpmds.c:868 +#, fuzzy +msgid "package payload can be compressed using bzip2." +msgstr "ÄÌÑ ÕÐÁËÏ×ËÉ ÓÏÄÅÒÖÉÍÏÇÏ ÐÁËÅÔÁ ÉÓÐÏÌØÚÕÅÔÓÑ bzip2" + +#: lib/rpmds.c:873 +#, fuzzy +msgid "package payload can be compressed using xz." +msgstr "ÄÌÑ ÕÐÁËÏ×ËÉ ÓÏÄÅÒÖÉÍÏÇÏ ÐÁËÅÔÁ ÉÓÐÏÌØÚÕÅÔÓÑ bzip2" + +#: lib/rpmds.c:876 +#, fuzzy +msgid "package payload can be compressed using lzma." +msgstr "ÄÌÑ ÕÐÁËÏ×ËÉ ÓÏÄÅÒÖÉÍÏÇÏ ÐÁËÅÔÁ ÉÓÐÏÌØÚÕÅÔÓÑ bzip2" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "ÐÒÅÆÉËÓ \"./\" ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÆÁÌÁ(Ï×) ÓÏÄÅÒÖÉÍÏÇÏ ÐÁËÅÔÁ." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "ÉÍÑ-×ÅÒÓÉÑ-×ÙÐÕÓË ÐÁËÅÔÁ ÎÅ ÐÒÅÄÏÓÔÁ×ÌÑÅÔÓÑ Á×ÔÏÍÁÔÉÞÅÓËÉ." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "ÑÒÌÙËÉ ÚÁÇÏÌÏ×ËÏ× ×ÓÅÇÄÁ ÓÏÒÔÉÒÕÀÔÓÑ ÐÏÓÌÅ ÚÁÇÒÕÚËÉ." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "ÉÎÔÅÒÐÒÅÔÁÔÏÒ ÓÃÅÎÁÒÉÅ× ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÒÇÕÍÅÎÔÙ ÉÚ ÚÁÇÏÌÏ×ËÁ." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÞÁÓÔÉÞÎÁÑ ÕÓÔÁÎÏ×ËÁ ÎÁÂÏÒÁ ÖÅÓÔËÉÈ ÓÓÙÌÏË ÐÁËÅÔÁ." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +#, fuzzy +msgid "internal support for lua scripts." +msgstr "- ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ÓÔÒÏË\n" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "ÐÁËÅÔ %s ÕÖÅ ÕÓÔÁÎÏ×ÌÅÎ" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: ÎÅ ÐÁËÅÔ (ÉÌÉ ÍÁÎÉÆÅÓÔ ÐÁËÅÔÁ) rpm : %s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "ðÏÄÇÏÔÏ×ËÁ..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "ðÏÄÇÏÔÏ×ËÁ ÐÁËÅÔÏ× ÄÌÑ ÕÓÔÁÎÏ×ËÉ..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "îÅÕÄÏ×ÌÅÔ×ÏÒÅÎÎÙÅ ÚÁ×ÉÓÉÍÏÓÔÉ:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: ÎÅ ÐÁËÅÔ (ÉÌÉ ÍÁÎÉÆÅÓÔ ÐÁËÅÔÁ) rpm : %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s ÎÅ ÍÏÖÅÔ ÂÙÔØ ÕÓÔÁÎÏ×ÌÅÎ\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "úÁÇÒÕÖÁÅÔÓÑ %s\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "%s ÐÒÏÐÕÓËÁÅÔÓÑ - ÏÛÉÂËÁ ÐÅÒÅÄÁÞÉ - %s\n" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "ÐÁËÅÔ %s - ÎÅ ÐÅÒÅÍÅÝÁÅÍÙÊ\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "ÏÛÉÂËÁ ÞÔÅÎÉÑ ÉÚ ÆÁÊÌÁ %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "ÄÌÑ ÆÁÊÌÁ %s ÎÅÏÂÈÏÄÉÍÁ ÂÏÌÅÅ ÎÏ×ÁÑ ×ÅÒÓÉÑ RPM\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" ÚÁÄÁÅÔ ÎÅÓËÏÌØËÏ ÐÁËÅÔÏ×\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "õÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ %s\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "%s: ÜÔÏ ÎÅ ÐÁËÅÔ RPM\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s: ðÏÄÐÉÓØ ÎÅÄÏÓÔÕÐÎÁ\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "ÏÛÉÂËÁ ÞÔÅÎÉÑ: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "%s: ÜÔÏ ÎÅ ÐÁËÅÔ RPM\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÂÌÏËÉÒÏ×ËÕ %s ÎÁ %s/%s\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÂÌÏËÉÒÏ×ËÕ %s ÎÁ %s/%s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÉÍÅÎÏ×ÁÔØ %s × %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÉÍÅÎÏ×ÁÔØ %s × %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "ÒÁÚÌÉÞÎÙÊ" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "ÐÁËÅÔ %s ÐÒÅÄÎÁÚÎÁÞÅÎ ÄÌÑ ÁÒÈÉÔÅËÔÕÒÙ %s" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "ÐÁËÅÔ %s ÐÒÅÄÎÁÚÎÁÞÅÎ ÄÌÑ ÏÐÅÒÁÃÉÏÎÎÏÊ ÓÉÓÔÅÍÙ %s" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "ÐÁËÅÔ %s ÕÖÅ ÕÓÔÁÎÏ×ÌÅÎ" + +#: lib/rpmprob.c:128 +#, fuzzy, c-format +msgid "path %s in package %s is not relocatable" +msgstr "ÐÕÔØ %s × ÐÁËÅÔÅ %s - ÎÅ ÐÅÒÅÍÅÝÁÅÍÙÊ" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "ËÏÎÆÌÉËÔ ÆÁÊÌÁ %s ÐÒÉ ÐÏÐÙÔËÁÈ ÕÓÔÁÎÏ×ËÉ %s É %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"ÆÁÊÌ %s ÉÚ ÕÓÔÁÎÁ×ÌÉ×ÁÅÍÏÇÏ ÐÁËÅÔÁ %s ËÏÎÆÌÉËÔÕÅÔ Ó ÆÁÊÌÏÍ ÉÚ ÐÁËÅÔÁ %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "ÐÁËÅÔ %s (ËÏÔÏÒÙÊ ÎÏ×ÅÅ, ÞÅÍ %s) ÕÖÅ ÕÓÔÁÎÏ×ÌÅÎ" + +#: lib/rpmprob.c:148 +#, fuzzy, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "ÄÌÑ ÕÓÔÁÎÏ×ËÉ ÐÁËÅÔÁ %s ÎÕÖÎÏ %%c ÂÁÊÔ ÎÁ ÆÁÊÌÏ×ÏÊ ÓÉÓÔÅÍÅ %s" + +#: lib/rpmprob.c:158 +#, fuzzy, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "ÄÌÑ ÕÓÔÁÎÏ×ËÉ ÐÁËÅÔÁ %s ÎÕÖÎÏ % inodes ÎÁ ÆÁÊÌÏ×ÏÊ ÓÉÓÔÅÍÅ %s" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s ÎÕÖÅÎ ÄÌÑ %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(ÕÓÔÁÎÏ×ÌÅÎ)" + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s ËÏÎÆÌÉËÔÕÅÔ Ó %s%s" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s ÎÕÖÅÎ ÄÌÑ %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ %d ÐÒÉ ÒÁÂÏÔÅ Ó ÐÁËÅÔÏÍ %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ×ÔÏÒÏÅ ':' × %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÎÁÚ×ÁÎÉÅ ÁÒÈÉÔÅËÔÕÒÙ × %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "îÅÐÏÌÎÁÑ ÓÔÒÏËÁ ÄÁÎÎÙÈ × %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ× × ÓÔÒÏËÅ ÄÁÎÎÙÈ × %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "îÅ×ÅÒÎÙÊ ÎÏÍÅÒ arch/os: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "îÅÐÏÌÎÁÑ ÓÔÒÏËÁ ÐÏ ÕÍÏÌÞÁÎÉÀ × %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ× × ÓÔÒÏËÅ ÐÏ ÕÍÏÌÞÁÎÉÀ × %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ':' (ÎÁÊÄÅÎ 0x%02x) × %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÁÒÇÕÍÅÎÔ ÄÌÑ %s × %s:%d\n" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s × %s:%d %s\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÁÒÈÉÔÅËÔÕÒÁ ÄÌÑ %s × %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "ÎÅ×ÅÒÎÙÊ ÐÁÒÁÍÅÔÒ '%s' × %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÁ: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s ÄÌÑ ÞÔÅÎÉÑ: %s.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "óÂÏÊ ×ÅÔ×ÌÅÎÉÑ %s: %s\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "óÂÏÊ ×ÅÔ×ÌÅÎÉÑ %s: %s\n" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s(%s-%s-%s) ÏÛÉÂËÁ ÓÃÅÎÁÒÉÑ, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s(%s-%s-%s) ÏÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ ÓÃÅÎÁÒÉÑ, ËÏÄ ×ÏÚ×ÒÁÔÁ %d\n" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s(%s-%s-%s) ÏÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ ÓÃÅÎÁÒÉÑ, ËÏÄ ×ÏÚ×ÒÁÔÁ %d\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÜÇ" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(ÕÓÔÁÎÏ×ÌÅÎ)" + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ ÂÁÚÕ ÄÁÎÎÙÈ Packages × %s\n" + +#: lib/rpmts.c:193 +#, fuzzy, c-format +msgid "extra '(' in package label: %s\n" +msgstr "ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÐÁËÅÔÁ: %s\n" + +#: lib/rpmts.c:211 +#, fuzzy, c-format +msgid "missing '(' in package label: %s\n" +msgstr "ïÔÓÕÔÓÔ×ÕÅÔ '(' × %s %s\n" + +#: lib/rpmts.c:219 +#, fuzzy, c-format +msgid "missing ')' in package label: %s\n" +msgstr "ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÐÁËÅÔÁ: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: ÏÛÉÂËÁ ÞÔÅÎÉÑ ×Ï ×ÒÅÍÑ ÉÍÐÏÒÔÉÒÏ×ÁÎÉÑ.\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +#, fuzzy +msgid "MD5 digest:" +msgstr "ÄÁÊÄÖÅÓÔ MD5:" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "ÄÁÊÄÖÅÓÔ SHA1 ÚÁÇÏÌÏ×ËÁ:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "úÁÇÏÌÏ×ÏË " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "ðÒÏ×ÅÒËÁ ÐÏÄÐÉÓÉ: îåðòá÷éìøîùå ðáòáíåôòù\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "ðÏÄÐÉÓØ: îåéú÷åóôîï (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s ÎÅ ÕÄÁÌÏÓØ\n" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ %c %s" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "îÅÕÄÏ×ÌÅÔ×ÏÒÅÎÎÙÅ ÚÁ×ÉÓÉÍÏÓÔÉ ÄÌÑ %s: " + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ \"{\" ÐÏÓÌÅ \"%\"" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ \"}\" ÐÏÓÌÅ \"%{\"" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "ÐÕÓÔÏÊ ÆÏÒÍÁÔ ÔÜÇÁ" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "ÐÕÓÔÏÅ ÉÍÑ ÔÜÇÁ" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÜÇ" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "× ËÏÎÃÅ ÍÁÓÓÉ×Á ÏÖÉÄÁÌÁÓØ \"]\"" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "ÎÅÏÖÉÄÁÎÎÁÑ \"]\"" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "ÎÅÏÖÉÄÁÎÎÁÑ \"}\"" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "× ×ÙÒÁÖÅÎÉÉ ÏÖÉÄÁÌÏÓØ \"?\"" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "× ×ÙÒÁÖÅÎÉÉ ÐÏÓÌÅ \"?\" ÏÖÉÄÁÌÏÓØ \"{\"" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "× ×ÙÒÁÖÅÎÉÉ ÏÖÉÄÁÌÏÓØ \"}\"" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "× ×ÙÒÁÖÅÎÉÉ ÐÏÓÌÅ \"?\" ÏÖÉÄÁÌÏÓØ \":\"" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "× ×ÙÒÁÖÅÎÉÉ ÐÏÓÌÅ \":\" ÏÖÉÄÁÌÏÓØ \"{\"" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "× ËÏÎÃÅ ×ÙÒÁÖÅÎÉÑ ÏÖÉÄÁÌÓÑ \"|\"" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÉÎÄÅËÓ %s ÉÓÐÏÌØÚÕÑ db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "ÐÁÒÁÍÅÔÅÒ dbpath ÎÅ ÕÓÔÁÎÏ×ÌÅÎ\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "ÏÛÉÂËÁ(%d) ÐÏÌÕÞÅÎÉÑ ÚÁÐÉÓÅÊ \"%s\" ÉÚ ÉÎÄÅËÓÁ %s\n" + +#: lib/rpmdb.c:1218 +#, fuzzy +msgid "miFreeHeader: skipping" +msgstr "rpmdb: ÐÒÏÐÕÓËÁÅÔÓÑ" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "ÏÛÉÂËÁ (%d) ÓÏÈÒÁÎÅÎÉÑ ÚÁÐÉÓÉ #%d × %s\n" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ Fseek: %s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ ÏÔËÒÙÔÉÑ: %s\n" + +#: lib/rpmdb.c:1666 +#, fuzzy +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdb: ÐÒÏÐÕÓËÁÅÔÓÑ" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: ÐÏÌÕÞÅÎ ÐÏ×ÒÅÖÄÅÎÎÙÊ ÚÁÇÏÌÏ×ÏË #%u -- ÐÒÏÐÕÓËÁÅÔÓÑ.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "ÏÛÉÂËÁ(%d) ÐÏÌÕÞÅÎÉÑ ÚÁÐÉÓÅÊ \"%s\" ÉÚ ÉÎÄÅËÓÁ %s\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "ÏÛÉÂËÁ(%d) ÐÏÄÇÏÔÏ×ËÉ ÚÁÐÉÓÉ ÚÁÇÏÌÏ×ËÁ #%d ÄÌÑ ÕÄÁÌÅÎÉÑ %s\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "ÏÛÉÂËÁ(%d) ÐÏÄÇÏÔÏ×ËÉ ÚÁÐÉÓÉ ÚÁÇÏÌÏ×ËÁ #%d ÄÌÑ ÕÄÁÌÅÎÉÑ %s\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÅÓÔØ ÚÁÇÏÌÏ×ÏË × 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "ÏÛÉÂËÁ(%d) ÐÏÌÕÞÅÎÉÑ \"%s\" ÚÁÐÉÓÅÊ ÉÚ ÉÎÄÅËÓÁ %s\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "ÏÛÉÂËÁ(%d) ÓÏÈÒÁÎÅÎÉÑ ÚÁÐÉÓÉ \"%s\" × %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "ÏÛÉÂËÁ(%d) ÕÄÁÌÅÎÉÑ ÚÁÐÉÓÉ %s ÉÚ %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "ÏÛÉÂËÁ(%d) ÒÅÚÅÒ×ÉÒÏ×ÁÎÉÑ ÐÁÍÑÔÉ ÄÌÑ ÏÂÒÁÚÁ ÎÏ×ÏÇÏ ÐÁËÅÔÁ\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "ÏÛÉÂËÁ(%d) ÚÁÐÉÓÉ ÚÁÐÉÓÉ %s × %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "ÐÁÒÁÍÅÔÅÒ dbpath ÎÅ ÕÓÔÁÎÏ×ÌÅÎ" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "ÚÁÇÏÌÏ×ÏË ÎÏÍÅÒ %u × ÂÁÚÅ ÄÁÎÎÙÈ ÎÅ×ÅÒÎÙÊ -- ÐÒÏÐÕÓËÁÅÔÓÑ.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÚÁÐÉÓØ (ÐÅÒ×ÏÎÁÞÁÌØÎÏ × %u)\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"ÐÅÒÅÓÔÒÏÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ ÎÅ ÕÄÁÌÏÓØ, ÓÔÁÒÁÑ ÂÁÚÁ ÄÁÎÎÙÈ ÏÓÔÁÅÔÓÑ ÎÁ ÍÅÓÔÅ\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÍÅÎÉÔØ ÓÔÁÒÕÀ ÂÁÚÕ ÄÁÎÎÙÈ ÎÁ ÎÏ×ÕÀ!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "ÆÁÊÌÙ × %s ÚÁÍÅÎÑÀÔÓÑ ÆÁÊÌÁÍÉ ÉÚ %s ÄÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "ÏÛÉÂËÁ(%d) db%d ÉÚ %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "ÏÛÉÂËÁ(%d) db%d: %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÂÌÏËÉÒÏ×ËÕ %s ÎÁ %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "ÒÁÚÄÅÌÑÅÍÙÊ" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "ÉÓËÌÀÞÉÔÅÌØÎÙÊ" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "ÐÒÏ×ÅÒÅÎ ÉÎÄÅËÓ ÂÁÚÙ ÄÁÎÎÙÈ %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "ÎÅÏÐÏÚÎÁÎÎÙÊ ÐÁÒÁÍÅÔÒ ÂÁÚÙ ÄÁÎÎÙÈ: \"%s\" ÐÒÏÉÇÎÏÒÉÒÏ×ÁÎ\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ×ÏÅ ÚÎÁÞÅÎÉÅ %s, ÐÒÏÐÕÝÅÎÏ\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s ÉÍÅÅÔ ÓÌÉÛËÏÍ ÍÁÌÕÀ ÉÌÉ ÓÌÉÛËÏÍ ÂÏÌØÛÕÀ ×ÅÌÉÞÉÎÕ long, ÐÒÏÐÕÝÅÎÏ\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" +"%s ÉÍÅÅÔ ÓÌÉÛËÏÍ ÍÁÌÕÀ ÉÌÉ ÓÌÉÛËÏÍ ÂÏÌØÛÕÀ ×ÅÌÉÞÉÎÕ integer, ÐÒÏÐÕÝÅÎÏ\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ ÉÚ %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "óÂÏÊ ×ÅÔ×ÌÅÎÉÑ %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ ÉÚ %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "îÅ ÍÏÇÕ ÓÏÅÄÉÎÉÔØÓÑ Ó ÓÅÒ×ÅÒÏÍ" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÉÍÅÎÏ×ÁÔØ %s × %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÅÓÔØ %s: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "îÅÚÁËÒÙÔÙÊ ÍÁËÒÏÓ %%%s\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÒÁÓËÒÙÔØ ÍÁËÒÏÓ %%%s\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ ÉÚ %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "====================== ÁËÔÉ×ÎÙÈ %d ÐÕÓÔÙÈ %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(ÐÕÓÔÏ)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(ÐÕÓÔÏ)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "îÅÚÁËÒÙÔÙÊ ÍÁËÒÏÓ %%%s\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "îÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ (%%define) ÍÁËÒÏÓÁ %%%s\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "îÅÚÁËÒÙÔÙÅ ÐÁÒÁÍÅÔÒÙ × ÍÁËÒÏÓÅ %%%s\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "íÁËÒÏÓ %%%s ÐÕÓÔ\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÒÁÓËÒÙÔØ ÍÁËÒÏÓ %%%s\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "îÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ (%%undefine) ÍÁËÒÏÓÁ %%%s\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "íÁËÒÏÓ %%%s (%s) ÎÅ ÂÙÌ ÉÓÐÏÌØÚÏ×ÁÎ ÎÉÖÅ ÕÒÏ×ÎÑ %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÐÁÒÁÍÅÔÒ %c × %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "îÅÚÁËÒÙÔÁÑ %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "ÎÅÐÏÎÑÔÎÙÊ ÍÁËÒÏÓ ÐÏÓÌÅ %%\n" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ ×ÒÅÍÅÎÎÏÇÏ ÆÁÊÌÁ %s\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "æÁÊÌ %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "äÌÉÎÁ ÆÁÊÌÁ %s ÍÅÎØÛÅ ÞÅÍ %u ÂÁÊÔ\n" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "- ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ÓÔÒÏË\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ Fwrite: %s\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÐÁËÅÔÁ: %s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ Fseek: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(ÎÅÔ ÏÛÉÂËÉ)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "ÆÁÔÁÌØÎÁÑ ÏÛÉÂËÁ: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "ÏÛÉÂËÁ: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "memory alloc (%u bytes) returned NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "ÐÏÄÐÉÓØ DSA V3: " + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(ÎÅÔ ÏÛÉÂËÉ)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ ÉÚ %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ Fwrite: %s\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ Fseek: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "ÚÁÐÕÓË ÎÅ ÕÄÁÌÓÑ\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "ÏÛÉÂËÁ gpg ÐÒÉ ÚÁÐÉÓÉ ÐÏÄÐÉÓÉ\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÅÓÔØ ÐÏÄÐÉÓØ\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "ÏÛÉÂËÁ makeTempFile\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ writeLead: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ rpmWriteSignature: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: ÏÛÉÂËÁ ÞÔÅÎÉÑ ÓÐÉÓËÁ ÆÁÊÌÏ×: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÐÏÄÐÉÓØ ÚÁÇÏÌÏ×ÏËÁ É ÓÏÄÅÒÖÉÍÏÇÏ" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: ÓÌÉÛËÏÍ ÍÎÏÇÏ uid\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: ÓÌÉÛËÏÍ ÍÎÏÇÏ uid\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ÉÄÅÎÔÉÆÉËÁÔÏÒÏ×\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: ÓÌÉÛËÏÍ ÍÎÏÇÏ gid\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: ÓÌÉÛËÏÍ ÍÎÏÇÏ gid\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÇÒÕÐÐ.\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "ÉÇÎÏÒÉÒÏ×ÁÔØ ÚÁ×ÉÓÉÍÏÓÔ(É) ÉͣΠÐÁËÅÔÁ(Ï×) [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "ÄÏÂÁ×ÉÔØ ÐÒÅÄÌÏÖÅÎÎÙÅ ÐÁËÅÔÙ × ÔÒÁÎÚÁËÃÉÀ" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "ÎÅ ÐÒÅÄÌÁÇÁÔØ ÒÁÚÒÅÛÅÎÉÅ ÐÒÏÐÕÝÅÎÎÏÊ(ÙÈ) ÚÁ×ÉÓÉÍÏÓÔÉ(ÅÊ)" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎ ÔÏÌØËÏ ÐÒÉ ÓÂÏÒËÅ, ÕÓÔÁÎÏ×ËÅ, ÕÄÁÌÅÎÉÉ É " +#~ "ÐÒÏ×ÅÒËÉ ÐÁËÅÔÏ×" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) ÍÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎÁ ÔÏÌØËÏ ÐÒÉ ÕÓÔÁÎÏ×ËÅ, ÕÄÁÌÅÎÉÉ, ÚÁÐÒÏÓÁÈ " +#~ "ÐÁËÅÔÁ É ÐÅÒÅÓÔÒÏÅÎÉÉ ÂÁÚÙ ÄÁÎÎÙÈ" + +#, fuzzy +#~ msgid "detect file conflicts between packages" +#~ msgstr "ÐÅÒÅÍÅÓÔÉÔØ ÆÁÊÌÙ × ÎÅÐÅÒÅÍÅÝÁÅÍÏÍ ÐÁËÅÔÅ" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "×ÒÅÍÅÎÎÁÑ ÂÁÚÁ ÄÁÎÎÙÈ %s ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔ(Ù) ÐÏ ÉÄÅÎÔÉÆÉËÁÔÏÒÕ ÆÁÊÌÁ" + +#~ msgid "" +#~ msgstr "<ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ>" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "îÅ×ÅÒÎÁÑ ÓÐÅÃÉÆÉËÁÃÉÑ %%_signature × ÍÁËÒÏÆÁÊÌÅ.\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: ÕÖÅ ÂÙÌ ÐÏÄÐÉÓÁÎ ËÌÀÞ£Í Ó ÉÄÅÎÔÉÆÉËÁÔÏÒÍ %s, ÐÒÏÐÕÓËÁÅÔÓÑ\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ ÃÅÌÅ×ÏÇÏ ÂÕÆÅÒÁ\n" + +#~ msgid "no files to sign\n" +#~ msgstr "ÎÅÔ ÆÁÊÌÏ× ÄÌÑ ÐÏÄÐÉÓÉ\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "ÎÅÔ ÄÏÓÔÕÐÁ Ë ÆÁÊÌÕ %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎ ÔÏÌØËÏ ÐÒÉ ÓÂÏÒËÅ ÐÁËÅÔÏ×" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÐÏÄÐÉÓØ(É) ÔÉÐÁ GPG V3 DSA" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "ÎÅ ÐÒÏ×ÅÒÑÔØ ÐÏÄÐÉÓÉ ÔÉÐÁ PGP V3 RSA/MD5" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "ÐÏÄÐÉÓÁÔØ ÐÁËÅÔ(Ù) (ÔÏ ÖÅ ÓÁÍÏÅ ÞÔÏ --resign)" + +#~ msgid "generate signature" +#~ msgstr "ÇÅÎÅÒÉÒÏ×ÁÔØ ÐÏÄÐÉÓØ" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "îÅ×ÅÒÎÁÑ ÓÐÅÃÉÆÉËÁÃÉÑ %%_signature × ÍÁËÒÏÆÁÊÌÅ\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "ïÛÉÂËÁ TIMECHECK: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "ÓÏÚÄÁÔØ ÚÁÇÏÌÏ×ËÉ, ÓÏ×ÍÅÓÔÉÍÙÅ Ó ÐÁËÅÔÁÍÉ rpm4" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ ÐÒÉ ÏÂÒÁÂÏÔËÅ ÁÒÇÕÍÅÎÔÏ× (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: ÏÛÉÂËÁ ÞÔÅÎÉÑ ×Ï ×ÒÅÍÑ ÉÍÐÏÒÔÉÒÏ×ÁÎÉÑ.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: ÏÔËÒÙÔÉÅ %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: ÏÛÉÂËÁ Fseek: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s ÎÅ Ñ×ÌÑÅÔÓÑ ÐÁËÅÔÏÍ RPM\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: ÞÉÔÁÅÔÓÑ ÚÁÇÏÌÏ×ÏË ÉÚ %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "çÅÎÅÒÉÒÕÅÔÓÑ ÐÏÄÐÉÓØ: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "ÇÅÎÅÒÉÒÏ×ÁÔØ PGP/GPG-ÐÏÄÐÉÓØ" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "ÎÅ ÚÁÄÁÎÙ ÐÁËÅÔÙ ÄÌÑ ÐÅÒÅÓÂÏÒËÉ" + +#~ msgid "no spec files given for build" +#~ msgstr "ÎÅ ÚÁÄÁÎ ÆÁÊÌ ÓÐÅÃÉÆÉËÁÃÉÉ ÄÌÑ ÓÂÏÒËÉ ÐÁËÅÔÁ" + +#~ msgid "no tar files given for build" +#~ msgstr "ÎÅ ÚÁÄÁÎÙ tar-ÆÁÊÌÙ ÄÌÑ ÓÂÏÒËÉ ÐÁËÅÔÁ" + +#~ msgid "%s failed\n" +#~ msgstr "%s ÎÅ ÕÄÁÌÏÓØ\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "çÌÕÂÉÎÁ ÒÅËÕÒÓÉÉ(%d) ÂÏÌØÛÅ ÄÏÐÕÓÔÉÍÏÊ(%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: ÉÍÑ ËÌÀÞÁ \"%s\" ÎÅ ÉÚ×ÅÓÔÎÏ, ÉÇÎÏÒÉÒÕÅÔÓÑ\n" + +#, fuzzy +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdb: ÐÒÏÐÕÓËÁÅÔÓÑ" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib provides)" + +#~ msgid "(cached)" +#~ msgstr "(ËÜÛÉÒÏ×ÁÎ)" + +#~ msgid "(db files)" +#~ msgstr "(db files)" + +#~ msgid "(db provides)" +#~ msgstr "(db provides)" + +#~ msgid "(added files)" +#~ msgstr "(ÆÁÊÌÙ ÄÏÂÁ×ÌÅÎÙ)" + +#~ msgid "(added provide)" +#~ msgstr "(added provide)" + +#~ msgid "url port must be a number\n" +#~ msgstr "url ÐÏÒÔ ÄÏÌÖÅÎ ÂÙÔØ ÞÉÓÌÏÍ\n" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "ÎÅ ÍÅÎÑÔØ ËÁÔÁÌÏÇÉ" + +#, fuzzy +#~ msgid "don't get stat info" +#~ msgstr "ÎÅ ÚÁÐÒÁÛÉ×ÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÆÁÊÌÁÈ" + +#, fuzzy +#~ msgid "don't cross devices" +#~ msgstr "ÎÅ ÐÅÒÅÓÅËÁÔØ ÇÒÁÎÉÃÙ ÆÁÊÌÏ×ÙÈ ÓÉÓÔÅÍ" + +#, fuzzy +#~ msgid "return whiteout information" +#~ msgstr "ÎÅ ×ÏÚ×ÒÁÝÁÔØ ÉÎÆÏÒÍÁÃÉÀ" + +#~ msgid "debug package state machine" +#~ msgstr "ÏÔÌÁÄËÁ ÍÁÛÉÎÙ ÓÏÓÔÏÑÎÉÑ ÐÁËÅÔÏ×" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔ(Ù) ÉÚ ÔÒÁÎÚÁËÃÉÉ ÕÓÔÁÎÏ×ËÉ" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "ÚÁÐÒÏÓÉÔØ/ÐÒÏ×ÅÒÉÔØ ÐÁËÅÔ(Ù) ÉÚ ÔÒÁÎÚÁËÃÉÉ ÕÓÔÁÎÏ×ËÉ" + +#, fuzzy +#~ msgid "do not read headers" +#~ msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÅÓÔØ ÚÁÇÏÌÏ×ÏË × 0x%x\n" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "æÁÊÌ ÎÅ ÓÏÏÔ×ÅÔÓÔÕÅÔ ÐÒÅÆÉËÓÕ (%s): %s\n" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#, fuzzy +#~ msgid "use threads for package state machine" +#~ msgstr "ÏÔÌÁÄËÁ ÍÁÛÉÎÙ ÓÏÓÔÏÑÎÉÑ ÐÁËÅÔÏ×" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: %s ÏÛÉÂËÁ ÓÃÅÎÁÒÉÑ (%d), ÐÒÏÐÕÓËÁÅÔÓÑ %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() ÎÅ ×ÏÚ×ÒÁÔÉÌ ÚÎÁÞÅÎÉÅ ÒÁÚÍÅÒÁ fugger: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() ÎÅ ×ÏÚ×ÒÁÔÉÌ ÚÎÁÞÅÎÉÅ ÒÁÚÍÅÒÁ fugger: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "ÆÁÊÌ %s - ÎÁ ÎÅÉÚ×ÅÓÔÎÏÍ ÕÓÔÒÏÊÓÔ×Å\n" + +#, fuzzy +#~ msgid "use threads for file state machine" +#~ msgstr "ÏÔÌÁÄËÁ ÍÁÛÉÎÙ ÓÏÓÔÏÑÎÉÑ ÐÒÉÓÏÅÄÉÎÅÎÎÙÈ ÆÁÊÌÏ× " + +#~ msgid "cannot open %s index\n" +#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÉÎÄÅËÓ %s\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ.\n" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÁ: %s\n" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "íÁËÒÏÓ %%%.*s ÎÅ ÎÁÊÄÅÎ, ÐÒÏÐÕÓËÁÀ\n" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: ÏÛÉÂËÁ ÞÔÅÎÉÑ ×Ï ×ÒÅÍÑ ÉÍÐÏÒÔÉÒÏ×ÁÎÉÑ.\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "ÓÔÒÏËÁ %d: ÷ÔÏÒÏÊ ÓÐÉÓÏË %%files\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "äÌÑ ÚÁ×ÉÓÉÍÏÓÔÉ \"B\" ÎÕÖÎÏ ÕËÁÚÁÔØ \"epoch\" (ÐÒÅÄÐÏÌÁÇÁÅÔÓÑ ÔÏÔ ÖÅ ËÁË " +#~ "ÄÌÑ \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "ôÉÐ ÄÁÎÎÙÈ %d ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "ÕÄÁÌÑÅÔÓÑ %s \"%s\" ÉÚ ÓÏÒÔÉÒÏ×ÁÎÎÙÈ Ó×ÑÚÅÊ.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "ãéëì:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "ÏÛÉÂËÁ rpmtsOrder, ÏÓÔÁÌÏÓØ %d ÜÌÅÍÅÎÔÏ×\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "ÒÁÚÍÅÒ úÁÇÏÌÏ×ËÁ É óÏÄÅÒÖÉÍÏÇÏ:" + +#, fuzzy +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "ðÁÒÁÍÅÔÒÙ ÐÒÏ×ÅÒËÉ (Ó -V ÉÌÉ --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp ÎÅ ÎÁÊÄÅÎ: " + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ %s: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "ÏÛÉÂËÁ pgp\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "ÏÛÉÂËÁ pgp ÐÒÉ ÚÁÐÉÓÉ ÐÏÄÐÉÓÉ\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "÷Ù ÄÏÌÖÎÙ ÕÓÔÁÎÏ×ÉÔØ \"%%_pgp_name\" × ×ÁÛÅÍ ÍÁËÒÏÆÁÊÌÅ\n" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÜÇ" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "ÐÏÄÐÉÓØ DSA V3: " + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "ÐÏÄÐÉÓØ DSA V3: " + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "ëÏÎÔÒ. ÓÕÍÍÁ MD5 ÐÏ×ÒÅÖÄÅÎÁ: îå ðïääåòöé÷áåôóñ\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot ÎÅ ÍÏÖÅÔ ÂÙÔØ \"/\": %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "æÁÊÌ spec ÎÅ ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ BuildRoot\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "ÉÓËÁÔØ ÓÔÒÏËÉ I18N × ËÁÔÁÌÏÇÅ ÆÁÊÌÁ ÓÐÅÃÉÆÉËÁÃÉÉ" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "ÓÏÚÄÁÔØ ÚÁÇÏÌÏ×ËÉ, ÓÏ×ÍÅÓÔÉÍÙÅ Ó (ÕÓÔÁÒÅ×ÛÉÍÉ) ÐÁËÅÔÁÍÉ rpm[23]" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ %%%s %s\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÉÓÁÔØ × %%%s %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÒÏÓÉÔØ %s: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "ÚÁÐÕÓË ÎÅ ÕÄÁÌÓÑ\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "ÏÔÌÁÄËÁ ÏÂÒÁÂÏÔËÉ URL ËÜÛ" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "ÚÁÍÅÎÉÔØ ÓÅËÃÉÉ i18n × ÆÁÊÌÅ ÓÐÅÃÉÆÉËÁÃÉÉ" + +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÂÁÚÕ ÄÁÎÎÙÈ ÒÁÚÒÅÛÅÎÉÑ ÚÁ×ÉÓÉÍÏÓÔÅÊ × %s\n" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " ðÒÅÄÌÁÇÁÅÍÏÅ ÒÁÚÒÅÛÅÎÉÅ:\n" + +#~ msgid "Success" +#~ msgstr "÷ÙÐÏÌÎÅÎÏ" + +#~ msgid "Bad server response" +#~ msgstr "îÅ×ÅÒÎÙÊ ÏÔ×ÅÔ ÓÅÒ×ÅÒÁ" + +#~ msgid "Server I/O error" +#~ msgstr "ïÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ ÓÅÒ×ÅÒÁ" + +#~ msgid "Server timeout" +#~ msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÁÄÒÅÓ ÓÅÒ×ÅÒÁ" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÉÍÑ ÓÅÒ×ÅÒÁ" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ ÄÌÑ ÄÁÎÎÙÈ Ó ÓÅÒ×ÅÒÏÍ" + +#~ msgid "I/O error to local file" +#~ msgstr "æÁÊÌÏ×ÁÑ ÏÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "ïÛÉÂËÁ ÐÒÉ ÐÅÒÅ×ÏÄÅ ÕÄÁÌÅÎÎÏÇÏ ÓÅÒ×ÅÒÁ × ÐÁÓÓÉ×ÎÙÊ ÒÅÖÉÍ" + +#~ msgid "File not found on server" +#~ msgstr "æÁÊÌ ÎÅ ÎÁÊÄÅÎ ÎÁ ÓÅÒ×ÅÒÅ" + +#~ msgid "Abort in progress" +#~ msgstr "ïÔÍÅÎÁ × ÐÒÏÃÅÓÓÅ" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÉÌÉ ÎÅÏÖÉÄÁÎÎÁÑ ÏÛÉÂËÁ" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "ÎÅ ÏÂÎÏ×ÌÑÔØ ËÜÛ ÂÁÚÙ ÄÁÎÎÙÈ. ÔÏÌØËÏ ×Ù×ÅÓÔÉ ÐÕÔÉ ÐÁËÅÔÁ." + +#, fuzzy +#~ msgid "File tree walk options:" +#~ msgstr "ðÁÒÁÍÅÔÒÙ ÐÏÄÐÉÓÉ:" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: ÍÁËÒÏÓ %%{_cache_dbpath} ÎÅÐÒÁ×ÉÌØÎÏ ÏÐÒÅÄÅÌ£Î.\n" + +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: ÏÛÉÂËÁ ÒÁÂÏÔÙ Ó ËÜÛ: ËÏÄ ÏÛÉÂËÉ %d.\n" + +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: ÏÛÉÂËÁ headerGetEntry\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "ÏÛÉÂËÁ ÒÁÓËÒÙÔÉÑ %s ÎÁ %s:%d \"%s\"\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "îÅ×ÏÚÍÏÖÎÏ ÒÁÓËÒÙÔØ %s\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ %s, ÚÎÁÞÅÎÉÅ HOME ÓÌÉÛËÏÍ ×ÅÌÉËÏ.\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ËÁÔÁÌÏÇÁ %s: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "ìÉÍÉÔ ÄÌÑ %%docdir ÐÒÅ×ÙÛÅÎ\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "ÓÔÒÏËÁ %d: äÌÑ %%patch -b ÎÕÖÅÎ ÁÒÇÕÍÅÎÔ: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "ÓÔÒÏËÁ %d: äÌÑ %%patch -z ÎÕÖÅÎ ÁÒÇÕÍÅÎÔ: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ ÄÌÑ %%patch -p: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "ÓÔÒÏËÁ %d: äÌÑ %%patch -p ÎÕÖÅÎ ÁÒÇÕÍÅÎÔ: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ ÄÌÑ %%patch -p: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÚÁÐÌÁÔ!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "ÓÔÒÏËÁ %d: îÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ ÄÌÑ %%patch: %s\n" + +#~ msgid "debug option/argument processing" +#~ msgstr "ÏÔÌÁÄËÁ ÏÂÒÁÂÏÔËÉ ÐÁÒÁÍÅÔÒÏ×/ÁÒÇÕÍÅÎÔÏ×" + +#~ msgid "skip %%license files" +#~ msgstr "ÐÒÏÐÕÓÔÉÔØ ÆÁÊÌÙ %%license" + +#~ msgid "skip %%readme files" +#~ msgstr "ÐÒÏÐÕÓÔÉÔØ ÆÁÊÌÙ %%readme" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "ÏÛÉÂËÁ ÞÔÅÎÉÑ: %s (%d)\n" + +#~ msgid "rollback takes a time/date stamp argument" +#~ msgstr "ÏÔËÁÔ ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ ×ÒÅÍÅÎÉ" + +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "ÎÅÐÒÁ×ÉÌØÎÙÊ ÆÏÒÍÁÔ ×ÒÅÍÅÎÉ ÏÔËÁÔÁ" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "ÓÏÈÒÁÎÉÔØ × ÐÏÄËÁÔÁÌÏÇÅ ÐÏÄÌÅÖÁÝÉÅ ÕÄÁÌÅÎÉÀ ÆÁÊÌÙ ÐÁËÅÔÁ" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "ÓÏÈÒÁÎÉÔØ ÐÏÄÌÅÖÁÝÉÅ ÕÄÁÌÅÎÉÀ ÆÁÊÌÙ × ÎÏ×ÏÍ ÐÁËÅÔÅ" + +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "" +#~ "ÕÄÁÌÉÔØ ÎÏ×ÙÊ(Å) ÐÁËÅÔ(Ù), ÐÅÒÅÕÓÔÁÎÏ×ÉÔØ ÓÔÁÒÙÊ(Å) ÐÁËÅÔ(Ù), ÏÂÒÁÔÎÏ ÎÁ " +#~ "ÕËÁÚÁÎÎÕÀ ÄÁÔÕ" + +#~ msgid "" +#~ msgstr "<ÄÁÔÁ>" + +#~ msgid "Unable to reload signature header\n" +#~ msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÚÁÇÒÕÚÉÔØ ÚÁÇÏÌÏ×ÏË ÐÏÄÐÉÓÉ\n" + +#~ msgid "Repackaging..." +#~ msgstr "ðÅÒÅÕÐÁËÏ×ËÁ..." + +#~ msgid "Repackaging erased files..." +#~ msgstr "ðÅÒÅÕÐËÁ×ÏËÁ ÆÁÊÌÏ× ÐÒÅÄÎÁÚÎÁÞÅÎÎÙÈ ÄÌÑ ÕÄÁÌÅÎÉÑ..." + +#~ msgid "Upgrading..." +#~ msgstr "ïÂÎÏ×ÌÅÎÉÅ..." + +#~ msgid "Upgrading packages..." +#~ msgstr "ïÂÎÏ×ÌÅÎÉÅ ÐÁËÅÔÏ×..." + +#~ msgid "Rollback packages (+%d/-%d) to %-24.24s (0x%08x):\n" +#~ msgstr "ïÔËÁÔ ÐÁËÅÔÏ× (+%d/-%d) ÎÁ %-24.24s (0x%08x):\n" + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "úÁÇÒÕÖÁÅÔÓÑ %s\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "ÏÛÉÂËÁ ÞÔÅÎÉÑ ÚÁÇÏÌÏ×ËÁ ÉÚ ÐÁËÅÔÁ\n" + +#, fuzzy +#~ msgid "\twaitpid(%d) rc %d status %x\n" +#~ msgstr "%s: waitpid(%d) rc %d status %x\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== ÚÁÐÉÓØ ÕÐÏÒÑÄÏÞÅÎÎÙÈ ÚÁ×ÉÓÉÍÏÓÔÅÊ\n" + +#, fuzzy +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== ÓÏÒÔÉÒÏ×ËÁ ÐÁËÅÔÏ× (ÏÞÅÒÅÄÎÏÓÔØ, #predecessors, #succesors, " +#~ "ÄÅÒÅ×Ï, ÇÌÕÂÉÎÁ)\n" + +#, fuzzy +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== ÔÏÌØËÏ ÐÏÓÌÅÄÏ×ÁÔÅÌÉ (× ÐÏÒÑÄËÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== ÐÒÏÄÏÌÖÅÎÉÅ ÕÐÏÒÑÄÏÞÅÎÉÑ ...\n" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "æÁÊÌ%5d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========= ëÁÔÁÌÏÇÉ, ËÏÔÏÒÙÅ ÎÅ ×ËÌÀÞÅÎÙ × ÐÁËÅÔ Ñ×ÎÏ:\n" + +#~ msgid "%10d %s\n" +#~ msgstr "%10d %s\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "ËÁÔÁÌÏÇ %s ÓÏÚÄÁÎ Ó ÐÒÁ×ÁÍÉ ÄÏÓÔÕÐÁ %04o.\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "ËÁÔÁÌÏÇ %s ÓÏÚÄÁÎ Ó ÐÒÁ×ÁÍÉ ÄÏÓÔÕÐÁ %04o.\n" + +#, fuzzy +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "ÄÏÂÁ×ÌÑÅÔÓÑ %d ÚÁÐÉÓÅÊ × ÉÎÄÅËÓ %s\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "ÚÁÐÒÅÔÉÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÅ libio(3) API" + +#, fuzzy +#~ msgid "%s: waitpid(%d) rc %d status %x secs %u.%03u\n" +#~ msgstr "%s: waitpid(%d) rc %d status %x\n" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: %s(%s-%s-%s) %sÚÁÐÕÓË ÓÉÎÈÒÏÎÎÏÇÏ ÓÃÅÎÁÒÉÑ\n" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n" +#~ msgstr "%s: %s(%s-%s-%s) ÐÒÏÐÕÓËÁÅÔÓÑ ÌÉÛÎÉÊ \"%s\".\n" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) %ssynchronous scriptlet start\n" +#~ msgstr "%s: %s(%s-%s-%s) %sÚÁÐÕÓË ÓÉÎÈÒÏÎÎÏÇÏ ÓÃÅÎÁÒÉÑ\n" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" +#~ msgstr "%s: %s(%s-%s-%s)\texecv(%s) pid %d\n" + +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s ÓÏÄÅÒÖÉÔ %d ÆÁÊÌÏ×, ÒÅÚÕÌØÔÁÔ ÐÒÏ×ÅÒËÉ: %d\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "ÎÏÍÅÒ ÚÁÐÉÓÉ ÐÁËÅÔÁ: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "ÐÁËÅÔ %s ÓÏÄÅÒÖÉÔ ÎÅÕÄÏ×ÌÅÔ×ÏÒÅÎÎÙÅ %s: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s ÐÒÏÐÕÝÅÎ ÉÚ-ÚÁ ÆÌÁÇÁ missingok\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== ÐÅÒÅÍÅÝÅÎÉÊ\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d ÉÓËÌÀÞÅÎ %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d ÐÅÒÅÍÅÝÅÎÉÅ %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "ÉÓËÌÀÞÁÅÔÓÑ %s %s\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "ÐÅÒÅÍÅÝÁÅÔÓÑ %s × %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "ÐÅÒÅÍÅÝÁÅÔÓÑ ËÁÔÁÌÏÇ %s × %s\n" + +#~ msgid "Adding goal: %s\n" +#~ msgstr "äÏÂÁ×ÌÑÅÔÓÑ ÃÅÌØ: %s\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... ËÁË %s\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "<ÉÓÈÏÄÎÙÊ ÐÁËÅÔ>" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "ÕÓÔÁÎÁ×ÌÉ×ÁÀ ÂÉÎÁÒÎÙÅ ÐÁËÅÔÙ\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "ÎÁÊÄÅÎÏ %d ÉÓÈÏÄÎÙÈ É %d ÂÉÎÁÒÎÙÈ ÐÁËÅÔÏ×\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "ÕÓÔÁÎÁ×ÌÉ×ÁÀ ÂÉÎÁÒÎÙÅ ÐÁËÅÔÙ\n" + +#~ msgid "Adding: %s\n" +#~ msgstr "äÏÂÁ×ÌÑÅÔÓÑ: %s\n" + +#~ msgid "Suggesting: %s\n" +#~ msgstr "ðÒÅÄÌÁÇÁÅÔÓÑ: %s\n" + +#, fuzzy +#~ msgid "mounted filesystems:\n" +#~ msgstr "ÓÔÒÏÉÔÓÑ ÓÐÉÓÏË ÓÍÏÎÔÉÒÏ×ÁÎÎÙÈ ÆÁÊÌÏ×ÙÈ ÓÉÓÔÅÍ\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "æÁÊÌ%5d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "ÐÅÒÅÍÅÝÁÅÔÓÑ %s × %s\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "ïÖÉÄÁÅÍÙÊ ÒÁÚÍÅÒ: %12d = lead(%d)+sigs(%d)+pad(%d)+data(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr "æÁËÔÉÞÅÓËÉÊ ÒÁÚÍÅÒ: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "ðÏÄÐÉÓØ: ÒÁÚÍÅÒ(%d)+ÚÁÐÏÌÎÅÎÉÅ(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "òÁÚÍÅÒ ÐÏÄÐÉÓÉ PGP: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "ðÏÌÕÞÅÎÏ %d ÂÁÊÔ ÐÏÄÐÉÓÉ PGP\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "òÁÚÍÅÒ ÐÏÄÐÉÓÉ GPG: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "ðÏÌÕÞÅÎÏ %d ÂÁÊÔ ÐÏÄÐÉÓÉ GPG\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "ÉÓËÌÀÞÁÅÔÓÑ ËÁÔÁÌÏÇ %s\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "ÏÂÎÁÒÕÖÅÎ Ä×ÏÉÞÎÙÊ ÐÁËÅÔ ×ÍÅÓÔÏ ÏÖÉÄÁÅÍÏÇÏ ÉÓÈÏÄÎÏÇÏ\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "ÎÉ ÏÄÉÎ ÐÁËÅÔ ÎÅ ÐÏÄÈÏÄÉÔ Ë %s: %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "<ÉÓÈÏÄÎÙÊ ÐÁËÅÔ>" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "<ÉÓÈÏÄÎÙÊ ÐÁËÅÔ>" + +#, fuzzy +#~ msgid "sanity checking %d elements\n" +#~ msgstr "ÐÒÏ×eÒÑÅÔÓÑ %d ÜÌÅÍÅÎÔÏ×\n" + +#~ msgid "computing %d file fingerprints\n" +#~ msgstr "ÐÏÄÓÞÉÔÙ×ÁÅÔÓÑ ÏÔÐÅÞÁÔÏË(ËÉ) %d ÆÁÊÌÁ(Ï×)\n" + +#~ msgid "computing file dispositions\n" +#~ msgstr "ÐÏÄÓÞÉÔÙ×ÁÅÔÓÑ ÄÉÓÐÏÚÉÃÉÑ ÆÁÊÌÏ×\n" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "ÚÁËÒÙÔÏ ÏËÒÕÖÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "ÕÄÁÌÅÎÏ ÏËÒÕÖÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "ÏÔËÒÙ×ÁÅÔÓÑ ÏËÒÕÖÅÎÉÅ ÂÁÚÙ ÄÁÎÎÙÈ %s/%s %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "ÚÁËÒÙÔ ÉÎÄÅËÓ ÂÁÚÙ ÄÁÎÎÙÈ %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "ÏÔËÒÙ×ÁÅÔÓÑ ÉÎÄÅËÓ ÂÁÚÙ ÄÁÎÎÙÈ %s/%s %s mode=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "ÚÁÂÌÏËÉÒÏ×ÁÎ ÉÎÄÅËÓ ÂÁÚÙ ÄÁÎÎÙÈ %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "ÕÄÁÌÑÅÔÓÑ \"%s\" ÉÚ ÉÎÄÅËÓÁ %s.\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "ÕÄÁÌÑÅÔÓÑ %d ÚÁÐÉÓÅÊ ÉÚ ÉÎÄÅËÓÁ %s.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "ÄÏÂÁ×ÌÑÅÔÓÑ \"%s\" × ÉÎÄÅËÓ %s.\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "ÄÏÂÁ×ÌÑÅÔÓÑ %d ÚÁÐÉÓÅÊ × ÉÎÄÅËÓ %s\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "ÕÄÁÌÑÅÔÓÑ %s ÐÏÓÌÅ ÕÓÐÅÛÎÏÇÏ ÚÁ×ÅÒÛÅÎÉÑ ÐÅÒÅÉÎÄÅËÁÃÉÉ ÂÁÚÙ × db3.\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "ÐÅÒÅÓÔÒÁÉ×ÁÅÔÓÑ ÂÁÚÁ ÄÁÎÎÙÈ %s × %s\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "ÓÏÚÄÁ£ÔÓÑ ËÁÔÁÌÏÇ %s\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "ÓÏÚÄÁ£ÔÓÑ ËÁÔÁÌÏÇ %s: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "ÏÔËÒÙ×ÁÅÔÓÑ ÓÔÁÒÁÑ ÂÁÚÁ ÄÁÎÎÙÈ ÞÅÒÅÚ dbapi %d\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "ÏÔËÒÙ×ÁÅÔÓÑ ÎÏ×ÁÑ ÂÁÚÁ ÄÁÎÎÙÈ ÞÅÒÅÚ dbapi %d\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "ÕÄÁÌÑÅÔÓÑ ËÁÔÁÌÏÇ %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "ÚÁËÒÙÔ ÉÎÄÅËÓ ÂÁÚÙ ÄÁÎÎÙÈ %s/%s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "ÏÔËÒÙ×ÁÅÔÓÑ ÉÎÄÅËÓ ÂÁÚÙ ÄÁÎÎÙÈ %s/%s %s mode=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: ÞÔÅÎÉÅ %s: %s\n" + +#~ msgid "Unable to write final header\n" +#~ msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÏËÏÎÞÁÔÅÌØÎÙÊ ÚÁÇÏÌÏ×ÏË\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "ÐÁËÅÔÙ ×ÅÒÓÉÉ 1 ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ ÜÔÏÊ ×ÅÒÓÉÅÊ RPM\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "ÜÔÁ ×ÅÒÓÉÑ RPM ÐÏÄÄÅÒÖÉ×ÁÅÔ ÔÏÌØËÏ ÐÁËÅÔÙ ×ÅÒÓÉÉ <= 4\n" + +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: îÅ ÍÏÇÕ ÐÏÄÐÉÓÁÔØ ÐÁËÅÔÙ v1\n" + +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: îÅ ÍÏÇÕ ÐÅÒÅÐÏÄÐÉÓÁÔØ ÐÁËÅÔÙ v2\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: ðÏÄÐÉÓÉ ÎÅÔ (RPM v1.0)\n" diff --git a/po/sk.gmo b/po/sk.gmo new file mode 100644 index 0000000..51ca6b6 Binary files /dev/null and b/po/sk.gmo differ diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..a0d620f --- /dev/null +++ b/po/sk.po @@ -0,0 +1,4260 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.0.3\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 1999-04-08 21:37+02:00\n" +"Last-Translator: Stanislav Meduna \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, fuzzy, c-format +msgid "%s: %s\n" +msgstr "súbor %s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM verzia %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, fuzzy, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Program mô¾e by» voµne redistribuovaný v súlade s podmienkami GNU GPL" + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "vytvorenie archívu zlyhalo pri súbore %s: %s" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "vykonanie zlyhalo\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "argument nie je RPM balík\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "chyba pri èítaní hlavièky balíka\n" + +#: rpm2cpio.c:81 +#, fuzzy, c-format +msgid "cannot re-open payload: %s\n" +msgstr "nie je mo¾né otvori» súbor %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "opýta» sa v¹etkých balíkov v skupine" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "naraz mô¾e by» vykonaný jeden typ otázky alebo overenia" + +#: rpmqv.c:125 +#, fuzzy +msgid "unexpected query flags" +msgstr "neoèakávaný zdroj pre otázku" + +#: rpmqv.c:128 +#, fuzzy +msgid "unexpected query format" +msgstr "neoèakávaný zdroj pre otázku" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "neoèakávaný zdroj pre otázku" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "mô¾e by» pou¾itý iba jeden hlavný re¾im" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "iba in¹talácia, aktualizácia a odstránenie zdrojov mô¾u by» vynútené" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "súbory mô¾u by» presunuté iba poèas inètalácie balíka" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate a --excludepath mô¾u by» pou¾ité iba poèas in¹talácie nových " +"balíkov" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix mô¾e by» pou¾itý iba poèas in¹talácie nových balíkov" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "argumenty pre --prefix musia zaèína» znakom /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) mô¾e by» pou¾itý iba poèas in¹talácie balíka" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent mô¾e by» pou¾ité iba poèas in¹talácie balíka" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs mô¾e by» pou¾ité iba poèas in¹talácie balíka" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs mô¾e by» pou¾ité iba poèas in¹talácie balíka" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs mô¾e by» pou¾ité iba poèas in¹talácie balíka" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "mô¾e by» pou¾itá iba jedna voµba z --excludedocs a --includedocs" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch mô¾e by» pou¾ité iba poèas in¹talácie balíka" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos mô¾e by» pou¾ité iba poèas in¹talácie balíka" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize mô¾e by» pou¾ité iba poèas in¹talácie balíka" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches mô¾e by» pou¾ité iba poèas odstránenia balíkov" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles mô¾e by» pou¾ité iba poèas in¹talácie balíka" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb mô¾e by» pou¾ité iba poèas in¹talácie a odstránenia balíka" + +#: rpmqv.c:221 +#, fuzzy +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "--justdb mô¾e by» pou¾ité iba poèas in¹talácie a odstránenia balíka" + +#: rpmqv.c:226 +#, fuzzy +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "--justdb mô¾e by» pou¾ité iba poèas in¹talácie a odstránenia balíka" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test mô¾e by» pou¾ité iba poèas in¹talácie, odstránenia alebo zostavenia " +"balíka" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb mô¾e by» pou¾ité iba poèas in¹talácie a odstránenia balíka" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "argumenty pre --root (-r) musia zaèína» znakom /" + +#: rpmqv.c:256 +#, fuzzy +msgid "no packages given for erase" +msgstr "neboli zadané ¾iadne balíky pre in¹taláciu" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "neboli zadané ¾iadne balíky pre in¹taláciu" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "neboli zadané ¾iadne argumenty pre otázku" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "neboli zadané ¾iadne argumenty pre overenie" + +#: rpmbuild.c:98 +#, fuzzy, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot u¾ bol zadaný" + +#: rpmbuild.c:119 +#, fuzzy, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "príprava (rozbali» zdrojové súbory a aplikova» záplaty)" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:125 +#, fuzzy +msgid "build through %install (%prep, %build, then install) from " +msgstr "in¹taluje sa zdrojový balík\n" + +#: rpmbuild.c:128 +#, fuzzy, c-format +msgid "verify %files section from " +msgstr "zdrojový balík neobsahuje ¾iadny .spec súbor" + +#: rpmbuild.c:131 +#, fuzzy +msgid "build source and binary packages from " +msgstr "nájdených %d zdrojových a %d binárnych balíkov\n" + +#: rpmbuild.c:134 +#, fuzzy +msgid "build binary package only from " +msgstr "zdrojový balík neobsahuje ¾iadny .spec súbor" + +#: rpmbuild.c:137 +#, fuzzy +msgid "build source package only from " +msgstr "zdrojový balík neobsahuje ¾iadny .spec súbor" + +#: rpmbuild.c:141 +#, fuzzy, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "príprava (rozbali» zdrojové súbory a aplikova» záplaty)" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" + +#: rpmbuild.c:150 +#, fuzzy, c-format +msgid "verify %files section from " +msgstr "zdrojový balík neobsahuje ¾iadny .spec súbor" + +#: rpmbuild.c:153 +#, fuzzy +msgid "build source and binary packages from " +msgstr "nájdených %d zdrojových a %d binárnych balíkov\n" + +#: rpmbuild.c:156 +#, fuzzy +msgid "build binary package only from " +msgstr "nájdených %d zdrojových a %d binárnych balíkov\n" + +#: rpmbuild.c:159 +#, fuzzy +msgid "build source package only from " +msgstr "zostavi» balík pre OS/architektúru " + +#: rpmbuild.c:163 +#, fuzzy +msgid "build binary package from " +msgstr "binárny balík (príprava, kompilácia, in¹talácia, zabalenie)" + +#: rpmbuild.c:164 rpmbuild.c:167 +#, fuzzy +msgid "" +msgstr "nájdených %d balíkov\n" + +#: rpmbuild.c:166 +#, fuzzy +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "in¹taluje sa zdrojový balík\n" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "predefinova» adresár pre zostavenie balíka" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "po ukonèení odstráni» adresár, v ktorom sa balík zostavoval" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "" + +#: rpmbuild.c:176 +#, fuzzy +msgid "debug file state machine" +msgstr "chybný stav súboru: %s" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "nevykona» ¾iadne etapy zostavenia" + +#: rpmbuild.c:180 +#, fuzzy +msgid "do not verify build dependencies" +msgstr "neoverova» závislosti balíka" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" + +#: rpmbuild.c:186 +#, fuzzy +msgid "do not accept i18N msgstr's from specfile" +msgstr "neakceptova» lokalizované re»azce zo spec-súboru" + +#: rpmbuild.c:188 +#, fuzzy +msgid "remove sources when done" +msgstr "po ukonèení odstráni» zdrojové súbory a spec-súbor" + +#: rpmbuild.c:190 +#, fuzzy +msgid "remove specfile when done" +msgstr "po ukonèení odstráni» zdrojové súbory a spec-súbor" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "preskoèi» priamo k urèenej etape (iba pre c, i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "predefinova» cieµovú platformu" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" + +#: rpmbuild.c:231 +#, fuzzy +msgid "Failed build dependencies:\n" +msgstr "nevyrie¹ené závislosti:\n" + +#: rpmbuild.c:249 +#, fuzzy, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Nie je mo¾né otvori» spec súbor: %s\n" + +#: rpmbuild.c:311 +#, fuzzy, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Otvorenie rúry pre tar zlyhalo: %s\n" + +#: rpmbuild.c:330 +#, fuzzy, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Nie je mo¾né preèíta» spec súbor z %s\n" + +#: rpmbuild.c:342 +#, fuzzy, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Nie je mo¾né premenova» %s na %s: %s\n" + +#: rpmbuild.c:417 +#, fuzzy, c-format +msgid "failed to stat %s: %m\n" +msgstr "nepodarilo sa zisti» stav %s: %s" + +#: rpmbuild.c:421 +#, fuzzy, c-format +msgid "File %s is not a regular file.\n" +msgstr "Súbor nie je obyèajný súbor: %s\n" + +#: rpmbuild.c:428 +#, fuzzy, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "%s zrejme nie je RPM balík\n" + +#: rpmbuild.c:494 +#, fuzzy, c-format +msgid "Building target platforms: %s\n" +msgstr "predefinova» cieµovú platformu" + +#: rpmbuild.c:502 +#, fuzzy, c-format +msgid "Building for target %s\n" +msgstr "vyhµadáva sa balík %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "" + +#: rpmdb.c:24 +#, fuzzy +msgid "rebuild database inverted lists from installed package headers" +msgstr "znovu vytvori» databázu z existujúcej" + +#: rpmdb.c:27 +#, fuzzy +msgid "verify database files" +msgstr "opýta» sa spec súboru" + +#: rpmdb.c:33 +#, fuzzy +msgid "Database options:" +msgstr "Veµkos» podpisu: %d\n" + +#: rpmkeys.c:23 +#, fuzzy +msgid "verify package signature(s)" +msgstr "overi» podpis balíka" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Veµkos» podpisu: %d\n" + +#: rpmkeys.c:61 rpmsign.c:144 +#, fuzzy +msgid "no arguments given" +msgstr "neboli zadané ¾iadne argumenty pre otázku" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "in¹talova» balík" + +#: rpmsign.c:27 +#, fuzzy +msgid "sign package(s) (identical to --addsign)" +msgstr "podpísa» balík (znièi» aktuálny podpis)" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "overi» podpis balíka" + +#: rpmsign.c:35 +#, fuzzy +msgid "Signature options:" +msgstr "Veµkos» podpisu: %d\n" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, fuzzy, c-format +msgid "Could not exec %s: %s\n" +msgstr "Nie je mo¾né spusti» %s" + +#: rpmsign.c:108 +#, fuzzy, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Musíte nastavi» \"%%gpg_name\" vo va¹om makro-súbore" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "" + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Heslo je v poriadku.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Kontrola hesla zlyhala\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "opýta» sa spec súboru" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "opýta» sa spec súboru" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "pou¾i» nasledovný formát otázky" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Veµkos» podpisu: %d\n" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "neboli zadané ¾iadne argumenty pre otázku" + +#: build/build.c:122 build/pack.c:408 +#, fuzzy +msgid "Unable to open temp file.\n" +msgstr "Nie je mo¾né otvori» doèasný súbor" + +#: build/build.c:170 +#, fuzzy, c-format +msgid "Executing(%s): %s\n" +msgstr "Vykonáva sa: %s\n" + +#: build/build.c:177 +#, fuzzy, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Vykonanie %s zlyhalo (%s)" + +#: build/build.c:186 +#, fuzzy, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Chybný výstupný kód z %s (%s)" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" + +#: build/expression.c:216 +#, fuzzy +msgid "syntax error while parsing ==\n" +msgstr "chyba syntaxe vo výraze" + +#: build/expression.c:246 +#, fuzzy +msgid "syntax error while parsing &&\n" +msgstr "chyba syntaxe vo výraze" + +#: build/expression.c:255 +#, fuzzy +msgid "syntax error while parsing ||\n" +msgstr "chyba syntaxe vo výraze" + +#: build/expression.c:305 +#, fuzzy +msgid "parse error in expression\n" +msgstr "chyba pri analýze výrazu" + +#: build/expression.c:337 +#, fuzzy +msgid "unmatched (\n" +msgstr "nepárová (" + +#: build/expression.c:369 +#, fuzzy +msgid "- only on numbers\n" +msgstr "- ibe pre èísla" + +#: build/expression.c:385 +#, fuzzy +msgid "! only on numbers\n" +msgstr "! iba pre èísla" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +#, fuzzy +msgid "types must match\n" +msgstr "typy sa musia zhodova»" + +#: build/expression.c:440 +#, fuzzy +msgid "* / not suported for strings\n" +msgstr "* / nie sú podporované pre re»azce" + +#: build/expression.c:491 +#, fuzzy +msgid "- not suported for strings\n" +msgstr "- nie je podporované pre re»azce" + +#: build/expression.c:638 +#, fuzzy +msgid "&& and || not suported for strings\n" +msgstr "&& a || nie sú podporované pre re»azce" + +#: build/expression.c:671 +#, fuzzy +msgid "syntax error in expression\n" +msgstr "chyba syntaxe vo výraze" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, fuzzy, c-format +msgid "Missing '(' in %s %s\n" +msgstr "chýbajúce %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, fuzzy, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "chýbajúca ':' na %s:%d" + +#: build/files.c:334 build/files.c:637 +#, fuzzy, c-format +msgid "Invalid %s token: %s\n" +msgstr "Chybný %s prvok: %s" + +#: build/files.c:443 +#, fuzzy, c-format +msgid "Missing %s in %s %s\n" +msgstr "chýbajúce %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "" + +#: build/files.c:532 +#, fuzzy, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Chybná %s() syntax: %s" + +#: build/files.c:541 +#, fuzzy, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Chybná ¹pecifikácia práv %s(): %s" + +#: build/files.c:553 +#, fuzzy, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Chybná ¹pecifikácia práv adresára %s(): %s" + +#: build/files.c:713 +#, fuzzy, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Iba jeden záznam v %%lang(): %s" + +#: build/files.c:723 +#, fuzzy, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Iba jeden záznam v %%lang(): %s" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Chybný %s prvok: %s" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, fuzzy, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Iba jeden argument pre %%docdir" + +#: build/files.c:889 +#, fuzzy, c-format +msgid "Two files on one line: %s\n" +msgstr "Dva súbory na riadku: %s" + +#: build/files.c:902 +#, fuzzy, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Súbory musia zaèína» znakom \"/\": %s" + +#: build/files.c:913 +#, fuzzy, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Nie je mo¾né mie¹a» ¹peciálne %%doc s inými formami: %s" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, fuzzy, c-format +msgid "File listed twice: %s\n" +msgstr "Súbor zadaný dvakrát: %s." + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "otvorenie %s zlyhalo\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Súbor nebol nájdený: %s" + +#: build/files.c:1388 +#, fuzzy, c-format +msgid "File not found: %s\n" +msgstr "Súbor nebol nájdený: %s" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, fuzzy, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: readLead zlyhalo\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "Makro %%%s sa nepodarilo expandova»" + +#: build/files.c:1663 +#, fuzzy, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Súbor potrebuje na zaèiatku \"/\": %s" + +#: build/files.c:1688 +#, fuzzy, c-format +msgid "Glob not permitted: %s\n" +msgstr "riadok %d: V %s sú vy¾adované verzie: %s" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Súbor nebol nájdený: %s" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, fuzzy, c-format +msgid "File not found by glob: %s\n" +msgstr "Súbor nebol nájdený: %s" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "chybe: nie je mo¾né otvori» %%files súbor: %s" + +#: build/files.c:1757 +#, fuzzy, c-format +msgid "line: %s\n" +msgstr "riadok: %s" + +#: build/files.c:2033 +#, fuzzy, c-format +msgid "Bad file: %s: %s\n" +msgstr "súbor %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Chybný vlastník/skupina: %s\n" + +#: build/files.c:2095 +#, fuzzy, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "vyhµadáva sa balík %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "Spracovávajú sa súbory: %s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, fuzzy, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "vytvorenie archívu zlyhalo pri súbore %s: %s" + +#: build/pack.c:86 +#, fuzzy, c-format +msgid "create archive failed: %s\n" +msgstr "vytvorenie archívu zlyhalo pri súbore %s: %s" + +#: build/pack.c:107 +#, fuzzy, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy zápis zlyhal: %s" + +#: build/pack.c:114 +#, fuzzy, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy èítanie zlyhalo: %s" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "riadok: %s" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Nie je mo¾né kanonizova» názov poèítaèa: %s\n" + +#: build/pack.c:228 +#, fuzzy, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Nie je mo¾né otvori» PreIn súbor: %s" + +#: build/pack.c:235 +#, fuzzy, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Nie je mo¾né otvori» PreUn súbor: %s" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Nie je mo¾né otvori» PreIn súbor: %s" + +#: build/pack.c:249 +#, fuzzy, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Nie je mo¾né otvori» PostIn súbor: %s" + +#: build/pack.c:256 +#, fuzzy, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Nie je mo¾né otvori» PostUn súbor: %s" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Nie je mo¾né otvori» PostIn súbor: %s" + +#: build/pack.c:271 +#, fuzzy, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Nie je mo¾né otvori» VerifyScript súbor: %s" + +#: build/pack.c:297 +#, fuzzy, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Nie je mo¾né otvori» Trigger skriptový súbor: %s" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Neznámy typ ikony: %s" + +#: build/pack.c:395 +#, fuzzy +msgid "Unable to create immutable header region.\n" +msgstr "Nie je mo¾né preèíta» ikonu: %s" + +#: build/pack.c:415 +#, fuzzy +msgid "Unable to write temp header\n" +msgstr "Nie je mo¾né zapísa» %s" + +#: build/pack.c:425 +#, fuzzy +msgid "Bad CSA data\n" +msgstr "Chybné CSA dáta" + +#: build/pack.c:491 +#, fuzzy +msgid "Unable to reload signature header.\n" +msgstr "Nie je mo¾né preèíta» ikonu: %s" + +#: build/pack.c:499 +#, fuzzy, c-format +msgid "Could not open %s: %s\n" +msgstr "Otvorenie %s zlyhalo\n" + +#: build/pack.c:511 +#, fuzzy, c-format +msgid "Unable to write package: %s\n" +msgstr "Nie je mo¾né zapísa» balík: %s" + +#: build/pack.c:527 +#, fuzzy, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Nie je preèíta» sigtarget: %s" + +#: build/pack.c:538 +#, fuzzy, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Nie je mo¾né preèíta» ikonu: %s" + +#: build/pack.c:552 +#, fuzzy, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Nie je mo¾né zapísa» balík: %s" + +#: build/pack.c:564 +#, fuzzy, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Nie je mo¾né preèíta» ikonu: %s" + +#: build/pack.c:571 +#, fuzzy, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Nie je mo¾né zapísa» balík: %s" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Zapísané: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "Vykonáva sa: %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Vykonanie %s zlyhalo (%s)" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Kontrola hesla zlyhala\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Nie je mo¾né vytvori» meno výstupného súboru pre balík %s: %s\n" + +#: build/pack.c:740 +#, fuzzy, c-format +msgid "cannot create %s: %s\n" +msgstr "nie je mo¾né zapísa» do %s: " + +#: build/parseBuildInstallClean.c:35 +#, fuzzy, c-format +msgid "line %d: second %s\n" +msgstr "riadok %d: druhý %s" + +#: build/parseChangelog.c:131 +#, fuzzy, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog záznamy musia zaèína» *" + +#: build/parseChangelog.c:139 +#, fuzzy, c-format +msgid "incomplete %%changelog entry\n" +msgstr "nekompletný %%changelog záznam" + +#: build/parseChangelog.c:154 +#, fuzzy, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "chybný dátum v %%changelog: %s " + +#: build/parseChangelog.c:159 +#, fuzzy, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog nie sú v zostupnom chronologickom poradí" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, fuzzy, c-format +msgid "missing name in %%changelog\n" +msgstr "chýbajúce meno v %%changelog" + +#: build/parseChangelog.c:185 +#, fuzzy, c-format +msgid "no description in %%changelog\n" +msgstr "¾iadny popis v %%changelog" + +#: build/parseDescription.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "riadok %d: Chyba pri analýze %%description: %s" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, fuzzy, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "riadok %d: Chybná voµba %s: %s" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, fuzzy, c-format +msgid "line %d: Too many names: %s\n" +msgstr "riadok %d: Priveµa názvov: %s" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, fuzzy, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "riadok %d: Balík neexistuje: %s" + +#: build/parseDescription.c:74 +#, fuzzy, c-format +msgid "line %d: Second description\n" +msgstr "riadok %d: Druhý popis" + +#: build/parseFiles.c:30 +#, fuzzy, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "riadok %d: Chyba pri analýze %%files: %s" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "riadok %d: Chyba pri analýze %%files: %s" + +#: build/parsePreamble.c:155 +#, fuzzy, c-format +msgid "line %d: Bad number: %s\n" +msgstr "riadok %d: Chybné èíslo: %s" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "riadok %d: Chybné no%s èíslo: %d" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "riadok %d: Chybné %s èíslo: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "\"%s\" ¹pecifikuje viac balíkov\n" + +#: build/parsePreamble.c:401 +#, fuzzy, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Architektúra je vynechaná: %s" + +#: build/parsePreamble.c:406 +#, fuzzy, c-format +msgid "Architecture is not included: %s\n" +msgstr "Architektúra nie je obsiahnutá: %s" + +#: build/parsePreamble.c:411 +#, fuzzy, c-format +msgid "OS is excluded: %s\n" +msgstr "OS je vynechaný: %s" + +#: build/parsePreamble.c:416 +#, fuzzy, c-format +msgid "OS is not included: %s\n" +msgstr "OS nie je obsiahnutý: %s" + +#: build/parsePreamble.c:442 +#, fuzzy, c-format +msgid "%s field must be present in package: %s\n" +msgstr "V balíku musí existova» pole %s: %s" + +#: build/parsePreamble.c:465 +#, fuzzy, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Duplicitné záznamy %s v balíku: %s" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, fuzzy, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Nie je mo¾né preèíta» ikonu: %s" + +#: build/parsePreamble.c:563 +#, fuzzy, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Nie je mo¾né preèíta» ikonu: %s" + +#: build/parsePreamble.c:573 +#, fuzzy, c-format +msgid "Unknown icon type: %s\n" +msgstr "Neznámy typ ikony: %s" + +#: build/parsePreamble.c:587 +#, fuzzy, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "riadok %d: Chybná voµba %s: %s" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "riadok %d: Neprípustný znak '-' v %s: %s" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "riadok %d: Neprípustný znak '-' v %s: %s" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "riadok %d: Neprípustný znak '-' v %s: %s" + +#: build/parsePreamble.c:641 +#, fuzzy, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "riadok %d: Znetvorený popis: %s" + +#: build/parsePreamble.c:649 +#, fuzzy, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "riadok %d: Prázdny popis: %s" + +#: build/parsePreamble.c:706 +#, fuzzy, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "riadok %d: Prefixy nesmú konèi» \"/\": %s" + +#: build/parsePreamble.c:719 +#, fuzzy, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "riadok %d: Docdir musí zaèína» '/': %s" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "riadok %d: Epoch/Serial pole musí by» èíslo: %s" + +#: build/parsePreamble.c:773 +#, fuzzy, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "riadok %d: Chybné %s èíslo: %s\n" + +#: build/parsePreamble.c:800 +#, fuzzy, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "riadok %d: Chybný formát BuildArchitecture: %s" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, fuzzy, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Interná chyba: Èudný popis %d " + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "riadok %d: V %s sú vy¾adované verzie: %s" + +#: build/parsePreamble.c:972 +#, fuzzy, c-format +msgid "Bad package specification: %s\n" +msgstr "Chybná ¹pecifikácia balíka: %s" + +#: build/parsePreamble.c:978 +#, fuzzy, c-format +msgid "Package already exists: %s\n" +msgstr "Balík u¾ existuje: %s" + +#: build/parsePreamble.c:1009 +#, fuzzy, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "riadok %d: Neznámy popis: %s" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "riadok %d: BuildRoot nemô¾e by» \"/\": %s" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "riadok %d: BuildRoot nemô¾e by» \"/\": %s" + +#: build/parsePrep.c:28 +#, fuzzy, c-format +msgid "Bad source: %s: %s\n" +msgstr "Chybný zdroj %s: %s" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "Neexistuje patch èíslo %d" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "Neexistuje zdroj èíslo %d" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "zdrojový balík neobsahuje ¾iadny .spec súbor" + +#: build/parsePrep.c:173 +#, fuzzy, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Nebolo mo¾né prenies» nie-zdroj %s: %s" + +#: build/parsePrep.c:277 +#, fuzzy, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Chyba pri analýze %%setup: %s" + +#: build/parsePrep.c:288 +#, fuzzy, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "riadok %d: Chybný argument pre %%setup %c: %s" + +#: build/parsePrep.c:303 +#, fuzzy, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "riadok %d: Chybná voµba pre %%setup %s: %s" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "súbor %s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "chybné èíslo balíku: %s\n" + +#: build/parsePrep.c:502 +#, fuzzy, c-format +msgid "line %d: second %%prep\n" +msgstr "riadok %d: druhý %%prep" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "riadok %d: %s: prvky musia zaèína» alfanumerickým znakom: %s" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "riadok %d: Názvy súborov v %s neobsahujú verzie: %s" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "riadok %d: V %s sú vy¾adované verzie: %s" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "riadok %d: Chybné èíslo: %s" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "riadok %d: %s" + +#: build/parseScript.c:192 +#, fuzzy, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "riadok %d: triggers musia obsahova» --: %s" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, fuzzy, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "riadok %d: Chyba pri analýze %s: %s" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "riadok %d: program skriptu musí zaèína» '/': %s" + +#: build/parseScript.c:220 +#, fuzzy, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "riadok %d: program skriptu musí zaèína» '/': %s" + +#: build/parseScript.c:258 +#, fuzzy, c-format +msgid "line %d: Second %s\n" +msgstr "riadok %d: Druhý %s" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "riadok %d: Chyba pri analýze %%description: %s" + +#: build/parseSpec.c:201 +#, fuzzy, c-format +msgid "line %d: %s\n" +msgstr "riadok %d: %s" + +#: build/parseSpec.c:245 +#, fuzzy, c-format +msgid "Unable to open %s: %s\n" +msgstr "otvorenie zlyhalo: %s\n" + +#: build/parseSpec.c:257 +#, fuzzy, c-format +msgid "Unclosed %%if\n" +msgstr "Neuzavretý %%if" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "" + +#: build/parseSpec.c:357 +#, fuzzy, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: %%else bez if" + +#: build/parseSpec.c:369 +#, fuzzy, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: %%endif bez if" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, fuzzy, c-format +msgid "malformed %%include statement\n" +msgstr "znetvorený príkaz %%include" + +#: build/parseSpec.c:639 +#, fuzzy +msgid "No compatible architectures found for build\n" +msgstr "®iadne zostaviteµné architektúry" + +#: build/parseSpec.c:673 +#, fuzzy, c-format +msgid "Package has no %%description: %s\n" +msgstr "Balík neobsahuje %%description: %s" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Nie je mo¾né preèíta» spec súbor z %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Nie je mo¾né preèíta» spec súbor z %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Nie je mo¾né preèíta» spec súbor z %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Otvorenie rúry pre tar zlyhalo: %s\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Chyba pri analýze %%setup: %s" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Vykonáva sa: %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "chýbajúce %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Priveµa argumentov v riadku údajov na %s:%d" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Spracovávajú sa súbory: %s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "riadok %d: Chybné èíslo: %s" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Nie je mo¾né vytvori» proces %s" + +#: build/rpmfc.c:247 +#, fuzzy, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Nie je mo¾né spusti» %s" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, fuzzy, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Nie je mo¾né vytvori» proces %s" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s zlyhalo" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "nepodarilo sa zapísa» v¹etky dáta do %s" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "gpg sa nepodarilo zapísa» podpis" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "otvorenie %s zlyhalo\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "odstránenie %s zlyhalo: %s" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "Zis»ujú sa po¾adované vlastnosti...\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, fuzzy, c-format +msgid "Failed to find %s:\n" +msgstr "Nepodarilo sa zisti» poskytované vlastnosti" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "otázka na spec-súbor %s zlyhala, nie je mo¾né analyzova»\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(chyba 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Chybné magické èíslo" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Chybná/neèitateµná hlavièka" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Priveµká hlavièka" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Neznámy typ súboru" + +#: lib/cpio.c:225 +#, fuzzy +msgid "Missing hard link(s)" +msgstr "chýbajúca ':' na %s:%d" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "typy sa musia zhodova»" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Interná chyba" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " zlyhalo - " + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/depends.c:245 +#, fuzzy, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(nie je èíslo)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +#, fuzzy +msgid "(not base64)" +msgstr "(nie je èíslo)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "" + +#: lib/formats.c:376 lib/formats.c:462 +#, fuzzy +msgid "(not a blob)" +msgstr "(nie je èíslo)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "" + +#: lib/formats.c:485 +#, fuzzy +msgid "(not an OpenPGP signature)" +msgstr "vynecha» akékoµvek PGP podpisy" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normálny " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "nahradený " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "nein¹talovaný " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "zdieµaný " + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "chýbajúce %s\n" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(neznámy %d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(nie je èíslo)" + +#: lib/fsm.c:737 +#, fuzzy, c-format +msgid "user %s does not exist - using root\n" +msgstr "pou¾ívateµ %s neexistuje - pou¾ije sa root" + +#: lib/fsm.c:744 +#, fuzzy, c-format +msgid "group %s does not exist - using root\n" +msgstr "skupina %s neexistuje - pou¾ije sa root" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, fuzzy, c-format +msgid "%s saved as %s\n" +msgstr "varovanie: %s uchovaný ako %s" + +#: lib/fsm.c:1977 +#, fuzzy, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "nie je mo¾né odstráni» %s - adresár nie je prázdny" + +#: lib/fsm.c:1983 +#, fuzzy, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "rmdir %s zlyhalo: %s" + +#: lib/fsm.c:1997 +#, fuzzy, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "otvorenie %s zlyhalo\n" + +#: lib/fsm.c:2019 +#, fuzzy, c-format +msgid "%s created as %s\n" +msgstr "varovanie: %s vytvorené ako %s" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature zlyhalo\n" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Podpis nie je k dispozícii\n" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: readLead zlyhalo\n" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, fuzzy, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: readLead zlyhalo\n" + +#: lib/package.c:794 +#, fuzzy, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s nie je mo¾né nain¹talova»\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +#, fuzzy +msgid "print macro expansion of EXPR" +msgstr "vypísa» verziu pou¾ívaného rpm" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +#, fuzzy +msgid "don't verify package digest(s)" +msgstr "neoverova» závislosti balíka" + +#: lib/poptALL.c:176 +#, fuzzy +msgid "don't verify database header(s) when retrieved" +msgstr "neoverova» architektúru balíka" + +#: lib/poptALL.c:178 +#, fuzzy +msgid "don't verify package signature(s)" +msgstr "overi» podpis balíka" + +#: lib/poptALL.c:181 +#, fuzzy +msgid "send stdout to CMD" +msgstr "posla» ¹tandardný výstup do " + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +#, fuzzy +msgid "use ROOT as top level directory" +msgstr "pou¾i» ako adresár najvy¹¹ej úrovne" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "vypísa» verziu pou¾ívaného rpm" + +#: lib/poptALL.c:208 +#, fuzzy +msgid "debug payload file state machine" +msgstr "chybný stav súboru: %s" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "vynechané cesty musia zaèína» znakom /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "presunutia musia zaèína» znakom /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "presunutia musia obsahova» znak =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "presunutia musia ma» za znakom = znak /" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"in¹talova» v¹etky súbory vrátane konfiguraèných súborov, ktoré by inak mohli " +"by» vynechané" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"odin¹talova» v¹etky balíky urèené (inak je chybou, pokiaµ " +"¹pecifikuje viac ako jeden balík)" + +#: lib/poptI.c:123 +#, fuzzy +msgid "relocate files in non-relocatable package" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "odin¹talova» balík" + +#: lib/poptI.c:131 +#, fuzzy +msgid "+" +msgstr "nájdených %d balíkov\n" + +#: lib/poptI.c:134 lib/poptI.c:171 +#, fuzzy +msgid "do not install configuration files" +msgstr "zobrazi» v¹etky konfiguraèné súbory" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "nein¹talova» dokumentáciu" + +#: lib/poptI.c:139 +#, fuzzy +msgid "skip files with leading component " +msgstr "vynecha» súbory v ceste " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "skratka pre --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +#, fuzzy +msgid "upgrade package(s) if already installed" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +#, fuzzy +msgid "+" +msgstr " -p +" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "vypisova» znaèky poèas in¹talácie balíka (vhodné s -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "neoverova» architektúru balíka" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "neoverova» operaèný systém balíka" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "pred in¹taláciou nekontrolova» dostupné miesto na disku" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "in¹talova» dokumentáciu" + +#: lib/poptI.c:164 +#, fuzzy +msgid "install package(s)" +msgstr "in¹talova» balík" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "aktualizova» databázu bez zmeny súborového systému" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "neoverova» závislosti balíka" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "zobrazi» v¹etky konfiguraèné súbory" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "nemeni» poradie balíkov kvôli vyrie¹eniu závislostí" + +#: lib/poptI.c:191 +#, fuzzy +msgid "do not execute package scriptlet(s)" +msgstr "nevykona» ¾iadne skripty ¹pecifikované balíkom" + +#: lib/poptI.c:195 +#, fuzzy, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "nevykona» ¾iadne etapy" + +#: lib/poptI.c:198 +#, fuzzy, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "nevykona» ¾iadne etapy" + +#: lib/poptI.c:201 +#, fuzzy, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "nevykona» ¾iadne etapy" + +#: lib/poptI.c:204 +#, fuzzy, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "nevykona» ¾iadne etapy" + +#: lib/poptI.c:207 +#, fuzzy +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "nevykona» ¾iadne skripty spú¹»ané týmto balíkom" + +#: lib/poptI.c:210 +#, fuzzy, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "nevykona» ¾iadne skripty ¹pecifikované balíkom" + +#: lib/poptI.c:213 +#, fuzzy, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "nevykona» ¾iadne in¹talaèné skripty" + +#: lib/poptI.c:216 +#, fuzzy, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "nevykona» ¾iadne in¹talaèné skripty" + +#: lib/poptI.c:219 +#, fuzzy, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "nevykona» ¾iadne in¹talaèné skripty" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"aktualizova» na star¹iu verziu balíka (--force to pri aktualizácii urobí " +"automaticky)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "vypisova» percentá poèas in¹talácie balíka" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "presunú» balík do , pokiaµ to balík povoµuje" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +#, fuzzy +msgid "relocate files from path to " +msgstr "presunú» súbory zo do " + +#: lib/poptI.c:237 +#, fuzzy +msgid "=" +msgstr " --relocate =" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "prein¹talova», pokiaµ u¾ balík existuje" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "nein¹talova», ale oznámi», èi by to bolo mo¾né" + +#: lib/poptI.c:248 +#, fuzzy +msgid "upgrade package(s)" +msgstr " --upgrade " + +#: lib/poptQV.c:67 +#, fuzzy +msgid "query/verify all packages" +msgstr "opýta» sa na v¹etky balíky" + +#: lib/poptQV.c:69 +#, fuzzy +msgid "rpm checksig mode" +msgstr "re¾im otázok" + +#: lib/poptQV.c:71 +#, fuzzy +msgid "query/verify package(s) owning file" +msgstr "opýta» sa na balík vlastniaci " + +#: lib/poptQV.c:73 +#, fuzzy +msgid "query/verify package(s) in group" +msgstr "opýta» sa v¹etkých balíkov v skupine" + +#: lib/poptQV.c:75 +#, fuzzy +msgid "query/verify a package file" +msgstr "opýta» sa na v¹etky balíky" + +#: lib/poptQV.c:78 +#, fuzzy +msgid "query/verify package(s) with package identifier" +msgstr "opýta» sa balíku vlastniaceho súbor" + +#: lib/poptQV.c:80 +#, fuzzy +msgid "query/verify package(s) with header identifier" +msgstr "opýta» sa balíku vlastniaceho súbor" + +#: lib/poptQV.c:83 +#, fuzzy +msgid "rpm query mode" +msgstr "re¾im otázok" + +#: lib/poptQV.c:85 +#, fuzzy +msgid "query/verify a header instance" +msgstr "opýta» sa balíku vlastniaceho súbor" + +#: lib/poptQV.c:87 +#, fuzzy +msgid "query/verify package(s) from install transaction" +msgstr "opýta» sa v¹etkých balíkov v skupine" + +#: lib/poptQV.c:89 +#, fuzzy +msgid "query the package(s) triggered by the package" +msgstr "opýta» sa balíkov spustených balíkom" + +#: lib/poptQV.c:91 +#, fuzzy +msgid "rpm verify mode" +msgstr "re¾im otázok" + +#: lib/poptQV.c:93 +#, fuzzy +msgid "query/verify the package(s) which require a dependency" +msgstr "opýta» sa na balíky vy¾adujúce schopnos» " + +#: lib/poptQV.c:95 +#, fuzzy +msgid "query/verify the package(s) which provide a dependency" +msgstr "opýta» sa na balíky poskytujúce schopnos» " + +#: lib/poptQV.c:98 +#, fuzzy +msgid "do not glob arguments" +msgstr "neboli zadané ¾iadne argumenty pre otázku" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "zobrazi» v¹etky konfiguraèné súbory" + +#: lib/poptQV.c:173 +#, fuzzy +msgid "list all documentation files" +msgstr "zobrazi» v¹etky dokumentaèné súbory" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "zobrazi» základné informácie o balíku" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "zobrazii» stav daných súborov" + +#: lib/poptQV.c:209 +#, fuzzy +msgid "don't verify size of files" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptQV.c:212 +#, fuzzy +msgid "don't verify symlink path of files" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptQV.c:215 +#, fuzzy +msgid "don't verify owner of files" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptQV.c:218 +#, fuzzy +msgid "don't verify group of files" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +#, fuzzy +msgid "don't verify mode of files" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptQV.c:235 +#, fuzzy +msgid "don't verify files in package" +msgstr "zobrazi» súbory v balíku" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +#, fuzzy +msgid "don't verify package dependencies" +msgstr "neoverova» závislosti balíka" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +#, fuzzy +msgid "don't execute verify script(s)" +msgstr "nevykona» ¾iadne etapy" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "chýbajúca architektúra pre %s na %s:%d" + +#: lib/psm.c:254 +#, fuzzy +msgid "source package expected, binary found\n" +msgstr "oèakávaný zdrojový balík, nájdený binárny" + +#: lib/psm.c:307 +#, fuzzy +msgid "source package contains no .spec file\n" +msgstr "zdrojový balík neobsahuje ¾iadny .spec súbor" + +#: lib/psm.c:848 +#, fuzzy, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "rozbalenie archívu zlyhalo%s%s: %s" + +#: lib/psm.c:849 +msgid " on file " +msgstr " pre súbor " + +#: lib/psm.c:967 +#, fuzzy, c-format +msgid "%s failed on file %s: %s\n" +msgstr "nepodarilo sa otvori» %s: %s" + +#: lib/psm.c:970 +#, fuzzy, c-format +msgid "%s failed: %s\n" +msgstr "%s zlyhalo" + +#: lib/query.c:115 +#, fuzzy, c-format +msgid "incorrect format: %s\n" +msgstr "chyba formátu: %s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(neobsahuje ¾iadne súbory)" + +#: lib/query.c:160 +msgid "normal " +msgstr "normálny " + +#: lib/query.c:163 +msgid "replaced " +msgstr "nahradený " + +#: lib/query.c:166 +msgid "not installed " +msgstr "nein¹talovaný " + +#: lib/query.c:169 +msgid "net shared " +msgstr "zdieµaný " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(¾iadny stav) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(neznámy %d) " + +#: lib/query.c:198 +#, fuzzy +msgid "package has not file owner/group lists\n" +msgstr "balík neobsahuje ani vlastníka súboru, ani zoznamy identifikácií" + +#: lib/query.c:229 +#, fuzzy +msgid "package has neither file owner or id lists\n" +msgstr "balík neobsahuje ani vlastníka súboru, ani zoznamy identifikácií" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "skupina %s neobsahuje ¾iadne balíky\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "¾iadny z balíkov nespú¹»a %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, fuzzy, c-format +msgid "malformed %s: %s\n" +msgstr "Nie je mo¾né preèíta» %s: %s." + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, fuzzy, c-format +msgid "no package matches %s: %s\n" +msgstr "¾iadny z balíkov nespú¹»a %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "¾iadny z balíkov nevy¾aduje %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "¾iadny z balíkov neposkytuje %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "súbor %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "súbor %s nie je vlastnený ¾iadnym balíkom\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "chybné èíslo balíku: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "záznam %d nie je mo¾né preèíta»\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "neznámy tag" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: readLead zlyhalo\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: readLead zlyhalo\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: readLead zlyhalo\n" + +#: lib/rpmchecksig.c:116 +#, fuzzy, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: readLead zlyhalo\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NIE JE V PORIADKU" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "V PORIADKU" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (CHÝBAJÚCE K¥ÚÈE):" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (NEDÔVERUJE SA K¥ÚÈOM: " + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, fuzzy, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: otvorenie zlyhalo\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "nepodarilo sa odstráni» adresár %s: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "nie je mo¾né odstráni» %s - adresár nie je prázdny" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "nepodarilo sa odstráni» adresár %s: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "nepodarilo sa odstráni» adresár %s: %s\n" + +#: lib/rpmds.c:403 +#, fuzzy +msgid "NO " +msgstr "NIE JE V PORIADKU" + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +#, fuzzy +msgid "internal support for lua scripts." +msgstr "- nie je podporované pre re»azce" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, fuzzy, c-format +msgid "open of %s failed: %s\n" +msgstr "otvorenie %s zlyhalo\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "¾iadny z balíkov nespú¹»a %s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "" + +#: lib/rpminstall.c:176 +#, fuzzy +msgid "Preparing packages for installation..." +msgstr "neboli zadané ¾iadne balíky pre in¹taláciu" + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +#, fuzzy +msgid "Failed dependencies:\n" +msgstr "nevyrie¹ené závislosti:\n" + +#: lib/rpminstall.c:305 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "¾iadny z balíkov nespú¹»a %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s nie je mo¾né nain¹talova»\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Prená¹a sa %s\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "%s vynechané - prenos zlyhal - %s\n" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/rpminstall.c:563 +#, fuzzy, c-format +msgid "error reading from file %s\n" +msgstr "chyba pri vytváraní doèasného súboru %s" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" ¹pecifikuje viac balíkov\n" + +#: lib/rpminstall.c:708 +#, fuzzy, c-format +msgid "cannot open %s: %s\n" +msgstr "nie je mo¾né otvori» %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "In¹taluje sa %s\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "argument nie je RPM balík\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s: Podpis nie je k dispozícii\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, fuzzy, c-format +msgid "read failed: %s (%d)\n" +msgstr "èítanie zlyhalo: %s (%d)" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "argument nie je RPM balík\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "nie je mo¾né získa» %s zámok pre databázu" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "nie je mo¾né získa» %s zámok pre databázu" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "nepodarilo sa otvori» %s: %s" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Nie je mo¾né premenova» %s na %s: %s\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Nie je mo¾né premenova» %s na %s: %s\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "" + +#: lib/rpmprob.c:115 +#, fuzzy, c-format +msgid "package %s is intended for a %s architecture" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "" + +#: lib/rpmprob.c:124 +#, fuzzy, c-format +msgid "package %s is already installed" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/rpmprob.c:128 +#, fuzzy, c-format +msgid "path %s in package %s is not relocatable" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" + +#: lib/rpmprob.c:143 +#, fuzzy, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "balík %s nie je nain¹talovaný\n" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:162 +#, fuzzy, c-format +msgid "%s is needed by %s%s" +msgstr " je vy¾adované %s-%s-%s\n" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +#, fuzzy +msgid "(installed) " +msgstr "nein¹talovaný " + +#: lib/rpmprob.c:167 +#, fuzzy, c-format +msgid "%s conflicts with %s%s" +msgstr " koliduje s %s-%s-%s\n" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr " je vy¾adované %s-%s-%s\n" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "" + +#: lib/rpmrc.c:186 +#, fuzzy, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "chýbajúce druhé ':' na %s:%d" + +#: lib/rpmrc.c:189 +#, fuzzy, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "chýba názov architektúry na %s:%d" + +#: lib/rpmrc.c:334 +#, fuzzy, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Neúplný riadok údajov na %s:%d" + +#: lib/rpmrc.c:339 +#, fuzzy, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Priveµa argumentov v riadku údajov na %s:%d" + +#: lib/rpmrc.c:346 +#, fuzzy, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Chybné èíslo arch/os: %s (%s:%d)" + +#: lib/rpmrc.c:377 +#, fuzzy, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Neúplný implicitný riadok na %s:%d" + +#: lib/rpmrc.c:382 +#, fuzzy, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Priveµa argumentov v implicitnom riadku na %s:%d" + +#: lib/rpmrc.c:486 +#, fuzzy, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "chýbajúca ':' na %s:%d" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, fuzzy, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "chýbajúci argument pre %s na %s:%d" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "nie je mo¾né otvori» %s na %s:%d" + +#: lib/rpmrc.c:535 +#, fuzzy, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "chýbajúca architektúra pre %s na %s:%d" + +#: lib/rpmrc.c:602 +#, fuzzy, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "chybná voµba '%s' na %s:%d" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Neznámy systém: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Nie je mo¾né otvori» %s pre èítanie: %s." + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "nepodarilo sa odstráni» adresár %s: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Nie je mo¾né vytvori» proces %s" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Nie je mo¾né vytvori» proces %s" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s vynechané - prenos zlyhal - %s\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "vykonanie skriptu zlyhalo" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "vykonanie skriptu zlyhalo" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "neznámy tag" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "nein¹talovaný " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, fuzzy, c-format +msgid "cannot open Packages database in %s\n" +msgstr "nie je mo¾né otvori» %s/packages.rpm\n" + +#: lib/rpmts.c:193 +#, fuzzy, c-format +msgid "extra '(' in package label: %s\n" +msgstr "chybné èíslo balíku: %s\n" + +#: lib/rpmts.c:211 +#, fuzzy, c-format +msgid "missing '(' in package label: %s\n" +msgstr "chýbajúce %s\n" + +#: lib/rpmts.c:219 +#, fuzzy, c-format +msgid "missing ')' in package label: %s\n" +msgstr "chybné èíslo balíku: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: readLead zlyhalo\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "zobrazi» súbory v balíku" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, fuzzy, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Doplnenie podpisu: %d\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s zlyhalo" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "chýbajúce %s\n" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Nevyrie¹ené závislosti pre %s-%s-%s: " + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "chýbajúce { po %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "chýbajúce } po %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "prázdny tag formát" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "prázdne meno tagu" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "neznámy tag" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] oèakávané na konci poµa" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "neoèakávané ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "neoèakávané }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? oèakávané vo výraze" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ oèakávané po ? vo výraze" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} oèakávané vo výraze" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": oèakávané po ? podvýraze" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ oèakávané po : vo výraze" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| oèakávené na konci výrazu" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, fuzzy, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "nie je mo¾né otvori» %s na %s:%d" + +#: lib/rpmdb.c:687 +#, fuzzy +msgid "no dbpath has been set\n" +msgstr "nebola nastavená ¾iadna dbpath" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, fuzzy, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "chyba pri naèítaní záznamu %s z %s" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, fuzzy, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "chyba pri zápise záznamu %s do %s" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: readLead zlyhalo\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: otvorenie zlyhalo\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "chyba pri naèítaní záznamu %s z %s" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "chyba pri naèítaní záznamu %s z %s" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "chyba pri naèítaní záznamu %s z %s" + +#: lib/rpmdb.c:2367 +#, fuzzy, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "nie je mo¾né preèíta» hlavièku na %d pre vyhµadanie" + +#: lib/rpmdb.c:2434 +#, fuzzy, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "chyba pri naèítaní záznamu %s z %s" + +#: lib/rpmdb.c:2453 +#, fuzzy, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "chyba pri zápise záznamu %s do %s" + +#: lib/rpmdb.c:2463 +#, fuzzy, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "chyba pri odstraòovaní záznamu %s z %s" + +#: lib/rpmdb.c:2539 +#, fuzzy, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "chyba pri hµadaní balíka %s\n" + +#: lib/rpmdb.c:2648 +#, fuzzy, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "chyba pri zápise záznamu %s do %s" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "nebola nastavená ¾iadna dbpath" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "nepodarilo sa odstráni» adresár %s: %s\n" + +#: lib/rpmdb.c:2897 +#, fuzzy, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "záznam èíslo %d v databáze je chybný -- bol vynechaný" + +#: lib/rpmdb.c:2911 +#, fuzzy, c-format +msgid "cannot add record originally at %u\n" +msgstr "nie je mo¾né prida» záznam pôvodne na %d" + +#: lib/rpmdb.c:2926 +#, fuzzy +msgid "failed to rebuild database: original database remains in place\n" +msgstr "nepodarilo sa znovu vytvori» databázu; zostáva pôvodná\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "nepodarilo sa nahradi» starú databázu novou!\n" + +#: lib/rpmdb.c:2936 +#, fuzzy, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "nahradí súbory v %s súbormi z %s kvôli obnove" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "nepodarilo sa odstráni» adresár %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "" + +#: lib/backend/db3.c:508 +#, fuzzy, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "nie je mo¾né získa» %s zámok pre databázu" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "zdieµaný" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "výhradný" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "odstraòuje sa index súborov pre %s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Nie je mo¾né preèíta» spec súbor z %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Nie je mo¾né vytvori» proces %s" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Nie je mo¾né preèíta» spec súbor z %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "nepodarilo sa vytvori» %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Pripojenie k serveru zlyhalo" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "nepodarilo sa otvori» %s: %s" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "nepodarilo sa odstráni» adresár %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Nie je mo¾né premenova» %s na %s: %s\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Nie je mo¾né preèíta» %s: %s." + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "nepodarilo sa otvori» %s: %s" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "nepodarilo sa vytvori» %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "Makro %%%s obsahuje neukonèené telo" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "Makro %%%s sa nepodarilo expandova»" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Nie je mo¾né preèíta» spec súbor z %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktívnych %d prázdnych %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(prázdne)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(prázdne)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, fuzzy, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Makro %%%s obsahuje neukonèené telo" + +#: rpmio/macro.c:593 +#, fuzzy, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Makro %%%s obsahuje chybný názov (%%define)" + +#: rpmio/macro.c:599 +#, fuzzy, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Makro %%%s obsahuje neukonèené voµby" + +#: rpmio/macro.c:604 +#, fuzzy, c-format +msgid "Macro %%%s has empty body\n" +msgstr "Makro %%%s obsahuje prázdne telo" + +#: rpmio/macro.c:610 +#, fuzzy, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Makro %%%s sa nepodarilo expandova»" + +#: rpmio/macro.c:648 +#, fuzzy, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Makro %%%s obsahuje chybný názov (%%undefine)" + +#: rpmio/macro.c:737 +#, fuzzy, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Makro %%%s (%s) nebolo pou¾ité pod úrovòou %d " + +#: rpmio/macro.c:819 +#, fuzzy, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Neznáma voµba %c v %s(%s)" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, fuzzy, c-format +msgid "Unterminated %c: %s\n" +msgstr "Neukonèené %c: %s" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "chyba pri vytváraní doèasného súboru %s" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, fuzzy, c-format +msgid "File %s: %s\n" +msgstr "Súbor %s: %s" + +#: rpmio/rpmfileutil.c:351 +#, fuzzy, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Súbor %s je men¹í ako %d bajtov" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "nepodarilo sa odstráni» adresár %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "- nie je podporované pre re»azce" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: readLead zlyhalo\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "chybné èíslo balíku: %s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: readLead zlyhalo\n" + +#: rpmio/rpmlog.c:37 +#, fuzzy +msgid "(no error)" +msgstr "(chyba 0x%x)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "fatálna chyba: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "chyba: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "varovanie: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "Podpis nie je k dispozícii\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(chyba 0x%x)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Nie je mo¾né preèíta» spec súbor z %s\n" + +#: sign/rpmgensig.c:88 +#, fuzzy, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: readLead zlyhalo\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: readLead zlyhalo\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "vykonanie zlyhalo\n" + +#: sign/rpmgensig.c:243 +#, fuzzy +msgid "gpg failed to write signature\n" +msgstr "gpg sa nepodarilo zapísa» podpis" + +#: sign/rpmgensig.c:260 +#, fuzzy +msgid "unable to read the signature\n" +msgstr "nie je mo¾né preèíta» podpis" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "vykonanie zlyhalo\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, fuzzy, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: readLead zlyhalo\n" + +#: sign/rpmgensig.c:563 +#, fuzzy, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmReadSignature zlyhalo\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "otvorenie %s zlyhalo\n" + +#: tools/rpmgraph.c:143 +#, fuzzy, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: readLead zlyhalo\n" + +#: tools/rpmgraph.c:220 +#, fuzzy +msgid "don't verify header+payload signature" +msgstr "overi» podpis balíka" + +#, fuzzy +#~ msgid "add suggested packages to transaction" +#~ msgstr "opýta» sa v¹etkých balíkov v skupine" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Nie je mo¾né spusti» %s" + +#, fuzzy +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps mô¾e by» pou¾ité iba poèas in¹talácie, odstránenia alebo " +#~ "overenia balíka" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) mô¾e by» pou¾ité iba poèas in¹talácie a odstránenia balíka, " +#~ "otázky alebo znovuzostavenia databázy" + +#, fuzzy +#~ msgid "detect file conflicts between packages" +#~ msgstr "balík %s nie je nain¹talovaný\n" + +#, fuzzy +#~ msgid "temporary database %s already exists\n" +#~ msgstr "doèasná databáza %s u¾ existuje" + +#, fuzzy +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "opýta» sa balíku vlastniaceho súbor" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Chybná ¹pecifikácia %%_signature v makro-súbore.\n" + +#, fuzzy +#~ msgid "Target buffer overflow\n" +#~ msgstr "Preplnenie cieµovej vyrovnávacej pamäti" + +#~ msgid "cannot access file %s\n" +#~ msgstr "nie je mo¾né pracova» so súborom %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign mô¾e by» pou¾íté iba poèas zostavenia balíka" + +#, fuzzy +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "zobrazi» súbory v balíku" + +#, fuzzy +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "zobrazi» súbory v balíku" + +#, fuzzy +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "podpísa» balík (znièi» aktuálny podpis)" + +#, fuzzy +#~ msgid "generate signature" +#~ msgstr "vytvori» PGP/GPG podpis" + +#, fuzzy +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Chybná ¹pecifikácia %%_signature v makro-súbore.\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "chyba PREKROÈENIA ÈASU: %s\n" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Vnútorná chyba pri spracovaní argumentu (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: readLead zlyhalo\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: otvorenie %s: %s\n" + +#, fuzzy +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: readLead zlyhalo\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s nie je RPM balík\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: èítanie hlavièky %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Vytvára sa PGP podpis: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "vytvori» PGP/GPG podpis" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "neboli zadané ¾iadne balíky pre znovuzostavenie" + +#~ msgid "no spec files given for build" +#~ msgstr "neboli zadané ¾iadne spec-súbory pre zostavenie" + +#~ msgid "no tar files given for build" +#~ msgstr "neboli zadané ¾iadne tar-súbory pre zostavenie" + +#, fuzzy +#~ msgid "%s failed\n" +#~ msgstr "%s zlyhalo" + +#, fuzzy +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Håbka rekurzie (%d) väè¹ia ako maximálna (%d)" + +#, fuzzy +#~ msgid "(rpmlib provides)" +#~ msgstr "súbor %s nie je vlastnený ¾iadnym balíkom\n" + +#, fuzzy +#~ msgid "(db files)" +#~ msgstr "chybný stav súboru: %s" + +#, fuzzy +#~ msgid "(db provides)" +#~ msgstr "Poskytuje:" + +#, fuzzy +#~ msgid "(added files)" +#~ msgstr "chybný stav súboru: %s" + +#~ msgid "url port must be a number\n" +#~ msgstr "url port musí by» èíslo\n" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "vytvára sa adresár %s\n" + +#, fuzzy +#~ msgid "debug package state machine" +#~ msgstr "chybný stav súboru: %s" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "opýta» sa v¹etkých balíkov v skupine" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "opýta» sa v¹etkých balíkov v skupine" + +#, fuzzy +#~ msgid "do not read headers" +#~ msgstr "nie je mo¾né preèíta» hlavièku na %d pre vyhµadanie" + +#, fuzzy +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Súbor nesúhlasí s prefixom (%s): %s." + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "nepodarilo sa odstráni» adresár %s: %s\n" + +#, fuzzy +#~ msgid "use threads for package state machine" +#~ msgstr "chybný stav súboru: %s" + +#, fuzzy +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() nevrátil veµkos» fuggeru: %s" + +#, fuzzy +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() nevrátil veµkos» fuggeru: %s" + +#, fuzzy +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "nepodarilo sa zisti» stav %s: %s" + +#, fuzzy +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "súbor %s sa nachádza na neznámom zariadení" + +#, fuzzy +#~ msgid "use threads for file state machine" +#~ msgstr "chybný stav súboru: %s" + +#, fuzzy +#~ msgid "cannot open %s index\n" +#~ msgstr "nie je mo¾né otvori» %s\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "otvorenie zlyhalo: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "otvorenie zlyhalo: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Nie je mo¾né otvori» doèasný súbor" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "Neznámy systém: %s\n" + +#, fuzzy +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "balík %%%.*s nebol nájdený, vynecháva sa" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: readLead zlyhalo\n" + +#, fuzzy +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "riadok %d: Druhý %%files zoznam" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Typ údajov %d nie je podorovaný\n" + +#, fuzzy +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "odstraòuje sa index skupín\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "Priveµká hlavièka" + +#~ msgid "pgp not found: " +#~ msgstr "pgp nebolo nájdené: " + +#, fuzzy +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "nie je mo¾né otvori» súbor %s: %s" + +#, fuzzy +#~ msgid "pgp failed\n" +#~ msgstr "pgp zlyhalo" + +#, fuzzy +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp sa nepodarilo zapísa» podpis" + +#, fuzzy +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Musíte nastavi» \"%%pgp_name\" vo va¹om makro-súbore" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "neznámy tag" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "Podpis nie je k dispozícii\n" + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "Podpis nie je k dispozícii\n" + +#, fuzzy +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "riadok %d: BuildRoot nemô¾e by» \"/\": %s" + +#, fuzzy +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Spec súbor nemô¾e pou¾i» BuildRoot" + +#, fuzzy +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "pre preklad re»azcov pou¾i» katalóg správ spec-súborov" + +#, fuzzy +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "nie je mo¾né zapísa» do %s: " + +#, fuzzy +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "nie je mo¾né zapísa» do %s: " + +#, fuzzy +#~ msgid "can't query %s: %s\n" +#~ msgstr "zmazanie %s zlyhalo: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "vykonanie zlyhalo\n" + +#, fuzzy +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "zdrojový balík neobsahuje ¾iadny .spec súbor" + +#, fuzzy +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "nie je mo¾né otvori» %s/packages.rpm\n" + +#~ msgid "Success" +#~ msgstr "Úspech" + +#~ msgid "Bad server response" +#~ msgstr "Chybná odpoveï servera" + +#, fuzzy +#~ msgid "Server I/O error" +#~ msgstr "Chyba vstupu/výstupu servera" + +#~ msgid "Server timeout" +#~ msgstr "Prekroèenie èasového limitu servera" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Nie je mo¾né vyhµada» adresu servera" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Nie je mo¾né vyhµada» názov servera" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Vytvorenie dátového spojenia k serveru zlyhalo" + +#, fuzzy +#~ msgid "I/O error to local file" +#~ msgstr "Chyba vstupu/výstupu lokálneho súboru" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Chyba pri nastavení vzdialeného servera do pasívneho re¾imu" + +#~ msgid "File not found on server" +#~ msgstr "Súbor sa na serveri nenachádza" + +#~ msgid "Abort in progress" +#~ msgstr "Zru¹enie prebieha" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Neznáma alebo neoèakávaná chyba" + +#, fuzzy +#~ msgid "File tree walk options:" +#~ msgstr "Veµkos» podpisu: %d\n" + +#, fuzzy +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: otvorenie zlyhalo\n" + +#, fuzzy +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: readLead zlyhalo\n" + +#, fuzzy +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "expanzia %s zlyhala na %s:%d \"%s\"" + +#, fuzzy +#~ msgid "Cannot expand %s\n" +#~ msgstr "Nie je mo¾né expandova» %s" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "odstránenie %s zlyhalo: %s" + +#, fuzzy +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "Dosiahnutý limit pre %%docdir" + +#, fuzzy +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "riadok %d: %%patch -b potrebuje argument: %s" + +#, fuzzy +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "riadok %d: %%patch -z potrebuje argument: %s" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "riadok %d: Chybný argument pre %%patch -p: %s" + +#, fuzzy +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "riadok %d: %%patch -p potrebuje argument: %s" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "riadok %d: Chybný argument pre %%patch -p: %s" + +#, fuzzy +#~ msgid "Too many patches!\n" +#~ msgstr "Priveµa záplat!" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "riadok %d: Chybný argument pre %%patch: %s" + +#, fuzzy +#~ msgid "debug option/argument processing" +#~ msgstr "Vnútorná chyba pri spracovaní argumentu (%d) :-(\n" + +#, fuzzy +#~ msgid "skip %%readme files" +#~ msgstr "%s: readLead zlyhalo\n" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "èítanie zlyhalo: %s (%d)" + +#, fuzzy +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Nie je mo¾né preèíta» ikonu: %s" + +#, fuzzy +#~ msgid "Repackaging erased files..." +#~ msgstr "balík neobsahuje ¾iadne súbory\n" + +#, fuzzy +#~ msgid "Upgrading packages..." +#~ msgstr " --upgrade " + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "Prená¹a sa %s\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "chyba pri èítaní hlavièky balíka\n" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "Súbor %4d: 0%o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "%10d %s\n" +#~ msgstr "riadok %d: %s" + +#, fuzzy +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "premenováva sa %s na %s\n" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "vykonávajú sa poin¹talaèné skripty (ak existujú)\n" + +#, fuzzy +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "balík: %s-%s-%s test súborov = %d\n" + +#, fuzzy +#~ msgid "package record number: %u\n" +#~ msgstr "po¾aduje sa záznam èíslo %d\n" + +#, fuzzy +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "po¾iadavka balíka %s nie je uspokojená: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s vynechané kvôli príznaku missingok\n" + +#, fuzzy +#~ msgid "%5d exclude %s\n" +#~ msgstr "OS je vynechaný: %s" + +#, fuzzy +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "presúva sa %s do %s\n" + +#, fuzzy +#~ msgid "excluding %s %s\n" +#~ msgstr "vynecháva sa %s\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "presúva sa %s do %s\n" + +#, fuzzy +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "presúva sa %s do %s\n" + +#, fuzzy +#~ msgid "Adding goal: %s\n" +#~ msgstr "Zis»ujú sa po¾adované vlastnosti...\n" + +#~ msgid " ... as %s\n" +#~ msgstr "... ako %s\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "nájdených %d balíkov\n" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "binárny balík v starom ¹týle\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "nájdených %d zdrojových a %d binárnych balíkov\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "in¹talujú sa binárne balíky\n" + +#, fuzzy +#~ msgid "Adding: %s\n" +#~ msgstr "riadok: %s" + +#, fuzzy +#~ msgid "Suggesting: %s\n" +#~ msgstr "zdroje v: %s\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "Súbor %4d: 0%o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "presúva sa %s do %s\n" + +#, fuzzy +#~ msgid " Actual size: %12d\n" +#~ msgstr "Veµkos» podpisu: %d\n" + +#, fuzzy +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Veµkos» podpisu: %d\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "Veµkos» PGP podpisu: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "Preèítaný PGP podpis obsahuje %d bajtov\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "Veµkos» GPG podpisu: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "Preèítaný GPG podpis obsahuje %d bajtov\n" + +#, fuzzy +#~ msgid "excluding directory %s\n" +#~ msgstr "vytvára sa adresár %s\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "balík nemá skupinu\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "¾iadny z balíkov nespú¹»a %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "nájdených %d balíkov\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "nájdených %d balíkov\n" + +#, fuzzy +#~ msgid "running pre-transaction scripts\n" +#~ msgstr "vykonávajú sa predin¹talaèné skripty (ak existujú)\n" + +#, fuzzy +#~ msgid "running post-transaction scripts\n" +#~ msgstr "vykonávajú sa postdein¹talaèné skripty (ak existujú)\n" + +#, fuzzy +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "odstraòuje sa index súborov pre %s\n" + +#, fuzzy +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "odstraòuje sa index súborov pre %s\n" + +#, fuzzy +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "odstraòuje sa index súborov pre %s\n" + +#, fuzzy +#~ msgid "closed db index %s/%s\n" +#~ msgstr "odstraòuje sa index súborov pre %s\n" + +#, fuzzy +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "otvára sa databáza s právami 0x%x v %s\n" + +#, fuzzy +#~ msgid "locked db index %s/%s\n" +#~ msgstr "odstraòuje sa index súborov pre %s\n" + +#, fuzzy +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "odstraòuje sa index skupín\n" + +#, fuzzy +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "odstraòuje sa index názvov\n" + +#, fuzzy +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "premenováva sa %s na %s\n" + +#, fuzzy +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "premenováva sa %s na %s\n" + +#, fuzzy +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "znovu sa vytvára databáza v adresári %s\n" + +#, fuzzy +#~ msgid "creating directory %s\n" +#~ msgstr "vytvára sa adresár %s\n" + +#, fuzzy +#~ msgid "creating directory %s: %s\n" +#~ msgstr "vytvára sa adresár %s\n" + +#, fuzzy +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "otvára sa stará databáza\n" + +#, fuzzy +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "otvára sa nová databáza\n" + +#, fuzzy +#~ msgid "removing directory %s\n" +#~ msgstr "vytvára sa adresár %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "odstraòuje sa index súborov pre %s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "otvára sa databáza s právami 0x%x v %s\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: èítanie %s: %s\n" + +#, fuzzy +#~ msgid "Unable to write final header\n" +#~ msgstr "Nie je mo¾né zapísa» %s" + +#, fuzzy +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "táto verzia RPM podporuje iba balíky s hlavným èíslom <= 3" + +#, fuzzy +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "táto verzia RPM podporuje iba balíky s hlavným èíslom <= 3" + +#, fuzzy +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: Nie je mo¾né podpísa» v1.0 RPM\n" + +#, fuzzy +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: Nie je mo¾né znovu podpísa» v2.0 RPM\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: Podpis nie je k dispozícii (v1.0 RPM)\n" diff --git a/po/sl.gmo b/po/sl.gmo new file mode 100644 index 0000000..b059987 Binary files /dev/null and b/po/sl.gmo differ diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..e11df7c --- /dev/null +++ b/po/sl.po @@ -0,0 +1,4294 @@ +# -*- mode:po; coding:iso-latin-2; -*- Slovenian messages for Redhat pkg. mngr. +# Copyright (C) 2000 Free Software Foundation, Inc. +# Primo¾ Peterlin , 2000. +# $Id: sl.po,v 1.389.2.22 2005/07/17 18:34:49 jbj Exp $ +# +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.0.3\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2000-10-08 19:05+0200\n" +"Last-Translator: Grega Fajdiga \n" +"Language-Team: Slovenian \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, fuzzy, c-format +msgid "%s: %s\n" +msgstr "datoteka %s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM razlièica %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, fuzzy, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Ta program je dovoljeno razpeèevati pod pogoji navedenimi v GNU GPL." + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "ustvarjanje arhiva je bilo za datoteko %s neuspe¹no: %s" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "izvajanje je bilo neuspe¹no\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "navedeni argument ni paket RPM\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "napaka pri branju glave paketa\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "ni mo¾no vnoviè odpreti (payload): %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "poizvedba po paketu v skupini" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "samo en tip poizvedbe/preverjanja je mo¾en naenkrat" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "neprièakovane zastavice pri poizvedbi" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "neprièakovana oblika poizvedbe" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "neprièakovan izvor poizvedbe" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "izbran sme biti le en glavni naèin" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"--force smemo podati samo pri --install --upgrade, --rmsource in --rmspec" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "datoteke smemo premakniti samo med namestitvijo paketa" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "izbiri --relocate in --excludepath se lahko uporabi le pri namestitvi" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix se sme uporabiti le pri namestitvi" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "argumenti izbire --prefix se morajo zaèeti z /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) sme biti podan le ob namestitvi paketa" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent sme biti podan le ob namestitvi paketa" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs sme biti podan le ob namestitvi paketa" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs sme biti podatn le ob namestitvi paketa" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs sme biti podan le ob namestitvi paketa" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "izbiri --excludedocs in --includedocs se medsebojno izkljuèujeta" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch sme biti podan le ob namestitvi paketa" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos sme podan le ob namestitvi paketa" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize sme biti podan le ob namestitvi paketa" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches sme biti podan le ob odstranitvi paketa" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles sme biti podati le ob namestitvi paketa" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb sme biti podan le ob namestitvi ali odstranitvi paketa" + +#: rpmqv.c:221 +#, fuzzy +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "--justdb sme biti podan le ob namestitvi ali odstranitvi paketa" + +#: rpmqv.c:226 +#, fuzzy +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "--justdb sme biti podan le ob namestitvi ali odstranitvi paketa" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test sme biti podan le ob namestitvi, odstranitvi ali izgradnji paketa" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb sme biti podan le ob namestitvi ali odstranitvi paketa" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "argumenti izbire --root (-r) se morajo zaèeti z /" + +#: rpmqv.c:256 +#, fuzzy +msgid "no packages given for erase" +msgstr "paketi katere bi bilo potrebno namestiti niso navedeni" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "paketi katere bi bilo potrebno namestiti niso navedeni" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "argumenti za poizvedbo niso podani" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "argumenti za preverjanje niso podani" + +#: rpmbuild.c:98 +#, fuzzy, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot je ¾e doloèen" + +#: rpmbuild.c:119 +#, fuzzy, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "priprava (razpakiraj izvorno kodo in uporabi popravke)" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +#, fuzzy +msgid "build through %build (%prep, then compile) from " +msgstr "izgradnja prek stopnje %%prep iz datoteke s specifikacijami" + +#: rpmbuild.c:125 +#, fuzzy +msgid "build through %install (%prep, %build, then install) from " +msgstr "izgradnja prek stopnje %%install iz datoteke s specifikacijami" + +#: rpmbuild.c:128 +#, fuzzy, c-format +msgid "verify %files section from " +msgstr "preverjanje dela datoteke s specifikacijami %%files" + +#: rpmbuild.c:131 +#, fuzzy +msgid "build source and binary packages from " +msgstr "izgradi izvorni in binarni paket iz datoteke s specifikacijami" + +#: rpmbuild.c:134 +#, fuzzy +msgid "build binary package only from " +msgstr "izgradi binarni paket iz datoteke .spec" + +#: rpmbuild.c:137 +#, fuzzy +msgid "build source package only from " +msgstr "izgradi izvorni paket iz datoteke .spec" + +#: rpmbuild.c:141 +#, fuzzy, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "priprava (razpakiraj izvorno kodo in uporabi popravke)" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +#, fuzzy +msgid "build through %build (%prep, then compile) from " +msgstr "paket izgradi prek stopnje %%prep iz arhiva tar" + +#: rpmbuild.c:147 +#, fuzzy +msgid "build through %install (%prep, %build, then install) from " +msgstr "paket izgradi prek stopnje %%install iz arhiva tar" + +#: rpmbuild.c:150 +#, fuzzy, c-format +msgid "verify %files section from " +msgstr "preverjanje dela %%files iz arhiva tar" + +#: rpmbuild.c:153 +#, fuzzy +msgid "build source and binary packages from " +msgstr "iz arhiva tar izgradi izvorni in binarni paket" + +#: rpmbuild.c:156 +#, fuzzy +msgid "build binary package only from " +msgstr "iz arhiva tar izgradi binarni paket" + +#: rpmbuild.c:159 +#, fuzzy +msgid "build source package only from " +msgstr "iz arhiva tar izgradi izvorni paket" + +#: rpmbuild.c:163 +#, fuzzy +msgid "build binary package from " +msgstr "binarni paket izgradi iz izvornega" + +#: rpmbuild.c:164 rpmbuild.c:167 +#, fuzzy +msgid "" +msgstr "ni paketov\n" + +#: rpmbuild.c:166 +#, fuzzy +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "izgradnja prek stopnje %%install iz izvornega paketa" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "brez upo¹tevanja vrhnjega imenika izgradnje" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "po zakljuèku drevo imenikov v katerih smo pakete gradili odstrani" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "" + +#: rpmbuild.c:176 +#, fuzzy +msgid "debug file state machine" +msgstr "okvarjeno stanje datoteke: %s" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "brez izvajanja katerekoli od stopenj izgradnje" + +#: rpmbuild.c:180 +#, fuzzy +msgid "do not verify build dependencies" +msgstr "brez preverjanja soodvisnosti paketa" + +#: rpmbuild.c:182 +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" + +#: rpmbuild.c:186 +#, fuzzy +msgid "do not accept i18N msgstr's from specfile" +msgstr "brez sprejemanja internacionaliziranih katalogov iz datoteke spec" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "po zakljuèku naj se izvorna koda izbri¹e" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "po zakljuèku odstrani datoteko s specifikacijami" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "preskok naravnost na doloèeno stopnjo (samo za c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "brez upo¹tevanja strojnega okolja ciljnega sistema" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" + +#: rpmbuild.c:231 +#, fuzzy +msgid "Failed build dependencies:\n" +msgstr "izdelava soodvisnosti je bila neuspe¹na:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Datoteke s specifikacijami %s ni mo¾no odpreti: %s\n" + +#: rpmbuild.c:311 +#, fuzzy, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Povezava s programom tar je bila neuspe¹na: %m\n" + +#: rpmbuild.c:330 +#, fuzzy, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Neuspe¹no branje datoteke s specifikacijami iz %s" + +#: rpmbuild.c:342 +#, fuzzy, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Preimenovanje %s v %s je bilo neuspe¹no: %m" + +#: rpmbuild.c:417 +#, fuzzy, c-format +msgid "failed to stat %s: %m\n" +msgstr "status %s ni na voljo: %s" + +#: rpmbuild.c:421 +#, fuzzy, c-format +msgid "File %s is not a regular file.\n" +msgstr "Datoteka ni obièajna datoteka: %s\n" + +#: rpmbuild.c:428 +#, fuzzy, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Ne ka¾e, da je %s datoteka s specifikacijami." + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Izgradnja za ciljna strojna okolja: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Izgradnja za ciljni sistem %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "" + +#: rpmdb.c:24 +#, fuzzy +msgid "rebuild database inverted lists from installed package headers" +msgstr "ponovno izgradi zbirko iz obstojeèih glav" + +#: rpmdb.c:27 +#, fuzzy +msgid "verify database files" +msgstr "poizvedba po datoteki spec" + +#: rpmdb.c:33 +#, fuzzy +msgid "Database options:" +msgstr "Dol¾. podpisa : %d\n" + +#: rpmkeys.c:23 +#, fuzzy +msgid "verify package signature(s)" +msgstr "preveri podpis paketa(-ov)" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Dol¾. podpisa : %d\n" + +#: rpmkeys.c:61 rpmsign.c:144 +#, fuzzy +msgid "no arguments given" +msgstr "argumenti za poizvedbo niso podani" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "name¹èanje paketa" + +#: rpmsign.c:27 +#, fuzzy +msgid "sign package(s) (identical to --addsign)" +msgstr "podpi¹i paket(e) (trenutni podpis zavrzi)" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "preveri podpis paketa(-ov)" + +#: rpmsign.c:35 +#, fuzzy +msgid "Signature options:" +msgstr "Dol¾. podpisa : %d\n" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, fuzzy, c-format +msgid "Could not exec %s: %s\n" +msgstr "Ni mo¾no izvesti %s: %s" + +#: rpmsign.c:108 +#, fuzzy, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "V makrodatoteki morate nastaviti \"%%_pgp_name\"" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Vnesite pristopno geslo: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Pristopno geslo je pravo.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Preverjanje pristopnega gesla neuspe¹no\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "poizvedba po datoteki spec" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "poizvedba po datoteki spec" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "uporabi naslednjo obliko poizvedbe" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Dol¾. podpisa : %d\n" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "argumenti za poizvedbo niso podani" + +#: build/build.c:122 build/pack.c:408 +#, fuzzy +msgid "Unable to open temp file.\n" +msgstr "Zaèasne datoteke ni mo¾no odpreti" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Izvajanje(%s): %s\n" + +#: build/build.c:177 +#, fuzzy, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Izvajanje %s je bilo neuspe¹no (%s): %s" + +#: build/build.c:186 +#, fuzzy, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "%s javi neuspe¹no izhodno kodo (%s)" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" + +#: build/expression.c:216 +#, fuzzy +msgid "syntax error while parsing ==\n" +msgstr "napaka v skladnji pri razèlembi ==" + +#: build/expression.c:246 +#, fuzzy +msgid "syntax error while parsing &&\n" +msgstr "napaka v skladnji pri razèlembi &&" + +#: build/expression.c:255 +#, fuzzy +msgid "syntax error while parsing ||\n" +msgstr "napaka v skladnji pri razèlembi ||" + +#: build/expression.c:305 +#, fuzzy +msgid "parse error in expression\n" +msgstr "napaka pri razèlembi v izrazu" + +#: build/expression.c:337 +#, fuzzy +msgid "unmatched (\n" +msgstr "nezakljuèen (" + +#: build/expression.c:369 +#, fuzzy +msgid "- only on numbers\n" +msgstr "- samo na ¹tevilih" + +#: build/expression.c:385 +#, fuzzy +msgid "! only on numbers\n" +msgstr "! samo na ¹tevilih" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +#, fuzzy +msgid "types must match\n" +msgstr "tipi se morajo ujemati" + +#: build/expression.c:440 +#, fuzzy +msgid "* / not suported for strings\n" +msgstr "* in / nista podprta za nize" + +#: build/expression.c:491 +#, fuzzy +msgid "- not suported for strings\n" +msgstr "- ni podprt za nize" + +#: build/expression.c:638 +#, fuzzy +msgid "&& and || not suported for strings\n" +msgstr "&& in || nista podprta za nize" + +#: build/expression.c:671 +#, fuzzy +msgid "syntax error in expression\n" +msgstr "napaka v sklanji izraza" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, fuzzy, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Manjkajoèi ,(` v %s %s" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, fuzzy, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Manjkajoèi ,)` v %s(%s" + +#: build/files.c:334 build/files.c:637 +#, fuzzy, c-format +msgid "Invalid %s token: %s\n" +msgstr "Neveljaven ¾eton %s: %s" + +#: build/files.c:443 +#, fuzzy, c-format +msgid "Missing %s in %s %s\n" +msgstr "Manjkajoèi ,(` v %s %s" + +#: build/files.c:496 +#, fuzzy, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Neprazen znak sledi %s(): %s" + +#: build/files.c:532 +#, fuzzy, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Nepravilna skladnja: %s(%s)" + +#: build/files.c:541 +#, fuzzy, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Nepravilno doloèilo naèina: %s(%s)" + +#: build/files.c:553 +#, fuzzy, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Nepravilno doloèilo naèina imenika: %s(%s)" + +#: build/files.c:713 +#, fuzzy, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Nenavadna dol¾ina za locale: \"%.s\" pri %%lang(%s)" + +#: build/files.c:723 +#, fuzzy, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Podvojeni locale %.*s za %%lang(%s)" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Neveljaven ¾eton %s: %s" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, fuzzy, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Za %%docdir je podan samo en argument" + +#: build/files.c:889 +#, fuzzy, c-format +msgid "Two files on one line: %s\n" +msgstr "Dve datoteki v eni vrstici: %s" + +#: build/files.c:902 +#, fuzzy, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Ime datoteke se mora zaèeti z \"/\": %s" + +#: build/files.c:913 +#, fuzzy, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Posebnih %%doc ni mo¾no me¹ati z ostalimi oblikami: %s" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, fuzzy, c-format +msgid "File listed twice: %s\n" +msgstr "Datoteka je navedena dvakrat: %s" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "odpiranje %s je bilo neuspe¹no: %s\n" + +#: build/files.c:1207 +#, fuzzy, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Simbolna povezava ka¾e na BuildRoot: %s -> %s" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Datoteke ni mogoèe najti: %s" + +#: build/files.c:1388 +#, fuzzy, c-format +msgid "File not found: %s\n" +msgstr "Datoteke ni mogoèe najti: %s" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, fuzzy, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: readLead je bil neuspe¹en\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "Makro %%%s se ne raz¹iri" + +#: build/files.c:1663 +#, fuzzy, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Datoteki manjka uvodni \"/\": %s" + +#: build/files.c:1688 +#, fuzzy, c-format +msgid "Glob not permitted: %s\n" +msgstr "vrstica %d: Razlièica ni dovoljena: %s" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Datoteke ni mo¾no najti z raz¹iritvijo metaznakov v imenu: %s" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, fuzzy, c-format +msgid "File not found by glob: %s\n" +msgstr "Datoteke ni mo¾no najti z raz¹iritvijo metaznakov v imenu: %s" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Datoteke %s iz %%files ni mo¾no odpreti: %s" + +#: build/files.c:1757 +#, fuzzy, c-format +msgid "line: %s\n" +msgstr "vrstica: %s" + +#: build/files.c:2033 +#, fuzzy, c-format +msgid "Bad file: %s: %s\n" +msgstr "Po¹kodovana datoteka: %s: %s" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Neobstojeè lastnik/skupina: %s\n" + +#: build/files.c:2095 +#, fuzzy, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "i¹èemo paket %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "Obdeloavnje datotek: %s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, fuzzy, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "ustvarjanje arhiva je bilo za datoteko %s neuspe¹no: %s" + +#: build/pack.c:86 +#, fuzzy, c-format +msgid "create archive failed: %s\n" +msgstr "ustvarjanje arhiva je bilo za datoteko %s neuspe¹no: %s" + +#: build/pack.c:107 +#, fuzzy, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "pisanje cpio_copy neuspe¹no: %s" + +#: build/pack.c:114 +#, fuzzy, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "branje cpio_copy neuspe¹no: %s" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "vrstica: %s" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Iskanje kanoniènega imena gostitelja je bilo neuspe¹no: %s\n" + +#: build/pack.c:228 +#, fuzzy, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Datoteke PreIn ni mo¾no odpreti: %s" + +#: build/pack.c:235 +#, fuzzy, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Datoteke PreUn ni mo¾no odpreti: %s" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Datoteke PreIn ni mo¾no odpreti: %s" + +#: build/pack.c:249 +#, fuzzy, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Datoteke PostIn ni mo¾no odpreti: %s" + +#: build/pack.c:256 +#, fuzzy, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Datoteke PostUn ni mo¾no odpreti: %s" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Datoteke PostIn ni mo¾no odpreti: %s" + +#: build/pack.c:271 +#, fuzzy, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Datoteke VerifyScript ni mo¾no odpreti: %s" + +#: build/pack.c:297 +#, fuzzy, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Skriptne datoteke Trigger ni mo¾no odpreti: %s" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Neznan tip ikone: %s" + +#: build/pack.c:395 +#, fuzzy +msgid "Unable to create immutable header region.\n" +msgstr "Ikone %s ni mo¾no prebrati: %s" + +#: build/pack.c:415 +#, fuzzy +msgid "Unable to write temp header\n" +msgstr "Ni mo¾no zapisati paketa %s: %s" + +#: build/pack.c:425 +#, fuzzy +msgid "Bad CSA data\n" +msgstr "Po¹kodovani podatki CSA" + +#: build/pack.c:491 +#, fuzzy +msgid "Unable to reload signature header.\n" +msgstr "Ikone %s ni mo¾no prebrati: %s" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Ni mo¾no odpreti %s: %s\n" + +#: build/pack.c:511 +#, fuzzy, c-format +msgid "Unable to write package: %s\n" +msgstr "Ni mo¾no zapisati paketa: %s" + +#: build/pack.c:527 +#, fuzzy, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Ciljnega podpisa %s ni mo¾no odpreti: %s" + +#: build/pack.c:538 +#, fuzzy, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Ikone %s ni mo¾no prebrati: %s" + +#: build/pack.c:552 +#, fuzzy, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Ni mo¾no zapisati paketa %s: %s" + +#: build/pack.c:564 +#, fuzzy, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Ikone %s ni mo¾no prebrati: %s" + +#: build/pack.c:571 +#, fuzzy, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Ni mo¾no zapisati paketa %s: %s" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Zapisano: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "Izvajanje(%s): %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Izvajanje %s je bilo neuspe¹no (%s): %s" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Preverjanje pristopnega gesla neuspe¹no\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Neuspe¹no ustvarjanje izhodne datoteke za paket %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "ni mo¾no ustvariti %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, fuzzy, c-format +msgid "line %d: second %s\n" +msgstr "vrstica %d: %s sekund" + +#: build/parseChangelog.c:131 +#, fuzzy, c-format +msgid "%%changelog entries must start with *\n" +msgstr "vnosi %%changelog se morajo zaèeti z *" + +#: build/parseChangelog.c:139 +#, fuzzy, c-format +msgid "incomplete %%changelog entry\n" +msgstr "nepopoln vnos %%changelog" + +#: build/parseChangelog.c:154 +#, fuzzy, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "V %%changelog je napaèen datum: %s" + +#: build/parseChangelog.c:159 +#, fuzzy, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog ni urejen v padajoèem èasovnem zaporedju" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, fuzzy, c-format +msgid "missing name in %%changelog\n" +msgstr "v %%changelog je manjkajoèe ime" + +#: build/parseChangelog.c:185 +#, fuzzy, c-format +msgid "no description in %%changelog\n" +msgstr "opis v %%changelog manjka" + +#: build/parseDescription.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "vrstica %d: Napaka pri razèlembi v razdelku %%description: %s" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, fuzzy, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "vrstica %d: Napaèna izbira %s: %s" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, fuzzy, c-format +msgid "line %d: Too many names: %s\n" +msgstr "vrstica %d: Preveè imen: %s" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, fuzzy, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "vrstica %d: Paket ne obstaja: %s" + +#: build/parseDescription.c:74 +#, fuzzy, c-format +msgid "line %d: Second description\n" +msgstr "vrstica %d: Drugi opis" + +#: build/parseFiles.c:30 +#, fuzzy, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "vrstica %d: Napaka pri razèlembi v razdelku %%Files: %s" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "vrstica %d: Napaka pri razèlembi v razdelku %%Files: %s" + +#: build/parsePreamble.c:155 +#, fuzzy, c-format +msgid "line %d: Bad number: %s\n" +msgstr "vrstica %d: Napaèno ¹tevilo: %s" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "vrstica %d: Napaèno ¹tevilo no%s: %d" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "vrstica %d: Napaèno ¹tevilo %s: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "\"%s\" doloèa veè paketov\n" + +#: build/parsePreamble.c:401 +#, fuzzy, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Arhitektura je izkljuèena: %s" + +#: build/parsePreamble.c:406 +#, fuzzy, c-format +msgid "Architecture is not included: %s\n" +msgstr "Arhitektura ni vkljuèena: %s" + +#: build/parsePreamble.c:411 +#, fuzzy, c-format +msgid "OS is excluded: %s\n" +msgstr "OS je izkljuèen: %s" + +#: build/parsePreamble.c:416 +#, fuzzy, c-format +msgid "OS is not included: %s\n" +msgstr "OS ni vkljuèen: %s" + +#: build/parsePreamble.c:442 +#, fuzzy, c-format +msgid "%s field must be present in package: %s\n" +msgstr "polje %s mora v paketu obstajati: %s" + +#: build/parsePreamble.c:465 +#, fuzzy, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Podvojeni vnosi %s v paketu: %s" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, fuzzy, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Ikone %s ni mo¾no odpreti: %s" + +#: build/parsePreamble.c:563 +#, fuzzy, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Ikone %s ni mo¾no prebrati: %s" + +#: build/parsePreamble.c:573 +#, fuzzy, c-format +msgid "Unknown icon type: %s\n" +msgstr "Neznan tip ikone: %s" + +#: build/parsePreamble.c:587 +#, fuzzy, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "vrstica %d: Napaèna izbira %s: %s" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "vrstica %d: Neveljaven znak ,-` v %s: %s" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "vrstica %d: Neveljaven znak ,-` v %s: %s" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "vrstica %d: Neveljaven znak ,-` v %s: %s" + +#: build/parsePreamble.c:641 +#, fuzzy, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "vrstica %d: Deformirana znaèka: %s" + +#: build/parsePreamble.c:649 +#, fuzzy, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "vrstica %d: Prazna znaèka: %s" + +#: build/parsePreamble.c:706 +#, fuzzy, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "vrstica %d: Predpone se ne smejo konèati z /: %s" + +#: build/parsePreamble.c:719 +#, fuzzy, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "vrstica %d: Docdir se mora zaèeti z \"/\": %s" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "vrstica %d: polje Epoch/Serial mora biti ¹tevilo: %s" + +#: build/parsePreamble.c:773 +#, fuzzy, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "vrstica %d: Okvarjeno ¹tevilo %s: %s\n" + +#: build/parsePreamble.c:800 +#, fuzzy, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "vrstica %d: Napaèna oblika BuildArchitecture: %s" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, fuzzy, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Notranja napaka: Neprava znaèka %d" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "vrstica %d: Zahtevana razlièica: %s" + +#: build/parsePreamble.c:972 +#, fuzzy, c-format +msgid "Bad package specification: %s\n" +msgstr "Nepravilno doloèilo paketa: %s" + +#: build/parsePreamble.c:978 +#, fuzzy, c-format +msgid "Package already exists: %s\n" +msgstr "Paket ¾e obstaja: %s" + +#: build/parsePreamble.c:1009 +#, fuzzy, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "vrstica %d: Neznana znaèka: %s" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "BuildRoot ne more biti \"/\": %s" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "BuildRoot ne more biti \"/\": %s" + +#: build/parsePrep.c:28 +#, fuzzy, c-format +msgid "Bad source: %s: %s\n" +msgstr "Napaèen izvor: %s: %s" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "Popravek ¹t. %d manjka" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "Izvorna koda ¹t. %d manjka" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "izvorni paket ne vsebuje datoteke .spec" + +#: build/parsePrep.c:173 +#, fuzzy, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Ni mo¾no prenesti nosource %s: %s" + +#: build/parsePrep.c:277 +#, fuzzy, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Napaka pri razèlembi %%setup: %s" + +#: build/parsePrep.c:288 +#, fuzzy, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "vrstica %d: Nepravilen argument za %%setup %c: %s" + +#: build/parsePrep.c:303 +#, fuzzy, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "vrstica %d: Nepravilna izbira %%setup %s: %s" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "datoteka %s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "neveljavna ¹tevilka paketa: %s\n" + +#: build/parsePrep.c:502 +#, fuzzy, c-format +msgid "line %d: second %%prep\n" +msgstr "vrstica %d: drugi %%prep" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"vrstica %d: Oznake odvisnosti se morajo zaèeti z alfanum. znakom, ,_` ali\n" +"'/`: %s" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "vrstica %d: Ime datoteke z razlièico ni dovoljeno: %s" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "vrstica %d: Zahtevana razlièica: %s" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "vrstica %d: Napaèno ¹tevilo: %s" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "vrstica %d: %s" + +#: build/parseScript.c:192 +#, fuzzy, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "vrstica %d: pro¾ila morajo vsebovati --: %s" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, fuzzy, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "vrstica %d: Napaka pri razèlembi %s: %s" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "vrstica %d: skriptni program se mora zaèeti z ,/`: %s" + +#: build/parseScript.c:220 +#, fuzzy, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "vrstica %d: skriptni program se mora zaèeti z ,/`: %s" + +#: build/parseScript.c:258 +#, fuzzy, c-format +msgid "line %d: Second %s\n" +msgstr "vrstica %d: Drugi %s" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "vrstica %d: Napaka pri razèlembi v razdelku %%description: %s" + +#: build/parseSpec.c:201 +#, fuzzy, c-format +msgid "line %d: %s\n" +msgstr "vrstica %d: %s" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Ni mo¾no odpreti %s: %s\n" + +#: build/parseSpec.c:257 +#, fuzzy, c-format +msgid "Unclosed %%if\n" +msgstr "Nezakljuèeni %%if" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, fuzzy, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean vrne %d" + +#: build/parseSpec.c:357 +#, fuzzy, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: Najden je bil %%else brez pripadajoèega if" + +#: build/parseSpec.c:369 +#, fuzzy, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: Najden je bil %%endif brez pripadajoèega if" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, fuzzy, c-format +msgid "malformed %%include statement\n" +msgstr "Deformiran stavek %%include" + +#: build/parseSpec.c:639 +#, fuzzy +msgid "No compatible architectures found for build\n" +msgstr "Arhitektura za izgradnjo ni prisotna" + +#: build/parseSpec.c:673 +#, fuzzy, c-format +msgid "Package has no %%description: %s\n" +msgstr "V paketu manjka %%description: %s" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Neuspe¹no branje datoteke s specifikacijami iz %s" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Neuspe¹no branje datoteke s specifikacijami iz %s" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Neuspe¹no branje datoteke s specifikacijami iz %s" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Povezava s programom tar je bila neuspe¹na: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Napaka pri razèlembi %%setup: %s" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Izvajanje(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Manjkajoèi ,(` v %s %s" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Preveè argumentov v podatkovni vrstici v %s:%d" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Obdeloavnje datotek: %s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "vrstica %d: Napaèno ¹tevilo: %s" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Vejitev %s ni mo¾na: %s" + +#: build/rpmfc.c:247 +#, fuzzy, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Ni mo¾no izvesti %s: %s" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, fuzzy, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Vejitev %s ni mo¾na: %s" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s neuspe¹en" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "pisanje podatkov v %s je bilo neuspe¹no" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "gpg je boil neuspe¹en pri zapisu podpisa" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "odpiranje %s je bilo neuspe¹no: %s\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "odstranitev %s je bila neuspe¹na: %s" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "Iskanje %s: (z uporabo %s)...\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, fuzzy, c-format +msgid "Failed to find %s:\n" +msgstr "Neuspe¹no iskanje %s:" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "poizvedba po datoteki spec. %s je bila neuspe¹na, razèlemba ni mo¾na\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(napaka 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Napaèno magièno ¹tevilo" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Po¹kodovana/neberljiva glava" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Glava je predolga" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Neznan tip datoteke" + +#: lib/cpio.c:225 +#, fuzzy +msgid "Missing hard link(s)" +msgstr "Trda povezava manjka" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "tipi se morajo ujemati" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Notranja napaka" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " neuspe¹no - " + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "paket %s-%s-%s je ¾e name¹èen" + +#: lib/depends.c:245 +#, fuzzy, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "paket %s-%s-%s je ¾e name¹èen" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(ni ¹tevilo)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +#, fuzzy +msgid "(not base64)" +msgstr "(ni ¹tevilo)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "" + +#: lib/formats.c:376 lib/formats.c:462 +#, fuzzy +msgid "(not a blob)" +msgstr "(ni ¹tevilo)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "" + +#: lib/formats.c:485 +#, fuzzy +msgid "(not an OpenPGP signature)" +msgstr "preskoèi vse podpise PGP" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normalno " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "nadome¹èeno " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "ni name¹èeno " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "omre¾ni " + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "manjka %s\n" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(neznano %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(ni ¹tevilo)" + +#: lib/fsm.c:737 +#, fuzzy, c-format +msgid "user %s does not exist - using root\n" +msgstr "uporabnik %s ne obstaja - uporabljam root" + +#: lib/fsm.c:744 +#, fuzzy, c-format +msgid "group %s does not exist - using root\n" +msgstr "skupina %s ne obstaja - uporabljam root" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, fuzzy, c-format +msgid "%s saved as %s\n" +msgstr "opozorilo: %s shranjen kot %s" + +#: lib/fsm.c:1977 +#, fuzzy, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "ni mo¾no odstraniti %s - imenik ni prazen" + +#: lib/fsm.c:1983 +#, fuzzy, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "odstranitev imenika %s je bila neuspe¹na: %s" + +#: lib/fsm.c:1997 +#, fuzzy, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "odpiranje %s je bilo neuspe¹no: %s\n" + +#: lib/fsm.c:2019 +#, fuzzy, c-format +msgid "%s created as %s\n" +msgstr "opozorilo: %s ustvarjen kot %s" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature je bil neuspe¹en\n" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Podpis ni na voljo\n" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: readLead je bil neuspe¹en\n" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: branje Fread je bilo neuspe¹no: %s\n" + +#: lib/package.c:794 +#, fuzzy, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s ni mo¾no namestiti\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +#, fuzzy +msgid "print macro expansion of EXPR" +msgstr "uporabljana razlièica rpm" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +#, fuzzy +msgid "don't verify package digest(s)" +msgstr "brez preverjanja soodvisnosti paketa" + +#: lib/poptALL.c:176 +#, fuzzy +msgid "don't verify database header(s) when retrieved" +msgstr "brez preverjanja arhitekture paketa" + +#: lib/poptALL.c:178 +#, fuzzy +msgid "don't verify package signature(s)" +msgstr "preveri podpis paketa(-ov)" + +#: lib/poptALL.c:181 +#, fuzzy +msgid "send stdout to CMD" +msgstr "standardni izhod preusmerjen na " + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +#, fuzzy +msgid "use ROOT as top level directory" +msgstr "uporabi za korenski imenik" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "prika¾i znane znaèke za poizvedovanje" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "prika¾i konèni rpmrc in nastavitev makra" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "razlièica rpm, ki jo uporabljate" + +#: lib/poptALL.c:208 +#, fuzzy +msgid "debug payload file state machine" +msgstr "okvarjeno stanje datoteke: %s" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "poti, ki niso obdelane, se morajo zaèeti z /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "premikanja se morajo zaèeti z /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "premikanja morajo vsebovati =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "premikanja morajo imeti /, ki mu sledi =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"namestitev vseh datotek, vkljuèno z nastavitvenimi, ki so sicer izpu¹èene" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"odstrani vse pakete, ki vsebujejo vzorec (sicer program izide z " +"napako, èe paket doloèa veè paketov)" + +#: lib/poptI.c:123 +#, fuzzy +msgid "relocate files in non-relocatable package" +msgstr "poti %s ni mo¾no premakniti za paket %s-%s-%s" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "izbri¹i (odstrani) paket" + +#: lib/poptI.c:131 +#, fuzzy +msgid "+" +msgstr "ni paketov\n" + +#: lib/poptI.c:134 lib/poptI.c:171 +#, fuzzy +msgid "do not install configuration files" +msgstr "izpis vseh nastavitvene datoteke" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "brez namestitve dokumentacije" + +#: lib/poptI.c:139 +#, fuzzy +msgid "skip files with leading component " +msgstr "preskok datotek v navedeni poti" + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "okraj¹ava za --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +#, fuzzy +msgid "upgrade package(s) if already installed" +msgstr "paket %s-%s-%s je ¾e name¹èen" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +#, fuzzy +msgid "+" +msgstr " -p + " + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "z izpisom znakov # ob namestitvi (uporabno z -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "brez preverjanja arhitekture paketa" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "brez preverjanja operacijskega sistema paketa" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "brez preverjanja prostora na disku pred name¹èanjem" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "namesti dokumentacijo" + +#: lib/poptI.c:164 +#, fuzzy +msgid "install package(s)" +msgstr "name¹èanje paketa" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "obnovi podatkovno zbirko, a ne spreminjaj datoteènega sistema" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "brez preverjanja soodvisnosti paketa" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "izpis vseh nastavitvene datoteke" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" +"brez spreminjanja vrstnega reda paketov z namenom zadovoljevanja soodvisnosti" + +#: lib/poptI.c:191 +#, fuzzy +msgid "do not execute package scriptlet(s)" +msgstr "brez izvajanja skriptov paketa" + +#: lib/poptI.c:195 +#, fuzzy, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "brez izvajanja katerekoli stopen izgradnje" + +#: lib/poptI.c:198 +#, fuzzy, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "brez izvajanja katerekoli stopen izgradnje" + +#: lib/poptI.c:201 +#, fuzzy, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "brez izvajanja katerekoli stopen izgradnje" + +#: lib/poptI.c:204 +#, fuzzy, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "brez izvajanja katerekoli stopen izgradnje" + +#: lib/poptI.c:207 +#, fuzzy +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "brez izvajanja katerihkoli skriptov, ki jih po¾ene ta paket" + +#: lib/poptI.c:210 +#, fuzzy, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "brez izvajanja skriptov paketa" + +#: lib/poptI.c:213 +#, fuzzy, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "brez izvajanja namestitvenih skriptov" + +#: lib/poptI.c:216 +#, fuzzy, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "brez izvajanja namestitvenih skriptov" + +#: lib/poptI.c:219 +#, fuzzy, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "brez izvajanja namestitvenih skriptov" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"nadgraditev na starej¹o razlièico paketa (--force pri nadgradnjah " +"avtomatièno vkljuèi to izbiro)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "izpis odstotkov med namestitvijo" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "èe je mogoèe, bo paket prestavljen v imenik " + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +#, fuzzy +msgid "relocate files from path to " +msgstr "prestavljanje datoteke iz stare poti v novo" + +#: lib/poptI.c:237 +#, fuzzy +msgid "=" +msgstr " --relocate =" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "ponovno namesti, èe paket ¾e obstaja" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "ne namesti, a ugotovi, èe bi delovalo" + +#: lib/poptI.c:248 +#, fuzzy +msgid "upgrade package(s)" +msgstr " --upgrade " + +#: lib/poptQV.c:67 +#, fuzzy +msgid "query/verify all packages" +msgstr "poizvedba/preverba po vseh paketih" + +#: lib/poptQV.c:69 +#, fuzzy +msgid "rpm checksig mode" +msgstr "poizvedbeni naèin" + +#: lib/poptQV.c:71 +#, fuzzy +msgid "query/verify package(s) owning file" +msgstr "poizvedba po paketu, ki vsebuje " + +#: lib/poptQV.c:73 +#, fuzzy +msgid "query/verify package(s) in group" +msgstr "poizvedba po paketu v skupini" + +#: lib/poptQV.c:75 +#, fuzzy +msgid "query/verify a package file" +msgstr "poizvedba/preverba po vseh paketih" + +#: lib/poptQV.c:78 +#, fuzzy +msgid "query/verify package(s) with package identifier" +msgstr "poizvedba po paketu, ki vsebuje datoteko" + +#: lib/poptQV.c:80 +#, fuzzy +msgid "query/verify package(s) with header identifier" +msgstr "poizvedba po paketu, ki vsebuje datoteko" + +#: lib/poptQV.c:83 +#, fuzzy +msgid "rpm query mode" +msgstr "poizvedbeni naèin" + +#: lib/poptQV.c:85 +#, fuzzy +msgid "query/verify a header instance" +msgstr "poizvedba po paketu, ki vsebuje datoteko" + +#: lib/poptQV.c:87 +#, fuzzy +msgid "query/verify package(s) from install transaction" +msgstr "poizvedba po paketu v skupini" + +#: lib/poptQV.c:89 +#, fuzzy +msgid "query the package(s) triggered by the package" +msgstr "poizvedba po paketih, ki jih spro¾i paket" + +#: lib/poptQV.c:91 +#, fuzzy +msgid "rpm verify mode" +msgstr "poizvedbeni naèin" + +#: lib/poptQV.c:93 +#, fuzzy +msgid "query/verify the package(s) which require a dependency" +msgstr "poizvedba po paketih, ki potrebujejo dano zmo¾nost " + +#: lib/poptQV.c:95 +#, fuzzy +msgid "query/verify the package(s) which provide a dependency" +msgstr "poizvedba po paketih, ki ponujajo dano zmo¾nost " + +#: lib/poptQV.c:98 +#, fuzzy +msgid "do not glob arguments" +msgstr "argumenti za poizvedbo niso podani" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "izpis vseh nastavitvene datoteke" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "izpis vseh dokumentacijske datoteke" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "iznos osnovnih podatkov o datoteki" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "izpis seznama datotek v paketu" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "izpis stanja seznama datotek" + +#: lib/poptQV.c:209 +#, fuzzy +msgid "don't verify size of files" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptQV.c:212 +#, fuzzy +msgid "don't verify symlink path of files" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptQV.c:215 +#, fuzzy +msgid "don't verify owner of files" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptQV.c:218 +#, fuzzy +msgid "don't verify group of files" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +#, fuzzy +msgid "don't verify mode of files" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "brez preverjanja datotek v paketu" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +#, fuzzy +msgid "don't verify package dependencies" +msgstr "brez preverjanja soodvisnosti paketa" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +#, fuzzy +msgid "don't execute verify script(s)" +msgstr "brez izvajanja katerekoli stopen izgradnje" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "manjkajoèa arhitektura za %s v %s:%d" + +#: lib/psm.c:254 +#, fuzzy +msgid "source package expected, binary found\n" +msgstr "prièakovan je bil izvorni paket, najden binarni" + +#: lib/psm.c:307 +#, fuzzy +msgid "source package contains no .spec file\n" +msgstr "izvorni paket ne vsebuje datoteke .spec" + +#: lib/psm.c:848 +#, fuzzy, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "raz¹iritev arhiva je bilo neuspe¹no%s%s: %s" + +#: lib/psm.c:849 +msgid " on file " +msgstr " za datoteko " + +#: lib/psm.c:967 +#, fuzzy, c-format +msgid "%s failed on file %s: %s\n" +msgstr "neuspe¹no odpiranje %s: %s\n" + +#: lib/psm.c:970 +#, fuzzy, c-format +msgid "%s failed: %s\n" +msgstr "%s neuspe¹en" + +#: lib/query.c:115 +#, fuzzy, c-format +msgid "incorrect format: %s\n" +msgstr "napaka v obliki: %s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(ne vsebuje datotek)" + +#: lib/query.c:160 +msgid "normal " +msgstr "normalno " + +#: lib/query.c:163 +msgid "replaced " +msgstr "nadome¹èeno " + +#: lib/query.c:166 +msgid "not installed " +msgstr "ni name¹èeno " + +#: lib/query.c:169 +msgid "net shared " +msgstr "omre¾ni " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(brez stanja) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(neznano %3d) " + +#: lib/query.c:198 +#, fuzzy +msgid "package has not file owner/group lists\n" +msgstr "paket ne vsebuje ne lastnika datotek niti seznamov id" + +#: lib/query.c:229 +#, fuzzy +msgid "package has neither file owner or id lists\n" +msgstr "paket ne vsebuje ne lastnika datotek niti seznamov id" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "skupina %s ne vsebuje nobenega paketa\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "noben paket ne pro¾i %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, fuzzy, c-format +msgid "malformed %s: %s\n" +msgstr "Neuspe¹no branje %s: %s." + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, fuzzy, c-format +msgid "no package matches %s: %s\n" +msgstr "noben paket ne pro¾i %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "noben paket ne potrebuje %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "noben paket ne nudi %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "datoteka %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "datoteka %s ni del nobenega paketa\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "neveljavna ¹tevilka paketa: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "zapisa %d ni mo¾no prebrati\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "paket %s ni name¹èen\n" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "neznana znaèka" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: readLead je bil neuspe¹en\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: readLead je bil neuspe¹en\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: readLead je bil neuspe¹en\n" + +#: lib/rpmchecksig.c:116 +#, fuzzy, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: readLead je bil neuspe¹en\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NI DOBRO" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "V REDU" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (MANJKAJOÈI KLJUÈI:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (NEPREVERJENI KLJUÈI:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: odpiranje je bilo neuspe¹no: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "neuspe¹na odstranitev imenika %s: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "ni mo¾no odstraniti %s - imenik ni prazen" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "neuspe¹na odstranitev imenika %s: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "neuspe¹na odstranitev imenika %s: %s\n" + +#: lib/rpmds.c:403 +#, fuzzy +msgid "NO " +msgstr "NI DOBRO" + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +#, fuzzy +msgid "internal support for lua scripts." +msgstr "- ni podprt za nize" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "paket %s-%s-%s je ¾e name¹èen" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "odpiranje %s je bilo neuspe¹no: %s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "noben paket ne pro¾i %s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "" + +#: lib/rpminstall.c:176 +#, fuzzy +msgid "Preparing packages for installation..." +msgstr "paketi za namestitev niso navedeni" + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +#, fuzzy +msgid "Failed dependencies:\n" +msgstr "neuspe¹ne soodvisnosti:\n" + +#: lib/rpminstall.c:305 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "noben paket ne pro¾i %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s ni mo¾no namestiti\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Prena¹anje %s\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "preskoèeno - %s - prenos neuspe¹en - %s\n" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "paketa %s ni mo¾no premakniti\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "napaka pri branju iz datoteke %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "datoteka %s zahteva novej¹o razlièico RPM\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" doloèa veè paketov\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "ni mo¾no odpreti %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Name¹èanje %s\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "navedeni argument ni paket RPM\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s: Podpis ni na voljo\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, fuzzy, c-format +msgid "read failed: %s (%d)\n" +msgstr "branje je bilo neuspe¹no: %s (%d)" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "navedeni argument ni paket RPM\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "ni mo¾no zakleniti z %s datotek %s/%s\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "ni mo¾no zakleniti z %s datotek %s/%s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "neuspe¹no odpiranje %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Preimenovanje %s v %s je bilo neuspe¹no: %m" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Preimenovanje %s v %s je bilo neuspe¹no: %m" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "" + +#: lib/rpmprob.c:115 +#, fuzzy, c-format +msgid "package %s is intended for a %s architecture" +msgstr "paket %s-%s-%s je za drug tip arhitekture" + +#: lib/rpmprob.c:120 +#, fuzzy, c-format +msgid "package %s is intended for a %s operating system" +msgstr "paket %s-%s-%s je za drug operacijski sistem" + +#: lib/rpmprob.c:124 +#, fuzzy, c-format +msgid "package %s is already installed" +msgstr "paket %s-%s-%s je ¾e name¹èen" + +#: lib/rpmprob.c:128 +#, fuzzy, c-format +msgid "path %s in package %s is not relocatable" +msgstr "paketa %s ni mo¾no prestaviti\n" + +#: lib/rpmprob.c:133 +#, fuzzy, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "datoteka %s je v sporu med poskusom namestitve %s in %s" + +#: lib/rpmprob.c:138 +#, fuzzy, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "" +"datoteka %s name¹èena z %s-%s-%s je v sporu z datoteko iz paketa %s-%s-%s" + +#: lib/rpmprob.c:143 +#, fuzzy, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "paket %s-%s-%s (ki je novej¹i kot %s-%s-%s) je ¾e name¹èen" + +#: lib/rpmprob.c:148 +#, fuzzy, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "" +"namestitev paketa %s-%s-%s zahteva %%cb na datoteènem sistemu %s" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" + +#: lib/rpmprob.c:162 +#, fuzzy, c-format +msgid "%s is needed by %s%s" +msgstr " potrebuje %s-%s-%s\n" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +#, fuzzy +msgid "(installed) " +msgstr "ni name¹èeno " + +#: lib/rpmprob.c:167 +#, fuzzy, c-format +msgid "%s conflicts with %s%s" +msgstr " je v sporu z %s-%s-%s\n" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr " potrebuje %s-%s-%s\n" + +#: lib/rpmprob.c:178 +#, fuzzy, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "neznana napaka %d ob rokovanju s paketom %s-%s-%s" + +#: lib/rpmrc.c:186 +#, fuzzy, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "manjka drugi ,:` v %s:%d" + +#: lib/rpmrc.c:189 +#, fuzzy, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "manjkajoèe ime arhitekture v %s:%d" + +#: lib/rpmrc.c:334 +#, fuzzy, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Nepopolna podatkovna vrstica v %s:%d" + +#: lib/rpmrc.c:339 +#, fuzzy, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Preveè argumentov v podatkovni vrstici v %s:%d" + +#: lib/rpmrc.c:346 +#, fuzzy, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Okvarjena ¹tevilka arh./op.sist.: %s (%s:%d)" + +#: lib/rpmrc.c:377 +#, fuzzy, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Nepopolna privzeta vrstica v %s:%d" + +#: lib/rpmrc.c:382 +#, fuzzy, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Preveè argumentov v privzeti vrstici v %s:%d" + +#: lib/rpmrc.c:486 +#, fuzzy, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "manjkajoèi ,:` (najden 0x%02x) v %s:%d" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, fuzzy, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "manjkajoèi argument za %s v %s:%d" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "ni mo¾no odpreti %s v %s:%d: %s" + +#: lib/rpmrc.c:535 +#, fuzzy, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "manjkajoèa arhitektura za %s v %s:%d" + +#: lib/rpmrc.c:602 +#, fuzzy, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "nepravilna izbira ,%s` v %s:%d" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Neznan sistem: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "%s ni mo¾no odpreti za branje: %s." + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "neuspe¹na odstranitev imenika %s: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Vejitev %s ni mo¾na: %s" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Vejitev %s ni mo¾na: %s" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "preskoèeno - %s - prenos neuspe¹en - %s\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "skript se ni uspe¹no izvedel" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "skript se ni uspe¹no izvedel" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "neznana znaèka" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "ni name¹èeno " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, fuzzy, c-format +msgid "cannot open Packages database in %s\n" +msgstr "zbirko podatkov paketov ni mo¾no odpreti v %s\n" + +#: lib/rpmts.c:193 +#, fuzzy, c-format +msgid "extra '(' in package label: %s\n" +msgstr "neveljavna ¹tevilka paketa: %s\n" + +#: lib/rpmts.c:211 +#, fuzzy, c-format +msgid "missing '(' in package label: %s\n" +msgstr "Manjkajoèi ,(` v %s %s" + +#: lib/rpmts.c:219 +#, fuzzy, c-format +msgid "missing ')' in package label: %s\n" +msgstr "neveljavna ¹tevilka paketa: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: readLead je bil neuspe¹en\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "brez preverjanja datotek v paketu" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, fuzzy, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Dol¾. polnila : %d\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s neuspe¹en" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "manjka %s\n" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Nezadovoljene soodvisnosti za %s-%s-%s: " + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "manjkajoèi { za %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "manjkajoèi } za %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "oblika znaèke manjka" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "ime znaèke manjka" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "neznana znaèka" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "na koncu polja je prièakovan ]" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "neprièakovan ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "neprièakovan }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "v izrazu je prièakovan ?" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "v izrazu je za { prièakovan ?" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "v izrazu je prièakovan }" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "za podizrazom ? je prièakovano :" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "v izrazu je za : prièakovan {" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "na koncu izraza je prièakovan |" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, fuzzy, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "ni mo¾no odpreti kazala %s z uporabo db%d - %s (%d)" + +#: lib/rpmdb.c:687 +#, fuzzy +msgid "no dbpath has been set\n" +msgstr "dbpath ni nastavljena" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, fuzzy, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "napaka(%d) pri branju zapisov \"%s\" iz kazala %s" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, fuzzy, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "napaka(%d) pri pisanju zapisa %s v %s" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: branje Fread je bilo neuspe¹no: %s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: odpiranje je bilo neuspe¹no: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "napaka(%d) pri branju zapisov \"%s\" iz kazala %s" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "napaka(%d) pri branju zapisov \"%s\" iz kazala %s" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "napaka(%d) pri branju zapisov \"%s\" iz kazala %s" + +#: lib/rpmdb.c:2367 +#, fuzzy, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: ni mo¾no prebrati glave pri 0x%x" + +#: lib/rpmdb.c:2434 +#, fuzzy, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "napaka(%d) pri branju zapisov \"%s\" iz kazala %s" + +#: lib/rpmdb.c:2453 +#, fuzzy, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "napaka(%d) pri pisanju zapisa %s v %s" + +#: lib/rpmdb.c:2463 +#, fuzzy, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "napaka(%d) pri brisanju zapisa %s iz %s" + +#: lib/rpmdb.c:2539 +#, fuzzy, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "napaka(%d) pri iskanju paketa %s\n" + +#: lib/rpmdb.c:2648 +#, fuzzy, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "napaka(%d) pri pisanju zapisa %s v %s" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "dbpath ni nastavljena" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "neuspe¹na odstranitev imenika %s: %s\n" + +#: lib/rpmdb.c:2897 +#, fuzzy, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "zapis ¹t. %d v zbirki je po¹kodovan -- preskoèeno." + +#: lib/rpmdb.c:2911 +#, fuzzy, c-format +msgid "cannot add record originally at %u\n" +msgstr "zapisa ni mo¾no dodati na %d" + +#: lib/rpmdb.c:2926 +#, fuzzy +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"ponovna izgradnja podatkovne zbirke je bila neuspe¹na; stara ostaja na\n" +"istem mestu\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "zamenjava stare podatkovne zbirke z novo je bila neuspe¹na!\n" + +#: lib/rpmdb.c:2936 +#, fuzzy, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "poskus povrnitve z nadomestitvijo datotek v %s z datotekami v %s" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "neuspe¹na odstranitev imenika %s: %s\n" + +#: lib/backend/db3.c:28 +#, fuzzy, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d napaka(%d)" + +#: lib/backend/db3.c:31 +#, fuzzy, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d napaka(%d)" + +#: lib/backend/db3.c:508 +#, fuzzy, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "ni mo¾no zakleniti z %s datotek %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "skupno" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "izkljuèujoèe" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "zaprto db kazalo %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, fuzzy, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "dbiSetConfig: neprepoznana izbira db: \"%s\" prezrto\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s ima neveljavno ¹tevilèno vrednost, prezrto\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s ima preveliko ali premajhno dolgo (long) vrednost, prezrto\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "" +"%s ima preveliko ali premajhno vrednost malega (small) celega\n" +"¹tevila, prezrto\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Neuspe¹no branje datoteke s specifikacijami iz %s" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Vejitev %s ni mo¾na: %s" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Neuspe¹no branje datoteke s specifikacijami iz %s" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "neuspe¹no ustvarjanje %s: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Neuspe¹en poskus prikljuèitve na stre¾nik" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "neuspe¹no odpiranje %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "neuspe¹na odstranitev imenika %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Preimenovanje %s v %s je bilo neuspe¹no: %m" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "Neuspe¹no branje %s: %s." + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "neuspe¹no odpiranje %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "neuspe¹no ustvarjanje %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "Makro %%%s vsebuje nezakljuèeno telo" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "Makro %%%s se ne raz¹iri" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Neuspe¹no branje datoteke s specifikacijami iz %s" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktivni %d prazni %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(prazni)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(prazni)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, fuzzy, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Makro %%%s vsebuje nezakljuèeno telo" + +#: rpmio/macro.c:593 +#, fuzzy, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Makro %%%s vsebuje nedovoljeno ime (%%define)" + +#: rpmio/macro.c:599 +#, fuzzy, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Makro %%%s vsebuje nezakljuèene izbire" + +#: rpmio/macro.c:604 +#, fuzzy, c-format +msgid "Macro %%%s has empty body\n" +msgstr "Makro %%%s vsebuje prazno telo" + +#: rpmio/macro.c:610 +#, fuzzy, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Makro %%%s se ne raz¹iri" + +#: rpmio/macro.c:648 +#, fuzzy, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Makro %%%s vsebuje nedovoljeno ime (%%undefine)" + +#: rpmio/macro.c:737 +#, fuzzy, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Makro %%%s (%s) ni bil uporabljen pod ravnijo %d" + +#: rpmio/macro.c:819 +#, fuzzy, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Neznana izbira %c v %s(%s)" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, fuzzy, c-format +msgid "Unterminated %c: %s\n" +msgstr "Nezakljuèeni %c: %s" + +#: rpmio/macro.c:1169 +#, fuzzy, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Oznaki %% sledi nerazèlenljiv makro" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "napaka pri ustvarjanju zaèasne datoteke %s" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, fuzzy, c-format +msgid "File %s: %s\n" +msgstr "Datoteka %s: %s" + +#: rpmio/rpmfileutil.c:351 +#, fuzzy, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Datoteka %s je kraj¹a od %d bajtov" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "neuspe¹na odstranitev imenika %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "- ni podprt za nize" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: pisanje Fwrite je bilo neuspe¹no: %s\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "neveljavna ¹tevilka paketa: %s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: branje Fread je bilo neuspe¹no: %s\n" + +#: rpmio/rpmlog.c:37 +#, fuzzy +msgid "(no error)" +msgstr "(napaka 0x%x)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "usodna napaka: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "napaka: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "opozorilo: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "alokacija pomnilnika (%u bajtov) vrnjeno NIÈ.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "Podpis manjka\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(napaka 0x%x)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Neuspe¹no branje datoteke s specifikacijami iz %s" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: pisanje Fwrite je bilo neuspe¹no: %s\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: branje Fread je bilo neuspe¹no: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "izvajanje je bilo neuspe¹no\n" + +#: sign/rpmgensig.c:243 +#, fuzzy +msgid "gpg failed to write signature\n" +msgstr "gpg je boil neuspe¹en pri zapisu podpisa" + +#: sign/rpmgensig.c:260 +#, fuzzy +msgid "unable to read the signature\n" +msgstr "branje podpisa je bilo neuspe¹no" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "makeTempFile je bil neuspe¹en\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead je bil neuspe¹en: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature je bilo neuspe¹no: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "odpiranje %s je bilo neuspe¹no: %s\n" + +#: tools/rpmgraph.c:143 +#, fuzzy, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: branje Fread je bilo neuspe¹no: %s\n" + +#: tools/rpmgraph.c:220 +#, fuzzy +msgid "don't verify header+payload signature" +msgstr "preveri podpis paketa(-ov)" + +#, fuzzy +#~ msgid "add suggested packages to transaction" +#~ msgstr "poizvedba po paketu v skupini" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Ni mo¾no izvesti %s: %s" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps sme biti podan le ob izgradnji, vnovièni izgradnji, prevajanju, " +#~ "namestitvi, odstranitvi ali preverjanju paketa" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) sme biti podan le ob namestitvi, odstranitvi poizvedbi ali " +#~ "vnovièni izgradnji paketa" + +#, fuzzy +#~ msgid "detect file conflicts between packages" +#~ msgstr "poti %s ni mo¾no premakniti za paket %s-%s-%s" + +#, fuzzy +#~ msgid "temporary database %s already exists\n" +#~ msgstr "zaèasna podatkovna zbirka %s ¾e obstaja" + +#, fuzzy +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "poizvedba po paketu, ki vsebuje datoteko" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Neveljaven %%_signature v makro-datoteki.\n" + +#, fuzzy +#~ msgid "Target buffer overflow\n" +#~ msgstr "Ciljni medpomnilnik je bil prekoraèen" + +#~ msgid "no files to sign\n" +#~ msgstr "ni datotek, ki bi jih lahko podpisal\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "dostop do datoteke %s ni mo¾en\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign sme biti podan le ob izgradnji paketa" + +#, fuzzy +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "brez preverjanja datotek v paketu" + +#, fuzzy +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "brez preverjanja datotek v paketu" + +#, fuzzy +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "podpi¹i paket(e) (trenutni podpis zavrzi)" + +#, fuzzy +#~ msgid "generate signature" +#~ msgstr "izdelava podpisa PGP/GPG" + +#, fuzzy +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Neveljaven %%_signature v makro-datoteki.\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK neuspe¹en: %s\n" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Notranja napaka pri obdelavi argumentov (%d) :-\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: readLead je bil neuspe¹en\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: odpiranje %s: %s\n" + +#, fuzzy +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: branje Fread je bilo neuspe¹no: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s ni paket tipa RPM\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: branje glave %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Izdelujemo podpis: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "izdelava podpisa PGP/GPG" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "paketi za vnovièno izgradnjo niso navedeni" + +#~ msgid "no spec files given for build" +#~ msgstr "datoteka spec za izgradnjo manjka" + +#~ msgid "no tar files given for build" +#~ msgstr "arhiv tar za izgradnjo manjka" + +#, fuzzy +#~ msgid "%s failed\n" +#~ msgstr "%s neuspe¹en" + +#, fuzzy +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Globina rekurzije (%d) veèja od maksimalne (%d)" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: neprepoznano ime znaèke: \"%s\" prezrto\n" + +#, fuzzy +#~ msgid "(rpmlib provides)" +#~ msgstr "%s: %-45s DA (rpmlib ponudbe)\n" + +#, fuzzy +#~ msgid "(db files)" +#~ msgstr "po¹kodovana zbirka podatkov %s" + +#, fuzzy +#~ msgid "(db provides)" +#~ msgstr "%s: %-45s DA (db ponudbe)\n" + +#, fuzzy +#~ msgid "(added files)" +#~ msgstr "po¹kodovana zbirka podatkov %s" + +#, fuzzy +#~ msgid "(added provide)" +#~ msgstr "%s: %-45s DA (dodane ponudbe)\n" + +#~ msgid "url port must be a number\n" +#~ msgstr "vrata URL morajo biti ¹tevilka\n" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "ustvarjanje imenika: %s\n" + +#, fuzzy +#~ msgid "debug package state machine" +#~ msgstr "okvarjeno stanje datoteke: %s" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "poizvedba po paketu v skupini" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "poizvedba po paketu v skupini" + +#, fuzzy +#~ msgid "do not read headers" +#~ msgstr "%s: ni mo¾no prebrati glave pri 0x%x" + +#, fuzzy +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Datoteka se ne ujema s predpono (%s): %s" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "neuspe¹na odstranitev imenika %s: %s\n" + +#, fuzzy +#~ msgid "use threads for package state machine" +#~ msgstr "okvarjeno stanje datoteke: %s" + +#, fuzzy +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() ni uspe¹no vrnila velikosti fugger: %s" + +#, fuzzy +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() ni uspe¹no vrnila velikosti fugger: %s" + +#, fuzzy +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "status %s ni na voljo: %s" + +#, fuzzy +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "datoteka %s se nahaja na neznani napravi" + +#, fuzzy +#~ msgid "use threads for file state machine" +#~ msgstr "okvarjeno stanje datoteke: %s" + +#, fuzzy +#~ msgid "cannot open %s index\n" +#~ msgstr "ni mo¾no odpreti kazala %s:" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Ni mo¾no odpreti %s: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Ni mo¾no odpreti %s: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Zaèasne datoteke ni mo¾no odpreti" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "Neznan sistem: %s\n" + +#, fuzzy +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Makro %%%.*s ni najden - preskoèeno" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: readLead je bil neuspe¹en\n" + +#, fuzzy +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "vrstica %d: Drugi seznam %%Files" + +#, fuzzy +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "odvisnost \"B\" potrebuje \"epoch\" (privzeto enak kot \"A\")\n" +#~ "\tA %s\tB %s\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Tip podatkov %d ni podprt\n" + +#, fuzzy +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "odstranjujemo seznam skupin\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "Glava je predolga" + +#~ msgid "pgp not found: " +#~ msgstr "pgp manjka: " + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "ni mo¾no odpreti datoteke %s: %s\n" + +#, fuzzy +#~ msgid "pgp failed\n" +#~ msgstr "pgp je bil neuspe¹en" + +#, fuzzy +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp je bil neuspe¹en pri zapisu podpisa" + +#, fuzzy +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "V makrodatoteki morate nastaviti \"%%_pgp_name\"" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "neznana znaèka" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "Podpis manjka\n" + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "Podpis manjka\n" + +#, fuzzy +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot ne more biti \"/\": %s" + +#, fuzzy +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Datoteka spec ne more uporabiti BuildRoot" + +#, fuzzy +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "upo¹tevanje internacionalizirana sporoèila v katalogu spec" + +#, fuzzy +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "ni mo¾no ustvariti %s: %s\n" + +#, fuzzy +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "pisanje na %s ni mo¾no" + +#, fuzzy +#~ msgid "can't query %s: %s\n" +#~ msgstr "ni mo¾no poizvedeti o %s: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "izvajanje je bilo neuspe¹no\n" + +#, fuzzy +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "zamenjava razdeljkov I18N z naslednjim katalogom" + +#, fuzzy +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "datoteke %s/packages.rpm ni mogo¾no odpreti\n" + +#~ msgid "Success" +#~ msgstr "Uspeh" + +#~ msgid "Bad server response" +#~ msgstr "Nepravilen odziv stre¾nika" + +#, fuzzy +#~ msgid "Server I/O error" +#~ msgstr "V/I napaka na stre¾niku" + +#~ msgid "Server timeout" +#~ msgstr "Èas odziva stre¾nika je potekel" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Naslov stre¾nika ni ugotovljiv" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Ime stre¾nika ni bilo ugotovljivo" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Neuspe¹na vzpostavitev podatkovne povezave s stre¾nikom" + +#, fuzzy +#~ msgid "I/O error to local file" +#~ msgstr "V/I napaka na lokalni datoteki" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Napaka pri nastavitvi oddaljenega stre¾nika v pasivni naèin" + +#~ msgid "File not found on server" +#~ msgstr "Datoteke ni mo¾no najti na stre¾niku" + +#~ msgid "Abort in progress" +#~ msgstr "Prekinitev v teku" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Neznana ali neprièakovana napaka" + +#, fuzzy +#~ msgid "File tree walk options:" +#~ msgstr "Dol¾. podpisa : %d\n" + +#, fuzzy +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: odpiranje je bilo neuspe¹no: %s\n" + +#, fuzzy +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: readLead je bil neuspe¹en\n" + +#, fuzzy +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "raz¹iritev %s je bila neuspe¹na v %s:%d \"%s\"" + +#, fuzzy +#~ msgid "Cannot expand %s\n" +#~ msgstr "Ni mo¾no raz¹iriti %s" + +#, fuzzy +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "Ni mo¾no prebrati %s, HOME je prevelik." + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "odstranitev %s je bila neuspe¹na: %s" + +#, fuzzy +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "Dosegli smo omejitev za %%docdir" + +#, fuzzy +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "vrstica %d: Manjka argument za %%patch -b: %s" + +#, fuzzy +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "vrstica %d: Manjka argument za %%patch -z: %s" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "vrstica %d: Nepravilen argument za %%patch -p: %s" + +#, fuzzy +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "vrstica %d: Manjka argument za %%patch -p: %s" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "vrstica %d: Nepravilen argument za %%patch -p: %s" + +#, fuzzy +#~ msgid "Too many patches!\n" +#~ msgstr "Preveè popravkov!" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "vrstica %d: Nepravilen argument za %%patch: %s" + +#, fuzzy +#~ msgid "debug option/argument processing" +#~ msgstr "Notranja napaka pri obdelavi argumentov (%d) :-\n" + +#, fuzzy +#~ msgid "skip %%readme files" +#~ msgstr "%s: readLead je bil neuspe¹en\n" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "branje je bilo neuspe¹no: %s (%d)" + +#, fuzzy +#~ msgid "Unable to reload signature header\n" +#~ msgstr "Ikone %s ni mo¾no prebrati: %s" + +#, fuzzy +#~ msgid "Repackaging erased files..." +#~ msgstr "paket ne vsebuje datotek\n" + +#, fuzzy +#~ msgid "Upgrading packages..." +#~ msgstr " --upgrade " + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "Prena¹anje %s\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "napaka pri branju glave paketa\n" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "Datoteka: %4d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "%10d %s\n" +#~ msgstr "vrstica %d: %s" + +#, fuzzy +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "dodajanje vnosov 0 %s.\n" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "poganjanje ponamestitvenih skript (èe obstajajo)\n" + +#, fuzzy +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "paket: %s-%s-%s datoteke test = %d\n" + +#, fuzzy +#~ msgid "package record number: %u\n" +#~ msgstr "¹tevilka zapisa paketa: %d\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#, fuzzy +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "Za paket %s-%s-%s: zahteva %s ni zadovoljena\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s preskoèen zaradi manjkajoèe zastavice OK\n" + +#, fuzzy +#~ msgid "%5d exclude %s\n" +#~ msgstr "OS je izkljuèen: %s" + +#, fuzzy +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "premikanje %s v %s\n" + +#, fuzzy +#~ msgid "excluding %s %s\n" +#~ msgstr "izkljuèevanje datoteke %s%s\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "premikanje %s v %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "premiokanje imenika %s v %s\n" + +#, fuzzy +#~ msgid "Adding goal: %s\n" +#~ msgstr "Iskanje %s: (z uporabo %s)...\n" + +#~ msgid " ... as %s\n" +#~ msgstr " ... kot %s\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "ni paketov\n" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "binarni paket v starem zapisu\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "najdeno %d izvornih in %d binarnih paketov\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "name¹èanje binarnih paketov\n" + +#, fuzzy +#~ msgid "Adding: %s\n" +#~ msgstr "vrstica: %s" + +#, fuzzy +#~ msgid "Suggesting: %s\n" +#~ msgstr "izvori v: %s\n" + +#, fuzzy +#~ msgid "mounted filesystems:\n" +#~ msgstr "zbiranje seznama priklopljenih datoteènih sistemov.\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "Datoteka: %4d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "premikanje %s v %s\n" + +#, fuzzy +#~ msgid " Actual size: %12d\n" +#~ msgstr "Dol¾. podpisa : %d\n" + +#, fuzzy +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Dol¾. podpisa : %d\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "Dol¾. podpisa PGP: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "Prebrano %d bajtov podpisa PGP\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "Dol¾. podpisa GnuPG: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "Prebrano %d bajtov podpisa GnuPG\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "izkljuèevanje imenika %s\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "paket ne vsebuje skupine\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "noben paket ne pro¾i %s\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "ni paketov\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "ni paketov\n" + +#, fuzzy +#~ msgid "running pre-transaction scripts\n" +#~ msgstr "poganjanje prednamestitvenih skript (èe obstajajo)\n" + +#, fuzzy +#~ msgid "running post-transaction scripts\n" +#~ msgstr "poganjanje poodnamestitvenih skriptov (èe obstajajo)\n" + +#, fuzzy +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "zaprto db okolje %s/%s\n" + +#, fuzzy +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "odstranjeno db okolje %s/%s\n" + +#, fuzzy +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "odpiranje db okolja %s/%s %s\n" + +#, fuzzy +#~ msgid "closed db index %s/%s\n" +#~ msgstr "zaprto db kazalo %s/%s\n" + +#, fuzzy +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "odpiranje db kazala %s/%s %s naèin=0x%x\n" + +#, fuzzy +#~ msgid "locked db index %s/%s\n" +#~ msgstr "zaklenjeno db kazalo %s/%s\n" + +#, fuzzy +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "odstranjevanje \"%s\" iz kazala %s.\n" + +#, fuzzy +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "odstranjevanje %d vnosov iz kazala %s\n" + +#, fuzzy +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "dodajanje \"%s\" v kazalo %s.\n" + +#, fuzzy +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "dodajanje %d vnosov v kazalo %s.\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "ponovna izgradnja podatkovne zbirke %s v %s\n" + +#, fuzzy +#~ msgid "creating directory %s\n" +#~ msgstr "ustvarjanje imenika: %s\n" + +#, fuzzy +#~ msgid "creating directory %s: %s\n" +#~ msgstr "ustvarjanje imenika: %s\n" + +#, fuzzy +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "odpiranje stare podatkovne zbirke\n" + +#, fuzzy +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "odpiramo nove podatkovne zbirke z dbapi %d\n" + +#, fuzzy +#~ msgid "removing directory %s\n" +#~ msgstr "odstranjevanje imenika: %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "zaprta datoteka db %s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "odpiranje db kazala %s/%s %s naèin=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: branje %s: %s\n" + +#, fuzzy +#~ msgid "Unable to write final header\n" +#~ msgstr "Ni mo¾no zapisati paketa %s: %s" + +#, fuzzy +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "" +#~ "ta razlièica RPM podpira samo pakete z glavnim ¹tevilom razlièice <= 3" + +#, fuzzy +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "" +#~ "ta razlièica RPM podpira samo pakete z glavnim ¹tevilom razlièice <=4" + +#, fuzzy +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: Podpis RPM v1.0 ni mo¾en\n" + +#, fuzzy +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: Sprememba podpisa RPM v2.0 ni mo¾na\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: Podpis ni na voljo (RPM v1.0)\n" diff --git a/po/sr.gmo b/po/sr.gmo new file mode 100644 index 0000000..7c69b02 Binary files /dev/null and b/po/sr.gmo differ diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..042d0b1 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,3850 @@ +# Serbian translations for rpm +# Copyright (C) 2006 Red Hat, Inc. and others +# This file is distributed under the same license as the rpm package. +# MiloÅ¡ KomarÄević , 2006. +# Marko Mijatovic , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: rpm\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2009-04-06 22:38+0100\n" +"Last-Translator: MiloÅ¡ KomarÄević \n" +"Language-Team: Serbian (sr) \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM верзија %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "ÐуторÑка права 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Овај програм Ñе Ñме Ñлободно диÑтрибуирати под ГÐУ ОЈЛ одредбама.\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "неуÑпело прављење цеви за --pipe: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "неуÑпело извршавање\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "аргумент није RPM пакет\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "грешка при читању заглавља из пакета\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "не могу да поново отворим товар: %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "иÑпитај/провери пакет(е) у групи" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Опције упита (Ñа -q или --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Опције провере (Ñа -V или --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Опције инÑталације/надградње/бриÑања:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Заједничке опције за Ñве rpm режиме и извршне програме:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "једна врÑта упита/провере Ñме бити урађена одједном" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "неочекиване заÑтавице упита" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "неочекиван облик упита" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "неочекивани извор упита" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "Ñамо један главни режим Ñме бити наведен" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "Ñамо инÑталација, надградња, rmsource и rmspec могу бити приморани" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "датотеке Ñмеју бити премештане Ñамо током инÑталације пакета" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "не може Ñе кориÑтити --prefix уз --relocate или --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate и --excludepath могу бити употребљене Ñамо при инÑталацији нових " +"пакета" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix може бити употребљена Ñамо при инÑталацији нових пакета" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "аргументи за --prefix морају почети знаком /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) може бити наведена Ñамо током инÑталације пакета" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent може бити наведена Ñамо током инÑталације пакета" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs може бити наведена Ñамо током инÑталације пакета" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludecocs може бити наведена Ñамо током инÑталације пакета" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includecocs може бити наведена Ñамо током инÑталације пакета" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "може Ñе навеÑти Ñамо једна од --excludedocs или --includedocs" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch може бити наведена Ñамо током инÑталације пакета" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos може бити наведена Ñамо током инÑталације пакета" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize може бити наведена Ñамо током инÑталације пакета" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches може бити наведена Ñамо током бриÑања пакета" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles може бити наведена Ñамо током инÑталације пакета" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb може бити наведена Ñамо током инÑталације и бриÑања пакета" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"опције иÑкључивања Ñкрипте могу бити наведене Ñамо током инÑталације и " +"бриÑања пакета" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"опције иÑкључивања окидача могу бити наведене Ñамо током инÑталације и " +"бриÑања пакета" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test може бити наведена Ñамо током инÑталације, бриÑања, и прављења пакета" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb може бити наведена Ñамо током инÑталације и бриÑања пакета" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "аргументи за --root (-r) морају почети знаком /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "нема задатих пакета за бриÑање" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "нема задатих пакета за инÑталацију" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "нема задатих аргумената за упит" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "нема задатих аргумената за проверу" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot је већ наведен, занемарујем %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"направи кроз %prep (раÑпаковани извори и примењене закрпе) из " + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "направи кроз %build (%prep, онда компилирај) из " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "направи кроз %install (%prep, %build, затим инÑталирај) из " + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "провери %files одељак из " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "направи изворне и бинарне пакете из " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "направи бинарне пакете Ñамо из " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "направи изворне пакете Ñамо из " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"направи кроз %prep (раÑпаковани извори и примењене закрпе) из " + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "направи кроз %build (%prep, онда компилирај) из " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "направи кроз %install (%prep, %build, онда инÑталирај) из " + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "провери %files одељак из " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "направи изворне и бинарне пакете из " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "направи бинарне пакете Ñамо из " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "направи изворне пакете Ñамо из " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "направи бинарни пакет из " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"направи кроз %install (%prep, %build, затим инÑталирај) из " + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "премоÑти корен прављења" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "уклони Ñтабло прављења по завршетку" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "занемари ExcludeArch: упутÑтва из датотеке Ñпецификације" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "отклони грешке у машини Ñтања датотека" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "немој извршити ниједну фазу прављења" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "немој проверавати завиÑноÑти прављења" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" +"генериши заглавље(а) пакета компатибилна Ñа (заÑтарелим) rpm[23] паковањем" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "не прихватај i18N msgstr ниÑке из датотеке Ñпецификације" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "уклони изворе по завршетку" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "уклони датотеку Ñпецификације по завршетку" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "преÑкочи право до одређене фазе (Ñамо за c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "премоÑти циљну платформу" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "Опције прављења уз [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "ÐеуÑпело прављење завиÑноÑти:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Ðе могу да отворим датотеку Ñпецификације %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "ÐеуÑпело отварање tar цеви: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "ÐеуÑпела промена имена %s у %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "stat није уÑпео %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Датотека %s није обична датотека.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Датотека %s не личи на датотеку Ñпецификације.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Правим циљне платформе: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Правим за циљ %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "иницијализуј базу података" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"поново направи обрнуте ÑпиÑкове базе података из заглавља инÑталираних пакета" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "провера датотека базе података" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Опције базе података:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "провери потпиÑе пакета" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "увези ојачани јавни кључ" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Опције потпиÑа:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "нема задатих аргумената" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "инÑталирај пакет(е)" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "потпиши пакет(е) (иÑтоветно Ñа --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "обриши потпиÑе пакета" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Опције потпиÑа:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Ðе могу да извршим %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Морате поÑтавити „%%_gpg_name“ у макро датотеци\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "УнеÑите лозинку: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Лозинка је добра.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "ÐеуÑпела провера лозинке\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "иÑпитај датотеку Ñпецификације" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "иÑпитај датотеку Ñпецификације" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "кориÑти Ñледећи облик упита" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Опције потпиÑа:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "нема задатих аргумената за упит" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Ðе могу да отворим temp датотеку.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Извршавам(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Извршавање %s није уÑпело (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Лош ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¸Ð·Ð»Ð°Ð·Ð° из %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"Грешке RPM прављења:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "ÑинтакÑна грешка при рашчлањивању ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "ÑинтакÑна грешка при рашчлањивању &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "ÑинтакÑна грешка при рашчлањивању ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "грешка рашчлањивања у изразу\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "неупарена (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- Ñамо код бројева\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! Ñамо код бројева\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "врÑте Ñе морају поклапати\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / није подржано за Ñтрингове\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- није подржано за Ñтрингове\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& и || ниÑу подржани за Ñтрингове\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "ÑинтакÑна грешка у изразу\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "ÐедоÑтаје „(“ у %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "ÐедоÑтаје „)“ у %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "ÐеиÑправан %s знак: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "ÐедоÑтаје %s у %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Размак који није празан Ñледи %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Лоша ÑинтакÑа: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Лоша Ñпецификација режима: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Лоша Ñпецификација режима директоријума: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Ðеобична дужина локалитета: „%.*s“ у %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Удвојен локалитет %.*s у %%lang(%s)\n" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "ÐеиÑправна могућноÑÑ‚: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "Ðије уграђена подршка за могућноÑÑ‚ датотеке\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Само један аргумент за %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Две датотеке у једном реду: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Датотека мора почети Ñа „/“: %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Ðе може Ñе мешати Ñпецијални %%doc Ñа другим облицима: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "Ðепознат алгоритам %u за Ñажимање датотека, враћам Ñе на MD5\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Датотека наведена двапут: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s unlink %s није уÑпело: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Symlink тачке за BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Датотека није пронађена: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Датотека није пронађена: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "Датотека %s је превелика за кориÑтан терет\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: не могу да учитам непознату ознаку (%d).\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: неуÑпело читање јавног кључа.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: јавни кључ није ојачан.\n" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "Макро %%%s није могао да Ñе прошири\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "ИÑпред датотеке је потребно да Ñтоји „/“: %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Преклапање није дозвољено: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Датотека није пронађена поклапањем: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Датотека није пронађена поклапањем: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Ðе могу да отворим %%files датотеку %s: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "ред: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Лоша датотека: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Лош влаÑник/група: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Проверавам за незапаковане датотеке: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Пронађене Ñу инÑталиране (али незапаковане) датотеке:\n" +"%s" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "Обрађујем датотеке: %s-%s-%s.%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "Бинарне датотеке завиÑне од архитектуре у noarch пакету\n" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "неуÑпело прављење архиве Ñа датотеком %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "неуÑпело прављење архиве: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "неуÑпело cpio_copy запиÑивање: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "неуÑпело cpio_copy читање: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: ред: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Ðије могуће утврдити назив домаћина: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Ðе могу да отворим PreIn датотеку: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Ðе могу да отворим PreUn датотеку: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Ðе могу да отворим PreTrans датотеку: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Ðе могу да отворим PostIn датотеку: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Ðе могу да отворим PostUn датотеку: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Ðе могу да отворим PostTrans датотеку: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Ðе могу да отворим VerifyScript датотеку: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Ðе могу да отворим датотеку Trigger Ñкрипте: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Ðепозната компреÑија товара: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Ðе могу да направим непроменљиву облаÑÑ‚ заглавља.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Ðе могу да упишем привремено заглавље\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Лоши CSA подаци\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Ðе могу да поново учитам заглавље потпиÑа.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Ðе могу да отворим %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Ðе могу да запишем пакет: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Ðе могу да отворим sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Ðе могу да прочитам заглавље из %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Ðе могу да упишем заглавље у %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Ðе могу да прочитам товар из %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Ðе могу да упишем товар у %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "ЗапиÑано: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "Извршавам „%s“:\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Извршавање „%s“ није уÑпело.\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "ÐеуÑпела провера пакета „%s“.\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Ðе могу да направим име излазне датотеке за пакет %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "не могу да направим %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "ред %d: други %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog Ñтавке морају почети Ñа *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "непотпуна %%changelog Ñтавка\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "лош датум у %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog није у опадајућем хронолошком редоÑледу\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "недоÑтаје име у %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "нема опиÑа у %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "ред %d: Грешка при тумачењу %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "ред %d: Лоша опција %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "ред %d: Превише имена: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "ред %d: Пакет не поÑтоји: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "ред %d: Други опиÑ\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "ред %d: Грешка при тумачењу %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "ред %d: Грешка при тумачењу %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "ред %d: Лош број: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "ред %d: Лош no%s број: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "ред %d: Лош %s број: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d дефиниÑано више пута\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Ðрхитектура је изоÑтављена: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Ðрхитектура није уврштена: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "OS је изоÑтављен: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "OS није уврштен: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "%s поље мора бити приÑутно у пакету: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Удвојене %s Ñтавке у пакету: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "неважећи _docdir_fmt: %s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Ðе могу да отворим икону %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Ðе могу да прочитам икону %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Ðепозната врÑта иконе: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "ред %d: Ознака прихвата Ñамо један жетон: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "ред %d: Ðедозвољени знак „-“ у %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "ред %d: Ðедозвољени знак „-“ у %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "ред %d: Ðедозвољени знак „-“ у %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "ред %d: Лоше обликована ознака: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "ред %d: Празна ознака: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "ред %d: ПрефикÑи Ñе не Ñмеју завршавати Ñа „/“: %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "ред %d: Docdir мора почети Ñа „/“: %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "ред %d: Поље епохе мора бити број без предзнака: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "ред %d: Лоши %s: квалификатори: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "ред %d: Лош облик за BuildArchitecture: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "ред %d: Само noarch подпакети Ñу подржани: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Интерна грешка: Лажна ознака %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "ред %d: Ðеопходна верзија: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Лоша Ñпецификација пакета: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Пакет већ поÑтоји: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "ред %d: Ðепозната ознака: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} не може бити празно\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} не може бити „/“\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Лош извор: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "Ðема закрпе број %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "%%patch без одговарајуће „Patch:“ ознаке\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "Ðема извора број %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "Ðема ознаке „Source:“ у датотеци Ñпецификације\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Ðе могу да преузмем nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Грешка у тумачењу %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "ред %d: Лош аргумент за %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "ред %d: Лоша %%setup опција %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "ÐеиÑправан број закрпе %s: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "ред %d: други %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"ред %d: Жетони завиÑноÑти морају почињати бројем, Ñловом, „_“ или „/“: %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "ред %d: Ðије дозвољено име датотеке Ñа верзијом: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "ред %d: Ðеопходна верзија: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "ред %d: Лош број: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "ред %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "ред %d: окидачи морају имати --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "ред %d: Грешка при тумачењу %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "ред %d: интерна Ñкрипта Ñе мора завршити Ñа „>“: %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "ред %d: Ñкрипта програма мора почети Ñа „/“: %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "ред %d: Други %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "ред %d: неподржана интерна Ñкрипта: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "ред %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Ðе могу да отворим %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "Отворен %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean враћа %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: Добио %%else без %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: Добио %%endif без %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "лоше обликована %%include наредба\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "ÐиÑу пронађене уÑаглашене архитектуре за прављење\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Пакет нема %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "ÐеуÑпело отварање tar цеви: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Грешка у тумачењу %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Извршавам(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "ÐедоÑтаје %s у %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "Превише аргумената у реду података на %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Обрађујем датотеке: %s-%s-%s.%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "ред %d: Лош број: %s\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Ðе могу да направим цев за %s: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Ðе могу да извршим %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Ðе могу да одвојим %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s није уÑпело: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "не могу да упишем Ñве податке у %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "Пребацивање %s у дуги цео број није уÑпело.\n" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "gpg није уÑпео да запише потпиÑ\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) није уÑпело: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load није уÑпело: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Препознавање датотеке „%s“ није уÑпело: режим %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Проналазак %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "ÐеуÑпело тражење %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "упит на датотеком Ñпецификације %s није уÑпео, не могу да протумачим\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(грешка 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Лош magic" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Лоше/нечитљиво заглавље" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Превелика величина заглавља" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Ðепозната врÑта датотеке" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "ÐедоÑтаје чврÑта веза" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "MD5 збир Ñе не подудара" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Интерна грешка" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "Датотека архиве није у заглављу" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " неуÑпело - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "пакет %s је већ додат, преÑкачем %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "пакет %s је већ додат, замењујем Ñа %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(није број)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(није base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(неиÑправна врÑта)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(није blob)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(неиÑправна xml врÑта)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(није OpenPGP потпиÑ)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "нормално " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "замењено " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "није инÑталиран " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "дељено на мрежи " + +#: lib/formats.c:600 +#, fuzzy +msgid "wrong color" +msgstr "погрешна боја " + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "недоÑтаје %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(непознат %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(није број)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "кориÑник %s не поÑтоји - кориÑтим root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "група %s не поÑтоји - кориÑтим root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "датотека архиве %s није пронађена у заглављу ÑпиÑка датотека\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s Ñачувано као %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s rmdir %s није уÑпело: Директоријум није празан\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir %s није уÑпело: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s unlink %s није уÑпело: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s направљено као %s\n" + +#: lib/package.c:192 +#, fuzzy, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "преÑкачем пакет %s Ñа непотврђеним V%u потпиÑом\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "blob величина (%d): ЛОШЕ, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "ознака[%d]: ЛОШЕ, ознака %d врÑта %d померај %d број %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "померај региона: ЛОШЕ, ознака %d врÑта %d померај %d број %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "репни регион: ЛОШЕ, ознака %d врÑта %d померај %d број %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "величина региона: ЛОШЕ, ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: ЛОШЕ, није хекÑадекадно\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr RSA: ЛОШЕ, није бинарно\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr DSA: ЛОШЕ, није бинарно\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hdr size(%d): ЛОШЕ, читам враћено %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "hdr magic: ЛОШЕ\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "hdr tags: ЛОШЕ, број ознака(%d) је ван домета\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "hdr data: ЛОШЕ, број бајтова(%d) је ван домета\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr blob(%zd): ЛОШЕ, читам враћено %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "hdr load: ЛОШЕ\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature није уÑпело: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Ðема потпиÑа на раÑполагању\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead није уÑпело: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread није уÑпело: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s је Делта RPM и не може Ñе директно инÑталирати\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Ðеподржан терет (%s) у пакету %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "унапред дефиниÑани MACRO Ñа вредношћу EXPR" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "„MACRO EXPR“" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "дефинише MACRO Ñа вредношћу EXPR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "иÑпиши макро проширење за EXPR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "„EXPR“" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "читај умеÑто подразумеваних датотека" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "немој проверавати Ñажетак(е) пакета" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "немој проверавати заглавље(а) базе података по добављању" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "немој проверавати потпиÑ(е) пакета" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "пошаљи stdout ка CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "кориÑти ROOT као директоријум највишег нивоа" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "прикажи ознаке познатих упита" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "прикажи коначну конфигурацију за rpmrc и macro" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "пружа мање детаљан излаз" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "пружа детаљнији излаз" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "напиши која Ñе rpm верзија кориÑти" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "отклони грешке у машини Ñтања датотеке товара" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "отклони грешке за rpmio У/И" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: табела опција није добро подешена (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "путање изоÑтављања морају почињати Ñа /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "премештања морају почети Ñа /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "премештања морају Ñадржати =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "премештања морају имати / након =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"инÑталирај Ñве датотеке, чак и подешавања која би иначе могла бити преÑкочена" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"уклони Ñве пакете који одговарају (обично Ñе пријављује грешка ако " +" одређује више пакета)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "премеÑти датотеке у пакету који Ñе не може премеÑтити" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "штампај петље завиÑноÑти као упозорење" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "избриши (деинÑталирај) пакет" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "немој инÑталирати датотеке подешавања" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "немој да инÑталираш документацију" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "преÑкочи датотеке које Ñадрже компоненту " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "Ñкраћеница за --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "надгради пакете ако Ñу већ инÑталирани" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "иÑпиÑуј знак тарабе док Ñе пакет инÑталира (добро уз -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "немој проверавати архитектуру пакета" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "немој проверавати оперативни ÑиÑтем пакета" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "немој проверавати проÑтор на диÑку пре инÑталације" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "инÑталирај документацију" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "инÑталирај пакет(е)" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "ажурирај базу података, али немој мењати ÑиÑтем датотека" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "немој проверавати завиÑноÑти пакета" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "немој проверавати MD5 Ñажетке датотека" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "немој проверавати MD5 Ñажетке датотека" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "немој инÑталирати безбедноÑне контекÑте датотека" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" +"немој преуређивати редоÑлед инÑталације пакета ради задовољавања завиÑноÑти" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "немој извршити Ñкриптицу(е) пакета" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "немој извршити %%pre Ñкриптицу (ако поÑтоји)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "немој извршити %%post Ñкриптицу (ако поÑтоји)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "немој извршити %%preun Ñкриптицу (ако поÑтоји)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "немој извршити %%postun Ñкриптицу (ако поÑтоји)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "немој извршити ниједну Ñкриптицу(е) коју активира овај пакет" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "немој извршити ниједну %%triggerprein Ñкриптицу(е)" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "немој извршити ниједну %%triggerin Ñкриптицу(е)" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "немој извршити ниједну %%triggerun Ñкриптицу(е)" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "немој извршити ниједну %%triggerpostun Ñкриптицу(е)" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"надгради на Ñтару верзију пакета (--force код надградње ово ради ÑамоÑтално)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "иÑпиÑуј проценте док Ñе пакет инÑталира" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "премеÑти пакет у , ако Ñе може премеÑтити" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "премеÑти датотеке из путање у " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "занемари Ñукобе датотека између пакета" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "поново инÑталирај ако је пакет већ приÑутан" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "немој инÑталирати, али реци да ли би радило или не" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "надгради пакет(е)" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "иÑпитај/провери Ñве пакете" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "rpm checksig режим" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "иÑпитај/провери пакет(е) које поÑедују датотеку" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "иÑпитај/провери пакет(е) у групи" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "иÑпитај/провери датотеку пакета" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "иÑпитај/провери пакет(е) Ñа идентификатором пакета" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "иÑпитај/провери пакет(е) Ñа идентификатором заглавља" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "режим rpm упита" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "иÑпитај/провери инÑтанцу заглавља" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "иÑпитај/провери пакет(е) из транÑакције инÑталације" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "иÑпитај пакет(е) које је активирао овај пакет" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "режим rpm провере" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "иÑпитај/провери пакет(е) који захтевају завиÑноÑти" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "иÑпитај/провери пакет(е) који пружају завиÑноÑти" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "немој преклапати аргументе" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "немој обрађивати датотеке које ниÑу пакети као манифеÑте" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "иÑпиши Ñве датотеке подешавања" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "иÑпиши Ñве датотеке документације" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "избаци оÑновне податке о датотеци" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "иÑпиши датотеке у пакету" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "преÑкочи %%ghost датотеке" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "прикажи Ñтања наведених датотека" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "немој проверавати величину датотека" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "немој проверавати путање Ñимболичких веза датотека" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "немој проверавати влаÑника датотека" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "немој проверавати групу датотека" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "немој проверавати време мењања датотека" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "немој проверавати режим приÑтупа датотека" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "немој проверавати могућноÑти датотека" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "немој проверавати безбедноÑне контекÑте датотека" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "немој проверавати датотеке у пакету" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "немој проверавати завиÑноÑти пакета" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "немој извршити Ñкрипту(е) провере" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "недоÑтаје архитектура за %s на %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "очекиван је изворни пакет, пронађен је бинарни\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "изворни пакет не Ñадржи .spec датотеку\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "раÑпакивање архиве није уÑпело %s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " на датотеци " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s није уÑпело код датотеке %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s није уÑпело: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "неиÑправан облик: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(не Ñадржи датотеке)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "нормално " + +#: lib/query.c:163 +msgid "replaced " +msgstr "замењено " + +#: lib/query.c:166 +msgid "not installed " +msgstr "није инÑталиран " + +#: lib/query.c:169 +msgid "net shared " +msgstr "дељено на мрежи " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "погрешна боја " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(без Ñтања) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(непознат %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "пакет нема ÑпиÑкове влаÑника/групе датотека\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "пакет нема ÑпиÑкове нити влаÑника ни id датотека\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "група %s не Ñадржи ниједан пакет\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "ниједан пакет не активира %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "лоше обликован %s: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "ниједан пакет не одговара %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "ниједан пакет не захтева %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "ниједан пакет не пружа %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "датотека %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "датотека %s не припада ниједном пакету\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "неиÑправан број пакета: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "Ð·Ð°Ð¿Ð¸Ñ %lu не може бити прочитан\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "пакет %s није инÑталиран\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "непозната ознака: „%s“\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: увоз није уÑпео.\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: јавни кључ није ојачан.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: увозно читање није уÑпело(%d).\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead није уÑпео\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "%s: Ðепромењива регија заглавља Ñе не може ишчитати. Оштећен пакет?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "преÑкачем пакет %s Ñа непотврђеним V%u потпиÑом\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "ÐИЈЕ УРЕДУ" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "УРЕДУ" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (ÐЕДОСТÐЈУЋИ КЉУЧЕВИ:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (ÐЕПОУЗДÐÐИ КЉУЧЕВИ:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: отварање није уÑпело: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Ðе могу да променим коренÑки директоријум: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s rmdir %s није уÑпело: Директоријум није празан\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Ðе могу да променим коренÑки директоријум: %m\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Ðе могу да променим коренÑки директоријум: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "ÐЕ " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "ДÐ" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "Ðеопходне:, Обезбеђене:, и ЗаÑтареле: верзије подршке завиÑноÑти." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"име(на) датотеке Ñачувано као (називДиректоријума,оÑновноИме," +"индекÑДиректоријума) пар, не као путања." + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "товар пакета може бити компримован кориÑтећи bzip2." + +#: lib/rpmds.c:873 +#, fuzzy +msgid "package payload can be compressed using xz." +msgstr "товар пакета може бити компримован кориÑтећи lzma." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "товар пакета може бити компримован кориÑтећи lzma." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "датотека(е) товара пакета има Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ â€ž./“." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "назив пакета-верзија-издање није имплицитно наведено." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "ознаке заглавља Ñе увек Ñортирају након учитавања." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "преводилац Ñкриптице може кориÑтити аргументе заглавља." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "датотека чврÑте везе може бити инÑталирана иако није потпуна." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "Ñкриптица пакета може приÑтупити rpm бази података током инÑталације." + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "унутрашња подршка за Ñкрипте lua." + +#: lib/rpmds.c:903 +#, fuzzy +msgid "file digest algorithm is per package configurable" +msgstr "" +"алгоритам за Ñажимање контролне Ñуме датотеке Ñе може подешавати по пакету" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "подршка за POSIX.1e могућноÑти датотека" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "Ñкриптица пакета може приÑтупити rpm бази података током инÑталације." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "отварање %s није уÑпело: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: није rpm пакет (или манифеÑÑ‚ пакета)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Припремам..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Припремам пакете за инÑталацију..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "ÐеуÑпеле завиÑноÑти:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: није rpm пакет (или манифеÑÑ‚ пакета): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s Ñе не може инÑталирати\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Прибављам %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "преÑкачем %s - неуÑпео преноÑ\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "пакет %s Ñе не може премештати\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "грешка при читању из датотеке %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "датотека %s захтева новију верзију RPM-а\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "„%s“ одређује више пакета:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "не могу да отворим %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "ИнÑталирам %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "није rpm пакет" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "неправилан тип потпиÑа" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "неподржана верзија RPM пакета" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "неуÑпело читање: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "није rpm пакет" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "не могу да направим браву за транÑакцију на %s (%s)\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "чекам за браву транÑакције %s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "неуÑпело отварање %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "ÐеуÑпела промена имена %s у %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "ÐеуÑпела промена имена %s у %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "различито" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "пакет %s је намењен за %s архитектуру" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "пакет %s је намењен за %s оперативни ÑиÑтем" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "пакет %s је већ инÑталиран" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "путања %s у пакету %s Ñе не може премештати" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "датотека %s је у Ñукобу између покушаних инÑталација %s и %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "датотека %s из %s инÑталације је у Ñукобу Ñа датотеком из пакета %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "пакет %s (који је новији од %s) је већ инÑталиран" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "пакет %s који Ñе инÑталира захтева %%cБ на %s ÑиÑтему датотека" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"пакет %s који Ñе инÑталира захтева % и-чворова на %s ÑиÑтему датотека" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s је потребан за %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(инÑталирано) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s је у Ñукобу Ñа %s%s" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s је потребан за %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "непозната грешка %d Ñе деÑила у току руковања пакетом %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "недоÑтаје друго „:“ код %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "недоÑтаје име архитектуре на %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Ðепотпун ред података на %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "Превише аргумената у реду података на %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Лош број архитектуре/оÑ-а: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Ðепотпун подразумевани ред на %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Премало аргумената у подразумеваном реду на %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "недоÑтаје „:“ (пронађено 0x%02x) код %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "недоÑтаје аргумент за %s на %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "не могу да отворим %s на %s:%d: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "недоÑтаје архитектура за %s на %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "лоша опција „%s“ код %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Ðепознати ÑиÑтем: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Молим Ð²Ð°Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ˜Ñ‚Ðµ %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Ðе могу да отворим %s за читање: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Ðе могу да променим коренÑки директоријум: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "није уграђена подршка Ñкриптица\n" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Ðе могу да направим привремену датотеку за %s: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Ðе могу да удвојим опиÑника датотеке: %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s Ñкриптица није уÑпела, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s Ñкриптица није уÑпела, Ñигнал %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s Ñкриптица није уÑпела, излазни ÑÑ‚Ð°Ñ‚ÑƒÑ %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "Ðепознат облик" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(инÑталирано) " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "не могу да отворим Packages базу података у %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "Ñувишна „(“ у ознаци пакета: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "недоÑтаје „(“ у ознаци пакета: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "недоÑтаје „)“ у ознаци пакета: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: неуÑпело читање јавног кључа.\n" + +#: lib/rpmts.c:1034 +#, fuzzy +msgid "transaction" +msgstr "направи Ñкуп транÑакција" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "sigh величина(%d): ЛОШЕ, читање враћено %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sigh magic: ЛОШЕ\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sigh ознаке: ЛОШЕ, број ознака(%d) је ван домета\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sigh подаци: ЛОШЕ, број бајтова(%d) је ван домета\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sigh blob(%d): ЛОШЕ, читање враћено %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "sigh ознака[%d]: ЛОШЕ, ознака %d врÑта %d померај %d број %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "sigh учитавање: ЛОШЕ\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh подлошка(%zd): ЛОШЕ, читам %zd бајтова\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh sigSize(%zd): ЛОШЕ, fstat(2) није уÑпео\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "Ðепромењива регија заглавља Ñе не може ишчитати. Оштећен пакет?\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "MD5 Ñажетак:" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "SHA1 Ñажетак заглавља:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Заглавље " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Потврди потпиÑ: ЛОШИ ПÐРÐМЕТРИ\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "ПотпиÑ: ÐЕПОЗÐÐТ (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s није уÑпело\n" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "недоÑтаје %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Ðезадовољене завиÑноÑти за %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "недоÑтаје { поÑле %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "недоÑтаје } поÑле %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "празан облик ознаке" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "празно име ознаке" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "непозната ознака" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] очекиван на крају низа" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "неочекиван ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "неочекиван }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? очекиван у изразу" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ очекивано поÑле ? у изразу" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} очекиван у изразу" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": очекиван након ? подизраза" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ очекивано поÑле : у изразу" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| очекиван на крају израза" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "показивач низа коришћен Ñа низовима различитих величина" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "не могу да отворим %s Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ¾Ñ€Ð¸Ñтећи db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "није поÑтављен dbpath\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "грешка(%d) при добављању „%s“ Ñлогова из %s индекÑа\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: преÑкачем" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "грешка(%d) при запиÑивању Ñлога #%d у %s\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec није уÑпео: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp није уÑпео: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: преÑкачем" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: оштећено заглавље #%u враћено -- преÑкачем.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "грешка(%d) при добављању „%s“ Ñлогова из %s индекÑа\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "грешка(%d) при поÑтављању заглавља #%d Ñлога за %s уклањање\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "грешка(%d) при поÑтављању заглавља #%d Ñлога за %s уклањање\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: не могу да прочитам заглавље на 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "грешка(%d) при поÑтављању „%s“ Ñлогова из %s индекÑа\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "грешка(%d) при Ñкладиштењу Ñлога „%s“ у %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "грешка(%d) при уклањању Ñлога „%s“ из %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "грешка(%d) при заузимању новог примерка пакета\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "грешка(%d) при запиÑивању Ñлога %s у %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "није поÑтављен dbpath" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "неуÑпело креирање директоријума %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "заглавље #%u у бази податак је лоше -- преÑкачем.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "не могу да додам Ñлог првобитно на %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"неуÑпело поновно прављење базе података: оÑновна база података је оÑтала на " +"меÑту\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "неуÑпела замена Ñтаре базе података Ñа новом базом података!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "замени датотеке у %s Ñа датотекама из %s да вратиш у претходно Ñтање" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "неуÑпело уклањање директоријума %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "база података%d грешка(%d) из %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "база података%d грашка(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "не могу да добијем %s катанац на %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "дељено" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "екÑклузивно" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "није препозната опција базе података: „%s“ занемарено.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s има неправилну бројчану вредноÑÑ‚, преÑкочено\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s има превелику или премалу long вредноÑÑ‚, преÑкочено\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s има превелику или премалу целобројну вредноÑÑ‚, преÑкочено\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Ðе могу да направим привремену датотеку за %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "неуÑпело отварање %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "неуÑпело уклањање директоријума %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "ÐеуÑпела промена имена %s у %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "неуÑпело отварање %s: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "неуÑпело отварање %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "неуÑпело отварање %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "Макро %%%s има незавршено тело\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "Макро %%%s није могао да Ñе прошири\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "грешка: python повратни позив %s није уÑпео, одуÑтајем!\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== активно %d празно %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(празно)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(празно)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Макро %%%s има незавршено тело\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Макро %%%s има неправилно име (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Макро %%%s има незавршене опције\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "Макро %%%s има празно тело\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Макро %%%s није могао да Ñе прошири\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Макро %%%s има неправилно име (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Макро %%%s (%s) није коришћен иÑпод нивоа %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Ðепозната опција %c у %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "Ðеограничено %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "%% је праћена Ñа макроом кога није могуће рашчланити\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "грешка при прављењу привремене датотеке %s: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Датотека %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Датотека %s је мања од %u бајтова\n" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "неуÑпело креирање директоријума" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "неправилна ÑинтакÑа у lua Ñкриптици: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "неправилна ÑинтакÑа у lua Ñкрипти: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "lua Ñкрипта није уÑпела: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "неправилна ÑинтакÑа у lua датотеци: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "lua удица није уÑпела: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(без грешке)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "кобна грешка: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "грешка: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "упозорење: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "алокација меморије (%u бајта) је вратила ÐÐЛ.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "%sV%d %s потпиÑ: %s, ID кључа %s\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(без грешке)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "ÐеуÑпело читање датотеке Ñпецификације из %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite није уÑпело: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush није уÑпело: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "Ðе могу да направим цев за потпиÑивање: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "неуÑпело gpg извршавање (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg није уÑпео да запише потпиÑ\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "не могу да прочитам потпиÑ\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "rpmMkTemp није уÑпело\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead није уÑпело: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature није уÑпело: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "отварање %s није уÑпело: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: неуÑпело читање манифеÑта: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "немој проверавати Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ñ™Ð°+товара" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: превише uid-а\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: превише uid-а\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: превише uid-а\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: превише gid-а\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: превише gid-а\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: превише gid-а\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "занемари одноÑ(е) назива пакета [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "додај предложене пакете транÑакцији" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "немој предлагати решење(а) недоÑтајућим завиÑноÑтима" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Ðе могу да променим директоријум на %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps може бити наведена Ñамо током прављења, поновног прављења, " +#~ "поновног компилирања, бриÑања, и провере пакета" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) може бити наведена Ñамо током инÑталације, бриÑања, упита, и " +#~ "поновног прављења базе података" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "откриј Ñукобе датотека између пакета" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d није доÑтупно\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "привремена база података %s већ поÑтоји\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "иÑпитај/провери пакет(е) Ñа идентификатором датотеке" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "ÐеиÑправна %%_signature Ñпецификација у макро датотеци.\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: је већ потпиÑан кључем Ñа ID-ом %s, преÑкачем\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Циљани бафер је преоптерећен\n" + +#~ msgid "no files to sign\n" +#~ msgstr "нема датотека за потпиÑивање\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "не могу да приÑтупим датотеци %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign може бити наведена Ñамо током прављења пакета" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "немој проверавати GPG V3 DSA потпиÑ(е)" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "немој проверавати PGP V3 RSA/MD5 потпиÑ(е)" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "потпиши пакет(е) (иÑтоветно Ñа --resign)" + +#~ msgid "generate signature" +#~ msgstr "направи потпиÑ" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "ÐеиÑправна Ñпецификација %%_потпиÑа у датотеци макроа\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK неуÑпех: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "генериши заглавља компатибилна Ñа rpm4 паковањем" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Интерна грешка при обради аргумената (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: неуÑпело читање јавног кључа.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: отварање %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek није уÑпео: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s није RPM пакет\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: читање заглавља из %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Правим потпиÑ: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "направи PGP/GPG потпиÑ" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "нема задатих датотека пакета за поновно прављење" + +#~ msgid "no spec files given for build" +#~ msgstr "нема задатих датотека Ñпецификације за прављење" + +#~ msgid "no tar files given for build" +#~ msgstr "нема задатих tar датотека за прављење" + +#~ msgid "%s failed\n" +#~ msgstr "%s није уÑпело\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Дубина рекурзије(%d) је већа од макÑималне(%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: није препознато име ознаке: „%s“ занемарено\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: преÑкачем" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib пружа)" + +#~ msgid "(cached)" +#~ msgstr "(кеширање)" + +#~ msgid "(db files)" +#~ msgstr "(db датотеке)" + +#~ msgid "(db provides)" +#~ msgstr "(db пружа)" + +#~ msgid "(added files)" +#~ msgstr "(додате датотеке)" + +#~ msgid "(added provide)" +#~ msgstr "(додата уÑлуга)" + +#~ msgid "url port must be a number\n" +#~ msgstr "url порт мора бити број\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Опције шетње кроз Ñтабло датотека (Ñа --ftswalk):" + +#~ msgid "follow command line symlinks" +#~ msgstr "прати Ñимболичке везе командне линије" + +#~ msgid "logical walk" +#~ msgstr "логички ход" + +#~ msgid "don't change directories" +#~ msgstr "не мења директоријуме" + +#~ msgid "don't get stat info" +#~ msgstr "не добија ÑтатиÑтичке информације" + +#~ msgid "physical walk" +#~ msgstr "физички ход" + +#~ msgid "return dot and dot-dot" +#~ msgstr "враћа тачка и тачка-тачка" + +#~ msgid "don't cross devices" +#~ msgstr "не укршта уређаје" + +#~ msgid "return whiteout information" +#~ msgstr "враћа избриÑане информације" + +#~ msgid "debug package state machine" +#~ msgstr "отклони грешке у машини Ñтања датотеке пакета" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "иÑпитај/провери пакет(е) од шетње TOP дрвета датотека" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "иÑпитај/провери пакет(е) из ÑиÑтемÑке HDLIST" + +#~ msgid "do not order transaction set" +#~ msgstr "немој наручивати Ñкуп транÑакција" + +#~ msgid "do not read headers" +#~ msgstr "немој читати заглавља" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Датотека не одговара префикÑу (%s): %s\n" + +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "Ðе могу да прибавим назив текуће завиÑноÑти.\n" + +#~ msgid "Unable to get current dependency epoch-version-release.\n" +#~ msgstr "Ðе могу да прибавим епоху-верзију-издање текуће завиÑноÑти.\n" + +#~ msgid "File count from file info doesn't match file in container.\n" +#~ msgstr "" +#~ "Број датотека из информација о датотеци Ñе не поклапа Ñа датотеком у " +#~ "држачу.\n" + +#~ msgid "Container not of string array data type.\n" +#~ msgstr "Држач није типа низа ниÑки.\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "кориÑти нити за машину Ñтања датотеке пакета" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: %s Ñкриптица није уÑпела (%d), преÑкачем %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() није уÑпео да врати величину: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() није уÑпео да врати тачке монтирања: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "stat није уÑпео %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "датотека %s је на непознатом уређају\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "кориÑти нити за машину Ñтања датотеке" + +#~ msgid "cannot open %s index\n" +#~ msgstr "не могу да отворим %s индекÑ\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "" +#~ "Ðије могуће добити браву на бази података %s, покушавам поново... (%d)\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Ðије могуће извршити initDB %s (%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Ðије могуће отворити базу података: %s\n" + +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Ðије могуће утврдити DB endianess.\n" + +#~ msgid "Unknown system error" +#~ msgstr "Ðепозната ÑиÑтемÑка грешка" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Макро %%%.*s није пронађен, преÑкачем\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: неуÑпело читање *.te полиÑе.\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "ред %d: Други %%files ÑпиÑак\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "ЗавиÑноÑти „Б“ је потребна епоха (претпоÑтављамо иÑту епоху као код „Ð“)\n" +#~ "\tÐ = „%s“\tБ = „%s“\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Ð’Ñ€Ñта податка %d није подржана\n" + +#~ msgid "line %d: Illegal char '-' in %s: %s\n" +#~ msgstr "ред %d: Ðедозвољени знак „-“ у %s: %s\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "ЗаоÑтала ÑинтакÑа није подржана: %s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "уклањам %s „%s“ из tsort релација.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "ПЕТЉÐ:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "rpmtsOrder није уÑпео, %d делови Ñу оÑтали\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "Величина заглавља+товара:" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Опције извора (Ñа --query или --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp није пронађен: " + +#~ msgid "skipping header with unverifiable V%u signature\n" +#~ msgstr "преÑкачем заглавља Ñа непотврђеним V%u потпиÑом\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp није уÑпео\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp није уÑпео да запише потпиÑ\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Морате поÑтавити „%%_pgp_name“ у макро датотеци\n" + +#~ msgid "Unknown" +#~ msgstr "Ðепознат" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s потпиÑ: %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "%sV%d DSA потпиÑ: %s, ID кључа %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d DSA потпиÑ: %s\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "Покварен MD5 Ñажетак: ÐЕПОДРЖÐÐО\n" diff --git a/po/sr@latin.gmo b/po/sr@latin.gmo new file mode 100644 index 0000000..fd93569 Binary files /dev/null and b/po/sr@latin.gmo differ diff --git a/po/sr@latin.po b/po/sr@latin.po new file mode 100644 index 0000000..7a4536b --- /dev/null +++ b/po/sr@latin.po @@ -0,0 +1,3855 @@ +# Serbian(Latin) translations for rpm +# Copyright (C) 2006 Red Hat, Inc. and others +# This file is distributed under the same license as the rpm package. +# MiloÅ¡ KomarÄević , 2006. +# Marko Mijatovic , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: rpm\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2009-04-06 22:38+0100\n" +"Last-Translator: MiloÅ¡ KomarÄević \n" +"Language-Team: Serbian (sr) \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM verzija %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Autorska prava 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Ovaj program se sme slobodno distribuirati pod GNU OJL odredbama.\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "neuspelo pravljenje cevi za --pipe: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "neuspelo izvrÅ¡avanje\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "argument nije RPM paket\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "greÅ¡ka pri Äitanju zaglavlja iz paketa\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "ne mogu da ponovo otvorim tovar: %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "ispitaj/proveri paket(e) u grupi" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Opcije upita (sa -q ili --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Opcije provere (sa -V ili --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Opcije instalacije/nadgradnje/brisanja:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "ZajedniÄke opcije za sve rpm režime i izvrÅ¡ne programe:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "jedna vrsta upita/provere sme biti uraÄ‘ena odjednom" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "neoÄekivane zastavice upita" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "neoÄekivan oblik upita" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "neoÄekivani izvor upita" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "samo jedan glavni režim sme biti naveden" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "samo instalacija, nadgradnja, rmsource i rmspec mogu biti primorani" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "datoteke smeju biti premeÅ¡tane samo tokom instalacije paketa" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "ne može se koristiti --prefix uz --relocate ili --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate i --excludepath mogu biti upotrebljene samo pri instalaciji novih " +"paketa" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix može biti upotrebljena samo pri instalaciji novih paketa" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "argumenti za --prefix moraju poÄeti znakom /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) može biti navedena samo tokom instalacije paketa" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent može biti navedena samo tokom instalacije paketa" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs može biti navedena samo tokom instalacije paketa" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludecocs može biti navedena samo tokom instalacije paketa" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includecocs može biti navedena samo tokom instalacije paketa" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "može se navesti samo jedna od --excludedocs ili --includedocs" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch može biti navedena samo tokom instalacije paketa" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos može biti navedena samo tokom instalacije paketa" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize može biti navedena samo tokom instalacije paketa" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches može biti navedena samo tokom brisanja paketa" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles može biti navedena samo tokom instalacije paketa" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb može biti navedena samo tokom instalacije i brisanja paketa" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"opcije iskljuÄivanja skripte mogu biti navedene samo tokom instalacije i " +"brisanja paketa" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"opcije iskljuÄivanja okidaÄa mogu biti navedene samo tokom instalacije i " +"brisanja paketa" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test može biti navedena samo tokom instalacije, brisanja, i pravljenja " +"paketa" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb može biti navedena samo tokom instalacije i brisanja paketa" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "argumenti za --root (-r) moraju poÄeti znakom /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "nema zadatih paketa za brisanje" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "nema zadatih paketa za instalaciju" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "nema zadatih argumenata za upit" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "nema zadatih argumenata za proveru" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot je već naveden, zanemarujem %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"napravi kroz %prep (raspakovani izvori i primenjene zakrpe) iz " + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "napravi kroz %build (%prep, onda kompiliraj) iz " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "napravi kroz %install (%prep, %build, zatim instaliraj) iz " + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "proveri %files odeljak iz " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "napravi izvorne i binarne pakete iz " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "napravi binarne pakete samo iz " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "napravi izvorne pakete samo iz " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"napravi kroz %prep (raspakovani izvori i primenjene zakrpe) iz " + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "napravi kroz %build (%prep, onda kompiliraj) iz " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "napravi kroz %install (%prep, %build, onda instaliraj) iz " + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "proveri %files odeljak iz " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "napravi izvorne i binarne pakete iz " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "napravi binarne pakete samo iz " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "napravi izvorne pakete samo iz " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "napravi binarni paket iz " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"napravi kroz %install (%prep, %build, zatim instaliraj) iz " + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "premosti koren pravljenja" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "ukloni stablo pravljenja po zavrÅ¡etku" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "zanemari ExcludeArch: uputstva iz datoteke specifikacije" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "otkloni greÅ¡ke u maÅ¡ini stanja datoteka" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "nemoj izvrÅ¡iti nijednu fazu pravljenja" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "nemoj proveravati zavisnosti pravljenja" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "" +"generiÅ¡i zaglavlje(a) paketa kompatibilna sa (zastarelim) rpm[23] pakovanjem" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "ne prihvataj i18N msgstr niske iz datoteke specifikacije" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "ukloni izvore po zavrÅ¡etku" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "ukloni datoteku specifikacije po zavrÅ¡etku" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "preskoÄi pravo do odreÄ‘ene faze (samo za c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "premosti ciljnu platformu" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "Opcije pravljenja uz [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Neuspelo pravljenje zavisnosti:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Ne mogu da otvorim datoteku specifikacije %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Neuspelo otvaranje tar cevi: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Neuspela promena imena %s u %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "stat nije uspeo %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Datoteka %s nije obiÄna datoteka.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Datoteka %s ne liÄi na datoteku specifikacije.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Pravim ciljne platforme: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Pravim za cilj %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "inicijalizuj bazu podataka" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "" +"ponovo napravi obrnute spiskove baze podataka iz zaglavlja instaliranih " +"paketa" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "provera datoteka baze podataka" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Opcije baze podataka:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "proveri potpise paketa" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "uvezi ojaÄani javni kljuÄ" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Opcije potpisa:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "nema zadatih argumenata" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "instaliraj paket(e)" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "potpiÅ¡i paket(e) (istovetno sa --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "obriÅ¡i potpise paketa" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Opcije potpisa:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Ne mogu da izvrÅ¡im %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Morate postaviti „%%_gpg_name“ u makro datoteci\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Unesite lozinku: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Lozinka je dobra.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Neuspela provera lozinke\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "ispitaj datoteku specifikacije" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "ispitaj datoteku specifikacije" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "koristi sledeći oblik upita" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Opcije potpisa:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "nema zadatih argumenata za upit" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Ne mogu da otvorim temp datoteku.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "IzvrÅ¡avam(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "IzvrÅ¡avanje %s nije uspelo (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "LoÅ¡ status izlaza iz %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"GreÅ¡ke RPM pravljenja:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "sintaksna greÅ¡ka pri raÅ¡Älanjivanju ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "sintaksna greÅ¡ka pri raÅ¡Älanjivanju &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "sintaksna greÅ¡ka pri raÅ¡Älanjivanju ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "greÅ¡ka raÅ¡Älanjivanja u izrazu\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "neuparena (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- samo kod brojeva\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! samo kod brojeva\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "vrste se moraju poklapati\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / nije podržano za stringove\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- nije podržano za stringove\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& i || nisu podržani za stringove\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "sintaksna greÅ¡ka u izrazu\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "Nedostaje „(“ u %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "Nedostaje „)“ u %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Neispravan %s znak: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "Nedostaje %s u %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Razmak koji nije prazan sledi %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "LoÅ¡a sintaksa: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "LoÅ¡a specifikacija režima: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "LoÅ¡a specifikacija režima direktorijuma: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "NeobiÄna dužina lokaliteta: „%.*s“ u %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Udvojen lokalitet %.*s u %%lang(%s)\n" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "Neispravna mogućnost: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "Nije ugraÄ‘ena podrÅ¡ka za mogućnost datoteke\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Samo jedan argument za %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Dve datoteke u jednom redu: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Datoteka mora poÄeti sa „/“: %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Ne može se meÅ¡ati specijalni %%doc sa drugim oblicima: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "Nepoznat algoritam %u za sažimanje datoteka, vraćam se na MD5\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Datoteka navedena dvaput: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s unlink %s nije uspelo: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Symlink taÄke za BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Datoteka nije pronaÄ‘ena: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Datoteka nije pronaÄ‘ena: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "Datoteka %s je prevelika za koristan teret\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: ne mogu da uÄitam nepoznatu oznaku (%d).\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: neuspelo Äitanje javnog kljuÄa.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: javni kljuÄ nije ojaÄan.\n" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "Makro %%%s nije mogao da se proÅ¡iri\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Ispred datoteke je potrebno da stoji „/“: %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Preklapanje nije dozvoljeno: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Datoteka nije pronaÄ‘ena poklapanjem: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Datoteka nije pronaÄ‘ena poklapanjem: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Ne mogu da otvorim %%files datoteku %s: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "red: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "LoÅ¡a datoteka: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "LoÅ¡ vlasnik/grupa: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Proveravam za nezapakovane datoteke: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"PronaÄ‘ene su instalirane (ali nezapakovane) datoteke:\n" +"%s" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "ObraÄ‘ujem datoteke: %s-%s-%s.%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "Binarne datoteke zavisne od arhitekture u noarch paketu\n" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "neuspelo pravljenje arhive sa datotekom %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "neuspelo pravljenje arhive: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "neuspelo cpio_copy zapisivanje: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "neuspelo cpio_copy Äitanje: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: red: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Nije moguće utvrditi naziv domaćina: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Ne mogu da otvorim PreIn datoteku: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Ne mogu da otvorim PreUn datoteku: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Ne mogu da otvorim PreTrans datoteku: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Ne mogu da otvorim PostIn datoteku: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Ne mogu da otvorim PostUn datoteku: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Ne mogu da otvorim PostTrans datoteku: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Ne mogu da otvorim VerifyScript datoteku: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Ne mogu da otvorim datoteku Trigger skripte: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Nepoznata kompresija tovara: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Ne mogu da napravim nepromenljivu oblast zaglavlja.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Ne mogu da upiÅ¡em privremeno zaglavlje\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "LoÅ¡i CSA podaci\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Ne mogu da ponovo uÄitam zaglavlje potpisa.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Ne mogu da otvorim %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Ne mogu da zapiÅ¡em paket: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Ne mogu da otvorim sigtarget %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Ne mogu da proÄitam zaglavlje iz %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Ne mogu da upiÅ¡em zaglavlje u %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Ne mogu da proÄitam tovar iz %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Ne mogu da upiÅ¡em tovar u %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Zapisano: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "IzvrÅ¡avam „%s“:\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "IzvrÅ¡avanje „%s“ nije uspelo.\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Neuspela provera paketa „%s“.\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Ne mogu da napravim ime izlazne datoteke za paket %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "ne mogu da napravim %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "red %d: drugi %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog stavke moraju poÄeti sa *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "nepotpuna %%changelog stavka\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "loÅ¡ datum u %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog nije u opadajućem hronoloÅ¡kom redosledu\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "nedostaje ime u %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "nema opisa u %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "red %d: GreÅ¡ka pri tumaÄenju %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "red %d: LoÅ¡a opcija %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "red %d: PreviÅ¡e imena: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "red %d: Paket ne postoji: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "red %d: Drugi opis\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "red %d: GreÅ¡ka pri tumaÄenju %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "red %d: GreÅ¡ka pri tumaÄenju %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "red %d: LoÅ¡ broj: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "red %d: LoÅ¡ no%s broj: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "red %d: LoÅ¡ %s broj: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d definisano viÅ¡e puta\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Arhitektura je izostavljena: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Arhitektura nije uvrÅ¡tena: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "OS je izostavljen: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "OS nije uvrÅ¡ten: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "%s polje mora biti prisutno u paketu: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Udvojene %s stavke u paketu: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "nevažeći _docdir_fmt: %s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Ne mogu da otvorim ikonu %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Ne mogu da proÄitam ikonu %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Nepoznata vrsta ikone: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "red %d: Oznaka prihvata samo jedan žeton: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "red %d: Nedozvoljeni znak „-“ u %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "red %d: Nedozvoljeni znak „-“ u %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "red %d: Nedozvoljeni znak „-“ u %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "red %d: LoÅ¡e oblikovana oznaka: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "red %d: Prazna oznaka: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "red %d: Prefiksi se ne smeju zavrÅ¡avati sa „/“: %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "red %d: Docdir mora poÄeti sa „/“: %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "red %d: Polje epohe mora biti broj bez predznaka: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "red %d: LoÅ¡i %s: kvalifikatori: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "red %d: LoÅ¡ oblik za BuildArchitecture: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "red %d: Samo noarch podpaketi su podržani: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Interna greÅ¡ka: Lažna oznaka %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "red %d: Neophodna verzija: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "LoÅ¡a specifikacija paketa: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Paket već postoji: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "red %d: Nepoznata oznaka: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} ne može biti prazno\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} ne može biti „/“\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "LoÅ¡ izvor: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "Nema zakrpe broj %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "%%patch bez odgovarajuće „Patch:“ oznake\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "Nema izvora broj %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "Nema oznake „Source:“ u datoteci specifikacije\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Ne mogu da preuzmem nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "GreÅ¡ka u tumaÄenju %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "red %d: LoÅ¡ argument za %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "red %d: LoÅ¡a %%setup opcija %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "Neispravan broj zakrpe %s: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "red %d: drugi %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"red %d: Žetoni zavisnosti moraju poÄinjati brojem, slovom, „_“ ili „/“: %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "red %d: Nije dozvoljeno ime datoteke sa verzijom: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "red %d: Neophodna verzija: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "red %d: LoÅ¡ broj: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "red %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "red %d: okidaÄi moraju imati --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "red %d: GreÅ¡ka pri tumaÄenju %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "red %d: interna skripta se mora zavrÅ¡iti sa „>“: %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "red %d: skripta programa mora poÄeti sa „/“: %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "red %d: Drugi %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "red %d: nepodržana interna skripta: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "red %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Ne mogu da otvorim %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "Otvoren %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean vraća %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: Dobio %%else bez %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: Dobio %%endif bez %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "loÅ¡e oblikovana %%include naredba\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Nisu pronaÄ‘ene usaglaÅ¡ene arhitekture za pravljenje\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Paket nema %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Neuspelo otvaranje tar cevi: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "GreÅ¡ka u tumaÄenju %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "IzvrÅ¡avam(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "Nedostaje %s u %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "PreviÅ¡e argumenata u redu podataka na %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "ObraÄ‘ujem datoteke: %s-%s-%s.%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "red %d: LoÅ¡ broj: %s\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Ne mogu da napravim cev za %s: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Ne mogu da izvrÅ¡im %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Ne mogu da odvojim %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s nije uspelo: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "ne mogu da upiÅ¡em sve podatke u %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "Prebacivanje %s u dugi ceo broj nije uspelo.\n" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "gpg nije uspeo da zapiÅ¡e potpis\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) nije uspelo: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load nije uspelo: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Prepoznavanje datoteke „%s“ nije uspelo: režim %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Pronalazak %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Neuspelo traženje %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "upit na datotekom specifikacije %s nije uspeo, ne mogu da protumaÄim\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(greÅ¡ka 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "LoÅ¡ magic" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "LoÅ¡e/neÄitljivo zaglavlje" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Prevelika veliÄina zaglavlja" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Nepoznata vrsta datoteke" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Nedostaje Ävrsta veza" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "MD5 zbir se ne podudara" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Interna greÅ¡ka" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "Datoteka arhive nije u zaglavlju" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " neuspelo - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "paket %s je već dodat, preskaÄem %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "paket %s je već dodat, zamenjujem sa %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(nije broj)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(nije base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(neispravna vrsta)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(nije blob)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(neispravna xml vrsta)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(nije OpenPGP potpis)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normalno " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "zamenjeno " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "nije instaliran " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "deljeno na mreži " + +#: lib/formats.c:600 +#, fuzzy +msgid "wrong color" +msgstr "pogreÅ¡na boja " + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "nedostaje %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(nepoznat %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(nije broj)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "korisnik %s ne postoji - koristim root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "grupa %s ne postoji - koristim root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "datoteka arhive %s nije pronaÄ‘ena u zaglavlju spiska datoteka\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s saÄuvano kao %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s rmdir %s nije uspelo: Direktorijum nije prazan\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir %s nije uspelo: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s unlink %s nije uspelo: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s napravljeno kao %s\n" + +#: lib/package.c:192 +#, fuzzy, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "preskaÄem paket %s sa nepotvrÄ‘enim V%u potpisom\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "blob veliÄina (%d): LOÅ E, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "oznaka[%d]: LOÅ E, oznaka %d vrsta %d pomeraj %d broj %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "pomeraj regiona: LOÅ E, oznaka %d vrsta %d pomeraj %d broj %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "repni region: LOÅ E, oznaka %d vrsta %d pomeraj %d broj %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "veliÄina regiona: LOÅ E, ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: LOÅ E, nije heksadekadno\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr RSA: LOÅ E, nije binarno\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr DSA: LOÅ E, nije binarno\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hdr size(%d): LOÅ E, Äitam vraćeno %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "hdr magic: LOÅ E\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "hdr tags: LOÅ E, broj oznaka(%d) je van dometa\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "hdr data: LOÅ E, broj bajtova(%d) je van dometa\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr blob(%zd): LOÅ E, Äitam vraćeno %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "hdr load: LOÅ E\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature nije uspelo: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Nema potpisa na raspolaganju\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead nije uspelo: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread nije uspelo: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s je Delta RPM i ne može se direktno instalirati\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Nepodržan teret (%s) u paketu %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "unapred definisani MACRO sa vrednošću EXPR" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "„MACRO EXPR“" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "definiÅ¡e MACRO sa vrednošću EXPR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "ispiÅ¡i makro proÅ¡irenje za EXPR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "„EXPR“" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "Äitaj umesto podrazumevanih datoteka" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "nemoj proveravati sažetak(e) paketa" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "nemoj proveravati zaglavlje(a) baze podataka po dobavljanju" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "nemoj proveravati potpis(e) paketa" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "poÅ¡alji stdout ka CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "koristi ROOT kao direktorijum najviÅ¡eg nivoa" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "prikaži oznake poznatih upita" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "prikaži konaÄnu konfiguraciju za rpmrc i macro" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "pruža manje detaljan izlaz" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "pruža detaljniji izlaz" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "napiÅ¡i koja se rpm verzija koristi" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "otkloni greÅ¡ke u maÅ¡ini stanja datoteke tovara" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "otkloni greÅ¡ke za rpmio U/I" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: tabela opcija nije dobro podeÅ¡ena (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "putanje izostavljanja moraju poÄinjati sa /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "premeÅ¡tanja moraju poÄeti sa /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "premeÅ¡tanja moraju sadržati =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "premeÅ¡tanja moraju imati / nakon =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"instaliraj sve datoteke, Äak i podeÅ¡avanja koja bi inaÄe mogla biti " +"preskoÄena" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"ukloni sve pakete koji odgovaraju (obiÄno se prijavljuje greÅ¡ka " +"ako odreÄ‘uje viÅ¡e paketa)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "premesti datoteke u paketu koji se ne može premestiti" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "Å¡tampaj petlje zavisnosti kao upozorenje" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "izbriÅ¡i (deinstaliraj) paket" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "nemoj instalirati datoteke podeÅ¡avanja" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "nemoj da instaliraÅ¡ dokumentaciju" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "preskoÄi datoteke koje sadrže komponentu " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "skraćenica za --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "nadgradi pakete ako su već instalirani" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "ispisuj znak tarabe dok se paket instalira (dobro uz -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "nemoj proveravati arhitekturu paketa" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "nemoj proveravati operativni sistem paketa" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "nemoj proveravati prostor na disku pre instalacije" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "instaliraj dokumentaciju" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "instaliraj paket(e)" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "ažuriraj bazu podataka, ali nemoj menjati sistem datoteka" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "nemoj proveravati zavisnosti paketa" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "nemoj proveravati MD5 sažetke datoteka" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "nemoj proveravati MD5 sažetke datoteka" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "nemoj instalirati bezbednosne kontekste datoteka" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "" +"nemoj preureÄ‘ivati redosled instalacije paketa radi zadovoljavanja zavisnosti" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "nemoj izvrÅ¡iti skripticu(e) paketa" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "nemoj izvrÅ¡iti %%pre skripticu (ako postoji)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "nemoj izvrÅ¡iti %%post skripticu (ako postoji)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "nemoj izvrÅ¡iti %%preun skripticu (ako postoji)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "nemoj izvrÅ¡iti %%postun skripticu (ako postoji)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "nemoj izvrÅ¡iti nijednu skripticu(e) koju aktivira ovaj paket" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "nemoj izvrÅ¡iti nijednu %%triggerprein skripticu(e)" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "nemoj izvrÅ¡iti nijednu %%triggerin skripticu(e)" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "nemoj izvrÅ¡iti nijednu %%triggerun skripticu(e)" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "nemoj izvrÅ¡iti nijednu %%triggerpostun skripticu(e)" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"nadgradi na staru verziju paketa (--force kod nadgradnje ovo radi samostalno)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "ispisuj procente dok se paket instalira" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "premesti paket u , ako se može premestiti" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "premesti datoteke iz putanje u " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "zanemari sukobe datoteka izmeÄ‘u paketa" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "ponovo instaliraj ako je paket već prisutan" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "nemoj instalirati, ali reci da li bi radilo ili ne" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "nadgradi paket(e)" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "ispitaj/proveri sve pakete" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "rpm checksig režim" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "ispitaj/proveri paket(e) koje poseduju datoteku" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "ispitaj/proveri paket(e) u grupi" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "ispitaj/proveri datoteku paketa" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "ispitaj/proveri paket(e) sa identifikatorom paketa" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "ispitaj/proveri paket(e) sa identifikatorom zaglavlja" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "režim rpm upita" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "ispitaj/proveri instancu zaglavlja" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "ispitaj/proveri paket(e) iz transakcije instalacije" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "ispitaj paket(e) koje je aktivirao ovaj paket" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "režim rpm provere" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "ispitaj/proveri paket(e) koji zahtevaju zavisnosti" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "ispitaj/proveri paket(e) koji pružaju zavisnosti" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "nemoj preklapati argumente" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "nemoj obraÄ‘ivati datoteke koje nisu paketi kao manifeste" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "ispiÅ¡i sve datoteke podeÅ¡avanja" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "ispiÅ¡i sve datoteke dokumentacije" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "izbaci osnovne podatke o datoteci" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "ispiÅ¡i datoteke u paketu" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "preskoÄi %%ghost datoteke" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "prikaži stanja navedenih datoteka" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "nemoj proveravati veliÄinu datoteka" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "nemoj proveravati putanje simboliÄkih veza datoteka" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "nemoj proveravati vlasnika datoteka" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "nemoj proveravati grupu datoteka" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "nemoj proveravati vreme menjanja datoteka" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "nemoj proveravati režim pristupa datoteka" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "nemoj proveravati mogućnosti datoteka" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "nemoj proveravati bezbednosne kontekste datoteka" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "nemoj proveravati datoteke u paketu" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "nemoj proveravati zavisnosti paketa" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "nemoj izvrÅ¡iti skriptu(e) provere" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "nedostaje arhitektura za %s na %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "oÄekivan je izvorni paket, pronaÄ‘en je binarni\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "izvorni paket ne sadrži .spec datoteku\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "raspakivanje arhive nije uspelo %s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " na datoteci " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s nije uspelo kod datoteke %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s nije uspelo: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "neispravan oblik: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(ne sadrži datoteke)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normalno " + +#: lib/query.c:163 +msgid "replaced " +msgstr "zamenjeno " + +#: lib/query.c:166 +msgid "not installed " +msgstr "nije instaliran " + +#: lib/query.c:169 +msgid "net shared " +msgstr "deljeno na mreži " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "pogreÅ¡na boja " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(bez stanja) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(nepoznat %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "paket nema spiskove vlasnika/grupe datoteka\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "paket nema spiskove niti vlasnika ni id datoteka\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "grupa %s ne sadrži nijedan paket\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "nijedan paket ne aktivira %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "loÅ¡e oblikovan %s: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "nijedan paket ne odgovara %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "nijedan paket ne zahteva %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "nijedan paket ne pruža %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "datoteka %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "datoteka %s ne pripada nijednom paketu\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "neispravan broj paketa: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "zapis %lu ne može biti proÄitan\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "paket %s nije instaliran\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "nepoznata oznaka: „%s“\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: uvoz nije uspeo.\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: javni kljuÄ nije ojaÄan.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: uvozno Äitanje nije uspelo(%d).\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead nije uspeo\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" +"%s: Nepromenjiva regija zaglavlja se ne može iÅ¡Äitati. OÅ¡tećen paket?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "preskaÄem paket %s sa nepotvrÄ‘enim V%u potpisom\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "NIJE UREDU" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "UREDU" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (NEDOSTAJUĆI KLJUÄŒEVI:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (NEPOUZDANI KLJUÄŒEVI:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: otvaranje nije uspelo: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Ne mogu da promenim korenski direktorijum: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s rmdir %s nije uspelo: Direktorijum nije prazan\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Ne mogu da promenim korenski direktorijum: %m\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Ne mogu da promenim korenski direktorijum: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NE " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "DA" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "Neophodne:, ObezbeÄ‘ene:, i Zastarele: verzije podrÅ¡ke zavisnosti." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" +"ime(na) datoteke saÄuvano kao (nazivDirektorijuma,osnovnoIme," +"indeksDirektorijuma) par, ne kao putanja." + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "tovar paketa može biti komprimovan koristeći bzip2." + +#: lib/rpmds.c:873 +#, fuzzy +msgid "package payload can be compressed using xz." +msgstr "tovar paketa može biti komprimovan koristeći lzma." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "tovar paketa može biti komprimovan koristeći lzma." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "datoteka(e) tovara paketa ima prefiks „./“." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "naziv paketa-verzija-izdanje nije implicitno navedeno." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "oznake zaglavlja se uvek sortiraju nakon uÄitavanja." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "prevodilac skriptice može koristiti argumente zaglavlja." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "datoteka Ävrste veze može biti instalirana iako nije potpuna." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "skriptica paketa može pristupiti rpm bazi podataka tokom instalacije." + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "unutraÅ¡nja podrÅ¡ka za skripte lua." + +#: lib/rpmds.c:903 +#, fuzzy +msgid "file digest algorithm is per package configurable" +msgstr "" +"algoritam za sažimanje kontrolne sume datoteke se može podeÅ¡avati po paketu" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "podrÅ¡ka za POSIX.1e mogućnosti datoteka" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "skriptica paketa može pristupiti rpm bazi podataka tokom instalacije." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "otvaranje %s nije uspelo: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: nije rpm paket (ili manifest paketa)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Pripremam..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Pripremam pakete za instalaciju..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Neuspele zavisnosti:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: nije rpm paket (ili manifest paketa): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s se ne može instalirati\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Pribavljam %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "preskaÄem %s - neuspeo prenos\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "paket %s se ne može premeÅ¡tati\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "greÅ¡ka pri Äitanju iz datoteke %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "datoteka %s zahteva noviju verziju RPM-a\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "„%s“ odreÄ‘uje viÅ¡e paketa:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "ne mogu da otvorim %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Instaliram %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "nije rpm paket" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "nepravilan tip potpisa" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "nepodržana verzija RPM paketa" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "neuspelo Äitanje: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "nije rpm paket" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "ne mogu da napravim bravu za transakciju na %s (%s)\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "Äekam za bravu transakcije %s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "neuspelo otvaranje %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Neuspela promena imena %s u %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Neuspela promena imena %s u %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "razliÄito" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "paket %s je namenjen za %s arhitekturu" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "paket %s je namenjen za %s operativni sistem" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "paket %s je već instaliran" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "putanja %s u paketu %s se ne može premeÅ¡tati" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "datoteka %s je u sukobu izmeÄ‘u pokuÅ¡anih instalacija %s i %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "datoteka %s iz %s instalacije je u sukobu sa datotekom iz paketa %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "paket %s (koji je noviji od %s) je već instaliran" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "paket %s koji se instalira zahteva %%cB na %s sistemu datoteka" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "" +"paket %s koji se instalira zahteva % i-Ävorova na %s sistemu datoteka" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s je potreban za %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(instalirano) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s je u sukobu sa %s%s" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s je potreban za %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "nepoznata greÅ¡ka %d se desila u toku rukovanja paketom %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "nedostaje drugo „:“ kod %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "nedostaje ime arhitekture na %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Nepotpun red podataka na %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "PreviÅ¡e argumenata u redu podataka na %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "LoÅ¡ broj arhitekture/os-a: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Nepotpun podrazumevani red na %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "Premalo argumenata u podrazumevanom redu na %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "nedostaje „:“ (pronaÄ‘eno 0x%02x) kod %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "nedostaje argument za %s na %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "ne mogu da otvorim %s na %s:%d: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "nedostaje arhitektura za %s na %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "loÅ¡a opcija „%s“ kod %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Nepoznati sistem: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Molim vas kontaktirajte %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Ne mogu da otvorim %s za Äitanje: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Ne mogu da promenim korenski direktorijum: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "nije ugraÄ‘ena podrÅ¡ka skriptica\n" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Ne mogu da napravim privremenu datoteku za %s: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Ne mogu da udvojim opisnika datoteke: %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s skriptica nije uspela, waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s skriptica nije uspela, signal %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s skriptica nije uspela, izlazni status %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "Nepoznat oblik" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(instalirano) " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "ne mogu da otvorim Packages bazu podataka u %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "suviÅ¡na „(“ u oznaci paketa: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "nedostaje „(“ u oznaci paketa: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "nedostaje „)“ u oznaci paketa: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: neuspelo Äitanje javnog kljuÄa.\n" + +#: lib/rpmts.c:1034 +#, fuzzy +msgid "transaction" +msgstr "napravi skup transakcija" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "sigh veliÄina(%d): LOÅ E, Äitanje vraćeno %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sigh magic: LOÅ E\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sigh oznake: LOÅ E, broj oznaka(%d) je van dometa\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sigh podaci: LOÅ E, broj bajtova(%d) je van dometa\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sigh blob(%d): LOÅ E, Äitanje vraćeno %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "sigh oznaka[%d]: LOÅ E, oznaka %d vrsta %d pomeraj %d broj %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "sigh uÄitavanje: LOÅ E\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh podloÅ¡ka(%zd): LOÅ E, Äitam %zd bajtova\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh sigSize(%zd): LOÅ E, fstat(2) nije uspeo\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "Nepromenjiva regija zaglavlja se ne može iÅ¡Äitati. OÅ¡tećen paket?\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "MD5 sažetak:" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "SHA1 sažetak zaglavlja:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Zaglavlje " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Potvrdi potpis: LOÅ I PARAMETRI\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Potpis: NEPOZNAT (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s nije uspelo\n" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "nedostaje %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Nezadovoljene zavisnosti za %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "nedostaje { posle %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "nedostaje } posle %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "prazan oblik oznake" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "prazno ime oznake" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "nepoznata oznaka" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] oÄekivan na kraju niza" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "neoÄekivan ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "neoÄekivan }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? oÄekivan u izrazu" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ oÄekivano posle ? u izrazu" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} oÄekivan u izrazu" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": oÄekivan nakon ? podizraza" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ oÄekivano posle : u izrazu" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| oÄekivan na kraju izraza" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "pokazivaÄ niza korišćen sa nizovima razliÄitih veliÄina" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "ne mogu da otvorim %s indeks koristeći db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "nije postavljen dbpath\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "greÅ¡ka(%d) pri dobavljanju „%s“ slogova iz %s indeksa\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: preskaÄem" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "greÅ¡ka(%d) pri zapisivanju sloga #%d u %s\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec nije uspeo: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp nije uspeo: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: preskaÄem" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: oÅ¡tećeno zaglavlje #%u vraćeno -- preskaÄem.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "greÅ¡ka(%d) pri dobavljanju „%s“ slogova iz %s indeksa\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "greÅ¡ka(%d) pri postavljanju zaglavlja #%d sloga za %s uklanjanje\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "greÅ¡ka(%d) pri postavljanju zaglavlja #%d sloga za %s uklanjanje\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: ne mogu da proÄitam zaglavlje na 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "greÅ¡ka(%d) pri postavljanju „%s“ slogova iz %s indeksa\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "greÅ¡ka(%d) pri skladiÅ¡tenju sloga „%s“ u %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "greÅ¡ka(%d) pri uklanjanju sloga „%s“ iz %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "greÅ¡ka(%d) pri zauzimanju novog primerka paketa\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "greÅ¡ka(%d) pri zapisivanju sloga %s u %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "nije postavljen dbpath" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "neuspelo kreiranje direktorijuma %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "zaglavlje #%u u bazi podatak je loÅ¡e -- preskaÄem.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "ne mogu da dodam slog prvobitno na %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"neuspelo ponovno pravljenje baze podataka: osnovna baza podataka je ostala " +"na mestu\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "neuspela zamena stare baze podataka sa novom bazom podataka!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "zameni datoteke u %s sa datotekama iz %s da vratiÅ¡ u prethodno stanje" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "neuspelo uklanjanje direktorijuma %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "baza podataka%d greÅ¡ka(%d) iz %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "baza podataka%d graÅ¡ka(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "ne mogu da dobijem %s katanac na %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "deljeno" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "ekskluzivno" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "nije prepoznata opcija baze podataka: „%s“ zanemareno.\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s ima nepravilnu brojÄanu vrednost, preskoÄeno\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s ima preveliku ili premalu long vrednost, preskoÄeno\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s ima preveliku ili premalu celobrojnu vrednost, preskoÄeno\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Ne mogu da napravim privremenu datoteku za %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "neuspelo otvaranje %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "neuspelo uklanjanje direktorijuma %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Neuspela promena imena %s u %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "neuspelo otvaranje %s: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "neuspelo otvaranje %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "neuspelo otvaranje %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "Makro %%%s ima nezavrÅ¡eno telo\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "Makro %%%s nije mogao da se proÅ¡iri\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "greÅ¡ka: python povratni poziv %s nije uspeo, odustajem!\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktivno %d prazno %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(prazno)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(prazno)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Makro %%%s ima nezavrÅ¡eno telo\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Makro %%%s ima nepravilno ime (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Makro %%%s ima nezavrÅ¡ene opcije\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "Makro %%%s ima prazno telo\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Makro %%%s nije mogao da se proÅ¡iri\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Makro %%%s ima nepravilno ime (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Makro %%%s (%s) nije korišćen ispod nivoa %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Nepoznata opcija %c u %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "NeograniÄeno %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "%% je praćena sa makroom koga nije moguće raÅ¡Älaniti\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "greÅ¡ka pri pravljenju privremene datoteke %s: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Datoteka %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Datoteka %s je manja od %u bajtova\n" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "neuspelo kreiranje direktorijuma" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "nepravilna sintaksa u lua skriptici: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "nepravilna sintaksa u lua skripti: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "lua skripta nije uspela: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "nepravilna sintaksa u lua datoteci: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "lua udica nije uspela: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(bez greÅ¡ke)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "kobna greÅ¡ka: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "greÅ¡ka: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "upozorenje: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "alokacija memorije (%u bajta) je vratila NAL.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "%sV%d %s potpis: %s, ID kljuÄa %s\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(bez greÅ¡ke)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Neuspelo Äitanje datoteke specifikacije iz %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite nije uspelo: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush nije uspelo: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "Ne mogu da napravim cev za potpisivanje: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "neuspelo gpg izvrÅ¡avanje (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg nije uspeo da zapiÅ¡e potpis\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "ne mogu da proÄitam potpis\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "rpmMkTemp nije uspelo\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead nije uspelo: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature nije uspelo: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "otvaranje %s nije uspelo: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: neuspelo Äitanje manifesta: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "nemoj proveravati potpis zaglavlja+tovara" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: previÅ¡e uid-a\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: previÅ¡e uid-a\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: previÅ¡e uid-a\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: previÅ¡e gid-a\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: previÅ¡e gid-a\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: previÅ¡e gid-a\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "zanemari odnos(e) naziva paketa [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "dodaj predložene pakete transakciji" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "nemoj predlagati reÅ¡enje(a) nedostajućim zavisnostima" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Ne mogu da promenim direktorijum na %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps može biti navedena samo tokom pravljenja, ponovnog pravljenja, " +#~ "ponovnog kompiliranja, brisanja, i provere paketa" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) može biti navedena samo tokom instalacije, brisanja, upita, i " +#~ "ponovnog pravljenja baze podataka" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "otkrij sukobe datoteka izmeÄ‘u paketa" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d nije dostupno\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "privremena baza podataka %s već postoji\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "ispitaj/proveri paket(e) sa identifikatorom datoteke" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Neispravna %%_signature specifikacija u makro datoteci.\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: je već potpisan kljuÄem sa ID-om %s, preskaÄem\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Ciljani bafer je preopterećen\n" + +#~ msgid "no files to sign\n" +#~ msgstr "nema datoteka za potpisivanje\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "ne mogu da pristupim datoteci %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign može biti navedena samo tokom pravljenja paketa" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "nemoj proveravati GPG V3 DSA potpis(e)" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "nemoj proveravati PGP V3 RSA/MD5 potpis(e)" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "potpiÅ¡i paket(e) (istovetno sa --resign)" + +#~ msgid "generate signature" +#~ msgstr "napravi potpis" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Neispravna specifikacija %%_potpisa u datoteci makroa\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK neuspeh: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "generiÅ¡i zaglavlja kompatibilna sa rpm4 pakovanjem" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Interna greÅ¡ka pri obradi argumenata (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: neuspelo Äitanje javnog kljuÄa.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: otvaranje %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek nije uspeo: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s nije RPM paket\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: Äitanje zaglavlja iz %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Pravim potpis: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "napravi PGP/GPG potpis" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "nema zadatih datoteka paketa za ponovno pravljenje" + +#~ msgid "no spec files given for build" +#~ msgstr "nema zadatih datoteka specifikacije za pravljenje" + +#~ msgid "no tar files given for build" +#~ msgstr "nema zadatih tar datoteka za pravljenje" + +#~ msgid "%s failed\n" +#~ msgstr "%s nije uspelo\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Dubina rekurzije(%d) je veća od maksimalne(%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: nije prepoznato ime oznake: „%s“ zanemareno\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: preskaÄem" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib pruža)" + +#~ msgid "(cached)" +#~ msgstr "(keÅ¡iranje)" + +#~ msgid "(db files)" +#~ msgstr "(db datoteke)" + +#~ msgid "(db provides)" +#~ msgstr "(db pruža)" + +#~ msgid "(added files)" +#~ msgstr "(dodate datoteke)" + +#~ msgid "(added provide)" +#~ msgstr "(dodata usluga)" + +#~ msgid "url port must be a number\n" +#~ msgstr "url port mora biti broj\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Opcije Å¡etnje kroz stablo datoteka (sa --ftswalk):" + +#~ msgid "follow command line symlinks" +#~ msgstr "prati simboliÄke veze komandne linije" + +#~ msgid "logical walk" +#~ msgstr "logiÄki hod" + +#~ msgid "don't change directories" +#~ msgstr "ne menja direktorijume" + +#~ msgid "don't get stat info" +#~ msgstr "ne dobija statistiÄke informacije" + +#~ msgid "physical walk" +#~ msgstr "fiziÄki hod" + +#~ msgid "return dot and dot-dot" +#~ msgstr "vraća taÄka i taÄka-taÄka" + +#~ msgid "don't cross devices" +#~ msgstr "ne ukrÅ¡ta ureÄ‘aje" + +#~ msgid "return whiteout information" +#~ msgstr "vraća izbrisane informacije" + +#~ msgid "debug package state machine" +#~ msgstr "otkloni greÅ¡ke u maÅ¡ini stanja datoteke paketa" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "ispitaj/proveri paket(e) od Å¡etnje TOP drveta datoteka" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "ispitaj/proveri paket(e) iz sistemske HDLIST" + +#~ msgid "do not order transaction set" +#~ msgstr "nemoj naruÄivati skup transakcija" + +#~ msgid "do not read headers" +#~ msgstr "nemoj Äitati zaglavlja" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Datoteka ne odgovara prefiksu (%s): %s\n" + +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "Ne mogu da pribavim naziv tekuće zavisnosti.\n" + +#~ msgid "Unable to get current dependency epoch-version-release.\n" +#~ msgstr "Ne mogu da pribavim epohu-verziju-izdanje tekuće zavisnosti.\n" + +#~ msgid "File count from file info doesn't match file in container.\n" +#~ msgstr "" +#~ "Broj datoteka iz informacija o datoteci se ne poklapa sa datotekom u " +#~ "držaÄu.\n" + +#~ msgid "Container not of string array data type.\n" +#~ msgstr "DržaÄ nije tipa niza niski.\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "koristi niti za maÅ¡inu stanja datoteke paketa" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: %s skriptica nije uspela (%d), preskaÄem %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() nije uspeo da vrati veliÄinu: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() nije uspeo da vrati taÄke montiranja: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "stat nije uspeo %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "datoteka %s je na nepoznatom ureÄ‘aju\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "koristi niti za maÅ¡inu stanja datoteke" + +#~ msgid "cannot open %s index\n" +#~ msgstr "ne mogu da otvorim %s indeks\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "" +#~ "Nije moguće dobiti bravu na bazi podataka %s, pokuÅ¡avam ponovo... (%d)\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Nije moguće izvrÅ¡iti initDB %s (%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Nije moguće otvoriti bazu podataka: %s\n" + +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Nije moguće utvrditi DB endianess.\n" + +#~ msgid "Unknown system error" +#~ msgstr "Nepoznata sistemska greÅ¡ka" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Makro %%%.*s nije pronaÄ‘en, preskaÄem\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: neuspelo Äitanje *.te polise.\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "red %d: Drugi %%files spisak\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "Zavisnosti „B“ je potrebna epoha (pretpostavljamo istu epohu kao kod " +#~ "„A“)\n" +#~ "\tA = „%s“\tB = „%s“\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Vrsta podatka %d nije podržana\n" + +#~ msgid "line %d: Illegal char '-' in %s: %s\n" +#~ msgstr "red %d: Nedozvoljeni znak „-“ u %s: %s\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "Zaostala sintaksa nije podržana: %s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "uklanjam %s „%s“ iz tsort relacija.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "PETLJA:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "rpmtsOrder nije uspeo, %d delovi su ostali\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "VeliÄina zaglavlja+tovara:" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Opcije izvora (sa --query ili --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp nije pronaÄ‘en: " + +#~ msgid "skipping header with unverifiable V%u signature\n" +#~ msgstr "preskaÄem zaglavlja sa nepotvrÄ‘enim V%u potpisom\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp nije uspeo\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp nije uspeo da zapiÅ¡e potpis\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Morate postaviti „%%_pgp_name“ u makro datoteci\n" + +#~ msgid "Unknown" +#~ msgstr "Nepoznat" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s potpis: %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "%sV%d DSA potpis: %s, ID kljuÄa %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d DSA potpis: %s\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "Pokvaren MD5 sažetak: NEPODRŽANO\n" diff --git a/po/stamp-po b/po/stamp-po new file mode 100644 index 0000000..9788f70 --- /dev/null +++ b/po/stamp-po @@ -0,0 +1 @@ +timestamp diff --git a/po/sv.gmo b/po/sv.gmo new file mode 100644 index 0000000..ba0895c Binary files /dev/null and b/po/sv.gmo differ diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..a8773e1 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,3843 @@ +# Swedish messages for rpm. +# Copyright © 2004, 2007-2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the rpm package. +# Göran Uddeborg , 2004, 2007-2009. +# +# $Revision: 1.92.1.2 $ +# +msgid "" +msgstr "" +"Project-Id-Version: rpm\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2009-01-17 17:20+0100\n" +"Last-Translator: Göran Uddeborg \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM version %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "Copyright © 1998-2002 - Red Hat, Inc.\n" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Detta program kan distribueras fritt enligt villkoren i GNU GPL\n" + +#: cliutils.c:52 +#, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "misslyckades att skapa rör för --pipe: %m\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "exec misslyckades\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "argumentet är inte ett RPM-paket\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "fel vid läsning av pakethuvud\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "kan inte återöppna lasten: %s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "fråga/verifiera paket i grupp" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Frågeflaggor (med -q eller --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Verifieringsflaggor (med -V eller --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Installations-/Uppdaterings-/Raderingsflaggor" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "Gemensamma flaggor för alla rpm-lägen och binärer:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "endast en typ av fråga/verifiering kan utföras åt gången" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "oväntade frågeflaggor" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "oväntat frågeformat" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "oväntad frågekälla" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "enbart ett huvudläge kan anges" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"enbart installation, uppgradering, rmsource och rmspec kan tvingas fram" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "filer kan relokeras endast under paketinstallation" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "kan inte använda --prefix med --relocate eller --excludepath" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate och --excludepath kan endast användas när nya paket installeras" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix kan endast användas när nya paket installeras" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "argument till --prefix måste börja med /" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) kan enbart användas vid paketinstallation" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent kan enbart användas vid paketinstallation" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs kan enbart användas vid paketinstallation" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs kan enbart användas vid paketinstallation" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs kan enbart användas vid paketinstallation" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "enbart en av --excludedocs och --includedocs kan användas" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch kan enbart användas vid paketinstallation" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos kan enbart användas vid paketinstallation" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize kan enbart användas vid paketinstallation" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches kan enbart användas när paket raderas" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles kan enbart användas vid paketinstallation" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb kan enbart användas när paket installeras eller raderas" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"skriptinaktiveringsflaggor kan enbart användas när paket installeras eller " +"raderas" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"utlösarinaktiveringsflaggor kan enbart användas när paket installeras eller " +"raderas" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "--test kan enbart användas när paket installeras, raderas eller byggs" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb kan enbart användas när paket installeras eller raderas" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "argument till --root (-r) måste börja med /" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "inga paket angivna att radera" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "inga paket angivna för installation" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "inga parametrar angivna för fråga" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "inga parametrar angivna för verifiering" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot redan angivet, ignorerar %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"bygg till %prep (packa upp källkod samt applicera patchar) från " + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "bygg till och med %build (%prep, kompilera sedan) från " + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"bygg till och med %install (%prep, %build, installera sedan) från " + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "verifiera %files-sektionen i " + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "bygg käll- och binärpaket från " + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "bygg endast binärpaket från " + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "bygg endast källpaket från " + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"bygg till och med %prep (packa upp källkod samt applicera patchar) från " + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "bygg till och med %build (%prep, kompilera sedan) från " + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"bygg till och med %install (%prep, %build, installera sedan) från " + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "verifiera %files-sektionen från " + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "bygg käll- och binärpaket från " + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "bygg endast binärpaket från " + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "bygg endast källpaket från " + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "bygg binärpaket från " + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"bygg till och med %install (%prep, %build, installera sedan) från " + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "åsidosätt byggrot" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "ta bort byggträd efteråt" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "ignorera ExcludeArch:-direktiv från specfil" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "felsök filtillståndsmaskin" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "utför inga steg i byggnationen" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "verifiera inte byggberoenden" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "generera pakethuvuden kompatibla med (äldre) rpm[23]-paketering" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "acceptera inte översatta \"msgstr\" från specfilen" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "ta bort källkod efteråt" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "ta bort specfil efteråt" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "gå direkt till angivet steg (endast för c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "åsidosätt målplattform" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "Byggflaggor med [ | | ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "Ouppfyllda byggberoenden:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "Kan inte öppna specfilen %s: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "Kunde inte öppna \"tar\"-rör: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "Kunde inte byta namn på %s till %s: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "kunde inte ta status på %s: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "Filen %s är inte en vanlig fil.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "Filen %s tycks inte vara en specfil.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Bygger målplattformar: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "Bygger för målet %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "initiera databas" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "bygg om databasens inverterade listor från installerade pakets huvuden" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "verifiera databasfiler" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Databasflaggor:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "verifiera paketsignatur(er)" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "importera en publik nyckel med skal" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Signaturflaggor:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "inga argument angivna" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "installera paket" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "signera paket (detsamma som --addsign)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "tag bort paketsignaturer" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Signaturflaggor:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "Kunde inte köra %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Du måste sätta \"%%_gpg_name\" i din makrofil\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Ange lösenfras: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Lösenfrasen är ok.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Kontrollen av lösenfrasen misslyckades\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "fråga en specfil" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "fråga en specfil" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "använd följande frågeformat" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Signaturflaggor:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "inga parametrar angivna för fråga" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Kan inte öppna temporär fil.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "Kör(%s): %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "Körning (exec) av %s misslyckades (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "Dålig slutstatus från %s (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"RPM-byggfel:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "syntaxfel vid tolkning av ==\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "syntaxfel vid tolkning av &&\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "syntaxfel vid tolkning av ||\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "tolkningsfel i uttryck\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "ensam (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- endast i tal\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! endast på tal\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "typer måste passa ihop\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / stöds inte för strängar\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- stöds inte för strängar\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& och || stöds inte för strängar\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "syntaxfel i uttryck\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "\"(\" saknas i %s %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "\")\" saknas i %s(%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Ogiltigt %s-element: %s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "%s saknas i %s %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "Annat än blanktecken följer på %s(): %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Felaktig syntax: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "Felaktig rättighetsspecifikation: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "Felaktig specifikation av katalogrättigheter: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "Ovanlig lokallängd: \"%.*s\" i %%lang(%s)\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "Duplicerad lokal %.*s i %%lang(%s)\n" + +#: build/files.c:795 +#, c-format +msgid "Invalid capability: %s\n" +msgstr "Ogiltig förmåga (capability): %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "Stöd för filförmågor (capability) är inte inbyggt\n" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "Endast ett argument till %%docdir\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Två filer på en rad: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Filnamn måste börja med \"/\": %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Kan inte blanda special %%doc med andra former: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "Okänd filkontrollsummealgoritm %u, faller tillbaka på MD5\n" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Filen uppräknad två gånger: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s unlink av %s misslyckades: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Symbolisk länk pekar på BuildRoot: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Filen hittades inte: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Filen hittades inte: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "Filen %s är för stor som last\n" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s: kan inte läsa okänd tagg (%d).\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: läsning av publik nyckel misslyckades.\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s: inte en publik nyckel med skal.\n" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "Makro %%%s misslyckades att expandera\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Filen behöver inledande \"/\": %s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "Matchning inte tillåtet: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Hittade ingen fil vid matchningen: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Hittade ingen fil vid matchningen: %s\n" + +#: build/files.c:1749 +#, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "Kunde inte öppna %%files-fil %s: %m\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "rad: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Felaktig fil: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Felaktig ägare/grupp: %s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "Letar efter opackade fil(er): %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"Installerade (men opaketerade) filer funna:\n" +"%s" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "Bearbetar filer: %s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "skapande av arkiv misslyckades vid fil %s: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "skapande av arkiv misslyckades: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy kunde inte skriva: %s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy kunde inte läsa: %s\n" + +#: build/pack.c:139 +#, c-format +msgid "%s: line: %s\n" +msgstr "%s: rad: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Kunde inte kanonisera värdnamn: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "Kunde inte öppna PreIn-fil: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "Kunde inte öppna PreUn-fil: %s\n" + +#: build/pack.c:242 +#, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "Kunde inte öppna PreTrans-fil: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "Kunde inte öppna PostIn-fil: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "Kunde inte öppna PostUn-fil: %s\n" + +#: build/pack.c:263 +#, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "Kunde inte öppna PostTrans-fil: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "Kunde inte öppna VerifyScript-fil: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Kunde inte öppna Trigger-skriptfil: %s\n" + +#: build/pack.c:371 +#, c-format +msgid "Unknown payload compression: %s\n" +msgstr "Okänd lastkomprimering: %s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "Kan inte skapa oföränderlig huvudregion.\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "Kan inte skriva temporärhuvud\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "Felaktig CSA-data\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "Kan inte läsa om signaturhuvud.\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "Kunde inte öppna %s: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "Kunde inte skriva paket: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "Kan inte läsa signaturen %s: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "Kan inte läsa huvud från %s: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "Kan inte skriva huvud till %s: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "Kan inte läsa last från %s: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "Kan inte skriva last till %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Skrev: %s\n" + +#: build/pack.c:660 +#, c-format +msgid "Executing \"%s\":\n" +msgstr "Kör \"%s\":\n" + +#: build/pack.c:663 +#, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "Körning av \"%s\" misslyckades.\n" + +#: build/pack.c:667 +#, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Paketkontroll \"%s\" misslyckades.\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "Kunde inte generera utfilnamn för paketet %s: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "kan inte skapa %s: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "rad %d: andra %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog-poster måste starta med *\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "ofullständig %%changelog-post\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "felaktigt datum i %%changelog: %s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog är inte i fallande kronologisk ordning\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "saknat namn i %%changelog\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "ingen beskrivning i %%changelog\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "rad %d: Fel i tolkning av %%description: %s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "rad %d: otillåten flagga %s: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "rad %d: För många namn: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "rad %d: Paketet existerar inte: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "rad %d: En andra beskrivning\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "rad %d: Fel i tolkning av %%files: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "rad %d: Fel i tolkning av %%files: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "rad %d: Felaktigt nummer: %s\n" + +#: build/parsePreamble.c:161 +#, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "rad %d: Felaktigt no%s-nummer: %u\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "rad %d: Felaktigt %s-tal: %s\n" + +#: build/parsePreamble.c:238 +#, c-format +msgid "%s %d defined multiple times\n" +msgstr "%s %d definierat flera gånger\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Arkitekturen är utesluten: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Arkitekturen är inte medtagen: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "OS är uteslutet: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "OS är inte medtaget: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "%s-fält måste finnas med i paketet: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Dubbla %s-poster i paketet: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "ogiltig _docdir_fmt: %s\n" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "Kan inte öppna ikon %s: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "Kan inte läsa ikon %s: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "Okänd ikontyp: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "rad %d: Taggen tar endast ett värde: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "rad %d: Otillåtet tecken \"-\" i %s: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "rad %d: Otillåtet tecken \"-\" i %s: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "rad %d: Otillåtet tecken \"-\" i %s: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "rad %d: Felaktig tagg: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "rad %d: Tom tagg: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "rad %d: Prefix får inte sluta med \"/\": %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "rad %d: Docdir måste börja med \"/\": %s\n" + +#: build/parsePreamble.c:732 +#, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "rad %d: Epoch-fält måste vara ett teckenlöst tal: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "rad %d: Felaktigt %s: bestämningar: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "rad %d: Felaktigt BuildArchitecture-format: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "rad %d: Endast noarch-underpaket stöds: %s\n" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Internt fel: felaktig tagg %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "rad %d: Version krävs: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Felaktig paketangivelse %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Paketet existerar redan: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "rad %d: Okänd tagg: %s\n" + +#: build/parsePreamble.c:1041 +#, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "%%{buildroot} fick inte vara tom\n" + +#: build/parsePreamble.c:1045 +#, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "%%{buildroot} kan inte vara \"/\"\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Dålig källa: %s: %s\n" + +#: build/parsePrep.c:73 +#, c-format +msgid "No patch number %u\n" +msgstr "Inget patch-nummer %u\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "%%patch utan motsvarande \"Patch:\"-tagg\n" + +#: build/parsePrep.c:152 +#, c-format +msgid "No source number %u\n" +msgstr "Inget källkodsnummer %u\n" + +#: build/parsePrep.c:154 +msgid "No \"Source:\" tag in the spec file\n" +msgstr "Ingen \"Source:\"-tagg i spec-filen\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Kunde inte hämta nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "Fel i tolkning av %%setup: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "rad %d: Felaktigt argument till %%setup: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "rad %d: Felaktig %%setup-flagga %s: %s\n" + +#: build/parsePrep.c:462 +#, c-format +msgid "%s: %s: %s\n" +msgstr "%s: %s: %s\n" + +#: build/parsePrep.c:475 +#, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "Felaktigt patch-nummer %s: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "rad %d: andra %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"rad %d: Beroenden måste börja alfanumeriskt, med \"_\" eller \"/\": %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "rad %d: Filnamn med version inte tillåtet: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "rad %d: Version krävs: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "rad %d: Felaktigt nummer: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "rad %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "rad %d: utlösare måste ha --: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "rad %d: Fel vid tolkning av %s: %s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "rad %d: internt skript måste sluta med \">\": %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "rad %d: skriptprogram måste börja med \"/\": %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "rad %d: En andra %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "rad %d: ej stött internt skript: %s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "rad %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "Kan inte öppna %s: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "Oavslutat %%if\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean returnerar %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: Fick ett %%else utan något %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: Fick ett %%endif utan något %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "felformaterad %%include-sats\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Hittade inga kompatibla arkitekturer att bygga\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Paketet har ingen %%description: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "Kunde inte öppna \"tar\"-rör: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "Fel i tolkning av %%setup: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "Kör(%s): %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "%s saknas i %s %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "För många argument i datarad vid %s:%d\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Bearbetar filer: %s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "rad %d: Felaktigt nummer: %s\n" + +#: build/rpmfc.c:222 +#, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "Kunde inte öppna rör för %s: %m\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "Kunde inte köra %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "Kunde inte grena (fork) %s: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s misslyckades: %s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "misslyckades att skriva all data till %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "Konvertering av %s till långt heltal misslyckades.\n" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "gpg kunde inte skriva signatur\n" + +#: build/rpmfc.c:951 +#, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "magic_open(0x%x) misslyckades: %s\n" + +#: build/rpmfc.c:958 +#, c-format +msgid "magic_load failed: %s\n" +msgstr "magic_load misslyckades: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "Igenkänning av filen \"%s\" misslyckades: läge %06o %s\n" + +#: build/rpmfc.c:1200 +#, c-format +msgid "Finding %s: %s\n" +msgstr "Letar efter %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "Misslyckades med att hitta %s:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "fråga av specfil %s misslyckades, kan inte tolka\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(fel 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Felaktigt magiskt tal" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Felaktigt/oläsbart huvud" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Huvudstorleken för stor" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Okänd filtyp" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Saknade hårda länkar" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "MD5-summan stämmer inte" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Internt fel" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "Ingen arkivfilen i huvud" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " misslyckades - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "paket %s var redan tillagt, hoppar över %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "paket %s är redan tillagt, ersätter med %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(inte ett tal)" + +# Detta är ett direktiv till strftime(). Och %c skall vara anpassat +# till lokalen. +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %d %b %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(inte base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(felaktig typ)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(inte en klick)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(felaktig xml-typ)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(inte en OpenPGP-signatur)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "ersatt " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "oinstallerat " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "nätdelad " + +#: lib/formats.c:600 +#, fuzzy +msgid "wrong color" +msgstr "fel färg " + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "saknas %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(okänd %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(inte ett tal)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "användare %s finns inte - använder root\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "grupp %s finns inte - använder root\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "arkivfil %s fanns inte i huvudets fillista\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s sparades som %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s rmdir av %s misslyckades: Katalogen är inte tom\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s rmdir av %s misslyckades: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s unlink av %s misslyckades: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s skapades som %s\n" + +#: lib/package.c:192 +#, fuzzy, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "hoppar över paket %s med overifierbar V%u-signatur\n" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "klickstorlek(%d): FEL, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "tagg[%d]: FEL, tagg %d typ %d position %d antal %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "regionposition: FEL, tagg %d typ %d position %d antal %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "regionavslutning: FEL, tagg %d typ %d position %d antal %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "regionstorlek: FEL, ril(%d) > il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hvd SHA1: FEL, ej hex\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hvd RSA: FEL, ej binär\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hvd DSA: FEL, ej binär\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hvdstorlek(%d): FEL, läsning returnerade %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "hvdmagi: FEL\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "hvdtaggar: FEL, antal taggar(%d) utanför intervall\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "hvddata: FEL, antal byte(%d) utanför intervall\n" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hvdklick(%zd): FEL, läsning returnerade %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "hvdlast: FEL\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature misslyckades: %s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Ingen signatur tillgänglig\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: headerRead misslyckades: %s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread misslyckades: %s\n" + +#: lib/package.c:794 +#, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s är en delta-RPM och kan inte installeras direkt\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "Ej stödd last (%s) i paket %s\n" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "fördefiniera MAKRO till värdet UTTR" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "'MAKRO UTTR'" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "definiera MAKRO till värdet UTTR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "skriv ut makroexpansion av UTTR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "'UTTR'" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "läs istället för standardfil(er)" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "verifiera inte paketkontrollsummor" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "verifiera inte databashuvuden när de hämtas" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "verifiera inte paketsignatur(er)" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "skicka standard ut till KMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "KMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "använd ROT som toppnivåkatalog" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "visa kända frågetaggar" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "visa slutliga rpmrc- och makrokonfigurationer" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "visa mindre detaljerad utdata" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "visa mer detaljerad utdata" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "visa vilken version av rpm som används" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "felsök lastfilstillståndsmaskin" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "felsök rpmio I/O" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: flaggtabell felkonfigurerad (%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "uteslutna sökvägar måste börja med /" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "omflyttningar måste börja med /" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "omflyttningar måste innehålla ett =" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "omflyttningar måste ha ett / efter =" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "" +"installera alla filer, även konfigurationer som annars kunde hoppats över" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"ta bort alla paket som matchar (normalt ger det ett fel om " +"anger flera paket)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "relokera filer i ej relokerbart paket" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "skriv beroendecykler som varningar" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "radera (avinstallera) paket" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "installera inte konfigurationsfiler" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "installera inte dokumentation" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "hoppa över filer med inledande " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "kortform för --replacepkgs --replacefiles" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "uppgradera paket om redan installerade" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "" +"skriv ut brädgårdar allteftersom paketet installeras (bra tillsammans med -v)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "verifiera inte paketarkitektur" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "verifiera inte paketets operativsystem" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "kontrollera inte diskutrymme före installation" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "installera dokumentation" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "installera paket" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "uppdatera databasen, men ändra inte filsystemet" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "verifiera inte paketberoenden" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "verifiera inte MD5-summor för filer" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "verifiera inte MD5-summor för filer" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "installera inte filsäkerhetskontexter" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "flytta inte om paketinstallationen för att tillfredsställa beroenden" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "kör inte paketskript" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "utför inte (eventuellt) %%pre-skript" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "utför inte (eventuellt) %%post-skript" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "utför inte (eventuellt) %%preun-skript" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "utför inte (eventuellt) %%postun-skript" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "kör inte skript utlösta av detta paket" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "kör inte %%triggerprein-skript" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "kör inte %%triggerin-skript" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "kör inte %%triggerun-skript" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "kör inte %%triggerpostun-skript" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"uppgradera till en gammal version av paketet (--force vid uppgraderingar gör " +"detta automatiskt)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "skriv procent allt eftersom paketet installeras" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "flytta paketet till , om flyttbart" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "relokera filer från till " + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "ingorera filkonflikter mellan paket" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "ominstallera när paketet redan är installerat" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "installera inte, men tala om ifall det skulle fungera eller inte" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "uppgradera paket" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "fråga/verifiera alla paket" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "rpm signaturkontrolläge" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "fråga/verifiera paket som äger fil" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "fråga/verifiera paket i grupp" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "fråga/verifiera en paketfil" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "fråga/verifiera paket som med paketidentifierare" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "fråga/verifiera paket med huvudidentifierare" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "rpm frågeläge" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "fråga/verifiera en huvudinstans" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "fråga/verifiera paket från installationstransaktion" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "fråga paket utlösta av paketet" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "rpm verifieringsläge" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "fråga/verifiera paket som behöver ett beroende" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "fråga/verifiera paket som tillhandahåller ett beroende" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "mönstermatcha inte argument" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "behandla inte icke-paket-filer som förteckningar" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "lista alla konfigurationsfiler" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "lista alla dokumentationsfiler" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "visa filinformation" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "lista filer i paketet" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "hoppa över %%ghost-filer" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "visa tillstånd för de listade filerna" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "verifiera inte storlekar på filer" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "verifiera inte sökvägen i symboliska länkar" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "verifiera inte ägare till filer" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "verifiera inte grupper till filer" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "verifiera inte modifikationstiden för filer" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "verifiera inte rättigheter för filer" + +#: lib/poptQV.c:230 +msgid "don't verify capabilities of files" +msgstr "verifiera inte förmågor (capabilities) på filer" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "verifiera inte filsäkerhetskontexter" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "verifiera inte filerna i paketet" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "verifiera inte paketberoenden" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "utför inte verifieringsskript" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "arkitektur saknas för %s vid %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "källpaket förväntades, fann binärpaket\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "källpaket innehåller ingen .spec-fil\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "uppackning av arkiv misslyckades%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " vid fil " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s misslyckades på fil %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s misslyckades: %s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "fel format: %s\n" + +#: lib/query.c:127 +msgid "(contains no files)\n" +msgstr "(innehåller inga filer)\n" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "ersatt " + +#: lib/query.c:166 +msgid "not installed " +msgstr "oinstallerat " + +#: lib/query.c:169 +msgid "net shared " +msgstr "nätdelad " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "fel färg " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(ej tillstnd) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(okänd %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "paketet har inte filägare-/-grupplistor\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "paketet har varken filägare eller id-listor\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "grupp %s innehåller inga paket\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "inga paketutlösare %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "felformaterad %s: %s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "inga paket matchar %s: %s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "inget paket behöver %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "inget paket tillhandahåller %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "fil %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "filen %s tillhör inget paket\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "felaktigt paketnummer: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "post %lu kunde inte läsas\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "paket %s är inte installerat\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "okänd tagg: \"%s\"\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: import misslyckades.\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: inte en publik nyckel med skal.\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: importläsning misslyckades(%d).\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: headerRead misslyckades\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "%s: Oföränderlig huvudregion kunde inte läsas. Trasigt paket?\n" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "hoppar över paket %s med overifierbar V%u-signatur\n" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "EJ OK" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "OK" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (SAKNADE NYCKLAR:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (EJ BETRODDA NYCKLAR:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: open misslyckades: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "Kunde inte ändra rotkatalog: %m\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s rmdir av %s misslyckades: Katalogen är inte tom\n" + +#: lib/rpmchroot.c:70 +#, c-format +msgid "Unable to change root directory: %m\n" +msgstr "Kunde inte ändra rotkatalog: %m\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "Kunde inte ändra rotkatalog: %m\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "NEJ " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "JA" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "PreReq:, Provides:, and Obsoletes:-beroenden stödjer versioner." + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "filnamn lagrade som (katNamn,basNam,katIndex)-tupel, inte som sökväg." + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "paketlasten kan komprimeras med bzip2." + +#: lib/rpmds.c:873 +#, fuzzy +msgid "package payload can be compressed using xz." +msgstr "paketlasten kan komprimeras med lzma." + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "paketlasten kan komprimeras med lzma." + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "paketlastfiler har \"./\"-prefix." + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "paketets namn-version-utgåva tillhandahålls inte implicit." + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "huvudtaggar sorteras alltid efter att ha lästs in." + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "skriptinterpretatorn kan använda argument från huvudet." + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "en hårdlänkad filuppsättning får installeras utan att vara komplett." + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "paketskript kan komma åt rpm-databasen under installation." + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "internt stöd för lua-skript." + +#: lib/rpmds.c:903 +#, fuzzy +msgid "file digest algorithm is per package configurable" +msgstr "filkontrollsummealgoritm är konfigurerbar per paket" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "stöd för filförmågor (capabilities) enligt POSIX.1e" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "paketskript kan komma åt rpm-databasen under installation." + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "misslyckades med att öppna %s: %s\n" + +#: lib/rpmgi.c:136 +#, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: inte ett rpm-paket (eller paketspecifikation)\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Förbereder..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Förbereder paket för installation ..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "Ouppfyllda beroenden:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: inte ett rpm-paket (eller paketspecifikation): %s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s kan inte installeras\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "Hämtar %s\n" + +#: lib/rpminstall.c:469 +#, c-format +msgid "skipping %s - transfer failed\n" +msgstr "hoppar över %s - överföring misslyckades\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "paket %s är inte relokerbart\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "fel vid läsning från fil %s\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "filen %s behöver en nyare version av RPM\n" + +#: lib/rpminstall.c:669 +#, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" anger flera paket:\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "kan inte öppna %s: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "Installerar %s\n" + +#: lib/rpmlead.c:101 +msgid "not an rpm package" +msgstr "inte ett rpm-paket" + +#: lib/rpmlead.c:105 +msgid "illegal signature type" +msgstr "ogiltig signaturtyp" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "ej stödd RPM-paketversion" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "läsning misslyckades: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "inte ett rpm-paket" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "det går inte att skapa transaktionslås på %s (%s)\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "väntar på transaktionslås på %s\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "kunde inte öppna %s: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "Kunde inte byta namn på %s till %s: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "Kunde inte byta namn på %s till %s: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "annan" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "paket %s är avsett för en %s-arkitektur" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "paket %s är avsett för ett %s-operativsystem" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "paket %s är redan installerat" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "sökväg %s i paket %s är inte relokerbar" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "fil %s är en konflikt mellan installationsförsök av %s och %s" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "fil %s från installation av %s står i konflikt med filen från paket %s" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "paket %s (som är nyare än %s) är redan installerat" + +#: lib/rpmprob.c:148 +#, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "installation av paket %s kräver % %cB på filsystemet %s" + +#: lib/rpmprob.c:158 +#, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "installation av paket %s kräver % inoder på filsystem %s" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s behövs av %s%s" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(installerat) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s står i konflikt med %s%s" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s behövs av %s%s" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "okänt fel %d uppträdde under behandling av paket %s" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "andra \":\" saknas vid %s:%d\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "arkitekturnamn saknas vid %s:%d\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "Ofullständig datarad vid %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "För många argument i datarad vid %s:%d\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "Felaktigt arkitektur-/os-nummer: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "Ofullständig standardvärdesrad vid %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "För många argument i standardvärdesrad vid %s:%d\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "\":\" saknas (hittade 0x%02x) vid %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "argument till %s saknas vid %s:%d\n" + +#: lib/rpmrc.c:519 +#, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "kan inte öppna %s vid %s:%d: %m\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "arkitektur saknas för %s vid %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "okänd flagga \"%s\" vid %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Okänt system: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "Var god kontakta %s\n" + +#: lib/rpmrc.c:1592 +#, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "Kan inte öppna %s för läsning: %m.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "Kunde inte ändra rotkatalog: %m\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "-skriptstöd är inte inbyggt\n" + +#: lib/rpmscript.c:217 +#, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "Kunde inte skapa temporärfil för %s: %s\n" + +#: lib/rpmscript.c:244 +#, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "Kunde inte duplicera filbeskrivare: %s: %s\n" + +#: lib/rpmscript.c:267 +#, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s-skript misslyckades, waitpid(%d) rk %d: %s\n" + +#: lib/rpmscript.c:271 +#, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s-skript misslyckades, signal %d\n" + +#: lib/rpmscript.c:274 +#, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s-skript misslyckades, slutstatus %d\n" + +#: lib/rpmtd.c:254 +msgid "Unknown format" +msgstr "Okänt format" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(installerat) " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "kan inte öppna paketdatabas i %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "överflödigt \"(\" i paketetikett: %s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "\"(\" saknas i etikett: %s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "\")\" saknas i paketetikett: %s\n" + +#: lib/rpmts.c:290 +#, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: misslyckades att läsa publik nyckel.\n" + +#: lib/rpmts.c:1034 +#, fuzzy +msgid "transaction" +msgstr "skapa transaktionsmängd" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "sighstorlek(%d): FEL, läsning returnerade %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sighmagi: FEL\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sightaggar: FEL, antal taggar(%d) utanför intervall\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sighdata: FEL, antal byte(%d) itanför intevall\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sighklick(%d): FEL, läsning returnerade %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "sightagg[%d]: FEL, tagg %d typ %d position %d antal %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "sighlast: FEL\n" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sighutfyllnad(%zd): FEL, läste %zd byte\n" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh sigSize(%zd): FEL, fstat(2) misslyckades\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "Oföränderlig huvudregion kunde inte läsas. Trasigt paket?\n" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "MD5-summa:" + +#: lib/signature.c:436 +msgid "Header SHA1 digest:" +msgstr "Huvudets SHA1-summa:" + +#: lib/signature.c:489 +msgid "Header " +msgstr "Huvud " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "Verifiera signatur: FELAKTIGA PARAMETRAR\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Signatur: OKÄND (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s misslyckades\n" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "saknas %c %s" + +#: lib/verify.c:428 +#, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "Ouppfyllda beroenden för %s:\n" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "{ saknas efter %" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "} saknas efter %{" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "tomt taggformat" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "tomt taggnamn" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "okänd tagg" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] förväntades vid slutet på vektor" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "oväntad ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "oväntad }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? förväntades i uttryck" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ förväntades efter ? i uttryck" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} förväntades i uttryck" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": förväntades efter ? i deluttryck" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ förväntades efter : i uttryck" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| förväntades vid slutet på uttryck" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "vektoriterator använd med vektor av annan storlek" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "kan inte öppna %s-indexet med db%d - %s (%d)\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "ingen dbpath har satts\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "fel(%d) när \"%s\"-poster hämtades från %s-indexet\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader: hoppar över" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "fel(%d) när post nr. %d sparades i %s\n" + +#: lib/rpmdb.c:1325 +#, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: regexec misslyckades: %s\n" + +#: lib/rpmdb.c:1506 +#, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: regcomp misslyckades: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator: hoppar över" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: skadat huvud nr. %u hämtat -- hoppar över.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "fel(%d) när \"%s\"-poster hämtades från %s-indexet\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "fel(%d) när huvudpost nr. %d för %s skulle tas bort\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "fel(%d) när huvudpost nr. %d för %s skulle tas bort\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: kan inte läsa huvud vid 0x%x\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "fel(%d) när \"%s\"-poster från %s-indexet sattes\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "fel(%d) när post \"%s\" sparades i %s\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "fel(%d) när post \"%s\" togs bort från %s\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "fel(%d) vid allokering av ny paketinstans\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "fel(%d) när post %s sparades i %s\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "ingen dbpath har satts" + +#: lib/rpmdb.c:2863 +#, c-format +msgid "failed to create directory %s: %s\n" +msgstr "misslyckades att skapa katalogen %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "huvud nr. %u i databasen är felaktigt -- hoppar över.\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "kan inte lägga till post ursprungligen vid %u\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "kunde inte bygga om databasen: orginaldatabasen finns kvar\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "kunde inte ersätta gammal databas med ny databas!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "byt ut filer i %s med filer från %s för att återställa" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "kunde inte ta bort katalogen %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d-fel(%d) från %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d-fel(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "kan inte få %s lås på %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "delat" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "uteslutande" + +#: lib/backend/db3.c:590 +#, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "okänd db-flagga: \"%s\" ignorerad\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s har ogiltigt ogiltigt numeriskt värde, hoppar över\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s har för stort eller för litet \"long\"-värde, hoppar över\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s har för stort eller för litet heltalsvärde, hoppar över\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "Kunde inte skapa temporärfil för %s: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "kunde inte öppna %s: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "kunde inte ta bort katalogen %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "Kunde inte byta namn på %s till %s: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "kunde inte öppna %s: %s\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "kunde inte öppna %s: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "kunde inte öppna %s: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "Makro %%%s har oavslutad kropp\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "Makro %%%s misslyckades att expandera\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "fel: pythonåteranrop %s misslyckades, avbryter!\n" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== aktiva %d tomma %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(tom)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(tom)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "Makro %%%s har oavslutad kropp\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "Makro %%%s har otillåtet namn (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "Makro %%%s har oavslutade flaggor\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "makro %%%s har tom kropp\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "Makro %%%s misslyckades att expandera\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "Makro %%%s har otillåtet namn (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "Makro %%%s (%s) användes inte under nivå %d\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "Okänd flagga %c i %s(%s)\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "Oavslutad %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Ett %% följs av ett makro som inte kan tolkas\n" + +#: rpmio/rpmfileutil.c:277 +#, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "fel när tämporärfil %s skapades: %m\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "Fil %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "Filen %s är mindre än %u byte\n" + +#: rpmio/rpmfileutil.c:755 +msgid "failed to create directory" +msgstr "misslyckades att skapa katalog" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "felaktig syntax i lua-skript: %s\n" + +#: rpmio/rpmlua.c:496 +#, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "felaktig syntax i lua-skript: %s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, c-format +msgid "lua script failed: %s\n" +msgstr "lua-skript misslyckades: %s\n" + +#: rpmio/rpmlua.c:515 +#, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "felaktig syntax i lua-fil: %s\n" + +#: rpmio/rpmlua.c:683 +#, c-format +msgid "lua hook failed: %s\n" +msgstr "lua-hake misslyckades: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(inget fel)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "ödesdigert fel: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "fel: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "varning: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "minnesallokering (%u byte) returnerade NULL.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "%sV%d %s-signatur: %s, nyckel-id %s\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(inget fel)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "Kunde inte läsa specfil från %s\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite misslyckades: %s\n" + +#: sign/rpmgensig.c:98 +#, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fflush misslyckades: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "Det gick inte att skapa ett rör för signering: %m" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "gpg exec misslyckades (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "gpg kunde inte skriva signatur\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "kan inte läsa signaturen\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +msgid "rpmMkTemp failed\n" +msgstr "rpmMkTemp misslyckades\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead misslyckades: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature misslyckades: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "misslyckades med att öppna %s: %s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: läsning av paketlista misslyckades: %s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "verifiera inte huvud+lastsignatur" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: för många uid\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: för många uid\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: för många uid\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: för många gid\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: för många gid\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: för många gid\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "ignorera paketnamnsrelation(er) [%d]\t%s -> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "lägg till föreslagna paket till transaktion" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "föreslå inte lösning(ar) på saknade beroenden" + +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "Kunde inte ändra katalog till %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps kan enbart användas när paket byggs, byggs om, kompileras om, " +#~ "installeras, raderas eller verifieras" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) kan enbart användas när paket installeras, raderas, frågas " +#~ "eller databasen byggs om" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "upptäck filkonflikter mellan paket" + +#~ msgid "dbiOpen: dbapi %d not available\n" +#~ msgstr "dbiOpen: dbapi %d är inte tillgängligt\n" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "tillfällig databas %s existerar redan\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "fråga/verifiera paket med filidentifierare" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Felaktig %%_signature-spec i makrofil.\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: var redan signerad av nyckel-ID %s, hoppar över\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Målbuffert översvämmad\n" + +#~ msgid "no files to sign\n" +#~ msgstr "inga filer att signera\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "kan inte komma åt filen %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign kan enbart användas vid paketbyggnation" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "verifiera inte GPG V3 DSA-signatur(er)" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "verifiera inte PGP V3 RSA/MD5-signatur(er)" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "signera paket (detsamma som --resign)" + +#~ msgid "generate signature" +#~ msgstr "generera signatur" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Felaktig %%_signature-spec i makrofil\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK-fel: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "generera huvuden kompatibla med rpm4-paketering" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "Internt fel i argumenthantering (%d) :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: läsning av publik nyckel misslyckades.\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: öppna %s: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek misslyckades: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s är inte ett RPM-paket\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: läser huvud från %s\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Genererar signatur: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "generera en PGP/GPG-signatur" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "inga paketfiler angivna för ombyggnation" + +#~ msgid "no spec files given for build" +#~ msgstr "inga specfiler angivna för byggnation" + +#~ msgid "no tar files given for build" +#~ msgstr "inga tar-filer angivna för byggnation" + +#~ msgid "%s failed\n" +#~ msgstr "%s misslyckades\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Rekursionsdjup(%d) större än max(%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: okänt taggnamn: \"%s\" ignorerat\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd: hoppar över" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib tillhandahåller)" + +#~ msgid "(cached)" +#~ msgstr "(cachad)" + +#~ msgid "(db files)" +#~ msgstr "(db-filer)" + +#~ msgid "(db provides)" +#~ msgstr "(db tillhandahåller)" + +#~ msgid "(added files)" +#~ msgstr "(lade till filer)" + +#~ msgid "(added provide)" +#~ msgstr "(lade till tillhandahållande)" + +#~ msgid "url port must be a number\n" +#~ msgstr "url-port måste vara ett tal\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "Flaggor för traversering av filträd (med --ftswalk):" + +#~ msgid "follow command line symlinks" +#~ msgstr "följ kommandoradssymlänkar" + +#~ msgid "logical walk" +#~ msgstr "genomlöp logiskt" + +#~ msgid "don't change directories" +#~ msgstr "byt inte katalog" + +#~ msgid "don't get stat info" +#~ msgstr "hämta inte statusinfo" + +#~ msgid "physical walk" +#~ msgstr "genomlöp fysiskt" + +#~ msgid "return dot and dot-dot" +#~ msgstr "returnera punkt och punkt-punkt" + +#~ msgid "don't cross devices" +#~ msgstr "gå inte mellan enheter" + +#~ msgid "return whiteout information" +#~ msgstr "returnera uttsuddningsinformation" + +#~ msgid "debug package state machine" +#~ msgstr "felsök pakettillståndsmaskin" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "fråga/verifiera paket från TOP-trädtraversering" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "fråga/verifiera paket från system-HDLIST" + +#~ msgid "do not order transaction set" +#~ msgstr "ordna inte transaktionsmängd" + +#~ msgid "do not read headers" +#~ msgstr "läs inte huvuden" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Filen matchar inte prefixet (%s): %s\n" + +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "Kunde inte ta reda på aktuellt beroendenamn.\n" + +#~ msgid "Unable to get current dependency epoch-version-release.\n" +#~ msgstr "Kunde inte få aktuell beroende-epok-version-utgåva.\n" + +#~ msgid "File count from file info doesn't match file in container.\n" +#~ msgstr "Filantal från filinformation stämmer inte med filbehållare.\n" + +#~ msgid "Container not of string array data type.\n" +#~ msgstr "Behållare inte av datatypen strängvektor.\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "använd trådar för pakettillståndsmaskin" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: %s-skript misslyckades (%d), hoppar över %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() kunde inte returnera storlek: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() kunde inte returnera monteringspunkter: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "kunde inte ta status på %s: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "filen %s är på en okänd enhet\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "använd trådar för filstillståndsmaskin" + +#~ msgid "cannot open %s index\n" +#~ msgstr "kan inte öppna %s-indexet\n" + +#~ msgid "Unable to get lock on db %s, retrying... (%d)\n" +#~ msgstr "Kunde inte ta lås på db %s, försöker igen... (%d)\n" + +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "Kan inte initDB %s (%d)\n" + +#~ msgid "Unable to open database: %s\n" +#~ msgstr "Kan inte öppna databasen: %s\n" + +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Kan inte avgöra DB-byteordning.\n" + +#~ msgid "Unknown system error" +#~ msgstr "Okänt systemfel" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "Inget makro %%%.*s hittat, hoppar över\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: *.te policyläsning misslyckades.\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "rad %d: En andra %%files-lista\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "\"B\"-beroendet behöver en epok (antar samma epok som \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "Datatyp %d stöds inte\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "Föråldrad syntax stöds inte: %s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "tar bort %s \"%s\" från tsort-relationer.\n" + +#~ msgid "LOOP:\n" +#~ msgstr "LOOP:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "rpmtsOrder misslyckades, %d element återstår\n" + +#~ msgid "Header+Payload size:" +#~ msgstr "Huvud+laststorlek:" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Källflaggor (med --query eller --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "pgp hittades inte: " + +#~ msgid "skipping header with unverifiable V%u signature\n" +#~ msgstr "hoppar över huvud med overifierbar V%u-signatur\n" + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "kan inte öppna filen %s: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp misslyckades\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp misslyckades att skriva en signatur\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Du måste sätta \"%%_pgp_name\" i din makrofil\n" + +#~ msgid "Unknown" +#~ msgstr "Okänd" + +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "%sV%d %s-signatur: %s\n" + +#~ msgid "%sV%d DSA signature: %s, key ID %s\n" +#~ msgstr "%sV%d DSA-signatur: %s, nyckel-id %s\n" + +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "%sV%d DSA-signatur: %s\n" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "Trasig MD5-summa: STÖDS EJ\n" diff --git a/po/tr.gmo b/po/tr.gmo new file mode 100644 index 0000000..102812a Binary files /dev/null and b/po/tr.gmo differ diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..17b598f --- /dev/null +++ b/po/tr.po @@ -0,0 +1,4290 @@ +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.0.3\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2001-07-05 08:02+300\n" +"Last-Translator: Nilgun Belma Buguner \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-9\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 0.9.2alpha\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "dosya %s: %s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM Sürüm %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, fuzzy, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "Bu program GNU GPL koþullarýna uygun olarak serbestçe daðýtýlabilir." + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "arþiv oluþturulamadý: %s\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "icra baþarýsýz\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "argüman bir RPM paketi deðil\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "paketten baþlýk okunmasý sýrasýnda hata oluþtu\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "payload %s tekrar açýlamýyor\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "gruptaki paketleri sorgular/denetler" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "Sorgulama seçenekleri (-q ya da --query ile)" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "Denetleme seçenekleri (-V ya da --verify ile)" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "Kurma/Güncelleme/Kaldýrma seçenekleri:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +#, fuzzy +msgid "Common options for all rpm modes and executables:" +msgstr "Tüm rpm kipleri için ortak seçenekler:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "bir anda sadece bir tarz sorgulama/denetleme yapýlabilir" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "beklenmeyen sorgulama bayraklarý" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "beklenmeyen sorgulama biçemi" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "beklenmeyen sorgulama kaynaðý" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "sadece bir ana kip belirtilebilir" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "" +"sadece kaynak ve spec silme iþlemleri, kurma, güncelleme iþlemleri için " +"zorlanabilir" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "" +"dosyalar sadece paket kurulumu sýrasýnda yeni yerlerine yerleþtirilebilir" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "" +"--relocate ve --excludepath sadece yeni paket kurulumunda kullanýlabilir" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix sadece yeni paketlerin kurulmasý sýrasýnda kullanýlabilir" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "--prefix ile belirtilenler '/' ile baþlamalý" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "--excludedocs ve --includedocs bir arada kullanýlamaz" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles sadece paket kurulumu sýrasýnda kullanýlabilir" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "" +"--justdb sadece paket kurulumu ve kaldýrýlmasý sýrasýnda kullanýlabilir" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"betik iptal etme seçenekleri sadece paketin kurulmasý ve silinmesi sýrasýnda " +"kullanýlabilir" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "" +"tetikleme iptal seçenekleri sadece paketin kurulmasý ve silinmesi sýrasýnda " +"kullanýlabilir" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "" +"--test sadece paket kurulumu, kaldýrýlmasý ve oluþturulmasý iþlemlerinde " +"kullanýlabilir" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "" +"--justdb sadece paket kurulumu ve kaldýrýlmasý sýrasýnda kullanýlabilir" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "--root (-r) ile verilenler '/' ile baþlamalý" + +#: rpmqv.c:256 +#, fuzzy +msgid "no packages given for erase" +msgstr "yüklenecek paket(ler) belirtilmedi" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "yüklenecek paket(ler) belirtilmedi" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "sorgulama için hiç argüman belirtilmedi" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "denetleme için hiç argüman belirtilmedi" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot zaten belirtilmiþ, %s yoksayýlýyor\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"ndan %prep adýmý sayesinde oluþturulur (kaynak paketi açýlýr " +"ve yamalar uygulanýr)" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"ndan %build adýmý sayesinde oluþturulur (%prep, sonra da " +"derlenir)" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"ndan %install adýmý sayesinde oluþturulur (%prep, %build, sonra " +"da kurulum)" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "ndan %files bölümünü denetler" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "kaynak ve çalýþtýrýlabilir paketleri ndan oluþturur" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "çalýþtýrýlabilir paketi sadece ndan oluþturur" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "kaynak paketi sadece ndan oluþturur" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "" +"nden %prep adýmý sayesinde oluþturulur (kaynak paketi açýlýr ve " +"yamalar uygulanýr)" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "" +"nden %build adýmý sayesinde oluþturulur (%prep, sonra da derleme)" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "" +"nden %install adýmý sayesinde oluþturulur (%prep, %build, sonra " +"da kurulur)" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "nden %files bölümünü denetler" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "kaynak ve çalýþtýrýlabilir paketleri nden oluþturur" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "çalýþtýrýlabilir paketi sadece nden oluþturur" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "kaynak paketi sadece nden oluþturur" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "çalýþtýrýlabilir paketi nden oluþturur" + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "" +"nden %install adýmý sayesinde oluþturulur (%prep, %build, " +"sonra da kurulur)" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "build root'a zorlar" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "iþlem sonunda paket oluþturma aðacýný siler" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "spec dosyasýndaki ExcludeArch: yönergeleri yoksayýlýyor" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "hata ayýklama dosyasý durum motoru" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "oluþumun herhangi bir adýmý icra edilmez" + +#: rpmbuild.c:180 +#, fuzzy +msgid "do not verify build dependencies" +msgstr "paket baðýmlýlýklarýný denetlemez" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "paket baþlýklarýný (eski) rpm[23] paketleme ile uyumlu üretir" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "spec dosyasý içindeki i18n msgstr'leri kabul edilmez" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "iþlem sonunda kaynaklarý siler" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "iþlem sonunda spec dosyasýný siler" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "doðrudan belirtilen adýma atlar (sadece c ve i için)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "hedef platforma zorlar" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "" +"[ | | ] ile paketleme seçenekleri:" + +#: rpmbuild.c:231 +#, fuzzy +msgid "Failed build dependencies:\n" +msgstr "iþlem durdu, önce baðýmlý paketler kurulmalý:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "%s spec dosyasý açýlamadý: %s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "tar veriyolu açýlamadý: %m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "%s paketinden spec dosyasý okunamadý\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "%s %s olarak deðiþtirilemedi: %m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "%s durum bilgileri alýnamadý: %m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "%s bir normal bir dosya deðil.\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "%s bir spec dosyasý gibi görünmüyor.\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "Hedef platformlar derleniyor: %s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "%s için derleniyor\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "veritabanýný baþlangýç durumuna getirir" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "kurulu paket baþlýklarýndan veritabaný listelerini yeniden oluþturur" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "veritabaný dosyaralýný doðrular" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "Veritabaný seçenekleri:" + +#: rpmkeys.c:23 +#, fuzzy +msgid "verify package signature(s)" +msgstr "paket imzasýný denetler" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "Ýmza seçenekleri:" + +#: rpmkeys.c:61 rpmsign.c:144 +#, fuzzy +msgid "no arguments given" +msgstr "sorgulama için hiç argüman belirtilmedi" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "paketi kurar" + +#: rpmsign.c:27 +#, fuzzy +msgid "sign package(s) (identical to --addsign)" +msgstr "paketi imzalar (mevcut imza kaldýrýlýr)" + +#: rpmsign.c:29 +#, fuzzy +msgid "delete package signatures" +msgstr "paket imzasýný denetler" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "Ýmza seçenekleri:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, fuzzy, c-format +msgid "Could not exec %s: %s\n" +msgstr "%s icra edilemedi: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "Makro dosyanýzda \"%%_pgp_name\" tanýmlanmýþ olmalý\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "Anahtar parolasýný girin: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "Anahtar parolasý doðru.\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "Anahtar parolasý kontrolü baþarýsýz\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "bir spec dosyasýný sorgular" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "bir spec dosyasýný sorgular" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "izleyen sorgulama biçimini kullanýr" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "Ýmza seçenekleri:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "sorgulama için hiç argüman belirtilmedi" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "Geçici dosya açýlamadý.\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "%s icra ediliyor: %s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "%s 'in icrasý baþarýsýz (%s): %s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "%s çýkýþýnda hata (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"RPM derleme hatalarý:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "== çözümlenirken sözdizimi hatasý bulundu\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "&& çözümlenirken sözdizimi hatasý bulundu\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "|| çözümlenirken sözdizimi hatasý bulundu\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "ifadede çözümleme hatasý\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "uyumsuz (\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "- sadece sayýlarda\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "! sadece sayýlarda\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "türler eþleþmeli\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "* / dizgelerde desteklenmez\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "- dizgelerde desteklenmez\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "&& ve || dizgelerde desteklenmez\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "ifadede sözdizimi hatasý\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "%s içinde '(' yok: %s\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "%s içinde ')' yok: (%s\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "Andaç %s geçersiz: %s\n" + +#: build/files.c:443 +#, fuzzy, c-format +msgid "Missing %s in %s %s\n" +msgstr "%s içinde '(' yok: %s\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "%s() boþluksuz yazýlmýþ: %s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "Sözdizimi hatasý: %s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "mode spec hatalý: %s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "dirmode spec hatalý: %s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "yerel uzunluðu hatalý: \"%.*s\" (%%lang(%s))\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "%.*s yereli %%lang(%s) içinde tekrarlanmýþ\n" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "Andaç %s geçersiz: %s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "%%docdir için sadece tek argüman\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "Bir satýrda 2 dosya: %s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "Dosya \"/\" ile baþlamalý: %s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "Özel %%doc ile diðer formlar karýþtýrýlamaz: %s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "Dosya iki kere gösterildi: %s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s / %s bað kaldýrýlamadý: %s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "Sembolik bað BuildRoot gösteriyor: %s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "Dosya bulunamadý: %s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "Dosya bulunamadý: %s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "" + +#: build/files.c:1605 +#, fuzzy, c-format +msgid "%s: public key read failed.\n" +msgstr "%s: readLead baþarýsýz\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "%%%s makrosu geniþletmede baþarýsýz\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "Dosya \"/\" ile içermeli: %s\n" + +#: build/files.c:1688 +#, fuzzy, c-format +msgid "Glob not permitted: %s\n" +msgstr "satýr %d: Dosya adý uygun deðil: %s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "Dosya glob tarafýndan bulunamadý: %s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "Dosya glob tarafýndan bulunamadý: %s\n" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "%%files dosya %s dosyasýnda açýlamadý: %s\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "satýr: %s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "Dosya hatalý: %s: %s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "Kullanýcý/grup hatalý: %s\n" + +#: build/files.c:2095 +#, fuzzy, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "arþiv paketi açýlýrken baþarýsýz%s%s: %s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "Ýþlenen dosyalar: %s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "%s dosyasýnda arþiv oluþturulamadý: %s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "arþiv oluþturulamadý: %s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy yazma hatasý:%s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy okuma hatasý: %s\n" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "satýr: %s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "Böyle bir makina yok: %s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "PreIn dosyasý açýlamadý: %s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "PreUn dosyasý açýlamadý: %s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "PreIn dosyasý açýlamadý: %s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "PostIn dosyasý açýlamadý: %s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "PostUn dosyasý açýlamadý: %s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "PostIn dosyasý açýlamadý: %s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "VerifyScript dosyasý açýlamadý: %s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "Trigger betik dosyasý açýlamadý: %s\n" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "bilinmeyen kýsayol simgesi türü: %s\n" + +#: build/pack.c:395 +#, fuzzy +msgid "Unable to create immutable header region.\n" +msgstr "%s'den baþlýk okunamadý: %s\n" + +#: build/pack.c:415 +#, fuzzy +msgid "Unable to write temp header\n" +msgstr "%s'e baþlýk yazýlamadý: %s\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "CSA verisi geçersiz\n" + +#: build/pack.c:491 +#, fuzzy +msgid "Unable to reload signature header.\n" +msgstr "%s'den baþlýk okunamadý: %s\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "%s açýlamadý: %s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "paket yazýlamadý: %s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "sigtarget %s açýlamadý: %s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "%s'den baþlýk okunamadý: %s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "%s'e baþlýk yazýlamadý: %s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "%s'den payload okunamadý: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "%s'e payload yazýlamadý: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "Yazýldý: %s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "%s icra ediliyor: %s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "%s 'in icrasý baþarýsýz (%s): %s\n" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "Anahtar parolasý kontrolü baþarýsýz\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "%s paket dosyasý için çýktý dosya adý üretilemedi: %s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "%s dosyasý oluþturulamýyor: %s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "%d satýr: %s saniye\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog girdi * ile baþlamalý\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "%%changelog girdi eksik\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "%%changelog içinde tarih hatasý: %s\n" + +#: build/parseChangelog.c:159 +#, fuzzy, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog azalan kronolojik sýrada deðil\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "%%changelog içinde isim yok\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "%%changelog içinde açýklama yok\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "satýr %d: %%description ayrýþtýrýlýrken hata: %s \n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "satýr %d: %s seçeneði hatalý: %s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "satýr %d: Ýsim sayýsý fazla: %s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "satýr %d: Paket yok: %s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "satýr %d: Ýkinci açýklama\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "satýr %d: %%files ayrýþtýrýlýrken hata: %s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "satýr %d: %%files ayrýþtýrýlýrken hata: %s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "satýr %d: Numara hatalý: %s\n" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "satýr %d: Hatalý no%s numarasý: %d\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "satýr %d: Hatalý %s numarasý: %s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "\"%s\" birden fazla paketi tanýmlýyor\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "Mimari dýþlandý: %s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "Mimari içerilmedi: %s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "OS dýþlandý: %s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "OS içerilmedi: %s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "Pakette %s alan mevcut olmalý: %s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "Pakette %s girdi tekrarlanmýþ: %s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "%s kýsayol simgesi açýlamadý: %s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "%s kýsayol simgesi okunamadý: %s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "bilinmeyen kýsayol simgesi türü: %s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "satýr %d: Etiket sadece tek dizgecik alýr: %s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "satýr %d: %s içinde '-' karakteri kuraldýþý: %s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "satýr %d: %s içinde '-' karakteri kuraldýþý: %s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "satýr %d: %s içinde '-' karakteri kuraldýþý: %s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "satýr %d: Etiket bozuk: %s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "satýr %d: Etiket boþ: %s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "satýr %d: Önekler \"/\" ile bitemez: %s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "satýr %d: Docdir '/' ile baþlamalý: %s\n" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "satýr %d: Epoch/Serial alaný bir sayý olmalý: %s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "satýr %d: %s hatalý: niteleyiciler: %s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "satýr %d: BuildArchitecture biçimi hatalý: %s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "Ýçsel hata: %d etiketi sahte\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "satýr %d: Sürüm gerekli: %s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "Paket özellikleri hatalý: %s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "Paket zaten var: %s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "satýr %d: Bilinmeyen etiket: %s\n" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "BuildRoot \"/\" olamaz: %s\n" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "BuildRoot \"/\" olamaz: %s\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "Kaynak hatalý: %s: %s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "%d yama numarasý yok\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "%d kaynak kodu numarasý yok\n" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "kaynak paketi .spec dosyasý içermiyor\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "Kaynak kodu olmayan %s sunucudan indirilemedi: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "%%setup çözümlenirken hata: %s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "satýr %d: %%setup argumaný hatalý: %s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "satýr %d: %%setup seçeneði %s hatalý: %s\n" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "dosya %s: %s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "geçersiz paket numarasý: %s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "satýr %d: %%prep saniye\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "" +"satýr %d: Baðýmlýlýk kýsaltmalarý bir alfanümerik, '_' veya '/' ile " +"baþlamalý: %s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "satýr %d: Sürüm içeren dosya adý uygun deðil: %s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "satýr %d: Sürüm gerekli: %s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "satýr %d: Numara hatalý: %s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "satýr %d: %s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "satýr %d: tetikleyiciler -- içermeli: %s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "satýr %d: %s çözümlenirken hata oluþtu: %s\n" + +#: build/parseScript.c:214 +#, fuzzy, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "satýr %d: betik programý '/' ile baþlamalý: %s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "satýr %d: betik programý '/' ile baþlamalý: %s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "satýr %d: %s saniye\n" + +#: build/parseScript.c:304 +#, fuzzy, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "satýr %d: %%description ayrýþtýrýlýrken hata: %s \n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "satýr %d: %s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "%s açýlamadý: %s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "%%if kapanmamýþ\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean %d ile döner\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d: %%if'siz bir %%else alýndý\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d: %%if'siz bir %%endif alýndý\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "%%include deyimi bozuk\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "Kurgulamak için uyumlu mimari yok\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "Paket %%description içermiyor: %s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "%s paketinden spec dosyasý okunamadý\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "%s paketinden spec dosyasý okunamadý\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "%s paketinden spec dosyasý okunamadý\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "tar veriyolu açýlamadý: %m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "%%setup çözümlenirken hata: %s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "%s icra ediliyor: %s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "%s içinde '(' yok: %s\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "%s:%d - veri satýrýnda çok fazla argüman\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "Ýþlenen dosyalar: %s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "satýr %d: Numara hatalý: %s\n" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "%s ayrýlamadý: %s\n" + +#: build/rpmfc.c:247 +#, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "%s icra edilemedi: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "%s ayrýlamadý: %s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s baþarýsýz\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "tüm veri %s içine yazýlamadý\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "imzanýn yazýlmasý sýrasýnda gpg hata verdi\n" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "%s açýlamadý: %s\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "%s / %s dizinin silinmesi baþarýsýz: %s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "%s aranýyor: (%s kullanarak)...\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, c-format +msgid "Failed to find %s:\n" +msgstr "%s bulunamadý:\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "%s spec dosyasýnýn sorgulanmasý baþarýsýz, çözümlenemiyor\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(hata 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "Magic hatalý" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "Hatalý/okunamayan baþlýk" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "Baþlýk çok uzun" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "Bilinmeyen dosya türü" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "Sabit bað(lar) eksik" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "MD5 toplamý çeliþkili" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "Ýç hata" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " baþarýsýz - " + +#: lib/depends.c:244 +#, fuzzy, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "%s zaten kurulu" + +#: lib/depends.c:245 +#, fuzzy, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "%s zaten kurulu" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(bir sayý deðil)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "" + +#: lib/formats.c:340 +#, fuzzy +msgid "(not base64)" +msgstr "(bir sayý deðil)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "" + +#: lib/formats.c:376 lib/formats.c:462 +#, fuzzy +msgid "(not a blob)" +msgstr "(bir sayý deðil)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "" + +#: lib/formats.c:485 +#, fuzzy +msgid "(not an OpenPGP signature)" +msgstr "tüm PGP imzalarýný atlar" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "normal " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "yerine " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "yüklenmedi " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "að paylaþýmlý " + +#: lib/formats.c:600 +msgid "wrong color" +msgstr "" + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "eksik %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(bilinmeyen %3d)" + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(bir sayý deðil)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "kullanýcý %s yok - root kullanýlacak\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "grup %s yok - root kullanýlacak\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s %s olarak kaydedildi\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s / %s dizin silinemedi - Dizin boþ deðil\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s / %s dizinin silinmesi baþarýsýz: %s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s / %s bað kaldýrýlamadý: %s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s %s olarak oluþturuldu\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/package.c:498 +#, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, fuzzy, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s: rpmReadSignature baþarýsýz\n" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s: Ýmza bulundurmuyor\n" + +#: lib/package.c:631 +#, fuzzy, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s: readLead baþarýsýz\n" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread baþarýsýz: %s\n" + +#: lib/package.c:794 +#, fuzzy, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s yüklenemedi\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "" + +#: lib/poptALL.c:167 +#, fuzzy +msgid "print macro expansion of EXPR" +msgstr "+ için makro açýlýmýný gösterir" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +#, fuzzy +msgid "read instead of default file(s)" +msgstr "öntanýmlý makro dosyasý yerine okunur" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "" + +#: lib/poptALL.c:174 +#, fuzzy +msgid "don't verify package digest(s)" +msgstr "paket baðýmlýlýklarý doðrulanmaz" + +#: lib/poptALL.c:176 +#, fuzzy +msgid "don't verify database header(s) when retrieved" +msgstr "paket mimarisi denetlenmez" + +#: lib/poptALL.c:178 +#, fuzzy +msgid "don't verify package signature(s)" +msgstr "paket imzasýný denetler" + +#: lib/poptALL.c:181 +#, fuzzy +msgid "send stdout to CMD" +msgstr "standart çýktýyý 'a gönderir" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "" + +#: lib/poptALL.c:187 +#, fuzzy +msgid "use ROOT as top level directory" +msgstr "Üst düzey dizin olarak kullanýlýr" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "tanýmlanmýþ sorgulama etiketlerini gösterir" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "son rpmrc ve makro yapýlandýrmasýný gösterir" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "daha az ayrýntýlý çýktý saðlar" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "daha ayrýntýlý çýktý saðlar" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "Kullanýlan RPM sürümünü verir" + +#: lib/poptALL.c:208 +#, fuzzy +msgid "debug payload file state machine" +msgstr "hata ayýklama dosyasý durum motoru" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "rpmio G/Ç hata kontrolu" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "dýþlanan dosya yolu / ile baþlamalý" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "yeniden konumlandýrma iþlemleri / ile baþlamalý" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "yeniden konumlandýrma iþlemleri = içermelidir" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "yeniden konumlandýrma için = den sonra bir / gerekir" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "yapýlandýrmalarda atlanmýþ bile olsa tüm dosyalarý kurar" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +" ile eþlenen tüm paketleri kaldýrýr( ile çok sayýda paket " +"belirtilmiþse normalde bir hata oluþur)" + +#: lib/poptI.c:123 +#, fuzzy +msgid "relocate files in non-relocatable package" +msgstr "yeniden konumlanamayan paketin dosyalarýný yeniden konumlandýrýr" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "paketi kaldýrýr" + +#: lib/poptI.c:131 +msgid "+" +msgstr "+" + +#: lib/poptI.c:134 lib/poptI.c:171 +#, fuzzy +msgid "do not install configuration files" +msgstr "tüm yapýlandýrma dosyalarýný listeler" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "belgeleri kurmaz" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr " ile baþlayan dosyalarý atlar " + +#: lib/poptI.c:140 +msgid "" +msgstr "" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "--replacepkgs --replacefiles için kýsaltma" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "paket(ler) kurulu ise paket(ler)i günceller" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "paketin kurulma sürecini gösteren imler basar (-v ile)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "paket mimarisi denetlenmez" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "paketin ait olduðu iþletim sistemini doðrulamaz" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "yüklemeden önce yeterli disk alaný kontrolu yapmaz" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "paket ile gelen belgeleri kurar" + +#: lib/poptI.c:164 +#, fuzzy +msgid "install package(s)" +msgstr "paketi kurar" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "veri tabanýný günceller, ama dosya sistemini deðiþtirmez" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "paket baðýmlýlýklarýný denetlemez" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "dosyalarýn MD5 özümlemesi doðrulanmaz" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "dosyalarýn MD5 özümlemesi doðrulanmaz" + +#: lib/poptI.c:183 +#, fuzzy +msgid "don't install file security contexts" +msgstr "tüm yapýlandýrma dosyalarýný listeler" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "paket kurulum sýrasýný baðýmlýlýklara göre düzenlemez" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "paket betikleri çalýþtýrýlmaz" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "%%pre betiði (varsa) çalýþtýrýlmaz" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "%%post betiði (varsa) çalýþtýrýlmaz" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "%%preun betiði (varsa) çalýþtýrýlmaz" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "%%postun betiði (varsa) çalýþtýrýlmaz" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "bu paket tarafýndan tetiklenen hiç bir betik çalýþtýrýlmaz" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "hiçbir %%triggerprein betiði çalýþtýrýlmaz" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "hiçbir %%triggerin betiði çalýþtýrýlmaz." + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "hiçbir %%triggerun betiði çalýþtýrýlmaz." + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "hiçbir %%triggerpostun betiði çalýþtýrýlmaz." + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "" +"paketin eski bir sürüme güncellenmesini saðlar (--force ayný iþi otomatik " +"yapar)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "kurulumun geliþimi yüzde olarak gösterilir" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "eðer deðitirilebiliyorsa paketin yerini 'e deðiþtirir" + +#: lib/poptI.c:234 +msgid "" +msgstr "" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "dosyalarý dizininden kaldýrýp dizinine yerleþtirir" + +#: lib/poptI.c:237 +msgid "=" +msgstr "=" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "paketi yeniden kurar" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "yükleme yapmaz, sadece çalýþýp çalýþmayacaðýný belirtir" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "paket günceller" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "tüm paketleri sorgular/doðrular" + +#: lib/poptQV.c:69 +#, fuzzy +msgid "rpm checksig mode" +msgstr "rpm denetleme kipi" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "dosyayý içeren paketleri sorgular/denetler" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "gruptaki paketleri sorgular/denetler" + +#: lib/poptQV.c:75 +#, fuzzy +msgid "query/verify a package file" +msgstr "tüm paketleri sorgular/doðrular" + +#: lib/poptQV.c:78 +#, fuzzy +msgid "query/verify package(s) with package identifier" +msgstr "dosyayý içeren paketleri sorgular/denetler" + +#: lib/poptQV.c:80 +#, fuzzy +msgid "query/verify package(s) with header identifier" +msgstr "dosyayý içeren paketleri sorgular/denetler" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "rpm sorgulama kipi" + +#: lib/poptQV.c:85 +#, fuzzy +msgid "query/verify a header instance" +msgstr "dosyayý içeren paketleri sorgular/denetler" + +#: lib/poptQV.c:87 +#, fuzzy +msgid "query/verify package(s) from install transaction" +msgstr "gruptaki paketleri sorgular/denetler" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "paket tarafýndan tetiklenen paketleri sorgular" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "rpm denetleme kipi" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "bir baðýmlýlýk gerektiren paketleri sorgular/denetler" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "bir baðýmlýlýðý saðlayan paketleri sorgular/denetler" + +#: lib/poptQV.c:98 +#, fuzzy +msgid "do not glob arguments" +msgstr "sorgulama için hiç argüman belirtilmedi" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "tüm yapýlandýrma dosyalarýný listeler" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "tüm belgeleme dosyalarýný gösterir" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "temel dosya bilgilerini gösterir" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "paketteki dosyalarý gösterir" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "%%ghost dosyalarý atlanýr" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "listelenmiþ dosyalarýn durumunu gösterir" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "dosyalarýn uzunluklarý doðrulanmaz" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "dosyalarýn sembolik bað dosya yollarý doðrulanmaz" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "dosyalarýn sahipleri doðrulanmaz" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "dosyalarýn gruplarý doðrulanmaz" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "dosyalarýn deðiþiklik zamanlarý doðrulanmaz" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "dosyalarýn kipleri doðrulanmaz" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "dosyalarýn uzunluklarý doðrulanmaz" + +#: lib/poptQV.c:233 +#, fuzzy +msgid "don't verify file security contexts" +msgstr "paketteki dosyalar doðrulanamaz" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "paketteki dosyalar doðrulanamaz" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "paket baðýmlýlýklarý doðrulanmaz" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +#, fuzzy +msgid "don't execute verify script(s)" +msgstr "(varsa) %verifyscript çalýþtýrýlmaz" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "%s için %s:%d'de eksik mimari\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "kaynak paketi gerekirken çalýþtýrýlabilir paketi bulundu\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "kaynak paketi .spec dosyasý içermiyor\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "arþiv paketi açýlýrken baþarýsýz%s%s: %s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " dosyada " + +#: lib/psm.c:967 +#, fuzzy, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s açýlamadý: %s\n" + +#: lib/psm.c:970 +#, fuzzy, c-format +msgid "%s failed: %s\n" +msgstr "%s baþarýsýz\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "biçem yanlýþ: %s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(hiç dosya içermiyor)" + +#: lib/query.c:160 +msgid "normal " +msgstr "normal " + +#: lib/query.c:163 +msgid "replaced " +msgstr "yerine " + +#: lib/query.c:166 +msgid "not installed " +msgstr "yüklenmedi " + +#: lib/query.c:169 +msgid "net shared " +msgstr "að paylaþýmlý " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "" + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(durumsuz) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(bilinmeyen %3d)" + +#: lib/query.c:198 +#, fuzzy +msgid "package has not file owner/group lists\n" +msgstr "paket ne dosya sahibi ne de kimlik listesi içeriyor\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "paket ne dosya sahibi ne de kimlik listesi içeriyor\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "%s grubu hiç paket içermiyor\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "%s tetikleyen paket yok\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, fuzzy, c-format +msgid "malformed %s: %s\n" +msgstr "%s okunamadý: %s.\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, fuzzy, c-format +msgid "no package matches %s: %s\n" +msgstr "%s tetikleyen paket yok\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "%s gerektiren paket yok\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "%s saðlayan paket yok\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "dosya %s: %s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "%s dosyasý, hiç bir pakete ait deðil\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "geçersiz paket numarasý: %s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "%u. kayýt okunamadý\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "%s paketi kurulu deðil\n" + +#: lib/query.c:492 +#, fuzzy, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "bilinmeyen etiket" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s: readLead baþarýsýz\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s: readLead baþarýsýz\n" + +#: lib/rpmchecksig.c:91 +#, fuzzy, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s: readLead baþarýsýz\n" + +#: lib/rpmchecksig.c:116 +#, fuzzy, c-format +msgid "%s: headerRead failed\n" +msgstr "%s: readLead baþarýsýz\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "TAMAM DEÐÝL" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "Tamam" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (EKSÝK ANAHTARLAR:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (GÜVENCESÝZ ANAHTARLAR:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s: açýlamadý: %s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "%s dizininin silinmesi baþarýsýz: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s / %s dizin silinemedi - Dizin boþ deðil\n" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "%s dizininin silinmesi baþarýsýz: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "%s dizininin silinmesi baþarýsýz: %s\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "HAYIR " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "EVET" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "" + +#: lib/rpmds.c:873 +msgid "package payload can be compressed using xz." +msgstr "" + +#: lib/rpmds.c:876 +msgid "package payload can be compressed using lzma." +msgstr "" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "" + +#: lib/rpmds.c:899 +#, fuzzy +msgid "internal support for lua scripts." +msgstr "- dizgelerde desteklenmez\n" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "%s zaten kurulu" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "%s açýlamadý: %s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s tetikleyen paket yok\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "Hazýrlanýyor..." + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "Kurulacak paketler hazýrlanýyor..." + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +#, fuzzy +msgid "Failed dependencies:\n" +msgstr "baðýmlýlýklarda hata; gerekli paketler:\n" + +#: lib/rpminstall.c:305 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s tetikleyen paket yok\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s yüklenemedi\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "%s alýnýyor\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "%s atlanýyor - aktarým baþarýsýz - %s\n" + +#: lib/rpminstall.c:536 +#, fuzzy, c-format +msgid "package %s is not relocatable\n" +msgstr "%s paketi yeniden konumlandýrýlamaz\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "%s dosyasýndan okuma hatalý\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "%s dosyasý RPM'nin daha yeni bir sürümünü gerektiriyor\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "\"%s\" birden fazla paketi tanýmlýyor\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "%s açýlamadý: %s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "%s kuruluyor\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "argüman bir RPM paketi deðil\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s: Ýmza bulundurmuyor\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "okuma baþarýsýz: %s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "argüman bir RPM paketi deðil\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "%s kilit %s/%s'den alýnamadý\n" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "%s kilit %s/%s'den alýnamadý\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "%s açýlamadý: %s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "%s %s olarak deðiþtirilemedi: %m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "%s %s olarak deðiþtirilemedi: %m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "" + +#: lib/rpmprob.c:115 +#, fuzzy, c-format +msgid "package %s is intended for a %s architecture" +msgstr "%s farklý bir mimari için" + +#: lib/rpmprob.c:120 +#, fuzzy, c-format +msgid "package %s is intended for a %s operating system" +msgstr "%s farklý bir iþletim sistemi için" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "%s zaten kurulu" + +#: lib/rpmprob.c:128 +#, fuzzy, c-format +msgid "path %s in package %s is not relocatable" +msgstr "%s dosya yolu %s paketinde yeniden konumlandýrýlamaz" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "%s dosyasý kalkýþýlan %s ve %s kurulumlarý arasýnda çeliþiyor" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "%s dosyasýnýn %s kurulumu %s kurulumundaki dosya ile çeliþiyor" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "%s paketi zaten yüklü (%s sürümünden daha yeni)" + +#: lib/rpmprob.c:148 +#, fuzzy, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "%s kurulumu %%cb gerektiriyor (%s dosya sisteminde)" + +#: lib/rpmprob.c:158 +#, fuzzy, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "%s kurulumu % i-düðüm gerektiriyor (%s dosya sisteminde)" + +#: lib/rpmprob.c:162 +#, fuzzy, c-format +msgid "%s is needed by %s%s" +msgstr " %s-%s-%s için gerekli\n" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +#, fuzzy +msgid "(installed) " +msgstr "yüklenmedi " + +#: lib/rpmprob.c:167 +#, fuzzy, c-format +msgid "%s conflicts with %s%s" +msgstr " %s-%s-%s ile çeliþiyor\n" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr " %s-%s-%s için gerekli\n" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "anlaþýlamayan %d hatasý, %s paketi iþlenirken saptandý" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "%s:%d - ikinci ':' eksik\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "%s:%d - mimari ismi eksik\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "%s:%d - veri satýrý tamamlanmamýþ\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "%s:%d - veri satýrýnda çok fazla argüman\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "arch/os numarasý hatalý: %s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "%s:%d - öntanýmlý satýr tamamlanmamýþ\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "%s:%d - öntanýmlý satýrda çok fazla argüman\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "(0x%02x bulundu) %s:%d de ':' yok\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "%s için %s:%d de argüman eksik\n" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "%s dosyasý açýlamýyor (%s:%d): %s\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "%s için %s:%d'de eksik mimari\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "seçenek '%s' (%s:%d) de hatalý\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "Bilinmeyen sistem: %s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "%s okuma eriþimi için açýlamadý: %s.\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "%s dizininin silinmesi baþarýsýz: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "%s ayrýlamadý: %s\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "%s ayrýlamadý: %s\n" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s: %s betiði baþarýsýz (%d), %s-%s-%s atlanýyor\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s betiðinin %s-%s-%s'den icrasý baþarýsýz, çýkýþta durum %d\n" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s betiðinin %s-%s-%s'den icrasý baþarýsýz, çýkýþta durum %d\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "bilinmeyen etiket" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "yüklenmedi " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "%s de Paket veritabaný açýlamadý\n" + +#: lib/rpmts.c:193 +#, fuzzy, c-format +msgid "extra '(' in package label: %s\n" +msgstr "geçersiz paket numarasý: %s\n" + +#: lib/rpmts.c:211 +#, fuzzy, c-format +msgid "missing '(' in package label: %s\n" +msgstr "%s içinde '(' yok: %s\n" + +#: lib/rpmts.c:219 +#, fuzzy, c-format +msgid "missing ')' in package label: %s\n" +msgstr "geçersiz paket numarasý: %s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s: readLead baþarýsýz\n" + +#: lib/rpmts.c:1034 +msgid "transaction" +msgstr "" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "" + +#: lib/signature.c:211 +#, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "" + +#: lib/signature.c:227 +#, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +msgid "MD5 digest:" +msgstr "" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "Baþlýk SHA1 özümlemesi doðrulanmaz" + +#: lib/signature.c:489 +msgid "Header " +msgstr "" + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "" + +#: lib/signature.c:523 +#, fuzzy, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "Ýmza: boyut(%d)+iz(%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s baþarýsýz\n" + +#: lib/verify.c:378 +#, fuzzy, c-format +msgid "missing %c %s" +msgstr "eksik %s" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "%s-%s-%s için tatmin edici olmayan baðýmlýlýklar: " + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "%% den sonraki { yok" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "%%{ den sonraki } yok" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "etiket biçemi boþ" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "etiket ismi boþ" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "bilinmeyen etiket" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "dizinin sonunda ] gerekli" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "beklenmeyen ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "beklenmeyen }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "ifade içerisinde ? gerekli" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "ifade içerisinde ? dan sonra { gerekli" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "ifade içinde } gerekli" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr "? alt ifadesinden sonra : gerekli" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "ifade içersinde : den sonra { gerekli" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "ifadenin sonunda | gerekli" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "%s indeksi db%d - %s (%d) kullanarak açýlamadý\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "belirtilmiþ bir dbpath deðeri yok\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "hata(%d): \"%s\" kayýt %s indeksinden alýnýyor\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "" + +#: lib/rpmdb.c:1228 +#, fuzzy, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "hata(%d): %s kayýt %s içine yazýlýyor\n" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s: Fseek baþarýsýz: %s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s: açýlamadý: %s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "" + +#: lib/rpmdb.c:1807 +#, fuzzy, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb: bozuk baþlýk örneði #%u alýndý, atlanýyor.\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "hata(%d): \"%s\" kayýt %s indeksinden alýnýyor\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "hata(%d): \"%s\" kayýt %s indeksinden alýnýyor\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "hata(%d): \"%s\" kayýt %s indeksinden alýnýyor\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: 0x%x de baþlýk okunamadý\n" + +#: lib/rpmdb.c:2434 +#, fuzzy, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "hata(%d): \"%s\" kayýt %s indeksinden alýnýyor\n" + +#: lib/rpmdb.c:2453 +#, fuzzy, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "hata(%d): %s kayýt %s içine yazýlýyor\n" + +#: lib/rpmdb.c:2463 +#, fuzzy, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "hata(%d) %s kaydýn %s dosyasýndan silinmesi\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "yeni paket örneðini tutma hatasý(%d)\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "hata(%d): %s kayýt %s içine yazýlýyor\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "belirtilmiþ bir dbpath yok" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "%s dizininin silinmesi baþarýsýz: %s\n" + +#: lib/rpmdb.c:2897 +#, fuzzy, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "veritabanýndaki %u. kayýt hatalý -- atlanýyor\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "kayýt özgün olarak %u e eklenemedi\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "" +"veritabaný yeniden oluþturulamadý: mevcut veritabaný deðiþmeden\n" +"yerinde býrakýldý\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "eski veritabanýnýn yenisiyle deðiþtirilirmesi baþarýsýz!\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "kurtarmak için %s içindeki dosyalar %s deki dosyalarla deðiþtiriliyor" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "%s dizininin silinmesi baþarýsýz: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "db%d hata(%d) %s'den: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "db%d hata(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "%s kilit %s/%s'den alýnamadý\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "paylaþýmlý" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "baðdaþýk" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "doðrulandý db endeks %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "tanýnmayan db seçeneði: \"%s\" yoksayýldý\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s geçersiz sayýsal deðer içeriyor, atlandý\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s ya çok büyük ya da çok küçük 'long' deðer içeriyor, atlandý\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s ya çok büyük ya da çok küçük 'integer' deðer içeriyor, atlandý\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "%s paketinden spec dosyasý okunamadý\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "%s ayrýlamadý: %s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "%s paketinden spec dosyasý okunamadý\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "%s oluþturulamadý: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "Sunucuya baðlanýlamadý" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "%s açýlamadý: %s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "%s dizininin silinmesi baþarýsýz: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "%s %s olarak deðiþtirilemedi: %m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "%s okunamadý: %s.\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "%s açýlamadý: %s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "%s oluþturulamadý: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "%%%s makrosunun gövdesi sonlandýrýlmamýþ\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "%%%s makrosu geniþletmede baþarýsýz\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "%s paketinden spec dosyasý okunamadý\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== %d etkin %d boþ\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(boþ)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(boþ)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "%%%s makrosunun gövdesi sonlandýrýlmamýþ\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "%%%s makrosunun ismi kuraldýþý (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "%%%s makrosunu seçenekleri sonlandýrýlmamýþ\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "%%%s makrosu boþ\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "%%%s makrosu geniþletmede baþarýsýz\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "%%%s makrosunun ismi kuraldýþý (%%define)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "%%%s (%s) makrosu %d seviyenin altýnda kullanýlmadý\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "%c seçeneði %s(%s) de anlaþýlamadý\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "%c sonlandýrýlmamýþ: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "Bir ayrýþtýrýlamayan makro tarafýndan bir %% izlendi\n" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "%s geçici dosyasý oluþturulurken hata\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "%s dosyasý: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "%s dosyasý %u bayttan küçük\n" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "%s dizininin silinmesi baþarýsýz: %s\n" + +#: rpmio/rpmlua.c:480 +#, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "- dizgelerde desteklenmez\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: Fwrite baþarýsýz: %s\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "geçersiz paket numarasý: %s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s: Fseek baþarýsýz: %s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(hata yok)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "ölümcül hata: " + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "hata: " + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "uyarý: " + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "bellek ayrýlýrken (%u bayt) NULL döndü.\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr "Ýmza yok\n" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(hata yok)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "%s paketinden spec dosyasý okunamadý\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite baþarýsýz: %s\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s: Fseek baþarýsýz: %s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, fuzzy, c-format +msgid "gpg exec failed (%d)\n" +msgstr "icra baþarýsýz\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "imzanýn yazýlmasý sýrasýnda gpg hata verdi\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "imza okunamadý\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "makeTempFile baþarýsýz\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s: writeLead baþarýsýz: %s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s: rpmWriteSignature baþarýsýz: %s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "%s açýlamadý: %s\n" + +#: tools/rpmgraph.c:143 +#, fuzzy, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: bildirge okuma baþarýsýz: %s\n" + +#: tools/rpmgraph.c:220 +#, fuzzy +msgid "don't verify header+payload signature" +msgstr "paket imzasýný denetler" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname: çok fazla kullanýcý-kimliði\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS: çok fazla kullanýcý-kimliði\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS: çok fazla kullanýcý-kimliði\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname: çok fazla grup-kimliði\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS: çok fazla grup-kimliði\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS: çok fazla grup-kimliði\n" + +#, fuzzy +#~ msgid "add suggested packages to transaction" +#~ msgstr "gruptaki paketleri sorgular/denetler" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "%s icra edilemedi: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "" +#~ "--nodeps sadece paket oluþturma, yeniden oluþturma, yeniden derleme, " +#~ "kurulum, kaldýrma ve denetleme iþlemlerinde kullanýlabilir" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "" +#~ "--root (-r) sadece kurulum, kaldýrma, sorgulama ve yeniden veritabaný " +#~ "oluþturma iþlemlerinde kullanýlabilir" + +#, fuzzy +#~ msgid "detect file conflicts between packages" +#~ msgstr "yeniden konumlanamayan paketin dosyalarýný yeniden konumlandýrýr" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "geçici veritabaný %s zaten mevcut\n" + +#, fuzzy +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "dosyayý içeren paketleri sorgular/denetler" + +#~ msgid "" +#~ msgstr "" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "Makro dosyasýndaki %%_signature spec geçersiz.\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "Hedef tampon bellek taþtý\n" + +#~ msgid "no files to sign\n" +#~ msgstr "imzalanacak dosya yok\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "%s dosyasý bulunamýyor\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign sadece paket oluþturulurken kullanýlabilir" + +#, fuzzy +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "Baþlýk SHA1 özümlemesi doðrulanmaz" + +#, fuzzy +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "dosyalarýn MD5 özümlemesi doðrulanmaz" + +#, fuzzy +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "paketi imzalar (mevcut imza kaldýrýlýr)" + +#~ msgid "generate signature" +#~ msgstr "imza üretir" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "Makro dosyasýnda %%_signature spec geçersiz\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "TIMECHECK baþarýsýz: %s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "rpm4 paketleme ile uyumlu baþlýklarý üretir" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "(%d) argümaný iþlenirken iç hata oluþtu :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s: readLead baþarýsýz\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM: %s açýlýrken: %s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s: Fseek baþarýsýz: %s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM: %s bir RPM paketi deðil\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPM: %s baþlýðý okunuyor\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "Ýmza üretiliyor: %d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "PGP/GPG imzasý üretir" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "yeniden oluþturmak için paket dosyalarý belirtilmemiþ" + +#~ msgid "no spec files given for build" +#~ msgstr "oluþturma için gerekli spec dosyasý belirtilmemiþ" + +#~ msgid "no tar files given for build" +#~ msgstr "oluþturma için gereken tar dosyalarý belirtilmemiþ" + +#~ msgid "%s failed\n" +#~ msgstr "%s baþarýsýz\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "Yineleme derinliði(%d) mümkün miktardan(%d) büyük\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit: tanýmlanmamýþ etiket adý: \"%s\" yoksayýldý\n" + +#, fuzzy +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdb: bozuk baþlýk örneði #%u alýndý, atlanýyor.\n" + +#, fuzzy +#~ msgid "(rpmlib provides)" +#~ msgstr "%s: %-45s EVET (rpmlib saðlar)\n" + +#, fuzzy +#~ msgid "(db files)" +#~ msgstr "db dosyasý %s hatalý\n" + +#, fuzzy +#~ msgid "(db provides)" +#~ msgstr "%s: %-45s EVET (db saðlar)\n" + +#, fuzzy +#~ msgid "(added files)" +#~ msgstr "db dosyasý %s hatalý\n" + +#, fuzzy +#~ msgid "(added provide)" +#~ msgstr "%s: %-45s EVET (önlem eklendi)\n" + +#~ msgid "url port must be a number\n" +#~ msgstr "url portu bir sayý olmalý\n" + +#, fuzzy +#~ msgid "don't change directories" +#~ msgstr "%s dizini oluþturuluyor\n" + +#, fuzzy +#~ msgid "debug package state machine" +#~ msgstr "hata ayýklama dosyasý durum motoru" + +#, fuzzy +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "gruptaki paketleri sorgular/denetler" + +#, fuzzy +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "gruptaki paketleri sorgular/denetler" + +#, fuzzy +#~ msgid "do not read headers" +#~ msgstr "%s: 0x%x de baþlýk okunamadý\n" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "Dosya önek (%s) ile uyumsuz: %s\n" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "%s dizininin silinmesi baþarýsýz: %s\n" + +#, fuzzy +#~ msgid "use threads for package state machine" +#~ msgstr "hata ayýklama dosyasý durum motoru" + +#, fuzzy +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s: %s betiði baþarýsýz (%d), %s-%s-%s atlanýyor\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() sonuçlanan hatalý boyut nedeniyle baþarýsýz: %s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "" +#~ "mntctl() sonuçlanan hatalý baðlantý yerleri nedeniyle baþarýsýz: %s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "stat %s baþarýsýz: %s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "%s dosyasýnýn bulunduðu aygýt anlaþýlamadý\n" + +#, fuzzy +#~ msgid "use threads for file state machine" +#~ msgstr "hata ayýklama dosyasý durum motoru" + +#~ msgid "cannot open %s index\n" +#~ msgstr "%s indeksi açýlamadý\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "%s açýlamadý: %s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "%s açýlamadý: %s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "Geçici dosya açýlamadý.\n" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "Bilinmeyen sistem: %s\n" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "%%%.*s makrosu bulunamadý, atlanýyor\n" + +#, fuzzy +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: readLead baþarýsýz\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "satýr %d: Ýkinci %%files listesi\n" + +#, fuzzy +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "\"B\" baðýmlýlýðý bir dönemsellik gerektirir (tabii ki \"A\" da)\n" +#~ "\tA %s\tB %s\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "%d veri türü desteklenmiyor\n" + +#, fuzzy +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "tsort baðýntýlarýndan %s-%s-%s \"%s\" kaldýrýlýyor\n" + +#~ msgid "LOOP:\n" +#~ msgstr "ÇEVRÝM:\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "Baþlýk çok uzun" + +#, fuzzy +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "Denetleme seçenekleri (-V ya da --verify ile)" + +#~ msgid "pgp not found: " +#~ msgstr "pgp bulunamadý: " + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "%s dosyasý açýlamadý: %s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp hata verdi\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp imzasýnýn yazýlmasý baþarýsýz\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "Makro dosyanýzda \"%%_pgp_name\" belirtmelisiniz\n" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "bilinmeyen etiket" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr "Ýmza yok\n" + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr "Ýmza yok\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot \"/\" olamaz: %s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "Spec dosyasý BuildRoot kullanamaz\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "spec dosyasýndaki i18n iletilerine bakar" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "(eski) rpm[23] paketleme ile uyumlu baþlýklarý üretir" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "%%%s dosyasý oluþturulamýyor: %s\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "%%%s dosyasýna yazýlamaz %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "%s sorgulanamýyor: %s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "icra baþarýsýz\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "URL arabellek kullanýmý hata kontrolu" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "spec dosyasýndaki i18n bölümleri yerine kullanýlýr" + +#, fuzzy +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "%s dizininde rpm veritabaný açýlamýyor\n" + +#~ msgid "Success" +#~ msgstr "Baþarýlý" + +#~ msgid "Bad server response" +#~ msgstr "Sunucudan kötü yanýt" + +#~ msgid "Server I/O error" +#~ msgstr "Sunucu G/Ç hatasý" + +#~ msgid "Server timeout" +#~ msgstr "Sunucu zaman aþýmý" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "Sunucu makina adresi bulunamadý" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "Sunucu makina ismi bulunamadý" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "Sunucuya veri baðlantýsý kurulamadý" + +#~ msgid "I/O error to local file" +#~ msgstr "Yerel dosyaya G/Ç hatasý" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "Karþý sunucuyu pasif kipe sokma ayarlarýnda hata" + +#~ msgid "File not found on server" +#~ msgstr "Dosya sunucuda bulunamadý" + +#~ msgid "Abort in progress" +#~ msgstr "Kesme iþlemi sürüyor" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "Bilinmeyen ya da beklenmeyen hata" + +#, fuzzy +#~ msgid "File tree walk options:" +#~ msgstr "Ýmza seçenekleri:" + +#, fuzzy +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: açýlamadý: %s\n" + +#, fuzzy +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s: readLead baþarýsýz\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "%s geniþletmesi %s:%d \"%s\" de baþarýsýz \n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "%s geniþletilemiyor\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "%s okunamýyor, EV çok büyük\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s / %s dizinin silinmesi baþarýsýz: %s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "%%docdir için hit sýnýrý\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "satýr %d: %%patch -b'ye argüman gerekli: %s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "satýr %d: %%patch -z'ye argüman gerekli: %s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "satýr %d: %%patch -p'nin argümaný hatalý: %s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "satýr %d: %%patch -p'ye argüman gerekli: %s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "satýr %d: %%patch -p'nin argümaný hatalý: %s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "Yamalar çok fazla!\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "satýr %d: %%patch argüman hatasý: %s\n" + +#, fuzzy +#~ msgid "debug option/argument processing" +#~ msgstr "(%d) argümaný iþlenirken iç hata oluþtu :-(\n" + +#~ msgid "skip %%license files" +#~ msgstr "%%license dosyalarý atlanýr" + +#~ msgid "skip %%readme files" +#~ msgstr "%%readme dosyalarý atlanýr" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "okuma baþarýsýz: %s (%d)\n" + +#, fuzzy +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "tekrarlama zamaný bozuk" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "" +#~ "ismi deðiþtirilerek alt dizine kaydedilmek suretiyle silinen dosyalarý " +#~ "kaydeder" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "yeniden paketleme sýrasýnda silinen paket dosyalarýný kaydeder" + +#, fuzzy +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "" +#~ "yeni paket(ler) kaldýrýlýr, geriye dönük eski paket(ler) yeniden kurulur" + +#~ msgid "" +#~ msgstr "" + +#, fuzzy +#~ msgid "Unable to reload signature header\n" +#~ msgstr "%s'den baþlýk okunamadý: %s\n" + +#, fuzzy +#~ msgid "Repackaging..." +#~ msgstr "Hazýrlanýyor..." + +#, fuzzy +#~ msgid "Upgrading..." +#~ msgstr "Hazýrlanýyor..." + +#, fuzzy +#~ msgid "Upgrading packages..." +#~ msgstr "paket günceller" + +#, fuzzy +#~ msgid "\tRemoving %s:\n" +#~ msgstr "%s alýnýyor\n" + +#, fuzzy +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "paketten baþlýk okunmasý sýrasýnda hata oluþtu\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== tsort baðýntýlarý kaydediliyor\n" + +#, fuzzy +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "" +#~ "========== paketler tsort'lanýyor (sýra, #öncüller, #ardýllar, derinlik)\n" + +#, fuzzy +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== sadece ardýllar (sunum sýrasý)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== tsort sürüyor ...\n" + +#, fuzzy +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "Dosya %4d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========= Pakette bulunmayan dizinler:\n" + +#, fuzzy +#~ msgid "%10d %s\n" +#~ msgstr "%9d %s\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "%s dizin %04o izinleriyle oluþturuldu.\n" + +#, fuzzy +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "%s dizin %04o izinleriyle oluþturuldu.\n" + +#, fuzzy +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "%d girdi %s indeksine ekleniyor.\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "libio(3) API kullanýmýný iptal eder" + +#, fuzzy +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: %s betiði çalýþtýrýlýyor (varsa)\n" + +#, fuzzy +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s: %s-%s-%s %d dosya içeriyor, test = %d\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "paket kayýt numarasý: %u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#, fuzzy +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "paket %s-%s-%s gereksinimi tatmin edici deðil: %s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "missingok flamasýndan dolayý %s atlandý\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== yeniden konumlama\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d %s'i dýþlýyor\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d yeniden konumlandýrýlýyor: %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "%s %s dýþlanýyor\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "%s %s'e konumlanýyor\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "%s dizini %s de yeniden konumlanýyor\n" + +#, fuzzy +#~ msgid "Adding goal: %s\n" +#~ msgstr "%s aranýyor: (%s kullanarak)...\n" + +#~ msgid " ... as %s\n" +#~ msgstr "... %s olarak\n" + +#, fuzzy +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "icra edilebilir paketleri kuruluyor\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "%d kaynak ve %d icra edilebilir paketi bulundu\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "icra edilebilir paketleri kuruluyor\n" + +#, fuzzy +#~ msgid "Adding: %s\n" +#~ msgstr "satýr: %s\n" + +#, fuzzy +#~ msgid "Suggesting: %s\n" +#~ msgstr "%s alýnýyor\n" + +#, fuzzy +#~ msgid "mounted filesystems:\n" +#~ msgstr "baðlý dosya sistemlerinin listesi alýnýyor\n" + +#, fuzzy +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "Dosya %4d: %07o %s.%s\t %s\n" + +#, fuzzy +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "%s %s'e konumlanýyor\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "gereken boyut: %12d = (%d)uç+(%d)imza+(%d)iz+(%d)veri\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " Gerçek boyut: %12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "Ýmza: boyut(%d)+iz(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "PGP imza uzunluðu: %d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "GPG imzasýnýn %d baytý alýndý\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "GPG imza uzunluðu: %d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "GPG imzasýnýn %d baytý alýndý\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "%s dizini dýþlanýyor\n" + +#, fuzzy +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "kaynak paketi gerekirken çalýþtýrýlabilir paketi bulundu\n" + +#, fuzzy +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "%s tetikleyen paket yok\n" + +#, fuzzy +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "" + +#, fuzzy +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "kapandý db ortamý %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "silindi db ortamý %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "açýlýyor db ortamý %s/%s %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "kapandý db endeks %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "açýlýyor db endeks %s/%s %s kip=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "kilitli db endeks %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "\"%s\" %s indeksinden siliniyor.\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "%d girdi %s indeksinden siliniyor.\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "\"%s\" %s indeksine ekleniyor.\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "%d girdi %s indeksine ekleniyor.\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "baþarýlý db3 yeniden oluþturma ertesinde %s kaldýrýlýyor\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "%s veritabaný %s içinde yeniden oluþturuluyor\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "%s dizini oluþturuluyor\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "%s dizini oluþturuluyor: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "eski veritabaný dbapi %d ile açýlýyor\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "yeni veritabaný dbapi %d ile açýlýyor\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "%s dizini siliniyor\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "kapanan db dosyasý %s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "açýlýyor db endeks %s/%s %s kip=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPM: %s okunurken: %s\n" + +#, fuzzy +#~ msgid "Unable to write final header\n" +#~ msgstr "%s'e baþlýk yazýlamadý: %s\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "RPM'nin bu sürümünde paket sürümü 1 desteklenmiyor\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "" +#~ "RPM'nin bu sürümünde sadece ilk sürüm rakamý <= 4 olan paketler " +#~ "destekleniyor\n" + +#, fuzzy +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%s: v1.0 RPM (eski sürüm) imzalanamaz\n" + +#, fuzzy +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%s: v2.0 RPM (eski sürüm) yeniden imzalanamaz\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s: Ýmza bulundurmuyor (v1.0 RPM)\n" diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo new file mode 100644 index 0000000..6525a42 Binary files /dev/null and b/po/zh_TW.gmo differ diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..f6acac7 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,4376 @@ +# Traditional Chinese translation for rpm. +# Copyright (C) 2006, 07 Free Software Foundation, Inc. +# This file is distributed under the same license as the rpm package. +# Lie_Ex , 2006. +# Wei-Lun Chao , 2006, 07. +# +msgid "" +msgstr "" +"Project-Id-Version: rpm 4.4.2\n" +"Report-Msgid-Bugs-To: rpm-maint@lists.rpm.org\n" +"POT-Creation-Date: 2011-07-15 12:37+0300\n" +"PO-Revision-Date: 2007-05-05 10:52+0800\n" +"Last-Translator: Wei-Lun Chao \n" +"Language-Team: Chinese (traditional) \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: cliutils.c:20 lib/poptI.c:29 +#, c-format +msgid "%s: %s\n" +msgstr "%s:%s\n" + +#: cliutils.c:26 lib/poptALL.c:59 +#, c-format +msgid "RPM version %s\n" +msgstr "RPM 版本 %s\n" + +#: cliutils.c:31 +#, c-format +msgid "Copyright (C) 1998-2002 - Red Hat, Inc.\n" +msgstr "" + +#: cliutils.c:32 +#, c-format +msgid "" +"This program may be freely redistributed under the terms of the GNU GPL\n" +msgstr "此程å¼å…許在éµå®ˆ GNU GPL å”定的å‰æ下自由散布\n" + +#: cliutils.c:52 +#, fuzzy, c-format +msgid "creating a pipe for --pipe failed: %m\n" +msgstr "建立ä¿å­˜å¤±æ•—:%s\n" + +#: cliutils.c:62 +#, c-format +msgid "exec failed\n" +msgstr "執行失敗\n" + +#: rpm2cpio.c:62 +#, c-format +msgid "argument is not an RPM package\n" +msgstr "引數ä¸æ˜¯ä¸€å€‹ RPM 套件\n" + +#: rpm2cpio.c:67 +#, c-format +msgid "error reading header from package\n" +msgstr "讀å–套件的表頭資訊時發生錯誤\n" + +#: rpm2cpio.c:81 +#, c-format +msgid "cannot re-open payload: %s\n" +msgstr "無法é‡æ–°é–‹å•Ÿé…¬è¼‰ï¼š%s\n" + +#: rpmqv.c:41 +#, fuzzy +msgid "Query/Verify package selection options:" +msgstr "查詢/校驗套件所屬的組別" + +#: rpmqv.c:46 +msgid "Query options (with -q or --query):" +msgstr "查詢é¸é … (使用 -q 或 --query):" + +#: rpmqv.c:51 +msgid "Verify options (with -V or --verify):" +msgstr "æ ¡é©—é¸é … (使用 -V 或 --verify):" + +#: rpmqv.c:57 +msgid "Install/Upgrade/Erase options:" +msgstr "安è£/æ›´æ–°/清除é¸é …:" + +#: rpmqv.c:64 rpmbuild.c:217 rpmdb.c:35 rpmkeys.c:39 rpmsign.c:37 rpmspec.c:48 +#: tools/rpmdeps.c:32 tools/rpmgraph.c:222 +msgid "Common options for all rpm modes and executables:" +msgstr "用於所有 rpm 模å¼å’Œå¯åŸ·è¡Œæª”案的共åŒé¸é …:" + +#: rpmqv.c:121 +msgid "one type of query/verify may be performed at a time" +msgstr "åªæœ‰æŸ¥è©¢/校驗兩種工作模å¼èƒ½è¢«åŒæ™‚é¸ç”¨" + +#: rpmqv.c:125 +msgid "unexpected query flags" +msgstr "ä¸å¯é æ–™çš„查詢旗標" + +#: rpmqv.c:128 +msgid "unexpected query format" +msgstr "ä¸å¯é æ–™çš„查詢格å¼" + +#: rpmqv.c:131 +msgid "unexpected query source" +msgstr "ä¸å¯é æ–™çš„查詢來æº" + +#: rpmqv.c:142 rpmdb.c:70 rpmkeys.c:77 rpmsign.c:159 +msgid "only one major mode may be specified" +msgstr "åªèƒ½æŒ‡å®šä¸€å€‹ä¸»è¦å·¥ä½œæ¨¡å¼" + +#: rpmqv.c:153 +#, fuzzy +msgid "only installation and upgrading may be forced" +msgstr "åªæœ‰å®‰è£ã€æ›´æ–°ã€ç§»é™¤åŽŸå§‹ç¢¼æª”案ã€ç§»é™¤è¦æ ¼æª”案幾種作業å¯è¢«å¼·åˆ¶åŸ·è¡Œ" + +#: rpmqv.c:155 +msgid "files may only be relocated during package installation" +msgstr "在套件安è£æ™‚檔案å¯ä»¥è¢«é‡æ–°éƒ¨ç½²" + +#: rpmqv.c:158 +msgid "cannot use --prefix with --relocate or --excludepath" +msgstr "--prefix ä¸èƒ½å’Œ --relocate 或 --excludepath åŒæ™‚使用" + +#: rpmqv.c:161 +msgid "" +"--relocate and --excludepath may only be used when installing new packages" +msgstr "--relocate å’Œ --excludepath åªèƒ½åœ¨å®‰è£æ–°è»Ÿé«”時使用" + +#: rpmqv.c:164 +msgid "--prefix may only be used when installing new packages" +msgstr "--prefix åªèƒ½åœ¨å®‰è£æ–°è»Ÿé«”時使用" + +#: rpmqv.c:167 +msgid "arguments to --prefix must begin with a /" +msgstr "--prefix 的引數必須以「/ã€é–‹é ­" + +#: rpmqv.c:170 +msgid "--hash (-h) may only be specified during package installation" +msgstr "--hash (-h) é¸é …åªèƒ½åœ¨å¥—件安è£æ™‚指定" + +#: rpmqv.c:174 +msgid "--percent may only be specified during package installation" +msgstr "--percent é¸é …åªèƒ½åœ¨å¥—件安è£æ™‚指定" + +#: rpmqv.c:178 +msgid "--replacepkgs may only be specified during package installation" +msgstr "--replacepkgs é¸é …åªèƒ½åœ¨å¥—件安è£æ™‚指定" + +#: rpmqv.c:182 +msgid "--excludedocs may only be specified during package installation" +msgstr "--excludedocs é¸é …åªèƒ½åœ¨å¥—件安è£æ™‚指定" + +#: rpmqv.c:186 +msgid "--includedocs may only be specified during package installation" +msgstr "--includedocs é¸é …åªèƒ½åœ¨å¥—件安è£æ™‚指定" + +#: rpmqv.c:190 +msgid "only one of --excludedocs and --includedocs may be specified" +msgstr "--excludedocs å’Œ --includedocs 兩個é¸é …中åªèƒ½æŒ‡å®šä¸€å€‹" + +#: rpmqv.c:194 +msgid "--ignorearch may only be specified during package installation" +msgstr "--ignorearch é¸é …åªèƒ½åœ¨å¥—件安è£æ™‚指定" + +#: rpmqv.c:198 +msgid "--ignoreos may only be specified during package installation" +msgstr "--ignoreos é¸é …åªèƒ½åœ¨å¥—件安è£æ™‚指定" + +#: rpmqv.c:203 +msgid "--ignoresize may only be specified during package installation" +msgstr "--ignoresize é¸é …åªèƒ½åœ¨å¥—件安è£æ™‚指定" + +#: rpmqv.c:207 +msgid "--allmatches may only be specified during package erasure" +msgstr "--allmatches é¸é …åªèƒ½åœ¨å¥—件清除時指定" + +#: rpmqv.c:211 +msgid "--allfiles may only be specified during package installation" +msgstr "--allfiles é¸é …åªèƒ½åœ¨å¥—件安è£æ™‚指定" + +#: rpmqv.c:216 +msgid "--justdb may only be specified during package installation and erasure" +msgstr "--justdb é¸é …åªèƒ½åœ¨å¥—件安è£å’Œæ¸…除時指定" + +#: rpmqv.c:221 +msgid "" +"script disabling options may only be specified during package installation " +"and erasure" +msgstr "與命令稿åœç”¨æœ‰é—œçš„é¸é …åªèƒ½åœ¨å¥—件安è£å’Œæ¸…除時指定" + +#: rpmqv.c:226 +msgid "" +"trigger disabling options may only be specified during package installation " +"and erasure" +msgstr "與觸發åœç”¨æœ‰é—œçš„é¸é …åªèƒ½åœ¨å¥—件安è£å’Œæ¸…除時指定" + +#: rpmqv.c:230 +#, fuzzy +msgid "" +"--nodeps may only be specified during package installation, erasure, and " +"verification" +msgstr "--test é¸é …åªèƒ½åœ¨å¥—件的安è£ã€æ¸…除和組建時指定" + +#: rpmqv.c:234 +#, fuzzy +msgid "--test may only be specified during package installation and erasure" +msgstr "--justdb é¸é …åªèƒ½åœ¨å¥—件安è£å’Œæ¸…除時指定" + +#: rpmqv.c:239 rpmbuild.c:547 +msgid "arguments to --root (-r) must begin with a /" +msgstr "--root (-r) 的引數必須以「/ã€é–‹é ­" + +#: rpmqv.c:256 +msgid "no packages given for erase" +msgstr "沒有指定è¦æ¸…除的套件å稱" + +#: rpmqv.c:290 +msgid "no packages given for install" +msgstr "沒有指定è¦å®‰è£çš„套件å稱" + +#: rpmqv.c:302 rpmspec.c:79 +msgid "no arguments given for query" +msgstr "沒有指定查詢引數" + +#: rpmqv.c:314 +msgid "no arguments given for verify" +msgstr "沒有指定校驗引數" + +#: rpmbuild.c:98 +#, c-format +msgid "buildroot already specified, ignoring %s\n" +msgstr "buildroot 已被指定,忽略 %s\n" + +#: rpmbuild.c:119 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "從 <è¦æ ¼æª”> é€éŽ %prep (解壓原始碼和套用修補程å¼) 來組建" + +#: rpmbuild.c:120 rpmbuild.c:123 rpmbuild.c:126 rpmbuild.c:129 rpmbuild.c:132 +#: rpmbuild.c:135 rpmbuild.c:138 +msgid "" +msgstr "<è¦æ ¼æª”>" + +#: rpmbuild.c:122 +msgid "build through %build (%prep, then compile) from " +msgstr "從 <è¦æ ¼æª”> é€éŽ %build (%prep,然後編譯) 來組建" + +#: rpmbuild.c:125 +msgid "build through %install (%prep, %build, then install) from " +msgstr "從 <è¦æ ¼æª”> é€éŽ %install (%prep,%build,然後安è£) 來組建" + +#: rpmbuild.c:128 +#, c-format +msgid "verify %files section from " +msgstr "從 <è¦æ ¼æª”> é©—è­‰ %files å€æ®µ" + +#: rpmbuild.c:131 +msgid "build source and binary packages from " +msgstr "根據 <è¦æ ¼æª”案> 組建原始碼套件與二進ä½å¥—件" + +#: rpmbuild.c:134 +msgid "build binary package only from " +msgstr "根據 <è¦æ ¼æª”案> åªçµ„建二進ä½å¥—件" + +#: rpmbuild.c:137 +msgid "build source package only from " +msgstr "根據 <è¦æ ¼æª”案> åªçµ„建原始碼套件" + +#: rpmbuild.c:141 +#, c-format +msgid "build through %prep (unpack sources and apply patches) from " +msgstr "從 <打包檔> é€éŽ %prep (解壓原始碼和套用修補程å¼) 來組建" + +#: rpmbuild.c:142 rpmbuild.c:145 rpmbuild.c:148 rpmbuild.c:151 rpmbuild.c:154 +#: rpmbuild.c:157 rpmbuild.c:160 +msgid "" +msgstr "" + +#: rpmbuild.c:144 +msgid "build through %build (%prep, then compile) from " +msgstr "從 <打包檔> é€éŽ %build (%prep,然後編譯) 來組建" + +#: rpmbuild.c:147 +msgid "build through %install (%prep, %build, then install) from " +msgstr "從 <打包檔> é€éŽ %install (%prep,%build,然後安è£) 來組建" + +#: rpmbuild.c:150 +#, c-format +msgid "verify %files section from " +msgstr "從 <打包檔> é©—è­‰ %files å€æ®µ" + +#: rpmbuild.c:153 +msgid "build source and binary packages from " +msgstr "從 中組建原始碼套件與二進ä½å¥—件" + +#: rpmbuild.c:156 +msgid "build binary package only from " +msgstr "從 中åªçµ„建二進ä½å¥—件" + +#: rpmbuild.c:159 +msgid "build source package only from " +msgstr "從 中åªçµ„建原始碼套件" + +#: rpmbuild.c:163 +msgid "build binary package from " +msgstr "從 <原始碼套件> 中組建二進ä½å¥—件" + +#: rpmbuild.c:164 rpmbuild.c:167 +msgid "" +msgstr "<原始碼套件>" + +#: rpmbuild.c:166 +msgid "" +"build through %install (%prep, %build, then install) from " +msgstr "從 <原始碼套件> é€éŽ %install (%prep,%build,然後安è£) 來組建" + +#: rpmbuild.c:170 +msgid "override build root" +msgstr "強制覆寫組建根目錄" + +#: rpmbuild.c:172 +msgid "remove build tree when done" +msgstr "完æˆå¾Œç§»é™¤çµ„建目錄樹" + +#: rpmbuild.c:174 +msgid "ignore ExcludeArch: directives from spec file" +msgstr "忽略 ExcludeArch:根據è¦æ ¼æª”案的指示" + +#: rpmbuild.c:176 +msgid "debug file state machine" +msgstr "除錯檔案狀態機器" + +#: rpmbuild.c:178 +msgid "do not execute any stages of the build" +msgstr "ä¸åŸ·è¡Œçµ„建程åºè£¡çš„任何步驟" + +#: rpmbuild.c:180 +msgid "do not verify build dependencies" +msgstr "ä¸æ ¡é©—組建相ä¾é—œä¿‚" + +#: rpmbuild.c:182 +#, fuzzy +msgid "generate package header(s) compatible with (legacy) rpm v3 packaging" +msgstr "產生相容於éŽåŽ»çš„ rpm2/rpm3 打包的表頭" + +#: rpmbuild.c:186 +msgid "do not accept i18N msgstr's from specfile" +msgstr "ä¸æŽ¥å—來自è¦æ ¼æª”çš„ i18N msgstr" + +#: rpmbuild.c:188 +msgid "remove sources when done" +msgstr "完æˆå¾Œç§»é™¤åŽŸå§‹ç¢¼æª”案" + +#: rpmbuild.c:190 +msgid "remove specfile when done" +msgstr "完æˆå¾Œç§»é™¤è¦æ ¼æª”案" + +#: rpmbuild.c:192 +msgid "skip straight to specified stage (only for c,i)" +msgstr "直接跳到指定的階段 (åªæœ‰ç”¨æ–¼ c,i)" + +#: rpmbuild.c:194 rpmspec.c:34 +msgid "override target platform" +msgstr "無視目標平å°" + +#: rpmbuild.c:211 +msgid "Build options with [ | | ]:" +msgstr "組建é¸é …中使用 [ <è¦æ ¼æª”> | <打包檔> | <原始碼套件> ]:" + +#: rpmbuild.c:231 +msgid "Failed build dependencies:\n" +msgstr "相ä¾æ€§çµ„建失敗:\n" + +#: rpmbuild.c:249 +#, c-format +msgid "Unable to open spec file %s: %s\n" +msgstr "無法開啟è¦æ ¼æª”案 %s:%s\n" + +#: rpmbuild.c:311 +#, c-format +msgid "Failed to open tar pipe: %m\n" +msgstr "無法開啟打包管é“:%m\n" + +#: rpmbuild.c:330 +#, c-format +msgid "Failed to read spec file from %s\n" +msgstr "無法從 %s 讀å–è¦æ ¼æª”案\n" + +#: rpmbuild.c:342 +#, c-format +msgid "Failed to rename %s to %s: %m\n" +msgstr "無法將 %s æ›´å為 %s:%m\n" + +#: rpmbuild.c:417 +#, c-format +msgid "failed to stat %s: %m\n" +msgstr "無法檢視 %s 的狀態:%m\n" + +#: rpmbuild.c:421 +#, c-format +msgid "File %s is not a regular file.\n" +msgstr "%s ä¸æ˜¯ä¸€å€‹æ­£å¸¸çš„檔案。\n" + +#: rpmbuild.c:428 +#, c-format +msgid "File %s does not appear to be a specfile.\n" +msgstr "%s 似乎ä¸æ˜¯ä¸€å€‹è¦æ ¼æª”案。\n" + +#: rpmbuild.c:494 +#, c-format +msgid "Building target platforms: %s\n" +msgstr "組建目標平å°ï¼š%s\n" + +#: rpmbuild.c:502 +#, c-format +msgid "Building for target %s\n" +msgstr "組建目標 %s\n" + +#: rpmdb.c:22 +msgid "initialize database" +msgstr "åˆå§‹åŒ–資料庫" + +#: rpmdb.c:24 +msgid "rebuild database inverted lists from installed package headers" +msgstr "從安è£çš„套件表頭é‡å»ºè³‡æ–™åº«çš„å相清單" + +#: rpmdb.c:27 +msgid "verify database files" +msgstr "驗證資料庫檔案" + +#: rpmdb.c:33 +msgid "Database options:" +msgstr "資料庫é¸é …:" + +#: rpmkeys.c:23 +msgid "verify package signature(s)" +msgstr "校驗套件簽å" + +#: rpmkeys.c:25 +msgid "import an armored public key" +msgstr "匯入一個å—ä¿è­·çš„公鑰" + +#: rpmkeys.c:28 rpmkeys.c:30 +msgid "list keys from RPM keyring" +msgstr "" + +#: rpmkeys.c:37 +#, fuzzy +msgid "Keyring options:" +msgstr "ç°½åé¸é …:" + +#: rpmkeys.c:61 rpmsign.c:144 +msgid "no arguments given" +msgstr "沒有指定引數" + +#: rpmsign.c:25 +#, fuzzy +msgid "sign package(s)" +msgstr "安è£å¥—件" + +#: rpmsign.c:27 +msgid "sign package(s) (identical to --addsign)" +msgstr "å°å¥—件簽å (與 --addsign å«ç¾©ç›¸åŒ)" + +#: rpmsign.c:29 +msgid "delete package signatures" +msgstr "刪除套件簽å" + +#: rpmsign.c:35 +msgid "Signature options:" +msgstr "ç°½åé¸é …:" + +#: rpmsign.c:85 sign/rpmgensig.c:196 +#, c-format +msgid "Could not exec %s: %s\n" +msgstr "無法執行 %s: %s\n" + +#: rpmsign.c:108 +#, c-format +msgid "You must set \"%%_gpg_name\" in your macro file\n" +msgstr "您必須在您的巨集檔案中設定 \"%%_gpg_name\"\n" + +#: rpmsign.c:113 +msgid "Enter pass phrase: " +msgstr "輸入密文: " + +#: rpmsign.c:117 +#, c-format +msgid "Pass phrase is good.\n" +msgstr "密文很好。\n" + +#: rpmsign.c:123 +#, c-format +msgid "Pass phrase check failed\n" +msgstr "密文åµæ¸¬å¤±æ•—\n" + +#: rpmspec.c:26 +#, fuzzy +msgid "parse spec file(s) to stdout" +msgstr "查詢一個è¦æ ¼æª”案" + +#: rpmspec.c:28 +#, fuzzy +msgid "query spec file(s)" +msgstr "查詢一個è¦æ ¼æª”案" + +#: rpmspec.c:30 +msgid "operate on binary rpms generated by spec (default)" +msgstr "" + +#: rpmspec.c:32 +msgid "operate on source rpm generated by spec" +msgstr "" + +#: rpmspec.c:36 lib/poptQV.c:189 +msgid "use the following query format" +msgstr "使用以下的查詢格å¼" + +#: rpmspec.c:45 +#, fuzzy +msgid "Spec options:" +msgstr "ç°½åé¸é …:" + +#: rpmspec.c:90 +#, fuzzy +msgid "no arguments given for parse" +msgstr "沒有指定查詢引數" + +#: build/build.c:122 build/pack.c:408 +msgid "Unable to open temp file.\n" +msgstr "無法開啟暫時檔案。\n" + +#: build/build.c:170 +#, c-format +msgid "Executing(%s): %s\n" +msgstr "正在執行 (%s):%s\n" + +#: build/build.c:177 +#, c-format +msgid "Exec of %s failed (%s): %s\n" +msgstr "執行 %s 失敗 (%s):%s\n" + +#: build/build.c:186 +#, c-format +msgid "Bad exit status from %s (%s)\n" +msgstr "來自 (%s) 錯誤的離開狀態 (%s)\n" + +#: build/build.c:292 +msgid "" +"\n" +"\n" +"RPM build errors:\n" +msgstr "" +"\n" +"\n" +"RPM 組建錯誤:\n" + +#: build/expression.c:216 +msgid "syntax error while parsing ==\n" +msgstr "解æžã€Œ==ã€æ™‚有語法錯誤\n" + +#: build/expression.c:246 +msgid "syntax error while parsing &&\n" +msgstr "解æžã€Œ&&ã€æ™‚有語法錯誤\n" + +#: build/expression.c:255 +msgid "syntax error while parsing ||\n" +msgstr "解æžã€Œ||ã€æ™‚有語法錯誤\n" + +#: build/expression.c:305 +msgid "parse error in expression\n" +msgstr "é‹ç®—å¼è§£æžéŒ¯èª¤\n" + +#: build/expression.c:337 +msgid "unmatched (\n" +msgstr "ä¸åŒ¹é…的「(ã€\n" + +#: build/expression.c:369 +msgid "- only on numbers\n" +msgstr "「-ã€åªèƒ½ç”¨æ–¼æ•¸å­—\n" + +#: build/expression.c:385 +msgid "! only on numbers\n" +msgstr "「!ã€åªèƒ½ç”¨æ–¼æ•¸å­—\n" + +#: build/expression.c:427 build/expression.c:475 build/expression.c:533 +#: build/expression.c:625 +msgid "types must match\n" +msgstr "類型必須匹é…\n" + +#: build/expression.c:440 +msgid "* / not suported for strings\n" +msgstr "ä¸æ”¯æ´å°‡ã€Œ*ã€ã€ã€Œ/ã€ç”¨æ–¼å­—串\n" + +#: build/expression.c:491 +msgid "- not suported for strings\n" +msgstr "ä¸æ”¯æ´å°‡ã€Œ-ã€ç”¨æ–¼å­—串\n" + +#: build/expression.c:638 +msgid "&& and || not suported for strings\n" +msgstr "ä¸æ”¯æ´å°‡ã€Œ&&ã€å’Œã€Œ||ã€ç”¨æ–¼å­—串\n" + +#: build/expression.c:671 +msgid "syntax error in expression\n" +msgstr "é‹ç®—å¼ä¸­æœ‰èªžæ³•éŒ¯èª¤\n" + +#: build/files.c:288 build/files.c:481 build/files.c:678 +#, c-format +msgid "Missing '(' in %s %s\n" +msgstr "在 %s %s 中有缺失的「(ã€\n" + +#: build/files.c:298 build/files.c:614 build/files.c:688 build/files.c:780 +#, c-format +msgid "Missing ')' in %s(%s\n" +msgstr "在 %s(%s 中有缺失的「)ã€\n" + +#: build/files.c:334 build/files.c:637 +#, c-format +msgid "Invalid %s token: %s\n" +msgstr "無效的 %s 符記:%s\n" + +#: build/files.c:443 +#, c-format +msgid "Missing %s in %s %s\n" +msgstr "在 %s %s 中有缺失的「%sã€\n" + +#: build/files.c:496 +#, c-format +msgid "Non-white space follows %s(): %s\n" +msgstr "%s() 之後有éžç©ºç™½ç©ºæ ¼ï¼š%s\n" + +#: build/files.c:532 +#, c-format +msgid "Bad syntax: %s(%s)\n" +msgstr "ä¸ç•¶çš„語法:%s(%s)\n" + +#: build/files.c:541 +#, c-format +msgid "Bad mode spec: %s(%s)\n" +msgstr "ä¸ç•¶çš„æ¨¡å¼ spec:%s(%s)\n" + +#: build/files.c:553 +#, c-format +msgid "Bad dirmode spec: %s(%s)\n" +msgstr "ä¸ç•¶çš„ dirmode spec:%s(%s)\n" + +#: build/files.c:713 +#, c-format +msgid "Unusual locale length: \"%.*s\" in %%lang(%s)\n" +msgstr "ä¸å°‹å¸¸çš„語å€é•·åº¦ï¼š\"%.*s\" æ–¼ %%lang(%s) 之中\n" + +#: build/files.c:723 +#, c-format +msgid "Duplicate locale %.*s in %%lang(%s)\n" +msgstr "é‡è£½èªžå€ %.*s æ–¼ %%lang(%s) 之中\n" + +#: build/files.c:795 +#, fuzzy, c-format +msgid "Invalid capability: %s\n" +msgstr "無效的 %s 符記:%s\n" + +#: build/files.c:806 +msgid "File capability support not built in\n" +msgstr "" + +#: build/files.c:860 +#, c-format +msgid "Only one arg for %%docdir\n" +msgstr "%%docdir åªèƒ½æœ‰ä¸€å€‹å¼•æ•¸\n" + +#: build/files.c:889 +#, c-format +msgid "Two files on one line: %s\n" +msgstr "兩個檔案在åŒä¸€åˆ—中:%s\n" + +#: build/files.c:902 +#, c-format +msgid "File must begin with \"/\": %s\n" +msgstr "檔案必須以「/ã€é–‹é ­ï¼š%s\n" + +#: build/files.c:913 +#, c-format +msgid "Can't mix special %%doc with other forms: %s\n" +msgstr "無法將特殊 %%doc 與其他形å¼æ··åˆï¼š%s\n" + +#: build/files.c:1053 +#, c-format +msgid "Unknown file digest algorithm %u, falling back to MD5\n" +msgstr "" + +#: build/files.c:1079 +#, c-format +msgid "File listed twice: %s\n" +msgstr "曾列出兩次的檔案:%s\n" + +#: build/files.c:1199 +#, fuzzy, c-format +msgid "reading symlink %s failed: %s\n" +msgstr "%s 刪除檔案 %s 失敗:%s\n" + +#: build/files.c:1207 +#, c-format +msgid "Symlink points to BuildRoot: %s -> %s\n" +msgstr "到 BuildRoot 的符號連çµï¼š%s -> %s\n" + +#: build/files.c:1378 +#, c-format +msgid "Explicit file attributes required in spec for: %s\n" +msgstr "" + +#: build/files.c:1387 +#, fuzzy, c-format +msgid "Directory not found: %s\n" +msgstr "檔案找ä¸åˆ°ï¼š%s\n" + +#: build/files.c:1388 +#, c-format +msgid "File not found: %s\n" +msgstr "檔案找ä¸åˆ°ï¼š%s\n" + +#: build/files.c:1505 +#, c-format +msgid "File %s too large for payload\n" +msgstr "" + +#: build/files.c:1599 +#, c-format +msgid "%s: can't load unknown tag (%d).\n" +msgstr "%s:無法呼å«ä¸æ˜Žçš„標記 (%d)。\n" + +#: build/files.c:1605 +#, c-format +msgid "%s: public key read failed.\n" +msgstr "%s:公鑰讀入失敗。\n" + +#: build/files.c:1609 +#, c-format +msgid "%s: not an armored public key.\n" +msgstr "%s:ä¸æ˜¯ä¸€å€‹å—ä¿è­·çš„公鑰。\n" + +#: build/files.c:1618 +#, fuzzy, c-format +msgid "%s: failed to encode\n" +msgstr "巨集 %%%s 展開時失敗\n" + +#: build/files.c:1663 +#, c-format +msgid "File needs leading \"/\": %s\n" +msgstr "檔案需è¦ä»¥ã€Œ/ã€é–‹é ­ï¼š%s\n" + +#: build/files.c:1688 +#, c-format +msgid "Glob not permitted: %s\n" +msgstr "ä¸å®¹è¨±ä»¥è¬ç”¨å­—元解æžï¼š%s\n" + +#: build/files.c:1700 +#, fuzzy, c-format +msgid "Directory not found by glob: %s\n" +msgstr "以è¬ç”¨å­—元解æžæ‰¾ä¸åˆ°æª”案:%s\n" + +#: build/files.c:1701 lib/rpminstall.c:419 +#, c-format +msgid "File not found by glob: %s\n" +msgstr "以è¬ç”¨å­—元解æžæ‰¾ä¸åˆ°æª”案:%s\n" + +#: build/files.c:1749 +#, fuzzy, c-format +msgid "Could not open %%files file %s: %m\n" +msgstr "無法開啟 %%files 的檔案 %s: %s\n" + +#: build/files.c:1757 +#, c-format +msgid "line: %s\n" +msgstr "列:%s\n" + +#: build/files.c:2033 +#, c-format +msgid "Bad file: %s: %s\n" +msgstr "æ壞的檔案:%s:%s\n" + +#: build/files.c:2055 build/parsePrep.c:33 +#, c-format +msgid "Bad owner/group: %s\n" +msgstr "æ壞的所有者/組別:%s\n" + +#: build/files.c:2095 +#, c-format +msgid "Checking for unpackaged file(s): %s\n" +msgstr "正在檢查未被打包的檔案:%s\n" + +#: build/files.c:2110 +#, c-format +msgid "" +"Installed (but unpackaged) file(s) found:\n" +"%s" +msgstr "" +"發ç¾è¢«å®‰è£ä½†æœªè¢«æ‰“包的檔案:\n" +"%s" + +#: build/files.c:2139 +#, fuzzy, c-format +msgid "Processing files: %s\n" +msgstr "正在處ç†æª”案:%s-%s-%s\n" + +#: build/files.c:2150 +msgid "Arch dependent binaries in noarch package\n" +msgstr "" + +#: build/pack.c:83 +#, c-format +msgid "create archive failed on file %s: %s\n" +msgstr "建立檔案 %s çš„ä¿å­˜å¤±æ•—:%s\n" + +#: build/pack.c:86 +#, c-format +msgid "create archive failed: %s\n" +msgstr "建立ä¿å­˜å¤±æ•—:%s\n" + +#: build/pack.c:107 +#, c-format +msgid "cpio_copy write failed: %s\n" +msgstr "cpio_copy 寫作業失敗:%s\n" + +#: build/pack.c:114 +#, c-format +msgid "cpio_copy read failed: %s\n" +msgstr "cpio_copy 讀作業失敗:%s\n" + +#: build/pack.c:139 +#, fuzzy, c-format +msgid "%s: line: %s\n" +msgstr "列:%s\n" + +#: build/pack.c:175 +#, c-format +msgid "Could not canonicalize hostname: %s\n" +msgstr "無法標準化主電腦å稱:%s\n" + +#: build/pack.c:228 +#, c-format +msgid "Could not open PreIn file: %s\n" +msgstr "無法開啟é å…ˆå®‰è£å‘½ä»¤ç¨¿ï¼š%s\n" + +#: build/pack.c:235 +#, c-format +msgid "Could not open PreUn file: %s\n" +msgstr "無法開啟é å…ˆæ¸…除命令稿:%s\n" + +#: build/pack.c:242 +#, fuzzy, c-format +msgid "Could not open PreTrans file: %s\n" +msgstr "無法開啟é å…ˆå®‰è£å‘½ä»¤ç¨¿ï¼š%s\n" + +#: build/pack.c:249 +#, c-format +msgid "Could not open PostIn file: %s\n" +msgstr "無法開啟安è£å¾Œå‘½ä»¤ç¨¿ï¼š%s\n" + +#: build/pack.c:256 +#, c-format +msgid "Could not open PostUn file: %s\n" +msgstr "無法開啟清除後命令稿:%s\n" + +#: build/pack.c:263 +#, fuzzy, c-format +msgid "Could not open PostTrans file: %s\n" +msgstr "無法開啟安è£å¾Œå‘½ä»¤ç¨¿ï¼š%s\n" + +#: build/pack.c:271 +#, c-format +msgid "Could not open VerifyScript file: %s\n" +msgstr "無法開啟校驗命令稿檔案:%s\n" + +#: build/pack.c:297 +#, c-format +msgid "Could not open Trigger script file: %s\n" +msgstr "無法開啟觸發執行命令稿檔案:%s\n" + +#: build/pack.c:371 +#, fuzzy, c-format +msgid "Unknown payload compression: %s\n" +msgstr "ä¸æ˜Žçš„圖示類型:%s\n" + +#: build/pack.c:395 +msgid "Unable to create immutable header region.\n" +msgstr "無法建立ä¸å¯è®Šçš„表頭å€åŸŸã€‚\n" + +#: build/pack.c:415 +msgid "Unable to write temp header\n" +msgstr "無法寫入臨時表頭\n" + +#: build/pack.c:425 +msgid "Bad CSA data\n" +msgstr "æ壞的 CSA 資料\n" + +#: build/pack.c:491 +msgid "Unable to reload signature header.\n" +msgstr "無法é‡è¼‰ç°½å表頭。\n" + +#: build/pack.c:499 +#, c-format +msgid "Could not open %s: %s\n" +msgstr "無法開啟 %s:%s\n" + +#: build/pack.c:511 +#, c-format +msgid "Unable to write package: %s\n" +msgstr "無法寫入套件:%s\n" + +#: build/pack.c:527 +#, c-format +msgid "Unable to open sigtarget %s: %s\n" +msgstr "無法開啟簽å目標 %s:%s\n" + +#: build/pack.c:538 +#, c-format +msgid "Unable to read header from %s: %s\n" +msgstr "ç„¡æ³•è®€å– %s 的表頭:%s\n" + +#: build/pack.c:552 +#, c-format +msgid "Unable to write header to %s: %s\n" +msgstr "無法寫入 %s 的表頭:%s\n" + +#: build/pack.c:564 +#, c-format +msgid "Unable to read payload from %s: %s\n" +msgstr "無法從 %s 讀å–酬載: %s\n" + +#: build/pack.c:571 +#, c-format +msgid "Unable to write payload to %s: %s\n" +msgstr "無法寫入酬載到 %s: %s\n" + +#: build/pack.c:609 +#, c-format +msgid "Wrote: %s\n" +msgstr "已寫入:%s\n" + +#: build/pack.c:660 +#, fuzzy, c-format +msgid "Executing \"%s\":\n" +msgstr "正在執行 (%s):%s\n" + +#: build/pack.c:663 +#, fuzzy, c-format +msgid "Execution of \"%s\" failed.\n" +msgstr "執行 %s 失敗 (%s):%s\n" + +#: build/pack.c:667 +#, fuzzy, c-format +msgid "Package check \"%s\" failed.\n" +msgstr "密文åµæ¸¬å¤±æ•—\n" + +#: build/pack.c:723 +#, c-format +msgid "Could not generate output filename for package %s: %s\n" +msgstr "無法產生套件 %s 的檔案å稱輸出:%s\n" + +#: build/pack.c:740 +#, c-format +msgid "cannot create %s: %s\n" +msgstr "無法建立 %s:%s\n" + +#: build/parseBuildInstallClean.c:35 +#, c-format +msgid "line %d: second %s\n" +msgstr "列 %d:é‡è¤‡çš„ %s\n" + +#: build/parseChangelog.c:131 +#, c-format +msgid "%%changelog entries must start with *\n" +msgstr "%%changelog æ¢ç›®å¿…須以「*ã€ç¬¦è™Ÿé–‹é ­\n" + +#: build/parseChangelog.c:139 +#, c-format +msgid "incomplete %%changelog entry\n" +msgstr "ä¸å®Œæ•´çš„ %%changelog æ¢ç›®\n" + +#: build/parseChangelog.c:154 +#, c-format +msgid "bad date in %%changelog: %s\n" +msgstr "%%changelog 中å«æœ‰ä¸æ­£ç¢ºçš„日期æ述:%s\n" + +#: build/parseChangelog.c:159 +#, c-format +msgid "%%changelog not in descending chronological order\n" +msgstr "%%changelog 無法繼承年代順åºçš„æ述。\n" + +#: build/parseChangelog.c:167 build/parseChangelog.c:178 +#, c-format +msgid "missing name in %%changelog\n" +msgstr "%%changelog 中æ¼å¤±äº†å稱\n" + +#: build/parseChangelog.c:185 +#, c-format +msgid "no description in %%changelog\n" +msgstr "%%changelog 中沒有更新說明\n" + +#: build/parseDescription.c:32 +#, c-format +msgid "line %d: Error parsing %%description: %s\n" +msgstr "列 %dï¼šè§£æž %%description 時發生錯誤:%s\n" + +#: build/parseDescription.c:45 build/parseFiles.c:43 build/parsePolicies.c:45 +#: build/parseScript.c:232 +#, c-format +msgid "line %d: Bad option %s: %s\n" +msgstr "列 %d:æ壞的é¸é … %s:%s\n" + +#: build/parseDescription.c:56 build/parseFiles.c:54 build/parsePolicies.c:55 +#: build/parseScript.c:243 +#, c-format +msgid "line %d: Too many names: %s\n" +msgstr "列 %d: 太多å稱:%s\n" + +#: build/parseDescription.c:64 build/parseFiles.c:62 build/parsePolicies.c:62 +#: build/parseScript.c:251 +#, c-format +msgid "line %d: Package does not exist: %s\n" +msgstr "列 %d:套件ä¸å­˜åœ¨ï¼š%s\n" + +#: build/parseDescription.c:74 +#, c-format +msgid "line %d: Second description\n" +msgstr "列 %d:é‡è¤‡çš„ description\n" + +#: build/parseFiles.c:30 +#, c-format +msgid "line %d: Error parsing %%files: %s\n" +msgstr "列 %dï¼šè§£æž %%files 時發生錯誤:%s\n" + +#: build/parsePolicies.c:32 +#, fuzzy, c-format +msgid "line %d: Error parsing %%policies: %s\n" +msgstr "列 %dï¼šè§£æž %%files 時發生錯誤:%s\n" + +#: build/parsePreamble.c:155 +#, c-format +msgid "line %d: Bad number: %s\n" +msgstr "列 %d:錯誤的編號:%s\n" + +#: build/parsePreamble.c:161 +#, fuzzy, c-format +msgid "line %d: Bad no%s number: %u\n" +msgstr "列 %d: ä¸ç•¶çš„ no%s 數字:%d\n" + +#: build/parsePreamble.c:224 +#, c-format +msgid "line %d: Bad %s number: %s\n" +msgstr "列 %d: ä¸ç•¶çš„ %s 數字:%s\n" + +#: build/parsePreamble.c:238 +#, fuzzy, c-format +msgid "%s %d defined multiple times\n" +msgstr "「%sã€æŒ‡å®šäº†å¤šå€‹å¥—件\n" + +#: build/parsePreamble.c:401 +#, c-format +msgid "Architecture is excluded: %s\n" +msgstr "已被排除的架構:%s\n" + +#: build/parsePreamble.c:406 +#, c-format +msgid "Architecture is not included: %s\n" +msgstr "未被包å«çš„架構:%s\n" + +#: build/parsePreamble.c:411 +#, c-format +msgid "OS is excluded: %s\n" +msgstr "已被排除的作業系統:%s\n" + +#: build/parsePreamble.c:416 +#, c-format +msgid "OS is not included: %s\n" +msgstr "未被包å«çš„作業系統:%s\n" + +#: build/parsePreamble.c:442 +#, c-format +msgid "%s field must be present in package: %s\n" +msgstr "必須在目å‰å¥—件中宣告 %s 欄ä½ï¼š%s\n" + +#: build/parsePreamble.c:465 +#, c-format +msgid "Duplicate %s entries in package: %s\n" +msgstr "套件中有é‡è¤‡çš„ %s æ¢ç›®ï¼š%s\n" + +#: build/parsePreamble.c:519 +#, c-format +msgid "illegal _docdir_fmt: %s\n" +msgstr "" + +#: build/parsePreamble.c:547 +#, c-format +msgid "Unable to open icon %s: %s\n" +msgstr "無法開啟圖示 %s:%s\n" + +#: build/parsePreamble.c:563 +#, c-format +msgid "Unable to read icon %s: %s\n" +msgstr "無法讀å–圖示 %s:%s\n" + +#: build/parsePreamble.c:573 +#, c-format +msgid "Unknown icon type: %s\n" +msgstr "ä¸æ˜Žçš„圖示類型:%s\n" + +#: build/parsePreamble.c:587 +#, c-format +msgid "line %d: Tag takes single token only: %s\n" +msgstr "列 %d: 標記åªéœ€å–®ä¸€ç¬¦è¨˜ï¼š%s\n" + +#: build/parsePreamble.c:607 +#, fuzzy, c-format +msgid "line %d: Illegal char '%c' in: %s\n" +msgstr "列 %d:在 %s 中出ç¾é•è¦å­—元「-ã€ï¼š%s\n" + +#: build/parsePreamble.c:610 +#, fuzzy, c-format +msgid "line %d: Illegal char in: %s\n" +msgstr "列 %d:在 %s 中出ç¾é•è¦å­—元「-ã€ï¼š%s\n" + +#: build/parsePreamble.c:616 +#, fuzzy, c-format +msgid "line %d: Illegal sequence \"..\" in: %s\n" +msgstr "列 %d:在 %s 中出ç¾é•è¦å­—元「-ã€ï¼š%s\n" + +#: build/parsePreamble.c:641 +#, c-format +msgid "line %d: Malformed tag: %s\n" +msgstr "列 %d: 異常的標記:%s\n" + +#: build/parsePreamble.c:649 +#, c-format +msgid "line %d: Empty tag: %s\n" +msgstr "列 %d: 清空標記:%s\n" + +#: build/parsePreamble.c:706 +#, c-format +msgid "line %d: Prefixes must not end with \"/\": %s\n" +msgstr "列 %d:Prefixes ä¸èƒ½ä»¥ã€Œ/ã€çµå°¾ï¼š%s\n" + +#: build/parsePreamble.c:719 +#, c-format +msgid "line %d: Docdir must begin with '/': %s\n" +msgstr "列 %d:Docdir 必須以「/ã€é–‹é ­ï¼š%s\n" + +#: build/parsePreamble.c:732 +#, fuzzy, c-format +msgid "line %d: Epoch field must be an unsigned number: %s\n" +msgstr "列 %d:Epoch/Serial 欄ä½çš„內容必須是一個數字:%s\n" + +#: build/parsePreamble.c:773 +#, c-format +msgid "line %d: Bad %s: qualifiers: %s\n" +msgstr "列 %d: ä¸ç•¶çš„ %s: é™å®šè©žï¼š%s\n" + +#: build/parsePreamble.c:800 +#, c-format +msgid "line %d: Bad BuildArchitecture format: %s\n" +msgstr "列 %d:æ壞的組建架構格å¼ï¼š%s\n" + +#: build/parsePreamble.c:810 +#, c-format +msgid "line %d: Only noarch subpackages are supported: %s\n" +msgstr "" + +#: build/parsePreamble.c:825 +#, c-format +msgid "Internal error: Bogus tag %d\n" +msgstr "內部錯誤:å‡é€ çš„標記 %d\n" + +#: build/parsePreamble.c:909 +#, fuzzy, c-format +msgid "line %d: %s is deprecated: %s\n" +msgstr "列 %d:需è¦ç‰ˆæœ¬æ述:%s\n" + +#: build/parsePreamble.c:972 +#, c-format +msgid "Bad package specification: %s\n" +msgstr "ä¸ç•¶çš„套件è¦æ ¼ï¼š%s\n" + +#: build/parsePreamble.c:978 +#, c-format +msgid "Package already exists: %s\n" +msgstr "套件已存在:%s\n" + +#: build/parsePreamble.c:1009 +#, c-format +msgid "line %d: Unknown tag: %s\n" +msgstr "列 %d:ä¸æ˜Žæ¨™è¨˜ï¼š%s\n" + +#: build/parsePreamble.c:1041 +#, fuzzy, c-format +msgid "%%{buildroot} couldn't be empty\n" +msgstr "BuildRoot ä¸èƒ½æ˜¯ã€Œ/ã€ï¼š%s\n" + +#: build/parsePreamble.c:1045 +#, fuzzy, c-format +msgid "%%{buildroot} can not be \"/\"\n" +msgstr "BuildRoot ä¸èƒ½æ˜¯ã€Œ/ã€ï¼š%s\n" + +#: build/parsePrep.c:28 +#, c-format +msgid "Bad source: %s: %s\n" +msgstr "æ壞的原始碼檔案:%s:%s\n" + +#: build/parsePrep.c:73 +#, fuzzy, c-format +msgid "No patch number %u\n" +msgstr "編號為 %d 的修補ä¸å­˜åœ¨\n" + +#: build/parsePrep.c:75 +#, c-format +msgid "%%patch without corresponding \"Patch:\" tag\n" +msgstr "" + +#: build/parsePrep.c:152 +#, fuzzy, c-format +msgid "No source number %u\n" +msgstr "編號為 %d 的原始碼檔案ä¸å­˜åœ¨\n" + +#: build/parsePrep.c:154 +#, fuzzy +msgid "No \"Source:\" tag in the spec file\n" +msgstr "原始碼套件內沒有 .spec 檔案\n" + +#: build/parsePrep.c:173 +#, c-format +msgid "Couldn't download nosource %s: %s\n" +msgstr "無法下載 nosource %s: %s\n" + +#: build/parsePrep.c:277 +#, c-format +msgid "Error parsing %%setup: %s\n" +msgstr "è§£æž %%setup 時發生錯誤:%s\n" + +#: build/parsePrep.c:288 +#, c-format +msgid "line %d: Bad arg to %%setup: %s\n" +msgstr "列 %d:%%setup 中出ç¾éŒ¯èª¤çš„引數:%s\n" + +#: build/parsePrep.c:303 +#, c-format +msgid "line %d: Bad %%setup option %s: %s\n" +msgstr "列 %d:%%setup 中出ç¾éŒ¯èª¤çš„é¸é … %s:%s\n" + +#: build/parsePrep.c:462 +#, fuzzy, c-format +msgid "%s: %s: %s\n" +msgstr "%s:%s\n" + +#: build/parsePrep.c:475 +#, fuzzy, c-format +msgid "Invalid patch number %s: %s\n" +msgstr "ä¸æ­£ç¢ºçš„套件編號:%s\n" + +#: build/parsePrep.c:502 +#, c-format +msgid "line %d: second %%prep\n" +msgstr "列 %d:é‡è¤‡çš„ %%prep\n" + +#: build/parseReqs.c:112 +#, fuzzy +msgid "Dependency tokens must begin with alpha-numeric, '_' or '/'" +msgstr "列 %d:相ä¾é—œä¿‚的表述必須以數字ã€ã€Œ_ã€æˆ–「/ã€é–‹é ­ï¼š%s\n" + +#: build/parseReqs.c:137 +#, fuzzy +msgid "Versioned file name not permitted" +msgstr "列 %d: ä¸å®¹è¨±æ¨™ä¸Šç‰ˆæœ¬çš„檔案å稱:%s\n" + +#: build/parseReqs.c:154 +#, fuzzy +msgid "Version required" +msgstr "列 %d:需è¦ç‰ˆæœ¬æ述:%s\n" + +#: build/parseReqs.c:165 +#, fuzzy +msgid "invalid dependency" +msgstr "列 %d:錯誤的編號:%s\n" + +#: build/parseReqs.c:181 +#, fuzzy, c-format +msgid "line %d: %s: %s\n" +msgstr "列 %d:%s\n" + +#: build/parseScript.c:192 +#, c-format +msgid "line %d: triggers must have --: %s\n" +msgstr "列 %d:觸發器必須包å«ã€Œ--ã€ï¼š%s\n" + +#: build/parseScript.c:202 build/parseScript.c:265 +#, c-format +msgid "line %d: Error parsing %s: %s\n" +msgstr "列 %dï¼šè§£æž %s 時發生錯誤:%s\n" + +#: build/parseScript.c:214 +#, c-format +msgid "line %d: internal script must end with '>': %s\n" +msgstr "列 %d:內建命令稿必須以「>ã€çµå°¾ï¼š%s\n" + +#: build/parseScript.c:220 +#, c-format +msgid "line %d: script program must begin with '/': %s\n" +msgstr "列 %d:命令稿程å¼å¿…須以「/ã€é–‹é ­ï¼š%s\n" + +#: build/parseScript.c:258 +#, c-format +msgid "line %d: Second %s\n" +msgstr "列 %d:é‡è¤‡çš„ %s\n" + +#: build/parseScript.c:304 +#, c-format +msgid "line %d: unsupported internal script: %s\n" +msgstr "列 %d:ä¸æ”¯æ´çš„內建命令稿:%s\n" + +#: build/parseSpec.c:201 +#, c-format +msgid "line %d: %s\n" +msgstr "列 %d:%s\n" + +#: build/parseSpec.c:245 +#, c-format +msgid "Unable to open %s: %s\n" +msgstr "無法開啟 %s:%s\n" + +#: build/parseSpec.c:257 +#, c-format +msgid "Unclosed %%if\n" +msgstr "%%if 分支未關閉\n" + +#: build/parseSpec.c:296 +#, c-format +msgid "line %d: unclosed macro or bad line continuation\n" +msgstr "" + +#: build/parseSpec.c:348 +#, c-format +msgid "%s:%d: parseExpressionBoolean returns %d\n" +msgstr "%s:%d: parseExpressionBoolean 回傳 %d\n" + +#: build/parseSpec.c:357 +#, c-format +msgid "%s:%d: Got a %%else with no %%if\n" +msgstr "%s:%d:缺少與 %%if å°æ‡‰çš„ %%if\n" + +#: build/parseSpec.c:369 +#, c-format +msgid "%s:%d: Got a %%endif with no %%if\n" +msgstr "%s:%d:缺少與 %%endif å°æ‡‰çš„ %%if\n" + +#: build/parseSpec.c:383 build/parseSpec.c:392 +#, c-format +msgid "malformed %%include statement\n" +msgstr "異常的 %%include 宣告\n" + +#: build/parseSpec.c:639 +msgid "No compatible architectures found for build\n" +msgstr "沒有å¯ä¾›çµ„建的相容硬體架構\n" + +#: build/parseSpec.c:673 +#, c-format +msgid "Package has no %%description: %s\n" +msgstr "套件沒有 %%description:%s\n" + +#: build/policies.c:86 +#, c-format +msgid "Policy module '%s' duplicated with overlapping types\n" +msgstr "" + +#: build/policies.c:92 +#, c-format +msgid "Base modules '%s' and '%s' have overlapping types\n" +msgstr "" + +#: build/policies.c:100 +#, fuzzy +msgid "Failed to get policies from header\n" +msgstr "無法從 %s 讀å–è¦æ ¼æª”案\n" + +#: build/policies.c:153 +#, c-format +msgid "%%semodule requires a file path\n" +msgstr "" + +#: build/policies.c:162 +#, fuzzy, c-format +msgid "Failed to read policy file: %s\n" +msgstr "無法從 %s 讀å–è¦æ ¼æª”案\n" + +#: build/policies.c:169 +#, fuzzy, c-format +msgid "Failed to encode policy file: %s\n" +msgstr "無法從 %s 讀å–è¦æ ¼æª”案\n" + +#: build/policies.c:186 +#, fuzzy, c-format +msgid "Failed to determine a policy name: %s\n" +msgstr "無法開啟打包管é“:%m\n" + +#: build/policies.c:198 +#, c-format +msgid "" +"'%s' type given with other types in %%semodule %s. Compacting types to " +"'%s'.\n" +msgstr "" + +#: build/policies.c:245 +#, fuzzy, c-format +msgid "Error parsing %s: %s\n" +msgstr "è§£æž %%setup 時發生錯誤:%s\n" + +#: build/policies.c:251 +#, fuzzy, c-format +msgid "Expecting %%semodule tag: %s\n" +msgstr "正在執行 (%s):%s\n" + +#: build/policies.c:261 +#, fuzzy, c-format +msgid "Missing module path in line: %s\n" +msgstr "在 %s %s 中有缺失的「%sã€\n" + +#: build/policies.c:267 +#, fuzzy, c-format +msgid "Too many arguments in line: %s\n" +msgstr "在資料列的 %s:%d 中有太多引數\n" + +#: build/policies.c:305 +#, fuzzy, c-format +msgid "Processing policies: %s\n" +msgstr "正在處ç†æª”案:%s-%s-%s\n" + +#: build/rpmfc.c:107 +#, fuzzy, c-format +msgid "Ignoring invalid regex %s\n" +msgstr "列 %d:錯誤的編號:%s\n" + +#: build/rpmfc.c:222 +#, fuzzy, c-format +msgid "Couldn't create pipe for %s: %m\n" +msgstr "無法開啟 %s:%s\n" + +#: build/rpmfc.c:247 +#, fuzzy, c-format +msgid "Couldn't exec %s: %s\n" +msgstr "無法執行 %s: %s\n" + +#: build/rpmfc.c:252 lib/rpmscript.c:257 +#, fuzzy, c-format +msgid "Couldn't fork %s: %s\n" +msgstr "無法開啟 %s:%s\n" + +#: build/rpmfc.c:343 +#, fuzzy, c-format +msgid "%s failed: %x\n" +msgstr "%s 失敗:%s\n" + +#: build/rpmfc.c:347 +#, fuzzy, c-format +msgid "failed to write all data to %s: %s\n" +msgstr "無法寫入酬載到 %s: %s\n" + +#: build/rpmfc.c:846 +#, c-format +msgid "Conversion of %s to long integer failed.\n" +msgstr "" + +#: build/rpmfc.c:934 +#, fuzzy +msgid "No file attributes configured\n" +msgstr "寫入簽å時 gpg 失敗\n" + +#: build/rpmfc.c:951 +#, fuzzy, c-format +msgid "magic_open(0x%x) failed: %s\n" +msgstr "é–‹å•Ÿ %s 失敗:%s\n" + +#: build/rpmfc.c:958 +#, fuzzy, c-format +msgid "magic_load failed: %s\n" +msgstr "%s 移除目錄 %s 失敗:%s\n" + +#: build/rpmfc.c:999 +#, c-format +msgid "Recognition of file \"%s\" failed: mode %06o %s\n" +msgstr "" + +#: build/rpmfc.c:1200 +#, fuzzy, c-format +msgid "Finding %s: %s\n" +msgstr "檔案 %s: %s\n" + +#: build/rpmfc.c:1205 build/rpmfc.c:1214 +#, fuzzy, c-format +msgid "Failed to find %s:\n" +msgstr "è®€å– %s 失敗: %s。\n" + +#: build/spec.c:413 +#, c-format +msgid "query of specfile %s failed, can't parse\n" +msgstr "è¦æ ¼æª” %s 的查詢失敗,無法剖æž\n" + +#: lib/cpio.c:195 +#, c-format +msgid "(error 0x%x)" +msgstr "(error 0x%x)" + +#: lib/cpio.c:199 +msgid "Bad magic" +msgstr "ä¸ç•¶çš„魔法數字" + +#: lib/cpio.c:200 +msgid "Bad/unreadable header" +msgstr "æ壞或無法讀å–的表頭" + +#: lib/cpio.c:223 +msgid "Header size too big" +msgstr "表頭尺寸éŽå¤§" + +#: lib/cpio.c:224 +msgid "Unknown file type" +msgstr "ä¸æ˜Žçš„檔案類型" + +#: lib/cpio.c:225 +msgid "Missing hard link(s)" +msgstr "丟失的硬å¼éˆçµ" + +#: lib/cpio.c:226 +#, fuzzy +msgid "Digest mismatch" +msgstr "MD5 比照çµæžœä¸åŒ¹é…" + +#: lib/cpio.c:227 +msgid "Internal error" +msgstr "內部錯誤" + +#: lib/cpio.c:228 +msgid "Archive file not in header" +msgstr "在檔頭中沒有歸檔檔案" + +#: lib/cpio.c:239 +msgid " failed - " +msgstr " 失敗 - " + +#: lib/depends.c:244 +#, c-format +msgid "package %s was already added, skipping %s\n" +msgstr "套件 %s 已被加入,忽略 %s\n" + +#: lib/depends.c:245 +#, c-format +msgid "package %s was already added, replacing with %s\n" +msgstr "套件 %s å·²è¢«åŠ å…¥ï¼Œæ›¿æ› %s\n" + +#: lib/formats.c:71 lib/formats.c:112 lib/formats.c:202 lib/formats.c:229 +#: lib/formats.c:280 lib/formats.c:302 lib/formats.c:543 lib/formats.c:582 +#: lib/formats.c:621 +msgid "(not a number)" +msgstr "(ä¸æ˜¯æ•¸å­—)" + +#: lib/formats.c:138 +#, c-format +msgid "%c" +msgstr "%c" + +#: lib/formats.c:149 +msgid "%a %b %d %Y" +msgstr "%a %b %d %Y" + +#: lib/formats.c:340 +msgid "(not base64)" +msgstr "(ä¸æ˜¯ base64)" + +#: lib/formats.c:352 +msgid "(invalid type)" +msgstr "(無效型態)" + +#: lib/formats.c:376 lib/formats.c:462 +msgid "(not a blob)" +msgstr "(ä¸æ˜¯ blob)" + +#: lib/formats.c:415 +msgid "(invalid xml type)" +msgstr "(無效 xml åž‹æ…‹)" + +#: lib/formats.c:485 +msgid "(not an OpenPGP signature)" +msgstr "(ä¸æ˜¯ä¸€å€‹ OpenPGP ç°½å)" + +#: lib/formats.c:588 +#, fuzzy +msgid "normal" +msgstr "正常 " + +#: lib/formats.c:591 +#, fuzzy +msgid "replaced" +msgstr "è¢«æ›¿æ› " + +#: lib/formats.c:594 +#, fuzzy +msgid "not installed" +msgstr "æœªå®‰è£ " + +#: lib/formats.c:597 +#, fuzzy +msgid "net shared" +msgstr "網路共享 " + +#: lib/formats.c:600 +#, fuzzy +msgid "wrong color" +msgstr "錯誤é¡è‰² " + +#: lib/formats.c:603 +#, fuzzy +msgid "missing" +msgstr "缺少 %c %s" + +#: lib/formats.c:606 +#, fuzzy +msgid "(unknown)" +msgstr "(ä¸æ˜Žçš„ %3d) " + +#: lib/formats.c:645 +#, fuzzy +msgid "(not a string)" +msgstr "(ä¸æ˜¯æ•¸å­—)" + +#: lib/fsm.c:737 +#, c-format +msgid "user %s does not exist - using root\n" +msgstr "使用者 %s ä¸å­˜åœ¨ - ç¾ä½¿ç”¨ root 代替\n" + +#: lib/fsm.c:744 +#, c-format +msgid "group %s does not exist - using root\n" +msgstr "使用者組 %s ä¸å­˜åœ¨ - ç¾ä½¿ç”¨ root 代替\n" + +#: lib/fsm.c:1350 +#, c-format +msgid "archive file %s was not found in header file list\n" +msgstr "ä¿å­˜æª”案 %s 在檔案清單表頭中找ä¸åˆ°\n" + +#: lib/fsm.c:1805 lib/fsm.c:1950 +#, c-format +msgid "%s saved as %s\n" +msgstr "%s 已被å¦å­˜ç‚º %s\n" + +#: lib/fsm.c:1977 +#, c-format +msgid "%s rmdir of %s failed: Directory not empty\n" +msgstr "%s 移除目錄 %s 失敗:目錄éžç©º\n" + +#: lib/fsm.c:1983 +#, c-format +msgid "%s rmdir of %s failed: %s\n" +msgstr "%s 移除目錄 %s 失敗:%s\n" + +#: lib/fsm.c:1997 +#, c-format +msgid "%s unlink of %s failed: %s\n" +msgstr "%s 刪除檔案 %s 失敗:%s\n" + +#: lib/fsm.c:2019 +#, c-format +msgid "%s created as %s\n" +msgstr "%s å¦‚åŒ %s 而建立\n" + +#: lib/package.c:192 +#, c-format +msgid "skipping %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/package.c:226 +#, c-format +msgid "blob size(%d): BAD, 8 + 16 * il(%d) + dl(%d)\n" +msgstr "blob 大å°(%d):ä¸ç•¶çš„, 8 + 16 * il(%d) + dl(%d)\n" + +#: lib/package.c:237 lib/package.c:292 lib/package.c:360 lib/signature.c:129 +#, c-format +msgid "tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "標記[%d]:ä¸ç•¶çš„,標記 %d åž‹æ…‹ %d å移 %d 計數 %d\n" + +#: lib/package.c:255 lib/signature.c:143 +#, c-format +msgid "region offset: BAD, tag %d type %d offset %d count %d\n" +msgstr "å€åŸŸå移:ä¸ç•¶çš„,標記 %d åž‹æ…‹ %d å移 %d 計數 %d\n" + +#: lib/package.c:273 lib/signature.c:167 +#, c-format +msgid "region trailer: BAD, tag %d type %d offset %d count %d\n" +msgstr "å€åŸŸçµå°¾ï¼šä¸ç•¶çš„,標記 %d åž‹æ…‹ %d å移 %d 計數 %d\n" + +#: lib/package.c:283 lib/signature.c:177 +#, c-format +msgid "region size: BAD, ril(%d) > il(%d)\n" +msgstr "å€åŸŸå¤§å°ï¼šä¸ç•¶çš„, ril(%d)> il(%d)\n" + +#: lib/package.c:310 +msgid "hdr SHA1: BAD, not hex\n" +msgstr "hdr SHA1: ä¸ç•¶çš„,ä¸æ˜¯å六進ä½\n" + +#: lib/package.c:322 +msgid "hdr RSA: BAD, not binary\n" +msgstr "hdr RSA:ä¸é©ç•¶ï¼Œä¸æ˜¯äºŒé€²ä½\n" + +#: lib/package.c:332 +msgid "hdr DSA: BAD, not binary\n" +msgstr "hdr DSA:ä¸ç•¶çš„,ä¸æ˜¯äºŒé€²ä½\n" + +#: lib/package.c:473 +#, c-format +msgid "hdr size(%d): BAD, read returned %d\n" +msgstr "hdr 大å°(%d):ä¸ç•¶çš„,讀å–回傳 %d\n" + +#: lib/package.c:477 +msgid "hdr magic: BAD\n" +msgstr "hdr magic:ä¸ç•¶çš„\n" + +#: lib/package.c:482 +#, c-format +msgid "hdr tags: BAD, no. of tags(%d) out of range\n" +msgstr "hdr 標記:ä¸ç•¶çš„,號碼的標記(%d)發信匣的範åœ\n" + +#: lib/package.c:488 +#, c-format +msgid "hdr data: BAD, no. of bytes(%d) out of range\n" +msgstr "hdr 資料:ä¸ç•¶çš„,號碼的ä½å…ƒçµ„(%d)發信匣的範åœ\n" + +#: lib/package.c:498 +#, fuzzy, c-format +msgid "hdr blob(%zd): BAD, read returned %d\n" +msgstr "hdr blob(%d):ä¸ç•¶çš„,讀å–回傳 %d\n" + +#: lib/package.c:510 +msgid "hdr load: BAD\n" +msgstr "hdr 載入:ä¸ç•¶çš„\n" + +#: lib/package.c:582 lib/rpmchecksig.c:296 sign/rpmgensig.c:464 +#, c-format +msgid "%s: rpmReadSignature failed: %s" +msgstr "%s:rpmReadSignature 失敗:%s" + +#: lib/package.c:589 lib/rpmchecksig.c:303 sign/rpmgensig.c:471 +#, c-format +msgid "%s: No signature available\n" +msgstr "%s:未發ç¾ç°½å\n" + +#: lib/package.c:631 +#, c-format +msgid "%s: headerRead failed: %s" +msgstr "%s::headerRead 失敗:%s" + +#: lib/package.c:686 lib/rpmchecksig.c:137 sign/rpmgensig.c:94 +#, c-format +msgid "%s: Fread failed: %s\n" +msgstr "%s: Fread 失敗:%s\n" + +#: lib/package.c:794 +#, fuzzy, c-format +msgid "%s is a Delta RPM and cannot be directly installed\n" +msgstr "%s 無法安è£\n" + +#: lib/package.c:798 +#, c-format +msgid "Unsupported payload (%s) in package %s\n" +msgstr "" + +#: lib/poptALL.c:161 +msgid "predefine MACRO with value EXPR" +msgstr "é å…ˆä»¥å€¼ EXPR 定義巨集" + +#: lib/poptALL.c:162 lib/poptALL.c:165 +msgid "'MACRO EXPR'" +msgstr "「巨集 EXPRã€" + +#: lib/poptALL.c:164 +msgid "define MACRO with value EXPR" +msgstr "定義巨集附有值 EXPR" + +#: lib/poptALL.c:167 +msgid "print macro expansion of EXPR" +msgstr "å°å‡ºå·¨é›†å±•é–‹çš„ EXPR" + +#: lib/poptALL.c:168 +msgid "'EXPR'" +msgstr "「EXPRã€" + +#: lib/poptALL.c:170 lib/poptALL.c:184 +msgid "read instead of default file(s)" +msgstr "è®€å– <檔案:…> 以代替é è¨­æª”案" + +#: lib/poptALL.c:171 lib/poptALL.c:185 +msgid "" +msgstr "<檔案:…>" + +#: lib/poptALL.c:174 +msgid "don't verify package digest(s)" +msgstr "ä¸æ ¡é©—套件摘è¦" + +#: lib/poptALL.c:176 +msgid "don't verify database header(s) when retrieved" +msgstr "å–回時ä¸é©—證資料庫表頭" + +#: lib/poptALL.c:178 +msgid "don't verify package signature(s)" +msgstr "ä¸æ ¡é©—套件簽å" + +#: lib/poptALL.c:181 +msgid "send stdout to CMD" +msgstr "發é€æ¨™æº–輸出到 CMD" + +#: lib/poptALL.c:182 +msgid "CMD" +msgstr "CMD" + +#: lib/poptALL.c:187 +msgid "use ROOT as top level directory" +msgstr "使用 ROOT åšç‚ºé ‚層目錄" + +#: lib/poptALL.c:188 +msgid "ROOT" +msgstr "ROOT" + +#: lib/poptALL.c:190 +msgid "use database in DIRECTORY" +msgstr "" + +#: lib/poptALL.c:191 +msgid "DIRECTORY" +msgstr "" + +#: lib/poptALL.c:194 +msgid "display known query tags" +msgstr "顯示已知的查詢標記" + +#: lib/poptALL.c:196 +msgid "display final rpmrc and macro configuration" +msgstr "顯示完整的 rpmrc 與巨集定義é…ç½®" + +#: lib/poptALL.c:198 +msgid "provide less detailed output" +msgstr "æ供較少的細節輸出" + +#: lib/poptALL.c:200 +msgid "provide more detailed output" +msgstr "æ供較多的細節輸出" + +#: lib/poptALL.c:202 +msgid "print the version of rpm being used" +msgstr "å°å‡ºæ­£åœ¨ä½¿ç”¨çš„ rpm 版本資訊" + +#: lib/poptALL.c:208 +msgid "debug payload file state machine" +msgstr "å°é…¬è¼‰æª”案狀態機器除錯" + +#: lib/poptALL.c:214 +msgid "debug rpmio I/O" +msgstr "å° rpmio I/O 除錯" + +#: lib/poptALL.c:292 +#, c-format +msgid "%s: option table misconfigured (%d)\n" +msgstr "%s: é¸é …表格 misconfigured(%d)\n" + +#: lib/poptI.c:52 +msgid "exclude paths must begin with a /" +msgstr "被排除的路徑必須以「/ã€é–‹é ­" + +#: lib/poptI.c:64 +msgid "relocations must begin with a /" +msgstr "é‡æ–°éƒ¨ç½²å¼•æ•¸å¿…須以「/ã€é–‹é ­" + +#: lib/poptI.c:67 +msgid "relocations must contain a =" +msgstr "é‡æ–°éƒ¨ç½²å¼•æ•¸å¿…須包å«ä¸€å€‹ã€Œ=ã€" + +#: lib/poptI.c:70 +msgid "relocations must have a / following the =" +msgstr "é‡æ–°éƒ¨ç½²å¼•æ•¸ä¸­å¿…須有一個在「=ã€å¾Œçš„「/ã€" + +#: lib/poptI.c:114 +msgid "install all files, even configurations which might otherwise be skipped" +msgstr "安è£æ‰€æœ‰æª”案,å³ä½¿é…置檔案å¯èƒ½æœƒè¢«ç•¥éŽ" + +#: lib/poptI.c:118 +msgid "" +"remove all packages which match (normally an error is generated if " +" specified multiple packages)" +msgstr "" +"移除所有匹é…<套件>的套件 (如果<套件>被指定為多個套件,常會導致錯誤出ç¾)" + +#: lib/poptI.c:123 +msgid "relocate files in non-relocatable package" +msgstr "å°ä¸å¯é‡æ–°éƒ¨ç½²çš„套件é‡æ–°éƒ¨ç½²æª”案" + +#: lib/poptI.c:127 +msgid "print dependency loops as warning" +msgstr "å°å‡ºå¾ªç’°çš„相ä¾é—œä¿‚åšç‚ºè­¦å‘Š" + +#: lib/poptI.c:131 +msgid "erase (uninstall) package" +msgstr "清除(å安è£)套件" + +#: lib/poptI.c:131 +msgid "+" +msgstr "<套件>+" + +#: lib/poptI.c:134 lib/poptI.c:171 +msgid "do not install configuration files" +msgstr "ä¸å®‰è£é…置檔案" + +#: lib/poptI.c:137 lib/poptI.c:176 +msgid "do not install documentation" +msgstr "ä¸å®‰è£æ–‡ä»¶" + +#: lib/poptI.c:139 +msgid "skip files with leading component " +msgstr "ç•¥éŽæŒ‡å®šçš„ <路徑> 後的檔案 " + +#: lib/poptI.c:140 +msgid "" +msgstr "<路徑>" + +#: lib/poptI.c:143 +msgid "short hand for --replacepkgs --replacefiles" +msgstr "--replacepkgs 與 --replacefiles 的速寫" + +#: lib/poptI.c:147 +msgid "upgrade package(s) if already installed" +msgstr "如果套件已安è£ï¼ŒåŸ·è¡Œæ›´æ–°" + +#: lib/poptI.c:148 lib/poptI.c:164 lib/poptI.c:249 +msgid "+" +msgstr "<套件檔案>+" + +#: lib/poptI.c:150 +msgid "print hash marks as package installs (good with -v)" +msgstr "å°å‡ºå‡ºå®‰è£å¥—件的 Hash 碼 (常和 -v åŒæ™‚使用)" + +#: lib/poptI.c:153 +msgid "don't verify package architecture" +msgstr "ä¸åµæ¸¬å¥—件的相容架構" + +#: lib/poptI.c:156 +msgid "don't verify package operating system" +msgstr "ä¸åµæ¸¬å¥—件的相容作業系統" + +#: lib/poptI.c:159 +msgid "don't check disk space before installing" +msgstr "安è£å‰ä¸åµæ¸¬ç£ç¢Ÿå‰©é¤˜ç©ºé–“" + +#: lib/poptI.c:161 +msgid "install documentation" +msgstr "安è£æ–‡ä»¶" + +#: lib/poptI.c:164 +msgid "install package(s)" +msgstr "安è£å¥—件" + +#: lib/poptI.c:167 +msgid "update the database, but do not modify the filesystem" +msgstr "僅更新資料庫,但ä¸å°æª”案系統進行修改" + +#: lib/poptI.c:173 +msgid "do not verify package dependencies" +msgstr "ä¸åµæ¸¬å¥—件相ä¾æ€§" + +#: lib/poptI.c:179 lib/poptQV.c:204 lib/poptQV.c:206 +#, fuzzy +msgid "don't verify digest of files" +msgstr "ä¸æ ¡é©—檔案的 MD5 碼值" + +#: lib/poptI.c:181 +#, fuzzy +msgid "don't verify digest of files (obsolete)" +msgstr "ä¸æ ¡é©—檔案的 MD5 碼值" + +#: lib/poptI.c:183 +msgid "don't install file security contexts" +msgstr "ä¸å®‰è£æª”案安全上下文" + +#: lib/poptI.c:187 +msgid "do not reorder package installation to satisfy dependencies" +msgstr "ä¸é‡æ–°æŽ’列套件安è£é †åºä»¥æ»¿è¶³ç›¸ä¾éˆ" + +#: lib/poptI.c:191 +msgid "do not execute package scriptlet(s)" +msgstr "ä¸åŸ·è¡Œå¥—件內建短命令稿" + +#: lib/poptI.c:195 +#, c-format +msgid "do not execute %%pre scriptlet (if any)" +msgstr "ä¸åŸ·è¡Œé å…ˆå®‰è£çŸ­å‘½ä»¤ç¨¿(如果存在)" + +#: lib/poptI.c:198 +#, c-format +msgid "do not execute %%post scriptlet (if any)" +msgstr "ä¸åŸ·è¡Œå®‰è£å¾ŒçŸ­å‘½ä»¤ç¨¿(如果存在)" + +#: lib/poptI.c:201 +#, c-format +msgid "do not execute %%preun scriptlet (if any)" +msgstr "ä¸åŸ·è¡Œé å…ˆå®‰è£çŸ­å‘½ä»¤ç¨¿(如果存在)" + +#: lib/poptI.c:204 +#, c-format +msgid "do not execute %%postun scriptlet (if any)" +msgstr "ä¸åŸ·è¡Œé å…ˆå®‰è£çŸ­å‘½ä»¤ç¨¿(如果存在)" + +#: lib/poptI.c:207 +msgid "do not execute any scriptlet(s) triggered by this package" +msgstr "ä¸åŸ·è¡Œå¥—件內的任何å¯è§¸ç™¼çŸ­å‘½ä»¤ç¨¿" + +#: lib/poptI.c:210 +#, c-format +msgid "do not execute any %%triggerprein scriptlet(s)" +msgstr "ä¸åŸ·è¡Œä»»ä½•é å…ˆä½œæ¥­è§¸ç™¼åŸ·è¡Œçš„短命令稿" + +#: lib/poptI.c:213 +#, c-format +msgid "do not execute any %%triggerin scriptlet(s)" +msgstr "ä¸åŸ·è¡Œä»»ä½•å®‰è£ä¸­è§¸ç™¼åŸ·è¡Œçš„短命令稿" + +#: lib/poptI.c:216 +#, c-format +msgid "do not execute any %%triggerun scriptlet(s)" +msgstr "ä¸åŸ·è¡Œä»»ä½•æ¸…除中觸發執行的短命令稿" + +#: lib/poptI.c:219 +#, c-format +msgid "do not execute any %%triggerpostun scriptlet(s)" +msgstr "ä¸åŸ·è¡Œä»»ä½•ä½œæ¥­å¾Œè§¸ç™¼åŸ·è¡Œçš„短命令稿" + +#: lib/poptI.c:223 +msgid "do not perform any collection actions" +msgstr "" + +#: lib/poptI.c:227 +msgid "" +"upgrade to an old version of the package (--force on upgrades does this " +"automatically)" +msgstr "更新到一個舊版本的套件 (在更新作業中 --force 指令會自動進行此步驟)" + +#: lib/poptI.c:231 +msgid "print percentages as package installs" +msgstr "安è£å¥—件時å°å‡ºé€²åº¦ç™¾åˆ†æ¯”" + +#: lib/poptI.c:233 +msgid "relocate the package to , if relocatable" +msgstr "如果å¯ä»¥ï¼ŒæŠŠå¥—件é‡æ–°éƒ¨ç½²åˆ° <目錄>" + +#: lib/poptI.c:234 +msgid "" +msgstr "<目錄>" + +#: lib/poptI.c:236 +msgid "relocate files from path to " +msgstr "將檔案從 <舊目錄> é‡æ–°éƒ¨ç½²åˆ° <新目錄>" + +#: lib/poptI.c:237 +msgid "=" +msgstr "<舊目錄>=<新目錄>" + +#: lib/poptI.c:240 +msgid "ignore file conflicts between packages" +msgstr "忽略套件之間的檔案è¡çª" + +#: lib/poptI.c:243 +msgid "reinstall if the package is already present" +msgstr "如果套件已存在則é‡æ–°å®‰è£" + +#: lib/poptI.c:245 +msgid "don't install, but tell if it would work or not" +msgstr "ä¸çœŸæ­£å®‰è£ï¼Œåªå›žå ±ä½œæ¥­çµæžœæ˜¯å¦æ­£ç¢º" + +#: lib/poptI.c:248 +msgid "upgrade package(s)" +msgstr "更新套件" + +#: lib/poptQV.c:67 +msgid "query/verify all packages" +msgstr "查詢/校驗所有套件" + +#: lib/poptQV.c:69 +msgid "rpm checksig mode" +msgstr "rpm 檢查簽å模å¼" + +#: lib/poptQV.c:71 +msgid "query/verify package(s) owning file" +msgstr "查詢/校驗屬於套件的檔案" + +#: lib/poptQV.c:73 +msgid "query/verify package(s) in group" +msgstr "查詢/校驗套件所屬的組別" + +#: lib/poptQV.c:75 +msgid "query/verify a package file" +msgstr "查詢/校驗一個套件檔案" + +#: lib/poptQV.c:78 +msgid "query/verify package(s) with package identifier" +msgstr "根據套件的識別查詢/校驗套件" + +#: lib/poptQV.c:80 +msgid "query/verify package(s) with header identifier" +msgstr "根據表頭識別查詢/校驗套件" + +#: lib/poptQV.c:83 +msgid "rpm query mode" +msgstr "rpm 查詢模å¼" + +#: lib/poptQV.c:85 +msgid "query/verify a header instance" +msgstr "查詢/驗證表頭實體" + +#: lib/poptQV.c:87 +msgid "query/verify package(s) from install transaction" +msgstr "從安è£ç•°å‹•ä½œæ¥­æŸ¥è©¢/驗證套件" + +#: lib/poptQV.c:89 +msgid "query the package(s) triggered by the package" +msgstr "查詢由套件所觸發的套件" + +#: lib/poptQV.c:91 +msgid "rpm verify mode" +msgstr "rpm 校驗模å¼" + +#: lib/poptQV.c:93 +msgid "query/verify the package(s) which require a dependency" +msgstr "查詢/校驗需è¦æŸå€‹ç›¸ä¾ç‰©ä»¶çš„套件" + +#: lib/poptQV.c:95 +msgid "query/verify the package(s) which provide a dependency" +msgstr "查詢/æ ¡é©—æä¾›æŸå€‹ç›¸ä¾ç‰©ä»¶çš„套件" + +#: lib/poptQV.c:98 +msgid "do not glob arguments" +msgstr "ä¸ä»¥è¬ç”¨å­—元解æžå¼•æ•¸" + +#: lib/poptQV.c:100 +msgid "do not process non-package files as manifests" +msgstr "ä¸ä»¥æ¸…單方å¼è™•ç†éžå¥—件檔案" + +#: lib/poptQV.c:171 +msgid "list all configuration files" +msgstr "列出所有é…置檔案" + +#: lib/poptQV.c:173 +msgid "list all documentation files" +msgstr "列出所有文件檔案" + +#: lib/poptQV.c:175 +msgid "dump basic file information" +msgstr "調出基本的檔案資訊" + +#: lib/poptQV.c:179 +msgid "list files in package" +msgstr "列出套件內的檔案" + +#: lib/poptQV.c:184 +#, c-format +msgid "skip %%ghost files" +msgstr "ç•¥éŽ %%ghost 檔案" + +#: lib/poptQV.c:191 +msgid "display the states of the listed files" +msgstr "顯示列出的æ¯å€‹æª”案的狀態" + +#: lib/poptQV.c:209 +msgid "don't verify size of files" +msgstr "ä¸æ ¡é©—檔案大å°" + +#: lib/poptQV.c:212 +msgid "don't verify symlink path of files" +msgstr "ä¸æ ¡é©—檔案的連çµè·¯å¾‘" + +#: lib/poptQV.c:215 +msgid "don't verify owner of files" +msgstr "ä¸æ ¡é©—檔案的æ“有者" + +#: lib/poptQV.c:218 +msgid "don't verify group of files" +msgstr "ä¸æ ¡é©—檔案的屬組" + +#: lib/poptQV.c:221 +msgid "don't verify modification time of files" +msgstr "ä¸æ ¡é©—檔案的修改時間" + +#: lib/poptQV.c:224 lib/poptQV.c:227 +msgid "don't verify mode of files" +msgstr "ä¸æ ¡é©—檔案的模å¼" + +#: lib/poptQV.c:230 +#, fuzzy +msgid "don't verify capabilities of files" +msgstr "ä¸æ ¡é©—檔案大å°" + +#: lib/poptQV.c:233 +msgid "don't verify file security contexts" +msgstr "ä¸æ ¡é©—檔案的安全關è¯" + +#: lib/poptQV.c:235 +msgid "don't verify files in package" +msgstr "ä¸æ ¡é©—套件內的檔案" + +#: lib/poptQV.c:237 tools/rpmgraph.c:218 +msgid "don't verify package dependencies" +msgstr "ä¸æ ¡é©—套件的相ä¾é—œä¿‚" + +#: lib/poptQV.c:240 lib/poptQV.c:243 +msgid "don't execute verify script(s)" +msgstr "ä¸åŸ·è¡Œæ ¡é©—命令稿" + +#: lib/psm.c:212 +#, fuzzy, c-format +msgid "Missing rpmlib features for %s:\n" +msgstr "缺少 %s 架構於 %s:%d\n" + +#: lib/psm.c:254 +msgid "source package expected, binary found\n" +msgstr "需è¦ä¸€å€‹åŽŸå§‹ç¢¼å¥—件,但這是一個二進ä½å¥—件\n" + +#: lib/psm.c:307 +msgid "source package contains no .spec file\n" +msgstr "原始碼套件內沒有 .spec 檔案\n" + +#: lib/psm.c:848 +#, c-format +msgid "unpacking of archive failed%s%s: %s\n" +msgstr "解壓ä¿å­˜æª”案失敗 %s%s:%s\n" + +#: lib/psm.c:849 +msgid " on file " +msgstr " 於檔案 " + +#: lib/psm.c:967 +#, c-format +msgid "%s failed on file %s: %s\n" +msgstr "%s 失敗的於檔案 %s: %s\n" + +#: lib/psm.c:970 +#, c-format +msgid "%s failed: %s\n" +msgstr "%s 失敗:%s\n" + +#: lib/query.c:115 +#, c-format +msgid "incorrect format: %s\n" +msgstr "ä¸æ­£ç¢ºçš„æ ¼å¼ï¼š%s\n" + +#: lib/query.c:127 +#, fuzzy +msgid "(contains no files)\n" +msgstr "(沒有包å«æª”案)" + +#: lib/query.c:160 +msgid "normal " +msgstr "正常 " + +#: lib/query.c:163 +msgid "replaced " +msgstr "è¢«æ›¿æ› " + +#: lib/query.c:166 +msgid "not installed " +msgstr "æœªå®‰è£ " + +#: lib/query.c:169 +msgid "net shared " +msgstr "網路共享 " + +#: lib/query.c:172 +msgid "wrong color " +msgstr "錯誤é¡è‰² " + +#: lib/query.c:175 +msgid "(no state) " +msgstr "(無狀態) " + +#: lib/query.c:178 +#, c-format +msgid "(unknown %3d) " +msgstr "(ä¸æ˜Žçš„ %3d) " + +#: lib/query.c:198 +msgid "package has not file owner/group lists\n" +msgstr "套件內沒有檔案æ“有者/群組記錄\n" + +#: lib/query.c:229 +msgid "package has neither file owner or id lists\n" +msgstr "套件內沒有檔案æ“有者與 ID 記錄\n" + +#: lib/query.c:319 +#, c-format +msgid "group %s does not contain any packages\n" +msgstr "群組 %s 內還沒有任何套件\n" + +#: lib/query.c:326 +#, c-format +msgid "no package triggers %s\n" +msgstr "沒有套件內建觸發器 %s\n" + +#: lib/query.c:337 lib/query.c:356 lib/query.c:372 +#, c-format +msgid "malformed %s: %s\n" +msgstr "異常的 %s:%s\n" + +#: lib/query.c:347 lib/query.c:362 lib/query.c:377 +#, c-format +msgid "no package matches %s: %s\n" +msgstr "沒有套件匹é…:%s:%s\n" + +#: lib/query.c:385 +#, c-format +msgid "no package requires %s\n" +msgstr "æ²’æœ‰å¥—ä»¶éœ€è¦ %s\n" + +#: lib/query.c:394 +#, c-format +msgid "no package provides %s\n" +msgstr "沒有套件æä¾› %s\n" + +#: lib/query.c:424 +#, c-format +msgid "file %s: %s\n" +msgstr "檔案 %s:%s\n" + +#: lib/query.c:427 +#, c-format +msgid "file %s is not owned by any package\n" +msgstr "檔案 %s ä¸å±¬æ–¼ä»»ä½•å¥—件\n" + +#: lib/query.c:438 +#, c-format +msgid "invalid package number: %s\n" +msgstr "ä¸æ­£ç¢ºçš„套件編號:%s\n" + +#: lib/query.c:445 +#, fuzzy, c-format +msgid "record %u could not be read\n" +msgstr "記錄 %u 無法讀å–\n" + +#: lib/query.c:458 lib/rpminstall.c:662 +#, c-format +msgid "package %s is not installed\n" +msgstr "套件 %s 尚未安è£\n" + +#: lib/query.c:492 +#, c-format +msgid "unknown tag: \"%s\"\n" +msgstr "ä¸æ˜Žçš„標記:「%sã€\n" + +#: lib/rpmchecksig.c:43 +#, fuzzy, c-format +msgid "%s: key %d import failed.\n" +msgstr "%s:匯入失敗。\n" + +#: lib/rpmchecksig.c:47 +#, fuzzy, c-format +msgid "%s: key %d not an armored public key.\n" +msgstr "%s:ä¸æ˜¯ä¸€å€‹å—ä¿è­·çš„公鑰。\n" + +#: lib/rpmchecksig.c:91 +#, c-format +msgid "%s: import read failed(%d).\n" +msgstr "%s:匯入讀å–時失敗(%d)。\n" + +#: lib/rpmchecksig.c:116 +#, c-format +msgid "%s: headerRead failed\n" +msgstr "%s:headerRead 失敗\n" + +#: lib/rpmchecksig.c:125 +#, c-format +msgid "%s: Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/rpmchecksig.c:159 +#, c-format +msgid "skipping package %s with unverifiable V%u signature\n" +msgstr "" + +#: lib/rpmchecksig.c:410 +msgid "NOT OK" +msgstr "ä¸æ­£ç¢º" + +#: lib/rpmchecksig.c:410 +msgid "OK" +msgstr "正確" + +#: lib/rpmchecksig.c:412 +msgid " (MISSING KEYS:" +msgstr " (丟失的密鑰:" + +#: lib/rpmchecksig.c:414 +msgid ") " +msgstr ") " + +#: lib/rpmchecksig.c:415 +msgid " (UNTRUSTED KEYS:" +msgstr " (ä¸ä¿¡ä»»çš„密鑰:" + +#: lib/rpmchecksig.c:417 +msgid ")" +msgstr ")" + +#: lib/rpmchecksig.c:457 sign/rpmgensig.c:54 +#, c-format +msgid "%s: open failed: %s\n" +msgstr "%s:開啟失敗:%s\n" + +#: lib/rpmchroot.c:43 +#, fuzzy, c-format +msgid "Unable to open current directory: %m\n" +msgstr "移除目錄時失敗 %s: %s\n" + +#: lib/rpmchroot.c:59 lib/rpmchroot.c:84 +#, fuzzy, c-format +msgid "%s: chroot directory not set\n" +msgstr "%s 移除目錄 %s 失敗:目錄éžç©º\n" + +#: lib/rpmchroot.c:70 +#, fuzzy, c-format +msgid "Unable to change root directory: %m\n" +msgstr "移除目錄時失敗 %s: %s\n" + +#: lib/rpmchroot.c:95 +#, fuzzy, c-format +msgid "Unable to restore root directory: %m\n" +msgstr "移除目錄時失敗 %s: %s\n" + +#: lib/rpmds.c:403 +msgid "NO " +msgstr "å¦ " + +#: lib/rpmds.c:403 +msgid "YES" +msgstr "是" + +#: lib/rpmds.c:861 +msgid "PreReq:, Provides:, and Obsoletes: dependencies support versions." +msgstr "PreReq:ã€Provides:ã€ä»¥åŠ Obsoletes: 相ä¾æ”¯æ´ç‰ˆæœ¬ã€‚" + +#: lib/rpmds.c:864 +msgid "file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path." +msgstr "檔案å稱儲存為 (dirNameã€baseNameã€dirIndex) 字組,而éžè·¯å¾‘。" + +#: lib/rpmds.c:868 +msgid "package payload can be compressed using bzip2." +msgstr "套件酬載å¯ä»¥ä½¿ç”¨ bzip2 壓縮。" + +#: lib/rpmds.c:873 +#, fuzzy +msgid "package payload can be compressed using xz." +msgstr "套件酬載å¯ä»¥ä½¿ç”¨ bzip2 壓縮。" + +#: lib/rpmds.c:876 +#, fuzzy +msgid "package payload can be compressed using lzma." +msgstr "套件酬載å¯ä»¥ä½¿ç”¨ bzip2 壓縮。" + +#: lib/rpmds.c:880 +msgid "package payload file(s) have \"./\" prefix." +msgstr "套件酬載檔案有\"./\"字首。" + +#: lib/rpmds.c:883 +msgid "package name-version-release is not implicitly provided." +msgstr "套件的å稱-版本-發行編號沒有被隱å«æŒ‡å‡ºã€‚" + +#: lib/rpmds.c:886 +msgid "header tags are always sorted after being loaded." +msgstr "表頭標記總在載入之後自動排åºã€‚" + +#: lib/rpmds.c:889 +msgid "the scriptlet interpreter can use arguments from header." +msgstr "命令稿解譯器å¯ä»¥å¾žè¡¨é ­ä¸­å‘¼å«å¼•æ•¸ã€‚" + +#: lib/rpmds.c:892 +msgid "a hardlink file set may be installed without being complete." +msgstr "硬å¼éˆçµæª”案組åˆä¹Ÿè¨±æ²’有被完整安è£ã€‚" + +#: lib/rpmds.c:895 +msgid "package scriptlets may access the rpm database while installing." +msgstr "套件內建短命令稿在安è£ç¨‹åºä¸­å¯ä»¥å­˜å– rpm 資料庫。" + +#: lib/rpmds.c:899 +msgid "internal support for lua scripts." +msgstr "å…§éƒ¨æ”¯æ´ lua 命令稿。" + +#: lib/rpmds.c:903 +msgid "file digest algorithm is per package configurable" +msgstr "" + +#: lib/rpmds.c:907 +msgid "support for POSIX.1e file capabilities" +msgstr "" + +#: lib/rpmds.c:911 +#, fuzzy +msgid "package scriptlets can be expanded at install time." +msgstr "套件內建短命令稿在安è£ç¨‹åºä¸­å¯ä»¥å­˜å– rpm 資料庫。" + +#: lib/rpmgi.c:49 lib/rpminstall.c:115 lib/rpminstall.c:292 +#: lib/rpminstall.c:323 tools/rpmgraph.c:93 tools/rpmgraph.c:130 +#, c-format +msgid "open of %s failed: %s\n" +msgstr "é–‹å•Ÿ %s 失敗:%s\n" + +#: lib/rpmgi.c:136 +#, fuzzy, c-format +msgid "%s: not an rpm package (or package manifest)\n" +msgstr "%s: ä¸æ˜¯ rpm 套件(或套件清單):%s\n" + +#: lib/rpminstall.c:174 +msgid "Preparing..." +msgstr "正在準備…" + +#: lib/rpminstall.c:176 +msgid "Preparing packages for installation..." +msgstr "正在準備è¦å®‰è£çš„套件…" + +#: lib/rpminstall.c:254 tools/rpmgraph.c:168 +msgid "Failed dependencies:\n" +msgstr "相ä¾æ€§åµæ¸¬å¤±æ•—:\n" + +#: lib/rpminstall.c:305 +#, c-format +msgid "%s: not an rpm package (or package manifest): %s\n" +msgstr "%s: ä¸æ˜¯ rpm 套件(或套件清單):%s\n" + +#: lib/rpminstall.c:345 lib/rpminstall.c:724 tools/rpmgraph.c:113 +#, c-format +msgid "%s cannot be installed\n" +msgstr "%s 無法安è£\n" + +#: lib/rpminstall.c:457 +#, c-format +msgid "Retrieving %s\n" +msgstr "å–回中 %s\n" + +#: lib/rpminstall.c:469 +#, fuzzy, c-format +msgid "skipping %s - transfer failed\n" +msgstr "ç•¥éŽ %s - 傳輸失敗 - %s\n" + +#: lib/rpminstall.c:536 +#, c-format +msgid "package %s is not relocatable\n" +msgstr "套件 %s ä¸èƒ½é‡æ–°éƒ¨ç½²\n" + +#: lib/rpminstall.c:563 +#, c-format +msgid "error reading from file %s\n" +msgstr "讀å–檔案 %s 時發生錯誤\n" + +#: lib/rpminstall.c:569 +#, c-format +msgid "file %s requires a newer version of RPM\n" +msgstr "檔案 %s 需è¦æ›´æ–°ç‰ˆæœ¬çš„ RPM\n" + +#: lib/rpminstall.c:669 +#, fuzzy, c-format +msgid "\"%s\" specifies multiple packages:\n" +msgstr "「%sã€æŒ‡å®šäº†å¤šå€‹å¥—件\n" + +#: lib/rpminstall.c:708 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "無法開啟檔案 %s:%s\n" + +#: lib/rpminstall.c:714 +#, c-format +msgid "Installing %s\n" +msgstr "æ­£åœ¨å®‰è£ %s\n" + +#: lib/rpmlead.c:101 +#, fuzzy +msgid "not an rpm package" +msgstr "%s:ä¸æ˜¯ä¸€å€‹ rpm 套件\n" + +#: lib/rpmlead.c:105 +#, fuzzy +msgid "illegal signature type" +msgstr "%s:未發ç¾ç°½å\n" + +#: lib/rpmlead.c:109 +msgid "unsupported RPM package version" +msgstr "" + +#: lib/rpmlead.c:122 +#, c-format +msgid "read failed: %s (%d)\n" +msgstr "讀å–失敗:%s (%d)\n" + +#: lib/rpmlead.c:126 +#, fuzzy +msgid "not an rpm package\n" +msgstr "%s:ä¸æ˜¯ä¸€å€‹ rpm 套件\n" + +#: lib/rpmlock.c:102 lib/rpmlock.c:109 +#, fuzzy, c-format +msgid "can't create %s lock on %s (%s)\n" +msgstr "建立異動作業集" + +#: lib/rpmlock.c:106 +#, fuzzy, c-format +msgid "waiting for %s lock on %s\n" +msgstr "產生異動作業記錄æ¿(%p, %p)\n" + +#: lib/rpmplugins.c:60 +#, fuzzy, c-format +msgid "Failed to dlopen %s %s\n" +msgstr "é–‹å•Ÿ %s 失敗:%s\n" + +#: lib/rpmplugins.c:67 +#, fuzzy, c-format +msgid "Failed to resolve symbol %s: %s\n" +msgstr "無法將 %s æ›´å為 %s:%m\n" + +#: lib/rpmplugins.c:88 +#, c-format +msgid "Failed to expand %%__collection_%s macro\n" +msgstr "" + +#: lib/rpmplugins.c:137 lib/rpmplugins.c:142 +#, c-format +msgid "Plugin %s not loaded\n" +msgstr "" + +#: lib/rpmplugins.c:150 +#, fuzzy, c-format +msgid "Failed to resolve %s plugin symbol %s: %s\n" +msgstr "無法將 %s æ›´å為 %s:%m\n" + +#: lib/rpmprob.c:109 +msgid "different" +msgstr "ä¸åŒçš„" + +#: lib/rpmprob.c:115 +#, c-format +msgid "package %s is intended for a %s architecture" +msgstr "套件 %s 是é©ç”¨æ–¼ %s 架構的" + +#: lib/rpmprob.c:120 +#, c-format +msgid "package %s is intended for a %s operating system" +msgstr "套件 %s 是é©ç”¨æ–¼ %s 作業系統的" + +#: lib/rpmprob.c:124 +#, c-format +msgid "package %s is already installed" +msgstr "套件 %s 已經安è£äº†" + +#: lib/rpmprob.c:128 +#, c-format +msgid "path %s in package %s is not relocatable" +msgstr "在套件 %2$s 中的路徑 %1$s 無法é‡æ–°éƒ¨ç½²" + +#: lib/rpmprob.c:133 +#, c-format +msgid "file %s conflicts between attempted installs of %s and %s" +msgstr "在試圖安è£çš„ %s å’Œ %s 之間產生檔案 %s çš„è¡çª" + +#: lib/rpmprob.c:138 +#, c-format +msgid "file %s from install of %s conflicts with file from package %s" +msgstr "從 %s 安è£çš„檔案 %s 與來自套件 %s 的檔案產生è¡çª" + +#: lib/rpmprob.c:143 +#, c-format +msgid "package %s (which is newer than %s) is already installed" +msgstr "套件 %s (較 %s 版本還新) 已經安è£äº†" + +#: lib/rpmprob.c:148 +#, fuzzy, c-format +msgid "installing package %s needs %%cB on the %s filesystem" +msgstr "安è£å¥—件 %s æ™‚éœ€è¦ %%cB 空間於檔案系統 %s 上" + +#: lib/rpmprob.c:158 +#, fuzzy, c-format +msgid "installing package %s needs % inodes on the %s filesystem" +msgstr "安è£å¥—件 %s æ™‚éœ€è¦ % 個節點於檔案系統 %s 上" + +#: lib/rpmprob.c:162 +#, c-format +msgid "%s is needed by %s%s" +msgstr "%s 被 %s%s 所需è¦" + +#: lib/rpmprob.c:164 lib/rpmprob.c:169 lib/rpmprob.c:174 +msgid "(installed) " +msgstr "(已安è£) " + +#: lib/rpmprob.c:167 +#, c-format +msgid "%s conflicts with %s%s" +msgstr "%s 與 %s%s è¡çª" + +#: lib/rpmprob.c:172 +#, fuzzy, c-format +msgid "%s is obsoleted by %s%s" +msgstr "%s 被 %s%s 所需è¦" + +#: lib/rpmprob.c:178 +#, c-format +msgid "unknown error %d encountered while manipulating package %s" +msgstr "ä¸æ˜ŽéŒ¯èª¤ %d 發生在處ç†å¥—件 %s 的程åºä¸­" + +#: lib/rpmrc.c:186 +#, c-format +msgid "missing second ':' at %s:%d\n" +msgstr "在 %s:%d 處æ¼å¤±äº†ç¬¬äºŒå€‹ã€Œ:ã€\n" + +#: lib/rpmrc.c:189 +#, c-format +msgid "missing architecture name at %s:%d\n" +msgstr "在 %s:%d 處æ¼å¤±äº†æž¶æ§‹å稱\n" + +#: lib/rpmrc.c:334 +#, c-format +msgid "Incomplete data line at %s:%d\n" +msgstr "ä¸å®Œæ•´è³‡æ–™åˆ—ä½æ–¼ %s:%d\n" + +#: lib/rpmrc.c:339 +#, c-format +msgid "Too many args in data line at %s:%d\n" +msgstr "在資料列的 %s:%d 中有太多引數\n" + +#: lib/rpmrc.c:346 +#, c-format +msgid "Bad arch/os number: %s (%s:%d)\n" +msgstr "æ壞的架構/作業系統åºè™Ÿï¼š%s (%s:%d)\n" + +#: lib/rpmrc.c:377 +#, c-format +msgid "Incomplete default line at %s:%d\n" +msgstr "ä¸å®Œæ•´é è¨­åˆ—ä½æ–¼ %s:%d\n" + +#: lib/rpmrc.c:382 +#, c-format +msgid "Too many args in default line at %s:%d\n" +msgstr "在é è¨­åˆ—çš„ %s:%d 中有太多引數\n" + +#: lib/rpmrc.c:486 +#, c-format +msgid "missing ':' (found 0x%02x) at %s:%d\n" +msgstr "缺少 ':' (找到 0x%02x) æ–¼ %s:%d\n" + +#: lib/rpmrc.c:503 lib/rpmrc.c:543 +#, c-format +msgid "missing argument for %s at %s:%d\n" +msgstr "%s 缺少引數於 %s:%d\n" + +#: lib/rpmrc.c:519 +#, fuzzy, c-format +msgid "cannot open %s at %s:%d: %m\n" +msgstr "無法開啟 %s æ–¼ %s:%d: %s\n" + +#: lib/rpmrc.c:535 +#, c-format +msgid "missing architecture for %s at %s:%d\n" +msgstr "缺少 %s 架構於 %s:%d\n" + +#: lib/rpmrc.c:602 +#, c-format +msgid "bad option '%s' at %s:%d\n" +msgstr "ä¸ç•¶çš„é¸é … '%s' æ–¼ %s:%d\n" + +#: lib/rpmrc.c:1372 +#, c-format +msgid "Unknown system: %s\n" +msgstr "ä¸æ˜Žçš„系統:%s\n" + +#: lib/rpmrc.c:1373 +#, c-format +msgid "Please contact %s\n" +msgstr "" + +#: lib/rpmrc.c:1592 +#, fuzzy, c-format +msgid "Unable to open %s for reading: %m.\n" +msgstr "無法開啟 %s 以讀å–:%s\n" + +#: lib/rpmscript.c:69 +#, fuzzy, c-format +msgid "Unable to restore current directory: %m" +msgstr "移除目錄時失敗 %s: %s\n" + +#: lib/rpmscript.c:79 +msgid " scriptlet support not built in\n" +msgstr "" + +#: lib/rpmscript.c:217 +#, fuzzy, c-format +msgid "Couldn't create temporary file for %s: %s\n" +msgstr "無法開啟 %s:%s\n" + +#: lib/rpmscript.c:244 +#, fuzzy, c-format +msgid "Couldn't duplicate file descriptor: %s: %s\n" +msgstr "無法開啟 %s:%s\n" + +#: lib/rpmscript.c:267 +#, fuzzy, c-format +msgid "%s scriptlet failed, waitpid(%d) rc %d: %s\n" +msgstr "%s(%s-%s-%s.%s) 短命令稿執行失敗,waitpid(%d) rc %d: %s\n" + +#: lib/rpmscript.c:271 +#, fuzzy, c-format +msgid "%s scriptlet failed, signal %d\n" +msgstr "%s(%s-%s-%s.%s) 短命令稿執行失敗,離開狀態 %d\n" + +#: lib/rpmscript.c:274 +#, fuzzy, c-format +msgid "%s scriptlet failed, exit status %d\n" +msgstr "%s(%s-%s-%s.%s) 短命令稿執行失敗,離開狀態 %d\n" + +#: lib/rpmtd.c:254 +#, fuzzy +msgid "Unknown format" +msgstr "ä¸æ˜Žçš„標記" + +#: lib/rpmte.c:820 +#, fuzzy +msgid "install" +msgstr "(已安è£) " + +#: lib/rpmte.c:821 +msgid "erase" +msgstr "" + +#: lib/rpmts.c:92 +#, c-format +msgid "cannot open Packages database in %s\n" +msgstr "無法開啟套件資料庫 %s\n" + +#: lib/rpmts.c:193 +#, c-format +msgid "extra '(' in package label: %s\n" +msgstr "é¡å¤–的「(ã€å­˜åœ¨æ–¼å¥—件標籤中:%s\n" + +#: lib/rpmts.c:211 +#, c-format +msgid "missing '(' in package label: %s\n" +msgstr "丟失的「(ã€å­˜åœ¨æ–¼å¥—件標籤中:%s\n" + +#: lib/rpmts.c:219 +#, c-format +msgid "missing ')' in package label: %s\n" +msgstr "丟失的「)ã€å­˜åœ¨æ–¼å¥—件標籤中:%s\n" + +#: lib/rpmts.c:290 +#, fuzzy, c-format +msgid "%s: reading of public key failed.\n" +msgstr "%s:公鑰讀入失敗。\n" + +#: lib/rpmts.c:1034 +#, fuzzy +msgid "transaction" +msgstr "建立異動作業集" + +#: lib/signature.c:90 +#, c-format +msgid "sigh size(%d): BAD, read returned %d\n" +msgstr "sigh 大å°(%d):ä¸ç•¶ï¼Œè®€å–回傳 %d\n" + +#: lib/signature.c:95 +msgid "sigh magic: BAD\n" +msgstr "sigh magic:ä¸ç•¶\n" + +#: lib/signature.c:101 +#, c-format +msgid "sigh tags: BAD, no. of tags(%d) out of range\n" +msgstr "sigh 標記:ä¸ç•¶ï¼Œè™Ÿç¢¼çš„標記(%d)發信匣的範åœ\n" + +#: lib/signature.c:107 +#, c-format +msgid "sigh data: BAD, no. of bytes(%d) out of range\n" +msgstr "sigh 資料:ä¸ç•¶ï¼Œè™Ÿç¢¼çš„ ä½å…ƒçµ„(%d)發信匣的範åœ\n" + +#: lib/signature.c:122 +#, c-format +msgid "sigh blob(%d): BAD, read returned %d\n" +msgstr "sigh è¬ç”¨å­—元解æž(%d):ä¸ç•¶ï¼Œè®€å–回傳 %d\n" + +#: lib/signature.c:188 +#, c-format +msgid "sigh tag[%d]: BAD, tag %d type %d offset %d count %d\n" +msgstr "sigh 標記[%d]:ä¸ç•¶ï¼Œæ¨™è¨˜ %d åž‹æ…‹ %d å移 %d 計數 %d\n" + +#: lib/signature.c:198 +msgid "sigh load: BAD\n" +msgstr "sigh 載入:ä¸ç•¶\n" + +#: lib/signature.c:211 +#, fuzzy, c-format +msgid "sigh pad(%zd): BAD, read %zd bytes\n" +msgstr "sigh å¡«å……(%d):ä¸ç•¶ï¼Œè®€å– %d ä½å…ƒçµ„\n" + +#: lib/signature.c:227 +#, fuzzy, c-format +msgid "sigh sigSize(%zd): BAD, fstat(2) failed\n" +msgstr "sigh sigSize(%d):ä¸ç•¶ï¼Œfstat(2)失敗\n" + +#: lib/signature.c:303 +msgid "Immutable header region could not be read. Corrupted package?\n" +msgstr "" + +#: lib/signature.c:397 +#, fuzzy +msgid "MD5 digest:" +msgstr "MD 5 摘è¦ï¼š" + +#: lib/signature.c:436 +#, fuzzy +msgid "Header SHA1 digest:" +msgstr "表頭 SHA1 摘è¦ï¼š" + +#: lib/signature.c:489 +msgid "Header " +msgstr "表頭 " + +#: lib/signature.c:502 +msgid "Verify signature: BAD PARAMETERS\n" +msgstr "驗證簽å:ä¸ç•¶çš„åƒæ•¸\n" + +#: lib/signature.c:523 +#, c-format +msgid "Signature: UNKNOWN (%d)\n" +msgstr "ç°½å:ä¸æ˜Ž (%d)\n" + +#: lib/transaction.c:1388 +msgid "skipped" +msgstr "" + +#: lib/transaction.c:1388 +#, fuzzy +msgid "failed" +msgstr "%s 失敗:%s\n" + +#: lib/verify.c:378 +#, c-format +msgid "missing %c %s" +msgstr "缺少 %c %s" + +#: lib/verify.c:428 +#, fuzzy, c-format +msgid "Unsatisfied dependencies for %s:\n" +msgstr "無法滿足 %s 的相ä¾æ€§ï¼š" + +#: lib/headerfmt.c:342 +msgid "missing { after %" +msgstr "% 之後缺少 {" + +#: lib/headerfmt.c:364 +msgid "missing } after %{" +msgstr "%{ 之後缺少 }" + +#: lib/headerfmt.c:375 +msgid "empty tag format" +msgstr "清空標記格å¼" + +#: lib/headerfmt.c:386 +msgid "empty tag name" +msgstr "清空標記å稱" + +#: lib/headerfmt.c:393 +msgid "unknown tag" +msgstr "ä¸æ˜Žçš„標記" + +#: lib/headerfmt.c:413 +msgid "] expected at end of array" +msgstr "] é æœŸåœ¨é™£åˆ—çš„çµæŸ" + +#: lib/headerfmt.c:425 +msgid "unexpected ]" +msgstr "未é æœŸçš„ ]" + +#: lib/headerfmt.c:435 +msgid "unexpected }" +msgstr "未é æœŸçš„ }" + +#: lib/headerfmt.c:491 +msgid "? expected in expression" +msgstr "? é æœŸæ–¼é‹ç®—å¼ä¸­" + +#: lib/headerfmt.c:498 +msgid "{ expected after ? in expression" +msgstr "{ é æœŸæ–¼é‹ç®—å¼ä¸­ ? 之後" + +#: lib/headerfmt.c:510 lib/headerfmt.c:550 +msgid "} expected in expression" +msgstr "} é æœŸæ–¼é‹ç®—å¼ä¸­" + +#: lib/headerfmt.c:518 +msgid ": expected following ? subexpression" +msgstr ": é æœŸè·Ÿè‘—å­é‹ç®—å¼" + +#: lib/headerfmt.c:536 +msgid "{ expected after : in expression" +msgstr "{ é æœŸæ–¼é‹ç®—å¼ä¸­ : 之後" + +#: lib/headerfmt.c:558 +msgid "| expected at end of expression" +msgstr "| é æœŸæ–¼é‹ç®—å¼çš„çµæŸ" + +#: lib/headerfmt.c:727 +msgid "array iterator used with different sized arrays" +msgstr "用於ä¸åŒå¤§å°é™£åˆ—的陣列迭代器" + +#: lib/rpmdb.c:85 +#, c-format +msgid "Generating %d missing index(es), please wait...\n" +msgstr "" + +#: lib/rpmdb.c:154 +#, c-format +msgid "cannot open %s index using db%d - %s (%d)\n" +msgstr "無法使用資料庫 %2$d- %3$s(%4$d) é–‹å•Ÿ %1$s 索引\n" + +#: lib/rpmdb.c:687 +msgid "no dbpath has been set\n" +msgstr "沒有 dbpath 已被設定\n" + +#: lib/rpmdb.c:869 lib/rpmdb.c:986 lib/rpmdb.c:1031 lib/rpmdb.c:1884 +#: lib/rpmdb.c:2037 lib/rpmdb.c:2071 lib/rpmdb.c:2632 +#, c-format +msgid "error(%d) getting \"%s\" records from %s index\n" +msgstr "從 %3$s 索引å–å¾— \"%2$s\" 記錄時產生錯誤(%1$d)\n" + +#: lib/rpmdb.c:1218 +msgid "miFreeHeader: skipping" +msgstr "miFreeHeader:跳éŽ" + +#: lib/rpmdb.c:1228 +#, c-format +msgid "error(%d) storing record #%d into %s\n" +msgstr "儲存記錄 #%2$d 進入 %3$s 時產生錯誤(%1$d)\n" + +#: lib/rpmdb.c:1325 +#, fuzzy, c-format +msgid "%s: regexec failed: %s\n" +msgstr "%s:檢索失敗:%s\n" + +#: lib/rpmdb.c:1506 +#, fuzzy, c-format +msgid "%s: regcomp failed: %s\n" +msgstr "%s:開啟失敗:%s\n" + +#: lib/rpmdb.c:1666 +msgid "rpmdbNextIterator: skipping" +msgstr "rpmdbNextIterator:跳éŽ" + +#: lib/rpmdb.c:1807 +#, c-format +msgid "rpmdb: damaged header #%u retrieved -- skipping.\n" +msgstr "rpmdb:已å–回æ壞的表頭 #%u -- è·³éŽã€‚\n" + +#: lib/rpmdb.c:2228 +#, fuzzy, c-format +msgid "error(%d:%s) getting next key from %s index\n" +msgstr "從 %3$s 索引å–å¾— \"%2$s\" 記錄時產生錯誤(%1$d)\n" + +#: lib/rpmdb.c:2334 +#, fuzzy, c-format +msgid "error(%d) adding header #%d record\n" +msgstr "設定用於 %3$s 撤除的表頭 #%2$d 記錄時產生錯誤(%1$d)\n" + +#: lib/rpmdb.c:2343 +#, fuzzy, c-format +msgid "error(%d) removing header #%d record\n" +msgstr "設定用於 %3$s 撤除的表頭 #%2$d 記錄時產生錯誤(%1$d)\n" + +#: lib/rpmdb.c:2367 +#, c-format +msgid "%s: cannot read header at 0x%x\n" +msgstr "%s: 無法讀å–在 0x%x 的表頭\n" + +#: lib/rpmdb.c:2434 +#, c-format +msgid "error(%d) setting \"%s\" records from %s index\n" +msgstr "從 %3$s 索引設定 \"%2$s\" 記錄時產生錯誤(%1$d)\n" + +#: lib/rpmdb.c:2453 +#, c-format +msgid "error(%d) storing record \"%s\" into %s\n" +msgstr "儲存記錄 \"%2$s\" 進入 %3$s 時產生錯誤(%1$d)\n" + +#: lib/rpmdb.c:2463 +#, c-format +msgid "error(%d) removing record \"%s\" from %s\n" +msgstr "從 %3$s 移除記錄 \"%2$s\" 時產生錯誤(%1$d)\n" + +#: lib/rpmdb.c:2539 +#, c-format +msgid "error(%d) allocating new package instance\n" +msgstr "é…置新套件實體時產生錯誤(%d)\n" + +#: lib/rpmdb.c:2648 +#, c-format +msgid "error(%d) storing record %s into %s\n" +msgstr "儲存記錄 %2$s æ–¼ %3$s 時產生錯誤(%1$d)\n" + +#: lib/rpmdb.c:2845 +msgid "no dbpath has been set" +msgstr "沒有 dbpath 已被設定" + +#: lib/rpmdb.c:2863 +#, fuzzy, c-format +msgid "failed to create directory %s: %s\n" +msgstr "移除目錄時失敗 %s: %s\n" + +#: lib/rpmdb.c:2897 +#, c-format +msgid "header #%u in the database is bad -- skipping.\n" +msgstr "在資料庫中有ä¸ç•¶çš„表頭 #%u -- è·³éŽã€‚\n" + +#: lib/rpmdb.c:2911 +#, c-format +msgid "cannot add record originally at %u\n" +msgstr "無法加入原本在 %u 的記錄\n" + +#: lib/rpmdb.c:2926 +msgid "failed to rebuild database: original database remains in place\n" +msgstr "é‡å»ºè³‡æ–™åº«æ™‚失敗:原來的資料庫ä¿æŒåŽŸç‹€\n" + +#: lib/rpmdb.c:2934 +msgid "failed to replace old database with new database!\n" +msgstr "以新的資料庫å–代舊的資料庫時失敗ï¼\n" + +#: lib/rpmdb.c:2936 +#, c-format +msgid "replace files in %s with files from %s to recover" +msgstr "以 %2$s 的檔案å–代 %1$s 中的檔案來回復" + +#: lib/rpmdb.c:2947 +#, c-format +msgid "failed to remove directory %s: %s\n" +msgstr "移除目錄時失敗 %s: %s\n" + +#: lib/backend/db3.c:28 +#, c-format +msgid "db%d error(%d) from %s: %s\n" +msgstr "資料庫%d 錯誤(%d) 來自 %s: %s\n" + +#: lib/backend/db3.c:31 +#, c-format +msgid "db%d error(%d): %s\n" +msgstr "資料庫%d 錯誤(%d): %s\n" + +#: lib/backend/db3.c:508 +#, c-format +msgid "cannot get %s lock on %s/%s\n" +msgstr "無法å–å¾— %s 鎖定於 %s/%s\n" + +#: lib/backend/db3.c:510 +msgid "shared" +msgstr "共享" + +#: lib/backend/db3.c:510 +msgid "exclusive" +msgstr "互斥" + +#: lib/backend/db3.c:590 +#, fuzzy, c-format +msgid "invalid index type %x on %s/%s\n" +msgstr "已驗證資料庫索引 %s/%s\n" + +#: lib/backend/dbconfig.c:144 +#, c-format +msgid "unrecognized db option: \"%s\" ignored.\n" +msgstr "無法辨識的資料庫é¸é …:\"%s\" 忽略。\n" + +#: lib/backend/dbconfig.c:181 +#, c-format +msgid "%s has invalid numeric value, skipped\n" +msgstr "%s 有無效的數值,略éŽ\n" + +#: lib/backend/dbconfig.c:190 +#, c-format +msgid "%s has too large or too small long value, skipped\n" +msgstr "%s 有太大或太å°çš„長整數值,略éŽ\n" + +#: lib/backend/dbconfig.c:199 +#, c-format +msgid "%s has too large or too small integer value, skipped\n" +msgstr "%s 有太大或太å°çš„整數值,略éŽ\n" + +#: plugins/sepolicy.c:220 +#, fuzzy, c-format +msgid "Failed to decode policy for %s\n" +msgstr "無法從 %s 讀å–è¦æ ¼æª”案\n" + +#: plugins/sepolicy.c:227 +#, fuzzy, c-format +msgid "Failed to create temporary file for %s: %s\n" +msgstr "無法開啟 %s:%s\n" + +#: plugins/sepolicy.c:233 +#, fuzzy, c-format +msgid "Failed to write %s policy to file %s\n" +msgstr "無法從 %s 讀å–è¦æ ¼æª”案\n" + +#: plugins/sepolicy.c:305 +#, fuzzy +msgid "Failed to create semanage handle\n" +msgstr "建立 %s 時失敗: %s\n" + +#: plugins/sepolicy.c:311 +#, fuzzy +msgid "Failed to connect to policy handler\n" +msgstr "連接到伺æœå™¨æ™‚失敗" + +#: plugins/sepolicy.c:315 +#, fuzzy, c-format +msgid "Failed to begin policy transaction: %s\n" +msgstr "é–‹å•Ÿ %s 失敗:%s\n" + +#: plugins/sepolicy.c:346 +#, fuzzy, c-format +msgid "Failed to remove temporary policy file %s: %s\n" +msgstr "移除目錄時失敗 %s: %s\n" + +#: plugins/sepolicy.c:394 +#, fuzzy, c-format +msgid "Failed to install policy module: %s (%s)\n" +msgstr "無法將 %s æ›´å為 %s:%m\n" + +#: plugins/sepolicy.c:424 +#, fuzzy, c-format +msgid "Failed to remove policy module: %s\n" +msgstr "è®€å– %s 失敗: %s。\n" + +#: plugins/sepolicy.c:448 plugins/sepolicy.c:500 +#, fuzzy, c-format +msgid "Failed to fork process: %s\n" +msgstr "é–‹å•Ÿ %s 失敗:%s\n" + +#: plugins/sepolicy.c:458 plugins/sepolicy.c:510 +#, fuzzy, c-format +msgid "Failed to execute %s: %s\n" +msgstr "建立 %s 時失敗: %s\n" + +#: plugins/sepolicy.c:464 plugins/sepolicy.c:516 +#, fuzzy, c-format +msgid "%s terminated abnormally\n" +msgstr "巨集 %%%s 具有未終çµçš„主體\n" + +#: plugins/sepolicy.c:468 plugins/sepolicy.c:520 +#, fuzzy, c-format +msgid "%s failed with exit code %i\n" +msgstr "巨集 %%%s 展開時失敗\n" + +#: plugins/sepolicy.c:475 +msgid "Failed to commit policy changes\n" +msgstr "" + +#: plugins/sepolicy.c:492 +msgid "Failed to expand restorecon path" +msgstr "" + +#: plugins/sepolicy.c:571 +msgid "Failed to relabel filesystem. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:575 +msgid "Failed to reload file contexts. Files may be mislabeled\n" +msgstr "" + +#: plugins/sepolicy.c:602 +#, fuzzy, c-format +msgid "Failed to extract policy from %s\n" +msgstr "無法從 %s 讀å–è¦æ ¼æª”案\n" + +#: python/rpmts-py.c:166 +#, c-format +msgid "error: python callback %s failed, aborting!\n" +msgstr "" + +#: rpmio/macro.c:185 +#, c-format +msgid "======================== active %d empty %d\n" +msgstr "======================== 作用中 %d 清空 %d\n" + +#: rpmio/macro.c:323 +#, c-format +msgid "%3d>%*s(empty)" +msgstr "%3d>%*s(清空)" + +#: rpmio/macro.c:364 +#, c-format +msgid "%3d<%*s(empty)\n" +msgstr "%3d<%*s(清空)\n" + +#: rpmio/macro.c:536 rpmio/macro.c:574 +#, c-format +msgid "Macro %%%s has unterminated body\n" +msgstr "巨集 %%%s 具有未終çµçš„主體\n" + +#: rpmio/macro.c:593 +#, c-format +msgid "Macro %%%s has illegal name (%%define)\n" +msgstr "巨集 %%%s 具有ä¸åˆæ³•çš„å稱 (%%define)\n" + +#: rpmio/macro.c:599 +#, c-format +msgid "Macro %%%s has unterminated opts\n" +msgstr "巨集 %%%s 具有未終çµçš„é¸é …\n" + +#: rpmio/macro.c:604 +#, c-format +msgid "Macro %%%s has empty body\n" +msgstr "巨集 %%%s 具有清空的主體\n" + +#: rpmio/macro.c:610 +#, c-format +msgid "Macro %%%s failed to expand\n" +msgstr "巨集 %%%s 展開時失敗\n" + +#: rpmio/macro.c:648 +#, c-format +msgid "Macro %%%s has illegal name (%%undefine)\n" +msgstr "巨集 %%%s 具有ä¸åˆæ³•çš„å稱 (%%undefine)\n" + +#: rpmio/macro.c:737 +#, c-format +msgid "Macro %%%s (%s) was not used below level %d\n" +msgstr "巨集 %%%s (%s) 在等級 %d 之下未被使用\n" + +#: rpmio/macro.c:819 +#, c-format +msgid "Unknown option %c in %s(%s)\n" +msgstr "在 %2$s(%3$s) 中有ä¸æ˜Žçš„é¸é … %1$c\n" + +#: rpmio/macro.c:1042 +msgid "" +"Too many levels of recursion in macro expansion. It is likely caused by " +"recursive macro declaration.\n" +msgstr "" + +#: rpmio/macro.c:1111 rpmio/macro.c:1128 +#, c-format +msgid "Unterminated %c: %s\n" +msgstr "未終çµçš„ %c: %s\n" + +#: rpmio/macro.c:1169 +#, c-format +msgid "A %% is followed by an unparseable macro\n" +msgstr "在無法解æžçš„巨集之後跟著一個 %%\n" + +#: rpmio/rpmfileutil.c:277 +#, fuzzy, c-format +msgid "error creating temporary file %s: %m\n" +msgstr "建立暫時檔案 %s 時發生錯誤\n" + +#: rpmio/rpmfileutil.c:342 rpmio/rpmfileutil.c:348 +#, c-format +msgid "File %s: %s\n" +msgstr "檔案 %s: %s\n" + +#: rpmio/rpmfileutil.c:351 +#, c-format +msgid "File %s is smaller than %u bytes\n" +msgstr "檔案 %s å°æ–¼ %u ä½å…ƒçµ„\n" + +#: rpmio/rpmfileutil.c:755 +#, fuzzy +msgid "failed to create directory" +msgstr "移除目錄時失敗 %s: %s\n" + +#: rpmio/rpmlua.c:480 +#, fuzzy, c-format +msgid "invalid syntax in lua scriptlet: %s\n" +msgstr "ä¸æ”¯æ´èˆŠèªžæ³•ï¼š%s\n" + +#: rpmio/rpmlua.c:496 +#, fuzzy, c-format +msgid "invalid syntax in lua script: %s\n" +msgstr "ä¸æ”¯æ´èˆŠèªžæ³•ï¼š%s\n" + +#: rpmio/rpmlua.c:501 rpmio/rpmlua.c:520 +#, fuzzy, c-format +msgid "lua script failed: %s\n" +msgstr "%s: Fwrite 失敗:%s\n" + +#: rpmio/rpmlua.c:515 +#, fuzzy, c-format +msgid "invalid syntax in lua file: %s\n" +msgstr "ä¸æ­£ç¢ºçš„套件編號:%s\n" + +#: rpmio/rpmlua.c:683 +#, fuzzy, c-format +msgid "lua hook failed: %s\n" +msgstr "%s:檢索失敗:%s\n" + +#: rpmio/rpmlog.c:37 +msgid "(no error)" +msgstr "(無錯誤)" + +#: rpmio/rpmlog.c:148 rpmio/rpmlog.c:149 rpmio/rpmlog.c:150 +msgid "fatal error: " +msgstr "åš´é‡éŒ¯èª¤ï¼š" + +#: rpmio/rpmlog.c:151 +msgid "error: " +msgstr "錯誤:" + +#: rpmio/rpmlog.c:152 +msgid "warning: " +msgstr "警告:" + +#: rpmio/rpmmalloc.c:25 +#, c-format +msgid "memory alloc (%u bytes) returned NULL.\n" +msgstr "記憶體é…ç½® (%u ä½å…ƒçµ„) 回傳空值。\n" + +#: rpmio/rpmpgp.c:1361 +#, fuzzy, c-format +msgid "V%d %s/%s %s, key ID %s" +msgstr " DSA ç°½å:" + +#: rpmio/rpmpgp.c:1369 +#, fuzzy +msgid "(none)" +msgstr "(無錯誤)" + +#: rpmio/rpmpgp.c:1652 +#, fuzzy, c-format +msgid "Failed to register fork handler: %m\n" +msgstr "無法從 %s 讀å–è¦æ ¼æª”案\n" + +#: sign/rpmgensig.c:88 +#, c-format +msgid "%s: Fwrite failed: %s\n" +msgstr "%s: Fwrite 失敗:%s\n" + +#: sign/rpmgensig.c:98 +#, fuzzy, c-format +msgid "%s: Fflush failed: %s\n" +msgstr "%s:檢索失敗:%s\n" + +#: sign/rpmgensig.c:128 +#, c-format +msgid "Unsupported PGP hash algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:141 +#, c-format +msgid "Unsupported PGP pubkey algorithm %d\n" +msgstr "" + +#: sign/rpmgensig.c:171 +#, c-format +msgid "Couldn't create pipe for signing: %m" +msgstr "" + +#: sign/rpmgensig.c:213 +#, c-format +msgid "gpg exec failed (%d)\n" +msgstr "gpg 執行失敗 (%d)\n" + +#: sign/rpmgensig.c:243 +msgid "gpg failed to write signature\n" +msgstr "寫入簽å時 gpg 失敗\n" + +#: sign/rpmgensig.c:260 +msgid "unable to read the signature\n" +msgstr "無法讀å–ç°½å\n" + +#: sign/rpmgensig.c:480 sign/rpmgensig.c:549 +#, fuzzy +msgid "rpmMkTemp failed\n" +msgstr "makeTempFile 失敗\n" + +#: sign/rpmgensig.c:532 +#, c-format +msgid "%s already contains identical signature, skipping\n" +msgstr "" + +#: sign/rpmgensig.c:557 +#, c-format +msgid "%s: writeLead failed: %s\n" +msgstr "%s:writeLead 失敗:%s\n" + +#: sign/rpmgensig.c:563 +#, c-format +msgid "%s: rpmWriteSignature failed: %s\n" +msgstr "%s:rpmWriteSignature 失敗:%s\n" + +#: sign/rpmgensig.c:577 +#, fuzzy, c-format +msgid "replacing %s failed: %s\n" +msgstr "é–‹å•Ÿ %s 失敗:%s\n" + +#: tools/rpmgraph.c:143 +#, c-format +msgid "%s: read manifest failed: %s\n" +msgstr "%s: 讀å–清單失敗:%s\n" + +#: tools/rpmgraph.c:220 +msgid "don't verify header+payload signature" +msgstr "ä¸é©—證表頭+酬載簽å" + +#~ msgid "getUname: too many uid's\n" +#~ msgstr "getUname:éŽå¤šçš„ uid\n" + +#~ msgid "getUnameS: too many uid's\n" +#~ msgstr "getUnameS:éŽå¤šçš„ uid\n" + +#~ msgid "getUidS: too many uid's\n" +#~ msgstr "getUidS:éŽå¤šçš„ uid\n" + +#~ msgid "getGname: too many gid's\n" +#~ msgstr "getGname:éŽå¤šçš„ gid\n" + +#~ msgid "getGnameS: too many gid's\n" +#~ msgstr "getGnameS:éŽå¤šçš„ gid\n" + +#~ msgid "getGidS: too many gid's\n" +#~ msgstr "getGidS:éŽå¤šçš„ gid\n" + +#~ msgid "ignore package name relation(s) [%d]\t%s -> %s\n" +#~ msgstr "忽略套件åç¨±é—œè¯ [%d]\t %s-> %s\n" + +#~ msgid "add suggested packages to transaction" +#~ msgstr "加入建議的套件到異動作業" + +#~ msgid "do not suggest missing dependency resolution(s)" +#~ msgstr "ä¸çµ¦å‡ºç›¸ä¾æ€§è§£æ±ºæ–¹æ¡ˆçš„建議" + +#, fuzzy +#~ msgid "Couldn't chdir to %s: %s\n" +#~ msgstr "無法執行 %s: %s\n" + +#~ msgid "" +#~ "--nodeps may only be specified during package building, rebuilding, " +#~ "recompilation, installation,erasure, and verification" +#~ msgstr "--nodeps é¸é …åªèƒ½åœ¨å¥—件的組建ã€é‡å»ºã€é‡ç·¨è­¯ã€å®‰è£ã€æ¸…除和校驗時指定" + +#~ msgid "" +#~ "--root (-r) may only be specified during installation, erasure, querying, " +#~ "and database rebuilds" +#~ msgstr "--root(-r) é¸é …åªèƒ½åœ¨å¥—件的安è£ã€æ¸…除ã€æŸ¥è©¢å’Œè³‡æ–™åº«é‡å»ºæ™‚指定" + +#~ msgid "detect file conflicts between packages" +#~ msgstr "在套件之間åµæ¸¬æœƒè¡çªçš„檔案" + +#~ msgid "temporary database %s already exists\n" +#~ msgstr "臨時資料庫 %s 已經存在\n" + +#~ msgid "query/verify package(s) with file identifier" +#~ msgstr "根據檔案識別查詢/校驗套件" + +#~ msgid "" +#~ msgstr "<è¦æ ¼æª”>" + +#~ msgid "Invalid %%_signature spec in macro file.\n" +#~ msgstr "在巨集定義檔案中有ä¸æ­£ç¢ºçš„ %%_signature è¦æ ¼ã€‚\n" + +#~ msgid "%s: was already signed by key ID %s, skipping\n" +#~ msgstr "%s: 已經由éµå€¼è­˜åˆ¥è™Ÿ %s 所簽å, è·³éŽ\n" + +#~ msgid "Target buffer overflow\n" +#~ msgstr "目標緩è¡å€æº¢ä½\n" + +#~ msgid "no files to sign\n" +#~ msgstr "沒有è¦ç°½å的檔案\n" + +#~ msgid "cannot access file %s\n" +#~ msgstr "無法存å–檔案 %s\n" + +#~ msgid "--sign may only be used during package building" +#~ msgstr "--sign é¸é …åªèƒ½åœ¨å¥—件組建時指定" + +#~ msgid "don't verify GPG V3 DSA signature(s)" +#~ msgstr "ä¸æ ¡é©— GPG V3 DSA ç°½å" + +#~ msgid "don't verify PGP V3 RSA/MD5 signature(s)" +#~ msgstr "ä¸æ ¡é©— PGP V3 RSA/MD5 ç°½å" + +#~ msgid "sign package(s) (identical to --resign)" +#~ msgstr "å°å¥—件簽å (與 --resign å«ç¾©ç›¸åŒ)" + +#~ msgid "generate signature" +#~ msgstr "產生簽å" + +#~ msgid "Invalid %%_signature spec in macro file\n" +#~ msgstr "在巨集檔案中有無效的 %%_signature spec\n" + +#~ msgid "TIMECHECK failure: %s\n" +#~ msgstr "時間檢查失敗:%s\n" + +#~ msgid "generate headers compatible with rpm4 packaging" +#~ msgstr "產生相容於 rpm4 打包的表頭" + +#~ msgid "Internal error in argument processing (%d) :-(\n" +#~ msgstr "在處ç†å¼•æ•¸ (%d) 時發生內部錯誤 :-(\n" + +#, fuzzy +#~ msgid "%s: policy file read failed.\n" +#~ msgstr "%s:公鑰讀入失敗。\n" + +#~ msgid "readRPM: open %s: %s\n" +#~ msgstr "readRPM:開啟 %s:%s\n" + +#~ msgid "%s: Fseek failed: %s\n" +#~ msgstr "%s:檢索失敗:%s\n" + +#~ msgid "readRPM: %s is not an RPM package\n" +#~ msgstr "readRPM:%s ä¸æ˜¯ä¸€å€‹ RPM 套件。\n" + +#~ msgid "readRPM: reading header from %s\n" +#~ msgstr "readRPMï¼šæ­£åœ¨è®€å– %s 的檔案表頭\n" + +#~ msgid "Generating signature: %d\n" +#~ msgstr "產生簽å:%d\n" + +#~ msgid "generate PGP/GPG signature" +#~ msgstr "產生 PGP/GPG ç°½å" + +#~ msgid "no packages files given for rebuild" +#~ msgstr "沒有指定è¦é‡å»ºçš„套件å稱" + +#~ msgid "no spec files given for build" +#~ msgstr "沒有指定用於組建的è¦æ ¼æª”案å稱" + +#~ msgid "no tar files given for build" +#~ msgstr "沒有指定用於組建的打包檔案å稱" + +#, fuzzy +#~ msgid "%s failed\n" +#~ msgstr "%s 失敗:%s\n" + +#~ msgid "Recursion depth(%d) greater than max(%d)\n" +#~ msgstr "éžè¿´æ·±åº¦(%d)大於最大值(%d)\n" + +#~ msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n" +#~ msgstr "dbiTagsInit:無法辨識的標記å稱:\"%s\"忽略\n" + +#~ msgid "rpmdbAdd: skipping" +#~ msgstr "rpmdbAdd:跳éŽ" + +#~ msgid "(rpmlib provides)" +#~ msgstr "(rpmlib æä¾›)" + +#~ msgid "(cached)" +#~ msgstr "(å¿«å–)" + +#~ msgid "(db files)" +#~ msgstr "(資料庫檔案)" + +#~ msgid "(db provides)" +#~ msgstr "(資料庫æä¾›)" + +#~ msgid "(added files)" +#~ msgstr "(加入的檔案)" + +#~ msgid "(added provide)" +#~ msgstr "(加入的æ供物)" + +#~ msgid "url port must be a number\n" +#~ msgstr "網å€é€£æŽ¥åŸ å¿…須是數字\n" + +#~ msgid "File tree walk options (with --ftswalk):" +#~ msgstr "檔案樹éæ­·é¸é … (使用 --ftswalk):" + +#~ msgid "follow command line symlinks" +#~ msgstr "跟隨命令列符號連çµ" + +#~ msgid "logical walk" +#~ msgstr "é‚輯éæ­·" + +#~ msgid "don't change directories" +#~ msgstr "ä¸è®Šæ›´ç›®éŒ„" + +#~ msgid "don't get stat info" +#~ msgstr "ä¸å–得狀態資訊" + +#~ msgid "physical walk" +#~ msgstr "實體éæ­·" + +#~ msgid "return dot and dot-dot" +#~ msgstr "回傳 . å’Œ .." + +#~ msgid "don't cross devices" +#~ msgstr "ä¸äº¤å‰è£ç½®" + +#~ msgid "return whiteout information" +#~ msgstr "回傳空白化資訊" + +#~ msgid "debug package state machine" +#~ msgstr "å°å¥—件狀態機器除錯" + +#~ msgid "query/verify package(s) from TOP file tree walk" +#~ msgstr "從頂端é歷檔案樹查詢/驗證套件" + +#~ msgid "query/verify package(s) from system HDLIST" +#~ msgstr "系統 HDLIST 查詢/驗證套件從" + +#~ msgid "do not order transaction set" +#~ msgstr "ä¸æŽ’åºç•°å‹•ä½œæ¥­é›†" + +#~ msgid "do not read headers" +#~ msgstr "ä¸è®€å–表頭" + +#~ msgid "File doesn't match prefix (%s): %s\n" +#~ msgstr "檔案與字首ä¸åŒ¹é… (%s):%s\n" + +#, fuzzy +#~ msgid "Unable to get current dependency name.\n" +#~ msgstr "移除目錄時失敗 %s: %s\n" + +#~ msgid "use threads for package state machine" +#~ msgstr "使用執行緒用於套件狀態機" + +#~ msgid "%s: %s scriptlet failed (%d), skipping %s\n" +#~ msgstr "%s:%s 短命令稿執行失敗 (%d)ï¼Œç•¥éŽ %s\n" + +#~ msgid "mntctl() failed to return size: %s\n" +#~ msgstr "mntctl() 回傳大å°å¤±æ•—:%s\n" + +#~ msgid "mntctl() failed to return mount points: %s\n" +#~ msgstr "mntctl() 回傳掛載點失敗:%s\n" + +#~ msgid "failed to stat %s: %s\n" +#~ msgstr "無法檢驗狀態:%s:%s\n" + +#~ msgid "file %s is on an unknown device\n" +#~ msgstr "檔案 %s ä½æ–¼ä¸€å€‹ä¸æ˜Žçš„è£ç½®ä¸Š\n" + +#~ msgid "use threads for file state machine" +#~ msgstr "使用執行緒åšç‚ºæª”案狀態機器" + +#~ msgid "cannot open %s index\n" +#~ msgstr "無法開啟 %s 索引\n" + +#, fuzzy +#~ msgid "Unable to initDB %s (%d)\n" +#~ msgstr "無法開啟 %s:%s\n" + +#, fuzzy +#~ msgid "Unable to open database: %s\n" +#~ msgstr "無法開啟 %s:%s\n" + +#, fuzzy +#~ msgid "Unable to determine DB endianess.\n" +#~ msgstr "無法開啟暫時檔案。\n" + +#, fuzzy +#~ msgid "Unknown system error" +#~ msgstr "ä¸æ˜Žçš„系統:%s\n" + +#~ msgid "Macro %%%.*s not found, skipping\n" +#~ msgstr "找ä¸åˆ°å·¨é›† %%%.*s,跳éŽ\n" + +#~ msgid "%s: *.te policy read failed.\n" +#~ msgstr "%s: *.te 策略讀å–失敗。\n" + +#~ msgid "line %d: Second %%files list\n" +#~ msgstr "列 %d:é‡è¤‡çš„ %%files 清單\n" + +#~ msgid "" +#~ "The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" +#~ msgstr "" +#~ "\"B\"相ä¾æ€§éœ€è¦ä¸–代 (å‡è¨­èˆ‡ \"A\" 為相åŒä¸–代)\n" +#~ "\tA = \"%s\"\tB = \"%s\"\n" + +#~ msgid "Data type %d not supported\n" +#~ msgstr "ä¸æ”¯æ´è³‡æ–™é¡žåž‹ %d\n" + +#~ msgid "Legacy syntax is unsupported: %s\n" +#~ msgstr "ä¸æ”¯æ´èˆŠèªžæ³•ï¼š%s\n" + +#~ msgid "removing %s \"%s\" from tsort relations.\n" +#~ msgstr "從樹狀排列關係移除 %s\"%s\"。\n" + +#~ msgid "LOOP:\n" +#~ msgstr "迴圈:\n" + +#~ msgid "rpmtsOrder failed, %d elements remain\n" +#~ msgstr "rpmtsOrder 失敗,剩下 %d 個元件\n" + +#, fuzzy +#~ msgid "Header+Payload size:" +#~ msgstr "表頭+酬載大å°ï¼š" + +#~ msgid "Source options (with --query or --verify):" +#~ msgstr "原始碼é¸é … (使用 --query 或 --verify):" + +#~ msgid "pgp not found: " +#~ msgstr "找ä¸åˆ° pgp: " + +#~ msgid "cannot open file %s: %s\n" +#~ msgstr "無法開啟檔案 %s:%s\n" + +#~ msgid "pgp failed\n" +#~ msgstr "pgp 失敗\n" + +#~ msgid "pgp failed to write signature\n" +#~ msgstr "pgp 寫入簽å時失敗\n" + +#~ msgid "You must set \"%%_pgp_name\" in your macro file\n" +#~ msgstr "您必須在您的巨集檔案中設定 \"%%_pgp_name\"\n" + +#, fuzzy +#~ msgid "Unknown" +#~ msgstr "ä¸æ˜Žçš„標記" + +#, fuzzy +#~ msgid "%sV%d %s signature: %s\n" +#~ msgstr " ç°½å:" + +#, fuzzy +#~ msgid "%sV%d DSA signature: %s\n" +#~ msgstr " DSA ç°½å:" + +#~ msgid "Broken MD5 digest: UNSUPPORTED\n" +#~ msgstr "ä¸å®Œæ•´çš„ MD 5 摘è¦ï¼šä¸æ”¯æ´\n" + +#~ msgid "BuildRoot can not be \"/\": %s\n" +#~ msgstr "BuildRoot ä¸èƒ½æ˜¯ã€Œ/ã€ï¼š%s\n" + +#~ msgid "Spec file can't use BuildRoot\n" +#~ msgstr "è¦æ ¼æª”案ä¸èƒ½ä½¿ç”¨ BuildRoot\n" + +#~ msgid "lookup i18N strings in specfile catalog" +#~ msgstr "在è¦æ ¼æª”目錄中查找 i18N 字串" + +#~ msgid "generate headers compatible with (legacy) rpm[23] packaging" +#~ msgstr "產生與(舊的) rpm[23] 包è£ç›¸å®¹çš„表頭" + +#~ msgid "cannot create %%%s %s\n" +#~ msgstr "無法建立 %%%s %s\n" + +#~ msgid "cannot write to %%%s %s\n" +#~ msgstr "無法寫入 %%%s %s\n" + +#~ msgid "can't query %s: %s\n" +#~ msgstr "無法查詢 %s:%s\n" + +#, fuzzy +#~ msgid "(encoding failed)" +#~ msgstr "執行失敗\n" + +#~ msgid "debug URL cache handling" +#~ msgstr "å°ç¶²å€å¿«å–處ç†é™¤éŒ¯" + +#~ msgid "substitute i18n sections into spec file" +#~ msgstr "替代 i18n å€æ®µé€²å…¥è¦æ ¼æª”案" + +#~ msgid "cannot open Solve database in %s\n" +#~ msgstr "無法開啟解æžè³‡æ–™åº«æ–¼ %s\n" + +#~ msgid " Suggested resolutions:\n" +#~ msgstr " 推薦解決方案:\n" + +#~ msgid "(index out of range)" +#~ msgstr "(索引超出範åœ)" + +#~ msgid "Success" +#~ msgstr "æˆåŠŸ" + +#~ msgid "Bad server response" +#~ msgstr "ä¸ç•¶çš„伺æœå™¨å›žæ‡‰" + +#~ msgid "Server I/O error" +#~ msgstr "伺æœå™¨ I/O 錯誤" + +#~ msgid "Server timeout" +#~ msgstr "伺æœå™¨é€¾æ™‚" + +#~ msgid "Unable to lookup server host address" +#~ msgstr "無法查找伺æœå™¨ä¸»æ©Ÿä½å€" + +#~ msgid "Unable to lookup server host name" +#~ msgstr "無法查找伺æœå™¨ä¸»æ©Ÿå稱" + +#~ msgid "Failed to establish data connection to server" +#~ msgstr "建立資料連接到伺æœå™¨æ™‚失敗" + +#~ msgid "I/O error to local file" +#~ msgstr "到本機檔案的 I/O 錯誤" + +#~ msgid "Error setting remote server to passive mode" +#~ msgstr "設定é ç«¯ä¼ºæœå™¨ç‚ºè¢«å‹•æ¨¡å¼æ™‚發生錯誤" + +#~ msgid "File not found on server" +#~ msgstr "在伺æœå™¨ä¸Šæ‰¾ä¸åˆ°æª”案" + +#~ msgid "Abort in progress" +#~ msgstr "正在進行放棄" + +#~ msgid "Unknown or unexpected error" +#~ msgstr "ä¸æ˜Žçš„或éžé æœŸéŒ¯èª¤" + +#~ msgid "don't update cache database, only print package paths" +#~ msgstr "ä¸æ›´æ–°å¿«å–資料庫,åªæœ‰å°å‡ºå¥—件路徑" + +#~ msgid "File tree walk options:" +#~ msgstr "檔案樹éæ­·é¸é …:" + +#~ msgid "%s: %%{_cache_dbpath} macro is mis-configured.\n" +#~ msgstr "%s: %%{_cache_dbpath } 巨集設定錯誤。\n" + +#~ msgid "%s: cache operation failed: ec %d.\n" +#~ msgstr "%s: å¿«å–作業失敗:ec %d。\n" + +#~ msgid "%s: headerGetEntry failed\n" +#~ msgstr "%s:headerGetEntry 失敗\n" + +#~ msgid "%s expansion failed at %s:%d \"%s\"\n" +#~ msgstr "%s 擴充失敗於 %s:%d \"%s\"\n" + +#~ msgid "Cannot expand %s\n" +#~ msgstr "無法展開 %s\n" + +#~ msgid "Cannot read %s, HOME is too large.\n" +#~ msgstr "ç„¡æ³•è®€å– %s,HOME éŽå¤§ã€‚\n" + +#, fuzzy +#~ msgid "getcwd failed: %m\n" +#~ msgstr "%s 移除目錄 %s 失敗:%s\n" + +#~ msgid "Hit limit for %%docdir\n" +#~ msgstr "%%docdir 的數é‡ä¸Šé™\n" + +#~ msgid "line %d: Need arg to %%patch -b: %s\n" +#~ msgstr "列 %d:%%patch -b 需è¦å¼•æ•¸ï¼š%s\n" + +#~ msgid "line %d: Need arg to %%patch -z: %s\n" +#~ msgstr "列 %d:%%patch -z 需è¦å¼•æ•¸ï¼š%s\n" + +#, fuzzy +#~ msgid "line %d: Bad arg to %%patch -F: %s\n" +#~ msgstr "列 %d:%%patch -p 的引數錯誤:%s\n" + +#~ msgid "line %d: Need arg to %%patch -p: %s\n" +#~ msgstr "列 %d:%%patch -p 需è¦å¼•æ•¸ï¼š%s\n" + +#~ msgid "line %d: Bad arg to %%patch -p: %s\n" +#~ msgstr "列 %d:%%patch -p 的引數錯誤:%s\n" + +#~ msgid "Too many patches!\n" +#~ msgstr "修補éŽå¤šï¼\n" + +#~ msgid "line %d: Bad arg to %%patch: %s\n" +#~ msgstr "列 %d:%%patch 的引數錯誤:%s\n" + +#~ msgid "debug option/argument processing" +#~ msgstr "å°é¸é …/引數處ç†é™¤éŒ¯" + +#~ msgid "skip %%license files" +#~ msgstr "ç•¥éŽ %%license 檔案" + +#~ msgid "skip %%readme files" +#~ msgstr "ç•¥éŽ %%readme 檔案" + +#, fuzzy +#~ msgid "URL helper failed: %s (%d)\n" +#~ msgstr "讀å–失敗:%s (%d)\n" + +#~ msgid "rollback takes a time/date stamp argument" +#~ msgstr "回æ²éœ€è¦æ™‚é–“/日期戳記引數" + +#~ msgid "malformed rollback time/date stamp argument" +#~ msgstr "異常的回æ²æ™‚é–“/日期戳記引數" + +#~ msgid "save erased package files by renaming into sub-directory" +#~ msgstr "將清除的套件內的檔案é‡æ–°å‘½å後轉移到一個å­ç›®éŒ„中" + +#~ msgid "save erased package files by repackaging" +#~ msgstr "將已清除套件內的檔案å¦å­˜ç‚ºä¸€å€‹å¥—件" + +#~ msgid "deinstall new, reinstall old, package(s), back to " +#~ msgstr "å安è£æ–°å¢žï¼Œé‡æ–°å®‰è£èˆŠçš„套件,回到<日期>" + +#~ msgid "" +#~ msgstr "<日期>" + +#~ msgid "Unable to reload signature header\n" +#~ msgstr "無法é‡è¼‰ç°½å表頭\n" + +#~ msgid "Repackaging..." +#~ msgstr "é‡æ–°æ‰“包中…" + +#~ msgid "Repackaging erased files..." +#~ msgstr "正在é‡æ–°æ‰“包被清除的檔案…" + +#~ msgid "Upgrading..." +#~ msgstr "更新中…" + +#~ msgid "Upgrading packages..." +#~ msgstr "正在更新套件…" + +#~ msgid "Rollback packages (+%d/-%d) to %-24.24s (0x%08x):\n" +#~ msgstr "回溯套件 (+%d/-%d) to %-24.24s (0x%08x):\n" + +#~ msgid "Cleaning up repackaged packages:\n" +#~ msgstr "正在清除é‡æ–°ç”¢ç”Ÿçš„打包:\n" + +#~ msgid "\tRemoving %s:\n" +#~ msgstr "\t正在移除 %s:\n" + +#~ msgid "Transaction failed...rolling back\n" +#~ msgstr "異動作業失敗…返回\n" + +#~ msgid "Could not order auto-rollback transaction!\n" +#~ msgstr "無法排列自動返回異動作業的順åºï¼\n" + +#~ msgid "Could not get install element database instance!\n" +#~ msgstr "無法å–得安è£å…ƒä»¶è³‡æ–™åº«å¯¦é«”ï¼\n" + +#~ msgid "Could not get header for auto-rollback transaction!\n" +#~ msgstr "無法å–得表頭用於自動返回異動作業ï¼\n" + +#~ msgid "\tAdded from install element %s.\n" +#~ msgstr "\t已從安è£å…ƒä»¶ %s 加入。\n" + +#~ msgid "Could not get repackaged header for auto-rollback transaction!\n" +#~ msgstr "無法å–å¾—é‡æ–°åŒ…è£çš„表頭用於自動返回異動作業ï¼\n" + +#~ msgid "Could not add erase element to auto-rollback transaction.\n" +#~ msgstr "無法加入清除元件到自動返回異動作業。\n" + +#~ msgid "Failure reading repackaged package!\n" +#~ msgstr "讀å–é‡æ–°åŒ…è£çš„套件時失敗ï¼\n" + +#~ msgid "Add failed. Could not read package header.\n" +#~ msgstr "加入失敗。無法讀å–套件表頭。\n" + +#~ msgid "Add failed in rpmpsmStage().\n" +#~ msgstr "加入 rpmpsmStage() 中失敗。\n" + +#~ msgid "Add failed. Could not get file list.\n" +#~ msgstr "加入失敗。無法å–得檔案清單。\n" + +#~ msgid "Erase failed failed in rpmpsmStage().\n" +#~ msgstr "清除 rpmpsmStage() 中檔案失敗。\n" + +#, fuzzy +#~ msgid "\twaitpid(%d) rc %d status %x\n" +#~ msgstr "%s: waitpid(%d) rc %d ç‹€æ³ %x 秒 %u.%03u\n" + +#~ msgid " Obsoletes: %s\t\terases %s\n" +#~ msgstr " éŽæ™‚的:%s\t\t清除 %s\n" + +#~ msgid "========== recording tsort relations\n" +#~ msgstr "========== 記錄樹狀排列關係\n" + +#~ msgid "" +#~ "========== tsorting packages (order, #predecessors, #succesors, tree, " +#~ "depth, breadth)\n" +#~ msgstr "========== 樹狀排列套件 (次åºã€#å‰è¡Œè€…ã€#後繼者ã€æ¨¹ã€æ·±åº¦ã€å»£åº¦)\n" + +#~ msgid "========== successors only (%d bytes)\n" +#~ msgstr "========== åªæœ‰å¾Œç¹¼ç¬¦è™Ÿ (%d ä½å…ƒçµ„)\n" + +#~ msgid "========== continuing tsort ...\n" +#~ msgstr "========== 繼續樹狀排列…\n" + +#~ msgid "%5d 0x%04x %s %s\n" +#~ msgstr "%5d 0x%04x %s %s\n" + +#~ msgid "========== Directories not explicitly included in package:\n" +#~ msgstr "========== 未被明確包å«åœ¨å¥—件內的目錄:\n" + +#~ msgid "%10d %s\n" +#~ msgstr "%10d %s\n" + +#~ msgid "%s directory created with perms %04o, no context.\n" +#~ msgstr "建立的 %s 目錄附有 perms %04o, 無上下文。\n" + +#~ msgid "%s directory created with perms %04o, context %s.\n" +#~ msgstr "%s 建立的目錄附有 perms %04o, 上下文 %s。\n" + +#~ msgid "adding %d args from manifest.\n" +#~ msgstr "從清單中加入 %d 個引數。\n" + +#~ msgid "disable use of libio(3) API" +#~ msgstr "åœæ­¢ä½¿ç”¨ libio(3) API" + +#~ msgid "%s: waitpid(%d) rc %d status %x secs %u.%03u\n" +#~ msgstr "%s: waitpid(%d) rc %d ç‹€æ³ %x 秒 %u.%03u\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) running scriptlet.\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) 正在執行 短命令稿。\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) 正在略éŽå†—餘的「%sã€ã€‚\n" + +#~ msgid "%s: %s(%s-%s-%s.%s) %ssynchronous scriptlet start\n" +#~ msgstr "%s: %s(%s-%s-%s.%s) %såŒæ­¥çš„短命令稿開始\n" + +#~ msgid "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" +#~ msgstr "%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n" + +#~ msgid "%s: %s has %d files, test = %d\n" +#~ msgstr "%s :%s å«æœ‰ %d 個檔案,test = %d\n" + +#, fuzzy +#~ msgid "Attempting to mark %s as installed in score board(%p).\n" +#~ msgstr "試圖在記錄æ¿(%2$u)中標記 %1$s 為已安è£ã€‚\n" + +#, fuzzy +#~ msgid "Attempting to mark %s as erased in score board(%p).\n" +#~ msgstr "試圖在記錄æ¿(0x%2$x)中標記 %1$s 為已清除。\n" + +#~ msgid "package record number: %u\n" +#~ msgstr "套件記錄:%u\n" + +#~ msgid " %s A %s\tB %s\n" +#~ msgstr " %s A %s\tB %s\n" + +#~ msgid "package %s has unsatisfied %s: %s\n" +#~ msgstr "套件 %s 有ä¸æ»¿è¶³çš„ %s:%s\n" + +#~ msgid "%s skipped due to missingok flag\n" +#~ msgstr "%s 由於 missingok 旗標而被略éŽ\n" + +#~ msgid "========== relocations\n" +#~ msgstr "========== é‡æ–°éƒ¨ç½²\n" + +#~ msgid "%5d exclude %s\n" +#~ msgstr "%5d 排除 %s\n" + +#~ msgid "%5d relocate %s -> %s\n" +#~ msgstr "%5d é‡æ–°éƒ¨ç½² %s -> %s\n" + +#~ msgid "excluding %s %s\n" +#~ msgstr "排除 %s %s\n" + +#~ msgid "relocating %s to %s\n" +#~ msgstr "é‡æ–°éƒ¨ç½² %s 到 %s\n" + +#~ msgid "relocating directory %s to %s\n" +#~ msgstr "é‡æ–°éƒ¨ç½²ç›®éŒ„ %s 到 %s\n" + +#~ msgid "Adding goal: %s\n" +#~ msgstr "加入目的物:%s\n" + +#~ msgid " ... as %s\n" +#~ msgstr " … 為 %s\n" + +#~ msgid "\tadded source package [%d]\n" +#~ msgstr "\t加入原始碼套件 [%d]\n" + +#~ msgid "\tadded binary package [%d]\n" +#~ msgstr "\t加入二進ä½å¥—件 [%d]\n" + +#~ msgid "found %d source and %d binary packages\n" +#~ msgstr "找到 %d 個原始碼套件和 %d 個二進ä½å¥—件\n" + +#~ msgid "installing binary packages\n" +#~ msgstr "正在安è£äºŒé€²ä½å¥—件\n" + +#~ msgid "Adding: %s\n" +#~ msgstr "正在加入:%s\n" + +#~ msgid "Suggesting: %s\n" +#~ msgstr "正在建議:%s\n" + +#~ msgid "mounted filesystems:\n" +#~ msgstr "已掛載的檔案系統:\n" + +#~ msgid " i dev bsize bavail iavail mount point\n" +#~ msgstr " i dev bsize bavail iavail 掛載點\n" + +#~ msgid "%5d 0x%08x %8u %12ld %12ld %s\n" +#~ msgstr "%5d 0x%08x %8u %12ld %12ld %s\n" + +#~ msgid "Creating transaction score board(%p, %p)\n" +#~ msgstr "產生異動作業記錄æ¿(%p, %p)\n" + +#~ msgid "\tScore board address: %p\n" +#~ msgstr "\t記錄æ¿ä½å€ï¼š %p\n" + +#~ msgid "\tAllocating space for %d entries\n" +#~ msgstr "\té…置空間給 %d é …æ¢ç›®\n" + +#~ msgid "\tAdding entry for %s to score board.\n" +#~ msgstr "\t加入 %s çš„æ¢ç›®åˆ°è¨˜éŒ„æ¿ã€‚\n" + +#~ msgid "\t\tEntry address: %p\n" +#~ msgstr "\t\tæ¢ç›®ä½å€ï¼š %p\n" + +#~ msgid "\tUpdating entry for %s in score board.\n" +#~ msgstr "\t在記錄æ¿ä¸­æ›´æ–° %s æ¢ç›®ã€‚\n" + +#~ msgid "May free Score board(%p)\n" +#~ msgstr "也許會釋放記錄æ¿(%p)\n" + +#~ msgid "\tRefcount is zero...will free\n" +#~ msgstr "\tåƒç…§æ•¸ç‚ºé›¶â€¦å°‡æœƒé‡‹æ”¾\n" + +#~ msgid "Looking in score board(%p) for %s\n" +#~ msgstr "在記錄æ¿(%p)中查找 %s\n" + +#~ msgid "\tFound entry at address: %p\n" +#~ msgstr "\t找到æ¢ç›®æ–¼ä½å€ï¼š %p\n" + +#, fuzzy +#~ msgid "Expected size: %12d = lead(%d)+sigs(%zd)+pad(%zd)+data(%zd)\n" +#~ msgstr "é æœŸçš„大å°ï¼š%12d = lead(%d)+ sigs(%d)+pad(%d)+data(%d)\n" + +#~ msgid " Actual size: %12d\n" +#~ msgstr " 實際的大å°ï¼š%12d\n" + +#~ msgid "Signature: size(%d)+pad(%d)\n" +#~ msgstr "ç°½å:size(%d)+pad(%d)\n" + +#~ msgid "PGP sig size: %d\n" +#~ msgstr "PGP sig 大å°ï¼š%d\n" + +#~ msgid "Got %d bytes of PGP sig\n" +#~ msgstr "得到 %d ä½å…ƒçµ„çš„ PGP sig\n" + +#~ msgid "GPG sig size: %d\n" +#~ msgstr "GPG sig 大å°ï¼š%d\n" + +#~ msgid "Got %d bytes of GPG sig\n" +#~ msgstr "得到 %d ä½å…ƒçµ„çš„ GPG sig\n" + +#~ msgid "excluding directory %s\n" +#~ msgstr "排除目錄 %s\n" + +#~ msgid "Getting repackaged header from transaction element\n" +#~ msgstr "從異動作業元件å–å¾—é‡æ–°åŒ…è£çš„表頭\n" + +#~ msgid "\tLooking for %s...\n" +#~ msgstr "\t查找 %s…\n" + +#~ msgid "\tMatches found.\n" +#~ msgstr "\t找到相符者。\n" + +#~ msgid "\tNo matches found.\n" +#~ msgstr "\t找ä¸åˆ°ç›¸ç¬¦è€…。\n" + +#~ msgid "\tRepackaged package not found!.\n" +#~ msgstr "\t找ä¸åˆ°é‡æ–°åŒ…è£çš„套件ï¼ã€‚\n" + +#~ msgid "\tREMOVETID matched INSTALLTID.\n" +#~ msgstr "\t移除識別號符åˆå®‰è£è­˜åˆ¥è™Ÿã€‚\n" + +#~ msgid "\t\tName: %s.\n" +#~ msgstr "\t\tå稱: %s。\n" + +#~ msgid "\tRepackaged Package was %s...\n" +#~ msgstr "\té‡æ–°åŒ…è£çš„套件是 %s…\n" + +#~ msgid "Adding install element to auto-rollback transaction.\n" +#~ msgstr "加入安è£å…ƒä»¶åˆ°è‡ªå‹•è¿”回異動作業。\n" + +#~ msgid "\tAdded repackaged package header: %s.\n" +#~ msgstr "\t已加入é‡æ–°åŒ…è£çš„套件表頭:%s。\n" + +#~ msgid "\tAdded erase element.\n" +#~ msgstr "\t已加入清除元件。\n" + +#~ msgid "Add erase element to auto-rollback transaction.\n" +#~ msgstr "加入清除元件到自動返回異動作業。\n" + +#~ msgid "\tFound existing upgrade element.\n" +#~ msgstr "\t找到ç¾æœ‰å‡ç´šå…ƒä»¶ã€‚\n" + +#~ msgid "\tNot adding erase element for %s.\n" +#~ msgstr "\tä¸åŠ å…¥ %s 的清除元件。\n" + +#~ msgid "\tAdded repackaged package %s.\n" +#~ msgstr "\t已加入é‡æ–°åŒ…è£çš„套件 %s。\n" + +#~ msgid "\tAdded from erase element %s.\n" +#~ msgstr "\t已從清除元件 %s 加入。\n" + +#~ msgid "\tNo repackaged package...nothing to do.\n" +#~ msgstr "\t沒有é‡æ–°åŒ…è£çš„套件…無事å¯åšã€‚\n" + +#~ msgid "sanity checking %d elements\n" +#~ msgstr "明智地檢查 %d 元件\n" + +#~ msgid "running pre-transaction scripts\n" +#~ msgstr "正在執行異動作業å‰å‘½ä»¤ç¨¿\n" + +#~ msgid "computing %d file fingerprints\n" +#~ msgstr "正在計算 %d 個檔案指紋\n" + +#~ msgid "computing file dispositions\n" +#~ msgstr "計算檔案部署\n" + +#~ msgid "Creating auto-rollback transaction\n" +#~ msgstr "產生自動返回異動作業\n" + +#~ msgid "running post-transaction scripts\n" +#~ msgstr "正在執行異動作業後期命令稿\n" + +#~ msgid "closed db environment %s/%s\n" +#~ msgstr "關閉資料庫環境 %s/%s\n" + +#~ msgid "removed db environment %s/%s\n" +#~ msgstr "移除資料庫環境 %s/%s\n" + +#~ msgid "opening db environment %s/%s %s\n" +#~ msgstr "開啟資料庫環境 %s/%s %s\n" + +#~ msgid "closed db index %s/%s\n" +#~ msgstr "關閉資料庫索引 %s/%s\n" + +#~ msgid "opening db index %s/%s %s mode=0x%x\n" +#~ msgstr "開啟資料庫索引 %s/%s %s 模å¼=0x%x\n" + +#~ msgid "locked db index %s/%s\n" +#~ msgstr "鎖定的資料庫索引 %s/%s\n" + +#~ msgid "removing \"%s\" from %s index.\n" +#~ msgstr "正在從 %1$s 索引移除 \"%2$s\"。\n" + +#~ msgid "removing %d entries from %s index.\n" +#~ msgstr "正在從 %2$s 索引移除 %1$d é …æ¢ç›®ã€‚\n" + +#~ msgid "adding \"%s\" to %s index.\n" +#~ msgstr "正在加入 \"%s\" 到 %s 索引。\n" + +#~ msgid "adding %d entries to %s index.\n" +#~ msgstr "正在加入 %d é …æ¢ç›®åˆ° %s 索引。\n" + +#~ msgid "removing %s after successful db3 rebuild.\n" +#~ msgstr "æˆåŠŸé‡å»º db3 之後移除 %s。\n" + +#~ msgid "rebuilding database %s into %s\n" +#~ msgstr "é‡å»ºè³‡æ–™åº« %s æ–¼ %s\n" + +#~ msgid "creating directory %s\n" +#~ msgstr "產生目錄 %s\n" + +#~ msgid "creating directory %s: %s\n" +#~ msgstr "產生目錄 %s: %s\n" + +#~ msgid "opening old database with dbapi %d\n" +#~ msgstr "以 dbapi %d 開啟舊的資料庫\n" + +#~ msgid "opening new database with dbapi %d\n" +#~ msgstr "以 dbapi %d 開啟新的資料庫\n" + +#~ msgid "removing directory %s\n" +#~ msgstr "移除目錄 %s\n" + +#, fuzzy +#~ msgid "closed sql db %s\n" +#~ msgstr "關閉資料庫索引 %s/%s\n" + +#, fuzzy +#~ msgid "opening sql db %s (%s) mode=0x%x\n" +#~ msgstr "開啟資料庫索引 %s/%s %s 模å¼=0x%x\n" + +#~ msgid "readRPM: read %s: %s\n" +#~ msgstr "readRPMï¼šè®€å– %s:%s\n" + +#~ msgid "Unable to write final header\n" +#~ msgstr "無法寫入表頭çµå°¾\n" + +#~ msgid "packaging version 1 is not supported by this version of RPM\n" +#~ msgstr "æ­¤ RPM 版本ä¸æ”¯æ´ç¬¬ 1 版的打包\n" + +#~ msgid "" +#~ "only packaging with major numbers <= 4 is supported by this version of " +#~ "RPM\n" +#~ msgstr "æ­¤ RPM 版本åªæ”¯æ´ä¸»ç‰ˆæœ¬è™Ÿ <=4 的打包\n" + +#~ msgid "%s: Can't sign v1 packaging\n" +#~ msgstr "%sï¼šç„¡æ³•å° v1 版打包簽å\n" + +#~ msgid "%s: Can't re-sign v2 packaging\n" +#~ msgstr "%sï¼šç„¡æ³•å° v2 版打包é‡æ–°ç°½å\n" + +#~ msgid "%s: No signature available (v1.0 RPM)\n" +#~ msgstr "%s:無å¯ç”¨ç°½å (v1.0 RPM)\n" diff --git a/preinstall.am b/preinstall.am new file mode 100644 index 0000000..170c94c --- /dev/null +++ b/preinstall.am @@ -0,0 +1,132 @@ +include/rpm/argv.h: rpmio/argv.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/argv.h include/rpm/argv.h +BUILT_SOURCES += include/rpm/argv.h +CLEANFILES += include/rpm/argv.h +include/rpm/rpmio.h: rpmio/rpmio.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmio.h include/rpm/rpmio.h +BUILT_SOURCES += include/rpm/rpmio.h +CLEANFILES += include/rpm/rpmio.h +include/rpm/rpmurl.h: rpmio/rpmurl.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmurl.h include/rpm/rpmurl.h +BUILT_SOURCES += include/rpm/rpmurl.h +CLEANFILES += include/rpm/rpmurl.h +include/rpm/rpmmacro.h: rpmio/rpmmacro.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmmacro.h include/rpm/rpmmacro.h +BUILT_SOURCES += include/rpm/rpmmacro.h +CLEANFILES += include/rpm/rpmmacro.h +include/rpm/rpmlog.h: rpmio/rpmlog.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmlog.h include/rpm/rpmlog.h +BUILT_SOURCES += include/rpm/rpmlog.h +CLEANFILES += include/rpm/rpmlog.h +include/rpm/rpmpgp.h: rpmio/rpmpgp.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmpgp.h include/rpm/rpmpgp.h +BUILT_SOURCES += include/rpm/rpmpgp.h +CLEANFILES += include/rpm/rpmpgp.h +include/rpm/rpmsq.h: rpmio/rpmsq.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmsq.h include/rpm/rpmsq.h +BUILT_SOURCES += include/rpm/rpmsq.h +CLEANFILES += include/rpm/rpmsq.h +include/rpm/rpmstring.h: rpmio/rpmstring.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmstring.h include/rpm/rpmstring.h +BUILT_SOURCES += include/rpm/rpmstring.h +CLEANFILES += include/rpm/rpmstring.h +include/rpm/rpmsw.h: rpmio/rpmsw.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmsw.h include/rpm/rpmsw.h +BUILT_SOURCES += include/rpm/rpmsw.h +CLEANFILES += include/rpm/rpmsw.h +include/rpm/rpmfileutil.h: rpmio/rpmfileutil.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmfileutil.h include/rpm/rpmfileutil.h +BUILT_SOURCES += include/rpm/rpmfileutil.h +CLEANFILES += include/rpm/rpmfileutil.h +include/rpm/rpmutil.h: rpmio/rpmutil.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmutil.h include/rpm/rpmutil.h +BUILT_SOURCES += include/rpm/rpmutil.h +CLEANFILES += include/rpm/rpmutil.h +include/rpm/rpmkeyring.h: rpmio/rpmkeyring.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/rpmio/rpmkeyring.h include/rpm/rpmkeyring.h +BUILT_SOURCES += include/rpm/rpmkeyring.h +CLEANFILES += include/rpm/rpmkeyring.h +include/rpm/header.h: lib/header.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/header.h include/rpm/header.h +BUILT_SOURCES += include/rpm/header.h +CLEANFILES += include/rpm/header.h +include/rpm/rpmdb.h: lib/rpmdb.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmdb.h include/rpm/rpmdb.h +BUILT_SOURCES += include/rpm/rpmdb.h +CLEANFILES += include/rpm/rpmdb.h +include/rpm/rpmcallback.h: lib/rpmcallback.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmcallback.h include/rpm/rpmcallback.h +BUILT_SOURCES += include/rpm/rpmcallback.h +CLEANFILES += include/rpm/rpmcallback.h +include/rpm/rpmcli.h: lib/rpmcli.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmcli.h include/rpm/rpmcli.h +BUILT_SOURCES += include/rpm/rpmcli.h +CLEANFILES += include/rpm/rpmcli.h +include/rpm/rpmlib.h: lib/rpmlib.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmlib.h include/rpm/rpmlib.h +BUILT_SOURCES += include/rpm/rpmlib.h +CLEANFILES += include/rpm/rpmlib.h +include/rpm/rpmds.h: lib/rpmds.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmds.h include/rpm/rpmds.h +BUILT_SOURCES += include/rpm/rpmds.h +CLEANFILES += include/rpm/rpmds.h +include/rpm/rpmfi.h: lib/rpmfi.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmfi.h include/rpm/rpmfi.h +BUILT_SOURCES += include/rpm/rpmfi.h +CLEANFILES += include/rpm/rpmfi.h +include/rpm/rpmlegacy.h: lib/rpmlegacy.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmlegacy.h include/rpm/rpmlegacy.h +BUILT_SOURCES += include/rpm/rpmlegacy.h +CLEANFILES += include/rpm/rpmlegacy.h +include/rpm/rpmpol.h: lib/rpmpol.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmpol.h include/rpm/rpmpol.h +BUILT_SOURCES += include/rpm/rpmpol.h +CLEANFILES += include/rpm/rpmpol.h +include/rpm/rpmps.h: lib/rpmps.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmps.h include/rpm/rpmps.h +BUILT_SOURCES += include/rpm/rpmps.h +CLEANFILES += include/rpm/rpmps.h +include/rpm/rpmprob.h: lib/rpmprob.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmprob.h include/rpm/rpmprob.h +BUILT_SOURCES += include/rpm/rpmprob.h +CLEANFILES += include/rpm/rpmprob.h +include/rpm/rpmtag.h: lib/rpmtag.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmtag.h include/rpm/rpmtag.h +BUILT_SOURCES += include/rpm/rpmtag.h +CLEANFILES += include/rpm/rpmtag.h +include/rpm/rpmtd.h: lib/rpmtd.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmtd.h include/rpm/rpmtd.h +BUILT_SOURCES += include/rpm/rpmtd.h +CLEANFILES += include/rpm/rpmtd.h +include/rpm/rpmte.h: lib/rpmte.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmte.h include/rpm/rpmte.h +BUILT_SOURCES += include/rpm/rpmte.h +CLEANFILES += include/rpm/rpmte.h +include/rpm/rpmts.h: lib/rpmts.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmts.h include/rpm/rpmts.h +BUILT_SOURCES += include/rpm/rpmts.h +CLEANFILES += include/rpm/rpmts.h +include/rpm/rpmtypes.h: lib/rpmtypes.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmtypes.h include/rpm/rpmtypes.h +BUILT_SOURCES += include/rpm/rpmtypes.h +CLEANFILES += include/rpm/rpmtypes.h +include/rpm/rpmvf.h: lib/rpmvf.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/lib/rpmvf.h include/rpm/rpmvf.h +BUILT_SOURCES += include/rpm/rpmvf.h +CLEANFILES += include/rpm/rpmvf.h +include/rpm/rpmsign.h: sign/rpmsign.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/sign/rpmsign.h include/rpm/rpmsign.h +BUILT_SOURCES += include/rpm/rpmsign.h +CLEANFILES += include/rpm/rpmsign.h +include/rpm/rpmbuild.h: build/rpmbuild.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/build/rpmbuild.h include/rpm/rpmbuild.h +BUILT_SOURCES += include/rpm/rpmbuild.h +CLEANFILES += include/rpm/rpmbuild.h +include/rpm/rpmfc.h: build/rpmfc.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/build/rpmfc.h include/rpm/rpmfc.h +BUILT_SOURCES += include/rpm/rpmfc.h +CLEANFILES += include/rpm/rpmfc.h +include/rpm/rpmspec.h: build/rpmspec.h include/rpm/$(dirstamp) + $(INSTALL_DATA) $(top_srcdir)/build/rpmspec.h include/rpm/rpmspec.h +BUILT_SOURCES += include/rpm/rpmspec.h +CLEANFILES += include/rpm/rpmspec.h diff --git a/python/Makefile.am b/python/Makefile.am new file mode 100644 index 0000000..4f85519 --- /dev/null +++ b/python/Makefile.am @@ -0,0 +1,51 @@ +# Makefile for rpm library. + +EXTRA_DIST = rpm/__init__.py rpm/transaction.py + +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/ +AM_CPPFLAGS += -I$(top_srcdir)/python +AM_CPPFLAGS += -I$(top_srcdir)/misc +AM_CPPFLAGS += -I@WITH_PYTHON_INCLUDE@ + +pkgpyexec_LTLIBRARIES = _rpmmodule.la _rpmbmodule.la _rpmsmodule.la +pkgpyexec_DATA = rpm/__init__.py rpm/transaction.py + +_rpmmodule_la_LDFLAGS = -module -avoid-version -shared +_rpmmodule_la_LIBADD = \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la \ + @WITH_PYTHON_LIB@ + +_rpmmodule_la_SOURCES = rpmmodule.c rpmsystem-py.h \ + header-py.c header-py.h \ + rpmds-py.c rpmds-py.h \ + rpmfd-py.c rpmfd-py.h \ + rpmfi-py.c rpmfi-py.h \ + rpmkeyring-py.c rpmkeyring-py.h \ + rpmmi-py.c rpmmi-py.h \ + rpmii-py.c rpmii-py.h \ + rpmps-py.c rpmps-py.h \ + rpmmacro-py.c rpmmacro-py.h \ + rpmtd-py.c rpmtd-py.h \ + rpmte-py.c rpmte-py.h \ + rpmts-py.c rpmts-py.h + +_rpmbmodule_la_LDFLAGS = -module -avoid-version -shared +_rpmbmodule_la_LIBADD = \ + $(top_builddir)/build/librpmbuild.la \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la \ + @WITH_PYTHON_LIB@ + +_rpmbmodule_la_SOURCES = rpmbmodule.c rpmsystem-py.h \ + spec-py.c spec-py.h + +_rpmsmodule_la_LDFLAGS = -module -avoid-version -shared +_rpmsmodule_la_LIBADD = \ + $(top_builddir)/sign/librpmsign.la \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la \ + @WITH_PYTHON_LIB@ + +_rpmsmodule_la_SOURCES = rpmsmodule.c rpmsystem-py.h + diff --git a/python/Makefile.in b/python/Makefile.in new file mode 100644 index 0000000..1c97893 --- /dev/null +++ b/python/Makefile.in @@ -0,0 +1,742 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile for rpm library. + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = python +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgpyexecdir)" \ + "$(DESTDIR)$(pkgpyexecdir)" +LTLIBRARIES = $(pkgpyexec_LTLIBRARIES) +_rpmbmodule_la_DEPENDENCIES = $(top_builddir)/build/librpmbuild.la \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la +am__rpmbmodule_la_OBJECTS = rpmbmodule.lo spec-py.lo +_rpmbmodule_la_OBJECTS = $(am__rpmbmodule_la_OBJECTS) +_rpmbmodule_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(_rpmbmodule_la_LDFLAGS) $(LDFLAGS) -o $@ +_rpmmodule_la_DEPENDENCIES = $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la +am__rpmmodule_la_OBJECTS = rpmmodule.lo header-py.lo rpmds-py.lo \ + rpmfd-py.lo rpmfi-py.lo rpmkeyring-py.lo rpmmi-py.lo \ + rpmii-py.lo rpmps-py.lo rpmmacro-py.lo rpmtd-py.lo rpmte-py.lo \ + rpmts-py.lo +_rpmmodule_la_OBJECTS = $(am__rpmmodule_la_OBJECTS) +_rpmmodule_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(_rpmmodule_la_LDFLAGS) $(LDFLAGS) -o $@ +_rpmsmodule_la_DEPENDENCIES = $(top_builddir)/sign/librpmsign.la \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la +am__rpmsmodule_la_OBJECTS = rpmsmodule.lo +_rpmsmodule_la_OBJECTS = $(am__rpmsmodule_la_OBJECTS) +_rpmsmodule_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(_rpmsmodule_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(_rpmbmodule_la_SOURCES) $(_rpmmodule_la_SOURCES) \ + $(_rpmsmodule_la_SOURCES) +DIST_SOURCES = $(_rpmbmodule_la_SOURCES) $(_rpmmodule_la_SOURCES) \ + $(_rpmsmodule_la_SOURCES) +DATA = $(pkgpyexec_DATA) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = rpm/__init__.py rpm/transaction.py +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ + -I$(top_builddir)/include/ -I$(top_srcdir)/python \ + -I$(top_srcdir)/misc -I@WITH_PYTHON_INCLUDE@ +pkgpyexec_LTLIBRARIES = _rpmmodule.la _rpmbmodule.la _rpmsmodule.la +pkgpyexec_DATA = rpm/__init__.py rpm/transaction.py +_rpmmodule_la_LDFLAGS = -module -avoid-version -shared +_rpmmodule_la_LIBADD = \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la \ + @WITH_PYTHON_LIB@ + +_rpmmodule_la_SOURCES = rpmmodule.c rpmsystem-py.h \ + header-py.c header-py.h \ + rpmds-py.c rpmds-py.h \ + rpmfd-py.c rpmfd-py.h \ + rpmfi-py.c rpmfi-py.h \ + rpmkeyring-py.c rpmkeyring-py.h \ + rpmmi-py.c rpmmi-py.h \ + rpmii-py.c rpmii-py.h \ + rpmps-py.c rpmps-py.h \ + rpmmacro-py.c rpmmacro-py.h \ + rpmtd-py.c rpmtd-py.h \ + rpmte-py.c rpmte-py.h \ + rpmts-py.c rpmts-py.h + +_rpmbmodule_la_LDFLAGS = -module -avoid-version -shared +_rpmbmodule_la_LIBADD = \ + $(top_builddir)/build/librpmbuild.la \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la \ + @WITH_PYTHON_LIB@ + +_rpmbmodule_la_SOURCES = rpmbmodule.c rpmsystem-py.h \ + spec-py.c spec-py.h + +_rpmsmodule_la_LDFLAGS = -module -avoid-version -shared +_rpmsmodule_la_LIBADD = \ + $(top_builddir)/sign/librpmsign.la \ + $(top_builddir)/lib/librpm.la \ + $(top_builddir)/rpmio/librpmio.la \ + @WITH_PYTHON_LIB@ + +_rpmsmodule_la_SOURCES = rpmsmodule.c rpmsystem-py.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign python/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign python/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pkgpyexecLTLIBRARIES: $(pkgpyexec_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pkgpyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" + @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgpyexecdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgpyexecdir)"; \ + } + +uninstall-pkgpyexecLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgpyexecdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgpyexecdir)/$$f"; \ + done + +clean-pkgpyexecLTLIBRARIES: + -test -z "$(pkgpyexec_LTLIBRARIES)" || rm -f $(pkgpyexec_LTLIBRARIES) + @list='$(pkgpyexec_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_rpmbmodule.la: $(_rpmbmodule_la_OBJECTS) $(_rpmbmodule_la_DEPENDENCIES) + $(_rpmbmodule_la_LINK) -rpath $(pkgpyexecdir) $(_rpmbmodule_la_OBJECTS) $(_rpmbmodule_la_LIBADD) $(LIBS) +_rpmmodule.la: $(_rpmmodule_la_OBJECTS) $(_rpmmodule_la_DEPENDENCIES) + $(_rpmmodule_la_LINK) -rpath $(pkgpyexecdir) $(_rpmmodule_la_OBJECTS) $(_rpmmodule_la_LIBADD) $(LIBS) +_rpmsmodule.la: $(_rpmsmodule_la_OBJECTS) $(_rpmsmodule_la_DEPENDENCIES) + $(_rpmsmodule_la_LINK) -rpath $(pkgpyexecdir) $(_rpmsmodule_la_OBJECTS) $(_rpmsmodule_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmbmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmds-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmfd-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmfi-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmii-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmkeyring-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmmacro-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmmi-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmps-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmsmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmtd-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmte-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmts-py.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spec-py.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgpyexecDATA: $(pkgpyexec_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgpyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" + @list='$(pkgpyexec_DATA)'; test -n "$(pkgpyexecdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgpyexecdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgpyexecdir)" || exit $$?; \ + done + +uninstall-pkgpyexecDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgpyexec_DATA)'; test -n "$(pkgpyexecdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgpyexecdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgpyexecdir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(pkgpyexecdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pkgpyexecLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-pkgpyexecDATA install-pkgpyexecLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pkgpyexecDATA uninstall-pkgpyexecLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pkgpyexecLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgpyexecDATA \ + install-pkgpyexecLTLIBRARIES install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-pkgpyexecDATA uninstall-pkgpyexecLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/python/header-py.c b/python/header-py.c new file mode 100644 index 0000000..a790099 --- /dev/null +++ b/python/header-py.c @@ -0,0 +1,855 @@ +#include "rpmsystem-py.h" + +#include /* rpmvercmp */ +#include +#include +#include /* XXX rpmtsCreate/rpmtsFree */ + +#include "header-py.h" +#include "rpmds-py.h" +#include "rpmfd-py.h" +#include "rpmfi-py.h" +#include "rpmtd-py.h" + +#include "debug.h" + +/** \ingroup python + * \class Rpm + * \brief START HERE / RPM base module for the Python API + * + * The rpm base module provides the main starting point for + * accessing RPM from Python. For most usage, call + * the TransactionSet method to get a transaction set (rpmts). + * + * For example: + * \code + * import rpm + * + * ts = rpm.TransactionSet() + * \endcode + * + * The transaction set will open the RPM database as needed, so + * in most cases, you do not need to explicitly open the + * database. The transaction set is the workhorse of RPM. + * + * You can open another RPM database, such as one that holds + * all packages for a given Linux distribution, to provide + * packages used to solve dependencies. To do this, use + * the following code: + * + * \code + * rpm.addMacro('_dbpath', '/path/to/alternate/database') + * solvets = rpm.TransactionSet() + * solvets.openDB() + * rpm.delMacro('_dbpath') + * + * # Open default database + * ts = rpm.TransactionSet() + * \endcode + * + * This code gives you access to two RPM databases through + * two transaction sets (rpmts): ts is a transaction set + * associated with the default RPM database and solvets + * is a transaction set tied to an alternate database, which + * is very useful for resolving dependencies. + * + * The rpm methods used here are: + * + * - addMacro(macro, value) + * @param macro Name of macro to add + * @param value Value for the macro + * + * - delMacro(macro) + * @param macro Name of macro to delete + * + */ + +/** \ingroup python + * \class Rpmhdr + * \brief A python header object represents an RPM package header. + * + * All RPM packages have headers that provide metadata for the package. + * Header objects can be returned by database queries or loaded from a + * binary package on disk. + * + * The ts.hdrFromFdno() function returns the package header from a + * package on disk, verifying package signatures and digests of the + * package while reading. + * + * Note: The older method rpm.headerFromPackage() which has been replaced + * by ts.hdrFromFdno() used to return a (hdr, isSource) tuple. + * + * If you need to distinguish source/binary headers, do: + * \code + * import os, rpm + * + * ts = rpm.TransactionSet() + * fdno = os.open("/tmp/foo-1.0-1.i386.rpm", os.O_RDONLY) + * hdr = ts.hdrFromFdno(fdno) + * os.close(fdno) + * if hdr[rpm.RPMTAG_SOURCEPACKAGE]: + * print "header is from a source package" + * else: + * print "header is from a binary package" + * \endcode + * + * The Python interface to the header data is quite elegant. It + * presents the data in a dictionary form. We'll take the header we + * just loaded and access the data within it: + * \code + * print hdr[rpm.RPMTAG_NAME] + * print hdr[rpm.RPMTAG_VERSION] + * print hdr[rpm.RPMTAG_RELEASE] + * \endcode + * in the case of our "foo-1.0-1.i386.rpm" package, this code would + * output: +\verbatim + foo + 1.0 + 1 +\endverbatim + * + * You make also access the header data by string name: + * \code + * print hdr['name'] + * print hdr['version'] + * print hdr['release'] + * \endcode + * + * This method of access is a teensy bit slower because the name must be + * translated into the tag number dynamically. You also must make sure + * the strings in header lookups don't get translated, or the lookups + * will fail. + */ + +/** \ingroup python + * \name Class: rpm.hdr + */ + +struct hdrObject_s { + PyObject_HEAD + Header h; + HeaderIterator hi; +}; + +static PyObject * hdrKeyList(hdrObject * s) +{ + PyObject * keys = PyList_New(0); + HeaderIterator hi = headerInitIterator(s->h); + rpmTagVal tag; + + while ((tag = headerNextTag(hi)) != RPMTAG_NOT_FOUND) { + PyObject *to = PyInt_FromLong(tag); + PyList_Append(keys, to); + Py_DECREF(to); + } + headerFreeIterator(hi); + + return keys; +} + +static PyObject * hdrUnload(hdrObject * s, PyObject * args, PyObject *keywords) +{ + char * buf; + PyObject * rc; + int len, legacy = 0; + Header h; + static char *kwlist[] = { "legacyHeader", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, keywords, "|i", kwlist, &legacy)) + return NULL; + + h = headerLink(s->h); + /* XXX this legacy switch is a hack, needs to be removed. */ + if (legacy) { + h = headerCopy(s->h); /* XXX strip region tags, etc */ + headerFree(s->h); + } + len = headerSizeof(h, HEADER_MAGIC_NO); + buf = headerUnload(h); + h = headerFree(h); + + if (buf == NULL || len == 0) { + PyErr_SetString(pyrpmError, "can't unload bad header\n"); + return NULL; + } + + rc = PyBytes_FromStringAndSize(buf, len); + buf = _free(buf); + + return rc; +} + +static PyObject * hdrExpandFilelist(hdrObject * s) +{ + DEPRECATED_METHOD("use hdr.convert() instead"); + headerConvert(s->h, HEADERCONV_EXPANDFILELIST); + + Py_RETURN_NONE; +} + +static PyObject * hdrCompressFilelist(hdrObject * s) +{ + DEPRECATED_METHOD("use hdr.convert() instead"); + headerConvert(s->h, HEADERCONV_COMPRESSFILELIST); + + Py_RETURN_NONE; +} + +/* make a header with _all_ the tags we need */ +static PyObject * hdrFullFilelist(hdrObject * s) +{ + rpmtd fileNames = rpmtdNew(); + Header h = s->h; + + DEPRECATED_METHOD("obsolete method"); + if (!headerIsEntry (h, RPMTAG_BASENAMES) + || !headerIsEntry (h, RPMTAG_DIRNAMES) + || !headerIsEntry (h, RPMTAG_DIRINDEXES)) + headerConvert(h, HEADERCONV_COMPRESSFILELIST); + + if (headerGet(h, RPMTAG_FILENAMES, fileNames, HEADERGET_EXT)) { + rpmtdSetTag(fileNames, RPMTAG_OLDFILENAMES); + headerPut(h, fileNames, HEADERPUT_DEFAULT); + rpmtdFreeData(fileNames); + } + rpmtdFree(fileNames); + + Py_RETURN_NONE; +} + +static PyObject * hdrFormat(hdrObject * s, PyObject * args, PyObject * kwds) +{ + char * fmt; + char * r; + errmsg_t err; + PyObject * result; + char * kwlist[] = {"format", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, &fmt)) + return NULL; + + r = headerFormat(s->h, fmt, &err); + if (!r) { + PyErr_SetString(pyrpmError, err); + return NULL; + } + + result = Py_BuildValue("s", r); + r = _free(r); + + return result; +} + +static PyObject *hdrIsSource(hdrObject *s) +{ + return PyBool_FromLong(headerIsSource(s->h)); +} + +static int hdrContains(hdrObject *s, PyObject *pytag) +{ + rpmTagVal tag; + if (!tagNumFromPyObject(pytag, &tag)) return -1; + + return headerIsEntry(s->h, tag); +} + +static PyObject *hdrConvert(hdrObject *self, PyObject *args, PyObject *kwds) +{ + char *kwlist[] = {"op", NULL}; + int op = -1; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &op)) { + return NULL; + } + return PyBool_FromLong(headerConvert(self->h, op)); +} + +static PyObject * hdrWrite(hdrObject *s, PyObject *args, PyObject *kwds) +{ + char *kwlist[] = { "file", "magic", NULL }; + int magic = HEADER_MAGIC_YES; + rpmfdObject *fdo = NULL; + int rc; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|i", kwlist, + rpmfdFromPyObject, &fdo, &magic)) + return NULL; + + Py_BEGIN_ALLOW_THREADS; + rc = headerWrite(rpmfdGetFd(fdo), s->h, + magic ? HEADER_MAGIC_YES : HEADER_MAGIC_NO); + Py_END_ALLOW_THREADS; + + if (rc) PyErr_SetFromErrno(PyExc_IOError); + Py_XDECREF(fdo); /* avoid messing up errno with file close */ + if (rc) return NULL; + + Py_RETURN_NONE; +} + +/* + * Just a backwards-compatibility dummy, the arguments are not looked at + * or used. TODO: push this over to python side... + */ +static PyObject * hdr_fiFromHeader(PyObject * s, PyObject * args, PyObject * kwds) +{ + return PyObject_Call((PyObject *) &rpmfi_Type, + Py_BuildValue("(O)", s), NULL); +} + +/* Backwards compatibility. Flags argument is just a dummy and discarded. */ +static PyObject * hdr_dsFromHeader(PyObject * s, PyObject * args, PyObject * kwds) +{ + rpmTagVal tag = RPMTAG_REQUIRENAME; + rpmsenseFlags flags = 0; + char * kwlist[] = {"to", "flags", NULL}; + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O&i:dsFromHeader", kwlist, + tagNumFromPyObject, &tag, &flags)) + return NULL; + + return PyObject_Call((PyObject *) &rpmds_Type, + Py_BuildValue("(Oi)", s, tag), NULL); +} + +static PyObject * hdr_dsOfHeader(PyObject * s) +{ + return PyObject_Call((PyObject *) &rpmds_Type, + Py_BuildValue("(Oi)", s, RPMTAG_NEVR), NULL); +} + +static long hdr_hash(PyObject * h) +{ + return (long) h; +} + +static struct PyMethodDef hdr_methods[] = { + {"keys", (PyCFunction) hdrKeyList, METH_NOARGS, + NULL }, + {"unload", (PyCFunction) hdrUnload, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"expandFilelist", (PyCFunction) hdrExpandFilelist,METH_NOARGS, + NULL }, + {"compressFilelist",(PyCFunction) hdrCompressFilelist,METH_NOARGS, + NULL }, + {"fullFilelist", (PyCFunction) hdrFullFilelist, METH_NOARGS, + NULL }, + {"convert", (PyCFunction) hdrConvert, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"format", (PyCFunction) hdrFormat, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"sprintf", (PyCFunction) hdrFormat, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"isSource", (PyCFunction)hdrIsSource, METH_NOARGS, + NULL }, + {"write", (PyCFunction)hdrWrite, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"dsOfHeader", (PyCFunction)hdr_dsOfHeader, METH_NOARGS, + NULL}, + {"dsFromHeader", (PyCFunction)hdr_dsFromHeader, METH_VARARGS|METH_KEYWORDS, + NULL}, + {"fiFromHeader", (PyCFunction)hdr_fiFromHeader, METH_VARARGS|METH_KEYWORDS, + NULL}, + + {NULL, NULL} /* sentinel */ +}; + +/* TODO: permit keyring check + retrofits on copy/load */ +static PyObject *hdr_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds) +{ + PyObject *obj = NULL; + rpmfdObject *fdo = NULL; + Header h = NULL; + char *kwlist[] = { "obj", NULL }; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &obj)) { + return NULL; + } + + if (obj == NULL) { + h = headerNew(); + } else if (PyCObject_Check(obj)) { + h = PyCObject_AsVoidPtr(obj); + } else if (hdrObject_Check(obj)) { + h = headerCopy(((hdrObject*) obj)->h); + } else if (PyBytes_Check(obj)) { + h = headerCopyLoad(PyBytes_AsString(obj)); + } else if (rpmfdFromPyObject(obj, &fdo)) { + Py_BEGIN_ALLOW_THREADS; + h = headerRead(rpmfdGetFd(fdo), HEADER_MAGIC_YES); + Py_END_ALLOW_THREADS; + Py_XDECREF(fdo); + } else { + PyErr_SetString(PyExc_TypeError, "header, blob or file expected"); + return NULL; + } + + if (h == NULL) { + PyErr_SetString(pyrpmError, "bad header"); + return NULL; + } + + return hdr_Wrap(subtype, h); +} + +static void hdr_dealloc(hdrObject * s) +{ + if (s->h) headerFree(s->h); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static PyObject * hdr_iternext(hdrObject *s) +{ + PyObject *res = NULL; + rpmTagVal tag; + + if (s->hi == NULL) s->hi = headerInitIterator(s->h); + + if ((tag = headerNextTag(s->hi)) != RPMTAG_NOT_FOUND) { + res = PyInt_FromLong(tag); + } else { + s->hi = headerFreeIterator(s->hi); + } + return res; +} + +int utf8FromPyObject(PyObject *item, PyObject **str) +{ + PyObject *res = NULL; + if (PyBytes_Check(item)) { + Py_XINCREF(item); + res = item; + } else if (PyUnicode_Check(item)) { + res = PyUnicode_AsUTF8String(item); + } + if (res == NULL) return 0; + + *str = res; + return 1; +} + +int tagNumFromPyObject (PyObject *item, rpmTagVal *tagp) +{ + rpmTagVal tag = RPMTAG_NOT_FOUND; + PyObject *str = NULL; + + if (PyInt_Check(item)) { + /* XXX we should probably validate tag numbers too */ + tag = PyInt_AsLong(item); + } else if (utf8FromPyObject(item, &str)) { + tag = rpmTagGetValue(PyBytes_AsString(str)); + Py_DECREF(str); + } else { + PyErr_SetString(PyExc_TypeError, "expected a string or integer"); + return 0; + } + if (tag == RPMTAG_NOT_FOUND) { + PyErr_SetString(PyExc_ValueError, "unknown header tag"); + return 0; + } + + *tagp = tag; + return 1; +} + +static PyObject * hdrGetTag(Header h, rpmTagVal tag) +{ + PyObject *res = NULL; + struct rpmtd_s td; + + /* rpmtd_AsPyObj() knows how to handle empty containers and all */ + (void) headerGet(h, tag, &td, HEADERGET_EXT); + res = rpmtd_AsPyobj(&td); + rpmtdFreeData(&td); + return res; +} + +static int validItem(rpmTagClass tclass, PyObject *item) +{ + int rc; + + switch (tclass) { + case RPM_NUMERIC_CLASS: + rc = (PyLong_Check(item) || PyInt_Check(item)); + break; + case RPM_STRING_CLASS: + rc = (PyBytes_Check(item) || PyUnicode_Check(item)); + break; + case RPM_BINARY_CLASS: + rc = PyBytes_Check(item); + break; + default: + rc = 0; + break; + } + return rc; +} + +static int validData(rpmTagVal tag, rpmTagType type, rpmTagReturnType retype, PyObject *value) +{ + rpmTagClass tclass = rpmTagGetClass(tag); + int valid = 1; + + if (retype == RPM_SCALAR_RETURN_TYPE) { + valid = validItem(tclass, value); + } else if (retype == RPM_ARRAY_RETURN_TYPE && PyList_Check(value)) { + /* python lists can contain arbitrary objects, validate each item */ + Py_ssize_t len = PyList_Size(value); + for (Py_ssize_t i = 0; i < len; i++) { + PyObject *item = PyList_GetItem(value, i); + if (!validItem(tclass, item)) { + valid = 0; + break; + } + } + } else { + valid = 0; + } + return valid; +} + +static int hdrAppendItem(Header h, rpmTagVal tag, rpmTagType type, PyObject *item) +{ + int rc = 0; + + switch (type) { + case RPM_I18NSTRING_TYPE: /* XXX this needs to be handled separately */ + case RPM_STRING_TYPE: + case RPM_STRING_ARRAY_TYPE: { + PyObject *str = NULL; + if (utf8FromPyObject(item, &str)) + rc = headerPutString(h, tag, PyBytes_AsString(str)); + Py_XDECREF(str); + } break; + case RPM_BIN_TYPE: { + uint8_t *val = (uint8_t *) PyBytes_AsString(item); + rpm_count_t len = PyBytes_Size(item); + rc = headerPutBin(h, tag, val, len); + } break; + case RPM_INT64_TYPE: { + uint64_t val = PyInt_AsUnsignedLongLongMask(item); + rc = headerPutUint64(h, tag, &val, 1); + } break; + case RPM_INT32_TYPE: { + uint32_t val = PyInt_AsUnsignedLongMask(item); + rc = headerPutUint32(h, tag, &val, 1); + } break; + case RPM_INT16_TYPE: { + uint16_t val = PyInt_AsUnsignedLongMask(item); + rc = headerPutUint16(h, tag, &val, 1); + } break; + case RPM_INT8_TYPE: + case RPM_CHAR_TYPE: { + uint8_t val = PyInt_AsUnsignedLongMask(item); + rc = headerPutUint8(h, tag, &val, 1); + } break; + default: + PyErr_SetString(PyExc_TypeError, "unhandled datatype"); + } + return rc; +} + +static int hdrPutTag(Header h, rpmTagVal tag, PyObject *value) +{ + rpmTagType type = rpmTagGetTagType(tag); + rpmTagReturnType retype = rpmTagGetReturnType(tag); + int rc = 0; + + /* XXX this isn't really right (i18n strings etc) but for now ... */ + if (headerIsEntry(h, tag)) { + PyErr_SetString(PyExc_TypeError, "tag already exists"); + return rc; + } + + /* validate all data before trying to insert */ + if (!validData(tag, type, retype, value)) { + PyErr_SetString(PyExc_TypeError, "invalid type for tag"); + return 0; + } + + if (retype == RPM_SCALAR_RETURN_TYPE) { + rc = hdrAppendItem(h, tag, type, value); + } else if (retype == RPM_ARRAY_RETURN_TYPE && PyList_Check(value)) { + Py_ssize_t len = PyList_Size(value); + for (Py_ssize_t i = 0; i < len; i++) { + PyObject *item = PyList_GetItem(value, i); + rc = hdrAppendItem(h, tag, type, item); + } + } else { + PyErr_SetString(PyExc_RuntimeError, "cant happen, right?"); + } + + return rc; +} + +static PyObject * hdr_subscript(hdrObject * s, PyObject * item) +{ + rpmTagVal tag; + + if (!tagNumFromPyObject(item, &tag)) return NULL; + return hdrGetTag(s->h, tag); +} + +static int hdr_ass_subscript(hdrObject *s, PyObject *key, PyObject *value) +{ + rpmTagVal tag; + if (!tagNumFromPyObject(key, &tag)) return -1; + + if (value == NULL) { + /* XXX should failure raise key error? */ + headerDel(s->h, tag); + } else if (!hdrPutTag(s->h, tag, value)) { + return -1; + } + return 0; +} + +static PyObject * hdr_getattro(hdrObject * s, PyObject * n) +{ + PyObject *res = PyObject_GenericGetAttr((PyObject *) s, n); + if (res == NULL) { + PyObject *type, *value, *traceback; + rpmTagVal tag; + + /* Save and restore original exception if it's not a valid tag either */ + PyErr_Fetch(&type, &value, &traceback); + if (tagNumFromPyObject(n, &tag)) { + Py_XDECREF(type); + Py_XDECREF(value); + Py_XDECREF(traceback); + res = hdrGetTag(s->h, tag); + } else { + PyErr_Restore(type, value, traceback); + } + } + return res; +} + +static int hdr_setattro(PyObject * o, PyObject * n, PyObject * v) +{ + return PyObject_GenericSetAttr(o, n, v); +} + +static PyMappingMethods hdr_as_mapping = { + (lenfunc) 0, /* mp_length */ + (binaryfunc) hdr_subscript, /* mp_subscript */ + (objobjargproc)hdr_ass_subscript,/* mp_ass_subscript */ +}; + +static PySequenceMethods hdr_as_sequence = { + 0, /* sq_length */ + 0, /* sq_concat */ + 0, /* sq_repeat */ + 0, /* sq_item */ + 0, /* sq_slice */ + 0, /* sq_ass_item */ + 0, /* sq_ass_slice */ + (objobjproc)hdrContains, /* sq_contains */ + 0, /* sq_inplace_concat */ + 0, /* sq_inplace_repeat */ +}; + +static char hdr_doc[] = +""; + +PyTypeObject hdr_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.hdr", /* tp_name */ + sizeof(hdrObject), /* tp_size */ + 0, /* tp_itemsize */ + (destructor) hdr_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc) 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + &hdr_as_sequence, /* tp_as_sequence */ + &hdr_as_mapping, /* tp_as_mapping */ + hdr_hash, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + (getattrofunc) hdr_getattro, /* tp_getattro */ + (setattrofunc) hdr_setattro, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + hdr_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc)hdr_iternext, /* tp_iternext */ + hdr_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + hdr_new, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +PyObject * hdr_Wrap(PyTypeObject *subtype, Header h) +{ + hdrObject * hdr = (hdrObject *)subtype->tp_alloc(subtype, 0); + if (hdr == NULL) return NULL; + + hdr->h = headerLink(h); + return (PyObject *) hdr; +} + +int hdrFromPyObject(PyObject *item, Header *hptr) +{ + if (hdrObject_Check(item)) { + *hptr = ((hdrObject *) item)->h; + return 1; + } else { + PyErr_SetString(PyExc_TypeError, "header object expected"); + return 0; + } +} + +/** + * This assumes the order of list matches the order of the new headers, and + * throws an exception if that isn't true. + */ +static int rpmMergeHeaders(PyObject * list, FD_t fd, int matchTag) +{ + Header h; + HeaderIterator hi; + rpmTagVal newMatch, oldMatch; + hdrObject * hdr; + rpm_count_t count = 0; + int rc = 1; /* assume failure */ + rpmtd td = rpmtdNew(); + + Py_BEGIN_ALLOW_THREADS + h = headerRead(fd, HEADER_MAGIC_YES); + Py_END_ALLOW_THREADS + + while (h) { + if (!headerGet(h, matchTag, td, HEADERGET_MINMEM)) { + PyErr_SetString(pyrpmError, "match tag missing in new header"); + goto exit; + } + newMatch = rpmtdTag(td); + rpmtdFreeData(td); + + hdr = (hdrObject *) PyList_GetItem(list, count++); + if (!hdr) goto exit; + + if (!headerGet(hdr->h, matchTag, td, HEADERGET_MINMEM)) { + PyErr_SetString(pyrpmError, "match tag missing in new header"); + goto exit; + } + oldMatch = rpmtdTag(td); + rpmtdFreeData(td); + + if (newMatch != oldMatch) { + PyErr_SetString(pyrpmError, "match tag mismatch"); + goto exit; + } + + for (hi = headerInitIterator(h); headerNext(hi, td); rpmtdFreeData(td)) + { + /* could be dupes */ + headerDel(hdr->h, rpmtdTag(td)); + headerPut(hdr->h, td, HEADERPUT_DEFAULT); + } + + headerFreeIterator(hi); + h = headerFree(h); + + Py_BEGIN_ALLOW_THREADS + h = headerRead(fd, HEADER_MAGIC_YES); + Py_END_ALLOW_THREADS + } + rc = 0; + +exit: + rpmtdFree(td); + return rc; +} + +PyObject * +rpmMergeHeadersFromFD(PyObject * self, PyObject * args, PyObject * kwds) +{ + FD_t fd; + int fileno; + PyObject * list; + int rc; + int matchTag; + char * kwlist[] = {"list", "fd", "matchTag", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oii", kwlist, &list, + &fileno, &matchTag)) + return NULL; + + if (!PyList_Check(list)) { + PyErr_SetString(PyExc_TypeError, "first parameter must be a list"); + return NULL; + } + + fd = fdDup(fileno); + + rc = rpmMergeHeaders (list, fd, matchTag); + Fclose(fd); + + if (rc) { + return NULL; + } + + Py_RETURN_NONE; +} + +PyObject * versionCompare (PyObject * self, PyObject * args, PyObject * kwds) +{ + hdrObject * h1, * h2; + char * kwlist[] = {"version0", "version1", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O!", kwlist, &hdr_Type, + &h1, &hdr_Type, &h2)) + return NULL; + + return Py_BuildValue("i", rpmVersionCompare(h1->h, h2->h)); +} + +static int compare_values(const char *str1, const char *str2) +{ + if (!str1 && !str2) + return 0; + else if (str1 && !str2) + return 1; + else if (!str1 && str2) + return -1; + return rpmvercmp(str1, str2); +} + +PyObject * labelCompare (PyObject * self, PyObject * args) +{ + char *v1, *r1, *v2, *r2; + const char *e1, *e2; + int rc; + + if (!PyArg_ParseTuple(args, "(zzz)(zzz)", + &e1, &v1, &r1, &e2, &v2, &r2)) + return NULL; + + if (e1 == NULL) e1 = "0"; + if (e2 == NULL) e2 = "0"; + + rc = compare_values(e1, e2); + if (!rc) { + rc = compare_values(v1, v2); + if (!rc) + rc = compare_values(r1, r2); + } + return Py_BuildValue("i", rc); +} + diff --git a/python/header-py.h b/python/header-py.h new file mode 100644 index 0000000..1103876 --- /dev/null +++ b/python/header-py.h @@ -0,0 +1,26 @@ +#ifndef RPMPYTHON_HEADER +#define RPMPYTHON_HEADER + +#include + +typedef struct hdrObject_s hdrObject; + +extern PyTypeObject hdr_Type; + +#define hdrObject_Check(v) ((v)->ob_type == &hdr_Type) + +#define DEPRECATED_METHOD(_msg) \ + PyErr_WarnEx(PyExc_PendingDeprecationWarning, (_msg), 2); + +extern PyObject * pyrpmError; + +PyObject * hdr_Wrap(PyTypeObject *subtype, Header h); + +int hdrFromPyObject(PyObject *item, Header *h); +int utf8FromPyObject(PyObject *item, PyObject **str); +int tagNumFromPyObject (PyObject *item, rpmTagVal *tagp); + +PyObject * labelCompare (PyObject * self, PyObject * args); +PyObject * versionCompare (PyObject * self, PyObject * args, PyObject * kwds); +PyObject * rpmMergeHeadersFromFD(PyObject * self, PyObject * args, PyObject * kwds); +#endif diff --git a/python/rpm/__init__.py b/python/rpm/__init__.py new file mode 100644 index 0000000..d868d19 --- /dev/null +++ b/python/rpm/__init__.py @@ -0,0 +1,84 @@ +r"""RPM Module + +This module enables you to manipulate rpms and the rpm database. + +""" + +import warnings +import os +from rpm._rpm import * +from rpm.transaction import * +import rpm._rpm as _rpm +_RPMVSF_NODIGESTS = _rpm._RPMVSF_NODIGESTS +_RPMVSF_NOHEADER = _rpm._RPMVSF_NOHEADER +_RPMVSF_NOPAYLOAD = _rpm._RPMVSF_NOPAYLOAD +_RPMVSF_NOSIGNATURES = _rpm._RPMVSF_NOSIGNATURES + +__version__ = _rpm.__version__ +__version_info__ = tuple(__version__.split('.')) + +# try to import build bits but dont require it +try: + from rpm._rpmb import * +except ImportError: + pass + +# try to import signing bits but dont require it +try: + from rpm._rpms import * +except ImportError: + pass + +# backwards compatibility + give the same class both ways +ts = TransactionSet + +def headerLoad(*args, **kwds): + warnings.warn("Use rpm.hdr() instead.", DeprecationWarning, stacklevel=2) + return hdr(*args, **kwds) + +def _doHeaderListFromFD(rpm_fd, retrofit): + hlist = [] + while 1: + try: + h = hdr(rpm_fd) + if retrofit: + h.convert(HEADERCONV_RETROFIT_V3) + hlist.append(h) + except _rpm.error: + break + + return hlist + +def readHeaderListFromFD(file_desc, retrofit = True): + if not isinstance(file_desc, fd): + file_desc = fd(file_desc) + return _doHeaderListFromFD(file_desc, retrofit) + +def readHeaderListFromFile(path, retrofit = True): + f = fd(path) + hlist = _doHeaderListFromFD(f, retrofit) + f.close() + return hlist + +def readHeaderFromFD(file_desc): + if not isinstance(file_desc, fd): + file_desc = fd(file_desc) + try: + offset = file_desc.tell() + h = hdr(file_desc) + except (_rpm.error, IOError): + offset = None + h = None + + return (h, offset) + +def signalsCaught(siglist): + caught = [] + for sig in siglist: + if signalCaught(sig): + caught.append(sig) + + return caught + +def dsSingle(TagN, N, EVR = "", Flags = RPMSENSE_ANY): + return ds((N, EVR, Flags), TagN) diff --git a/python/rpm/transaction.py b/python/rpm/transaction.py new file mode 100644 index 0000000..73e4b3c --- /dev/null +++ b/python/rpm/transaction.py @@ -0,0 +1,156 @@ +#!/usr/bin/python + +import rpm +from rpm._rpm import ts as TransactionSetCore + +# TODO: migrate relevant documentation from C-side +class TransactionSet(TransactionSetCore): + _probFilter = 0 + + def _wrapSetGet(self, attr, val): + oval = getattr(self, attr) + setattr(self, attr, val) + return oval + + def setVSFlags(self, flags): + return self._wrapSetGet('_vsflags', flags) + + def getVSFlags(self): + return self._vsflags + + def setColor(self, color): + return self._wrapSetGet('_color', color) + + def setPrefColor(self, color): + return self._wrapSetGet('_prefcolor', color) + + def setFlags(self, flags): + return self._wrapSetGet('_flags', flags) + + def setProbFilter(self, ignoreSet): + return self._wrapSetGet('_probFilter', ignoreSet) + + def parseSpec(self, specfile): + import _rpmb + return _rpmb.spec(specfile) + + def getKeys(self): + keys = [] + for te in self: + keys.append(te.Key()) + # Backwards compatibility goo - WTH does this return a *tuple* ?! + if not keys: + return None + else: + return tuple(keys) + + def addInstall(self, item, key, how="u"): + if isinstance(item, basestring): + f = file(item) + header = self.hdrFromFdno(f) + f.close() + elif isinstance(item, file): + header = self.hdrFromFdno(item) + else: + header = item + + if not how in ['u', 'i']: + raise ValueError('how argument must be "u" or "i"') + upgrade = (how == "u") + + if not TransactionSetCore.addInstall(self, header, key, upgrade): + raise rpm.error("adding package to transaction failed") + + def addErase(self, item): + hdrs = [] + if isinstance(item, rpm.hdr): + hdrs = [item] + elif isinstance(item, rpm.mi): + hdrs = item + elif isinstance(item, int): + hdrs = self.dbMatch(rpm.RPMDBI_PACKAGES, item) + elif isinstance(item, basestring): + hdrs = self.dbMatch(rpm.RPMDBI_LABEL, item) + else: + raise TypeError("invalid type %s" % type(item)) + + for h in hdrs: + if not TransactionSetCore.addErase(self, h): + raise rpm.error("package not installed") + + # garbage collection should take care but just in case... + if isinstance(hdrs, rpm.mi): + del hdrs + + def run(self, callback, data): + rc = TransactionSetCore.run(self, callback, data, self._probFilter) + + # crazy backwards compatibility goo: None for ok, list of problems + # if transaction didnt complete and empty list if it completed + # with errors + if rc == 0: + return None + + res = [] + if rc > 0: + for prob in self.problems(): + item = ("%s" % prob, (prob.type, prob._str, prob._num)) + res.append(item) + return res + + def check(self, *args, **kwds): + TransactionSetCore.check(self, *args, **kwds) + + # compatibility: munge problem strings into dependency tuples of doom + res = [] + for p in self.problems(): + # is it anything we need to care about? + if p.type == rpm.RPMPROB_CONFLICT: + sense = rpm.RPMDEP_SENSE_CONFLICTS + elif p.type == rpm.RPMPROB_REQUIRES: + sense = rpm.RPMDEP_SENSE_REQUIRES + else: + continue + + # strip arch, split to name, version, release + nevr = p.altNEVR.rsplit('.', 1)[0] + n, v, r = nevr.rsplit('-', 2) + + # extract the dependency information + needs = p._str.split() + needname = needs[0] + needflags = rpm.RPMSENSE_ANY + if len(needs) == 3: + needop = needs[1] + if needop.find('<') >= 0: needflags |= rpm.RPMSENSE_LESS + if needop.find('=') >= 0: needflags |= rpm.RPMSENSE_EQUAL + if needop.find('>') >= 0: needflags |= rpm.RPMSENSE_GREATER + needver = needs[2] + else: + needver = "" + + res.append(((n, v, r),(needname,needver),needflags,sense,p.key)) + + return res + + def hdrCheck(self, blob): + res, msg = TransactionSetCore.hdrCheck(self, blob) + # generate backwards compatibly broken exceptions + if res == rpm.RPMRC_NOKEY: + raise rpm.error("public key not available") + elif res == rpm.RPMRC_NOTTRUSTED: + raise rpm.error("public key not trusted") + elif res != rpm.RPMRC_OK: + raise rpm.error(msg) + + def hdrFromFdno(self, fd): + res, h = TransactionSetCore.hdrFromFdno(self, fd) + # generate backwards compatibly broken exceptions + if res == rpm.RPMRC_NOKEY: + raise rpm.error("public key not available") + elif res == rpm.RPMRC_NOTTRUSTED: + raise rpm.error("public key not trusted") + elif res != rpm.RPMRC_OK: + raise rpm.error("error reading package header") + + return h diff --git a/python/rpmbmodule.c b/python/rpmbmodule.c new file mode 100644 index 0000000..a6a35d8 --- /dev/null +++ b/python/rpmbmodule.c @@ -0,0 +1,97 @@ +#include "rpmsystem-py.h" + +#include "spec-py.h" + +#include "debug.h" + +static char rpmb__doc__[] = +""; + +/* + Do any common preliminary work before python 2 vs python 3 module creation: +*/ +static int prepareInitModule(void) +{ + if (PyType_Ready(&spec_Type) < 0) return 0; + if (PyType_Ready(&specPkg_Type) < 0) return 0; + + return 1; +} + +static int initModule(PyObject *m) +{ + Py_INCREF(&spec_Type); + PyModule_AddObject(m, "spec", (PyObject *) &spec_Type); + Py_INCREF(&specPkg_Type); + PyModule_AddObject(m, "specPkg", (PyObject *) &specPkg_Type); + +#define REGISTER_ENUM(val) PyModule_AddIntConstant(m, #val, val) + REGISTER_ENUM(RPMBUILD_ISSOURCE); + REGISTER_ENUM(RPMBUILD_ISPATCH); + REGISTER_ENUM(RPMBUILD_ISICON); + REGISTER_ENUM(RPMBUILD_ISNO); + + REGISTER_ENUM(RPMBUILD_NONE); + REGISTER_ENUM(RPMBUILD_PREP); + REGISTER_ENUM(RPMBUILD_BUILD); + REGISTER_ENUM(RPMBUILD_INSTALL); + REGISTER_ENUM(RPMBUILD_CHECK); + REGISTER_ENUM(RPMBUILD_CLEAN); + REGISTER_ENUM(RPMBUILD_FILECHECK); + REGISTER_ENUM(RPMBUILD_PACKAGESOURCE); + REGISTER_ENUM(RPMBUILD_PACKAGEBINARY); + REGISTER_ENUM(RPMBUILD_RMSOURCE); + REGISTER_ENUM(RPMBUILD_RMBUILD); + REGISTER_ENUM(RPMBUILD_RMSPEC); + + REGISTER_ENUM(RPMBUILD_PKG_NONE); + REGISTER_ENUM(RPMBUILD_PKG_NODIRTOKENS); + + REGISTER_ENUM(RPMSPEC_NONE); + REGISTER_ENUM(RPMSPEC_ANYARCH); + REGISTER_ENUM(RPMSPEC_FORCE); + REGISTER_ENUM(RPMSPEC_NOLANG); + + return 1; +} + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, + "_rpmb", /* m_name */ + rpmb__doc__, /* m_doc */ + 0, /* m_size */ + NULL, /* m_methods */ + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; + +PyObject * PyInit__rpm(void); /* XXX eliminate gcc warning */ +PyObject * PyInit__rpm(void) +{ + PyObject *m; + + if (!prepareInitModule()) + return NULL; + m = PyModule_Create(&moduledef); + if (m == NULL || !initModule(m)) { + Py_XDECREF(m); + m = NULL; + } + return m; +} +#else +void init_rpmb(void); /* XXX eliminate gcc warning */ +void init_rpmb(void) +{ + PyObject *m; + + if (!prepareInitModule()) + return; + + m = Py_InitModule3("_rpmb", NULL, rpmb__doc__); + if (m) initModule(m); +} +#endif diff --git a/python/rpmds-py.c b/python/rpmds-py.c new file mode 100644 index 0000000..1576ec7 --- /dev/null +++ b/python/rpmds-py.c @@ -0,0 +1,405 @@ +#include "rpmsystem-py.h" + +#include +#include +#include /* rpmvercmp */ + +#include "header-py.h" +#include "rpmds-py.h" + +#include "debug.h" + +struct rpmdsObject_s { + PyObject_HEAD + PyObject *md_dict; /*!< to look like PyModuleObject */ + int active; + rpmds ds; +}; + +static PyObject * +rpmds_Count(rpmdsObject * s) +{ + DEPRECATED_METHOD("use len(ds) instead"); + return Py_BuildValue("i", PyMapping_Size((PyObject *)s)); +} + +static PyObject * +rpmds_Ix(rpmdsObject * s) +{ + return Py_BuildValue("i", rpmdsIx(s->ds)); +} + +static PyObject * +rpmds_DNEVR(rpmdsObject * s) +{ + return Py_BuildValue("s", rpmdsDNEVR(s->ds)); +} + +static PyObject * +rpmds_N(rpmdsObject * s) +{ + return Py_BuildValue("s", rpmdsN(s->ds)); +} + +static PyObject * +rpmds_EVR(rpmdsObject * s) +{ + return Py_BuildValue("s", rpmdsEVR(s->ds)); +} + +static PyObject * +rpmds_Flags(rpmdsObject * s) +{ + return Py_BuildValue("i", rpmdsFlags(s->ds)); +} + +static PyObject * +rpmds_TagN(rpmdsObject * s) +{ + return Py_BuildValue("i", rpmdsTagN(s->ds)); +} + +static PyObject * +rpmds_Color(rpmdsObject * s) +{ + return Py_BuildValue("i", rpmdsColor(s->ds)); +} + +static PyObject * +rpmds_iternext(rpmdsObject * s) +{ + PyObject * result = NULL; + + /* Reset loop indices on 1st entry. */ + if (!s->active) { + s->ds = rpmdsInit(s->ds); + s->active = 1; + } + + /* If more to do, return a (N, EVR, Flags) tuple. */ + if (rpmdsNext(s->ds) >= 0) { + result = rpmds_Wrap(Py_TYPE(s), rpmdsCurrent(s->ds)); + } else + s->active = 0; + + return result; +} + +static PyObject * +rpmds_SetNoPromote(rpmdsObject * s, PyObject * args, PyObject * kwds) +{ + int nopromote; + char * kwlist[] = {"noPromote", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "i:SetNoPromote", kwlist, + &nopromote)) + return NULL; + + return Py_BuildValue("i", rpmdsSetNoPromote(s->ds, nopromote)); +} + +static PyObject * +rpmds_Notify(rpmdsObject * s, PyObject * args, PyObject * kwds) +{ + const char * where; + int rc; + char * kwlist[] = {"location", "returnCode", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "si:Notify", kwlist, + &where, &rc)) + return NULL; + + rpmdsNotify(s->ds, where, rc); + Py_RETURN_NONE; +} + +/* XXX rpmdsFind uses bsearch on s->ds, so a sort is needed. */ +static PyObject * +rpmds_Sort(rpmdsObject * s) +{ + /* XXX sort on (N,EVR,F) here. */ + Py_RETURN_NONE; +} + +static PyObject * +rpmds_Find(rpmdsObject * s, PyObject * arg) +{ + rpmdsObject * o; + + if (!PyArg_Parse(arg, "O!:Find", &rpmds_Type, &o)) + return NULL; + + /* XXX make sure ods index is valid, real fix in lib/rpmds.c. */ + if (rpmdsIx(o->ds) == -1) rpmdsSetIx(o->ds, 0); + + return Py_BuildValue("i", rpmdsFind(s->ds, o->ds)); +} + +static PyObject * +rpmds_Merge(rpmdsObject * s, PyObject * arg) +{ + rpmdsObject * o; + + if (!PyArg_Parse(arg, "O!:Merge", &rpmds_Type, &o)) + return NULL; + + return Py_BuildValue("i", rpmdsMerge(&s->ds, o->ds)); +} +static PyObject * +rpmds_Search(rpmdsObject * s, PyObject * arg) +{ + rpmdsObject * o; + + if (!PyArg_Parse(arg, "O!:Merge", &rpmds_Type, &o)) + return NULL; + + return Py_BuildValue("i", rpmdsSearch(s->ds, o->ds)); +} + +static PyObject *rpmds_Compare(rpmdsObject * s, PyObject * o) +{ + rpmdsObject * ods; + + if (!PyArg_Parse(o, "O!:Compare", &rpmds_Type, &ods)) + return NULL; + + return PyBool_FromLong(rpmdsCompare(s->ds, ods->ds)); +} + +static PyObject *rpmds_Instance(rpmdsObject * s) +{ + return Py_BuildValue("i", rpmdsInstance(s->ds)); +} + +static PyObject * rpmds_Rpmlib(rpmdsObject * s) +{ + rpmds ds = NULL; + int xx; + + /* XXX check return code, permit arg (NULL uses system default). */ + xx = rpmdsRpmlib(&ds, NULL); + + return rpmds_Wrap(&rpmds_Type, ds); +} + +static struct PyMethodDef rpmds_methods[] = { + {"Count", (PyCFunction)rpmds_Count, METH_NOARGS, + "Deprecated, use len(ds) instead.\n" }, + {"Ix", (PyCFunction)rpmds_Ix, METH_NOARGS, + "ds.Ix -> Ix - Return current element index.\n" }, + {"DNEVR", (PyCFunction)rpmds_DNEVR, METH_NOARGS, + "ds.DNEVR -> DNEVR - Return current DNEVR.\n" }, + {"N", (PyCFunction)rpmds_N, METH_NOARGS, + "ds.N -> N - Return current N.\n" }, + {"EVR", (PyCFunction)rpmds_EVR, METH_NOARGS, + "ds.EVR -> EVR - Return current EVR.\n" }, + {"Flags", (PyCFunction)rpmds_Flags, METH_NOARGS, + "ds.Flags -> Flags - Return current Flags.\n" }, + {"TagN", (PyCFunction)rpmds_TagN, METH_NOARGS, + "ds.TagN -> TagN - Return current TagN.\n" }, + {"Color", (PyCFunction)rpmds_Color, METH_NOARGS, + "ds.Color -> Color - Return current Color.\n" }, + {"SetNoPromote",(PyCFunction)rpmds_SetNoPromote, METH_VARARGS|METH_KEYWORDS, + NULL}, + {"Notify", (PyCFunction)rpmds_Notify, METH_VARARGS|METH_KEYWORDS, + NULL}, + {"Sort", (PyCFunction)rpmds_Sort, METH_NOARGS, + NULL}, + {"Find", (PyCFunction)rpmds_Find, METH_O, + NULL}, + {"Merge", (PyCFunction)rpmds_Merge, METH_O, + NULL}, + {"Search", (PyCFunction)rpmds_Search, METH_O, +"ds.Search(element) -> matching ds index (-1 on failure)\n\ +- Check that element dependency range overlaps some member of ds.\n\ +The current index in ds is positioned at overlapping member upon success.\n" }, + {"Rpmlib", (PyCFunction)rpmds_Rpmlib, METH_NOARGS|METH_STATIC, + "ds.Rpmlib -> nds - Return internal rpmlib dependency set.\n"}, + {"Compare", (PyCFunction)rpmds_Compare, METH_O, + NULL}, + {"Instance", (PyCFunction)rpmds_Instance, METH_NOARGS, + NULL}, + {NULL, NULL} /* sentinel */ +}; + +/* ---------- */ + +static void +rpmds_dealloc(rpmdsObject * s) +{ + s->ds = rpmdsFree(s->ds); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static Py_ssize_t rpmds_length(rpmdsObject * s) +{ + return rpmdsCount(s->ds); +} + +static PyObject * +rpmds_subscript(rpmdsObject * s, PyObject * key) +{ + int ix; + + if (!PyInt_Check(key)) { + PyErr_SetString(PyExc_TypeError, "integer expected"); + return NULL; + } + + ix = (int) PyInt_AsLong(key); + rpmdsSetIx(s->ds, ix); + return Py_BuildValue("s", rpmdsDNEVR(s->ds)); +} + +static PyMappingMethods rpmds_as_mapping = { + (lenfunc) rpmds_length, /* mp_length */ + (binaryfunc) rpmds_subscript, /* mp_subscript */ + (objobjargproc)0, /* mp_ass_subscript */ +}; + +static int rpmds_init(rpmdsObject * s, PyObject *args, PyObject *kwds) +{ + s->active = 0; + return 0; +} + +static int depflags(PyObject *o, rpmsenseFlags *senseFlags) +{ + int ok = 0; + PyObject *str = NULL; + rpmsenseFlags flags = RPMSENSE_ANY; + + if (PyInt_Check(o)) { + ok = 1; + flags = PyInt_AsLong(o); + } else if (utf8FromPyObject(o, &str)) { + ok = 1; + for (const char *s = PyBytes_AsString(str); *s; s++) { + switch (*s) { + case '=': + flags |= RPMSENSE_EQUAL; + break; + case '<': + flags |= RPMSENSE_LESS; + break; + case '>': + flags |= RPMSENSE_GREATER; + break; + default: + ok = 0; + break; + } + } + Py_DECREF(str); + } + + if (flags == (RPMSENSE_EQUAL|RPMSENSE_LESS|RPMSENSE_GREATER)) + ok = 0; + + if (ok) + *senseFlags = flags; + + return ok; +} + +static PyObject * rpmds_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds) +{ + PyObject *obj; + rpmTagVal tagN = RPMTAG_REQUIRENAME; + rpmds ds = NULL; + Header h = NULL; + char * kwlist[] = {"obj", "tag", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&:rpmds_new", kwlist, + &obj, tagNumFromPyObject, &tagN)) + return NULL; + + if (PyTuple_Check(obj)) { + const char *name = NULL; + const char *evr = NULL; + rpmsenseFlags flags = RPMSENSE_ANY; + /* TODO: if flags are specified, evr should be required too */ + if (PyArg_ParseTuple(obj, "s|O&s", &name, depflags, &flags, &evr)) { + ds = rpmdsSingle(tagN, name, evr, flags); + } else { + PyErr_SetString(PyExc_ValueError, "invalid dependency tuple"); + return NULL; + } + } else if (hdrFromPyObject(obj, &h)) { + if (tagN == RPMTAG_NEVR) { + ds = rpmdsThis(h, RPMTAG_PROVIDENAME, RPMSENSE_EQUAL); + } else { + ds = rpmdsNew(h, tagN, 0); + } + } else { + PyErr_SetString(PyExc_TypeError, "header or tuple expected"); + return NULL; + } + + return rpmds_Wrap(subtype, ds); +} + +static char rpmds_doc[] = +""; + +PyTypeObject rpmds_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.ds", /* tp_name */ + sizeof(rpmdsObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor) rpmds_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ + 0, /* tp_compare */ + (reprfunc)0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + &rpmds_as_mapping, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmds_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc) rpmds_iternext, /* tp_iternext */ + rpmds_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc) rpmds_init, /* tp_init */ + 0, /* tp_alloc */ + (newfunc) rpmds_new, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +/* ---------- */ + +rpmds dsFromDs(rpmdsObject * s) +{ + return s->ds; +} + +PyObject * rpmds_Wrap(PyTypeObject *subtype, rpmds ds) +{ + rpmdsObject * s = (rpmdsObject *)subtype->tp_alloc(subtype, 0); + if (s == NULL) return NULL; + + s->ds = ds; + s->active = 0; + return (PyObject *) s; +} + diff --git a/python/rpmds-py.h b/python/rpmds-py.h new file mode 100644 index 0000000..ffbdef4 --- /dev/null +++ b/python/rpmds-py.h @@ -0,0 +1,16 @@ +#ifndef H_RPMDS_PY +#define H_RPMDS_PY + +#include + +typedef struct rpmdsObject_s rpmdsObject; + +extern PyTypeObject rpmds_Type; + +#define rpmdsObject_Check(v) ((v)->ob_type == &rpmds_Type) + +rpmds dsFromDs(rpmdsObject * ds); + +PyObject * rpmds_Wrap(PyTypeObject *subtype, rpmds ds); + +#endif diff --git a/python/rpmfd-py.c b/python/rpmfd-py.c new file mode 100644 index 0000000..f3536ea --- /dev/null +++ b/python/rpmfd-py.c @@ -0,0 +1,354 @@ + +#include "rpmsystem-py.h" +#include +#include "header-py.h" /* XXX for utf8FromPyObject() only */ +#include "rpmfd-py.h" + +struct rpmfdObject_s { + PyObject_HEAD + PyObject *md_dict; + FD_t fd; +}; + +FD_t rpmfdGetFd(rpmfdObject *fdo) +{ + return fdo->fd; +} + +int rpmfdFromPyObject(PyObject *obj, rpmfdObject **fdop) +{ + rpmfdObject *fdo = NULL; + + if (rpmfdObject_Check(obj)) { + Py_INCREF(obj); + fdo = (rpmfdObject *) obj; + } else { + fdo = (rpmfdObject *) PyObject_Call((PyObject *)&rpmfd_Type, + Py_BuildValue("(O)", obj), NULL); + } + if (fdo == NULL) return 0; + + if (Ferror(fdo->fd)) { + Py_DECREF(fdo); + PyErr_SetString(PyExc_IOError, Fstrerror(fdo->fd)); + return 0; + } + *fdop = fdo; + return 1; +} + +static PyObject *err_closed(void) +{ + PyErr_SetString(PyExc_ValueError, "I/O operation on closed file"); + return NULL; +} + +static FD_t openPath(const char *path, const char *mode, const char *flags) +{ + FD_t fd; + char *m = rstrscat(NULL, mode, ".", flags, NULL); + Py_BEGIN_ALLOW_THREADS + fd = Fopen(path, m); + Py_END_ALLOW_THREADS; + free(m); + return fd; +} + +static PyObject *rpmfd_new(PyTypeObject *subtype, + PyObject *args, PyObject *kwds) +{ + char *kwlist[] = { "obj", "mode", "flags", NULL }; + char *mode = "r"; + char *flags = "ufdio"; + PyObject *fo = NULL; + rpmfdObject *s = NULL; + FD_t fd = NULL; + int fdno; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|ss", kwlist, + &fo, &mode, &flags)) + return NULL; + + if (PyBytes_Check(fo)) { + fd = openPath(PyBytes_AsString(fo), mode, flags); + } else if (PyUnicode_Check(fo)) { + PyObject *enc = NULL; + int rc; +#if PY_MAJOR_VERSION >= 3 + rc = PyUnicode_FSConverter(fo, &enc); +#else + rc = utf8FromPyObject(fo, &enc); +#endif + if (rc == 0) + return NULL; + + fd = openPath(PyBytes_AsString(enc), mode, flags); + Py_DECREF(enc); + + } else if ((fdno = PyObject_AsFileDescriptor(fo)) >= 0) { + fd = fdDup(fdno); + } else { + PyErr_SetString(PyExc_TypeError, "path or file object expected"); + return NULL; + } + + if (Ferror(fd)) { + PyErr_SetString(PyExc_IOError, Fstrerror(fd)); + return NULL; + } + + if ((s = (rpmfdObject *)subtype->tp_alloc(subtype, 0)) == NULL) { + Fclose(fd); + return NULL; + } + /* TODO: remember our filename, mode & flags */ + s->fd = fd; + return (PyObject*) s; +} + +static PyObject *do_close(rpmfdObject *s) +{ + /* mimic python fileobject: close on closed file is not an error */ + if (s->fd) { + Py_BEGIN_ALLOW_THREADS + Fclose(s->fd); + Py_END_ALLOW_THREADS + s->fd = NULL; + } + Py_RETURN_NONE; +} + +static PyObject *rpmfd_close(rpmfdObject *s) +{ + return do_close(s); +} + +static void rpmfd_dealloc(rpmfdObject *s) +{ + PyObject *res = do_close(s); + Py_XDECREF(res); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static PyObject *rpmfd_fileno(rpmfdObject *s) +{ + int fno; + if (s->fd == NULL) return err_closed(); + + Py_BEGIN_ALLOW_THREADS + fno = Fileno(s->fd); + Py_END_ALLOW_THREADS + + if (Ferror(s->fd)) { + PyErr_SetString(PyExc_IOError, Fstrerror(s->fd)); + return NULL; + } + return Py_BuildValue("i", fno); +} + +static PyObject *rpmfd_flush(rpmfdObject *s) +{ + int rc; + + if (s->fd == NULL) return err_closed(); + + Py_BEGIN_ALLOW_THREADS + rc = Fflush(s->fd); + Py_END_ALLOW_THREADS + + if (rc || Ferror(s->fd)) { + PyErr_SetString(PyExc_IOError, Fstrerror(s->fd)); + return NULL; + } + Py_RETURN_NONE; +} + +static PyObject *rpmfd_isatty(rpmfdObject *s) +{ + int fileno; + if (s->fd == NULL) return err_closed(); + + Py_BEGIN_ALLOW_THREADS + fileno = Fileno(s->fd); + Py_END_ALLOW_THREADS + + if (Ferror(s->fd)) { + PyErr_SetString(PyExc_IOError, Fstrerror(s->fd)); + return NULL; + } + return PyBool_FromLong(isatty(fileno)); +} + +static PyObject *rpmfd_seek(rpmfdObject *s, PyObject *args, PyObject *kwds) +{ + char *kwlist[] = { "offset", "whence", NULL }; + off_t offset; + int whence = SEEK_SET; + int rc = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "L|i", kwlist, + &offset, &whence)) + return NULL; + + if (s->fd == NULL) return err_closed(); + + Py_BEGIN_ALLOW_THREADS + rc = Fseek(s->fd, offset, whence); + Py_END_ALLOW_THREADS + if (rc < 0 || Ferror(s->fd)) { + PyErr_SetString(PyExc_IOError, Fstrerror(s->fd)); + return NULL; + } + Py_RETURN_NONE; +} + +static PyObject *rpmfd_tell(rpmfdObject *s) +{ + off_t offset; + Py_BEGIN_ALLOW_THREADS + offset = Ftell(s->fd); + Py_END_ALLOW_THREADS + return Py_BuildValue("L", offset); + +} + +static PyObject *rpmfd_read(rpmfdObject *s, PyObject *args, PyObject *kwds) +{ + char *kwlist[] = { "size", NULL }; + char buf[BUFSIZ]; + ssize_t chunksize = sizeof(buf); + ssize_t left = -1; + ssize_t nb = 0; + PyObject *res = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|l", kwlist, &left)) + return NULL; + + if (s->fd == NULL) return err_closed(); + + /* ConcatAndDel() doesn't work on NULL string, meh */ + res = PyBytes_FromStringAndSize(NULL, 0); + do { + if (left >= 0 && left < chunksize) + chunksize = left; + + Py_BEGIN_ALLOW_THREADS + nb = Fread(buf, 1, chunksize, s->fd); + Py_END_ALLOW_THREADS + + if (nb > 0) { + PyObject *tmp = PyBytes_FromStringAndSize(buf, nb); + PyString_ConcatAndDel(&res, tmp); + left -= nb; + } + } while (nb > 0); + + if (Ferror(s->fd)) { + PyErr_SetString(PyExc_IOError, Fstrerror(s->fd)); + Py_XDECREF(res); + return NULL; + } else { + return res; + } +} + +static PyObject *rpmfd_write(rpmfdObject *s, PyObject *args, PyObject *kwds) +{ + + const char *buf = NULL; + ssize_t size = 0; + char *kwlist[] = { "buffer", NULL }; + ssize_t rc = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#", kwlist, &buf, &size)) { + return NULL; + } + + if (s->fd == NULL) return err_closed(); + + Py_BEGIN_ALLOW_THREADS + rc = Fwrite(buf, 1, size, s->fd); + Py_END_ALLOW_THREADS + + if (Ferror(s->fd)) { + PyErr_SetString(PyExc_IOError, Fstrerror(s->fd)); + return NULL; + } + return Py_BuildValue("n", rc); +} + +static char rpmfd_doc[] = ""; + +static struct PyMethodDef rpmfd_methods[] = { + { "close", (PyCFunction) rpmfd_close, METH_NOARGS, + NULL }, + { "fileno", (PyCFunction) rpmfd_fileno, METH_NOARGS, + NULL }, + { "flush", (PyCFunction) rpmfd_flush, METH_NOARGS, + NULL }, + { "isatty", (PyCFunction) rpmfd_isatty, METH_NOARGS, + NULL }, + { "read", (PyCFunction) rpmfd_read, METH_VARARGS|METH_KEYWORDS, + NULL }, + { "seek", (PyCFunction) rpmfd_seek, METH_VARARGS|METH_KEYWORDS, + NULL }, + { "tell", (PyCFunction) rpmfd_tell, METH_NOARGS, + NULL }, + { "write", (PyCFunction) rpmfd_write, METH_VARARGS|METH_KEYWORDS, + NULL }, + { NULL, NULL } +}; + +static PyObject *rpmfd_get_closed(rpmfdObject *s) +{ + return PyBool_FromLong((s->fd == NULL)); +} + +static PyGetSetDef rpmfd_getseters[] = { + { "closed", (getter)rpmfd_get_closed, NULL, NULL }, + { NULL }, +}; + +PyTypeObject rpmfd_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.fd", /* tp_name */ + sizeof(rpmfdObject), /* tp_size */ + 0, /* tp_itemsize */ + /* methods */ + (destructor) rpmfd_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ + 0, /* tp_compare */ + (reprfunc)0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmfd_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + rpmfd_methods, /* tp_methods */ + 0, /* tp_members */ + rpmfd_getseters, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)0, /* tp_init */ + (allocfunc)0, /* tp_alloc */ + (newfunc) rpmfd_new, /* tp_new */ + (freefunc)0, /* tp_free */ + 0, /* tp_is_gc */ +}; diff --git a/python/rpmfd-py.h b/python/rpmfd-py.h new file mode 100644 index 0000000..b84e174 --- /dev/null +++ b/python/rpmfd-py.h @@ -0,0 +1,17 @@ +#ifndef H_RPMFD_PY +#define H_RPMFD_PY + +#include + +typedef struct rpmfdObject_s rpmfdObject; + +extern PyTypeObject rpmfd_Type; + +#define rpmfdObject_Check(v) ((v)->ob_type == &rpmfd_Type) + +FD_t rpmfdGetFd(rpmfdObject *fdo); + +int rpmfdFromPyObject(PyObject *obj, rpmfdObject **fdop); + + +#endif diff --git a/python/rpmfi-py.c b/python/rpmfi-py.c new file mode 100644 index 0000000..52a2a3a --- /dev/null +++ b/python/rpmfi-py.c @@ -0,0 +1,378 @@ +#include "rpmsystem-py.h" + +#include +#include + +#include "header-py.h" +#include "rpmfi-py.h" + +#include "debug.h" + +struct rpmfiObject_s { + PyObject_HEAD + PyObject *md_dict; /*!< to look like PyModuleObject */ + int active; + rpmfi fi; +}; + +static PyObject * +rpmfi_FC(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiFC(s->fi)); +} + +static PyObject * +rpmfi_FX(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiFX(s->fi)); +} + +static PyObject * +rpmfi_DC(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiDC(s->fi)); +} + +static PyObject * +rpmfi_DX(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiDX(s->fi)); +} + +static PyObject * +rpmfi_BN(rpmfiObject * s) +{ + return Py_BuildValue("s", rpmfiBN(s->fi)); +} + +static PyObject * +rpmfi_DN(rpmfiObject * s) +{ + return Py_BuildValue("s", rpmfiDN(s->fi)); +} + +static PyObject * +rpmfi_FN(rpmfiObject * s) +{ + return Py_BuildValue("s", rpmfiFN(s->fi)); +} + +static PyObject * +rpmfi_FFlags(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiFFlags(s->fi)); +} + +static PyObject * +rpmfi_VFlags(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiVFlags(s->fi)); +} + +static PyObject * +rpmfi_FMode(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiFMode(s->fi)); +} + +static PyObject * +rpmfi_FState(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiFState(s->fi)); +} + +/* XXX rpmfiFDigest */ +static PyObject * +rpmfi_Digest(rpmfiObject * s) +{ + char *digest = rpmfiFDigestHex(s->fi, NULL); + if (digest) { + PyObject *dig = Py_BuildValue("s", digest); + free(digest); + return dig; + } else { + Py_RETURN_NONE; + } +} + +static PyObject * +rpmfi_FLink(rpmfiObject * s) +{ + return Py_BuildValue("s", rpmfiFLink(s->fi)); +} + +static PyObject * +rpmfi_FSize(rpmfiObject * s) +{ + return Py_BuildValue("L", rpmfiFSize(s->fi)); +} + +static PyObject * +rpmfi_FRdev(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiFRdev(s->fi)); +} + +static PyObject * +rpmfi_FMtime(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiFMtime(s->fi)); +} + +static PyObject * +rpmfi_FUser(rpmfiObject * s) +{ + return Py_BuildValue("s", rpmfiFUser(s->fi)); +} + +static PyObject * +rpmfi_FGroup(rpmfiObject * s) +{ + return Py_BuildValue("s", rpmfiFGroup(s->fi)); +} + +static PyObject * +rpmfi_FColor(rpmfiObject * s) +{ + return Py_BuildValue("i", rpmfiFColor(s->fi)); +} + +static PyObject * +rpmfi_FClass(rpmfiObject * s) +{ + const char * FClass; + + if ((FClass = rpmfiFClass(s->fi)) == NULL) + FClass = ""; + return Py_BuildValue("s", FClass); +} + +static PyObject * +rpmfi_iternext(rpmfiObject * s) +{ + PyObject * result = NULL; + + /* Reset loop indices on 1st entry. */ + if (!s->active) { + s->fi = rpmfiInit(s->fi, 0); + s->active = 1; + } + + /* If more to do, return the file tuple. */ + if (rpmfiNext(s->fi) >= 0) { + const char * FN = rpmfiFN(s->fi); + rpm_loff_t FSize = rpmfiFSize(s->fi); + int FMode = rpmfiFMode(s->fi); + int FMtime = rpmfiFMtime(s->fi); + int FFlags = rpmfiFFlags(s->fi); + int FRdev = rpmfiFRdev(s->fi); + int FInode = rpmfiFInode(s->fi); + int FNlink = rpmfiFNlink(s->fi); + int FState = rpmfiFState(s->fi); + int VFlags = rpmfiVFlags(s->fi); + const char * FUser = rpmfiFUser(s->fi); + const char * FGroup = rpmfiFGroup(s->fi); + + result = PyTuple_New(13); + if (FN == NULL) { + Py_INCREF(Py_None); + PyTuple_SET_ITEM(result, 0, Py_None); + } else + PyTuple_SET_ITEM(result, 0, Py_BuildValue("s", FN)); + PyTuple_SET_ITEM(result, 1, PyLong_FromLongLong(FSize)); + PyTuple_SET_ITEM(result, 2, PyInt_FromLong(FMode)); + PyTuple_SET_ITEM(result, 3, PyInt_FromLong(FMtime)); + PyTuple_SET_ITEM(result, 4, PyInt_FromLong(FFlags)); + PyTuple_SET_ITEM(result, 5, PyInt_FromLong(FRdev)); + PyTuple_SET_ITEM(result, 6, PyInt_FromLong(FInode)); + PyTuple_SET_ITEM(result, 7, PyInt_FromLong(FNlink)); + PyTuple_SET_ITEM(result, 8, PyInt_FromLong(FState)); + PyTuple_SET_ITEM(result, 9, PyInt_FromLong(VFlags)); + if (FUser == NULL) { + Py_INCREF(Py_None); + PyTuple_SET_ITEM(result, 10, Py_None); + } else + PyTuple_SET_ITEM(result, 10, Py_BuildValue("s", FUser)); + if (FGroup == NULL) { + Py_INCREF(Py_None); + PyTuple_SET_ITEM(result, 11, Py_None); + } else + PyTuple_SET_ITEM(result, 11, Py_BuildValue("s", FGroup)); + PyTuple_SET_ITEM(result, 12, rpmfi_Digest(s)); + + } else + s->active = 0; + + return result; +} + +static struct PyMethodDef rpmfi_methods[] = { + {"FC", (PyCFunction)rpmfi_FC, METH_NOARGS, + NULL}, + {"FX", (PyCFunction)rpmfi_FX, METH_NOARGS, + NULL}, + {"DC", (PyCFunction)rpmfi_DC, METH_NOARGS, + NULL}, + {"DX", (PyCFunction)rpmfi_DX, METH_NOARGS, + NULL}, + {"BN", (PyCFunction)rpmfi_BN, METH_NOARGS, + NULL}, + {"DN", (PyCFunction)rpmfi_DN, METH_NOARGS, + NULL}, + {"FN", (PyCFunction)rpmfi_FN, METH_NOARGS, + NULL}, + {"FFlags", (PyCFunction)rpmfi_FFlags, METH_NOARGS, + NULL}, + {"VFlags", (PyCFunction)rpmfi_VFlags, METH_NOARGS, + NULL}, + {"FMode", (PyCFunction)rpmfi_FMode, METH_NOARGS, + NULL}, + {"FState", (PyCFunction)rpmfi_FState, METH_NOARGS, + NULL}, + {"MD5", (PyCFunction)rpmfi_Digest, METH_NOARGS, + NULL}, + {"Digest", (PyCFunction)rpmfi_Digest, METH_NOARGS, + NULL}, + {"FLink", (PyCFunction)rpmfi_FLink, METH_NOARGS, + NULL}, + {"FSize", (PyCFunction)rpmfi_FSize, METH_NOARGS, + NULL}, + {"FRdev", (PyCFunction)rpmfi_FRdev, METH_NOARGS, + NULL}, + {"FMtime", (PyCFunction)rpmfi_FMtime, METH_NOARGS, + NULL}, + {"FUser", (PyCFunction)rpmfi_FUser, METH_NOARGS, + NULL}, + {"FGroup", (PyCFunction)rpmfi_FGroup, METH_NOARGS, + NULL}, + {"FColor", (PyCFunction)rpmfi_FColor, METH_NOARGS, + NULL}, + {"FClass", (PyCFunction)rpmfi_FClass, METH_NOARGS, + NULL}, + {NULL, NULL} /* sentinel */ +}; + +/* ---------- */ + +static void +rpmfi_dealloc(rpmfiObject * s) +{ + s->fi = rpmfiFree(s->fi); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static int +rpmfi_length(rpmfiObject * s) +{ + return rpmfiFC(s->fi); +} + +static PyObject * +rpmfi_subscript(rpmfiObject * s, PyObject * key) +{ + int ix; + + if (!PyInt_Check(key)) { + PyErr_SetString(PyExc_TypeError, "integer expected"); + return NULL; + } + + ix = (int) PyInt_AsLong(key); + rpmfiSetFX(s->fi, ix); + return Py_BuildValue("s", rpmfiFN(s->fi)); +} + +static PyMappingMethods rpmfi_as_mapping = { + (lenfunc) rpmfi_length, /* mp_length */ + (binaryfunc) rpmfi_subscript, /* mp_subscript */ + (objobjargproc)0, /* mp_ass_subscript */ +}; + +static int rpmfi_init(rpmfiObject * s, PyObject *args, PyObject *kwds) +{ + s->active = 0; + return 0; +} + +static PyObject * rpmfi_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds) +{ + PyObject * to = NULL; + Header h = NULL; + rpmfi fi = NULL; + rpmTagVal tagN = RPMTAG_BASENAMES; + int flags = 0; + char * kwlist[] = {"header", "tag", "flags", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&|Oi:rpmfi_init", kwlist, + hdrFromPyObject, &h, &to, &flags)) + return NULL; + + fi = rpmfiNew(NULL, h, tagN, flags); + + return rpmfi_Wrap(subtype, fi); +} + +static char rpmfi_doc[] = +""; + +PyTypeObject rpmfi_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.fi", /* tp_name */ + sizeof(rpmfiObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor) rpmfi_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ + 0, /* tp_compare */ + (reprfunc)0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + &rpmfi_as_mapping, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmfi_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc) rpmfi_iternext, /* tp_iternext */ + rpmfi_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc) rpmfi_init, /* tp_init */ + 0, /* tp_alloc */ + (newfunc) rpmfi_new, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +/* ---------- */ + +rpmfi fiFromFi(rpmfiObject * s) +{ + return s->fi; +} + +PyObject * rpmfi_Wrap(PyTypeObject *subtype, rpmfi fi) +{ + rpmfiObject *s = (rpmfiObject *)subtype->tp_alloc(subtype, 0); + if (s == NULL) return NULL; + + s->fi = fi; + s->active = 0; + return (PyObject *) s; +} + diff --git a/python/rpmfi-py.h b/python/rpmfi-py.h new file mode 100644 index 0000000..604bf71 --- /dev/null +++ b/python/rpmfi-py.h @@ -0,0 +1,16 @@ +#ifndef H_RPMFI_PY +#define H_RPMFI_PY + +#include + +typedef struct rpmfiObject_s rpmfiObject; + +extern PyTypeObject rpmfi_Type; + +#define rpmfiObject_Check(v) ((v)->ob_type == &rpmfi_Type) + +rpmfi fiFromFi(rpmfiObject * fi); + +PyObject * rpmfi_Wrap(PyTypeObject *subtype, rpmfi fi); + +#endif diff --git a/python/rpmii-py.c b/python/rpmii-py.c new file mode 100644 index 0000000..82817d8 --- /dev/null +++ b/python/rpmii-py.c @@ -0,0 +1,158 @@ +#include "rpmsystem-py.h" + +#include + +#include "rpmii-py.h" +#include "header-py.h" + +#include "debug.h" + +/** \ingroup python + * \class Rpmii + * \brief A python rpm.ii key iterator object represents the keys of a + * database index. + * + * The rpm.ii class conains the following methods: + * - next() -> key Return the next key. + * + * To obtain a rpm.ii object to query the database used by a transaction, + * the ts.dbIndex(tag) method is used. + * + * Here's an example that prints the name of all installed packages: + * \code + * import rpm + * ts = rpm.TransactionSet() + * for name in ts.dbIndex("conflictname"): + * print name + * \endcode + * + * ts.dbIndex() can be used to get the packages containing the keys of interest + */ + +/** \ingroup python + * \name Class: Rpmii + */ + +struct rpmiiObject_s { + PyObject_HEAD + PyObject *md_dict; /*!< to look like PyModuleObject */ + PyObject *ref; /* for db/ts refcounting */ + rpmdbIndexIterator ii; +}; + +static PyObject * +rpmii_iternext(rpmiiObject * s) +{ + char * key; + size_t keylen; + if (s->ii == NULL || (rpmdbIndexIteratorNext(s->ii, (const void**)&key, &keylen)) != 0) { + s->ii = rpmdbIndexIteratorFree(s->ii); + return NULL; + } + return PyBytes_FromStringAndSize(key, keylen); +}; + +static PyObject * +rpmii_instances(rpmiiObject * s) +{ + int entries = rpmdbIndexIteratorNumPkgs(s->ii); + PyObject * list = PyList_New(0); + PyObject * tuple; + for (int i = 0; i < entries; i++) { + tuple = PyTuple_New(2); + PyTuple_SET_ITEM(tuple, 0, + PyInt_FromLong(rpmdbIndexIteratorPkgOffset(s->ii, i))); + PyTuple_SET_ITEM(tuple, 1, + PyInt_FromLong(rpmdbIndexIteratorTagNum(s->ii, i))); + PyList_Append(list, tuple); + } + return list; +} + +static struct PyMethodDef rpmii_methods[] = { + {"instances", (PyCFunction) rpmii_instances, METH_NOARGS, NULL}, + {NULL, NULL} /* sentinel */ +}; + +static void rpmii_dealloc(rpmiiObject * s) +{ + s->ii = rpmdbIndexIteratorFree(s->ii); + Py_DECREF(s->ref); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static int rpmii_bool(rpmiiObject *s) +{ + return (s->ii != NULL); +} + +static PyNumberMethods rpmii_as_number = { + 0, /* nb_add */ + 0, /* nb_subtract */ + 0, /* nb_multiply */ + 0, /* nb_divide */ + 0, /* nb_remainder */ + 0, /* nb_divmod */ + 0, /* nb_power */ + 0, /* nb_negative */ + 0, /* nb_positive */ + 0, /* nb_absolute */ + (inquiry)rpmii_bool, /* nb_bool/nonzero */ +}; + +static char rpmii_doc[] = +""; + +PyTypeObject rpmii_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.ii", /* tp_name */ + sizeof(rpmiiObject), /* tp_size */ + 0, /* tp_itemsize */ + (destructor) rpmii_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + &rpmii_as_number, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmii_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc) rpmii_iternext, /* tp_iternext */ + rpmii_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +PyObject * rpmii_Wrap(PyTypeObject *subtype, rpmdbIndexIterator ii, PyObject *s) +{ + rpmiiObject * iio = (rpmiiObject *)subtype->tp_alloc(subtype, 0); + if (iio == NULL) return NULL; + + iio->ii = ii; + iio->ref = s; + Py_INCREF(iio->ref); + return (PyObject *) iio; +} diff --git a/python/rpmii-py.h b/python/rpmii-py.h new file mode 100644 index 0000000..bcfc5ff --- /dev/null +++ b/python/rpmii-py.h @@ -0,0 +1,12 @@ +#ifndef H_RPMII_PY +#define H_RPMII_PY + +typedef struct rpmiiObject_s rpmiiObject; + +extern PyTypeObject rpmii_Type; + +#define rpmiiObject_Check(v) ((v)->ob_type == &rpmii_Type) + +PyObject * rpmii_Wrap(PyTypeObject *subtype, rpmdbIndexIterator ii, PyObject *s); + +#endif diff --git a/python/rpmkeyring-py.c b/python/rpmkeyring-py.c new file mode 100644 index 0000000..d5f131e --- /dev/null +++ b/python/rpmkeyring-py.c @@ -0,0 +1,202 @@ +#include "rpmsystem-py.h" +#include +#include "rpmkeyring-py.h" + +struct rpmPubkeyObject_s { + PyObject_HEAD + PyObject *md_dict; + rpmPubkey pubkey; +}; + +static void rpmPubkey_dealloc(rpmPubkeyObject * s) +{ + s->pubkey = rpmPubkeyFree(s->pubkey); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static PyObject *rpmPubkey_new(PyTypeObject *subtype, + PyObject *args, PyObject *kwds) +{ + PyObject *key; + char *kwlist[] = { "key", NULL }; + rpmPubkey pubkey = NULL; + uint8_t *pkt; + size_t pktlen; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "S", kwlist, &key)) + return NULL; + + if (pgpParsePkts(PyBytes_AsString(key), &pkt, &pktlen) <= 0) { + PyErr_SetString(PyExc_ValueError, "invalid pubkey"); + return NULL; + } + pubkey = rpmPubkeyNew(pkt, pktlen); + + return rpmPubkey_Wrap(subtype, pubkey); +} + +static PyObject * rpmPubkey_Base64(rpmPubkeyObject *s) +{ + char *b64 = rpmPubkeyBase64(s->pubkey); + PyObject *res = Py_BuildValue("s", b64); + free(b64); + return res; +} + +static struct PyMethodDef rpmPubkey_methods[] = { + { "base64", (PyCFunction) rpmPubkey_Base64, METH_NOARGS, NULL }, + { NULL } +}; + +static char rpmPubkey_doc[] = ""; + +PyTypeObject rpmPubkey_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.pubkey", /* tp_name */ + sizeof(rpmPubkeyObject), /* tp_size */ + 0, /* tp_itemsize */ + (destructor) rpmPubkey_dealloc,/* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmPubkey_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + rpmPubkey_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + rpmPubkey_new, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +struct rpmKeyringObject_s { + PyObject_HEAD + PyObject *md_dict; + rpmKeyring keyring; +}; + +static void rpmKeyring_dealloc(rpmKeyringObject * s) +{ + rpmKeyringFree(s->keyring); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static PyObject *rpmKeyring_new(PyTypeObject *subtype, + PyObject *args, PyObject *kwds) +{ + rpmKeyring keyring = rpmKeyringNew(); + return rpmKeyring_Wrap(subtype, keyring); +} + +static PyObject *rpmKeyring_addKey(rpmKeyringObject *s, PyObject *arg) +{ + rpmPubkeyObject *pubkey = NULL; + + if (!PyArg_Parse(arg, "O!", &rpmPubkey_Type, &pubkey)) + return NULL; + + return Py_BuildValue("i", rpmKeyringAddKey(s->keyring, pubkey->pubkey)); +}; + +static struct PyMethodDef rpmKeyring_methods[] = { + { "addKey", (PyCFunction) rpmKeyring_addKey, METH_O, + NULL }, + {NULL, NULL} /* sentinel */ +}; + +static char rpmKeyring_doc[] = +""; + +PyTypeObject rpmKeyring_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.keyring", /* tp_name */ + sizeof(rpmKeyringObject), /* tp_size */ + 0, /* tp_itemsize */ + (destructor) rpmKeyring_dealloc,/* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmKeyring_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + rpmKeyring_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + rpmKeyring_new, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +PyObject * rpmPubkey_Wrap(PyTypeObject *subtype, rpmPubkey pubkey) +{ + rpmPubkeyObject *s = (rpmPubkeyObject *)subtype->tp_alloc(subtype, 0); + if (s == NULL) return NULL; + + s->pubkey = pubkey; + return (PyObject*) s; +} + +PyObject * rpmKeyring_Wrap(PyTypeObject *subtype, rpmKeyring keyring) +{ + rpmKeyringObject *s = (rpmKeyringObject *)subtype->tp_alloc(subtype, 0); + if (s == NULL) return NULL; + + s->keyring = keyring; + return (PyObject*) s; +} + +int rpmKeyringFromPyObject(PyObject *item, rpmKeyring *keyring) +{ + rpmKeyringObject *kro; + if (!PyArg_Parse(item, "O!", &rpmKeyring_Type, &kro)) + return 0; + *keyring = kro->keyring; + return 1; +} diff --git a/python/rpmkeyring-py.h b/python/rpmkeyring-py.h new file mode 100644 index 0000000..4ba017c --- /dev/null +++ b/python/rpmkeyring-py.h @@ -0,0 +1,16 @@ +#ifndef H_RPMKEYRING_PY +#define H_RPMKEYRING_PY + +#include + +typedef struct rpmPubkeyObject_s rpmPubkeyObject; +typedef struct rpmKeyringObject_s rpmKeyringObject; + +extern PyTypeObject rpmKeyring_Type; +extern PyTypeObject rpmPubkey_Type; + +PyObject * rpmPubkey_Wrap(PyTypeObject *subtype, rpmPubkey pubkey); +PyObject * rpmKeyring_Wrap(PyTypeObject *subtype, rpmKeyring keyring); + +int rpmKeyringFromPyObject(PyObject *item, rpmKeyring *keyring); +#endif diff --git a/python/rpmmacro-py.c b/python/rpmmacro-py.c new file mode 100644 index 0000000..dec8de0 --- /dev/null +++ b/python/rpmmacro-py.c @@ -0,0 +1,58 @@ +#include "rpmsystem-py.h" + +#include + +#include "rpmmacro-py.h" + +#include "debug.h" + +PyObject * +rpmmacro_AddMacro(PyObject * self, PyObject * args, PyObject * kwds) +{ + char * name, * val; + char * kwlist[] = {"name", "value", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss:AddMacro", kwlist, + &name, &val)) + return NULL; + + addMacro(NULL, name, NULL, val, -1); + + Py_RETURN_NONE; +} + +PyObject * +rpmmacro_DelMacro(PyObject * self, PyObject * args, PyObject * kwds) +{ + char * name; + char * kwlist[] = {"name", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s:DelMacro", kwlist, &name)) + return NULL; + + delMacro(NULL, name); + + Py_RETURN_NONE; +} + +PyObject * +rpmmacro_ExpandMacro(PyObject * self, PyObject * args, PyObject * kwds) +{ + char *macro; + PyObject *res; + int num = 0; + char * kwlist[] = {"macro", "numeric", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", kwlist, ¯o, &num)) + return NULL; + + if (num) { + res = Py_BuildValue("i", rpmExpandNumeric(macro)); + } else { + char *str = rpmExpand(macro, NULL); + res = Py_BuildValue("s", str); + free(str); + } + return res; +} + diff --git a/python/rpmmacro-py.h b/python/rpmmacro-py.h new file mode 100644 index 0000000..c9abffe --- /dev/null +++ b/python/rpmmacro-py.h @@ -0,0 +1,8 @@ +#ifndef H_RPMMACRO_PY +#define H_RPMMACRO_PY + +PyObject * rpmmacro_AddMacro(PyObject * self, PyObject * args, PyObject * kwds); +PyObject * rpmmacro_DelMacro(PyObject * self, PyObject * args, PyObject * kwds); +PyObject * rpmmacro_ExpandMacro(PyObject * self, PyObject * args, PyObject * kwds); + +#endif diff --git a/python/rpmmi-py.c b/python/rpmmi-py.c new file mode 100644 index 0000000..0b1c27a --- /dev/null +++ b/python/rpmmi-py.c @@ -0,0 +1,220 @@ +#include "rpmsystem-py.h" + +#include + +#include "rpmmi-py.h" +#include "header-py.h" + +#include "debug.h" + +/** \ingroup python + * \class Rpmmi + * \brief A python rpm.mi match iterator object represents the result of a + * database query. + * + * Instances of the rpm.mi object provide access to headers that match + * certain criteria. Typically, a primary index is accessed to find + * a set of headers that contain a key, and each header is returned + * serially. + * + * The rpm.mi class conains the following methods: + * - next() -> hdr Return the next header that matches. + * + * - pattern(tag,mire,pattern) Specify secondary match criteria. + * + * To obtain a rpm.mi object to query the database used by a transaction, + * the ts.match(tag,key,len) method is used. + * + * Here's an example that prints the name of all installed packages: + * \code + * import rpm + * ts = rpm.TransactionSet() + * for h in ts.dbMatch(): + * print h['name'] + * \endcode + * + * Here's a more typical example that uses the Name index to retrieve + * all installed kernel(s): + * \code + * import rpm + * ts = rpm.TransactionSet() + * mi = ts.dbMatch('name', "kernel") + * for h in mi: + * print "%s-%s-%s" % (h['name'], h['version'], h['release']) + * \endcode + * + * Finally, here's an example that retrieves all packages whose name + * matches the glob expression "XFree*": + * \code + * import rpm + * ts = rpm.TransactionSet() + * mi = ts.dbMatch() + * mi.pattern('name', rpm.RPMMIRE_GLOB, "XFree*") + * for h in mi: + * print "%s-%s-%s" % (h['name'], h['version'], h['release']) + * \endcode + * + */ + +/** \ingroup python + * \name Class: Rpmmi + */ + +struct rpmmiObject_s { + PyObject_HEAD + PyObject *md_dict; /*!< to look like PyModuleObject */ + PyObject *ref; /* for db/ts refcounting */ + rpmdbMatchIterator mi; +} ; + +static PyObject * +rpmmi_iternext(rpmmiObject * s) +{ + Header h; + + if (s->mi == NULL || (h = rpmdbNextIterator(s->mi)) == NULL) { + s->mi = rpmdbFreeIterator(s->mi); + return NULL; + } + return hdr_Wrap(&hdr_Type, h); +} + +static PyObject * +rpmmi_Instance(rpmmiObject * s) +{ + int rc = 0; + + if (s->mi != NULL) + rc = rpmdbGetIteratorOffset(s->mi); + + return Py_BuildValue("i", rc); +} + +static PyObject * +rpmmi_Count(rpmmiObject * s) +{ + DEPRECATED_METHOD("use len(mi) instead"); + return Py_BuildValue("i", PyMapping_Size((PyObject *)s)); +} + +static PyObject * +rpmmi_Pattern(rpmmiObject * s, PyObject * args, PyObject * kwds) +{ + int type; + char * pattern; + rpmTagVal tag; + char * kwlist[] = {"tag", "type", "patern", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&is:Pattern", kwlist, + tagNumFromPyObject, &tag, &type, &pattern)) + return NULL; + + rpmdbSetIteratorRE(s->mi, tag, type, pattern); + + Py_RETURN_NONE; +} + +static struct PyMethodDef rpmmi_methods[] = { + {"instance", (PyCFunction) rpmmi_Instance, METH_NOARGS, + NULL }, + {"count", (PyCFunction) rpmmi_Count, METH_NOARGS, +"Deprecated, use len(mi) instead.\n" }, + {"pattern", (PyCFunction) rpmmi_Pattern, METH_VARARGS|METH_KEYWORDS, +"mi.pattern(TagN, mire_type, pattern)\n\ +- Set a secondary match pattern on tags from retrieved header.\n" }, + {NULL, NULL} /* sentinel */ +}; + +static void rpmmi_dealloc(rpmmiObject * s) +{ + s->mi = rpmdbFreeIterator(s->mi); + Py_DECREF(s->ref); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static Py_ssize_t rpmmi_length(rpmmiObject * s) +{ + return s->mi ? rpmdbGetIteratorCount(s->mi) : 0; +} + +static int rpmmi_bool(rpmmiObject *s) +{ + return (s->mi != NULL); +} + +PyMappingMethods rpmmi_as_mapping = { + (lenfunc) rpmmi_length, /* mp_length */ + 0, +}; + +static PyNumberMethods rpmmi_as_number = { + 0, /* nb_add */ + 0, /* nb_subtract */ + 0, /* nb_multiply */ + 0, /* nb_divide */ + 0, /* nb_remainder */ + 0, /* nb_divmod */ + 0, /* nb_power */ + 0, /* nb_negative */ + 0, /* nb_positive */ + 0, /* nb_absolute */ + (inquiry)rpmmi_bool, /* nb_bool/nonzero */ +}; + +static char rpmmi_doc[] = +""; + +PyTypeObject rpmmi_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.mi", /* tp_name */ + sizeof(rpmmiObject), /* tp_size */ + 0, /* tp_itemsize */ + (destructor) rpmmi_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + &rpmmi_as_number, /* tp_as_number */ + 0, /* tp_as_sequence */ + &rpmmi_as_mapping, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmmi_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc) rpmmi_iternext, /* tp_iternext */ + rpmmi_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +PyObject * rpmmi_Wrap(PyTypeObject *subtype, rpmdbMatchIterator mi, PyObject *s) +{ + rpmmiObject * mio = (rpmmiObject *)subtype->tp_alloc(subtype, 0); + if (mio == NULL) return NULL; + + mio->mi = mi; + mio->ref = s; + Py_INCREF(mio->ref); + return (PyObject *) mio; +} + diff --git a/python/rpmmi-py.h b/python/rpmmi-py.h new file mode 100644 index 0000000..ef07c72 --- /dev/null +++ b/python/rpmmi-py.h @@ -0,0 +1,12 @@ +#ifndef H_RPMMI_PY +#define H_RPMMI_PY + +typedef struct rpmmiObject_s rpmmiObject; + +extern PyTypeObject rpmmi_Type; + +#define rpmmiObject_Check(v) ((v)->ob_type == &rpmmi_Type) + +PyObject * rpmmi_Wrap(PyTypeObject *subtype, rpmdbMatchIterator mi, PyObject *s); + +#endif diff --git a/python/rpmmodule.c b/python/rpmmodule.c new file mode 100644 index 0000000..0b69d4f --- /dev/null +++ b/python/rpmmodule.c @@ -0,0 +1,504 @@ +#include "rpmsystem-py.h" + +#include /* rpmMachineScore, rpmReadConfigFiles */ +#include +#include +#include +#include + +#include "header-py.h" +#include "rpmds-py.h" +#include "rpmfd-py.h" +#include "rpmfi-py.h" +#include "rpmkeyring-py.h" +#include "rpmmi-py.h" +#include "rpmii-py.h" +#include "rpmps-py.h" +#include "rpmmacro-py.h" +#include "rpmtd-py.h" +#include "rpmte-py.h" +#include "rpmts-py.h" + +#include "debug.h" + +/** \ingroup python + * \name Module: rpm + */ + +PyObject * pyrpmError; + +static PyObject * archScore(PyObject * self, PyObject * arg) +{ + char * arch; + + if (!PyArg_Parse(arg, "s", &arch)) + return NULL; + + return Py_BuildValue("i", rpmMachineScore(RPM_MACHTABLE_INSTARCH, arch)); +} + +static PyObject * signalCaught(PyObject *self, PyObject *o) +{ + int signo; + if (!PyArg_Parse(o, "i", &signo)) return NULL; + + return PyBool_FromLong(rpmsqIsCaught(signo)); +} + +static PyObject * checkSignals(PyObject * self) +{ + rpmdbCheckSignals(); + Py_RETURN_NONE; +} + +static PyObject * setLogFile (PyObject * self, PyObject *arg) +{ + FILE *fp; + int fdno = PyObject_AsFileDescriptor(arg); + + if (fdno >= 0) { + /* XXX we dont know the mode here.. guessing append for now */ + fp = fdopen(fdno, "a"); + if (fp == NULL) { + PyErr_SetFromErrno(PyExc_IOError); + return NULL; + } + } else if (arg == Py_None) { + fp = NULL; + } else { + PyErr_SetString(PyExc_TypeError, "file object or None expected"); + return NULL; + } + + (void) rpmlogSetFile(fp); + Py_RETURN_NONE; +} + +static PyObject * +setVerbosity (PyObject * self, PyObject * arg) +{ + int level; + + if (!PyArg_Parse(arg, "i", &level)) + return NULL; + + rpmSetVerbosity(level); + + Py_RETURN_NONE; +} + +static PyObject * +setEpochPromote (PyObject * self, PyObject * arg) +{ + if (!PyArg_Parse(arg, "i", &_rpmds_nopromote)) + return NULL; + + Py_RETURN_NONE; +} + +static PyObject * setStats (PyObject * self, PyObject * arg) +{ + if (!PyArg_Parse(arg, "i", &_rpmts_stats)) + return NULL; + + Py_RETURN_NONE; +} + +static PyObject * doLog(PyObject * self, PyObject * args, PyObject *kwds) +{ + int code; + const char *msg; + char * kwlist[] = {"code", "msg", NULL}; + if (!PyArg_ParseTupleAndKeywords(args, kwds, "is", kwlist, &code, &msg)) + return NULL; + + rpmlog(code, "%s", msg); + Py_RETURN_NONE; +} + +static PyMethodDef rpmModuleMethods[] = { + { "addMacro", (PyCFunction) rpmmacro_AddMacro, METH_VARARGS|METH_KEYWORDS, + NULL }, + { "delMacro", (PyCFunction) rpmmacro_DelMacro, METH_VARARGS|METH_KEYWORDS, + NULL }, + { "expandMacro", (PyCFunction) rpmmacro_ExpandMacro, METH_VARARGS|METH_KEYWORDS, + NULL }, + + { "archscore", (PyCFunction) archScore, METH_O, + NULL }, + + { "signalCaught", (PyCFunction) signalCaught, METH_O, + NULL }, + { "checkSignals", (PyCFunction) checkSignals, METH_NOARGS, + NULL }, + + { "mergeHeaderListFromFD", (PyCFunction) rpmMergeHeadersFromFD, METH_VARARGS|METH_KEYWORDS, + NULL }, + + { "log", (PyCFunction) doLog, METH_VARARGS|METH_KEYWORDS, + NULL }, + { "setLogFile", (PyCFunction) setLogFile, METH_O, + NULL }, + + { "versionCompare", (PyCFunction) versionCompare, METH_VARARGS|METH_KEYWORDS, + NULL }, + { "labelCompare", (PyCFunction) labelCompare, METH_VARARGS|METH_KEYWORDS, + NULL }, + { "setVerbosity", (PyCFunction) setVerbosity, METH_O, + NULL }, + { "setEpochPromote", (PyCFunction) setEpochPromote, METH_O, + NULL }, + { "setStats", (PyCFunction) setStats, METH_O, + NULL }, + + { NULL } +} ; + +/* +* Force clean up of open iterators and dbs on exit. +*/ +static void rpm_exithook(void) +{ + rpmdbCheckTerminate(1); +} + +static char rpm__doc__[] = +""; + +/* + * Add rpm tag dictionaries to the module + */ +static void addRpmTags(PyObject *module) +{ + PyObject *pyval, *pyname, *dict = PyDict_New(); + rpmtd names = rpmtdNew(); + rpmTagGetNames(names, 1); + const char *tagname, *shortname; + rpmTagVal tagval; + + while ((tagname = rpmtdNextString(names))) { + shortname = tagname + strlen("RPMTAG_"); + tagval = rpmTagGetValue(shortname); + + PyModule_AddIntConstant(module, tagname, tagval); + pyval = PyInt_FromLong(tagval); + pyname = Py_BuildValue("s", shortname); + PyDict_SetItem(dict, pyval, pyname); + Py_DECREF(pyval); + Py_DECREF(pyname); + } + PyModule_AddObject(module, "tagnames", dict); + rpmtdFreeData(names); + rpmtdFree(names); +} + +/* + Do any common preliminary work before python 2 vs python 3 module creation: +*/ +static int prepareInitModule(void) +{ + if (PyType_Ready(&hdr_Type) < 0) return 0; + if (PyType_Ready(&rpmds_Type) < 0) return 0; + if (PyType_Ready(&rpmfd_Type) < 0) return 0; + if (PyType_Ready(&rpmfi_Type) < 0) return 0; + if (PyType_Ready(&rpmKeyring_Type) < 0) return 0; + if (PyType_Ready(&rpmmi_Type) < 0) return 0; + if (PyType_Ready(&rpmii_Type) < 0) return 0; + if (PyType_Ready(&rpmProblem_Type) < 0) return 0; + if (PyType_Ready(&rpmPubkey_Type) < 0) return 0; +#if 0 + if (PyType_Ready(&rpmtd_Type) < 0) return 0; +#endif + if (PyType_Ready(&rpmte_Type) < 0) return 0; + if (PyType_Ready(&rpmts_Type) < 0) return 0; + + return 1; +} +static int initModule(PyObject *m); + +#if PY_MAJOR_VERSION >= 3 +static int rpmModuleTraverse(PyObject *m, visitproc visit, void *arg) { + Py_VISIT(pyrpmError); + return 0; +} + +static int rpmModuleClear(PyObject *m) { + Py_CLEAR(pyrpmError); + return 0; +} + +static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, + "_rpm", /* m_name */ + rpm__doc__, /* m_doc */ + 0, /* m_size */ + rpmModuleMethods, + NULL, /* m_reload */ + rpmModuleTraverse, + rpmModuleClear, + NULL /* m_free */ +}; + +PyObject * +PyInit__rpm(void); + +PyObject * +PyInit__rpm(void) +{ + PyObject * m; + if (!prepareInitModule()) return NULL; + m = PyModule_Create(&moduledef); + initModule(m); + return m; +} +#else +void init_rpm(void); /* XXX eliminate gcc warning */ +void init_rpm(void) +{ + PyObject * m; + + if (!prepareInitModule()) return; + m = Py_InitModule3("_rpm", rpmModuleMethods, rpm__doc__); + if (m == NULL) + return; + initModule(m); +} +#endif + +/* Shared python2/3 module initialization: */ +static int initModule(PyObject *m) +{ + PyObject * d; + + /* + * treat error to register rpm cleanup hook as fatal, tracebacks + * can and will leave stale locks around if we can't clean up + */ + if (Py_AtExit(rpm_exithook) == -1) + return 0; + + rpmReadConfigFiles(NULL, NULL); + + d = PyModule_GetDict(m); + + pyrpmError = PyErr_NewException("_rpm.error", NULL, NULL); + if (pyrpmError != NULL) + PyDict_SetItemString(d, "error", pyrpmError); + + Py_INCREF(&hdr_Type); + PyModule_AddObject(m, "hdr", (PyObject *) &hdr_Type); + + Py_INCREF(&rpmds_Type); + PyModule_AddObject(m, "ds", (PyObject *) &rpmds_Type); + + Py_INCREF(&rpmfd_Type); + PyModule_AddObject(m, "fd", (PyObject *) &rpmfd_Type); + + Py_INCREF(&rpmfi_Type); + PyModule_AddObject(m, "fi", (PyObject *) &rpmfi_Type); + + Py_INCREF(&rpmKeyring_Type); + PyModule_AddObject(m, "keyring", (PyObject *) &rpmKeyring_Type); + + Py_INCREF(&rpmmi_Type); + PyModule_AddObject(m, "mi", (PyObject *) &rpmmi_Type); + + Py_INCREF(&rpmii_Type); + PyModule_AddObject(m, "ii", (PyObject *) &rpmii_Type); + + Py_INCREF(&rpmProblem_Type); + PyModule_AddObject(m, "prob", (PyObject *) &rpmProblem_Type); + + Py_INCREF(&rpmPubkey_Type); + PyModule_AddObject(m, "pubkey", (PyObject *) &rpmPubkey_Type); + +#if 0 + Py_INCREF(&rpmtd_Type); + PyModule_AddObject(m, "td", (PyObject *) &rpmtd_Type); +#endif + + Py_INCREF(&rpmte_Type); + PyModule_AddObject(m, "te", (PyObject *) &rpmte_Type); + + Py_INCREF(&rpmts_Type); + PyModule_AddObject(m, "ts", (PyObject *) &rpmts_Type); + + addRpmTags(m); + + PyModule_AddStringConstant(m, "__version__", RPMVERSION); + +#define REGISTER_ENUM(val) PyModule_AddIntConstant(m, #val, val) + + REGISTER_ENUM(RPMTAG_NOT_FOUND); + + REGISTER_ENUM(RPMRC_OK); + REGISTER_ENUM(RPMRC_NOTFOUND); + REGISTER_ENUM(RPMRC_FAIL); + REGISTER_ENUM(RPMRC_NOTTRUSTED); + REGISTER_ENUM(RPMRC_NOKEY); + + REGISTER_ENUM(RPMFILE_STATE_NORMAL); + REGISTER_ENUM(RPMFILE_STATE_REPLACED); + REGISTER_ENUM(RPMFILE_STATE_NOTINSTALLED); + REGISTER_ENUM(RPMFILE_STATE_NETSHARED); + REGISTER_ENUM(RPMFILE_STATE_WRONGCOLOR); + + REGISTER_ENUM(RPMFILE_CONFIG); + REGISTER_ENUM(RPMFILE_DOC); + REGISTER_ENUM(RPMFILE_MISSINGOK); + REGISTER_ENUM(RPMFILE_NOREPLACE); + REGISTER_ENUM(RPMFILE_GHOST); + REGISTER_ENUM(RPMFILE_LICENSE); + REGISTER_ENUM(RPMFILE_README); + REGISTER_ENUM(RPMFILE_EXCLUDE); + REGISTER_ENUM(RPMFILE_UNPATCHED); + REGISTER_ENUM(RPMFILE_PUBKEY); + + REGISTER_ENUM(RPMDEP_SENSE_REQUIRES); + REGISTER_ENUM(RPMDEP_SENSE_CONFLICTS); + + REGISTER_ENUM(RPMSENSE_ANY); + REGISTER_ENUM(RPMSENSE_LESS); + REGISTER_ENUM(RPMSENSE_GREATER); + REGISTER_ENUM(RPMSENSE_EQUAL); + REGISTER_ENUM(RPMSENSE_PREREQ); + REGISTER_ENUM(RPMSENSE_INTERP); + REGISTER_ENUM(RPMSENSE_SCRIPT_PRE); + REGISTER_ENUM(RPMSENSE_SCRIPT_POST); + REGISTER_ENUM(RPMSENSE_SCRIPT_PREUN); + REGISTER_ENUM(RPMSENSE_SCRIPT_POSTUN); + REGISTER_ENUM(RPMSENSE_SCRIPT_VERIFY); + REGISTER_ENUM(RPMSENSE_FIND_REQUIRES); + REGISTER_ENUM(RPMSENSE_FIND_PROVIDES); + REGISTER_ENUM(RPMSENSE_TRIGGERIN); + REGISTER_ENUM(RPMSENSE_TRIGGERUN); + REGISTER_ENUM(RPMSENSE_TRIGGERPOSTUN); + REGISTER_ENUM(RPMSENSE_RPMLIB); + REGISTER_ENUM(RPMSENSE_TRIGGERPREIN); + REGISTER_ENUM(RPMSENSE_KEYRING); + REGISTER_ENUM(RPMSENSE_CONFIG); + + REGISTER_ENUM(RPMTRANS_FLAG_TEST); + REGISTER_ENUM(RPMTRANS_FLAG_BUILD_PROBS); + REGISTER_ENUM(RPMTRANS_FLAG_NOSCRIPTS); + REGISTER_ENUM(RPMTRANS_FLAG_JUSTDB); + REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERS); + REGISTER_ENUM(RPMTRANS_FLAG_NODOCS); + REGISTER_ENUM(RPMTRANS_FLAG_ALLFILES); + REGISTER_ENUM(RPMTRANS_FLAG_KEEPOBSOLETE); + REGISTER_ENUM(RPMTRANS_FLAG_NOCONTEXTS); + REGISTER_ENUM(RPMTRANS_FLAG_REPACKAGE); + REGISTER_ENUM(RPMTRANS_FLAG_REVERSE); + REGISTER_ENUM(RPMTRANS_FLAG_NOPRE); + REGISTER_ENUM(RPMTRANS_FLAG_NOPOST); + REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPREIN); + REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERIN); + REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERUN); + REGISTER_ENUM(RPMTRANS_FLAG_NOPREUN); + REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTUN); + REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPOSTUN); + REGISTER_ENUM(RPMTRANS_FLAG_NOMD5); + REGISTER_ENUM(RPMTRANS_FLAG_NOFILEDIGEST); + REGISTER_ENUM(RPMTRANS_FLAG_NOSUGGEST); + REGISTER_ENUM(RPMTRANS_FLAG_ADDINDEPS); + REGISTER_ENUM(RPMTRANS_FLAG_NOCONFIGS); + + REGISTER_ENUM(RPMPROB_FILTER_IGNOREOS); + REGISTER_ENUM(RPMPROB_FILTER_IGNOREARCH); + REGISTER_ENUM(RPMPROB_FILTER_REPLACEPKG); + REGISTER_ENUM(RPMPROB_FILTER_FORCERELOCATE); + REGISTER_ENUM(RPMPROB_FILTER_REPLACENEWFILES); + REGISTER_ENUM(RPMPROB_FILTER_REPLACEOLDFILES); + REGISTER_ENUM(RPMPROB_FILTER_OLDPACKAGE); + REGISTER_ENUM(RPMPROB_FILTER_DISKSPACE); + REGISTER_ENUM(RPMPROB_FILTER_DISKNODES); + + REGISTER_ENUM(RPMCALLBACK_UNKNOWN); + REGISTER_ENUM(RPMCALLBACK_INST_PROGRESS); + REGISTER_ENUM(RPMCALLBACK_INST_START); + REGISTER_ENUM(RPMCALLBACK_INST_OPEN_FILE); + REGISTER_ENUM(RPMCALLBACK_INST_CLOSE_FILE); + REGISTER_ENUM(RPMCALLBACK_TRANS_PROGRESS); + REGISTER_ENUM(RPMCALLBACK_TRANS_START); + REGISTER_ENUM(RPMCALLBACK_TRANS_STOP); + REGISTER_ENUM(RPMCALLBACK_UNINST_PROGRESS); + REGISTER_ENUM(RPMCALLBACK_UNINST_START); + REGISTER_ENUM(RPMCALLBACK_UNINST_STOP); + REGISTER_ENUM(RPMCALLBACK_REPACKAGE_PROGRESS); + REGISTER_ENUM(RPMCALLBACK_REPACKAGE_START); + REGISTER_ENUM(RPMCALLBACK_REPACKAGE_STOP); + REGISTER_ENUM(RPMCALLBACK_UNPACK_ERROR); + REGISTER_ENUM(RPMCALLBACK_CPIO_ERROR); + REGISTER_ENUM(RPMCALLBACK_SCRIPT_ERROR); + + REGISTER_ENUM(RPMPROB_BADARCH); + REGISTER_ENUM(RPMPROB_BADOS); + REGISTER_ENUM(RPMPROB_PKG_INSTALLED); + REGISTER_ENUM(RPMPROB_BADRELOCATE); + REGISTER_ENUM(RPMPROB_REQUIRES); + REGISTER_ENUM(RPMPROB_CONFLICT); + REGISTER_ENUM(RPMPROB_NEW_FILE_CONFLICT); + REGISTER_ENUM(RPMPROB_FILE_CONFLICT); + REGISTER_ENUM(RPMPROB_OLDPACKAGE); + REGISTER_ENUM(RPMPROB_DISKSPACE); + REGISTER_ENUM(RPMPROB_DISKNODES); + REGISTER_ENUM(RPMPROB_OBSOLETES); + + REGISTER_ENUM(VERIFY_DIGEST); + REGISTER_ENUM(VERIFY_SIGNATURE); + + REGISTER_ENUM(RPMLOG_EMERG); + REGISTER_ENUM(RPMLOG_ALERT); + REGISTER_ENUM(RPMLOG_CRIT); + REGISTER_ENUM(RPMLOG_ERR); + REGISTER_ENUM(RPMLOG_WARNING); + REGISTER_ENUM(RPMLOG_NOTICE); + REGISTER_ENUM(RPMLOG_INFO); + REGISTER_ENUM(RPMLOG_DEBUG); + + REGISTER_ENUM(RPMMIRE_DEFAULT); + REGISTER_ENUM(RPMMIRE_STRCMP); + REGISTER_ENUM(RPMMIRE_REGEX); + REGISTER_ENUM(RPMMIRE_GLOB); + + REGISTER_ENUM(RPMVSF_DEFAULT); + REGISTER_ENUM(RPMVSF_NOHDRCHK); + REGISTER_ENUM(RPMVSF_NEEDPAYLOAD); + REGISTER_ENUM(RPMVSF_NOSHA1HEADER); + REGISTER_ENUM(RPMVSF_NOMD5HEADER); + REGISTER_ENUM(RPMVSF_NODSAHEADER); + REGISTER_ENUM(RPMVSF_NORSAHEADER); + REGISTER_ENUM(RPMVSF_NOSHA1); + REGISTER_ENUM(RPMVSF_NOMD5); + REGISTER_ENUM(RPMVSF_NODSA); + REGISTER_ENUM(RPMVSF_NORSA); + REGISTER_ENUM(_RPMVSF_NODIGESTS); + REGISTER_ENUM(_RPMVSF_NOSIGNATURES); + REGISTER_ENUM(_RPMVSF_NOHEADER); + REGISTER_ENUM(_RPMVSF_NOPAYLOAD); + + REGISTER_ENUM(TR_ADDED); + REGISTER_ENUM(TR_REMOVED); + + REGISTER_ENUM(RPMDBI_PACKAGES); + REGISTER_ENUM(RPMDBI_LABEL); + REGISTER_ENUM(RPMDBI_NAME); + REGISTER_ENUM(RPMDBI_BASENAMES); + REGISTER_ENUM(RPMDBI_GROUP); + REGISTER_ENUM(RPMDBI_REQUIRENAME); + REGISTER_ENUM(RPMDBI_PROVIDENAME); + REGISTER_ENUM(RPMDBI_CONFLICTNAME); + REGISTER_ENUM(RPMDBI_OBSOLETENAME); + REGISTER_ENUM(RPMDBI_TRIGGERNAME); + REGISTER_ENUM(RPMDBI_DIRNAMES); + REGISTER_ENUM(RPMDBI_INSTALLTID); + REGISTER_ENUM(RPMDBI_SIGMD5); + REGISTER_ENUM(RPMDBI_SHA1HEADER); + + REGISTER_ENUM(HEADERCONV_EXPANDFILELIST); + REGISTER_ENUM(HEADERCONV_COMPRESSFILELIST); + REGISTER_ENUM(HEADERCONV_RETROFIT_V3); + + return 1; +} + diff --git a/python/rpmps-py.c b/python/rpmps-py.c new file mode 100644 index 0000000..fa7e91e --- /dev/null +++ b/python/rpmps-py.c @@ -0,0 +1,141 @@ +#include "rpmsystem-py.h" + +#include "rpmps-py.h" + +#include "debug.h" + +struct rpmProblemObject_s { + PyObject_HEAD + PyObject *md_dict; + rpmProblem prob; +}; + +static char rpmprob_doc[] = +""; + +static PyObject *rpmprob_get_type(rpmProblemObject *s, void *closure) +{ + return Py_BuildValue("i", rpmProblemGetType(s->prob)); +} + +static PyObject *rpmprob_get_pkgnevr(rpmProblemObject *s, void *closure) +{ + return Py_BuildValue("s", rpmProblemGetPkgNEVR(s->prob)); +} + +static PyObject *rpmprob_get_altnevr(rpmProblemObject *s, void *closure) +{ + return Py_BuildValue("s", rpmProblemGetAltNEVR(s->prob)); +} + +static PyObject *rpmprob_get_key(rpmProblemObject *s, void *closure) +{ + fnpyKey key = rpmProblemGetKey(s->prob); + if (key) { + return Py_BuildValue("O", rpmProblemGetKey(s->prob)); + } else { + Py_RETURN_NONE; + } +} + +static PyObject *rpmprob_get_str(rpmProblemObject *s, void *closure) +{ + return Py_BuildValue("s", rpmProblemGetStr(s->prob)); +} + +static PyObject *rpmprob_get_num(rpmProblemObject *s, void *closure) +{ + return Py_BuildValue("L", rpmProblemGetDiskNeed(s->prob)); +} + +static PyGetSetDef rpmprob_getseters[] = { + { "type", (getter)rpmprob_get_type, NULL, NULL }, + { "pkgNEVR", (getter)rpmprob_get_pkgnevr, NULL, NULL }, + { "altNEVR", (getter)rpmprob_get_altnevr, NULL, NULL }, + { "key", (getter)rpmprob_get_key, NULL, NULL }, + { "_str", (getter)rpmprob_get_str, NULL, NULL }, + { "_num", (getter)rpmprob_get_num, NULL, NULL }, + { NULL } +}; + +static PyObject *rpmprob_str(rpmProblemObject *s) +{ + char *str = rpmProblemString(s->prob); + PyObject *res = Py_BuildValue("s", str); + free(str); + return res; +} + +static void rpmprob_dealloc(rpmProblemObject *s) +{ + s->prob = rpmProblemFree(s->prob); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +PyTypeObject rpmProblem_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.prob", /* tp_name */ + sizeof(rpmProblemObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)rpmprob_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ + 0, /* tp_compare */ + (reprfunc)0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)rpmprob_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmprob_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + (richcmpfunc)0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + rpmprob_getseters, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + (newfunc)0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +PyObject *rpmprob_Wrap(PyTypeObject *subtype, rpmProblem prob) +{ + rpmProblemObject * s = (rpmProblemObject *)subtype->tp_alloc(subtype, 0); + if (s == NULL) return NULL; + + s->prob = rpmProblemLink(prob); + return (PyObject *) s; +} + +PyObject *rpmps_AsList(rpmps ps) +{ + PyObject *problems = PyList_New(0); + rpmpsi psi = rpmpsInitIterator(ps); + rpmProblem prob; + + while ((prob = rpmpsiNext(psi))) { + PyObject *pyprob = rpmprob_Wrap(&rpmProblem_Type, prob); + PyList_Append(problems, pyprob); + Py_DECREF(pyprob); + } + rpmpsFreeIterator(psi); + return problems; +} diff --git a/python/rpmps-py.h b/python/rpmps-py.h new file mode 100644 index 0000000..4d7efc8 --- /dev/null +++ b/python/rpmps-py.h @@ -0,0 +1,16 @@ +#ifndef H_RPMPS_PY +#define H_RPMPS_PY + +#include + +typedef struct rpmProblemObject_s rpmProblemObject; + +extern PyTypeObject rpmProblem_Type; + +#define rpmProblemObject_Check(v) ((v)->ob_type == &rpmProblem_Type) + +PyObject * rpmprob_Wrap(PyTypeObject *subtype, rpmProblem prob); + +PyObject *rpmps_AsList(rpmps ps); + +#endif diff --git a/python/rpmsmodule.c b/python/rpmsmodule.c new file mode 100644 index 0000000..e0b1b66 --- /dev/null +++ b/python/rpmsmodule.c @@ -0,0 +1,97 @@ +#include "rpmsystem-py.h" + +#include + +#include "debug.h" + +static char rpms__doc__[] = +""; + +static PyObject * addSign(PyObject * self, PyObject * args, PyObject *kwds) +{ + const char *path = NULL; + const char *passPhrase = NULL; + char * kwlist[] = { "path", "passPhrase", "keyid", "hashalgo", NULL }; + struct rpmSignArgs sig, *sigp = NULL; + + memset(&sig, 0, sizeof(sig)); + if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss|si", kwlist, + &path, &passPhrase, &sig.keyid, &sig.hashalgo)) + return NULL; + + if (sig.keyid || sig.hashalgo) + sigp = &sig; + + return PyBool_FromLong(rpmPkgSign(path, sigp, passPhrase) == 0); +} + +static PyObject * delSign(PyObject * self, PyObject * args, PyObject *kwds) +{ + const char *path = NULL; + char * kwlist[] = { "path", NULL }; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, &path)) + return NULL; + + return PyBool_FromLong(rpmPkgDelSign(path) == 0); +} + +/* + Do any common preliminary work before python 2 vs python 3 module creation: +*/ +static int prepareInitModule(void) +{ + return 1; +} + +static int initModule(PyObject *m) +{ + return 1; +} + +static PyMethodDef modMethods[] = { + { "addSign", (PyCFunction) addSign, METH_VARARGS|METH_KEYWORDS, NULL }, + { "delSign", (PyCFunction) delSign, METH_VARARGS|METH_KEYWORDS, NULL }, + { NULL }, +}; + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, + "_rpms", /* m_name */ + rpms__doc__, /* m_doc */ + 0, /* m_size */ + NULL, /* m_methods */ + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; + +PyObject * PyInit__rpm(void); /* XXX eliminate gcc warning */ +PyObject * PyInit__rpm(void) +{ + PyObject *m; + + if (!prepareInitModule()) + return NULL; + m = PyModule_Create(&moduledef); + if (m == NULL || !initModule(m)) { + Py_XDECREF(m); + m = NULL; + } + return m; +} +#else +void init_rpms(void); /* XXX eliminate gcc warning */ +void init_rpms(void) +{ + PyObject *m; + + if (!prepareInitModule()) + return; + + m = Py_InitModule3("_rpms", modMethods, rpms__doc__); + if (m) initModule(m); +} +#endif diff --git a/python/rpmsystem-py.h b/python/rpmsystem-py.h new file mode 100644 index 0000000..78d1fa8 --- /dev/null +++ b/python/rpmsystem-py.h @@ -0,0 +1,45 @@ +#ifndef H_SYSTEM_PYTHON +#define H_SYSTEM_PYTHON + +#if defined(__APPLE__) +#include +#endif + +#include +#include + +#include "../system.h" + +#if ((PY_MAJOR_VERSION << 8) | (PY_MINOR_VERSION << 0)) < 0x0205 +typedef ssize_t Py_ssize_t; +typedef Py_ssize_t (*lenfunc)(PyObject *); +#endif + +/* Compatibility macros for Python < 2.6 */ +#ifndef PyVarObject_HEAD_INIT +#define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, +#endif + +#ifndef Py_TYPE +#define Py_TYPE(o) ((o)->ob_type) +#endif + +#if ((PY_MAJOR_VERSION << 8) | (PY_MINOR_VERSION << 0)) < 0x0206 +#define PyBytes_Check PyString_Check +#define PyBytes_FromString PyString_FromString +#define PyBytes_FromStringAndSize PyString_FromStringAndSize +#define PyBytes_Size PyString_Size +#define PyBytes_AsString PyString_AsString +#endif + +/* For Python 3, use the PyLong type throughout in place of PyInt */ +#if PY_MAJOR_VERSION >= 3 +#define PyInt_Check PyLong_Check +#define PyInt_AsLong PyLong_AsLong +#define PyInt_FromLong PyLong_FromLong +#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask +#define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask +#endif + +#endif /* H_SYSTEM_PYTHON */ diff --git a/python/rpmtd-py.c b/python/rpmtd-py.c new file mode 100644 index 0000000..8232127 --- /dev/null +++ b/python/rpmtd-py.c @@ -0,0 +1,214 @@ +/** \ingroup py_c + * \file python/rpmtd-py.c + */ + +#include "rpmsystem-py.h" +#include +#include +#include "rpmtd-py.h" +#include "header-py.h" + +/* + * Convert single tag data item to python object of suitable type + */ +static PyObject * rpmtd_ItemAsPyobj(rpmtd td, rpmTagClass tclass) +{ + PyObject *res = NULL; + + switch (tclass) { + case RPM_STRING_CLASS: + res = PyBytes_FromString(rpmtdGetString(td)); + break; + case RPM_NUMERIC_CLASS: + res = PyLong_FromLongLong(rpmtdGetNumber(td)); + break; + case RPM_BINARY_CLASS: + res = PyBytes_FromStringAndSize(td->data, td->count); + break; + default: + PyErr_SetString(PyExc_KeyError, "unknown data type"); + break; + } + return res; +} + +PyObject *rpmtd_AsPyobj(rpmtd td) +{ + PyObject *res = NULL; + int array = (rpmTagGetReturnType(td->tag) == RPM_ARRAY_RETURN_TYPE); + rpmTagClass tclass = rpmtdClass(td); + + if (!array && rpmtdCount(td) < 1) { + Py_RETURN_NONE; + } + + if (array) { + res = PyList_New(0); + while (rpmtdNext(td) >= 0) { + PyObject *item = rpmtd_ItemAsPyobj(td, tclass); + PyList_Append(res, item); + Py_DECREF(item); + } + } else { + res = rpmtd_ItemAsPyobj(td, tclass); + } + return res; +} + +#if 0 +struct rpmtdObject_s { + PyObject_HEAD + PyObject *md_dict; + struct rpmtd_s td; +}; + +/* string format should never fail but do regular repr just in case it does */ +static PyObject *rpmtd_str(rpmtdObject *s) +{ + PyObject *res = NULL; + char *str = rpmtdFormat(&(s->td), RPMTD_FORMAT_STRING, NULL); + if (str) { + res = PyBytes_FromString(str); + free(str); + } else { + res = PyObject_Repr((PyObject *)s); + } + return res; +} + +static PyObject *rpmtd_iternext(rpmtdObject *s) +{ + PyObject *next = NULL; + + if (rpmtdNext(&(s->td)) >= 0) { + Py_INCREF(s); + next = (PyObject*) s; + } + return next; +} + +static PyObject *rpmtd_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds) +{ + rpmtdObject *s = NULL; + Header h = NULL; + rpmTagVal tag; + int raw = 0; + int noext = 0; + headerGetFlags flags = (HEADERGET_EXT | HEADERGET_ALLOC); + char *kwlist[] = { "header", "tag", "raw", "noext", NULL }; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&O&|ii", kwlist, + hdrFromPyObject, &h, tagNumFromPyObject, &tag, + &raw, &noext)) + return NULL; + + if (raw) { + flags |= HEADERGET_RAW; + noext = 1; /* extensions with raw dont make sense */ + } + if (noext) flags &= ~HEADERGET_EXT; + + if ((s = (rpmtdObject *)subtype->tp_alloc(subtype, 0)) == NULL) + return NULL; + + headerGet(h, tag, &(s->td), flags); + + return (PyObject *) s; +} + +static void rpmtd_dealloc(rpmtdObject * s) +{ + rpmtdFreeData(&(s->td)); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static int rpmtd_length(rpmtdObject *s) +{ + return rpmtdCount(&(s->td)); +} + +static PyMappingMethods rpmtd_as_mapping = { + (lenfunc) rpmtd_length, /* mp_length */ +}; + +static PyMemberDef rpmtd_members[] = { + { "type", T_INT, offsetof(rpmtdObject, td.type), READONLY, NULL }, + { NULL } +}; + +static PyObject *rpmtd_get_tag(rpmtdObject *s, void *closure) +{ + return Py_BuildValue("i", rpmtdTag(&(s->td))); +} + +static int rpmtd_set_tag(rpmtdObject *s, PyObject *value, void *closure) +{ + rpmTagVal tag; + if (!tagNumFromPyObject(value, &tag)) return -1; + + if (!rpmtdSetTag(&(s->td), tag)) { + PyErr_SetString(PyExc_ValueError, "incompatible tag for data"); + return -1; + } + return 0; +} + +static PyGetSetDef rpmtd_getseters[] = { + { "tag", (getter)rpmtd_get_tag, (setter)rpmtd_set_tag, NULL }, + { NULL } +}; + +PyTypeObject rpmtd_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.td", /* tp_name */ + sizeof(rpmtdObject), /* tp_size */ + 0, /* tp_itemsize */ + (destructor) rpmtd_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + &rpmtd_as_mapping, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + (reprfunc)rpmtd_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + 0, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc)rpmtd_iternext, /* tp_iternext */ + 0, /* tp_methods */ + rpmtd_members, /* tp_members */ + rpmtd_getseters, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + rpmtd_new, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +int rpmtdFromPyObject(PyObject *obj, rpmtd *td) +{ + if (rpmtdObject_Check(obj)) { + *td = &(((rpmtdObject *)obj)->td); + return 1; + } else { + PyErr_SetString(PyExc_TypeError, "rpm.td type expected"); + return 0; + } +} +#endif diff --git a/python/rpmtd-py.h b/python/rpmtd-py.h new file mode 100644 index 0000000..4c95e89 --- /dev/null +++ b/python/rpmtd-py.h @@ -0,0 +1,14 @@ +#ifndef H_RPMTD_PY +#define H_RPMTD_PY + +typedef struct rpmtdObject_s rpmtdObject; + +extern PyTypeObject rpmtd_Type; + +#define rpmtdObject_Check(v) ((v)->ob_type == &rpmtd_Type) + +PyObject * rpmtd_AsPyobj(rpmtd td); + +int rpmtdFromPyObject(PyObject *obj, rpmtd *td); + +#endif diff --git a/python/rpmte-py.c b/python/rpmte-py.c new file mode 100644 index 0000000..e017264 --- /dev/null +++ b/python/rpmte-py.c @@ -0,0 +1,302 @@ +#include "rpmsystem-py.h" + +#include "header-py.h" /* XXX tagNumFromPyObject */ +#include "rpmds-py.h" +#include "rpmfi-py.h" +#include "rpmte-py.h" +#include "rpmps-py.h" + +#include "debug.h" + + +/** \ingroup python + * \name Class: Rpmte + * \class Rpmte + * \brief An python rpm.te object represents an element of a transaction set. + * + * Elements of a transaction set are accessible after being added. Each + * element carries descriptive information about the added element as well + * as a file info set and dependency sets for each of the 4 types of dependency. + * + * The rpmte class contains the following methods: + * + * - te.Type() Return transaction element type (TR_ADDED|TR_REMOVED). + * - te.N() Return package name. + * - te.E() Return package epoch. + * - te.V() Return package version. + * - te.R() Return package release. + * - te.A() Return package architecture. + * - te.O() Return package operating system. + * - te.NEVR() Return package name-version-release. + * - te.Color() Return package color bits. + * - te.PkgFileSize() Return no. of bytes in package file (approx). + * - te.Parent() Return the parent element index. + * - te.Problems() Return problems associated with this element. + * - te.AddedKey() Return the added package index (TR_ADDED). + * - te.DependsOnKey() Return the package index for the added package (TR_REMOVED). + * - te.DBOffset() Return the Packages database instance number (TR_REMOVED) + * - te.Key() Return the associated opaque key, i.e. 2nd arg ts.addInstall(). + * - te.DS(tag) Return package dependency set. + * @param tag 'Providename', 'Requirename', 'Obsoletename', 'Conflictname' + * - te.FI(tag) Return package file info set. + * @param tag 'Basenames' + */ + +struct rpmteObject_s { + PyObject_HEAD + PyObject *md_dict; /*!< to look like PyModuleObject */ + rpmte te; +}; + +static PyObject * +rpmte_TEType(rpmteObject * s) +{ + return Py_BuildValue("i", rpmteType(s->te)); +} + +static PyObject * +rpmte_N(rpmteObject * s) +{ + return Py_BuildValue("s", rpmteN(s->te)); +} + +static PyObject * +rpmte_E(rpmteObject * s) +{ + return Py_BuildValue("s", rpmteE(s->te)); +} + +static PyObject * +rpmte_V(rpmteObject * s) +{ + return Py_BuildValue("s", rpmteV(s->te)); +} + +static PyObject * +rpmte_R(rpmteObject * s) +{ + return Py_BuildValue("s", rpmteR(s->te)); +} + +static PyObject * +rpmte_A(rpmteObject * s) +{ + return Py_BuildValue("s", rpmteA(s->te)); +} + +static PyObject * +rpmte_O(rpmteObject * s) +{ + return Py_BuildValue("s", rpmteO(s->te)); +} + +static PyObject * +rpmte_NEVR(rpmteObject * s) +{ + return Py_BuildValue("s", rpmteNEVR(s->te)); +} + +static PyObject * +rpmte_NEVRA(rpmteObject * s) +{ + return Py_BuildValue("s", rpmteNEVRA(s->te)); +} + +static PyObject * +rpmte_Color(rpmteObject * s) +{ + return Py_BuildValue("i", rpmteColor(s->te)); +} + +static PyObject * +rpmte_PkgFileSize(rpmteObject * s) +{ + return Py_BuildValue("L", rpmtePkgFileSize(s->te)); +} + +static PyObject * +rpmte_Parent(rpmteObject * s) +{ + return Py_BuildValue("i", rpmteParent(s->te)); +} + +static PyObject * rpmte_Failed(rpmteObject * s) +{ + return Py_BuildValue("i", rpmteFailed(s->te)); +} + +static PyObject * rpmte_Problems(rpmteObject * s) +{ + rpmps ps = rpmteProblems(s->te); + PyObject *problems = rpmps_AsList(ps); + rpmpsFree(ps); + return problems; +} + +/* +static PyObject * +rpmte_DependsOnKey(rpmteObject * s) +{ + return Py_BuildValue("i", rpmteDependsOnKey(s->te)); +} +*/ + +static PyObject * +rpmte_DBOffset(rpmteObject * s) +{ + return Py_BuildValue("i", rpmteDBOffset(s->te)); +} + +static PyObject * +rpmte_Key(rpmteObject * s) +{ + PyObject * Key; + + /* XXX how to insure this is a PyObject??? */ + Key = (PyObject *) rpmteKey(s->te); + if (Key == NULL) + Key = Py_None; + Py_INCREF(Key); + return Key; +} + +static PyObject * +rpmte_DS(rpmteObject * s, PyObject * args, PyObject * kwds) +{ + rpmds ds; + rpmTagVal tag; + char * kwlist[] = {"tag", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&:DS", kwlist, + tagNumFromPyObject, &tag)) + return NULL; + + ds = rpmteDS(s->te, tag); + if (ds == NULL) { + Py_RETURN_NONE; + } + return rpmds_Wrap(&rpmds_Type, rpmdsLink(ds)); +} + +static PyObject * +rpmte_FI(rpmteObject * s, PyObject * args, PyObject * kwds) +{ + rpmfi fi; + + fi = rpmteFI(s->te); + if (fi == NULL) { + Py_RETURN_NONE; + } + return rpmfi_Wrap(&rpmfi_Type, rpmfiLink(fi)); +} + +static struct PyMethodDef rpmte_methods[] = { + {"Type", (PyCFunction)rpmte_TEType, METH_NOARGS, +"te.Type() -> Type\n\ +- Return element type (rpm.TR_ADDED | rpm.TR_REMOVED).\n" }, + {"N", (PyCFunction)rpmte_N, METH_NOARGS, +"te.N() -> N\n\ +- Return element name.\n" }, + {"E", (PyCFunction)rpmte_E, METH_NOARGS, +"te.E() -> E\n\ +- Return element epoch.\n" }, + {"V", (PyCFunction)rpmte_V, METH_NOARGS, +"te.V() -> V\n\ +- Return element version.\n" }, + {"R", (PyCFunction)rpmte_R, METH_NOARGS, +"te.R() -> R\n\ +- Return element release.\n" }, + {"A", (PyCFunction)rpmte_A, METH_NOARGS, +"te.A() -> A\n\ +- Return element arch.\n" }, + {"O", (PyCFunction)rpmte_O, METH_NOARGS, +"te.O() -> O\n\ +- Return element os.\n" }, + {"NEVR", (PyCFunction)rpmte_NEVR, METH_NOARGS, +"te.NEVR() -> NEVR\n\ +- Return element name-[epoch:]version-release.\n" }, + {"NEVRA", (PyCFunction)rpmte_NEVRA, METH_NOARGS, +"te.NEVRA() -> NEVRA\n\ +- Return element name-[epoch:]version-release.arch\n" }, + {"Color",(PyCFunction)rpmte_Color, METH_NOARGS, + NULL}, + {"PkgFileSize",(PyCFunction)rpmte_PkgFileSize, METH_NOARGS, + NULL}, + {"Parent", (PyCFunction)rpmte_Parent, METH_NOARGS, + NULL}, + {"Problems",(PyCFunction)rpmte_Problems, METH_NOARGS, + NULL}, +/* {"DependsOnKey",(PyCFunction)rpmte_DependsOnKey, METH_NOARGS, + NULL}, */ + {"DBOffset",(PyCFunction)rpmte_DBOffset, METH_NOARGS, + NULL}, + {"Failed", (PyCFunction)rpmte_Failed, METH_NOARGS, + NULL}, + {"Key", (PyCFunction)rpmte_Key, METH_NOARGS, + NULL}, + {"DS", (PyCFunction)rpmte_DS, METH_VARARGS|METH_KEYWORDS, +"te.DS(TagN) -> DS\n\ +- Return the TagN dependency set (or None). TagN is one of\n\ + 'Providename', 'Requirename', 'Obsoletename', 'Conflictname'\n" }, + {"FI", (PyCFunction)rpmte_FI, METH_VARARGS|METH_KEYWORDS, +"te.FI(TagN) -> FI\n\ +- Return the TagN dependency set (or None). TagN must be 'Basenames'.\n" }, + {NULL, NULL} /* sentinel */ +}; + +/* ---------- */ + +static char rpmte_doc[] = +""; + +PyTypeObject rpmte_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.te", /* tp_name */ + sizeof(rpmteObject), /* tp_size */ + 0, /* tp_itemsize */ + (destructor)0, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmte_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + rpmte_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +PyObject * rpmte_Wrap(PyTypeObject *subtype, rpmte te) +{ + rpmteObject *s = (rpmteObject *)subtype->tp_alloc(subtype, 0); + if (s == NULL) return NULL; + + s->te = te; + return (PyObject *) s; +} diff --git a/python/rpmte-py.h b/python/rpmte-py.h new file mode 100644 index 0000000..28bc0e3 --- /dev/null +++ b/python/rpmte-py.h @@ -0,0 +1,14 @@ +#ifndef H_RPMTE_PY +#define H_RPMTE_PY + +#include + +typedef struct rpmteObject_s rpmteObject; + +extern PyTypeObject rpmte_Type; + +#define rpmteObject_Check(v) ((v)->ob_type == &rpmte_Type) + +PyObject * rpmte_Wrap(PyTypeObject *subtype, rpmte te); + +#endif diff --git a/python/rpmts-py.c b/python/rpmts-py.c new file mode 100644 index 0000000..1e8a09a --- /dev/null +++ b/python/rpmts-py.c @@ -0,0 +1,904 @@ +#include "rpmsystem-py.h" + +#include /* rpmReadPackageFile, headerCheck */ +#include +#include +#include +#include + +#include "header-py.h" +#include "rpmds-py.h" /* XXX for rpmdsNew */ +#include "rpmfd-py.h" +#include "rpmkeyring-py.h" +#include "rpmfi-py.h" /* XXX for rpmfiNew */ +#include "rpmmi-py.h" +#include "rpmii-py.h" +#include "rpmps-py.h" +#include "rpmte-py.h" + +#include "rpmts-py.h" + +#include "debug.h" + +/** \ingroup python + * \name Class: Rpmts + * \class Rpmts + * \brief A python rpm.ts object represents an RPM transaction set. + * + * The transaction set is the workhorse of RPM. It performs the + * installation and upgrade of packages. The rpm.ts object is + * instantiated by the TransactionSet function in the rpm module. + * + * The TransactionSet function takes two optional arguments. The first + * argument is the root path. The second is the verify signature disable flags, + * a set of the following bits: + * + * - rpm.RPMVSF_NOHDRCHK if set, don't check rpmdb headers + * - rpm.RPMVSF_NEEDPAYLOAD if not set, check header+payload (if possible) + * - rpm.RPMVSF_NOSHA1HEADER if set, don't check header SHA1 digest + * - rpm.RPMVSF_NODSAHEADER if set, don't check header DSA signature + * - rpm.RPMVSF_NOMD5 if set, don't check header+payload MD5 digest + * - rpm.RPMVSF_NODSA if set, don't check header+payload DSA signature + * - rpm.RPMVSF_NORSA if set, don't check header+payload RSA signature + * + * For convenience, there are the following masks: + * - rpm._RPMVSF_NODIGESTS if set, don't check digest(s). + * - rpm._RPMVSF_NOSIGNATURES if set, don't check signature(s). + * + * A rpm.ts object has the following methods: + * + * - addInstall(hdr,data,mode) Add an install element to a transaction set. + * @param hdr the header to be added + * @param data user data that will be passed to the transaction callback + * during transaction execution + * @param mode optional argument that specifies if this package should + * be installed ('i'), upgraded ('u'). + * + * - addErase(name) Add an erase element to a transaction set. + * @param name the package name to be erased + * + * - check() Perform a dependency check on the transaction set. After + * headers have been added to a transaction set, a dependency + * check can be performed to make sure that all package + * dependencies are satisfied. + * @return None If there are no unresolved dependencies + * Otherwise a list of complex tuples is returned, one tuple per + * unresolved dependency, with + * The format of the dependency tuple is: + * ((packageName, packageVersion, packageRelease), + * (reqName, reqVersion), + * needsFlags, + * suggestedPackage, + * sense) + * packageName, packageVersion, packageRelease are the name, + * version, and release of the package that has the unresolved + * dependency or conflict. + * The reqName and reqVersion are the name and version of the + * requirement or conflict. + * The needsFlags is a bitfield that describes the versioned + * nature of a requirement or conflict. The constants + * rpm.RPMSENSE_LESS, rpm.RPMSENSE_GREATER, and + * rpm.RPMSENSE_EQUAL can be logical ANDed with the needsFlags + * to get versioned dependency information. + * suggestedPackage is a tuple if the dependency check was aware + * of a package that solves this dependency problem when the + * dependency check was run. Packages that are added to the + * transaction set as "available" are examined during the + * dependency check as possible dependency solvers. The tuple + * contains two values, (header, suggestedName). These are set to + * the header of the suggested package and its name, respectively. + * If there is no known package to solve the dependency problem, + * suggestedPackage is None. + * The constants rpm.RPMDEP_SENSE_CONFLICTS and + * rpm.RPMDEP_SENSE_REQUIRES are set to show a dependency as a + * requirement or a conflict. + * + * - ts.order() Do a topological sort of added element relations. + * @return None + * + * - ts.setFlags(transFlags) Set transaction set flags. + * @param transFlags - bit(s) to controll transaction operations. The + * following values can be logically OR'ed together: + * - rpm.RPMTRANS_FLAG_TEST - test mode, do not modify the RPM + * database, change any files, or run any package scripts + * - rpm.RPMTRANS_FLAG_BUILD_PROBS - only build a list of + * problems encountered when attempting to run this transaction + * set + * - rpm.RPMTRANS_FLAG_NOSCRIPTS - do not execute package scripts + * - rpm.RPMTRANS_FLAG_JUSTDB - only make changes to the rpm + * database, do not modify files. + * - rpm.RPMTRANS_FLAG_NOTRIGGERS - do not run trigger scripts + * - rpm.RPMTRANS_FLAG_NODOCS - do not install files marked as %doc + * - rpm.RPMTRANS_FLAG_ALLFILES - create all files, even if a + * file is marked %config(missingok) and an upgrade is + * being performed. + * - rpm.RPMTRANS_FLAG_KEEPOBSOLETE - do not remove obsoleted + * packages. + * @return previous transFlags + * + * - ts.setProbFilter(ignoreSet) Set transaction set problem filter. + * @param problemSetFilter - control bit(s) to ignore classes of problems, + * a logical or of one or more of the following bit(s): + * - rpm.RPMPROB_FILTER_IGNOREOS - + * - rpm.RPMPROB_FILTER_IGNOREARCH - + * - rpm.RPMPROB_FILTER_REPLACEPKG - + * - rpm.RPMPROB_FILTER_FORCERELOCATE - + * - rpm.RPMPROB_FILTER_REPLACENEWFILES - + * - rpm.RPMPROB_FILTER_REPLACEOLDFILES - + * - rpm.RPMPROB_FILTER_OLDPACKAGE - + * - rpm.RPMPROB_FILTER_DISKSPACE - + * @return previous ignoreSet + * + * - ts.run(callback,data) Attempt to execute a transaction set. + * After the transaction set has been populated with install/upgrade or + * erase actions, the transaction set can be executed by invoking + * the ts.run() method. + */ + +struct rpmtsObject_s { + PyObject_HEAD + PyObject *md_dict; /*!< to look like PyModuleObject */ + rpmfdObject *scriptFd; + PyObject *keyList; + rpmts ts; + rpmtsi tsi; +}; + +struct rpmtsCallbackType_s { + PyObject * cb; + PyObject * data; + rpmtsObject * tso; + PyThreadState *_save; +}; + +RPM_GNUC_NORETURN +static void die(PyObject *cb) +{ + char *pyfn = NULL; + PyObject *r; + + if (PyErr_Occurred()) { + PyErr_Print(); + } + if ((r = PyObject_Repr(cb)) != NULL) { + pyfn = PyBytes_AsString(r); + } + fprintf(stderr, _("error: python callback %s failed, aborting!\n"), + pyfn ? pyfn : "???"); + rpmdbCheckTerminate(1); + exit(EXIT_FAILURE); +} + +static PyObject * +rpmts_AddInstall(rpmtsObject * s, PyObject * args) +{ + Header h = NULL; + PyObject * key; + int how = 0; + int rc; + + if (!PyArg_ParseTuple(args, "O&Oi:AddInstall", + hdrFromPyObject, &h, &key, &how)) + return NULL; + + rc = rpmtsAddInstallElement(s->ts, h, key, how, NULL); + if (key && rc == 0) { + PyList_Append(s->keyList, key); + } + return PyBool_FromLong((rc == 0)); +} + +static PyObject * +rpmts_AddErase(rpmtsObject * s, PyObject * args) +{ + Header h; + + if (!PyArg_ParseTuple(args, "O&:AddErase", hdrFromPyObject, &h)) + return NULL; + + return PyBool_FromLong(rpmtsAddEraseElement(s->ts, h, -1) == 0); +} + +static int +rpmts_SolveCallback(rpmts ts, rpmds ds, const void * data) +{ + struct rpmtsCallbackType_s * cbInfo = (struct rpmtsCallbackType_s *) data; + PyObject * args, * result; + int res = 1; + + if (cbInfo->tso == NULL) return res; + if (cbInfo->cb == Py_None) return res; + + PyEval_RestoreThread(cbInfo->_save); + + args = Py_BuildValue("(Oissi)", cbInfo->tso, + rpmdsTagN(ds), rpmdsN(ds), rpmdsEVR(ds), rpmdsFlags(ds)); + result = PyEval_CallObject(cbInfo->cb, args); + Py_DECREF(args); + + if (!result) { + die(cbInfo->cb); + } else { + if (PyInt_Check(result)) + res = PyInt_AsLong(result); + Py_DECREF(result); + } + + cbInfo->_save = PyEval_SaveThread(); + + return res; +} + +static PyObject * +rpmts_Check(rpmtsObject * s, PyObject * args, PyObject * kwds) +{ + struct rpmtsCallbackType_s cbInfo; + int rc; + char * kwlist[] = {"callback", NULL}; + + memset(&cbInfo, 0, sizeof(cbInfo)); + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:Check", kwlist, + &cbInfo.cb)) + return NULL; + + if (cbInfo.cb != NULL) { + if (!PyCallable_Check(cbInfo.cb)) { + PyErr_SetString(PyExc_TypeError, "expected a callable"); + return NULL; + } + rc = rpmtsSetSolveCallback(s->ts, rpmts_SolveCallback, (void *)&cbInfo); + } + + cbInfo.tso = s; + cbInfo._save = PyEval_SaveThread(); + + rc = rpmtsCheck(s->ts); + + PyEval_RestoreThread(cbInfo._save); + + return PyBool_FromLong((rc == 0)); +} + +static PyObject * +rpmts_Order(rpmtsObject * s) +{ + int rc; + + Py_BEGIN_ALLOW_THREADS + rc = rpmtsOrder(s->ts); + Py_END_ALLOW_THREADS + + return Py_BuildValue("i", rc); +} + +static PyObject * +rpmts_Clean(rpmtsObject * s) +{ + rpmtsClean(s->ts); + + Py_RETURN_NONE; +} + +static PyObject * +rpmts_OpenDB(rpmtsObject * s) +{ + int dbmode; + + dbmode = rpmtsGetDBMode(s->ts); + if (dbmode == -1) + dbmode = O_RDONLY; + + return Py_BuildValue("i", rpmtsOpenDB(s->ts, dbmode)); +} + +static PyObject * +rpmts_CloseDB(rpmtsObject * s) +{ + int rc; + + rc = rpmtsCloseDB(s->ts); + rpmtsSetDBMode(s->ts, -1); /* XXX disable lazy opens */ + + return Py_BuildValue("i", rc); +} + +static PyObject * +rpmts_InitDB(rpmtsObject * s) +{ + int rc; + + rc = rpmtsInitDB(s->ts, O_RDONLY); + if (rc == 0) + rc = rpmtsCloseDB(s->ts); + + return Py_BuildValue("i", rc); +} + +static PyObject * +rpmts_RebuildDB(rpmtsObject * s) +{ + int rc; + + Py_BEGIN_ALLOW_THREADS + rc = rpmtsRebuildDB(s->ts); + Py_END_ALLOW_THREADS + + return Py_BuildValue("i", rc); +} + +static PyObject * +rpmts_VerifyDB(rpmtsObject * s) +{ + int rc; + + Py_BEGIN_ALLOW_THREADS + rc = rpmtsVerifyDB(s->ts); + Py_END_ALLOW_THREADS + + return Py_BuildValue("i", rc); +} + +static PyObject * +rpmts_HdrFromFdno(rpmtsObject * s, PyObject *arg) +{ + PyObject *ho = NULL; + rpmfdObject *fdo = NULL; + Header h; + rpmRC rpmrc; + + if (!PyArg_Parse(arg, "O&:HdrFromFdno", rpmfdFromPyObject, &fdo)) + return NULL; + + Py_BEGIN_ALLOW_THREADS; + rpmrc = rpmReadPackageFile(s->ts, rpmfdGetFd(fdo), "rpmts_HdrFromFdno", &h); + Py_END_ALLOW_THREADS; + Py_XDECREF(fdo); + + if (rpmrc == RPMRC_OK) { + ho = hdr_Wrap(&hdr_Type, h); + h = headerFree(h); /* ref held by python object */ + } else { + Py_INCREF(Py_None); + ho = Py_None; + } + return Py_BuildValue("(iN)", rpmrc, ho); +} + +static PyObject * +rpmts_HdrCheck(rpmtsObject * s, PyObject *obj) +{ + PyObject * blob; + char * msg = NULL; + const void * uh; + int uc; + rpmRC rpmrc; + + if (!PyArg_Parse(obj, "S:HdrCheck", &blob)) + return NULL; + + uh = PyBytes_AsString(blob); + uc = PyBytes_Size(blob); + + Py_BEGIN_ALLOW_THREADS; + rpmrc = headerCheck(s->ts, uh, uc, &msg); + Py_END_ALLOW_THREADS; + + return Py_BuildValue("(is)", rpmrc, msg); +} + +static PyObject * +rpmts_PgpPrtPkts(rpmtsObject * s, PyObject * args, PyObject * kwds) +{ + PyObject * blob; + unsigned char * pkt; + unsigned int pktlen; + int rc; + char * kwlist[] = {"octets", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "S:PgpPrtPkts", kwlist, &blob)) + return NULL; + + pkt = (unsigned char *)PyBytes_AsString(blob); + pktlen = PyBytes_Size(blob); + + rc = pgpPrtPkts(pkt, pktlen, NULL, 1); + + return Py_BuildValue("i", rc); +} + +static PyObject * +rpmts_PgpImportPubkey(rpmtsObject * s, PyObject * args, PyObject * kwds) +{ + PyObject * blob; + unsigned char * pkt; + unsigned int pktlen; + int rc; + char * kwlist[] = {"pubkey", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "S:PgpImportPubkey", + kwlist, &blob)) + return NULL; + + pkt = (unsigned char *)PyBytes_AsString(blob); + pktlen = PyBytes_Size(blob); + + rc = rpmtsImportPubkey(s->ts, pkt, pktlen); + + return Py_BuildValue("i", rc); +} + +static PyObject *rpmts_setKeyring(rpmtsObject *s, PyObject *arg) +{ + rpmKeyring keyring = NULL; + if (arg == Py_None || rpmKeyringFromPyObject(arg, &keyring)) { + return PyBool_FromLong(rpmtsSetKeyring(s->ts, keyring) == 0); + } else { + PyErr_SetString(PyExc_TypeError, "rpm.keyring or None expected"); + return NULL; + } +} + +static PyObject *rpmts_getKeyring(rpmtsObject *s, PyObject *args, PyObject *kwds) +{ + rpmKeyring keyring = NULL; + int autoload = 1; + char * kwlist[] = { "autoload", NULL }; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:getKeyring", + kwlist, &autoload)) + return NULL; + + keyring = rpmtsGetKeyring(s->ts, autoload); + if (keyring) { + return rpmKeyring_Wrap(&rpmKeyring_Type, keyring); + } else { + Py_RETURN_NONE; + } +} + +static void * +rpmtsCallback(const void * hd, const rpmCallbackType what, + const rpm_loff_t amount, const rpm_loff_t total, + const void * pkgKey, rpmCallbackData data) +{ + Header h = (Header) hd; + struct rpmtsCallbackType_s * cbInfo = data; + PyObject * pkgObj = (PyObject *) pkgKey; + PyObject * args, * result; + static FD_t fd; + + if (cbInfo->cb == Py_None) return NULL; + + /* Synthesize a python object for callback (if necessary). */ + if (pkgObj == NULL) { + if (h) { + pkgObj = Py_BuildValue("s", headerGetString(h, RPMTAG_NAME)); + } else { + pkgObj = Py_None; + Py_INCREF(pkgObj); + } + } else + Py_INCREF(pkgObj); + + PyEval_RestoreThread(cbInfo->_save); + + args = Py_BuildValue("(iLLOO)", what, amount, total, pkgObj, cbInfo->data); + result = PyEval_CallObject(cbInfo->cb, args); + Py_DECREF(args); + Py_DECREF(pkgObj); + + if (!result) { + die(cbInfo->cb); + } + + if (what == RPMCALLBACK_INST_OPEN_FILE) { + int fdno; + + if (!PyArg_Parse(result, "i", &fdno)) { + die(cbInfo->cb); + } + Py_DECREF(result); + cbInfo->_save = PyEval_SaveThread(); + + fd = fdDup(fdno); + fcntl(Fileno(fd), F_SETFD, FD_CLOEXEC); + + return fd; + } else + if (what == RPMCALLBACK_INST_CLOSE_FILE) { + Fclose (fd); + } + + Py_DECREF(result); + cbInfo->_save = PyEval_SaveThread(); + + return NULL; +} + +static PyObject * +rpmts_Problems(rpmtsObject * s) +{ + rpmps ps = rpmtsProblems(s->ts); + PyObject *problems = rpmps_AsList(ps); + rpmpsFree(ps); + return problems; +} + +static PyObject * +rpmts_Run(rpmtsObject * s, PyObject * args, PyObject * kwds) +{ + int rc; + struct rpmtsCallbackType_s cbInfo; + rpmprobFilterFlags ignoreSet; + char * kwlist[] = {"callback", "data", "ignoreSet", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOi:Run", kwlist, + &cbInfo.cb, &cbInfo.data, &ignoreSet)) + return NULL; + + cbInfo.tso = s; + cbInfo._save = PyEval_SaveThread(); + + if (cbInfo.cb != NULL) { + if (!PyCallable_Check(cbInfo.cb)) { + PyErr_SetString(PyExc_TypeError, "expected a callable"); + return NULL; + } + (void) rpmtsSetNotifyCallback(s->ts, rpmtsCallback, (void *) &cbInfo); + } + + rc = rpmtsRun(s->ts, NULL, ignoreSet); + + if (cbInfo.cb) + (void) rpmtsSetNotifyCallback(s->ts, NULL, NULL); + + PyEval_RestoreThread(cbInfo._save); + + return Py_BuildValue("i", rc); +} + +static PyObject * +rpmts_iternext(rpmtsObject * s) +{ + PyObject * result = NULL; + rpmte te; + + /* Reset iterator on 1st entry. */ + if (s->tsi == NULL) { + s->tsi = rpmtsiInit(s->ts); + if (s->tsi == NULL) + return NULL; + } + + te = rpmtsiNext(s->tsi, 0); + if (te != NULL) { + result = rpmte_Wrap(&rpmte_Type, te); + } else { + s->tsi = rpmtsiFree(s->tsi); + } + + return result; +} + +static PyObject * +rpmts_Match(rpmtsObject * s, PyObject * args, PyObject * kwds) +{ + PyObject *Key = NULL; + PyObject *str = NULL; + PyObject *mio = NULL; + char *key = NULL; +/* XXX lkey *must* be a 32 bit integer, int "works" on all known platforms. */ + int lkey = 0; + int len = 0; + rpmDbiTagVal tag = RPMDBI_PACKAGES; + char * kwlist[] = {"tagNumber", "key", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O&O:Match", kwlist, + tagNumFromPyObject, &tag, &Key)) + return NULL; + + if (Key) { + if (PyInt_Check(Key)) { + lkey = PyInt_AsLong(Key); + key = (char *)&lkey; + len = sizeof(lkey); + } else if (utf8FromPyObject(Key, &str)) { + key = PyBytes_AsString(str); + len = PyBytes_Size(str); + } else { + PyErr_SetString(PyExc_TypeError, "unknown key type"); + return NULL; + } + /* One of the conversions above failed, exception is set already */ + if (PyErr_Occurred()) goto exit; + } + + /* XXX If not already opened, open the database O_RDONLY now. */ + /* XXX FIXME: lazy default rdonly open also done by rpmtsInitIterator(). */ + if (rpmtsGetRdb(s->ts) == NULL) { + int rc = rpmtsOpenDB(s->ts, O_RDONLY); + if (rc || rpmtsGetRdb(s->ts) == NULL) { + PyErr_SetString(pyrpmError, "rpmdb open failed"); + goto exit; + } + } + + mio = rpmmi_Wrap(&rpmmi_Type, rpmtsInitIterator(s->ts, tag, key, len), (PyObject*)s); + +exit: + Py_XDECREF(str); + return mio; +} +static PyObject * +rpmts_index(rpmtsObject * s, PyObject * args, PyObject * kwds) +{ + rpmDbiTagVal tag; + PyObject *mio = NULL; + char * kwlist[] = {"tag", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O&:Keys", kwlist, + tagNumFromPyObject, &tag)) + return NULL; + + /* XXX If not already opened, open the database O_RDONLY now. */ + if (rpmtsGetRdb(s->ts) == NULL) { + int rc = rpmtsOpenDB(s->ts, O_RDONLY); + if (rc || rpmtsGetRdb(s->ts) == NULL) { + PyErr_SetString(pyrpmError, "rpmdb open failed"); + goto exit; + } + } + + rpmdbIndexIterator ii = rpmdbIndexIteratorInit(rpmtsGetRdb(s->ts), tag); + if (ii == NULL) { + PyErr_SetString(PyExc_KeyError, "No index for this tag"); + return NULL; + } + mio = rpmii_Wrap(&rpmii_Type, ii, (PyObject*)s); + +exit: + return mio; +} + +static struct PyMethodDef rpmts_methods[] = { + {"addInstall", (PyCFunction) rpmts_AddInstall, METH_VARARGS, + NULL }, + {"addErase", (PyCFunction) rpmts_AddErase, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"check", (PyCFunction) rpmts_Check, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"order", (PyCFunction) rpmts_Order, METH_NOARGS, + NULL }, + {"problems", (PyCFunction) rpmts_Problems, METH_NOARGS, +"ts.problems() -> ps\n\ +- Return current problem set.\n" }, + {"run", (PyCFunction) rpmts_Run, METH_VARARGS|METH_KEYWORDS, +"ts.run(callback, data) -> (problems)\n\ +- Run a transaction set, returning list of problems found.\n\ + Note: The callback may not be None.\n" }, + {"clean", (PyCFunction) rpmts_Clean, METH_NOARGS, + NULL }, + {"openDB", (PyCFunction) rpmts_OpenDB, METH_NOARGS, +"ts.openDB() -> None\n\ +- Open the default transaction rpmdb.\n\ + Note: The transaction rpmdb is lazily opened, so ts.openDB() is seldom needed.\n" }, + {"closeDB", (PyCFunction) rpmts_CloseDB, METH_NOARGS, +"ts.closeDB() -> None\n\ +- Close the default transaction rpmdb.\n\ + Note: ts.closeDB() disables lazy opens, and should hardly ever be used.\n" }, + {"initDB", (PyCFunction) rpmts_InitDB, METH_NOARGS, +"ts.initDB() -> None\n\ +- Initialize the default transaction rpmdb.\n\ + Note: ts.initDB() is seldom needed anymore.\n" }, + {"rebuildDB", (PyCFunction) rpmts_RebuildDB, METH_NOARGS, +"ts.rebuildDB() -> None\n\ +- Rebuild the default transaction rpmdb.\n" }, + {"verifyDB", (PyCFunction) rpmts_VerifyDB, METH_NOARGS, +"ts.verifyDB() -> None\n\ +- Verify the default transaction rpmdb.\n" }, + {"hdrFromFdno",(PyCFunction) rpmts_HdrFromFdno,METH_O, +"ts.hdrFromFdno(fdno) -> hdr\n\ +- Read a package header from a file descriptor.\n" }, + {"hdrCheck", (PyCFunction) rpmts_HdrCheck, METH_O, + NULL }, + {"pgpPrtPkts", (PyCFunction) rpmts_PgpPrtPkts, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"pgpImportPubkey", (PyCFunction) rpmts_PgpImportPubkey, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"getKeyring", (PyCFunction) rpmts_getKeyring, METH_VARARGS|METH_KEYWORDS, + NULL }, + {"setKeyring", (PyCFunction) rpmts_setKeyring, METH_O, + NULL }, + {"dbMatch", (PyCFunction) rpmts_Match, METH_VARARGS|METH_KEYWORDS, +"ts.dbMatch([TagN, [key]]) -> mi\n\ +- Create a match iterator for the default transaction rpmdb.\n" }, + {"dbIndex", (PyCFunction) rpmts_index, METH_VARARGS|METH_KEYWORDS, +"ts.dbIndex(TagN) -> ii\n\ +- Create a key iterator for the default transaction rpmdb.\n" }, + {NULL, NULL} /* sentinel */ +}; + +static void rpmts_dealloc(rpmtsObject * s) +{ + + s->ts = rpmtsFree(s->ts); + Py_XDECREF(s->scriptFd); + Py_XDECREF(s->keyList); + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static PyObject * rpmts_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds) +{ + rpmtsObject * s = (rpmtsObject *)subtype->tp_alloc(subtype, 0); + if (s == NULL) return NULL; + + s->ts = rpmtsCreate(); + s->scriptFd = NULL; + s->tsi = NULL; + s->keyList = PyList_New(0); + return (PyObject *) s; +} + +static int rpmts_init(rpmtsObject *s, PyObject *args, PyObject *kwds) +{ + char * rootDir = "/"; + rpmVSFlags vsflags = rpmExpandNumeric("%{?__vsflags}"); + char * kwlist[] = {"rootdir", "vsflags", 0}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|si:rpmts_new", kwlist, + &rootDir, &vsflags)) + return -1; + + (void) rpmtsSetRootDir(s->ts, rootDir); + /* XXX: make this use common code with rpmts_SetVSFlags() to check the + * python objects */ + (void) rpmtsSetVSFlags(s->ts, vsflags); + + return 0; +} + +static PyObject *rpmts_get_tid(rpmtsObject *s, void *closure) +{ + return Py_BuildValue("i", rpmtsGetTid(s->ts)); +} + +static PyObject *rpmts_get_rootDir(rpmtsObject *s, void *closure) +{ + return Py_BuildValue("s", rpmtsRootDir(s->ts)); +} + +static int rpmts_set_scriptFd(rpmtsObject *s, PyObject *value, void *closure) +{ + rpmfdObject *fdo = NULL; + int rc = 0; + if (PyArg_Parse(value, "O&", rpmfdFromPyObject, &fdo)) { + Py_XDECREF(s->scriptFd); + s->scriptFd = fdo; + rpmtsSetScriptFd(s->ts, rpmfdGetFd(s->scriptFd)); + } else if (value == Py_None) { + Py_XDECREF(s->scriptFd); + s->scriptFd = NULL; + rpmtsSetScriptFd(s->ts, NULL); + } else { + rc = -1; + } + return rc; +} + +static PyObject *rpmts_get_color(rpmtsObject *s, void *closure) +{ + return Py_BuildValue("i", rpmtsColor(s->ts)); +} + +static PyObject *rpmts_get_prefcolor(rpmtsObject *s, void *closure) +{ + return Py_BuildValue("i", rpmtsPrefColor(s->ts)); +} + +static int rpmts_set_color(rpmtsObject *s, PyObject *value, void *closure) +{ + rpm_color_t color; + if (!PyArg_Parse(value, "i", &color)) return -1; + + /* TODO: validate the bits */ + rpmtsSetColor(s->ts, color); + return 0; +} + +static int rpmts_set_prefcolor(rpmtsObject *s, PyObject *value, void *closure) +{ + rpm_color_t color; + if (!PyArg_Parse(value, "i", &color)) return -1; + + /* TODO: validate the bits */ + rpmtsSetPrefColor(s->ts, color); + return 0; +} + +static int rpmts_set_flags(rpmtsObject *s, PyObject *value, void *closure) +{ + rpmtransFlags flags; + if (!PyArg_Parse(value, "i", &flags)) return -1; + + /* TODO: validate the bits */ + rpmtsSetFlags(s->ts, flags); + return 0; +} + +static int rpmts_set_vsflags(rpmtsObject *s, PyObject *value, void *closure) +{ + rpmVSFlags flags; + if (!PyArg_Parse(value, "i", &flags)) return -1; + + /* TODO: validate the bits */ + rpmtsSetVSFlags(s->ts, flags); + return 0; +} + +static PyObject *rpmts_get_flags(rpmtsObject *s, void *closure) +{ + return Py_BuildValue("i", rpmtsFlags(s->ts)); +} + +static PyObject *rpmts_get_vsflags(rpmtsObject *s, void *closure) +{ + return Py_BuildValue("i", rpmtsVSFlags(s->ts)); +} + +static char rpmts_doc[] = +""; + +static PyGetSetDef rpmts_getseters[] = { + /* only provide a setter until we have rpmfd wrappings */ + {"scriptFd", NULL, (setter)rpmts_set_scriptFd, NULL }, + {"tid", (getter)rpmts_get_tid, NULL, NULL }, + {"rootDir", (getter)rpmts_get_rootDir, NULL, NULL }, + {"_color", (getter)rpmts_get_color, (setter)rpmts_set_color, NULL}, + {"_prefcolor", (getter)rpmts_get_prefcolor, (setter)rpmts_set_prefcolor, NULL}, + {"_flags", (getter)rpmts_get_flags, (setter)rpmts_set_flags, NULL}, + {"_vsflags", (getter)rpmts_get_vsflags, (setter)rpmts_set_vsflags, NULL}, + { NULL } +}; + +PyTypeObject rpmts_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.ts", /* tp_name */ + sizeof(rpmtsObject), /* tp_size */ + 0, /* tp_itemsize */ + (destructor) rpmts_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + rpmts_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc) rpmts_iternext, /* tp_iternext */ + rpmts_methods, /* tp_methods */ + 0, /* tp_members */ + rpmts_getseters, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc) rpmts_init, /* tp_init */ + 0, /* tp_alloc */ + (newfunc) rpmts_new, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; diff --git a/python/rpmts-py.h b/python/rpmts-py.h new file mode 100644 index 0000000..e4fabfe --- /dev/null +++ b/python/rpmts-py.h @@ -0,0 +1,18 @@ +#ifndef H_RPMTS_PY +#define H_RPMTS_PY + +#include + +typedef struct rpmtsObject_s rpmtsObject; + +extern PyTypeObject rpmts_Type; + +#define rpmtsObject_Check(v) ((v)->ob_type == &rpmts_Type) + +/* XXX These names/constants have been removed from the rpmlib API. */ +enum { + RPMDEP_SENSE_REQUIRES, /*!< requirement not satisfied. */ + RPMDEP_SENSE_CONFLICTS /*!< conflict was found. */ +}; + +#endif diff --git a/python/spec-py.c b/python/spec-py.c new file mode 100644 index 0000000..a829539 --- /dev/null +++ b/python/spec-py.c @@ -0,0 +1,304 @@ +#include "rpmsystem-py.h" + +#include "header-py.h" +#include "spec-py.h" + +/** \ingroup python + * \name Class: Rpmspec + * \class Rpmspec + * \brief A python rpm.spec object represents an RPM spec file set. + * + * The spec file is at the heart of RPM's packaging building process. Similar + * in concept to a makefile, it contains information required by RPM to build + * the package, as well as instructions telling RPM how to build it. The spec + * file also dictates exactly what files are a part of the package, and where + * they should be installed. + * + * The rpm.spec object represents a parsed specfile to aid extraction of data. + * + * For example + * \code + * import rpm + * rpm.addMacro("_topdir","/path/to/topdir") + * s=rpm.spec("foo.spec") + * print s.prep() + * \endcode + * + * Macros set using add macro will be used allowing testing of conditional builds + * + */ + +/* Header objects are in another module, some hoop jumping required... */ +static PyObject *makeHeader(Header h) +{ + PyObject *rpmmod = PyImport_ImportModuleNoBlock("rpm"); + if (rpmmod == NULL) return NULL; + + PyObject *ptr = PyCObject_FromVoidPtr(h, NULL); + PyObject *hdr = PyObject_CallMethod(rpmmod, "hdr", "(O)", ptr); + Py_XDECREF(ptr); + Py_XDECREF(rpmmod); + return hdr; +} + +struct specPkgObject_s { + PyObject_HEAD + /*type specific fields */ + rpmSpecPkg pkg; +}; + +static char specPkg_doc[] = +""; + +static PyObject * specpkg_get_header(specPkgObject *s, void *closure) +{ + return makeHeader(rpmSpecPkgHeader(s->pkg)); +} + +static PyGetSetDef specpkg_getseters[] = { + { "header", (getter) specpkg_get_header, NULL, NULL }, + { NULL } /* sentinel */ +}; + +PyTypeObject specPkg_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.specpkg", /* tp_name */ + sizeof(specPkgObject), /* tp_size */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ + specPkg_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + specpkg_getseters, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +struct specObject_s { + PyObject_HEAD + /*type specific fields */ + rpmSpec spec; +}; + +static void +spec_dealloc(specObject * s) +{ + if (s->spec) { + s->spec=rpmSpecFree(s->spec); + } + Py_TYPE(s)->tp_free((PyObject *)s); +} + +static PyObject * getSection(rpmSpec spec, int section) +{ + const char *sect = rpmSpecGetSection(spec, section); + if (sect) { + return Py_BuildValue("s", sect); + } + Py_RETURN_NONE; +} + +static PyObject * +spec_get_prep(specObject * s, void *closure) +{ + return getSection(s->spec, RPMBUILD_PREP); +} + +static PyObject * +spec_get_build(specObject * s, void *closure) +{ + return getSection(s->spec, RPMBUILD_BUILD); +} + +static PyObject * spec_get_install(specObject * s, void *closure) +{ + return getSection(s->spec, RPMBUILD_INSTALL); +} + +static PyObject * spec_get_clean(specObject * s, void *closure) +{ + return getSection(s->spec, RPMBUILD_CLEAN); +} + +static PyObject * spec_get_sources(specObject *s, void *closure) +{ + PyObject *sourceList = PyList_New(0); + rpmSpecSrc source; + + rpmSpecSrcIter iter = rpmSpecSrcIterInit(s->spec); + while ((source = rpmSpecSrcIterNext(iter)) != NULL) { + PyObject *srcUrl = Py_BuildValue("(sii)", + rpmSpecSrcFilename(source, 1), + rpmSpecSrcNum(source), + rpmSpecSrcFlags(source)); + PyList_Append(sourceList, srcUrl); + Py_DECREF(srcUrl); + } + rpmSpecSrcIterFree(iter); + + return sourceList; + +} + +static PyObject * spec_get_packages(specObject *s, void *closure) +{ + rpmSpecPkg pkg; + PyObject *pkgList = PyList_New(0); + rpmSpecPkgIter iter = rpmSpecPkgIterInit(s->spec); + + while ((pkg = rpmSpecPkgIterNext(iter)) != NULL) { + PyObject *po = specPkg_Wrap(&specPkg_Type, pkg); + PyList_Append(pkgList, po); + Py_DECREF(po); + } + rpmSpecPkgIterFree(iter); + return pkgList; +} + +static PyObject * spec_get_source_header(specObject *s, void *closure) +{ + return makeHeader(rpmSpecSourceHeader(s->spec)); +} + +static char spec_doc[] = "RPM Spec file object"; + +static PyGetSetDef spec_getseters[] = { + {"sources", (getter) spec_get_sources, NULL, NULL }, + {"prep", (getter) spec_get_prep, NULL, NULL }, + {"build", (getter) spec_get_build, NULL, NULL }, + {"install", (getter) spec_get_install, NULL, NULL }, + {"clean", (getter) spec_get_clean, NULL, NULL }, + {"packages", (getter) spec_get_packages, NULL, NULL }, + {"sourceHeader", (getter) spec_get_source_header, NULL, NULL }, + {NULL} /* Sentinel */ +}; + +static PyObject *spec_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds) +{ + char * kwlist[] = {"specfile", "flags", NULL}; + const char * specfile; + rpmSpec spec = NULL; + /* XXX This is a dumb default but anything else breaks compatibility... */ + rpmSpecFlags flags = (RPMSPEC_ANYARCH|RPMSPEC_FORCE); + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i:spec_new", kwlist, + &specfile, &flags)) + return NULL; + + spec = rpmSpecParse(specfile, flags, NULL); + if (spec == NULL) { + PyErr_SetString(PyExc_ValueError, "can't parse specfile\n"); + return NULL; + } + + return spec_Wrap(subtype, spec); +} + +static PyObject * spec_doBuild(specObject *self, PyObject *args, PyObject *kwds) +{ + char * kwlist[] = { "buildAmount", "pkgFlags", NULL }; + struct rpmBuildArguments_s ba = { 0 }; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "i|i:spec_doBuild", + kwlist, &ba.buildAmount, &ba.pkgFlags)) + return NULL; + + return PyBool_FromLong(rpmSpecBuild(self->spec, &ba) == RPMRC_OK); +} + +static struct PyMethodDef spec_methods[] = { + { "_doBuild", (PyCFunction)spec_doBuild, METH_VARARGS|METH_KEYWORDS, NULL }, + { NULL, NULL } +}; + +PyTypeObject spec_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "rpm.spec", /*tp_name*/ + sizeof(specObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor) spec_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + spec_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + spec_methods, /* tp_methods */ + 0, /* tp_members */ + spec_getseters, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + spec_new, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ +}; + +PyObject * +spec_Wrap(PyTypeObject *subtype, rpmSpec spec) +{ + specObject * s = (specObject *)subtype->tp_alloc(subtype, 0); + if (s == NULL) return NULL; + + s->spec = spec; + return (PyObject *) s; +} + +PyObject * specPkg_Wrap(PyTypeObject *subtype, rpmSpecPkg pkg) +{ + specPkgObject * s = (specPkgObject *)subtype->tp_alloc(subtype, 0); + if (s == NULL) return NULL; + + s->pkg = pkg; + return (PyObject *) s; +} + diff --git a/python/spec-py.h b/python/spec-py.h new file mode 100644 index 0000000..558fbf2 --- /dev/null +++ b/python/spec-py.h @@ -0,0 +1,18 @@ +#ifndef RPMPYTHON_SPEC +#define RPMPYTHON_SPEC + +#include + +typedef struct specPkgObject_s specPkgObject; +typedef struct specObject_s specObject; + +extern PyTypeObject spec_Type; +extern PyTypeObject specPkg_Type; + +#define specObject_Check(v) ((v)->ob_type == &spec_Type) +#define specPkgObject_Check(v) ((v)->ob_type == &specPkg_Type) + +PyObject * spec_Wrap(PyTypeObject *subtype, rpmSpec spec); +PyObject * specPkg_Wrap(PyTypeObject *subtype, rpmSpecPkg pkg); + +#endif /* RPMPYTHON_SPEC */ diff --git a/rpm.am b/rpm.am new file mode 100644 index 0000000..d3bad87 --- /dev/null +++ b/rpm.am @@ -0,0 +1,7 @@ +# Internal binaries +## HACK: It probably should be $(libexecdir)/rpm or $(libdir)/rpm +rpmlibexecdir = $(prefix)/lib/rpm + +# Host independent config files +## HACK: it probably should be $(datadir)/rpm +rpmconfigdir = $(prefix)/lib/rpm diff --git a/rpm.pc.in b/rpm.pc.in new file mode 100644 index 0000000..9426920 --- /dev/null +++ b/rpm.pc.in @@ -0,0 +1,15 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +rpmhome=@RPMCONFIGDIR@ + +Name: RPM +Description: RPM Package Manager +Version: @VERSION@ +URL: http://rpm.org +# Requires: +# Conflicts: +Cflags: -I${includedir} +Libs: -L${libdir} -lrpm -lrpmio +Libs.private: -lpopt -lrt -lpthread @WITH_SELINUX_LIB@ @WITH_LZMA_LIB@ @WITH_DB_LIB@ @WITH_BZ2_LIB@ @WITH_ZLIB_LIB@ @WITH_NSS_LIB@ @WITH_LUA_LIB@ diff --git a/rpm2cpio.c b/rpm2cpio.c new file mode 100644 index 0000000..ed3051e --- /dev/null +++ b/rpm2cpio.c @@ -0,0 +1,92 @@ +/* rpmarchive: spit out the main archive portion of a package */ + +#include "system.h" +const char *__progname; + +#include /* rpmReadPackageFile .. */ +#include +#include +#include + +#include + +#include "debug.h" + +int main(int argc, char *argv[]) +{ + FD_t fdi, fdo; + Header h; + char * rpmio_flags = NULL; + int rc; + FD_t gzdi; + + setprogname(argv[0]); /* Retrofit glibc __progname */ + rpmReadConfigFiles(NULL, NULL); + if (argc == 1) + fdi = fdDup(STDIN_FILENO); + else { + if (rstreq(argv[1], "-h") || rstreq(argv[1], "--help")) { + fprintf(stderr, "Usage: rpm2cpio file.rpm\n"); + exit(EXIT_FAILURE); + } + fdi = Fopen(argv[1], "r.ufdio"); + } + + if (Ferror(fdi)) { + fprintf(stderr, "%s: %s: %s\n", argv[0], + (argc == 1 ? "" : argv[1]), Fstrerror(fdi)); + exit(EXIT_FAILURE); + } + fdo = fdDup(STDOUT_FILENO); + + { rpmts ts = rpmtsCreate(); + rpmVSFlags vsflags = 0; + + /* XXX retain the ageless behavior of rpm2cpio */ + vsflags |= _RPMVSF_NODIGESTS; + vsflags |= _RPMVSF_NOSIGNATURES; + vsflags |= RPMVSF_NOHDRCHK; + (void) rpmtsSetVSFlags(ts, vsflags); + + rc = rpmReadPackageFile(ts, fdi, "rpm2cpio", &h); + + ts = rpmtsFree(ts); + } + + switch (rc) { + case RPMRC_OK: + case RPMRC_NOKEY: + case RPMRC_NOTTRUSTED: + break; + case RPMRC_NOTFOUND: + fprintf(stderr, _("argument is not an RPM package\n")); + exit(EXIT_FAILURE); + break; + case RPMRC_FAIL: + default: + fprintf(stderr, _("error reading header from package\n")); + exit(EXIT_FAILURE); + break; + } + + /* Retrieve type of payload compression. */ + { const char *compr = headerGetString(h, RPMTAG_PAYLOADCOMPRESSOR); + rpmio_flags = rstrscat(NULL, "r.", compr ? compr : "gzip", NULL); + } + + gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */ + free(rpmio_flags); + + if (gzdi == NULL) { + fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi)); + exit(EXIT_FAILURE); + } + + rc = ufdCopy(gzdi, fdo); + rc = (rc <= 0) ? EXIT_FAILURE : EXIT_SUCCESS; + Fclose(fdo); + + Fclose(gzdi); /* XXX gzdi == fdi */ + + return rc; +} diff --git a/rpmbuild.c b/rpmbuild.c new file mode 100644 index 0000000..856798a --- /dev/null +++ b/rpmbuild.c @@ -0,0 +1,638 @@ +#include "system.h" +const char *__progname; + +#include +#include +#include + +#include +#include /* RPMSIGTAG, rpmReadPackageFile .. */ +#include +#include +#include +#include +#include +#include +#include "lib/signature.h" +#include "cliutils.h" + +#include "debug.h" + +static struct rpmBuildArguments_s rpmBTArgs; + +#define POPT_NOLANG -1012 +#define POPT_RMSOURCE -1013 +#define POPT_RMBUILD -1014 +#define POPT_BUILDROOT -1015 +#define POPT_TARGETPLATFORM -1016 +#define POPT_NOBUILD -1017 +#define POPT_RMSPEC -1019 +#define POPT_NODIRTOKENS -1020 + +#define POPT_REBUILD 0x4220 +#define POPT_RECOMPILE 0x4320 +#define POPT_BA 0x6261 +#define POPT_BB 0x6262 +#define POPT_BC 0x6263 +#define POPT_BI 0x6269 +#define POPT_BL 0x626c +#define POPT_BP 0x6270 +#define POPT_BS 0x6273 +#define POPT_TA 0x7461 +#define POPT_TB 0x7462 +#define POPT_TC 0x7463 +#define POPT_TI 0x7469 +#define POPT_TL 0x746c +#define POPT_TP 0x7470 +#define POPT_TS 0x7473 + +extern int _fsm_debug; + +static rpmSpecFlags spec_flags = 0; /*!< Bit(s) to control spec parsing. */ +static int noDeps = 0; /*!< from --nodeps */ +static int shortCircuit = 0; /*!< from --short-circuit */ +static char buildMode = 0; /*!< Build mode (one of "btBC") */ +static char buildChar = 0; /*!< Build stage (one of "abcilps ") */ +static ARGV_t build_targets = NULL; /*!< Target platform(s) */ + +static void buildArgCallback( poptContext con, + enum poptCallbackReason reason, + const struct poptOption * opt, const char * arg, + const void * data) +{ + BTA_t rba = &rpmBTArgs; + + switch (opt->val) { + case POPT_REBUILD: + case POPT_RECOMPILE: + case POPT_BA: + case POPT_BB: + case POPT_BC: + case POPT_BI: + case POPT_BL: + case POPT_BP: + case POPT_BS: + case POPT_TA: + case POPT_TB: + case POPT_TC: + case POPT_TI: + case POPT_TL: + case POPT_TP: + case POPT_TS: + if (opt->val == POPT_BS || opt->val == POPT_TS) + noDeps = 1; + if (buildMode == '\0' && buildChar == '\0') { + buildMode = (((unsigned)opt->val) >> 8) & 0xff; + buildChar = (opt->val ) & 0xff; + } + break; + + case POPT_NODIRTOKENS: rba->pkgFlags |= RPMBUILD_PKG_NODIRTOKENS; break; + case POPT_NOBUILD: rba->buildAmount |= RPMBUILD_NOBUILD; break; + case POPT_NOLANG: spec_flags |= RPMSPEC_NOLANG; break; + case POPT_RMSOURCE: rba->buildAmount |= RPMBUILD_RMSOURCE; break; + case POPT_RMSPEC: rba->buildAmount |= RPMBUILD_RMSPEC; break; + case POPT_RMBUILD: rba->buildAmount |= RPMBUILD_RMBUILD; break; + case POPT_BUILDROOT: + if (rba->buildRootOverride) { + rpmlog(RPMLOG_ERR, _("buildroot already specified, ignoring %s\n"), arg); + break; + } + rba->buildRootOverride = xstrdup(arg); + break; + case POPT_TARGETPLATFORM: + argvSplit(&build_targets, arg, ","); + break; + + case RPMCLI_POPT_FORCE: + spec_flags |= RPMSPEC_FORCE; + break; + + } +} + +static struct poptOption rpmBuildPoptTable[] = { + { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE, + buildArgCallback, 0, NULL, NULL }, + + { "bp", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BP, + N_("build through %prep (unpack sources and apply patches) from "), + N_("") }, + { "bc", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BC, + N_("build through %build (%prep, then compile) from "), + N_("") }, + { "bi", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BI, + N_("build through %install (%prep, %build, then install) from "), + N_("") }, + { "bl", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BL, + N_("verify %files section from "), + N_("") }, + { "ba", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BA, + N_("build source and binary packages from "), + N_("") }, + { "bb", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BB, + N_("build binary package only from "), + N_("") }, + { "bs", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_BS, + N_("build source package only from "), + N_("") }, + + { "tp", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TP, + N_("build through %prep (unpack sources and apply patches) from "), + N_("") }, + { "tc", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TC, + N_("build through %build (%prep, then compile) from "), + N_("") }, + { "ti", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TI, + N_("build through %install (%prep, %build, then install) from "), + N_("") }, + { "tl", 0, POPT_ARGFLAG_ONEDASH|POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_TL, + N_("verify %files section from "), + N_("") }, + { "ta", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TA, + N_("build source and binary packages from "), + N_("") }, + { "tb", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TB, + N_("build binary package only from "), + N_("") }, + { "ts", 0, POPT_ARGFLAG_ONEDASH, 0, POPT_TS, + N_("build source package only from "), + N_("") }, + + { "rebuild", '\0', 0, 0, POPT_REBUILD, + N_("build binary package from "), + N_("") }, + { "recompile", '\0', 0, 0, POPT_RECOMPILE, + N_("build through %install (%prep, %build, then install) from "), + N_("") }, + + { "buildroot", '\0', POPT_ARG_STRING, 0, POPT_BUILDROOT, + N_("override build root"), "DIRECTORY" }, + { "clean", '\0', 0, 0, POPT_RMBUILD, + N_("remove build tree when done"), NULL}, + { "force", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_FORCE, + N_("ignore ExcludeArch: directives from spec file"), NULL}, + { "fsmdebug", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN), &_fsm_debug, -1, + N_("debug file state machine"), NULL}, + { "nobuild", '\0', 0, 0, POPT_NOBUILD, + N_("do not execute any stages of the build"), NULL }, + { "nodeps", '\0', POPT_ARG_VAL, &noDeps, 1, + N_("do not verify build dependencies"), NULL }, + { "nodirtokens", '\0', 0, 0, POPT_NODIRTOKENS, + N_("generate package header(s) compatible with (legacy) rpm v3 packaging"), + NULL}, + + { "nolang", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_NOLANG, + N_("do not accept i18N msgstr's from specfile"), NULL}, + { "rmsource", '\0', 0, 0, POPT_RMSOURCE, + N_("remove sources when done"), NULL}, + { "rmspec", '\0', 0, 0, POPT_RMSPEC, + N_("remove specfile when done"), NULL}, + { "short-circuit", '\0', POPT_ARG_VAL, &shortCircuit, 1, + N_("skip straight to specified stage (only for c,i)"), NULL }, + { "target", '\0', POPT_ARG_STRING, 0, POPT_TARGETPLATFORM, + N_("override target platform"), "CPU-VENDOR-OS" }, + POPT_TABLEEND +}; + +enum modes { + MODE_BUILD = (1 << 4), + MODE_REBUILD = (1 << 5), + MODE_RECOMPILE = (1 << 8), + MODE_TARBUILD = (1 << 11), +}; + +static int quiet; + +/* the structure describing the options we take and the defaults */ +static struct poptOption optionsTable[] = { + + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmBuildPoptTable, 0, + N_("Build options with [ | | ]:"), + NULL }, + + { "quiet", '\0', POPT_ARGFLAG_DOC_HIDDEN, &quiet, 0, NULL, NULL}, + + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0, + N_("Common options for all rpm modes and executables:"), + NULL }, + + POPT_AUTOALIAS + POPT_AUTOHELP + POPT_TABLEEND +}; + +static int checkSpec(rpmts ts, rpmSpec spec) +{ + int rc; + rpmps ps = rpmSpecCheckDeps(ts, spec); + + if (ps) { + rpmlog(RPMLOG_ERR, _("Failed build dependencies:\n")); + rpmpsPrint(NULL, ps); + } + rc = (ps != NULL); + ps = rpmpsFree(ps); + return rc; +} + +static int isSpecFile(const char * specfile) +{ + char buf[256]; + const char * s; + FILE * f; + int count; + int checking; + + f = fopen(specfile, "r"); + if (f == NULL || ferror(f)) { + rpmlog(RPMLOG_ERR, _("Unable to open spec file %s: %s\n"), + specfile, strerror(errno)); + return 0; + } + count = fread(buf, sizeof(buf[0]), sizeof(buf), f); + (void) fclose(f); + + if (count == 0) + return 0; + + checking = 1; + for (s = buf; count--; s++) { + switch (*s) { + case '\r': + case '\n': + checking = 1; + break; + case ':': + checking = 0; + break; + default: +#if 0 + if (checking && !(isprint(*s) || isspace(*s))) return 0; + break; +#else + if (checking && !(isprint(*s) || isspace(*s)) && *(unsigned char *)s < 32) return 0; + break; +#endif + } + } + return 1; +} + +/* + * Try to find a spec from a tarball pointed to by arg. + * Return absolute path to spec name on success, otherwise NULL. + */ +static char * getTarSpec(const char *arg) +{ + char *specFile = NULL; + char *specDir; + char *specBase; + char *tmpSpecFile; + const char **spec; + char tarbuf[BUFSIZ]; + int gotspec = 0, res; + static const char *tryspec[] = { "Specfile", "\\*.spec", NULL }; + + specDir = rpmGetPath("%{_specdir}", NULL); + tmpSpecFile = rpmGetPath("%{_specdir}/", "rpm-spec.XXXXXX", NULL); + + (void) close(mkstemp(tmpSpecFile)); + + for (spec = tryspec; *spec != NULL; spec++) { + FILE *fp; + char *cmd; + + cmd = rpmExpand("%{uncompress: ", arg, "} | ", + "%{__tar} xOvf - --wildcards ", *spec, + " 2>&1 > ", tmpSpecFile, NULL); + + if (!(fp = popen(cmd, "r"))) { + rpmlog(RPMLOG_ERR, _("Failed to open tar pipe: %m\n")); + } else { + char *fok; + for (;;) { + fok = fgets(tarbuf, sizeof(tarbuf) - 1, fp); + /* tar sometimes prints "tar: Record size = 16" messages */ + if (!fok || strncmp(fok, "tar: ", 5) != 0) + break; + } + pclose(fp); + gotspec = (fok != NULL) && isSpecFile(tmpSpecFile); + } + + if (!gotspec) + unlink(tmpSpecFile); + free(cmd); + } + + if (!gotspec) { + rpmlog(RPMLOG_ERR, _("Failed to read spec file from %s\n"), arg); + goto exit; + } + + specBase = basename(tarbuf); + /* remove trailing \n */ + specBase[strlen(specBase)-1] = '\0'; + + rasprintf(&specFile, "%s/%s", specDir, specBase); + res = rename(tmpSpecFile, specFile); + + if (res) { + rpmlog(RPMLOG_ERR, _("Failed to rename %s to %s: %m\n"), + tmpSpecFile, specFile); + free(specFile); + specFile = NULL; + } else { + /* mkstemp() can give unnecessarily strict permissions, fixup */ + mode_t mask; + umask(mask = umask(0)); + (void) chmod(specFile, 0666 & ~mask); + } + +exit: + (void) unlink(tmpSpecFile); + free(tmpSpecFile); + free(specDir); + return specFile; +} + +static int buildForTarget(rpmts ts, const char * arg, BTA_t ba) +{ + int buildAmount = ba->buildAmount; + char * buildRootURL = NULL; + char * specFile = NULL; + rpmSpec spec = NULL; + int rc = 1; /* assume failure */ + int justRm = ((buildAmount & ~(RPMBUILD_RMSOURCE|RPMBUILD_RMSPEC)) == 0); + rpmSpecFlags specFlags = spec_flags; + +#ifndef DYING + rpmSetTables(RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS); +#endif + + if (ba->buildRootOverride) + buildRootURL = rpmGenPath(NULL, ba->buildRootOverride, NULL); + + /* Create build tree if necessary */ + const char * buildtree = "%{_topdir}:%{_specdir}:%{_sourcedir}:%{_builddir}:%{_rpmdir}:%{_srcrpmdir}:%{_buildrootdir}"; + const char * rootdir = rpmtsRootDir(ts); + if (rpmMkdirs(!rstreq(rootdir, "/") ? rootdir : NULL , buildtree)) { + goto exit; + } + + if (buildMode == 't') { + char *srcdir = NULL, *dir; + + specFile = getTarSpec(arg); + if (!specFile) + goto exit; + + /* Make the directory of the tarball %_sourcedir for this run */ + /* dirname() may modify contents so extra hoops needed. */ + if (*arg != '/') { + dir = rpmGetCwd(); + rstrscat(&dir, "/", arg, NULL); + } else { + dir = xstrdup(arg); + } + srcdir = dirname(dir); + addMacro(NULL, "_sourcedir", NULL, srcdir, RMIL_TARBALL); + free(dir); + } else { + specFile = xstrdup(arg); + } + + if (*specFile != '/') { + char *cwd = rpmGetCwd(); + char *s = NULL; + rasprintf(&s, "%s/%s", cwd, specFile); + free(cwd); + free(specFile); + specFile = s; + } + + struct stat st; + if (stat(specFile, &st) < 0) { + rpmlog(RPMLOG_ERR, _("failed to stat %s: %m\n"), specFile); + goto exit; + } + if (! S_ISREG(st.st_mode)) { + rpmlog(RPMLOG_ERR, _("File %s is not a regular file.\n"), specFile); + goto exit; + } + + /* Try to verify that the file is actually a specfile */ + if (!isSpecFile(specFile)) { + rpmlog(RPMLOG_ERR, + _("File %s does not appear to be a specfile.\n"), specFile); + goto exit; + } + + /* Don't parse spec if only its removal is requested */ + if (ba->buildAmount == RPMBUILD_RMSPEC) { + rc = unlink(specFile); + goto exit; + } + + /* Parse the spec file */ +#define _anyarch(_f) \ +(((_f)&(RPMBUILD_PREP|RPMBUILD_BUILD|RPMBUILD_INSTALL|RPMBUILD_PACKAGEBINARY)) == 0) + if (_anyarch(buildAmount)) + specFlags |= RPMSPEC_ANYARCH; +#undef _anyarch + + spec = rpmSpecParse(specFile, specFlags, buildRootURL); + if (spec == NULL) { + goto exit; + } + + /* Check build prerequisites if necessary, unless disabled */ + if (!justRm && !noDeps && checkSpec(ts, spec)) { + goto exit; + } + + if (rpmSpecBuild(spec, ba)) { + goto exit; + } + + if (buildMode == 't') + (void) unlink(specFile); + rc = 0; + +exit: + free(specFile); + rpmSpecFree(spec); + free(buildRootURL); + return rc; +} + +static int build(rpmts ts, const char * arg, BTA_t ba, const char * rcfile) +{ + int rc = 0; + char * targets = argvJoin(build_targets, ","); +#define buildCleanMask (RPMBUILD_RMSOURCE|RPMBUILD_RMSPEC) + int cleanFlags = ba->buildAmount & buildCleanMask; + rpmVSFlags vsflags, ovsflags; + + vsflags = rpmExpandNumeric("%{_vsflags_build}"); + if (rpmcliQueryFlags & VERIFY_DIGEST) + vsflags |= _RPMVSF_NODIGESTS; + if (rpmcliQueryFlags & VERIFY_SIGNATURE) + vsflags |= _RPMVSF_NOSIGNATURES; + if (rpmcliQueryFlags & VERIFY_HDRCHK) + vsflags |= RPMVSF_NOHDRCHK; + ovsflags = rpmtsSetVSFlags(ts, vsflags); + + if (build_targets == NULL) { + rc = buildForTarget(ts, arg, ba); + goto exit; + } + + /* parse up the build operators */ + + printf(_("Building target platforms: %s\n"), targets); + + ba->buildAmount &= ~buildCleanMask; + for (ARGV_const_t target = build_targets; target && *target; target++) { + /* Perform clean-up after last target build. */ + if (*(target + 1) == NULL) + ba->buildAmount |= cleanFlags; + + printf(_("Building for target %s\n"), *target); + + /* Read in configuration for target. */ + rpmFreeMacros(NULL); + rpmFreeRpmrc(); + (void) rpmReadConfigFiles(rcfile, *target); + rc = buildForTarget(ts, arg, ba); + if (rc) + break; + } + +exit: + vsflags = rpmtsSetVSFlags(ts, ovsflags); + /* Restore original configuration. */ + rpmFreeMacros(NULL); + rpmFreeRpmrc(); + (void) rpmReadConfigFiles(rcfile, NULL); + free(targets); + + return rc; +} + +int main(int argc, char *argv[]) +{ + rpmts ts = NULL; + enum modes bigMode = MODE_BUILD; + BTA_t ba = &rpmBTArgs; + + const char *pkg = NULL; + int ec = 0; + poptContext optCon = rpmcliInit(argc, argv, optionsTable); + + if (argc <= 1 || poptPeekArg(optCon) == NULL) { + printUsage(optCon, stderr, 0); + exit(EXIT_FAILURE); + } + + switch (buildMode) { + case 'b': bigMode = MODE_BUILD; break; + case 't': bigMode = MODE_TARBUILD; break; + case 'B': bigMode = MODE_REBUILD; break; + case 'C': bigMode = MODE_RECOMPILE; break; + } + + if (rpmcliRootDir && rpmcliRootDir[0] != '/') { + argerror(_("arguments to --root (-r) must begin with a /")); + } + + /* rpmbuild is rather chatty by default */ + rpmSetVerbosity(quiet ? RPMLOG_WARNING : RPMLOG_INFO); + + if (rpmcliPipeOutput && initPipe()) + exit(EXIT_FAILURE); + + ts = rpmtsCreate(); + (void) rpmtsSetRootDir(ts, rpmcliRootDir); + switch (bigMode) { + case MODE_REBUILD: + case MODE_RECOMPILE: + ba->buildAmount = + RPMBUILD_PREP | RPMBUILD_BUILD | RPMBUILD_INSTALL | RPMBUILD_CHECK; + if (bigMode == MODE_REBUILD) { + ba->buildAmount |= RPMBUILD_PACKAGEBINARY; + ba->buildAmount |= RPMBUILD_RMSOURCE; + ba->buildAmount |= RPMBUILD_RMSPEC; + ba->buildAmount |= RPMBUILD_CLEAN; + ba->buildAmount |= RPMBUILD_RMBUILD; + } + + while ((pkg = poptGetArg(optCon))) { + char * specFile = NULL; + + ba->cookie = NULL; + ec = rpmInstallSource(ts, pkg, &specFile, &ba->cookie); + if (ec == 0) { + ba->rootdir = rpmcliRootDir; + ec = build(ts, specFile, ba, rpmcliRcfile); + } + ba->cookie = _free(ba->cookie); + specFile = _free(specFile); + + if (ec) + break; + } + break; + case MODE_BUILD: + case MODE_TARBUILD: + switch (buildChar) { + case 'a': + ba->buildAmount |= RPMBUILD_PACKAGESOURCE; + case 'b': + ba->buildAmount |= RPMBUILD_PACKAGEBINARY; + ba->buildAmount |= RPMBUILD_CLEAN; + if ((buildChar == 'b') && shortCircuit) + break; + case 'i': + ba->buildAmount |= RPMBUILD_INSTALL; + ba->buildAmount |= RPMBUILD_CHECK; + if ((buildChar == 'i') && shortCircuit) + break; + case 'c': + ba->buildAmount |= RPMBUILD_BUILD; + if ((buildChar == 'c') && shortCircuit) + break; + case 'p': + ba->buildAmount |= RPMBUILD_PREP; + break; + + case 'l': + ba->buildAmount |= RPMBUILD_FILECHECK; + break; + case 's': + ba->buildAmount |= RPMBUILD_PACKAGESOURCE; + break; + } + + while ((pkg = poptGetArg(optCon))) { + ba->rootdir = rpmcliRootDir; + ba->cookie = NULL; + ec = build(ts, pkg, ba, rpmcliRcfile); + if (ec) + break; + rpmFreeMacros(NULL); + (void) rpmReadConfigFiles(rpmcliRcfile, NULL); + } + break; + } + + ts = rpmtsFree(ts); + finishPipe(); + ba->buildRootOverride = _free(ba->buildRootOverride); + build_targets = argvFree(build_targets); + + rpmcliFini(optCon); + + return RETVAL(ec); +} diff --git a/rpmdb.c b/rpmdb.c new file mode 100644 index 0000000..cc4a7aa --- /dev/null +++ b/rpmdb.c @@ -0,0 +1,77 @@ +#include "system.h" + +#include +#include +#include "cliutils.h" +#include "debug.h" + +#if !defined(__GLIBC__) && !defined(__APPLE__) +char ** environ = NULL; +#endif + +enum modes { + MODE_INITDB = (1 << 0), + MODE_REBUILDDB = (1 << 1), + MODE_VERIFYDB = (1 << 2), +}; + +static int mode = 0; + +static struct poptOption dbOptsTable[] = { + { "initdb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_INITDB, + N_("initialize database"), NULL}, + { "rebuilddb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_REBUILDDB, + N_("rebuild database inverted lists from installed package headers"), + NULL}, + { "verifydb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR|POPT_ARGFLAG_DOC_HIDDEN), + &mode, MODE_VERIFYDB, N_("verify database files"), NULL}, + POPT_TABLEEND +}; + +static struct poptOption optionsTable[] = { + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, dbOptsTable, 0, + N_("Database options:"), NULL }, + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0, + N_("Common options for all rpm modes and executables:"), NULL }, + + POPT_AUTOALIAS + POPT_AUTOHELP + POPT_TABLEEND +}; + +int main(int argc, char *argv[]) +{ + int ec = EXIT_FAILURE; + poptContext optCon = rpmcliInit(argc, argv, optionsTable); + rpmts ts = NULL; + + if (argc < 2 || poptPeekArg(optCon)) { + printUsage(optCon, stderr, 0); + goto exit; + } + + ts = rpmtsCreate(); + rpmtsSetRootDir(ts, rpmcliRootDir); + + switch (mode) { + case MODE_INITDB: + ec = rpmtsInitDB(ts, 0644); + break; + case MODE_REBUILDDB: + { rpmVSFlags vsflags = rpmExpandNumeric("%{_vsflags_rebuilddb}"); + rpmVSFlags ovsflags = rpmtsSetVSFlags(ts, vsflags); + ec = rpmtsRebuildDB(ts); + vsflags = rpmtsSetVSFlags(ts, ovsflags); + } break; + case MODE_VERIFYDB: + ec = rpmtsVerifyDB(ts); + break; + default: + argerror(_("only one major mode may be specified")); + } + +exit: + rpmtsFree(ts); + rpmcliFini(optCon); + return ec; +} diff --git a/rpmio/Makefile.am b/rpmio/Makefile.am new file mode 100644 index 0000000..b1003c5 --- /dev/null +++ b/rpmio/Makefile.am @@ -0,0 +1,40 @@ +# Makefile for rpm library. + +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/ +AM_CPPFLAGS += @WITH_NSS_INCLUDE@ +AM_CPPFLAGS += @WITH_POPT_INCLUDE@ +AM_CPPFLAGS += -I$(top_srcdir)/misc +AM_CPPFLAGS += -DRPMCONFIGDIR="\"@RPMCONFIGDIR@\"" +AM_CPPFLAGS += -DLOCALSTATEDIR="\"$(localstatedir)\"" + +usrlibdir = $(libdir) +usrlib_LTLIBRARIES = librpmio.la +librpmio_la_SOURCES = \ + argv.c base64.h base64.c digest.h digest.c macro.c \ + rpmhook.c rpmio.c rpmlog.c rpmmalloc.c \ + rpmpgp.c rpmsq.c rpmsw.c url.c \ + rpmio_internal.h rpmhook.h \ + rpmstring.c rpmfileutil.c \ + rpmkeyring.c + +librpmio_la_LDFLAGS = -version-info 2:1:0 +librpmio_la_LIBADD = \ + ../misc/libmisc.la \ + @WITH_NSS_LIB@ \ + @WITH_BZ2_LIB@ \ + @WITH_ZLIB_LIB@ \ + @WITH_LIBELF_LIB@ \ + @WITH_POPT_LIB@ \ + @WITH_LZMA_LIB@ \ + -lpthread + +if WITH_LUA +AM_CPPFLAGS += -I$(top_srcdir)/luaext/ +AM_CPPFLAGS += @LUA_CFLAGS@ +librpmio_la_SOURCES += rpmlua.c rpmlua.h +librpmio_la_LIBADD += @LUA_LIBS@ +librpmio_la_LIBADD += $(top_builddir)/luaext/libluaext.la +endif + +check_PROGRAMS = + diff --git a/rpmio/Makefile.in b/rpmio/Makefile.in new file mode 100644 index 0000000..68cbd8a --- /dev/null +++ b/rpmio/Makefile.in @@ -0,0 +1,689 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile for rpm library. + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@WITH_LUA_TRUE@am__append_1 = -I$(top_srcdir)/luaext/ @LUA_CFLAGS@ +@WITH_LUA_TRUE@am__append_2 = rpmlua.c rpmlua.h +@WITH_LUA_TRUE@am__append_3 = @LUA_LIBS@ \ +@WITH_LUA_TRUE@ $(top_builddir)/luaext/libluaext.la +check_PROGRAMS = +subdir = rpmio +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(usrlibdir)" +LTLIBRARIES = $(usrlib_LTLIBRARIES) +@WITH_LUA_TRUE@am__DEPENDENCIES_1 = \ +@WITH_LUA_TRUE@ $(top_builddir)/luaext/libluaext.la +librpmio_la_DEPENDENCIES = ../misc/libmisc.la $(am__DEPENDENCIES_1) +am__librpmio_la_SOURCES_DIST = argv.c base64.h base64.c digest.h \ + digest.c macro.c rpmhook.c rpmio.c rpmlog.c rpmmalloc.c \ + rpmpgp.c rpmsq.c rpmsw.c url.c rpmio_internal.h rpmhook.h \ + rpmstring.c rpmfileutil.c rpmkeyring.c rpmlua.c rpmlua.h +@WITH_LUA_TRUE@am__objects_1 = rpmlua.lo +am_librpmio_la_OBJECTS = argv.lo base64.lo digest.lo macro.lo \ + rpmhook.lo rpmio.lo rpmlog.lo rpmmalloc.lo rpmpgp.lo rpmsq.lo \ + rpmsw.lo url.lo rpmstring.lo rpmfileutil.lo rpmkeyring.lo \ + $(am__objects_1) +librpmio_la_OBJECTS = $(am_librpmio_la_OBJECTS) +librpmio_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(librpmio_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(librpmio_la_SOURCES) +DIST_SOURCES = $(am__librpmio_la_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FIXPERMS = @FIXPERMS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_CFLAGS = @LUA_CFLAGS@ +LUA_LIBS = @LUA_LIBS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPMCANONARCH = @RPMCANONARCH@ +RPMCANONCOLOR = @RPMCANONCOLOR@ +RPMCANONGNU = @RPMCANONGNU@ +RPMCANONOS = @RPMCANONOS@ +RPMCANONVENDOR = @RPMCANONVENDOR@ +RPMCONFIGDIR = @RPMCONFIGDIR@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WITH_ACL_LIB = @WITH_ACL_LIB@ +WITH_BZ2_LIB = @WITH_BZ2_LIB@ +WITH_CAP_LIB = @WITH_CAP_LIB@ +WITH_DB_LIB = @WITH_DB_LIB@ +WITH_LIBELF_LIB = @WITH_LIBELF_LIB@ +WITH_LZMA_LIB = @WITH_LZMA_LIB@ +WITH_MAGIC_INCLUDE = @WITH_MAGIC_INCLUDE@ +WITH_MAGIC_LIB = @WITH_MAGIC_LIB@ +WITH_NSS_INCLUDE = @WITH_NSS_INCLUDE@ +WITH_NSS_LIB = @WITH_NSS_LIB@ +WITH_POPT_INCLUDE = @WITH_POPT_INCLUDE@ +WITH_POPT_LIB = @WITH_POPT_LIB@ +WITH_PYTHON_INCLUDE = @WITH_PYTHON_INCLUDE@ +WITH_PYTHON_LIB = @WITH_PYTHON_LIB@ +WITH_SELINUX_LIB = @WITH_SELINUX_LIB@ +WITH_SEMANAGE_LIB = @WITH_SEMANAGE_LIB@ +WITH_ZLIB_INCLUDE = @WITH_ZLIB_INCLUDE@ +WITH_ZLIB_LIB = @WITH_ZLIB_LIB@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +__BZIP2 = @__BZIP2@ +__CAT = @__CAT@ +__CC = @__CC@ +__CHGRP = @__CHGRP@ +__CHMOD = @__CHMOD@ +__CHOWN = @__CHOWN@ +__CP = @__CP@ +__CPIO = @__CPIO@ +__CURL = @__CURL@ +__FAKECHROOT = @__FAKECHROOT@ +__FILE = @__FILE@ +__GPG = @__GPG@ +__GREP = @__GREP@ +__GZIP = @__GZIP@ +__ID = @__ID@ +__INSTALL = @__INSTALL@ +__LD = @__LD@ +__LRZIP = @__LRZIP@ +__LZIP = @__LZIP@ +__MAKE = @__MAKE@ +__MKDIR = @__MKDIR@ +__MKDIR_P = @__MKDIR_P@ +__MV = @__MV@ +__NM = @__NM@ +__OBJCOPY = @__OBJCOPY@ +__OBJDUMP = @__OBJDUMP@ +__PATCH = @__PATCH@ +__PERL = @__PERL@ +__PGP = @__PGP@ +__PYTHON = @__PYTHON@ +__RESTORECON = @__RESTORECON@ +__RM = @__RM@ +__RSH = @__RSH@ +__SED = @__SED@ +__SEMODULE = @__SEMODULE@ +__SSH = @__SSH@ +__STRIP = @__STRIP@ +__TAR = @__TAR@ +__UNZIP = @__UNZIP@ +__XZ = @__XZ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dirstamp = @dirstamp@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ + -I$(top_builddir)/include/ @WITH_NSS_INCLUDE@ \ + @WITH_POPT_INCLUDE@ -I$(top_srcdir)/misc \ + -DRPMCONFIGDIR="\"@RPMCONFIGDIR@\"" \ + -DLOCALSTATEDIR="\"$(localstatedir)\"" $(am__append_1) +usrlibdir = $(libdir) +usrlib_LTLIBRARIES = librpmio.la +librpmio_la_SOURCES = argv.c base64.h base64.c digest.h digest.c \ + macro.c rpmhook.c rpmio.c rpmlog.c rpmmalloc.c rpmpgp.c \ + rpmsq.c rpmsw.c url.c rpmio_internal.h rpmhook.h rpmstring.c \ + rpmfileutil.c rpmkeyring.c $(am__append_2) +librpmio_la_LDFLAGS = -version-info 2:1:0 +librpmio_la_LIBADD = ../misc/libmisc.la @WITH_NSS_LIB@ @WITH_BZ2_LIB@ \ + @WITH_ZLIB_LIB@ @WITH_LIBELF_LIB@ @WITH_POPT_LIB@ \ + @WITH_LZMA_LIB@ -lpthread $(am__append_3) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign rpmio/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign rpmio/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-usrlibLTLIBRARIES: $(usrlib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(usrlibdir)" || $(MKDIR_P) "$(DESTDIR)$(usrlibdir)" + @list='$(usrlib_LTLIBRARIES)'; test -n "$(usrlibdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(usrlibdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(usrlibdir)"; \ + } + +uninstall-usrlibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(usrlib_LTLIBRARIES)'; test -n "$(usrlibdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(usrlibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(usrlibdir)/$$f"; \ + done + +clean-usrlibLTLIBRARIES: + -test -z "$(usrlib_LTLIBRARIES)" || rm -f $(usrlib_LTLIBRARIES) + @list='$(usrlib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +librpmio.la: $(librpmio_la_OBJECTS) $(librpmio_la_DEPENDENCIES) + $(librpmio_la_LINK) -rpath $(usrlibdir) $(librpmio_la_OBJECTS) $(librpmio_la_LIBADD) $(LIBS) + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/digest.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macro.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmfileutil.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmhook.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmkeyring.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmlog.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmlua.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmmalloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmpgp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmsq.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmstring.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmsw.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(usrlibdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + clean-usrlibLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-usrlibLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-usrlibLTLIBRARIES + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool \ + clean-usrlibLTLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-usrlibLTLIBRARIES installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-usrlibLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/rpmio/argv.c b/rpmio/argv.c new file mode 100644 index 0000000..cf6e299 --- /dev/null +++ b/rpmio/argv.c @@ -0,0 +1,225 @@ +/** \ingroup rpmio + * \file rpmio/argv.c + */ + +#include "system.h" + +#include +#include +#include + +#include "debug.h" + +void argvPrint(const char * msg, ARGV_const_t argv, FILE * fp) +{ + ARGV_const_t av; + + if (fp == NULL) fp = stderr; + + if (msg) + fprintf(fp, "===================================== %s\n", msg); + + if (argv) + for (av = argv; *av; av++) + fprintf(fp, "%s\n", *av); + +} + +ARGV_t argvNew(void) +{ + ARGV_t argv = xcalloc(1, sizeof(*argv)); + return argv; +} + +ARGI_t argiFree(ARGI_t argi) +{ + if (argi) { + argi->nvals = 0; + argi->vals = _free(argi->vals); + } + argi = _free(argi); + return NULL; +} + +ARGV_t argvFree(ARGV_t argv) +{ + ARGV_t av; + + if (argv) + for (av = argv; *av; av++) + *av = _free(*av); + argv = _free(argv); + return NULL; +} + +int argiCount(ARGI_const_t argi) +{ + int nvals = 0; + if (argi) + nvals = argi->nvals; + return nvals; +} + +ARGint_t argiData(ARGI_const_t argi) +{ + ARGint_t vals = NULL; + if (argi && argi->nvals > 0) + vals = argi->vals; + return vals; +} + +int argvCount(ARGV_const_t argv) +{ + int argc = 0; + if (argv) + while (argv[argc] != NULL) + argc++; + return argc; +} + +ARGV_t argvData(ARGV_t argv) +{ + return argv; +} + +int argvCmp(const void * a, const void * b) +{ + const char *astr = *(ARGV_t)a; + const char *bstr = *(ARGV_t)b; + return strcmp(astr, bstr); +} + +int argvSort(ARGV_t argv, int (*compar)(const void *, const void *)) +{ + if (compar == NULL) + compar = argvCmp; + qsort(argv, argvCount(argv), sizeof(*argv), compar); + return 0; +} + +ARGV_t argvSearch(ARGV_const_t argv, const char *val, + int (*compar)(const void *, const void *)) +{ + if (argv == NULL) + return NULL; + if (compar == NULL) + compar = argvCmp; + return bsearch(&val, argv, argvCount(argv), sizeof(*argv), compar); +} + +int argiAdd(ARGI_t * argip, int ix, int val) +{ + ARGI_t argi; + + if (argip == NULL) + return -1; + if (*argip == NULL) + *argip = xcalloc(1, sizeof(**argip)); + argi = *argip; + if (ix < 0) + ix = argi->nvals; + if (ix >= argi->nvals) { + argi->vals = xrealloc(argi->vals, (ix + 1) * sizeof(*argi->vals)); + memset(argi->vals + argi->nvals, 0, + (ix - argi->nvals) * sizeof(*argi->vals)); + argi->nvals = ix + 1; + } + argi->vals[ix] = val; + return 0; +} + +int argvAdd(ARGV_t * argvp, const char *val) +{ + ARGV_t argv; + int argc; + + if (argvp == NULL) + return -1; + argc = argvCount(*argvp); + *argvp = xrealloc(*argvp, (argc + 1 + 1) * sizeof(**argvp)); + argv = *argvp; + argv[argc++] = xstrdup(val); + argv[argc ] = NULL; + return 0; +} + +int argvAddNum(ARGV_t *argvp, int val) +{ + char *valstr = NULL; + int rc; + rasprintf(&valstr, "%d", val); + rc = argvAdd(argvp, valstr); + free(valstr); + return rc; +} + +int argvAppend(ARGV_t * argvp, ARGV_const_t av) +{ + ARGV_t argv = *argvp; + int argc = argvCount(argv); + int ac = argvCount(av); + int i; + + argv = xrealloc(argv, (argc + ac + 1) * sizeof(*argv)); + for (i = 0; i < ac; i++) + argv[argc + i] = xstrdup(av[i]); + argv[argc + ac] = NULL; + *argvp = argv; + return 0; +} + +ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags) +{ + char *dest = NULL; + ARGV_t argv; + int argc = 1; + const char * s; + char * t; + int c; + + if (str == NULL || seps == NULL) + return NULL; + + dest = xmalloc(strlen(str) + 1); + for (argc = 1, s = str, t = dest; (c = *s); s++, t++) { + if (strchr(seps, c)) { + argc++; + c = '\0'; + } + *t = c; + } + *t = '\0'; + + argv = xmalloc( (argc + 1) * sizeof(*argv)); + + for (c = 0, s = dest; s < t; s+= strlen(s) + 1) { + if (*s == '\0' && (flags & ARGV_SKIPEMPTY)) + continue; + argv[c] = xstrdup(s); + c++; + } + argv[c] = NULL; + free(dest); + return argv; +} + +/* Backwards compatibility */ +int argvSplit(ARGV_t * argvp, const char * str, const char * seps) +{ + if (argvp) { + *argvp = argvSplitString(str, seps, ARGV_SKIPEMPTY); + } + return 0; +} + +char *argvJoin(ARGV_const_t argv, const char *sep) +{ + char *dest = NULL; + char * const *arg; + + for (arg = argv; arg && *arg; arg++) { + rstrscat(&dest, *arg, *(arg+1) ? sep : "", NULL); + } + return dest; +} + diff --git a/rpmio/argv.h b/rpmio/argv.h new file mode 100644 index 0000000..d73a3c3 --- /dev/null +++ b/rpmio/argv.h @@ -0,0 +1,179 @@ +#ifndef _H_ARGV_ +#define _H_ARGV_ + +/** \ingroup rpmargv + * \file rpmio/argv.h + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef char ** ARGV_t; +typedef char * const *ARGV_const_t; + +typedef int * ARGint_t; +struct ARGI_s { + unsigned nvals; + ARGint_t vals; +}; +typedef struct ARGI_s * ARGI_t; +typedef struct ARGI_s const * const ARGI_const_t; + +/** \ingroup rpmargv + * Print argv array elements. + * @param msg output message prefix (or NULL) + * @param argv argv array + * @param fp output file handle (NULL uses stderr) + */ +void argvPrint(const char * msg, ARGV_const_t argv, FILE * fp); + +/** \ingroup rpmargv + * Destroy an argi array. + * @param argi argi array + * @return NULL always + */ +ARGI_t argiFree(ARGI_t argi); + + +/** \ingroup rpmargv + * Create an empty argv array. + * @return pointer to empty argv + */ +ARGV_t argvNew(void); + +/** \ingroup rpmargv + * Destroy an argv array. + * @param argv argv array + * @return NULL always + */ +ARGV_t argvFree(ARGV_t argv); + +/** \ingroup rpmargv + * Return no. of elements in argi array. + * @param argi argi array + * @return no. of elements + */ +int argiCount(ARGI_const_t argi); + +/** \ingroup rpmargv + * Return data from argi array. + * @param argi argi array + * @return argi array data address + */ +ARGint_t argiData(ARGI_const_t argi); + +/** \ingroup rpmargv + * Return no. of elements in argv array. + * @param argv argv array + * @return no. of elements + */ +int argvCount(ARGV_const_t argv); + +/** \ingroup rpmargv + * Return data from argv array. + * @param argv argv array + * @return argv array data address + */ +ARGV_t argvData(ARGV_t argv); + +/** \ingroup rpmargv + * Compare argv arrays (qsort/bsearch). + * @param a 1st instance address + * @param b 2nd instance address + * @return result of comparison + */ +int argvCmp(const void * a, const void * b); + +/** \ingroup rpmargv + * Sort an argv array. + * @param argv argv array + * @param compar strcmp-like comparison function, or NULL for argvCmp() + * @return 0 always + */ +int argvSort(ARGV_t argv, int (*compar)(const void *, const void *)); + +/** \ingroup rpmargv + * Find an element in an argv array. + * @param argv argv array + * @param val string to find + * @param compar strcmp-like comparison function, or NULL for argvCmp() + * @return found string (NULL on failure) + */ +ARGV_t argvSearch(ARGV_const_t argv, const char *val, + int (*compar)(const void *, const void *)); + +/** \ingroup rpmargv + * Add an int to an argi array. + * @retval *argip argi array + * @param ix argi array index (or -1 to append) + * @param val int arg to add + * @return 0 always + */ +int argiAdd(ARGI_t * argip, int ix, int val); + +/** \ingroup rpmargv + * Add a string to an argv array. + * @retval *argvp argv array + * @param val string arg to append + * @return 0 always + */ +int argvAdd(ARGV_t * argvp, const char *val); + +/** \ingroup rpmargv + * Add a number to an argv array (converting to a string). + * @retval *argvp argv array + * @param val numeric arg to append + * @return 0 always + */ +int argvAddNum(ARGV_t * argvp, int val); + +/** \ingroup rpmargv + * Append one argv array to another. + * @retval *argvp argv array + * @param av argv array to append + * @return 0 always + */ +int argvAppend(ARGV_t * argvp, ARGV_const_t av); + +enum argvFlags_e { + ARGV_NONE = 0, + ARGV_SKIPEMPTY = (1 << 0), /* omit empty strings from result */ +}; + +typedef rpmFlags argvFlags; + +/** \ingroup rpmargv + * Split a string into an argv array. + * @param str string arg to split + * @param seps seperator characters + * @param flags flags to control behavior + * @return argv array + */ +ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags); + +/** \ingroup rpmargv + * Split a string into an argv array. + * @retval *argvp argv array + * @param str string arg to split + * @param seps seperator characters + * @return 0 always + */ +int argvSplit(ARGV_t * argvp, const char * str, const char * seps); + +/** \ingroup rpmargv + * Join an argv array into a string. + * @param *argv argv array to join + * @param sep seperator string to use + * @return malloc'ed string + */ +char *argvJoin(ARGV_const_t argv, const char *sep); + +#ifdef __cplusplus +} +#endif + +#endif /* _H_ARGV_ */ diff --git a/rpmio/base64.c b/rpmio/base64.c new file mode 100644 index 0000000..6b006e1 --- /dev/null +++ b/rpmio/base64.c @@ -0,0 +1,255 @@ +/* base64 encoder/decoder based on public domain implementation + * by Chris Venter */ + +#include +#include + +#include "rpmio/base64.h" + + +static char base64_encode_value(char value_in) +{ + static const char encoding[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + if (value_in > 63) return '='; + return encoding[(int)value_in]; +} + +static char *base64_encode_block(const char *plaintext_in, int length_in, char *codechar) +{ + const char *plainchar = plaintext_in; + const char *const plaintextend = plaintext_in + length_in; + char result; + char fragment; + + while (1) { + if (plainchar == plaintextend) { + return codechar; + } + fragment = *plainchar++; + result = (fragment & 0x0fc) >> 2; + *codechar++ = base64_encode_value(result); + result = (fragment & 0x003) << 4; + if (plainchar == plaintextend) + { + *codechar++ = base64_encode_value(result); + *codechar++ = '='; + *codechar++ = '='; + return codechar; + } + fragment = *plainchar++; + result |= (fragment & 0x0f0) >> 4; + *codechar++ = base64_encode_value(result); + result = (fragment & 0x00f) << 2; + if (plainchar == plaintextend) + { + *codechar++ = base64_encode_value(result); + *codechar++ = '='; + return codechar; + } + fragment = *plainchar++; + result |= (fragment & 0x0c0) >> 6; + *codechar++ = base64_encode_value(result); + result = (fragment & 0x03f) >> 0; + *codechar++ = base64_encode_value(result); + } + /* control should not reach here */ + return codechar; +} + +#define BASE64_DEFAULT_LINE_LENGTH 64 + +char *b64encode(const void *data, size_t len, int linelen) +{ + size_t encodedlen; + const char *dataptr = data; + char *output; + char *outptr; + + if (data == NULL) + return NULL; + + if (linelen < 0) + linelen = BASE64_DEFAULT_LINE_LENGTH; + + linelen /= 4; + encodedlen = ((len + 2) / 3) * 4; + if (linelen > 0) { + encodedlen += encodedlen/(linelen * 4) + 1; + } + ++encodedlen; /* for zero termination */ + + output = malloc(encodedlen); + if (output == NULL) + return NULL; + + outptr = output; + while (len > 0) { + if (linelen > 0 && len > linelen * 3) { + outptr = base64_encode_block(dataptr, linelen * 3, outptr); + len -= linelen * 3; + dataptr += linelen * 3; + } else { + outptr = base64_encode_block(dataptr, len, outptr); + len = 0; + } + if (linelen > 0) { + *outptr++ = '\n'; + } + } + *outptr = '\0'; + return output; +} + +static int base64_decode_value(unsigned char value_in) +{ + static const int decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51}; + value_in -= 43; + if (value_in > sizeof(decoding)/sizeof(int)) + return -1; + return decoding[value_in]; +} + +static size_t base64_decode_block(const char *code_in, const size_t length_in, char *plaintext_out) +{ + const char *codechar = code_in; + char *plainchar = plaintext_out; + int fragment; + + *plainchar = 0; + + while (1) + { + do { + if (codechar == code_in+length_in) + { + return plainchar - plaintext_out; + } + fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar = (char)((fragment & 0x03f) << 2); + + do { + if (codechar == code_in+length_in) + { + return plainchar - plaintext_out; + } + fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (char)((fragment & 0x030) >> 4); + *plainchar = (char)((fragment & 0x00f) << 4); + + do { + if (codechar == code_in+length_in) + { + return plainchar - plaintext_out; + } + fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (char)((fragment & 0x03c) >> 2); + *plainchar = (char)((fragment & 0x003) << 6); + + do { + if (codechar == code_in+length_in) + { + return plainchar - plaintext_out; + } + fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (char)(fragment & 0x03f); + } + /* control should not reach here */ + return plainchar - plaintext_out; +} + +int b64decode(const char *in, void **out, size_t *outlen) +{ + size_t outcnt = 0; + const char *inptr = in; + + *out = NULL; + + if (in == NULL) { + return 1; + } + + while (*inptr != '\0') { + /* assume all ASCII control chars as whitespace */ + if (*inptr > 32) { + if (base64_decode_value(*inptr) != -1) { + ++outcnt; + } else { + return 3; + } + } + ++inptr; + } + + if (outcnt % 4 != 0) + return 2; + + outcnt = (outcnt / 4) * 3; + + *out = malloc(outcnt + 1); /* base64_decode_block can write one extra character */ + + if (*out == NULL) + return 4; + + *outlen = base64_decode_block(in, inptr - in, *out); + + return 0; +} + +#define CRC24_INIT 0xb704ce +#define CRC24_POLY 0x1864cfb + +char *b64crc(const unsigned char *data, size_t len) +{ + uint32_t crc = CRC24_INIT; + int i; + + while (len--) { + crc ^= (*data++) << 16; + for (i = 0; i < 8; i++) { + crc <<= 1; + if (crc & 0x1000000) + crc ^= CRC24_POLY; + } + } + crc = htonl(crc & 0xffffff); + data = (unsigned char *)&crc; + ++data; + return b64encode(data, 3, 0); +} + +#ifdef BASE64_TEST +#include +#include + +int main(int argc, char *argv[]) +{ + static char tst[]="wtrt8122ÄLýáj\x20s ~ýhž\t4\x02Å¡jjmBvž^%$RTÅ¡#á.íěj\x1hÄýÄŤc+"; + char *encoded; + void *decoded; + size_t size; + int err; + printf("Original: %lu\n%s\n", sizeof(tst)-1, tst); + encoded = b64encode(tst, sizeof(tst)-1, 64); + printf("Encoded: %lu\n%s\n", strlen(encoded), encoded); + if ((err = b64decode(encoded, &decoded, &size)) != 0) { + fprintf(stderr, "Error in decode: %d\n", err); + return 1; + } + printf("Decoded:\n%.*s\n", (int)size, (char *)decoded); + if (size != sizeof(tst)-1) { + fprintf(stderr, "Size differs orig: %lu new: %lu\n", sizeof(tst)-1, size); + return 1; + } + if (memcmp(tst, decoded, size) != 0) { + fprintf(stderr, "Decoded data differs.\n"); + return 1; + } + fprintf(stderr, "OK\n"); + return 0; +} +#endif + diff --git a/rpmio/base64.h b/rpmio/base64.h new file mode 100644 index 0000000..d572856 --- /dev/null +++ b/rpmio/base64.h @@ -0,0 +1,37 @@ +/* base64 encoder/decoder based on public domain implementation + * by Chris Venter */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* returns malloced base64 encoded string + * lines are split with \n characters to be nearest lower multiple of linelen + * if linelen/4 == 0 lines are not split + * if linelen < 0 default line length (64) is used + * the returned string is empty when len == 0 + * returns NULL on failures + */ +char *b64encode(const void *data, size_t len, int linelen); + +/* decodes from zero terminated base64 encoded string to a newly malloced buffer + * ignores whitespace characters in the input string + * return values: + * 0 - OK + * 1 - input is NULL + * 2 - invalid length + * 3 - invalid characters on input + * 4 - malloc failed + */ +int b64decode(const char *in, void **out, size_t *outlen); + +/* counts CRC24 and base64 encodes it in a malloced string + * returns NULL on failures + */ +char *b64crc(const unsigned char *data, size_t len); + +#ifdef __cplusplus +} +#endif diff --git a/rpmio/digest.c b/rpmio/digest.c new file mode 100644 index 0000000..66f27b5 --- /dev/null +++ b/rpmio/digest.c @@ -0,0 +1,246 @@ +/** \ingroup signature + * \file rpmio/digest.c + */ + +#include "system.h" + +#include "rpmio/digest.h" + +#include "debug.h" + +#ifdef SHA_DEBUG +#define DPRINTF(_a) fprintf _a +#else +#define DPRINTF(_a) +#endif + + +/** + * MD5/SHA1 digest private data. + */ +struct DIGEST_CTX_s { + rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ + HASHContext *hashctx; /*!< Internal NSS hash context. */ + int algo; /*!< Used hash algorithm */ +}; + +#define DIGESTS_MAX 11 +struct rpmDigestBundle_s { + int index_min; /*!< Smallest index of active digest */ + int index_max; /*!< Largest index of active digest */ + off_t nbytes; /*!< Length of total input data */ + DIGEST_CTX digests[DIGESTS_MAX]; /*!< Digest contexts indexed by algo */ +}; + +rpmDigestBundle rpmDigestBundleNew(void) +{ + rpmDigestBundle bundle = xcalloc(1, sizeof(*bundle)); + return bundle; +} + +rpmDigestBundle rpmDigestBundleFree(rpmDigestBundle bundle) +{ + if (bundle) { + for (int i = bundle->index_min; i <= bundle->index_max ; i++) { + if (bundle->digests[i] == NULL) + continue; + rpmDigestFinal(bundle->digests[i], NULL, NULL, 0); + bundle->digests[i] = NULL; + } + memset(bundle, 0, sizeof(*bundle)); + free(bundle); + } + return NULL; +} + +int rpmDigestBundleAdd(rpmDigestBundle bundle, int algo, + rpmDigestFlags flags) +{ + DIGEST_CTX ctx = NULL; + if (bundle && algo > 0 && algo < DIGESTS_MAX) { + if (bundle->digests[algo] == NULL) { + ctx = rpmDigestInit(algo, flags); + if (ctx) { + bundle->digests[algo] = ctx; + if (algo < bundle->index_min) { + bundle->index_min = algo; + } + if (algo > bundle->index_max) { + bundle->index_max = algo; + } + } + } + } + return (ctx != NULL); +} + +int rpmDigestBundleUpdate(rpmDigestBundle bundle, const void *data, size_t len) +{ + int rc = 0; + if (bundle && data && len > 0) { + for (int i = bundle->index_min; i <= bundle->index_max; i++) { + DIGEST_CTX ctx = bundle->digests[i]; + if (ctx == NULL) + continue; + rc += rpmDigestUpdate(ctx, data, len); + } + bundle->nbytes += len; + } + return rc; +} + +int rpmDigestBundleFinal(rpmDigestBundle bundle, + int algo, void ** datap, size_t * lenp, int asAscii) +{ + int rc = 0; + if (bundle && algo >= bundle->index_min && algo <= bundle->index_max) { + rc = rpmDigestFinal(bundle->digests[algo], datap, lenp, asAscii); + bundle->digests[algo] = NULL; + } + return rc; +} + +DIGEST_CTX rpmDigestBundleDupCtx(rpmDigestBundle bundle, int algo) +{ + DIGEST_CTX dup = NULL; + if (bundle && algo >= bundle->index_min && algo <= bundle->index_max) { + dup = rpmDigestDup(bundle->digests[algo]); + } + return dup; +} + +DIGEST_CTX +rpmDigestDup(DIGEST_CTX octx) +{ + DIGEST_CTX nctx = NULL; + if (octx) { + HASHContext *hctx = HASH_Clone(octx->hashctx); + if (hctx) { + nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx)); + nctx->hashctx = hctx; + } + } + return nctx; +} + +RPM_GNUC_PURE +static HASH_HashType getHashType(int hashalgo) +{ + switch (hashalgo) { + case PGPHASHALGO_MD5: + return HASH_AlgMD5; + break; + case PGPHASHALGO_MD2: + return HASH_AlgMD2; + break; + case PGPHASHALGO_SHA1: + return HASH_AlgSHA1; + break; + case PGPHASHALGO_SHA256: + return HASH_AlgSHA256; + break; + case PGPHASHALGO_SHA384: + return HASH_AlgSHA384; + break; + case PGPHASHALGO_SHA512: + return HASH_AlgSHA512; + break; + case PGPHASHALGO_RIPEMD160: + case PGPHASHALGO_TIGER192: + case PGPHASHALGO_HAVAL_5_160: + default: + return HASH_AlgNULL; + break; + } +} + +size_t +rpmDigestLength(int hashalgo) +{ + return HASH_ResultLen(getHashType(hashalgo)); +} + +DIGEST_CTX +rpmDigestInit(int hashalgo, rpmDigestFlags flags) +{ + HASH_HashType type = getHashType(hashalgo); + HASHContext *hashctx = NULL; + DIGEST_CTX ctx = NULL; + + if (type == HASH_AlgNULL || rpmInitCrypto() < 0) + goto exit; + + if ((hashctx = HASH_Create(type)) != NULL) { + ctx = xcalloc(1, sizeof(*ctx)); + ctx->flags = flags; + ctx->algo = hashalgo; + ctx->hashctx = hashctx; + HASH_Begin(ctx->hashctx); + } + +DPRINTF((stderr, "*** Init(%x) ctx %p hashctx %p\n", flags, ctx, ctx->hashctx)); +exit: + return ctx; +} + +int +rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len) +{ + size_t partlen; + const unsigned char *ptr = data; + + if (ctx == NULL) + return -1; + +DPRINTF((stderr, "*** Update(%p,%p,%zd) hashctx %p \"%s\"\n", ctx, data, len, ctx->hashctx, ((char *)data))); + partlen = ~(unsigned int)0xFF; + while (len > 0) { + if (len < partlen) { + partlen = len; + } + HASH_Update(ctx->hashctx, ptr, partlen); + ptr += partlen; + len -= partlen; + } + return 0; +} + +int +rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii) +{ + unsigned char * digest; + unsigned int digestlen; + + if (ctx == NULL) + return -1; + digestlen = HASH_ResultLenContext(ctx->hashctx); + digest = xmalloc(digestlen); + +DPRINTF((stderr, "*** Final(%p,%p,%p,%zd) hashctx %p digest %p\n", ctx, datap, lenp, asAscii, ctx->hashctx, digest)); +/* FIX: check rc */ + HASH_End(ctx->hashctx, digest, (unsigned int *) &digestlen, digestlen); + + /* Return final digest. */ + if (!asAscii) { + if (lenp) *lenp = digestlen; + if (datap) { + *datap = digest; + digest = NULL; + } + } else { + if (lenp) *lenp = (2*digestlen) + 1; + if (datap) { + const uint8_t * s = (const uint8_t *) digest; + *datap = pgpHexStr(s, digestlen); + } + } + if (digest) { + memset(digest, 0, digestlen); /* In case it's sensitive */ + free(digest); + } + HASH_Destroy(ctx->hashctx); + memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ + free(ctx); + return 0; +} + diff --git a/rpmio/digest.h b/rpmio/digest.h new file mode 100644 index 0000000..0f44619 --- /dev/null +++ b/rpmio/digest.h @@ -0,0 +1,49 @@ +#ifndef _RPMDIGEST_H +#define _RPMDIGEST_H + +#include +#include +#include +#include + +#include +#include "rpmio/base64.h" + + +/** \ingroup rpmio + * Values parsed from OpenPGP signature/pubkey packet(s). + */ +struct pgpDigParams_s { + char * userid; + uint8_t * hash; + char * params[4]; + uint8_t tag; + + uint8_t version; /*!< version number. */ + pgpTime_t time; /*!< time that the key was created. */ + uint8_t pubkey_algo; /*!< public key algorithm. */ + + uint8_t hash_algo; + uint8_t sigtype; + uint8_t hashlen; + uint8_t signhash16[2]; + pgpKeyID_t signid; + uint8_t saved; +#define PGPDIG_SAVED_TIME (1 << 0) +#define PGPDIG_SAVED_ID (1 << 1) + +}; + +/** \ingroup rpmio + * Container for values parsed from an OpenPGP signature and public key. + */ +struct pgpDig_s { + struct pgpDigParams_s signature; + struct pgpDigParams_s pubkey; + + /* DSA/RSA parameters */ + SECKEYPublicKey *keydata; + SECItem *sigdata; +}; + +#endif /* _RPMDIGEST_H */ diff --git a/rpmio/macro.c b/rpmio/macro.c new file mode 100644 index 0000000..70ed88e --- /dev/null +++ b/rpmio/macro.c @@ -0,0 +1,1611 @@ +/** \ingroup rpmrc rpmio + * \file rpmio/macro.c + */ + +#include "system.h" +#include +#ifdef HAVE_GETOPT_H +#include +#else +extern char *optarg; +extern int optind; +#endif + +#if !defined(isblank) +#define isblank(_c) ((_c) == ' ' || (_c) == '\t') +#endif +#define iseol(_c) ((_c) == '\n' || (_c) == '\r') + +#define STREQ(_t, _f, _fn) ((_fn) == (sizeof(_t)-1) && rstreqn((_t), (_f), (_fn))) + +#define MACROBUFSIZ (BUFSIZ * 2) + +#include +#include +#include +#include +#include +#include +#include + +#ifdef WITH_LUA +#include "rpmio/rpmlua.h" +#endif + +#include "debug.h" + +/*! The structure used to store a macro. */ +struct rpmMacroEntry_s { + struct rpmMacroEntry_s *prev;/*!< Macro entry stack. */ + char *name; /*!< Macro name. */ + char *opts; /*!< Macro parameters (a la getopt) */ + char *body; /*!< Macro body. */ + int used; /*!< No. of expansions. */ + int level; /*!< Scoping level. */ +}; + +/*! The structure used to store the set of macros in a context. */ +struct rpmMacroContext_s { + rpmMacroEntry *macroTable; /*!< Macro entry table for context. */ + int macrosAllocated;/*!< No. of allocated macros. */ + int firstFree; /*!< No. of macros. */ +}; + + +static struct rpmMacroContext_s rpmGlobalMacroContext_s; +rpmMacroContext rpmGlobalMacroContext = &rpmGlobalMacroContext_s; + +static struct rpmMacroContext_s rpmCLIMacroContext_s; +rpmMacroContext rpmCLIMacroContext = &rpmCLIMacroContext_s; + +/** + * Macro expansion state. + */ +typedef struct MacroBuf_s { + char * buf; /*!< Expansion buffer. */ + size_t tpos; /*!< Current position in expansion buffer */ + size_t nb; /*!< No. bytes remaining in expansion buffer. */ + int depth; /*!< Current expansion depth. */ + int macro_trace; /*!< Pre-print macro to expand? */ + int expand_trace; /*!< Post-print macro expansion? */ + rpmMacroContext mc; +} * MacroBuf; + +#define _MAX_MACRO_DEPTH 16 +static int max_macro_depth = _MAX_MACRO_DEPTH; + +#define _PRINT_MACRO_TRACE 0 +static int print_macro_trace = _PRINT_MACRO_TRACE; + +#define _PRINT_EXPAND_TRACE 0 +static int print_expand_trace = _PRINT_EXPAND_TRACE; + +#define MACRO_CHUNK_SIZE 16 + +/* forward ref */ +static int expandMacro(MacroBuf mb, const char *src, size_t slen); + +/* =============================================================== */ + +/** + * Compare macro entries by name (qsort/bsearch). + * @param ap 1st macro entry + * @param bp 2nd macro entry + * @return result of comparison + */ +static int +compareMacroName(const void * ap, const void * bp) +{ + rpmMacroEntry ame = *((const rpmMacroEntry *)ap); + rpmMacroEntry bme = *((const rpmMacroEntry *)bp); + + if (ame == NULL && bme == NULL) + return 0; + if (ame == NULL) + return 1; + if (bme == NULL) + return -1; + return strcmp(ame->name, bme->name); +} + +/** + * Enlarge macro table. + * @param mc macro context + */ +static void +expandMacroTable(rpmMacroContext mc) +{ + if (mc->macroTable == NULL) { + mc->macrosAllocated = MACRO_CHUNK_SIZE; + mc->macroTable = (rpmMacroEntry *) + xmalloc(sizeof(*(mc->macroTable)) * mc->macrosAllocated); + mc->firstFree = 0; + } else { + mc->macrosAllocated += MACRO_CHUNK_SIZE; + mc->macroTable = (rpmMacroEntry *) + xrealloc(mc->macroTable, sizeof(*(mc->macroTable)) * + mc->macrosAllocated); + } + memset(&mc->macroTable[mc->firstFree], 0, MACRO_CHUNK_SIZE * sizeof(*(mc->macroTable))); +} + +/** + * Sort entries in macro table. + * @param mc macro context + */ +static void +sortMacroTable(rpmMacroContext mc) +{ + int i; + + if (mc == NULL || mc->macroTable == NULL) + return; + + qsort(mc->macroTable, mc->firstFree, sizeof(*(mc->macroTable)), + compareMacroName); + + /* Empty pointers are now at end of table. Reset first free index. */ + for (i = 0; i < mc->firstFree; i++) { + if (mc->macroTable[i] != NULL) + continue; + mc->firstFree = i; + break; + } +} + +void +rpmDumpMacroTable(rpmMacroContext mc, FILE * fp) +{ + int nempty = 0; + int nactive = 0; + + if (mc == NULL) mc = rpmGlobalMacroContext; + if (fp == NULL) fp = stderr; + + fprintf(fp, "========================\n"); + if (mc->macroTable != NULL) { + int i; + for (i = 0; i < mc->firstFree; i++) { + rpmMacroEntry me; + if ((me = mc->macroTable[i]) == NULL) { + /* XXX this should never happen */ + nempty++; + continue; + } + fprintf(fp, "%3d%c %s", me->level, + (me->used > 0 ? '=' : ':'), me->name); + if (me->opts && *me->opts) + fprintf(fp, "(%s)", me->opts); + if (me->body && *me->body) + fprintf(fp, "\t%s", me->body); + fprintf(fp, "\n"); + nactive++; + } + } + fprintf(fp, _("======================== active %d empty %d\n"), + nactive, nempty); +} + +/** + * Find entry in macro table. + * @param mc macro context + * @param name macro name + * @param namelen no. of bytes + * @return address of slot in macro table with name (or NULL) + */ +static rpmMacroEntry * +findEntry(rpmMacroContext mc, const char * name, size_t namelen) +{ + rpmMacroEntry key, *ret; + struct rpmMacroEntry_s keybuf; + char namebuf[namelen+1]; + const char *mname = name; + + if (mc == NULL) mc = rpmGlobalMacroContext; + if (mc->macroTable == NULL || mc->firstFree == 0) + return NULL; + + if (namelen > 0) { + strncpy(namebuf, name, namelen); + namebuf[namelen] = '\0'; + mname = namebuf; + } + + key = &keybuf; + memset(key, 0, sizeof(*key)); + key->name = (char *)mname; + ret = (rpmMacroEntry *) bsearch(&key, mc->macroTable, mc->firstFree, + sizeof(*(mc->macroTable)), compareMacroName); + /* XXX TODO: find 1st empty slot and return that */ + return ret; +} + +/* =============================================================== */ + +/** + * fgets(3) analogue that reads \ continuations. Last newline always trimmed. + * @param buf input buffer + * @param size inbut buffer size (bytes) + * @param fd file handle + * @return buffer, or NULL on end-of-file + */ +static char * +rdcl(char * buf, size_t size, FILE *f) +{ + char *q = buf - 1; /* initialize just before buffer. */ + size_t nb = 0; + size_t nread = 0; + int pc = 0, bc = 0; + char *p = buf; + + if (f != NULL) + do { + *(++q) = '\0'; /* terminate and move forward. */ + if (fgets(q, size, f) == NULL) /* read next line. */ + break; + nb = strlen(q); + nread += nb; /* trim trailing \r and \n */ + for (q += nb - 1; nb > 0 && iseol(*q); q--) + nb--; + for (; p <= q; p++) { + switch (*p) { + case '\\': + switch (*(p+1)) { + case '\0': break; + default: p++; break; + } + break; + case '%': + switch (*(p+1)) { + case '{': p++, bc++; break; + case '(': p++, pc++; break; + case '%': p++; break; + } + break; + case '{': if (bc > 0) bc++; break; + case '}': if (bc > 0) bc--; break; + case '(': if (pc > 0) pc++; break; + case ')': if (pc > 0) pc--; break; + } + } + if (nb == 0 || (*q != '\\' && !bc && !pc) || *(q+1) == '\0') { + *(++q) = '\0'; /* trim trailing \r, \n */ + break; + } + q++; p++; nb++; /* copy newline too */ + size -= nb; + if (*q == '\r') /* XXX avoid \r madness */ + *q = '\n'; + } while (size > 0); + return (nread > 0 ? buf : NULL); +} + +/** + * Return text between pl and matching pr characters. + * @param p start of text + * @param pl left char, i.e. '[', '(', '{', etc. + * @param pr right char, i.e. ']', ')', '}', etc. + * @return address of last char before pr (or NULL) + */ +static const char * +matchchar(const char * p, char pl, char pr) +{ + int lvl = 0; + char c; + + while ((c = *p++) != '\0') { + if (c == '\\') { /* Ignore escaped chars */ + p++; + continue; + } + if (c == pr) { + if (--lvl <= 0) return --p; + } else if (c == pl) + lvl++; + } + return (const char *)NULL; +} + +/** + * Pre-print macro expression to be expanded. + * @param mb macro expansion state + * @param s current expansion string + * @param se end of string + */ +static void +printMacro(MacroBuf mb, const char * s, const char * se) +{ + const char *senl; + const char *ellipsis; + int choplen; + + if (s >= se) { /* XXX just in case */ + fprintf(stderr, _("%3d>%*s(empty)"), mb->depth, + (2 * mb->depth + 1), ""); + return; + } + + if (s[-1] == '{') + s--; + + /* Print only to first end-of-line (or end-of-string). */ + for (senl = se; *senl && !iseol(*senl); senl++) + {}; + + /* Limit trailing non-trace output */ + choplen = 61 - (2 * mb->depth); + if ((senl - s) > choplen) { + senl = s + choplen; + ellipsis = "..."; + } else + ellipsis = ""; + + /* Substitute caret at end-of-macro position */ + fprintf(stderr, "%3d>%*s%%%.*s^", mb->depth, + (2 * mb->depth + 1), "", (int)(se - s), s); + if (se[1] != '\0' && (senl - (se+1)) > 0) + fprintf(stderr, "%-.*s%s", (int)(senl - (se+1)), se+1, ellipsis); + fprintf(stderr, "\n"); +} + +/** + * Post-print expanded macro expression. + * @param mb macro expansion state + * @param t current expansion string result + * @param te end of string + */ +static void +printExpansion(MacroBuf mb, const char * t, const char * te) +{ + const char *ellipsis; + int choplen; + + if (!(te > t)) { + rpmlog(RPMLOG_DEBUG, _("%3d<%*s(empty)\n"), mb->depth, (2 * mb->depth + 1), ""); + return; + } + + /* Shorten output which contains newlines */ + while (te > t && iseol(te[-1])) + te--; + ellipsis = ""; + if (mb->depth > 0) { + const char *tenl; + + /* Skip to last line of expansion */ + while ((tenl = strchr(t, '\n')) && tenl < te) + t = ++tenl; + + /* Limit expand output */ + choplen = 61 - (2 * mb->depth); + if ((te - t) > choplen) { + te = t + choplen; + ellipsis = "..."; + } + } + + rpmlog(RPMLOG_DEBUG,"%3d<%*s", mb->depth, (2 * mb->depth + 1), ""); + if (te > t) + rpmlog(RPMLOG_DEBUG, "%.*s%s", (int)(te - t), t, ellipsis); + rpmlog(RPMLOG_DEBUG, "\n"); +} + +#define SKIPBLANK(_s, _c) \ + while (((_c) = *(_s)) && isblank(_c)) \ + (_s)++; \ + +#define SKIPNONBLANK(_s, _c) \ + while (((_c) = *(_s)) && !(isblank(_c) || iseol(_c))) \ + (_s)++; \ + +#define COPYNAME(_ne, _s, _c) \ + { SKIPBLANK(_s,_c); \ + while(((_c) = *(_s)) && (risalnum(_c) || (_c) == '_')) \ + *(_ne)++ = *(_s)++; \ + *(_ne) = '\0'; \ + } + +#define COPYOPTS(_oe, _s, _c) \ + { \ + while(((_c) = *(_s)) && (_c) != ')') \ + *(_oe)++ = *(_s)++; \ + *(_oe) = '\0'; \ + } + +/** + * Macro-expand string src, return result in dynamically allocated buffer. + * @param mb macro expansion state + * @param src string to expand + * @param slen input string length (or 0 for strlen()) + * @retval target pointer to expanded string (malloced) + * @return result of expansion + */ +static int +expandThis(MacroBuf mb, const char * src, size_t slen, char **target) +{ + struct MacroBuf_s umb; + int rc; + + /* Copy other state from "parent", but we want a buffer of our own */ + umb = *mb; + umb.buf = NULL; + rc = expandMacro(&umb, src, slen); + *target = umb.buf; + + return rc; +} + +static void mbAppend(MacroBuf mb, char c) +{ + if (mb->nb < 1) { + mb->buf = xrealloc(mb->buf, mb->tpos + mb->nb + MACROBUFSIZ); + mb->nb += MACROBUFSIZ; + } + mb->buf[mb->tpos++] = c; + mb->nb--; +} + +static void mbAppendStr(MacroBuf mb, const char *str) +{ + size_t len = strlen(str); + if (len > mb->nb) { + mb->buf = xrealloc(mb->buf, mb->tpos + mb->nb + MACROBUFSIZ + len); + mb->nb += MACROBUFSIZ + len; + } + memcpy(mb->buf+mb->tpos, str, len); + mb->tpos += len; + mb->nb -= len; +} +/** + * Expand output of shell command into target buffer. + * @param mb macro expansion state + * @param cmd shell command + * @param clen no. bytes in shell command + * @return result of expansion + */ +static int +doShellEscape(MacroBuf mb, const char * cmd, size_t clen) +{ + char *buf = NULL; + FILE *shf; + int rc = 0; + int c; + + rc = expandThis(mb, cmd, clen, &buf); + if (rc) + goto exit; + + if ((shf = popen(buf, "r")) == NULL) { + rc = 1; + goto exit; + } + while((c = fgetc(shf)) != EOF) { + mbAppend(mb, c); + } + (void) pclose(shf); + + /* XXX delete trailing \r \n */ + while (iseol(mb->buf[mb->tpos-1])) { + mb->buf[mb->tpos--] = '\0'; + mb->nb++; + } + +exit: + _free(buf); + return rc; +} + +/** + * Parse (and execute) new macro definition. + * @param mb macro expansion state + * @param se macro definition to parse + * @param level macro recursion level + * @param expandbody should body be expanded? + * @return address to continue parsing + */ +static const char * +doDefine(MacroBuf mb, const char * se, int level, int expandbody) +{ + const char *s = se; + size_t blen = MACROBUFSIZ; + char *buf = xmalloc(blen); + char *n = buf, *ne = n; + char *o = NULL, *oe; + char *b, *be, *ebody = NULL; + int c; + int oc = ')'; + + /* Copy name */ + COPYNAME(ne, s, c); + + /* Copy opts (if present) */ + oe = ne + 1; + if (*s == '(') { + s++; /* skip ( */ + o = oe; + COPYOPTS(oe, s, oc); + s++; /* skip ) */ + } + + /* Copy body, skipping over escaped newlines */ + b = be = oe + 1; + SKIPBLANK(s, c); + if (c == '{') { /* XXX permit silent {...} grouping */ + if ((se = matchchar(s, c, '}')) == NULL) { + rpmlog(RPMLOG_ERR, + _("Macro %%%s has unterminated body\n"), n); + se = s; /* XXX W2DO? */ + goto exit; + } + s++; /* XXX skip { */ + strncpy(b, s, (se - s)); + b[se - s] = '\0'; + be += strlen(b); + se++; /* XXX skip } */ + s = se; /* move scan forward */ + } else { /* otherwise free-field */ + int bc = 0, pc = 0; + while (*s && (bc || pc || !iseol(*s))) { + switch (*s) { + case '\\': + switch (*(s+1)) { + case '\0': break; + default: s++; break; + } + break; + case '%': + switch (*(s+1)) { + case '{': *be++ = *s++; bc++; break; + case '(': *be++ = *s++; pc++; break; + case '%': *be++ = *s++; break; + } + break; + case '{': if (bc > 0) bc++; break; + case '}': if (bc > 0) bc--; break; + case '(': if (pc > 0) pc++; break; + case ')': if (pc > 0) pc--; break; + } + *be++ = *s++; + } + *be = '\0'; + + if (bc || pc) { + rpmlog(RPMLOG_ERR, + _("Macro %%%s has unterminated body\n"), n); + se = s; /* XXX W2DO? */ + goto exit; + } + + /* Trim trailing blanks/newlines */ + while (--be >= b && (c = *be) && (isblank(c) || iseol(c))) + {}; + *(++be) = '\0'; /* one too far */ + } + + /* Move scan over body */ + while (iseol(*s)) + s++; + se = s; + + /* Names must start with alphabetic or _ and be at least 3 chars */ + if (!((c = *n) && (risalpha(c) || c == '_') && (ne - n) > 2)) { + rpmlog(RPMLOG_ERR, + _("Macro %%%s has illegal name (%%define)\n"), n); + goto exit; + } + + /* Options must be terminated with ')' */ + if (o && oc != ')') { + rpmlog(RPMLOG_ERR, _("Macro %%%s has unterminated opts\n"), n); + goto exit; + } + + if ((be - b) < 1) { + rpmlog(RPMLOG_ERR, _("Macro %%%s has empty body\n"), n); + goto exit; + } + + if (expandbody) { + if (expandThis(mb, b, 0, &ebody)) { + rpmlog(RPMLOG_ERR, _("Macro %%%s failed to expand\n"), n); + goto exit; + } + b = ebody; + } + + addMacro(mb->mc, n, o, b, (level - 1)); + +exit: + _free(buf); + _free(ebody); + return se; +} + +/** + * Parse (and execute) macro undefinition. + * @param mc macro context + * @param se macro name to undefine + * @return address to continue parsing + */ +static const char * +doUndefine(rpmMacroContext mc, const char * se) +{ + const char *s = se; + char *buf = xmalloc(MACROBUFSIZ); + char *n = buf, *ne = n; + int c; + + COPYNAME(ne, s, c); + + /* Move scan over body */ + while (iseol(*s)) + s++; + se = s; + + /* Names must start with alphabetic or _ and be at least 3 chars */ + if (!((c = *n) && (risalpha(c) || c == '_') && (ne - n) > 2)) { + rpmlog(RPMLOG_ERR, + _("Macro %%%s has illegal name (%%undefine)\n"), n); + goto exit; + } + + delMacro(mc, n); + +exit: + _free(buf); + return se; +} + +/** + * Push new macro definition onto macro entry stack. + * @param mep address of macro entry slot + * @param n macro name + * @param o macro parameters (NULL if none) + * @param b macro body (NULL becomes "") + * @param level macro recursion level + */ +static void +pushMacro(rpmMacroEntry * mep, + const char * n, const char * o, + const char * b, int level) +{ + rpmMacroEntry prev = (mep && *mep ? *mep : NULL); + rpmMacroEntry me = (rpmMacroEntry) xmalloc(sizeof(*me)); + + me->prev = prev; + me->name = (prev ? prev->name : xstrdup(n)); + me->opts = (o ? xstrdup(o) : NULL); + me->body = xstrdup(b ? b : ""); + me->used = 0; + me->level = level; + if (mep) + *mep = me; + else + me = _free(me); +} + +/** + * Pop macro definition from macro entry stack. + * @param mep address of macro entry slot + */ +static void +popMacro(rpmMacroEntry * mep) +{ + rpmMacroEntry me = (*mep ? *mep : NULL); + + if (me) { + /* XXX cast to workaround const */ + if ((*mep = me->prev) == NULL) + me->name = _free(me->name); + me->opts = _free(me->opts); + me->body = _free(me->body); + me = _free(me); + } +} + +/** + * Free parsed arguments for parameterized macro. + * @param mb macro expansion state + */ +static void +freeArgs(MacroBuf mb) +{ + rpmMacroContext mc = mb->mc; + int ndeleted = 0; + int i; + + if (mc == NULL || mc->macroTable == NULL) + return; + + /* Delete dynamic macro definitions */ + for (i = 0; i < mc->firstFree; i++) { + rpmMacroEntry *mep, me; + int skiptest = 0; + mep = &mc->macroTable[i]; + me = *mep; + + if (me == NULL) /* XXX this should never happen */ + continue; + if (me->level < mb->depth) + continue; + if (strlen(me->name) == 1 && strchr("#*0", *me->name)) { + if (*me->name == '*' && me->used > 0) + skiptest = 1; /* XXX skip test for %# %* %0 */ + } else if (!skiptest && me->used <= 0) { +#if NOTYET + rpmlog(RPMLOG_ERR, + _("Macro %%%s (%s) was not used below level %d\n"), + me->name, me->body, me->level); +#endif + } + popMacro(mep); + if (!(mep && *mep)) + ndeleted++; + } + + /* If any deleted macros, sort macro table */ + if (ndeleted) + sortMacroTable(mc); +} + +/** + * Parse arguments (to next new line) for parameterized macro. + * @todo Use popt rather than getopt to parse args. + * @param mb macro expansion state + * @param me macro entry slot + * @param se arguments to parse + * @param lastc stop parsing at lastc + * @return address to continue parsing + */ +static const char * +grabArgs(MacroBuf mb, const rpmMacroEntry me, const char * se, + const char * lastc) +{ + const char *opts; + char *args = NULL; + ARGV_t argv = NULL; + int argc = 0; + int c; + + /* Copy macro name as argv[0] */ + argvAdd(&argv, me->name); + addMacro(mb->mc, "0", NULL, me->name, mb->depth); + + /* + * Make a copy of se up to lastc string that we can pass to argvSplit(). + * Append the results to main argv. + */ + { ARGV_t av = NULL; + char *s = xcalloc((lastc-se)+1, sizeof(*s)); + memcpy(s, se, (lastc-se)); + + argvSplit(&av, s, " \t"); + argvAppend(&argv, av); + + argvFree(av); + free(s); + } + + /* + * The macro %* analoguous to the shell's $* means "Pass all non-macro + * parameters." Consequently, there needs to be a macro that means "Pass all + * (including macro parameters) options". This is useful for verifying + * parameters during expansion and yet transparently passing all parameters + * through for higher level processing (e.g. %description and/or %setup). + * This is the (potential) justification for %{**} ... + */ + args = argvJoin(argv + 1, " "); + addMacro(mb->mc, "**", NULL, args, mb->depth); + free(args); + + /* + * POSIX states optind must be 1 before any call but glibc uses 0 + * to (re)initialize getopt structures, eww. + */ +#ifdef __GLIBC__ + optind = 0; +#else + optind = 1; +#endif + + opts = me->opts; + argc = argvCount(argv); + + /* Define option macros. */ + while((c = getopt(argc, argv, opts)) != -1) + { + char *name = NULL, *body = NULL; + if (c == '?' || strchr(opts, c) == NULL) { + rpmlog(RPMLOG_ERR, _("Unknown option %c in %s(%s)\n"), + (char)c, me->name, opts); + goto exit; + } + + rasprintf(&name, "-%c", c); + if (optarg) { + rasprintf(&body, "-%c %s", c, optarg); + } else { + rasprintf(&body, "-%c", c); + } + addMacro(mb->mc, name, NULL, body, mb->depth); + free(name); + free(body); + + if (optarg) { + rasprintf(&name, "-%c*", c); + addMacro(mb->mc, name, NULL, optarg, mb->depth); + free(name); + } + } + + /* Add argument count (remaining non-option items) as macro. */ + { char *ac = NULL; + rasprintf(&ac, "%d", (argc - optind)); + addMacro(mb->mc, "#", NULL, ac, mb->depth); + free(ac); + } + + /* Add macro for each argument */ + if (argc - optind) { + for (c = optind; c < argc; c++) { + char *name = NULL; + rasprintf(&name, "%d", (c - optind + 1)); + addMacro(mb->mc, name, NULL, argv[c], mb->depth); + free(name); + } + } + + /* Add concatenated unexpanded arguments as yet another macro. */ + args = argvJoin(argv + optind, " "); + addMacro(mb->mc, "*", NULL, args ? args : "", mb->depth); + free(args); + +exit: + argvFree(argv); + return *lastc ? lastc + 1 : lastc; +} + +/** + * Perform macro message output + * @param mb macro expansion state + * @param waserror use rpmlog()? + * @param msg message to ouput + * @param msglen no. of bytes in message + */ +static void +doOutput(MacroBuf mb, int waserror, const char * msg, size_t msglen) +{ + char *buf = NULL; + + (void) expandThis(mb, msg, msglen, &buf); + if (waserror) + rpmlog(RPMLOG_ERR, "%s\n", buf); + else + fprintf(stderr, "%s", buf); + _free(buf); +} + +/** + * Execute macro primitives. + * @param mb macro expansion state + * @param negate should logic be inverted? + * @param f beginning of field f + * @param fn length of field f + * @param g beginning of field g + * @param gn length of field g + */ +static void +doFoo(MacroBuf mb, int negate, const char * f, size_t fn, + const char * g, size_t gn) +{ + char *buf = NULL; + char *b = NULL, *be; + int c; + + if (g != NULL) { + (void) expandThis(mb, g, gn, &buf); + } else { + buf = xmalloc(MACROBUFSIZ + fn + gn); + buf[0] = '\0'; + } + if (STREQ("basename", f, fn)) { + if ((b = strrchr(buf, '/')) == NULL) + b = buf; + else + b++; +#if NOTYET + /* XXX watchout for conflict with %dir */ + } else if (STREQ("dirname", f, fn)) { + if ((b = strrchr(buf, '/')) != NULL) + *b = '\0'; + b = buf; +#endif + } else if (STREQ("suffix", f, fn)) { + if ((b = strrchr(buf, '.')) != NULL) + b++; + } else if (STREQ("expand", f, fn)) { + b = buf; + } else if (STREQ("verbose", f, fn)) { + if (negate) + b = (rpmIsVerbose() ? NULL : buf); + else + b = (rpmIsVerbose() ? buf : NULL); + } else if (STREQ("url2path", f, fn) || STREQ("u2p", f, fn)) { + (void)urlPath(buf, (const char **)&b); + if (*b == '\0') b = "/"; + } else if (STREQ("uncompress", f, fn)) { + rpmCompressedMagic compressed = COMPRESSED_OTHER; + for (b = buf; (c = *b) && isblank(c);) + b++; + for (be = b; (c = *be) && !isblank(c);) + be++; + *be++ = '\0'; + (void) rpmFileIsCompressed(b, &compressed); + switch(compressed) { + default: + case COMPRESSED_NOT: + sprintf(be, "%%__cat %s", b); + break; + case COMPRESSED_OTHER: + sprintf(be, "%%__gzip -dc %s", b); + break; + case COMPRESSED_BZIP2: + sprintf(be, "%%__bzip2 -dc %s", b); + break; + case COMPRESSED_ZIP: + sprintf(be, "%%__unzip %s", b); + break; + case COMPRESSED_LZMA: + case COMPRESSED_XZ: + sprintf(be, "%%__xz -dc %s", b); + break; + case COMPRESSED_LZIP: + sprintf(be, "%%__lzip -dc %s", b); + break; + case COMPRESSED_LRZIP: + sprintf(be, "%%__lrzip -dqo- %s", b); + break; + } + b = be; + } else if (STREQ("getenv", f, fn)) { + b = getenv(buf); + } else if (STREQ("getconfdir", f, fn)) { + sprintf(buf, "%s", rpmConfigDir()); + b = buf; + } else if (STREQ("S", f, fn)) { + for (b = buf; (c = *b) && risdigit(c);) + b++; + if (!c) { /* digit index */ + b++; + sprintf(b, "%%SOURCE%s", buf); + } else + b = buf; + } else if (STREQ("P", f, fn)) { + for (b = buf; (c = *b) && risdigit(c);) + b++; + if (!c) { /* digit index */ + b++; + sprintf(b, "%%PATCH%s", buf); + } else + b = buf; + } else if (STREQ("F", f, fn)) { + b = buf + strlen(buf) + 1; + sprintf(b, "file%s.file", buf); + } + + if (b) { + (void) expandMacro(mb, b, 0); + } + free(buf); +} + +/** + * The main macro recursion loop. + * @param mb macro expansion state + * @param src string to expand + * @return 0 on success, 1 on failure + */ +static int +expandMacro(MacroBuf mb, const char *src, size_t slen) +{ + rpmMacroEntry *mep; + rpmMacroEntry me; + const char *s = src, *se; + const char *f, *fe; + const char *g, *ge; + size_t fn, gn, tpos; + int c; + int rc = 0; + int negate; + const char * lastc; + int chkexist; + char *source = NULL; + + /* Handle non-terminated substrings by creating a terminated copy */ + if (!slen) + slen = strlen(src); + source = xmalloc(slen + 1); + strncpy(source, src, slen); + source[slen] = '\0'; + s = source; + + if (mb->buf == NULL) { + size_t blen = MACROBUFSIZ + strlen(s); + mb->buf = xcalloc(blen + 1, sizeof(*mb->buf)); + mb->tpos = 0; + mb->nb = blen; + } + tpos = mb->tpos; /* save expansion pointer for printExpand */ + + if (++mb->depth > max_macro_depth) { + rpmlog(RPMLOG_ERR, + _("Too many levels of recursion in macro expansion. It is likely caused by recursive macro declaration.\n")); + mb->depth--; + mb->expand_trace = 1; + _free(source); + return 1; + } + + while (rc == 0 && (c = *s) != '\0') { + s++; + /* Copy text until next macro */ + switch(c) { + case '%': + if (*s) { /* Ensure not end-of-string. */ + if (*s != '%') + break; + s++; /* skip first % in %% */ + } + default: + mbAppend(mb, c); + continue; + break; + } + + /* Expand next macro */ + f = fe = NULL; + g = ge = NULL; + if (mb->depth > 1) /* XXX full expansion for outermost level */ + tpos = mb->tpos; /* save expansion pointer for printExpand */ + negate = 0; + lastc = NULL; + chkexist = 0; + switch ((c = *s)) { + default: /* %name substitution */ + while (strchr("!?", *s) != NULL) { + switch(*s++) { + case '!': + negate = ((negate + 1) % 2); + break; + case '?': + chkexist++; + break; + } + } + f = se = s; + if (*se == '-') + se++; + while((c = *se) && (risalnum(c) || c == '_')) + se++; + /* Recognize non-alnum macros too */ + switch (*se) { + case '*': + se++; + if (*se == '*') se++; + break; + case '#': + se++; + break; + default: + break; + } + fe = se; + /* For "%name " macros ... */ + if ((c = *fe) && isblank(c)) + if ((lastc = strchr(fe,'\n')) == NULL) + lastc = strchr(fe, '\0'); + break; + case '(': /* %(...) shell escape */ + if ((se = matchchar(s, c, ')')) == NULL) { + rpmlog(RPMLOG_ERR, + _("Unterminated %c: %s\n"), (char)c, s); + rc = 1; + continue; + } + if (mb->macro_trace) + printMacro(mb, s, se+1); + + s++; /* skip ( */ + rc = doShellEscape(mb, s, (se - s)); + se++; /* skip ) */ + + s = se; + continue; + break; + case '{': /* %{...}/%{...:...} substitution */ + if ((se = matchchar(s, c, '}')) == NULL) { + rpmlog(RPMLOG_ERR, + _("Unterminated %c: %s\n"), (char)c, s); + rc = 1; + continue; + } + f = s+1;/* skip { */ + se++; /* skip } */ + while (strchr("!?", *f) != NULL) { + switch(*f++) { + case '!': + negate = ((negate + 1) % 2); + break; + case '?': + chkexist++; + break; + } + } + for (fe = f; (c = *fe) && !strchr(" :}", c);) + fe++; + switch (c) { + case ':': + g = fe + 1; + ge = se - 1; + break; + case ' ': + lastc = se-1; + break; + default: + break; + } + break; + } + + /* XXX Everything below expects fe > f */ + fn = (fe - f); + gn = (ge - g); + if ((fe - f) <= 0) { +/* XXX Process % in unknown context */ + c = '%'; /* XXX only need to save % */ + mbAppend(mb, c); +#if 0 + rpmlog(RPMLOG_ERR, + _("A %% is followed by an unparseable macro\n")); +#endif + s = se; + continue; + } + + if (mb->macro_trace) + printMacro(mb, s, se); + + /* Expand builtin macros */ + if (STREQ("global", f, fn)) { + s = doDefine(mb, se, RMIL_GLOBAL, 1); + continue; + } + if (STREQ("define", f, fn)) { + s = doDefine(mb, se, mb->depth, 0); + continue; + } + if (STREQ("undefine", f, fn)) { + s = doUndefine(mb->mc, se); + continue; + } + + if (STREQ("echo", f, fn) || + STREQ("warn", f, fn) || + STREQ("error", f, fn)) { + int waserror = 0; + if (STREQ("error", f, fn)) + waserror = 1; + if (g != NULL && g < ge) + doOutput(mb, waserror, g, gn); + else + doOutput(mb, waserror, f, fn); + s = se; + continue; + } + + if (STREQ("trace", f, fn)) { + /* XXX TODO restore expand_trace/macro_trace to 0 on return */ + mb->expand_trace = mb->macro_trace = (negate ? 0 : mb->depth); + if (mb->depth == 1) { + print_macro_trace = mb->macro_trace; + print_expand_trace = mb->expand_trace; + } + s = se; + continue; + } + + if (STREQ("dump", f, fn)) { + rpmDumpMacroTable(mb->mc, NULL); + while (iseol(*se)) + se++; + s = se; + continue; + } + +#ifdef WITH_LUA + if (STREQ("lua", f, fn)) { + rpmlua lua = NULL; /* Global state. */ + const char *ls = s+sizeof("{lua:")-1; + const char *lse = se-sizeof("}")+1; + char *scriptbuf = (char *)xmalloc((lse-ls)+1); + char *printbuf; + memcpy(scriptbuf, ls, lse-ls); + scriptbuf[lse-ls] = '\0'; + rpmluaPushPrintBuffer(lua); + if (rpmluaRunScript(lua, scriptbuf, NULL) == -1) + rc = 1; + printbuf = rpmluaPopPrintBuffer(lua); + if (printbuf) { + mbAppendStr(mb, printbuf); + free(printbuf); + } + free(scriptbuf); + s = se; + continue; + } +#endif + + /* XXX necessary but clunky */ + if (STREQ("basename", f, fn) || + STREQ("suffix", f, fn) || + STREQ("expand", f, fn) || + STREQ("verbose", f, fn) || + STREQ("uncompress", f, fn) || + STREQ("url2path", f, fn) || + STREQ("u2p", f, fn) || + STREQ("getenv", f, fn) || + STREQ("getconfdir", f, fn) || + STREQ("S", f, fn) || + STREQ("P", f, fn) || + STREQ("F", f, fn)) { + /* FIX: verbose may be set */ + doFoo(mb, negate, f, fn, g, gn); + s = se; + continue; + } + + /* Expand defined macros */ + mep = findEntry(mb->mc, f, fn); + me = (mep ? *mep : NULL); + + /* XXX Special processing for flags */ + if (*f == '-') { + if (me) + me->used++; /* Mark macro as used */ + if ((me == NULL && !negate) || /* Without -f, skip %{-f...} */ + (me != NULL && negate)) { /* With -f, skip %{!-f...} */ + s = se; + continue; + } + + if (g && g < ge) { /* Expand X in %{-f:X} */ + rc = expandMacro(mb, g, gn); + } else + if (me && me->body && *me->body) {/* Expand %{-f}/%{-f*} */ + rc = expandMacro(mb, me->body, 0); + } + s = se; + continue; + } + + /* XXX Special processing for macro existence */ + if (chkexist) { + if ((me == NULL && !negate) || /* Without -f, skip %{?f...} */ + (me != NULL && negate)) { /* With -f, skip %{!?f...} */ + s = se; + continue; + } + if (g && g < ge) { /* Expand X in %{?f:X} */ + rc = expandMacro(mb, g, gn); + } else + if (me && me->body && *me->body) { /* Expand %{?f}/%{?f*} */ + rc = expandMacro(mb, me->body, 0); + } + s = se; + continue; + } + + if (me == NULL) { /* leave unknown %... as is */ + /* XXX hack to permit non-overloaded %foo to be passed */ + c = '%'; /* XXX only need to save % */ + mbAppend(mb, c); + continue; + } + + /* Setup args for "%name " macros with opts */ + if (me && me->opts != NULL) { + if (lastc != NULL) { + se = grabArgs(mb, me, fe, lastc); + } else { + addMacro(mb->mc, "**", NULL, "", mb->depth); + addMacro(mb->mc, "*", NULL, "", mb->depth); + addMacro(mb->mc, "#", NULL, "0", mb->depth); + addMacro(mb->mc, "0", NULL, me->name, mb->depth); + } + } + + /* Recursively expand body of macro */ + if (me->body && *me->body) { + rc = expandMacro(mb, me->body, 0); + if (rc == 0) + me->used++; /* Mark macro as used */ + } + + /* Free args for "%name " macros with opts */ + if (me->opts != NULL) + freeArgs(mb); + + s = se; + } + + mb->buf[mb->tpos] = '\0'; + mb->depth--; + if (rc != 0 || mb->expand_trace) + printExpansion(mb, mb->buf+tpos, mb->buf+mb->tpos); + _free(source); + return rc; +} + + +/* =============================================================== */ + +static int doExpandMacros(rpmMacroContext mc, const char *src, char **target) +{ + MacroBuf mb = xcalloc(1, sizeof(*mb)); + int rc = 0; + + if (mc == NULL) mc = rpmGlobalMacroContext; + + mb->buf = NULL; + mb->depth = 0; + mb->macro_trace = print_macro_trace; + mb->expand_trace = print_expand_trace; + mb->mc = mc; + + rc = expandMacro(mb, src, 0); + + mb->buf[mb->tpos] = '\0'; /* XXX just in case */ + /* expanded output is usually much less than alloced buffer, downsize */ + *target = xrealloc(mb->buf, mb->tpos + 1); + + _free(mb); + return rc; +} + +int expandMacros(void * spec, rpmMacroContext mc, char * sbuf, size_t slen) +{ + char *target = NULL; + int rc = doExpandMacros(mc, sbuf, &target); + rstrlcpy(sbuf, target, slen); + free(target); + return rc; +} + +void +addMacro(rpmMacroContext mc, + const char * n, const char * o, const char * b, int level) +{ + rpmMacroEntry * mep; + + if (mc == NULL) mc = rpmGlobalMacroContext; + + /* If new name, expand macro table */ + if ((mep = findEntry(mc, n, 0)) == NULL) { + if (mc->firstFree == mc->macrosAllocated) + expandMacroTable(mc); + if (mc->macroTable != NULL) + mep = mc->macroTable + mc->firstFree++; + } + + if (mep != NULL) { + /* Push macro over previous definition */ + pushMacro(mep, n, o, b, level); + + /* If new name, sort macro table */ + if ((*mep)->prev == NULL) + sortMacroTable(mc); + } +} + +void +delMacro(rpmMacroContext mc, const char * n) +{ + rpmMacroEntry * mep; + + if (mc == NULL) mc = rpmGlobalMacroContext; + /* If name exists, pop entry */ + if ((mep = findEntry(mc, n, 0)) != NULL) { + popMacro(mep); + /* If deleted name, sort macro table */ + if (!(mep && *mep)) + sortMacroTable(mc); + } +} + +int +rpmDefineMacro(rpmMacroContext mc, const char * macro, int level) +{ + MacroBuf mb = xcalloc(1, sizeof(*mb)); + + /* XXX just enough to get by */ + mb->mc = (mc ? mc : rpmGlobalMacroContext); + (void) doDefine(mb, macro, level, 0); + _free(mb); + return 0; +} + +void +rpmLoadMacros(rpmMacroContext mc, int level) +{ + + if (mc == NULL || mc == rpmGlobalMacroContext) + return; + + if (mc->macroTable != NULL) { + int i; + for (i = 0; i < mc->firstFree; i++) { + rpmMacroEntry *mep, me; + mep = &mc->macroTable[i]; + me = *mep; + + if (me == NULL) /* XXX this should never happen */ + continue; + addMacro(NULL, me->name, me->opts, me->body, (level - 1)); + } + } +} + +int +rpmLoadMacroFile(rpmMacroContext mc, const char * fn) +{ + FILE *fd = fopen(fn, "r"); + size_t blen = MACROBUFSIZ; + char *buf = xmalloc(blen); + int rc = -1; + + if (fd == NULL || ferror(fd)) { + if (fd) (void) fclose(fd); + goto exit; + } + + /* XXX Assume new fangled macro expansion */ + max_macro_depth = 16; + + buf[0] = '\0'; + while(rdcl(buf, blen, fd) != NULL) { + char c, *n; + + n = buf; + SKIPBLANK(n, c); + + if (c != '%') + continue; + n++; /* skip % */ + rc = rpmDefineMacro(mc, n, RMIL_MACROFILES); + } + rc = fclose(fd); + +exit: + _free(buf); + return rc; +} + +void +rpmInitMacros(rpmMacroContext mc, const char * macrofiles) +{ + ARGV_t pattern, globs = NULL; + + if (macrofiles == NULL) + return; + + argvSplit(&globs, macrofiles, ":"); + for (pattern = globs; *pattern; pattern++) { + ARGV_t path, files = NULL; + + /* Glob expand the macro file path element, expanding ~ to $HOME. */ + if (rpmGlob(*pattern, NULL, &files) != 0) { + continue; + } + + /* Read macros from each file. */ + for (path = files; *path; path++) { + if (rpmFileHasSuffix(*path, ".rpmnew") || + rpmFileHasSuffix(*path, ".rpmsave") || + rpmFileHasSuffix(*path, ".rpmorig")) { + continue; + } + (void) rpmLoadMacroFile(mc, *path); + } + argvFree(files); + } + argvFree(globs); + + /* Reload cmdline macros */ + rpmLoadMacros(rpmCLIMacroContext, RMIL_CMDLINE); +} + +void +rpmFreeMacros(rpmMacroContext mc) +{ + + if (mc == NULL) mc = rpmGlobalMacroContext; + + if (mc->macroTable != NULL) { + int i; + for (i = 0; i < mc->firstFree; i++) { + rpmMacroEntry me; + while ((me = mc->macroTable[i]) != NULL) { + /* XXX cast to workaround const */ + if ((mc->macroTable[i] = me->prev) == NULL) + me->name = _free(me->name); + me->opts = _free(me->opts); + me->body = _free(me->body); + me = _free(me); + } + } + mc->macroTable = _free(mc->macroTable); + } + memset(mc, 0, sizeof(*mc)); +} + +char * +rpmExpand(const char *arg, ...) +{ + size_t blen = 0; + char *buf = NULL, *ret = NULL; + char *pe; + const char *s; + va_list ap; + + if (arg == NULL) { + ret = xstrdup(""); + goto exit; + } + + /* precalculate unexpanded size */ + va_start(ap, arg); + for (s = arg; s != NULL; s = va_arg(ap, const char *)) + blen += strlen(s); + va_end(ap); + + buf = xmalloc(blen + 1); + buf[0] = '\0'; + + va_start(ap, arg); + for (pe = buf, s = arg; s != NULL; s = va_arg(ap, const char *)) + pe = stpcpy(pe, s); + va_end(ap); + + (void) doExpandMacros(NULL, buf, &ret); + + free(buf); +exit: + return ret; +} + +int +rpmExpandNumeric(const char *arg) +{ + char *val; + int rc; + + if (arg == NULL) + return 0; + + val = rpmExpand(arg, NULL); + if (!(val && *val != '%')) + rc = 0; + else if (*val == 'Y' || *val == 'y') + rc = 1; + else if (*val == 'N' || *val == 'n') + rc = 0; + else { + char *end; + rc = strtol(val, &end, 0); + if (!(end && *end == '\0')) + rc = 0; + } + val = _free(val); + + return rc; +} diff --git a/rpmio/rpmfileutil.c b/rpmio/rpmfileutil.c new file mode 100644 index 0000000..3641341 --- /dev/null +++ b/rpmio/rpmfileutil.c @@ -0,0 +1,777 @@ +#include "system.h" + +#if HAVE_GELF_H + +#include + +#if !defined(DT_GNU_PRELINKED) +#define DT_GNU_PRELINKED 0x6ffffdf5 +#endif +#if !defined(DT_GNU_LIBLIST) +#define DT_GNU_LIBLIST 0x6ffffef9 +#endif + +#endif + +#if defined(HAVE_MMAP) +#include +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "rpmio/rpmio_internal.h" + +#include "debug.h" + +static const char *rpm_config_dir = NULL; + +static int open_dso(const char * path, pid_t * pidp, rpm_loff_t *fsizep) +{ + static const char * cmd = NULL; + static int initted = 0; + int fdno; + + if (!initted) { + cmd = rpmExpand("%{?__prelink_undo_cmd}", NULL); + initted++; + } + + if (pidp) *pidp = 0; + + if (fsizep) { + struct stat sb, * st = &sb; + if (stat(path, st) < 0) + return -1; + *fsizep = st->st_size; + } + + fdno = open(path, O_RDONLY); + if (fdno < 0) + return fdno; + + if (!(cmd && *cmd)) + return fdno; + +#if HAVE_GELF_H && HAVE_LIBELF + { Elf *elf = NULL; + Elf_Scn *scn = NULL; + Elf_Data *data = NULL; + GElf_Ehdr ehdr; + GElf_Shdr shdr; + GElf_Dyn dyn; + int bingo; + + (void) elf_version(EV_CURRENT); + + if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL + || elf_kind(elf) != ELF_K_ELF + || gelf_getehdr(elf, &ehdr) == NULL + || !(ehdr.e_type == ET_DYN || ehdr.e_type == ET_EXEC)) + goto exit; + + bingo = 0; + while (!bingo && (scn = elf_nextscn(elf, scn)) != NULL) { + (void) gelf_getshdr(scn, &shdr); + if (shdr.sh_type != SHT_DYNAMIC) + continue; + while (!bingo && (data = elf_getdata (scn, data)) != NULL) { + int maxndx = data->d_size / shdr.sh_entsize; + int ndx; + + for (ndx = 0; ndx < maxndx; ++ndx) { + (void) gelf_getdyn (data, ndx, &dyn); + if (!(dyn.d_tag == DT_GNU_PRELINKED || dyn.d_tag == DT_GNU_LIBLIST)) + continue; + bingo = 1; + break; + } + } + } + + if (pidp != NULL && bingo) { + int pipes[2]; + pid_t pid; + int xx; + + xx = close(fdno); + pipes[0] = pipes[1] = -1; + xx = pipe(pipes); + if (!(pid = fork())) { + ARGV_t av, lib; + argvSplit(&av, cmd, " "); + + xx = close(pipes[0]); + xx = dup2(pipes[1], STDOUT_FILENO); + xx = close(pipes[1]); + if ((lib = argvSearch(av, "library", NULL)) != NULL) { + *lib = (char *) path; + unsetenv("MALLOC_CHECK_"); + xx = execve(av[0], av+1, environ); + } + _exit(127); + } + *pidp = pid; + fdno = pipes[0]; + xx = close(pipes[1]); + } + +exit: + if (elf) (void) elf_end(elf); + } +#endif + + return fdno; +} + +int rpmDoDigest(int algo, const char * fn,int asAscii, + unsigned char * digest, rpm_loff_t * fsizep) +{ + const char * path; + urltype ut = urlPath(fn, &path); + unsigned char * dig = NULL; + size_t diglen; + unsigned char buf[32*BUFSIZ]; + FD_t fd; + rpm_loff_t fsize = 0; + pid_t pid = 0; + int rc = 0; + int fdno; + + fdno = open_dso(path, &pid, &fsize); + if (fdno < 0) { + rc = 1; + goto exit; + } + + /* file to large (32 MB), do not mmap file */ + if (fsize > (size_t) 32*1024*1024) + if (ut == URL_IS_PATH || ut == URL_IS_UNKNOWN) + ut = URL_IS_DASH; /* force fd io */ + + switch(ut) { + case URL_IS_PATH: + case URL_IS_UNKNOWN: +#ifdef HAVE_MMAP + if (pid == 0) { + int xx; + DIGEST_CTX ctx; + void * mapped; + + if (fsize) { + mapped = mmap(NULL, fsize, PROT_READ, MAP_SHARED, fdno, 0); + if (mapped == MAP_FAILED) { + xx = close(fdno); + rc = 1; + break; + } + +#ifdef MADV_SEQUENTIAL + xx = madvise(mapped, fsize, MADV_SEQUENTIAL); +#endif + } + + ctx = rpmDigestInit(algo, RPMDIGEST_NONE); + if (fsize) + xx = rpmDigestUpdate(ctx, mapped, fsize); + xx = rpmDigestFinal(ctx, (void **)&dig, &diglen, asAscii); + if (fsize) + xx = munmap(mapped, fsize); + xx = close(fdno); + break; + } +#endif + case URL_IS_HTTPS: + case URL_IS_HTTP: + case URL_IS_FTP: + case URL_IS_HKP: + case URL_IS_DASH: + default: + /* Either use the pipe to prelink -y or open the URL. */ + fd = (pid != 0) ? fdDup(fdno) : Fopen(fn, "r.ufdio"); + (void) close(fdno); + if (fd == NULL || Ferror(fd)) { + rc = 1; + if (fd != NULL) + (void) Fclose(fd); + break; + } + + fdInitDigest(fd, algo, 0); + fsize = 0; + while ((rc = Fread(buf, sizeof(buf[0]), sizeof(buf), fd)) > 0) + fsize += rc; + fdFiniDigest(fd, algo, (void **)&dig, &diglen, asAscii); + if (Ferror(fd)) + rc = 1; + + (void) Fclose(fd); + break; + } + + /* Reap the prelink -y helper. */ + if (pid) { + int status; + (void) waitpid(pid, &status, 0); + if (!WIFEXITED(status) || WEXITSTATUS(status)) + rc = 1; + } + +exit: + if (fsizep) + *fsizep = fsize; + if (!rc) + memcpy(digest, dig, diglen); + dig = _free(dig); + + return rc; +} + +FD_t rpmMkTemp(char *templ) +{ + int sfd; + FD_t tfd = NULL; + + sfd = mkstemp(templ); + if (sfd < 0) { + goto exit; + } + + tfd = fdDup(sfd); + close(sfd); + +exit: + return tfd; +} + +FD_t rpmMkTempFile(const char * prefix, char **fn) +{ + const char *tpmacro = "%{_tmppath}"; /* always set from rpmrc */ + char *tempfn; + static int _initialized = 0; + FD_t tfd = NULL; + + if (!prefix) prefix = ""; + + /* Create the temp directory if it doesn't already exist. */ + if (!_initialized) { + _initialized = 1; + tempfn = rpmGenPath(prefix, tpmacro, NULL); + if (rpmioMkpath(tempfn, 0755, (uid_t) -1, (gid_t) -1)) + goto exit; + free(tempfn); + } + + tempfn = rpmGetPath(prefix, tpmacro, "/rpm-tmp.XXXXXX", NULL); + tfd = rpmMkTemp(tempfn); + + if (tfd == NULL || Ferror(tfd)) { + rpmlog(RPMLOG_ERR, _("error creating temporary file %s: %m\n"), tempfn); + goto exit; + } + +exit: + if (tfd != NULL && fn) + *fn = tempfn; + else + free(tempfn); + + return tfd; +} + +int rpmioMkpath(const char * path, mode_t mode, uid_t uid, gid_t gid) +{ + char *d, *de; + int rc; + + if (path == NULL || *path == '\0') + return -1; + d = rstrcat(NULL, path); + if (d[strlen(d)-1] != '/') { + rstrcat(&d,"/"); + } + de = d; + for (;(de=strchr(de+1,'/'));) { + struct stat st; + *de = '\0'; + rc = stat(d, &st); + if (rc) { + if (errno != ENOENT) + goto exit; + rc = mkdir(d, mode); + if (rc) + goto exit; + rpmlog(RPMLOG_DEBUG, "created directory(s) %s mode 0%o\n", path, mode); + if (!(uid == (uid_t) -1 && gid == (gid_t) -1)) { + rc = chown(d, uid, gid); + if (rc) + goto exit; + } + } else if (!S_ISDIR(st.st_mode)) { + rc = ENOTDIR; + goto exit; + } + *de = '/'; + } + rc = 0; +exit: + free(d); + return rc; +} + +int rpmFileIsCompressed(const char * file, rpmCompressedMagic * compressed) +{ + FD_t fd; + ssize_t nb; + int rc = -1; + unsigned char magic[13]; + + *compressed = COMPRESSED_NOT; + + fd = Fopen(file, "r.ufdio"); + if (fd == NULL || Ferror(fd)) { + /* XXX Fstrerror */ + rpmlog(RPMLOG_ERR, _("File %s: %s\n"), file, Fstrerror(fd)); + if (fd) (void) Fclose(fd); + return 1; + } + nb = Fread(magic, sizeof(magic[0]), sizeof(magic), fd); + if (nb < 0) { + rpmlog(RPMLOG_ERR, _("File %s: %s\n"), file, Fstrerror(fd)); + rc = 1; + } else if (nb < sizeof(magic)) { + rpmlog(RPMLOG_ERR, _("File %s is smaller than %u bytes\n"), + file, (unsigned)sizeof(magic)); + rc = 0; + } + (void) Fclose(fd); + if (rc >= 0) + return rc; + + rc = 0; + + if ((magic[0] == 'B') && (magic[1] == 'Z')) { + *compressed = COMPRESSED_BZIP2; + } else if ((magic[0] == 'P') && (magic[1] == 'K') && + (((magic[2] == 3) && (magic[3] == 4)) || + ((magic[2] == '0') && (magic[3] == '0')))) { /* pkzip */ + *compressed = COMPRESSED_ZIP; + } else if ((magic[0] == 0xfd) && (magic[1] == 0x37) && + (magic[2] == 0x7a) && (magic[3] == 0x58) && + (magic[4] == 0x5a) && (magic[5] == 0x00)) { + /* new style xz (lzma) with magic */ + *compressed = COMPRESSED_XZ; + } else if ((magic[0] == 'L') && (magic[1] == 'Z') && + (magic[2] == 'I') && (magic[3] == 'P')) { + *compressed = COMPRESSED_LZIP; + } else if ((magic[0] == 'L') && (magic[1] == 'R') && + (magic[2] == 'Z') && (magic[3] == 'I')) { + *compressed = COMPRESSED_LRZIP; + } else if (((magic[0] == 0037) && (magic[1] == 0213)) || /* gzip */ + ((magic[0] == 0037) && (magic[1] == 0236)) || /* old gzip */ + ((magic[0] == 0037) && (magic[1] == 0036)) || /* pack */ + ((magic[0] == 0037) && (magic[1] == 0240)) || /* SCO lzh */ + ((magic[0] == 0037) && (magic[1] == 0235)) /* compress */ + ) { + *compressed = COMPRESSED_OTHER; + } else if (rpmFileHasSuffix(file, ".lzma")) { + *compressed = COMPRESSED_LZMA; + } + + return rc; +} + +/* @todo "../sbin/./../bin/" not correct. */ +char *rpmCleanPath(char * path) +{ + const char *s; + char *se, *t, *te; + int begin = 1; + + if (path == NULL) + return NULL; + +/*fprintf(stderr, "*** RCP %s ->\n", path); */ + s = t = te = path; + while (*s != '\0') { +/*fprintf(stderr, "*** got \"%.*s\"\trest \"%s\"\n", (t-path), path, s); */ + switch(*s) { + case ':': /* handle url's */ + if (s[1] == '/' && s[2] == '/') { + *t++ = *s++; + *t++ = *s++; + break; + } + begin=1; + break; + case '/': + /* Move parent dir forward */ + for (se = te + 1; se < t && *se != '/'; se++) + {}; + if (se < t && *se == '/') { + te = se; +/*fprintf(stderr, "*** next pdir \"%.*s\"\n", (te-path), path); */ + } + while (s[1] == '/') + s++; + while (t > path && t[-1] == '/') + t--; + break; + case '.': + /* Leading .. is special */ + /* Check that it is ../, so that we don't interpret */ + /* ..?(i.e. "...") or ..* (i.e. "..bogus") as "..". */ + /* in the case of "...", this ends up being processed*/ + /* as "../.", and the last '.' is stripped. This */ + /* would not be correct processing. */ + if (begin && s[1] == '.' && (s[2] == '/' || s[2] == '\0')) { +/*fprintf(stderr, " leading \"..\"\n"); */ + *t++ = *s++; + break; + } + /* Single . is special */ + if (begin && s[1] == '\0') { + break; + } + /* Handle the ./ cases */ + if (t > path && t[-1] == '/') { + /* Trim embedded ./ */ + if (s[1] == '/') { + s+=2; + continue; + } + /* Trim trailing /. */ + if (s[1] == '\0') { + s++; + continue; + } + } + /* Trim embedded /../ and trailing /.. */ + if (!begin && t > path && t[-1] == '/' && s[1] == '.' && (s[2] == '/' || s[2] == '\0')) { + t = te; + /* Move parent dir forward */ + if (te > path) + for (--te; te > path && *te != '/'; te--) + {}; +/*fprintf(stderr, "*** prev pdir \"%.*s\"\n", (te-path), path); */ + s++; + s++; + continue; + } + break; + default: + begin = 0; + break; + } + *t++ = *s++; + } + + /* Trim trailing / (but leave single / alone) */ + if (t > &path[1] && t[-1] == '/') + t--; + *t = '\0'; + +/*fprintf(stderr, "\t%s\n", path); */ + return path; +} + +/* Merge 3 args into path, any or all of which may be a url. */ + +char * rpmGenPath(const char * urlroot, const char * urlmdir, + const char *urlfile) +{ + char * xroot = rpmGetPath(urlroot, NULL); + const char * root = xroot; + char * xmdir = rpmGetPath(urlmdir, NULL); + const char * mdir = xmdir; + char * xfile = rpmGetPath(urlfile, NULL); + const char * file = xfile; + char * result; + char * url = NULL; + int nurl = 0; + int ut; + + ut = urlPath(xroot, &root); + if (url == NULL && ut > URL_IS_DASH) { + url = xroot; + nurl = root - xroot; + } + if (root == NULL || *root == '\0') root = "/"; + + ut = urlPath(xmdir, &mdir); + if (url == NULL && ut > URL_IS_DASH) { + url = xmdir; + nurl = mdir - xmdir; + } + if (mdir == NULL || *mdir == '\0') mdir = "/"; + + ut = urlPath(xfile, &file); + if (url == NULL && ut > URL_IS_DASH) { + url = xfile; + nurl = file - xfile; + } + + if (url && nurl > 0) { + char *t = rstrcat(NULL, url); + t[nurl] = '\0'; + url = t; + } else + url = xstrdup(""); + + result = rpmGetPath(url, root, "/", mdir, "/", file, NULL); + + xroot = _free(xroot); + xmdir = _free(xmdir); + xfile = _free(xfile); + free(url); + return result; +} + +/* Return concatenated and expanded canonical path. */ + +char * rpmGetPath(const char *path, ...) +{ + va_list ap; + char *dest = NULL, *res; + const char *s; + + if (path == NULL) + return xstrdup(""); + + va_start(ap, path); + for (s = path; s; s = va_arg(ap, const char *)) { + rstrcat(&dest, s); + } + va_end(ap); + + res = rpmExpand(dest, NULL); + free(dest); + + return rpmCleanPath(res); +} + +int rpmGlob(const char * patterns, int * argcPtr, ARGV_t * argvPtr) +{ + int ac = 0; + const char ** av = NULL; + int argc = 0; + ARGV_t argv = NULL; + char * globRoot = NULL; + const char *home = getenv("HOME"); + int gflags = 0; +#ifdef ENABLE_NLS + char * old_collate = NULL; + char * old_ctype = NULL; + const char * t; +#endif + size_t maxb, nb; + int i, j; + int rc; + + if (home != NULL && strlen(home) > 0) + gflags |= GLOB_TILDE; + + /* Can't use argvSplit() here, it doesn't handle whitespace etc escapes */ + rc = poptParseArgvString(patterns, &ac, &av); + if (rc) + return rc; + +#ifdef ENABLE_NLS + t = setlocale(LC_COLLATE, NULL); + if (t) + old_collate = xstrdup(t); + t = setlocale(LC_CTYPE, NULL); + if (t) + old_ctype = xstrdup(t); + (void) setlocale(LC_COLLATE, "C"); + (void) setlocale(LC_CTYPE, "C"); +#endif + + if (av != NULL) + for (j = 0; j < ac; j++) { + char * globURL; + const char * path; + int ut = urlPath(av[j], &path); + int local = (ut == URL_IS_PATH) || (ut == URL_IS_UNKNOWN); + size_t plen = strlen(path); + int flags = gflags; + int dir_only = (plen > 0 && path[plen-1] == '/'); + glob_t gl; + + if (!local || (!glob_pattern_p(av[j], 0) && strchr(path, '~') == NULL)) { + argvAdd(&argv, av[j]); + continue; + } + +#ifdef GLOB_ONLYDIR + if (dir_only) + flags |= GLOB_ONLYDIR; +#endif + + gl.gl_pathc = 0; + gl.gl_pathv = NULL; + + rc = glob(av[j], flags, NULL, &gl); + if (rc) + goto exit; + + /* XXX Prepend the URL leader for globs that have stripped it off */ + maxb = 0; + for (i = 0; i < gl.gl_pathc; i++) { + if ((nb = strlen(&(gl.gl_pathv[i][0]))) > maxb) + maxb = nb; + } + + nb = ((ut == URL_IS_PATH) ? (path - av[j]) : 0); + maxb += nb; + maxb += 1; + globURL = globRoot = xmalloc(maxb); + + switch (ut) { + case URL_IS_PATH: + case URL_IS_DASH: + strncpy(globRoot, av[j], nb); + break; + case URL_IS_HTTPS: + case URL_IS_HTTP: + case URL_IS_FTP: + case URL_IS_HKP: + case URL_IS_UNKNOWN: + default: + break; + } + globRoot += nb; + *globRoot = '\0'; + + for (i = 0; i < gl.gl_pathc; i++) { + const char * globFile = &(gl.gl_pathv[i][0]); + + if (dir_only) { + struct stat sb; + if (lstat(gl.gl_pathv[i], &sb) || !S_ISDIR(sb.st_mode)) + continue; + } + + if (globRoot > globURL && globRoot[-1] == '/') + while (*globFile == '/') globFile++; + strcpy(globRoot, globFile); + argvAdd(&argv, globURL); + } + globfree(&gl); + globURL = _free(globURL); + } + + argc = argvCount(argv); + if (argc > 0) { + if (argvPtr) + *argvPtr = argv; + if (argcPtr) + *argcPtr = argc; + rc = 0; + } else + rc = 1; + + +exit: +#ifdef ENABLE_NLS + if (old_collate) { + (void) setlocale(LC_COLLATE, old_collate); + old_collate = _free(old_collate); + } + if (old_ctype) { + (void) setlocale(LC_CTYPE, old_ctype); + old_ctype = _free(old_ctype); + } +#endif + av = _free(av); + if (rc || argvPtr == NULL) { + argvFree(argv); + } + return rc; +} + +char * rpmEscapeSpaces(const char * s) +{ + const char * se; + char * t; + char * te; + size_t nb = 0; + + for (se = s; *se; se++) { + if (isspace(*se)) + nb++; + nb++; + } + nb++; + + t = te = xmalloc(nb); + for (se = s; *se; se++) { + if (isspace(*se)) + *te++ = '\\'; + *te++ = *se; + } + *te = '\0'; + return t; +} + +int rpmFileHasSuffix(const char *path, const char *suffix) +{ + size_t plen = strlen(path); + size_t slen = strlen(suffix); + return (plen >= slen && rstreq(path+plen-slen, suffix)); +} + +char * rpmGetCwd(void) +{ + int currDirLen = 0; + char * currDir = NULL; + + do { + currDirLen += 128; + currDir = xrealloc(currDir, currDirLen); + memset(currDir, 0, currDirLen); + } while (getcwd(currDir, currDirLen) == NULL && errno == ERANGE); + + return currDir; +} + +int rpmMkdirs(const char *root, const char *pathstr) +{ + ARGV_t dirs = NULL; + int rc = 0; + argvSplit(&dirs, pathstr, ":"); + + for (char **d = dirs; *d; d++) { + char *path = rpmGetPath(root ? root : "", *d, NULL); + if ((rc = rpmioMkpath(path, 0755, -1, -1)) != 0) { + const char *msg = _("failed to create directory"); + /* try to be more informative if the failing part was a macro */ + if (**d == '%') { + rpmlog(RPMLOG_ERR, "%s %s: %s: %m\n", msg, *d, path); + } else { + rpmlog(RPMLOG_ERR, "%s %s: %m\n", msg, path); + } + } + free(path); + if (rc) break; + } + argvFree(dirs); + return rc; +} + +const char *rpmConfigDir(void) +{ + if (rpm_config_dir == NULL) { + char *rpmenv = getenv("RPM_CONFIGDIR"); + rpm_config_dir = rpmenv ? xstrdup(rpmenv) : RPMCONFIGDIR; + } + return rpm_config_dir; +} diff --git a/rpmio/rpmfileutil.h b/rpmio/rpmfileutil.h new file mode 100644 index 0000000..28c6d8a --- /dev/null +++ b/rpmio/rpmfileutil.h @@ -0,0 +1,151 @@ +#ifndef _RPMFILEUTIL_H +#define _RPMFILEUTIL_H + +/** \ingroup rpmfileutil rpmio + * \file rpmio/rpmfileutil.h + * File and path manipulation helper functions. + */ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmfileutil + */ +typedef enum rpmCompressedMagic_e { + COMPRESSED_NOT = 0, /*!< not compressed */ + COMPRESSED_OTHER = 1, /*!< gzip can handle */ + COMPRESSED_BZIP2 = 2, /*!< bzip2 can handle */ + COMPRESSED_ZIP = 3, /*!< unzip can handle */ + COMPRESSED_LZMA = 4, /*!< lzma can handle */ + COMPRESSED_XZ = 5, /*!< xz can handle */ + COMPRESSED_LZIP = 6, /*!< lzip can handle */ + COMPRESSED_LRZIP = 7 /*!< lrzip can handle */ +} rpmCompressedMagic; + +/** \ingroup rpmfileutil + * Calculate a file digest and size. + * @param algo digest algorithm + * @param fn file name + * @param asAscii return digest as ascii string? + * @retval digest address of calculated digest + * @retval *fsizep file size pointer (or NULL) + * @return 0 on success, 1 on error + */ +int rpmDoDigest(int algo, const char * fn,int asAscii, + unsigned char * digest, rpm_loff_t * fsizep); + +/** \ingroup rpmfileutil + * Thin wrapper for mkstemp(3). + * @param templ template for temporary filename + * @return file handle or NULL on error + */ +FD_t rpmMkTemp(char *templ); + +/** \ingroup rpmfileutil + * Return file handle for a temporaray file. + * A unique temporaray file path will be created in + * [prefix/]%{_tmppath} directory. + * The file name and the open file handle are returned. + * + * @param prefix leading part of temp file path + * @retval fn temp file name (or NULL) + * @return fdptr open file handle or NULL on error + */ +FD_t rpmMkTempFile(const char * prefix, char **fn); + +/** \ingroup rpmfileutil + * Insure that directories in path exist, creating as needed. + * @param path directory path + * @param mode directory mode (if created) + * @param uid directory uid (if created), or -1 to skip + * @param gid directory uid (if created), or -1 to skip + * @return 0 on success, errno (or -1) on error + */ +int rpmioMkpath(const char * path, mode_t mode, uid_t uid, gid_t gid); + +/** \ingroup rpmfileutil + * Create several directories (including parents if needed) in one go. + * Macros in pathstr will be expanded in the process. + * @param root leading root directory (or NULL for none) + * @param pathstr list of directories separated with : + * @return 0 if all directories were successfully created + * (or already existed), non-zero otherwise + */ +int rpmMkdirs(const char *root, const char *pathstr); + +/** \ingroup rpmfileutil + * Canonicalize file path. + * @param path path to canonicalize (in-place) + * @return pointer to path + */ +char * rpmCleanPath (char * path); + +/** \ingroup rpmfileutil + * Merge 3 args into path, any or all of which may be a url. + * The leading part of the first URL encountered is used + * for the result, other URL prefixes are discarded, permitting + * a primitive form of URL inheiritance. + * @param urlroot root URL (often path to chroot, or NULL) + * @param urlmdir directory URL (often a directory, or NULL) + * @param urlfile file URL (often a file, or NULL) + * @return expanded, merged, canonicalized path (malloc'ed) + */ +char * rpmGenPath (const char * urlroot, + const char * urlmdir, + const char * urlfile); + +/** \ingroup rpmfileutil + * Return (malloc'ed) expanded, canonicalized, file path. + * @param path macro(s) to expand (NULL terminates list) + * @return canonicalized path (malloc'ed) + */ +char * rpmGetPath (const char * path, ...) RPM_GNUC_NULL_TERMINATED; + +/** \ingroup rpmfileutil + * Return URL path(s) from a (URL prefixed) pattern glob. + * @param patterns glob pattern + * @retval *argcPtr no. of paths + * @retval *argvPtr ARGV_t array of paths + * @return 0 on success + */ +int rpmGlob(const char * patterns, int * argcPtr, ARGV_t * argvPtr); + +/** \ingroup rpmfileutil + * Escape isspace(3) characters in string. + * @param s string + * @return escaped string + */ +char * rpmEscapeSpaces(const char * s); + +/** \ingroup rpmfileutil + * Return type of compression used in file. + * @param file name of file + * @retval compressed address of compression type + * @return 0 on success, 1 on I/O error + */ +int rpmFileIsCompressed (const char * file, rpmCompressedMagic * compressed); + +/** \ingroup rpmfileutil + * Check if path (string) ends with given suffix + * @param path (path) string + * @param suffix suffix string to check for + * @return 1 if true, 0 otherwise + */ +int rpmFileHasSuffix(const char *path, const char *suffix); + +/** \ingroup rpmfileutil + * Like getcwd() but the result is malloced. + * @return current working directory (malloc'ed) + */ +char * rpmGetCwd(void); + +#ifdef __cplusplus +} +#endif +#endif /* _RPMFILEUTIL_H */ diff --git a/rpmio/rpmhook.c b/rpmio/rpmhook.c new file mode 100644 index 0000000..9fe2a21 --- /dev/null +++ b/rpmio/rpmhook.c @@ -0,0 +1,262 @@ +#include "system.h" + +#include +#include +#include +#include + +#include +#include "rpmio/rpmhook.h" + +#include "debug.h" + +#define RPMHOOK_TABLE_INITSIZE 256 +#define RPMHOOK_BUCKET_INITSIZE 5 + +typedef struct rpmhookItem_s { + rpmhookFunc func; + void *data; + struct rpmhookItem_s *next; +} * rpmhookItem; + +typedef struct rpmhookBucket_s { + unsigned long hash; + char *name; + rpmhookItem item; +} * rpmhookBucket; + +typedef struct rpmhookTable_s { + int size; + int used; + struct rpmhookBucket_s bucket[1]; +} * rpmhookTable; + + +rpmhookArgs rpmhookArgsNew(int argc) +{ + rpmhookArgs args = (rpmhookArgs) xcalloc(1, + sizeof(*args) + sizeof(args->argv) * (argc-1)); + args->argc = argc; + return args; +} + +rpmhookArgs rpmhookArgsFree(rpmhookArgs args) +{ + if (args != NULL) + free(args); + return NULL; +} + +static rpmhookTable rpmhookTableNew(int size) +{ + rpmhookTable table = (rpmhookTable) xcalloc(1, + sizeof(*table) + sizeof(table->bucket) * (size-1)); + table->size = size; + return table; +} + +#if 0 +static rpmhookTable rpmhookTableFree(rpmhookTable table) +{ + rpmhookItem item, nextItem; + int i; + for (i = 0; i != table->size; i++) { + if (table->bucket[i].name == NULL) + continue; + free(table->bucket[i].name); + item = table->bucket[i].item; + while (item) { + nextItem = item->next; + free(item); + item = nextItem; + } + } + free(table); + return NULL; +} +#endif + +static void rpmhookTableRehash(rpmhookTable *table); + +static int rpmhookTableFindBucket(rpmhookTable *table, const char *name) +{ + /* Hash based on http://www.isthe.com/chongo/tech/comp/fnv/ */ + unsigned long perturb; + unsigned long hash = 0; + unsigned char *bp = (unsigned char *)name; + unsigned char *be = bp + strlen(name); + rpmhookBucket bucket; + int ret; + + if (((*table)->used/2)*3 > (*table)->size) + rpmhookTableRehash(table); + while (bp < be) { + hash ^= (unsigned long)*bp++; + hash *= (unsigned long)0x01000193; + } + perturb = hash; + ret = hash % (*table)->size; + bucket = &(*table)->bucket[ret]; + while (bucket->name && + (bucket->hash != hash || !rstreq(bucket->name, name))) { + /* Collision resolution based on Python's perturb scheme. */ + ret = ((ret << 2) + ret + perturb + 1) % (*table)->size; + perturb >>= 5; + bucket = &(*table)->bucket[ret]; + } + if (!bucket->name) + bucket->hash = hash; + return ret; +} + +static void rpmhookTableRehash(rpmhookTable *table) +{ + rpmhookTable newtable = rpmhookTableNew((*table)->size*2); + int n, i = 0; + + for (; i != (*table)->size; i++) { + if ((*table)->bucket[i].name == NULL) + continue; + n = rpmhookTableFindBucket(&newtable, (*table)->bucket[i].name); + newtable->bucket[n].name = (*table)->bucket[i].name; + newtable->bucket[n].item = (*table)->bucket[i].item; + } + newtable->used = (*table)->used; + free(*table); + *table = newtable; +} + +static void rpmhookTableAddItem(rpmhookTable *table, const char *name, + rpmhookFunc func, void *data) +{ + int n = rpmhookTableFindBucket(table, name); + rpmhookBucket bucket = &(*table)->bucket[n]; + rpmhookItem *item = &bucket->item; + if (!bucket->name) { + bucket->name = xstrdup(name); + (*table)->used++; + } + while (*item) item = &(*item)->next; + *item = xcalloc(1, sizeof(**item)); + (*item)->func = func; + (*item)->data = data; +} + +static void rpmhookTableDelItem(rpmhookTable *table, const char *name, + rpmhookFunc func, void *data, + int matchfunc, int matchdata) +{ + int n = rpmhookTableFindBucket(table, name); + rpmhookBucket bucket = &(*table)->bucket[n]; + rpmhookItem item = bucket->item; + rpmhookItem lastItem = NULL; + rpmhookItem nextItem; + while (item) { + nextItem = item->next; + if ((!matchfunc || item->func == func) && + (!matchdata || item->data == data)) { + free(item); + if (lastItem) + lastItem->next = nextItem; + else + bucket->item = nextItem; + } else { + lastItem = item; + } + item = nextItem; + } + if (!bucket->item) { + free(bucket->name); + bucket->name = NULL; + (*table)->used--; + } +} + +static rpmhookArgs rpmhookArgsParse(const char *argt, va_list ap) +{ + rpmhookArgs args = rpmhookArgsNew(strlen(argt)); + int i; + + args->argt = argt; + for (i = 0; i != args->argc; i++) { + switch (argt[i]) { + case 's': + args->argv[i].s = va_arg(ap, char *); + break; + case 'i': + args->argv[i].i = va_arg(ap, int); + break; + case 'f': + args->argv[i].f = (float)va_arg(ap, double); + break; + case 'p': + args->argv[i].p = va_arg(ap, void *); + break; + default: + fprintf(stderr, "error: unsupported type '%c' as " + "a hook argument\n", argt[i]); + break; + } + } + return args; +} + +static void rpmhookTableCallArgs(rpmhookTable *table, const char *name, + rpmhookArgs args) +{ + int n = rpmhookTableFindBucket(table, name); + rpmhookItem item = (*table)->bucket[n].item; + rpmhookItem next; + while (item) { + next = item->next; + if (item->func(args, item->data) != 0) + break; + item = next; + } +} + +static rpmhookTable globalTable = NULL; + +void rpmhookRegister(const char *name, rpmhookFunc func, void *data) +{ + if (globalTable == NULL) + globalTable = rpmhookTableNew(RPMHOOK_TABLE_INITSIZE); + rpmhookTableAddItem(&globalTable, name, func, data); +} + +void rpmhookUnregister(const char *name, rpmhookFunc func, void *data) +{ + if (globalTable != NULL) + rpmhookTableDelItem(&globalTable, name, func, data, 1, 1); +} + +void rpmhookUnregisterAny(const char *name, rpmhookFunc func) +{ + if (globalTable != NULL) + rpmhookTableDelItem(&globalTable, name, func, NULL, 1, 0); +} + +void rpmhookUnregisterAll(const char *name) +{ + if (globalTable != NULL) + rpmhookTableDelItem(&globalTable, name, NULL, NULL, 0, 0); +} + +void rpmhookCall(const char *name, const char *argt, ...) +{ + if (globalTable != NULL) { + rpmhookArgs args; + va_list ap; + va_start(ap, argt); + args = rpmhookArgsParse(argt, ap); + rpmhookTableCallArgs(&globalTable, name, args); + (void) rpmhookArgsFree(args); + va_end(ap); + } +} + +void rpmhookCallArgs(const char *name, rpmhookArgs args) +{ + if (globalTable != NULL) + rpmhookTableCallArgs(&globalTable, name, args); +} diff --git a/rpmio/rpmhook.h b/rpmio/rpmhook.h new file mode 100644 index 0000000..52f5634 --- /dev/null +++ b/rpmio/rpmhook.h @@ -0,0 +1,37 @@ +#ifndef RPMHOOK_H +#define RPMHOOK_H + +typedef union { + const char * s; + int i; + float f; + void * p; +} rpmhookArgv; + +typedef struct rpmhookArgs_s { + int argc; + const char * argt; + rpmhookArgv argv[1]; +} * rpmhookArgs; + +typedef int (*rpmhookFunc) (rpmhookArgs args, void *data); + +#ifdef __cplusplus +extern "C" { +#endif + +rpmhookArgs rpmhookArgsNew(int argc); +rpmhookArgs rpmhookArgsFree(rpmhookArgs args); + +void rpmhookRegister(const char *name, rpmhookFunc func, void *data); +void rpmhookUnregister(const char *name, rpmhookFunc func, void *data); +void rpmhookUnregisterAny(const char *name, rpmhookFunc func); +void rpmhookUnregisterAll(const char *name); +void rpmhookCall(const char *name, const char *argt, ...); +void rpmhookCallArgs(const char *name, rpmhookArgs args); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c new file mode 100644 index 0000000..2fbbf91 --- /dev/null +++ b/rpmio/rpmio.c @@ -0,0 +1,1900 @@ +/** \ingroup rpmio + * \file rpmio/rpmio.c + */ + +#include "system.h" +#include +#include + +#include +#include +#include +#include +#include + +#include "rpmio/rpmio_internal.h" + +#include "debug.h" + +#if HAVE_LIBIO_H && defined(_G_IO_IO_FILE_VERSION) +#define _USE_LIBIO 1 +#endif + +typedef struct _FDSTACK_s { + FDIO_t io; + void * fp; + int fdno; +} FDSTACK_t; + +/** \ingroup rpmio + * Cumulative statistics for a descriptor. + */ +typedef struct { + struct rpmop_s ops[FDSTAT_MAX]; /*!< Cumulative statistics. */ +} * FDSTAT_t; + +/** \ingroup rpmio + * The FD_t File Handle data structure. + */ +struct _FD_s { + int nrefs; + int flags; +#define RPMIO_DEBUG_IO 0x40000000 +#define RPMIO_DEBUG_REFS 0x20000000 + int magic; +#define FDMAGIC 0x04463138 + int nfps; + FDSTACK_t fps[8]; + int urlType; /* ufdio: */ + + ssize_t bytesRemain; /* ufdio: */ + + int syserrno; /* last system errno encountered */ + const char *errcookie; /* gzdio/bzdio/ufdio/xzdio: */ + + FDSTAT_t stats; /* I/O statistics */ + + rpmDigestBundle digests; +}; + +#define DBG(_f, _m, _x) \ + \ + if ((_rpmio_debug | ((_f) ? ((FD_t)(_f))->flags : 0)) & (_m)) fprintf _x \ + +#define DBGIO(_f, _x) DBG((_f), RPMIO_DEBUG_IO, _x) + +static FDIO_t fdGetIo(FD_t fd) +{ + return (fd != NULL) ? fd->fps[fd->nfps].io : NULL; +} + +static void fdSetIo(FD_t fd, FDIO_t io) +{ + if (fd) + fd->fps[fd->nfps].io = io; +} + +static void * fdGetFp(FD_t fd) +{ + return (fd != NULL) ? fd->fps[fd->nfps].fp : NULL; +} + +static void fdSetFp(FD_t fd, void * fp) +{ + if (fd) + fd->fps[fd->nfps].fp = fp; +} + +static void fdSetFdno(FD_t fd, int fdno) +{ + if (fd) + fd->fps[fd->nfps].fdno = fdno; +} + +static void fdPush(FD_t fd, FDIO_t io, void * fp, int fdno) +{ + if (fd == NULL || fd->nfps >= (sizeof(fd->fps)/sizeof(fd->fps[0]) - 1)) + return; + fd->nfps++; + fdSetIo(fd, io); + fdSetFp(fd, fp); + fdSetFdno(fd, fdno); +} + +static void fdPop(FD_t fd) +{ + if (fd == NULL || fd->nfps < 0) return; + fdSetIo(fd, NULL); + fdSetFp(fd, NULL); + fdSetFdno(fd, -1); + fd->nfps--; +} + +static FD_t c2f(void * cookie) +{ + FD_t fd = (FD_t) cookie; + return (fd && fd->magic == FDMAGIC) ? fd : NULL; +} + +void fdSetBundle(FD_t fd, rpmDigestBundle bundle) +{ + if (fd) + fd->digests = bundle; +} + +rpmDigestBundle fdGetBundle(FD_t fd) +{ + return (fd != NULL) ? fd->digests : NULL; +} + +static void * iotFileno(FD_t fd, FDIO_t iot) +{ + void * rc = NULL; + + if (fd == NULL) + return NULL; + + for (int i = fd->nfps; i >= 0; i--) { + FDSTACK_t * fps = &fd->fps[i]; + if (fps->io != iot) + continue; + rc = fps->fp; + break; + } + + return rc; +} + +#define FDNREFS(fd) (fd ? ((FD_t)fd)->nrefs : -9) + +#define FDONLY(fd) assert(fdGetIo(fd) == fdio) +#define GZDONLY(fd) assert(fdGetIo(fd) == gzdio) +#define BZDONLY(fd) assert(fdGetIo(fd) == bzdio) +#define LZDONLY(fd) assert(fdGetIo(fd) == xzdio || fdGetIo(fd) == lzdio) + +#define UFDONLY(fd) /* assert(fdGetIo(fd) == ufdio) */ + +/** + */ +#if _USE_LIBIO +static int noLibio = 0; +#else +static int noLibio = 1; +#endif + +/** \ingroup rpmio + * \name RPMIO Vectors. + */ +typedef ssize_t (*fdio_read_function_t) (void *cookie, void *buf, size_t nbytes); +typedef ssize_t (*fdio_write_function_t) (void *cookie, const void *buf, size_t nbytes); +typedef int (*fdio_seek_function_t) (void *cookie, _libio_pos_t pos, int whence); +typedef int (*fdio_close_function_t) (void *cookie); +typedef FD_t (*fdio_ref_function_t) ( void * cookie); +typedef FD_t (*fdio_deref_function_t) (FD_t fd); +typedef FD_t (*fdio_new_function_t) (void); +typedef int (*fdio_fileno_function_t) (void * cookie); +typedef FD_t (*fdio_open_function_t) (const char * path, int flags, mode_t mode); +typedef FD_t (*fdio_fopen_function_t) (const char * path, const char * fmode); +typedef void * (*fdio_ffileno_function_t) (FD_t fd); +typedef int (*fdio_fflush_function_t) (FD_t fd); + +/** \ingroup rpmio + */ +struct FDIO_s { + fdio_read_function_t read; + fdio_write_function_t write; + fdio_seek_function_t seek; + fdio_close_function_t close; + + fdio_ref_function_t _fdref; + fdio_deref_function_t _fdderef; + fdio_new_function_t _fdnew; + fdio_fileno_function_t _fileno; + + fdio_open_function_t _open; + fdio_fopen_function_t _fopen; + fdio_ffileno_function_t _ffileno; + fdio_fflush_function_t _fflush; +}; + +/* forward refs */ +static const FDIO_t fdio; +static const FDIO_t fpio; +static const FDIO_t ufdio; +static const FDIO_t gzdio; +static const FDIO_t bzdio; +static const FDIO_t xzdio; +static const FDIO_t lzdio; + +/** \ingroup rpmio + * Update digest(s) attached to fd. + */ +static void fdUpdateDigests(FD_t fd, const void * buf, size_t buflen); + +/** + */ +int _rpmio_debug = 0; + +/* =============================================================== */ + +static const char * fdbg(FD_t fd) +{ + static char buf[BUFSIZ]; + char *be = buf; + int i; + + buf[0] = '\0'; + if (fd == NULL) + return buf; + + if (fd->bytesRemain != -1) { + sprintf(be, " clen %d", (int)fd->bytesRemain); + be += strlen(be); + } + *be++ = '\t'; + for (i = fd->nfps; i >= 0; i--) { + FDSTACK_t * fps = &fd->fps[i]; + if (i != fd->nfps) + *be++ = ' '; + *be++ = '|'; + *be++ = ' '; + if (fps->io == fdio) { + sprintf(be, "FD %d fp %p", fps->fdno, fps->fp); + } else if (fps->io == ufdio) { + sprintf(be, "UFD %d fp %p", fps->fdno, fps->fp); + } else if (fps->io == gzdio) { + sprintf(be, "GZD %p fdno %d", fps->fp, fps->fdno); +#if HAVE_BZLIB_H + } else if (fps->io == bzdio) { + sprintf(be, "BZD %p fdno %d", fps->fp, fps->fdno); +#endif +#if HAVE_LZMA_H + } else if (fps->io == xzdio) { + sprintf(be, "XZD %p fdno %d", fps->fp, fps->fdno); + } else if (fps->io == lzdio) { + sprintf(be, "LZD %p fdno %d", fps->fp, fps->fdno); +#endif + } else if (fps->io == fpio) { + sprintf(be, "%s %p(%d) fdno %d", + (fps->fdno < 0 ? "LIBIO" : "FP"), + fps->fp, fileno(((FILE *)fps->fp)), fps->fdno); + } else { + sprintf(be, "??? io %p fp %p fdno %d ???", + fps->io, fps->fp, fps->fdno); + } + be += strlen(be); + *be = '\0'; + } + return buf; +} + +static void fdstat_enter(FD_t fd, fdOpX opx) +{ + if (fd == NULL) return; + if (fd->stats != NULL) + (void) rpmswEnter(fdOp(fd, opx), (ssize_t) 0); +} + +static void fdstat_exit(FD_t fd, fdOpX opx, ssize_t rc) +{ + if (fd == NULL) return; + if (rc == -1) + fd->syserrno = errno; + else if (rc > 0 && fd->bytesRemain > 0) + switch (opx) { + case FDSTAT_READ: + case FDSTAT_WRITE: + fd->bytesRemain -= rc; + break; + default: + break; + } + if (fd->stats != NULL) + (void) rpmswExit(fdOp(fd, opx), rc); +} + +static void fdstat_print(FD_t fd, const char * msg, FILE * fp) +{ + static const int usec_scale = (1000*1000); + int opx; + + if (fd == NULL || fd->stats == NULL) return; + for (opx = 0; opx < 4; opx++) { + rpmop op = &fd->stats->ops[opx]; + if (op->count <= 0) continue; + switch (opx) { + case FDSTAT_READ: + if (msg) fprintf(fp, "%s:", msg); + fprintf(fp, "%8d reads, %8ld total bytes in %d.%06d secs\n", + op->count, (long)op->bytes, + (int)(op->usecs/usec_scale), (int)(op->usecs%usec_scale)); + break; + case FDSTAT_WRITE: + if (msg) fprintf(fp, "%s:", msg); + fprintf(fp, "%8d writes, %8ld total bytes in %d.%06d secs\n", + op->count, (long)op->bytes, + (int)(op->usecs/usec_scale), (int)(op->usecs%usec_scale)); + break; + case FDSTAT_SEEK: + break; + case FDSTAT_CLOSE: + break; + } + } +} + +/* =============================================================== */ +off_t fdSize(FD_t fd) +{ + struct stat sb; + off_t rc = -1; + + if (fd != NULL && fstat(Fileno(fd), &sb) == 0) + rc = sb.st_size; + return rc; +} + +FD_t fdDup(int fdno) +{ + FD_t fd; + int nfdno; + + if ((nfdno = dup(fdno)) < 0) + return NULL; + fd = fdNew(); + fdSetFdno(fd, nfdno); +DBGIO(fd, (stderr, "==> fdDup(%d) fd %p %s\n", fdno, (fd ? fd : NULL), fdbg(fd))); + return fd; +} + +static int fdSeekNot(void * cookie, _libio_pos_t pos, int whence) +{ + return -2; +} + +/** \ingroup rpmio + */ +static int fdFileno(void * cookie) +{ + FD_t fd = c2f(cookie); + return (fd != NULL) ? fd->fps[0].fdno : -2; +} + +FILE * fdGetFILE(FD_t fd) +{ + return ((FILE *)fdGetFp(fd)); +} + +/* =============================================================== */ + +FD_t fdLink(void * cookie) +{ + FD_t fd = c2f(cookie); + if (fd) + fd->nrefs++; + return fd; +} + +/** + */ +FD_t fdFree( FD_t fd) +{ + if (fd) { + if (--fd->nrefs > 0) + return fd; + fd->stats = _free(fd->stats); + if (fd->digests) { + fd->digests = rpmDigestBundleFree(fd->digests); + } + free(fd); + } + return NULL; +} + +/** + */ +FD_t fdNew(void) +{ + FD_t fd = xcalloc(1, sizeof(*fd)); + if (fd == NULL) /* XXX xmalloc never returns NULL */ + return NULL; + fd->nrefs = 0; + fd->flags = 0; + fd->magic = FDMAGIC; + fd->urlType = URL_IS_UNKNOWN; + + fd->nfps = 0; + memset(fd->fps, 0, sizeof(fd->fps)); + + fd->fps[0].io = fdio; + fd->fps[0].fp = NULL; + fd->fps[0].fdno = -1; + + fd->bytesRemain = -1; + fd->syserrno = 0; + fd->errcookie = NULL; + fd->stats = xcalloc(1, sizeof(*fd->stats)); + fd->digests = NULL; + + return fdLink(fd); +} + +/** + */ +static ssize_t fdRead(void * cookie, void * buf, size_t count) +{ + FD_t fd = c2f(cookie); + ssize_t rc; + + if (fd == NULL || fd->bytesRemain == 0) return 0; /* XXX simulate EOF */ + + fdstat_enter(fd, FDSTAT_READ); + rc = read(fdFileno(fd), buf, (count > fd->bytesRemain ? fd->bytesRemain : count)); + fdstat_exit(fd, FDSTAT_READ, rc); + + if (fd->digests && rc > 0) fdUpdateDigests(fd, buf, rc); + +DBGIO(fd, (stderr, "==>\tfdRead(%p,%p,%ld) rc %ld %s\n", cookie, buf, (long)count, (long)rc, fdbg(fd))); + + return rc; +} + +/** + */ +static ssize_t fdWrite(void * cookie, const void * buf, size_t count) +{ + FD_t fd = c2f(cookie); + int fdno = fdFileno(fd); + ssize_t rc; + + if (fd == NULL || fd->bytesRemain == 0) return 0; /* XXX simulate EOF */ + + if (fd->digests && count > 0) fdUpdateDigests(fd, buf, count); + + if (count == 0) return 0; + + fdstat_enter(fd, FDSTAT_WRITE); + rc = write(fdno, buf, (count > fd->bytesRemain ? fd->bytesRemain : count)); + fdstat_exit(fd, FDSTAT_WRITE, rc); + +DBGIO(fd, (stderr, "==>\tfdWrite(%p,%p,%ld) rc %ld %s\n", cookie, buf, (long)count, (long)rc, fdbg(fd))); + + return rc; +} + +static int fdSeek(void * cookie, _libio_pos_t pos, int whence) +{ +#ifdef USE_COOKIE_SEEK_POINTER + _IO_off64_t p = *pos; +#else + off_t p = pos; +#endif + FD_t fd = c2f(cookie); + off_t rc; + + if (fd == NULL) + return -2; + + assert(fd->bytesRemain == -1); /* XXX FIXME fadio only for now */ + fdstat_enter(fd, FDSTAT_SEEK); + rc = lseek(fdFileno(fd), p, whence); + fdstat_exit(fd, FDSTAT_SEEK, rc); + +DBGIO(fd, (stderr, "==>\tfdSeek(%p,%ld,%d) rc %lx %s\n", cookie, (long)p, whence, (unsigned long)rc, fdbg(fd))); + + return rc; +} + +/** + */ +static int fdClose( void * cookie) +{ + FD_t fd = c2f(cookie); + int fdno; + int rc; + + if (fd == NULL) return -2; + fdno = fdFileno(fd); + + fdSetFdno(fd, -1); + + fdstat_enter(fd, FDSTAT_CLOSE); + rc = ((fdno >= 0) ? close(fdno) : -2); + fdstat_exit(fd, FDSTAT_CLOSE, rc); + +DBGIO(fd, (stderr, "==>\tfdClose(%p) rc %lx %s\n", (fd ? fd : NULL), (unsigned long)rc, fdbg(fd))); + + fd = fdFree(fd); + return rc; +} + +/** + */ +static FD_t fdOpen(const char *path, int flags, mode_t mode) +{ + FD_t fd; + int fdno; + + fdno = open(path, flags, mode); + if (fdno < 0) return NULL; + if (fcntl(fdno, F_SETFD, FD_CLOEXEC)) { + (void) close(fdno); + return NULL; + } + fd = fdNew(); + fdSetFdno(fd, fdno); + fd->flags = flags; +DBGIO(fd, (stderr, "==>\tfdOpen(\"%s\",%x,0%o) %s\n", path, (unsigned)flags, (unsigned)mode, fdbg(fd))); + return fd; +} + +static const struct FDIO_s fdio_s = { + fdRead, fdWrite, fdSeek, fdClose, fdLink, fdFree, fdNew, fdFileno, + fdOpen, NULL, fdGetFp, NULL +}; +static const FDIO_t fdio = &fdio_s ; + +int ufdCopy(FD_t sfd, FD_t tfd) +{ + char buf[BUFSIZ]; + int itemsRead; + int itemsCopied = 0; + int rc = 0; + + while (1) { + rc = Fread(buf, sizeof(buf[0]), sizeof(buf), sfd); + if (rc < 0) + break; + else if (rc == 0) { + rc = itemsCopied; + break; + } + itemsRead = rc; + rc = Fwrite(buf, sizeof(buf[0]), itemsRead, tfd); + if (rc < 0) + break; + if (rc != itemsRead) { + rc = -1; + break; + } + + itemsCopied += itemsRead; + } + + DBGIO(sfd, (stderr, "++ copied %d bytes\n", itemsCopied)); + + return rc; +} + +/* + * Deal with remote url's by fetching them with a helper application + * and treat as local file afterwards. + * TODO: + * - better error checking + reporting + * - curl & friends don't know about hkp://, transform to http? + */ + +static FD_t urlOpen(const char * url, int flags, mode_t mode) +{ + FD_t fd; + char *dest = NULL; + int rc = 1; /* assume failure */ + + fd = rpmMkTempFile(NULL, &dest); + if (fd == NULL) { + return NULL; + } + Fclose(fd); + + rc = urlGetFile(url, dest); + if (rc == 0) { + fd = fdOpen(dest, flags, mode); + unlink(dest); + } else { + fd = NULL; + } + dest = _free(dest); + + return fd; + +} +static FD_t ufdOpen(const char * url, int flags, mode_t mode) +{ + FD_t fd = NULL; + const char * path; + urltype urlType = urlPath(url, &path); + +if (_rpmio_debug) +fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o)\n", url, (unsigned)flags, (unsigned)mode); + + switch (urlType) { + case URL_IS_FTP: + case URL_IS_HTTPS: + case URL_IS_HTTP: + case URL_IS_HKP: + fd = urlOpen(url, flags, mode); + /* we're dealing with local file when urlOpen() returns */ + urlType = URL_IS_UNKNOWN; + break; + case URL_IS_DASH: + if ((flags & O_ACCMODE) == O_RDWR) { + fd = NULL; + } else { + fd = fdDup((flags & O_ACCMODE) == O_WRONLY ? + STDOUT_FILENO : STDIN_FILENO); + } + break; + case URL_IS_PATH: + case URL_IS_UNKNOWN: + default: + fd = fdOpen(path, flags, mode); + break; + } + + if (fd == NULL) return NULL; + + fdSetIo(fd, ufdio); + fd->bytesRemain = -1; + fd->urlType = urlType; + + if (Fileno(fd) < 0) { + (void) fdClose(fd); + return NULL; + } +DBGIO(fd, (stderr, "==>\tufdOpen(\"%s\",%x,0%o) %s\n", url, (unsigned)flags, (unsigned)mode, fdbg(fd))); + return fd; +} + +static const struct FDIO_s ufdio_s = { + fdRead, fdWrite, fdSeek, fdClose, fdLink, fdFree, fdNew, fdFileno, + ufdOpen, NULL, fdGetFp, NULL +}; +static const FDIO_t ufdio = &ufdio_s ; + +ssize_t timedRead(FD_t fd, void * bufptr, size_t length) +{ + return ufdio->read(fd, bufptr, length); +} + +/* =============================================================== */ +/* Support for GZIP library. + */ +#include + +static void * gzdFileno(FD_t fd) +{ + return iotFileno(fd, gzdio); +} + +static +FD_t gzdOpen(const char * path, const char * fmode) +{ + FD_t fd; + gzFile gzfile; + if ((gzfile = gzopen(path, fmode)) == NULL) + return NULL; + fd = fdNew(); + fdPop(fd); fdPush(fd, gzdio, gzfile, -1); + +DBGIO(fd, (stderr, "==>\tgzdOpen(\"%s\", \"%s\") fd %p %s\n", path, fmode, (fd ? fd : NULL), fdbg(fd))); + return fdLink(fd); +} + +static FD_t gzdFdopen(void * cookie, const char *fmode) +{ + FD_t fd = c2f(cookie); + int fdno; + gzFile gzfile; + + if (fd == NULL || fmode == NULL) return NULL; + fdno = fdFileno(fd); + fdSetFdno(fd, -1); /* XXX skip the fdio close */ + if (fdno < 0) return NULL; + gzfile = gzdopen(fdno, fmode); + if (gzfile == NULL) return NULL; + + fdPush(fd, gzdio, gzfile, fdno); /* Push gzdio onto stack */ + + return fdLink(fd); +} + +static int gzdFlush(FD_t fd) +{ + gzFile gzfile; + gzfile = gzdFileno(fd); + if (gzfile == NULL) return -2; + return gzflush(gzfile, Z_SYNC_FLUSH); /* XXX W2DO? */ +} + +/* =============================================================== */ +static ssize_t gzdRead(void * cookie, void * buf, size_t count) +{ + FD_t fd = c2f(cookie); + gzFile gzfile; + ssize_t rc; + + if (fd == NULL || fd->bytesRemain == 0) return 0; /* XXX simulate EOF */ + + gzfile = gzdFileno(fd); + if (gzfile == NULL) return -2; /* XXX can't happen */ + + fdstat_enter(fd, FDSTAT_READ); + rc = gzread(gzfile, buf, count); +DBGIO(fd, (stderr, "==>\tgzdRead(%p,%p,%u) rc %lx %s\n", cookie, buf, (unsigned)count, (unsigned long)rc, fdbg(fd))); + if (rc < 0) { + int zerror = 0; + fd->errcookie = gzerror(gzfile, &zerror); + if (zerror == Z_ERRNO) { + fd->syserrno = errno; + fd->errcookie = strerror(fd->syserrno); + } + } else if (rc >= 0) { + fdstat_exit(fd, FDSTAT_READ, rc); + if (fd->digests && rc > 0) fdUpdateDigests(fd, buf, rc); + } + return rc; +} + +static ssize_t gzdWrite(void * cookie, const void * buf, size_t count) +{ + FD_t fd = c2f(cookie); + gzFile gzfile; + ssize_t rc; + + if (fd == NULL || fd->bytesRemain == 0) return 0; /* XXX simulate EOF */ + + if (fd->digests && count > 0) fdUpdateDigests(fd, buf, count); + + gzfile = gzdFileno(fd); + if (gzfile == NULL) return -2; /* XXX can't happen */ + + fdstat_enter(fd, FDSTAT_WRITE); + rc = gzwrite(gzfile, (void *)buf, count); +DBGIO(fd, (stderr, "==>\tgzdWrite(%p,%p,%u) rc %lx %s\n", cookie, buf, (unsigned)count, (unsigned long)rc, fdbg(fd))); + if (rc < 0) { + int zerror = 0; + fd->errcookie = gzerror(gzfile, &zerror); + if (zerror == Z_ERRNO) { + fd->syserrno = errno; + fd->errcookie = strerror(fd->syserrno); + } + } else if (rc > 0) { + fdstat_exit(fd, FDSTAT_WRITE, rc); + } + return rc; +} + +/* XXX zlib-1.0.4 has not */ +static int gzdSeek(void * cookie, _libio_pos_t pos, int whence) +{ +#ifdef USE_COOKIE_SEEK_POINTER + _IO_off64_t p = *pos; +#else + off_t p = pos; +#endif + int rc; +#if HAVE_GZSEEK + FD_t fd = c2f(cookie); + gzFile gzfile; + + if (fd == NULL) return -2; + assert(fd->bytesRemain == -1); /* XXX FIXME */ + + gzfile = gzdFileno(fd); + if (gzfile == NULL) return -2; /* XXX can't happen */ + + fdstat_enter(fd, FDSTAT_SEEK); + rc = gzseek(gzfile, p, whence); +DBGIO(fd, (stderr, "==>\tgzdSeek(%p,%ld,%d) rc %lx %s\n", cookie, (long)p, whence, (unsigned long)rc, fdbg(fd))); + if (rc < 0) { + int zerror = 0; + fd->errcookie = gzerror(gzfile, &zerror); + if (zerror == Z_ERRNO) { + fd->syserrno = errno; + fd->errcookie = strerror(fd->syserrno); + } + } else if (rc >= 0) { + fdstat_exit(fd, FDSTAT_SEEK, rc); + } +#else + rc = -2; +#endif + return rc; +} + +static int gzdClose( void * cookie) +{ + FD_t fd = c2f(cookie); + gzFile gzfile; + int rc; + + gzfile = gzdFileno(fd); + if (gzfile == NULL) return -2; /* XXX can't happen */ + + fdstat_enter(fd, FDSTAT_CLOSE); + rc = gzclose(gzfile); + + /* XXX TODO: preserve fd if errors */ + + if (fd) { +DBGIO(fd, (stderr, "==>\tgzdClose(%p) zerror %d %s\n", cookie, rc, fdbg(fd))); + if (rc < 0) { + fd->errcookie = "gzclose error"; + if (rc == Z_ERRNO) { + fd->syserrno = errno; + fd->errcookie = strerror(fd->syserrno); + } + } else if (rc >= 0) { + fdstat_exit(fd, FDSTAT_CLOSE, rc); + } + } + +DBGIO(fd, (stderr, "==>\tgzdClose(%p) rc %lx %s\n", cookie, (unsigned long)rc, fdbg(fd))); + + if (_rpmio_debug || rpmIsDebug()) fdstat_print(fd, "GZDIO", stderr); + if (rc == 0) + fd = fdFree(fd); + return rc; +} + +static const struct FDIO_s gzdio_s = { + gzdRead, gzdWrite, gzdSeek, gzdClose, fdLink, fdFree, fdNew, fdFileno, + NULL, gzdOpen, gzdFileno, gzdFlush +}; +static const FDIO_t gzdio = &gzdio_s ; + +/* =============================================================== */ +/* Support for BZIP2 library. + */ +#if HAVE_BZLIB_H + +#include + +#ifdef HAVE_BZ2_1_0 +# define bzopen BZ2_bzopen +# define bzclose BZ2_bzclose +# define bzdopen BZ2_bzdopen +# define bzerror BZ2_bzerror +# define bzflush BZ2_bzflush +# define bzread BZ2_bzread +# define bzwrite BZ2_bzwrite +#endif /* HAVE_BZ2_1_0 */ + +static void * bzdFileno(FD_t fd) +{ + return iotFileno(fd, bzdio); +} + +static FD_t bzdOpen(const char * path, const char * mode) +{ + FD_t fd; + BZFILE *bzfile;; + if ((bzfile = bzopen(path, mode)) == NULL) + return NULL; + fd = fdNew(); + fdPop(fd); fdPush(fd, bzdio, bzfile, -1); + return fdLink(fd); +} + +static FD_t bzdFdopen(void * cookie, const char * fmode) +{ + FD_t fd = c2f(cookie); + int fdno; + BZFILE *bzfile; + + if (fd == NULL || fmode == NULL) return NULL; + fdno = fdFileno(fd); + fdSetFdno(fd, -1); /* XXX skip the fdio close */ + if (fdno < 0) return NULL; + bzfile = bzdopen(fdno, fmode); + if (bzfile == NULL) return NULL; + + fdPush(fd, bzdio, bzfile, fdno); /* Push bzdio onto stack */ + + return fdLink(fd); +} + +static int bzdFlush(FD_t fd) +{ + return bzflush(bzdFileno(fd)); +} + +/* =============================================================== */ +static ssize_t bzdRead(void * cookie, void * buf, size_t count) +{ + FD_t fd = c2f(cookie); + BZFILE *bzfile; + ssize_t rc = 0; + + if (fd == NULL || fd->bytesRemain == 0) return 0; /* XXX simulate EOF */ + bzfile = bzdFileno(fd); + fdstat_enter(fd, FDSTAT_READ); + if (bzfile) + rc = bzread(bzfile, buf, count); + if (rc == -1) { + int zerror = 0; + if (bzfile) + fd->errcookie = bzerror(bzfile, &zerror); + } else if (rc >= 0) { + fdstat_exit(fd, FDSTAT_READ, rc); + if (fd->digests && rc > 0) fdUpdateDigests(fd, buf, rc); + } + return rc; +} + +static ssize_t bzdWrite(void * cookie, const void * buf, size_t count) +{ + FD_t fd = c2f(cookie); + BZFILE *bzfile; + ssize_t rc; + + if (fd == NULL || fd->bytesRemain == 0) return 0; /* XXX simulate EOF */ + + if (fd->digests && count > 0) fdUpdateDigests(fd, buf, count); + + bzfile = bzdFileno(fd); + fdstat_enter(fd, FDSTAT_WRITE); + rc = bzwrite(bzfile, (void *)buf, count); + if (rc == -1) { + int zerror = 0; + fd->errcookie = bzerror(bzfile, &zerror); + } else if (rc > 0) { + fdstat_exit(fd, FDSTAT_WRITE, rc); + } + return rc; +} + +static int bzdClose( void * cookie) +{ + FD_t fd = c2f(cookie); + BZFILE *bzfile; + int rc; + + bzfile = bzdFileno(fd); + + if (bzfile == NULL) return -2; + fdstat_enter(fd, FDSTAT_CLOSE); + /* FIX: check rc */ + bzclose(bzfile); + rc = 0; /* XXX FIXME */ + + /* XXX TODO: preserve fd if errors */ + + if (fd) { + if (rc == -1) { + int zerror = 0; + fd->errcookie = bzerror(bzfile, &zerror); + } else if (rc >= 0) { + fdstat_exit(fd, FDSTAT_CLOSE, rc); + } + } + +DBGIO(fd, (stderr, "==>\tbzdClose(%p) rc %lx %s\n", cookie, (unsigned long)rc, fdbg(fd))); + + if (_rpmio_debug || rpmIsDebug()) fdstat_print(fd, "BZDIO", stderr); + if (rc == 0) + fd = fdFree(fd); + return rc; +} + +static const struct FDIO_s bzdio_s = { + bzdRead, bzdWrite, fdSeekNot, bzdClose, fdLink, fdFree, fdNew, fdFileno, + NULL, bzdOpen, bzdFileno, bzdFlush +}; +static const FDIO_t bzdio = &bzdio_s ; + +#endif /* HAVE_BZLIB_H */ + +/* =============================================================== */ +static const char * getFdErrstr (FD_t fd) +{ + const char *errstr = NULL; + + if (fdGetIo(fd) == gzdio) { + errstr = fd->errcookie; + } else +#ifdef HAVE_BZLIB_H + if (fdGetIo(fd) == bzdio) { + errstr = fd->errcookie; + } else +#endif /* HAVE_BZLIB_H */ +#ifdef HAVE_LZMA_H + if (fdGetIo(fd) == xzdio || fdGetIo(fd) == lzdio) { + errstr = fd->errcookie; + } else +#endif /* HAVE_LZMA_H */ + { + errstr = (fd->syserrno ? strerror(fd->syserrno) : ""); + } + + return errstr; +} + +/* =============================================================== */ +/* Support for LZMA library. + */ + +#ifdef HAVE_LZMA_H + +#include +#include +#include + +#define kBufferSize (1 << 15) + +typedef struct lzfile { + /* IO buffer */ + uint8_t buf[kBufferSize]; + + lzma_stream strm; + + FILE *file; + + int encoding; + int eof; + +} LZFILE; + +static LZFILE *lzopen_internal(const char *path, const char *mode, int fd, int xz) +{ + int level = 7; /* Use XZ's default compression level if unspecified */ + int encoding = 0; + FILE *fp; + LZFILE *lzfile; + lzma_ret ret; + lzma_stream init_strm = LZMA_STREAM_INIT; + + for (; *mode; mode++) { + if (*mode == 'w') + encoding = 1; + else if (*mode == 'r') + encoding = 0; + else if (*mode >= '1' && *mode <= '9') + level = *mode - '0'; + } + if (fd != -1) + fp = fdopen(fd, encoding ? "w" : "r"); + else + fp = fopen(path, encoding ? "w" : "r"); + if (!fp) + return 0; + lzfile = calloc(1, sizeof(*lzfile)); + if (!lzfile) { + fclose(fp); + return 0; + } + + lzfile->file = fp; + lzfile->encoding = encoding; + lzfile->eof = 0; + lzfile->strm = init_strm; + if (encoding) { + if (xz) { + ret = lzma_easy_encoder(&lzfile->strm, level, LZMA_CHECK_SHA256); + } else { + lzma_options_lzma options; + lzma_lzma_preset(&options, level); + ret = lzma_alone_encoder(&lzfile->strm, &options); + } + } else { /* lzma_easy_decoder_memusage(level) is not ready yet, use hardcoded limit for now */ + ret = lzma_auto_decoder(&lzfile->strm, 100<<20, 0); + } + if (ret != LZMA_OK) { + fclose(fp); + free(lzfile); + return 0; + } + return lzfile; +} + +static LZFILE *xzopen(const char *path, const char *mode) +{ + return lzopen_internal(path, mode, -1, 1); +} + +static LZFILE *xzdopen(int fd, const char *mode) +{ + if (fd < 0) + return 0; + return lzopen_internal(0, mode, fd, 1); +} + +static LZFILE *lzopen(const char *path, const char *mode) +{ + return lzopen_internal(path, mode, -1, 0); +} + +static LZFILE *lzdopen(int fd, const char *mode) +{ + if (fd < 0) + return 0; + return lzopen_internal(0, mode, fd, 0); +} + +static int lzflush(LZFILE *lzfile) +{ + return fflush(lzfile->file); +} + +static int lzclose(LZFILE *lzfile) +{ + lzma_ret ret; + size_t n; + int rc; + + if (!lzfile) + return -1; + if (lzfile->encoding) { + for (;;) { + lzfile->strm.avail_out = kBufferSize; + lzfile->strm.next_out = lzfile->buf; + ret = lzma_code(&lzfile->strm, LZMA_FINISH); + if (ret != LZMA_OK && ret != LZMA_STREAM_END) + return -1; + n = kBufferSize - lzfile->strm.avail_out; + if (n && fwrite(lzfile->buf, 1, n, lzfile->file) != n) + return -1; + if (ret == LZMA_STREAM_END) + break; + } + } + lzma_end(&lzfile->strm); + rc = fclose(lzfile->file); + free(lzfile); + return rc; +} + +static ssize_t lzread(LZFILE *lzfile, void *buf, size_t len) +{ + lzma_ret ret; + int eof = 0; + + if (!lzfile || lzfile->encoding) + return -1; + if (lzfile->eof) + return 0; + lzfile->strm.next_out = buf; + lzfile->strm.avail_out = len; + for (;;) { + if (!lzfile->strm.avail_in) { + lzfile->strm.next_in = lzfile->buf; + lzfile->strm.avail_in = fread(lzfile->buf, 1, kBufferSize, lzfile->file); + if (!lzfile->strm.avail_in) + eof = 1; + } + ret = lzma_code(&lzfile->strm, LZMA_RUN); + if (ret == LZMA_STREAM_END) { + lzfile->eof = 1; + return len - lzfile->strm.avail_out; + } + if (ret != LZMA_OK) + return -1; + if (!lzfile->strm.avail_out) + return len; + if (eof) + return -1; + } +} + +static ssize_t lzwrite(LZFILE *lzfile, void *buf, size_t len) +{ + lzma_ret ret; + size_t n; + if (!lzfile || !lzfile->encoding) + return -1; + if (!len) + return 0; + lzfile->strm.next_in = buf; + lzfile->strm.avail_in = len; + for (;;) { + lzfile->strm.next_out = lzfile->buf; + lzfile->strm.avail_out = kBufferSize; + ret = lzma_code(&lzfile->strm, LZMA_RUN); + if (ret != LZMA_OK) + return -1; + n = kBufferSize - lzfile->strm.avail_out; + if (n && fwrite(lzfile->buf, 1, n, lzfile->file) != n) + return -1; + if (!lzfile->strm.avail_in) + return len; + } +} + +/* =============================================================== */ + +static void * lzdFileno(FD_t fd) +{ + void * rc = NULL; + + if (fd == NULL) + return NULL; + + for (int i = fd->nfps; i >= 0; i--) { + FDSTACK_t * fps = &fd->fps[i]; + if (fps->io != xzdio && fps->io != lzdio) + continue; + rc = fps->fp; + break; + } + return rc; +} + +static FD_t xzdOpen(const char * path, const char * mode) +{ + FD_t fd; + LZFILE *lzfile; + if ((lzfile = xzopen(path, mode)) == NULL) + return NULL; + fd = fdNew(); + fdPop(fd); fdPush(fd, xzdio, lzfile, -1); + return fdLink(fd); +} + +static FD_t xzdFdopen(void * cookie, const char * fmode) +{ + FD_t fd = c2f(cookie); + int fdno; + LZFILE *lzfile; + + if (fd == NULL || fmode == NULL) return NULL; + fdno = fdFileno(fd); + fdSetFdno(fd, -1); /* XXX skip the fdio close */ + if (fdno < 0) return NULL; + lzfile = xzdopen(fdno, fmode); + if (lzfile == NULL) return NULL; + fdPush(fd, xzdio, lzfile, fdno); + return fdLink(fd); +} + +static FD_t lzdOpen(const char * path, const char * mode) +{ + FD_t fd; + LZFILE *lzfile; + if ((lzfile = lzopen(path, mode)) == NULL) + return NULL; + fd = fdNew(); + fdPop(fd); fdPush(fd, xzdio, lzfile, -1); + return fdLink(fd); +} + +static FD_t lzdFdopen(void * cookie, const char * fmode) +{ + FD_t fd = c2f(cookie); + int fdno; + LZFILE *lzfile; + + if (fd == NULL || fmode == NULL) return NULL; + fdno = fdFileno(fd); + fdSetFdno(fd, -1); /* XXX skip the fdio close */ + if (fdno < 0) return NULL; + lzfile = lzdopen(fdno, fmode); + if (lzfile == NULL) return NULL; + fdPush(fd, xzdio, lzfile, fdno); + return fdLink(fd); +} + +static int lzdFlush(FD_t fd) +{ + return lzflush(lzdFileno(fd)); +} + +/* =============================================================== */ +static ssize_t lzdRead(void * cookie, void * buf, size_t count) +{ + FD_t fd = c2f(cookie); + LZFILE *lzfile; + ssize_t rc = 0; + + if (fd == NULL || fd->bytesRemain == 0) return 0; /* XXX simulate EOF */ + lzfile = lzdFileno(fd); + fdstat_enter(fd, FDSTAT_READ); + if (lzfile) + rc = lzread(lzfile, buf, count); + if (rc == -1) { + fd->errcookie = "Lzma: decoding error"; + } else if (rc >= 0) { + fdstat_exit(fd, FDSTAT_READ, rc); + if (fd->digests && rc > 0) fdUpdateDigests(fd, buf, rc); + } + return rc; +} + +static ssize_t lzdWrite(void * cookie, const void * buf, size_t count) +{ + FD_t fd = c2f(cookie); + LZFILE *lzfile; + ssize_t rc = 0; + + if (fd == NULL || fd->bytesRemain == 0) return 0; /* XXX simulate EOF */ + + if (fd->digests && count > 0) fdUpdateDigests(fd, buf, count); + + lzfile = lzdFileno(fd); + + fdstat_enter(fd, FDSTAT_WRITE); + rc = lzwrite(lzfile, (void *)buf, count); + if (rc < 0) { + fd->errcookie = "Lzma: encoding error"; + } else if (rc > 0) { + fdstat_exit(fd, FDSTAT_WRITE, rc); + } + return rc; +} + +static int lzdClose(void * cookie) +{ + FD_t fd = c2f(cookie); + LZFILE *lzfile; + int rc; + + lzfile = lzdFileno(fd); + + if (lzfile == NULL) return -2; + fdstat_enter(fd, FDSTAT_CLOSE); + rc = lzclose(lzfile); + + /* XXX TODO: preserve fd if errors */ + + if (fd) { + if (rc == -1) { + fd->errcookie = strerror(ferror(lzfile->file)); + } else if (rc >= 0) { + fdstat_exit(fd, FDSTAT_CLOSE, rc); + } + } + +DBGIO(fd, (stderr, "==>\tlzdClose(%p) rc %lx %s\n", cookie, (unsigned long)rc, fdbg(fd))); + + if (_rpmio_debug || rpmIsDebug()) fdstat_print(fd, "XZDIO", stderr); + if (rc == 0) + fd = fdFree(fd); + return rc; +} + +static struct FDIO_s xzdio_s = { + lzdRead, lzdWrite, fdSeekNot, lzdClose, NULL, NULL, NULL, fdFileno, + NULL, xzdOpen, lzdFileno, lzdFlush +}; +static const FDIO_t xzdio = &xzdio_s; + +static struct FDIO_s lzdio_s = { + lzdRead, lzdWrite, fdSeekNot, lzdClose, NULL, NULL, NULL, fdFileno, + NULL, lzdOpen, lzdFileno, lzdFlush +}; +static const FDIO_t lzdio = &lzdio_s; + +#endif /* HAVE_LZMA_H */ + +/* =============================================================== */ + +const char *Fstrerror(FD_t fd) +{ + if (fd == NULL) + return (errno ? strerror(errno) : ""); + return getFdErrstr(fd); +} + +#define FDIOVEC(_fd, _vec) \ + ((fdGetIo(_fd) && fdGetIo(_fd)->_vec) ? fdGetIo(_fd)->_vec : NULL) + +ssize_t Fread(void *buf, size_t size, size_t nmemb, FD_t fd) { + fdio_read_function_t _read; + int rc; + + if (fd == NULL) + return 0; + + if (fdGetIo(fd) == fpio) { + rc = fread(buf, size, nmemb, fdGetFILE(fd)); + return rc; + } + + _read = FDIOVEC(fd, read); + + rc = (_read ? (*_read) (fd, buf, size * nmemb) : -2); + return rc; +} + +ssize_t Fwrite(const void *buf, size_t size, size_t nmemb, FD_t fd) +{ + fdio_write_function_t _write; + int rc; + + if (fd == NULL) + return 0; + + if (fdGetIo(fd) == fpio) { + rc = fwrite(buf, size, nmemb, fdGetFILE(fd)); + return rc; + } + + _write = FDIOVEC(fd, write); + + rc = (_write ? _write(fd, buf, size * nmemb) : -2); + return rc; +} + +int Fseek(FD_t fd, _libio_off_t offset, int whence) { + fdio_seek_function_t _seek; +#ifdef USE_COOKIE_SEEK_POINTER + _IO_off64_t o64 = offset; + _libio_pos_t pos = &o64; +#else + _libio_pos_t pos = offset; +#endif + + long int rc; + + if (fd == NULL) + return -1; + + if (fdGetIo(fd) == fpio) { + FILE *fp; + + fp = fdGetFILE(fd); + rc = fseek(fp, offset, whence); + return rc; + } + + _seek = FDIOVEC(fd, seek); + + rc = (_seek ? _seek(fd, pos, whence) : -2); + return rc; +} + +int Fclose(FD_t fd) +{ + int rc = 0, ec = 0; + + if (fd == NULL) + return -1; + + fd = fdLink(fd); + while (fd->nfps >= 0) { + FDSTACK_t * fps = &fd->fps[fd->nfps]; + + if (fps->io == fpio) { + FILE *fp; + int fpno; + + fp = fdGetFILE(fd); + fpno = fileno(fp); + if (fp) + rc = fclose(fp); + if (fpno == -1) { + fd = fdFree(fd); + fdPop(fd); + } + } else { + fdio_close_function_t _close = FDIOVEC(fd, close); + rc = _close ? _close(fd) : -2; + } + if (fd->nfps == 0) + break; + if (ec == 0 && rc) + ec = rc; + fdPop(fd); + } + fd = fdFree(fd); + return ec; +} + +/** + * Convert stdio fmode to open(2) mode, filtering out zlib/bzlib flags. + * returns stdio[0] = NUL on error. + * + * - gzopen: [0-9] is compression level + * - gzopen: 'f' is filtered (Z_FILTERED) + * - gzopen: 'h' is Huffman encoding (Z_HUFFMAN_ONLY) + * - bzopen: [1-9] is block size (modulo 100K) + * - bzopen: 's' is smallmode + * - HACK: '.' terminates, rest is type of I/O + */ +static void cvtfmode (const char *m, + char *stdio, size_t nstdio, + char *other, size_t nother, + const char **end, int * f) +{ + int flags = 0; + char c; + + switch (*m) { + case 'a': + flags |= O_WRONLY | O_CREAT | O_APPEND; + if (--nstdio > 0) *stdio++ = *m; + break; + case 'w': + flags |= O_WRONLY | O_CREAT | O_TRUNC; + if (--nstdio > 0) *stdio++ = *m; + break; + case 'r': + flags |= O_RDONLY; + if (--nstdio > 0) *stdio++ = *m; + break; + default: + *stdio = '\0'; + return; + break; + } + m++; + + while ((c = *m++) != '\0') { + switch (c) { + case '.': + break; + case '+': + flags &= ~(O_RDONLY|O_WRONLY); + flags |= O_RDWR; + if (--nstdio > 0) *stdio++ = c; + continue; + break; + case 'b': + if (--nstdio > 0) *stdio++ = c; + continue; + break; + case 'x': + flags |= O_EXCL; + if (--nstdio > 0) *stdio++ = c; + continue; + break; + default: + if (--nother > 0) *other++ = c; + continue; + break; + } + break; + } + + *stdio = *other = '\0'; + if (end != NULL) + *end = (*m != '\0' ? m : NULL); + if (f != NULL) + *f = flags; +} + +#if _USE_LIBIO +#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ == 0 +/* XXX retrofit glibc-2.1.x typedef on glibc-2.0.x systems */ +typedef _IO_cookie_io_functions_t cookie_io_functions_t; +#endif +#endif + +FD_t Fdopen(FD_t ofd, const char *fmode) +{ + char stdio[20], other[20], zstdio[20]; + const char *end = NULL; + FDIO_t iof = NULL; + FD_t fd = ofd; + +if (_rpmio_debug) +fprintf(stderr, "*** Fdopen(%p,%s) %s\n", fd, fmode, fdbg(fd)); + + if (fd == NULL || fmode == NULL) + return NULL; + + cvtfmode(fmode, stdio, sizeof(stdio), other, sizeof(other), &end, NULL); + if (stdio[0] == '\0') + return NULL; + zstdio[0] = '\0'; + strncat(zstdio, stdio, sizeof(zstdio) - strlen(zstdio)); + strncat(zstdio, other, sizeof(zstdio) - strlen(zstdio)); + + if (end == NULL && other[0] == '\0') + return fd; + + if (end && *end) { + if (rstreq(end, "fdio")) { + iof = fdio; + } else if (rstreq(end, "gzdio") || rstreq(end, "gzip")) { + iof = gzdio; + fd = gzdFdopen(fd, zstdio); +#if HAVE_BZLIB_H + } else if (rstreq(end, "bzdio") || rstreq(end, "bzip2")) { + iof = bzdio; + fd = bzdFdopen(fd, zstdio); +#endif +#if HAVE_LZMA_H + } else if (rstreq(end, "xzdio") || rstreq(end, "xz")) { + iof = xzdio; + fd = xzdFdopen(fd, zstdio); + } else if (rstreq(end, "lzdio") || rstreq(end, "lzma")) { + iof = lzdio; + fd = lzdFdopen(fd, zstdio); +#endif + } else if (rstreq(end, "ufdio")) { + iof = ufdio; + } else if (rstreq(end, "fpio")) { + iof = fpio; + if (noLibio) { + int fdno = Fileno(fd); + FILE * fp = fdopen(fdno, stdio); +if (_rpmio_debug) +fprintf(stderr, "*** Fdopen fpio fp %p\n", (void *)fp); + if (fp == NULL) + return NULL; + /* XXX gzdio/bzdio use fp for private data */ + if (fdGetFp(fd) == NULL) + fdSetFp(fd, fp); + fdPush(fd, fpio, fp, fdno); /* Push fpio onto stack */ + } + } + } else if (other[0] != '\0') { + for (end = other; *end && strchr("0123456789fh", *end); end++) + {}; + if (*end == '\0') { + iof = gzdio; + fd = gzdFdopen(fd, zstdio); + } + } + if (iof == NULL) + return fd; + + if (!noLibio) { + FILE * fp = NULL; + +#if _USE_LIBIO + { cookie_io_functions_t ciof; + ciof.read = (cookie_read_function_t *) iof->read; + ciof.write = (cookie_write_function_t *) iof->write; + ciof.seek = iof->seek; + ciof.close = iof->close; + fp = fopencookie(fd, stdio, ciof); +DBGIO(fd, (stderr, "==> fopencookie(%p,\"%s\",*%p) returns fp %p\n", fd, stdio, iof, fp)); + } +#endif + + if (fp) { + /* XXX gzdio/bzdio use fp for private data */ + if (fdGetFp(fd) == NULL) + fdSetFp(fd, fp); + fdPush(fd, fpio, fp, fileno(fp)); /* Push fpio onto stack */ + fd = fdLink(fd); + } + } + +DBGIO(fd, (stderr, "==> Fdopen(%p,\"%s\") returns fd %p %s\n", ofd, fmode, (fd ? fd : NULL), fdbg(fd))); + return fd; +} + +FD_t Fopen(const char *path, const char *fmode) +{ + char stdio[20], other[20]; + const char *end = NULL; + mode_t perms = 0666; + int flags = 0; + FD_t fd; + + if (path == NULL || fmode == NULL) + return NULL; + + stdio[0] = '\0'; + cvtfmode(fmode, stdio, sizeof(stdio), other, sizeof(other), &end, &flags); + if (stdio[0] == '\0') + return NULL; + + if (end == NULL || rstreq(end, "fdio")) { +if (_rpmio_debug) +fprintf(stderr, "*** Fopen fdio path %s fmode %s\n", path, fmode); + fd = fdOpen(path, flags, perms); + if (fdFileno(fd) < 0) { + if (fd) (void) fdClose(fd); + return NULL; + } + } else { + /* XXX gzdio and bzdio here too */ + + switch (urlIsURL(path)) { + case URL_IS_HTTPS: + case URL_IS_HTTP: + case URL_IS_HKP: + case URL_IS_PATH: + case URL_IS_DASH: + case URL_IS_FTP: + case URL_IS_UNKNOWN: +if (_rpmio_debug) +fprintf(stderr, "*** Fopen ufdio path %s fmode %s\n", path, fmode); + fd = ufdOpen(path, flags, perms); + if (fd == NULL || !(fdFileno(fd) >= 0)) + return fd; + break; + default: +if (_rpmio_debug) +fprintf(stderr, "*** Fopen WTFO path %s fmode %s\n", path, fmode); + return NULL; + break; + } + + } + + if (fd) + fd = Fdopen(fd, fmode); + return fd; +} + +int Fflush(FD_t fd) +{ + void * vh; + if (fd == NULL) return -1; + if (fdGetIo(fd) == fpio) + return fflush(fdGetFILE(fd)); + + vh = fdGetFp(fd); + if (vh && fdGetIo(fd) == gzdio) + return gzdFlush(vh); +#if HAVE_BZLIB_H + if (vh && fdGetIo(fd) == bzdio) + return bzdFlush(vh); +#endif +#if HAVE_LZMA_H + if (vh && (fdGetIo(fd) == xzdio || fdGetIo(fd) == lzdio)) + return lzdFlush(vh); +#endif +/* FIXME: If we get here, something went wrong above */ + return 0; +} + +off_t Ftell(FD_t fd) +{ + FDIO_t iot; + off_t pos = -2; /* assume not implemented */ + + if (fd == NULL) return -1; + iot = fdGetIo(fd); + /* this wont work correctly for compressed types */ + if (iot == fpio || iot == fdio || iot == ufdio) { + pos = lseek(Fileno(fd), 0, SEEK_CUR); + } + + return pos; +} + +int Ferror(FD_t fd) +{ + int i, rc = 0; + + if (fd == NULL) return -1; + for (i = fd->nfps; rc == 0 && i >= 0; i--) { + FDSTACK_t * fps = &fd->fps[i]; + int ec; + + if (fps->io == fpio) { + ec = ferror(fdGetFILE(fd)); + } else if (fps->io == gzdio) { + ec = (fd->syserrno || fd->errcookie != NULL) ? -1 : 0; + i--; /* XXX fdio under gzdio always has fdno == -1 */ +#if HAVE_BZLIB_H + } else if (fps->io == bzdio) { + ec = (fd->syserrno || fd->errcookie != NULL) ? -1 : 0; + i--; /* XXX fdio under bzdio always has fdno == -1 */ +#endif +#if HAVE_LZMA_H + } else if (fps->io == xzdio || fps->io == lzdio) { + ec = (fd->syserrno || fd->errcookie != NULL) ? -1 : 0; + i--; /* XXX fdio under xzdio/lzdio always has fdno == -1 */ +#endif + } else { + /* XXX need to check ufdio/gzdio/bzdio/fdio errors correctly. */ + ec = (fdFileno(fd) < 0 ? -1 : 0); + } + + if (rc == 0 && ec) + rc = ec; + } +DBGIO(fd, (stderr, "==> Ferror(%p) rc %d %s\n", fd, rc, fdbg(fd))); + return rc; +} + +int Fileno(FD_t fd) +{ + int i, rc = -1; + + if (fd == NULL) return -1; + for (i = fd->nfps ; rc == -1 && i >= 0; i--) { + rc = fd->fps[i].fdno; + } + +DBGIO(fd, (stderr, "==> Fileno(%p) rc %d %s\n", (fd ? fd : NULL), rc, fdbg(fd))); + return rc; +} + +/* XXX this is naive */ +int Fcntl(FD_t fd, int op, void *lip) +{ + return fcntl(Fileno(fd), op, lip); +} + +rpmop fdOp(FD_t fd, fdOpX opx) +{ + rpmop op = NULL; + + if (fd != NULL && fd->stats != NULL && opx >= 0 && opx < FDSTAT_MAX) + op = fd->stats->ops + opx; + return op; +} + +int rpmioSlurp(const char * fn, uint8_t ** bp, ssize_t * blenp) +{ + static const ssize_t blenmax = (32 * BUFSIZ); + ssize_t blen = 0; + uint8_t * b = NULL; + ssize_t size; + FD_t fd; + int rc = 0; + + fd = Fopen(fn, "r.ufdio"); + if (fd == NULL || Ferror(fd)) { + rc = 2; + goto exit; + } + + size = fdSize(fd); + blen = (size >= 0 ? size : blenmax); + if (blen) { + int nb; + b = xmalloc(blen+1); + b[0] = '\0'; + nb = Fread(b, sizeof(*b), blen, fd); + if (Ferror(fd) || (size > 0 && nb != blen)) { + rc = 1; + goto exit; + } + if (blen == blenmax && nb < blen) { + blen = nb; + b = xrealloc(b, blen+1); + } + b[blen] = '\0'; + } + +exit: + if (fd) (void) Fclose(fd); + + if (rc) { + if (b) free(b); + b = NULL; + blen = 0; + } + + if (bp) *bp = b; + else if (b) free(b); + + if (blenp) *blenp = blen; + + return rc; +} + +static const struct FDIO_s fpio_s = { + fdRead, fdWrite, fdSeek, fdClose, fdLink, fdFree, fdNew, fdFileno, + ufdOpen, NULL, fdGetFp, NULL +}; +static const FDIO_t fpio = &fpio_s ; + +void fdInitDigest(FD_t fd, int hashalgo, rpmDigestFlags flags) +{ + if (fd->digests == NULL) { + fd->digests = rpmDigestBundleNew(); + } + fdstat_enter(fd, FDSTAT_DIGEST); + rpmDigestBundleAdd(fd->digests, hashalgo, flags); + fdstat_exit(fd, FDSTAT_DIGEST, (ssize_t) 0); +} + +static void fdUpdateDigests(FD_t fd, const void * buf, size_t buflen) +{ + if (fd && fd->digests) { + fdstat_enter(fd, FDSTAT_DIGEST); + rpmDigestBundleUpdate(fd->digests, buf, buflen); + fdstat_exit(fd, FDSTAT_DIGEST, (ssize_t) buflen); + } +} + +void fdFiniDigest(FD_t fd, int hashalgo, + void ** datap, size_t * lenp, int asAscii) +{ + if (fd && fd->digests) { + fdstat_enter(fd, FDSTAT_DIGEST); + rpmDigestBundleFinal(fd->digests, hashalgo, datap, lenp, asAscii); + fdstat_exit(fd, FDSTAT_DIGEST, (ssize_t) 0); + } +} + + diff --git a/rpmio/rpmio.h b/rpmio/rpmio.h new file mode 100644 index 0000000..93072e0 --- /dev/null +++ b/rpmio/rpmio.h @@ -0,0 +1,169 @@ +#ifndef H_RPMIO +#define H_RPMIO + +/** \ingroup rpmio + * \file rpmio/rpmio.h + * + */ + +#include +#include +#include +#include +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmio + * Hide libio API lossage. + * The libio interface changed after glibc-2.1.3 to pass the seek offset + * argument as a pointer rather than as an off_t. The snarl below defines + * typedefs to isolate the lossage. + */ +#if defined(__GLIBC__) && \ + (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) +#define USE_COOKIE_SEEK_POINTER 1 +typedef _IO_off64_t _libio_off_t; +typedef _libio_off_t * _libio_pos_t; +#else +typedef off_t _libio_off_t; +typedef off_t _libio_pos_t; +#endif + +/** \ingroup rpmio + */ +typedef const struct FDIO_s * FDIO_t; + + +/** \ingroup rpmio + * \name RPMIO Interface. + */ + +/** \ingroup rpmio + * strerror(3) clone. + */ +const char * Fstrerror(FD_t fd); + +/** \ingroup rpmio + * fread(3) clone. + */ +ssize_t Fread(void * buf, size_t size, size_t nmemb, FD_t fd); + +/** \ingroup rpmio + * fwrite(3) clone. + */ +ssize_t Fwrite(const void * buf, size_t size, size_t nmemb, FD_t fd); + +/** \ingroup rpmio + * fseek(3) clone. + */ +int Fseek(FD_t fd, _libio_off_t offset, int whence); + +/** \ingroup rpmio + * ftell(3) clone. + */ +off_t Ftell(FD_t fd); + +/** \ingroup rpmio + * fclose(3) clone. + */ +int Fclose( FD_t fd); + +/** \ingroup rpmio + */ +FD_t Fdopen(FD_t ofd, const char * fmode); + +/** \ingroup rpmio + * fopen(3) clone. + */ +FD_t Fopen(const char * path, + const char * fmode); + + +/** \ingroup rpmio + * fflush(3) clone. + */ +int Fflush(FD_t fd); + +/** \ingroup rpmio + * ferror(3) clone. + */ +int Ferror(FD_t fd); + +/** \ingroup rpmio + * fileno(3) clone. + */ +int Fileno(FD_t fd); + +/** \ingroup rpmio + * fcntl(2) clone. + */ +int Fcntl(FD_t fd, int op, void *lip); + +/** \ingroup rpmio + * \name RPMIO Utilities. + */ + +/** \ingroup rpmio + */ +off_t fdSize(FD_t fd); + +/** \ingroup rpmio + */ +FD_t fdDup(int fdno); + +/** \ingroup rpmio + * Get associated FILE stream from fd (if any) + */ +FILE * fdGetFILE(FD_t fd); + +/** \ingroup rpmio + */ +FD_t fdLink(void * cookie); + +/** \ingroup rpmio + */ +FD_t fdFree(FD_t fd); + +/** \ingroup rpmio + */ +FD_t fdNew (void); + +/** + */ +int ufdCopy(FD_t sfd, FD_t tfd); + +/** + * XXX the name is misleading, this is a legacy wrapper that ensures + * only S_ISREG() files are read, nothing to do with timed... + * TODO: get this out of the API + */ +ssize_t timedRead(FD_t fd, void * bufptr, size_t length); + +/** \ingroup rpmio + * Identify per-desciptor I/O operation statistics. + */ +typedef enum fdOpX_e { + FDSTAT_READ = 0, /*!< Read statistics index. */ + FDSTAT_WRITE = 1, /*!< Write statistics index. */ + FDSTAT_SEEK = 2, /*!< Seek statistics index. */ + FDSTAT_CLOSE = 3, /*!< Close statistics index */ + FDSTAT_DIGEST = 4, /*!< Digest statistics index. */ + FDSTAT_MAX = 5 +} fdOpX; + +/** \ingroup rpmio + * + */ +rpmop fdOp(FD_t fd, fdOpX opx); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMIO */ diff --git a/rpmio/rpmio_internal.h b/rpmio/rpmio_internal.h new file mode 100644 index 0000000..8c9f1a8 --- /dev/null +++ b/rpmio/rpmio_internal.h @@ -0,0 +1,44 @@ +#ifndef H_RPMIO_INTERNAL +#define H_RPMIO_INTERNAL + +/** \ingroup rpmio + * \file rpmio/rpmio_internal.h + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void fdSetBundle(FD_t fd, rpmDigestBundle bundle); +rpmDigestBundle fdGetBundle(FD_t fd); + +/** \ingroup rpmio + * Attach digest to fd. + */ +void fdInitDigest(FD_t fd, int hashalgo, rpmDigestFlags flags); + +/** \ingroup rpmio + */ +void fdFiniDigest(FD_t fd, int hashalgo, + void ** datap, + size_t * lenp, + int asAscii); + +/** + * Read an entire file into a buffer. + * @param fn file name to read + * @retval *bp (malloc'd) buffer address + * @retval *blenp (malloc'd) buffer length + * @return 0 on success + */ +int rpmioSlurp(const char * fn, + uint8_t ** bp, ssize_t * blenp); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMIO_INTERNAL */ diff --git a/rpmio/rpmkeyring.c b/rpmio/rpmkeyring.c new file mode 100644 index 0000000..784bc3a --- /dev/null +++ b/rpmio/rpmkeyring.c @@ -0,0 +1,231 @@ +#include "system.h" + +#include +#include +#include +#include +#include + +#include "rpmio/base64.h" +#include "rpmio/digest.h" + +#include "debug.h" + +struct rpmPubkey_s { + uint8_t *pkt; + size_t pktlen; + pgpKeyID_t keyid; + int nrefs; +}; + +struct rpmKeyring_s { + struct rpmPubkey_s **keys; + size_t numkeys; + int nrefs; +}; + +static rpmPubkey rpmPubkeyUnlink(rpmPubkey key); +static rpmKeyring rpmKeyringUnlink(rpmKeyring keyring); + +static int keyidcmp(const void *k1, const void *k2) +{ + const struct rpmPubkey_s *key1 = *(const struct rpmPubkey_s **) k1; + const struct rpmPubkey_s *key2 = *(const struct rpmPubkey_s **) k2; + + return memcmp(key1->keyid, key2->keyid, sizeof(key1->keyid)); +} + +rpmKeyring rpmKeyringNew(void) +{ + rpmKeyring keyring = xcalloc(1, sizeof(*keyring)); + keyring->keys = NULL; + keyring->numkeys = 0; + keyring->nrefs = 0; + return rpmKeyringLink(keyring); +} + +rpmKeyring rpmKeyringFree(rpmKeyring keyring) +{ + if (keyring == NULL) { + return NULL; + } + + if (keyring->nrefs > 1) { + return rpmKeyringUnlink(keyring); + } + + if (keyring->keys) { + for (int i = 0; i < keyring->numkeys; i++) { + keyring->keys[i] = rpmPubkeyFree(keyring->keys[i]); + } + free(keyring->keys); + } + free(keyring); + return NULL; +} + +static rpmPubkey rpmKeyringFindKeyid(rpmKeyring keyring, rpmPubkey key) +{ + rpmPubkey *found = NULL; + found = bsearch(&key, keyring->keys, keyring->numkeys, sizeof(*keyring->keys), keyidcmp); + return found ? *found : NULL; +} + +int rpmKeyringAddKey(rpmKeyring keyring, rpmPubkey key) +{ + if (keyring == NULL || key == NULL) + return -1; + + /* check if we already have this key */ + if (rpmKeyringFindKeyid(keyring, key)) { + return 1; + } + + keyring->keys = xrealloc(keyring->keys, (keyring->numkeys + 1) * sizeof(rpmPubkey)); + keyring->keys[keyring->numkeys] = rpmPubkeyLink(key); + keyring->numkeys++; + qsort(keyring->keys, keyring->numkeys, sizeof(*keyring->keys), keyidcmp); + + return 0; +} + +rpmKeyring rpmKeyringLink(rpmKeyring keyring) +{ + if (keyring) { + keyring->nrefs++; + } + return keyring; +} + +static rpmKeyring rpmKeyringUnlink(rpmKeyring keyring) +{ + if (keyring) { + keyring->nrefs--; + } + return NULL; +} + +rpmPubkey rpmPubkeyRead(const char *filename) +{ + uint8_t *pkt = NULL; + size_t pktlen; + rpmPubkey key = NULL; + + if (pgpReadPkts(filename, &pkt, &pktlen) <= 0) { + goto exit; + } + key = rpmPubkeyNew(pkt, pktlen); + free(pkt); + +exit: + return key; +} + +rpmPubkey rpmPubkeyNew(const uint8_t *pkt, size_t pktlen) +{ + rpmPubkey key = NULL; + + if (pkt == NULL || pktlen == 0) + goto exit; + + key = xcalloc(1, sizeof(*key)); + pgpPubkeyFingerprint(pkt, pktlen, key->keyid); + key->pkt = xmalloc(pktlen); + key->pktlen = pktlen; + key->nrefs = 0; + memcpy(key->pkt, pkt, pktlen); + +exit: + return rpmPubkeyLink(key); +} + +rpmPubkey rpmPubkeyFree(rpmPubkey key) +{ + if (key == NULL) + return NULL; + + if (key->nrefs > 1) + return rpmPubkeyUnlink(key); + + free(key->pkt); + free(key); + return NULL; +} + +rpmPubkey rpmPubkeyLink(rpmPubkey key) +{ + if (key) { + key->nrefs++; + } + return key; +} + +static rpmPubkey rpmPubkeyUnlink(rpmPubkey key) +{ + if (key) { + key->nrefs--; + } + return NULL; +} + +pgpDig rpmPubkeyDig(rpmPubkey key) +{ + pgpDig dig = NULL; + static unsigned char zeros[] = + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + int rc; + if (key == NULL) + return NULL; + + dig = pgpNewDig(); + rc = pgpPrtPkts(key->pkt, key->pktlen, dig, 0); + if (rc == 0) { + pgpDigParams pubp = &dig->pubkey; + if (!memcmp(pubp->signid, zeros, sizeof(pubp->signid)) || + !memcmp(pubp->time, zeros, sizeof(pubp->time)) || + pubp->userid == NULL) { + rc = -1; + } + } + + if (rc) + dig = pgpFreeDig(dig); + + return dig; +} + +char * rpmPubkeyBase64(rpmPubkey key) +{ + char *enc = NULL; + + if (key) { + enc = b64encode(key->pkt, key->pktlen, -1); + } + return enc; +} + +rpmRC rpmKeyringLookup(rpmKeyring keyring, pgpDig sig) +{ + rpmRC res = RPMRC_NOKEY; + + if (keyring && sig) { + pgpDigParams sigp = &sig->signature; + pgpDigParams pubp = &sig->pubkey; + struct rpmPubkey_s needle, *key; + needle.pkt = NULL; + needle.pktlen = 0; + memcpy(needle.keyid, sigp->signid, sizeof(needle.keyid)); + + if ((key = rpmKeyringFindKeyid(keyring, &needle))) { + /* Retrieve parameters from pubkey packet(s) */ + int pktrc = pgpPrtPkts(key->pkt, key->pktlen, sig, 0); + /* Do the parameters match the signature? */ + if (pktrc == 0 && sigp->pubkey_algo == pubp->pubkey_algo && + memcmp(sigp->signid, pubp->signid, sizeof(sigp->signid)) == 0) { + res = RPMRC_OK; + } + } + } + + return res; +} diff --git a/rpmio/rpmkeyring.h b/rpmio/rpmkeyring.h new file mode 100644 index 0000000..8b4378b --- /dev/null +++ b/rpmio/rpmkeyring.h @@ -0,0 +1,96 @@ +#ifndef _RPMKEYRING_H +#define _RPMKEYRING_H + +/** \ingroup rpmkeyring + * \file rpmio/rpmkeyring.h + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmkeyring + * Create a new, empty keyring + * @return new keyring handle + */ +rpmKeyring rpmKeyringNew(void); + +/** \ingroup rpmkeyring + * Free keyring and the keys within it + * @return NULL always + */ +rpmKeyring rpmKeyringFree(rpmKeyring keyring); + +/** \ingroup rpmkeyring + * Add a public key to keyring. + * @param keyring keyring handle + * @param key pubkey handle + * @return 0 on success, -1 on error, 1 if key already present + */ +int rpmKeyringAddKey(rpmKeyring keyring, rpmPubkey key); + +/** \ingroup rpmkeyring + * Perform keyring lookup for a key matching a signature + * @param keyring keyring handle + * @param sig OpenPGP packet container of signature + * @return RPMRC_OK if found, RPMRC_NOKEY otherwise + */ +rpmRC rpmKeyringLookup(rpmKeyring keyring, pgpDig sig); + +/** \ingroup rpmkeyring + * Reference a keyring. + * @param keyring keyring handle + * @return new keyring reference + */ +rpmKeyring rpmKeyringLink(rpmKeyring keyring); + +/** \ingroup rpmkeyring + * Create a new rpmPubkey from OpenPGP packet + * @param pkt OpenPGP packet data + * @param pktlen Data length + * @return new pubkey handle + */ +rpmPubkey rpmPubkeyNew(const uint8_t *pkt, size_t pktlen); + +/** \ingroup rpmkeyring + * Create a new rpmPubkey from ASCII-armored pubkey file + * @param filename Path to pubkey file + * @return new pubkey handle + */ +rpmPubkey rpmPubkeyRead(const char *filename); + +/** \ingroup rpmkeyring + * Free a pubkey. + * @param key Pubkey to free + * @return NULL always + */ +rpmPubkey rpmPubkeyFree(rpmPubkey key); + +/** \ingroup rpmkeyring + * Reference a pubkey. + * @param key Pubkey + * @return new pubkey reference + */ +rpmPubkey rpmPubkeyLink(rpmPubkey key); + +/** \ingroup rpmkeyring + * Parse OpenPGP pubkey parameters. + * @param key Pubkey + * @return parsed output of pubkey packet parameters + */ +pgpDig rpmPubkeyDig(rpmPubkey key); + +/** \ingroup rpmkeyring + * Return base64 encoding of pubkey + * @param key Pubkey + * @return base64 encoded pubkey (malloced), NULL on error + */ +char * rpmPubkeyBase64(rpmPubkey key); + +#ifdef __cplusplus +} +#endif +#endif /* _RPMKEYDB_H */ diff --git a/rpmio/rpmlog.c b/rpmio/rpmlog.c new file mode 100644 index 0000000..8023d5c --- /dev/null +++ b/rpmio/rpmlog.c @@ -0,0 +1,230 @@ +/** \ingroup rpmio + * \file rpmio/rpmlog.c + */ + +#include "system.h" +#include +#include +#include +#include "debug.h" + +static int nrecs = 0; +static rpmlogRec recs = NULL; + +struct rpmlogRec_s { + int code; /* unused */ + rpmlogLvl pri; /* priority */ + char * message; /* log message string */ +}; + +int rpmlogGetNrecs(void) +{ + return nrecs; +} + +int rpmlogCode(void) +{ + if (recs != NULL && nrecs > 0) + return recs[nrecs-1].code; + return -1; +} + + +const char * rpmlogMessage(void) +{ + if (recs != NULL && nrecs > 0) + return recs[nrecs-1].message; + return _("(no error)"); +} + +const char * rpmlogRecMessage(rpmlogRec rec) +{ + assert(rec != NULL); + return (rec->message); +} + +rpmlogLvl rpmlogRecPriority(rpmlogRec rec) +{ + assert(rec != NULL); + return (rec->pri); +} + +void rpmlogPrint(FILE *f) +{ + int i; + + if (f == NULL) + f = stderr; + + if (recs) + for (i = 0; i < nrecs; i++) { + rpmlogRec rec = recs + i; + if (rec->message && *rec->message) + fprintf(f, " %s", rec->message); + } +} + +void rpmlogClose (void) +{ + int i; + + if (recs) + for (i = 0; i < nrecs; i++) { + rpmlogRec rec = recs + i; + rec->message = _free(rec->message); + } + recs = _free(recs); + nrecs = 0; +} + +void rpmlogOpen (const char *ident, int option, + int facility) +{ +} + +static unsigned rpmlogMask = RPMLOG_UPTO( RPMLOG_NOTICE ); + +#ifdef NOTYET +static unsigned rpmlogFacility = RPMLOG_USER; +#endif + +int rpmlogSetMask (int mask) +{ + int omask = rpmlogMask; + if (mask) + rpmlogMask = mask; + return omask; +} + +static rpmlogCallback _rpmlogCallback = NULL; +static rpmlogCallbackData _rpmlogCallbackData = NULL; + +rpmlogCallback rpmlogSetCallback(rpmlogCallback cb, rpmlogCallbackData data) +{ + rpmlogCallback ocb = _rpmlogCallback; + _rpmlogCallback = cb; + _rpmlogCallbackData = data; + return ocb; +} + +static FILE * _stdlog = NULL; + +static int rpmlogDefault(rpmlogRec rec) +{ + FILE *msgout = (_stdlog ? _stdlog : stderr); + + switch (rec->pri) { + case RPMLOG_INFO: + case RPMLOG_NOTICE: + msgout = (_stdlog ? _stdlog : stdout); + break; + case RPMLOG_EMERG: + case RPMLOG_ALERT: + case RPMLOG_CRIT: + case RPMLOG_ERR: + case RPMLOG_WARNING: + case RPMLOG_DEBUG: + default: + break; + } + + (void) fputs(rpmlogLevelPrefix(rec->pri), msgout); + + (void) fputs(rec->message, msgout); + (void) fflush(msgout); + + return (rec->pri <= RPMLOG_CRIT ? RPMLOG_EXIT : 0); +} + + +FILE * rpmlogSetFile(FILE * fp) +{ + FILE * ofp = _stdlog; + _stdlog = fp; + return ofp; +} + +static const char * const rpmlogMsgPrefix[] = { + N_("fatal error: "),/*!< RPMLOG_EMERG */ + N_("fatal error: "),/*!< RPMLOG_ALERT */ + N_("fatal error: "),/*!< RPMLOG_CRIT */ + N_("error: "), /*!< RPMLOG_ERR */ + N_("warning: "), /*!< RPMLOG_WARNING */ + "", /*!< RPMLOG_NOTICE */ + "", /*!< RPMLOG_INFO */ + "D: ", /*!< RPMLOG_DEBUG */ +}; + +const char * rpmlogLevelPrefix(rpmlogLvl pri) +{ + const char * prefix = ""; + if (rpmlogMsgPrefix[pri] && *rpmlogMsgPrefix[pri]) + prefix = _(rpmlogMsgPrefix[pri]); + return prefix; +} + +/* FIX: rpmlogMsgPrefix[] dependent, not unqualified */ +/* FIX: rpmlogMsgPrefix[] may be NULL */ +static void dolog (struct rpmlogRec_s *rec) +{ + int cbrc = RPMLOG_DEFAULT; + int needexit = 0; + + /* Save copy of all messages at warning (or below == "more important"). */ + if (rec->pri <= RPMLOG_WARNING) { + recs = xrealloc(recs, (nrecs+2) * sizeof(*recs)); + recs[nrecs].code = rec->code; + recs[nrecs].pri = rec->pri; + recs[nrecs].message = xstrdup(rec->message); + recs[nrecs+1].code = 0; + recs[nrecs+1].message = NULL; + ++nrecs; + } + + if (_rpmlogCallback) { + cbrc = _rpmlogCallback(rec, _rpmlogCallbackData); + needexit += cbrc & RPMLOG_EXIT; + } + + if (cbrc & RPMLOG_DEFAULT) { + cbrc = rpmlogDefault(rec); + needexit += cbrc & RPMLOG_EXIT; + } + + if (needexit) + exit(EXIT_FAILURE); +} + +void rpmlog (int code, const char *fmt, ...) +{ + unsigned pri = RPMLOG_PRI(code); + unsigned mask = RPMLOG_MASK(pri); + va_list ap; + int n; + + if ((mask & rpmlogMask) == 0) + return; + + va_start(ap, fmt); + n = vsnprintf(NULL, 0, fmt, ap); + va_end(ap); + + if (n >= -1) { + struct rpmlogRec_s rec; + size_t nb = n + 1; + char *msg = xmalloc(nb); + + va_start(ap, fmt); + n = vsnprintf(msg, nb, fmt, ap); + va_end(ap); + + rec.code = code; + rec.pri = pri; + rec.message = msg; + + dolog(&rec); + + free(msg); + } +} + diff --git a/rpmio/rpmlog.h b/rpmio/rpmlog.h new file mode 100644 index 0000000..0766086 --- /dev/null +++ b/rpmio/rpmlog.h @@ -0,0 +1,281 @@ +#ifndef H_RPMLOG +#define H_RPMLOG 1 + +/** \ingroup rpmio + * \file rpmio/rpmlog.h + * Yet Another syslog(3) API clone. + * Used to unify rpmError() and rpmMessage() interfaces in rpm. + */ + +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmlog + * RPM Log levels. + * priorities/facilities are encoded into a single 32-bit quantity, where the + * bottom 3 bits are the priority (0-7) and the top 28 bits are the facility + * (0-big number). Both the priorities and the facilities map roughly + * one-to-one to strings in the syslogd(8) source code. This mapping is + * included in this file. + * + * priorities (these are ordered) + */ +typedef enum rpmlogLvl_e { + RPMLOG_EMERG = 0, /*!< system is unusable */ + RPMLOG_ALERT = 1, /*!< action must be taken immediately */ + RPMLOG_CRIT = 2, /*!< critical conditions */ + RPMLOG_ERR = 3, /*!< error conditions */ + RPMLOG_WARNING = 4, /*!< warning conditions */ + RPMLOG_NOTICE = 5, /*!< normal but significant condition */ + RPMLOG_INFO = 6, /*!< informational */ + RPMLOG_DEBUG = 7 /*!< debug-level messages */ +} rpmlogLvl; + +#define RPMLOG_PRIMASK 0x07 /* mask to extract priority part (internal) */ + /* extract priority */ +#define RPMLOG_PRI(p) ((p) & RPMLOG_PRIMASK) +#define RPMLOG_MAKEPRI(fac, pri) ((((unsigned)(fac)) << 3) | (pri)) + +#ifdef RPMLOG_NAMES +#define _RPMLOG_NOPRI 0x10 /* the "no priority" priority */ + /* mark "facility" */ +#define _RPMLOG_MARK RPMLOG_MAKEPRI(RPMLOG_NFACILITIES, 0) +typedef struct _rpmcode { + const char *c_name; + int c_val; +} RPMCODE; + +RPMCODE rpmprioritynames[] = + { + { "alert", RPMLOG_ALERT }, + { "crit", RPMLOG_CRIT }, + { "debug", RPMLOG_DEBUG }, + { "emerg", RPMLOG_EMERG }, + { "err", RPMLOG_ERR }, + { "error", RPMLOG_ERR }, /* DEPRECATED */ + { "info", RPMLOG_INFO }, + { "none", _RPMLOG_NOPRI }, /* INTERNAL */ + { "notice", RPMLOG_NOTICE }, + { "panic", RPMLOG_EMERG }, /* DEPRECATED */ + { "warn", RPMLOG_WARNING }, /* DEPRECATED */ + { "warning",RPMLOG_WARNING }, + { NULL, -1 } + }; +#endif + +/** \ingroup rpmlog + * facility codes + */ +typedef enum rpmlogFac_e { + RPMLOG_KERN = (0<<3), /*!< kernel messages */ + RPMLOG_USER = (1<<3), /*!< random user-level messages */ + RPMLOG_MAIL = (2<<3), /*!< mail system */ + RPMLOG_DAEMON = (3<<3), /*!< system daemons */ + RPMLOG_AUTH = (4<<3), /*!< security/authorization messages */ + RPMLOG_SYSLOG = (5<<3), /*!< messages generated internally by syslogd */ + RPMLOG_LPR = (6<<3), /*!< line printer subsystem */ + RPMLOG_NEWS = (7<<3), /*!< network news subsystem */ + RPMLOG_UUCP = (8<<3), /*!< UUCP subsystem */ + RPMLOG_CRON = (9<<3), /*!< clock daemon */ + RPMLOG_AUTHPRIV = (10<<3), /*!< security/authorization messages (private) */ + RPMLOG_FTP = (11<<3), /*!< ftp daemon */ + + /* other codes through 15 reserved for system use */ + RPMLOG_LOCAL0 = (16<<3), /*!< reserved for local use */ + RPMLOG_LOCAL1 = (17<<3), /*!< reserved for local use */ + RPMLOG_LOCAL2 = (18<<3), /*!< reserved for local use */ + RPMLOG_LOCAL3 = (19<<3), /*!< reserved for local use */ + RPMLOG_LOCAL4 = (20<<3), /*!< reserved for local use */ + RPMLOG_LOCAL5 = (21<<3), /*!< reserved for local use */ + RPMLOG_LOCAL6 = (22<<3), /*!< reserved for local use */ + RPMLOG_LOCAL7 = (23<<3), /*!< reserved for local use */ + +#define RPMLOG_NFACILITIES 24 /*!< current number of facilities */ + RPMLOG_ERRMSG = (((unsigned)(RPMLOG_NFACILITIES+0))<<3) +} rpmlogFac; + +#define RPMLOG_FACMASK 0x03f8 /*!< mask to extract facility part */ +#define RPMLOG_FAC(p) (((p) & RPMLOG_FACMASK) >> 3) + + +#ifdef RPMLOG_NAMES +RPMCODE facilitynames[] = + { + { "auth", RPMLOG_AUTH }, + { "authpriv",RPMLOG_AUTHPRIV }, + { "cron", RPMLOG_CRON }, + { "daemon", RPMLOG_DAEMON }, + { "ftp", RPMLOG_FTP }, + { "kern", RPMLOG_KERN }, + { "lpr", RPMLOG_LPR }, + { "mail", RPMLOG_MAIL }, + { "mark", _RPMLOG_MARK }, /* INTERNAL */ + { "news", RPMLOG_NEWS }, + { "security",RPMLOG_AUTH }, /* DEPRECATED */ + { "syslog", RPMLOG_SYSLOG }, + { "user", RPMLOG_USER }, + { "uucp", RPMLOG_UUCP }, + { "local0", RPMLOG_LOCAL0 }, + { "local1", RPMLOG_LOCAL1 }, + { "local2", RPMLOG_LOCAL2 }, + { "local3", RPMLOG_LOCAL3 }, + { "local4", RPMLOG_LOCAL4 }, + { "local5", RPMLOG_LOCAL5 }, + { "local6", RPMLOG_LOCAL6 }, + { "local7", RPMLOG_LOCAL7 }, + { NULL, -1 } + }; +#endif + +/* + * arguments to setlogmask. + */ +#define RPMLOG_MASK(pri) (1 << ((unsigned)(pri))) /*!< mask for one priority */ +#define RPMLOG_UPTO(pri) ((1 << (((unsigned)(pri))+1)) - 1) /*!< all priorities through pri */ + +/* + * Option flags for openlog. + * + * RPMLOG_ODELAY no longer does anything. + * RPMLOG_NDELAY is the inverse of what it used to be. + */ +#define RPMLOG_PID 0x01 /*!< log the pid with each message */ +#define RPMLOG_CONS 0x02 /*!< log on the console if errors in sending */ +#define RPMLOG_ODELAY 0x04 /*!< delay open until first syslog() (default) */ +#define RPMLOG_NDELAY 0x08 /*!< don't delay open */ +#define RPMLOG_NOWAIT 0x10 /*!< don't wait for console forks: DEPRECATED */ +#define RPMLOG_PERROR 0x20 /*!< log to stderr as well */ + +/* \ingroup rpmlog + * Option flags for callback return value. + */ +#define RPMLOG_DEFAULT 0x01 /*!< perform default logging */ +#define RPMLOG_EXIT 0x02 /*!< exit after logging */ + +/** \ingroup rpmlog + */ +typedef struct rpmlogRec_s * rpmlogRec; + +/** \ingroup rpmlog + * Retrieve log message string from rpmlog record + * @param rec rpmlog record + * @return log message + */ +const char * rpmlogRecMessage(rpmlogRec rec); + +/** \ingroup rpmlog + * Retrieve log priority from rpmlog record + * @param rec rpmlog record + * @return log priority + */ +rpmlogLvl rpmlogRecPriority(rpmlogRec rec); + +typedef void * rpmlogCallbackData; + +/** \ingroup rpmlog + * @param rec rpmlog record + * @param data private callback data + * @return flags to define further behavior: + * RPMLOG_DEFAULT to perform default logging, + * RPMLOG_EXIT to exit after processing, + * 0 to return after callback + */ +typedef int (*rpmlogCallback) (rpmlogRec rec, rpmlogCallbackData data); + +/** \ingroup rpmlog + * Return number of rpmError() ressages. + * @return number of messages + */ +int rpmlogGetNrecs(void) ; + +/** \ingroup rpmlog + * Print all rpmError() messages. + * @param f file handle (NULL uses stderr) + */ +void rpmlogPrint(FILE *f); + +/** \ingroup rpmlog + * Close desriptor used to write to system logger. + * @todo Implement. + */ +void rpmlogClose (void); + +/** \ingroup rpmlog + * Open connection to system logger. + * @todo Implement. + */ +void rpmlogOpen (const char * ident, int option, int facility); + +/** \ingroup rpmlog + * Set the log mask level. + * @param mask log mask (0 is no operation) + * @return previous log mask + */ +int rpmlogSetMask (int mask); + +/** \ingroup rpmlog + * Generate a log message using FMT string and option arguments. + */ +void rpmlog (int code, const char *fmt, ...) RPM_GNUC_PRINTF(2, 3); + +/** \ingroup rpmlog + * Return text of last rpmError() message. + * @return text of last message + */ +const char * rpmlogMessage(void); + +/** \ingroup rpmlog + * Return error code from last rpmError() message. + * @deprecated Perl-RPM needs, what's really needed is predictable, non-i18n + * encumbered, error text that can be retrieved through rpmlogMessage() + * and parsed IMHO. + * @return code from last message + */ +int rpmlogCode(void); + +/** \ingroup rpmlog + * Return translated prefix string (if any) given log level. + * @param pri log priority + * @return message prefix (or "" for none) + */ +const char * rpmlogLevelPrefix(rpmlogLvl pri); + +/** \ingroup rpmlog + * Set rpmlog callback function. + * @param cb rpmlog callback function + * @param data callback private (user) data + * @return previous rpmlog callback function + */ +rpmlogCallback rpmlogSetCallback(rpmlogCallback cb, rpmlogCallbackData data); + +/** \ingroup rpmlog + * Set rpmlog file handle. + * @param fp rpmlog file handle (NULL uses stdout/stderr) + * @return previous rpmlog file handle + */ +FILE * rpmlogSetFile(FILE * fp); + +#define rpmSetVerbosity(_lvl) \ + ((void)rpmlogSetMask( RPMLOG_UPTO( RPMLOG_PRI(_lvl)))) +#define rpmIncreaseVerbosity() \ + ((void)rpmlogSetMask(((((unsigned)(rpmlogSetMask(0) & 0xff)) << 1) | 1))) +#define rpmDecreaseVerbosity() \ + ((void)rpmlogSetMask((((int)(rpmlogSetMask(0) & 0xff)) >> 1))) +#define rpmIsNormal() \ + (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_NOTICE )) +#define rpmIsVerbose() \ + (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_INFO )) +#define rpmIsDebug() \ + (rpmlogSetMask(0) >= RPMLOG_MASK( RPMLOG_DEBUG )) + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMLOG */ diff --git a/rpmio/rpmlua.c b/rpmio/rpmlua.c new file mode 100644 index 0000000..fa8eed3 --- /dev/null +++ b/rpmio/rpmlua.c @@ -0,0 +1,844 @@ +#include "system.h" + +#ifdef WITH_LUA +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include "rpmio/rpmhook.h" +#include "rpmio/base64.h" + +#define _RPMLUA_INTERNAL +#include "rpmio/rpmlua.h" + +#include "debug.h" + +#define INITSTATE(_lua, lua) \ + rpmlua lua = _lua ? _lua : \ + (globalLuaState ? globalLuaState : \ + \ + (globalLuaState = rpmluaNew()) \ + \ + ) + +struct rpmluapb_s { + size_t alloced; + size_t used; + char *buf; + rpmluapb next; +}; + +static rpmlua globalLuaState = NULL; + +static int luaopen_rpm(lua_State *L); +static int rpm_print(lua_State *L); + +rpmlua rpmluaGetGlobalState(void) +{ + INITSTATE(NULL, lua); + return lua; +} + +rpmlua rpmluaNew() +{ + rpmlua lua = (rpmlua) xcalloc(1, sizeof(*lua)); + struct stat st; + const luaL_reg *lib; + char *initlua = rpmGenPath(rpmConfigDir(), "init.lua", NULL); + + static const luaL_reg extlibs[] = { + {"posix", luaopen_posix}, + {"rex", luaopen_rex}, + {"rpm", luaopen_rpm}, + {"os", luaopen_rpm_os}, + {NULL, NULL}, + }; + + lua_State *L = lua_open(); + luaL_openlibs(L); + lua->L = L; + + for (lib = extlibs; lib->name; lib++) { + lua_pushcfunction(L, lib->func); + lua_pushstring(L, lib->name); + lua_call(L, 1, 0); + lua_settop(L, 0); + } + lua_pushliteral(L, "LUA_PATH"); + lua_pushfstring(L, "%s/%s", rpmConfigDir(), "/lua/?.lua"); + lua_rawset(L, LUA_GLOBALSINDEX); + lua_pushliteral(L, "print"); + lua_pushcfunction(L, rpm_print); + lua_rawset(L, LUA_GLOBALSINDEX); + rpmluaSetData(lua, "lua", lua); + if (stat(initlua, &st) != -1) + (void)rpmluaRunScriptFile(lua, initlua); + free(initlua); + return lua; +} + +rpmlua rpmluaFree(rpmlua lua) +{ + if (lua) { + if (lua->L) lua_close(lua->L); + free(lua->printbuf); + free(lua); + if (lua == globalLuaState) globalLuaState = NULL; + } + return NULL; +} + +void rpmluaSetData(rpmlua _lua, const char *key, const void *data) +{ + INITSTATE(_lua, lua); + lua_State *L = lua->L; + lua_pushliteral(L, "rpm_"); + lua_pushstring(L, key); + lua_concat(L, 2); + if (data == NULL) + lua_pushnil(L); + else + lua_pushlightuserdata(L, (void *)data); + lua_rawset(L, LUA_REGISTRYINDEX); +} + +static void *getdata(lua_State *L, const char *key) +{ + void *ret = NULL; + lua_pushliteral(L, "rpm_"); + lua_pushstring(L, key); + lua_concat(L, 2); + lua_rawget(L, LUA_REGISTRYINDEX); + if (lua_islightuserdata(L, -1)) + ret = lua_touserdata(L, -1); + lua_pop(L, 1); + return ret; +} + +void *rpmluaGetData(rpmlua _lua, const char *key) +{ + INITSTATE(_lua, lua); + return getdata(lua->L, key); +} + +void rpmluaPushPrintBuffer(rpmlua _lua) +{ + INITSTATE(_lua, lua); + rpmluapb prbuf = xcalloc(1, sizeof(*prbuf)); + prbuf->buf = NULL; + prbuf->alloced = 0; + prbuf->used = 0; + prbuf->next = lua->printbuf; + + lua->printbuf = prbuf; +} + +char *rpmluaPopPrintBuffer(rpmlua _lua) +{ + INITSTATE(_lua, lua); + rpmluapb prbuf = lua->printbuf; + char *ret = NULL; + + if (prbuf) { + ret = prbuf->buf; + lua->printbuf = prbuf->next; + free(prbuf); + } + + return ret; +} + +static int pushvar(lua_State *L, rpmluavType type, void *value) +{ + int ret = 0; + switch (type) { + case RPMLUAV_NIL: + lua_pushnil(L); + break; + case RPMLUAV_STRING: + lua_pushstring(L, *((char **)value)); + break; + case RPMLUAV_NUMBER: + lua_pushnumber(L, *((double *)value)); + break; + default: + ret = -1; + break; + } + return ret; +} + +void rpmluaSetVar(rpmlua _lua, rpmluav var) +{ + INITSTATE(_lua, lua); + lua_State *L = lua->L; + if (var->listmode && lua->pushsize > 0) { + if (var->keyType != RPMLUAV_NUMBER || var->key.num == (double)0) { + var->keyType = RPMLUAV_NUMBER; + var->key.num = (double) luaL_getn(L, -1); + } + var->key.num++; + } + if (!var->listmode || lua->pushsize > 0) { + if (lua->pushsize == 0) + lua_pushvalue(L, LUA_GLOBALSINDEX); + if (pushvar(L, var->keyType, &var->key) != -1) { + if (pushvar(L, var->valueType, &var->value) != -1) + lua_rawset(L, -3); + else + lua_pop(L, 1); + } + if (lua->pushsize == 0) + lua_pop(L, 1); + } +} + +static void popvar(lua_State *L, rpmluavType *type, void *value) +{ + switch (lua_type(L, -1)) { + case LUA_TSTRING: + *type = RPMLUAV_STRING; + *((const char **)value) = lua_tostring(L, -1); + break; + case LUA_TNUMBER: + *type = RPMLUAV_NUMBER; + *((double *)value) = lua_tonumber(L, -1); + break; + default: + *type = RPMLUAV_NIL; + *((void **)value) = NULL; + break; + } + lua_pop(L, 1); +} + +void rpmluaGetVar(rpmlua _lua, rpmluav var) +{ + INITSTATE(_lua, lua); + lua_State *L = lua->L; + if (!var->listmode) { + if (lua->pushsize == 0) + lua_pushvalue(L, LUA_GLOBALSINDEX); + if (pushvar(L, var->keyType, &var->key) != -1) { + lua_rawget(L, -2); + popvar(L, &var->valueType, &var->value); + } + if (lua->pushsize == 0) + lua_pop(L, 1); + } else if (lua->pushsize > 0) { + (void) pushvar(L, var->keyType, &var->key); + if (lua_next(L, -2) != 0) + popvar(L, &var->valueType, &var->value); + } +} + +#define FINDKEY_RETURN 0 +#define FINDKEY_CREATE 1 +#define FINDKEY_REMOVE 2 +static int findkey(lua_State *L, int oper, const char *key, va_list va) +{ + char *buf; + const char *s, *e; + int ret = 0; + int blen; + + blen = vsnprintf(NULL, 0, key, va); + if (blen <= 0) { + return -1; + } + + buf = xmalloc(blen + 1); + vsnprintf(buf, blen + 1, key, va); + + s = e = buf; + lua_pushvalue(L, LUA_GLOBALSINDEX); + for (;;) { + if (*e == '\0' || *e == '.') { + if (e != s) { + lua_pushlstring(L, s, e-s); + switch (oper) { + case FINDKEY_REMOVE: + if (*e == '\0') { + lua_pushnil(L); + lua_rawset(L, -3); + lua_pop(L, 1); + break; + } + case FINDKEY_RETURN: + lua_rawget(L, -2); + lua_remove(L, -2); + break; + case FINDKEY_CREATE: + lua_rawget(L, -2); + if (!lua_istable(L, -1)) { + lua_pop(L, 1); + lua_newtable(L); + lua_pushlstring(L, s, e-s); + lua_pushvalue(L, -2); + lua_rawset(L, -4); + } + lua_remove(L, -2); + break; + } + } + if (*e == '\0') + break; + if (!lua_istable(L, -1)) { + lua_pop(L, 1); + ret = -1; + break; + } + s = e+1; + } + e++; + } + free(buf); + + return ret; +} + +void rpmluaDelVar(rpmlua _lua, const char *key, ...) +{ + INITSTATE(_lua, lua); + va_list va; + va_start(va, key); + (void) findkey(lua->L, FINDKEY_REMOVE, key, va); + va_end(va); +} + +int rpmluaVarExists(rpmlua _lua, const char *key, ...) +{ + INITSTATE(_lua, lua); + lua_State *L = lua->L; + int ret = 0; + va_list va; + va_start(va, key); + if (findkey(L, FINDKEY_RETURN, key, va) == 0) { + if (!lua_isnil(L, -1)) + ret = 1; + lua_pop(L, 1); + } + va_end(va); + return ret; +} + +void rpmluaPushTable(rpmlua _lua, const char *key, ...) +{ + INITSTATE(_lua, lua); + va_list va; + va_start(va, key); + (void) findkey(lua->L, FINDKEY_CREATE, key, va); + lua->pushsize++; + va_end(va); +} + +void rpmluaPop(rpmlua _lua) +{ + INITSTATE(_lua, lua); + assert(lua->pushsize > 0); + lua->pushsize--; + lua_pop(lua->L, 1); +} + +rpmluav rpmluavNew(void) +{ + rpmluav var = (rpmluav) xcalloc(1, sizeof(*var)); + return var; +} + +rpmluav rpmluavFree(rpmluav var) +{ + free(var); + return NULL; +} + +void rpmluavSetListMode(rpmluav var, int flag) +{ + var->listmode = flag; + var->keyType = RPMLUAV_NIL; +} + +void rpmluavSetKey(rpmluav var, rpmluavType type, const void *value) +{ + var->keyType = type; + switch (type) { + case RPMLUAV_NUMBER: + var->key.num = *((double *)value); + break; + case RPMLUAV_STRING: + var->key.str = (char *)value; + break; + default: + break; + } +} + +void rpmluavSetValue(rpmluav var, rpmluavType type, const void *value) +{ + var->valueType = type; + switch (type) { + case RPMLUAV_NUMBER: + var->value.num = *((const double *)value); + break; + case RPMLUAV_STRING: + var->value.str = (const char *)value; + break; + default: + break; + } +} + +void rpmluavGetKey(rpmluav var, rpmluavType *type, void **value) +{ + *type = var->keyType; + switch (var->keyType) { + case RPMLUAV_NUMBER: + *((double **)value) = &var->key.num; + break; + case RPMLUAV_STRING: + *((const char **)value) = var->key.str; + break; + default: + break; + } +} + +void rpmluavGetValue(rpmluav var, rpmluavType *type, void **value) +{ + *type = var->valueType; + switch (var->valueType) { + case RPMLUAV_NUMBER: + *((double **)value) = &var->value.num; + break; + case RPMLUAV_STRING: + *((const char **)value) = var->value.str; + break; + default: + break; + } +} + +void rpmluavSetKeyNum(rpmluav var, double value) +{ + rpmluavSetKey(var, RPMLUAV_NUMBER, &value); +} + +void rpmluavSetValueNum(rpmluav var, double value) +{ + rpmluavSetValue(var, RPMLUAV_NUMBER, &value); +} + +double rpmluavGetKeyNum(rpmluav var) +{ + rpmluavType type; + void *value; + rpmluavGetKey(var, &type, &value); + if (type == RPMLUAV_NUMBER) + return *((double *)value); + return (double) 0; +} + +double rpmluavGetValueNum(rpmluav var) +{ + rpmluavType type; + void *value; + rpmluavGetValue(var, &type, &value); + if (type == RPMLUAV_NUMBER) + return *((double *)value); + return (double) 0; +} + +int rpmluavKeyIsNum(rpmluav var) +{ + return (var->keyType == RPMLUAV_NUMBER) ? 1 : 0; +} + +int rpmluavValueIsNum(rpmluav var) +{ + return (var->valueType == RPMLUAV_NUMBER) ? 1 : 0; +} + +int rpmluaCheckScript(rpmlua _lua, const char *script, const char *name) +{ + INITSTATE(_lua, lua); + lua_State *L = lua->L; + int ret = 0; + if (name == NULL) + name = ""; + if (luaL_loadbuffer(L, script, strlen(script), name) != 0) { + rpmlog(RPMLOG_ERR, + _("invalid syntax in lua scriptlet: %s\n"), + lua_tostring(L, -1)); + ret = -1; + } + lua_pop(L, 1); /* Error or chunk. */ + return ret; +} + +int rpmluaRunScript(rpmlua _lua, const char *script, const char *name) +{ + INITSTATE(_lua, lua); + lua_State *L = lua->L; + int ret = 0; + if (name == NULL) + name = ""; + if (luaL_loadbuffer(L, script, strlen(script), name) != 0) { + rpmlog(RPMLOG_ERR, _("invalid syntax in lua script: %s\n"), + lua_tostring(L, -1)); + lua_pop(L, 1); + ret = -1; + } else if (lua_pcall(L, 0, 0, 0) != 0) { + rpmlog(RPMLOG_ERR, _("lua script failed: %s\n"), + lua_tostring(L, -1)); + lua_pop(L, 1); + ret = -1; + } + return ret; +} + +int rpmluaRunScriptFile(rpmlua _lua, const char *filename) +{ + INITSTATE(_lua, lua); + lua_State *L = lua->L; + int ret = 0; + if (luaL_loadfile(L, filename) != 0) { + rpmlog(RPMLOG_ERR, _("invalid syntax in lua file: %s\n"), + lua_tostring(L, -1)); + lua_pop(L, 1); + ret = -1; + } else if (lua_pcall(L, 0, 0, 0) != 0) { + rpmlog(RPMLOG_ERR, _("lua script failed: %s\n"), + lua_tostring(L, -1)); + lua_pop(L, 1); + ret = -1; + } + return ret; +} + +/* From lua.c */ +static int rpmluaReadline(lua_State *L, const char *prompt) +{ + static char buffer[1024]; + if (prompt) { + (void) fputs(prompt, stdout); + (void) fflush(stdout); + } + if (fgets(buffer, sizeof(buffer), stdin) == NULL) { + return 0; /* read fails */ + } else { + lua_pushstring(L, buffer); + return 1; + } +} + +/* Based on lua.c */ +static void _rpmluaInteractive(lua_State *L) +{ + (void) fputs("\n", stdout); + printf("RPM Interactive %s Interpreter\n", LUA_VERSION); + for (;;) { + int rc = 0; + + if (rpmluaReadline(L, "> ") == 0) + break; + if (lua_tostring(L, -1)[0] == '=') { + (void) lua_pushfstring(L, "print(%s)", lua_tostring(L, -1)+1); + lua_remove(L, -2); + } + for (;;) { + rc = luaL_loadbuffer(L, lua_tostring(L, -1), + lua_strlen(L, -1), ""); + if (rc == LUA_ERRSYNTAX && + strstr(lua_tostring(L, -1), "near `'") != NULL) { + if (rpmluaReadline(L, ">> ") == 0) + break; + lua_remove(L, -2); /* Remove error */ + lua_concat(L, 2); + continue; + } + break; + } + if (rc == 0) + rc = lua_pcall(L, 0, 0, 0); + if (rc != 0) { + fprintf(stderr, "%s\n", lua_tostring(L, -1)); + lua_pop(L, 1); + } + lua_pop(L, 1); /* Remove line */ + } + (void) fputs("\n", stdout); +} + +void rpmluaInteractive(rpmlua _lua) +{ + INITSTATE(_lua, lua); + _rpmluaInteractive(lua->L); +} + +/* ------------------------------------------------------------------ */ +/* Lua API */ + +static int rpm_b64encode(lua_State *L) +{ + const char *str = luaL_checkstring(L, 1); + size_t len = lua_strlen(L, 1); + int linelen = -1; + if (lua_gettop(L) == 2) + linelen = luaL_checkinteger(L, 2); + if (str && len) { + char *data = b64encode(str, len, linelen); + lua_pushstring(L, data); + free(data); + } + return 1; +} + +static int rpm_b64decode(lua_State *L) +{ + const char *str = luaL_checkstring(L, 1); + if (str) { + void *data = NULL; + size_t len = 0; + if (b64decode(str, &data, &len) == 0) { + lua_pushlstring(L, data, len); + } else { + lua_pushnil(L); + } + free(data); + } + return 1; +} + +static int rpm_expand(lua_State *L) +{ + const char *str = luaL_checkstring(L, 1); + char *val = rpmExpand(str, NULL); + lua_pushstring(L, val); + free(val); + return 1; +} + +static int rpm_define(lua_State *L) +{ + const char *str = luaL_checkstring(L, 1); + (void) rpmDefineMacro(NULL, str, 0); + return 0; +} + +static int rpm_interactive(lua_State *L) +{ + _rpmluaInteractive(L); + return 0; +} + +typedef struct rpmluaHookData_s { + lua_State *L; + int funcRef; + int dataRef; +} * rpmluaHookData; + +static int rpmluaHookWrapper(rpmhookArgs args, void *data) +{ + rpmluaHookData hookdata = (rpmluaHookData)data; + lua_State *L = hookdata->L; + int ret = 0; + int i; + lua_rawgeti(L, LUA_REGISTRYINDEX, hookdata->funcRef); + lua_newtable(L); + for (i = 0; i != args->argc; i++) { + switch (args->argt[i]) { + case 's': + lua_pushstring(L, args->argv[i].s); + lua_rawseti(L, -2, i+1); + break; + case 'i': + lua_pushnumber(L, (lua_Number)args->argv[i].i); + lua_rawseti(L, -2, i+1); + break; + case 'f': + lua_pushnumber(L, (lua_Number)args->argv[i].f); + lua_rawseti(L, -2, i+1); + break; + case 'p': + lua_pushlightuserdata(L, args->argv[i].p); + lua_rawseti(L, -2, i+1); + break; + default: + (void) luaL_error(L, "unsupported type '%c' as " + "a hook argument\n", args->argt[i]); + break; + } + } + if (lua_pcall(L, 1, 1, 0) != 0) { + rpmlog(RPMLOG_ERR, _("lua hook failed: %s\n"), + lua_tostring(L, -1)); + lua_pop(L, 1); + } else { + if (lua_isnumber(L, -1)) + ret = (int)lua_tonumber(L, -1); + lua_pop(L, 1); + } + return ret; +} + +static int rpm_register(lua_State *L) +{ + if (!lua_isstring(L, 1)) { + (void) luaL_argerror(L, 1, "hook name expected"); + } else if (!lua_isfunction(L, 2)) { + (void) luaL_argerror(L, 2, "function expected"); + } else { + rpmluaHookData hookdata = + lua_newuserdata(L, sizeof(struct rpmluaHookData_s)); + lua_pushvalue(L, -1); + hookdata->dataRef = luaL_ref(L, LUA_REGISTRYINDEX); + lua_pushvalue(L, 2); + hookdata->funcRef = luaL_ref(L, LUA_REGISTRYINDEX); + hookdata->L = L; + rpmhookRegister(lua_tostring(L, 1), rpmluaHookWrapper, hookdata); + return 1; + } + return 0; +} + +static int rpm_unregister(lua_State *L) +{ + if (!lua_isstring(L, 1)) { + (void) luaL_argerror(L, 1, "hook name expected"); + } else if (!lua_isuserdata(L, 2)) { + (void) luaL_argerror(L, 2, "hook information expected"); + } else { + rpmluaHookData hookdata = (rpmluaHookData)lua_touserdata(L, 2); + luaL_unref(L, LUA_REGISTRYINDEX, hookdata->funcRef); + luaL_unref(L, LUA_REGISTRYINDEX, hookdata->dataRef); + rpmhookUnregister(lua_tostring(L, 1), rpmluaHookWrapper, hookdata); + } + return 0; +} + +static int rpm_call(lua_State *L) +{ + if (!lua_isstring(L, 1)) { + (void) luaL_argerror(L, 1, "hook name expected"); + } else { + rpmhookArgs args = rpmhookArgsNew(lua_gettop(L)-1); + const char *name = lua_tostring(L, 1); + char *argt = (char *)xmalloc(args->argc+1); + int i; + for (i = 0; i != args->argc; i++) { + switch (lua_type(L, i+1)) { + case LUA_TNIL: + argt[i] = 'p'; + args->argv[i].p = NULL; + break; + case LUA_TNUMBER: { + float f = (float)lua_tonumber(L, i+1); + if (f == (int)f) { + argt[i] = 'i'; + args->argv[i].i = (int)f; + } else { + argt[i] = 'f'; + args->argv[i].f = f; + } + } break; + case LUA_TSTRING: + argt[i] = 's'; + args->argv[i].s = lua_tostring(L, i+1); + break; + case LUA_TUSERDATA: + case LUA_TLIGHTUSERDATA: + argt[i] = 'p'; + args->argv[i].p = lua_touserdata(L, i+1); + break; + default: + (void) luaL_error(L, "unsupported Lua type passed to hook"); + argt[i] = 'p'; + args->argv[i].p = NULL; + break; + } + } + args->argt = argt; + rpmhookCallArgs(name, args); + free(argt); + (void) rpmhookArgsFree(args); + } + return 0; +} + +/* Based on luaB_print. */ +static int rpm_print (lua_State *L) +{ + rpmlua lua = (rpmlua)getdata(L, "lua"); + int n = lua_gettop(L); /* number of arguments */ + int i; + if (!lua) return 0; + lua_getglobal(L, "tostring"); + for (i = 1; i <= n; i++) { + const char *s; + lua_pushvalue(L, -1); /* function to be called */ + lua_pushvalue(L, i); /* value to print */ + lua_call(L, 1, 1); + s = lua_tostring(L, -1); /* get result */ + if (s == NULL) + return luaL_error(L, "`tostring' must return a string to `print'"); + if (lua->printbuf) { + rpmluapb prbuf = lua->printbuf; + int sl = lua_strlen(L, -1); + if (prbuf->used+sl+1 > prbuf->alloced) { + prbuf->alloced += sl+512; + prbuf->buf = xrealloc(prbuf->buf, prbuf->alloced); + } + if (i > 1) + prbuf->buf[prbuf->used++] = '\t'; + memcpy(prbuf->buf+prbuf->used, s, sl+1); + prbuf->used += sl; + } else { + if (i > 1) + (void) fputs("\t", stdout); + (void) fputs(s, stdout); + } + lua_pop(L, 1); /* pop result */ + } + if (!lua->printbuf) { + (void) fputs("\n", stdout); + } else { + rpmluapb prbuf = lua->printbuf; + if (prbuf->used+1 > prbuf->alloced) { + prbuf->alloced += 512; + prbuf->buf = xrealloc(prbuf->buf, prbuf->alloced); + } + prbuf->buf[prbuf->used] = '\0'; + } + return 0; +} + +static const luaL_reg rpmlib[] = { + {"b64encode", rpm_b64encode}, + {"b64decode", rpm_b64decode}, + {"expand", rpm_expand}, + {"define", rpm_define}, + {"register", rpm_register}, + {"unregister", rpm_unregister}, + {"call", rpm_call}, + {"interactive", rpm_interactive}, + {NULL, NULL} +}; + +static int luaopen_rpm(lua_State *L) +{ + lua_pushvalue(L, LUA_GLOBALSINDEX); + luaL_openlib(L, "rpm", rpmlib, 0); + return 0; +} +#endif /* WITH_LUA */ + diff --git a/rpmio/rpmlua.h b/rpmio/rpmlua.h new file mode 100644 index 0000000..7298ed5 --- /dev/null +++ b/rpmio/rpmlua.h @@ -0,0 +1,92 @@ +#ifndef RPMLUA_H +#define RPMLUA_H + +typedef enum rpmluavType_e { + RPMLUAV_NIL = 0, + RPMLUAV_STRING = 1, + RPMLUAV_NUMBER = 2 +} rpmluavType; + +#if defined(_RPMLUA_INTERNAL) + +#include +#include + +typedef struct rpmluapb_s * rpmluapb; + +struct rpmlua_s { + lua_State *L; + size_t pushsize; + rpmluapb printbuf; +}; + +struct rpmluav_s { + rpmluavType keyType; + rpmluavType valueType; + union { + const char *str; + const void *ptr; + double num; + } key; + union { + const char *str; + const void *ptr; + double num; + } value; + int listmode; +}; + +#endif /* _RPMLUA_INTERNAL */ + +typedef struct rpmlua_s * rpmlua; +typedef struct rpmluav_s * rpmluav; + +#ifdef __cplusplus +extern "C" { +#endif + +rpmlua rpmluaNew(void); +rpmlua rpmluaFree(rpmlua lua); +rpmlua rpmluaGetGlobalState(void); + +int rpmluaCheckScript(rpmlua lua, const char *script, + const char *name); +int rpmluaRunScript(rpmlua lua, const char *script, + const char *name); +int rpmluaRunScriptFile(rpmlua lua, const char *filename); +void rpmluaInteractive(rpmlua lua); + +void *rpmluaGetData(rpmlua lua, const char *key); +void rpmluaSetData(rpmlua lua, const char *key, const void *data); + +char *rpmluaPopPrintBuffer(rpmlua lua); +void rpmluaPushPrintBuffer(rpmlua lua); + +void rpmluaGetVar(rpmlua lua, rpmluav var); +void rpmluaSetVar(rpmlua lua, rpmluav var); +void rpmluaDelVar(rpmlua lua, const char *key, ...); +int rpmluaVarExists(rpmlua lua, const char *key, ...); +void rpmluaPushTable(rpmlua lua, const char *key, ...); +void rpmluaPop(rpmlua lua); + +rpmluav rpmluavNew(void); +rpmluav rpmluavFree(rpmluav var); +void rpmluavSetListMode(rpmluav var, int flag); +void rpmluavSetKey(rpmluav var, rpmluavType type, const void *value); +void rpmluavSetValue(rpmluav var, rpmluavType type, const void *value); +void rpmluavGetKey(rpmluav var, rpmluavType *type, void **value); +void rpmluavGetValue(rpmluav var, rpmluavType *type, void **value); + +/* Optional helpers for numbers. */ +void rpmluavSetKeyNum(rpmluav var, double value); +void rpmluavSetValueNum(rpmluav var, double value); +double rpmluavGetKeyNum(rpmluav var); +double rpmluavGetValueNum(rpmluav var); +int rpmluavKeyIsNum(rpmluav var); +int rpmluavValueIsNum(rpmluav var); + +#ifdef __cplusplus +} +#endif + +#endif /* RPMLUA_H */ diff --git a/rpmio/rpmmacro.h b/rpmio/rpmmacro.h new file mode 100644 index 0000000..765c78c --- /dev/null +++ b/rpmio/rpmmacro.h @@ -0,0 +1,156 @@ +#ifndef _H_MACRO_ +#define _H_MACRO_ + +/** \ingroup rpmio + * \file rpmio/rpmmacro.h + */ + +#include +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct rpmMacroEntry_s * rpmMacroEntry; + +typedef struct rpmMacroContext_s * rpmMacroContext; + +extern rpmMacroContext rpmGlobalMacroContext; + +extern rpmMacroContext rpmCLIMacroContext; + +/** \ingroup rpmrc + * List of macro files to read when configuring rpm. + * This is a colon separated list of files. URI's are permitted as well, + * identified by the token '://', so file paths must not begin with '//'. + */ +extern const char * macrofiles; + +/** + * Markers for sources of macros added throughout rpm. + */ +#define RMIL_DEFAULT -15 +#define RMIL_MACROFILES -13 +#define RMIL_RPMRC -11 + +#define RMIL_CMDLINE -7 +#define RMIL_TARBALL -5 +#define RMIL_SPEC -3 +#define RMIL_OLDSPEC -1 +#define RMIL_GLOBAL 0 + +/** \ingroup rpmmacro + * Print macros to file stream. + * @param mc macro context (NULL uses global context). + * @param fp file stream (NULL uses stderr). + */ +void rpmDumpMacroTable (rpmMacroContext mc, + FILE * fp); + +/** \ingroup rpmmacro + * Expand macro into buffer. + * @deprecated Use rpmExpand(). + * @todo Eliminate from API. + * @param spec cookie (unused) + * @param mc macro context (NULL uses global context). + * @retval sbuf input macro to expand, output expansion + * @param slen size of buffer + * @return 0 on success + */ +int expandMacros (void * spec, rpmMacroContext mc, + char * sbuf, + size_t slen); + +/** \ingroup rpmmacro + * Add macro to context. + * @deprecated Use rpmDefineMacro(). + * @param mc macro context (NULL uses global context). + * @param n macro name + * @param o macro paramaters + * @param b macro body + * @param level macro recursion level (0 is entry API) + */ +void addMacro (rpmMacroContext mc, const char * n, + const char * o, + const char * b, int level); + +/** \ingroup rpmmacro + * Delete macro from context. + * @param mc macro context (NULL uses global context). + * @param n macro name + */ +void delMacro (rpmMacroContext mc, const char * n); + +/** \ingroup rpmmacro + * Define macro in context. + * @param mc macro context (NULL uses global context). + * @param macro macro name, options, body + * @param level macro recursion level (0 is entry API) + * @return 0 on success (always) + */ +int rpmDefineMacro (rpmMacroContext mc, const char * macro, + int level); + +/** \ingroup rpmmacro + * Load macros from specific context into global context. + * @param mc macro context (NULL does nothing). + * @param level macro recursion level (0 is entry API) + */ +void rpmLoadMacros (rpmMacroContext mc, int level); + +/** \ingroup rpmmacro + * Load macro context from a macro file. + * @param mc (unused) + * @param fn macro file name + */ +int rpmLoadMacroFile(rpmMacroContext mc, const char * fn); + +/** \ingroup rpmmacro + * Initialize macro context from set of macrofile(s). + * @param mc macro context + * @param macrofiles colon separated list of macro files (NULL does nothing) + */ +void rpmInitMacros (rpmMacroContext mc, const char * macrofiles); + +/** \ingroup rpmmacro + * Destroy macro context. + * @param mc macro context (NULL uses global context). + */ +void rpmFreeMacros (rpmMacroContext mc); + +/** \ingroup rpmmacro + * Return (malloc'ed) concatenated macro expansion(s). + * @param arg macro(s) to expand (NULL terminates list) + * @return macro expansion (malloc'ed) + */ +char * rpmExpand (const char * arg, ...) RPM_GNUC_NULL_TERMINATED; + +/** \ingroup rpmmacro + * Return macro expansion as a numeric value. + * Boolean values ('Y' or 'y' returns 1, 'N' or 'n' returns 0) + * are permitted as well. An undefined macro returns 0. + * @param arg macro to expand + * @return numeric value + */ +int rpmExpandNumeric (const char * arg); + +/** \ingroup rpmmacro + * Return rpm configuration base directory. + * If RPM_CONFIGDIR environment variable is set, it's value will be used. + * Otherwise the configuration directory is the one set at build time, + * typically /usr/lib/rpm. The value of rpmConfigDir() is determined + * on first call to this function and is guaranteed to remain the same + * on subsequent calls. + * @return rpm configuration directory name + */ +const char *rpmConfigDir(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _H_ MACRO_ */ diff --git a/rpmio/rpmmalloc.c b/rpmio/rpmmalloc.c new file mode 100644 index 0000000..c38ab96 --- /dev/null +++ b/rpmio/rpmmalloc.c @@ -0,0 +1,85 @@ +/** \ingroup rpmio + * \file rpmio/rpmmalloc.c + */ + +#include "system.h" + +#include +#include +#include + +#include "debug.h" + +static rpmMemFailFunc failfunc = NULL; +static void *failfunc_data = NULL; + +/* + * Give memfail callback a chance to try to give us memory or perform + * it's own cleanup. If we dont get memory we die anyway as rpm doesn't + * check for NULL returns from allocations. + */ +static void *vmefail(size_t size) +{ + void *val = failfunc ? (*failfunc)(size, failfunc_data) : NULL; + if (val == NULL) { + fprintf(stderr, _("memory alloc (%u bytes) returned NULL.\n"), + (unsigned)size); + exit(EXIT_FAILURE); + } + return val; +} + +rpmMemFailFunc rpmSetMemFail(rpmMemFailFunc func, void *data) +{ + rpmMemFailFunc ofunc = failfunc; + failfunc = func; + failfunc_data = data; + return ofunc; +} + +void * rmalloc (size_t size) +{ + register void *value; + if (size == 0) size++; + value = malloc (size); + if (value == NULL) + value = vmefail(size); + return value; +} + +void * rcalloc (size_t nmemb, size_t size) +{ + register void *value; + if (size == 0) size++; + if (nmemb == 0) nmemb++; + value = calloc (nmemb, size); + if (value == NULL) + value = vmefail(size); + return value; +} + +void * rrealloc (void *ptr, size_t size) +{ + register void *value; + if (size == 0) size++; + value = realloc (ptr, size); + if (value == NULL) + value = vmefail(size); + return value; +} + +char * rstrdup (const char *str) +{ + size_t size = strlen(str) + 1; + char *newstr = (char *) malloc (size); + if (newstr == NULL) + newstr = (char *) vmefail(size); + strcpy (newstr, str); + return newstr; +} + +void * rfree (void *ptr) +{ + free(ptr); + return NULL; +} diff --git a/rpmio/rpmpgp.c b/rpmio/rpmpgp.c new file mode 100644 index 0000000..04472de --- /dev/null +++ b/rpmio/rpmpgp.c @@ -0,0 +1,1669 @@ +/** \ingroup rpmio signature + * \file rpmio/rpmpgp.c + * Routines to handle RFC-2440 detached signatures. + */ + +#include "system.h" + +#include + +#include +#include + +#include "rpmio/digest.h" +#include "rpmio/rpmio_internal.h" /* XXX rpmioSlurp */ + +#include "debug.h" + + +static int _debug = 0; + +static int _print = 0; + +static int _crypto_initialized = 0; +static int _new_process = 1; + +typedef const struct pgpValTbl_s { + int val; + char const * const str; +} * pgpValTbl; + +static struct pgpValTbl_s const pgpSigTypeTbl[] = { + { PGPSIGTYPE_BINARY, "Binary document signature" }, + { PGPSIGTYPE_TEXT, "Text document signature" }, + { PGPSIGTYPE_STANDALONE, "Standalone signature" }, + { PGPSIGTYPE_GENERIC_CERT, "Generic certification of a User ID and Public Key" }, + { PGPSIGTYPE_PERSONA_CERT, "Persona certification of a User ID and Public Key" }, + { PGPSIGTYPE_CASUAL_CERT, "Casual certification of a User ID and Public Key" }, + { PGPSIGTYPE_POSITIVE_CERT, "Positive certification of a User ID and Public Key" }, + { PGPSIGTYPE_SUBKEY_BINDING,"Subkey Binding Signature" }, + { PGPSIGTYPE_SIGNED_KEY, "Signature directly on a key" }, + { PGPSIGTYPE_KEY_REVOKE, "Key revocation signature" }, + { PGPSIGTYPE_SUBKEY_REVOKE, "Subkey revocation signature" }, + { PGPSIGTYPE_CERT_REVOKE, "Certification revocation signature" }, + { PGPSIGTYPE_TIMESTAMP, "Timestamp signature" }, + { -1, "Unknown signature type" }, +}; + +static struct pgpValTbl_s const pgpPubkeyTbl[] = { + { PGPPUBKEYALGO_RSA, "RSA" }, + { PGPPUBKEYALGO_RSA_ENCRYPT,"RSA(Encrypt-Only)" }, + { PGPPUBKEYALGO_RSA_SIGN, "RSA(Sign-Only)" }, + { PGPPUBKEYALGO_ELGAMAL_ENCRYPT,"Elgamal(Encrypt-Only)" }, + { PGPPUBKEYALGO_DSA, "DSA" }, + { PGPPUBKEYALGO_EC, "Elliptic Curve" }, + { PGPPUBKEYALGO_ECDSA, "ECDSA" }, + { PGPPUBKEYALGO_ELGAMAL, "Elgamal" }, + { PGPPUBKEYALGO_DH, "Diffie-Hellman (X9.42)" }, + { -1, "Unknown public key algorithm" }, +}; + +static struct pgpValTbl_s const pgpSymkeyTbl[] = { + { PGPSYMKEYALGO_PLAINTEXT, "Plaintext" }, + { PGPSYMKEYALGO_IDEA, "IDEA" }, + { PGPSYMKEYALGO_TRIPLE_DES, "3DES" }, + { PGPSYMKEYALGO_CAST5, "CAST5" }, + { PGPSYMKEYALGO_BLOWFISH, "BLOWFISH" }, + { PGPSYMKEYALGO_SAFER, "SAFER" }, + { PGPSYMKEYALGO_DES_SK, "DES/SK" }, + { PGPSYMKEYALGO_AES_128, "AES(128-bit key)" }, + { PGPSYMKEYALGO_AES_192, "AES(192-bit key)" }, + { PGPSYMKEYALGO_AES_256, "AES(256-bit key)" }, + { PGPSYMKEYALGO_TWOFISH, "TWOFISH(256-bit key)" }, + { PGPSYMKEYALGO_NOENCRYPT, "no encryption" }, + { -1, "Unknown symmetric key algorithm" }, +}; + +static struct pgpValTbl_s const pgpCompressionTbl[] = { + { PGPCOMPRESSALGO_NONE, "Uncompressed" }, + { PGPCOMPRESSALGO_ZIP, "ZIP" }, + { PGPCOMPRESSALGO_ZLIB, "ZLIB" }, + { PGPCOMPRESSALGO_BZIP2, "BZIP2" }, + { -1, "Unknown compression algorithm" }, +}; + +static struct pgpValTbl_s const pgpHashTbl[] = { + { PGPHASHALGO_MD5, "MD5" }, + { PGPHASHALGO_SHA1, "SHA1" }, + { PGPHASHALGO_RIPEMD160, "RIPEMD160" }, + { PGPHASHALGO_MD2, "MD2" }, + { PGPHASHALGO_TIGER192, "TIGER192" }, + { PGPHASHALGO_HAVAL_5_160, "HAVAL-5-160" }, + { PGPHASHALGO_SHA256, "SHA256" }, + { PGPHASHALGO_SHA384, "SHA384" }, + { PGPHASHALGO_SHA512, "SHA512" }, + { PGPHASHALGO_SHA224, "SHA224" }, + { -1, "Unknown hash algorithm" }, +}; + +static struct pgpValTbl_s const pgpKeyServerPrefsTbl[] = { + { 0x80, "No-modify" }, + { -1, "Unknown key server preference" }, +}; + +static struct pgpValTbl_s const pgpSubTypeTbl[] = { + { PGPSUBTYPE_SIG_CREATE_TIME,"signature creation time" }, + { PGPSUBTYPE_SIG_EXPIRE_TIME,"signature expiration time" }, + { PGPSUBTYPE_EXPORTABLE_CERT,"exportable certification" }, + { PGPSUBTYPE_TRUST_SIG, "trust signature" }, + { PGPSUBTYPE_REGEX, "regular expression" }, + { PGPSUBTYPE_REVOCABLE, "revocable" }, + { PGPSUBTYPE_KEY_EXPIRE_TIME,"key expiration time" }, + { PGPSUBTYPE_ARR, "additional recipient request" }, + { PGPSUBTYPE_PREFER_SYMKEY, "preferred symmetric algorithms" }, + { PGPSUBTYPE_REVOKE_KEY, "revocation key" }, + { PGPSUBTYPE_ISSUER_KEYID, "issuer key ID" }, + { PGPSUBTYPE_NOTATION, "notation data" }, + { PGPSUBTYPE_PREFER_HASH, "preferred hash algorithms" }, + { PGPSUBTYPE_PREFER_COMPRESS,"preferred compression algorithms" }, + { PGPSUBTYPE_KEYSERVER_PREFERS,"key server preferences" }, + { PGPSUBTYPE_PREFER_KEYSERVER,"preferred key server" }, + { PGPSUBTYPE_PRIMARY_USERID,"primary user id" }, + { PGPSUBTYPE_POLICY_URL, "policy URL" }, + { PGPSUBTYPE_KEY_FLAGS, "key flags" }, + { PGPSUBTYPE_SIGNER_USERID, "signer's user id" }, + { PGPSUBTYPE_REVOKE_REASON, "reason for revocation" }, + { PGPSUBTYPE_FEATURES, "features" }, + { PGPSUBTYPE_EMBEDDED_SIG, "embedded signature" }, + + { PGPSUBTYPE_INTERNAL_100, "internal subpkt type 100" }, + { PGPSUBTYPE_INTERNAL_101, "internal subpkt type 101" }, + { PGPSUBTYPE_INTERNAL_102, "internal subpkt type 102" }, + { PGPSUBTYPE_INTERNAL_103, "internal subpkt type 103" }, + { PGPSUBTYPE_INTERNAL_104, "internal subpkt type 104" }, + { PGPSUBTYPE_INTERNAL_105, "internal subpkt type 105" }, + { PGPSUBTYPE_INTERNAL_106, "internal subpkt type 106" }, + { PGPSUBTYPE_INTERNAL_107, "internal subpkt type 107" }, + { PGPSUBTYPE_INTERNAL_108, "internal subpkt type 108" }, + { PGPSUBTYPE_INTERNAL_109, "internal subpkt type 109" }, + { PGPSUBTYPE_INTERNAL_110, "internal subpkt type 110" }, + { -1, "Unknown signature subkey type" }, +}; + +static struct pgpValTbl_s const pgpTagTbl[] = { + { PGPTAG_PUBLIC_SESSION_KEY,"Public-Key Encrypted Session Key" }, + { PGPTAG_SIGNATURE, "Signature" }, + { PGPTAG_SYMMETRIC_SESSION_KEY,"Symmetric-Key Encrypted Session Key" }, + { PGPTAG_ONEPASS_SIGNATURE, "One-Pass Signature" }, + { PGPTAG_SECRET_KEY, "Secret Key" }, + { PGPTAG_PUBLIC_KEY, "Public Key" }, + { PGPTAG_SECRET_SUBKEY, "Secret Subkey" }, + { PGPTAG_COMPRESSED_DATA, "Compressed Data" }, + { PGPTAG_SYMMETRIC_DATA, "Symmetrically Encrypted Data" }, + { PGPTAG_MARKER, "Marker" }, + { PGPTAG_LITERAL_DATA, "Literal Data" }, + { PGPTAG_TRUST, "Trust" }, + { PGPTAG_USER_ID, "User ID" }, + { PGPTAG_PUBLIC_SUBKEY, "Public Subkey" }, + { PGPTAG_COMMENT_OLD, "Comment (from OpenPGP draft)" }, + { PGPTAG_PHOTOID, "PGP's photo ID" }, + { PGPTAG_ENCRYPTED_MDC, "Integrity protected encrypted data" }, + { PGPTAG_MDC, "Manipulaion detection code packet" }, + { PGPTAG_PRIVATE_60, "Private #60" }, + { PGPTAG_COMMENT, "Comment" }, + { PGPTAG_PRIVATE_62, "Private #62" }, + { PGPTAG_CONTROL, "Control (GPG)" }, + { -1, "Unknown packet tag" }, +}; + +static struct pgpValTbl_s const pgpArmorTbl[] = { + { PGPARMOR_MESSAGE, "MESSAGE" }, + { PGPARMOR_PUBKEY, "PUBLIC KEY BLOCK" }, + { PGPARMOR_SIGNATURE, "SIGNATURE" }, + { PGPARMOR_SIGNED_MESSAGE, "SIGNED MESSAGE" }, + { PGPARMOR_FILE, "ARMORED FILE" }, + { PGPARMOR_PRIVKEY, "PRIVATE KEY BLOCK" }, + { PGPARMOR_SECKEY, "SECRET KEY BLOCK" }, + { -1, "Unknown armor block" } +}; + +static struct pgpValTbl_s const pgpArmorKeyTbl[] = { + { PGPARMORKEY_VERSION, "Version: " }, + { PGPARMORKEY_COMMENT, "Comment: " }, + { PGPARMORKEY_MESSAGEID, "MessageID: " }, + { PGPARMORKEY_HASH, "Hash: " }, + { PGPARMORKEY_CHARSET, "Charset: " }, + { -1, "Unknown armor key" } +}; + +static void pgpPrtNL(void) +{ + if (!_print) return; + fprintf(stderr, "\n"); +} + +static void pgpPrtInt(const char *pre, int i) +{ + if (!_print) return; + if (pre && *pre) + fprintf(stderr, "%s", pre); + fprintf(stderr, " %d", i); +} + +static void pgpPrtStr(const char *pre, const char *s) +{ + if (!_print) return; + if (pre && *pre) + fprintf(stderr, "%s", pre); + fprintf(stderr, " %s", s); +} + +static const char * pgpValStr(pgpValTbl vs, uint8_t val) +{ + do { + if (vs->val == val) + break; + } while ((++vs)->val != -1); + return vs->str; +} + +static pgpValTbl pgpValTable(pgpValType type) +{ + switch (type) { + case PGPVAL_TAG: return pgpTagTbl; + case PGPVAL_ARMORBLOCK: return pgpArmorTbl; + case PGPVAL_ARMORKEY: return pgpArmorKeyTbl; + case PGPVAL_SIGTYPE: return pgpSigTypeTbl; + case PGPVAL_SUBTYPE: return pgpSubTypeTbl; + case PGPVAL_PUBKEYALGO: return pgpPubkeyTbl; + case PGPVAL_SYMKEYALGO: return pgpSymkeyTbl; + case PGPVAL_COMPRESSALGO: return pgpCompressionTbl; + case PGPVAL_HASHALGO: return pgpHashTbl; + case PGPVAL_SERVERPREFS: return pgpKeyServerPrefsTbl; + default: + break; + } + return NULL; +} + +const char * pgpValString(pgpValType type, uint8_t val) +{ + pgpValTbl tbl = pgpValTable(type); + return (tbl != NULL) ? pgpValStr(tbl, val) : NULL; +} + +static void pgpPrtHex(const char *pre, const uint8_t *p, size_t plen) +{ + char *hex = NULL; + if (!_print) return; + if (pre && *pre) + fprintf(stderr, "%s", pre); + hex = pgpHexStr(p, plen); + fprintf(stderr, " %s", hex); + free(hex); +} + +static void pgpPrtVal(const char * pre, pgpValTbl vs, uint8_t val) +{ + if (!_print) return; + if (pre && *pre) + fprintf(stderr, "%s", pre); + fprintf(stderr, "%s(%u)", pgpValStr(vs, val), (unsigned)val); +} + +/** \ingroup rpmpgp + * Return no. of bits in a multiprecision integer. + * @param p pointer to multiprecision integer + * @return no. of bits + */ +static +unsigned int pgpMpiBits(const uint8_t *p) +{ + return ((p[0] << 8) | p[1]); +} + +/** \ingroup rpmpgp + * Return no. of bytes in a multiprecision integer. + * @param p pointer to multiprecision integer + * @return no. of bytes + */ +static +size_t pgpMpiLen(const uint8_t *p) +{ + return (2 + ((pgpMpiBits(p)+7)>>3)); +} + +/** \ingroup rpmpgp + * Return hex formatted representation of a multiprecision integer. + * @param p bytes + * @return hex formatted string (malloc'ed) + */ +static inline +char * pgpMpiStr(const uint8_t *p) +{ + char *str = NULL; + char *hex = pgpHexStr(p+2, pgpMpiLen(p)-2); + rasprintf(&str, "[%4u]: %s", pgpGrab(p, (size_t) 2), hex); + free(hex); + return str; +} + +/** \ingroup rpmpgp + * Return value of an OpenPGP string. + * @param vs table of (string,value) pairs + * @param s string token to lookup + * @param se end-of-string address + * @return byte value + */ +static inline +int pgpValTok(pgpValTbl vs, const char * s, const char * se) +{ + do { + size_t vlen = strlen(vs->str); + if (vlen <= (se-s) && rstreqn(s, vs->str, vlen)) + break; + } while ((++vs)->val != -1); + return vs->val; +} +/** + * @return 0 on success + */ +static int pgpMpiSet(const char * pre, unsigned int lbits, + uint8_t *dest, const uint8_t * p, const uint8_t * pend) +{ + unsigned int mbits = pgpMpiBits(p); + unsigned int nbits; + size_t nbytes; + uint8_t *t = dest; + unsigned int ix; + + if ((p + ((mbits+7) >> 3)) > pend) + return 1; + + if (mbits > lbits) + return 1; + + nbits = (lbits > mbits ? lbits : mbits); + nbytes = ((nbits + 7) >> 3); + ix = (nbits - mbits) >> 3; + +if (_debug) +fprintf(stderr, "*** mbits %u nbits %u nbytes %zu ix %u\n", mbits, nbits, nbytes, ix); + if (ix > 0) memset(t, '\0', ix); + memcpy(t+ix, p+2, nbytes-ix); +if (_debug) +fprintf(stderr, "*** %s %s\n", pre, pgpHexStr(dest, nbytes)); + + return 0; +} + +/** + * @return NULL on error + */ +static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p) +{ + size_t nbytes = pgpMpiLen(p)-2; + + if (item == NULL) { + if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL) + return item; + } else { + if (arena != NULL) + item->data = PORT_ArenaGrow(arena, item->data, item->len, nbytes); + else + item->data = PORT_Realloc(item->data, nbytes); + + if (item->data == NULL) { + if (arena == NULL) + SECITEM_FreeItem(item, PR_TRUE); + return NULL; + } + } + + memcpy(item->data, p+2, nbytes); + item->len = nbytes; + return item; +} +/*@=boundswrite@*/ + +static SECKEYPublicKey *pgpNewPublicKey(KeyType type) +{ + PRArenaPool *arena; + SECKEYPublicKey *key; + + arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); + if (arena == NULL) + return NULL; + + key = PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey)); + + if (key == NULL) { + PORT_FreeArena(arena, PR_FALSE); + return NULL; + } + + key->keyType = type; + key->pkcs11ID = CK_INVALID_HANDLE; + key->pkcs11Slot = NULL; + key->arena = arena; + return key; +} + +/** \ingroup rpmpgp + * Is buffer at beginning of an OpenPGP packet? + * @param p buffer + * @return 1 if an OpenPGP packet, 0 otherwise + */ +static inline +int pgpIsPkt(const uint8_t * p) +{ + unsigned int val = *p++; + pgpTag tag; + int rc; + + /* XXX can't deal with these. */ + if (!(val & 0x80)) + return 0; + + if (val & 0x40) + tag = (pgpTag)(val & 0x3f); + else + tag = (pgpTag)((val >> 2) & 0xf); + + switch (tag) { + case PGPTAG_MARKER: + case PGPTAG_SYMMETRIC_SESSION_KEY: + case PGPTAG_ONEPASS_SIGNATURE: + case PGPTAG_PUBLIC_KEY: + case PGPTAG_SECRET_KEY: + case PGPTAG_PUBLIC_SESSION_KEY: + case PGPTAG_SIGNATURE: + case PGPTAG_COMMENT: + case PGPTAG_COMMENT_OLD: + case PGPTAG_LITERAL_DATA: + case PGPTAG_COMPRESSED_DATA: + case PGPTAG_SYMMETRIC_DATA: + rc = 1; + break; + case PGPTAG_PUBLIC_SUBKEY: + case PGPTAG_SECRET_SUBKEY: + case PGPTAG_USER_ID: + case PGPTAG_RESERVED: + case PGPTAG_TRUST: + case PGPTAG_PHOTOID: + case PGPTAG_ENCRYPTED_MDC: + case PGPTAG_MDC: + case PGPTAG_PRIVATE_60: + case PGPTAG_PRIVATE_62: + case PGPTAG_CONTROL: + default: + rc = 0; + break; + } + + return rc; +} + +#define CRC24_INIT 0xb704ce +#define CRC24_POLY 0x1864cfb + +/** \ingroup rpmpgp + * Return CRC of a buffer. + * @param octets bytes + * @param len no. of bytes + * @return crc of buffer + */ +static inline +unsigned int pgpCRC(const uint8_t *octets, size_t len) +{ + unsigned int crc = CRC24_INIT; + size_t i; + + while (len--) { + crc ^= (*octets++) << 16; + for (i = 0; i < 8; i++) { + crc <<= 1; + if (crc & 0x1000000) + crc ^= CRC24_POLY; + } + } + return crc & 0xffffff; +} + +static int pgpPrtSubType(const uint8_t *h, size_t hlen, pgpSigType sigtype, + pgpDigParams _digp) +{ + const uint8_t *p = h; + size_t plen, i; + + while (hlen > 0) { + i = pgpLen(p, &plen); + p += i; + hlen -= i; + + pgpPrtVal(" ", pgpSubTypeTbl, (p[0]&(~PGPSUBTYPE_CRITICAL))); + if (p[0] & PGPSUBTYPE_CRITICAL) + if (_print) + fprintf(stderr, " *CRITICAL*"); + switch (*p) { + case PGPSUBTYPE_PREFER_SYMKEY: /* preferred symmetric algorithms */ + for (i = 1; i < plen; i++) + pgpPrtVal(" ", pgpSymkeyTbl, p[i]); + break; + case PGPSUBTYPE_PREFER_HASH: /* preferred hash algorithms */ + for (i = 1; i < plen; i++) + pgpPrtVal(" ", pgpHashTbl, p[i]); + break; + case PGPSUBTYPE_PREFER_COMPRESS:/* preferred compression algorithms */ + for (i = 1; i < plen; i++) + pgpPrtVal(" ", pgpCompressionTbl, p[i]); + break; + case PGPSUBTYPE_KEYSERVER_PREFERS:/* key server preferences */ + for (i = 1; i < plen; i++) + pgpPrtVal(" ", pgpKeyServerPrefsTbl, p[i]); + break; + case PGPSUBTYPE_SIG_CREATE_TIME: + if (_digp && !(_digp->saved & PGPDIG_SAVED_TIME) && + (sigtype == PGPSIGTYPE_POSITIVE_CERT || sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT || sigtype == PGPSIGTYPE_STANDALONE)) + { + _digp->saved |= PGPDIG_SAVED_TIME; + memcpy(_digp->time, p+1, sizeof(_digp->time)); + } + case PGPSUBTYPE_SIG_EXPIRE_TIME: + case PGPSUBTYPE_KEY_EXPIRE_TIME: + if ((plen - 1) == 4) { + time_t t = pgpGrab(p+1, plen-1); + if (_print) + fprintf(stderr, " %-24.24s(0x%08x)", ctime(&t), (unsigned)t); + } else + pgpPrtHex("", p+1, plen-1); + break; + + case PGPSUBTYPE_ISSUER_KEYID: /* issuer key ID */ + if (_digp && !(_digp->saved & PGPDIG_SAVED_ID) && + (sigtype == PGPSIGTYPE_POSITIVE_CERT || sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT || sigtype == PGPSIGTYPE_STANDALONE)) + { + _digp->saved |= PGPDIG_SAVED_ID; + memcpy(_digp->signid, p+1, sizeof(_digp->signid)); + } + case PGPSUBTYPE_EXPORTABLE_CERT: + case PGPSUBTYPE_TRUST_SIG: + case PGPSUBTYPE_REGEX: + case PGPSUBTYPE_REVOCABLE: + case PGPSUBTYPE_ARR: + case PGPSUBTYPE_REVOKE_KEY: + case PGPSUBTYPE_NOTATION: + case PGPSUBTYPE_PREFER_KEYSERVER: + case PGPSUBTYPE_PRIMARY_USERID: + case PGPSUBTYPE_POLICY_URL: + case PGPSUBTYPE_KEY_FLAGS: + case PGPSUBTYPE_SIGNER_USERID: + case PGPSUBTYPE_REVOKE_REASON: + case PGPSUBTYPE_FEATURES: + case PGPSUBTYPE_EMBEDDED_SIG: + case PGPSUBTYPE_INTERNAL_100: + case PGPSUBTYPE_INTERNAL_101: + case PGPSUBTYPE_INTERNAL_102: + case PGPSUBTYPE_INTERNAL_103: + case PGPSUBTYPE_INTERNAL_104: + case PGPSUBTYPE_INTERNAL_105: + case PGPSUBTYPE_INTERNAL_106: + case PGPSUBTYPE_INTERNAL_107: + case PGPSUBTYPE_INTERNAL_108: + case PGPSUBTYPE_INTERNAL_109: + case PGPSUBTYPE_INTERNAL_110: + default: + pgpPrtHex("", p+1, plen-1); + break; + } + pgpPrtNL(); + p += plen; + hlen -= plen; + } + return 0; +} + +static const char * const pgpSigRSA[] = { + " m**d =", + NULL, +}; + +static const char * const pgpSigDSA[] = { + " r =", + " s =", + NULL, +}; + +#ifndef DSA_SUBPRIME_LEN +#define DSA_SUBPRIME_LEN 20 +#endif + +static int pgpPrtSigParams(pgpTag tag, uint8_t pubkey_algo, uint8_t sigtype, + const uint8_t *p, const uint8_t *h, size_t hlen, pgpDig _dig) +{ + const uint8_t * pend = h + hlen; + size_t i; + SECItem dsaraw; + unsigned char dsabuf[2*DSA_SUBPRIME_LEN]; + char *mpi; + + dsaraw.type = 0; + dsaraw.data = dsabuf; + dsaraw.len = sizeof(dsabuf); + + for (i = 0; p < pend; i++, p += pgpMpiLen(p)) { + if (pubkey_algo == PGPPUBKEYALGO_RSA) { + if (i >= 1) break; + if (_dig && + (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT)) + { + switch (i) { + case 0: /* m**d */ + _dig->sigdata = pgpMpiItem(NULL, _dig->sigdata, p); + if (_dig->sigdata == NULL) + return 1; + break; + default: + break; + } + } + pgpPrtStr("", pgpSigRSA[i]); + } else if (pubkey_algo == PGPPUBKEYALGO_DSA) { + if (i >= 2) break; + if (_dig && + (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT)) + { + int xx; + xx = 0; + switch (i) { + case 0: + memset(dsaraw.data, '\0', 2*DSA_SUBPRIME_LEN); + /* r */ + xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data, p, pend); + break; + case 1: /* s */ + xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data + DSA_SUBPRIME_LEN, p, pend); + if (_dig->sigdata != NULL) + SECITEM_FreeItem(_dig->sigdata, PR_FALSE); + else if ((_dig->sigdata=SECITEM_AllocItem(NULL, NULL, 0)) == NULL) { + xx = 1; + break; + } + if (DSAU_EncodeDerSig(_dig->sigdata, &dsaraw) != SECSuccess) + xx = 1; + break; + default: + xx = 1; + break; + } + if (xx) return xx; + } + pgpPrtStr("", pgpSigDSA[i]); + } else { + if (_print) + fprintf(stderr, "%7zd", i); + } + mpi = pgpMpiStr(p); + pgpPrtStr("", mpi); + free(mpi); + pgpPrtNL(); + } + + return 0; +} + +static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen, + pgpDig _dig, pgpDigParams _digp) +{ + uint8_t version = h[0]; + uint8_t * p; + size_t plen; + int rc; + + switch (version) { + case 3: + { pgpPktSigV3 v = (pgpPktSigV3)h; + time_t t; + + if (v->hashlen != 5) + return 1; + + pgpPrtVal("V3 ", pgpTagTbl, tag); + pgpPrtVal(" ", pgpPubkeyTbl, v->pubkey_algo); + pgpPrtVal(" ", pgpHashTbl, v->hash_algo); + pgpPrtVal(" ", pgpSigTypeTbl, v->sigtype); + pgpPrtNL(); + t = pgpGrab(v->time, sizeof(v->time)); + if (_print) + fprintf(stderr, " %-24.24s(0x%08x)", ctime(&t), (unsigned)t); + pgpPrtNL(); + pgpPrtHex(" signer keyid", v->signid, sizeof(v->signid)); + plen = pgpGrab(v->signhash16, sizeof(v->signhash16)); + pgpPrtHex(" signhash16", v->signhash16, sizeof(v->signhash16)); + pgpPrtNL(); + + if (_digp && _digp->pubkey_algo == 0) { + _digp->version = v->version; + _digp->hashlen = v->hashlen; + _digp->sigtype = v->sigtype; + _digp->hash = memcpy(xmalloc(v->hashlen), &v->sigtype, v->hashlen); + memcpy(_digp->time, v->time, sizeof(_digp->time)); + memcpy(_digp->signid, v->signid, sizeof(_digp->signid)); + _digp->pubkey_algo = v->pubkey_algo; + _digp->hash_algo = v->hash_algo; + memcpy(_digp->signhash16, v->signhash16, sizeof(_digp->signhash16)); + } + + p = ((uint8_t *)v) + sizeof(*v); + rc = pgpPrtSigParams(tag, v->pubkey_algo, v->sigtype, p, h, hlen, _dig); + } break; + case 4: + { pgpPktSigV4 v = (pgpPktSigV4)h; + + pgpPrtVal("V4 ", pgpTagTbl, tag); + pgpPrtVal(" ", pgpPubkeyTbl, v->pubkey_algo); + pgpPrtVal(" ", pgpHashTbl, v->hash_algo); + pgpPrtVal(" ", pgpSigTypeTbl, v->sigtype); + pgpPrtNL(); + + p = &v->hashlen[0]; + plen = pgpGrab(v->hashlen, sizeof(v->hashlen)); + p += sizeof(v->hashlen); + + if ((p + plen) > (h + hlen)) + return 1; + +if (_debug && _print) +fprintf(stderr, " hash[%zu] -- %s\n", plen, pgpHexStr(p, plen)); + if (_digp && _digp->pubkey_algo == 0) { + _digp->hashlen = sizeof(*v) + plen; + _digp->hash = memcpy(xmalloc(_digp->hashlen), v, _digp->hashlen); + } + (void) pgpPrtSubType(p, plen, v->sigtype, _digp); + p += plen; + + plen = pgpGrab(p,2); + p += 2; + + if ((p + plen) > (h + hlen)) + return 1; + +if (_debug && _print) +fprintf(stderr, " unhash[%zu] -- %s\n", plen, pgpHexStr(p, plen)); + (void) pgpPrtSubType(p, plen, v->sigtype, _digp); + p += plen; + + plen = pgpGrab(p,2); + pgpPrtHex(" signhash16", p, 2); + pgpPrtNL(); + + if (_digp && _digp->pubkey_algo == 0) { + _digp->version = v->version; + _digp->sigtype = v->sigtype; + _digp->pubkey_algo = v->pubkey_algo; + _digp->hash_algo = v->hash_algo; + memcpy(_digp->signhash16, p, sizeof(_digp->signhash16)); + } + + p += 2; + if (p > (h + hlen)) + return 1; + + rc = pgpPrtSigParams(tag, v->pubkey_algo, v->sigtype, p, h, hlen, _dig); + } break; + default: + rc = 1; + break; + } + return rc; +} + +static const char * const pgpPublicRSA[] = { + " n =", + " e =", + NULL, +}; + +#ifdef NOTYET +static const char * const pgpSecretRSA[] = { + " d =", + " p =", + " q =", + " u =", + NULL, +}; +#endif + +static const char * const pgpPublicDSA[] = { + " p =", + " q =", + " g =", + " y =", + NULL, +}; + +#ifdef NOTYET +static const char * const pgpSecretDSA[] = { + " x =", + NULL, +}; +#endif + +static const char * const pgpPublicELGAMAL[] = { + " p =", + " g =", + " y =", + NULL, +}; + +#ifdef NOTYET +static const char * const pgpSecretELGAMAL[] = { + " x =", + NULL, +}; +#endif + +char * pgpHexStr(const uint8_t *p, size_t plen) +{ + char *t, *str; + str = t = xmalloc(plen * 2 + 1); + static char const hex[] = "0123456789abcdef"; + while (plen-- > 0) { + size_t i; + i = *p++; + *t++ = hex[ (i >> 4) & 0xf ]; + *t++ = hex[ (i ) & 0xf ]; + } + *t = '\0'; + return str; +} + +static const uint8_t * pgpPrtPubkeyParams(uint8_t pubkey_algo, + const uint8_t *p, const uint8_t *h, size_t hlen, + pgpDig _dig) +{ + size_t i; + + /* XXX we can't handle more than one key in a packet, error out */ + if (_dig && _dig->keydata) + return NULL; + + for (i = 0; p < &h[hlen]; i++, p += pgpMpiLen(p)) { + char * mpi; + if (pubkey_algo == PGPPUBKEYALGO_RSA) { + if (i >= 2) break; + if (_dig) { + if (_dig->keydata == NULL) { + _dig->keydata = pgpNewPublicKey(rsaKey); + if (_dig->keydata == NULL) + return NULL; + } + switch (i) { + case 0: /* n */ + pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.modulus, p); + break; + case 1: /* e */ + pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.publicExponent, p); + break; + default: + break; + } + } + pgpPrtStr("", pgpPublicRSA[i]); + } else if (pubkey_algo == PGPPUBKEYALGO_DSA) { + if (i >= 4) break; + if (_dig) { + if (_dig->keydata == NULL) { + _dig->keydata = pgpNewPublicKey(dsaKey); + if (_dig->keydata == NULL) + return NULL; + } + switch (i) { + case 0: /* p */ + pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.prime, p); + break; + case 1: /* q */ + pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.subPrime, p); + break; + case 2: /* g */ + pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.base, p); + break; + case 3: /* y */ + pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.publicValue, p); + break; + default: + break; + } + } + pgpPrtStr("", pgpPublicDSA[i]); + } else if (pubkey_algo == PGPPUBKEYALGO_ELGAMAL_ENCRYPT) { + if (i >= 3) break; + pgpPrtStr("", pgpPublicELGAMAL[i]); + } else { + if (_print) + fprintf(stderr, "%7zd", i); + } + mpi = pgpMpiStr(p); + pgpPrtStr("", mpi); + free(mpi); + pgpPrtNL(); + } + + return p; +} + +static const uint8_t * pgpPrtSeckeyParams(uint8_t pubkey_algo, + const uint8_t *p, const uint8_t *h, size_t hlen) +{ + size_t i; + + switch (*p) { + case 0: + pgpPrtVal(" ", pgpSymkeyTbl, *p); + break; + case 255: + p++; + pgpPrtVal(" ", pgpSymkeyTbl, *p); + switch (p[1]) { + case 0x00: + pgpPrtVal(" simple ", pgpHashTbl, p[2]); + p += 2; + break; + case 0x01: + pgpPrtVal(" salted ", pgpHashTbl, p[2]); + pgpPrtHex("", p+3, 8); + p += 10; + break; + case 0x03: + pgpPrtVal(" iterated/salted ", pgpHashTbl, p[2]); + /* FIX: unsigned cast */ + i = (16 + (p[11] & 0xf)) << ((p[11] >> 4) + 6); + pgpPrtHex("", p+3, 8); + pgpPrtInt(" iter", i); + p += 11; + break; + } + break; + default: + pgpPrtVal(" ", pgpSymkeyTbl, *p); + pgpPrtHex(" IV", p+1, 8); + p += 8; + break; + } + pgpPrtNL(); + + p++; + +#ifdef NOTYET /* XXX encrypted MPI's need to be handled. */ + for (i = 0; p < &h[hlen]; i++, p += pgpMpiLen(p)) { + char *mpi; + if (pubkey_algo == PGPPUBKEYALGO_RSA) { + if (pgpSecretRSA[i] == NULL) break; + pgpPrtStr("", pgpSecretRSA[i]); + } else if (pubkey_algo == PGPPUBKEYALGO_DSA) { + if (pgpSecretDSA[i] == NULL) break; + pgpPrtStr("", pgpSecretDSA[i]); + } else if (pubkey_algo == PGPPUBKEYALGO_ELGAMAL_ENCRYPT) { + if (pgpSecretELGAMAL[i] == NULL) break; + pgpPrtStr("", pgpSecretELGAMAL[i]); + } else { + if (_print) + fprintf(stderr, "%7d", i); + } + mpi = pgpMpiStr(p); + pgpPrtStr("", mpi); + free(mpi); + pgpPrtNL(); + } +#else + pgpPrtHex(" secret", p, (hlen - (p - h) - 2)); + pgpPrtNL(); + p += (hlen - (p - h) - 2); +#endif + pgpPrtHex(" checksum", p, 2); + pgpPrtNL(); + + return p; +} + +static int pgpPrtKey(pgpTag tag, const uint8_t *h, size_t hlen, + pgpDig _dig, pgpDigParams _digp) +{ + uint8_t version = *h; + const uint8_t * p; + size_t plen; + time_t t; + int rc; + + switch (version) { + case 3: + { pgpPktKeyV3 v = (pgpPktKeyV3)h; + pgpPrtVal("V3 ", pgpTagTbl, tag); + pgpPrtVal(" ", pgpPubkeyTbl, v->pubkey_algo); + t = pgpGrab(v->time, sizeof(v->time)); + if (_print) + fprintf(stderr, " %-24.24s(0x%08x)", ctime(&t), (unsigned)t); + plen = pgpGrab(v->valid, sizeof(v->valid)); + if (plen != 0) + fprintf(stderr, " valid %zu days", plen); + pgpPrtNL(); + + if (_digp && _digp->tag == tag) { + _digp->version = v->version; + memcpy(_digp->time, v->time, sizeof(_digp->time)); + _digp->pubkey_algo = v->pubkey_algo; + } + + p = ((uint8_t *)v) + sizeof(*v); + p = pgpPrtPubkeyParams(v->pubkey_algo, p, h, hlen, _dig); + rc = (p == NULL); + } break; + case 4: + { pgpPktKeyV4 v = (pgpPktKeyV4)h; + pgpPrtVal("V4 ", pgpTagTbl, tag); + pgpPrtVal(" ", pgpPubkeyTbl, v->pubkey_algo); + t = pgpGrab(v->time, sizeof(v->time)); + if (_print) + fprintf(stderr, " %-24.24s(0x%08x)", ctime(&t), (unsigned)t); + pgpPrtNL(); + + if (_digp && _digp->tag == tag) { + _digp->version = v->version; + memcpy(_digp->time, v->time, sizeof(_digp->time)); + _digp->pubkey_algo = v->pubkey_algo; + } + + p = ((uint8_t *)v) + sizeof(*v); + p = pgpPrtPubkeyParams(v->pubkey_algo, p, h, hlen, _dig); + if (!(tag == PGPTAG_PUBLIC_KEY || tag == PGPTAG_PUBLIC_SUBKEY)) + p = pgpPrtSeckeyParams(v->pubkey_algo, p, h, hlen); + rc = (p == NULL); + } break; + default: + rc = 1; + break; + } + return rc; +} + +static int pgpPrtUserID(pgpTag tag, const uint8_t *h, size_t hlen, + pgpDigParams _digp) +{ + pgpPrtVal("", pgpTagTbl, tag); + if (_print) + fprintf(stderr, " \"%.*s\"", (int)hlen, (const char *)h); + pgpPrtNL(); + if (_digp) { + free(_digp->userid); + _digp->userid = memcpy(xmalloc(hlen+1), h, hlen); + _digp->userid[hlen] = '\0'; + } + return 0; +} + +static int pgpPrtComment(pgpTag tag, const uint8_t *h, size_t hlen) +{ + size_t i = hlen; + + pgpPrtVal("", pgpTagTbl, tag); + if (_print) + fprintf(stderr, " "); + while (i > 0) { + size_t j; + if (*h >= ' ' && *h <= 'z') { + if (_print) + fprintf(stderr, "%s", (const char *)h); + j = strlen((const char*)h); + while (h[j] == '\0') + j++; + } else { + pgpPrtHex("", h, i); + j = i; + } + i -= j; + h += j; + } + pgpPrtNL(); + return 0; +} + +int pgpPubkeyFingerprint(const uint8_t * pkt, size_t pktlen, pgpKeyID_t keyid) +{ + unsigned int val = *pkt; + size_t plen, hlen; + pgpTag tag; + const uint8_t *se, *h; + DIGEST_CTX ctx; + int rc = -1; /* assume failure. */ + + if (!(val & 0x80)) + return rc; + + if (val & 0x40) { + tag = (val & 0x3f); + plen = pgpLen(pkt+1, &hlen); + } else { + tag = (val >> 2) & 0xf; + plen = (1 << (val & 0x3)); + hlen = pgpGrab(pkt+1, plen); + } + if (pktlen > 0 && 1 + plen + hlen > pktlen) + return rc; + + h = pkt + 1 + plen; + + switch (h[0]) { + case 3: + { pgpPktKeyV3 v = (pgpPktKeyV3) (h); + se = (uint8_t *)(v + 1); + switch (v->pubkey_algo) { + case PGPPUBKEYALGO_RSA: + se += pgpMpiLen(se); + memmove(keyid, (se-8), 8); + rc = 0; + break; + default: /* TODO: md5 of mpi bodies (i.e. no length) */ + break; + } + } break; + case 4: + { pgpPktKeyV4 v = (pgpPktKeyV4) (h); + uint8_t * d = NULL; + uint8_t in[3]; + size_t dlen; + int i; + + se = (uint8_t *)(v + 1); + switch (v->pubkey_algo) { + case PGPPUBKEYALGO_RSA: + for (i = 0; i < 2; i++) + se += pgpMpiLen(se); + break; + case PGPPUBKEYALGO_DSA: + for (i = 0; i < 4; i++) + se += pgpMpiLen(se); + break; + } + + ctx = rpmDigestInit(PGPHASHALGO_SHA1, RPMDIGEST_NONE); + i = se - h; + in[0] = 0x99; + in[1] = i >> 8; + in[2] = i; + (void) rpmDigestUpdate(ctx, in, 3); + (void) rpmDigestUpdate(ctx, h, i); + (void) rpmDigestFinal(ctx, (void **)&d, &dlen, 0); + + if (d) { + memmove(keyid, (d + (dlen-8)), 8); + free(d); + rc = 0; + } + + } break; + } + return rc; +} + +int pgpExtractPubkeyFingerprint(const char * b64pkt, pgpKeyID_t keyid) +{ + uint8_t * pkt; + size_t pktlen; + + if (b64decode(b64pkt, (void **)&pkt, &pktlen)) + return -1; /* on error */ + (void) pgpPubkeyFingerprint(pkt, pktlen, keyid); + pkt = _free(pkt); + return sizeof(keyid); /* no. of bytes of pubkey signid */ +} + +static int pgpPrtPkt(const uint8_t *pkt, size_t pleft, + pgpDig _dig, pgpDigParams _digp) +{ + unsigned int val = *pkt; + size_t pktlen; + pgpTag tag; + size_t plen; + const uint8_t *h; + size_t hlen = 0; + int rc = 0; + + /* XXX can't deal with these. */ + if (!(val & 0x80)) + return -1; + + if (val & 0x40) { + tag = (val & 0x3f); + plen = pgpLen(pkt+1, &hlen); + } else { + tag = (val >> 2) & 0xf; + plen = (1 << (val & 0x3)); + hlen = pgpGrab(pkt+1, plen); + } + + pktlen = 1 + plen + hlen; + if (pktlen > pleft) + return -1; + + h = pkt + 1 + plen; + switch (tag) { + case PGPTAG_SIGNATURE: + rc = pgpPrtSig(tag, h, hlen, _dig, _digp); + break; + case PGPTAG_PUBLIC_KEY: + /* Get the public key fingerprint. */ + if (_digp) { + if (!pgpPubkeyFingerprint(pkt, pktlen, _digp->signid)) + _digp->saved |= PGPDIG_SAVED_ID; + else + memset(_digp->signid, 0, sizeof(_digp->signid)); + } + rc = pgpPrtKey(tag, h, hlen, _dig, _digp); + break; + case PGPTAG_USER_ID: + rc = pgpPrtUserID(tag, h, hlen, _digp); + break; + case PGPTAG_COMMENT: + case PGPTAG_COMMENT_OLD: + rc = pgpPrtComment(tag, h, hlen); + break; + + case PGPTAG_PUBLIC_SUBKEY: + case PGPTAG_SECRET_KEY: + case PGPTAG_SECRET_SUBKEY: + case PGPTAG_RESERVED: + case PGPTAG_PUBLIC_SESSION_KEY: + case PGPTAG_SYMMETRIC_SESSION_KEY: + case PGPTAG_COMPRESSED_DATA: + case PGPTAG_SYMMETRIC_DATA: + case PGPTAG_MARKER: + case PGPTAG_LITERAL_DATA: + case PGPTAG_TRUST: + case PGPTAG_PHOTOID: + case PGPTAG_ENCRYPTED_MDC: + case PGPTAG_MDC: + case PGPTAG_PRIVATE_60: + case PGPTAG_PRIVATE_62: + case PGPTAG_CONTROL: + default: + pgpPrtVal("", pgpTagTbl, tag); + pgpPrtHex("", h, hlen); + pgpPrtNL(); + break; + } + + return (rc ? -1 : pktlen); +} + +pgpDig pgpNewDig(void) +{ + pgpDig dig = xcalloc(1, sizeof(*dig)); + + return dig; +} + +void pgpCleanDig(pgpDig dig) +{ + if (dig != NULL) { + int i; + dig->signature.userid = _free(dig->signature.userid); + dig->pubkey.userid = _free(dig->pubkey.userid); + dig->signature.hash = _free(dig->signature.hash); + dig->pubkey.hash = _free(dig->pubkey.hash); + /* FIX: double indirection */ + for (i = 0; i < 4; i++) { + dig->signature.params[i] = _free(dig->signature.params[i]); + dig->pubkey.params[i] = _free(dig->pubkey.params[i]); + } + + memset(&dig->signature, 0, sizeof(dig->signature)); + memset(&dig->pubkey, 0, sizeof(dig->pubkey)); + + if (dig->keydata != NULL) { + SECKEY_DestroyPublicKey(dig->keydata); + dig->keydata = NULL; + } + + if (dig->sigdata != NULL) { + SECITEM_ZfreeItem(dig->sigdata, PR_TRUE); + dig->sigdata = NULL; + } + } + return; +} + +pgpDig pgpFreeDig(pgpDig dig) +{ + if (dig != NULL) { + + /* DUmp the signature/pubkey data. */ + pgpCleanDig(dig); + dig = _free(dig); + } + return dig; +} + +int pgpPrtPkts(const uint8_t * pkts, size_t pktlen, pgpDig dig, int printing) +{ + unsigned int val = *pkts; + const uint8_t *p; + size_t pleft; + int len; + pgpDigParams _digp = NULL; + + _print = printing; + if (dig != NULL && (val & 0x80)) { + pgpTag tag = (val & 0x40) ? (val & 0x3f) : ((val >> 2) & 0xf); + _digp = (tag == PGPTAG_SIGNATURE) ? &dig->signature : &dig->pubkey; + _digp->tag = tag; + } else + _digp = NULL; + + for (p = pkts, pleft = pktlen; p < (pkts + pktlen); p += len, pleft -= len) { + len = pgpPrtPkt(p, pleft, dig, _digp); + if (len <= 0) + return len; + if (len > pleft) /* XXX shouldn't happen */ + break; + } + return 0; +} + +static SECOidTag getSigAlg(pgpDigParams sigp) +{ + SECOidTag sigalg = SEC_OID_UNKNOWN; + if (sigp->pubkey_algo == PGPPUBKEYALGO_DSA) { + /* assume SHA1 for now, NSS doesn't have SECOID's for other types */ + sigalg = SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST; + } else if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) { + switch (sigp->hash_algo) { + case PGPHASHALGO_MD5: + sigalg = SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION; + break; + case PGPHASHALGO_MD2: + sigalg = SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION; + break; + case PGPHASHALGO_SHA1: + sigalg = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION; + break; + case PGPHASHALGO_SHA256: + sigalg = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION; + break; + case PGPHASHALGO_SHA384: + sigalg = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION; + break; + case PGPHASHALGO_SHA512: + sigalg = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION; + break; + default: + break; + } + } + return sigalg; +} + +char *pgpIdentItem(pgpDigParams digp) +{ + char *id = NULL; + if (digp) { + + char *signid = pgpHexStr(digp->signid+4, sizeof(digp->signid)-4); + rasprintf(&id, _("V%d %s/%s %s, key ID %s"), + digp->version, + pgpValStr(pgpPubkeyTbl, digp->pubkey_algo), + pgpValStr(pgpHashTbl, digp->hash_algo), + pgpValStr(pgpTagTbl, digp->tag), + signid); + free(signid); + } else { + id = xstrdup(_("(none)")); + } + return id; +} + +rpmRC pgpVerifySig(pgpDig dig, DIGEST_CTX hashctx) +{ + DIGEST_CTX ctx = rpmDigestDup(hashctx); + uint8_t *hash = NULL; + size_t hashlen = 0; + rpmRC res = RPMRC_FAIL; /* assume failure */ + pgpDigParams sigp = dig ? &dig->signature : NULL; + + if (sigp == NULL || ctx == NULL) + goto exit; + + if (sigp->hash != NULL) + rpmDigestUpdate(ctx, sigp->hash, sigp->hashlen); + + if (sigp->version == 4) { + /* V4 trailer is six octets long (rfc4880) */ + uint8_t trailer[6]; + uint32_t nb = sigp->hashlen; + nb = htonl(nb); + trailer[0] = sigp->version; + trailer[1] = 0xff; + memcpy(trailer+2, &nb, 4); + rpmDigestUpdate(ctx, trailer, sizeof(trailer)); + } + + rpmDigestFinal(ctx, (void **)&hash, &hashlen, 0); + + /* Compare leading 16 bits of digest for quick check. */ + if (hash && memcmp(hash, sigp->signhash16, 2) != 0) + goto exit; + + /* + * If we have a key, verify the signature for real. Otherwise we've + * done all we can, return NOKEY to indicate "looks okay but dunno." + */ + if (dig->keydata == NULL) { + res = RPMRC_NOKEY; + } else { + SECItem digest = { .type = siBuffer, .data = hash, .len = hashlen }; + SECItem *sig = dig->sigdata; + + /* Zero-pad RSA signature to expected size if necessary */ + if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) { + size_t siglen = SECKEY_SignatureLen(dig->keydata); + if (siglen > sig->len) { + size_t pad = siglen - sig->len; + if ((sig = SECITEM_AllocItem(NULL, NULL, siglen)) == NULL) { + goto exit; + } + memset(sig->data, 0, pad); + memcpy(sig->data+pad, dig->sigdata->data, dig->sigdata->len); + } + } + + /* XXX VFY_VerifyDigest() is deprecated in NSS 3.12 */ + if (VFY_VerifyDigest(&digest, dig->keydata, sig, + getSigAlg(sigp), NULL) == SECSuccess) { + res = RPMRC_OK; + } + + if (sig != dig->sigdata) { + SECITEM_ZfreeItem(sig, 1); + } + } + +exit: + free(hash); + return res; + +} + +static pgpArmor decodePkts(uint8_t *b, uint8_t **pkt, size_t *pktlen) +{ + const char * enc = NULL; + const char * crcenc = NULL; + uint8_t * dec; + uint8_t * crcdec; + size_t declen; + size_t crclen; + uint32_t crcpkt, crc; + const char * armortype = NULL; + char * t, * te; + int pstate = 0; + pgpArmor ec = PGPARMOR_ERR_NO_BEGIN_PGP; /* XXX assume failure */ + if (pgpIsPkt(b)) { +#ifdef NOTYET /* XXX ASCII Pubkeys only, please. */ + ec = 0; /* XXX fish out pkt type. */ +#endif + goto exit; + } + +#define TOKEQ(_s, _tok) (rstreqn((_s), (_tok), sizeof(_tok)-1)) + + for (t = (char *)b; t && *t; t = te) { + int rc; + if ((te = strchr(t, '\n')) == NULL) + te = t + strlen(t); + else + te++; + + switch (pstate) { + case 0: + armortype = NULL; + if (!TOKEQ(t, "-----BEGIN PGP ")) + continue; + t += sizeof("-----BEGIN PGP ")-1; + + rc = pgpValTok(pgpArmorTbl, t, te); + if (rc < 0) { + ec = PGPARMOR_ERR_UNKNOWN_ARMOR_TYPE; + goto exit; + } + if (rc != PGPARMOR_PUBKEY) /* XXX ASCII Pubkeys only, please. */ + continue; + + armortype = pgpValStr(pgpArmorTbl, rc); + t += strlen(armortype); + if (!TOKEQ(t, "-----")) + continue; + t += sizeof("-----")-1; + if (*t != '\n' && *t != '\r') + continue; + *t = '\0'; + pstate++; + break; + case 1: + enc = NULL; + rc = pgpValTok(pgpArmorKeyTbl, t, te); + if (rc >= 0) + continue; + if (*t != '\n' && *t != '\r') { + pstate = 0; + continue; + } + enc = te; /* Start of encoded packets */ + pstate++; + break; + case 2: + crcenc = NULL; + if (*t != '=') + continue; + *t++ = '\0'; /* Terminate encoded packets */ + crcenc = t; /* Start of encoded crc */ + pstate++; + break; + case 3: + pstate = 0; + if (!TOKEQ(t, "-----END PGP ")) { + ec = PGPARMOR_ERR_NO_END_PGP; + goto exit; + } + *t = '\0'; /* Terminate encoded crc */ + t += sizeof("-----END PGP ")-1; + if (t >= te) continue; + + if (armortype == NULL) /* XXX can't happen */ + continue; + if (!rstreqn(t, armortype, strlen(armortype))) + continue; + + t += strlen(armortype); + if (t >= te) continue; + + if (!TOKEQ(t, "-----")) { + ec = PGPARMOR_ERR_NO_END_PGP; + goto exit; + } + t += (sizeof("-----")-1); + if (t >= te) continue; + /* XXX permitting \r here is not RFC-2440 compliant */ + if (!(*t == '\n' || *t == '\r')) continue; + + crcdec = NULL; + crclen = 0; + if (b64decode(crcenc, (void **)&crcdec, &crclen) != 0) { + ec = PGPARMOR_ERR_CRC_DECODE; + goto exit; + } + crcpkt = pgpGrab(crcdec, crclen); + crcdec = _free(crcdec); + dec = NULL; + declen = 0; + if (b64decode(enc, (void **)&dec, &declen) != 0) { + ec = PGPARMOR_ERR_BODY_DECODE; + goto exit; + } + crc = pgpCRC(dec, declen); + if (crcpkt != crc) { + ec = PGPARMOR_ERR_CRC_CHECK; + goto exit; + } + if (pkt) *pkt = dec; + if (pktlen) *pktlen = declen; + ec = PGPARMOR_PUBKEY; /* XXX ASCII Pubkeys only, please. */ + goto exit; + break; + } + } + ec = PGPARMOR_NONE; + +exit: + return ec; +} + +pgpArmor pgpReadPkts(const char * fn, uint8_t ** pkt, size_t * pktlen) +{ + uint8_t * b = NULL; + ssize_t blen; + pgpArmor ec = PGPARMOR_ERR_NO_BEGIN_PGP; /* XXX assume failure */ + int rc = rpmioSlurp(fn, &b, &blen); + if (rc == 0 && b != NULL && blen > 0) { + ec = decodePkts(b, pkt, pktlen); + } + free(b); + return ec; +} + +pgpArmor pgpParsePkts(const char *armor, uint8_t ** pkt, size_t * pktlen) +{ + pgpArmor ec = PGPARMOR_ERR_NO_BEGIN_PGP; /* XXX assume failure */ + if (armor && strlen(armor) > 0) { + uint8_t *b = (uint8_t*) xstrdup(armor); + ec = decodePkts(b, pkt, pktlen); + free(b); + } + return ec; +} + +char * pgpArmorWrap(int atype, const unsigned char * s, size_t ns) +{ + char *buf = NULL, *val = NULL; + char *enc = b64encode(s, ns, -1); + char *crc = b64crc(s, ns); + const char *valstr = pgpValStr(pgpArmorTbl, atype); + + if (crc != NULL && enc != NULL) { + rasprintf(&buf, "%s=%s", enc, crc); + } + free(crc); + free(enc); + + rasprintf(&val, "-----BEGIN PGP %s-----\nVersion: rpm-" VERSION " (NSS-3)\n\n" + "%s\n-----END PGP %s-----\n", + valstr, buf != NULL ? buf : "", valstr); + + free(buf); + return val; +} + +/* + * Only flag for re-initialization here, in the common case the child + * exec()'s something else shutting down NSS here would be waste of time. + */ +static void at_forkchild(void) +{ + _new_process = 1; +} + +int rpmInitCrypto(void) { + int rc = 0; + + /* Lazy NSS shutdown for re-initialization after fork() */ + if (_new_process && _crypto_initialized) { + rpmFreeCrypto(); + } + + /* Initialize NSS if not already done */ + if (!_crypto_initialized) { + if (NSS_NoDB_Init(NULL) != SECSuccess) { + rc = -1; + } else { + _crypto_initialized = 1; + } + } + + /* Register one post-fork handler per process */ + if (_new_process) { + if (pthread_atfork(NULL, NULL, at_forkchild) != 0) { + rpmlog(RPMLOG_WARNING, _("Failed to register fork handler: %m\n")); + } + _new_process = 0; + } + return rc; +} + +int rpmFreeCrypto(void) +{ + int rc = 0; + if (_crypto_initialized) { + rc = (NSS_Shutdown() != SECSuccess); + _crypto_initialized = 0; + } + return rc; +} + + diff --git a/rpmio/rpmpgp.h b/rpmio/rpmpgp.h new file mode 100644 index 0000000..6d484f3 --- /dev/null +++ b/rpmio/rpmpgp.h @@ -0,0 +1,1201 @@ +#ifndef H_RPMPGP +#define H_RPMPGP + +/** \ingroup rpmpgp + * \file rpmio/rpmpgp.h + * + * OpenPGP constants and structures from RFC-2440. + * + * Text from RFC-2440 in comments is + * Copyright (C) The Internet Society (1998). All Rights Reserved. + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmpgp + */ +typedef struct DIGEST_CTX_s * DIGEST_CTX; +typedef struct rpmDigestBundle_s * rpmDigestBundle; + +/** \ingroup rpmpgp + */ +typedef struct pgpDig_s * pgpDig; + +/** \ingroup rpmpgp + */ +typedef struct pgpDigParams_s * pgpDigParams; + +typedef uint8_t pgpKeyID_t[8]; +typedef uint8_t pgpTime_t[4]; + +/** \ingroup rpmpgp + * 4.3. Packet Tags + * + * The packet tag denotes what type of packet the body holds. Note that + * old format headers can only have tags less than 16, whereas new + * format headers can have tags as great as 63. + */ +typedef enum pgpTag_e { + PGPTAG_RESERVED = 0, /*!< Reserved/Invalid */ + PGPTAG_PUBLIC_SESSION_KEY = 1, /*!< Public-Key Encrypted Session Key */ + PGPTAG_SIGNATURE = 2, /*!< Signature */ + PGPTAG_SYMMETRIC_SESSION_KEY= 3, /*!< Symmetric-Key Encrypted Session Key*/ + PGPTAG_ONEPASS_SIGNATURE = 4, /*!< One-Pass Signature */ + PGPTAG_SECRET_KEY = 5, /*!< Secret Key */ + PGPTAG_PUBLIC_KEY = 6, /*!< Public Key */ + PGPTAG_SECRET_SUBKEY = 7, /*!< Secret Subkey */ + PGPTAG_COMPRESSED_DATA = 8, /*!< Compressed Data */ + PGPTAG_SYMMETRIC_DATA = 9, /*!< Symmetrically Encrypted Data */ + PGPTAG_MARKER = 10, /*!< Marker */ + PGPTAG_LITERAL_DATA = 11, /*!< Literal Data */ + PGPTAG_TRUST = 12, /*!< Trust */ + PGPTAG_USER_ID = 13, /*!< User ID */ + PGPTAG_PUBLIC_SUBKEY = 14, /*!< Public Subkey */ + PGPTAG_COMMENT_OLD = 16, /*!< Comment (from OpenPGP draft) */ + PGPTAG_PHOTOID = 17, /*!< PGP's photo ID */ + PGPTAG_ENCRYPTED_MDC = 18, /*!< Integrity protected encrypted data */ + PGPTAG_MDC = 19, /*!< Manipulaion detection code packet */ + PGPTAG_PRIVATE_60 = 60, /*!< Private or Experimental Values */ + PGPTAG_COMMENT = 61, /*!< Comment */ + PGPTAG_PRIVATE_62 = 62, /*!< Private or Experimental Values */ + PGPTAG_CONTROL = 63 /*!< Control (GPG) */ +} pgpTag; + +/** \ingroup rpmpgp + * 5.1. Public-Key Encrypted Session Key Packets (Tag 1) + * + * A Public-Key Encrypted Session Key packet holds the session key used + * to encrypt a message. Zero or more Encrypted Session Key packets + * (either Public-Key or Symmetric-Key) may precede a Symmetrically + * Encrypted Data Packet, which holds an encrypted message. The message + * is encrypted with the session key, and the session key is itself + * encrypted and stored in the Encrypted Session Key packet(s). The + * Symmetrically Encrypted Data Packet is preceded by one Public-Key + * Encrypted Session Key packet for each OpenPGP key to which the + * message is encrypted. The recipient of the message finds a session + * key that is encrypted to their public key, decrypts the session key, + * and then uses the session key to decrypt the message. + * + * The body of this packet consists of: + * - A one-octet number giving the version number of the packet type. + * The currently defined value for packet version is 3. An + * implementation should accept, but not generate a version of 2, + * which is equivalent to V3 in all other respects. + * - An eight-octet number that gives the key ID of the public key + * that the session key is encrypted to. + * - A one-octet number giving the public key algorithm used. + * - A string of octets that is the encrypted session key. This string + * takes up the remainder of the packet, and its contents are + * dependent on the public key algorithm used. + * + * Algorithm Specific Fields for RSA encryption + * - multiprecision integer (MPI) of RSA encrypted value m**e mod n. + * + * Algorithm Specific Fields for Elgamal encryption: + * - MPI of Elgamal (Diffie-Hellman) value g**k mod p. + * - MPI of Elgamal (Diffie-Hellman) value m * y**k mod p. + */ +typedef struct pgpPktPubkey_s { + uint8_t version; /*!< version number (generate 3, accept 2). */ + pgpKeyID_t keyid; /*!< key ID of the public key for session key. */ + uint8_t algo; /*!< public key algorithm used. */ +} pgpPktPubkey; + + +/** \ingroup rpmpgp + * 5.2.1. Signature Types + * + * There are a number of possible meanings for a signature, which are + * specified in a signature type octet in any given signature. + */ +typedef enum pgpSigType_e { + PGPSIGTYPE_BINARY = 0x00, /*!< Binary document */ + PGPSIGTYPE_TEXT = 0x01, /*!< Canonical text document */ + PGPSIGTYPE_STANDALONE = 0x02, /*!< Standalone */ + PGPSIGTYPE_GENERIC_CERT = 0x10, + /*!< Generic certification of a User ID & Public Key */ + PGPSIGTYPE_PERSONA_CERT = 0x11, + /*!< Persona certification of a User ID & Public Key */ + PGPSIGTYPE_CASUAL_CERT = 0x12, + /*!< Casual certification of a User ID & Public Key */ + PGPSIGTYPE_POSITIVE_CERT = 0x13, + /*!< Positive certification of a User ID & Public Key */ + PGPSIGTYPE_SUBKEY_BINDING = 0x18, /*!< Subkey Binding */ + PGPSIGTYPE_SIGNED_KEY = 0x1F, /*!< Signature directly on a key */ + PGPSIGTYPE_KEY_REVOKE = 0x20, /*!< Key revocation */ + PGPSIGTYPE_SUBKEY_REVOKE = 0x28, /*!< Subkey revocation */ + PGPSIGTYPE_CERT_REVOKE = 0x30, /*!< Certification revocation */ + PGPSIGTYPE_TIMESTAMP = 0x40 /*!< Timestamp */ +} pgpSigType; + +/** \ingroup rpmpgp + * 9.1. Public Key Algorithms + * +\verbatim + ID Algorithm + -- --------- + 1 - RSA (Encrypt or Sign) + 2 - RSA Encrypt-Only + 3 - RSA Sign-Only + 16 - Elgamal (Encrypt-Only), see [ELGAMAL] + 17 - DSA (Digital Signature Standard) + 18 - Reserved for Elliptic Curve + 19 - Reserved for ECDSA + 20 - Elgamal (Encrypt or Sign) + 21 - Reserved for Diffie-Hellman (X9.42, + as defined for IETF-S/MIME) + 100 to 110 - Private/Experimental algorithm. +\endverbatim + * + * Implementations MUST implement DSA for signatures, and Elgamal for + * encryption. Implementations SHOULD implement RSA keys. + * Implementations MAY implement any other algorithm. + */ +typedef enum pgpPubkeyAlgo_e { + PGPPUBKEYALGO_RSA = 1, /*!< RSA */ + PGPPUBKEYALGO_RSA_ENCRYPT = 2, /*!< RSA(Encrypt-Only) */ + PGPPUBKEYALGO_RSA_SIGN = 3, /*!< RSA(Sign-Only) */ + PGPPUBKEYALGO_ELGAMAL_ENCRYPT = 16, /*!< Elgamal(Encrypt-Only) */ + PGPPUBKEYALGO_DSA = 17, /*!< DSA */ + PGPPUBKEYALGO_EC = 18, /*!< Elliptic Curve */ + PGPPUBKEYALGO_ECDSA = 19, /*!< ECDSA */ + PGPPUBKEYALGO_ELGAMAL = 20, /*!< Elgamal */ + PGPPUBKEYALGO_DH = 21 /*!< Diffie-Hellman (X9.42) */ +} pgpPubkeyAlgo; + +/** \ingroup rpmpgp + * 9.2. Symmetric Key Algorithms + * +\verbatim + ID Algorithm + -- --------- + 0 - Plaintext or unencrypted data + 1 - IDEA [IDEA] + 2 - Triple-DES (DES-EDE, as per spec - + 168 bit key derived from 192) + 3 - CAST5 (128 bit key, as per RFC 2144) + 4 - Blowfish (128 bit key, 16 rounds) [BLOWFISH] + 5 - SAFER-SK128 (13 rounds) [SAFER] + 6 - Reserved for DES/SK + 7 - Reserved for AES with 128-bit key + 8 - Reserved for AES with 192-bit key + 9 - Reserved for AES with 256-bit key + 100 to 110 - Private/Experimental algorithm. +\endverbatim + * + * Implementations MUST implement Triple-DES. Implementations SHOULD + * implement IDEA and CAST5. Implementations MAY implement any other + * algorithm. + */ +typedef enum pgpSymkeyAlgo_e { + PGPSYMKEYALGO_PLAINTEXT = 0, /*!< Plaintext */ + PGPSYMKEYALGO_IDEA = 1, /*!< IDEA */ + PGPSYMKEYALGO_TRIPLE_DES = 2, /*!< 3DES */ + PGPSYMKEYALGO_CAST5 = 3, /*!< CAST5 */ + PGPSYMKEYALGO_BLOWFISH = 4, /*!< BLOWFISH */ + PGPSYMKEYALGO_SAFER = 5, /*!< SAFER */ + PGPSYMKEYALGO_DES_SK = 6, /*!< DES/SK */ + PGPSYMKEYALGO_AES_128 = 7, /*!< AES(128-bit key) */ + PGPSYMKEYALGO_AES_192 = 8, /*!< AES(192-bit key) */ + PGPSYMKEYALGO_AES_256 = 9, /*!< AES(256-bit key) */ + PGPSYMKEYALGO_TWOFISH = 10, /*!< TWOFISH(256-bit key) */ + PGPSYMKEYALGO_NOENCRYPT = 110 /*!< no encryption */ +} pgpSymkeyAlgo; + +/** \ingroup rpmpgp + * 9.3. Compression Algorithms + * +\verbatim + ID Algorithm + -- --------- + 0 - Uncompressed + 1 - ZIP (RFC 1951) + 2 - ZLIB (RFC 1950) + 100 to 110 - Private/Experimental algorithm. +\endverbatim + * + * Implementations MUST implement uncompressed data. Implementations + * SHOULD implement ZIP. Implementations MAY implement ZLIB. + */ +typedef enum pgpCompressAlgo_e { + PGPCOMPRESSALGO_NONE = 0, /*!< Uncompressed */ + PGPCOMPRESSALGO_ZIP = 1, /*!< ZIP */ + PGPCOMPRESSALGO_ZLIB = 2, /*!< ZLIB */ + PGPCOMPRESSALGO_BZIP2 = 3 /*!< BZIP2 */ +} pgpCompressAlgo; + +/** \ingroup rpmpgp + * 9.4. Hash Algorithms + * +\verbatim + ID Algorithm Text Name + -- --------- ---- ---- + 1 - MD5 "MD5" + 2 - SHA-1 "SHA1" + 3 - RIPE-MD/160 "RIPEMD160" + 4 - Reserved for double-width SHA (experimental) + 5 - MD2 "MD2" + 6 - Reserved for TIGER/192 "TIGER192" + 7 - Reserved for HAVAL (5 pass, 160-bit) + "HAVAL-5-160" + 100 to 110 - Private/Experimental algorithm. +\endverbatim + * + * Implementations MUST implement SHA-1. Implementations SHOULD + * implement MD5. + * @todo Add SHA256. + */ +typedef enum pgpHashAlgo_e { + PGPHASHALGO_MD5 = 1, /*!< MD5 */ + PGPHASHALGO_SHA1 = 2, /*!< SHA1 */ + PGPHASHALGO_RIPEMD160 = 3, /*!< RIPEMD160 */ + PGPHASHALGO_MD2 = 5, /*!< MD2 */ + PGPHASHALGO_TIGER192 = 6, /*!< TIGER192 */ + PGPHASHALGO_HAVAL_5_160 = 7, /*!< HAVAL-5-160 */ + PGPHASHALGO_SHA256 = 8, /*!< SHA256 */ + PGPHASHALGO_SHA384 = 9, /*!< SHA384 */ + PGPHASHALGO_SHA512 = 10, /*!< SHA512 */ + PGPHASHALGO_SHA224 = 11, /*!< SHA224 */ +} pgpHashAlgo; + +/** \ingroup rpmpgp + * 5.2.2. Version 3 Signature Packet Format + * + * The body of a version 3 Signature Packet contains: + * - One-octet version number (3). + * - One-octet length of following hashed material. MUST be 5. + * - One-octet signature type. + * - Four-octet creation time. + * - Eight-octet key ID of signer. + * - One-octet public key algorithm. + * - One-octet hash algorithm. + * - Two-octet field holding left 16 bits of signed hash value. + * - One or more multi-precision integers comprising the signature. + * + * Algorithm Specific Fields for RSA signatures: + * - multiprecision integer (MPI) of RSA signature value m**d. + * + * Algorithm Specific Fields for DSA signatures: + * - MPI of DSA value r. + * - MPI of DSA value s. + */ +typedef struct pgpPktSigV3_s { + uint8_t version; /*!< version number (3). */ + uint8_t hashlen; /*!< length of following hashed material. MUST be 5. */ + uint8_t sigtype; /*!< signature type. */ + pgpTime_t time; /*!< 4 byte creation time. */ + pgpKeyID_t signid; /*!< key ID of signer. */ + uint8_t pubkey_algo; /*!< public key algorithm. */ + uint8_t hash_algo; /*!< hash algorithm. */ + uint8_t signhash16[2]; /*!< left 16 bits of signed hash value. */ +} * pgpPktSigV3; + +/** \ingroup rpmpgp + * 5.2.3. Version 4 Signature Packet Format + * + * The body of a version 4 Signature Packet contains: + * - One-octet version number (4). + * - One-octet signature type. + * - One-octet public key algorithm. + * - One-octet hash algorithm. + * - Two-octet scalar octet count for following hashed subpacket + * data. Note that this is the length in octets of all of the hashed + * subpackets; a pointer incremented by this number will skip over + * the hashed subpackets. + * - Hashed subpacket data. (zero or more subpackets) + * - Two-octet scalar octet count for following unhashed subpacket + * data. Note that this is the length in octets of all of the + * unhashed subpackets; a pointer incremented by this number will + * skip over the unhashed subpackets. + * - Unhashed subpacket data. (zero or more subpackets) + * - Two-octet field holding left 16 bits of signed hash value. + * - One or more multi-precision integers comprising the signature. + */ +typedef struct pgpPktSigV4_s { + uint8_t version; /*!< version number (4). */ + uint8_t sigtype; /*!< signature type. */ + uint8_t pubkey_algo; /*!< public key algorithm. */ + uint8_t hash_algo; /*!< hash algorithm. */ + uint8_t hashlen[2]; /*!< length of following hashed material. */ +} * pgpPktSigV4; + +/** \ingroup rpmpgp + * 5.2.3.1. Signature Subpacket Specification + * + * The subpacket fields consist of zero or more signature subpackets. + * Each set of subpackets is preceded by a two-octet scalar count of the + * length of the set of subpackets. + * + * Each subpacket consists of a subpacket header and a body. The header + * consists of: + * - the subpacket length (1, 2, or 5 octets) + * - the subpacket type (1 octet) + * and is followed by the subpacket specific data. + * + * The length includes the type octet but not this length. Its format is + * similar to the "new" format packet header lengths, but cannot have + * partial body lengths. That is: +\verbatim + if the 1st octet < 192, then + lengthOfLength = 1 + subpacketLen = 1st_octet + + if the 1st octet >= 192 and < 255, then + lengthOfLength = 2 + subpacketLen = ((1st_octet - 192) << 8) + (2nd_octet) + 192 + + if the 1st octet = 255, then + lengthOfLength = 5 + subpacket length = [four-octet scalar starting at 2nd_octet] +\endverbatim + * + * The value of the subpacket type octet may be: + * +\verbatim + 2 = signature creation time + 3 = signature expiration time + 4 = exportable certification + 5 = trust signature + 6 = regular expression + 7 = revocable + 9 = key expiration time + 10 = placeholder for backward compatibility + 11 = preferred symmetric algorithms + 12 = revocation key + 16 = issuer key ID + 20 = notation data + 21 = preferred hash algorithms + 22 = preferred compression algorithms + 23 = key server preferences + 24 = preferred key server + 25 = primary user id + 26 = policy URL + 27 = key flags + 28 = signer's user id + 29 = reason for revocation + 100 to 110 = internal or user-defined +\endverbatim + * + * An implementation SHOULD ignore any subpacket of a type that it does + * not recognize. + * + * Bit 7 of the subpacket type is the "critical" bit. If set, it + * denotes that the subpacket is one that is critical for the evaluator + * of the signature to recognize. If a subpacket is encountered that is + * marked critical but is unknown to the evaluating software, the + * evaluator SHOULD consider the signature to be in error. + */ +typedef enum pgpSubType_e { + PGPSUBTYPE_NONE = 0, /*!< none */ + PGPSUBTYPE_SIG_CREATE_TIME = 2, /*!< signature creation time */ + PGPSUBTYPE_SIG_EXPIRE_TIME = 3, /*!< signature expiration time */ + PGPSUBTYPE_EXPORTABLE_CERT = 4, /*!< exportable certification */ + PGPSUBTYPE_TRUST_SIG = 5, /*!< trust signature */ + PGPSUBTYPE_REGEX = 6, /*!< regular expression */ + PGPSUBTYPE_REVOCABLE = 7, /*!< revocable */ + PGPSUBTYPE_KEY_EXPIRE_TIME = 9, /*!< key expiration time */ + PGPSUBTYPE_ARR = 10, /*!< additional recipient request */ + PGPSUBTYPE_PREFER_SYMKEY = 11, /*!< preferred symmetric algorithms */ + PGPSUBTYPE_REVOKE_KEY = 12, /*!< revocation key */ + PGPSUBTYPE_ISSUER_KEYID = 16, /*!< issuer key ID */ + PGPSUBTYPE_NOTATION = 20, /*!< notation data */ + PGPSUBTYPE_PREFER_HASH = 21, /*!< preferred hash algorithms */ + PGPSUBTYPE_PREFER_COMPRESS = 22, /*!< preferred compression algorithms */ + PGPSUBTYPE_KEYSERVER_PREFERS= 23, /*!< key server preferences */ + PGPSUBTYPE_PREFER_KEYSERVER = 24, /*!< preferred key server */ + PGPSUBTYPE_PRIMARY_USERID = 25, /*!< primary user id */ + PGPSUBTYPE_POLICY_URL = 26, /*!< policy URL */ + PGPSUBTYPE_KEY_FLAGS = 27, /*!< key flags */ + PGPSUBTYPE_SIGNER_USERID = 28, /*!< signer's user id */ + PGPSUBTYPE_REVOKE_REASON = 29, /*!< reason for revocation */ + PGPSUBTYPE_FEATURES = 30, /*!< feature flags (gpg) */ + PGPSUBTYPE_EMBEDDED_SIG = 32, /*!< embedded signature (gpg) */ + + PGPSUBTYPE_INTERNAL_100 = 100, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_101 = 101, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_102 = 102, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_103 = 103, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_104 = 104, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_105 = 105, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_106 = 106, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_107 = 107, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_108 = 108, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_109 = 109, /*!< internal or user-defined */ + PGPSUBTYPE_INTERNAL_110 = 110, /*!< internal or user-defined */ + + PGPSUBTYPE_CRITICAL = 128 /*!< critical subpacket marker */ +} pgpSubType; + +/** \ingroup rpmpgp + * 5.2. Signature Packet (Tag 2) + * + * A signature packet describes a binding between some public key and + * some data. The most common signatures are a signature of a file or a + * block of text, and a signature that is a certification of a user ID. + * + * Two versions of signature packets are defined. Version 3 provides + * basic signature information, while version 4 provides an expandable + * format with subpackets that can specify more information about the + * signature. PGP 2.6.x only accepts version 3 signatures. + * + * Implementations MUST accept V3 signatures. Implementations SHOULD + * generate V4 signatures. Implementations MAY generate a V3 signature + * that can be verified by PGP 2.6.x. + * + * Note that if an implementation is creating an encrypted and signed + * message that is encrypted to a V3 key, it is reasonable to create a + * V3 signature. + */ +typedef union pgpPktSig_u { + struct pgpPktSigV3_s v3; + struct pgpPktSigV4_s v4; +} * pgpPktSig; + +/** + * 5.3. Symmetric-Key Encrypted Session-Key Packets (Tag 3) + * + * The Symmetric-Key Encrypted Session Key packet holds the symmetric- + * key encryption of a session key used to encrypt a message. Zero or + * more Encrypted Session Key packets and/or Symmetric-Key Encrypted + * Session Key packets may precede a Symmetrically Encrypted Data Packet + * that holds an encrypted message. The message is encrypted with a + * session key, and the session key is itself encrypted and stored in + * the Encrypted Session Key packet or the Symmetric-Key Encrypted + * Session Key packet. + * + * If the Symmetrically Encrypted Data Packet is preceded by one or more + * Symmetric-Key Encrypted Session Key packets, each specifies a + * passphrase that may be used to decrypt the message. This allows a + * message to be encrypted to a number of public keys, and also to one + * or more pass phrases. This packet type is new, and is not generated + * by PGP 2.x or PGP 5.0. + * + * The body of this packet consists of: + * - A one-octet version number. The only currently defined version + * is 4. + * - A one-octet number describing the symmetric algorithm used. + * - A string-to-key (S2K) specifier, length as defined above. + * - Optionally, the encrypted session key itself, which is decrypted + * with the string-to-key object. + * + */ +typedef struct pgpPktSymkey_s { + uint8_t version; /*!< version number (4). */ + uint8_t symkey_algo; + uint8_t s2k[1]; +} pgpPktSymkey; + +/** \ingroup rpmpgp + * 5.4. One-Pass Signature Packets (Tag 4) + * + * The One-Pass Signature packet precedes the signed data and contains + * enough information to allow the receiver to begin calculating any + * hashes needed to verify the signature. It allows the Signature + * Packet to be placed at the end of the message, so that the signer can + * compute the entire signed message in one pass. + * + * A One-Pass Signature does not interoperate with PGP 2.6.x or earlier. + * + * The body of this packet consists of: + * - A one-octet version number. The current version is 3. + * - A one-octet signature type. Signature types are described in + * section 5.2.1. + * - A one-octet number describing the hash algorithm used. + * - A one-octet number describing the public key algorithm used. + * - An eight-octet number holding the key ID of the signing key. + * - A one-octet number holding a flag showing whether the signature + * is nested. A zero value indicates that the next packet is + * another One-Pass Signature packet that describes another + * signature to be applied to the same message data. + * + * Note that if a message contains more than one one-pass signature, + * then the signature packets bracket the message; that is, the first + * signature packet after the message corresponds to the last one-pass + * packet and the final signature packet corresponds to the first one- + * pass packet. + */ +typedef struct pgpPktOnepass_s { + uint8_t version; /*!< version number (3). */ + uint8_t sigtype; /*!< signature type. */ + uint8_t hash_algo; /*!< hash algorithm. */ + uint8_t pubkey_algo; /*!< public key algorithm. */ + pgpKeyID_t signid; /*!< key ID of signer. */ + uint8_t nested; +} * pgpPktOnepass; + +/** \ingroup rpmpgp + * 5.5.1. Key Packet Variants + * + * 5.5.1.1. Public Key Packet (Tag 6) + * + * A Public Key packet starts a series of packets that forms an OpenPGP + * key (sometimes called an OpenPGP certificate). + * + * 5.5.1.2. Public Subkey Packet (Tag 14) + * + * A Public Subkey packet (tag 14) has exactly the same format as a + * Public Key packet, but denotes a subkey. One or more subkeys may be + * associated with a top-level key. By convention, the top-level key + * provides signature services, and the subkeys provide encryption + * services. + * + * Note: in PGP 2.6.x, tag 14 was intended to indicate a comment packet. + * This tag was selected for reuse because no previous version of PGP + * ever emitted comment packets but they did properly ignore them. + * Public Subkey packets are ignored by PGP 2.6.x and do not cause it to + * fail, providing a limited degree of backward compatibility. + * + * 5.5.1.3. Secret Key Packet (Tag 5) + * + * A Secret Key packet contains all the information that is found in a + * Public Key packet, including the public key material, but also + * includes the secret key material after all the public key fields. + * + * 5.5.1.4. Secret Subkey Packet (Tag 7) + * + * A Secret Subkey packet (tag 7) is the subkey analog of the Secret Key + * packet, and has exactly the same format. + * + * 5.5.2. Public Key Packet Formats + * + * There are two versions of key-material packets. Version 3 packets + * were first generated by PGP 2.6. Version 2 packets are identical in + * format to Version 3 packets, but are generated by PGP 2.5 or before. + * V2 packets are deprecated and they MUST NOT be generated. PGP 5.0 + * introduced version 4 packets, with new fields and semantics. PGP + * 2.6.x will not accept key-material packets with versions greater than + * 3. + * + * OpenPGP implementations SHOULD create keys with version 4 format. An + * implementation MAY generate a V3 key to ensure interoperability with + * old software; note, however, that V4 keys correct some security + * deficiencies in V3 keys. These deficiencies are described below. An + * implementation MUST NOT create a V3 key with a public key algorithm + * other than RSA. + * + * A version 3 public key or public subkey packet contains: + * - A one-octet version number (3). + * - A four-octet number denoting the time that the key was created. + * - A two-octet number denoting the time in days that this key is + * valid. If this number is zero, then it does not expire. + * - A one-octet number denoting the public key algorithm of this key + * - A series of multi-precision integers comprising the key + * material: + * - a multiprecision integer (MPI) of RSA public modulus n; + * - an MPI of RSA public encryption exponent e. + * + * V3 keys SHOULD only be used for backward compatibility because of + * three weaknesses in them. First, it is relatively easy to construct a + * V3 key that has the same key ID as any other key because the key ID + * is simply the low 64 bits of the public modulus. Secondly, because + * the fingerprint of a V3 key hashes the key material, but not its + * length, which increases the opportunity for fingerprint collisions. + * Third, there are minor weaknesses in the MD5 hash algorithm that make + * developers prefer other algorithms. See below for a fuller discussion + * of key IDs and fingerprints. + * + */ +typedef struct pgpPktKeyV3_s { + uint8_t version; /*!< version number (3). */ + pgpTime_t time; /*!< time that the key was created. */ + uint8_t valid[2]; /*!< time in days that this key is valid. */ + uint8_t pubkey_algo; /*!< public key algorithm. */ +} * pgpPktKeyV3; + +/** \ingroup rpmpgp + * The version 4 format is similar to the version 3 format except for + * the absence of a validity period. This has been moved to the + * signature packet. In addition, fingerprints of version 4 keys are + * calculated differently from version 3 keys, as described in section + * "Enhanced Key Formats." + * + * A version 4 packet contains: + * - A one-octet version number (4). + * - A four-octet number denoting the time that the key was created. + * - A one-octet number denoting the public key algorithm of this key + * - A series of multi-precision integers comprising the key + * material. This algorithm-specific portion is: + * + * Algorithm Specific Fields for RSA public keys: + * - multiprecision integer (MPI) of RSA public modulus n; + * - MPI of RSA public encryption exponent e. + * + * Algorithm Specific Fields for DSA public keys: + * - MPI of DSA prime p; + * - MPI of DSA group order q (q is a prime divisor of p-1); + * - MPI of DSA group generator g; + * - MPI of DSA public key value y (= g**x where x is secret). + * + * Algorithm Specific Fields for Elgamal public keys: + * - MPI of Elgamal prime p; + * - MPI of Elgamal group generator g; + * - MPI of Elgamal public key value y (= g**x where x is + * secret). + * + */ +typedef struct pgpPktKeyV4_s { + uint8_t version; /*!< version number (4). */ + pgpTime_t time; /*!< time that the key was created. */ + uint8_t pubkey_algo; /*!< public key algorithm. */ +} * pgpPktKeyV4; + +/** \ingroup rpmpgp + * 5.5.3. Secret Key Packet Formats + * + * The Secret Key and Secret Subkey packets contain all the data of the + * Public Key and Public Subkey packets, with additional algorithm- + * specific secret key data appended, in encrypted form. + * + * The packet contains: + * - A Public Key or Public Subkey packet, as described above + * - One octet indicating string-to-key usage conventions. 0 + * indicates that the secret key data is not encrypted. 255 + * indicates that a string-to-key specifier is being given. Any + * other value is a symmetric-key encryption algorithm specifier. + * - [Optional] If string-to-key usage octet was 255, a one-octet + * symmetric encryption algorithm. + * - [Optional] If string-to-key usage octet was 255, a string-to-key + * specifier. The length of the string-to-key specifier is implied + * by its type, as described above. + * - [Optional] If secret data is encrypted, eight-octet Initial + * Vector (IV). + * - Encrypted multi-precision integers comprising the secret key + * data. These algorithm-specific fields are as described below. + * - Two-octet checksum of the plaintext of the algorithm-specific + * portion (sum of all octets, mod 65536). + * + * Algorithm Specific Fields for RSA secret keys: + * - multiprecision integer (MPI) of RSA secret exponent d. + * - MPI of RSA secret prime value p. + * - MPI of RSA secret prime value q (p < q). + * - MPI of u, the multiplicative inverse of p, mod q. + * + * Algorithm Specific Fields for DSA secret keys: + * - MPI of DSA secret exponent x. + * + * Algorithm Specific Fields for Elgamal secret keys: + * - MPI of Elgamal secret exponent x. + * + * Secret MPI values can be encrypted using a passphrase. If a string- + * to-key specifier is given, that describes the algorithm for + * converting the passphrase to a key, else a simple MD5 hash of the + * passphrase is used. Implementations SHOULD use a string-to-key + * specifier; the simple hash is for backward compatibility. The cipher + * for encrypting the MPIs is specified in the secret key packet. + * + * Encryption/decryption of the secret data is done in CFB mode using + * the key created from the passphrase and the Initial Vector from the + * packet. A different mode is used with V3 keys (which are only RSA) + * than with other key formats. With V3 keys, the MPI bit count prefix + * (i.e., the first two octets) is not encrypted. Only the MPI non- + * prefix data is encrypted. Furthermore, the CFB state is + * resynchronized at the beginning of each new MPI value, so that the + * CFB block boundary is aligned with the start of the MPI data. + * + * With V4 keys, a simpler method is used. All secret MPI values are + * encrypted in CFB mode, including the MPI bitcount prefix. + * + * The 16-bit checksum that follows the algorithm-specific portion is + * the algebraic sum, mod 65536, of the plaintext of all the algorithm- + * specific octets (including MPI prefix and data). With V3 keys, the + * checksum is stored in the clear. With V4 keys, the checksum is + * encrypted like the algorithm-specific data. This value is used to + * check that the passphrase was correct. + * + */ +typedef union pgpPktKey_u { + struct pgpPktKeyV3_s v3; + struct pgpPktKeyV4_s v4; +} pgpPktKey; + +/* \ingroup rpmpgp + * 5.6. Compressed Data Packet (Tag 8) + * + * The Compressed Data packet contains compressed data. Typically, this + * packet is found as the contents of an encrypted packet, or following + * a Signature or One-Pass Signature packet, and contains literal data + * packets. + * + * The body of this packet consists of: + * - One octet that gives the algorithm used to compress the packet. + * - The remainder of the packet is compressed data. + * + * A Compressed Data Packet's body contains an block that compresses + * some set of packets. See section "Packet Composition" for details on + * how messages are formed. + * + * ZIP-compressed packets are compressed with raw RFC 1951 DEFLATE + * blocks. Note that PGP V2.6 uses 13 bits of compression. If an + * implementation uses more bits of compression, PGP V2.6 cannot + * decompress it. + * + * ZLIB-compressed packets are compressed with RFC 1950 ZLIB-style + * blocks. + */ +typedef struct pgpPktCdata_s { + uint8_t compressalgo; + uint8_t data[1]; +} pgpPktCdata; + +/* \ingroup rpmpgp + * 5.7. Symmetrically Encrypted Data Packet (Tag 9) + * + * The Symmetrically Encrypted Data packet contains data encrypted with + * a symmetric-key algorithm. When it has been decrypted, it will + * typically contain other packets (often literal data packets or + * compressed data packets). + * + * The body of this packet consists of: + * - Encrypted data, the output of the selected symmetric-key cipher + * operating in PGP's variant of Cipher Feedback (CFB) mode. + * + * The symmetric cipher used may be specified in an Public-Key or + * Symmetric-Key Encrypted Session Key packet that precedes the + * Symmetrically Encrypted Data Packet. In that case, the cipher + * algorithm octet is prefixed to the session key before it is + * encrypted. If no packets of these types precede the encrypted data, + * the IDEA algorithm is used with the session key calculated as the MD5 + * hash of the passphrase. + * + * The data is encrypted in CFB mode, with a CFB shift size equal to the + * cipher's block size. The Initial Vector (IV) is specified as all + * zeros. Instead of using an IV, OpenPGP prefixes a 10-octet string to + * the data before it is encrypted. The first eight octets are random, + * and the 9th and 10th octets are copies of the 7th and 8th octets, + * respectively. After encrypting the first 10 octets, the CFB state is + * resynchronized if the cipher block size is 8 octets or less. The + * last 8 octets of ciphertext are passed through the cipher and the + * block boundary is reset. + * + * The repetition of 16 bits in the 80 bits of random data prefixed to + * the message allows the receiver to immediately check whether the + * session key is incorrect. + */ +typedef struct pgpPktEdata_s { + uint8_t data[1]; +} pgpPktEdata; + +/* \ingroup rpmpgp + * 5.8. Marker Packet (Obsolete Literal Packet) (Tag 10) + * + * An experimental version of PGP used this packet as the Literal + * packet, but no released version of PGP generated Literal packets with + * this tag. With PGP 5.x, this packet has been re-assigned and is + * reserved for use as the Marker packet. + * + * The body of this packet consists of: + * - The three octets 0x50, 0x47, 0x50 (which spell "PGP" in UTF-8). + * + * Such a packet MUST be ignored when received. It may be placed at the + * beginning of a message that uses features not available in PGP 2.6.x + * in order to cause that version to report that newer software is + * necessary to process the message. + */ +/* \ingroup rpmpgp + * 5.9. Literal Data Packet (Tag 11) + * + * A Literal Data packet contains the body of a message; data that is + * not to be further interpreted. + * + * The body of this packet consists of: + * - A one-octet field that describes how the data is formatted. + * + * If it is a 'b' (0x62), then the literal packet contains binary data. + * If it is a 't' (0x74), then it contains text data, and thus may need + * line ends converted to local form, or other text-mode changes. RFC + * 1991 also defined a value of 'l' as a 'local' mode for machine-local + * conversions. This use is now deprecated. + * - File name as a string (one-octet length, followed by file name), + * if the encrypted data should be saved as a file. + * + * If the special name "_CONSOLE" is used, the message is considered to + * be "for your eyes only". This advises that the message data is + * unusually sensitive, and the receiving program should process it more + * carefully, perhaps avoiding storing the received data to disk, for + * example. + * - A four-octet number that indicates the modification date of the + * file, or the creation time of the packet, or a zero that + * indicates the present time. + * - The remainder of the packet is literal data. + * + * Text data is stored with text endings (i.e. network-normal + * line endings). These should be converted to native line endings by + * the receiving software. + */ +typedef struct pgpPktLdata_s { + uint8_t format; + uint8_t filenamelen; + uint8_t filename[1]; +} pgpPktLdata; + +/* \ingroup rpmpgp + * 5.10. Trust Packet (Tag 12) + * + * The Trust packet is used only within keyrings and is not normally + * exported. Trust packets contain data that record the user's + * specifications of which key holders are trustworthy introducers, + * along with other information that implementing software uses for + * trust information. + * + * Trust packets SHOULD NOT be emitted to output streams that are + * transferred to other users, and they SHOULD be ignored on any input + * other than local keyring files. + */ +typedef struct pgpPktTrust_s { + uint8_t flag; +} pgpPktTrust; + +/* \ingroup rpmpgp + * 5.11. User ID Packet (Tag 13) + * + * A User ID packet consists of data that is intended to represent the + * name and email address of the key holder. By convention, it includes + * an RFC 822 mail name, but there are no restrictions on its content. + * The packet length in the header specifies the length of the user id. + * If it is text, it is encoded in UTF-8. + * + */ +typedef struct pgpPktUid_s { + uint8_t userid[1]; +} pgpPktUid; + +/** \ingroup rpmpgp + */ +union pgpPktPre_u { + pgpPktPubkey pubkey; /*!< 5.1. Public-Key Encrypted Session Key */ + pgpPktSig sig; /*!< 5.2. Signature */ + pgpPktSymkey symkey; /*!< 5.3. Symmetric-Key Encrypted Session-Key */ + pgpPktOnepass onepass; /*!< 5.4. One-Pass Signature */ + pgpPktKey key; /*!< 5.5. Key Material */ + pgpPktCdata cdata; /*!< 5.6. Compressed Data */ + pgpPktEdata edata; /*!< 5.7. Symmetrically Encrypted Data */ + /*!< 5.8. Marker (obsolete) */ + pgpPktLdata ldata; /*!< 5.9. Literal Data */ + pgpPktTrust tdata; /*!< 5.10. Trust */ + pgpPktUid uid; /*!< 5.11. User ID */ +}; + +/** \ingroup rpmpgp + */ +typedef enum pgpArmor_e { + PGPARMOR_ERR_CRC_CHECK = -7, + PGPARMOR_ERR_BODY_DECODE = -6, + PGPARMOR_ERR_CRC_DECODE = -5, + PGPARMOR_ERR_NO_END_PGP = -4, + PGPARMOR_ERR_UNKNOWN_PREAMBLE_TAG = -3, + PGPARMOR_ERR_UNKNOWN_ARMOR_TYPE = -2, + PGPARMOR_ERR_NO_BEGIN_PGP = -1, +#define PGPARMOR_ERROR PGPARMOR_ERR_NO_BEGIN_PGP + PGPARMOR_NONE = 0, + PGPARMOR_MESSAGE = 1, /*!< MESSAGE */ + PGPARMOR_PUBKEY = 2, /*!< PUBLIC KEY BLOCK */ + PGPARMOR_SIGNATURE = 3, /*!< SIGNATURE */ + PGPARMOR_SIGNED_MESSAGE = 4, /*!< SIGNED MESSAGE */ + PGPARMOR_FILE = 5, /*!< ARMORED FILE */ + PGPARMOR_PRIVKEY = 6, /*!< PRIVATE KEY BLOCK */ + PGPARMOR_SECKEY = 7 /*!< SECRET KEY BLOCK */ +} pgpArmor; + +/** \ingroup rpmpgp + */ +typedef enum pgpArmorKey_e { + PGPARMORKEY_VERSION = 1, /*!< Version: */ + PGPARMORKEY_COMMENT = 2, /*!< Comment: */ + PGPARMORKEY_MESSAGEID = 3, /*!< MessageID: */ + PGPARMORKEY_HASH = 4, /*!< Hash: */ + PGPARMORKEY_CHARSET = 5 /*!< Charset: */ +} pgpArmorKey; + +typedef enum pgpValType_e { + PGPVAL_TAG = 1, + PGPVAL_ARMORBLOCK = 2, + PGPVAL_ARMORKEY = 3, + PGPVAL_SIGTYPE = 4, + PGPVAL_SUBTYPE = 5, + PGPVAL_PUBKEYALGO = 6, + PGPVAL_SYMKEYALGO = 7, + PGPVAL_COMPRESSALGO = 8, + PGPVAL_HASHALGO = 9, + PGPVAL_SERVERPREFS = 10, +} pgpValType; + +/** \ingroup rpmpgp + * Bit(s) to control digest operation. + */ +enum rpmDigestFlags_e { + RPMDIGEST_NONE = 0 +}; + +typedef rpmFlags rpmDigestFlags; + +/** \ingroup rpmpgp + * Return string representation of am OpenPGP value. + * @param type type of value + * @param val byte value to lookup + * @return string value of byte + */ +const char * pgpValString(pgpValType type, uint8_t val); + +/** \ingroup rpmpgp + * Return (native-endian) integer from big-endian representation. + * @param s pointer to big-endian integer + * @param nbytes no. of bytes + * @return native-endian integer + */ +static inline +unsigned int pgpGrab(const uint8_t *s, size_t nbytes) +{ + size_t i = 0; + size_t nb = (nbytes <= sizeof(i) ? nbytes : sizeof(i)); + while (nb--) + i = (i << 8) | *s++; + return i; +} + +/** \ingroup rpmpgp + * Return length of an OpenPGP packet. + * @param s pointer to packet + * @retval *lenp no. of bytes in packet + * @return no. of bytes in length prefix + */ +static inline +size_t pgpLen(const uint8_t *s, size_t * lenp) +{ + if (*s < 192) { + (*lenp) = *s++; + return 1; + } else if (*s < 255) { + (*lenp) = ((((unsigned)s[0]) - 192) << 8) + s[1] + 192; + return 2; + } else { + (*lenp) = pgpGrab(s+1, (size_t) 4); + return 5; + } +} + +/** \ingroup rpmpgp + * Return hex formatted representation of bytes. + * @param p bytes + * @param plen no. of bytes + * @return hex formatted string (malloc'ed) + */ +char * pgpHexStr(const uint8_t *p, size_t plen); + +/** \ingroup rpmpgp + * Calculate OpenPGP public key fingerprint. + * @todo V3 non-RSA public keys not implemented. + * @param pkt OpenPGP packet (i.e. PGPTAG_PUBLIC_KEY) + * @param pktlen OpenPGP packet length (no. of bytes) + * @retval keyid public key fingerprint + * @return 0 on sucess, else -1 + */ +int pgpPubkeyFingerprint(const uint8_t * pkt, size_t pktlen, + pgpKeyID_t keyid); + +/** \ingroup rpmpgp +* Extract OpenPGP public key fingerprint from base64 encoded packet. +* @todo V3 non-RSA public keys not implemented. +* @param b64pkt base64 encoded openpgp packet +* @retval keyid public key fingerprint +* @return 8 (no. of bytes) on success, < 0 on error +*/ +int pgpExtractPubkeyFingerprint(const char * b64pkt, pgpKeyID_t keyid); + +/** \ingroup rpmpgp + * Print/parse a OpenPGP packet(s). + * @param pkts OpenPGP packet(s) + * @param pktlen OpenPGP packet(s) length (no. of bytes) + * @retval dig parsed output of signature/pubkey packet parameters + * @param printing should packets be printed? + * @return -1 on error, 0 on success + */ +int pgpPrtPkts(const uint8_t *pkts, size_t pktlen, pgpDig dig, int printing); + +/** \ingroup rpmpgp + * Parse armored OpenPGP packets from a file. + * @param fn file name + * @retval pkt dearmored OpenPGP packet(s) (malloced) + * @retval pktlen dearmored OpenPGP packet(s) length in bytes + * @return type of armor found + */ +pgpArmor pgpReadPkts(const char * fn, uint8_t ** pkt, size_t * pktlen); + +/** \ingroup rpmpgp + * Parse armored OpenPGP packets from memory. + * @param armor armored OpenPGP packet string + * @retval pkt dearmored OpenPGP packet(s) (malloced) + * @retval pktlen dearmored OpenPGP packet(s) length in bytes + * @return type of armor found + */ +pgpArmor pgpParsePkts(const char *armor, uint8_t ** pkt, size_t * pktlen); + +/** \ingroup rpmpgp + * Wrap a OpenPGP packets in ascii armor for transport. + * @param atype type of armor + * @param s binary pkt data + * @param ns binary pkt data length + * @return formatted string + */ +char * pgpArmorWrap(int atype, const unsigned char * s, size_t ns); + +/** \ingroup rpmpgp + * Create a container for parsed OpenPGP packet(s). + * @return container + */ +pgpDig pgpNewDig(void); + +/** \ingroup rpmpgp + * Release (malloc'd) data from container. + * @param dig container + */ +void pgpCleanDig(pgpDig dig); + +/** \ingroup rpmpgp + * Destroy a container for parsed OpenPGP packet(s). + * @param dig container + * @return NULL always + */ +pgpDig pgpFreeDig(pgpDig dig); + +/** \ingroup rpmpgp + * Verify a PGP signature. + * @param dig container + * @param hashctx digest context + * @return RPMRC_OK on success + */ +rpmRC pgpVerifySig(pgpDig dig, DIGEST_CTX hashctx); + +/** \ingroup rpmpgp + * Return a string identification of a PGP signature/pubkey. + * @param digp signature/pubkey container + * @return string describing the item and parameters + */ +char *pgpIdentItem(pgpDigParams digp); + +/** \ingroup rpmpgp + * Perform cryptography initialization. + * It must be called before any cryptography can be used within rpm. + * It's not normally necessary to call it directly as it's called in + * general rpm initialization routines. + * @return 0 on success, -1 on failure + */ +int rpmInitCrypto(void); + +/** \ingroup rpmpgp + * Shutdown cryptography + */ +int rpmFreeCrypto(void); + +/** \ingroup rpmpgp + * Duplicate a digest context. + * @param octx existing digest context + * @return duplicated digest context + */ +DIGEST_CTX rpmDigestDup(DIGEST_CTX octx); + +/** \ingroup rpmpgp + * Obtain digest length in bytes. + * @param hashalgo type of digest + * @return digest length, zero on invalid algorithm + */ +size_t rpmDigestLength(int hashalgo); + +/** \ingroup rpmpgp + * Initialize digest. + * Set bit count to 0 and buffer to mysterious initialization constants. + * @param hashalgo type of digest + * @param flags bit(s) to control digest operation + * @return digest context + */ +DIGEST_CTX rpmDigestInit(int hashalgo, rpmDigestFlags flags); + +/** \ingroup rpmpgp + * Update context with next plain text buffer. + * @param ctx digest context + * @param data next data buffer + * @param len no. bytes of data + * @return 0 on success + */ +int rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len); + +/** \ingroup rpmpgp + * Return digest and destroy context. + * Final wrapup - pad to 64-byte boundary with the bit pattern + * 1 0* (64-bit count of bits processed, MSB-first) + * + * @param ctx digest context + * @retval datap address of returned digest + * @retval lenp address of digest length + * @param asAscii return digest as ascii string? + * @return 0 on success + */ +int rpmDigestFinal(DIGEST_CTX ctx, + void ** datap, + size_t * lenp, int asAscii); + +/** \ingroup rpmpgp + * Create a new digest bundle. + * @return New digest bundle + */ +rpmDigestBundle rpmDigestBundleNew(void); + +/** \ingroup rpmpgp + * Free a digest bundle and all contained digest contexts. + * @param bundle digest bundle + * @return NULL always + */ +rpmDigestBundle rpmDigestBundleFree(rpmDigestBundle bundle); + +/** \ingroup rpmpgp + * Add a new type of digest to a bundle. + * @param bundle digest bundle + * @param algo type of digest + * @param flags bit(s) to control digest operation + * @return 0 on success + */ +int rpmDigestBundleAdd(rpmDigestBundle bundle, int algo, + rpmDigestFlags flags); + +/** \ingroup rpmpgp + * Update contexts within bundle with next plain text buffer. + * @param bundle digest bundle + * @param data next data buffer + * @param len no. bytes of data + * @return 0 on success + */ +int rpmDigestBundleUpdate(rpmDigestBundle bundle, const void *data, size_t len); + +/** \ingroup rpmpgp + * Return digest from a bundle and destroy context, see rpmDigestFinal(). + * + * @param bundle digest bundle + * @param algo type of digest to return + * @retval datap address of returned digest + * @retval lenp address of digest length + * @param asAscii return digest as ascii string? + * @return 0 on success + */ +int rpmDigestBundleFinal(rpmDigestBundle bundle, + int algo, void ** datap, size_t * lenp, int asAscii); + +/** \ingroup rpmpgp + * Duplicate a digest context from a bundle. + * @param bundle digest bundle + * @param algo type of digest to dup + * @return duplicated digest context + */ +DIGEST_CTX rpmDigestBundleDupCtx(rpmDigestBundle bundle, int algo); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMPGP */ diff --git a/rpmio/rpmsq.c b/rpmio/rpmsq.c new file mode 100644 index 0000000..4e69ad0 --- /dev/null +++ b/rpmio/rpmsq.c @@ -0,0 +1,366 @@ +/** \ingroup rpmio + * \file rpmio/rpmsq.c + */ + +#include "system.h" + +#include +#include +#include +#include +#include +#include + +#include + +/* XXX suggested in bugzilla #159024 */ +#if PTHREAD_MUTEX_DEFAULT != PTHREAD_MUTEX_NORMAL + #error RPM expects PTHREAD_MUTEX_DEFAULT == PTHREAD_MUTEX_NORMAL +#endif + +#ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +static pthread_mutex_t rpmsigTbl_lock = PTHREAD_MUTEX_INITIALIZER; +#else +static pthread_mutex_t rpmsigTbl_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; +#endif + +#define DO_LOCK() pthread_mutex_lock(&rpmsigTbl_lock); +#define DO_UNLOCK() pthread_mutex_unlock(&rpmsigTbl_lock); +#define ADD_REF(__tbl) (__tbl)->active++ +#define SUB_REF(__tbl) --(__tbl)->active + +#define ME() ((void *)pthread_self()) + +#define _RPMSQ_INTERNAL +#include + +#include "debug.h" + +static struct rpmsqElem rpmsqRock; + +static rpmsq rpmsqQueue = &rpmsqRock; + +/** \ingroup rpmsq + * Insert node into from queue. + * @param elem node to link + * @param prev previous node from queue + * @return 0 on success + */ +static int rpmsqInsert(void * elem, void * prev) +{ + rpmsq sq = (rpmsq) elem; + int ret = -1; + + if (sq != NULL) { + ret = sighold(SIGCHLD); + if (ret == 0) { + sq->child = 0; + sq->reaped = 0; + sq->status = 0; + sq->reaper = 1; + sq->pipes[0] = sq->pipes[1] = -1; + + sq->id = ME(); + ret = pthread_mutex_init(&sq->mutex, NULL); + insque(elem, (prev != NULL ? prev : rpmsqQueue)); + ret = sigrelse(SIGCHLD); + } + } + return ret; +} + +/** \ingroup rpmsq + * Remove node from queue. + * @param elem node to link + * @return 0 on success + */ +static int rpmsqRemove(void * elem) +{ + rpmsq sq = (rpmsq) elem; + int ret = -1; + + if (elem != NULL) { + ret = sighold (SIGCHLD); + if (ret == 0) { + remque(elem); + + /* Unlock the mutex and then destroy it */ + if((ret = pthread_mutex_unlock(&sq->mutex)) == 0) + ret = pthread_mutex_destroy(&sq->mutex); + + sq->id = NULL; + if (sq->pipes[1]) ret = close(sq->pipes[1]); + if (sq->pipes[0]) ret = close(sq->pipes[0]); + sq->pipes[0] = sq->pipes[1] = -1; + ret = sigrelse(SIGCHLD); + } + } + return ret; +} + +static sigset_t rpmsqCaught; + +static struct rpmsig_s { + int signum; + rpmsqAction_t handler; + int active; + struct sigaction oact; +} rpmsigTbl[] = { + { SIGINT, rpmsqAction }, +#define rpmsigTbl_sigint (&rpmsigTbl[0]) + { SIGQUIT, rpmsqAction }, +#define rpmsigTbl_sigquit (&rpmsigTbl[1]) + { SIGCHLD, rpmsqAction }, +#define rpmsigTbl_sigchld (&rpmsigTbl[2]) + { SIGHUP, rpmsqAction }, +#define rpmsigTbl_sighup (&rpmsigTbl[3]) + { SIGTERM, rpmsqAction }, +#define rpmsigTbl_sigterm (&rpmsigTbl[4]) + { SIGPIPE, rpmsqAction }, +#define rpmsigTbl_sigpipe (&rpmsigTbl[5]) + { -1, NULL }, +}; + +int rpmsqIsCaught(int signum) +{ + return sigismember(&rpmsqCaught, signum); +} + +#ifdef SA_SIGINFO +void rpmsqAction(int signum, siginfo_t * info, void * context) +#else +void rpmsqAction(int signum) +#endif +{ + int save = errno; + rpmsig tbl; + + for (tbl = rpmsigTbl; tbl->signum >= 0; tbl++) { + if (tbl->signum != signum) + continue; + + (void) sigaddset(&rpmsqCaught, signum); + + switch (signum) { + case SIGCHLD: + while (1) { + rpmsq sq; + int status = 0; + pid_t reaped = waitpid(0, &status, WNOHANG); + + /* XXX errno set to ECHILD/EINVAL/EINTR. */ + if (reaped <= 0) + break; + + /* XXX insque(3)/remque(3) are dequeue, not ring. */ + for (sq = rpmsqQueue->q_forw; + sq != NULL && sq != rpmsqQueue; + sq = sq->q_forw) + { + int ret; + + if (sq->child != reaped) + continue; + sq->reaped = reaped; + sq->status = status; + + /* Unlock the mutex. The waiter will then be able to + * aquire the lock. + * + * XXX: jbj, wtd, if this fails? + */ + ret = pthread_mutex_unlock(&sq->mutex); + + break; + } + } + break; + default: + break; + } + break; + } + errno = save; +} + +int rpmsqEnable(int signum, rpmsqAction_t handler) +{ + int tblsignum = (signum >= 0 ? signum : -signum); + struct sigaction sa; + rpmsig tbl; + int ret = -1; + + (void) DO_LOCK (); + if (rpmsqQueue->id == NULL) + rpmsqQueue->id = ME(); + for (tbl = rpmsigTbl; tbl->signum >= 0; tbl++) { + if (tblsignum != tbl->signum) + continue; + + if (signum >= 0) { /* Enable. */ + if (ADD_REF(tbl) <= 0) { + (void) sigdelset(&rpmsqCaught, tbl->signum); + + /* XXX Don't set a signal handler if already SIG_IGN */ + (void) sigaction(tbl->signum, NULL, &tbl->oact); + if (tbl->oact.sa_handler == SIG_IGN) + continue; + + (void) sigemptyset (&sa.sa_mask); +#ifdef SA_SIGINFO + sa.sa_flags = SA_SIGINFO; +#else + sa.sa_flags = 0; +#endif + sa.sa_sigaction = (handler != NULL ? handler : tbl->handler); + if (sigaction(tbl->signum, &sa, &tbl->oact) < 0) { + SUB_REF(tbl); + break; + } + tbl->active = 1; /* XXX just in case */ + if (handler != NULL) + tbl->handler = handler; + } + } else { /* Disable. */ + if (SUB_REF(tbl) <= 0) { + if (sigaction(tbl->signum, &tbl->oact, NULL) < 0) + break; + tbl->active = 0; /* XXX just in case */ + tbl->handler = (handler != NULL ? handler : rpmsqAction); + } + } + ret = tbl->active; + break; + } + (void) DO_UNLOCK (); + return ret; +} + +pid_t rpmsqFork(rpmsq sq) +{ + pid_t pid; + int xx; + int nothreads = 0; /* XXX: Shouldn't this be a global? */ + + if (sq->reaper) { + xx = rpmsqInsert(sq, NULL); + xx = rpmsqEnable(SIGCHLD, NULL); + } + + xx = pipe(sq->pipes); + + xx = sighold(SIGCHLD); + + /* + * Initialize the cond var mutex. We have to aquire the lock we + * use for the condition before we fork. Otherwise it is possible for + * the child to exit, we get sigchild and the sig handler to send + * the condition signal before we are waiting on the condition. + */ + if (!nothreads) { + if(pthread_mutex_lock(&sq->mutex)) { + /* Yack we did not get the lock, lets just give up */ + xx = close(sq->pipes[0]); + xx = close(sq->pipes[1]); + sq->pipes[0] = sq->pipes[1] = -1; + goto out; + } + } + + pid = fork(); + if (pid < (pid_t) 0) { /* fork failed. */ + sq->child = (pid_t)-1; + xx = close(sq->pipes[0]); + xx = close(sq->pipes[1]); + sq->pipes[0] = sq->pipes[1] = -1; + goto out; + } else if (pid == (pid_t) 0) { /* Child. */ + int yy; + + /* Block to permit parent time to wait. */ + xx = close(sq->pipes[1]); + xx = read(sq->pipes[0], &yy, sizeof(yy)); + xx = close(sq->pipes[0]); + sq->pipes[0] = sq->pipes[1] = -1; + } else { /* Parent. */ + sq->child = pid; + } + +out: + xx = sigrelse(SIGCHLD); + return sq->child; +} + +/** + * Wait for child process to be reaped, and unregister SIGCHLD handler. + * @todo Rewrite to use waitpid on helper thread. + * @param sq scriptlet queue element + * @return 0 on success + */ +static int rpmsqWaitUnregister(rpmsq sq) +{ + int nothreads = 0; + int ret = 0; + int xx; + + /* Protect sq->reaped from handler changes. */ + ret = sighold(SIGCHLD); + + /* Start the child, linux often runs child before parent. */ + if (sq->pipes[0] >= 0) + xx = close(sq->pipes[0]); + if (sq->pipes[1] >= 0) + xx = close(sq->pipes[1]); + sq->pipes[0] = sq->pipes[1] = -1; + + /* Put a stopwatch on the time spent waiting to measure performance gain. */ + (void) rpmswEnter(&sq->op, -1); + + /* Wait for handler to receive SIGCHLD. */ + while (ret == 0 && sq->reaped != sq->child) { + if (nothreads) + /* Note that sigpause re-enables SIGCHLD. */ + ret = sigpause(SIGCHLD); + else { + xx = sigrelse(SIGCHLD); + + /* + * We start before the fork with this mutex locked; + * The only one that unlocks this the signal handler. + * So if we get the lock the child has been reaped. + */ + ret = pthread_mutex_lock(&sq->mutex); + xx = sighold(SIGCHLD); + } + } + + /* Accumulate stopwatch time spent waiting, potential performance gain. */ + sq->ms_scriptlets += rpmswExit(&sq->op, -1)/1000; + + xx = sigrelse(SIGCHLD); + + /* Remove processed SIGCHLD item from queue. */ + xx = rpmsqRemove(sq); + + /* Disable SIGCHLD handler on refcount == 0. */ + xx = rpmsqEnable(-SIGCHLD, NULL); + + return ret; +} + +pid_t rpmsqWait(rpmsq sq) +{ + if (sq->reaper) { + (void) rpmsqWaitUnregister(sq); + } else { + pid_t reaped; + int status; + do { + reaped = waitpid(sq->child, &status, 0); + } while (reaped >= 0 && reaped != sq->child); + sq->reaped = reaped; + sq->status = status; + } + + return sq->reaped; +} diff --git a/rpmio/rpmsq.h b/rpmio/rpmsq.h new file mode 100644 index 0000000..90087e0 --- /dev/null +++ b/rpmio/rpmsq.h @@ -0,0 +1,106 @@ +#ifndef H_RPMSQ +#define H_RPMSQ + +/** \ingroup rpmio + * \file rpmio/rpmsq.h + * + */ + +#include +#include +#if defined(_RPMSQ_INTERNAL) +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmsq + */ +typedef struct rpmsig_s * rpmsig; + +/** \ingroup rpmsq + */ +typedef struct rpmsqElem * rpmsq; + +/** \ingroup rpmsq + * Default signal handler prototype. + * @param signum signal number + * @param info (siginfo_t) signal info + * @param context signal context + */ +#ifdef SA_SIGINFO +typedef void (*rpmsqAction_t) (int signum, siginfo_t * info, void * context); +#else +typedef void (*rpmsqAction_t) (int signum); +#endif + +/* XXX make this fully opaque? */ +#if defined(_RPMSQ_INTERNAL) +/** + * SIGCHLD queue element. + */ +struct rpmsqElem { + struct rpmsqElem * q_forw; /*!< for use by insque(3)/remque(3). */ + struct rpmsqElem * q_back; + pid_t child; /*!< Currently running child. */ + volatile pid_t reaped; /*!< Reaped waitpid(3) return. */ + volatile int status; /*!< Reaped waitpid(3) status. */ + struct rpmop_s op; /*!< Scriptlet operation timestamp; */ + rpmtime_t ms_scriptlets; /*!< Accumulated script duration (msecs). */ + int reaper; /*!< Register SIGCHLD handler? */ + int pipes[2]; /*!< Parent/child interlock. */ + void * id; /*!< Blocking thread id (pthread_t). */ + pthread_mutex_t mutex; /*!< Signal delivery to thread condvar. */ + pthread_cond_t cond; +}; +#endif /* _RPMSQ_INTERNAL */ + +/** \ingroup rpmsq + * Test if given signal has been caught (while signals blocked). + * Similar to sigismember() but operates on internal signal queue. + * @param signum signal to test for + * @return 1 if caught, 0 if not and -1 on error + */ +int rpmsqIsCaught(int signum); + +/** \ingroup rpmsq + * Default signal handler. + * @param signum signal number + * @param info (siginfo_t) signal info + * @param context signal context + */ +#ifdef SA_SIGINFO +void rpmsqAction(int signum, siginfo_t * info, void * context); +#else +void rpmsqAction(int signum); +#endif + +/** \ingroup rpmsq + * Enable or disable a signal handler. + * @param signum signal to enable (or disable if negative) + * @param handler sa_sigaction handler (or NULL to use rpmsqHandler()) + * @return no. of refs, -1 on error + */ +int rpmsqEnable(int signum, rpmsqAction_t handler); + +/** \ingroup rpmsq + * Fork a child process. + * @param sq scriptlet queue element + * @return fork(2) pid + */ +pid_t rpmsqFork(rpmsq sq); + +/** \ingroup rpmsq + * Wait for child process to be reaped. + * @param sq scriptlet queue element + * @return reaped child pid + */ +pid_t rpmsqWait(rpmsq sq); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMSQ */ diff --git a/rpmio/rpmstring.c b/rpmio/rpmstring.c new file mode 100644 index 0000000..0022b60 --- /dev/null +++ b/rpmio/rpmstring.c @@ -0,0 +1,192 @@ +/** + * \file rpmio/rpmstring.c + */ + +#include "system.h" + +#include +#include + +#include +#include "debug.h" + + +int rstrcasecmp(const char * s1, const char * s2) +{ + const char * p1 = s1; + const char * p2 = s2; + char c1, c2; + + if (p1 == p2) + return 0; + + do + { + c1 = rtolower (*p1++); + c2 = rtolower (*p2++); + if (c1 == '\0') + break; + } + while (c1 == c2); + + return (int)(c1 - c2); +} + +int rstrncasecmp(const char *s1, const char *s2, size_t n) +{ + const char * p1 = s1; + const char * p2 = s2; + char c1, c2; + + if (p1 == p2 || n == 0) + return 0; + + do + { + c1 = rtolower (*p1++); + c2 = rtolower (*p2++); + if (c1 == '\0' || c1 != c2) + break; + } while (--n > 0); + + return (int)(c1 - c2); +} + +/* + * Simple and stupid asprintf() clone. + * FIXME: write to work with non-C99 vsnprintf or check for one in configure. + */ +int rasprintf(char **strp, const char *fmt, ...) +{ + int n; + va_list ap; + char * p = NULL; + + if (strp == NULL) + return -1; + + va_start(ap, fmt); + n = vsnprintf(NULL, 0, fmt, ap); + va_end(ap); + + if (n >= -1) { + size_t nb = n + 1; + p = xmalloc(nb); + va_start(ap, fmt); + n = vsnprintf(p, nb, fmt, ap); + va_end(ap); + } + *strp = p; + return n; +} + +/* + * Concatenate two strings with dynamically (re)allocated + * memory what prevents static buffer overflows by design. + * *dest is reallocated to the size of strings to concatenate. + * + * Note: + * 1) char *buf = rstrcat(NULL,"string"); is the same like rstrcat(&buf,"string"); + * 2) rstrcat(&buf,NULL) returns buf + * 3) rstrcat(NULL,NULL) returns NULL + * 4) *dest and src can overlap + */ +char *rstrcat(char **dest, const char *src) +{ + if ( src == NULL ) { + return dest != NULL ? *dest : NULL; + } + + if ( dest == NULL ) { + return xstrdup(src); + } + + { + size_t dest_size = *dest != NULL ? strlen(*dest) : 0; + size_t src_size = strlen(src); + + *dest = xrealloc(*dest, dest_size+src_size+1); /* include '\0' */ + memmove(&(*dest)[dest_size], src, src_size+1); + } + + return *dest; +} + +/* + * Concatenate strings with dynamically (re)allocated + * memory what prevents static buffer overflows by design. + * *dest is reallocated to the size of strings to concatenate. + * List of strings has to be NULL terminated. + * + * Note: + * 1) char *buf = rstrscat(NULL,"string",NULL); is the same like rstrscat(&buf,"string",NULL); + * 2) rstrscat(&buf,NULL) returns buf + * 3) rstrscat(NULL,NULL) returns NULL + * 4) *dest and argument strings can overlap + */ +char *rstrscat(char **dest, const char *arg, ...) +{ + va_list ap; + size_t arg_size, dst_size; + const char *s; + char *dst, *p; + + dst = dest ? *dest : NULL; + + if ( arg == NULL ) { + return dst; + } + + va_start(ap, arg); + for (arg_size=0, s=arg; s; s = va_arg(ap, const char *)) + arg_size += strlen(s); + va_end(ap); + + dst_size = dst ? strlen(dst) : 0; + dst = xrealloc(dst, dst_size+arg_size+1); /* include '\0' */ + p = &dst[dst_size]; + + va_start(ap, arg); + for (s = arg; s; s = va_arg(ap, const char *)) { + size_t size = strlen(s); + memmove(p, s, size); + p += size; + } + va_end(ap); + *p = '\0'; + + if ( dest ) { + *dest = dst; + } + + return dst; +} + +/* + * Adapted from OpenBSD, strlcpy() originally developed by + * Todd C. Miller + */ +size_t rstrlcpy(char *dest, const char *src, size_t n) +{ + char *d = dest; + const char *s = src; + size_t len = n; + + /* Copy as many bytes as will fit */ + if (len != 0) { + while (--len != 0) { + if ((*d++ = *s++) == '\0') + break; + } + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (len == 0) { + if (n != 0) + *d = '\0'; /* NUL-terminate dst */ + while (*s++) + ; + } + + return s - src - 1; /* count does not include NUL */ +} diff --git a/rpmio/rpmstring.h b/rpmio/rpmstring.h new file mode 100644 index 0000000..4e8a5db --- /dev/null +++ b/rpmio/rpmstring.h @@ -0,0 +1,179 @@ +#ifndef _RPMSTRING_H_ +#define _RPMSTRING_H_ + +/** \ingroup rpmstring + * \file rpmio/rpmstring.h + * String manipulation helper functions + */ + +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmstring + * Locale insensitive islower(3) + */ +RPM_GNUC_CONST +static inline int rislower(int c) { + return (c >= 'a' && c <= 'z'); +} + +/** \ingroup rpmstring + * Locale insensitive isupper(3) + */ +RPM_GNUC_CONST +static inline int risupper(int c) { + return (c >= 'A' && c <= 'Z'); +} + +/** \ingroup rpmstring + * Locale insensitive isalpha(3) + */ +RPM_GNUC_CONST +static inline int risalpha(int c) { + return (rislower(c) || risupper(c)); +} + +/** \ingroup rpmstring + * Locale insensitive isdigit(3) + */ +RPM_GNUC_CONST +static inline int risdigit(int c) { + return (c >= '0' && c <= '9'); +} + +/** \ingroup rpmstring + * Locale insensitive isalnum(3) + */ +RPM_GNUC_CONST +static inline int risalnum(int c) { + return (risalpha(c) || risdigit(c)); +} + +/** \ingroup rpmstring + * Locale insensitive isblank(3) + */ +RPM_GNUC_CONST +static inline int risblank(int c) { + return (c == ' ' || c == '\t'); +} + +/** \ingroup rpmstring + * Locale insensitive isspace(3) + */ +RPM_GNUC_CONST +static inline int risspace(int c) { + return (risblank(c) || c == '\n' || c == '\r' || c == '\f' || c == '\v'); +} + +/** \ingroup rpmstring + * Locale insensitive tolower(3) + */ +RPM_GNUC_CONST +static inline int rtolower(int c) { + return ((risupper(c)) ? (c | ('a' - 'A')) : c); +} + +/** \ingroup rpmstring + * Locale insensitive toupper(3) + */ +RPM_GNUC_CONST +static inline int rtoupper(int c) { + return ((rislower(c)) ? (c & ~('a' - 'A')) : c); +} + +/** + * Convert hex to binary nibble. + * @param c hex character + * @return binary nibble + */ +RPM_GNUC_CONST +static inline unsigned char rnibble(char c) +{ + if (c >= '0' && c <= '9') + return (c - '0'); + if (c >= 'A' && c <= 'F') + return (c - 'A') + 10; + if (c >= 'a' && c <= 'f') + return (c - 'a') + 10; + return 0; +} + +/** + * Test for string equality + * @param s1 string 1 + * @param s2 string 2 + * @return 0 if strings differ, 1 if equal + */ +static inline int rstreq(const char *s1, const char *s2) +{ + return (strcmp(s1, s2) == 0); +} + +/** + * Test for string equality + * @param s1 string 1 + * @param s2 string 2 + * @param n compare at most n characters + * @return 0 if strings differ, 1 if equal + */ +static inline int rstreqn(const char *s1, const char *s2, size_t n) +{ + return (strncmp(s1, s2, n) == 0); +} + +/** \ingroup rpmstring + * Locale insensitive strcasecmp(3). + */ +RPM_GNUC_PURE +int rstrcasecmp(const char * s1, const char * s2) ; + +/** \ingroup rpmstring + * Locale insensitive strncasecmp(3). + */ +RPM_GNUC_PURE +int rstrncasecmp(const char *s1, const char * s2, size_t n) ; + +/** \ingroup rpmstring + * asprintf() clone + */ +int rasprintf(char **strp, const char *fmt, ...) RPM_GNUC_PRINTF(2, 3); + +/** \ingroup rpmstring + * Concatenate two strings with dynamically (re)allocated memory. + * @param dest pointer to destination string + * @param src source string + * @return realloc'd dest with src appended + */ +char *rstrcat(char **dest, const char *src); + +/** \ingroup rpmstring + * Concatenate multiple strings with dynamically (re)allocated memory. + * @param dest pointer to destination string + * @param arg NULL terminated list of strings to concatenate + * @return realloc'd dest with strings appended + */ +char *rstrscat(char **dest, const char *arg, ...) RPM_GNUC_NULL_TERMINATED; + +/** \ingroup rpmstring + * strlcpy() clone: + * Copy src to string dest of size n. At most n-1 characters + * will be copied. Always zero-terminates (unless n == 0). + * Length of src is returned; if retval >= n, truncation occurred. + * @param dest destination buffer + * @param src string to copy + * @param n destination buffer size + * @return length of src string + */ +size_t rstrlcpy(char *dest, const char *src, size_t n); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMSTRING_H_ */ diff --git a/rpmio/rpmsw.c b/rpmio/rpmsw.c new file mode 100644 index 0000000..2a6d70a --- /dev/null +++ b/rpmio/rpmsw.c @@ -0,0 +1,131 @@ +/** \ingroup rpmio + * \file rpmio/rpmsw.c + */ + +#include "system.h" +#include +#include "debug.h" + +static rpmtime_t rpmsw_overhead = 0; + +static rpmtime_t rpmsw_cycles = 1; + +static int rpmsw_initialized = 0; + +rpmsw rpmswNow(rpmsw sw) +{ + if (!rpmsw_initialized) + (void) rpmswInit(); + if (sw == NULL) + return NULL; + if (gettimeofday(&sw->u.tv, NULL)) + return NULL; + return sw; +} + +/** \ingroup rpmio + * Return difference of 2 timeval stamps in micro-seconds. + * @param *etv end timeval + * @param *btv begin timeval + * @return difference in milli-seconds + */ +static inline +rpmtime_t tvsub(const struct timeval * etv, + const struct timeval * btv) +{ + time_t secs, usecs; + if (etv == NULL || btv == NULL) return 0; + secs = etv->tv_sec - btv->tv_sec; + for (usecs = etv->tv_usec - btv->tv_usec; usecs < 0; usecs += 1000000) + secs--; + return ((secs * 1000000) + usecs); +} + +rpmtime_t rpmswDiff(rpmsw end, rpmsw begin) +{ + unsigned long long ticks = 0; + + if (end == NULL || begin == NULL) + return 0; + ticks = tvsub(&end->u.tv, &begin->u.tv); + if (ticks >= rpmsw_overhead) + ticks -= rpmsw_overhead; + if (rpmsw_cycles > 1) + ticks /= rpmsw_cycles; + return ticks; +} + +rpmtime_t rpmswInit(void) +{ + struct rpmsw_s begin, end; + rpmtime_t sum_overhead = 0; + int i; + + rpmsw_initialized = 1; + + rpmsw_overhead = 0; + rpmsw_cycles = 0; + + /* Convergence for simultaneous cycles and overhead is overkill ... */ + for (i = 0; i < 3; i++) { + /* Calculate timing overhead in usecs. */ + (void) rpmswNow(&begin); + sum_overhead += rpmswDiff(rpmswNow(&end), &begin); + + rpmsw_overhead = sum_overhead/(i+1); + } + + return rpmsw_overhead; +} + +int rpmswEnter(rpmop op, ssize_t rc) +{ + if (op == NULL) + return 0; + + op->count++; + if (rc < 0) { + op->bytes = 0; + op->usecs = 0; + } + (void) rpmswNow(&op->begin); + return 0; +} + +rpmtime_t rpmswExit(rpmop op, ssize_t rc) +{ + struct rpmsw_s end; + + if (op == NULL) + return 0; + + op->usecs += rpmswDiff(rpmswNow(&end), &op->begin); + if (rc > 0) + op->bytes += rc; + op->begin = end; /* structure assignment */ + return op->usecs; +} + +rpmtime_t rpmswAdd(rpmop to, rpmop from) +{ + rpmtime_t usecs = 0; + if (to != NULL && from != NULL) { + to->count += from->count; + to->bytes += from->bytes; + to->usecs += from->usecs; + usecs = to->usecs; + } + return usecs; +} + +rpmtime_t rpmswSub(rpmop to, rpmop from) +{ + rpmtime_t usecs = 0; + if (to != NULL && from != NULL) { + to->count -= from->count; + to->bytes -= from->bytes; + to->usecs -= from->usecs; + usecs = to->usecs; + } + return usecs; +} diff --git a/rpmio/rpmsw.h b/rpmio/rpmsw.h new file mode 100644 index 0000000..7c285e7 --- /dev/null +++ b/rpmio/rpmsw.h @@ -0,0 +1,104 @@ +#ifndef H_RPMSW +#define H_RPMSW + +/** \ingroup rpmio + * \file rpmio/rpmsw.h + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmsw + */ +typedef unsigned long int rpmtime_t; + +/** \ingroup rpmsw + */ +typedef struct rpmsw_s * rpmsw; + +/** \ingroup rpmsw + */ +typedef struct rpmop_s * rpmop; + +/** \ingroup rpmsw + */ +struct rpmsw_s { + union { + struct timeval tv; + unsigned long long int ticks; + unsigned long int tocks[2]; + } u; +}; + +/** \ingroup rpmsw + * Cumulative statistics for an operation. + */ +struct rpmop_s { + struct rpmsw_s begin; /*!< Starting time stamp. */ + int count; /*!< Number of operations. */ + size_t bytes; /*!< Number of bytes transferred. */ + rpmtime_t usecs; /*!< Number of ticks. */ +}; + +/** \ingroup rpmsw + * Return benchmark time stamp. + * @param *sw time stamp + * @return 0 on success + */ +rpmsw rpmswNow(rpmsw sw); + +/** \ingroup rpmsw + * Return benchmark time stamp difference. + * @param *end end time stamp + * @param *begin begin time stamp + * @return difference in micro-seconds + */ +rpmtime_t rpmswDiff(rpmsw end, rpmsw begin); + +/** \ingroup rpmsw + * Return benchmark time stamp overhead. + * @return overhead in micro-seconds + */ +rpmtime_t rpmswInit(void); + +/** \ingroup rpmsw + * Enter timed operation. + * @param op operation statistics + * @param rc -1 clears usec counter + * @return 0 always + */ +int rpmswEnter(rpmop op, ssize_t rc); + +/** \ingroup rpmsw + * Exit timed operation. + * @param op operation statistics + * @param rc per-operation data (e.g. bytes transferred) + * @return cumulative usecs for operation + */ +rpmtime_t rpmswExit(rpmop op, ssize_t rc); + +/** \ingroup rpmsw + * Sum statistic counters. + * @param to result statistics + * @param from operation statistics + * @return cumulative usecs for operation + */ +rpmtime_t rpmswAdd(rpmop to, rpmop from); + +/** \ingroup rpmsw + * Subtract statistic counters. + * @param to result statistics + * @param from operation statistics + * @return cumulative usecs for operation + */ +rpmtime_t rpmswSub(rpmop to, rpmop from); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMSW */ diff --git a/rpmio/rpmurl.h b/rpmio/rpmurl.h new file mode 100644 index 0000000..3384bc4 --- /dev/null +++ b/rpmio/rpmurl.h @@ -0,0 +1,52 @@ +#ifndef H_RPMURL +#define H_RPMURL + +/** \ingroup rpmio + * \file rpmio/rpmurl.h + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** \ingroup rpmurl + * Supported URL types. + */ +typedef enum urltype_e { + URL_IS_UNKNOWN = 0, /*!< unknown (aka a file) */ + URL_IS_DASH = 1, /*!< stdin/stdout */ + URL_IS_PATH = 2, /*!< file://... */ + URL_IS_FTP = 3, /*!< ftp://... */ + URL_IS_HTTP = 4, /*!< http://... */ + URL_IS_HTTPS = 5, /*!< https://... */ + URL_IS_HKP = 6 /*!< hkp://... */ +} urltype; + +/** \ingroup rpmurl + * Return type of URL. + * @param url url string + * @return type of url + */ +urltype urlIsURL(const char * url); + +/** \ingroup rpmurl + * Return path component of URL. + * @param url url string + * @retval pathp pointer to path component of url + * @return type of url + */ +urltype urlPath(const char * url, const char ** pathp); + +/** \ingroup rpmurl + * Copy data from URL to local file. + * @param url url string of source + * @param dest file name of destination + * @return 0 on success, otherwise FTPERR_* code + */ +int urlGetFile(const char * url, const char * dest); + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMURL */ diff --git a/rpmio/rpmutil.h b/rpmio/rpmutil.h new file mode 100644 index 0000000..68a21f9 --- /dev/null +++ b/rpmio/rpmutil.h @@ -0,0 +1,159 @@ +#ifndef _RPMUTIL_H +#define _RPMUTIL_H + +#include + +/* + * Miscellanous utility macros: + * - portability wrappers for various gcc extensions like __attribute__() + * - ... + * + * Copied from glib, names replaced to avoid clashing with glib. + * + */ + +/* Here we provide RPM_GNUC_EXTENSION as an alias for __extension__, + * where this is valid. This allows for warningless compilation of + * "long long" types even in the presence of '-ansi -pedantic'. + */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) +# define RPM_GNUC_EXTENSION __extension__ +#else +# define RPM_GNUC_EXTENSION +#endif + +/* Provide macros to feature the GCC function attribute. + */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +#define RPM_GNUC_PURE \ + __attribute__((__pure__)) +#define RPM_GNUC_MALLOC \ + __attribute__((__malloc__)) +#else +#define RPM_GNUC_PURE +#define RPM_GNUC_MALLOC +#endif + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) +#define RPM_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x))) +#define RPM_GNUC_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y))) +#else +#define RPM_GNUC_ALLOC_SIZE(x) +#define RPM_GNUC_ALLOC_SIZE2(x,y) +#endif + +#if __GNUC__ >= 4 +#define RPM_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) +#else +#define RPM_GNUC_NULL_TERMINATED +#endif + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) +#define RPM_GNUC_PRINTF( format_idx, arg_idx ) \ + __attribute__((__format__ (__printf__, format_idx, arg_idx))) +#define RPM_GNUC_SCANF( format_idx, arg_idx ) \ + __attribute__((__format__ (__scanf__, format_idx, arg_idx))) +#define RPM_GNUC_FORMAT( arg_idx ) \ + __attribute__((__format_arg__ (arg_idx))) +#define RPM_GNUC_NORETURN \ + __attribute__((__noreturn__)) +#define RPM_GNUC_CONST \ + __attribute__((__const__)) +#define RPM_GNUC_UNUSED \ + __attribute__((__unused__)) +#define RPM_GNUC_NO_INSTRUMENT \ + __attribute__((__no_instrument_function__)) +#else /* !__GNUC__ */ +#define RPM_GNUC_PRINTF( format_idx, arg_idx ) +#define RPM_GNUC_SCANF( format_idx, arg_idx ) +#define RPM_GNUC_FORMAT( arg_idx ) +#define RPM_GNUC_NORETURN +#define RPM_GNUC_CONST +#define RPM_GNUC_UNUSED +#define RPM_GNUC_NO_INSTRUMENT +#endif /* !__GNUC__ */ + +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +#define RPM_GNUC_DEPRECATED \ + __attribute__((__deprecated__)) +#else +#define RPM_GNUC_DEPRECATED +#endif /* __GNUC__ */ + +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) +#define RPM_GNUC_MAY_ALIAS __attribute__((may_alias)) +#define RPM_GNUC_NONNULL( ... ) \ + __attribute__((__nonnull__ (__VA_ARGS__))) +#else +#define RPM_GNUC_MAY_ALIAS +#define RPM_GNUC_NONNULL( ... ) +#endif + +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +#define RPM_GNUC_WARN_UNUSED_RESULT \ + __attribute__((warn_unused_result)) +#else +#define RPM_GNUC_WARN_UNUSED_RESULT +#endif /* __GNUC__ */ + +#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) +# define RPM_GNUC_INTERNAL __attribute__((visibility("hidden"))) +#else +# define RPM_GNUC_INTERNAL +#endif + + +/* Guard C code in headers, while including them from C++ */ +#ifdef __cplusplus +# define RPM_BEGIN_DECLS extern "C" { +# define RPM_END_DECLS } +#else +# define RPM_BEGIN_DECLS +# define RPM_END_DECLS +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Rpm specific allocators which never return NULL but terminate on failure */ +RPM_GNUC_MALLOC RPM_GNUC_ALLOC_SIZE(1) +void * rmalloc(size_t size); + +RPM_GNUC_MALLOC RPM_GNUC_ALLOC_SIZE2(1,2) +void * rcalloc(size_t nmemb, size_t size); + +RPM_GNUC_ALLOC_SIZE(2) +void * rrealloc(void *ptr, size_t size); + +char * rstrdup(const char *str); + +/* Rpm specific free() which returns NULL */ +void * rfree(void *ptr); + +/** \ingroup rpmutil + * Memory allocation failure callback prototype. When registered through + * rpmSetMemFail(), this gets called if memory allocation through rmalloc() + * and friends fails. If the application can somehow recover memory here, + * it can return a newly allocated memory block of requested size, otherwise + * it must return NULL after performing it's own shutdown deeds or + * terminate itself. + * @param size Size of allocation request in bytes + * @param data User data (or NULL) + * @return Allocated memory block of requested size or NULL + */ +typedef void * (*rpmMemFailFunc) (size_t size, void *data); + +/** \ingroup rpmutil + * Set memory allocation failure callback. + * @param func Allocation failure callback function + * @param data User data (or NULL) + * @return Previous callback function + */ +rpmMemFailFunc rpmSetMemFail(rpmMemFailFunc func, void *data); + +#ifdef __cplusplus +} +#endif + +#endif /* _RPMUTIL_H */ diff --git a/rpmio/url.c b/rpmio/url.c new file mode 100644 index 0000000..c609fd1 --- /dev/null +++ b/rpmio/url.c @@ -0,0 +1,127 @@ +/** \ingroup rpmio + * \file rpmio/url.c + */ + +#include "system.h" + +#include + +#include +#include +#include +#include +#include +#include + +#include "debug.h" + +/** + */ +static struct urlstring { + const char * leadin; + urltype ret; +} const urlstrings[] = { + { "file://", URL_IS_PATH }, + { "ftp://", URL_IS_FTP }, + { "hkp://", URL_IS_HKP }, + { "http://", URL_IS_HTTP }, + { "https://", URL_IS_HTTPS }, + { NULL, URL_IS_UNKNOWN } +}; + +urltype urlIsURL(const char * url) +{ + const struct urlstring *us; + + if (url && *url) { + for (us = urlstrings; us->leadin != NULL; us++) { + if (!rstreqn(url, us->leadin, strlen(us->leadin))) + continue; + return us->ret; + } + if (rstreq(url, "-")) + return URL_IS_DASH; + } + + return URL_IS_UNKNOWN; +} + +/* Return path portion of url (or pointer to NUL if url == NULL) */ +urltype urlPath(const char * url, const char ** pathp) +{ + const char *path; + urltype type; + + path = url; + type = urlIsURL(url); + switch (type) { + case URL_IS_FTP: + url += sizeof("ftp://") - 1; + path = strchr(url, '/'); + if (path == NULL) path = url + strlen(url); + break; + case URL_IS_PATH: + url += sizeof("file://") - 1; + path = strchr(url, '/'); + if (path == NULL) path = url + strlen(url); + break; + case URL_IS_HKP: + url += sizeof("hkp://") - 1; + path = strchr(url, '/'); + if (path == NULL) path = url + strlen(url); + break; + case URL_IS_HTTP: + url += sizeof("http://") - 1; + path = strchr(url, '/'); + if (path == NULL) path = url + strlen(url); + break; + case URL_IS_HTTPS: + url += sizeof("https://") - 1; + path = strchr(url, '/'); + if (path == NULL) path = url + strlen(url); + break; + case URL_IS_UNKNOWN: + if (path == NULL) path = ""; + break; + case URL_IS_DASH: + path = ""; + break; + } + if (pathp) + *pathp = path; + return type; +} + +int urlGetFile(const char * url, const char * dest) +{ + char *cmd = NULL; + const char *target = NULL; + char *urlhelper = NULL; + int rc; + pid_t pid, wait; + + urlhelper = rpmExpand("%{?_urlhelper}", NULL); + + if (dest == NULL) { + urlPath(url, &target); + } else { + target = dest; + } + + /* XXX TODO: sanity checks like target == dest... */ + + rasprintf(&cmd, "%s %s %s", urlhelper, target, url); + urlhelper = _free(urlhelper); + + if ((pid = fork()) == 0) { + ARGV_t argv = NULL; + argvSplit(&argv, cmd, " "); + execvp(argv[0], argv); + exit(127); /* exit with 127 for compatibility with bash(1) */ + } + wait = waitpid(pid, &rc, 0); + cmd = _free(cmd); + + return rc; + +} diff --git a/rpmkeys.c b/rpmkeys.c new file mode 100644 index 0000000..b91bb27 --- /dev/null +++ b/rpmkeys.c @@ -0,0 +1,84 @@ +#include "system.h" + +#include +#include +#include "cliutils.h" +#include "debug.h" + +#if !defined(__GLIBC__) && !defined(__APPLE__) +char ** environ = NULL; +#endif + +enum modes { + MODE_CHECKSIG = (1 << 0), + MODE_IMPORTKEY = (1 << 1), + MODE_DELKEY = (1 << 2), + MODE_LISTKEY = (1 << 3), +}; + +static int mode = 0; + +static struct poptOption keyOptsTable[] = { + { "checksig", 'K', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_CHECKSIG, + N_("verify package signature(s)"), NULL }, + { "import", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_IMPORTKEY, + N_("import an armored public key"), NULL }, +#if 0 + { "delete-key", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_DELKEY, + N_("list keys from RPM keyring"), NULL }, + { "list-keys", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_LISTKEY, + N_("list keys from RPM keyring"), NULL }, +#endif + POPT_TABLEEND +}; + +static struct poptOption optionsTable[] = { + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, keyOptsTable, 0, + N_("Keyring options:"), NULL }, + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0, + N_("Common options for all rpm modes and executables:"), NULL }, + + POPT_AUTOALIAS + POPT_AUTOHELP + POPT_TABLEEND +}; + +int main(int argc, char *argv[]) +{ + int ec = EXIT_FAILURE; + poptContext optCon = rpmcliInit(argc, argv, optionsTable); + rpmts ts = rpmtsCreate(); + ARGV_const_t args = NULL; + + if (argc < 2) { + printUsage(optCon, stderr, 0); + goto exit; + } + + args = (ARGV_const_t) poptGetArgs(optCon); + + if (mode != MODE_LISTKEY && args == NULL) + argerror(_("no arguments given")); + + rpmtsSetRootDir(ts, rpmcliRootDir); + + switch (mode) { + case MODE_CHECKSIG: + ec = rpmcliVerifySignatures(ts, args); + break; + case MODE_IMPORTKEY: + ec = rpmcliImportPubkeys(ts, args); + break; + /* XXX TODO: actually implement these... */ + case MODE_DELKEY: + case MODE_LISTKEY: + break; + default: + argerror(_("only one major mode may be specified")); + } + +exit: + rpmtsFree(ts); + rpmcliFini(optCon); + return ec; +} diff --git a/rpmpopt.in b/rpmpopt.in new file mode 100644 index 0000000..cd66011 --- /dev/null +++ b/rpmpopt.in @@ -0,0 +1,202 @@ +#/*! \page config_rpmpopt Default configuration: @RPMCONFIGDIR@/rpmpopt-@VERSION@ +# \verbatim +# +# This file *should not be modified*. Local customizations +# belong in /etc/popt, not here. This file will be replaced +# whenever a new version of RPM is installed. +# +# Note: Not all popt aliases are documented. This is a decision on my +# part as to which are the more important aliases. Feel free to clip +# a copy of the alias/exec here and place in /etc/popt or ~/.popt with +# your own words added. It's easier than arguing about how many options +# fit on the head of an executable :-) +# + +rpm alias --scripts --qf '\ +%|PRETRANS?{pretrans scriptlet\ +%|PRETRANSPROG?{ (using %{PRETRANSPROG})}|:\n%{PRETRANS}\n}:\ +{%|PRETRANSPROG?{pretrans program: %{PRETRANSPROG}\n}|}|\ +\ +%|PREIN?{preinstall scriptlet\ +%|PREINPROG?{ (using %{PREINPROG})}|:\n%{PREIN}\n}:\ +{%|PREINPROG?{preinstall program: %{PREINPROG}\n}|}|\ +\ +%|POSTIN?{postinstall scriptlet\ +%|POSTINPROG?{ (using %{POSTINPROG})}|:\n%{POSTIN}\n}:\ +{%|POSTINPROG?{postinstall program: %{POSTINPROG}\n}|}|\ +\ +%|PREUN?{preuninstall scriptlet\ +%|PREUNPROG?{ (using %{PREUNPROG})}|:\n%{PREUN}\n}:\ +{%|PREUNPROG?{preuninstall program: %{PREUNPROG}\n}|}|\ +\ +%|POSTUN?{postuninstall scriptlet\ +%|POSTUNPROG?{ (using %{POSTUNPROG})}|:\n%{POSTUN}\n}:\ +{%|POSTUNPROG?{postuninstall program: %{POSTUNPROG}\n}|}|\ +\ +%|POSTTRANS?{posttrans scriptlet\ +%|POSTTRANSPROG?{ (using %{POSTTRANSPROG})}|:\n%{POSTTRANS}\n}:\ +{%|POSTTRANSPROG?{posttrans program: %{POSTTRANSPROG}\n}|}|\ +\ +%|VERIFYSCRIPT?{verify scriptlet:\n%{VERIFYSCRIPT}\n}|\ +' \ + --POPTdesc=$"list install/erase scriptlets from package(s)" + +rpm alias --setperms -q --qf '[\[ -L %{FILENAMES:shescape} \] || chmod %7.7{FILEMODES:octal} %{FILENAMES:shescape}\n]' \ + --pipe "grep -v \(none\) | grep '^. -L ' | sed 's/chmod .../chmod /' | sh" \ + --POPTdesc=$"set permissions of files in a package" + +rpm alias --setugids -q --qf \ + '[ch %{FILEUSERNAME:shescape} %{FILEGROUPNAME:shescape} %{FILENAMES:shescape}\n]' \ + --pipe "(echo 'ch() { chown -h -- \"$1\" \"$3\";chgrp -h -- \"$2\" \"$3\"; }';grep '^ch '|grep -v \(none\))|sh" \ + --POPTdesc=$"set user/group ownership of files in a package" + +rpm alias --conflicts --qf \ + "[%|VERBOSE?{%{CONFLICTFLAGS:deptype}: }:{}|%{CONFLICTNAME} %{CONFLICTFLAGS:depflags} %{CONFLICTVERSION}\n]" \ + --POPTdesc=$"list capabilities this package conflicts with" +rpm alias --obsoletes --qf \ + "[%|VERBOSE?{%{OBSOLETEFLAGS:deptype}: }:{}|%{OBSOLETENAME} %|OBSOLETEFLAGS?{%{OBSOLETEFLAGS:depflags} %{OBSOLETEVERSION}}:{}|\n]" \ + --POPTdesc=$"list other packages removed by installing this package" +rpm alias --provides --qf \ + "[%|VERBOSE?{%{PROVIDEFLAGS:deptype}: }:{}|%{PROVIDENAME} %|PROVIDEFLAGS?{%{PROVIDEFLAGS:depflags} %{PROVIDEVERSION}}:{}|\n]" \ + --POPTdesc=$"list capabilities that this package provides" + +rpm alias --requires --qf \ + "[%|VERBOSE?{%{REQUIREFLAGS:deptype}: }:{}|%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}\n]" \ + --POPTdesc=$"list capabilities required by package(s)" +rpm alias -R --requires + +rpm alias --info --qf '\ +Name : %{NAME}\n\ +%|EPOCH?{Epoch : %{EPOCH}\n}|\ +Version : %{VERSION}\n\ +Release : %{RELEASE}\n\ +Architecture: %{ARCH}\n\ +Install Date: %|INSTALLTIME?{%{INSTALLTIME:date}}:{(not installed)}|\n\ +Group : %{GROUP}\n\ +Size : %{LONGSIZE}\n\ +%|LICENSE?{License : %{LICENSE}}|\n\ +Signature : %|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|\n\ +Source RPM : %{SOURCERPM}\n\ +Build Date : %{BUILDTIME:date}\n\ +Build Host : %{BUILDHOST}\n\ +Relocations : %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\ +%|PACKAGER?{Packager : %{PACKAGER}\n}|\ +%|VENDOR?{Vendor : %{VENDOR}\n}|\ +%|URL?{URL : %{URL}\n}|\ +%|BUGURL?{Bug URL : %{BUGURL}\n}|\ +Summary : %{SUMMARY}\n\ +Description :\n%{DESCRIPTION}\n' \ + --POPTdesc=$"list descriptive information from package(s)" + +rpm alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \ + --POPTdesc=$"list change logs for this package" + +rpm alias --xml --qf '[%{*:xml}\n]' \ + --POPTdesc=$"list metadata in xml" + +rpm alias --triggerscripts --qf '\ +[trigger%{TRIGGERTYPE} scriptlet (using %{TRIGGERSCRIPTPROG}) -- %{TRIGGERCONDS}\n\ +%{TRIGGERSCRIPTS}\n]' +rpm alias --triggers --triggerscripts \ + --POPTdesc=$"list trigger scriptlets from package(s)" + +rpm alias --last --qf '%|INSTALLTIME?{%{INSTALLTIME}}:{000000000}| %{NAME}-%{VERSION}-%{RELEASE} %|INSTALLTIME?{%{INSTALLTIME:date}}:{(not installed)}|\n' \ + --pipe "sort -r -n | sed 's,^[0-9]\+ ,,' | awk '{printf(\"%-45s %-s\n\", $1, substr($0,length($1)+2))}' " \ + --POPTdesc=$"list package(s) by install time, most recent first" + +rpm alias --dupes --qf '%|SOURCERPM?{%{name}.%{arch}}:{%|ARCH?{%{name}}:{%{name}-%{version}}|}|\n' --pipe "sort | uniq -d" \ + --POPTdesc=$"list duplicated packages" + +rpm alias --filesbypkg --qf '[%-25{=NAME} %{FILENAMES}\n]' \ + --POPTdesc=$"list all files from each package" + +rpm alias --fileclass --qf '[%{FILENAMES}\t%{FILECLASS}\n]' \ + --POPTdesc=$"list file names with classes" + +rpm alias --filecolor --qf '[%{FILENAMES}\t%{FILECOLORS}\n]' \ + --POPTdesc=$"list file names with colors" + +rpm alias --fscontext --qf '[%{FILENAMES}\n]' \ + --pipe "xargs ls --scontext | awk '{printf(\"%s %s\n\", $2, $1)}'" \ + --POPTdesc=$"list file names with security context from file system" + +rpm alias --fileprovide --qf '[%{FILENAMES}\t%{FILEPROVIDE}\n]' \ + --POPTdesc=$"list file names with provides" + +rpm alias --filerequire --qf '[%{FILENAMES}\t%{FILEREQUIRE}\n]' \ + --POPTdesc=$"list file names with requires" + +rpm alias --filecaps --qf '[%{FILENAMES}\t%|FILECAPS?{%{FILECAPS}}|\n]' \ + --POPTdesc=$"list file names with POSIX1.e capabilities" + +# colon separated i18n domains to use as PO catalogue lookaside for +# retrieving header group/description/summary. +rpm alias --i18ndomains --define '_i18ndomains !#:+' + +#============================================================================== +# [--ftpport ] "port number of ftp server (or proxy)" +rpm alias --ftpport --define '_httpport !#:+' +# [--ftpproxy ] "hostname or IP of ftp proxy" +rpm alias --ftpproxy --define '_httpproxy !#:+' +# [--httpport ] "port number of http server (or proxy)" +rpm alias --httpport --define '_httpport !#:+' +# [--httpproxy ] "hostname or IP of http proxy" +rpm alias --httpproxy --define '_httpproxy !#:+' + +# Minimally preserve commonly used switches from cli split-up +rpm exec --addsign rpmsign --addsign +rpm exec --delsign rpmsign --delsign +rpm exec --resign rpmsign --resign +rpm exec --checksig rpmkeys --checksig +rpm exec -K rpmkeys --checksig +rpm exec --import rpmkeys --import +rpm exec --initdb rpmdb --initdb +rpm exec --rebuilddb rpmdb --rebuilddb +rpm exec --verifydb rpmdb --verifydb +rpm exec --specfile rpmspec -q + +#============================================================================== +rpmbuild alias --ftpport --define '_httpport !#:+' +rpmbuild alias --ftpproxy --define '_httpproxy !#:+' +rpmbuild alias --httpport --define '_httpport !#:+' +rpmbuild alias --httpproxy --define '_httpproxy !#:+' +rpmbuild alias --with --define "_with_!#:+ --with-!#:+" \ + --POPTdesc=$"enable configure